ページ・レイアウト・コンパイラ

ページ・レイアウト・コンパイラはNodeJS (CommonJS) JavaScriptモジュールであり、対応するページ・レイアウトをコンパイルします。

特定のページ・レイアウトのページ・レイアウト・コンパイラは、-compile.js拡張機能との名前の関連付けによって定義されます。

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

-compile.jsがページ・レイアウトに対して存在しない場合、カスタム・コンパイルが適用されません。

ページ・レイアウト・コンパイラはcompile()インタフェースを実装する必要があり、これは、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();