Compilateurs de mise en page

Un compilateur de mise en page est un module JavaScript NodeJS (CommonJS) qui compile la mise en page correspondante.

Le compilateur d'une mise en page spécifique est défini par association de noms avec une extension -compile.js :

  • src
    • themes
      • <yourTheme>
        • layouts
          • <yourPageLayout>.html
          • <yourPageLayout>-compile.js

Si aucune extension -compile.js n'existe pour une mise en page, aucune compilation personnalisée n'est appliquée.

Un compilateur de mise en page doit implémenter une interface compile() qui renvoie une promesse. Par exemple, 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();