DivBucket / src / utils / treeFunctions.js
treeFunctions.js
Raw
const cssMap = [
  ["width", "width"],
  ["min-width", "minWidth"],
  ["max-width", "maxWidth"],
  ["height", "height"],
  ["max-height", "maxHeight"],
  ["min-height", "minHeight"],
  ["display", "display"],
  ["flex-direction", "flexDirection"],
  ["justify-content", "justifyContent"],
  ["align-items", "alignItems"],
  ["gap", "gap"],
  ["flex-wrap", "flexWrap"],
  ["margin-top", "marginTop"],
  ["margin-right", "marginRight"],
  ["margin-bottom", "marginBottom"],
  ["margin-left", "marginLeft"],
  ["padding-top", "paddingTop"],
  ["padding-right", "paddingRight"],
  ["padding-bottom", "paddingBottom"],
  ["padding-left", "paddingLeft"],
  ["font-weight", "fontWeight"],
  ["font-size", "fontSize"],
  ["background", "background"],
  ["font-family", "fontFamily"],
  ["font-style", "fontStyle"],
  ["text-decoration", "textDecoration"],
  ["font-variant", "fontVariant"],
  ["border-width", "borderWidth"],
  ["border-style", "borderStyle"],
  ["border-color", "borderColor"],
  ["color", "color"],
];

export function generateCode({ tab, tree, dataMap, styleMap }) {
  let cind = 0;
  let css = `* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

body {
  font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;
}

`;

  const work = (id, spacing) => {
    cind++;
    let html = "";
    css += `${
      dataMap[id].type === "root" ? "body" : "." + dataMap[id].name + "_" + cind
    }{\n`;
    cssMap.map(
      ([x, y]) => {
        if(dataMap[id].type !== 'root' || (y !== 'width' && y!=='minWidth'))
        css += styleMap[id][y] ? "  "+x + ": " + styleMap[id][y] + `;\n` :'';
      }
    );
    css+=`}\n`;


    if (dataMap[id].type === "root") {
      html = `${spacing}<body>${tree[id].length ? "\n\n" : ""}`;
      tree[id].map((tab) => {
        html += work(tab, spacing + "         ");
      });
      html += `${tree[id].length ? `\n${spacing}` : ""}</body>\n`;
    } else if (dataMap[id].type === "Block") {
      html = `${spacing}<div class='${dataMap[id].name + "_" + cind}'>${
        tree[id].length ? "\n\n" : ""
      }`;
      tree[id].map((tab) => {
        html += work(tab, spacing + "         ");
      });
      html += `${tree[id].length ? `\n${spacing}` : ""}</div>\n`;
    } else if (dataMap[id].type === "Row") {
      html = `${spacing}<div class='${dataMap[id].name + "_" + cind}'>${
        tree[id].length ? "\n\n" : ""
      }`;
      tree[id].map((tab) => {
        html += work(tab, spacing + "         ");
      });
      html += `${tree[id].length ? `\n${spacing}` : ""}</div>\n`;
    } else if (dataMap[id].type === "Heading") {
      html = `${spacing}<div class='${dataMap[id].name + "_" + cind}'>`;
      html += `${dataMap[id].content}`;
      html += `</div>\n`;
    } else if (dataMap[id].type === "Text") {
      html = `${spacing}<div class='${dataMap[id].name + "_" + cind}'>`;
      html += `${dataMap[id].content}`;
      html += `</div>\n`;
    } else if (dataMap[id].type === "Paragraph") {
      html = `${spacing}<div class='${dataMap[id].name + "_" + cind}'>`;
      html += `${dataMap[id].content}`;
      html += `</div>\n`;
    } else if (dataMap[id].type === "Image") {
      html = `${spacing}<img class='${dataMap[id].name + "_" + cind}' alt='${
        dataMap[id].alt
      }' src='${dataMap[id].src}' />\n`;
    } else if (dataMap[id].type === "Video") {
    }

    return html;
  };

  let html = `<!DOCTYPE html>
<html lang="en">
<head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link rel="stylesheet" href="style.css">
        <title>${dataMap[tab].name}</title>
</head>
`;
  html += work(tab, "");
  html += `</html>`;

  return { html, css };
}