From 01e518a39f156796f0eb729d5cc986537725a912 Mon Sep 17 00:00:00 2001 From: Riff Date: Tue, 23 May 2023 06:39:17 -0700 Subject: [PATCH] Add wavedrom support (#655) --- _config.yml | 3 +++ _vendors.yml | 10 ++++++++++ layout/_third-party/index.njk | 1 + layout/_third-party/tags/wavedrom.njk | 9 +++++++++ scripts/filters/minify.js | 4 ++++ scripts/tags/index.js | 4 ++++ scripts/tags/wavedrom.js | 11 +++++++++++ source/css/_common/scaffolding/tags/index.styl | 1 + source/css/_common/scaffolding/tags/wavedrom.styl | 6 ++++++ source/js/third-party/tags/wavedrom.js | 13 +++++++++++++ 10 files changed, 62 insertions(+) create mode 100644 layout/_third-party/tags/wavedrom.njk create mode 100644 scripts/tags/wavedrom.js create mode 100644 source/css/_common/scaffolding/tags/wavedrom.styl create mode 100644 source/js/third-party/tags/wavedrom.js diff --git a/_config.yml b/_config.yml index ab413a7db5..405765310a 100644 --- a/_config.yml +++ b/_config.yml @@ -532,6 +532,9 @@ mermaid: light: default dark: dark +# WaveDrom tag +wavedrom: + enable: false # --------------------------------------------------------------- # Third Party Plugins & Services Settings diff --git a/_vendors.yml b/_vendors.yml index 63f9588a26..77c836c090 100644 --- a/_vendors.yml +++ b/_vendors.yml @@ -172,3 +172,13 @@ creative_commons: version: 2020.11.3 dir: assets/license_badges alias: creativecommons-vocabulary +wavedrom: + name: wavedrom + version: 3.2.0 + file: wavedrom.min.js + integrity: sha512-/ZL0uQxVV1wYyWlpO4klZ1a39eaBz4zESSamuBMaMsZ6le3YejJ07hmLlHoCTXrKz5eYtEuO5K1BcTo+lQpQJA== +wavedrom_skin: + name: wavedrom + version: 3.2.0 + file: skins/default.js + integrity: sha512-GV5gOBpCHd3M5Af9Ooz+I9dQdwcDKPR2F8ulzCpoF4W6uwmtLTh/pT8Q1XupPmQJO+Kt88/DrIiK7PzR1YLvwQ== \ No newline at end of file diff --git a/layout/_third-party/index.njk b/layout/_third-party/index.njk index f568e59e75..787268bce7 100644 --- a/layout/_third-party/index.njk +++ b/layout/_third-party/index.njk @@ -14,6 +14,7 @@ {%- include 'tags/pdf.njk' -%} {%- include 'tags/mermaid.njk' -%} +{%- include 'tags/wavedrom.njk' -%} {%- include 'fancybox.njk' -%} {%- include 'pace.njk' -%} diff --git a/layout/_third-party/tags/wavedrom.njk b/layout/_third-party/tags/wavedrom.njk new file mode 100644 index 0000000000..1ff9f46813 --- /dev/null +++ b/layout/_third-party/tags/wavedrom.njk @@ -0,0 +1,9 @@ +{%- if theme.wavedrom.enable %} + {{ next_data('wavedrom', theme.wavedrom, { + js: theme.vendors.wavedrom + }) }} + {{ next_data('wavedrom_skin', theme.wavedrom, { + js: theme.vendors.wavedrom_skin + }) }} + {{ next_js('third-party/tags/wavedrom.js') }} +{%- endif %} diff --git a/scripts/filters/minify.js b/scripts/filters/minify.js index 66c2b36395..889c812968 100644 --- a/scripts/filters/minify.js +++ b/scripts/filters/minify.js @@ -137,6 +137,10 @@ hexo.extend.filter.register('after_generate', () => { hexo.route.remove('js/third-party/tags/pdf.js'); } + if (!theme.wavedrom.enable) { + hexo.route.remove('js/third-party/tags/wavedrom.js'); + } + // Others if (!theme.fancybox) { hexo.route.remove('js/third-party/fancybox.js'); diff --git a/scripts/tags/index.js b/scripts/tags/index.js index fe0695024e..d0c4392744 100644 --- a/scripts/tags/index.js +++ b/scripts/tags/index.js @@ -35,6 +35,10 @@ const mermaid = require('./mermaid'); hexo.extend.tag.register('mermaid', mermaid, true); +const wavedrom = require('./wavedrom'); + +hexo.extend.tag.register('wavedrom', wavedrom, true); + const postNote = require('./note')(hexo); hexo.extend.tag.register('note', postNote, true); diff --git a/scripts/tags/wavedrom.js b/scripts/tags/wavedrom.js new file mode 100644 index 0000000000..458517d333 --- /dev/null +++ b/scripts/tags/wavedrom.js @@ -0,0 +1,11 @@ +/** + * wavedrom.js | https://theme-next.js.org/docs/tag-plugins/wavedrom + */ + +'use strict'; + +module.exports = function(args, content) { + return `
`; +}; diff --git a/source/css/_common/scaffolding/tags/index.styl b/source/css/_common/scaffolding/tags/index.styl index fc8eadd5a3..1fe49fc64c 100644 --- a/source/css/_common/scaffolding/tags/index.styl +++ b/source/css/_common/scaffolding/tags/index.styl @@ -3,6 +3,7 @@ @import 'label'; @import 'link-grid'; @import 'mermaid'; +@import 'wavedrom'; @import 'note'; @import 'pdf'; @import 'tabs'; diff --git a/source/css/_common/scaffolding/tags/wavedrom.styl b/source/css/_common/scaffolding/tags/wavedrom.styl new file mode 100644 index 0000000000..42e1914faf --- /dev/null +++ b/source/css/_common/scaffolding/tags/wavedrom.styl @@ -0,0 +1,6 @@ +if (hexo-config('wavedrom.enable')) { + .wavedrom { + margin-bottom: 20px; + text-align: center; + } +} diff --git a/source/js/third-party/tags/wavedrom.js b/source/js/third-party/tags/wavedrom.js new file mode 100644 index 0000000000..ddd9a1d975 --- /dev/null +++ b/source/js/third-party/tags/wavedrom.js @@ -0,0 +1,13 @@ +/* global NexT, CONFIG, WaveDrom */ + +document.addEventListener('page:loaded', () => { + NexT.utils.getScript(CONFIG.wavedrom.js, { + condition: window.WaveDrom + }).then(() => { + NexT.utils.getScript(CONFIG.wavedrom_skin.js, { + condition: window.WaveSkin + }).then(() => { + WaveDrom.ProcessAll(); + }); + }); +});