UNPKG

@sujalchoudhari/solaris-ui

Version:

A UI framework to create HTML pages with just JavaScript.

106 lines 5.14 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.SolarisUI = void 0; const components_1 = require("./components"); const fs_1 = __importDefault(require("fs")); const filemanager_1 = __importDefault(require("./utils/filemanager")); const logger_1 = __importDefault(require("./utils/logger")); const atom_1 = require("./atom"); const stylemanager_1 = __importDefault(require("./utils/stylemanager")); const scriptmanager_1 = __importDefault(require("./utils/scriptmanager")); const path_1 = __importDefault(require("path")); /** * @class Sloaris * A UI framework to create HTML pages with just JavaScript. * This component is responsible for building the entire UI framework. * @license MIT license * @author Sujal Choudhari <sujalchoudari@gmail.com> */ class SolarisUI { // Load Components using Atom and Atomizer // TODO: Reload and recompile the entire UI when the config changes. // Utility functions static createPage(title, url, meta, defaultPageTemplateFolderIndex, defaultBodyTemplateFolderIndex, defaultHeadTemplateFolderIndex) { const headComponent = new atom_1.Atom(atom_1.Atomizer.templates[defaultHeadTemplateFolderIndex || 0].head, { title: title, meta: meta, templatestyles: ` <link rel="stylesheet" href="./userStyles.css"> ` }); const bodyComponent = new atom_1.Atom(atom_1.Atomizer.templates[defaultBodyTemplateFolderIndex || 0].body, { templateScripts: ` <script src="./userScripts.js"></script> ` }); const pageAtom = new atom_1.Atom(atom_1.Atomizer.templates[defaultPageTemplateFolderIndex || 0].page, { head: headComponent, body: bodyComponent }); const page = atom_1.Atomizer.buildComponentTree(pageAtom.toString()); page.setAttribute("id", url); return page; } /** * Builds the pages in the project. * @param name The name of the project. * @param pages The pages of the project. */ static buildProject(name, pages) { logger_1.default.start(); // Create FileManager object const fm = new filemanager_1.default(); // Create build directory if it doesn't exist if (!fs_1.default.existsSync("builds")) { fm.createDirectory("builds"); } // Remove existing build directory and create new one logger_1.default.info(__filename, "Clearing the build directory"); fm.removeDirectory(`builds/${name}`, true); fm.createDirectory(`builds/${name}`); // Create templates directory and copy template files logger_1.default.info(__filename, "Creating template files"); const templateDirectory = `builds/${name}/templates/`; if (fs_1.default.existsSync(templateDirectory)) { fm.removeDirectory(templateDirectory); } fm.createDirectory(templateDirectory); Array.from(new Set(atom_1.Atomizer.templateFilesToInclude)).forEach((file) => { fm.copyFile(file, templateDirectory); const baseName = path_1.default.basename(file); const extension = path_1.default.extname(file); if (extension == ".js") { new components_1.Script("external", `./templates/${baseName}`); } else if (extension == ".css") { new components_1.Style("external", `./templates/${baseName}`); } console.log(baseName, extension); }); // Create HTML files logger_1.default.info(__filename, "Creating HTML files"); const styles = new Set(stylemanager_1.default.getExternalStyles()); const scripts = new Set(scriptmanager_1.default.getExternalScripts()); pages.forEach((page) => { page.children[0].addChildren(...Array.from(styles).map((style) => new components_1.Component("link", { rel: "stylesheet", href: style.url }))); page.children[1].addChildren(...Array.from(scripts).map((script) => new components_1.Component("script", { src: script.url, ...(script.params) }))); fm.createFile(`builds/${name}/${page.getAttribute("id")}`, page.toString()); }); // Create CSS file logger_1.default.info(__filename, "Creating CSS files"); const minifiedCSS = stylemanager_1.default.toString(); if (minifiedCSS) { fm.createFile(`builds/${name}/userStyles.css`, minifiedCSS); } // Create JS file logger_1.default.info(__filename, "Creating JS files"); const minifiedJS = scriptmanager_1.default.toString(); if (minifiedJS) { fm.createFile(`builds/${name}/userScripts.js`, minifiedJS); } // Copy public folder logger_1.default.info(__filename, "Copying public folders"); fm.copyTree("public", `builds/${name}/`); logger_1.default.time(__filename, "Build completed in"); } } exports.SolarisUI = SolarisUI; //# sourceMappingURL=solaris.js.map