161 lines
5.2 KiB
JavaScript
161 lines
5.2 KiB
JavaScript
|
'use strict';
|
||
|
|
||
|
let _ = require('lodash');
|
||
|
let bluebird = require('bluebird');
|
||
|
let readFile = bluebird.promisify(require('fs').readFile);
|
||
|
let path = require('path');
|
||
|
|
||
|
let registry = require('./tasks');
|
||
|
let utility = require('./utility');
|
||
|
|
||
|
let directory;
|
||
|
|
||
|
function templateAllFunc(blobs) {
|
||
|
const name = path.join('demo', 'index.html');
|
||
|
|
||
|
blobs = _.compact(blobs);
|
||
|
|
||
|
return bluebird.join(
|
||
|
readFile(name),
|
||
|
utility.getStyleNames(),
|
||
|
(template, styles) => ({ template, path, blobs, styles })
|
||
|
);
|
||
|
}
|
||
|
|
||
|
function copyDocs() {
|
||
|
const input = path.join(directory.root, 'docs', '*.rst'),
|
||
|
output = path.join(directory.build, 'docs');
|
||
|
|
||
|
return {
|
||
|
startLog: { task: ['log', 'Copying documentation.'] },
|
||
|
read: { requires: 'startLog', task: ['glob', utility.glob(input)] },
|
||
|
writeLog: { requires: 'read', task: ['log', 'Writing documentation.'] },
|
||
|
write: { requires: 'writeLog', task: ['dest', output] }
|
||
|
};
|
||
|
}
|
||
|
|
||
|
function generateDemo(filterCB, readArgs) {
|
||
|
let styleDir = path.join('src', 'styles'),
|
||
|
staticArgs = utility.glob(path.join('demo', '*.min.{js,css}')),
|
||
|
imageArgs = utility.glob(path.join(styleDir, '*.{png,jpg}'),
|
||
|
'binary'),
|
||
|
stylesArgs = utility.glob(path.join(styleDir, '*.css')),
|
||
|
demoRoot = path.join(directory.build, 'demo'),
|
||
|
templateArgs = { callback: templateAllFunc },
|
||
|
destArgs = {
|
||
|
dir: path.join(demoRoot, 'styles'),
|
||
|
encoding: 'binary'
|
||
|
};
|
||
|
|
||
|
return {
|
||
|
logStart: { task: ['log', 'Generating demo.'] },
|
||
|
readLanguages: { requires: 'logStart', task: ['glob', readArgs] },
|
||
|
filterSnippets: { requires: 'readLanguages', task: ['filter', filterCB] },
|
||
|
readSnippet: { requires: 'filterSnippets', task: 'readSnippet' },
|
||
|
template: {
|
||
|
requires: 'readSnippet',
|
||
|
task: ['templateAll', templateArgs]
|
||
|
},
|
||
|
write: {
|
||
|
requires: 'template',
|
||
|
task: ['write', path.join(demoRoot, 'index.html')]
|
||
|
},
|
||
|
readStatic: { requires: 'logStart', task: ['glob', staticArgs] },
|
||
|
writeStatic: { requires: 'readStatic', task: ['dest', demoRoot] },
|
||
|
readStyles: { requires: 'logStart', task: ['glob', stylesArgs] },
|
||
|
compressStyles: { requires: 'readStyles', task: 'cssminify' },
|
||
|
writeStyles: { requires: 'compressStyles', task: ['dest', destArgs] },
|
||
|
readImages: { requires: 'logStart', task: ['glob', imageArgs] },
|
||
|
writeImages: { requires:'readImages', task: ['dest', destArgs] },
|
||
|
readDemoJS: {
|
||
|
requires: 'logStart',
|
||
|
task: ['read', path.join('demo', 'demo.js')]
|
||
|
},
|
||
|
minifyDemoJS: { requires: 'readDemoJS', task: 'jsminify' },
|
||
|
writeDemoJS: { requires: 'minifyDemoJS', task: ['dest', demoRoot] },
|
||
|
readDemoCSS: {
|
||
|
requires: 'logStart',
|
||
|
task: ['read', path.join('demo', 'style.css')]
|
||
|
},
|
||
|
minifyDemoCSS: { requires: 'readDemoCSS', task: 'cssminify' },
|
||
|
writeDemoCSS: { requires: 'minifyDemoCSS', task: ['dest', demoRoot] }
|
||
|
};
|
||
|
}
|
||
|
|
||
|
module.exports = function(commander, dir) {
|
||
|
directory = dir;
|
||
|
|
||
|
let hljsExt, output, requiresTask, tasks,
|
||
|
replace = utility.replace,
|
||
|
regex = utility.regex,
|
||
|
replaceClassNames = utility.replaceClassNames,
|
||
|
|
||
|
coreFile = path.join('src', 'highlight.js'),
|
||
|
languages = utility.glob(path.join('src', 'languages', '*.js')),
|
||
|
filterCB = utility.buildFilterCallback(commander.args),
|
||
|
replaceArgs = replace(regex.header, ''),
|
||
|
templateArgs =
|
||
|
'hljs.registerLanguage(\'<%= name %>\', <%= content %>);\n';
|
||
|
|
||
|
tasks = {
|
||
|
startLog: { task: ['log', 'Building highlight.js pack file.'] },
|
||
|
readCore: { requires: 'startLog', task: ['read', coreFile] },
|
||
|
read: { requires: 'startLog', task: ['glob', languages] },
|
||
|
filter: { requires: 'read', task: ['filter', filterCB] },
|
||
|
reorder: { requires: 'filter', task: 'reorderDeps' },
|
||
|
replace: { requires: 'reorder', task: ['replace', replaceArgs] },
|
||
|
template: { requires: 'replace', task: ['template', templateArgs] },
|
||
|
packageFiles: {
|
||
|
requires: ['readCore', 'template'],
|
||
|
task: 'packageFiles'
|
||
|
}
|
||
|
};
|
||
|
requiresTask = 'packageFiles';
|
||
|
|
||
|
if(commander.compress || commander.target === 'cdn') {
|
||
|
tasks.compresslog = {
|
||
|
requires: requiresTask,
|
||
|
task: ['log', 'Compressing highlight.js pack file.']
|
||
|
};
|
||
|
|
||
|
tasks.replace2 = {
|
||
|
requires: 'compresslog',
|
||
|
task: [ 'replaceSkippingStrings'
|
||
|
, replace(regex.replaces, replaceClassNames)
|
||
|
]
|
||
|
};
|
||
|
|
||
|
tasks.replace3 = {
|
||
|
requires: 'replace2',
|
||
|
task: ['replace', replace(regex.classname, '$1.className')]
|
||
|
};
|
||
|
|
||
|
tasks.minify = { requires: 'replace3', task: 'jsminify' };
|
||
|
requiresTask = 'minify';
|
||
|
}
|
||
|
|
||
|
tasks.insertLicenseTag = {
|
||
|
requires: requiresTask,
|
||
|
task: 'insertLicenseTag'
|
||
|
};
|
||
|
|
||
|
tasks.writelog = {
|
||
|
requires: 'insertLicenseTag',
|
||
|
task: ['log', 'Writing highlight.js pack file.']
|
||
|
};
|
||
|
|
||
|
hljsExt = commander.target === 'cdn' ? 'min' : 'pack';
|
||
|
output = path.join(directory.build, `highlight.${hljsExt}.js`);
|
||
|
|
||
|
tasks.write = {
|
||
|
requires: 'writelog',
|
||
|
task: ['write', output]
|
||
|
};
|
||
|
|
||
|
tasks = (commander.target === 'browser')
|
||
|
? [copyDocs(), generateDemo(filterCB, languages), tasks]
|
||
|
: [tasks];
|
||
|
|
||
|
return utility.toQueue(tasks, registry);
|
||
|
};
|