Ένα εργαλείο μεταγλώττισης διάταξης σελίδας είναι μια μονάδα 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();