Ένα εργαλείο μεταγλώττισης διάταξης σελίδας είναι μια μονάδα NodeJS (CommonJS) JavaScript που μεταγλωττίζει την αντίστοιχη διάταξη σελίδας.
Το εργαλείο μεταγλώττισης διάταξης σελίδας για μια συγκεκριμένη διάταξη σελίδας ορίζεται μέσω του συσχετισμού ονόματος με μια επέκταση -compile.js
:
src
themes
<yourTheme>
layouts
<yourPageLayout>.html
<yourPageLayout>-compile.js
Εάν δεν υπάρχει -compile.js
για μια διάταξη σελίδας, τότε δεν εφαρμόζεται κάποιο προσαρμοσμένο εργαλείο μεταγλώττισης.
Ένα εργαλείο μεταγλώττισης διάταξης σελίδας χρειάζεται να υλοποιήσει ένα περιβάλλον εργασίας compile()
, το οποίο επιστρέφει μια τιμή Promise, για παράδειγμα, about-compile.js
:
var mustache = require('mustache'); var PageCompiler = function () {}; PageCompiler.prototype.compile = function (args) { var self = this, layoutMarkup = args.layoutMarkup; self.SCSCompileAPI = args.SCSCompileAPI; return new Promise function (resolve, reject) { var compiledPage = layoutMarkup, id = self.SCSCompileAPI.navigationRoot; // page is compiled so there is no FOUC, can remove the opacity workaround compiledPage = compiledPage.replace('opacity: 0;', 'opacity: 1;'); // remove the dynamic menu creation, we'll be compiling it here compiledPage = compiledPage.replace('<script src="_scs_theme_root_/assets/js/topnav.js"></script>', ''); // add link to Home page. . . var homePageURL = (self.SCSCompileAPI.getPageLinkData(id) || {}).href; if (homePageURL) { compiledPage = compiledPage.replace('class="navbar-brand" href="#"', 'class="navbar-brand" href="' + homePageURL + '"'); } // build the menu and add it to the page var navMenu = self.createNavMenu(); compiledPage = compiledPage.replace('<!-- navigation menu goes in here -->', navMenu); // return the compiled page resolve(compiledPage); }); }; // Create the navigation menu that was previously dynamically generated on each page PageCompiler.prototype.createNavMenu = function () { . . . } module.exports = new PageCompiler();