From 472e54237ef8bf17b31b9f68ce87c43968fa323b Mon Sep 17 00:00:00 2001 From: Emmanuel Pelletier Date: Thu, 2 May 2024 10:52:57 +0200 Subject: [PATCH] stop using prettier only to indent our html it weighted *a lot* just for that. now we use a tiny function that only break lines between html tags, not as good but the JS weight gain is huge --- website/src/components/HomepageGenerator.tsx | 45 ++++++++++++-------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/website/src/components/HomepageGenerator.tsx b/website/src/components/HomepageGenerator.tsx index 98ef1ef..1829058 100644 --- a/website/src/components/HomepageGenerator.tsx +++ b/website/src/components/HomepageGenerator.tsx @@ -8,8 +8,6 @@ import { HomepageEmailOrProconnect, HomepageProconnect, } from "@gouvfr-lasuite/integration" -import * as prettier from "prettier/standalone" -import prettierHtml from "prettier/plugins/html" const defaultFormData = { serviceId: "", @@ -53,12 +51,6 @@ const homepageTypes = { export default function HomepageGenerator() { const [codeData, setCodeData] = useState(defaultFormData) - const [htmlMarkup, setHtmlMarkup] = useState("") - useEffect(() => { - getHTMLMarkup(codeData).then((html) => { - setHtmlMarkup(html) - }) - }, [codeData]) return (
@@ -154,7 +146,7 @@ export default function HomepageGenerator() {

Code HTML correspondant

- {htmlMarkup} + {getHTMLMarkup(codeData)}
@@ -226,12 +218,31 @@ const getHTMLMarkup = (codeData: any) => { ) const markup = renderToStaticMarkup(Component) - return prettier.format(markup, { - parser: "html", - plugins: [prettierHtml], - printWidth: 100, - tabWidth: 4, - bracketSameLine: false, - htmlWhitespaceSensitivity: "ignore", - }) + if (typeof window === "undefined") { + return markup + } + const div = document.createElement("div") + div.innerHTML = markup + return reIndent(div, 0).innerHTML.trim() +} + +// https://stackoverflow.com/a/26361620/257559 +const reIndent = (node: Element, level: number) => { + const indentBefore = new Array(level++ + 1).join(" ") + const indentAfter = new Array(level - 1).join(" ") + let textNode: Text + + for (let i = 0; i < node.children.length; i++) { + textNode = document.createTextNode("\n" + indentBefore) + node.insertBefore(textNode, node.children[i]) + + reIndent(node.children[i], level) + + if (node.lastElementChild == node.children[i]) { + textNode = document.createTextNode("\n" + indentAfter) + node.appendChild(textNode) + } + } + + return node }