Εργαλεία μεταγλώττισης διάταξης σελίδας

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