/**
* Preprocesses html-files
*/
const fs = require("fs"),
{ JSDOM } = require('jsdom'),
// ressources
defaultCss = "/glob/style.sass", // the default style that is embedded in every html
defaultJs = "/glob/script.js"; // the default script that is embedded in every html
/**
* Creates a css DOM element with href as source
* @param {Object} document A html DOM
* @param {String} href the source of the css file
* @return {Object} the Link Element
*/
function createLinkElement(document, href) {
let link = document.createElement('link');
link.setAttribute("rel", "stylesheet");
link.setAttribute("type", "text/css");
link.setAttribute("href", href);
return link;
}
/**
* Creates a javascript Script DOM element with src as source
* @param {Object} document A html DOM
* @param {String} src the source of the javascript file
* @return {Object} the Script Element
*/
function createScriptLinkElement(document, src) {
let script = document.createElement("script");
script.setAttribute("type", "text/javascript");
script.setAttribute("src", src);
return script;
}
/**
* Formats the html string by adding a link to the standard css and to the standard javascript file.
* @return {String} A html-string that represents a document.
* @param filename
*/
exports.formatHtml = function (filename) {
let htmlstring = fs.readFileSync(filename);
try {
let dom = new JSDOM(htmlstring); // creates a dom from the html string
let document = dom.window.document;
let head = document.getElementsByTagName('head')[0]; // gets the documents head
head.prepend(createLinkElement(document, defaultCss)); // prepend the default css to the head
head.prepend(createScriptLinkElement(document, defaultJs)); // prepend the default script to the head
head.prepend(createScriptLinkElement(document, "/glob/jquery.js")); // prepend the JQuery to the head
head.prepend(createScriptLinkElement(document, "/glob/vue.js")); // prepend the Vue to the head
return dom.serialize(); // return a string of the document
} catch (error) {
console.error(error);
return htmlstring;
}
};