ページ・レイアウト・コンパイラは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();