mirror of
https://github.com/garraflavatra/rolens.git
synced 2024-11-24 18:26:56 +01:00
124 lines
3.5 KiB
JavaScript
124 lines
3.5 KiB
JavaScript
const esbuild = require('esbuild');
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
const sass = require('sass');
|
|
|
|
const navigationPlugin = require('@11ty/eleventy-navigation');
|
|
const { EleventyHtmlBasePlugin: basePlugin } = require("@11ty/eleventy");
|
|
const { glob, globSync } = require('glob');
|
|
|
|
const markdown = require('markdown-it')({
|
|
html: true,
|
|
breaks: true,
|
|
linkify: true,
|
|
typographer: true,
|
|
});
|
|
|
|
// Add target="_blank" to external links
|
|
const defaultAnchorRenderer = markdown.renderer.rules.link_open || function(tokens, idx, options, env, self) {
|
|
return self.renderToken(tokens, idx, options);
|
|
};
|
|
markdown.renderer.rules.link_open = function(tokens, idx, options, env, self) {
|
|
const url = tokens[idx].attrGet('href');
|
|
if (url?.startsWith('http')) {
|
|
const aIndex = tokens[idx].attrIndex('target');
|
|
if (aIndex < 0) {
|
|
tokens[idx].attrPush(['target', '_blank']);
|
|
}
|
|
else {
|
|
tokens[idx].attrs[aIndex][1] = '_blank';
|
|
}
|
|
}
|
|
|
|
return defaultAnchorRenderer(tokens, idx, options, env, self);
|
|
};
|
|
|
|
const indir = path.join(__dirname, '/../docs');
|
|
const outdir = path.join(__dirname, '/../website-dist');
|
|
|
|
function buildStyles() {
|
|
const { css } = sass.compile(__dirname+'/sass/styles.scss', {
|
|
loadPaths: [__dirname+'/sass'],
|
|
style: 'compressed',
|
|
});
|
|
|
|
fs.mkdirSync(outdir, { recursive: true });
|
|
fs.writeFileSync(outdir+'/styles.css', css);
|
|
}
|
|
|
|
function buildScript() {
|
|
esbuild.buildSync({
|
|
entryPoints: [__dirname+'/js/script.js'],
|
|
outdir: outdir,
|
|
minify: true,
|
|
target: 'es2016',
|
|
});
|
|
}
|
|
|
|
function copyStatic() {
|
|
fs.mkdirSync(outdir, { recursive: true });
|
|
fs.readdirSync(__dirname+'/static').forEach(function(fname) {
|
|
fs.copyFileSync(__dirname+'/static/'+fname, outdir+'/'+fname);
|
|
});
|
|
globSync(indir+'/**/*.{png,jpg,jpeg}').forEach(function(fname) {
|
|
const dest = outdir+'/'+fname.slice(indir.length + 1);
|
|
fs.mkdirSync(path.dirname(dest), { recursive: true });
|
|
fs.copyFileSync(fname, dest);
|
|
});
|
|
}
|
|
|
|
module.exports = function (eleventyConfig) {
|
|
eleventyConfig.setLibrary('md', markdown);
|
|
eleventyConfig.addPlugin(navigationPlugin);
|
|
eleventyConfig.addPlugin(basePlugin);
|
|
eleventyConfig.addGlobalData('layout', 'page.liquid');
|
|
|
|
// Static files
|
|
eleventyConfig.on('eleventy.before', copyStatic);
|
|
|
|
// Sass rendering
|
|
eleventyConfig.addWatchTarget(__dirname+'/sass/');
|
|
eleventyConfig.on('eleventy.before', buildStyles);
|
|
|
|
// JS compilation
|
|
eleventyConfig.addWatchTarget(__dirname+'/js/');
|
|
eleventyConfig.on('eleventy.before', buildScript);
|
|
|
|
// Markdown filter
|
|
eleventyConfig.addFilter('markdowninline', function (text) {
|
|
return markdown.renderInline(text);
|
|
});
|
|
|
|
// Retrieve content of a file
|
|
eleventyConfig.addShortcode('filecontent', function (fname, a, b) {
|
|
let str = fs.readFileSync(path.join(indir, fname)).toString();
|
|
|
|
if (typeof a === 'number') {
|
|
// Line indexes
|
|
str = str.split('\n').slice(a, b).join('\n');
|
|
}
|
|
else if (typeof a === 'string') {
|
|
// Anchors
|
|
const aIndex = str.indexOf(a) + a.length;
|
|
const bIndex = b ? str.indexOf(b, aIndex) : undefined;
|
|
str = str.slice(aIndex, bIndex);
|
|
}
|
|
|
|
return str.trim();
|
|
});
|
|
|
|
// Global options
|
|
return {
|
|
dir: {
|
|
input: indir,
|
|
includes: '../website/includes',
|
|
layouts: '../website/layouts',
|
|
data: '../website/data',
|
|
output: outdir,
|
|
},
|
|
templateFormats: ['html', 'liquid', 'md', '11ty.js'],
|
|
markdownTemplateEngine: 'liquid',
|
|
htmlTemplateEngine: 'liquid',
|
|
};
|
|
};
|