From a40f3de75c674d89bdb87c6f17defdaeb3167de6 Mon Sep 17 00:00:00 2001 From: Steffen Date: Tue, 25 Feb 2020 15:30:52 +0100 Subject: [PATCH] thymeleaf java implementation & draft for configurable renderers/processors --- example/aiur.config.js | 9 +++++++++ example/components/thing/ding.html | 3 +++ example/components/thing/thing.md | 6 ++++++ example/package.json | 2 +- lib/highlight_snippet.js | 1 + lib/page_renderer.js | 6 ++++-- lib/site.js | 18 ++++++++++++++++-- package.json | 23 ++++++++++++----------- 8 files changed, 52 insertions(+), 16 deletions(-) create mode 100644 example/components/thing/ding.html diff --git a/example/aiur.config.js b/example/aiur.config.js index be42474..4794140 100644 --- a/example/aiur.config.js +++ b/example/aiur.config.js @@ -20,6 +20,15 @@ exports.vendor = { scripts: [] }; +exports.renderers = { + lymetheaf: [ + require("lymetheaf"), + { + prefix: __dirname + } + ] +} + exports.pages = { "": { file: "./components/welcome.md", diff --git a/example/components/thing/ding.html b/example/components/thing/ding.html new file mode 100644 index 0000000..8ab1c34 --- /dev/null +++ b/example/components/thing/ding.html @@ -0,0 +1,3 @@ +
Lymetheaf OFF
+
no message
+
diff --git a/example/components/thing/thing.md b/example/components/thing/thing.md index bd34509..4f2a079 100644 --- a/example/components/thing/thing.md +++ b/example/components/thing/thing.md @@ -25,3 +25,9 @@ This uses data ```thymeleaf
No message.
``` + +Use the JAVA implementation "Lymetheaf" + +```lymetheaf +components/thing/ding.html +``` diff --git a/example/package.json b/example/package.json index c081e96..3eaa0a2 100644 --- a/example/package.json +++ b/example/package.json @@ -1,6 +1,6 @@ { "scripts": { - "start": "aiur --watch --liveserve", + "start": "aiur --watch --liveserve 3000", "compile": "aiur --fingerprint --compact" }, "dependencies": { diff --git a/lib/highlight_snippet.js b/lib/highlight_snippet.js index 5d85073..bbb3a65 100644 --- a/lib/highlight_snippet.js +++ b/lib/highlight_snippet.js @@ -4,6 +4,7 @@ let loadLanguages = require("prismjs/components/"); module.exports = function(snippet, language) { // (temporary) patches for missing languages Prism.languages.thymeleaf = Prism.languages.html; + Prism.languages.lymetheaf = Prism.languages.html; if(!Prism.languages[language]) { loadLanguages([language]); diff --git a/lib/page_renderer.js b/lib/page_renderer.js index 31c62b4..537cca3 100644 --- a/lib/page_renderer.js +++ b/lib/page_renderer.js @@ -2,10 +2,11 @@ let { Parser } = require("commonmark"); let HtmlRenderer = require("./html_renderer"); module.exports = class PageRenderer { - constructor({ renderers, layout }) { + constructor({ renderers, renderersConfigs, layout }) { this.reader = new Parser(); this.writer = new HtmlRenderer(); this.renderers = renderers; + this.renderersConfigs = renderersConfigs; this.layout = layout; this.snippets = []; } @@ -25,10 +26,11 @@ module.exports = class PageRenderer { async renderSnippet({ page, slug, language, snippet }) { let renderer = this.renderers[language]; + let rendererConfig = this.renderersConfigs[language]; if(!renderer) { throw new Error(`Styleguide ran across unknown language ${language} (renderer)`); } - let html = await renderer(snippet, page.data); + let html = await renderer(snippet, page.data, rendererConfig); return { html, page, slug }; } diff --git a/lib/site.js b/lib/site.js index 6346435..4cbef28 100644 --- a/lib/site.js +++ b/lib/site.js @@ -31,10 +31,24 @@ module.exports = class Site { baseURI: baseURI, // TODO: either make this configurable or autoload renderers on use renderers: DEFAULTS.renderers, + renderersConfigs: {}, // TODO: make this configurable, but first find a simpler contract generateLayout: DEFAULTS.generateLayout, assetManager }); + + let moreRenderers = require(this.source).renderers || {}; + Object.keys(moreRenderers).forEach(rendererName => { + let thatNewRenderer = moreRenderers[rendererName] + if (Array.isArray(thatNewRenderer)) { + let [renderer, rendererConfig] = thatNewRenderer; + this.renderers[rendererName] = renderer; + this.renderersConfigs[rendererName] = rendererConfig + } else { + this.renderers[rendererName] = thatNewRenderer; + } + }); + this.dirs = new Set(); } @@ -51,7 +65,7 @@ module.exports = class Site { await mkdirp(this.target); } - let { renderers, generateLayout } = this; + let { renderers, renderersConfigs, generateLayout } = this; let preperations = tree.map(async page => { let filepath = path.resolve(this.target, page.slug); @@ -70,7 +84,7 @@ module.exports = class Site { let navigation = new Navigation({ baseURI: this.baseURI }); let layout = await generateLayout(navigation.generate(tree), this.assetManager.manifest); - let pageRenderer = new PageRenderer({ renderers, layout }); + let pageRenderer = new PageRenderer({ renderers, renderersConfigs, layout }); let writes = tree.map(async page => { let html = await pageRenderer.render(page); diff --git a/package.json b/package.json index 859ae01..1e48fb3 100644 --- a/package.json +++ b/package.json @@ -18,28 +18,29 @@ "node": ">=8" }, "dependencies": { - "commonmark": "^0.29.0", + "commonmark": "^0.29.1", "complate-stream": "^0.16.9", "donny": "^0.1.0", - "faucet-pipeline-core": "^1.3.1", - "faucet-pipeline-js": "^2.0.8", - "faucet-pipeline-jsx": "^2.0.8", - "faucet-pipeline-sass": "^1.3.0", + "faucet-pipeline-core": "^1.3.2", + "faucet-pipeline-js": "^2.0.10", + "faucet-pipeline-jsx": "^2.0.10", + "faucet-pipeline-sass": "^1.3.1", "faucet-pipeline-static": "^1.1.0", - "handlebars": "^4.4.3", + "handlebars": "^4.7.3", "live-server": "^1.2.1", - "metacolon": "^1.0.0", + "metacolon": "^1.1.0", "minimist": "^1.2.0", "mkdirp": "^0.5.1", - "parse5": "^5.1.0", - "prismjs": "^1.17.1", + "parse5": "^5.1.1", + "prismjs": "^1.19.0", "require-from-string": "^2.0.2", - "thymeleaf": "^0.18.0" + "thymeleaf": "^0.18.1", + "lymetheaf": "git+https://github.com/blynx/aiur-processor-lymetheaf.git" }, "devDependencies": { "eslint-config-fnd": "^1.8.0", "mocha": "^6.2.2", "release-util-fnd": "^1.1.1", - "rimraf": "^3.0.0" + "rimraf": "^3.0.2" } }