mirror of
https://github.com/Feodor2/Mypal68.git
synced 2025-06-18 14:55:44 -04:00
106 lines
4.1 KiB
JavaScript
106 lines
4.1 KiB
JavaScript
/* eslint-disable no-console */
|
|
const fs = require("fs");
|
|
const {mkdir} = require("shelljs");
|
|
const path = require("path");
|
|
|
|
// Note: DEFAULT_OPTIONS.baseUrl should match BASE_URL in aboutNewTabService.js
|
|
// in mozilla-central.
|
|
const DEFAULT_OPTIONS = {
|
|
addonPath: "..",
|
|
baseUrl: "resource://activity-stream/",
|
|
};
|
|
|
|
/**
|
|
* templateHTML - Generates HTML for activity stream, given some options and
|
|
* prerendered HTML if necessary.
|
|
*
|
|
* @param {obj} options
|
|
* {str} options.baseUrl The base URL for all local assets
|
|
* {bool} options.debug Should we use dev versions of JS libraries?
|
|
* {bool} options.noscripts Should we include scripts in the prerendered files?
|
|
* @return {str} An HTML document as a string
|
|
*/
|
|
function templateHTML(options) {
|
|
const debugString = options.debug ? "-dev" : "";
|
|
const scripts = [
|
|
"chrome://browser/content/contentSearchUI.js",
|
|
"chrome://browser/content/contentTheme.js",
|
|
`${options.baseUrl}vendor/react${debugString}.js`,
|
|
`${options.baseUrl}vendor/react-dom${debugString}.js`,
|
|
`${options.baseUrl}vendor/prop-types.js`,
|
|
`${options.baseUrl}vendor/redux.js`,
|
|
`${options.baseUrl}vendor/react-redux.js`,
|
|
`${options.baseUrl}data/content/activity-stream.bundle.js`,
|
|
];
|
|
|
|
// Add spacing and script tags
|
|
const scriptRender = `\n${scripts.map(script => ` <script src="${script}"></script>`).join("\n")}`;
|
|
|
|
return `<!doctype html>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; object-src 'none'; script-src resource: chrome:; connect-src https:; img-src https: data: blob:; style-src 'unsafe-inline';">
|
|
<title data-l10n-id="newtab-page-title"></title>
|
|
<link rel="icon" type="image/png" href="chrome://branding/content/icon32.png"/>
|
|
<link rel="localization" href="browser/branding/brandings.ftl" />
|
|
<link rel="localization" href="browser/newtab/newtab.ftl" />
|
|
<link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css" />
|
|
<link rel="stylesheet" href="${options.baseUrl}css/activity-stream.css" />
|
|
</head>
|
|
<body class="activity-stream">
|
|
<div id="header-asrouter-container" role="presentation"></div>
|
|
<div id="root"></div>
|
|
<div id="footer-asrouter-container" role="presentation"></div>${options.noscripts ? "" : scriptRender}
|
|
</body>
|
|
</html>
|
|
`;
|
|
}
|
|
|
|
/**
|
|
* writeFiles - Writes to the desired files the result of a template given
|
|
* various prerendered data and options.
|
|
*
|
|
* @param {string} destPath Path to write the files to
|
|
* @param {Map} filesMap Mapping of a string file name to templater
|
|
* @param {Object} options Various options for the templater
|
|
*/
|
|
function writeFiles(destPath, filesMap, options) {
|
|
for (const [file, templater] of filesMap) {
|
|
console.log("\x1b[32m", `✓ ${file}`, "\x1b[0m");
|
|
fs.writeFileSync(path.join(destPath, file), templater({options}));
|
|
}
|
|
}
|
|
|
|
const STATIC_FILES = new Map([
|
|
["activity-stream.html", ({options}) => templateHTML(options)],
|
|
["activity-stream-debug.html", ({options}) => templateHTML(Object.assign({}, options, {debug: true}))],
|
|
["activity-stream-noscripts.html", ({options}) => templateHTML(Object.assign({}, options, {noscripts: true}))],
|
|
]);
|
|
|
|
/**
|
|
* main - Parses command line arguments, generates html and js with templates,
|
|
* and writes files to their specified locations.
|
|
*/
|
|
function main() { // eslint-disable-line max-statements
|
|
// This code parses command line arguments passed to this script.
|
|
// Note: process.argv.slice(2) is necessary because the first two items in
|
|
// process.argv are paths
|
|
const args = require("minimist")(process.argv.slice(2), {
|
|
alias: {
|
|
addonPath: "a",
|
|
baseUrl: "b",
|
|
},
|
|
});
|
|
|
|
const options = Object.assign({debug: false}, DEFAULT_OPTIONS, args || {});
|
|
const addonPath = path.resolve(__dirname, options.addonPath);
|
|
const prerenderedPath = path.join(addonPath, "prerendered");
|
|
console.log(`Writing prerendered files to ${prerenderedPath}:`);
|
|
|
|
mkdir("-p", prerenderedPath);
|
|
writeFiles(prerenderedPath, STATIC_FILES, options);
|
|
}
|
|
|
|
main();
|