import fs from "fs";
|
|
import path from "path";
|
|
import { src, dest, watch, parallel, series } from "gulp";
|
|
import { exec } from "child_process";
|
|
import { create as browserSyncCreate } from "browser-sync";
|
|
import run from "gulp-run-command";
|
|
import postcss from "gulp-postcss";
|
|
import magician from "postcss-font-magician";
|
|
import cssnano from "cssnano";
|
|
import postcssPresetEnv from "postcss-preset-env";
|
|
import rfs from "rfs";
|
|
import concat from "gulp-concat";
|
|
import terser from "gulp-terser";
|
|
|
|
const browserSync = browserSyncCreate();
|
|
|
|
const path404 = path.join(__dirname, "documentation/output/404.html");
|
|
const content_404 = () =>
|
|
fs.existsSync(path404) ? fs.readFileSync(path404) : null;
|
|
|
|
const cleanOutput = () => exec("cd documentation && rm -rf outout/");
|
|
|
|
const buildContent = () => exec("cd documentation && invoke build");
|
|
const compileBootstrapLess = () =>
|
|
exec(
|
|
"node_modules/recess/bin/recess --compile static/bootstrap/bootstrap.less > static/css/bootstrap.css"
|
|
);
|
|
const compileResponsiveLess = () =>
|
|
exec(
|
|
"node_modules/recess/bin/recess --compile static/bootstrap/responsive.less > static/css/bootstrap_responsive.css"
|
|
);
|
|
|
|
const reload = cb => {
|
|
browserSync.init(
|
|
{
|
|
ui: {
|
|
port: 9002
|
|
},
|
|
server: {
|
|
baseDir: "documentation/output",
|
|
serveStaticOptions: {
|
|
extensions: ["html"]
|
|
}
|
|
},
|
|
files: "documentation/output/*.html",
|
|
port: 9001
|
|
},
|
|
(_, bs) => {
|
|
bs.addMiddleware("*", (_, res) => {
|
|
res.write(content_404());
|
|
res.end();
|
|
});
|
|
}
|
|
);
|
|
cb();
|
|
};
|
|
|
|
const watchFiles = () => {
|
|
watch(
|
|
[
|
|
"documentation/content/**/*.md",
|
|
"documentation/content/**/*.rest",
|
|
"documentation/pelicanconf.py",
|
|
"documentation/publishconf.py",
|
|
"templates/**/*.html",
|
|
"static/**/*.css",
|
|
"static/**/*.less",
|
|
"static/**/*.js",
|
|
"!static/**/bootstrap.css",
|
|
"!static/**/bootstrap_responsive.css",
|
|
"!static/**/elegant.prod.9e9d5ce754.css",
|
|
"!static/js/elegant.prod.9e9d5ce754.js"
|
|
],
|
|
{ ignoreInitial: false },
|
|
buildAll
|
|
);
|
|
};
|
|
|
|
const pathProdCSS = path.join(
|
|
__dirname,
|
|
"static/css/elegant.prod.9e9d5ce754.css"
|
|
);
|
|
const rmProdCSS = cb => {
|
|
if (fs.existsSync(pathProdCSS)) {
|
|
fs.unlinkSync(pathProdCSS);
|
|
}
|
|
cb();
|
|
};
|
|
const minifyJS = () => {
|
|
return src([
|
|
"static/applause-button/applause-button.js",
|
|
"static/photoswipe/photoswipe.js",
|
|
"static/photoswipe/photoswipe-ui-default.js",
|
|
"static/photoswipe/photoswipe-array-from-dom.js",
|
|
"static/lunr/lunr.js",
|
|
"static/clipboard/clipboard.js",
|
|
"static/js/copy-to-clipboard.js",
|
|
"static/js/lunr-search-result.js",
|
|
"!static/js/elegant.prod.9e9d5ce754.js"
|
|
])
|
|
.pipe(concat("elegant.prod.9e9d5ce754.js"))
|
|
.pipe(terser())
|
|
.pipe(dest("static/js/"));
|
|
};
|
|
|
|
const compileCSS = () => {
|
|
const plugins = [
|
|
// postcssPresetEnv comes with autoprefixer
|
|
postcssPresetEnv({ stage: 1 }),
|
|
magician({}),
|
|
rfs(),
|
|
cssnano()
|
|
];
|
|
return src([
|
|
"static/applause-button/applause-button.css",
|
|
"static/photoswipe/photoswipe.css",
|
|
"static/photoswipe/default-skin/default-skin.css",
|
|
"static/css/*.css",
|
|
"!static/css/elegant.prod.9e9d5ce754.css"
|
|
])
|
|
.pipe(postcss(plugins))
|
|
.pipe(concat("elegant.prod.9e9d5ce754.css"))
|
|
.pipe(dest("static/css/"));
|
|
};
|
|
|
|
const buildAll = series(
|
|
rmProdCSS,
|
|
compileBootstrapLess,
|
|
compileResponsiveLess,
|
|
compileCSS,
|
|
minifyJS,
|
|
buildContent
|
|
);
|
|
|
|
exports.validate = run("jinja-ninja templates");
|
|
|
|
exports.js = minifyJS;
|
|
|
|
exports.css = series(
|
|
rmProdCSS,
|
|
compileBootstrapLess,
|
|
compileResponsiveLess,
|
|
compileCSS
|
|
);
|
|
|
|
const build = series(
|
|
compileBootstrapLess,
|
|
compileResponsiveLess,
|
|
compileCSS,
|
|
minifyJS,
|
|
cleanOutput,
|
|
buildContent
|
|
);
|
|
exports.build = build;
|
|
|
|
const elegant = series(build, parallel(watchFiles, reload));
|
|
exports.elegant = elegant;
|
|
exports.default = elegant;
|