├── docs
├── .nojekyll
├── _media
│ ├── .gitkeep
│ ├── favicon.ico
│ └── icon_128.png
├── _src
│ ├── prismjs
│ │ ├── prism-json.min.js
│ │ ├── prism-applescript.min.js
│ │ ├── prism-javascript.min.js
│ │ └── prism-bash.min.js
│ ├── source.txt
│ └── docsify
│ │ ├── docsify-copy-code.js
│ │ ├── vue.css
│ │ ├── search.js
│ │ ├── zoom-image.js
│ │ └── docsify.min.js
├── README.md
└── index.html
├── .github
└── ISSUE_TEMPLATE
│ └── config.yml
├── .gitignore
├── README.md
└── appcast.xml
/docs/.nojekyll:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/docs/_media/.gitkeep:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/docs/_media/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ripperhe/Bob/HEAD/docs/_media/favicon.ico
--------------------------------------------------------------------------------
/docs/_media/icon_128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ripperhe/Bob/HEAD/docs/_media/icon_128.png
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/config.yml:
--------------------------------------------------------------------------------
1 | blank_issues_enabled: false
2 | contact_links:
3 | - name: Bob 技术支持
4 | url: https://bobtranslate.com/general/contact.html
5 | about: GitHub 反馈渠道已关闭,请通过这个网页描述的方式反馈问题或建议。🙏
--------------------------------------------------------------------------------
/docs/_src/prismjs/prism-json.min.js:
--------------------------------------------------------------------------------
1 | Prism.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},Prism.languages.webmanifest=Prism.languages.json;
--------------------------------------------------------------------------------
/docs/_src/source.txt:
--------------------------------------------------------------------------------
1 | https://cdn.jsdelivr.net/npm/docsify/lib/themes/vue.css
2 | https://cdn.jsdelivr.net/npm/docsify/lib/docsify.min.js
3 | https://cdn.jsdelivr.net/npm/docsify/lib/plugins/search.js
4 | https://cdn.jsdelivr.net/npm/docsify/lib/plugins/zoom-image.js
5 | https://cdn.jsdelivr.net/npm/docsify-copy-code
6 |
7 | https://cdn.jsdelivr.net/npm/prismjs/components/prism-javascript.min.js
8 | https://cdn.jsdelivr.net/npm/prismjs/components/prism-json.min.js
9 | https://cdn.jsdelivr.net/npm/prismjs/components/prism-applescript.min.js
10 | https://cdn.jsdelivr.net/npm/prismjs/components/prism-bash.min.js
--------------------------------------------------------------------------------
/docs/README.md:
--------------------------------------------------------------------------------
1 | # Bob 官网迁移通知
2 |
3 | Bob 官网之前通过 Gitee/GitHub Pages 进行部署,但是经常会有用户无法访问,现已将官网部署到我自己的服务器,域名地址也有所变更。
4 |
5 | !> **Bob 已发布到 Mac App Store,详情请查看 [这篇文章](https://bobtranslate.com/blog/2022-07-03-v1-coming.html)。**
6 |
7 | ## 版本区分
8 |
9 | Bob 1.0.0 版本开始,正式发布到 Mac App Store,这里简称商店版。
10 |
11 | Bob 1.0.0 以下的版本(不包括 1.0.0,例如 0.10.x 等版本)发布在 GitHub/Gitee 平台,简称社区版。
12 |
13 | 商店版需要付费,采用内购终身买断模式,后续我会重点维护和优化。社区版目前还可以使用,不过后续不会再维护。
14 |
15 |
16 |
17 | ## 商店版官网
18 |
19 | Bob 商店版官网地址为
20 |
21 | ## 社区版官网
22 |
23 | Bob 社区版官网地址为
24 |
25 | 如果您是通过 Bob 社区版 App 跳转到当前页面,说明您的 Bob 社区版 App 不是最新版本。请将 Bob 社区版 App 升级到社区版最新版本,升级之后 App 内的所有链接都会跳转到 Bob 社区版新的官网地址。
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Xcode
2 | #
3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
4 |
5 | ## Build generated
6 | build/
7 | DerivedData/
8 |
9 | ## Various settings
10 | *.pbxuser
11 | !default.pbxuser
12 | *.mode1v3
13 | !default.mode1v3
14 | *.mode2v3
15 | !default.mode2v3
16 | *.perspectivev3
17 | !default.perspectivev3
18 | xcuserdata/
19 |
20 | ## Other
21 | *.moved-aside
22 | *.xccheckout
23 | *.xcscmblueprint
24 |
25 | ## Obj-C/Swift specific
26 | *.hmap
27 | *.ipa
28 | *.dSYM.zip
29 | *.dSYM
30 |
31 | # CocoaPods
32 | #
33 | # We recommend against adding the Pods directory to your .gitignore. However
34 | # you should judge for yourself, the pros and cons are mentioned at:
35 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
36 | #
37 | # Pods/
38 |
39 | # Carthage
40 | #
41 | # Add this line if you want to avoid checking in source code from Carthage dependencies.
42 | # Carthage/Checkouts
43 |
44 | Carthage/Build
45 |
46 | # fastlane
47 | #
48 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
49 | # screenshots whenever they are needed.
50 | # For more information about the recommended setup visit:
51 | # https://docs.fastlane.tools/best-practices/source-control/#source-control
52 |
53 | fastlane/report.xml
54 | fastlane/Preview.html
55 | fastlane/screenshots/**/*.png
56 | fastlane/test_output
57 |
58 | # Code Injection
59 | #
60 | # After new code Injection tools there's a generated folder /iOSInjectionProject
61 | # https://github.com/johnno1962/injectionforxcode
62 |
63 | iOSInjectionProject/
64 |
--------------------------------------------------------------------------------
/docs/_src/prismjs/prism-applescript.min.js:
--------------------------------------------------------------------------------
1 | Prism.languages.applescript={comment:[/\(\*(?:\(\*(?:[^*]|\*(?!\)))*\*\)|(?!\(\*)[\s\S])*?\*\)/,/--.+/,/#.+/],string:/"(?:\\.|[^"\\\r\n])*"/,number:/(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e-?\d+)?\b/i,operator:[/[&=≠≤≥*+\-\/÷^]|[<>]=?/,/\b(?:(?:begin|end|start)s? with|(?:contains?|(?:does not|doesn't) contain)|(?:is|isn't|is not) (?:contained by|in)|(?:(?:is|isn't|is not) )?(?:greater|less) than(?: or equal)?(?: to)?|(?:comes|(?:does not|doesn't) come) (?:after|before)|(?:is|isn't|is not) equal(?: to)?|(?:(?:does not|doesn't) equal|equal to|equals|is not|isn't)|(?:a )?(?:ref(?: to)?|reference to)|(?:and|as|div|mod|not|or))\b/],keyword:/\b(?:about|above|after|against|apart from|around|aside from|at|back|before|beginning|behind|below|beneath|beside|between|but|by|considering|continue|copy|does|eighth|else|end|equal|error|every|exit|false|fifth|first|for|fourth|from|front|get|given|global|if|ignoring|in|instead of|into|is|it|its|last|local|me|middle|my|ninth|of|on|onto|out of|over|prop|property|put|repeat|return|returning|second|set|seventh|since|sixth|some|tell|tenth|that|the|then|third|through|thru|timeout|times|to|transaction|true|try|until|where|while|whose|with|without)\b/,"class-name":/\b(?:POSIX file|RGB color|alias|application|boolean|centimeters|centimetres|class|constant|cubic centimeters|cubic centimetres|cubic feet|cubic inches|cubic meters|cubic metres|cubic yards|date|degrees Celsius|degrees Fahrenheit|degrees Kelvin|feet|file|gallons|grams|inches|integer|kilograms|kilometers|kilometres|list|liters|litres|meters|metres|miles|number|ounces|pounds|quarts|real|record|reference|script|square feet|square kilometers|square kilometres|square meters|square metres|square miles|square yards|text|yards)\b/,punctuation:/[{}():,¬«»《》]/};
--------------------------------------------------------------------------------
/docs/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Bob
8 |
9 |
10 |
11 |
12 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | Loading...
21 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
97 |
98 |
99 |
--------------------------------------------------------------------------------
/docs/_src/docsify/docsify-copy-code.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * docsify-copy-code
3 | * v2.1.1
4 | * https://github.com/jperasmus/docsify-copy-code
5 | * (c) 2017-2020 JP Erasmus
6 | * MIT license
7 | */
8 | !function(){"use strict";function s(o){return(s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o})(o)}!function(o,e){void 0===e&&(e={});var t=e.insertAt;if(o&&"undefined"!=typeof document){var n=document.head||document.getElementsByTagName("head")[0],c=document.createElement("style");c.type="text/css","top"===t&&n.firstChild?n.insertBefore(c,n.firstChild):n.appendChild(c),c.styleSheet?c.styleSheet.cssText=o:c.appendChild(document.createTextNode(o))}}(".docsify-copy-code-button,.docsify-copy-code-button span{cursor:pointer;transition:all .25s ease}.docsify-copy-code-button{position:absolute;z-index:1;top:0;right:0;overflow:visible;padding:.65em .8em;border:0;border-radius:0;outline:0;font-size:1em;background:grey;background:var(--theme-color,grey);color:#fff;opacity:0}.docsify-copy-code-button span{border-radius:3px;background:inherit;pointer-events:none}.docsify-copy-code-button .error,.docsify-copy-code-button .success{position:absolute;z-index:-100;top:50%;right:0;padding:.5em .65em;font-size:.825em;opacity:0;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.docsify-copy-code-button.error .error,.docsify-copy-code-button.success .success{right:100%;opacity:1;-webkit-transform:translate(-115%,-50%);transform:translate(-115%,-50%)}.docsify-copy-code-button:focus,pre:hover .docsify-copy-code-button{opacity:1}"),document.querySelector('link[href*="docsify-copy-code"]')&&console.warn("[Deprecation] Link to external docsify-copy-code stylesheet is no longer necessary."),window.DocsifyCopyCodePlugin={init:function(){return function(o,e){o.ready(function(){console.warn("[Deprecation] Manually initializing docsify-copy-code using window.DocsifyCopyCodePlugin.init() is no longer necessary.")})}}},window.$docsify=window.$docsify||{},window.$docsify.plugins=[function(o,r){o.doneEach(function(){var o=Array.apply(null,document.querySelectorAll("pre[data-lang]")),c={buttonText:"Copy to clipboard",errorText:"Error",successText:"Copied"};r.config.copyCode&&Object.keys(c).forEach(function(t){var n=r.config.copyCode[t];"string"==typeof n?c[t]=n:"object"===s(n)&&Object.keys(n).some(function(o){var e=-1',''.concat(c.buttonText,""),''.concat(c.errorText,""),''.concat(c.successText,""),""].join("");o.forEach(function(o){o.insertAdjacentHTML("beforeend",e)})}),o.mounted(function(){document.querySelector(".content").addEventListener("click",function(o){if(o.target.classList.contains("docsify-copy-code-button")){var e="BUTTON"===o.target.tagName?o.target:o.target.parentNode,t=document.createRange(),n=e.parentNode.querySelector("code"),c=window.getSelection();t.selectNode(n),c.removeAllRanges(),c.addRange(t);try{document.execCommand("copy")&&(e.classList.add("success"),setTimeout(function(){e.classList.remove("success")},1e3))}catch(o){console.error("docsify-copy-code: ".concat(o)),e.classList.add("error"),setTimeout(function(){e.classList.remove("error")},1e3)}"function"==typeof(c=window.getSelection()).removeRange?c.removeRange(t):"function"==typeof c.removeAllRanges&&c.removeAllRanges()}})})}].concat(window.$docsify.plugins||[])}();
9 | //# sourceMappingURL=docsify-copy-code.min.js.map
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | > [!NOTE]
10 | > Bob 不是开源软件,本仓库曾经用于提供反馈渠道,现在请通过 [这个链接](https://bobtranslate.com/general/contact.html) 联系我们。
11 |
12 | # Bob
13 |
14 | Bob 是一款 macOS 平台的 **翻译** 和 **OCR** 软件。
15 |
16 | 主要特性:
17 |
18 | - **翻译功能**:划词翻译、截图翻译、输入翻译、翻译多开、自定义插件、自动识别语种、驼峰拆分、蛇形拆分、AppleScript 调用、PopClip 调用
19 | - **OCR 功能**:截图 OCR、静默截图 OCR、访达选图 OCR、离线识别、连续识别、二维码识别、自动复制、智能分段
20 |
21 | 支持的服务:
22 |
23 | - **文本翻译**:系统翻译、火山翻译、腾讯翻译君、阿里翻译、百度翻译、有道翻译、彩云小译、小牛翻译、Google 翻译、Microsoft 翻译、Amazon 翻译、DeepL 翻译、OpenAI 翻译
24 | - **文本识别**:离线文本识别、火山 OCR、腾讯 OCR、腾讯图片翻译、百度 OCR、有道 OCR、Google OCR
25 | - **语音合成**:离线语音合成、火山语音合成 、腾讯语音合成、Google 语音合成、Microsoft 语音合成
26 |
27 | ## 安装
28 |
29 | [](https://apps.apple.com/cn/app/id1630034110#?platform=mac)
30 |
31 | ## 使用方法
32 |
33 | 详细使用方法请直接查看文档 [👉 点此跳转文档](https://bobtranslate.com)
34 |
35 | Bob 是一个菜单栏软件,启动之后,菜单栏会出现一个图标,点击菜单选项即可触发相应的功能,如下所示:
36 |
37 |
38 |
39 | ### 翻译功能
40 |
41 | | 方式 | 描述 | 预览 |
42 | | :---: | :---: | :---: |
43 | | 划词翻译 | 选中需要翻译的文本之后,按下划词翻译快捷键即可(默认 `⌥ + D`) |  |
44 | | 截图翻译 | 按下截图翻译快捷键(默认 `⌥ + S`),截取需要翻译的区域 |  |
45 | | 输入翻译| 按下输入翻译快捷键(默认 `⌥ + A`),输入需要翻译的文本,`Enter` 键翻译 |  |
46 | | PopClip 调用 | 选中需要翻译的文本之后,点击 [PopClip](https://pilotmoon.com/popclip) 插件图标即可,详情见 [PopClip 调用](https://bobtranslate.com/guide/integration/popclip.html) |  |
47 |
48 | ### OCR 功能
49 |
50 | **截图识别**
51 |
52 | * 按下「截图 OCR」快捷键(默认 `⇧ + ⌥ + S`)或者点击菜单栏 Bob 图标菜单中的「截图 OCR」
53 | * 选中屏幕上的对应的位置
54 | * 松手即可开始识别
55 |
56 |
57 |
58 | **静默截图 OCR**
59 |
60 | * 按下「静默截图 OCR」快捷键(默认 `⌥` `C`)或者点击菜单栏 Bob 图标菜单中的「静默截图 OCR」
61 | * 选中屏幕上的对应的位置
62 | * 松手即可开始识别
63 |
64 | 「静默截图 OCR」不会自动显示 OCR 窗口,识别完成后直接将文本拷贝到剪切板。
65 |
66 | **访达选图 OCR**
67 |
68 | 按下「访达选图 OCR」快捷键(没有设置默认快捷键,可去「 Bob 偏好设置-OCR-OCR 设置」添加)或者点击菜单栏 Bob 图标菜单中的「访达选图 OCR」。
69 |
70 | 在弹出的访达窗口中选中对应的图片文件(可以一次性选中多张),点击右下角「开始识别」即可。
71 |
72 |
73 |
74 | ## 感谢
75 |
76 | * 感谢 [@isee15](https://github.com/isee15/Capture-Screen-For-Multi-Screens-On-Mac) 提供最初版本截图功能的思路
77 | * 感谢 [@可口可乐](https://github.com/wakewon) 长期帮忙解决用户反馈
78 | * 感谢 [@ix4n33](https://github.com/IsaacXen) 不定期提供技术支持
79 | * 感谢朋友们的赞赏 [赞赏列表](https://bobtranslate.com/general/reward.html)
80 | * 感谢作者们发文支持 Bob(时间倒序)
81 | * @火山翻译:[双厨狂喜:Bob x 火山翻译梦幻联动!](https://mp.weixin.qq.com/s/c5zwcDsCgL10m_WdBiksEQ)
82 | * @奇客派:[macOS 翻译工具 Bob 大更新:支持更多翻译服务,增强 OCR 功能](https://sspai.com/post/62721)
83 | * @鹿額:[截图/划词/输入都能查,快捷高效的 macOS 翻译工具: Bob](https://sspai.com/post/58249)
84 | * @Newlearnerの自留地:[Bob:一款 macOS 全局翻译软件,支持划词翻译和截图翻译](https://t.me/NewlearnerChannel/3329)
85 |
86 | ## 优秀软件推荐
87 |
88 | * [uPic: 一个强大的图床工具](https://github.com/gee1k/uPic)
89 | * [MWeb Pro: 专业的 Markdown 写作、记笔记、静态博客生成软件](https://zh.mweb.im/)
90 | * [Picsee: 专业的图片采集收藏、照片整理标记、查找查看、分享协同软件](https://picsee.chitaner.com)
91 | * [赤友 NTFS 助手: Mac用户最喜欢的 NTFS for Mac 读写软件](https://aibotech.cn/ntfs-for-mac/)
92 | * [赤友右键超人: Mac 右键快捷操作工具,集合右键新建文件、卸载软件、压缩文件、剪切、截图录屏超多功能,一键快速搞定!](https://aibotech.cn/right-click-menu/)
93 |
94 |
--------------------------------------------------------------------------------
/docs/_src/prismjs/prism-javascript.min.js:
--------------------------------------------------------------------------------
1 | Prism.languages.javascript=Prism.languages.extend("clike",{"class-name":[Prism.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|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:{pattern:RegExp("(^|[^\\w$])(?:NaN|Infinity|0[bB][01]+(?:_[01]+)*n?|0[oO][0-7]+(?:_[0-7]+)*n?|0[xX][\\dA-Fa-f]+(?:_[\\dA-Fa-f]+)*n?|\\d+(?:_\\d+)*n|(?:\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[Ee][+-]?\\d+(?:_\\d+)*)?)(?![\\w$])"),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),Prism.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp("((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s]|\\b(?:return|yield))\\s*)/(?:(?:\\[(?:[^\\]\\\\\r\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\r\n])+/[dgimyus]{0,7}|(?:\\[(?:[^[\\]\\\\\r\n]|\\\\.|\\[(?:[^[\\]\\\\\r\n]|\\\\.|\\[(?:[^[\\]\\\\\r\n]|\\\\.)*\\])*\\])*\\]|\\\\.|[^/\\\\\\[\r\n])+/[dgimyus]{0,7}v[dgimyus]{0,7})(?=(?:\\s|/\\*(?:[^*]|\\*(?!/))*\\*/)*(?:$|[\r\n,.;:})\\]]|//))"),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:Prism.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"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:Prism.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:Prism.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:Prism.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),Prism.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"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:Prism.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),Prism.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),Prism.languages.markup&&(Prism.languages.markup.tag.addInlined("script","javascript"),Prism.languages.markup.tag.addAttribute("on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)","javascript")),Prism.languages.js=Prism.languages.javascript;
--------------------------------------------------------------------------------
/docs/_src/prismjs/prism-bash.min.js:
--------------------------------------------------------------------------------
1 | !function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},a={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:a},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:a},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:a.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:a.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var o=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],s=a.variable[1].inside,i=0;inav,body:not(.ready) [data-cloak]{display:none}div#app{font-size:30px;font-weight:lighter;margin:40vh auto;text-align:center}div#app:empty:before{content:"Loading..."}.emoji{height:1.2rem;vertical-align:middle}.progress{background-color:var(--theme-color,#42b983);height:2px;left:0;position:fixed;right:0;top:0;transition:width .2s,opacity .4s;width:0;z-index:999999}.search a:hover{color:var(--theme-color,#42b983)}.search .search-keyword{color:var(--theme-color,#42b983);font-style:normal;font-weight:700}body,html{height:100%}body{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#34495e;font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-size:15px;letter-spacing:0;margin:0;overflow-x:hidden}img{max-width:100%}a[disabled]{cursor:not-allowed;opacity:.6}kbd{border:1px solid #ccc;border-radius:3px;display:inline-block;font-size:12px!important;line-height:12px;margin-bottom:3px;padding:3px 5px;vertical-align:middle}li input[type=checkbox]{margin:0 .2em .25em 0;vertical-align:middle}.app-nav{margin:25px 60px 0 0;position:absolute;right:0;text-align:right;z-index:10}.app-nav.no-badge{margin-right:25px}.app-nav p{margin:0}.app-nav>a{margin:0 1rem;padding:5px 0}.app-nav li,.app-nav ul{display:inline-block;list-style:none;margin:0}.app-nav a{color:inherit;font-size:16px;text-decoration:none;transition:color .3s}.app-nav a:hover{color:var(--theme-color,#42b983)}.app-nav a.active{border-bottom:2px solid var(--theme-color,#42b983);color:var(--theme-color,#42b983)}.app-nav li{display:inline-block;margin:0 1rem;padding:5px 0;position:relative;cursor:pointer}.app-nav li ul{background-color:#fff;border:1px solid;border-color:#ddd #ddd #ccc;border-radius:4px;box-sizing:border-box;display:none;max-height:calc(100vh - 61px);overflow-y:auto;padding:10px 0;position:absolute;right:-15px;text-align:left;top:100%;white-space:nowrap}.app-nav li ul li{display:block;font-size:14px;line-height:1rem;margin:8px 14px;white-space:nowrap}.app-nav li ul a{display:block;font-size:inherit;margin:0;padding:0}.app-nav li ul a.active{border-bottom:0}.app-nav li:hover ul{display:block}.github-corner{border-bottom:0;position:fixed;right:0;text-decoration:none;top:0;z-index:1}.github-corner:hover .octo-arm{-webkit-animation:octocat-wave .56s ease-in-out;animation:octocat-wave .56s ease-in-out}.github-corner svg{color:#fff;fill:var(--theme-color,#42b983);height:80px;width:80px}main{display:block;position:relative;width:100vw;height:100%;z-index:0}main.hidden{display:none}.anchor{display:inline-block;text-decoration:none;transition:all .3s}.anchor span{color:#34495e}.anchor:hover{text-decoration:underline}.sidebar{border-right:1px solid rgba(0,0,0,.07);overflow-y:auto;padding:40px 0 0;position:absolute;top:0;bottom:0;left:0;transition:transform .25s ease-out;width:300px;z-index:20}.sidebar>h1{margin:0 auto 1rem;font-size:1.5rem;font-weight:300;text-align:center}.sidebar>h1 a{color:inherit;text-decoration:none}.sidebar>h1 .app-nav{display:block;position:static}.sidebar .sidebar-nav{line-height:2em;padding-bottom:40px}.sidebar li.collapse .app-sub-sidebar{display:none}.sidebar ul{margin:0 0 0 15px;padding:0}.sidebar li>p{font-weight:700;margin:0}.sidebar ul,.sidebar ul li{list-style:none}.sidebar ul li a{border-bottom:none;display:block}.sidebar ul li ul{padding-left:20px}.sidebar::-webkit-scrollbar{width:4px}.sidebar::-webkit-scrollbar-thumb{background:transparent;border-radius:4px}.sidebar:hover::-webkit-scrollbar-thumb{background:hsla(0,0%,53.3%,.4)}.sidebar:hover::-webkit-scrollbar-track{background:hsla(0,0%,53.3%,.1)}.sidebar-toggle{background-color:transparent;background-color:hsla(0,0%,100%,.8);border:0;outline:none;padding:10px;position:absolute;bottom:0;left:0;text-align:center;transition:opacity .3s;width:284px;z-index:30;cursor:pointer}.sidebar-toggle:hover .sidebar-toggle-button{opacity:.4}.sidebar-toggle span{background-color:var(--theme-color,#42b983);display:block;margin-bottom:4px;width:16px;height:2px}body.sticky .sidebar,body.sticky .sidebar-toggle{position:fixed}.content{padding-top:60px;position:absolute;top:0;right:0;bottom:0;left:300px;transition:left .25s ease}.markdown-section{margin:0 auto;max-width:80%;padding:30px 15px 40px;position:relative}.markdown-section>*{box-sizing:border-box;font-size:inherit}.markdown-section>:first-child{margin-top:0!important}.markdown-section hr{border:none;border-bottom:1px solid #eee;margin:2em 0}.markdown-section iframe{border:1px solid #eee;width:1px;min-width:100%}.markdown-section table{border-collapse:collapse;border-spacing:0;display:block;margin-bottom:1rem;overflow:auto;width:100%}.markdown-section th{font-weight:700}.markdown-section td,.markdown-section th{border:1px solid #ddd;padding:6px 13px}.markdown-section tr{border-top:1px solid #ccc}.markdown-section tr:nth-child(2n){background-color:#f8f8f8}.markdown-section p.tip{background-color:#f8f8f8;border-bottom-right-radius:2px;border-left:4px solid #f66;border-top-right-radius:2px;margin:2em 0;padding:12px 24px 12px 30px;position:relative}.markdown-section p.tip:before{background-color:#f66;border-radius:100%;color:#fff;content:"!";font-family:Dosis,Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-size:14px;font-weight:700;left:-12px;line-height:20px;position:absolute;height:20px;width:20px;text-align:center;top:14px}.markdown-section p.tip code{background-color:#efefef}.markdown-section p.tip em{color:#34495e}.markdown-section p.warn{background:rgba(66,185,131,.1);border-radius:2px;padding:1rem}.markdown-section ul.task-list>li{list-style-type:none}body.close .sidebar{transform:translateX(-300px)}body.close .sidebar-toggle{width:auto}body.close .content{left:0}@media print{.app-nav,.github-corner,.sidebar,.sidebar-toggle{display:none}}@media screen and (max-width:768px){.github-corner,.sidebar,.sidebar-toggle{position:fixed}.app-nav{margin-top:16px}.app-nav li ul{top:30px}main{height:auto;min-height:100vh;overflow-x:hidden}.sidebar{left:-300px;transition:transform .25s ease-out}.content{left:0;max-width:100vw;position:static;padding-top:20px;transition:transform .25s ease}.app-nav,.github-corner{transition:transform .25s ease-out}.sidebar-toggle{background-color:transparent;width:auto;padding:30px 30px 10px 10px}body.close .sidebar{transform:translateX(300px)}body.close .sidebar-toggle{background-color:hsla(0,0%,100%,.8);transition:background-color 1s;width:284px;padding:10px}body.close .content{transform:translateX(300px)}body.close .app-nav,body.close .github-corner{display:none}.github-corner:hover .octo-arm{-webkit-animation:none;animation:none}.github-corner .octo-arm{-webkit-animation:octocat-wave .56s ease-in-out;animation:octocat-wave .56s ease-in-out}}@-webkit-keyframes octocat-wave{0%,to{transform:rotate(0)}20%,60%{transform:rotate(-25deg)}40%,80%{transform:rotate(10deg)}}@keyframes octocat-wave{0%,to{transform:rotate(0)}20%,60%{transform:rotate(-25deg)}40%,80%{transform:rotate(10deg)}}section.cover{align-items:center;background-position:50%;background-repeat:no-repeat;background-size:cover;height:100vh;width:100vw;display:none}section.cover.show{display:flex}section.cover.has-mask .mask{background-color:#fff;opacity:.8;position:absolute;top:0;height:100%;width:100%}section.cover .cover-main{flex:1;margin:-20px 16px 0;text-align:center;position:relative}section.cover a{color:inherit;text-decoration:none}section.cover a:hover{text-decoration:none}section.cover p{line-height:1.5rem;margin:1em 0}section.cover h1{color:inherit;font-size:2.5rem;font-weight:300;margin:.625rem 0 2.5rem;position:relative;text-align:center}section.cover h1 a{display:block}section.cover h1 small{bottom:-.4375rem;font-size:1rem;position:absolute}section.cover blockquote{font-size:1.5rem;text-align:center}section.cover ul{line-height:1.8;list-style-type:none;margin:1em auto;max-width:500px;padding:0}section.cover .cover-main>p:last-child a{border-radius:2rem;border:1px solid var(--theme-color,#42b983);box-sizing:border-box;color:var(--theme-color,#42b983);display:inline-block;font-size:1.05rem;letter-spacing:.1rem;margin:.5rem 1rem;padding:.75em 2rem;text-decoration:none;transition:all .15s ease}section.cover .cover-main>p:last-child a:last-child{background-color:var(--theme-color,#42b983);color:#fff}section.cover .cover-main>p:last-child a:last-child:hover{color:inherit;opacity:.8}section.cover .cover-main>p:last-child a:hover{color:inherit}section.cover blockquote>p>a{border-bottom:2px solid var(--theme-color,#42b983);transition:color .3s}section.cover blockquote>p>a:hover{color:var(--theme-color,#42b983)}.sidebar,body{background-color:#fff}.sidebar{color:#364149}.sidebar li{margin:6px 0}.sidebar ul li a{color:#505d6b;font-size:14px;font-weight:400;overflow:hidden;text-decoration:none;text-overflow:ellipsis;white-space:nowrap}.sidebar ul li a:hover{text-decoration:underline}.sidebar ul li ul{padding:0}.sidebar ul li.active>a{border-right:2px solid;color:var(--theme-color,#42b983);font-weight:600}.app-sub-sidebar li:before{content:"-";padding-right:4px;float:left}.markdown-section h1,.markdown-section h2,.markdown-section h3,.markdown-section h4,.markdown-section strong{color:#2c3e50;font-weight:600}.markdown-section a{color:var(--theme-color,#42b983);font-weight:600}.markdown-section h1{font-size:2rem;margin:0 0 1rem}.markdown-section h2{font-size:1.75rem;margin:45px 0 .8rem}.markdown-section h3{font-size:1.5rem;margin:40px 0 .6rem}.markdown-section h4{font-size:1.25rem}.markdown-section h5{font-size:1rem}.markdown-section h6{color:#777;font-size:1rem}.markdown-section figure,.markdown-section p{margin:1.2em 0}.markdown-section ol,.markdown-section p,.markdown-section ul{line-height:1.6rem;word-spacing:.05rem}.markdown-section ol,.markdown-section ul{padding-left:1.5rem}.markdown-section blockquote{border-left:4px solid var(--theme-color,#42b983);color:#858585;margin:2em 0;padding-left:20px}.markdown-section blockquote p{font-weight:600;margin-left:0}.markdown-section iframe{margin:1em 0}.markdown-section em{color:#7f8c8d}.markdown-section code,.markdown-section output:after,.markdown-section pre{font-family:Roboto Mono,Monaco,courier,monospace}.markdown-section code,.markdown-section pre{background-color:#f8f8f8}.markdown-section output,.markdown-section pre{margin:1.2em 0;position:relative}.markdown-section output,.markdown-section pre>code{border-radius:2px;display:block}.markdown-section output:after,.markdown-section pre>code{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial}.markdown-section code{border-radius:2px;color:#e96900;margin:0 2px;padding:3px 5px;white-space:pre-wrap}.markdown-section>:not(h1):not(h2):not(h3):not(h4):not(h5):not(h6) code{font-size:.8rem}.markdown-section pre{padding:0 1.4rem;line-height:1.5rem;overflow:auto;word-wrap:normal}.markdown-section pre>code{color:#525252;font-size:.8rem;padding:2.2em 5px;line-height:inherit;margin:0 2px;max-width:inherit;overflow:inherit;white-space:inherit}.markdown-section output{padding:1.7rem 1.4rem;border:1px dotted #ccc}.markdown-section output>:first-child{margin-top:0}.markdown-section output>:last-child{margin-bottom:0}.markdown-section code:after,.markdown-section code:before,.markdown-section output:after,.markdown-section output:before{letter-spacing:.05rem}.markdown-section output:after,.markdown-section pre:after{color:#ccc;font-size:.6rem;font-weight:600;height:15px;line-height:15px;padding:5px 10px 0;position:absolute;right:0;text-align:right;top:0}.markdown-section output:after,.markdown-section pre:after{content:attr(data-lang)}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#8e908c}.token.namespace{opacity:.7}.token.boolean,.token.number{color:#c76b29}.token.punctuation{color:#525252}.token.property{color:#c08b30}.token.tag{color:#2973b7}.token.string{color:var(--theme-color,#42b983)}.token.selector{color:#6679cc}.token.attr-name{color:#2973b7}.language-css .token.string,.style .token.string,.token.entity,.token.url{color:#22a2c9}.token.attr-value,.token.control,.token.directive,.token.unit{color:var(--theme-color,#42b983)}.token.function,.token.keyword{color:#e96900}.token.atrule,.token.regex,.token.statement{color:#22a2c9}.token.placeholder,.token.variable{color:#3d8fd1}.token.deleted{text-decoration:line-through}.token.inserted{border-bottom:1px dotted #202746;text-decoration:none}.token.italic{font-style:italic}.token.bold,.token.important{font-weight:700}.token.important{color:#c94922}.token.entity{cursor:help}code .token{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;min-height:1.5rem;position:relative;left:auto}
--------------------------------------------------------------------------------
/appcast.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Bob
5 | -
6 | 0.10.3
7 | 周六, 09 7月 2022 20:30:21 +0800
8 | 10.13
9 |
10 |
12 | 将 App 内部所有链接指向新的社区版官网
13 | Bob 已发布到 Mac App Store,详情请查看 这篇文章
14 |
15 | ]]>
16 |
17 | -
18 | 0.10.2
19 | 周四, 19 5月 2022 18:48:44 +0800
20 | 10.13
21 |
22 |
24 | 修复翻译功能无法添加语音合成插件的问题
25 |
26 | ]]>
27 |
28 | -
29 | 0.10.1
30 | 周日, 15 5月 2022 13:48:28 +0800
31 | 10.13
32 |
33 |
35 | 优化在 macOS 12.3.1 调用系统翻译服务的逻辑
36 |
37 | ]]>
38 |
39 | -
40 | 0.10.0
41 | 周五, 13 5月 2022 21:43:36 +0800
42 | 10.13
43 |
44 |
46 | 新增静默截图 OCR 功能(使用静默截图 OCR 不会显示 OCR 窗口)
47 | 新增系统翻译服务,macOS 12.3.1 以上可用(实验性功能)
48 | 新增保持翻译服务折叠状态的功能(可在偏好设置开启)
49 | 修复 10.14.6 以下系统无法添加服务的问题
50 | 修复调用金山词霸服务崩溃的问题
51 |
52 | ]]>
53 |
54 | -
55 | 0.9.0
56 | 周日, 08 5月 2022 13:54:15 +0800
57 | 10.13
58 |
59 |
61 | 全新的独立 OCR 功能
62 | 支持截图识别
63 | 支持访达选图识别
64 | 支持离线识别
65 | 支持连续识别
66 | 支持二维码识别
67 | 支持自动复制
68 | 支持智能分段
69 | 新增翻译功能取词模式设置
70 |
71 | ]]>
72 |
73 | -
74 | 0.8.1
75 | 周二, 29 3月 2022 22:14:00 +0800
76 | 10.13
77 |
78 |
80 | 修复离线文本识别严重内存泄漏的问题
81 | 修复划词翻译偶发崩溃的问题
82 |
83 | ]]>
84 |
85 | -
86 | 0.8.0
87 |
90 | 新增离线文本识别服务,macOS 11 以上可用
91 | 支持不保存翻译历史
92 | 支持在翻译窗口导航栏添加按钮用于快捷显隐输入框
93 | 优化对连字字符的处理
94 | 优化取词模块,支持在 Parallels Desktop 取词;详情参考这篇文章
95 | 修复隐藏状态栏图标无效的问题
96 | 修复在文档文件夹创建 mmkv 文件夹的问题
97 | 修复金山词霸无法查询大写的问题
98 |
99 |
100 | ]]>
101 | 周一, 28 2月 2022 16:25:23 +0800
102 | 10.13
103 |
104 |
105 | -
106 | 0.7.0
107 |
110 | 全新的偏好设置页面
111 | 全新的快捷键系统,支持双击 command 等按键触发快捷键(由于换了快捷键系统,如果你之前修改过快捷键,请升级完再手动修改下)
112 | 新增翻译历史记录
113 | 新增翻译收藏夹
114 | 新增偏好设置导入导出功能
115 | 新增金山词霸查词引擎
116 | 支持隐藏菜单栏图标
117 | 支持在翻译窗口快捷切换服务
118 | 部分常用设置迁移到翻译窗口快捷控制菜单
119 | 翻译窗口 UI 微调
120 | 修复部分 PDF 软件的换行符无法替换为空格的问题
121 | 修复一些崩溃
122 |
123 |
124 | ]]>
125 | 周六, 27 11月 2021 17:53:18 +0800
126 | 10.13
127 |
128 |
129 | -
130 | 0.6.1
131 |
134 | 修复截图翻译在 Catalina 崩溃的问题
135 |
136 |
137 | ]]>
138 | 周日, 14 3月 2021 16:31:12 +0800
139 | 10.13
140 |
141 |
142 | -
143 | 0.6.0
144 |
147 | 新增阿里翻译、小牛翻译、简明英汉词典增强版
148 | 新增 Google OCR
149 | 新增翻译结果为英文时将其复制为驼峰或蛇形字符串的功能(可在偏好设置开启)
150 | 修复在 Safari 浏览器下查看 Google 文档无法取词的问题
151 | 修复在部分系统下无法截图的问题
152 |
153 |
154 | ]]>
155 | 周日, 14 3月 2021 00:20:08 +0800
156 | 10.13
157 |
158 |
159 | -
160 | 0.5.4
161 |
164 | 适配 Big Sur 图标
165 | 新增 Google 语音合成
166 | 语音合成服务支持根据语言选择声音
167 | 彩云小译使用 https 协议
168 | 修复了 Google 翻译引号乱码的问题
169 | 修复了部分用户翻译窗口失焦后不消失的问题
170 | 修复了在 Chrome 浏览器下 Google 表格无法取词的问题
171 | 修复了百度 OCR 高精度版数字中间有空格的问题
172 |
173 |
174 | ]]>
175 | 周日, 27 12月 2020 23:58:32 +0800
176 | 10.13
177 |
178 |
179 | -
180 | 0.5.3
181 |
184 | Intel 和 Apple Silicon 双架构支持
185 | 修复部分机型在 Big Sur 下菜单栏图标显示异常的问题
186 | 修复部分机型在 Chrome 浏览器下划词翻译窗口突然消失的问题
187 | 修复部分机型 Apple 语音合成无法使用及崩溃的问题
188 | 修复腾讯云语音合成无法使用的问题并增加可选项
189 | 修复 Emoji 导致有道翻译崩溃的问题
190 | 默认隐藏插件设置项的输入框文本
191 | 调整开启权限的提示
192 | 调整免费服务异常的提示
193 | 调整导出日志的提示
194 |
195 |
196 | ]]>
197 | 周日, 29 11月 2020 18:42:05 +0800
198 | 10.13
199 |
200 |
201 | -
202 | 0.5.2
203 |
206 | 修复在 macOS High Sierra (10.13) 崩溃的问题
207 |
208 |
209 | ]]>
210 | 周五, 09 10月 2020 17:13:20 +0800
211 | 10.13
212 |
213 |
214 | -
215 | 0.5.1
216 |
219 | 接入了多家服务,通过申请私人秘钥使用
220 | 支持多开翻译,最多可同时开启5个
221 | 支持插件,可以实现自定义 API
222 | 支持驼峰拆分、蛇形拆分
223 | UI 调整
224 | 删除了隐藏菜单栏图标的功能
225 | 删除了拖拽翻译窗口大小的功能
226 | 删除了原有的百度翻译、有道翻译和谷歌翻译
227 | 更新内容详情https://ripperhe.gitee.io/bob/#/blog/2020-08-03-0.5.0-new-features
228 |
229 |
230 | ]]>
231 | 周二, 06 10月 2020 22:08:34 +0800
232 | 10.13
233 |
234 |
235 | -
236 | 0.4.0
237 |
240 | 支持切换和自定义菜单栏图标
241 | 支持隐藏菜单栏图标
242 | 支持显示上次翻译结果
243 | 可设置翻译窗口位置在鼠标位置、居中和菜单栏图标下方
244 | 可独立设置划词翻译和截图翻译输入框折叠状态
245 | 可设置划词取到的翻译原文中的「\n」替换为「空格」
246 | 可设置自动复制截图翻译OCR结果
247 | 可设置自动复制翻译结果中点击后自动查询的单词
248 | 谷歌翻译新增了维吾尔语等几门语言
249 | 优化了取词功能,理论上不再影响剪切板
250 | 针对Chrome浏览器的取词做了特殊处理,开启相关权限后取词更准
251 | 修复了系统外观选为「自动」的时候,深色浅色切换异常的问题
252 |
253 |
254 | ]]>
255 | 周一, 16 3月 2020 14:04:51 +0800
256 | 10.12
257 |
258 |
259 | -
260 | 0.3.0
261 |
264 | 新增了设置字体大小的功能
265 | 支持 ESC 关闭翻译页面
266 | 支持 PopClip 插件翻译
267 | 取词时去掉首尾的空白字符
268 | 输入翻译居中显示(0.2.0 之前显示在鼠标位置)
269 | 新增了未开启辅助功能权限的提示
270 | 修复了部分机型无法使用截图翻译的问题
271 | 修复了翻译窗口超出屏幕底部偶尔无法回调屏幕的问题
272 | 修复了 10.12 默认显示为深色的问题
273 |
274 |
275 | ]]>
276 | 周日, 02 2月 2020 21:29:58 +0800
277 | 10.12
278 |
279 |
280 | -
281 | 0.2.0
282 |
285 | 适配暗黑模式
286 | 翻译视图 UI 微调
287 | 新增了自动复制翻译结果的选项
288 | 快捷键提示改为用技术符号表示
289 | 截图模式可使用鼠标右键退出
290 | 弱化了翻译视图弹出影响
291 | 修复了有道词典中文查词数据解决异常的问题
292 | 解决了关闭翻译视图后无法停止朗读的问题
293 | 修复了偏好设置以及检查更新弹窗不居中的问题
294 |
295 |
296 | ]]>
297 | 周六, 28 12月 2019 17:22:38 +0800
298 | 10.12
299 |
300 |
301 | -
302 | 0.1.0
303 | 周日, 22 12月 2019 18:20:35 +0800
304 | 10.12
305 |
306 |
307 |
308 |
--------------------------------------------------------------------------------
/docs/_src/docsify/search.js:
--------------------------------------------------------------------------------
1 | (function () {
2 | /**
3 | * Converts a colon formatted string to a object with properties.
4 | *
5 | * This is process a provided string and look for any tokens in the format
6 | * of `:name[=value]` and then convert it to a object and return.
7 | * An example of this is ':include :type=code :fragment=demo' is taken and
8 | * then converted to:
9 | *
10 | * ```
11 | * {
12 | * include: '',
13 | * type: 'code',
14 | * fragment: 'demo'
15 | * }
16 | * ```
17 | *
18 | * @param {string} str The string to parse.
19 | *
20 | * @return {object} The original string and parsed object, { str, config }.
21 | */
22 | function getAndRemoveConfig(str) {
23 | if ( str === void 0 ) str = '';
24 |
25 | var config = {};
26 |
27 | if (str) {
28 | str = str
29 | .replace(/^('|")/, '')
30 | .replace(/('|")$/, '')
31 | .replace(/(?:^|\s):([\w-]+:?)=?([\w-%]+)?/g, function (m, key, value) {
32 | if (key.indexOf(':') === -1) {
33 | config[key] = (value && value.replace(/"/g, '')) || true;
34 | return '';
35 | }
36 |
37 | return m;
38 | })
39 | .trim();
40 | }
41 |
42 | return { str: str, config: config };
43 | }
44 |
45 | /* eslint-disable no-unused-vars */
46 |
47 | var INDEXS = {};
48 |
49 | var LOCAL_STORAGE = {
50 | EXPIRE_KEY: 'docsify.search.expires',
51 | INDEX_KEY: 'docsify.search.index',
52 | };
53 |
54 | function resolveExpireKey(namespace) {
55 | return namespace
56 | ? ((LOCAL_STORAGE.EXPIRE_KEY) + "/" + namespace)
57 | : LOCAL_STORAGE.EXPIRE_KEY;
58 | }
59 |
60 | function resolveIndexKey(namespace) {
61 | return namespace
62 | ? ((LOCAL_STORAGE.INDEX_KEY) + "/" + namespace)
63 | : LOCAL_STORAGE.INDEX_KEY;
64 | }
65 |
66 | function escapeHtml(string) {
67 | var entityMap = {
68 | '&': '&',
69 | '<': '<',
70 | '>': '>',
71 | '"': '"',
72 | "'": ''',
73 | };
74 |
75 | return String(string).replace(/[&<>"']/g, function (s) { return entityMap[s]; });
76 | }
77 |
78 | function getAllPaths(router) {
79 | var paths = [];
80 |
81 | Docsify.dom
82 | .findAll('.sidebar-nav a:not(.section-link):not([data-nosearch])')
83 | .forEach(function (node) {
84 | var href = node.href;
85 | var originHref = node.getAttribute('href');
86 | var path = router.parse(href).path;
87 |
88 | if (
89 | path &&
90 | paths.indexOf(path) === -1 &&
91 | !Docsify.util.isAbsolutePath(originHref)
92 | ) {
93 | paths.push(path);
94 | }
95 | });
96 |
97 | return paths;
98 | }
99 |
100 | function getTableData(token) {
101 | if (!token.text && token.type === 'table') {
102 | token.cells.unshift(token.header);
103 | token.text = token.cells
104 | .map(function(rows) {
105 | return rows.join(' | ');
106 | })
107 | .join(' |\n ');
108 | }
109 | return token.text;
110 | }
111 |
112 | function getListData(token) {
113 | if (!token.text && token.type === 'list') {
114 | token.text = token.raw;
115 | }
116 | return token.text;
117 | }
118 |
119 | function saveData(maxAge, expireKey, indexKey) {
120 | localStorage.setItem(expireKey, Date.now() + maxAge);
121 | localStorage.setItem(indexKey, JSON.stringify(INDEXS));
122 | }
123 |
124 | function genIndex(path, content, router, depth) {
125 | if ( content === void 0 ) content = '';
126 |
127 | var tokens = window.marked.lexer(content);
128 | var slugify = window.Docsify.slugify;
129 | var index = {};
130 | var slug;
131 | var title = '';
132 |
133 | tokens.forEach(function(token, tokenIndex) {
134 | if (token.type === 'heading' && token.depth <= depth) {
135 | var ref = getAndRemoveConfig(token.text);
136 | var str = ref.str;
137 | var config = ref.config;
138 |
139 | if (config.id) {
140 | slug = router.toURL(path, { id: slugify(config.id) });
141 | } else {
142 | slug = router.toURL(path, { id: slugify(escapeHtml(token.text)) });
143 | }
144 |
145 | if (str) {
146 | title = str
147 | .replace(//, '')
148 | .replace(/{docsify-ignore}/, '')
149 | .replace(//, '')
150 | .replace(/{docsify-ignore-all}/, '')
151 | .trim();
152 | }
153 |
154 | index[slug] = { slug: slug, title: title, body: '' };
155 | } else {
156 | if (tokenIndex === 0) {
157 | slug = router.toURL(path);
158 | index[slug] = {
159 | slug: slug,
160 | title: path !== '/' ? path.slice(1) : 'Home Page',
161 | body: token.text || '',
162 | };
163 | }
164 |
165 | if (!slug) {
166 | return;
167 | }
168 |
169 | if (!index[slug]) {
170 | index[slug] = { slug: slug, title: '', body: '' };
171 | } else if (index[slug].body) {
172 | token.text = getTableData(token);
173 | token.text = getListData(token);
174 |
175 | index[slug].body += '\n' + (token.text || '');
176 | } else {
177 | token.text = getTableData(token);
178 | token.text = getListData(token);
179 |
180 | index[slug].body = index[slug].body
181 | ? index[slug].body + token.text
182 | : token.text;
183 | }
184 | }
185 | });
186 | slugify.clear();
187 | return index;
188 | }
189 |
190 | function ignoreDiacriticalMarks(keyword) {
191 | if (keyword && keyword.normalize) {
192 | return keyword.normalize('NFD').replace(/[\u0300-\u036f]/g, '');
193 | }
194 | return keyword;
195 | }
196 |
197 | /**
198 | * @param {String} query Search query
199 | * @returns {Array} Array of results
200 | */
201 | function search(query) {
202 | var matchingResults = [];
203 | var data = [];
204 | Object.keys(INDEXS).forEach(function (key) {
205 | data = data.concat(Object.keys(INDEXS[key]).map(function (page) { return INDEXS[key][page]; }));
206 | });
207 |
208 | query = query.trim();
209 | var keywords = query.split(/[\s\-,\\/]+/);
210 | if (keywords.length !== 1) {
211 | keywords = [].concat(query, keywords);
212 | }
213 |
214 | var loop = function ( i ) {
215 | var post = data[i];
216 | var matchesScore = 0;
217 | var resultStr = '';
218 | var handlePostTitle = '';
219 | var handlePostContent = '';
220 | var postTitle = post.title && post.title.trim();
221 | var postContent = post.body && post.body.trim();
222 | var postUrl = post.slug || '';
223 |
224 | if (postTitle) {
225 | keywords.forEach(function (keyword) {
226 | // From https://github.com/sindresorhus/escape-string-regexp
227 | var regEx = new RegExp(
228 | escapeHtml(ignoreDiacriticalMarks(keyword)).replace(
229 | /[|\\{}()[\]^$+*?.]/g,
230 | '\\$&'
231 | ),
232 | 'gi'
233 | );
234 | var indexTitle = -1;
235 | var indexContent = -1;
236 | handlePostTitle = postTitle
237 | ? escapeHtml(ignoreDiacriticalMarks(postTitle))
238 | : postTitle;
239 | handlePostContent = postContent
240 | ? escapeHtml(ignoreDiacriticalMarks(postContent))
241 | : postContent;
242 |
243 | indexTitle = postTitle ? handlePostTitle.search(regEx) : -1;
244 | indexContent = postContent ? handlePostContent.search(regEx) : -1;
245 |
246 | if (indexTitle >= 0 || indexContent >= 0) {
247 | matchesScore += indexTitle >= 0 ? 3 : indexContent >= 0 ? 2 : 0;
248 | if (indexContent < 0) {
249 | indexContent = 0;
250 | }
251 |
252 | var start = 0;
253 | var end = 0;
254 |
255 | start = indexContent < 11 ? 0 : indexContent - 10;
256 | end = start === 0 ? 70 : indexContent + keyword.length + 60;
257 |
258 | if (postContent && end > postContent.length) {
259 | end = postContent.length;
260 | }
261 |
262 | var matchContent =
263 | '...' +
264 | handlePostContent
265 | .substring(start, end)
266 | .replace(
267 | regEx,
268 | function (word) { return ("" + word + ""); }
269 | ) +
270 | '...';
271 |
272 | resultStr += matchContent;
273 | }
274 | });
275 |
276 | if (matchesScore > 0) {
277 | var matchingPost = {
278 | title: handlePostTitle,
279 | content: postContent ? resultStr : '',
280 | url: postUrl,
281 | score: matchesScore,
282 | };
283 |
284 | matchingResults.push(matchingPost);
285 | }
286 | }
287 | };
288 |
289 | for (var i = 0; i < data.length; i++) loop( i );
290 |
291 | return matchingResults.sort(function (r1, r2) { return r2.score - r1.score; });
292 | }
293 |
294 | function init(config, vm) {
295 | var isAuto = config.paths === 'auto';
296 | var paths = isAuto ? getAllPaths(vm.router) : config.paths;
297 |
298 | var namespaceSuffix = '';
299 |
300 | // only in auto mode
301 | if (paths.length && isAuto && config.pathNamespaces) {
302 | var path = paths[0];
303 |
304 | if (Array.isArray(config.pathNamespaces)) {
305 | namespaceSuffix =
306 | config.pathNamespaces.filter(
307 | function (prefix) { return path.slice(0, prefix.length) === prefix; }
308 | )[0] || namespaceSuffix;
309 | } else if (config.pathNamespaces instanceof RegExp) {
310 | var matches = path.match(config.pathNamespaces);
311 |
312 | if (matches) {
313 | namespaceSuffix = matches[0];
314 | }
315 | }
316 | var isExistHome = paths.indexOf(namespaceSuffix + '/') === -1;
317 | var isExistReadme = paths.indexOf(namespaceSuffix + '/README') === -1;
318 | if (isExistHome && isExistReadme) {
319 | paths.unshift(namespaceSuffix + '/');
320 | }
321 | } else if (paths.indexOf('/') === -1 && paths.indexOf('/README') === -1) {
322 | paths.unshift('/');
323 | }
324 |
325 | var expireKey = resolveExpireKey(config.namespace) + namespaceSuffix;
326 | var indexKey = resolveIndexKey(config.namespace) + namespaceSuffix;
327 |
328 | var isExpired = localStorage.getItem(expireKey) < Date.now();
329 |
330 | INDEXS = JSON.parse(localStorage.getItem(indexKey));
331 |
332 | if (isExpired) {
333 | INDEXS = {};
334 | } else if (!isAuto) {
335 | return;
336 | }
337 |
338 | var len = paths.length;
339 | var count = 0;
340 |
341 | paths.forEach(function (path) {
342 | if (INDEXS[path]) {
343 | return count++;
344 | }
345 |
346 | Docsify.get(vm.router.getFile(path), false, vm.config.requestHeaders).then(
347 | function (result) {
348 | INDEXS[path] = genIndex(path, result, vm.router, config.depth);
349 | len === ++count && saveData(config.maxAge, expireKey, indexKey);
350 | }
351 | );
352 | });
353 | }
354 |
355 | /* eslint-disable no-unused-vars */
356 |
357 | var NO_DATA_TEXT = '';
358 | var options;
359 |
360 | function style() {
361 | var code = "\n.sidebar {\n padding-top: 0;\n}\n\n.search {\n margin-bottom: 20px;\n padding: 6px;\n border-bottom: 1px solid #eee;\n}\n\n.search .input-wrap {\n display: flex;\n align-items: center;\n}\n\n.search .results-panel {\n display: none;\n}\n\n.search .results-panel.show {\n display: block;\n}\n\n.search input {\n outline: none;\n border: none;\n width: 100%;\n padding: 0 7px;\n line-height: 36px;\n font-size: 14px;\n border: 1px solid transparent;\n}\n\n.search input:focus {\n box-shadow: 0 0 5px var(--theme-color, #42b983);\n border: 1px solid var(--theme-color, #42b983);\n}\n\n.search input::-webkit-search-decoration,\n.search input::-webkit-search-cancel-button,\n.search input {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n.search .clear-button {\n cursor: pointer;\n width: 36px;\n text-align: right;\n display: none;\n}\n\n.search .clear-button.show {\n display: block;\n}\n\n.search .clear-button svg {\n transform: scale(.5);\n}\n\n.search h2 {\n font-size: 17px;\n margin: 10px 0;\n}\n\n.search a {\n text-decoration: none;\n color: inherit;\n}\n\n.search .matching-post {\n border-bottom: 1px solid #eee;\n}\n\n.search .matching-post:last-child {\n border-bottom: 0;\n}\n\n.search p {\n font-size: 14px;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n\n.search p.empty {\n text-align: center;\n}\n\n.app-name.hide, .sidebar-nav.hide {\n display: none;\n}";
362 |
363 | Docsify.dom.style(code);
364 | }
365 |
366 | function tpl(defaultValue) {
367 | if ( defaultValue === void 0 ) defaultValue = '';
368 |
369 | var html = "\n \n ";
370 | var el = Docsify.dom.create('div', html);
371 | var aside = Docsify.dom.find('aside');
372 |
373 | Docsify.dom.toggleClass(el, 'search');
374 | Docsify.dom.before(aside, el);
375 | }
376 |
377 | function doSearch(value) {
378 | var $search = Docsify.dom.find('div.search');
379 | var $panel = Docsify.dom.find($search, '.results-panel');
380 | var $clearBtn = Docsify.dom.find($search, '.clear-button');
381 | var $sidebarNav = Docsify.dom.find('.sidebar-nav');
382 | var $appName = Docsify.dom.find('.app-name');
383 |
384 | if (!value) {
385 | $panel.classList.remove('show');
386 | $clearBtn.classList.remove('show');
387 | $panel.innerHTML = '';
388 |
389 | if (options.hideOtherSidebarContent) {
390 | $sidebarNav && $sidebarNav.classList.remove('hide');
391 | $appName && $appName.classList.remove('hide');
392 | }
393 |
394 | return;
395 | }
396 |
397 | var matchs = search(value);
398 |
399 | var html = '';
400 | matchs.forEach(function (post) {
401 | html += "";
402 | });
403 |
404 | $panel.classList.add('show');
405 | $clearBtn.classList.add('show');
406 | $panel.innerHTML = html || ("" + NO_DATA_TEXT + "
");
407 | if (options.hideOtherSidebarContent) {
408 | $sidebarNav && $sidebarNav.classList.add('hide');
409 | $appName && $appName.classList.add('hide');
410 | }
411 | }
412 |
413 | function bindEvents() {
414 | var $search = Docsify.dom.find('div.search');
415 | var $input = Docsify.dom.find($search, 'input');
416 | var $inputWrap = Docsify.dom.find($search, '.input-wrap');
417 |
418 | var timeId;
419 |
420 | /**
421 | Prevent to Fold sidebar.
422 |
423 | When searching on the mobile end,
424 | the sidebar is collapsed when you click the INPUT box,
425 | making it impossible to search.
426 | */
427 | Docsify.dom.on(
428 | $search,
429 | 'click',
430 | function (e) { return ['A', 'H2', 'P', 'EM'].indexOf(e.target.tagName) === -1 &&
431 | e.stopPropagation(); }
432 | );
433 | Docsify.dom.on($input, 'input', function (e) {
434 | clearTimeout(timeId);
435 | timeId = setTimeout(function (_) { return doSearch(e.target.value.trim()); }, 100);
436 | });
437 | Docsify.dom.on($inputWrap, 'click', function (e) {
438 | // Click input outside
439 | if (e.target.tagName !== 'INPUT') {
440 | $input.value = '';
441 | doSearch();
442 | }
443 | });
444 | }
445 |
446 | function updatePlaceholder(text, path) {
447 | var $input = Docsify.dom.getNode('.search input[type="search"]');
448 |
449 | if (!$input) {
450 | return;
451 | }
452 |
453 | if (typeof text === 'string') {
454 | $input.placeholder = text;
455 | } else {
456 | var match = Object.keys(text).filter(function (key) { return path.indexOf(key) > -1; })[0];
457 | $input.placeholder = text[match];
458 | }
459 | }
460 |
461 | function updateNoData(text, path) {
462 | if (typeof text === 'string') {
463 | NO_DATA_TEXT = text;
464 | } else {
465 | var match = Object.keys(text).filter(function (key) { return path.indexOf(key) > -1; })[0];
466 | NO_DATA_TEXT = text[match];
467 | }
468 | }
469 |
470 | function updateOptions(opts) {
471 | options = opts;
472 | }
473 |
474 | function init$1(opts, vm) {
475 | var keywords = vm.router.parse().query.s;
476 |
477 | updateOptions(opts);
478 | style();
479 | tpl(keywords);
480 | bindEvents();
481 | keywords && setTimeout(function (_) { return doSearch(keywords); }, 500);
482 | }
483 |
484 | function update(opts, vm) {
485 | updateOptions(opts);
486 | updatePlaceholder(opts.placeholder, vm.route.path);
487 | updateNoData(opts.noData, vm.route.path);
488 | }
489 |
490 | /* eslint-disable no-unused-vars */
491 |
492 | var CONFIG = {
493 | placeholder: 'Type to search',
494 | noData: 'No Results!',
495 | paths: 'auto',
496 | depth: 2,
497 | maxAge: 86400000, // 1 day
498 | hideOtherSidebarContent: false,
499 | namespace: undefined,
500 | pathNamespaces: undefined,
501 | };
502 |
503 | var install = function(hook, vm) {
504 | var util = Docsify.util;
505 | var opts = vm.config.search || CONFIG;
506 |
507 | if (Array.isArray(opts)) {
508 | CONFIG.paths = opts;
509 | } else if (typeof opts === 'object') {
510 | CONFIG.paths = Array.isArray(opts.paths) ? opts.paths : 'auto';
511 | CONFIG.maxAge = util.isPrimitive(opts.maxAge) ? opts.maxAge : CONFIG.maxAge;
512 | CONFIG.placeholder = opts.placeholder || CONFIG.placeholder;
513 | CONFIG.noData = opts.noData || CONFIG.noData;
514 | CONFIG.depth = opts.depth || CONFIG.depth;
515 | CONFIG.hideOtherSidebarContent =
516 | opts.hideOtherSidebarContent || CONFIG.hideOtherSidebarContent;
517 | CONFIG.namespace = opts.namespace || CONFIG.namespace;
518 | CONFIG.pathNamespaces = opts.pathNamespaces || CONFIG.pathNamespaces;
519 | }
520 |
521 | var isAuto = CONFIG.paths === 'auto';
522 |
523 | hook.mounted(function (_) {
524 | init$1(CONFIG, vm);
525 | !isAuto && init(CONFIG, vm);
526 | });
527 | hook.doneEach(function (_) {
528 | update(CONFIG, vm);
529 | isAuto && init(CONFIG, vm);
530 | });
531 | };
532 |
533 | $docsify.plugins = [].concat(install, $docsify.plugins);
534 |
535 | }());
--------------------------------------------------------------------------------
/docs/_src/docsify/zoom-image.js:
--------------------------------------------------------------------------------
1 | (function () {
2 | /*! medium-zoom 1.0.6 | MIT License | https://github.com/francoischalifour/medium-zoom */
3 | var _extends = Object.assign || function (target) {
4 | var arguments$1 = arguments;
5 |
6 | for (var i = 1; i < arguments.length; i++) {
7 | var source = arguments$1[i];
8 |
9 | for (var key in source) {
10 | if (Object.prototype.hasOwnProperty.call(source, key)) {
11 | target[key] = source[key];
12 | }
13 | }
14 | }
15 |
16 | return target;
17 | };
18 |
19 | var isSupported = function isSupported(node) {
20 | return node.tagName === 'IMG';
21 | };
22 |
23 | /* eslint-disable-next-line no-prototype-builtins */
24 | var isNodeList = function isNodeList(selector) {
25 | return NodeList.prototype.isPrototypeOf(selector);
26 | };
27 |
28 | var isNode = function isNode(selector) {
29 | return selector && selector.nodeType === 1;
30 | };
31 |
32 | var isSvg = function isSvg(image) {
33 | var source = image.currentSrc || image.src;
34 | return source.substr(-4).toLowerCase() === '.svg';
35 | };
36 |
37 | var getImagesFromSelector = function getImagesFromSelector(selector) {
38 | try {
39 | if (Array.isArray(selector)) {
40 | return selector.filter(isSupported);
41 | }
42 |
43 | if (isNodeList(selector)) {
44 | // Do not use spread operator or Array.from() for IE support
45 | return [].slice.call(selector).filter(isSupported);
46 | }
47 |
48 | if (isNode(selector)) {
49 | return [selector].filter(isSupported);
50 | }
51 |
52 | if (typeof selector === 'string') {
53 | // Do not use spread operator or Array.from() for IE support
54 | return [].slice.call(document.querySelectorAll(selector)).filter(isSupported);
55 | }
56 |
57 | return [];
58 | } catch (err) {
59 | throw new TypeError('The provided selector is invalid.\n' + 'Expects a CSS selector, a Node element, a NodeList or an array.\n' + 'See: https://github.com/francoischalifour/medium-zoom');
60 | }
61 | };
62 |
63 | var createOverlay = function createOverlay(background) {
64 | var overlay = document.createElement('div');
65 | overlay.classList.add('medium-zoom-overlay');
66 | overlay.style.background = background;
67 |
68 | return overlay;
69 | };
70 |
71 | var cloneTarget = function cloneTarget(template) {
72 | var _template$getBounding = template.getBoundingClientRect(),
73 | top = _template$getBounding.top,
74 | left = _template$getBounding.left,
75 | width = _template$getBounding.width,
76 | height = _template$getBounding.height;
77 |
78 | var clone = template.cloneNode();
79 | var scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
80 | var scrollLeft = window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0;
81 |
82 | clone.removeAttribute('id');
83 | clone.style.position = 'absolute';
84 | clone.style.top = top + scrollTop + 'px';
85 | clone.style.left = left + scrollLeft + 'px';
86 | clone.style.width = width + 'px';
87 | clone.style.height = height + 'px';
88 | clone.style.transform = '';
89 |
90 | return clone;
91 | };
92 |
93 | var createCustomEvent = function createCustomEvent(type, params) {
94 | var eventParams = _extends({
95 | bubbles: false,
96 | cancelable: false,
97 | detail: undefined
98 | }, params);
99 |
100 | if (typeof window.CustomEvent === 'function') {
101 | return new CustomEvent(type, eventParams);
102 | }
103 |
104 | var customEvent = document.createEvent('CustomEvent');
105 | customEvent.initCustomEvent(type, eventParams.bubbles, eventParams.cancelable, eventParams.detail);
106 |
107 | return customEvent;
108 | };
109 |
110 | var mediumZoom = function mediumZoom(selector) {
111 | var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
112 |
113 | /**
114 | * Ensure the compatibility with IE11 if no Promise polyfill are used.
115 | */
116 | var Promise = window.Promise || function Promise(fn) {
117 | function noop() {}
118 | fn(noop, noop);
119 | };
120 |
121 | var _handleClick = function _handleClick(event) {
122 | var target = event.target;
123 |
124 |
125 | if (target === overlay) {
126 | close();
127 | return;
128 | }
129 |
130 | if (images.indexOf(target) === -1) {
131 | return;
132 | }
133 |
134 | toggle({ target: target });
135 | };
136 |
137 | var _handleScroll = function _handleScroll() {
138 | if (isAnimating || !active.original) {
139 | return;
140 | }
141 |
142 | var currentScroll = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
143 |
144 | if (Math.abs(scrollTop - currentScroll) > zoomOptions.scrollOffset) {
145 | setTimeout(close, 150);
146 | }
147 | };
148 |
149 | var _handleKeyUp = function _handleKeyUp(event) {
150 | var key = event.key || event.keyCode;
151 |
152 | // Close if escape key is pressed
153 | if (key === 'Escape' || key === 'Esc' || key === 27) {
154 | close();
155 | }
156 | };
157 |
158 | var update = function update() {
159 | var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
160 |
161 | var newOptions = options;
162 |
163 | if (options.background) {
164 | overlay.style.background = options.background;
165 | }
166 |
167 | if (options.container && options.container instanceof Object) {
168 | newOptions.container = _extends({}, zoomOptions.container, options.container);
169 | }
170 |
171 | if (options.template) {
172 | var template = isNode(options.template) ? options.template : document.querySelector(options.template);
173 |
174 | newOptions.template = template;
175 | }
176 |
177 | zoomOptions = _extends({}, zoomOptions, newOptions);
178 |
179 | images.forEach(function (image) {
180 | image.dispatchEvent(createCustomEvent('medium-zoom:update', {
181 | detail: { zoom: zoom }
182 | }));
183 | });
184 |
185 | return zoom;
186 | };
187 |
188 | var clone = function clone() {
189 | var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
190 | return mediumZoom(_extends({}, zoomOptions, options));
191 | };
192 |
193 | var attach = function attach() {
194 | var arguments$1 = arguments;
195 |
196 | for (var _len = arguments.length, selectors = Array(_len), _key = 0; _key < _len; _key++) {
197 | selectors[_key] = arguments$1[_key];
198 | }
199 |
200 | var newImages = selectors.reduce(function (imagesAccumulator, currentSelector) {
201 | return [].concat(imagesAccumulator, getImagesFromSelector(currentSelector));
202 | }, []);
203 |
204 | newImages.filter(function (newImage) {
205 | return images.indexOf(newImage) === -1;
206 | }).forEach(function (newImage) {
207 | images.push(newImage);
208 | newImage.classList.add('medium-zoom-image');
209 | });
210 |
211 | eventListeners.forEach(function (_ref) {
212 | var type = _ref.type,
213 | listener = _ref.listener,
214 | options = _ref.options;
215 |
216 | newImages.forEach(function (image) {
217 | image.addEventListener(type, listener, options);
218 | });
219 | });
220 |
221 | return zoom;
222 | };
223 |
224 | var detach = function detach() {
225 | var arguments$1 = arguments;
226 |
227 | for (var _len2 = arguments.length, selectors = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
228 | selectors[_key2] = arguments$1[_key2];
229 | }
230 |
231 | if (active.zoomed) {
232 | close();
233 | }
234 |
235 | var imagesToDetach = selectors.length > 0 ? selectors.reduce(function (imagesAccumulator, currentSelector) {
236 | return [].concat(imagesAccumulator, getImagesFromSelector(currentSelector));
237 | }, []) : images;
238 |
239 | imagesToDetach.forEach(function (image) {
240 | image.classList.remove('medium-zoom-image');
241 | image.dispatchEvent(createCustomEvent('medium-zoom:detach', {
242 | detail: { zoom: zoom }
243 | }));
244 | });
245 |
246 | images = images.filter(function (image) {
247 | return imagesToDetach.indexOf(image) === -1;
248 | });
249 |
250 | return zoom;
251 | };
252 |
253 | var on = function on(type, listener) {
254 | var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
255 |
256 | images.forEach(function (image) {
257 | image.addEventListener('medium-zoom:' + type, listener, options);
258 | });
259 |
260 | eventListeners.push({ type: 'medium-zoom:' + type, listener: listener, options: options });
261 |
262 | return zoom;
263 | };
264 |
265 | var off = function off(type, listener) {
266 | var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
267 |
268 | images.forEach(function (image) {
269 | image.removeEventListener('medium-zoom:' + type, listener, options);
270 | });
271 |
272 | eventListeners = eventListeners.filter(function (eventListener) {
273 | return !(eventListener.type === 'medium-zoom:' + type && eventListener.listener.toString() === listener.toString());
274 | });
275 |
276 | return zoom;
277 | };
278 |
279 | var open = function open() {
280 | var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
281 | target = _ref2.target;
282 |
283 | var _animate = function _animate() {
284 | var container = {
285 | width: document.documentElement.clientWidth,
286 | height: document.documentElement.clientHeight,
287 | left: 0,
288 | top: 0,
289 | right: 0,
290 | bottom: 0
291 | };
292 | var viewportWidth = void 0;
293 | var viewportHeight = void 0;
294 |
295 | if (zoomOptions.container) {
296 | if (zoomOptions.container instanceof Object) {
297 | // The container is given as an object with properties like width, height, left, top
298 | container = _extends({}, container, zoomOptions.container);
299 |
300 | // We need to adjust custom options like container.right or container.bottom
301 | viewportWidth = container.width - container.left - container.right - zoomOptions.margin * 2;
302 | viewportHeight = container.height - container.top - container.bottom - zoomOptions.margin * 2;
303 | } else {
304 | // The container is given as an element
305 | var zoomContainer = isNode(zoomOptions.container) ? zoomOptions.container : document.querySelector(zoomOptions.container);
306 |
307 | var _zoomContainer$getBou = zoomContainer.getBoundingClientRect(),
308 | _width = _zoomContainer$getBou.width,
309 | _height = _zoomContainer$getBou.height,
310 | _left = _zoomContainer$getBou.left,
311 | _top = _zoomContainer$getBou.top;
312 |
313 | container = _extends({}, container, {
314 | width: _width,
315 | height: _height,
316 | left: _left,
317 | top: _top
318 | });
319 | }
320 | }
321 |
322 | viewportWidth = viewportWidth || container.width - zoomOptions.margin * 2;
323 | viewportHeight = viewportHeight || container.height - zoomOptions.margin * 2;
324 |
325 | var zoomTarget = active.zoomedHd || active.original;
326 | var naturalWidth = isSvg(zoomTarget) ? viewportWidth : zoomTarget.naturalWidth || viewportWidth;
327 | var naturalHeight = isSvg(zoomTarget) ? viewportHeight : zoomTarget.naturalHeight || viewportHeight;
328 |
329 | var _zoomTarget$getBoundi = zoomTarget.getBoundingClientRect(),
330 | top = _zoomTarget$getBoundi.top,
331 | left = _zoomTarget$getBoundi.left,
332 | width = _zoomTarget$getBoundi.width,
333 | height = _zoomTarget$getBoundi.height;
334 |
335 | var scaleX = Math.min(naturalWidth, viewportWidth) / width;
336 | var scaleY = Math.min(naturalHeight, viewportHeight) / height;
337 | var scale = Math.min(scaleX, scaleY);
338 | var translateX = (-left + (viewportWidth - width) / 2 + zoomOptions.margin + container.left) / scale;
339 | var translateY = (-top + (viewportHeight - height) / 2 + zoomOptions.margin + container.top) / scale;
340 | var transform = 'scale(' + scale + ') translate3d(' + translateX + 'px, ' + translateY + 'px, 0)';
341 |
342 | active.zoomed.style.transform = transform;
343 |
344 | if (active.zoomedHd) {
345 | active.zoomedHd.style.transform = transform;
346 | }
347 | };
348 |
349 | return new Promise(function (resolve) {
350 | if (target && images.indexOf(target) === -1) {
351 | resolve(zoom);
352 | return;
353 | }
354 |
355 | var _handleOpenEnd = function _handleOpenEnd() {
356 | isAnimating = false;
357 | active.zoomed.removeEventListener('transitionend', _handleOpenEnd);
358 | active.original.dispatchEvent(createCustomEvent('medium-zoom:opened', {
359 | detail: { zoom: zoom }
360 | }));
361 |
362 | resolve(zoom);
363 | };
364 |
365 | if (active.zoomed) {
366 | resolve(zoom);
367 | return;
368 | }
369 |
370 | if (target) {
371 | // The zoom was triggered manually via a click
372 | active.original = target;
373 | } else if (images.length > 0) {
374 | var _images = images;
375 | active.original = _images[0];
376 | } else {
377 | resolve(zoom);
378 | return;
379 | }
380 |
381 | active.original.dispatchEvent(createCustomEvent('medium-zoom:open', {
382 | detail: { zoom: zoom }
383 | }));
384 |
385 | scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
386 | isAnimating = true;
387 | active.zoomed = cloneTarget(active.original);
388 |
389 | document.body.appendChild(overlay);
390 |
391 | if (zoomOptions.template) {
392 | var template = isNode(zoomOptions.template) ? zoomOptions.template : document.querySelector(zoomOptions.template);
393 | active.template = document.createElement('div');
394 | active.template.appendChild(template.content.cloneNode(true));
395 |
396 | document.body.appendChild(active.template);
397 | }
398 |
399 | document.body.appendChild(active.zoomed);
400 |
401 | window.requestAnimationFrame(function () {
402 | document.body.classList.add('medium-zoom--opened');
403 | });
404 |
405 | active.original.classList.add('medium-zoom-image--hidden');
406 | active.zoomed.classList.add('medium-zoom-image--opened');
407 |
408 | active.zoomed.addEventListener('click', close);
409 | active.zoomed.addEventListener('transitionend', _handleOpenEnd);
410 |
411 | if (active.original.getAttribute('data-zoom-src')) {
412 | active.zoomedHd = active.zoomed.cloneNode();
413 |
414 | // Reset the `scrset` property or the HD image won't load.
415 | active.zoomedHd.removeAttribute('srcset');
416 | active.zoomedHd.removeAttribute('sizes');
417 |
418 | active.zoomedHd.src = active.zoomed.getAttribute('data-zoom-src');
419 |
420 | active.zoomedHd.onerror = function () {
421 | clearInterval(getZoomTargetSize);
422 | console.warn('Unable to reach the zoom image target ' + active.zoomedHd.src);
423 | active.zoomedHd = null;
424 | _animate();
425 | };
426 |
427 | // We need to access the natural size of the full HD
428 | // target as fast as possible to compute the animation.
429 | var getZoomTargetSize = setInterval(function () {
430 | if ( active.zoomedHd.complete) {
431 | clearInterval(getZoomTargetSize);
432 | active.zoomedHd.classList.add('medium-zoom-image--opened');
433 | active.zoomedHd.addEventListener('click', close);
434 | document.body.appendChild(active.zoomedHd);
435 | _animate();
436 | }
437 | }, 10);
438 | } else if (active.original.hasAttribute('srcset')) {
439 | // If an image has a `srcset` attribuet, we don't know the dimensions of the
440 | // zoomed (HD) image (like when `data-zoom-src` is specified).
441 | // Therefore the approach is quite similar.
442 | active.zoomedHd = active.zoomed.cloneNode();
443 |
444 | // Resetting the sizes attribute tells the browser to load the
445 | // image best fitting the current viewport size, respecting the `srcset`.
446 | active.zoomedHd.removeAttribute('sizes');
447 |
448 | // In Firefox, the `loading` attribute needs to be set to `eager` (default
449 | // value) for the load event to be fired.
450 | active.zoomedHd.removeAttribute('loading');
451 |
452 | // Wait for the load event of the hd image. This will fire if the image
453 | // is already cached.
454 | var loadEventListener = active.zoomedHd.addEventListener('load', function () {
455 | active.zoomedHd.removeEventListener('load', loadEventListener);
456 | active.zoomedHd.classList.add('medium-zoom-image--opened');
457 | active.zoomedHd.addEventListener('click', close);
458 | document.body.appendChild(active.zoomedHd);
459 | _animate();
460 | });
461 | } else {
462 | _animate();
463 | }
464 | });
465 | };
466 |
467 | var close = function close() {
468 | return new Promise(function (resolve) {
469 | if (isAnimating || !active.original) {
470 | resolve(zoom);
471 | return;
472 | }
473 |
474 | var _handleCloseEnd = function _handleCloseEnd() {
475 | active.original.classList.remove('medium-zoom-image--hidden');
476 | document.body.removeChild(active.zoomed);
477 | if (active.zoomedHd) {
478 | document.body.removeChild(active.zoomedHd);
479 | }
480 | document.body.removeChild(overlay);
481 | active.zoomed.classList.remove('medium-zoom-image--opened');
482 | if (active.template) {
483 | document.body.removeChild(active.template);
484 | }
485 |
486 | isAnimating = false;
487 | active.zoomed.removeEventListener('transitionend', _handleCloseEnd);
488 |
489 | active.original.dispatchEvent(createCustomEvent('medium-zoom:closed', {
490 | detail: { zoom: zoom }
491 | }));
492 |
493 | active.original = null;
494 | active.zoomed = null;
495 | active.zoomedHd = null;
496 | active.template = null;
497 |
498 | resolve(zoom);
499 | };
500 |
501 | isAnimating = true;
502 | document.body.classList.remove('medium-zoom--opened');
503 | active.zoomed.style.transform = '';
504 |
505 | if (active.zoomedHd) {
506 | active.zoomedHd.style.transform = '';
507 | }
508 |
509 | // Fade out the template so it's not too abrupt
510 | if (active.template) {
511 | active.template.style.transition = 'opacity 150ms';
512 | active.template.style.opacity = 0;
513 | }
514 |
515 | active.original.dispatchEvent(createCustomEvent('medium-zoom:close', {
516 | detail: { zoom: zoom }
517 | }));
518 |
519 | active.zoomed.addEventListener('transitionend', _handleCloseEnd);
520 | });
521 | };
522 |
523 | var toggle = function toggle() {
524 | var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
525 | target = _ref3.target;
526 |
527 | if (active.original) {
528 | return close();
529 | }
530 |
531 | return open({ target: target });
532 | };
533 |
534 | var getOptions = function getOptions() {
535 | return zoomOptions;
536 | };
537 |
538 | var getImages = function getImages() {
539 | return images;
540 | };
541 |
542 | var getZoomedImage = function getZoomedImage() {
543 | return active.original;
544 | };
545 |
546 | var images = [];
547 | var eventListeners = [];
548 | var isAnimating = false;
549 | var scrollTop = 0;
550 | var zoomOptions = options;
551 | var active = {
552 | original: null,
553 | zoomed: null,
554 | zoomedHd: null,
555 | template: null
556 |
557 | // If the selector is omitted, it's replaced by the options
558 | };if (Object.prototype.toString.call(selector) === '[object Object]') {
559 | zoomOptions = selector;
560 | } else if (selector || typeof selector === 'string' // to process empty string as a selector
561 | ) {
562 | attach(selector);
563 | }
564 |
565 | // Apply the default option values
566 | zoomOptions = _extends({
567 | margin: 0,
568 | background: '#fff',
569 | scrollOffset: 40,
570 | container: null,
571 | template: null
572 | }, zoomOptions);
573 |
574 | var overlay = createOverlay(zoomOptions.background);
575 |
576 | document.addEventListener('click', _handleClick);
577 | document.addEventListener('keyup', _handleKeyUp);
578 | document.addEventListener('scroll', _handleScroll);
579 | window.addEventListener('resize', close);
580 |
581 | var zoom = {
582 | open: open,
583 | close: close,
584 | toggle: toggle,
585 | update: update,
586 | clone: clone,
587 | attach: attach,
588 | detach: detach,
589 | on: on,
590 | off: off,
591 | getOptions: getOptions,
592 | getImages: getImages,
593 | getZoomedImage: getZoomedImage
594 | };
595 |
596 | return zoom;
597 | };
598 |
599 | function styleInject(css, ref) {
600 | if ( ref === void 0 ) { ref = {}; }
601 | var insertAt = ref.insertAt;
602 |
603 | if (!css || typeof document === 'undefined') { return; }
604 |
605 | var head = document.head || document.getElementsByTagName('head')[0];
606 | var style = document.createElement('style');
607 | style.type = 'text/css';
608 |
609 | if (insertAt === 'top') {
610 | if (head.firstChild) {
611 | head.insertBefore(style, head.firstChild);
612 | } else {
613 | head.appendChild(style);
614 | }
615 | } else {
616 | head.appendChild(style);
617 | }
618 |
619 | if (style.styleSheet) {
620 | style.styleSheet.cssText = css;
621 | } else {
622 | style.appendChild(document.createTextNode(css));
623 | }
624 | }
625 |
626 | var css = ".medium-zoom-overlay{position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;transition:opacity .3s;will-change:opacity}.medium-zoom--opened .medium-zoom-overlay{cursor:pointer;cursor:zoom-out;opacity:1}.medium-zoom-image{cursor:pointer;cursor:zoom-in;transition:transform .3s cubic-bezier(.2,0,.2,1)!important}.medium-zoom-image--hidden{visibility:hidden}.medium-zoom-image--opened{position:relative;cursor:pointer;cursor:zoom-out;will-change:transform}";
627 | styleInject(css);
628 |
629 | /* eslint-disable no-unused-vars */
630 |
631 | var matchesSelector =
632 | Element.prototype.matches ||
633 | Element.prototype.webkitMatchesSelector ||
634 | Element.prototype.msMatchesSelector;
635 |
636 | function install(hook) {
637 | var zoom;
638 |
639 | hook.doneEach(function (_) {
640 | var elms = Array.apply(
641 | null,
642 | document.querySelectorAll(
643 | '.markdown-section img:not(.emoji):not([data-no-zoom])'
644 | )
645 | );
646 |
647 | elms = elms.filter(function (elm) { return matchesSelector.call(elm, 'a img') === false; });
648 |
649 | if (zoom) {
650 | zoom.detach();
651 | }
652 |
653 | zoom = mediumZoom(elms);
654 | });
655 | }
656 |
657 | $docsify.plugins = [].concat(install, $docsify.plugins);
658 |
659 | }());
--------------------------------------------------------------------------------
/docs/_src/docsify/docsify.min.js:
--------------------------------------------------------------------------------
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"+e:n=(i=Me(e,/^[\r\n\t ]+/))&&i[0];var r=k?k.createHTML(e):e;if(de===he)try{t=(new g).parseFromString(r,"text/html")}catch(e){}if(!t||!t.documentElement){t=x.createDocument(de,"template",null);try{t.documentElement.innerHTML=fe?"":r}catch(e){}}var i=t.body||t.documentElement;return e&&n&&i.insertBefore(o.createTextNode(n),i.childNodes[0]||null),de===he?A.call(t,V?"html":"body")[0]:V?t.documentElement:i}function Se(e){return _.call(e.ownerDocument||e,e,r.SHOW_ELEMENT|r.SHOW_COMMENT|r.SHOW_TEXT,null,!1)}function Ae(e){return"object"===(void 0===p?"undefined":ct(p))?e instanceof p:e&&"object"===(void 0===e?"undefined":ct(e))&&"number"==typeof e.nodeType&&"string"==typeof e.nodeName}function Te(e,t,n){R[e]&&Ce(R[e],function(e){e.call(c,t,n,ge)})}function Ee(e){var t;if(Te("beforeSanitizeElements",e,null),!((n=e)instanceof d||n instanceof f||"string"==typeof n.nodeName&&"string"==typeof n.textContent&&"function"==typeof n.removeChild&&n.attributes instanceof h&&"function"==typeof n.removeAttribute&&"function"==typeof n.setAttribute&&"string"==typeof n.namespaceURI&&"function"==typeof n.insertBefore))return we(e),1;if(Me(e.nodeName,/[\u0080-\uFFFF]/))return we(e),1;var n=Ne(e.nodeName);if(Te("uponSanitizeElement",e,{tagName:n,allowedTags:P}),!Ae(e.firstElementChild)&&(!Ae(e.content)||!Ae(e.content.firstElementChild))&&je(/<[/\w]/g,e.innerHTML)&&je(/<[/\w]/g,e.textContent))return we(e),1;if("select"===n&&je(//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]*?(?:\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)|(?!script|pre|style)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$))",def:/^ {0,3}\[(label)\]: *\n? *([^\s>]+)>?(?:(?: +\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","?(?:tag)(?: +|\\n|/?>)|<(?: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","?(?:tag)(?: +|\\n|/?>)|<(?: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","?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)").replace("tag",Nt._tag).getRegex(),Nt.pedantic=Dt({},Nt.normal,{html:I("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?\\1> *(?:\\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:/^ *\[([^\]]+)\]: *([^\s>]+)>?(?: +(["(][^\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:-]*\\s*>|^<[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?"\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+""+r+">\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+">\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='"+n+""},e.prototype.image=function(e,t,n){if(null===(e=tn(this.options.sanitize,this.options.baseUrl,e)))return 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=''),!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'
'}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+""+i.tag+">"},!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"},/?[\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":'
"}),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+""+t+">"},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%",'')),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:"",""+('')+''),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})}();
--------------------------------------------------------------------------------