From 7a753d780b92c3c9be7df63766f2600b7108d0df Mon Sep 17 00:00:00 2001 From: maxueming Date: Thu, 5 Jan 2023 18:13:07 +0800 Subject: [PATCH] git init --- .babelrc | 9 + .eslintignore | 4 + .eslintrc.js | 30 ++ .gitignore | 25 ++ .nojekyll | 1 + .npmignore | 1 + LICENSE | 21 ++ README.md | 0 _sidebar.md | 18 ++ demo.html | 85 ++++++ docs/MONACO.TTF | Bin 0 -> 65704 bytes docs/README.md | 16 ++ docs/docsify.js | 1 + docs/history.md | 53 ++++ docs/html.md | 318 ++++++++++++++++++++++ docs/logo.svg | 1 + docs/options.md | 151 +++++++++++ docs/prism-bash.js | 84 ++++++ docs/react.md | 251 +++++++++++++++++ docs/temp.jpeg | Bin 0 -> 119257 bytes docs/test.md | 57 ++++ docs/usage-docsify.md | 210 ++++++++++++++ docs/usage-vuepress.md | 86 ++++++ docs/usage.md | 51 ++++ docs/vue.md | 188 +++++++++++++ docs/wx.png | Bin 0 -> 158786 bytes fonts/element-icons.ttf | Bin 0 -> 55956 bytes fonts/element-icons.woff | Bin 0 -> 28200 bytes index.html | 120 ++++++++ package.json | 71 +++++ react-sfc.html | 99 +++++++ rollup.config.build.js | 117 ++++++++ rollup.config.dev.js | 119 ++++++++ src/config.ts | 158 +++++++++++ src/index.ts | 496 ++++++++++++++++++++++++++++++++++ src/loaders/base-loader.ts | 26 ++ src/loaders/html-loader.ts | 35 +++ src/loaders/index.ts | 56 ++++ src/loaders/react-loader.ts | 27 ++ src/loaders/vue-loader.ts | 38 +++ src/plugins/docsify-plugin.ts | 83 ++++++ src/style/index.less | 192 +++++++++++++ src/style/theme.less | 9 + src/type.ts | 85 ++++++ src/utils.ts | 91 +++++++ tsconfig.json | 24 ++ vue-sfc.html | 99 +++++++ 47 files changed, 3606 insertions(+) create mode 100644 .babelrc create mode 100644 .eslintignore create mode 100644 .eslintrc.js create mode 100644 .gitignore create mode 100644 .nojekyll create mode 100644 .npmignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 _sidebar.md create mode 100644 demo.html create mode 100644 docs/MONACO.TTF create mode 100644 docs/README.md create mode 100644 docs/docsify.js create mode 100644 docs/history.md create mode 100644 docs/html.md create mode 100644 docs/logo.svg create mode 100644 docs/options.md create mode 100644 docs/prism-bash.js create mode 100644 docs/react.md create mode 100644 docs/temp.jpeg create mode 100644 docs/test.md create mode 100644 docs/usage-docsify.md create mode 100644 docs/usage-vuepress.md create mode 100644 docs/usage.md create mode 100644 docs/vue.md create mode 100644 docs/wx.png create mode 100644 fonts/element-icons.ttf create mode 100644 fonts/element-icons.woff create mode 100644 index.html create mode 100644 package.json create mode 100644 react-sfc.html create mode 100644 rollup.config.build.js create mode 100644 rollup.config.dev.js create mode 100644 src/config.ts create mode 100644 src/index.ts create mode 100644 src/loaders/base-loader.ts create mode 100644 src/loaders/html-loader.ts create mode 100644 src/loaders/index.ts create mode 100644 src/loaders/react-loader.ts create mode 100644 src/loaders/vue-loader.ts create mode 100644 src/plugins/docsify-plugin.ts create mode 100644 src/style/index.less create mode 100644 src/style/theme.less create mode 100644 src/type.ts create mode 100644 src/utils.ts create mode 100644 tsconfig.json create mode 100644 vue-sfc.html diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000..f34bb9d --- /dev/null +++ b/.babelrc @@ -0,0 +1,9 @@ +{ + "presets": [ + [ + "@babel/preset-env", { + "modules": false + } + ] + ] +} diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..f4cdfdf --- /dev/null +++ b/.eslintignore @@ -0,0 +1,4 @@ +/lib/ +/dist/ +/examples/ +/node_modules/ \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..0442dd6 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,30 @@ +module.exports = { + env: { + browser: true, + es2021: true, + node: true, + }, + extends: ['standard'], + parser: '@typescript-eslint/parser', + parserOptions: { + ecmaVersion: 12, + sourceType: 'module', + }, + plugins: ['@typescript-eslint/eslint-plugin'], + rules: { + // 参数后面不允许任何空格 + 'space-before-function-paren': ['error', 'never'], + // 尾随逗号 + 'comma-dangle': ['error', 'always-multiline'], + // 禁止在声明前调用 (方法除外) + 'no-use-before-define': ['error', { functions: false, classes: true, variables: true }], + // 允许使用中括号来访问变量 + 'dot-notation': 'off', + // 允许转义字符 + 'no-useless-escape': 'off', + // 允许 new 不赋值 + 'no-new': 'off', + // 允许使用 eval + 'no-eval': 'off', + }, +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0f99804 --- /dev/null +++ b/.gitignore @@ -0,0 +1,25 @@ +.DS_Store +node_modules +yarn.lock +package-lock.json +dist + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +es-module-shims.js \ No newline at end of file diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..58ce07e --- /dev/null +++ b/.nojekyll @@ -0,0 +1 @@ +_sidebar.md diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000..f59ec20 --- /dev/null +++ b/.npmignore @@ -0,0 +1 @@ +* \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..de560dc --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019-2022 Li Dong Qi + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/_sidebar.md b/_sidebar.md new file mode 100644 index 0000000..c0294c1 --- /dev/null +++ b/_sidebar.md @@ -0,0 +1,18 @@ + +- [**Home & 首页**](/) + +- **Usage & 使用** + - [ - 在 javascript 中使用](/docs/usage) + - [ - 在 docsify 中使用](/docs/usage-docsify) + - [ - 在 vuepress 中使用](/docs/usage-vuepress) + +- [**Options & 配置选项**](/docs/options) + +- **Examples & 示例** + - [ - HTML 模板](/docs/html) + - [ - ~~Vue SFC~~ (内测中)](/docs/vue) + - [ - ~~React SFC~~ (内测中)](/docs/react) + +- [**历史更新 & History**](/docs/history) + + diff --git a/demo.html b/demo.html new file mode 100644 index 0000000..fcfcd26 --- /dev/null +++ b/demo.html @@ -0,0 +1,85 @@ + + + + + + + Mini Sandbox + + + + +
+ + + + + + + + + diff --git a/docs/MONACO.TTF b/docs/MONACO.TTF new file mode 100644 index 0000000000000000000000000000000000000000..57217b3f03ca96361ef0b3d658e357bdda3154ab GIT binary patch literal 65704 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 =mDbAnbgjB%7t<+;rB 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 An awesome project. + + + +```html +asd +``` + +876 + +```html + +123 +``` diff --git a/docs/docsify.js b/docs/docsify.js new file mode 100644 index 0000000..e9b32ee --- /dev/null +++ b/docs/docsify.js @@ -0,0 +1 @@ +!function(){function s(n){var r=Object.create(null);return function(e){var t=c(e)?e:JSON.stringify(e);return r[t]||(r[t]=n(e))}}var o=s(function(e){return e.replace(/([A-Z])/g,function(e){return"-"+e.toLowerCase()})}),l=Object.prototype.hasOwnProperty,y=Object.assign||function(e){for(var t=arguments,n=1;n/gm),it=Q(/^data-[\-\w.\u00B7-\uFFFF]/),ot=Q(/^aria-[\-\w]+$/),at=Q(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),st=Q(/^(?:\w+script|data):/i),lt=Q(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),ct="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};function ut(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t/i,t))xe(o,e);else{W&&(t=De(t,F," "),t=De(t,C," "));var l=e.nodeName.toLowerCase();if(Re(l,s,t))try{a?e.setAttributeNS(a,o,t):e.setAttribute(o,t),Le(c.removed)}catch(e){}}}Te("afterSanitizeAttributes",e,null)}}function $e(e){var t,n=Se(e);for(Te("beforeSanitizeShadowDOM",e,null);t=n.nextNode();)Te("uponSanitizeShadowNode",t,null),Ee(t)||(t.content instanceof u&&$e(t.content),Oe(t));Te("afterSanitizeShadowDOM",e,null)}return c.sanitize=function(e,t){var n,r=void 0,i=void 0,o=void 0;if((fe=!e)&&(e="\x3c!--\x3e"),"string"!=typeof e&&!Ae(e)){if("function"!=typeof e.toString)throw He("toString is not a function");if("string"!=typeof(e=e.toString()))throw He("dirty is not a string, aborting")}if(!c.isSupported){if("object"===ct(s.toStaticHTML)||"function"==typeof s.toStaticHTML){if("string"==typeof e)return s.toStaticHTML(e);if(Ae(e))return s.toStaticHTML(e.outerHTML)}return e}if(Y||O(t),c.removed=[],"string"==typeof e&&(re=!1),!re)if(e instanceof p)1===(t=(r=_e("\x3c!----\x3e")).ownerDocument.importNode(e,!0)).nodeType&&"BODY"===t.nodeName||"HTML"===t.nodeName?r=t:r.appendChild(t);else{if(!K&&!W&&!V&&-1===e.indexOf("<"))return k&&ee?k.createHTML(e):e;if(!(r=_e(e)))return K?null:w}r&&X&&we(r.firstChild);for(var a=Se(re?e:r);n=a.nextNode();)3===n.nodeType&&n===i||Ee(n)||(n.content instanceof u&&$e(n.content),Oe(n),i=n);if(i=null,re)return e;if(K){if(Q)for(o=S.call(r.ownerDocument);r.firstChild;)o.appendChild(r.firstChild);else o=r;return J&&(o=T.call(l,o,!0)),o}return e=V?r.outerHTML:r.innerHTML,W&&(e=De(e,F," "),e=De(e,C," ")),k&&ee?k.createHTML(e):e},c.setConfig=function(e){O(e),Y=!0},c.clearConfig=function(){ge=null,Y=!1},c.isValidAttribute=function(e,t,n){return ge||O({}),e=Ne(e),t=Ne(t),Re(e,t,n)},c.addHook=function(e,t){"function"==typeof t&&(R[e]=R[e]||[],ze(R[e],t))},c.removeHook=function(e){R[e]&&Le(R[e])},c.removeHooks=function(e){R[e]&&(R[e]=[])},c.removeAllHooks=function(){R={}},c}();function se(e){var t,n=e.loaded,r=e.total,i=e.step;ie||((e=v("div")).classList.add("progress"),a(g,e),ie=e),t=i?80<(t=parseInt(ie.style.width||0,10)+i)?80:t:Math.floor(n/r*100),ie.style.opacity=1,ie.style.width=95<=t?"100%":t+"%",95<=t&&(clearTimeout(oe),oe=setTimeout(function(e){ie.style.opacity=0,ie.style.width="0%"},200))}var le={};function ce(i,e,t){void 0===e&&(e=!1),void 0===t&&(t={});function o(){a.addEventListener.apply(a,arguments)}var n,a=new XMLHttpRequest,r=le[i];if(r)return{then:function(e){return e(r.content,r.opt)},abort:u};for(n in a.open("GET",i),t)l.call(t,n)&&a.setRequestHeader(n,t[n]);return a.send(),{then:function(t,n){var r;void 0===n&&(n=u),e&&(r=setInterval(function(e){return se({step:Math.floor(5*Math.random()+1)})},500),o("progress",se),o("loadend",function(e){se(e),clearInterval(r)})),o("error",n),o("load",function(e){e=e.target;400<=e.status?n(e):(e=le[i]={content:e.response,opt:{updatedAt:a.getResponseHeader("last-modified")}},t(e.content,e.opt))})},abort:function(e){return 4!==a.readyState&&a.abort()}}}function ue(e,t){e.innerHTML=e.innerHTML.replace(/var\(\s*--theme-color.*?\)/g,t)}var pe=f.title;function he(){var e,t=d("section.cover");t&&(e=t.getBoundingClientRect().height,window.pageYOffset>=e||t.classList.contains("hidden")?S(g,"add","sticky"):S(g,"remove","sticky"))}function de(e,t,r,n){var i=[];null!=(t=d(t))&&(i=k(t,"a"));var o,a=decodeURI(e.toURL(e.getCurrentPath()));return i.sort(function(e,t){return t.href.length-e.href.length}).forEach(function(e){var t=decodeURI(e.getAttribute("href")),n=r?e.parentNode:e;e.title=e.title||e.innerText,0!==a.indexOf(t)||o?S(n,"remove","active"):(o=e,S(n,"add","active"))}),n&&(f.title=o?o.title||o.innerText+" - "+pe:pe),o}function fe(e,t){for(var n=0;nthis.end&&e>=this.next}[this.direction]}},{key:"_defaultEase",value:function(e,t,n,r){return(e/=r/2)<1?n/2*e*e+t:-n/2*(--e*(e-2)-1)+t}}]),be);function be(){var e=0l){t=t||p;break}t=p}!t||(n=xe[Re(e,t.getAttribute("data-id"))])&&n!==a&&(a&&a.classList.remove("active"),n.classList.add("active"),a=n,!_e&&g.classList.contains("sticky")&&(s=r.clientHeight,e=a.offsetTop+a.clientHeight+40,n=a.offsetTop>=o.scrollTop&&e<=o.scrollTop+s,a=+e"']/),yt=/[&<>"']/g,bt=/[<>"']|&(?!#?\w+;)/,kt=/[<>"']|&(?!#?\w+;)/g,wt={"&":"&","<":"<",">":">",'"':""","'":"'"};var xt=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function _t(e){return e.replace(xt,function(e,t){return"colon"===(t=t.toLowerCase())?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""})}var St=/(^|[^\[])\^/g;var At=/[^\w:]/g,Tt=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;var Et={},Rt=/^[^:]+:\/*[^/]*$/,Ot=/^([^:]+:)[\s\S]*$/,$t=/^([^:]+:\/*[^/]*)[\s\S]*$/;function Ft(e,t){Et[" "+e]||(Rt.test(e)?Et[" "+e]=e+"/":Et[" "+e]=Ct(e,"/",!0));var n=-1===(e=Et[" "+e]).indexOf(":");return"//"===t.substring(0,2)?n?t:e.replace(Ot,"$1")+t:"/"===t.charAt(0)?n?t:e.replace($t,"$1")+t:e+t}function Ct(e,t,n){var r=e.length;if(0===r)return"";for(var i=0;it)n.splice(t);else for(;n.length>=1,e+=e;return n+e},jt=mt.defaults,Ht=Ct,qt=It,Ut=Lt,Bt=I;function Zt(e,t,n){var r=t.href,i=t.title?Ut(t.title):null,t=e[1].replace(/\\([\[\]])/g,"$1");return"!"!==e[0].charAt(0)?{type:"link",raw:n,href:r,title:i,text:t}:{type:"image",raw:n,href:r,title:i,text:Ut(t)}}var Gt=function(){function e(e){this.options=e||jt}return e.prototype.space=function(e){e=this.rules.block.newline.exec(e);if(e)return 1=n.length?e.slice(n.length):e}).join("\n")}(n,t[3]||"");return{type:"code",raw:n,lang:t[2]?t[2].trim():t[2],text:e}}},e.prototype.heading=function(e){var t=this.rules.block.heading.exec(e);if(t){var n=t[2].trim();return/#$/.test(n)&&(e=Ht(n,"#"),!this.options.pedantic&&e&&!/ $/.test(e)||(n=e.trim())),{type:"heading",raw:t[0],depth:t[1].length,text:n}}},e.prototype.nptable=function(e){e=this.rules.block.nptable.exec(e);if(e){var t={type:"table",header:qt(e[1].replace(/^ *| *\| *$/g,"")),align:e[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:e[3]?e[3].replace(/\n$/,"").split("\n"):[],raw:e[0]};if(t.header.length===t.align.length){for(var n=t.align.length,r=0;r ?/gm,"");return{type:"blockquote",raw:t[0],text:e}}},e.prototype.list=function(e){e=this.rules.block.list.exec(e);if(e){for(var t,n,r,i,o,a=e[0],s=e[2],l=1d[1].length:r[1].length>d[0].length||3/i.test(e[0])&&(t=!1),!n&&/^<(pre|code|kbd|script)(\s|>)/i.test(e[0])?n=!0:n&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(e[0])&&(n=!1),{type:this.options.sanitize?"text":"html",raw:e[0],inLink:t,inRawBlock:n,text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(e[0]):Ut(e[0]):e[0]}},e.prototype.link=function(e){var t=this.rules.inline.link.exec(e);if(t){var n=t[2].trim();if(!this.options.pedantic&&/^$/.test(n))return;e=Ht(n.slice(0,-1),"\\");if((n.length-e.length)%2==0)return}else{var r=Bt(t[2],"()");-1$/.test(n)?r.slice(1):r.slice(1,-1)),Zt(t,{href:r?r.replace(this.rules.inline._escapes,"$1"):r,title:o?o.replace(this.rules.inline._escapes,"$1"):o},t[0])}},e.prototype.reflink=function(e,t){if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){e=(n[2]||n[1]).replace(/\s+/g," ");if((e=t[e.toLowerCase()])&&e.href)return Zt(n,e,n[0]);var n=n[0].charAt(0);return{type:"text",raw:n,text:n}}},e.prototype.strong=function(e,t,n){void 0===n&&(n="");var r=this.rules.inline.strong.start.exec(e);if(r&&(!r[1]||r[1]&&(""===n||this.rules.inline.punctuation.exec(n)))){t=t.slice(-1*e.length);var i,o="**"===r[0]?this.rules.inline.strong.endAst:this.rules.inline.strong.endUnd;for(o.lastIndex=0;null!=(r=o.exec(t));)if(i=this.rules.inline.strong.middle.exec(t.slice(0,r.index+3)))return{type:"strong",raw:e.slice(0,i[0].length),text:e.slice(2,i[0].length-2)}}},e.prototype.em=function(e,t,n){void 0===n&&(n="");var r=this.rules.inline.em.start.exec(e);if(r&&(!r[1]||r[1]&&(""===n||this.rules.inline.punctuation.exec(n)))){t=t.slice(-1*e.length);var i,o="*"===r[0]?this.rules.inline.em.endAst:this.rules.inline.em.endUnd;for(o.lastIndex=0;null!=(r=o.exec(t));)if(i=this.rules.inline.em.middle.exec(t.slice(0,r.index+2)))return{type:"em",raw:e.slice(0,i[0].length),text:e.slice(1,i[0].length-1)}}},e.prototype.codespan=function(e){var t=this.rules.inline.code.exec(e);if(t){var n=t[2].replace(/\n/g," "),r=/[^ ]/.test(n),e=/^ /.test(n)&&/ $/.test(n);return r&&e&&(n=n.substring(1,n.length-1)),n=Ut(n,!0),{type:"codespan",raw:t[0],text:n}}},e.prototype.br=function(e){e=this.rules.inline.br.exec(e);if(e)return{type:"br",raw:e[0]}},e.prototype.del=function(e){e=this.rules.inline.del.exec(e);if(e)return{type:"del",raw:e[0],text:e[2]}},e.prototype.autolink=function(e,t){e=this.rules.inline.autolink.exec(e);if(e){var n,t="@"===e[2]?"mailto:"+(n=Ut(this.options.mangle?t(e[1]):e[1])):n=Ut(e[1]);return{type:"link",raw:e[0],text:n,href:t,tokens:[{type:"text",raw:n,text:n}]}}},e.prototype.url=function(e,t){var n,r,i,o;if(n=this.rules.inline.url.exec(e)){if("@"===n[2])i="mailto:"+(r=Ut(this.options.mangle?t(n[0]):n[0]));else{for(;o=n[0],n[0]=this.rules.inline._backpedal.exec(n[0])[0],o!==n[0];);r=Ut(n[0]),i="www."===n[1]?"http://"+r:r}return{type:"link",raw:n[0],text:r,href:i,tokens:[{type:"text",raw:r,text:r}]}}},e.prototype.inlineText=function(e,t,n){e=this.rules.inline.text.exec(e);if(e){n=t?this.options.sanitize?this.options.sanitizer?this.options.sanitizer(e[0]):Ut(e[0]):e[0]:Ut(this.options.smartypants?n(e[0]):e[0]);return{type:"text",raw:e[0],text:n}}},e}(),It=Dt,I=Nt,Dt=Pt,Nt={newline:/^(?: *(?:\n|$))+/,code:/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,fences:/^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,hr:/^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?! {0,3}bull )\n*|\s*$)/,html:"^ {0,3}(?:<(script|pre|style)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:\\n{2,}|$)|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$))",def:/^ {0,3}\[(label)\]: *\n? *]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,nptable:It,table:It,lheading:/^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,_paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html| +\n)[^\n]+)*)/,text:/^[^\n]+/,_label:/(?!\s*\])(?:\\[\[\]]|[^\[\]])+/,_title:/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/};Nt.def=I(Nt.def).replace("label",Nt._label).replace("title",Nt._title).getRegex(),Nt.bullet=/(?:[*+-]|\d{1,9}[.)])/,Nt.item=/^( *)(bull) ?[^\n]*(?:\n(?! *bull ?)[^\n]*)*/,Nt.item=I(Nt.item,"gm").replace(/bull/g,Nt.bullet).getRegex(),Nt.listItemStart=I(/^( *)(bull)/).replace("bull",Nt.bullet).getRegex(),Nt.list=I(Nt.list).replace(/bull/g,Nt.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+Nt.def.source+")").getRegex(),Nt._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",Nt._comment=/|$)/,Nt.html=I(Nt.html,"i").replace("comment",Nt._comment).replace("tag",Nt._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),Nt.paragraph=I(Nt._paragraph).replace("hr",Nt.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|!--)").replace("tag",Nt._tag).getRegex(),Nt.blockquote=I(Nt.blockquote).replace("paragraph",Nt.paragraph).getRegex(),Nt.normal=Dt({},Nt),Nt.gfm=Dt({},Nt.normal,{nptable:"^ *([^|\\n ].*\\|.*)\\n {0,3}([-:]+ *\\|[-| :]*)(?:\\n((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)",table:"^ *\\|(.+)\\n {0,3}\\|?( *[-:]+[-| :]*)(?:\\n *((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"}),Nt.gfm.nptable=I(Nt.gfm.nptable).replace("hr",Nt.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|!--)").replace("tag",Nt._tag).getRegex(),Nt.gfm.table=I(Nt.gfm.table).replace("hr",Nt.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|!--)").replace("tag",Nt._tag).getRegex(),Nt.pedantic=Dt({},Nt.normal,{html:I("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",Nt._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:It,paragraph:I(Nt.normal._paragraph).replace("hr",Nt.hr).replace("heading"," *#{1,6} *[^\n]").replace("lheading",Nt.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()});It={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:It,tag:"^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,nolink:/^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,reflinkSearch:"reflink|nolink(?!\\()",strong:{start:/^(?:(\*\*(?=[*punctuation]))|\*\*)(?![\s])|__/,middle:/^\*\*(?:(?:(?!overlapSkip)(?:[^*]|\\\*)|overlapSkip)|\*(?:(?!overlapSkip)(?:[^*]|\\\*)|overlapSkip)*?\*)+?\*\*$|^__(?![\s])((?:(?:(?!overlapSkip)(?:[^_]|\\_)|overlapSkip)|_(?:(?!overlapSkip)(?:[^_]|\\_)|overlapSkip)*?_)+?)__$/,endAst:/[^punctuation\s]\*\*(?!\*)|[punctuation]\*\*(?!\*)(?:(?=[punctuation_\s]|$))/,endUnd:/[^\s]__(?!_)(?:(?=[punctuation*\s])|$)/},em:{start:/^(?:(\*(?=[punctuation]))|\*)(?![*\s])|_/,middle:/^\*(?:(?:(?!overlapSkip)(?:[^*]|\\\*)|overlapSkip)|\*(?:(?!overlapSkip)(?:[^*]|\\\*)|overlapSkip)*?\*)+?\*$|^_(?![_\s])(?:(?:(?!overlapSkip)(?:[^_]|\\_)|overlapSkip)|_(?:(?!overlapSkip)(?:[^_]|\\_)|overlapSkip)*?_)+?_$/,endAst:/[^punctuation\s]\*(?!\*)|[punctuation]\*(?!\*)(?:(?=[punctuation_\s]|$))/,endUnd:/[^\s]_(?!_)(?:(?=[punctuation*\s])|$)/},code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:It,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\?@\\[\\]`^{|}~"};It.punctuation=I(It.punctuation).replace(/punctuation/g,It._punctuation).getRegex(),It._blockSkip="\\[[^\\]]*?\\]\\([^\\)]*?\\)|`[^`]*?`|<[^>]*?>",It._overlapSkip="__[^_]*?__|\\*\\*\\[^\\*\\]*?\\*\\*",It._comment=I(Nt._comment).replace("(?:--\x3e|$)","--\x3e").getRegex(),It.em.start=I(It.em.start).replace(/punctuation/g,It._punctuation).getRegex(),It.em.middle=I(It.em.middle).replace(/punctuation/g,It._punctuation).replace(/overlapSkip/g,It._overlapSkip).getRegex(),It.em.endAst=I(It.em.endAst,"g").replace(/punctuation/g,It._punctuation).getRegex(),It.em.endUnd=I(It.em.endUnd,"g").replace(/punctuation/g,It._punctuation).getRegex(),It.strong.start=I(It.strong.start).replace(/punctuation/g,It._punctuation).getRegex(),It.strong.middle=I(It.strong.middle).replace(/punctuation/g,It._punctuation).replace(/overlapSkip/g,It._overlapSkip).getRegex(),It.strong.endAst=I(It.strong.endAst,"g").replace(/punctuation/g,It._punctuation).getRegex(),It.strong.endUnd=I(It.strong.endUnd,"g").replace(/punctuation/g,It._punctuation).getRegex(),It.blockSkip=I(It._blockSkip,"g").getRegex(),It.overlapSkip=I(It._overlapSkip,"g").getRegex(),It._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g,It._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,It._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,It.autolink=I(It.autolink).replace("scheme",It._scheme).replace("email",It._email).getRegex(),It._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,It.tag=I(It.tag).replace("comment",It._comment).replace("attribute",It._attribute).getRegex(),It._label=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,It._href=/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/,It._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,It.link=I(It.link).replace("label",It._label).replace("href",It._href).replace("title",It._title).getRegex(),It.reflink=I(It.reflink).replace("label",It._label).getRegex(),It.reflinkSearch=I(It.reflinkSearch,"g").replace("reflink",It.reflink).replace("nolink",It.nolink).getRegex(),It.normal=Dt({},It),It.pedantic=Dt({},It.normal,{strong:{start:/^__|\*\*/,middle:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,endAst:/\*\*(?!\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\*/,middle:/^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,endAst:/\*(?!\*)/g,endUnd:/_(?!_)/g},link:I(/^!?\[(label)\]\((.*?)\)/).replace("label",It._label).getRegex(),reflink:I(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",It._label).getRegex()}),It.gfm=Dt({},It.normal,{escape:I(It.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\'+(n?e:nn(e,!0))+"\n":"
"+(n?e:nn(e,!0))+"
\n"},e.prototype.blockquote=function(e){return"
\n"+e+"
\n"},e.prototype.html=function(e){return e},e.prototype.heading=function(e,t,n,r){return this.options.headerIds?"'+e+"\n":""+e+"\n"},e.prototype.hr=function(){return this.options.xhtml?"
\n":"
\n"},e.prototype.list=function(e,t,n){var r=t?"ol":"ul";return"<"+r+(t&&1!==n?' start="'+n+'"':"")+">\n"+e+"\n"},e.prototype.listitem=function(e){return"
  • "+e+"
  • \n"},e.prototype.checkbox=function(e){return" "},e.prototype.paragraph=function(e){return"

    "+e+"

    \n"},e.prototype.table=function(e,t){return"\n\n"+e+"\n"+(t=t&&""+t+"")+"
    \n"},e.prototype.tablerow=function(e){return"\n"+e+"\n"},e.prototype.tablecell=function(e,t){var n=t.header?"th":"td";return(t.align?"<"+n+' align="'+t.align+'">':"<"+n+">")+e+"\n"},e.prototype.strong=function(e){return""+e+""},e.prototype.em=function(e){return""+e+""},e.prototype.codespan=function(e){return""+e+""},e.prototype.br=function(){return this.options.xhtml?"
    ":"
    "},e.prototype.del=function(e){return""+e+""},e.prototype.link=function(e,t,n){if(null===(e=tn(this.options.sanitize,this.options.baseUrl,e)))return n;e='"},e.prototype.image=function(e,t,n){if(null===(e=tn(this.options.sanitize,this.options.baseUrl,e)))return n;n=''+n+'":">"},e.prototype.text=function(e){return e},e}(),on=function(){function e(){}return e.prototype.strong=function(e){return e},e.prototype.em=function(e){return e},e.prototype.codespan=function(e){return e},e.prototype.del=function(e){return e},e.prototype.html=function(e){return e},e.prototype.text=function(e){return e},e.prototype.link=function(e,t,n){return""+n},e.prototype.image=function(e,t,n){return""+n},e.prototype.br=function(){return""},e}(),an=function(){function e(){this.seen={}}return e.prototype.serialize=function(e){return e.toLowerCase().trim().replace(/<[!\/a-z].*?>/gi,"").replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-")},e.prototype.getNextSafeSlug=function(e,t){var n=e,r=0;if(this.seen.hasOwnProperty(n))for(r=this.seen[e];n=e+"-"+ ++r,this.seen.hasOwnProperty(n););return t||(this.seen[e]=r,this.seen[n]=0),n},e.prototype.slug=function(e,t){void 0===t&&(t={});var n=this.serialize(e);return this.getNextSafeSlug(n,t.dryrun)},e}(),sn=mt.defaults,ln=zt,cn=function(){function n(e){this.options=e||sn,this.options.renderer=this.options.renderer||new rn,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new on,this.slugger=new an}return n.parse=function(e,t){return new n(t).parse(e)},n.parseInline=function(e,t){return new n(t).parseInline(e)},n.prototype.parse=function(e,t){void 0===t&&(t=!0);for(var n,r,i,o,a,s,l,c,u,p,h,d,f,g,m,v="",y=e.length,b=0;bAn error occurred:

    "+hn(e.message+"",!0)+"
    ";throw e}}fn.options=fn.setOptions=function(e){return un(fn.defaults,e),dn(fn.defaults),fn},fn.getDefaults=Lt,fn.defaults=mt,fn.use=function(o){var t,e=un({},o);if(o.renderer){var n,a=fn.defaults.renderer||new rn;for(n in o.renderer)!function(r){var i=a[r];a[r]=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];var n=o.renderer[r].apply(a,e);return!1===n&&(n=i.apply(a,e)),n}}(n);e.renderer=a}if(o.tokenizer){var i,s=fn.defaults.tokenizer||new Gt;for(i in o.tokenizer)!function(){var r=s[i];s[i]=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];var n=o.tokenizer[i].apply(s,e);return!1===n&&(n=r.apply(s,e)),n}}();e.tokenizer=s}o.walkTokens&&(t=fn.defaults.walkTokens,e.walkTokens=function(e){o.walkTokens(e),t&&t(e)}),fn.setOptions(e)},fn.walkTokens=function(e,t){for(var n=0,r=e;nAn error occurred:

    "+hn(e.message+"",!0)+"
    ";throw e}},fn.Parser=cn,fn.parser=cn.parse,fn.Renderer=rn,fn.TextRenderer=on,fn.Lexer=Jt,fn.lexer=Jt.lex,fn.Tokenizer=Gt,fn.Slugger=an;var gn=fn.parse=fn;function mn(e,n){if(void 0===n&&(n='
      {inner}
    '),!e||!e.length)return"";var r="";return e.forEach(function(e){var t=e.title.replace(/(<([^>]+)>)/g,"");r+='
  • '+e.title+"
  • ",e.children&&(r+=mn(e.children,n))}),n.replace("{inner}",r)}function vn(e,t){return'

    '+t.slice(5).trim()+"

    "}function yn(e,r){var i=[],o={};return e.forEach(function(e){var t=e.level||1,n=t-1;r?@[\]^`{|}~]/g;function wn(e){return e.toLowerCase()}function xn(e){if("string"!=typeof e)return"";var t=e.trim().replace(/[A-Z]+/g,wn).replace(/<[^>]+>/g,"").replace(kn,"").replace(/\s/g,"-").replace(/-+/g,"-").replace(/^(\d)/,"_$1"),e=bn[t],e=l.call(bn,t)?e+1:0;return(bn[t]=e)&&(t=t+"-"+e),t}function _n(e,t){return''+t+''}function Sn(e){void 0===e&&(e="");var r={};return{str:e=e&&e.replace(/^('|")/,"").replace(/('|")$/,"").replace(/(?:^|\s):([\w-]+:?)=?([\w-%]+)?/g,function(e,t,n){return-1===t.indexOf(":")?(r[t]=n&&n.replace(/"/g,"")||!0,""):e}).trim(),config:r}}function An(e){return void 0===e&&(e=""),e.replace(/(<\/?a.*?>)/gi,"")}xn.clear=function(){bn={}};var Tn,En=ft(function(e){var a,s,l,c,u,r,t,i=function(l){var c=/\blang(?:uage)?-([\w-]+)\b/i,t=0,$={manual:l.Prism&&l.Prism.manual,disableWorkerMessageHandler:l.Prism&&l.Prism.disableWorkerMessageHandler,util:{encode:function e(t){return t instanceof F?new F(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/=a.reach);y+=v.value.length,v=v.next){var b=v.value;if(n.length>t.length)return;if(!(b instanceof F)){var k,w=1;if(f){if(!(k=C(m,y,t,d)))break;var x=k.index,_=k.index+k[0].length,S=y;for(S+=v.value.length;S<=x;)v=v.next,S+=v.value.length;if(S-=v.value.length,y=S,v.value instanceof F)continue;for(var A=v;A!==n.tail&&(S<_||"string"==typeof A.value);A=A.next)w++,S+=A.value.length;w--,b=t.slice(y,S),k.index-=y}else if(!(k=C(m,0,b,d)))continue;var x=k.index,T=k[0],E=b.slice(0,x),R=b.slice(x+T.length),O=y+b.length;a&&O>a.reach&&(a.reach=O);var b=v.prev;E&&(b=L(n,b,E),y+=E.length),z(n,b,w);var T=new F(s,h?$.tokenize(T,h):T,g,T);v=L(n,b,T),R&&L(n,v,R),1"+i.content+""},!l.document)return l.addEventListener&&($.disableWorkerMessageHandler||l.addEventListener("message",function(e){var t=JSON.parse(e.data),n=t.language,e=t.code,t=t.immediateClose;l.postMessage($.highlight(e,$.languages[n],n)),t&&l.close()},!1)),$;var e,n=$.util.currentScript();function r(){$.manual||$.highlightAll()}return n&&($.filename=n.src,n.hasAttribute("data-manual")&&($.manual=!0)),$.manual||("loading"===(e=document.readyState)||"interactive"===e&&n&&n.defer?document.addEventListener("DOMContentLoaded",r):window.requestAnimationFrame?window.requestAnimationFrame(r):window.setTimeout(r,16)),$}("undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{});function p(e,t){var n=(n=e.className).replace(r," ")+" language-"+t;e.className=n.replace(/\s+/g," ").trim()}e.exports&&(e.exports=i),void 0!==dt&&(dt.Prism=i),i.languages.markup={comment://,prolog:/<\?[\s\S]+?\?>/,doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/,name:/[^\s<>'"]+/}},cdata://i,tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},i.languages.markup.tag.inside["attr-value"].inside.entity=i.languages.markup.entity,i.languages.markup.doctype.inside["internal-subset"].inside=i.languages.markup,i.hooks.add("wrap",function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))}),Object.defineProperty(i.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^$)/i,lookbehind:!0,inside:i.languages[t]},n.cdata=/^$/i;n={"included-cdata":{pattern://i,inside:n}};n["language-"+t]={pattern:/[\s\S]+/,inside:i.languages[t]};t={};t[e]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,function(){return e}),"i"),lookbehind:!0,greedy:!0,inside:n},i.languages.insertBefore("markup","cdata",t)}}),i.languages.html=i.languages.markup,i.languages.mathml=i.languages.markup,i.languages.svg=i.languages.markup,i.languages.xml=i.languages.extend("markup",{}),i.languages.ssml=i.languages.xml,i.languages.atom=i.languages.xml,i.languages.rss=i.languages.xml,function(e){var t=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:RegExp("[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),string:{pattern:t,greedy:!0},property:/(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,important:/!important\b/i,function:/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;t=e.languages.markup;t&&(t.tag.addInlined("style","css"),e.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/(^|["'\s])style\s*=\s*(?:"[^"]*"|'[^']*')/i,lookbehind:!0,inside:{"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{style:{pattern:/(["'])[\s\S]+(?=["']$)/,lookbehind:!0,alias:"language-css",inside:e.languages.css},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},"attr-name":/^style/i}}},t.tag))}(i),i.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|interface|extends|implements|trait|instanceof|new)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,boolean:/\b(?:true|false)\b/,function:/\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},i.languages.javascript=i.languages.extend("clike",{"class-name":[i.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:prototype|constructor))/,lookbehind:!0}],keyword:[{pattern:/((?:^|})\s*)(?:catch|finally)\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|for|from|function|(?:get|set)(?=\s*[\[$\w\xA0-\uFFFF])|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:/\b(?:(?:0[xX](?:[\dA-Fa-f](?:_[\dA-Fa-f])?)+|0[bB](?:[01](?:_[01])?)+|0[oO](?:[0-7](?:_[0-7])?)+)n?|(?:\d(?:_\d)?)+n|NaN|Infinity)\b|(?:\b(?:\d(?:_\d)?)+\.?(?:\d(?:_\d)?)*|\B\.(?:\d(?:_\d)?)+)(?:[Ee][+-]?(?:\d(?:_\d)?)+)?/,operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),i.languages.javascript["class-name"][0].pattern=/(\b(?:class|interface|extends|implements|instanceof|new)\s+)[\w.\\]+/,i.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*]|\\.|[^/\\\[\r\n])+\/[gimyus]{0,6}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:i.languages.regex},"regex-flags":/[a-z]+$/,"regex-delimiter":/^\/|\/$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:i.languages.javascript},{pattern:/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,inside:i.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:i.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:i.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),i.languages.insertBefore("javascript","string",{"template-string":{pattern:/`(?:\\[\s\S]|\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}|(?!\${)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\${|}$/,alias:"punctuation"},rest:i.languages.javascript}},string:/[\s\S]+/}}}),i.languages.markup&&i.languages.markup.tag.addInlined("script","javascript"),i.languages.js=i.languages.javascript,"undefined"!=typeof self&&self.Prism&&self.document&&(Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector),a=window.Prism,s={js:"javascript",py:"python",rb:"ruby",ps1:"powershell",psm1:"powershell",sh:"bash",bat:"batch",h:"c",tex:"latex"},u="pre[data-src]:not(["+(l="data-src-status")+'="loaded"]):not(['+l+'="'+(c="loading")+'"])',r=/\blang(?:uage)?-([\w-]+)\b/i,a.hooks.add("before-highlightall",function(e){e.selector+=", "+u}),a.hooks.add("before-sanity-check",function(e){var t,n,r,i,o=e.element;o.matches(u)&&(e.code="",o.setAttribute(l,c),(t=o.appendChild(document.createElement("CODE"))).textContent="Loading…",n=o.getAttribute("data-src"),"none"===(e=e.language)&&(r=(/\.(\w+)$/.exec(n)||[,"none"])[1],e=s[r]||r),p(t,e),p(o,e),(r=a.plugins.autoloader)&&r.loadLanguages(e),(i=new XMLHttpRequest).open("GET",n,!0),i.onreadystatechange=function(){4==i.readyState&&(i.status<400&&i.responseText?(o.setAttribute(l,"loaded"),t.textContent=i.responseText,a.highlightElement(t)):(o.setAttribute(l,"failed"),400<=i.status?t.textContent="✖ Error "+i.status+" while fetching file: "+i.statusText:t.textContent="✖ Error: File does not exist or is empty"))},i.send(null))}),t=!(a.plugins.fileHighlight={highlight:function(e){for(var t,n=(e||document).querySelectorAll(u),r=0;t=n[r++];)a.highlightElement(t)}}),a.fileHighlight=function(){t||(console.warn("Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead."),t=!0),a.plugins.fileHighlight.highlight.apply(this,arguments)})});function Rn(e,t){return"___"+e.toUpperCase()+t+"___"}Tn=Prism,Object.defineProperties(Tn.languages["markup-templating"]={},{buildPlaceholders:{value:function(r,i,e,o){var a;r.language===i&&(a=r.tokenStack=[],r.code=r.code.replace(e,function(e){if("function"==typeof o&&!o(e))return e;for(var t,n=a.length;-1!==r.code.indexOf(t=Rn(i,n));)++n;return a[n]=e,t}),r.grammar=Tn.languages.markup)}},tokenizePlaceholders:{value:function(c,u){var p,h;c.language===u&&c.tokenStack&&(c.grammar=Tn.languages[u],p=0,h=Object.keys(c.tokenStack),function e(t){for(var n=0;n=h.length);n++){var r,i,o,a,s,l=t[n];"string"==typeof l||l.content&&"string"==typeof l.content?(i=h[p],o=c.tokenStack[i],r="string"==typeof l?l:l.content,s=Rn(u,i),-1<(a=r.indexOf(s))&&(++p,i=r.substring(0,a),o=new Tn.Token(u,Tn.tokenize(o,c.grammar),"language-"+u,o),a=r.substring(a+s.length),s=[],i&&s.push.apply(s,e([i])),s.push(o),a&&s.push.apply(s,e([a])),"string"==typeof l?t.splice.apply(t,[n,1].concat(s)):l.content=s)):l.content&&e(l.content)}return t}(c.tokens))}}});function On(i,e){var o=this;this.config=i,this.router=e,this.cacheTree={},this.toc=[],this.cacheTOC={},this.linkTarget=i.externalLinkTarget||"_blank",this.linkRel="_blank"===this.linkTarget?i.externalLinkRel||"noopener":"",this.contentBase=e.getBasePath();var t=this._initRenderer();this.heading=t.heading;var a=r(e=i.markdown||{})?e(gn,t):(gn.setOptions(y(e,{renderer:y(t,e.renderer)})),gn);this._marked=a,this.compile=function(n){var r=!0,e=s(function(e){r=!1;var t="";return n?(t=c(n)?a(n):a.parser(n),t=i.noEmoji?t:t.replace(/:\+1:/g,":thumbsup:").replace(/:-1:/g,":thumbsdown:").replace(/<(pre|template|code)[^>]*?>[\s\S]+?<\/(pre|template|code)>/g,function(e){return e.replace(/:/g,"__colon__")}).replace(/:(\w+?):/gi,window.emojify||_n).replace(/__colon__/g,":"),xn.clear(),t):n})(n),t=o.router.parse().file;return r?o.toc=o.cacheTOC[t]:o.cacheTOC[t]=[].concat(o.toc),e}}var $n={},Fn={markdown:function(e){return{url:e}},mermaid:function(e){return{url:e}},iframe:function(e,t){return{html:'"}},video:function(e,t){return{html:'"}},audio:function(e,t){return{html:'"}},code:function(e,t){var n=e.match(/\.(\w+)$/);return"md"===(n=t||n&&n[1])&&(n="markdown"),{url:e,lang:n}}};On.prototype.compileEmbed=function(e,t){var n,r,i=Sn(t),o=i.str,i=i.config;if(t=o,i.include)return O(e)||(e=N(this.contentBase,F(this.router.getCurrentPath()),e)),i.type&&(r=Fn[i.type])?(n=r.call(this,e,t)).type=i.type:(r="code",/\.(md|markdown)/.test(e)?r="markdown":/\.mmd/.test(e)?r="mermaid":/\.html?/.test(e)?r="iframe":/\.(mp4|ogg)/.test(e)?r="video":/\.mp3/.test(e)&&(r="audio"),(n=Fn[r].call(this,e,t)).type=r),n.fragment=i.fragment,n},On.prototype._matchNotCompileLink=function(e){for(var t=this.config.noCompileLinks||[],n=0;n/g.test(r)&&(r=r.replace("\x3c!-- {docsify-ignore} --\x3e",""),e.title=An(r),e.ignoreSubHeading=!0),/{docsify-ignore}/g.test(r)&&(r=r.replace("{docsify-ignore}",""),e.title=An(r),e.ignoreSubHeading=!0),//g.test(r)&&(r=r.replace("\x3c!-- {docsify-ignore-all} --\x3e",""),e.title=An(r),e.ignoreAllSubs=!0),/{docsify-ignore-all}/g.test(r)&&(r=r.replace("{docsify-ignore-all}",""),e.title=An(r),e.ignoreAllSubs=!0);n=xn(i.id||r),i=o.toURL(o.getCurrentPath(),{id:n});return e.slug=i,h.toc.push(e),"'+r+""},i.code={renderer:e}.renderer.code=function(e,t){void 0===t&&(t="markup");var n=En.languages[t]||En.languages.markup;return'
    '+En.highlight(e.replace(/@DOCSIFY_QM@/g,"`"),n,t)+"
    "},i.link=(n=(t={renderer:e,router:o,linkTarget:t,linkRel:n,compilerClass:h}).renderer,a=t.router,s=t.linkTarget,l=t.linkRel,c=t.compilerClass,n.link=function(e,t,n){void 0===t&&(t="");var r=[],i=Sn(t),o=i.str,i=i.config;return s=i.target||s,l="_blank"===s?c.config.externalLinkRel||"noopener":"",t=o,O(e)||c._matchNotCompileLink(e)||i.ignore?(O(e)||"./"!==e.slice(0,2)||(e=document.URL.replace(/\/(?!.*\/).*/,"/").replace("#/./","")+e),r.push(0===e.indexOf("mailto:")?"":'target="'+s+'"'),r.push(0!==e.indexOf("mailto:")&&""!==l?' rel="'+l+'"':"")):(e===c.config.homepage&&(e="README"),e=a.toURL(e,null,a.getCurrentPath())),i.crossorgin&&"_self"===s&&"history"===c.config.routerMode&&-1===c.config.crossOriginLinks.indexOf(e)&&c.config.crossOriginLinks.push(e),i.disabled&&(r.push("disabled"),e="javascript:void(0)"),i.class&&r.push('class="'+i.class+'"'),i.id&&r.push('id="'+i.id+'"'),t&&r.push('title="'+t+'"'),'"+n+""}),i.paragraph={renderer:e}.renderer.paragraph=function(e){e=/^!>/.test(e)?vn("tip",e):/^\?>/.test(e)?vn("warn",e):"

    "+e+"

    ";return e},i.image=(r=(n={renderer:e,contentBase:r,router:o}).renderer,u=n.contentBase,p=n.router,r.image=function(e,t,n){var r=e,i=[],o=Sn(t),a=o.str,o=o.config;return t=a,o["no-zoom"]&&i.push("data-no-zoom"),t&&i.push('title="'+t+'"'),o.size&&(t=(a=o.size.split("x"))[0],(a=a[1])?i.push('width="'+t+'" height="'+a+'"'):i.push('width="'+t+'"')),o.class&&i.push('class="'+o.class+'"'),o.id&&i.push('id="'+o.id+'"'),O(e)||(r=N(u,F(p.getCurrentPath()),e)),0":''+n+'"}),i.list={renderer:e}.renderer.list=function(e,t,n){t=t?"ol":"ul";return"<"+t+" "+[/
  • /.test(e.split('class="task-list"')[0])?'class="task-list"':"",n&&1"+e+""},i.listitem={renderer:e}.renderer.listitem=function(e){return/^(]*>)/.test(e)?'
  • ":"
  • "+e+"
  • "},e.origin=i,e},On.prototype.sidebar=function(e,t){var n=this.toc,r=this.router.getCurrentPath(),i="";if(e)i=this.compile(e);else{for(var o=0;o{inner}");this.cacheTree[r]=t}return i},On.prototype.subSidebar=function(e){if(e){var t=this.router.getCurrentPath(),n=this.cacheTree,r=this.toc;r[0]&&r[0].ignoreAllSubs&&r.splice(0),r[0]&&1===r[0].level&&r.shift();for(var i=0;i\n'+e+"\n"}]).links={}:(t=[{type:"html",text:e}]).links={}),o({token:i,embedToken:t}),++l>=s&&o({})}}(t);t.embed.url?ce(t.embed.url).then(r):r(t.embed.html)}}({compile:n,embedTokens:s,fetch:t},function(e){var t,n=e.embedToken,e=e.token;e?(t=e.index,u.forEach(function(e){t>e.start&&(t+=e.length)}),y(c,n.links),a=a.slice(0,t).concat(n,a.slice(t+1)),u.push({start:t,length:n.length-1})):(zn[i]=a.concat(),a.links=zn[i].links=c,r(a))})}function Mn(e,t,n){var r,i,o,a;return t="function"==typeof n?n(t):"string"==typeof n?(o=[],a=0,(r=n).replace(B,function(t,e,n){o.push(r.substring(a,n-1)),a=n+=t.length+1,o.push(i&&i[t]||function(e){return("00"+("string"==typeof Z[t]?e[Z[t]]():Z[t](e))).slice(-t.length)})}),a!==r.length&&o.push(r.substring(a)),function(e){for(var t="",n=0,r=e||new Date;n404 - Not found","Vue"in window)for(var o=0,a=k(".markdown-section > *").filter(t);oscript").filter(function(e){return!/template/.test(e.type)})[0])||(e=e.innerText.trim())&&new Function(e)()),"Vue"in window){var l,c,u=[],p=Object.keys(n.vueComponents||{});2===i&&p.length&&p.forEach(function(e){window.Vue.options.components[e]||window.Vue.component(e,n.vueComponents[e])}),!Cn&&n.vueGlobalOptions&&"function"==typeof n.vueGlobalOptions.data&&(Cn=n.vueGlobalOptions.data()),u.push.apply(u,Object.keys(n.vueMounts||{}).map(function(e){return[b(r,e),n.vueMounts[e]]}).filter(function(e){var t=e[0];e[1];return t})),(n.vueGlobalOptions||p.length)&&(l=/{{2}[^{}]*}{2}/,c=/<[^>/]+\s([@:]|v-)[\w-:.[\]]+[=>\s]/,u.push.apply(u,k(".markdown-section > *").filter(function(n){return!u.some(function(e){var t=e[0];e[1];return t===n})}).filter(function(e){return e.tagName.toLowerCase()in(n.vueComponents||{})||e.querySelector(p.join(",")||null)||l.test(e.outerHTML)||c.test(e.outerHTML)}).map(function(e){var t=y({},n.vueGlobalOptions||{});return Cn&&(t.data=function(){return Cn}),[e,t]})));for(var h=0,d=u;h([^<]*?)

    $'))&&("color"===t[2]?r.style.background=t[1]+(t[3]||""):(e=t[1],S(r,"add","has-mask"),O(t[1])||(e=N(this.router.getBasePath(),t[1])),r.style.backgroundImage="url("+e+")",r.style.backgroundSize="cover",r.style.backgroundPosition="center center"),n=n.replace(t[0],"")),this._renderTo(".cover-main",n),he()):S(r,"remove","show")},t.prototype._updateRender=function(){var e,t,n,r;e=this,t=d(".app-name-link"),n=e.config.nameLink,r=e.route.path,t&&(c(e.config.nameLink)?t.setAttribute("href",n):"object"==typeof n&&(e=Object.keys(n).filter(function(e){return-1'):"")),e.coverpage&&(c+=(r=", 100%, 85%",'
    \x3c!--cover--\x3e
    ')),e.logo&&(r=/^data:image/.test(e.logo),t=/(?:http[s]?:)?\/\//.test(e.logo),n=/^\./.test(e.logo),r||t||n||(e.logo=N(this.router.getBasePath(),e.logo))),c+=(n=(t=e).name?t.name:"","
    "+('')+'
    \x3c!--main--\x3e
    '),this._renderTo(l,c,!0)):this.rendered=!0,e.mergeNavbar&&h?u=b(".sidebar"):(s.classList.add("app-nav"),e.repo||s.classList.add("no-badge")),e.loadNavbar&&w(u,s),e.themeColor&&(f.head.appendChild(v("div","").firstElementChild),o=e.themeColor,window.CSS&&window.CSS.supports&&window.CSS.supports("(--v:red)")||(e=k("style:not(.inserted),link"),[].forEach.call(e,function(e){if("STYLE"===e.nodeName)ue(e,o);else if("LINK"===e.nodeName){e=e.getAttribute("href");if(!/\.css$/.test(e))return;ce(e).then(function(e){e=v("style",e);m.appendChild(e),ue(e,o)})}}))),this._updateRender(),S(g,"ready")},t}(function(n){function e(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];n.apply(this,e),this.route={}}return n&&(e.__proto__=n),((e.prototype=Object.create(n&&n.prototype)).constructor=e).prototype.updateRender=function(){this.router.normalize(),this.route=this.router.parse(),g.setAttribute("data-page",this.route.file)},e.prototype.initRouter=function(){var t=this,e=this.config,e=new("history"===(e.routerMode||"hash")&&i?q:H)(e);this.router=e,this.updateRender(),U=this.route,e.onchange(function(e){t.updateRender(),t._updateRender(),U.path!==t.route.path?(t.$fetch(u,t.$resetEvents.bind(t,e.source)),U=t.route):t.$resetEvents(e.source)})},e}(function(e){function t(){e.apply(this,arguments)}return e&&(t.__proto__=e),((t.prototype=Object.create(e&&e.prototype)).constructor=t).prototype.initLifecycle=function(){var n=this;this._hooks={},this._lifecycle={},["init","mounted","beforeEach","afterEach","doneEach","ready"].forEach(function(e){var t=n._hooks[e]=[];n._lifecycle[e]=function(e){return t.push(e)}})},t.prototype.callHook=function(e,n,r){void 0===r&&(r=u);var i=this._hooks[e],o=function(t){var e=i[t];t>=i.length?r(n):"function"==typeof e?2===e.length?e(n,function(e){n=e,o(t+1)}):(e=e(n),n=void 0===e?n:e,o(t+1)):o(t+1)};o(0)},t}(Hn)))))));function Un(e,t,n){return jn&&jn.abort&&jn.abort(),jn=ce(e,!0,n)}window.Docsify={util:In,dom:t,get:ce,slugify:xn,version:"4.12.2"},window.DocsifyCompiler=On,window.marked=gn,window.Prism=En,e(function(e){return new qn})}(); \ No newline at end of file diff --git a/docs/history.md b/docs/history.md new file mode 100644 index 0000000..3d9b18e --- /dev/null +++ b/docs/history.md @@ -0,0 +1,53 @@ + +- **`v0.3.14`** + - [x] 新增 `publicConfig.head` 用于在 `` 中设置标签 + +- **`v0.3.12`** + - [x] 修复切换页面时样式错乱的问题 + +- **`v0.3.11`** + - [x] 优化 es module 模块缓存问题 + +- **`v0.3.7`** + - [x] 新增上下 / 左右布局自由切换 + - [x] 新增 esm 模块支持按相对路径引入 + - [x] 新增 `defaultConfig.toolbar` 属性, 控制工具栏的渲染 + +- **`v0.3.6`** + - [x] 优化 React SFC 的 CDN 缓存问题 + +- **`v0.3.5`** + - [x] React SFC 用 `export default` 包装, 隐藏 `ReactDOM.render` + - [x] `editorWidth` 属性改为 `editorRange` 效果不变 + +- **`v0.3.4`** + - [x] React SFC 单文件组件增加 import 模式 + +- **`v0.3.3`** + - [x] 修复相同静态资源未能缓存的问题 + +- **`v0.3.2`** + - [x] 增加对 ES Module 模块的支持 + - [x] 修复 docsify-plugin 正则匹配意外换行的问题 + +- **`v0.3.1`** + - [x] 针对不同语言增加对应的高亮 + +- **`v0.3.0`** + - [x] 增加 react-loader 用于解析 React 组件 + - [x] 增加 docsify-plugin 混合代码块匹配 + - [x] 修复 docsify-plugin 反引号打断匹配的问题 + +- **`v0.2.9`** + - [x] 修复 html-loader 的脚本渲染顺序错误的问题 + +- **`v0.2.6`** + - [x] 增加多标签页模式, 并实现代码联动 + +- **`v0.2.4`** + - [x] 增加 vue-loader 用于解析 Vue 组件 + +- **`v0.2.2`** + - [x] 增加 docsify-plugin + +... \ No newline at end of file diff --git a/docs/html.md b/docs/html.md new file mode 100644 index 0000000..8eefe5e --- /dev/null +++ b/docs/html.md @@ -0,0 +1,318 @@ + +# HTML 模板 + +### 【创建一个空的模板】 + +- **说明:** + - 空的模板一般没啥用途 + - 这个demo就是单纯的**展示一下最基础的数据结构** + - 当然也可以用来测试`mini-sandbox`是否安装成功 + +
    + + + +
    + +### 【单标签页: html+css+js】 + +- **说明:** + - 如果你只想展示一个组件, 那单个标签页就能满足你的需求, 你可以在 html 里用 + - ` + + + + +``` + --> + +
    + +### 【单标签页: 内置默认 css/js】 + +- **说明:** + - 当前模板的内置 css 和 js, 是不会在**代码层面**体现的, 所以用户也是无法修改 + - 如果是`多标签页模式`, 你也可以放在`resource`下, 这样所有标签页都能享受到 + +
    + + + +
    + +### 【多标签页: 拆分 html/css/js】 + +- **说明:** + - 这里我使用`title`属性, 用来设置标签页的显示名称: + - `index.html` => `HTML` + - `index.css` => `CSS` + - `index.js` => `JS` + - 需要注意`index.css`和`index.js`两个文件不是模板, 无法单独渲染. 所以他们只能作为依赖, 在`index.html`中引入 + + +
    + + + +
    + +### 【多标签页: 渲染多个模板】 + +- **说明:** + - 如果你想展示多个组件的使用, 那你可以像下面这样做成多个标签页来分别渲染 + +
    + + + +
    + + +### 【展示 HTML 组件库 的代码】 + +- **说明:** + - 这里以`Bootstrap5`为例, 你可以放置你自己想展示的组件库的 CDN 链接 + - 由于这两个标签页都是展示同一个组件库的组件, 所以静态资源放在`resource`里 + +
    + + + +
    + +### 【使用 import 和 export】 + +- 说明: + - 这个示例用来演示, 如何在 html 中引入 esm 模块, 并支持了 export 导出 + - 通过观察你会发现, `app.js`中的`getTime`方法是从`utils.js`里导出来的 + +!> 补充: 关于在 html 引入 `app.js` 的方式有两种 + +1. **方式1: 在 jsLibs 中提前定义** + - 像这样 `'index.html': { jsLibs: ['app.js'] }` 设置 jsLibs 属性 + - 好处是用户也无法删除引入的 js 脚本 + - 缺点是用户无法清晰的知道 app.js 是从哪引入的 + +2. **方式2: 在 html 代码中引入** + - 像这样 `` 写一个*相对路径* + - 好处是用户可以在代码中删除 / 切换其他 esm 模块 + - 缺点是用户如果在代码中删除了这一行, 他就看不到 js 实现的效果了 + +
    + + diff --git a/docs/logo.svg b/docs/logo.svg new file mode 100644 index 0000000..47dffaa --- /dev/null +++ b/docs/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/options.md b/docs/options.md new file mode 100644 index 0000000..491727c --- /dev/null +++ b/docs/options.md @@ -0,0 +1,151 @@ + + +# Options & 配置选项 + +> 介绍 MiniSandbox 所有的配置选项, 下面以【在 js 中使用】为例进行代码演示 + +
    + +### el: string | HTMLDivElement + +?> **`必传项`** 因为 Sandbox 需要一个容器 + +```js +new MiniSandbox({ + // 可以是类名, 或者id + el: '#my-sandbox', + + // 也可以是 dom 元素 + el: document.querySelector('#my-sandbox') +}) +``` + +
    + +### files: object + +?> **`必传项`** 因为至少得有一个 tab 标签页 + + +- **属性:** + - `defaultValue?: string` 编辑器的默认值 + - `cssLibs?: string[]` 默认引入的 css 库 + - `jsLibs?: string[]` 默认引入的 js 库 + - `css?: string` 默认加载的 css 样式, 引入顺序在 cssLibs 的后面 + - `js?: string` 默认加载的 js 代码, 引入顺序在 jsLibs 的后面 + - `urlField?: string` 代码编译到 url 上所使用的字段, 默认为空 + +```js +new MiniSandbox({ + el: '#my-sandbox', + files: { + // 其中对象的键, 会被定义为 fileName, 也就是标签页的名字 + 'index.html': { + defaultValue: `` + css: ` + div { + border: 1px solid red; + } + `, + js: ` + window.onload = () => { + console.log('你好鸭~') + } + `, + } + } +}) +``` + +
    + +### resource: object + +?> **`可选项`** 作为当前 Sandbox 下的公共资源, 但是需要注意: 当前 Sandbox 下的所有 tab 标签页都会加载这些资源 + +- **属性:** + - `cssLibs?: string[]` 默认引入的 css 库 + - `jsLibs?: string[]` 默认引入的 js 库 + - `css?: string` 默认加载的 css 样式, 引入顺序在 cssLibs 的后面 + - `js?: string` 默认加载的 js 代码, 引入顺序在 jsLibs 的后面 + +```js +new MiniSandbox({ + el: '#my-sandbox', + files: { + 'index.html': {} + }, + resource: { + cssLibs: [], + jsLibs: [], + css: ` + div { + border: 1px solid red; + } + `, + js: ` + window.onload = () => { + console.log('你好鸭~') + } + `, + } +}) +``` + + +
    + +### defaultConfig: object + +?> **`可选项`** 用来设置一些 Sandbox 的默认配置 + +- **属性:** + + - `height?: string` Sandbox 的高度, 默认为 '300px' + - `autoRun?: boolean` 每次修改后是否自动运行, 默认等于 true + - `autoRunInterval?: number` 每次自动运行的时间间隔, 单位为毫秒, 默认等于 300 + - ~~`editorWidth?: string` 编辑区域默认的宽度占比, 默认编辑区域宽 50%~~  *(版本大于`v0.3.4`后改为`editorRange`)* + - `editorRange?: string` 编辑区域默认占比, 默认情况下编辑区域占 50% + - `draggable?: boolean` 是否可以左右拖动布局, 默认为 true + - `direction?: 'row' | 'row-reverse' | 'column' | 'column-reverse'` 控制上下/左右布局, 默认为 'row' + +```js +new MiniSandbox({ + el: '#my-sandbox', + files: { + 'index.html': {} + }, + defaultConfig: { + height: '300px', + autoRun: true, + autoRunInterval: 300, + editorRange: '55%', + draggable: true, + direction: 'row' + } +}) +``` + +
    + +### events: object + +?> **`可选项`** Sandbox 事件的触发回调函数 + +- **属性:** + + - `onLoad?: () => void` 在线编辑器初始化完成后触发 (因为 css 库和 js 库的加载是异步的) + - `onChange?: () => void` 编辑器的内容发生变化时触发 + +```js +new MiniSandbox({ + el: '#my-sandbox', + files: { + 'index.html': {} + }, + events: { + onLoad: () => {}, + onChange: () => {}, + } +}) +``` \ No newline at end of file diff --git a/docs/prism-bash.js b/docs/prism-bash.js new file mode 100644 index 0000000..5093ffd --- /dev/null +++ b/docs/prism-bash.js @@ -0,0 +1,84 @@ +(function(Prism) { + var insideString = { + variable: [ + // Arithmetic Environment + { + pattern: /\$?\(\([\s\S]+?\)\)/, + inside: { + // If there is a $ sign at the beginning highlight $(( and )) as variable + variable: [{ + pattern: /(^\$\(\([\s\S]+)\)\)/, + lookbehind: true + }, + /^\$\(\(/ + ], + number: /\b0x[\dA-Fa-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee]-?\d+)?/, + // Operators according to https://www.gnu.org/software/bash/manual/bashref.html#Shell-Arithmetic + operator: /--?|-=|\+\+?|\+=|!=?|~|\*\*?|\*=|\/=?|%=?|<<=?|>>=?|<=?|>=?|==?|&&?|&=|\^=?|\|\|?|\|=|\?|:/, + // If there is no $ sign at the beginning highlight (( and )) as punctuation + punctuation: /\(\(?|\)\)?|,|;/ + } + }, + // Command Substitution + { + pattern: /\$\([^)]+\)|`[^`]+`/, + greedy: true, + inside: { + variable: /^\$\(|^`|\)$|`$/ + } + }, + /\$(?:[\w#?*!@]+|\{[^}]+\})/i + ] + }; + + Prism.languages.bash = { + 'shebang': { + pattern: /^#!\s*\/bin\/bash|^#!\s*\/bin\/sh/, + alias: 'important' + }, + 'comment': { + pattern: /(^|[^"{\\])#.*/, + lookbehind: true + }, + 'string': [ + //Support for Here-Documents https://en.wikipedia.org/wiki/Here_document + { + pattern: /((?:^|[^<])<<\s*)["']?(\w+?)["']?\s*\r?\n(?:[\s\S])*?\r?\n\2/, + lookbehind: true, + greedy: true, + inside: insideString + }, + { + pattern: /(["'])(?:\\[\s\S]|\$\([^)]+\)|`[^`]+`|(?!\1)[^\\])*\1/, + greedy: true, + inside: insideString + } + ], + 'variable': insideString.variable, + // Originally based on http://ss64.com/bash/ + 'function': { + pattern: /(^|[\s;|&])(?:alias|apropos|apt-get|aptitude|aspell|awk|basename|bash|bc|bg|builtin|bzip2|cal|cat|cd|cfdisk|chgrp|chmod|chown|chroot|chkconfig|cksum|clear|cmp|comm|command|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|enable|env|ethtool|eval|exec|expand|expect|export|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|getopts|git|grep|groupadd|groupdel|groupmod|groups|gzip|hash|head|help|hg|history|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|jobs|join|kill|killall|less|link|ln|locate|logname|logout|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|make|man|mkdir|mkfifo|mkisofs|mknod|more|most|mount|mtools|mtr|mv|mmv|nano|netstat|nice|nl|nohup|notify-send|npm|nslookup|open|op|passwd|paste|pathchk|ping|pkill|popd|pr|printcap|printenv|printf|ps|pushd|pv|pwd|quota|quotacheck|quotactl|ram|rar|rcp|read|readarray|readonly|reboot|rename|renice|remsync|rev|rm|rmdir|rsync|screen|scp|sdiff|sed|seq|service|sftp|shift|shopt|shutdown|sleep|slocate|sort|source|split|ssh|stat|strace|su|sudo|sum|suspend|sync|tail|tar|tee|test|time|timeout|times|touch|top|traceroute|trap|tr|tsort|tty|type|ulimit|umask|umount|unalias|uname|unexpand|uniq|units|unrar|unshar|uptime|useradd|userdel|usermod|users|uuencode|uudecode|v|vdir|vi|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yes|zip)(?=$|[\s;|&])/, + lookbehind: true + }, + 'keyword': { + pattern: /(^|[\s;|&])(?:let|:|\.|if|then|else|elif|fi|for|break|continue|while|in|case|function|select|do|done|until|echo|exit|return|set|declare)(?=$|[\s;|&])/, + lookbehind: true + }, + 'boolean': { + pattern: /(^|[\s;|&])(?:true|false)(?=$|[\s;|&])/, + lookbehind: true + }, + 'operator': /&&?|\|\|?|==?|!=?|<<>|<=?|>=?|=~/, + 'punctuation': /\$?\(\(?|\)\)?|\.\.|[{}[\];]/ + }; + + var inside = insideString.variable[1].inside; + inside.string = Prism.languages.bash.string; + inside['function'] = Prism.languages.bash['function']; + inside.keyword = Prism.languages.bash.keyword; + inside['boolean'] = Prism.languages.bash['boolean']; + inside.operator = Prism.languages.bash.operator; + inside.punctuation = Prism.languages.bash.punctuation; + + Prism.languages.shell = Prism.languages.bash; +})(Prism); diff --git a/docs/react.md b/docs/react.md new file mode 100644 index 0000000..a3b776c --- /dev/null +++ b/docs/react.md @@ -0,0 +1,251 @@ + + +# React Single File Component + +- 因为 `React SFC` 里使用了 import, 所以你的代码必须遵守 ES Module 语法规范 +- 这也意味着你引入的第三方包/插件, 也必须是 ES Module 模块 +- 友情提示: `jsLibs` 引入的是 umd 模块, `importMap` 引入的是 esm 模块 + +
    + +### 【展示 React 代码】 + +- **说明:** + - 用来展示 React 代码片段 + +
    + + + +
    + +### 【展示 React 组件】 + +- 说明 + - 这里以 `lucky-canvas` 这个抽奖组件为例, 演示如何展示一个 npm 组件 + - 需要注意: `importMap` 中的配置, 必须是 ES Module 模块 + +
    + + + +
    + +### 【展示 React UI 组件库】 + +- **说明:** + - 这里以 `ant design` 为例, 演示如何展示一个 react ui 组件库的代码 + - `dist/antd.js` 是一个 umd 模块, 这里我借助 `ga.jspm.io` 把他转成 esm 模块 + - 由于 `moment` 是 `antd` 的依赖项, 所以同样需要配置在 `importMap` 里面 + +
    + + + +
    diff --git a/docs/temp.jpeg b/docs/temp.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..a4528a0700fe1cbac4664648e791d1654e9af31b GIT binary patch literal 119257 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�u)Zt>U$LpKo%l7Zp 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
    2ykUJh-rQC(GVu{xs`DL<|wj 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 + div { + border: 1px solid red; + } + + +
    这是一个盒子
    +``` + + +```js [2] +console.log(123) +``` + +## 测试2, 两个写在一起的代码块 + + +```html [3] +div2 +``` +```js [4] +console.log(123) +``` + +## 测试3, 中间有反应的代码块 + +```html [5] +as`d1a`1s`3` +``` + +## 测试4, 两个写在一起的代码块都有反引号 + +```html [6] +d1`iv1`4 +``` +```js [7] +console.log(`123`) +``` +## 测试5, n个代码块 + +```html [8] +d1`iv1`5 +``` +```js [9] +console.log(`123`) +``` +```html [10] +d1`iv1`111 +``` diff --git a/docs/usage-docsify.md b/docs/usage-docsify.md new file mode 100644 index 0000000..c09abc1 --- /dev/null +++ b/docs/usage-docsify.md @@ -0,0 +1,210 @@ + +# 在 docsify 中使用 + +以往大家在`markdown`里书写代码块的时候, 通常会使用下面这种方式 + +```html +^^^html +
    这是一个盒子
    +^^^ +``` + +虽然这样可以清晰的展示代码结构, 却无法`动态渲染`效果和`调试代码`. + +即便是有`codepen`这样的工具, 可以通过嵌入 iframe 来使用, 但国内访问网速慢是他最大的痛点 + +为了解决这个问题, 我在`docsify`里集成了`Mini-Sandbox`, 引入插件即可实现代码的`在线编辑`和`实时渲染` + +```html [index.html] + + +
    +

    这是一个 Demo

    + +
    + + +``` + +
    + +### 【引入CDN】 + +#### 在 `index.html` 中引入 + +```html + + +``` + +
    + +### 【简写用法】 + +#### 示例1: 创建一个空的 sandbox + +`[demo1.html]` 这个中括号内的字符, 将会作为标签页的名称 + +```md +^^^html [demo1.html] + +^^^ +``` + +```html [demo1.html] + +``` + +
    + +#### 示例2: 设置默认 css / js (只针对当前标签页生效) + +在起始行写一个对象格式的数据 **`(不要换行)`** + +```html +^^^html [demo2.html] { css: 'div { border: 1px solid red; }' } +
    红盒子
    +^^^ +^^^html [demo3.html] { css: 'div { border: 1px solid blue; }', js: 'console.log("hello")' } +
    蓝盒子
    +^^^ +``` + +```html [demo2.html] { css: 'div { border: 1px solid red; }' } +
    红盒子
    +``` +```html [demo3.html] { css: 'div { border: 1px solid blue; }', js: 'console.log("hello")' } +
    蓝盒子
    +``` + +!> 但是需要注意: 标签名后面的对象数据 **不能换行!** + +```js +// 错误示例 +{ css: '.box { color: red text-align: center }' } // 错误, 注意css属性之间要加分号 +{ css: 'span { color: red; }', css: 'a { color: blue; }' } // 错误, 对象不能拥有相同的key +{ js: 'console.log('hello')' } // 错误, 注意单双引号的嵌套 +{ // 错误, 不能换行 (我知道这样写起来很爽, 但是我匹配不出来) + css: ` + * { + border: 1px solid red; + } + `, + js: 'console.log("hello")' +} + +------------------------------------------------------------------------------------- + +// 以下为正确写法 +{ css: '* { border: 1px solid red; }' } +{ css: 'div { border: 1px solid red; } .box { color: red; text-align: center; }' } +{ js: 'console.log("hello")' } +{ js: "console.log('hello')" } +{ js: 'console.log("hello")', css: '* { border: 1px solid red; }' } +``` + +
    + +#### 示例3: 使用全局变量代替行内对象 + +如果你觉得行内写一堆预置`css`或`js`太难受了, 可以像下面这样使用全局变量, 而且变量是可以复用的 + +##### 1. 首先你要去`index.html`里提前定义好变量名, 并挂载到`window`下面 + +```js +window.Demo1Config = { + css: ` + .box { + width: 100px; + height: 100px; + background: green; + position: absolute; + } + `, + js: ` + const box = document.querySelector('div') + setInterval(() => { + const left = Math.sin(Date.now() / 500) * 100 + 100 + box.style.left = left + 'px' + }, 1000 / 60) + ` +} +``` + +##### 2. 然后使用该变量 + +变量可以写成`${window.Demo1Config}`, 也可以写成`${Demo1Config}`, 因为全局变量默认是从 window 下面寻找 + +```html +^^^html [demo4.html] ${window.Demo1Config} +
    +^^^ +``` + +```html [demo4.html] ${window.Demo1Config} +
    +``` + +
    +
    +
    + +### 【完整用法】 + +#### 1. 找到 index.html + +```js +window.$docsify = { + ... + executeScript: true, // 在 markdown 中使用 +``` + +#### 3. 然后你就能看到效果了 + +- 更多的使用示例, 请参考**【Demo & 演示】**页面 +- 更详细的配置, 请参考**【Options & 配置选项】**页面 + +!> `提示`: 在 docsify 中, 同一个 md 页面下只有第一个` +``` + +
    + +### 【安装 & 使用】 + +#### 1. 使用 npm 安装 + +```shell +npm i vuepress-plugin-mini-sandbox@latest +``` + +#### 2. 找到 `.vuepress/config.js` 文件 + +```js +module.exports = { + plugins: [ + 'vuepress-plugin-mini-sandbox' + ] +} +``` + +#### 3. 然后**重新启动 vuepress** + +!> 因为你修改的是配置文件, `否则插件不会生效` + +#### 4. 在页面中使用 + +``` +^^^html [index.html] + + +
    +

    这是一个 Demo

    + +
    + + +^^^ +``` \ No newline at end of file diff --git a/docs/usage.md b/docs/usage.md new file mode 100644 index 0000000..b53833d --- /dev/null +++ b/docs/usage.md @@ -0,0 +1,51 @@ + +# 在 javascript 中使用 + +[filename](../demo.html ':include') + +### 【通过 CDN 链接使用】 + +```html +
    + + + +``` + +
    + +### 【通过 NPM 包下载】 + +1. 安装 + +```shell +npm i mini-sandbox@latest +``` + +2. 使用 + +```html +
    +``` + +```js +import MiniSandbox from 'mini-sandbox' + +new MiniSandbox({ + el: '#my-sandbox', + files: { + 'index.html': { + defaultValue: ``, + } + } +}) +``` diff --git a/docs/vue.md b/docs/vue.md new file mode 100644 index 0000000..16e7751 --- /dev/null +++ b/docs/vue.md @@ -0,0 +1,188 @@ + +# Vue Single File Component + +
    + +### 【展示 Vue Template】 + +- **说明:** + - 如果你想展示 Vue 组件你只需要做两步即可 + 1. 引入 sandbox 的 vue-loader, 并在`loaders`中配置 + 2. 在`jsLibs`中引入 vue.js, 这样设计是为了方便你选择合适的 CDN 链接 + +
    + + + +
    + +
    + +### 【拆分 Vue 模板】 + +- **说明:** + - 如果你的 JS 逻辑非常多, 或者 CSS 样式特别长, 你可以把一个 Vue 的模板拆成两或三个标签页 + +
    + + + +
    + +### 【展示 Vue 组件库 的代码】 + +- **说明:** + - 这里以`element-ui`为例, 演示应该如何展示 vue 组件库的代码 + - 需要注意: `jsLibs`的引入顺序就是` + + + + + + + + + + + + + + diff --git a/package.json b/package.json new file mode 100644 index 0000000..8d97c09 --- /dev/null +++ b/package.json @@ -0,0 +1,71 @@ +{ + "name": "mini-sandbox", + "version": "0.3.14", + "description": "", + "main": "dist/index.esm.js", + "module": "dist/index.esm.js", + "unpkg": "dist/index.umd.js", + "jsdelivr": "dist/index.umd.js", + "types": "dist/src/index.d.ts", + "scripts": { + "docs": "docsify serve -o", + "dev": "rollup --config rollup.config.dev.js -w", + "build": "rollup --config rollup.config.build.js", + "upload": "npm config set registry https://registry.npmjs.org/ && npm publish" + }, + "files": [ + "dist/src", + "dist/index.esm.js", + "dist/index.umd.js", + "dist/vue-loader.js", + "dist/react-loader.js", + "dist/docsify-plugin.js", + "es-module-shims.js" + ], + "devDependencies": { + "@babel/core": "^7.15.5", + "@babel/preset-env": "^7.12.1", + "@babel/standalone": "^7.17.6", + "@codemirror/basic-setup": "^0.19.1", + "@codemirror/commands": "^0.19.8", + "@codemirror/lang-html": "^0.19.4", + "@codemirror/view": "^0.19.44", + "@right-menu/core": "0.0.8", + "@rollup/plugin-commonjs": "^20.0.0", + "@rollup/plugin-eslint": "^8.0.1", + "@rollup/plugin-json": "^4.1.0", + "@rollup/plugin-node-resolve": "^13.0.5", + "@rollup/plugin-typescript": "^6.1.0", + "@types/babel__standalone": "^7.1.4", + "@types/codemirror": "^5.60.5", + "@types/lz-string": "^1.3.34", + "@typescript-eslint/eslint-plugin": "^5.1.0", + "@typescript-eslint/parser": "^4.14.0", + "babel-plugin-external-helpers": "^6.22.0", + "babel-preset-latest": "^6.24.1", + "concurrently": "^6.2.1", + "eslint": "^7.32.0", + "eslint-config-standard": "^16.0.3", + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-prettier": "^3.3.1", + "eslint-plugin-promise": "^4.3.1", + "less": "^4.1.1", + "lz-string": "^1.4.4", + "prettier": "^2.2.1", + "rollup": "^2.33.1", + "rollup-plugin-babel": "^4.4.0", + "rollup-plugin-delete": "^2.0.0", + "rollup-plugin-dts": "^3.0.2", + "rollup-plugin-eslint": "^7.0.0", + "rollup-plugin-livereload": "^2.0.0", + "rollup-plugin-serve": "^1.1.0", + "rollup-plugin-styles": "^3.14.1", + "rollup-plugin-terser": "^7.0.2", + "rollup-plugin-typescript2": "^0.30.0", + "standard": "^16.0.4", + "tslib": "^2.3.1", + "typescript": "^4.0.5", + "vue-template-compiler": "^2.6.14" + } +} diff --git a/react-sfc.html b/react-sfc.html new file mode 100644 index 0000000..0767aee --- /dev/null +++ b/react-sfc.html @@ -0,0 +1,99 @@ + + + + + + + Document + + + + +
    + + + + + + + \ No newline at end of file diff --git a/rollup.config.build.js b/rollup.config.build.js new file mode 100644 index 0000000..b878126 --- /dev/null +++ b/rollup.config.build.js @@ -0,0 +1,117 @@ +import path from 'path' +import ts from 'rollup-plugin-typescript2' +// import dts from 'rollup-plugin-dts' +import json from '@rollup/plugin-json' +import resolve from '@rollup/plugin-node-resolve' +import commonjs from '@rollup/plugin-commonjs' +import babel from 'rollup-plugin-babel' +import { terser } from 'rollup-plugin-terser' +// import del from 'rollup-plugin-delete' +import pkg from './package.json' +import styles from 'rollup-plugin-styles' + +export default [ + { + input: 'src/index.ts', + output: [ + { + file: `${pkg.unpkg}`, + format: 'umd', + name: 'MiniSandbox', + sourcemap: false, + plugins: [terser()], + }, + { + file: `${pkg.module}`, + format: 'umd', + name: 'MiniSandbox', + sourcemap: false, + plugins: [terser()], + }, + ], + plugins: [ + styles(), + ts({ + tsconfig: path.resolve(__dirname, './tsconfig.json'), + extensions: ['.js', '.ts'], + declaration: true, + }), + json(), + babel({ exclude: 'node_modules/**' }), + resolve(), + commonjs(), + ], + }, + // docsify plugin + { + input: 'src/plugins/docsify-plugin.ts', + output: [ + { + file: 'dist/docsify-plugin.js', + format: 'umd', + name: 'SandboxDocsifyPlugin', + sourcemap: false, + plugins: [terser()], + }, + ], + plugins: [ + ts({ + tsconfig: path.resolve(__dirname, './tsconfig.json'), + extensions: ['.js', '.ts'], + declaration: true, + }), + json(), + babel({ exclude: 'node_modules/**' }), + resolve(), + commonjs(), + ], + }, + // vue loader + { + input: 'src/loaders/vue-loader.ts', + output: [ + { + file: 'dist/vue-loader.js', + format: 'umd', + name: 'SandboxVueLoader', + sourcemap: false, + plugins: [terser()], + }, + ], + plugins: [ + ts({ + tsconfig: path.resolve(__dirname, './tsconfig.json'), + extensions: ['.js', '.ts'], + declaration: true, + }), + json(), + babel({ exclude: 'node_modules/**' }), + resolve(), + commonjs(), + ], + }, + // react loader + { + input: 'src/loaders/react-loader.ts', + output: [ + { + file: 'dist/react-loader.js', + format: 'umd', + name: 'SandboxReactLoader', + sourcemap: false, + plugins: [terser()], + }, + ], + plugins: [ + ts({ + tsconfig: path.resolve(__dirname, './tsconfig.json'), + extensions: ['.js', '.ts'], + declaration: true, + }), + json(), + babel({ exclude: 'node_modules/**' }), + resolve(), + commonjs(), + ], + }, +] diff --git a/rollup.config.dev.js b/rollup.config.dev.js new file mode 100644 index 0000000..bcae1c0 --- /dev/null +++ b/rollup.config.dev.js @@ -0,0 +1,119 @@ +import path from 'path' + +import ts from 'rollup-plugin-typescript2' +import json from '@rollup/plugin-json' + +import babel from 'rollup-plugin-babel' +import resolve from '@rollup/plugin-node-resolve' +import commonjs from '@rollup/plugin-commonjs' + +import styles from 'rollup-plugin-styles' + +import livereload from 'rollup-plugin-livereload' +import serve from 'rollup-plugin-serve' + +import eslint from '@rollup/plugin-eslint' +import pkg from './package.json' + +export default [ + { + input: 'src/index.ts', + output: [ + { + file: `${pkg.jsdelivr}`, + format: 'umd', + name: 'MiniSandbox', + sourcemap: true, + }, + ], + plugins: [ + eslint({ + include: ['src/**/*.js', 'src/**/*.ts'], + }), + styles(), + ts({ + tsconfig: path.resolve(__dirname, './tsconfig.json'), + extensions: ['.js', '.ts'], + }), + json(), + babel({ exclude: 'node_modules/**' }), + resolve(), + commonjs(), + livereload(), + serve({ + open: true, + openPage: '/demo.html', + contentBase: './', + }), + ], + }, + // docsify plugin + { + input: 'src/plugins/docsify-plugin.ts', + output: [ + { + file: 'dist/docsify-plugin.js', + format: 'umd', + name: 'SandboxDocsifyPlugin', + sourcemap: false, + }, + ], + plugins: [ + ts({ + tsconfig: path.resolve(__dirname, './tsconfig.json'), + extensions: ['.js', '.ts'], + declaration: true, + }), + json(), + babel({ exclude: 'node_modules/**' }), + resolve(), + commonjs(), + ], + }, + // vue loader + { + input: 'src/loaders/vue-loader.ts', + output: [ + { + file: 'dist/vue-loader.js', + format: 'umd', + name: 'SandboxVueLoader', + sourcemap: false, + }, + ], + plugins: [ + ts({ + tsconfig: path.resolve(__dirname, './tsconfig.json'), + extensions: ['.js', '.ts'], + declaration: true, + }), + json(), + babel({ exclude: 'node_modules/**' }), + resolve(), + commonjs(), + ], + }, + // react loader + { + input: 'src/loaders/react-loader.ts', + output: [ + { + file: 'dist/react-loader.js', + format: 'umd', + name: 'SandboxReactLoader', + sourcemap: false, + }, + ], + plugins: [ + ts({ + tsconfig: path.resolve(__dirname, './tsconfig.json'), + extensions: ['.js', '.ts'], + declaration: true, + }), + json(), + babel({ exclude: 'node_modules/**' }), + resolve(), + commonjs(), + ], + }, +] diff --git a/src/config.ts b/src/config.ts new file mode 100644 index 0000000..eeddbf1 --- /dev/null +++ b/src/config.ts @@ -0,0 +1,158 @@ +import MiniSandbox from './index' +import { DefaultConfigType } from './type' +import { version } from '../package.json' +import { OptionsType } from '@right-menu/core' + +export const allIcon = { + // add: '', + reset: '', + reload: '', + // code: '', + // copy: '', + // maximize: '', + // minimize: '', + 'top-layout': '', + 'left-layout': '', + 'right-layout': '', + 'bottom-layout': '', + // 'theme-dark': '', + // 'theme-light': '', +} + +export function generateMenuOptions(this: MiniSandbox): OptionsType { + const hideLayout = ['100%', '0%'].indexOf(this.defaultConfig.editorRange) > -1 + return [ + { + type: 'li', + text: '重置', + callback: () => this.reset(), + }, + { + type: 'li', + text: '另存为...', + disabled: true, + callback: () => {}, + }, + { type: 'hr' }, + { + type: 'ul', + text: '外观', + children: [ + { + type: 'li', + text: '放大', + callback: () => { + const fontSize = ~~this.editorEl.style.fontSize.replace(/[a-z]/g, '') + this.setStyle(this.editorEl, { 'font-size': `${fontSize + 1}px` }) + }, + }, + { + type: 'li', + text: '缩小', + callback: () => { + const fontSize = ~~this.editorEl.style.fontSize.replace(/[a-z]/g, '') + this.setStyle(this.editorEl, { 'font-size': `${fontSize - 1}px` }) + }, + }, + { + type: 'li', + text: '重置缩放', + callback: () => this.setStyle(this.editorEl, { 'font-size': '14px' }), + }, + ], + }, + { + type: 'ul', + text: '布局', + disabled: hideLayout, + children: hideLayout + ? [] + : [ + { + type: 'li', + text: '左右布局', + callback: () => { + if (this.defaultConfig.direction.indexOf('row') === -1) { + this.triggleDirection('row') + } + }, + }, + { + type: 'li', + text: '上下布局', + callback: () => { + if (this.defaultConfig.direction.indexOf('column') === -1) { + this.triggleDirection('column') + } + }, + }, + { + type: 'li', + text: '翻转布局', + callback: () => { + const obj = { + row: 'row-reverse', + 'row-reverse': 'row', + column: 'column-reverse', + 'column-reverse': 'column', + } + const newDirection = obj[this.defaultConfig.direction] + this.triggleDirection(newDirection as DefaultConfigType['direction']) + }, + }, + ], + }, + { + type: 'li', + text: '切换主题', + disabled: true, + callback: () => this.triggleTheme(), + }, + { type: 'hr' }, + { + type: 'ul', + text: '调试工具', + children: [ + { + type: 'li', + text: '打印 JSON 字符串', + callback: () => console.log(this.getJSONString()), + }, + ], + }, + { + type: 'ul', + text: '关于 Mini Sandbox', + children: [ + { + type: 'li', + text: 'version@' + version, + disabled: true, + callback: () => {}, + }, + { type: 'hr' }, + { + type: 'li', + text: '官方文档', + callback: () => window.open('https://buuing.github.io/mini-sandbox'), + }, + { + type: 'li', + text: 'Github 仓库', + callback: () => window.open('https://github.com/buuing/mini-sandbox'), + }, + { + type: 'li', + text: 'Bug 反馈', + callback: () => window.open('https://github.com/buuing/mini-sandbox/issues'), + }, + { type: 'hr' }, + { + type: 'li', + text: '📋 开源协议 MIT License', + callback: () => window.open('https://github.com/buuing/mini-sandbox/blob/master/LICENSE'), + }, + ], + }, + ] +} diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..f0ab520 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,496 @@ +import { EditorState, basicSetup } from '@codemirror/basic-setup' +import { EditorView, keymap } from '@codemirror/view' +import { indentWithTab } from '@codemirror/commands' +import { Compartment } from '@codemirror/state' +import { html } from '@codemirror/lang-html' +import { css } from '@codemirror/lang-css' +import { javascript } from '@codemirror/lang-javascript' +import { debounce, getQuery, setQuery, FileLoader, encode, decode, define } from './utils' +import { + OptionsType, + ResourceType, + PublicConfigType, + LocalFileType, + DefaultConfigType, + EventsType, + LoadersType, +} from './type' +import RightMenu from '@right-menu/core' +import { generateMenuOptions, allIcon } from './config' +import HTMLLoader from './loaders/html-loader' +import { name, version } from '../package.json' +import './style/theme.less' +import './style/index.less' + +const languageCompartment = new Compartment() + +export default class MiniSandbox { + static version = version + static encode = encode + static decode = decode + readonly version = version + el!: HTMLDivElement + files: { [filename: string]: LocalFileType } = {} + fileList!: Required[] + loaders!: LoadersType + resource!: Required + publicConfig!: Required + defaultConfig!: Required + events!: Required + editor!: EditorView + fileIndex: number = 0 + currFile!: LocalFileType + currTemplate!: LocalFileType + templateTypeSet!: Set + loading = false + isClick = false + iframe!: HTMLIFrameElement + loadEl!: HTMLDivElement + codeEl!: HTMLDivElement + editorEl!: HTMLDivElement + lineEl!: HTMLDivElement + bodyEl!: HTMLDivElement + ldqResource: string[] = [] + public run: Function + + constructor(options = {} as OptionsType) { + // 初始化配置项 + this.initOptions(options) + // 初始化一些 getter + define(this, 'currFile', () => this.fileList[this.fileIndex]) + // 设置防抖 + this.run = debounce(this.render, this.defaultConfig.autoRunInterval).bind(this) + // 初始化 + this.init().then(() => { + this.events.onLoad?.() + }) + } + + initOptions(options: OptionsType) { + const query = getQuery() + // 初始化loader + this.loaders = { + '.html': [HTMLLoader], + ...options.loaders, + } + this.templateTypeSet = new Set(Object.keys(this.loaders).concat('.html')) + // 初始化 files + this.fileIndex = 0 + this.fileList = Object.keys(options.files || {}).map(filename => { + const file = (options.files!)[filename] + const htmlStr = decode(query[file.urlField || '']) + const _file = { + defaultValue: '', + cssLibs: [], + jsLibs: [], + css: '', + js: '', + head: [], + body: [], + urlField: '', + title: '', + module: 'iife' as const, + hidden: false, + ...file, + filename: filename.lastIndexOf('.') > -1 ? filename : filename + '.html', + value: htmlStr || file.defaultValue || '', + type: '', + } + _file.type = _file.filename.slice(_file.filename.lastIndexOf('.')) + if (!this.currTemplate && this.templateTypeSet.has(_file.type)) { + this.currTemplate = _file + } + this.files[filename] = _file + return _file + }) + // 初始化公共静态资源 + this.resource = { + cssLibs: [], + jsLibs: [], + css: '', + js: '', + ...options.resource, + } + // 初始化公共配置 + this.publicConfig = { + head: [], + body: [], + ...options.publicConfig, + } + // 初始化默认配置 + this.defaultConfig = { + theme: 'light', + autoRun: true, + autoRunInterval: 300, + height: '300px', + editorRange: '50%', + renderRange: 'auto', + draggable: true, + direction: 'row', + toolbar: ['reset', 'reload'], + ...options.defaultConfig, + } + this.events = { + onFocus: () => {}, + onBlur: () => {}, + onChange: () => {}, + onLoad: () => {}, + ...options.events, + } + // 初始化 dom + if (!options.el) throw new Error('缺少配置项 => el 属性') + this.el = (typeof options.el === 'string' ? document.querySelector(options.el) : options.el) as HTMLDivElement + if (!this.el) throw new Error(`获取元素失败 => ${options.el}`) + } + + public async init() { + // 初始化dom结构 + this.initDom() + // 初始化事件 + this.initEvent() + // 初始化编辑器 + this.initCodeMirror() + // 初始化菜单栏 + this.initMenu() + // 初始主题 + this.triggleTheme() + // 初始化编辑器内容 + const currFile = this.currFile + const query = getQuery() + const htmlStr = query[currFile.urlField] + if (htmlStr) { + // 如果顶部 url 有值, 优先渲染 + this.setValue(decode(htmlStr)) + } else if (currFile.defaultValue) { + // 如果当前tab页有默认值, 则重置 + this.reset() + } else { + // 否则就渲染 + this.render() + } + this.changeLang() + } + + // 重置 + public reset() { + this.setValue(this.currFile.defaultValue) + } + + // 初始化dom结构 + private initDom() { + const { el, defaultConfig } = this + this.addClass(el, 'mini-sandbox') + el.setAttribute('package', `${name}@${version}`) + this.setStyle(el, { + height: defaultConfig.height, + }) + const toolbarHTML = defaultConfig.toolbar.map((key, index) => { + return `${allIcon[key]}` + }).join('\n') + el.innerHTML = ` +
    +
    + + + +
    +   +
    + ${this.fileList.filter(file => !file.hidden).map((file, index) => { + const className = 'sandbox-tab-item' + (this.fileIndex === index ? ' sandbox-tab-active' : '') + return ` +
    + ${file.title || file.filename} + +
    + ` + }).join('\n')} +
    + ${toolbarHTML} +
    +
    +
    +
    +
    + +
    +
    +
    +
    + ` + this.iframe = el.querySelector('iframe')! + this.loadEl = el.querySelector('.sandbox-loading')! + this.codeEl = el.querySelector('.sandbox-code')! + this.lineEl = el.querySelector('.sandbox-gutter')! + this.bodyEl = el.querySelector('.sandbox-body')! + // 布局 + this.triggleDirection(defaultConfig.direction) + // 绑定事件 + const addEvent = (className: string, cb: () => void) => { + el.querySelector(className)?.addEventListener('click', cb) + } + addEvent('.sandbox-icon-reset', () => { + this.reset() + this.run(true) + }) + addEvent('.sandbox-icon-reload', () => this.run(true)) + addEvent('.sandbox-icon-left-layout', () => this.triggleDirection('row')) + addEvent('.sandbox-icon-right-layout', () => this.triggleDirection('row-reverse')) + addEvent('.sandbox-icon-top-layout', () => this.triggleDirection('column')) + addEvent('.sandbox-icon-bottom-layout', () => this.triggleDirection('column-reverse')) + // 点击 tab 标签页 + const tabBar = el.querySelector('.sandbox-tab')! + tabBar.addEventListener('click', e => { + const targetEl = (e['path'] as HTMLElement[]).find(dom => dom.className === 'sandbox-tab-item') + if (targetEl) { + this.fileIndex = Number(targetEl.getAttribute('data-index')) + // 切换 tab 页面 + this.changeTab() + // 设置样式 + const items = tabBar.children + for (const item of items) { + item.className = 'sandbox-tab-item' + } + this.addClass(targetEl!, 'sandbox-tab-active') + } + }) + } + + private initMenu() { + // 绑定菜单事件 + new RightMenu({ + el: this.el.querySelector('.sandbox-setting') as HTMLElement, + theme: 'mac', + mode: 'click', + }, generateMenuOptions.call(this)) + } + + private initEvent() { + const { el, codeEl, defaultConfig } = this + if (!defaultConfig.draggable) { + this.addClass(this.lineEl, 'no-dragging') + return + } + const maskEl = el.querySelector('.sandbox-mask') as HTMLDivElement + let boxW: number, boxH: number, boxX: number, boxY: number, lineX: number, lineY: number + this.lineEl.addEventListener('mousedown', e => { + lineX = e.offsetX + lineY = e.offsetY + this.isClick = true + const { x, y, width, height } = this.bodyEl.getBoundingClientRect() + boxW = width + boxH = height + boxX = x + boxY = y + maskEl.style.display = 'block' + }) + el.addEventListener('mouseup', e => { + this.isClick = false + maskEl.style.display = 'none' + }) + el.addEventListener('mousemove', e => { + if (!this.isClick) return + let val: number = 0.5 + switch (defaultConfig.direction) { + case 'row': + val = (e.clientX - boxX - lineX) / boxW + codeEl.style.width = val * 100 + '%' + break + case 'row-reverse': + val = 1 - (e.clientX - boxX + lineX) / boxW + codeEl.style.width = val * 100 + '%' + break + case 'column': + val = (e.clientY - boxY - lineY) / boxH + codeEl.style.height = val * 100 + '%' + break + case 'column-reverse': + val = 1 - (e.clientY - boxY + lineY) / boxH + codeEl.style.height = val * 100 + '%' + break + } + }) + } + + private handleChange() { + const { defaultConfig, events } = this + const currFile = this.currFile + const htmlStr = this.getValue() + const codeStr = encode(htmlStr) + // 替换字符串缓存 + currFile.value = htmlStr + // 替换顶部 url + if (currFile.urlField) setQuery({ [currFile.urlField]: codeStr }) + // 是否自动运行 + defaultConfig.autoRun && this.run() + // 触发 change 回调 + events.onChange?.() + } + + private initCodeMirror() { + const handleChange = EditorView.updateListener.of((update) => { + if (update.docChanged) this.handleChange() + }) + this.editor = new EditorView({ + state: EditorState.create({ + extensions: [ + basicSetup, + keymap.of([indentWithTab]), + languageCompartment.of([]), + handleChange, + ], + }), + parent: this.codeEl, + }) + this.editorEl = this.el.querySelector('.cm-editor') as HTMLDivElement + this.setStyle(this.editorEl, { + 'font-size': '14px', + }) + } + + private changeTab() { + const currFile = this.currFile + if (this.templateTypeSet.has(currFile.type)) { + this.currTemplate = currFile + } + // 切换语言 + this.changeLang() + this.setValue(currFile.value || currFile.defaultValue) + } + + private changeLang() { + const currFile = this.currFile + const res = { + '.html': html(), + '.css': css(), + '.js': javascript(), + '.vue': html(), + '.jsx': javascript({ jsx: true }), + '.ts': javascript({ typescript: true }), + }[currFile.type] || [] + this.editor.dispatch({ + effects: languageCompartment.reconfigure(res), + }) + } + + public setValue(value: string) { + this.editor.dispatch({ + changes: { + from: 0, + to: this.editor.state.doc.length, + insert: value, + }, + }) + this.run() + } + + public getValue() { + return this.editor.state.doc.toString() + } + + public getJSONString() { + return JSON.stringify(this.getValue()).replace(/<\/script>/g, '<\\/script>') + } + + public setCode(code: string) { + return this.setValue(decode(code)) + } + + public getCode(value?: string) { + return encode(value || this.getValue()) + } + + public setStyle(el: HTMLDivElement, styles: { [key: string]: string | number }) { + for (const key in styles) { + el.style[key] = styles[key] + } + } + + private addClass(el: HTMLElement, className: string) { + el.classList.add(className) + } + + public async getResource(src: string): Promise { + if (!window['ldqResource']) window['ldqResource'] = {} + const ldqResource: { [key: string]: string | Promise } = window['ldqResource'] + const localFile = this.files[src] + if (localFile) { + ldqResource[src] = localFile.value + } + if (!ldqResource[src]) { + ldqResource[src] = FileLoader(src) + } + return ldqResource[src] + } + + // 切换Loading + private triggleLoading(status: boolean) { + this.loadEl.style.display = status ? 'block' : 'none' + } + + // 切换主题 + public triggleTheme(theme = this.defaultConfig.theme) { + if (this.el.classList.value.indexOf('sandbox-theme-light') > -1) { + // this.el.classList.remove('sandbox-theme-light') + // this.el.classList.add('sandbox-theme-dark') + } else { + // this.el.classList.remove('sandbox-theme-dark') + this.el.classList.add('sandbox-theme-light') + } + } + + // 切换布局模式 + public triggleDirection(direction: DefaultConfigType['direction'] = 'row') { + const { codeEl, defaultConfig } = this + const gutter = ['100%', '0%'].indexOf(defaultConfig.editorRange) > -1 ? '0px' : '5px' + const renderEl = this.el.querySelector('.sandbox-render') as HTMLDivElement + // 左右布局 / 上下布局 + if (direction.indexOf('row') > -1) { + this.setStyle(codeEl, { width: defaultConfig.editorRange, height: '100%' }) + this.setStyle(renderEl, { width: defaultConfig.renderRange, height: '100%' }) + this.setStyle(this.lineEl, { width: gutter, height: '100%' }) + } else if (direction.indexOf('column') > -1) { + this.setStyle(codeEl, { width: '100%', height: defaultConfig.editorRange }) + this.setStyle(renderEl, { width: '100%', height: defaultConfig.renderRange }) + this.setStyle(this.lineEl, { width: '100%', height: gutter }) + } else return + // 设置flex布局 + defaultConfig.direction = direction + this.setStyle(this.bodyEl, { 'flex-direction': direction }) + } + + public async render(isReload = false) { + const { loaders, iframe, currTemplate } = this + if (!currTemplate) return + const context = currTemplate.value + this.triggleLoading(true) + // 等待 iframe 刷新 + if (isReload || ['.html', '.vue'].indexOf(currTemplate.type) > -1) { + await new Promise(resolve => { + const fn = () => { + resolve() + iframe.removeEventListener('load', fn) + } + iframe.addEventListener('load', fn) + iframe.contentWindow?.location.reload() + }) + } + // 重新获取文档 + const iframeDocument = this.iframe.contentWindow?.document + if (!iframeDocument) return + // 渲染模板 + const value = loaders[currTemplate.type] + let fileLoaders = Array.isArray(value) ? value : [value] + fileLoaders = fileLoaders.slice().reverse().filter(loader => typeof loader === 'function') + let template = context + for (const loader of fileLoaders) { + template = await Promise.resolve(loader.call(this, template, currTemplate)) + } + iframeDocument.open() + iframeDocument.write(template) + iframeDocument.close() + this.triggleLoading(false) + } +} diff --git a/src/loaders/base-loader.ts b/src/loaders/base-loader.ts new file mode 100644 index 0000000..fb7e50a --- /dev/null +++ b/src/loaders/base-loader.ts @@ -0,0 +1,26 @@ +import { LoaderFunctionType } from '../type' + +const BaseLoader: LoaderFunctionType = async function(context, config) { + const { publicConfig } = this + const headStr = [...publicConfig.head, ...config.head].map(([name, attr, content]) => { + let attrStr = '' + for (const key in attr) { + attrStr += ` ${key}="${attr[key]}"` + } + return `<${name}${attrStr}>${content}` + }) + return ` + + + + + Mini Sandbox + ${headStr} + <\/head> + + ${context} + <\/body> + ` +} + +export default BaseLoader diff --git a/src/loaders/html-loader.ts b/src/loaders/html-loader.ts new file mode 100644 index 0000000..9c57110 --- /dev/null +++ b/src/loaders/html-loader.ts @@ -0,0 +1,35 @@ +import { LoaderFunctionType } from '../type' +import BaseLoader from './base-loader' +import { getCssLibs, getJsLibs, getScriptForTab, getEsmsInitOptions } from './index' + +const HTMLLoader: LoaderFunctionType = async function(content, config) { + const cssLibs = await getCssLibs.call(this, config) + const jsLibs = await getJsLibs.call(this, config) + const scriptForTab = await getScriptForTab.call(this, config) + // 获取本地 esm 模块 + const esmFiles = this.fileList.filter(file => file.module === 'esm') + const esModules = {} + esmFiles.forEach(file => { + esModules[file.filename] = file.value + }) + // 重新设置模板 + content = content.replace(//, (res) => { + return res.replace(/type=["module"|'module']/, () => 'type="module-shim"') + }) + content = ` + ${cssLibs.join('\n')} + ${jsLibs.join('\n')} + + + ${config['importMap'] ? '' : ''} + ${content} + + ${scriptForTab ? '' : ''} + ` + return await BaseLoader.call(this, content, config) +} + +export default HTMLLoader diff --git a/src/loaders/index.ts b/src/loaders/index.ts new file mode 100644 index 0000000..3bb9e6d --- /dev/null +++ b/src/loaders/index.ts @@ -0,0 +1,56 @@ +import MiniSandbox from '../index' +import { ElementGenerator } from '../utils' +import { LocalFileType } from '../type' + +const reg = /\:\/\/.*/ + +export async function getCssLibs(this: MiniSandbox, config: LocalFileType): Promise { + const { resource } = this + return [ + ...await Promise.all(resource.cssLibs.map(src => this.getResource(src))), + ...await Promise.all((config.cssLibs || []).map(src => this.getResource(src))), + resource.css, + config.css || '', + ].filter(text => !!text).map(text => ElementGenerator(text, 'style')) +} + +export async function getJsLibs(this: MiniSandbox, config: LocalFileType): Promise { + const { resource } = this + const scriptForLibs = config.jsLibs?.filter(src => reg.test(src)) || [] + return [ + ...await Promise.all(resource.jsLibs.map(src => this.getResource(src))), + ...await Promise.all(scriptForLibs.map(src => this.getResource(src))), + ].filter(text => !!text).map(text => ElementGenerator(text, 'script')) +} + +export async function getScriptForTab(this: MiniSandbox, config: LocalFileType): Promise { + const scriptForTab = config.jsLibs?.find(src => !reg.test(src)) || '' + return scriptForTab && await this.getResource(scriptForTab) +} + +export const getEsmsInitOptions = (esModules = {}) => { + return ` + var __originPath__ = window.location.origin + window.location.pathname + var __publicPath__ = __originPath__.slice(0, __originPath__.lastIndexOf('/') + 1) + var __esModules__ = ${JSON.stringify(esModules)} + var __files__ = {} + for (const name in __esModules__) { + __files__[__publicPath__ + name] = __esModules__[name] + } + __esModules__ = null + window.esmsInitOptions = { + shimMode: true, + // polyfillEnable: ['css-modules', 'json-modules'], + fetch: async (url, options) => { + const content = __files__[url] + if (content) { + return new Response(new Blob([content], { type: 'application/javascript' })) + } + return fetch(url, options) + }, + disableCache: (url, options, source) => { + if (__files__[url]) return true + } + } + ` +} diff --git a/src/loaders/react-loader.ts b/src/loaders/react-loader.ts new file mode 100644 index 0000000..eee6867 --- /dev/null +++ b/src/loaders/react-loader.ts @@ -0,0 +1,27 @@ +import { LoaderFunctionType } from './../type' +import { getCssLibs, getJsLibs, getEsmsInitOptions } from './index' +import { transform } from '@babel/standalone' +import BaseLoader from './base-loader' + +const SandboxReactLoader: LoaderFunctionType = async function(value, config) { + const cssLibs = await getCssLibs.call(this, config) + const jsLibs = await getJsLibs.call(this, config) + const esModules = { '__APP__.jsx': transform(value, { presets: ['react'] }).code } + const content = ` + ${cssLibs.join('\n')} +
    + ${jsLibs.join('\n')} + + + + + ` + return await BaseLoader.call(this, content, config) +} + +export default SandboxReactLoader diff --git a/src/loaders/vue-loader.ts b/src/loaders/vue-loader.ts new file mode 100644 index 0000000..ccd52ec --- /dev/null +++ b/src/loaders/vue-loader.ts @@ -0,0 +1,38 @@ +// @ts-ignore +import { parseComponent } from 'vue-template-compiler/browser' +import { transform } from '@babel/standalone' +import { LoaderFunctionType } from '../type' +import { getCssLibs, getJsLibs, getScriptForTab } from './index' +import BaseLoader from './base-loader' + +const SandboxVueLoader: LoaderFunctionType = async function(value, config) { + const cssLibs = await getCssLibs.call(this, config) + const jsLibs = await getJsLibs.call(this, config) + const scriptForTab = await getScriptForTab.call(this, config) + // 解析模板 + const { template, script, styles } = parseComponent(value) + const templateStr = template ? JSON.stringify(template.content) : '""' + const scriptStr = transform(script?.content || scriptForTab || 'export default {}', { presets: ['es2015'] }).code + const styleStr = styles.map((item: any) => item.content).join('\n') + // 渲染模板 + const content = ` + ${cssLibs.join('\n')} + +
    + ${jsLibs.join('\n')} + + ` + return await BaseLoader.call(this, content, config) +} + +export default SandboxVueLoader diff --git a/src/plugins/docsify-plugin.ts b/src/plugins/docsify-plugin.ts new file mode 100644 index 0000000..2cb2af8 --- /dev/null +++ b/src/plugins/docsify-plugin.ts @@ -0,0 +1,83 @@ +import { get } from '../utils' + +export default function initMiniSandbox(hook: { + beforeEach: (fn: (content: string) => string) => void + doneEach: (fn: Function) => void +}) { + const sandboxOptions = ((window as any).$docsify && (window as any).$docsify.sandboxOptions) || {} + let options: Array<{ + [key: string]: { + type: string, + config: string, + value: string + } + }> = [] + hook.beforeEach((content) => { + let index = 0 + content += '\n' + // 匹配混合代码块 + return content.replace(/```((?!```).+?(?!```)\n)```(?=\n(?!```))/gms, (res) => { + const codeList = res.split(/```\n```/) + const len = codeList.length + const currOption = {} + options[index] = currOption + // 处理单一代码块 + codeList.forEach((code, i) => { + if (i > 0) code = '```' + code + if (i < len - 1) code += '```' + const lines = code.split('\n') + const value = lines.slice(1, -1).join('\n') + const reg = /^`{3}\s?([a-z]+)\s+\[([^\s]*)\]\s?(\$\{.*\}|\{.*\})?/gms + const [, type, filename, config] = (reg.exec(lines[0]) || []).map(_ => String(_)) + if (filename) { + currOption[filename] = { type, config, value } + } + }) + if (!Object.keys(currOption).length) return res + return `\n
    \n` + }) + }) + hook.doneEach(function() { + const arr = document.querySelectorAll('.mini-sandbox-docsify') + for (const el of arr) { + const currIndex = Number(el.getAttribute('data-index')) + const currOption = options[currIndex] + const files = {} + // 处理 files 数据结构 + for (const filename in currOption) { + const { type, config, value } = currOption[filename] + const regConfig = /^\$\{(.*)\}$/.exec(config) + let fileConfig + try { + if (regConfig) { + let keyStr = regConfig[1] + if (keyStr.indexOf('window.') === 0) keyStr = keyStr.slice(7) + fileConfig = get(window, keyStr) + } else if (typeof config === 'string' && config !== 'undefined') { + fileConfig = window.eval(`(${config})`) + } + } catch (err) { + console.error(config, err) + fileConfig = {} + } + files[filename] = { + type, + ...fileConfig, + defaultValue: value, + } + } + // 渲染 mini-sandbox + new (window as any).MiniSandbox({ + ...sandboxOptions, + el, + files, + }) + } + options = [] + }) +} + +(window as any).$docsify.plugins = [].concat( + (window as any).$docsify.plugins, + initMiniSandbox as any, +) diff --git a/src/style/index.less b/src/style/index.less new file mode 100644 index 0000000..d9c43c1 --- /dev/null +++ b/src/style/index.less @@ -0,0 +1,192 @@ + +.mini-sandbox { + + // --white: #ececfe; + // --greyLight-2: #dbe1f3; + + --white: #eee; + --greyLight-1: #E4EBF5; + --greyLight-2: #c8d0e7; + --greyLight-3: #bec8e4; + --greyDark: #9baacf; + @shadow: .3rem .3rem .6rem var(--greyLight-2), + -.2rem -.2rem .5rem var(--white); + @inner-shadow: inset .2rem .2rem .5rem var(--greyLight-2), + inset -.2rem -.2rem .5rem var(--white); + @hd-height: 36px; + background-color: #fff; + overflow: hidden; + box-shadow: @shadow; + .sandbox-head { + display: flex; + align-items: center; + height: @hd-height; + font-size: 14px; + background: var(--bgColor); + user-select: none; + overflow: hidden; + padding: 0 8px; + .sandbox-icon { + display: flex; + justify-content: center; + align-items: center; + padding: 3px 4px; + margin: 0 4px; + cursor: pointer; + border-radius: 5px; + &>svg { + color: #9baacf; + width: 20px; + height: 20px; + } + &.icon-active:hover { + box-shadow: @shadow; + } + &.icon-active:active { + box-shadow: @inner-shadow; + } + } + .sandbox-setting { + margin-left: -3px; + line-height: @hd-height; + text-align: center; + font-size: 20px; + color: var(--fontColor); + cursor: pointer; + font-weight: 300; + } + .sandbox-tab { + height: 100%; + flex: 1; + padding: 0 20px 0 0px; + display: flex; + align-items: flex-end; + .sandbox-tab-item { + height: 82%; + display: flex; + align-items: center; + padding: 0px 15px; + font-size: 13px; + cursor: pointer; + .sandbox-icon { + float: right; + width: 12px; + height: 12px; + margin-right: -8px; + } + } + .sandbox-tab-active { + position: relative; + background: #FFFFFF; + border-radius: 6px 6px 0 0; + box-shadow: @shadow; + &::before { + content: ''; + display: block; + position: absolute; + width: 6px; + height: 6px; + left: -6px; + bottom: 0; + background: url("data:image/svg+xml,%3Csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M0 100c55.228 0 100-44.772 100-100v100H0z' fill='%23FFFFFF'/%3E%3C/svg%3E"); + background-size: 6px 6px; + // box-shadow: @shadow; + } + &::after { + content: ''; + display: block; + position: absolute; + width: 6px; + height: 6px; + right: -6px; + bottom: 0; + background: url("data:image/svg+xml,%3Csvg width='100' height='100' viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M100 100C44.772 100 0 55.228 0 0v100h100z' fill='%23FFFFFF'/%3E%3C/svg%3E"); + background-size: 6px 6px; + // box-shadow: @shadow; + } + } + } + } + .sandbox-body { + display: flex; + height: calc(100% - @hd-height); + } + iframe, .cm-editor { + width: 100%; + height: 100%; + outline: none !important; + overflow: auto; + } + .sandbox-code { + width: 50%; + max-width: 100vw; + height: 100%; + overflow: hidden; + position: relative; + } + .sandbox-gutter { + width: 5px; + border-left: 1px solid var(--bgColor); + border-right: 1px solid var(--bgColor); + background-color: #f7f8fa; + cursor: col-resize; + box-sizing: border-box; + &:active, &:hover { + background-color: var(--bgColor); + } + &.no-dragging { + cursor: auto; + &:active, &:hover { + background-color: #f7f8fa; + } + } + } + .sandbox-render { + position: relative; + overflow: hidden; + height: 100%; + flex: 1; + position: relative; + box-sizing: border-box; + &>iframe { + margin: 0; + border: 0 none; + } + .sandbox-loading { + position: absolute; + left: 0; + top: @hd-height; + right: 0; + bottom: 0; + background-color: rgba(255, 255, 255, 0.9); + display: none; + &::before { + content: 'loading...'; + display: block; + margin: auto; + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + width: 20px; + height: 20px; + color: var(--fontColor); + } + } + } + .sandbox-mask { + cursor: col-resize; + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + display: none; + background-color: rgba(0, 0, 0, 0); + } + .cm-gutters { + background-color: var(--bgColor); + border: 0 none; + } +} diff --git a/src/style/theme.less b/src/style/theme.less new file mode 100644 index 0000000..e8c5be5 --- /dev/null +++ b/src/style/theme.less @@ -0,0 +1,9 @@ + +.sandbox-theme-light { + --bgColor: #f1f4ff; + --fontColor: #9baacf; +} + +.sandbox-theme-dark { + --bgColor: #000; +} diff --git a/src/type.ts b/src/type.ts new file mode 100644 index 0000000..947e253 --- /dev/null +++ b/src/type.ts @@ -0,0 +1,85 @@ +import MiniSandbox from './index' + +export type GetObjectItemType = T extends object ? T[keyof T] : never +export type GetArrayItemType = T extends any[] ? T[number] : never + +// 公共静态资源 +export type ResourceType = { + cssLibs?: string[] + jsLibs?: string[] + css?: string + js?: string +} + +export type TagType = ['head', object, string] + +// 公共设置 +export type PublicConfigType = { + head?: Array + body?: Array +} + +// tab页类型 +type FileType = { + title?: string + defaultValue?: string + cssLibs?: ResourceType['cssLibs'] + jsLibs?: ResourceType['jsLibs'] + css?: ResourceType['css'] + js?: ResourceType['js'] + head?: PublicConfigType['head'] + body?: PublicConfigType['body'] + urlField?: string + module?: 'iife' | 'esm' + hidden?: boolean + // disabled?: boolean +} + +export type LocalFileType = Required & { + filename: string, + value: string, + type: string +} + +export type LoaderFunctionType = ( + this: MiniSandbox, + context: string, + config: LocalFileType +) => (string | Promise) + +export type LoadersType = { + [key: string]: LoaderFunctionType[] +} + +// 默认配置 +export type DefaultConfigType = { + theme?: 'light' | 'dark' + autoRun?: boolean + autoRunInterval?: number + height?: string + editorRange?: string + renderRange?: string + draggable?: boolean + direction?: 'row' | 'row-reverse' | 'column' | 'column-reverse' + toolbar?: Array<'reset' | 'reload' | 'left-layout' | 'right-layout' | 'top-layout' | 'bottom-layout'> +} + +// 事件 +export type EventsType = { + onFocus: () => void + onBlur: () => void + onChange: () => void + onLoad: () => void +} + +export type OptionsType = { + el: string | HTMLDivElement + files?: { + [filename: string]: FileType + }, + loaders: LoadersType + resource?: ResourceType + publicConfig?: PublicConfigType + defaultConfig?: DefaultConfigType + events?: EventsType +} diff --git a/src/utils.ts b/src/utils.ts new file mode 100644 index 0000000..991daee --- /dev/null +++ b/src/utils.ts @@ -0,0 +1,91 @@ +import { + compressToEncodedURIComponent, + decompressFromEncodedURIComponent, +} from 'lz-string' + +export const has = (data: object, key: string | number): boolean => { + return Object.prototype.hasOwnProperty.call(data, key) +} + +export const debounce = (fn: Function, wait = 300) => { + const state = { + timer: 0, + immediate: false, + } + return function(this: unknown, immediate = false) { + state.immediate = immediate + if (state.timer) window.clearTimeout(state.timer) + state.timer = window.setTimeout(() => { + fn.apply(this, arguments) + clearTimeout(state.timer) + state.timer = 0 + state.immediate = false + }, state.immediate ? 0 : wait) + } +} + +export const getQuery = (search = window.location.search) => { + const query = {} + const str = search.split('?')[1] + if (!str) return query + str.split('&').forEach(item => { + const index = item.indexOf('=') + query[item.slice(0, index)] = item.slice(index + 1) + }) + return query +} + +export const setQuery = (query: { [key: string]: string | number }) => { + const oldQuery = getQuery() + const arr = [] + for (const key in query) { + oldQuery[key] = query[key] + } + for (const key in oldQuery) { + arr.push(`${key}=${oldQuery[key]}`) + } + const search = '?' + arr.join('&') + history.pushState(null, '', search) +} + +export const ElementGenerator = (innerText: string, type?: 'style' | 'script') => type + ? ( + { + style: ` +
    + + + + + + + + + \ No newline at end of file