From 89f05dd8bffb365242429e6146e39d0d47b063a2 Mon Sep 17 00:00:00 2001 From: corentinleberre Date: Mon, 19 Dec 2022 14:27:49 -0500 Subject: [PATCH] POC v2 --- .DS_Store | Bin 0 -> 6148 bytes README.md | 35 ++++++- docs/README.md | 1 - docs/_sidebar.md | 2 - docs/custom-style.css | 7 -- docs/docsify-replace-pattern.js | 10 -- docs/usages.md | 3 - package-lock.json | 179 ++++++++++++++++++++++++++++++-- package.json | 12 ++- src/README.md | 7 ++ {docs => src}/index.html | 29 +++--- src/index.js | 6 +- src/replace-pattern.js | 28 ++++- 13 files changed, 260 insertions(+), 59 deletions(-) create mode 100644 .DS_Store delete mode 100644 docs/README.md delete mode 100644 docs/_sidebar.md delete mode 100644 docs/custom-style.css delete mode 100644 docs/docsify-replace-pattern.js delete mode 100644 docs/usages.md create mode 100644 src/README.md rename {docs => src}/index.html (50%) diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..675666d95616a5e666ecde82d77b26c58ac7c502 GIT binary patch literal 6148 zcmeHKy-EW?5S~r0IAe-bVqvjQAmk0sa6Un>R+2~*a$Yc|)hootRv$pHSHw545Nlt= zUIf3{S(01M1Pc+78JPWc=Vy2ByKs{wBGZ`;+C(iPilL0P6%1bp`&lbe^Oh#i@E)UK zyW7vRaV1g>f0Y4#cM)yUkPhi2czM^ynVU^%gw-UdD*!Np*$L)+m*5=hG4WUk!UHjq3Y1jiuNX$sVYfam@mL5-IvIB| z_VFhhe?u|ubl9y6CzA;3s0=6rAp><;wz&UqFTVeWNxD)7l!1T6fQiy>+QB3F-dcG$ u?zI-W2W8>7LU5LXiEG7( + +``` + +Configurations : +* Choose the type of headings you want to style (you can pass multiples headings) +* Define the patterns you want to replace. The surround property allow style to be + +```html + +``` + +## Demo + +A demo is available [here](https://corentinleberre.github.io/docsify-replace-pattern/src/#/) \ No newline at end of file diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index 86ff5ae..0000000 --- a/docs/README.md +++ /dev/null @@ -1 +0,0 @@ -# Docsify-replace-pattern \ No newline at end of file diff --git a/docs/_sidebar.md b/docs/_sidebar.md deleted file mode 100644 index 41919ce..0000000 --- a/docs/_sidebar.md +++ /dev/null @@ -1,2 +0,0 @@ -* [Readme](/) -* [Usages](/usages.md) \ No newline at end of file diff --git a/docs/custom-style.css b/docs/custom-style.css deleted file mode 100644 index 25d4c0e..0000000 --- a/docs/custom-style.css +++ /dev/null @@ -1,7 +0,0 @@ -.green { - color: green; -} - -.red { - color: red; -} \ No newline at end of file diff --git a/docs/docsify-replace-pattern.js b/docs/docsify-replace-pattern.js deleted file mode 100644 index c4fd47a..0000000 --- a/docs/docsify-replace-pattern.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -const replacePatterns = (patterns) => (hook) => hook.afterEach((html, next) => { - patterns.forEach((tuple) => html = html.replaceAll(...tuple)); - next(html); - }); - -const docsify = window.$docsify; - -docsify?.plugins?.push(replacePatterns(docsify?.replacePatterns)); diff --git a/docs/usages.md b/docs/usages.md deleted file mode 100644 index 7281203..0000000 --- a/docs/usages.md +++ /dev/null @@ -1,3 +0,0 @@ -GET - -POST \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 8ff9fd4..b708478 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,13 +1,15 @@ { "name": "docsify-replace-pattern", - "version": "1.0.2", + "version": "1.1.0", "lockfileVersion": 2, "requires": true, "packages": { "": { - "version": "1.0.2", - "license": "ISC", + "name": "docsify-replace-pattern", + "version": "1.1.0", + "license": "MIT", "devDependencies": { + "docsify": "^4.12.2", "rollup": "^2.60.0", "rollup-plugin-terser": "^7.0.2" } @@ -106,6 +108,29 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, + "node_modules/docsify": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/docsify/-/docsify-4.12.2.tgz", + "integrity": "sha512-hpRez5upcvkYigT2zD8P5kH5t9HpSWL8yn/ZU/g04/WfAfxVNW6CPUVOOF1EsQUDxTRuyNTFOb6uUv+tPij3tg==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "dompurify": "^2.3.1", + "marked": "^1.2.9", + "medium-zoom": "^1.0.6", + "opencollective-postinstall": "^2.0.2", + "prismjs": "^1.23.0", + "strip-indent": "^3.0.0", + "tinydate": "^1.3.0", + "tweezer.js": "^1.4.0" + } + }, + "node_modules/dompurify": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.3.6.tgz", + "integrity": "sha512-OFP2u/3T1R5CEgWCEONuJ1a5+MFKnOYpkywpUSxv/dj1LeBT1erK+JwM7zK0ROy2BRhqVCf0LRw/kHqKuMkVGg==", + "dev": true + }, "node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -179,12 +204,57 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, + "node_modules/marked": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/marked/-/marked-1.2.9.tgz", + "integrity": "sha512-H8lIX2SvyitGX+TRdtS06m1jHMijKN/XjfH6Ooii9fvxMlh8QdqBfBDkGUpMWH2kQNrtixjzYUa3SH8ROTgRRw==", + "dev": true, + "bin": { + "marked": "bin/marked" + }, + "engines": { + "node": ">= 8.16.2" + } + }, + "node_modules/medium-zoom": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/medium-zoom/-/medium-zoom-1.0.6.tgz", + "integrity": "sha512-UdiUWfvz9fZMg1pzf4dcuqA0W079o0mpqbTnOz5ip4VGYX96QjmbM+OgOU/0uOzAytxC0Ny4z+VcYQnhdifimg==", + "dev": true + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/opencollective-postinstall": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", + "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", + "dev": true, + "bin": { + "opencollective-postinstall": "index.js" + } + }, + "node_modules/prismjs": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.27.0.tgz", + "integrity": "sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -199,9 +269,6 @@ "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.60.0.tgz", "integrity": "sha512-cHdv9GWd58v58rdseC8e8XIaPUo8a9cgZpnCMMDGZFDZKEODOiPPEQFXLriWr/TjXzhPPmG5bkAztPsOARIcGQ==", "dev": true, - "dependencies": { - "fsevents": "~2.3.2" - }, "bin": { "rollup": "dist/bin/rollup" }, @@ -284,6 +351,18 @@ "node": ">=0.10.0" } }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -320,6 +399,21 @@ "optional": true } } + }, + "node_modules/tinydate": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/tinydate/-/tinydate-1.3.0.tgz", + "integrity": "sha512-7cR8rLy2QhYHpsBDBVYnnWXm8uRTr38RoZakFSW7Bs7PzfMPNZthuMLkwqZv7MTu8lhQ91cOFYS5a7iFj2oR3w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/tweezer.js": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/tweezer.js/-/tweezer.js-1.5.0.tgz", + "integrity": "sha512-aSiJz7rGWNAQq7hjMK9ZYDuEawXupcCWgl3woQQSoDP2Oh8O4srWb/uO1PzzHIsrPEOqrjJ2sUb9FERfzuBabQ==", + "dev": true } }, "dependencies": { @@ -402,6 +496,28 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, + "docsify": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/docsify/-/docsify-4.12.2.tgz", + "integrity": "sha512-hpRez5upcvkYigT2zD8P5kH5t9HpSWL8yn/ZU/g04/WfAfxVNW6CPUVOOF1EsQUDxTRuyNTFOb6uUv+tPij3tg==", + "dev": true, + "requires": { + "dompurify": "^2.3.1", + "marked": "^1.2.9", + "medium-zoom": "^1.0.6", + "opencollective-postinstall": "^2.0.2", + "prismjs": "^1.23.0", + "strip-indent": "^3.0.0", + "tinydate": "^1.3.0", + "tweezer.js": "^1.4.0" + } + }, + "dompurify": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.3.6.tgz", + "integrity": "sha512-OFP2u/3T1R5CEgWCEONuJ1a5+MFKnOYpkywpUSxv/dj1LeBT1erK+JwM7zK0ROy2BRhqVCf0LRw/kHqKuMkVGg==", + "dev": true + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -455,12 +571,42 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, + "marked": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/marked/-/marked-1.2.9.tgz", + "integrity": "sha512-H8lIX2SvyitGX+TRdtS06m1jHMijKN/XjfH6Ooii9fvxMlh8QdqBfBDkGUpMWH2kQNrtixjzYUa3SH8ROTgRRw==", + "dev": true + }, + "medium-zoom": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/medium-zoom/-/medium-zoom-1.0.6.tgz", + "integrity": "sha512-UdiUWfvz9fZMg1pzf4dcuqA0W079o0mpqbTnOz5ip4VGYX96QjmbM+OgOU/0uOzAytxC0Ny4z+VcYQnhdifimg==", + "dev": true + }, "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true + }, + "opencollective-postinstall": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", + "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", + "dev": true + }, + "prismjs": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.27.0.tgz", + "integrity": "sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==", + "dev": true + }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -530,6 +676,15 @@ } } }, + "strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "requires": { + "min-indent": "^1.0.0" + } + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -549,6 +704,18 @@ "source-map": "~0.7.2", "source-map-support": "~0.5.20" } + }, + "tinydate": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/tinydate/-/tinydate-1.3.0.tgz", + "integrity": "sha512-7cR8rLy2QhYHpsBDBVYnnWXm8uRTr38RoZakFSW7Bs7PzfMPNZthuMLkwqZv7MTu8lhQ91cOFYS5a7iFj2oR3w==", + "dev": true + }, + "tweezer.js": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/tweezer.js/-/tweezer.js-1.5.0.tgz", + "integrity": "sha512-aSiJz7rGWNAQq7hjMK9ZYDuEawXupcCWgl3woQQSoDP2Oh8O4srWb/uO1PzzHIsrPEOqrjJ2sUb9FERfzuBabQ==", + "dev": true } } } diff --git a/package.json b/package.json index 0aeb5be..4cc93f1 100644 --- a/package.json +++ b/package.json @@ -1,11 +1,11 @@ { "name": "docsify-replace-pattern", - "version": "1.0.2", + "version": "2.0.0", "description": "Docsify replace pattern", "main": "dist/docsify-replace-pattern.js", "scripts": { - "build": "rollup -c", - "test": "echo \"No test specified\"" + "start": "docsify serve src", + "build": "rollup -c" }, "files": [ "dist/docsify-replace-pattern.js" @@ -15,11 +15,13 @@ "url": "git+https://github.com/corentinleberre/docsify-replace-pattern.git" }, "keywords": [ - "Docsify" + "Docsify", + "Mermaid" ], "author": "Corentin Le Berre", - "license": "ISC", + "license": "MIT", "devDependencies": { + "docsify": "^4.12.2", "rollup": "^2.60.0", "rollup-plugin-terser": "^7.0.2" } diff --git a/src/README.md b/src/README.md new file mode 100644 index 0000000..d252242 --- /dev/null +++ b/src/README.md @@ -0,0 +1,7 @@ +# Docsify-replace-pattern + +## Bonjour le monde + +## Hello world + +## Hallo Welt \ No newline at end of file diff --git a/docs/index.html b/src/index.html similarity index 50% rename from docs/index.html rename to src/index.html index e3f4190..742e938 100644 --- a/docs/index.html +++ b/src/index.html @@ -7,30 +7,27 @@ -
- - - - + + diff --git a/src/index.js b/src/index.js index 531b724..1343a37 100644 --- a/src/index.js +++ b/src/index.js @@ -1,5 +1,5 @@ -import replacePatterns from "./replace-pattern"; +import { replacePatterns } from './replace-pattern.js'; -const docsify = window.$docsify; +const docsify = window.$docsify || {}; -docsify?.plugins?.push(replacePatterns(docsify?.replacePatterns)); \ No newline at end of file +docsify.plugins = (docsify.plugins || []).concat(!!docsify.replacePatterns ? replacePatterns(...Object.values(docsify.replacePatterns)) : replacePatterns()); \ No newline at end of file diff --git a/src/replace-pattern.js b/src/replace-pattern.js index 896b6f5..60cb984 100644 --- a/src/replace-pattern.js +++ b/src/replace-pattern.js @@ -1,6 +1,24 @@ -const replacePatterns = (patterns) => (hook) => hook.afterEach((html, next) => { - patterns.forEach((tuple) => html = html.replaceAll(...tuple)); - next(html); - }); +export const replacePatterns = (rootSelector = "h2", childSelector = "span", patterns = [{ initial: "Hello", replace: "Bonjour", surround: true, style: "color: blue;" }]) => (hook => hook.doneEach(() => { + const nodes = document.querySelectorAll(rootSelector); -export default replacePatterns; \ No newline at end of file + nodes?.forEach(node => { + const childSelectorNode = node.querySelector(childSelector); + patterns?.forEach(pattern => { + if(childSelectorNode.innerText.includes(pattern.initial)){ + if(pattern.surround){ + const wrapNode = document.createElement(childSelector); + wrapNode.innerText = pattern.replace; + wrapNode.setAttribute("style", pattern.style); + childSelectorNode.innerText = childSelectorNode.innerText.replace(pattern.initial, ""); + const linkNode = node.querySelector("a"); + linkNode.insertBefore(wrapNode, linkNode.firstChild); + } else { + childSelectorNode.innerText = childSelectorNode.innerText.replace(pattern.initial, pattern.replace); + childSelectorNode.setAttribute("style", pattern.style); + } + } + }) + }); +})); + + \ No newline at end of file