[
  {
    "path": ".babelrc",
    "content": "{\n  \"presets\": [\n    [\"env\", {\n       \"modules\": false\n    }],\n    [\n      \"babel-preset-env\",\n      {\n        \"targets\": {\n          \"node\": \"current\"\n        }\n      }\n    ], \n    \"stage-2\"\n  ],\n  \n  \"plugins\": [\"transform-runtime\"],\n  \"comments\": false\n}\n\n"
  },
  {
    "path": ".eslintrc.js",
    "content": "// http://eslint.org/docs/user-guide/configuring\n\nmodule.exports = {\n  root: true,\n  parser: 'babel-eslint',\n  parserOptions: {\n    sourceType: 'module'\n  },\n  env: {\n    browser: true,\n  },\n  // https://github.com/feross/standard/blob/master/RULES.md#javascript-standard-style\n  extends: 'standard',\n  // required to lint *.vue files\n  plugins: [\n    'html'\n  ],\n  // add your custom rules here\n  'rules': {\n    // allow paren-less arrow functions\n    'arrow-parens': 0,\n    // allow async-await\n    'generator-star-spacing': 0,\n    // allow debugger during development\n    'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0,\n    // 忽略;\n    'semi':0,\n    // 忽略缩进\n    'indent':0,\n    // camel case\n    'camelcase':0,\n    // 键值对:后强制空格\n    'key-spacing':0,\n    // ,前不允许空格\n    'comma-spacing':0,\n    // 函数空格\n    'space-before-function-paren':0,\n    //\n    'no-unused-vars':0,\n    // else 强制换行\n    'brace-style':0,\n    'no-unneeded-ternary': 0,\n    'quotes': 0,\n    'no-useless-escape': 0,\n    'no-eval': 0,\n    // 允许多个空格\n    'no-multi-spaces': 0\n  }\n}\n"
  },
  {
    "path": ".gitattributes",
    "content": "*.js linguist-language=Vue\r\n*.css linguist-language=Vue\r\n*.html linguist-language=Vue\r\n*.vue linguist-language=Vue\r\n*.less linguist-language=Vue\r\n*.sass linguist-language=Vue"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_template.md",
    "content": "---\nname: 🐛 Bug report\nabout: Create a report to help us improve\ntitle: '[Bug] XYZ'\nlabels: ':bug: Bug'\n---\n\n## 🐛 Bug Report\n\n<!-- A clear and concise description of what the bug is, and what version are you using-->\n\n\n\n**Steps To Reproduce**\n\n<!-- The exact steps required to reproduce the issue, ideally with a code example -->\n\n\n**Screenshots**\n<!-- If applicable, add screenshots to help explain your problem. -->\n\n**The expected behaviour**\n\n<!-- A clear and concise description of what you expected to happen. -->\n\n\n**Possible solution (optional, but very helpful)**\n\n\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_template.md",
    "content": "---\nname: 🚀 Feature Proposal\ntitle: '[Feature] XYZ'\nlabels: ':rocket: Feature Request'\nabout: Submit a proposal for a new feature\n---\n\n## 🚀 Feature Proposal\n\nA clear and concise description of what the feature is.\n\n**Motivation**\n\nPlease outline the motivation for the proposal.\n\n**Example**\n\nPlease provide an example for how this feature would be used.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/question_template.md",
    "content": "---\nname: 💬 Questions / Help\ntitle: '[Question] XYZ'\nlabel: ':speech_balloon: Question'\nabout: Ask us a question\n---\n\n## 💬 Questions and Help\n\n<!-- Have a question about mavonEditor? Need help using it a certain way that our README does not seem to explain? Ask away!-->\n\n<!-- Please keep in mind that we're unpaid open souce volunteers, so it will help us greatly if you add as many details as possible to your question and describe what other approaches you've tried out so far. And of course, we'd love for you to contribute back the answer to our README via a pull request! -->\n\n"
  },
  {
    "path": ".github/workflows/gha.yml",
    "content": "name: CI\r\non:\r\n  push:\r\n    branches: [ master ]\r\n  pull_request:\r\n    branches: [ master ]\r\n\r\njobs:\r\n  build:\r\n    runs-on: ubuntu-latest\r\n    steps:\r\n      - uses: actions/checkout@v2\r\n      - name: install dependence\r\n        run: |\r\n          yarn install --no-lockfile\r\n      - name: run eslint\r\n        run: |\r\n          yarn lint\r\n      - name: run test\r\n        run: |\r\n          yarn test\r\n"
  },
  {
    "path": ".gitignore",
    "content": "/node_modules/*\r\n/.idea/*\r\nnpm-debug.log\r\ngit-debug.log\r\npackage-lock.json\r\n.idea/\r\n.DS_Store\r\n.ftpconfig\r\n*.swp\r\n/tests/unit/coverage/*\r\ndist\r\n"
  },
  {
    "path": ".npmignore",
    "content": "/node_modules/*\r\n/.idea/*\r\n/.git/*\r\n/img/*\r\n/src/dev/*\r\nLICENSE\r\nnpm-debug.log\r\ngit-debug.log"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2017 hinesboy\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "LOG.md",
    "content": "# 更新日志\r\n- **2.10.4** (21.12.16) \r\n    - refactor: provides a standard interface to get markdown-it by @jiawulin001 in https://github.com/hinesboy/mavonEditor/pull/750\r\n    - doc: update maekdown.md by @wangsongc in https://github.com/hinesboy/mavonEditor/pull/751\r\n\r\n- **2.10.3** (21.12.14) \r\n    - fix: error while uploading image by @wangsongc in https://github.com/hinesboy/mavonEditor/pull/748\r\n\r\n- **2.10.2** (21.12.14) \r\n    - fix: Add sanitizer for filtering HTML tags by @jiawulin001 in https://github.com/hinesboy/mavonEditor/pull/744\r\n\r\n- **2.10.1** (21.12.04) \r\n    - fix build warnings and optimize console output by @jiawulin001 in https://github.com/hinesboy/mavonEditor/pull/728\r\n    - fix: image cannot be previewed by @jiawulin001 in https://github.com/hinesboy/mavonEditor/pull/738\r\n    - fix: Fix the content of code blocks to be displayed outside the pre container by @jiawulin001 in https://github.com/hinesboy/mavonEditor/pull/730\r\n\r\n- **2.10.0** (21.11.23)  \r\nEnable XSS defense by default, It also fixes the invalidity of codestyle caused by XSS protection. \r\n    - fix eslint error by @ygj6 in https://github.com/hinesboy/mavonEditor/pull/637\r\n    - Test framework by @wangsongc in https://github.com/hinesboy/mavonEditor/pull/668\r\n    - fix issue#658,重构插入代码块逻辑 by @ygj6 in https://github.com/hinesboy/mavonEditor/pull/661\r\n    - Bump elliptic from 6.5.3 to 6.5.4 by @dependabot in https://github.com/hinesboy/mavonEditor/pull/677\r\n    - Fixed pop-up style issues when pages use multiple editors by @wangsongc in https://github.com/hinesboy/mavonEditor/pull/667\r\n    - fix eslint error and testcase by @ygj6 in https://github.com/hinesboy/mavonEditor/pull/679\r\n    - fix: codeStyle not working by @wangsongc in https://github.com/hinesboy/mavonEditor/pull/717\r\n    - feat: Add support for highlightjs v11.3.1 by @wangsongc in https://github.com/hinesboy/mavonEditor/pull/718\r\n    - Update upload-images.md [replace `in` by `of` for multiple files upload] by @Sequoya42 in https://github.com/hinesboy/mavonEditor/pull/698\r\n    - Clean up invalid code by @jiawulin001 in https://github.com/hinesboy/mavonEditor/pull/720\r\n    - update highlight style list by @jiawulin001 in https://github.com/hinesboy/mavonEditor/pull/721\r\n    - Bump y18n from 3.2.1 to 3.2.2 by @dependabot in https://github.com/hinesboy/mavonEditor/pull/681\r\n    - Bump lodash from 4.17.19 to 4.17.21 by @dependabot in https://github.com/hinesboy/mavonEditor/pull/694\r\n    - Bump hosted-git-info from 2.8.8 to 2.8.9 by @dependabot in https://github.com/hinesboy/mavonEditor/pull/695\r\n    - Bump path-parse from 1.0.6 to 1.0.7 by @dependabot in https://github.com/hinesboy/mavonEditor/pull/708\r\n    - Bump dns-packet from 1.3.1 to 1.3.4 by @dependabot in https://github.com/hinesboy/mavonEditor/pull/700\r\n    - Adjust the list of npm install package by @jiawulin001 in https://github.com/hinesboy/mavonEditor/pull/722\r\n    - Optimization project by @jiawulin001 in https://github.com/hinesboy/mavonEditor/pull/724\r\n    - Feat: Enable XSS defense by default by @XLCYun in https://github.com/hinesboy/mavonEditor/pull/611\r\n    - test: add xss test by @wangsongc in https://github.com/hinesboy/mavonEditor/pull/726\r\n\r\n- **2.9.1** (20.12.28)\r\n    - 修复codestyle切换不生效bug PR #650\r\n    - 插入代码块时增加换行 PR #641\r\n    - 修复帮助文档区域点击锚点导致页面关闭 PR #640\r\n    - 对传入的value增加空处理 PR #639\r\n- **2.9.0** (20.4.20)\r\n    - 将xss组件设置为prop\r\n    - 去除 markdown-it-sanitizer\r\n- **2.8.3** (20.4.5)\r\n    - 调整整体默认字号为14px\r\n- **2.8.2** (20.4.5)\r\n    - 语言切换bug\r\n- **2.8.1** (20.4.5)\r\n    - xss 过滤规则改进\r\n- **2.8.0** (20.4.1)\r\n    - 合并PR(感谢帮助维护mavon的朋友)\r\n    - 更新部分依赖\r\n    - 部署演示网页\r\n- **2.7.7** (19.10.23)\r\n    - 修复图片预览覆盖不生效问题\r\n- **2.7.6** (19.9.12)\r\n    - [pr #478](https://github.com/hinesboy/mavonEditor/pull/478)\r\n- **2.7.5** (19.6.12)\r\n    - [pr #421](https://github.com/hinesboy/mavonEditor/pull/421)\r\n    - [pr #428](https://github.com/hinesboy/mavonEditor/pull/428)\r\n    - [pr #430](https://github.com/hinesboy/mavonEditor/pull/430)\r\n- **2.7.4** (19.4.30)\r\n    - [pr #415](https://github.com/hinesboy/mavonEditor/pull/415)\r\n    - [pr #417](https://github.com/hinesboy/mavonEditor/pull/417)\r\n- **2.7.3** (19.3.28)\r\n    - 添加shortCut控制快捷键的开关\r\n    - 修复自定义图片上传bug\r\n    - 修复多次触发change事件bug\r\n- **2.7.2** 合并Pull Request(19.3.19)\r\n    - [pr #404](https://github.com/hinesboy/mavonEditor/pull/404)\r\n- **2.7.0** 合并Pull Request(19.3.12)\r\n    - [pr #400](https://github.com/hinesboy/mavonEditor/pull/400)\r\n- **2.7.0** 合并Pull Request(19.3.5)\r\n    - [pr #394](https://github.com/hinesboy/mavonEditor/pull/394)\r\n    - [pr #377](https://github.com/hinesboy/mavonEditor/pull/377)\r\n    - [pr #395](https://github.com/hinesboy/mavonEditor/pull/395)\r\n    - [pr #342](https://github.com/hinesboy/mavonEditor/pull/342)\r\n    - [pr #369](https://github.com/hinesboy/mavonEditor/pull/369)\r\n    - [pr #339](https://github.com/hinesboy/mavonEditor/pull/339)\r\n    - [pr #332](https://github.com/hinesboy/mavonEditor/pull/339)\r\n    - [pr #331](https://github.com/hinesboy/mavonEditor/pull/331)\r\n- **2.6.16** 合并Pull Request(18.8.18)\r\n    - [pr #303](https://github.com/hinesboy/mavonEditor/pull/303)\r\n    - [pr #302](https://github.com/hinesboy/mavonEditor/pull/302)\r\n- **2.6.12** 修复issues(18.7.3)\r\n    - [issue #276](https://github.com/hinesboy/mavonEditor/pull/276)\r\n    - [issue #275](https://github.com/hinesboy/mavonEditor/pull/275)\r\n- **2.6.11** [pr #274](https://github.com/hinesboy/mavonEditor/pull/274)(18.7.1)\r\n- **2.6.9** 增加toc插件(18.6.15)\r\n- **2.6.7** 处理粗体+斜体不生效问题(18.6.15)\r\n    - [issue #264](https://github.com/hinesboy/mavonEditor/pull/264)\r\n- **2.6.6** PR合并(18.6.15)\r\n    - [pr #266](https://github.com/hinesboy/mavonEditor/pull/266)\r\n    - [pr #265](https://github.com/hinesboy/mavonEditor/pull/265)\r\n- **2.6.5** 修复issues(18.6.6)\r\n    - [issue #257](https://github.com/hinesboy/mavonEditor/pull/257)\r\n    - [issue #256](https://github.com/hinesboy/mavonEditor/pull/256)\r\n    - [issue #255](https://github.com/hinesboy/mavonEditor/pull/255)\r\n    - [issue #253](https://github.com/hinesboy/mavonEditor/pull/253)\r\n    - [issue #246](https://github.com/hinesboy/mavonEditor/pull/246)\r\n- **2.6.4** [issue #248](https://github.com/hinesboy/mavonEditor/pull/48)(18.6.1)\r\n- **2.6.3** [issue #231](https://github.com/hinesboy/mavonEditor/pull/231)(18.5.10)\r\n- **2.6.2**  (18.5.9)\r\n    - 修改添加链接与添加图片的弹出框文字描述\r\n    - 添加todo list语法插件\r\n    - 默认图片预览的关闭修改为点击即关闭\r\n    - 略微调整获取markdownIt对象的方式\r\n    - readme添加语法拓展的板块\r\n- **2.6.0** 优化图片上传 (18.5.7)\r\n- **2.5.10** 添加props: boxShadow控制样式 (18.5.1)\r\n- **2.5.9** 添加删除行快捷键 [Ctrl + D](18.4.24)\r\n- **2.5.8** 有序、无序列表优化(18.4.24)\r\n    - 添加【Enter】、【Tab】、【Shift+Tab】键对列表的操作，简化编写过程\r\n    - 允许选中多行文本添加列表样式\r\n    - TAB修改为插入制表符（原为4个空格）\r\n- **2.5.6** 工具栏按钮修改(18.4.22)\r\n    - 将【标题按钮】修改为【标题下拉选择】，可以选择1~6级标题\r\n    - 将`click`触发下拉框，修改为`hover`触发\r\n    - 标题语法去除闭合#\r\n- **2.5.5** PR合并(18.4.19)\r\n    - [#213](https://github.com/hinesboy/mavonEditor/pull/213)\r\n- **2.5.4** 问题修复 / PR合并(18.4.18)\r\n    - [issue #210](https://github.com/hinesboy/mavonEditor/pull/210)\r\n    - [issue #208](https://github.com/hinesboy/mavonEditor/pull/208)\r\n    - [pr #211](https://github.com/hinesboy/mavonEditor/pull/211)\r\n    - [pr #206](https://github.com/hinesboy/mavonEditor/pull/206)\r\n- **2.5.3** 问题修复(18.4.11)\r\n    - [#203](https://github.com/hinesboy/mavonEditor/pull/203)\r\n    - [#202](https://github.com/hinesboy/mavonEditor/pull/202)\r\n    - 个别类选择器名称更换\r\n    - 图标样式垂直居中\r\n- **2.5.2** 合并PR(18.3.14)\r\n    - [#160](https://github.com/hinesboy/mavonEditor/pull/160)\r\n    - [#161](https://github.com/hinesboy/mavonEditor/pull/161)\r\n- **2.5.1** 问题修复(18.3.5)\r\n    - 点击图片自定义事件\r\n    - 添加Prop navigation 默认展示目录\r\n    - 修改Prop 以及 Event 的命名规范(老版本不兼容)\r\n- **2.4.15** 解决图片下拉菜单在火狐浏览器兼容性问题(17.12.22)\r\n- **2.4.14** 细节性调整(17.12.20)\r\n    - 在mavon最外层添加样式`text-align: left`，防止受到外部样式影响\r\n    - 单双栏切换逻辑调整，单双栏切换更加合理\r\n    - 去除自动切换单双栏逻辑(在 `width < 768px`变单栏)\r\n    - 添加链接、图片链接弹出页面优化，支持TAB键、回车键操作\r\n    - 上传图片限制文件格式为`gif,jpeg,jpg,png,svg`\r\n    - fix [#157](https://github.com/hinesboy/mavonEditor/issues/157)(17.12.19 [CHENXCHEN](https://github.com/CHENXCHEN))\r\n    - fix [#156](https://github.com/hinesboy/mavonEditor/issues/156)(17.12.19 [CHENXCHEN](https://github.com/CHENXCHEN))\r\n- **2.4.13** 修复bug[#79](https://github.com/hinesboy/mavonEditor/issues/79), 修改`markdown-it`实例获取方式，引入插件`markdown-it-highlightjs-external`(17.12.12 [CHENXCHEN](https://github.com/CHENXCHEN))\r\n- **2.4.11** 修复bug[#147](https://github.com/hinesboy/mavonEditor/issues/147)(17.12.7 [CHENXCHEN](https://github.com/CHENXCHEN))\r\n- **2.4.10** 添加图片名正则过滤(17.12.6)\r\n- **2.4.9** 删除上传图片时同时删除其文本(17.12.2)\r\n- **2.4.8** 将链接打开方式调整为新界面打开, 整改图片上传样式, 增加直接添加链接方式(17.12.2)\r\n- **2.4.7** 修改外链使用方式，将`katex`提取出来作为外链(17.11.27 [CHENXCHEN](https://github.com/CHENXCHEN))\r\n- **2.4.6** 修复导出markdownIt不正确的错误(17.11.25 [CHENXCHEN](https://github.com/CHENXCHEN))\r\n- **2.4.5** 修改webpack配置,修复编译导出时的`const`问题(17.11.25 [CHENXCHEN](https://github.com/CHENXCHEN))\r\n- **2.4.3** 添加图片点击预览原图、开放markdown-it对象(17.11.24)\r\n- **2.4.2** 修复`github-markdown-css`与`hljs-css`的冲突，提供一种自定义按需加载`hljs`以及`markdown`相关文件的方式(17.11.24 [CHENXCHEN](https://github.com/CHENXCHEN))\r\n- **2.4.0** 抛弃集成`hljs`，改为使用`cdnjs`外链，代码高亮方案也改为使用`cdnjs`外链(17.11.22 [CHENXCHEN](https://github.com/CHENXCHEN))\r\n- **2.3.1** 修复帮助文档链接无法跳转问题 [#125](https://github.com/hinesboy/mavonEditor/issues/125)(17.11.14 )\r\n- **2.3.0** 解决const关键字报错问题 (17.10.27 / [lwdgit](https://github.com/lwdgit))\r\n- **2.2.10** 更新babel-preset-env配置 (17.10.17)\r\n- **2.2.8** 添加TAB缩进[#75](https://github.com/hinesboy/mavonEditor/issues/75) (17.9.29)\r\n- **2.2.7** 修复[#88](https://github.com/hinesboy/mavonEditor/issues/88) (17.9.26)\r\n- **2.2.6** 修复[#57](https://github.com/hinesboy/mavonEditor/issues/57) (17.9.11)\r\n- **2.2.5** 合并贡献[65](https://github.com/hinesboy/mavonEditor/pull/65), 修复[#66](https://github.com/hinesboy/mavonEditor/issues/66), [#61](https://github.com/hinesboy/mavonEditor/issues/61)(17.9.10 / [cyy0418](https://github.com/cyy0418)， [CHENXCHEN](https://github.com/CHENXCHEN))\r\n- **2.2.4** 合并贡献[52](https://github.com/hinesboy/mavonEditor/pull/52), 给 <style> 标签添加了 scoped 属性 , 防止其样式影响页面上的其他元素(17.8.11 / [wzdxy](https://github.com/wzdxy))\r\n- **2.2.3** 修复语言选择的问题[#50](https://github.com/hinesboy/mavonEditor/issues/50)(17.8.10 / [CHENXCHEN](https://github.com/CHENXCHEN))\r\n- **2.2.2** 修复快捷键监听错乱(17.8.5)\r\n- **2.2.1** 修复[#48](https://github.com/hinesboy/mavonEditor/issues/48) [#45](https://github.com/hinesboy/mavonEditor/issues/45)的bug , 新增功能键【单双栏切换】(17.8.5)\r\n- **2.1.13** 修复[#46](https://github.com/hinesboy/mavonEditor/issues/46)的bug(17.8.4 / [CHENXCHEN](https://github.com/CHENXCHEN))\r\n- **2.1.12** 修复**2.1.11**的编辑区没有占满的bug，拖动滚动条导致input没有移动的bug(17.7.28 / [CHENXCHEN](https://github.com/CHENXCHEN))\r\n- **2.1.11** 添加`$imgAddByUrl`, `$img2Url`, `$imglst2Url`操作[#31](https://github.com/hinesboy/mavonEditor/issues/31)，修复编辑区没有占满显示区的bug[#31](https://github.com/hinesboy/mavonEditor/issues/31)，更新帮助文档(17.7.28 / [CHENXCHEN](https://github.com/CHENXCHEN))\r\n- **2.1.10** 操作失误，发布2.1.9的Release(17.7.24 / [CHENXCHEN](https://github.com/CHENXCHEN))\r\n- **2.1.9** 修复显示问题，更新帮助文档(17.7.24 / [CHENXCHEN](https://github.com/CHENXCHEN))\r\n- **2.1.8** 添加居中、居左、居右快捷键(17.7.18 / [AdrienCasta](https://github.com/AdrienCasta))\r\n- **2.1.7** 修正`$imgUpdateByFilename`触发`imgAdd`事件时返回filename错误的bug[#25](https://github.com/hinesboy/mavonEditor/issues/25)(17.7.14 / [CHENXCHEN](https://github.com/CHENXCHEN))\r\n- **2.1.6** 添加`$imgAddByFilename`, `$imgDelByFilename`, `$imgUpdateByUrl`方法用以直接操作图片[#25](https://github.com/hinesboy/mavonEditor/issues/25)(17.7.14 / [CHENXCHEN](https://github.com/CHENXCHEN))\r\n- **2.1.5** 添加`$imgUpdateByUrl`方法，用来替换相对路径为绝对路径[#25](https://github.com/hinesboy/mavonEditor/issues/25#issuecomment-314947131)(17.7.13 / [CHENXCHEN](https://github.com/CHENXCHEN))\r\n- **2.1.4** 修复`imgAdd`事件于`change`前响应的bug，导致`imgAdd`响应时无法获取改变后的value[#25](https://github.com/hinesboy/mavonEditor/issues/25#issuecomment-314947131)(17.7.13 / [CHENXCHEN](https://github.com/CHENXCHEN))\r\n- **2.1.3** ishljs默认设置为false(17.7.8)\r\n- **2.1.2** 将help文档添加至document.body的末尾，修复flex嵌套样式错误(17.7.7 / [CHENXCHEN](https://github.com/CHENXCHEN))\r\n- **2.1.1** 添加法语语言包(17.6.30 / [dimalusa](https://github.com/dimalusa))\r\n- **2.0.9** 添加subfiled , default_open 的watch事件(17.6.26)\r\n    - 修复预览模式不设置高度情况下，高度过大问题\r\n- **2.0.6** 添加选项是否高亮代码，详见 props: ishljs(17.6.25 / [CHENXCHEN](https://github.com/CHENXCHEN))\r\n- **2.0.2** 调整编辑模式，详见 props: subfield、default_open(17.6.24)\r\n    - 新增props: placeholder 输入框为空时默认提示文本\r\n    - 整理代码状态机\r\n- **2.0.0** highlight.js语言高亮文件异步调用渲染(17.6.20 / [CHENXCHEN](https://github.com/CHENXCHEN))\r\n- **1.7.3** 更改事件监听方式，修正粗体样式(17.6.15 / [CHENXCHEN](https://github.com/CHENXCHEN))\r\n- **1.7.0** 取消单栏编辑模式实时渲染(17.6.14 / [CHENXCHEN](https://github.com/CHENXCHEN))\r\n    - 添加图片预览(粘贴板图片复制粘贴本地预览、图片拖拽本地预览、手动选择图片本地预览)\r\n    - 添加图片文件添加删除事件\r\n    - 删除to-markdown部分\r\n- **1.6.3** 新增Markdown样式选择 props：code_style(17.6.9 / [yyyybzzzz PR](https://github.com/yyyybzzzz))\r\n- **1.6.1** 新增props：enabled编辑开关、toolbarsFlag工具栏是否显示(17.5.26)\r\n    - 修复subfield = true初始化时候不显示内容\r\n- **1.5.6** 支持语言切换 ， 新增英文文档(17.5.11)\r\n- **1.5.3** 拓展markdown渲染规则——KaTeX$公式 ， 修改help文档(17.5.6 / [CHENXCHEN](https://github.com/CHENXCHEN))\r\n- **1.5.2** 优化项目结构(17.5.6 / [CHENXCHEN](https://github.com/CHENXCHEN))\r\n    - 将toolbar抽离为两个单独vue文件，事件提取为toolbar_left.js和toolbar_right.js\r\n    - 抽离stylus样式为mavon-editor.styl\r\n    - 调整md.css位置至lib/css\r\n- **1.5.1** 添加postcss插件，压缩插件体积，分离markdown样式(样式需单独引入，参考上述用法)(17.5.6 / [CHENXCHEN](https://github.com/CHENXCHEN))\r\n- **1.4.8** 优化项目结构,添加webpack-dev-server的开发测试(17.5.4 / [CHENXCHEN](https://github.com/CHENXCHEN)）\r\n- **1.4.7** 图标局部引入,减少文件体积(17.4.26）\r\n- **1.4.2** 支持开启标题导航 ,快捷键监听对象更改为document（17.4.25）\r\n- **1.4.0** 重构代码（17.4.24）\r\n- **1.3.5** 增加撤销键、清空键、保存按钮 , 修复底部展示不完整BUG\r\n- **1.3.4** 多个编辑器快捷键/组合键监听覆盖 , props.toolbars 传递规则纠正(传入值整体覆盖默认值)\r\n- **1.3.3** 多个编辑器z-index冲突\r\n- **1.3.2** props 传递方法 更改为 v-on 绑定方法\r\n"
  },
  {
    "path": "README-EN.md",
    "content": "# mavonEditor\r\n| Vue2 | [![npm](https://img.shields.io/npm/v/mavon-editor/latest.svg)](https://www.npmjs.com/package/mavon-editor/v/latest) |\r\n| ---- | ------------------------------------------------------------ |\r\n| **Vue3** | [![npm](https://img.shields.io/npm/v/mavon-editor/next.svg)](https://www.npmjs.com/package/mavon-editor/v/next) |\r\n\r\n> A markdown editor based on Vue\r\n\r\n### [中文说明](./README.md)\r\n\r\n## Example Pictures\r\n### PC\r\n\r\n![PC](./img/en/en-common.png)\r\n\r\n![PC](./img/en/en-image.gif)\r\n\r\n> [more images...](./doc/en/images.md)\r\n\r\n## Use Setup\r\n\r\n### Install mavon-editor\r\n```\r\n$ npm install mavon-editor --save\r\n```\r\n\r\n### Use\r\n\r\n`index.js`:\r\n```javascript\r\n    // Global Registration\r\n    // import with ES6\r\n    import Vue from 'vue'\r\n    import mavonEditor from 'mavon-editor'\r\n    import 'mavon-editor/dist/css/index.css'\r\n\r\n    // use\r\n    Vue.use(mavonEditor)\r\n    new Vue({\r\n        'el': '#main',\r\n        data() {\r\n            return { value: '' }\r\n        }\r\n    })\r\n```\r\n`index.html`\r\n```html\r\n// The same below\r\n<div id=\"main\">\r\n    <mavon-editor v-model=\"value\"/>\r\n</div>\r\n```\r\n### Use in nuxt.js\r\n> new file: vue-mavon-editor.js\r\n```javascrpt\r\nimport Vue from 'vue';\r\nimport mavonEditor from 'mavon-editor';\r\nimport 'mavon-editor/dist/css/index.css';\r\n\r\nVue.use(mavonEditor);\r\n```\r\n> nuxt.config.js\r\n```javascript\r\n  plugins: [\r\n  ...\r\n    { src: '@/plugins/vue-mavon-editor', ssr: false }\r\n  ],\r\n```\r\n> page\r\n```vue\r\n<template>\r\n  <div class=\"mavonEditor\">\r\n    <no-ssr>\r\n      <mavon-editor :toolbars=\"markdownOption\" v-model=\"handbook\"/>\r\n    </no-ssr>\r\n  </div>\r\n</template>\r\n<script>\r\nexport default {\r\n  data() {\r\n    return {\r\n      markdownOption: {\r\n        bold: true,\r\n        ... // more params\r\n      },\r\n      handbook: \"#### how to use mavonEditor in nuxt.js\"\r\n    };\r\n  }\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n.mavonEditor {\r\n  width: 100%;\r\n  height: 100%;\r\n}\r\n</style>\r\n```\r\n\r\n> [more ways...](./doc/en/use.md)\r\n\r\n> [set markdown-it object...](./doc/en/markdown.md)\r\n\r\n## API\r\n\r\n### props\r\n\r\n| name    | type    |  default value | describe  |\r\n| -------- | :---------: | :------------: | ------- |\r\n| value      | String      |               | Initial value |\r\n| language   | String      |      zh-CN         | Language switch,  zh-CN: Simplified Chinese, zh-TW: Traditional Chinese, en: English， fr: French, pt-BR: Brazilian Portuguese, ru: Russian, de: German, ja: Japanese |\r\n| fontSize     | String  |     14px      | font-size of edit area  |\r\n| scrollStyle| Boolean     |   true       | Open the scroll bar style(Temp only support chrome) |\r\n| boxShadow     | Boolean  |     true     | css: box-shadow  of mavonEditor              |\r\n| subfield   | Boolean     |   true        | true: Double columns - Edit preview same screen , Single Columns - otherwise not |\r\n| defaultOpen | String |         |Default display area in single columns (subfield=false).<br/>  edit: default show edit area<br/>  preview: default show preview area<br/>  other = edit |\r\n| placeholder | String |    Begin editing...     |  The default prompt text when the textarea is empty  |\r\n| editable | Boolean     |   true       | Edit switch |\r\n| codeStyle | String |    code-github     | markdown Style: default github, [option hljs color scheme](./src/lib/core/hljs/lang.hljs.css.js)  |\r\n| toolbarsFlag | Boolean     |   true       | Show toolbars |\r\n| navigation | Boolean |    false    |  Show navigation  |\r\n| shortCut | Boolean |    true    |  shortcut switch  |\r\n| ishljs       | Boolean |     true     | highlight code switch |\r\n| imageFilter | Function |     null     | Image file filter Function, params is a `File Object`, you should return `Boolean` about the test result |\r\n| imageClick | function |     null     |  Image Click Function |\r\n| tabSize | Number |     null     |  How many spaces equals one tab, default \\t |\r\n| html    | Boolean  |     true     |  Enable HTML tags in source, for historical reasons this tag has always been true by default, but it is recommended to turn it off if you don't need this feature, as doing so it eliminates the security vulnerabilities altogether. |\r\n| xssOptions     | Object  |     {}     | xss rules configuration, enabled by default, set to false to turn off, enabled will filter HTML tags, the default filter all HTML tag attributes, it is recommended to configure the whitelist on demand to reduce the possibility of being attacked.<br/> - custom rule reference: [https://jsxss.com/zh/options.html](https://jsxss.com/zh/options.html)<br/>- Demo: [dev-demo](./src/dev/editor.vue)                    |\r\n| toolbars   | Object      |   As in the following example  | toolbars |\r\n\r\n#### toolbars\r\nThe default toolbar properties are all true, You can customize the object to cover them.\r\n```javascript\r\n /*\r\n    eg: {\r\n      bold: true,\r\n      italic: true,\r\n      header: true,\r\n    }\r\n    At this point, the toolbar only displays the three function keys.\r\n */\r\n\r\ntoolbars: {\r\n    bold: true,\r\n    italic: true,\r\n    header: true,\r\n    underline: true,\r\n    strikethrough: true,\r\n    mark: true,\r\n    superscript: true,\r\n    subscript: true,\r\n    quote: true,\r\n    ol: true,\r\n    ul: true,\r\n    link: true,\r\n    imagelink: true,\r\n    code: true,\r\n    table: true,\r\n    fullscreen: true,\r\n    readmodel: true,\r\n    htmlcode: true,\r\n    help: true,\r\n    /* 1.3.5 */\r\n    undo: true,\r\n    redo: true,\r\n    trash: true,\r\n    save: true,\r\n    /* 1.4.2 */\r\n    navigation: true,\r\n    /* 2.1.8 */\r\n    alignleft: true,\r\n    aligncenter: true,\r\n    alignright: true,\r\n    /* 2.2.1 */\r\n    subfield: true,\r\n    preview: true\r\n  }\r\n```\r\n\r\nIf you need to customize and add toolbar buttons, you can do the following:\r\n```vue\r\n<mavon-editor>\r\n  <!-- Add a custom button in front of the left toolbar -->\r\n  <template slot=\"left-toolbar-before\">\r\n    <button\r\n      type=\"button\"\r\n      @click=\"$click('test')\"\r\n      class=\"op-icon fa fa-mavon-align-left\"\r\n      aria-hidden=\"true\"\r\n      title=\"custom\"\r\n    ></button>\r\n  </template>\r\n  <!-- Add a custom button after the left toolbar  -->\r\n  <template slot=\"left-toolbar-after\">\r\n    <button\r\n      type=\"button\"\r\n      @click=\"$click('test')\"\r\n      class=\"op-icon fa fa-mavon-align-left\"\r\n      aria-hidden=\"true\"\r\n      title=\"custom\"\r\n    ></button>\r\n  </template>\r\n  <!-- Add a custom button in front of the right toolbar  -->\r\n  <template slot=\"right-toolbar-before\">\r\n    <button\r\n      type=\"button\"\r\n      @click=\"$click('test')\"\r\n      class=\"op-icon fa fa-mavon-align-left\"\r\n      aria-hidden=\"true\"\r\n      title=\"custom\"\r\n    ></button>\r\n  </template>\r\n  <!-- Add a custom button behind the right toolbar  -->\r\n  <template slot=\"right-toolbar-after\">\r\n    <button\r\n      type=\"button\"\r\n      @click=\"$click('test')\"\r\n      class=\"op-icon fa fa-mavon-align-left\"\r\n      aria-hidden=\"true\"\r\n      title=\"custom\"\r\n    ></button>\r\n  </template>\r\n</mavon-editor>\r\n```\r\n### events\r\n\r\n| name   | params   | describe|\r\n| -------- | :---------: | ------- |\r\n| change   | String: value , String: reder    |  Edit area change callback event (render: Html source code) |\r\n| save     | String: value , String: reder     |  Ctrl+s and click save button |\r\n| fullScreen | Boolean: status , String: value     |  Fullscreen editing toggle callback event(boolean: Fullscreen status) |\r\n| readModel |  Boolean: status , String: value    |  Reading mode toggle callback event(boolean: Reading mode status) |\r\n| htmlCode | Boolean: status , String: value     |Html code mode toggle callback event(boolean: status) |\r\n| subfieldToggle  |  Boolean: status , String: value     |  Double columns edit mode toggle callback event(boolean: double columns status) |\r\n| previewToggle   | Boolean: status , String: value | Preview & Edit toggle callback event(boolean: preview status)            |\r\n| helpToggle | Boolean: status , String: value   |  Help-me toggle callback event(boolean: help status) |\r\n| navigationToggle | Boolean: status , String: value   |  Navigation mode toggle callback event(boolean: nav status) |\r\n| imgAdd |  Number: pos, [File](https://developer.mozilla.org/en-US/docs/Web/API/File): imgfile |  Add image file callback event(pos: position in the list of images, File: File Object) |\r\n| imgDel | Array(2):[Number: pos,[File](https://developer.mozilla.org/en-US/docs/Web/API/File):imgfile ]  |  Delete image file callback event(Array(2): An array of length 2,the first is `pos`: position in the list of images, the second is `file`: File Object) |\r\n\r\n### Hightlight\r\n\r\n> If you do not need code highlighting, you need set ishljs to false\r\n\r\nSet ishljs = true\r\n```vue\r\n    <!-- default value is true -->\r\n    <mavon-editor :ishljs=\"true\"></mavon-editor>\r\n```\r\nFor optimize the size of pack, since **v2.4.2**, the following files will default to using `cdnjs` outside the chain:\r\n + `highlight.js`\r\n + `github-markdown-css`\r\n + `katex`(**v2.4.7**)\r\n\r\nThe language parsing files and code highlighting in Code Highlighting `highlight.js` will be loaded on demand.\r\n`github-markdown-css` and` katex` will load only when mounted.\r\n\r\n**Notice**:\r\n[Option hljs color scheme](./src/lib/core/hljs/lang.hljs.css.js) and [Supported language](./src/lib/core/hljs/lang.hljs.js) is export from [highlight.js/9.12.0](https://github.com/isagalaev/highlight.js/tree/master/src)\r\n\r\n> [without cdn, Click here to local on-demand loading...](./doc/en/no-cnd.md)\r\n\r\n\r\n### Upload images\r\n\r\n```vue\r\n<template>\r\n    <mavon-editor ref=md @imgAdd=\"$imgAdd\" @imgDel=\"$imgDel\"></mavon-editor>\r\n</template>\r\n<script>\r\nexports default {\r\n    methods: {\r\n        // bind @imgAdd event\r\n        $imgAdd(pos, $file){\r\n            // step 1. upload image to server.\r\n           var formdata = new FormData();\r\n           formdata.append('image', $file);\r\n           axios({\r\n               url: 'server url',\r\n               method: 'post',\r\n               data: formdata,\r\n               headers: { 'Content-Type': 'multipart/form-data' },\r\n           }).then((url) => {\r\n               // step 2. replace url ![...](0) -> ![...](url)\r\n               $vm.$img2Url(pos, url);\r\n           })\r\n        }\r\n    }\r\n}\r\n</script>\r\n```\r\n> [more info about upload images ...](./doc/en/upload-images.md)\r\n\r\n### Note\r\n\r\n- **Default size: min-height: 300px , min-width: 300px , Can be covered**\r\n- **z-index: 1500**\r\n- **Just for show html of md: toolbarsFlag: false , subfield: false, defaultOpen: \"preview\"**\r\n\r\n### keyboard shortcuts\r\n\r\n| key       | keycode  |       fun          |\r\n| ---------------- | :----------------: | :-----------------------------: |\r\n| F8           | 119 |  toggle navigation  |\r\n| F9           | 120   |  toggle [edit/preview]  |\r\n| F10     | 121   | toggle fullscreen |\r\n| F11      | 122   | toggle readModel |\r\n| F12       | 123   | toggle [double columns / single column] |\r\n| TAB  | 9  | \\t |\r\n| CTRL + S    | 17 + 83 | @save |\r\n| CTRL + D    | 17 + 68 | remove selected lines |\r\n| CTRL + Z    | 17 + 90 | prev step |\r\n| CTRL + Y    | 17 + 89 | next step |\r\n| CTRL + BreakSpace    | 17 + 8 | trash |\r\n| CTRL + B       | 17 + 66 | \\*\\*Bold\\*\\* |\r\n| CTRL + I | 17 + 73 | \\*Italic\\* |\r\n| CTRL + H       | 17 + 72 | # Header |\r\n| CTRL + U    | 17 + 85 | ++Underline++ |\r\n| CTRL + M    | 17 + 77 | ==Mark== |\r\n| CTRL + Q    | 17 + 81 | > Quote |\r\n| CTRL + O    | 17 + 79 | 1. OL |\r\n| CTRL + L    | 17 + 76 | \\[Link title\\](Link url) |\r\n| CTRL + ALT + S    | 17 + 18 + 83 | ^Superscript^ |\r\n| CTRL + ALT + U    | 17 + 18 + 85 | - UL |\r\n| CTRL + ALT + C    | 17 + 18 + 67 | \\`\\`\\` Code block |\r\n| CTRL + ALT + L    | 17 + 18 + 76 | \\!\\[Image title\\](Image link) |\r\n| CTRL + ALT + T    | 17 + 18 + 84 | Table |\r\n| CTRL + SHIFT + S    | 17 + 16 + 83 | ~Subscript~ |\r\n| CTRL + SHIFT + D    | 17 + 16 + 68 | \\~\\~Strikethrough\\~\\~ |\r\n| CTRL + SHIFT + C    | 17 + 16 + 67 | align center |\r\n| CTRL + SHIFT + L    | 17 + 16 + 76 | align left |\r\n| CTRL + SHIFT + R    | 17 + 16 + 82 | align right |\r\n| SHIFT + TAB    | 16 + 9 | remove \\t |\r\n\r\n## Dependencies\r\n- [markdown-it](https://github.com/markdown-it/markdown-it)\r\n\r\n- [auto-textarea](https://github.com/hinesboy/auto-textarea)\r\n\r\n## Syntax extensions\r\n\r\n- [emoji](https://github.com/markdown-it/markdown-it-emoji)\r\n- [subscript](https://github.com/markdown-it/markdown-it-sub)\r\n- [superscript](https://github.com/markdown-it/markdown-it-sup)\r\n- [container](https://github.com/markdown-it/markdown-it-container)\r\n- [definition list](https://github.com/markdown-it/markdown-it-deflist)\r\n- [abbreviation](https://github.com/markdown-it/markdown-it-abbr)\r\n- [footnote](https://github.com/markdown-it/markdown-it-footnote)\r\n- [insert](https://github.com/markdown-it/markdown-it-ins)\r\n- [mark](https://github.com/markdown-it/markdown-it-mark)\r\n- [todo list](https://github.com/revin/markdown-it-task-lists)\r\n- [highlight](https://github.com/isagalaev/highlight.js)\r\n- [katex](https://github.com/Khan/KaTeX)\r\n- [images preview](https://github.com/CHENXCHEN/markdown-it-images-preview)\r\n- [toc](https://github.com/tylerlong/markdown-it-toc)\r\n> 可通过获取[markdown-it](./doc/cn/markdown.md)对象引入[其他语法插件](https://www.npmjs.com/search?q=keywords:markdown-it-plugin)\r\n\r\n## Collaborators\r\n\r\n- [CHENXCHEN](https://github.com/CHENXCHEN)\r\n- [ygj6](https://github.com/ygj6)\r\n- [yukaige](https://github.com/yukaige)\r\n\r\n## License\r\n\r\nmavonEditor is open source and released under the MIT License.\r\n\r\nCopyright (c) 2017 hinesboy\r\n"
  },
  {
    "path": "README.md",
    "content": "# mavonEditor\r\n\r\n| Vue2 | [![npm](https://img.shields.io/npm/v/mavon-editor/latest.svg)](https://www.npmjs.com/package/mavon-editor/v/latest) |\r\n| ---- | ------------------------------------------------------------ |\r\n| **Vue3** | [![npm](https://img.shields.io/npm/v/mavon-editor/next.svg)](https://www.npmjs.com/package/mavon-editor/v/next) |\r\n\r\n### [English Documents](./README-EN.md)\r\n[Demo for jsfiddle](https://jsfiddle.net/CHENXCHEN/qf7gLw3a/3/)\r\n\r\n## example (图片展示)\r\n\r\n### PC\r\n\r\n![PC](./img/cn/cn-common.png)\r\n\r\n![PC](./img/cn/cn-image.gif)\r\n\r\n> [查看更多图片点击这里...](./doc/cn/images.md)\r\n\r\n### Install mavon-editor (安装)\r\n\r\n```\r\n$ npm install mavon-editor --save\r\n```\r\n\r\n### Use (如何引入)\r\n\r\n`index.js`:\r\n```javascript\r\n    // 全局注册\r\n    // import with ES6\r\n    import Vue from 'vue'\r\n    import mavonEditor from 'mavon-editor'\r\n    import 'mavon-editor/dist/css/index.css'\r\n    // use\r\n    Vue.use(mavonEditor)\r\n    new Vue({\r\n        'el': '#main',\r\n        data() {\r\n            return { value: '' }\r\n        }\r\n    })\r\n```\r\n`index.html`\r\n```html\r\n<div id=\"main\">\r\n    <mavon-editor v-model=\"value\"/>\r\n</div>\r\n```\r\n### 如何在nuxt.js 中使用\r\n> 首先在工程目录plugins 下新建 vue-mavon-editor.js\r\n```javascrpt \r\nimport Vue from 'vue';\r\nimport mavonEditor from 'mavon-editor';\r\nimport 'mavon-editor/dist/css/index.css';\r\n\r\nVue.use(mavonEditor);\r\n```\r\n> 然后在nuxt.config.js 中添加plugins配置\r\n```javascript\r\n  plugins: [\r\n  ...\r\n    { src: '@/plugins/vue-mavon-editor', ssr: false }\r\n  ],\r\n```\r\n> 最后一步在页面或者组件中引入\r\n```vue\r\n<template>\r\n  <div class=\"mavonEditor\">\r\n    <no-ssr>\r\n      <mavon-editor :toolbars=\"markdownOption\" v-model=\"handbook\"/>\r\n    </no-ssr>\r\n  </div>\r\n</template>\r\n<script>\r\nexport default {\r\n  data() {\r\n    return {\r\n      markdownOption: {\r\n        bold: true, // 粗体\r\n        ... // 更多配置\r\n      },\r\n      handbook: \"#### how to use mavonEditor in nuxt.js\"\r\n    };\r\n  }\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n.mavonEditor {\r\n  width: 100%;\r\n  height: 100%;\r\n}\r\n</style>\r\n```\r\n\r\n\r\n> [更多引入方式点击这里...](./doc/cn/use.md)\r\n\r\n> [如何获取并设置markdown-it对象...](./doc/cn/markdown.md)\r\n\r\n## API 文档\r\n\r\n### props\r\n\r\n| name 名称      | type 类型 | default 默认值 | describe 描述                          |\r\n| ------------ | :-----: | :---------: | ---------------------------------------- |\r\n| value        | String  |             | 初始值                                     |\r\n| language     | String  |     zh-CN      | 语言选择，暂支持 zh-CN: 简体中文, zh-TW: 正体中文 ， en: 英文 ， fr: 法语， pt-BR: 葡萄牙语， ru: 俄语， de: 德语， ja: 日语 |\r\n| fontSize     | String  |     14px      | 编辑区域文字大小 |\r\n| scrollStyle  | Boolean |    true     | 开启滚动条样式(暂时仅支持chrome)              |\r\n| boxShadow     | Boolean  |     true     | 开启边框阴影                |\r\n| boxShadowStyle | String | 0 2px 12px 0 rgba(0, 0, 0, 0.1) | 边框阴影样式 |\r\n| transition | Boolean | true | 是否开启过渡动画 |\r\n| toolbarsBackground | String | #ffffff | 工具栏背景颜色 |\r\n| previewBackground | String | #fbfbfb | 预览框背景颜色 |\r\n| subfield     | Boolean |    true     | true： 双栏(编辑预览同屏)， false： 单栏(编辑预览分屏)    |\r\n| defaultOpen | String |         |在单栏（`subfield=false`）时默认展示区域.<br/> edit： 默认展示编辑区域，<br/> preview： 默认展示预览区域 <br/> 其他 = edit |\r\n| placeholder | String |    开始编辑...     |  输入框为空时默认提示文本  |\r\n| editable     | Boolean |    true     | 是否允许编辑     |\r\n| codeStyle | String |    code-github     | markdown样式： 默认github, [可选配色方案](./src/lib/core/hljs/lang.hljs.css.js)   |\r\n| toolbarsFlag | Boolean |    true     | 工具栏是否显示                |\r\n| navigation | Boolean |    false    |  默认展示目录  |\r\n| shortCut | Boolean |    true    |  是否启用快捷键  |\r\n| autofocus | Boolean |    true    |  自动聚焦到文本框  |\r\n| ishljs       | Boolean |     true     |  代码高亮 |\r\n| imageFilter | function |     null     |  图片过滤函数，参数为一个`File Object`，要求返回一个`Boolean`, `true`表示文件合法，`false`表示文件不合法 |\r\n| imageClick | function |     null     |  图片点击事件，默认为预览，可覆盖 |\r\n| tabSize     | Number  |     \\t     | tab转化为几个空格，默认为\\t                      |\r\n| html     | Boolean  |     true     | 启用HTML标签，因为历史原因这个标记一直默认为true，但建议不使用HTML标签就关闭它，它能彻底杜绝安全问题。                      |\r\n| xssOptions     | Object  |     {}     | xss规则配置, 默认开启，设置false可以关闭，开启后会对HTML标签进行过滤，默认过滤所有HTML标签属性，建议按需配置白名单减少被攻击的可能。<br/>- 自定义规则参考: [https://jsxss.com/zh/options.html](https://jsxss.com/zh/options.html)<br/>- 参考DEMO: [dev-demo](./src/dev/editor.vue)                  |\r\n| toolbars     | Object  |     如下例     | 工具栏                      |\r\n\r\n#### toolbars\r\n默认工具栏按钮全部开启, 传入自定义对象，可以选择启用部分按钮\r\n```javascript\r\n/*\r\n  例如: {\r\n      bold: true, // 粗体\r\n      italic: true,// 斜体\r\n      header: true,// 标题\r\n  }\r\n  此时, 仅仅显示此三个功能键\r\n*/\r\ntoolbars: {\r\n    bold: true, // 粗体\r\n    italic: true, // 斜体\r\n    header: true, // 标题\r\n    underline: true, // 下划线\r\n    strikethrough: true, // 中划线\r\n    mark: true, // 标记\r\n    superscript: true, // 上角标\r\n    subscript: true, // 下角标\r\n    quote: true, // 引用\r\n    ol: true, // 有序列表\r\n    ul: true, // 无序列表\r\n    link: true, // 链接\r\n    imagelink: true, // 图片链接\r\n    code: true, // code\r\n    table: true, // 表格\r\n    fullscreen: true, // 全屏编辑\r\n    readmodel: true, // 沉浸式阅读\r\n    htmlcode: true, // 展示html源码\r\n    help: true, // 帮助\r\n    /* 1.3.5 */\r\n    undo: true, // 上一步\r\n    redo: true, // 下一步\r\n    trash: true, // 清空\r\n    save: true, // 保存（触发events中的save事件）\r\n    /* 1.4.2 */\r\n    navigation: true, // 导航目录\r\n    /* 2.1.8 */\r\n    alignleft: true, // 左对齐\r\n    aligncenter: true, // 居中\r\n    alignright: true, // 右对齐\r\n    /* 2.2.1 */\r\n    subfield: true, // 单双栏模式\r\n    preview: true, // 预览\r\n}\r\n```\r\n如果需要自定义添加工具栏按钮，可以通过以下方式\r\n```js\r\n<mavon-editor>\r\n  <!-- 左工具栏前加入自定义按钮 -->\r\n  <template slot=\"left-toolbar-before\">\r\n    <button\r\n      type=\"button\"\r\n      @click=\"$click('test')\"\r\n      class=\"op-icon fa fa-mavon-align-left\"\r\n      aria-hidden=\"true\"\r\n      title=\"自定义\"\r\n    ></button>\r\n  </template>\r\n  <!-- 左工具栏后加入自定义按钮  -->\r\n  <template slot=\"left-toolbar-after\">\r\n    <button\r\n      type=\"button\"\r\n      @click=\"$click('test')\"\r\n      class=\"op-icon fa fa-mavon-align-left\"\r\n      aria-hidden=\"true\"\r\n      title=\"自定义\"\r\n    ></button>\r\n  </template>\r\n  <!-- 右工具栏前加入自定义按钮  -->\r\n  <template slot=\"right-toolbar-before\">\r\n    <button\r\n      type=\"button\"\r\n      @click=\"$click('test')\"\r\n      class=\"op-icon fa fa-mavon-align-left\"\r\n      aria-hidden=\"true\"\r\n      title=\"自定义\"\r\n    ></button>\r\n  </template>\r\n  <!-- 右工具栏后加入自定义按钮  -->\r\n  <template slot=\"right-toolbar-after\">\r\n    <button\r\n      type=\"button\"\r\n      @click=\"$click('test')\"\r\n      class=\"op-icon fa fa-mavon-align-left\"\r\n      aria-hidden=\"true\"\r\n      title=\"自定义\"\r\n    ></button>\r\n  </template>\r\n</mavon-editor>\r\n```\r\n\r\n### events 事件绑定\r\n\r\n| name 方法名         |            params 参数            | describe 描述                              |\r\n| ---------------- | :-----------------------------: | ---------------------------------------- |\r\n| change           |  String: value , String: render  | 编辑区发生变化的回调事件(render: value 经过markdown解析后的结果) |\r\n| save             |  String: value , String: render  | ctrl + s 的回调事件(保存按键,同样触发该回调)             |\r\n| fullScreen       | Boolean: status , String: value | 切换全屏编辑的回调事件(boolean: 全屏开启状态)             |\r\n| readModel        | Boolean: status , String: value | 切换沉浸式阅读的回调事件(boolean: 阅读开启状态)            |\r\n| htmlCode         | Boolean: status , String: value | 查看html源码的回调事件(boolean: 源码开启状态)           |\r\n| subfieldToggle   | Boolean: status , String: value | 切换单双栏编辑的回调事件(boolean: 双栏开启状态)            |\r\n| previewToggle   | Boolean: status , String: value | 切换预览编辑的回调事件(boolean: 预览开启状态)            |\r\n| helpToggle       | Boolean: status , String: value | 查看帮助的回调事件(boolean: 帮助开启状态)               |\r\n| navigationToggle | Boolean: status , String: value | 切换导航目录的回调事件(boolean: 导航开启状态)             |\r\n| imgAdd           | Number: pos, [File](https://developer.mozilla.org/en-US/docs/Web/API/File): imgfile | 图片文件添加回调事件(pos: 图片在列表中的位置, File: File Object) |\r\n| imgDel           | Array(2):[Number: pos,[File](https://developer.mozilla.org/en-US/docs/Web/API/File):imgfile ] | 图片文件删除回调事件(Array(2): 两个元素的数组，第一位是图片在列表中的位置，第二位是File对象)          |\r\n\r\n### 代码高亮\r\n\r\n> 如不需要hightlight代码高亮显示，你应该设置ishljs为false\r\n\r\n开启代码高亮props\r\n```vue\r\n<!-- ishljs默认为true -->\r\n<mavon-editor :ishljs=\"true\"></mavon-editor>\r\n```\r\n\r\n为优化插件体积，从**v2.4.2**起以下文件将默认使用`cdnjs`外链:\r\n + `highlight.js`\r\n + `github-markdown-css`\r\n + `katex`(**v2.4.7**)\r\n\r\n代码高亮`highlight.js`中的语言解析文件和代码高亮样式将在使用时按需加载.\r\n`github-markdown-css`和`katex`仅会在`mounted`时加载\r\n\r\n**Notice**:\r\n[可选配色方案](./src/lib/core/hljs/lang.hljs.css.js) 和 [支持的语言](./src/lib/core/hljs/lang.hljs.js) 是从 [highlight.js/9.12.0](https://github.com/isagalaev/highlight.js/tree/master/src) 导出的\r\n\r\n> [不使用cdn，本地按需加载点击这里...](./doc/cn/no-cnd.md)\r\n\r\n### 图片上传\r\n\r\n```vue\r\n<template>\r\n    <mavon-editor ref=md @imgAdd=\"$imgAdd\" @imgDel=\"$imgDel\"></mavon-editor>\r\n</template>\r\n<script>\r\nexport default {\r\n    methods: {\r\n        // 绑定@imgAdd event\r\n        $imgAdd(pos, $file){\r\n            // 第一步.将图片上传到服务器.\r\n           var formdata = new FormData();\r\n           formdata.append('image', $file);\r\n           axios({\r\n               url: 'server url',\r\n               method: 'post',\r\n               data: formdata,\r\n               headers: { 'Content-Type': 'multipart/form-data' },\r\n           }).then((url) => {\r\n               // 第二步.将返回的url替换到文本原位置![...](0) -> ![...](url)\r\n               /**\r\n               * $vm 指为mavonEditor实例，可以通过如下两种方式获取\r\n               * 1. 通过引入对象获取: `import {mavonEditor} from ...` 等方式引入后，`$vm`为`mavonEditor`\r\n               * 2. 通过$refs获取: html声明ref : `<mavon-editor ref=md ></mavon-editor>，`$vm`为 `this.$refs.md`\r\n               */\r\n               $vm.$img2Url(pos, url);\r\n           })\r\n        }\r\n    }\r\n}\r\n</script>\r\n```\r\n> [图片上传详情点击这里...](./doc/cn/upload-images.md)\r\n\r\n### 注\r\n\r\n- **默认大小样式为 min-height: 300px , min-width: 300px 可自行覆盖**\r\n- **基础z-index: 1500**\r\n- **仅用作展示可以设置props: toolbarsFlag: false , subfield: false, defaultOpen: \"preview\"**\r\n\r\n\r\n### 快捷键\r\n\r\n| key       | keycode  |            功能            |\r\n| ---------------- | :----------------: | :-----------------------------: |\r\n| F8           | 119 |  开启/关闭导航  |\r\n| F9           | 120   |  预览/编辑切换  |\r\n| F10     | 121   | 开启/关闭全屏 |\r\n| F11      | 122   | 开启/关闭阅读模式 |\r\n| F12       | 123   | 单栏/双栏切换 |\r\n| TAB  | 9  | 缩进 |\r\n| CTRL + S    | 17 + 83 | 触发保存 |\r\n| CTRL + D    | 17 + 68 | 删除选中行 |\r\n| CTRL + Z    | 17 + 90 | 上一步 |\r\n| CTRL + Y    | 17 + 89 | 下一步 |\r\n| CTRL + BreakSpace    | 17 + 8 | 清空编辑 |\r\n| CTRL + B       | 17 + 66 | \\*\\*加粗\\*\\* |\r\n| CTRL + I | 17 + 73 | \\*斜体\\* |\r\n| CTRL + H       | 17 + 72 | # 标题 |\r\n| CTRL + 1       | 17 + 97 or 49 | # 标题 |\r\n| CTRL + 2       | 17 + 98 or 50 | ## 标题 |\r\n| CTRL + 3       | 17 + 99 or 51 | ### 标题 |\r\n| CTRL + 4       | 17 + 100 or 52 | #### 标题 |\r\n| CTRL + 5       | 17 + 101 or 53 | ##### 标题 |\r\n| CTRL + 6       | 17 + 102 or 54 | ###### 标题 |\r\n| CTRL + U    | 17 + 85 | ++下划线++ |\r\n| CTRL + M    | 17 + 77 | ==标记== |\r\n| CTRL + Q    | 17 + 81 | > 引用 |\r\n| CTRL + O    | 17 + 79 | 1. 有序列表 |\r\n| CTRL + L    | 17 + 76 | \\[链接标题\\](链接地址) |\r\n| CTRL + ALT + S    | 17 + 18 + 83 | ^上角标^ |\r\n| CTRL + ALT + U    | 17 + 18 + 85 | - 无序列表 |\r\n| CTRL + ALT + C    | 17 + 18 + 67 | \\`\\`\\` 代码块 |\r\n| CTRL + ALT + L    | 17 + 18 + 76 | \\!\\[图片标题\\](图片链接) |\r\n| CTRL + ALT + T    | 17 + 18 + 84 | 表格 |\r\n| CTRL + SHIFT + S    | 17 + 16 + 83 | ~下角标~ |\r\n| CTRL + SHIFT + D    | 17 + 16 + 68 | \\~\\~中划线\\~\\~ |\r\n| CTRL + SHIFT + C    | 17 + 16 + 67 | 居中 |\r\n| CTRL + SHIFT + L    | 17 + 16 + 76 | 居左 |\r\n| CTRL + SHIFT + R    | 17 + 16 + 82 | 居右 |\r\n| SHIFT + TAB    | 16 + 9 | 取消缩进 |\r\n\r\n\r\n## Dependencies (依赖)\r\n\r\n- [markdown-it](https://github.com/markdown-it/markdown-it)\r\n\r\n- [auto-textarea](https://github.com/hinesboy/auto-textarea)\r\n\r\n\r\n## Markdown 语法拓展\r\n\r\n- [emoji](https://github.com/markdown-it/markdown-it-emoji)\r\n- [subscript](https://github.com/markdown-it/markdown-it-sub)\r\n- [superscript](https://github.com/markdown-it/markdown-it-sup)\r\n- [container](https://github.com/markdown-it/markdown-it-container)\r\n- [definition list](https://github.com/markdown-it/markdown-it-deflist)\r\n- [abbreviation](https://github.com/markdown-it/markdown-it-abbr)\r\n- [footnote](https://github.com/markdown-it/markdown-it-footnote)\r\n- [insert](https://github.com/markdown-it/markdown-it-ins)\r\n- [mark](https://github.com/markdown-it/markdown-it-mark)\r\n- [todo list](https://github.com/revin/markdown-it-task-lists)\r\n- [highlight](https://github.com/isagalaev/highlight.js)\r\n- [katex](https://github.com/Khan/KaTeX)\r\n- [images preview](https://github.com/CHENXCHEN/markdown-it-images-preview)\r\n- [toc](https://github.com/tylerlong/markdown-it-toc)\r\n> 可通过[获取markdown-it对象](./doc/cn/markdown.md)引入[其他语法插件](https://www.npmjs.com/search?q=keywords:markdown-it-plugin)\r\n可通过[获取markdown-it对象](./doc/cn/markdown.md)引入[其他语法插件](https://www.npmjs.com/search?q=keywords:markdown-it-plugin)\r\n\r\n## update(更新内容)\r\n\r\n- [更新日志](./LOG.md)\r\n\r\n## Collaborators(合作者)\r\n\r\n- [CHENXCHEN](https://github.com/CHENXCHEN)\r\n- [ygj6](https://github.com/ygj6)\r\n- [yukaige](https://github.com/yukaige)\r\n\r\n\r\n## License (证书)\r\n\r\nmavonEditor is open source and released under the MIT License.\r\n\r\nCopyright (c) 2017 hinesboy\r\n"
  },
  {
    "path": "SECURITY.md",
    "content": "# Security Policy\n\n## Supported Versions\n\nSecurity is of the highest importance and all security vulnerabilities or suspected security vulnerabilities should be reported to mavonEditor team privately, to minimize attacks against current users of mavonEditor before they are fixed. Vulnerabilities will be investigated and patched on the next patch (or minor) release as soon as possible. This information could be kept entirely internal to the project.\n\n## Reporting a Vulnerability\n\nIf you know of a publicly disclosed security vulnerability for mavonEditor, please IMMEDIATELY contact jiawulin@vip.qq.com to inform the mavonEditor Team.\n\nIMPORTANT: Do not file public issues on GitHub for security vulnerabilities.\n"
  },
  {
    "path": "_config.yml",
    "content": "theme: jekyll-theme-cayman"
  },
  {
    "path": "doc/cn/images.md",
    "content": "## 图片展示\n\n### PC\n\n![PC](../../img/cn/cn-common.png)\n\n![PC](../../img/cn/cn-nav.png)\n\n![PC](../../img/cn/cn-help.png)\n\n#### 链接 & 上传图片 Gif\n\n![PC](../../img/cn/cn-link.gif)\n\n![PC](../../img/cn/cn-drag.gif)\n\n![PC](../../img/cn/cn-image.gif)\n\n### 移动\n\n![移动](../../img/cn/cn-phone.png)\n&nbsp;&nbsp;&nbsp;\n![移动](../../img/cn/cn-phone-nav.png)"
  },
  {
    "path": "doc/cn/markdown.md",
    "content": "## Markdown-It\n\n### 获取mavonEditor中的markdown-it对象\n\n#### 方法1 通过全局引入的mavonEditor获取\n```javascript\n  import MavonEditor from 'mavon-editor'\n  Vue.use(MavonEditor)\n  ...\n  const markdownIt = MavonEditor.mavonEditor.getMarkdownIt()\n```\n\n#### 方法2 通过局部引入的mavonEditor获取\n```javascript\n  import { mavonEditor } from 'mavon-editor'\n  const markdownIt = mavonEditor.getMarkdownIt()\n```\n\n#### 方法3 通过mavonEditor的实例获取\n```javascript\n   <mavonEditor ref=md></mavonEditor>\n   ...\n   const markdownIt = this.refs.md.getMarkdownIt()\n```\n\n### 使用markdown-it对象\n\n> 设置markdown换行格式必须为行尾添加两空格\n\n```\n    // markdownIt通过上述方式获取\n    markdownIt.set({ breaks: false });\n```\n\n> [更多设置参考markdown-it...](https://github.com/markdown-it/markdown-it)\n"
  },
  {
    "path": "doc/cn/no-cnd.md",
    "content": "### 本地按需加载\n如果你想自己引入而不希望`mavon-editor`加载的话，可以将`externalLink`设置为`false`.\n\n如果想本地按需加载，你需要安装`copy-webpack-plugin`插件(`npm install copy-webpack-plugin -D`)\n配置webpack如下所示：\n(假定`webpack`配置文件位于项目的`/webpack/webpack.js`,\n而你希望将`hljs`以及`markdown`相关文件导出位于项目的`/dist/highlightjs`以及`/dist/markdown`目录之下,\n`katex`和上面一样)\n```javascript\nvar CopyWebpackPlugin = require('copy-webpack-plugin');\n\nmodule.exports = {\n    // ...\n    plugins: [\n        // ...\n        new CopyWebpackPlugin([{\n            from: 'node_modules/mavon-editor/dist/highlightjs',\n            to: path.resolve(__dirname, '../dist/highlightjs'), // 插件将会把文件导出于/dist/highlightjs之下\n        }, {\n            from: 'node_modules/mavon-editor/dist/markdown',\n            to: path.resolve(__dirname, '../dist/markdown'), // 插件将会把文件导出于/dist/markdown之下\n        }, {\n            from: 'node_modules/mavon-editor/dist/katex', // 插件将会把文件导出\n            to: path.resolve(__dirname, '../dist/katex')\n        }]),\n        // ...\n    ],\n    // ...\n}\n```\n然后你需要给`mavon-editor`设置`externalLink`\n相关代码如下所示:\n(假定你的`web根目录`位于项目的`/dist/`, 你的网站是`www.site.com`, 那么\n`markdown`, `hljs_js`, `hljs_css`, `hljs_lang`, `katex_css`, `katex_js`返回的是你的网站对应文件位置，\n比如`www.site.com/markdown/github-markdown.min.css`\n对应的文件应该位于项目的`/dist/markdown/github-markdown.min.css`)\n```javascript\n<template>\n  <div id=\"app\">\n      <mavon-editor\n      :subfield = \"subfield\"\n      :code_style=\"code_style\"\n      :ishljs=\"true\"\n      :externalLink=\"externalLink\"\n      ></mavon-editor>\n  </div>\n</template>\n<script>\nexport default {\n    data () {\n      return {\n        subfield: true,\n        code_style: 'solarized-dark',\n        externalLink: {\n            markdown_css: function() {\n                // 这是你的markdown css文件路径\n                return '/markdown/github-markdown.min.css';\n            },\n            hljs_js: function() {\n                // 这是你的hljs文件路径\n                return '/highlightjs/highlight.min.js';\n            },\n            hljs_css: function(css) {\n                // 这是你的代码高亮配色文件路径\n                return '/highlightjs/styles/' + css + '.min.css';\n            },\n            hljs_lang: function(lang) {\n                // 这是你的代码高亮语言解析路径\n                return '/highlightjs/languages/' + lang + '.min.js';\n            },\n            katex_css: function() {\n                // 这是你的katex配色方案路径路径\n                return '/katex/katex.min.css';\n            },\n            katex_js: function() {\n                // 这是你的katex.js路径\n                return '/katex/katex.min.js';\n            },\n        }\n      }\n    },\n}\n</script>\n```\n**Notice**: 如果你想禁用`mavon-editor`的自动加载，\n可以将`externalLink`设置为`false`或`externalLink`中的某函数值设置为`false`\n如：\n```javascript\nexport default {\n// ...\n    data() {\n        return {\n            externalLink: false, // 这里只能为`true`/`false`和一个`Object`, 如果为`true`代表全使用外链且自动加载, 如果为`false`则禁用，如果为`Object`则如上所示\n        }\n    }\n// ...\n}\n```\n或者:\n```javascript\nexport default {\n// ...\n    data() {\n        return {\n            externalLink: {\n                hljs_css: function(css) {\n                    // 这是你的代码高亮配色文件路径\n                    return '/highlightjs/styles/' + css + '.min.css';\n                },\n                katex_css: false, // `false`表示禁用自动加载，它也可以是个函数，如果它是个函数，那么这个函数应该返回一个可访问的`katex`的css路径字符串\n                // 我们没有设置`katex_js`, `hljs_js`, `hljs_lang`, `markdown_css`， `mavon-editor`会认为它的值为`true`，它会默认使用`cdnjs`相关外链加载\n            },\n        }\n    }\n// ...\n}\n```"
  },
  {
    "path": "doc/cn/upload-images.md",
    "content": "### 图片上传\n\n#### 方式1：图片上传至文件服务器\n\n> 每次添加图片触发上传\n```javascript\n<template>\n    <mavon-editor ref=md @imgAdd=\"$imgAdd\" @imgDel=\"$imgDel\"></mavon-editor>\n</template>\nexports default {\n    methods: {\n        // 绑定@imgAdd event\n        $imgAdd(pos, $file){\n            // 第一步.将图片上传到服务器.\n           var formdata = new FormData();\n           formdata.append('image', $file);\n           axios({\n               url: 'server url',\n               method: 'post',\n               data: formdata,\n               headers: { 'Content-Type': 'multipart/form-data' },\n           }).then((url) => {\n               // 第二步.将返回的url替换到文本原位置![...](0) -> ![...](url)\n               // $vm.$img2Url 详情见本页末尾\n               $vm.$img2Url(pos, url);\n           })\n        }\n    }\n}\n```\n\n> 统一上传多张图片\n```javascript\n<template>\n    <!--点击按钮触发图片统一上传-->\n    <button @click=\"uploadimg\">upload</button>\n    <mavon-editor ref=md @imgAdd=\"$imgAdd\" @imgDel=\"$imgDel\"></mavon-editor>\n</template>\nexports default {\n    data(){\n        return {\n            img_file: {}\n        }\n    },\n    methods: {\n        // 绑定@imgAdd event\n        $imgAdd(pos, $file){\n            // 缓存图片信息\n            this.img_file[pos] = $file;\n        },\n        $imgDel(pos){\n            delete this.img_file[pos];\n        },\n        uploadimg($e){\n            // 第一步.将图片上传到服务器.\n            var formdata = new FormData();\n            for(var _img in this.img_file){\n                formdata.append(_img, this.img_file[_img]);\n            }\n            axios({\n                url: 'server url',\n                method: 'post',\n                data: formdata,\n                headers: { 'Content-Type': 'multipart/form-data' },\n            }).then((res) => {\n                /**\n                 * 例如：返回数据为 res = [[pos, url], [pos, url]...]\n                 * pos 为原图片标志（0）\n                 * url 为上传后图片的url地址\n                 */\n                 // 第二步.将返回的url替换到文本原位置![...](0) -> ![...](url)\n                for (var img in res) {\n                    // $vm.$img2Url 详情见本页末尾\n                    $vm.$img2Url(img[0], img[1]);\n                }\n            })\n        },\n    }\n}\n```\n\n#### 方式2：直接将图片保存为base64编码\n\n```javascript\n<template>\n    <mavon-editor ref=md @imgAdd=\"$imgAdd\" v-model=\"mdStr\" @imgDel=\"$imgDel\"></mavon-editor>\n</template>\nexports default {\n    data() {\n        return {\n            mdStr: '### demo \\n ![image](0)'\n        };\n    },\n    mounted() {\n        // 如果原始md字符串中存在曾上传的图片， 则需要将对应<img>中的src替换为base64\n        this.$nextTick(() => {\n            // $vm.$imgUpdateByUrl 详情见本页末尾\n            $vm.$imgUpdateByUrl(0, base64内容);\n        }\n    },\n    methods: {\n        $imgAdd(pos, $file){\n            // 将图片上传到服务器.\n           var formdata = new FormData();\n           formdata.append('image', $file);\n           axios({\n               url: 'server url',\n               method: 'post',\n               data: formdata,\n               headers: { 'Content-Type': 'multipart/form-data' },\n           }).then((flag) => {\n           })\n        }\n    }\n}\n```\n\n### 图片事件\n| name 方法名        |            params 参数            | describe 描述                              |\n| ----------------   | :-----------------------------: | ---------------------------------------- |\n| $vm.$refs.toolbar_left.$imgDelByFilename(>=**2.1.6**) |  String: filename | 主动删除对应图片文件, 如果成功返回TRUE，否则返回FALSE, (并将其从 `md` 源码中删除 (>=**2.4.16**)) |\n| $vm.$refs.toolbar_left.$imgAddByFilename(>=**2.1.6**) |  String: filename, File: file | 添加对应图片文件，文件别名为filename(filename 必须为 ./filename 样式), 如果成功返回TRUE，否则返回FALSE |\n| $vm.$refs.toolbar_left.$imgUpdateByFilename(>=**2.1.6**) |  String: filename, File: file | 更新对应文件名的图片文件(filename 必须为 ./filename 样式), 如果成功返回TRUE，否则返回FALSE |\n| $vm.$imgUpdateByUrl(>=**2.1.5**)    |  String: filename, String: url | 将<img>标签src相对路径值替换为url(如./0 -> http://path/to/png/some.png) |\n| $vm.$imgAddByUrl(>=**2.1.11**)    |  String: filename, String: url | 同上(如./0 -> http://path/to/png/some.png) |\n| $vm.$img2Url(>=**2.1.11**)    |  String: filename, String: url | 将md源码中图片文件名替换为url(如`![h](./0)` -> `![h](http://path/to/png/some.png)`) |\n| $vm.$imglst2Url(>=**2.1.11**)    |  Array: filenameLst | 同上(filenameLst: [[filename, url], ...]) |\n\n**注意**: `$vm`指为`mavonEditor`实例，可以通过如下两种方式获取\n1. 通过引入对象获取: `import {mavonEditor} from ...` 等方式引入后，此时`$vm`即为`mavonEditor`\n2. 通过$refs获取: html声明ref : `<mavon-editor ref=md ></mavon-editor>， 此时`$vm`为 `this.$refs.md`\n"
  },
  {
    "path": "doc/cn/use.md",
    "content": "### Use (如何引入)\n\n#### 方法1\n`index.js`:\n```javascript\n    // 全局注册\n    // import with ES6\n    import Vue from 'vue'\n    import mavonEditor from 'mavon-editor'\n    import 'mavon-editor/dist/css/index.css'\n    // use\n    Vue.use(mavonEditor)\n    new Vue({\n        'el': '#main',\n        data() {\n            return { value: '' }\n        }\n    })\n```\n`index.html`\n```html\n// 下同\n<div id=\"main\">\n    <mavon-editor v-model=\"value\"/>\n</div>\n```\n\n#### 方法2\n`index.js`:\n```javascript\n    // 全局注册\n    // require with Webpack/Node.js\n    ...\n    var mavonEditor = require('mavon-editor')\n    import 'mavon-editor/dist/css/index.css'\n    ...\n```\n\n#### 方法3\n`editor.vue`:\n```javascript\n    <template>\n        <div id=\"editor\">\n            <mavon-editor style=\"height: 100%\"></mavon-editor>\n        </div>\n    </template>\n    <script>\n    // Local Registration\n    import { mavonEditor } from 'mavon-editor'\n    import 'mavon-editor/dist/css/index.css'\n    export default {\n        name: 'editor',\n        components: {\n            mavonEditor\n            // or 'mavon-editor': mavonEditor\n        }\n    }\n    </script>\n    <style>\n    #editor {\n        margin: auto;\n        width: 80%;\n        height: 580px;\n    }\n    </style>\n```\n`index.js`:\n```javascript\n\t// 下同\n    import Vue from 'vue';\n    var editor = require('./editor.vue');\n    new Vue({\n        el: '#main',\n        render: h => h(editor)\n    });\n```\n`index.html`:\n```html\n// 下同\n<div id=\"main\">\n</div>\n```\n\n#### 方法4\n`editor.vue`:\n```javascript\n    ...\n    <script>\n    // Local Registration\n    // import mavonEditor from 'mavon-editor'\n    var mavonEditor = require('mavon-editor')\n    import 'mavon-editor/dist/css/index.css'\n    export default {\n        name: 'editor',\n        components: {\n            'mavon-editor': mavonEditor.mavonEditor\n        }\n    }\n    </script>\n    <style>\n    #editor {\n    ...\n    </style>\n```"
  },
  {
    "path": "doc/en/images.md",
    "content": "## Example Pictures\n### PC\n\n![PC](../../img/en/en-common.png)\n\n![PC](../../img/en/en-nav.png)\n\n![PC](../../img/en/en-help.png)\n\n### Link & Upload Images Gif\n\n![PC](../../img/en/en-link.gif)\n\n![PC](../../img/en/en-drag.gif)\n\n![PC](../../img/en/en-image.gif)\n\n### Mobile\n\n![Mobile](../../img/en/en-phone.png)\n&nbsp;&nbsp;&nbsp;\n![Mobile](../../img/en/en-phone-nav.png)"
  },
  {
    "path": "doc/en/markdown.md",
    "content": "## Markdown-It\n\n### Get the markdown-it object of mavonEditor\n\n#### method 1:  Global Registration\n```javascript\n  import MavonEditor from 'mavon-editor'\n  Vue.use(MavonEditor)\n  ...\n  const markdownIt = MavonEditor.mavonEditor.getMarkdownIt()\n```\n\n#### method 2: Local Registration\n```javascript\n  import {mavonEditor} from 'mavon-editor'\n  const markdownIt = mavonEditor.getMarkdownIt()\n```\n\n#### method 3: Use mavonEditor ref\n```javascript\n   <mavonEditor ref=md></mavonEditor>\n   ...\n   const markdownIt = this.refs.md.getMarkdownIt()\n```\n\n### Use markdown-it object\n\n> eg: set the line break style\n\n```\n    // get markdownIt as above\n    markdownIt.set({ breaks: false });\n```\n\n> [markdown-it API](https://github.com/markdown-it/markdown-it)\n"
  },
  {
    "path": "doc/en/no-cnd.md",
    "content": "### Local on-demand loading\nYou can set `externalLink` to` false` if you want to introduce yourself without wanting `mavon-editor` to load.\n\nIf you want to load locally, you need to install the `copy-webpack-plugin` plugin (` npm install copy-webpack-plugin -D`)\n\nConfiguring your `webpack` as below:\n(We assume your configuration file locate in your project `/webpack/webpack.js`,\nand you want to export `hljs` and `markdown` files to `/dist/highlightjs` and `/dist/markdown`,\n`katex` is the same as above)\n\n```javascript\nvar CopyWebpackPlugin = require('copy-webpack-plugin');\n\nmodule.exports = {\n    // ...\n    plugins: [\n        // ...\n        new CopyWebpackPlugin([{\n            from: 'node_modules/mavon-editor/dist/highlightjs',\n            to: path.resolve(__dirname, '../dist/highlightjs'), // plugin will export hljs files into /dist/highlightjs\n        }, {\n            from: 'node_modules/mavon-editor/dist/markdown',\n            to: path.resolve(__dirname, '../dist/markdown'), // plugin will export markdown files into /dist/markdown\n        }, {\n            from: 'node_modules/mavon-editor/dist/katex', // plugin will export katex files into /dist/katex\n            to: path.resolve(__dirname, '../dist/katex')\n        }]),\n        // ...\n    ],\n    // ...\n}\n```\nAnd then you need set `externalLink` to `mavon-editor`,\nthe code is as follows:\n(We assume your `web root` located in your project `/dist/`, and your website url is `www.site.com`,\nthen `markdown`, `hljs_js`, `hljs_css`, `hljs_lang`, `katex_css`, `katex_js` need return related file locations,\nfor example, the `www.site.com/markdown/github-markdown.min.css` link file should be located in the\n`/dist/markdown/github-markdown.min.css`)\n```javascript\n<template>\n  <div id=\"app\">\n      <mavon-editor\n      :subfield = \"subfield\"\n      :code_style=\"code_style\"\n      :ishljs=\"true\"\n      :externalLink=\"externalLink\"\n      ></mavon-editor>\n  </div>\n</template>\n<script>\nexport default {\n    data () {\n      return {\n        subfield: true,\n        code_style: 'solarized-dark',\n        externalLink: {\n            markdown_css: function() {\n                // thi is your markdown css file path 这是你的markdown css文件路径\n                return '/markdown/github-markdown.min.css';\n            },\n            hljs_js: function() {\n                // 这是你的hljs文件路径\n                // this is your hljs file\n                return '/highlightjs/highlight.min.js';\n            },\n            hljs_css: function(css) {\n                // this is your hljs language file\n                return '/highlightjs/styles/' + css + '.min.css';\n            },\n            hljs_lang: function(lang) {\n                // this is your hljs css file\n                return '/highlightjs/languages/' + lang + '.min.js';\n            },\n            katex_css: function() {\n                // this is your katex css file\n                return '/katex/katex.min.css';\n            },\n            katex_js: function() {\n                // this is your katex js file\n                return '/katex/katex.min.js';\n            },\n        }\n      }\n    },\n}\n</script>\n```\n**Notice**: If you want to disable `mavon-editor` autoload from `cdnjs`,\nYou can set `externalLink` to` false` or a function in `externalLink` to` false`\nexample:\n```javascript\nexport default {\n// ...\n    data() {\n        return {\n            externalLink: false, // This can only be `true` /` false` and `Object`, if` true` means that all external links are used and loaded automatically, `false` is disabled,` Object` is as shown above\n        }\n    }\n// ...\n}\n```\nor:\n```javascript\nexport default {\n// ...\n    data() {\n        return {\n            externalLink: {\n                hljs_css: function(css) {\n                    return '/highlightjs/styles/' + css + '.min.css';\n                },\n                katex_css: false, // `false` means that autoloading is disabled, it can also be a function, and if it is a function then this function should return an accessible ` katex` css path string\n                // We do not set `katex_js`,` hljs_js`, `hljs_lang`,` markdown_css`, `mavon-editor` to assume that it has the value` true` and it defaults to loading using `cdnjs` related outerchain.\n            },\n        }\n    }\n// ...\n}\n```"
  },
  {
    "path": "doc/en/upload-images.md",
    "content": "### Upload images\n\n#### method 1: Upload to File server\n\n> Each time you add a image to trigger the upload\n```javascript\n<template>\n    <mavon-editor ref=md @imgAdd=\"$imgAdd\" @imgDel=\"$imgDel\"></mavon-editor>\n</template>\nexports default {\n    methods: {\n        // bind @imgAdd event\n        $imgAdd(pos, $file){\n           / step 1. upload image to server.\n           var formdata = new FormData();\n           formdata.append('image', $file);\n           axios({\n               url: 'server url',\n               method: 'post',\n               data: formdata,\n               headers: { 'Content-Type': 'multipart/form-data' },\n           }).then((url) => {\n               // step 2. replace url ![...](./0) -> ![...](url)\n               // $vm.$img2Url. The details at the end of this page\n               $vm.$img2Url(pos, url);\n           })\n        }\n    }\n}\n```\n\n> Multiple images unified upload\n```javascript\n<template>\n    <button @click=\"uploadimg\">upload</button>\n    <mavon-editor ref=md @imgAdd=\"$imgAdd\" @imgDel=\"$imgDel\"></mavon-editor>\n</template>\nexports default {\n    data(){\n        return {\n            img_file: {}\n        }\n    },\n    methods: {\n        // bind @imgAdd event\n        $imgAdd(pos, $file){\n            // cache images info\n            this.img_file[pos] = $file;\n        },\n        $imgDel(pos){\n            delete this.img_file[pos];\n        },\n        uploadimg($e){\n           // step 1. upload images to server.\n            var formdata = new FormData();\n            for(var _img in this.img_file){\n                formdata.append(_img, this.img_file[_img]);\n            }\n            axios({\n                url: 'server url',\n                method: 'post',\n                data: formdata,\n                headers: { 'Content-Type': 'multipart/form-data' },\n            }).then((res) => {\n                /**\n                 * eg：res = [[pos, url], [pos, url]...]\n                 */\n                // step 2. replace url ![...](0) -> ![...](url)\n                for (var img of res) {\n                    // $vm.$img2Url. The details at the end of this page\n                    $vm.$img2Url(img[0], img[1]);\n                }\n            })\n        },\n    }\n}\n```\n\n#### method 2:base64\n\n```javascript\n<template>\n    <mavon-editor ref=md @imgAdd=\"$imgAdd\" v-model=\"mdStr\" @imgDel=\"$imgDel\"></mavon-editor>\n</template>\nexports default {\n    data() {\n        return {\n            mdStr: '### demo \\n ![image](./0)'\n        };\n    },\n    mounted() {\n        // init: replace <img src=\"base64\">\n        this.$nextTick(() => {\n            // $vm.$imgUpdateByUrl. The details at the end of this page\n            $vm.$imgUpdateByUrl('./0', base64);\n        }\n    },\n    methods: {\n        $imgAdd(pos, $file){\n            // upload image(base64)\n           var formdata = new FormData();\n           formdata.append('image', $file);\n           axios({\n               url: 'server url',\n               method: 'post',\n               data: formdata,\n               headers: { 'Content-Type': 'multipart/form-data' },\n           }).then((flag) => {\n           })\n        }\n    }\n}\n```\n\n### image methods\n| name      |            params         | describe      |\n| ----------------   | :-----------------------------: | ---------------------------------------- |\n| $vm.$refs.toolbar_left.$imgDelByFilename(>=**2.1.6**) |  String: filename | Delete the image by filename, return true if sucess, false otherwise, (and it will remove from `md` (>=**2.4.16**)) |\n| $vm.$refs.toolbar_left.$imgAddByFilename(>=**2.1.6**) |  String: filename, File: file | Add the image by filename (The filename alias style must be \"./filename\"), return true if sucess, false otherwise |\n| $vm.$refs.toolbar_left.$imgUpdateByFilename(>=**2.1.6**) |  String: filename, File: file | Update the image by filename(The filename alias style must be \"./filename\"), return true if sucess, false otherwise |\n| $vm.$imgUpdateByUrl(>=**2.1.6**)    |  String: filename, String: url | Update filename to url(example: ./0 -> http://path/to/png/some.png) |\n| $vm.$imgAddByUrl(>=**2.1.11**)    |  String: filename, String: url | Same as above |\n| $vm.$img2Url(>=**2.1.11**)    |  String: filename, String: url | replace filename to url(example: `![h](./0)` -> `![h](http://path/to/png/some.png)`) |\n| $vm.$imglst2Url(>=**2.1.11**)    |  Array: filenameLst | Same as above(filenameLst: [[filename, url], ...]) |\n\n**Notice**: `$vm` => reference instance of component, you can get it:\n1. `import {mavonEditor} from ...`: `$vm` == `mavonEditor`\n2. `<mavon-editor ref=md ></mavon-editor>: `$vm` == `this.$refs.md`\n"
  },
  {
    "path": "doc/en/use.md",
    "content": "### Use\n\n#### method 1\n`index.js`:\n```javascript\n    // Global Registration\n    // import with ES6\n    import Vue from 'vue'\n    import mavonEditor from 'mavon-editor'\n    import 'mavon-editor/dist/css/index.css'\n\n    // use\n    Vue.use(mavonEditor)\n    new Vue({\n        'el': '#main',\n        data() {\n            return { value: '' }\n        }\n    })\n```\n`index.html`\n```html\n// The same below\n<div id=\"main\">\n    <mavon-editor v-model=\"value\"/>\n</div>\n```\n\n#### method 2\n`index.js`:\n```javascript\n    // Global Registration\n    // require with Webpack/Node.js\n    ...\n    var mavonEditor = require('mavon-editor')\n    import 'mavon-editor/dist/css/index.css'\n\n    ...\n```\n\n#### method 3\n`editor.vue`:\n```javascript\n    <template>\n        <div id=\"editor\">\n            <mavon-editor style=\"height: 100%\"></mavon-editor>\n        </div>\n    </template>\n    <script>\n    // Local Registration\n    import { mavonEditor } from 'mavon-editor'\n    import 'mavon-editor/dist/css/index.css'\n    export default {\n        name: 'editor',\n        components: {\n            mavonEditor\n            // or 'mavon-editor': mavonEditor\n        }\n    }\n    </script>\n    <style>\n    #editor {\n        margin: auto;\n        width: 80%;\n        height: 580px;\n    }\n    </style>\n```\n`index.js`:\n```javascript\n\t// The same below\n    import Vue from 'vue';\n    var editor = require('./editor.vue');\n    new Vue({\n        el: '#main',\n        render: h => h(editor)\n    });\n```\n`index.html`:\n```html\n// The same below\n<div id=\"main\">\n</div>\n```\n\n#### method 4\n`editor.vue`:\n```javascript\n    ...\n    <script>\n    // Local Registration\n    // import mavonEditor from 'mavon-editor'\n    var mavonEditor = require('mavon-editor')\n\t// the Object of markdown-it : mavonEditor.markdownIt\n    import 'mavon-editor/dist/css/index.css'\n    export default {\n        name: 'editor',\n        components: {\n            'mavon-editor': mavonEditor.mavonEditor\n        }\n    }\n    </script>\n    <style>\n    ...\n    </style>\n```"
  },
  {
    "path": "jest.config.js",
    "content": "module.exports = {\n  transformIgnorePatterns: [\"<rootDir>/node_modules/(?!auto-textarea|@vue|src)\"],\n  testMatch: [\n    \"**/tests/unit/*.spec.js\"\n  ],\n  verbose: true,\n  moduleFileExtensions: ['js', 'vue', 'md', 'html'],\n  moduleNameMapper: {\n    '\\\\.(css|scss)$': 'identity-obj-proxy',\n    '^@/(.*)$': '<rootDir>/src/$1'\n  },\n  transform: {\n    \"^.+\\\\.js$\": \"<rootDir>/node_modules/babel-jest\",\n    \"^.+\\\\.vue$\": \"<rootDir>/node_modules/vue-jest\",\n    '.*\\\\.(yml|html|md)$': 'jest-raw-loader'\n  },\n  // setupFiles: ['<rootDir>/tests/unit/setup.js'],\n  coverageDirectory: '<rootDir>/tests/unit/coverage',\n  collectCoverageFrom: [\n    'src/**/*.{js,vue}',\n    '!src/main.js',\n    '!src/dev/**',\n    '!**/node_modules/**'\n  ],\n  snapshotSerializers: [\n    \"jest-serializer-vue\"\n  ]\n}\n"
  },
  {
    "path": "mavon-editor.d.ts",
    "content": "import { Component } from \"vue\";\ninterface VueMavonEditor {\n  markdownIt: any;\n  mavonEditor: Component;\n  LeftToolbar: Component;\n  RightToolbar: Component;\n  install: (Vue: any) => any;\n}\ndeclare let editor: VueMavonEditor;\nexport default editor;\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"mavon-editor\",\n  \"version\": \"2.10.5\",\n  \"description\": \"Vue markdown editor\",\n  \"main\": \"dist/mavon-editor.js\",\n  \"types\": \"./mavon-editor.d.ts\",\n  \"scripts\": {\n    \"dev\": \"webpack-dev-server --progress --config webpack/webpack.dev.js\",\n    \"ci-build\": \"webpack --progress --config webpack/webpack.build.js\",\n    \"build\": \"run-s lint test ci-build\",\n    \"test\": \"jest\",\n    \"test:coverage\": \"jest --coverage\",\n    \"lint\": \"eslint --ext .js,.vue src/\",\n    \"lint:fix\": \"eslint --fix --ext .js,.vue src/\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/hinesboy/mavonEditor.git\"\n  },\n  \"keywords\": [\n    \"javascript\",\n    \"vue\",\n    \"markdown\",\n    \"editor\",\n    \"html\"\n  ],\n  \"files\": [\n    \"dist\",\n    \"mavon-editor.d.ts\",\n    \"src\"\n  ],\n  \"author\": \"hinesboy\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/hinesboy/mavonEditor/issues\"\n  },\n  \"homepage\": \"https://github.com/hinesboy/mavonEditor#readme\",\n  \"dependencies\": {\n    \"xss\": \"^1.0.10\"\n  },\n  \"devDependencies\": {\n    \"@vue/test-utils\": \"^1.1.2\",\n    \"auto-textarea\": \"^1.4.0\",\n    \"autoprefixer\": \"^8.3.0\",\n    \"babel-core\": \"^6.0.0\",\n    \"babel-eslint\": \"^8.0.2\",\n    \"babel-jest\": \"^23.6.0\",\n    \"babel-loader\": \"^7.0.0\",\n    \"babel-plugin-transform-runtime\": \"^6.23.0\",\n    \"babel-polyfill\": \"^6.26.0\",\n    \"babel-preset-env\": \"^1.6.0\",\n    \"babel-preset-stage-2\": \"^6.24.1\",\n    \"copy-webpack-plugin\": \"^4.2.3\",\n    \"css-loader\": \"^0.28.1\",\n    \"eslint\": \"^4.11.0\",\n    \"eslint-config-standard\": \"^10.2.1\",\n    \"eslint-plugin-html\": \"^4.0.0\",\n    \"eslint-plugin-import\": \"^2.8.0\",\n    \"eslint-plugin-node\": \"^5.2.1\",\n    \"eslint-plugin-promise\": \"^3.6.0\",\n    \"eslint-plugin-standard\": \"^3.0.1\",\n    \"extract-text-webpack-plugin\": \"^2.1.0\",\n    \"file-loader\": \"^0.11.1\",\n    \"github-markdown-css\": \"^2.6.0\",\n    \"html-loader\": \"^0.4.5\",\n    \"html-webpack-plugin\": \"^2.28.0\",\n    \"identity-obj-proxy\": \"^3.0.0\",\n    \"jest\": \"^23.6.0\",\n    \"jest-raw-loader\": \"^1.0.1\",\n    \"jest-serializer-vue\": \"^2.0.2\",\n    \"katex\": \"^0.11.1\",\n    \"keycode\": \"^2.1.9\",\n    \"less\": \"^2.7.2\",\n    \"less-loader\": \"^4.0.4\",\n    \"markdown-it\": \"^10.0.0\",\n    \"markdown-it-abbr\": \"^1.0.4\",\n    \"markdown-it-container\": \"^2.0.0\",\n    \"markdown-it-deflist\": \"^2.0.0\",\n    \"markdown-it-emoji\": \"^1.1.1\",\n    \"markdown-it-footnote\": \"^3.0.1\",\n    \"markdown-it-for-inline\": \"~0.1.0\",\n    \"markdown-it-highlightjs-external\": \"^1.0.1\",\n    \"markdown-it-images-preview\": \"^1.0.0\",\n    \"markdown-it-ins\": \"^2.0.0\",\n    \"markdown-it-katex-external\": \"^1.0.0\",\n    \"markdown-it-mark\": \"^2.0.0\",\n    \"markdown-it-sub\": \"^1.0.0\",\n    \"markdown-it-sup\": \"^1.0.0\",\n    \"markdown-it-task-lists\": \"^2.1.1\",\n    \"markdown-it-toc\": \"^1.1.0\",\n    \"merges-utils\": \"^1.0.2\",\n    \"npm-run-all\": \"^4.1.5\",\n    \"optimize-css-assets-webpack-plugin\": \"^1.3.1\",\n    \"postcss\": \"^5.0.10\",\n    \"postcss-advanced-variables\": \"1.2.2\",\n    \"postcss-atroot\": \"^0.1.2\",\n    \"postcss-color-function\": \"^3.0.0\",\n    \"postcss-custom-media\": \"^5.0.0\",\n    \"postcss-custom-properties\": \"^5.0.0\",\n    \"postcss-custom-selectors\": \"^3.0.0\",\n    \"postcss-extend\": \"^1.0.1\",\n    \"postcss-loader\": \"^1.3.3\",\n    \"postcss-media-minmax\": \"^2.1.0\",\n    \"postcss-mixins\": \"^5.4.1\",\n    \"postcss-nested\": \"^1.0.0\",\n    \"postcss-nested-import\": \"^0.1.0\",\n    \"postcss-nesting\": \"^2.0.6\",\n    \"postcss-partial-import\": \"^3.1.1\",\n    \"postcss-property-lookup\": \"^1.1.3\",\n    \"postcss-selector-matches\": \"^2.0.0\",\n    \"postcss-selector-not\": \"^2.0.0\",\n    \"raw-loader\": \"^0.5.1\",\n    \"style-loader\": \"^0.17.0\",\n    \"stylus\": \"^0.54.8\",\n    \"stylus-loader\": \"^2.5.1\",\n    \"url-loader\": \"^0.5.8\",\n    \"vue\": \"^2.3.4\",\n    \"vue-jest\": \"^3.0.7\",\n    \"vue-loader\": \"^13.7.0\",\n    \"vue-style-loader\": \"^3.0.0\",\n    \"vue-template-compiler\": \"^2.2.1\",\n    \"webpack\": \"^2.4.1\",\n    \"webpack-bundle-analyzer\": \"^3.3.2\",\n    \"webpack-dev-server\": \"^2.11.5\",\n    \"webpack-md5-hash\": \"^0.0.5\"\n  }\n}\n"
  },
  {
    "path": "src/components/md-toolbar-left.vue",
    "content": "<template>\n    <div class=\"v-left-item\">\n        <slot name=\"left-toolbar-before\" />\n        <button :disabled=\"!editable\" type=\"button\" v-if=\"toolbars.bold\" @click=\"$clicks('bold')\"\n                class=\"op-icon fa fa-mavon-bold\" aria-hidden=\"true\"\n                :title=\"`${d_words.tl_bold} (ctrl+b)`\"></button>\n        <button :disabled=\"!editable\" type=\"button\" v-if=\"toolbars.italic\" @click=\"$clicks('italic')\"\n                class=\"op-icon fa fa-mavon-italic\" aria-hidden=\"true\"\n                :title=\"`${d_words.tl_italic} (ctrl+i)`\"></button>\n        <div :class=\"{'selected': s_header_dropdown_open}\" :disabled=\"!editable\" type=\"button\" v-if=\"toolbars.header\" @mouseleave=\"$mouseleave_header_dropdown\" @mouseenter=\"$mouseenter_header_dropdown\"\n                class=\"op-icon fa fa-mavon-header dropdown dropdown-wrapper\" aria-hidden=\"true\"\n                :title=\"`${d_words.tl_header} (ctrl+h)`\">\n            <transition name=\"fade\">\n                <div class=\"op-header popup-dropdown\" :class=\"{'transition': transition}\" v-show=\"s_header_dropdown_open\" @mouseenter=\"$mouseenter_header_dropdown\" @mouseleave=\"$mouseleave_header_dropdown\">\n                    <div title=\"#\"  class=\"dropdown-item\" @click.stop=\"$click_header('header1')\"><span>{{d_words.tl_header_one}}</span></div>\n                    <div title=\"## \" class=\"dropdown-item\" @click.stop=\"$click_header('header2')\"><span>{{d_words.tl_header_two}}</span></div>\n                    <div title=\"### \" class=\"dropdown-item\" @click.stop=\"$click_header('header3')\"><span>{{d_words.tl_header_three}}</span></div>\n                    <div title=\"#### \" class=\"dropdown-item\" @click.stop=\"$click_header('header4')\"><span>{{d_words.tl_header_four}}</span></div>\n                    <div title=\"##### \" class=\"dropdown-item\" @click.stop=\"$click_header('header5')\"><span>{{d_words.tl_header_five}}</span></div>\n                    <div title=\"###### \" class=\"dropdown-item\" @click.stop=\"$click_header('header6')\"><span>{{d_words.tl_header_six}}</span></div>\n                </div>\n            </transition>\n        </div>\n        <span v-if=\"toolbars.header || toolbars.italic || toolbars.bold\" class=\"op-icon-divider\"></span>\n        <button :disabled=\"!editable\" type=\"button\" v-if=\"toolbars.underline\" @click=\"$clicks('underline')\"\n                class=\"op-icon fa fa-mavon-underline\"\n                :title=\"`${d_words.tl_underline} (ctrl+u)`\" aria-hidden=\"true\"></button>\n        <button :disabled=\"!editable\" type=\"button\" v-if=\"toolbars.strikethrough\" @click=\"$clicks('strikethrough')\"\n                class=\"op-icon fa fa-mavon-strikethrough\"\n                :title=\"`${d_words.tl_strikethrough} (ctrl+shift+d)`\" aria-hidden=\"true\"></button>\n        <button :disabled=\"!editable\" type=\"button\" v-if=\"toolbars.mark\" @click=\"$clicks('mark')\"\n                class=\"op-icon fa fa-mavon-thumb-tack\" :title=\"`${d_words.tl_mark} (ctrl+m)`\"\n                aria-hidden=\"true\"></button>\n        <button :disabled=\"!editable\" type=\"button\" v-if=\"toolbars.superscript\" @click=\"$clicks('superscript')\"\n                class=\"op-icon fa fa-mavon-superscript\"\n                aria-hidden=\"true\" :title=\"`${d_words.tl_superscript} (ctrl+alt+s)`\"></button>\n        <button :disabled=\"!editable\" type=\"button\" v-if=\"toolbars.subscript\" @click=\"$clicks('subscript')\"\n                class=\"op-icon fa fa-mavon-subscript\"\n                aria-hidden=\"true\" :title=\"`${d_words.tl_subscript} (ctrl+shift+s)`\"></button>\n        <button :disabled=\"!editable\" type=\"button\" v-if=\"toolbars.alignleft\" @click=\"$clicks('alignleft')\"\n                class=\"op-icon fa fa-mavon-align-left\"\n                aria-hidden=\"true\" :title=\"`${d_words.tl_alignleft} (ctrl+l)`\">\n        </button>\n        <button :disabled=\"!editable\" type=\"button\" v-if=\"toolbars.aligncenter\" @click=\"$clicks('aligncenter')\"\n                class=\"op-icon fa fa-mavon-align-center\"\n                aria-hidden=\"true\" :title=\"`${d_words.tl_aligncenter} (ctrl+e)`\"></button>\n        <button :disabled=\"!editable\" type=\"button\" v-if=\"toolbars.alignright\" @click=\"$clicks('alignright')\"\n                class=\"op-icon fa fa-mavon-align-right\"\n                aria-hidden=\"true\" :title=\"`${d_words.tl_alignright} (ctrl+r)`\"></button>\n        <span\n                v-if=\"toolbars.superscript || toolbars.subscript || toolbars.underline || toolbars.strikethrough || toolbars.mark\"\n                class=\"op-icon-divider\"></span>\n        <button :disabled=\"!editable\" type=\"button\" v-if=\"toolbars.quote\" @click=\"$clicks('quote')\"\n                class=\"op-icon fa fa-mavon-quote-left\" aria-hidden=\"true\"\n                :title=\"`${d_words.tl_quote} (ctrl+q)`\"></button>\n        <button :disabled=\"!editable\" type=\"button\" v-if=\"toolbars.ol\" @click=\"$clicks('ol')\"\n                class=\"op-icon fa fa-mavon-list-ol\" aria-hidden=\"true\"\n                :title=\"`${d_words.tl_ol} (ctrl+o)`\"></button>\n        <button :disabled=\"!editable\" type=\"button\" v-if=\"toolbars.ul\" @click=\"$clicks('ul')\"\n                class=\"op-icon fa fa-mavon-list-ul\" aria-hidden=\"true\"\n                :title=\"`${d_words.tl_ul} (ctrl+alt+u)`\"></button>\n        <span v-if=\"toolbars.ul || toolbars.ol || toolbars.quote\" class=\"op-icon-divider\"></span>\n        <button :disabled=\"!editable\" type=\"button\" v-if=\"toolbars.link\" @click.stop=\"$toggle_imgLinkAdd('link')\"\n                class=\"op-icon fa fa-mavon-link\" aria-hidden=\"true\"\n                :title=\"`${d_words.tl_link} (ctrl+l)`\"></button>\n        <div :disabled=\"!editable\" :class=\"{'selected': s_img_dropdown_open}\" type=\"button\" v-if=\"toolbars.imagelink\" @mouseleave=\"$mouseleave_img_dropdown\" @mouseenter=\"$mouseenter_img_dropdown\"\n                class=\"op-icon fa fa-mavon-picture-o dropdown dropdown-wrapper\"\n                aria-hidden=\"true\">\n            <transition name=\"fade\">\n                <div  class=\"op-image popup-dropdown\" :class=\"{'transition': transition}\" v-show=\"s_img_dropdown_open\" @mouseleave=\"$mouseleave_img_dropdown\" @mouseenter=\"$mouseenter_img_dropdown\">\n                    <div  class=\"dropdown-item\" @click.stop=\"$toggle_imgLinkAdd('imagelink')\"><span>{{d_words.tl_image}}</span></div>\n                    <div class=\"dropdown-item\" style=\"overflow: hidden\">\n                        <input type=\"file\" accept=\"image/gif,image/jpeg,image/jpg,image/png,image/svg\" @change=\"$imgAdd($event)\" multiple=\"multiple\"/>{{d_words.tl_upload}}\n                    </div>\n\n                    <div\n                        v-for=\"(item, index) in img_file\"\n                        v-if=\"item && item[1]\"\n                        class=\"dropdown-item dropdown-images\"\n                        :title=\"item[1].name\"\n                        :key=\"index\"\n                        @click.stop=\"$imgFileListClick(index)\"\n                    >\n                        <span>{{item[1].name}}</span>\n                        <button slot=\"right\" type=\"button\" @click.stop=\"$imgDel(index)\"\n                                class=\"op-icon fa fa-mavon-times\" aria-hidden=\"true\"\n                                :title=\"d_words.tl_upload_remove\"></button>\n                        <!-- 缩略图展示 -->\n                        <img class = \"image-show\" :class=\"{'transition': transition}\" :src=\"item[1].miniurl\" alt=\"none\">\n                    </div>\n                </div>\n            </transition>\n        </div>\n        <button :disabled=\"!editable\" type=\"button\" v-if=\"toolbars.code\" @click=\"$clicks('code')\"\n                class=\"op-icon fa fa-mavon-code\" aria-hidden=\"true\"\n                :title=\"`${d_words.tl_code} (ctrl+alt+c)`\"></button>\n        <button :disabled=\"!editable\" type=\"button\" v-if=\"toolbars.table\" @click=\"$clicks('table')\"\n                class=\"op-icon fa fa-mavon-table\" aria-hidden=\"true\"\n                :title=\"`${d_words.tl_table} (ctrl+alt+t)`\"></button>\n        <span v-if=\"toolbars.link || toolbars.imagelink || toolbars.code || toolbars.table\"\n              class=\"op-icon-divider\"></span>\n        <button type=\"button\" v-if=\"toolbars.undo\" @click=\"$clicks('undo')\" class=\"op-icon fa fa-mavon-undo\"\n                aria-hidden=\"true\" :title=\"`${d_words.tl_undo} (ctrl+z)`\"></button>\n        <button type=\"button\" v-if=\"toolbars.redo\" @click=\"$clicks('redo')\" class=\"op-icon fa fa-mavon-repeat\"\n                aria-hidden=\"true\"\n                :title=\"`${d_words.tl_redo} (ctrl+y)`\"></button>\n        <button type=\"button\" v-if=\"toolbars.trash\" @click=\"$clicks('trash')\" class=\"op-icon fa fa-mavon-trash-o\"\n                aria-hidden=\"true\"\n                :title=\"`${d_words.tl_trash} (ctrl+breakspace)`\"></button>\n        <button type=\"button\" v-if=\"toolbars.save\" @click=\"$clicks('save')\" class=\"op-icon fa fa-mavon-floppy-o\"\n                aria-hidden=\"true\"\n                :title=\"`${d_words.tl_save} (ctrl+s)`\"></button>\n        <slot name=\"left-toolbar-after\" />\n\n        <!-- 添加image链接 -->\n        <transition name=\"fade\">\n            <div class=\"add-image-link-wrapper\"  v-if=\"s_img_link_open\">\n                <div class=\"add-image-link\">\n                    <i @click.stop.prevent=\"s_img_link_open = false\" class=\"fa fa-mavon-times\"\n                       aria-hidden=\"true\"></i>\n                    <h3 class=\"title\">{{link_type == 'link' ? d_words.tl_popup_link_title : d_words.tl_popup_img_link_title}}</h3>\n                    <div class=\"link-text input-wrapper\">\n                        <input ref=\"linkTextInput\" type=\"text\" v-model=\"link_text\" :placeholder=\"link_type == 'link' ? d_words.tl_popup_link_text : d_words.tl_popup_img_link_text\">\n                    </div>\n                    <div class=\"link-addr input-wrapper\">\n                        <input type=\"text\" v-model=\"link_addr\" :placeholder=\"link_type == 'link' ? d_words.tl_popup_link_addr : d_words.tl_popup_img_link_addr\">\n                    </div>\n                    <div class=\"op-btn cancel\" @click.stop=\"s_img_link_open = false\">{{d_words.tl_popup_link_cancel}}</div>\n                    <div class=\"op-btn sure\" @click.stop=\"$imgLinkAdd()\">{{d_words.tl_popup_link_sure}}</div>\n                </div>\n            </div>\n        </transition>\n    </div>\n</template>\n<script type=\"text/ecmascript-6\">\n    export default {\n        name: 's-md-toolbar-left',\n        props: {\n            editable: { // 是否开启编辑\n                type: Boolean,\n                default: true\n            },\n            transition: { // TODO: 是否开启动画过渡\n                type: Boolean,\n                default: true\n            },\n            toolbars: { // 工具栏\n                type: Object,\n                required: true\n            },\n            d_words: {\n                type: Object,\n                required: true\n            },\n            image_filter: {\n                type: Function,\n                default: null\n            }\n        },\n        data() {\n            return {\n                // [index, file]\n                img_file: [[0, null]],\n                img_timer: null,\n                header_timer: null,\n                s_img_dropdown_open: false,\n                s_header_dropdown_open: false,\n                s_img_link_open: false,\n                trigger: null,\n                num: 0,\n                link_text: '',\n                link_addr: '',\n                link_type: 'link'\n            }\n        },\n        methods: {\n            $imgLinkAdd() {\n                this.$emit('toolbar_left_addlink', this.link_type, this.link_text, this.link_addr);\n                this.s_img_link_open = false;\n            },\n            $toggle_imgLinkAdd(type) {\n                this.link_type = type;\n                this.link_text = this.link_addr = '';\n                this.s_img_link_open = true;\n                this.$nextTick(() => {\n                    this.$refs.linkTextInput.focus()\n                })\n                this.s_img_dropdown_open = false;\n            },\n            $imgFileListClick(pos) {\n                this.$emit('imgTouch', this.img_file[pos]);\n            },\n            $changeUrl(index,url) {\n                this.img_file[index][0] = url;\n            },\n            $imgFileAdd($file) {\n                // this.img_file[0][0] = this.num;\n                // this.img_file[0][1] = $file;\n                // this.img_file.unshift([(this.num + 1), null]);\n                // this.num = this.num + 1;\n                this.img_file.push([++this.num, $file])\n                this.$emit('imgAdd', this.num, $file);\n                this.s_img_dropdown_open = false;\n            },\n            $imgFilesAdd($files) {\n                // valid means if the image_filter exist.\n                let valid = (typeof this.image_filter === 'function');\n                for (let i = 0; i < $files.length; i++) {\n                    if (valid && this.image_filter($files[i]) === true) {\n                        this.$imgFileAdd($files[i]);\n                    } else if (!valid && $files[i].type.match(/^image\\//i)) {\n                        this.$imgFileAdd($files[i]);\n                    }\n                }\n            },\n            $imgAdd($e) {\n                this.$imgFilesAdd($e.target.files);\n                $e.target.value = ''; // 初始化\n            },\n            $imgDel(pos) {\n                this.$emit('imgDel', this.img_file[pos]);\n               this.img_file.splice(pos, 1);\n               this.num--;\n\n                this.s_img_dropdown_open = false;\n            },\n            isEqualName(filename, pos) {\n                if (this.img_file[pos][1]) {\n                    if (this.img_file[pos][1].name === filename || this.img_file[pos][1]._name === filename) {\n                        return true\n                    }\n                }\n                return false\n            },\n            $imgDelByFilename(filename) {\n                var pos = 0;\n                while (this.img_file.length > pos) {\n                    if (this.img_file[pos][1] === filename || this.isEqualName(filename, pos)) {\n                        this.$imgDel(pos);\n                        return true;\n                    }\n                    pos += 1;\n                }\n                return false;\n            },\n            $imgAddByFilename(filename, $file) {\n                for (var i = 0; i < this.img_file.length; i++)\n                    { if (this.img_file[i][0] === filename) return false; }\n                this.img_file[0][0] = filename;\n                this.img_file[0][1] = $file;\n                this.img_file[0][2] = filename;\n                this.img_file.unshift(['./' + (this.num), null])\n                this.$emit('imgAdd', this.img_file[1][0], $file, false);\n                return true;\n            },\n            $imgAddByUrl(filename, $url) {\n                for (var i = 0; i < this.img_file.length; i++)\n                    { if (this.img_file[i][0] === filename) return false; }\n                this.img_file[0][0] = filename;\n                this.img_file[0][1] = $url;\n                this.img_file.unshift(['./' + (this.num), null])\n                return true;\n            },\n            $imgUpdateByFilename(filename, $file) {\n                for (var i = 0; i < this.img_file.length; i++) {\n                    if (this.img_file[i][0] === filename || this.isEqualName(filename, i)) {\n                        this.img_file[i][1] = $file;\n                        this.$emit('imgAdd', filename, $file, false);\n                        return true;\n                    }\n                }\n                return false;\n            },\n            // 工具栏功能图标click-----------------\n            $mouseenter_img_dropdown() {\n                if (this.editable) {\n                    clearTimeout(this.img_timer)\n                    this.s_img_dropdown_open = true\n                }\n            },\n            $mouseleave_img_dropdown() {\n                let vm = this\n                this.img_timer = setTimeout(function() {\n                    vm.s_img_dropdown_open = false\n                },200)\n            },\n            $mouseenter_header_dropdown() {\n                if (this.editable) {\n                    clearTimeout(this.header_timer)\n                    this.s_header_dropdown_open = true\n                }\n            },\n            $mouseleave_header_dropdown() {\n                let vm = this\n                this.header_timer = setTimeout(function() {\n                    vm.s_header_dropdown_open = false\n                },200)\n            },\n            $clicks(_type) {\n                // 让父节点来绑定事件并\n                if (this.editable) {\n                    this.$emit('toolbar_left_click', _type);\n                }\n            },\n            $click_header(_type) {\n                // 让父节点来绑定事件并\n                this.$emit('toolbar_left_click', _type);\n                this.s_header_dropdown_open = false\n            },\n            handleClose(e) {\n                this.s_img_dropdown_open = false;\n            }\n        },\n        watch:{\n            s_img_link_open(newVlaue) {\n              // fix issue #644\n              this.$parent.$el.style.zIndex = newVlaue ? 1501 : 1500;\n            }\n        }\n    }\n</script>\n<style lang=\"stylus\" scoped>\n    .op-icon.dropdown-wrapper.dropdown\n        position relative\n        &[type=button]\n            -webkit-appearance unset\n        .popup-dropdown\n            position absolute\n            display block\n            background #fff\n            top 32px\n            left -45px\n            min-width 130px\n            z-index 1600\n            border 1px solid #ebeef5\n            border-radius 4px\n            box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1)\n            .dropdown-item:first-child\n                border-top-left-radius 3px\n                border-top-right-radius 3px\n            .dropdown-item:last-child\n                border-bottom-left-radius 3px\n                border-bottom-right-radius 3px\n            &.op-header\n                left -30px\n                min-width 90px\n            &.fade-enter-active, &.fade-leave-active\n                opacity 1\n            &.fade-enter, &.fade-leave-active\n                opacity 0\n            &.transition\n              &, .dropdown-item\n                transition all 0.2s linear 0s\n        .dropdown-item\n            height 40px\n            line-height @height\n            font-size 14px\n            color #606266\n            position relative\n            &:hover\n                color #303133\n                background-color #e9e9eb\n            input\n                position absolute\n                font-size 100px\n                right 0\n                top 0\n                opacity 0\n                cursor pointer\n        .dropdown-images\n            box-sizing border-box\n            button\n                position absolute\n                top -1px\n                right 5px\n                font-size: 14px\n                &:hover\n                    color #F56C6C\n                    background-color: transparent\n            span\n                display inline-block\n                width 80px\n                white-space nowrap\n                overflow hidden\n                text-overflow ellipsis\n            &:hover\n                .image-show\n                    display block !important\n            .image-show\n                display none\n                position absolute\n                left -128px\n                top 0\n                width 120px\n                height 90px\n                object-fit contain\n                border 1px solid #F2F6FC\n                &.transition\n                    transition all 0.2s linear 0s\n            &.transition\n                transition all 0.2s linear 0s\n.add-image-link-wrapper\n    position fixed\n    left 0\n    right 0\n    top 0\n    bottom 0\n    background rgba(0, 0, 0, 0.7)\n    z-index 1600\n    transition all 0.1s linear 0s\n    &.fade-enter-active, &.fade-leave-active\n        opacity 1\n    &.fade-enter, &.fade-leave-active\n        opacity 0\n    .add-image-link\n        position fixed\n        box-sizing border-box\n        text-align center\n        width 24%\n        left 38%\n        @media only screen and (max-width 1500px)\n            width 34%\n            left 33%\n        @media only screen and (max-width 1000px)\n            width 50%\n            left 25%\n        @media only screen and (max-width 600px)\n            width 80%\n            left 10%\n        height auto\n        padding 40px\n        top 25%\n        transition all 0.1s linear 0s\n        z-index 3\n        background #fff\n        border-radius 2px\n\n        i\n            font-size 24px\n            position absolute\n            right 8px\n            top 6px\n            color rgba(0, 0, 0, 0.7)\n            cursor pointer\n        .title\n            font-size 20px\n            margin-bottom 30px\n            margin-top 10px\n            font-weight 500 !important\n        .input-wrapper\n            margin-top 10px\n            width 80%\n            border  1px solid #eeece8\n            text-align left\n            margin-left 10%\n            height 35px\n            input\n                height 32px\n                line-height 32px\n                font-size 15px\n                width 90%\n                margin-left 8px\n                border none\n                outline none\n        .op-btn\n            width 100px\n            height 35px\n            display inline-block\n            margin-top 30px\n            cursor pointer\n            text-align center\n            line-height @height\n            opacity 0.9\n            border-radius 2px\n            letter-spacing 1px\n            font-size 15px\n        .op-btn.sure\n            background #2185d0\n            color #fff\n            margin-left 5%\n            &:hover\n                opacity 1\n        .op-btn.cancel\n            border 1px solid #bcbcbc\n            color #bcbcbc\n            &:hover\n                color #000\n\n</style>\n"
  },
  {
    "path": "src/components/md-toolbar-right.vue",
    "content": "<template>\r\n      <div class=\"v-right-item\">\r\n        <slot name=\"right-toolbar-before\" />\r\n        <button type=\"button\" v-if=\"toolbars.navigation\" @click=\"$clicks('navigation')\" v-show=\"!s_navigation\"\r\n                class=\"op-icon fa fa-mavon-bars\"\r\n                aria-hidden=\"true\" :title=\"`${d_words.tl_navigation_on} (F8)`\"></button>\r\n        <button type=\"button\" v-if=\"toolbars.navigation\" @click=\"$clicks('navigation')\" v-show=\"s_navigation\"\r\n                class=\"op-icon fa fa-mavon-bars selected\"\r\n                aria-hidden=\"true\" :title=\"`${d_words.tl_navigation_off} (F8)`\"></button>\r\n        <button type=\"button\" v-if=\"toolbars.preview\" @click=\"$clicks('preview')\" v-show=\"s_preview_switch\"\r\n                class=\"op-icon fa fa-mavon-eye-slash selected\"\r\n                aria-hidden=\"true\" :title=\"`${d_words.tl_edit} (F9)`\"></button>\r\n        <button type=\"button\" v-if=\"toolbars.preview\" @click=\"$clicks('preview')\" v-show=\"!s_preview_switch\"\r\n                class=\"op-icon fa fa-mavon-eye\"\r\n                aria-hidden=\"true\" :title=\"`${d_words.tl_preview} (F9)`\"></button>\r\n        <button type=\"button\" v-if=\"toolbars.fullscreen\" @click=\"$clicks('fullscreen')\" v-show=\"!s_fullScreen\"\r\n                class=\"op-icon fa fa-mavon-arrows-alt\"\r\n                :title=\"`${d_words.tl_fullscreen_on} (F10)`\" aria-hidden=\"true\"></button>\r\n        <button type=\"button\" v-if=\"toolbars.fullscreen\" @click=\"$clicks('fullscreen')\" v-show=\"s_fullScreen\"\r\n                class=\"op-icon fa fa-mavon-compress selected\"\r\n                :title=\"`${d_words.tl_fullscreen_off} (F10)`\" aria-hidden=\"true\"></button>\r\n        <button type=\"button\" v-if=\"toolbars.readmodel\" @click=\"$clicks('read')\" class=\"op-icon fa fa-mavon-window-maximize\" aria-hidden=\"true\"\r\n                :title=\"`${d_words.tl_read} (F11)`\"></button>\r\n        <button type=\"button\" v-if=\"toolbars.subfield\" @click=\"$clicks('subfield')\" class=\"op-icon fa fa-mavon-columns\" aria-hidden=\"true\"\r\n                :class = \"{'selected': s_subfield}\" :title=\"`${s_subfield ? d_words.tl_single_column : d_words.tl_double_column} (F12)`\"></button>\r\n        <span\r\n                v-if=\" toolbars.help && toolbars.htmlcode && toolbars.readmodel && toolbars.fullscreen && toolbars.subfield && toolbars.navigation\"\r\n                class=\"op-icon-divider\"></span>\r\n        <button type=\"button\" v-if=\"toolbars.htmlcode\" @click=\"$clicks('html')\" v-show=\"!s_html_code\" class=\"op-icon fa fa-mavon-code\"\r\n                :title=\"d_words.tl_html_on\"\r\n                aria-hidden=\"true\"></button>\r\n        <button type=\"button\" v-if=\"toolbars.htmlcode\" @click=\"$clicks('html')\" v-show=\"s_html_code\"\r\n                class=\"op-icon fa fa-mavon-code selected\"\r\n                :title=\"d_words.tl_html_off\" aria-hidden=\"true\"></button>\r\n        <button type=\"button\"  v-if=\"toolbars.help\" @click=\"$clicks('help')\" class=\"op-icon fa fa-mavon-question-circle\"\r\n                 style=\"font-size: 17px;padding: 5px 6px 5px 3px\"\r\n                 :title=\"d_words.tl_help\" aria-hidden=\"true\"></button>\r\n        <slot name=\"right-toolbar-after\" />\r\n      </div>\r\n</template>\r\n<script type=\"text/ecmascript-6\">\r\nexport default {\r\n    name: 's-md-toolbar-right',\r\n    props: {\r\n        // 工具栏\r\n        s_subfield: {\r\n            type: Boolean ,\r\n            required: true\r\n        },\r\n        toolbars: { type: Object, required: true },\r\n        s_preview_switch: { type: Boolean, required: true },\r\n        s_fullScreen: { type: Boolean, required: true },\r\n        s_html_code: { type: Boolean, required: true },\r\n        s_navigation: { type: Boolean, required: true },\r\n        d_words: {\r\n            type: Object,\r\n            required: true\r\n        }\r\n    },\r\n    methods: {\r\n        // 工具栏功能图标click-----------------\r\n        $clicks(_type) {\r\n            // 让父节点来绑定事件并\r\n            this.$emit('toolbar_right_click', _type);\r\n        }\r\n    }\r\n}\r\n</script>\r\n"
  },
  {
    "path": "src/dev/app.vue",
    "content": "<template>\n    <div id=\"app\">\n        <select @change=\"opchange\" class=\"page-lang\">\n            <option value=\"zh-CN\">简体中文</option>\n            <option value=\"zh-TW\">正體中文</option>\n            <option value=\"en\">English</option>\n            <option value=\"fr\">Français</option>\n            <option value=\"de\">Deutsch</option>\n            <option value=\"ja\">日本語 </option>\n            <option value=\"pt-BR\">Português</option>\n            <option value=\"ru\">Русский</option>\n        </select>\n        <section class=\"page-header\">\n            <h1 class=\"project-name\">mavonEditor</h1>\n            <h3 class=\"project-tagline\">{{d_words.sub_title}}</h3>\n            <a href=\"https://github.com/hinesboy/mavonEditor\" class=\"btn\">View on GitHub</a>\n            <a href=\"https://github.com/hinesboy/mavonEditor/zipball/master\" class=\"btn\">Download .zip</a>\n            <a href=\"https://github.com/hinesboy/mavonEditor/master\" class=\"btn\">Download .tar.gz</a>\n        </section>\n        <div v-if=\"!screen_phone\" class=\"item\">\n            <h2 class=\"item-header\">\n                {{d_words.default_setting}}\n            </h2>\n            <div class=\"item-button\">\n              <button @click=\"clearCache\">clear cache</button>\n              <button @click=\"uploadimg\">upload</button>\n              <button @click=\"imgreplace\">imgreplace</button>\n              <input type=\"text\" v-model=\"imgName\" />\n              <button @click=\"imgdelete\">delete</button>\n              <div class=\"switch-code-style\">\n                <span>code style:</span>\n                <select v-model=\"codeStyle\">\n                  <option v-for=\"(val, key) in styles\" :value=\"key\">{{ key }}</option>\n                </select>\n              </div>\n            </div>\n            <mavon-editor ref=md :subfield=\"subfield\" :toolbarsFlag=\"toolbarsFlag\" :editable=\"editable\"\n                          :language=\"d_language\" @change=\"change\" @save=\"saveone\" :ishljs=\"true\" class=\"item-editor\" v-model=\"help1\"\n                          :autofocus=\"autofocus\"\n                          :shortCut=\"true\"\n                          :externalLink=\"external_link\"\n                          @imgAdd=\"$imgAdd\" @imgDel=\"$imgDel\" @subfieldtoggle=\"$subfieldtoggle\" @previewtoggle=\"$previewtoggle\"\n                          :imageFilter=\"image_filter\"\n                          :boxShadow=\"true\"\n                          :scrollStyle=\"true\"\n                          :transition=\"true\"\n                          :codeStyle=\"codeStyle\"\n                          box-shadow-style=\"0 2px 12px 0 rgba(0, 0, 0, 0.1)\"\n                          toolbars-background=\"#ffffff\"\n                          preview-background=\"#fbfbfb\">\n                <!-- <template slot=\"left-toolbar-before\">\n                    左工具栏前\n                </template>\n                <template slot=\"left-toolbar-after\">\n                    左工具栏后\n                </template>\n\n                <template slot=\"right-toolbar-before\">\n                    右工具栏前\n                </template>\n                <template slot=\"right-toolbar-after\">\n                    右工具栏后\n                </template> -->          \n            </mavon-editor>\n            <button ref=\"diy\" type=\"button\" @click=\"$click('selftest')\" class=\"op-icon fa fa-mavon-align-left\"\n                aria-hidden=\"true\" title=\"自定义\"></button>\n        </div>\n        <!--自定义-->\n        <div v-if=\"screen_phone\" class=\"item\">\n            <h2 class=\"item-header\">\n                {{d_words.customize_setting}}\n            </h2>\n            <mavon-editor :language=\"d_language\" @save=\"savetwo\" :toolbars=\"toolbars\" class=\"item-editor\"\n                          v-model=\"help2\"></mavon-editor>\n        </div>\n        <div class=\"item\">\n      <span style=\"display: block;margin: 30px 0 15px 0;color: #1e6bb8\" class=\"\">\n        {{d_words.mark}}\n      </span>\n        </div>\n        <div class=\"item\">\n            <h2 class=\"item-header\">\n                {{d_words.detail}}<a href=\"https://github.com/hinesboy/mavonEditor\">GitHub</a>\n            </h2>\n        </div>\n    </div>\n</template>\n\n<script type=\"text/ecmascript-6\">\n    import styles from '../lib/core/hljs/lang.hljs.css.js'\n    import {CONFIG} from '../lib/config.js'\n    export default {\n        name: 'app',\n        data () {\n            return {\n                d_language: 'zh-CN',\n                help1: '',\n                help2: '',\n                d_words: {},\n                screen_phone: false,\n                toolbars: {\n                    underline: true, // 下划线\n                    strikethrough: true, // 中划线\n                    alignCenter: true, // 中划线\n                    undo: true,\n                    save: true,\n                    fullscreen: true, // 全屏编辑\n                    navigation: true,\n                    preview: true,\n                    subfield: false\n                },\n                autofocus: true,\n                subfield: true,\n                editable: true,\n                toolbarsFlag: true,\n                img_file: {},\n                external_link: {\n                    markdown_css: function() {\n                        return '/markdown/github-markdown.min.css';\n                    },\n                    hljs_js: function() {\n                        return '/highlightjs/highlight.min.js';\n                    },\n                    hljs_css: function(css) {\n                        return '/highlightjs/styles/' + css + '.min.css';\n                    },\n                    hljs_lang: function(lang) {\n                        return '/highlightjs/languages/' + lang + '.min.js';\n                    },\n                    katex_css: function() {\n                        return '/katex/katex.min.css';\n                    },\n                    katex_js: function() {\n                        return '/katex/katex.min.js';\n                    }\n                },\n                toolbar_settings: {\n                    undo: true, // 上一步\n                    redo: true, // 下一步\n                    bold: true, // 粗体\n                    italic: true, // 斜体\n                    header: true, // 标题\n                    underline: true, // 下划线\n                    strikethrough: true, // 中划线\n                    quote: true, // 引用\n                    ol: true, // 有序列表\n                    ul: true, // 无序列表\n                    link: true, // 链接\n                    code: true, // code\n                    readmodel: true, // 沉浸式阅读\n                    htmlcode: true, // 展示html源码\n                    /* 2.1.8 */\n                    alignleft: true, // 左对齐\n                    aligncenter: true, // 居中\n                    alignright: true, // 右对齐\n                    /* 2.2.1 */\n                    subfield: true, // 单双栏模式\n                    preview: true, // 预览\n                    /* 1.4.2 */\n                    navigation: true // 导航目录\n                },\n                image_filter: function($files) {\n                    console.log('image_filter files:', $files);\n                    // console.log('here for you', $files);\n                    return true;\n                },\n                imageClick: function (file) {\n                    console.log(file);\n                },\n                imgName: '',\n                codeStyle: \"github\",\n                styles\n            }\n        },\n        created () {\n            var $vm = this;\n            this.initLanguage();\n            this.sizeToStatus()\n            window.addEventListener('resize', function() {\n                // 媒介查询\n                $vm.sizeToStatus()\n            })\n        },\n        mounted() {\n            var md = this.$refs.md;\n            var toolbar_left = md.$refs.toolbar_left;\n            var diy = this.$refs.diy;\n            toolbar_left.$el.append(diy)\n            // toolbar_left.$el.append(diy.$el)\n            // console.log(toolbar_left)\n        },\n        methods: {\n            clearCache() {\n                this.$refs.md.$emptyHistory()\n            },\n            $click(val) {\n                console.log(val);\n            },\n            imgreplace($e) {\n                console.log('here');\n                this.$refs.md.$imglst2Url([\n                    [0, 'https://raw.githubusercontent.com/hinesboy/mavonEditor/master/img/cn/cn-common.png'],\n                    [1, 'https://raw.githubusercontent.com/hinesboy/mavonEditor/master/img/cn/cn-common.png']\n                ]);\n            },\n            uploadimg($e) {\n                console.log(this.img_file);\n                for (var _img in this.img_file) {\n                    this.$refs.md.$img2Url(_img, 'https://raw.githubusercontent.com/hinesboy/mavonEditor/master/img/cn/cn-common.png')\n                }\n                /* var formdata = new FormData();\n                for (var _img in this.img_file) {\n                    formdata.append(_img, this.img_file[_img]);\n                    // _imglst.push([_img, this.img_file[_img]]);\n                }\n                axios({\n                    url: 'http://127.0.0.1/index.php',\n                    method: 'post',\n                    data: formdata,\n                    headers: {'Content-Type': 'multipart/form-data'},\n                }).then((res) => {\n                    console.log(res);\n                }) */\n            },\n            $imgAdd(pos, $file) {\n                console.log('imgAdd', pos, $file);\n                this.img_file[pos] = $file;\n                // console.log(this.$refs.md.$refs.toolbar_left.$imgDelByFilename(pos));\n                // console.log(this.$refs.md.$refs.toolbar_left.$imgAddByFilename('./test', $file))\n                // console.log(this.$refs.md.$refs.toolbar_left.$imgUpdateByFilename('./test', $file))\n                // console.log(this.$refs.md.$refs.toolbar_left.$imgAddByFilename('./test', $file))\n                // console.log(this.$refs.md);\n                // this.$refs.md.$imgUpdateByUrl(pos, 'http://pic.58pic.com/58pic/13/46/50/61758PICWZY_1024.jpg');\n            },\n            $imgDel(pos) {\n                console.log('imgDel', pos);\n                delete this.img_file[pos];\n            },\n            sizeToStatus () {\n                if (window.matchMedia('(min-width:768px)').matches) {\n                    // > 768\n                    this.screen_phone = false\n                } else {\n                    // <  768\n                    this.screen_phone = true\n                }\n            },\n            saveone (val, render) {\n                alert('save one')\n            },\n            savetwo (val, render) {\n                alert('save two')\n            },\n            change (val, render) {\n                console.log(val)\n            },\n            opchange (event) {\n                this.d_language = event.target.value;\n            },\n            initLanguage() {\n                this.d_words = CONFIG[`words_${this.d_language}`]\n                this.help1 = CONFIG[`help_${this.d_language}`]\n                this.help2 = CONFIG[`help_${this.d_language}`]\n            },\n            $subfieldtoggle(flag , value) {\n                console.log('sufield toggle' + flag)\n            },\n            $previewtoggle(flag , value) {\n                console.log('preview toggle' + flag)\n            },\n            imgdelete() {\n                var md = this.$refs.md;\n                var toolbar_left = md.$refs.toolbar_left;\n                toolbar_left.$imgDelByFilename(this.imgName);\n            }\n        },\n        watch: {\n            d_language: function () {\n                this.initLanguage();\n            }\n        }\n    }\n</script>\n\n<style lang=\"stylus\" rel=\"stylesheet/stylus\">\n    body\n        margin 0\n        padding 0\n        padding-bottom 50px\n    .switch-code-style\n        display inline\n        margin-left 8px\n    .page-lang\n        position absolute\n        top 15px\n        right 2%\n    .page-header\n        box-sizing border-box\n        padding 90px 15px\n        width 100%\n        height 380px\n        color #fff\n        text-align center\n        background-color #159957\n        background-image linear-gradient(120deg, #155799, #159957)\n        @media only screen and (max-width 958px)\n            height 300px\n            padding 60px 15px\n        @media only screen and (max-width 768px)\n            height 370px\n            padding 50px 15px\n        .project-name\n            margin-top 0\n            margin-bottom 0.1rem\n            font-size 2.25rem\n            @media only screen and (max-width 768px)\n                font-size 25px\n        .project-tagline\n            margin-bottom 2rem\n            font-weight normal\n            opacity 0.7\n            @media only screen and (max-width 768px)\n                font-size 16px\n        .btn\n            padding: 0.6rem 0.9rem\n            font-size: 0.9rem\n            display: inline-block\n            margin-bottom: 1rem\n            color: rgba(255, 255, 255, 0.7)\n            background-color: rgba(255, 255, 255, 0.08)\n            border-color: rgba(255, 255, 255, 0.2)\n            border-style: solid\n            border-width: 1px\n            border-radius: 0.3rem\n            transition: color 0.2s, background-color 0.2s, border-color 0.2s\n            text-decoration: none\n            margin-left 20px\n            box-sizing border-box\n            &:hover\n                color: rgba(255, 255, 255, 0.8)\n                text-decoration: none\n                background-color: rgba(255, 255, 255, 0.2)\n                border-color: rgba(255, 255, 255, 0.3)\n            @media only screen and (max-width 768px)\n                display: block\n                width: 90%\n                padding: 0.75rem\n                font-size: 0.9rem\n                margin-left 5%\n    .item\n        width 75%\n        margin-left 12.5%\n        @media only screen and (max-width 1100px)\n            width 85%\n            margin-left 7.5%\n        @media only screen and (max-width 768px)\n            width 92%\n            margin-left 4%\n        .item-header\n            margin-top: 3.5rem\n            margin-bottom: 2rem\n            font-weight: normal\n            color: #159957\n            @media only screen and (max-width 768px)\n                margin-top: 2rem\n                margin-bottom: 1rem\n        .item-button\n            margin-bottom: 4rem\n        .item-editor\n            width 100%\n            height 700px\n            @media only screen and (max-width 1600px)\n                height 550px\n</style>\n"
  },
  {
    "path": "src/dev/assets/config.js",
    "content": "/**\n * Created by zhy on 2017/5/11.\n */\nimport help_zh_CN from './lang/zh-CN/help_zh-CN.md'\nimport help_zh_TW from './lang/zh-TW/help_zh-TW.md'\nimport help_en from './lang/en/help_en.md'\nimport help_fr from './lang/fr/help_fr.md'\nimport help_pt_BR from './lang/pt-BR/help_pt-BR.md'\nimport help_ru from './lang/ru/help_ru.md'\nimport help_de from './lang/de/help_de.md'\n\nimport words_zh_CN from './lang/zh-CN/words_zh-CN.json'\nimport words_zh_TW from './lang/zh-TW/words_zh-TW.json'\nimport words_en from './lang/en/words_en.json'\nimport words_fr from './lang/fr/words_fr.json'\nimport words_pt_BR from './lang/pt-BR/words_pt-BR.json'\nimport words_ru from './lang/ru/words_ru.json'\nimport words_de from './lang/de/words_de.json'\n\nexport const CONFIG = {\n  'help_zh-CN': help_zh_CN,\n  'help_zh-TW': help_zh_TW,\n  'help_pt-BR': help_pt_BR,\n  'help_en': help_en,\n  'help_fr': help_fr,\n  'help_ru': help_ru,\n  'help_de': help_de,\n  'words_zh-CN': words_zh_CN,\n  'words_zh-TW': words_zh_TW,\n  'words_pt-BR': words_pt_BR,\n  'words_en': words_en,\n  'words_fr': words_fr,\n  'words_ru': words_ru,\n  'words_de': words_de\n}\n"
  },
  {
    "path": "src/dev/assets/lang/de/help_de.md",
    "content": "@[toc](Catalog)\n\nMarkdown Handbuch\n===\n> Details: [http://commonmark.org/help/](http://commonmark.org/help/)\n\n## **Fett**\n```\n**fett**\n__fett__\n```\n## *Kursiv*\n```\n*kursiv*\n_kursiv_\n```\n## Überschriften\n```\n# h1 #\nh1\n====\n## h2 ##\nh2\n----\n### h3 ###\n#### h4 ####\n##### h5 #####\n###### h6 ######\n```\n## Trennlinien\n```\n***\n---\n```\n****\n## ^Hoch^gestellt & ~Tief~gestellt\n```\nhochgestellt x^2^\ntiefgestellt H~2~0\n```\n## ++Unterstrichen++ & ~~Durchgestrichen~~\n```\n++unterstrichen++\n~~durchgestrichen~~\n```\n## ==Markiert==\n```\n==markiert==\n```\n## Zitat\n\n```\n> zitat 1\n>> zitat 2\n>>> zitat 3\n...\n```\n\n## Liste\n```\nol\n1.\n2.\n3.\n...\n\nul\n-\n-\n...\n```\n\n## Todo Liste\n\n- [x] aufgabe 1\n- [ ] aufgabe 2\n\n```\n- [x] aufgabe 1\n- [ ] aufgabe 2\n```\n\n## Link\n```\nText Link\n[Text](www.baidu.com)\n\nLink mit Bild\n![Text](http://www.image.com)\n```\n## Code\n\\``` Typ\n\nCodeblock\n\n\\```\n\n\\` code \\`\n\n```c++\nint main()\n{\n    printf(\"hello world!\");\n}\n```\n`code`\n\n## Tabelle\n```\n| th1 | th2 | th3 |\n| :--  | :--: | ----: |\n| links | mitte | rechts |\n```\n| th1 | th2 | th3 |\n| :--  | :--: | ----: |\n| links | mitte | rechts |\n| ---------------------- | ------------- | ----------------- |\n## Fußnote\n```\nhallo[^hallo]\n```\n\nSchau zum unteren Rand[^hallo]\n\n[^hallo]: fussnote\n\n## Emojis\nDetails: [https://www.webpagefx.com/tools/emoji-cheat-sheet/](https://www.webpagefx.com/tools/emoji-cheat-sheet/)\n```\n:laughing:\n:blush:\n:smiley:\n:)\n...\n```\n:laughing::blush::smiley::)\n\n## $\\KaTeX$ Mathematik\n\nFormeln lassen sich darstellen z.b. ：$x_i + y_i = z_i$ und $\\sum_{i=1}^n a_i=0$\nFormeln können auf einer eigenen Zeile gerendert werden\n$$\\sum_{i=1}^n a_i=0$$\nDetails: [katex](http://www.intmath.com/cg5/katex-mathjax-comparison.php)和[katex function](https://github.com/Khan/KaTeX/wiki/Function-Support-in-KaTeX)以及[latex](https://math.meta.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference)\n\n## Layout\n\n::: hljs-left\n`::: hljs-left`\n`links`\n`:::`\n:::\n\n::: hljs-center\n`::: hljs-center`\n`mitte`\n`:::`\n:::\n\n::: hljs-right\n`::: hljs-right`\n`rechts`\n`:::`\n:::\n\n## Liste von Definitionen\n\nTerm 1\n\n:   Definition 1\n\nTerm 2 mit *inline markup*\n\n:   Definition 2\n\n        { ein wenig code, teil von Definition 2 }\n\n    Dritter Absatz von Definition 2.\n\n```\nTerm 1\n\n:   Definition 1\n\nTerm 2 mit *inline markup*\n\n:   Definition 2\n\n        { ein wenig code, teil von Definition 2 }\n\n    Dritter Absatz von Definition 2.\n\n```\n\n## Abkürzungen\n*[HTML]: Hyper Text Markup Language\n*[W3C]:  World Wide Web Consortium\nDie HTML Spezifikation\nwird gepflegt vom W3C.\n```\n*[HTML]: Hyper Text Markup Language\n*[W3C]:  World Wide Web Consortium\nDie HTML Spezifikation\nwird gepflegt vom W3C.\n```\n"
  },
  {
    "path": "src/dev/assets/lang/de/words_de.json",
    "content": "{\r\n  \"start_editor\": \"Bearbeitung beginnen...\",\r\n  \"navigation_title\": \"Navigation\",\r\n  \"tl_bold\": \"Fett\",\r\n  \"tl_italic\": \"Kursiv\",\r\n  \"tl_header\": \"Überschrift\",\r\n  \"tl_header_one\": \"Überschrift 1\",\r\n  \"tl_header_two\": \"Überschrift 2\",\r\n  \"tl_header_three\": \"Überschrift 3\",\r\n  \"tl_header_four\": \"Überschrift 4\",\r\n  \"tl_header_five\": \"Überschrift 5\",\r\n  \"tl_header_six\": \"Überschrift 6\",\r\n  \"tl_underline\": \"Unterstrichen\",\r\n  \"tl_strikethrough\": \"Durchgestrichen\",\r\n  \"tl_mark\": \"Markiert\",\r\n  \"tl_superscript\": \"Hochgestellt\",\r\n  \"tl_subscript\": \"Tiefgestellt\",\r\n  \"tl_quote\": \"Zitat\",\r\n  \"tl_ol\": \"Ol\",\r\n  \"tl_ul\": \"Ul\",\r\n  \"tl_link\": \"Link\",\r\n  \"tl_image\": \"Link mit Bild\",\r\n  \"tl_code\": \"Code\",\r\n  \"tl_table\": \"Tabelle\",\r\n  \"tl_undo\": \"Rückgängig\",\r\n  \"tl_redo\": \"Wiederherstellen\",\r\n  \"tl_trash\": \"Mülleimer\",\r\n  \"tl_save\": \"Speichern\",\r\n  \"tl_navigation_on\": \"Navigation AN\",\r\n  \"tl_navigation_off\": \"Navigation AUS\",\r\n  \"tl_preview\": \"Vorschau\",\r\n  \"tl_aligncenter\": \"Text zentrieren\",\r\n  \"tl_alignleft\": \"Nach links ausrichten\",\r\n  \"tl_alignright\": \"Nach rechts ausrichten\",\r\n  \"tl_edit\": \"Bearbeiten\",\r\n  \"tl_single_column\": \"Einspaltig\",\r\n  \"tl_double_column\": \"Zweispaltig\",\r\n  \"tl_fullscreen_on\": \"Vollbild AN\",\r\n  \"tl_fullscreen_off\": \"Vollbild AUS\",\r\n  \"tl_read\": \"Lesemodus\",\r\n  \"tl_html_on\": \"HTML AN\",\r\n  \"tl_html_off\": \"HTML AUS\",\r\n  \"tl_help\": \"Markdown Handbuch\",\r\n  \"tl_upload\": \"Bilder-Upload\",\r\n  \"tl_upload_remove\": \"Entfernen\",\r\n  \"tl_popup_link_title\": \"Link hinzufügen\",\r\n  \"tl_popup_link_text\": \"Text des Links\",\r\n  \"tl_popup_link_addr\": \"Linkziel\",\r\n  \"tl_popup_img_link_title\": \"Bild hinzufügen\",\r\n  \"tl_popup_img_link_text\": \"Text des Bildes\",\r\n  \"tl_popup_img_link_addr\": \"Link auf Bild\",\r\n  \"tl_popup_link_sure\": \"Ja\",\r\n  \"tl_popup_link_cancel\": \"Abbruch\"\r\n}\r\n"
  },
  {
    "path": "src/dev/assets/lang/en/help_en.md",
    "content": "@[toc](Catalog)\n\nMarkdown Guide\n===\n> Detailed: [http://commonmark.org/help/](http://commonmark.org/help/)\n\n## **Bold**\n```\n**bold**\n__bold__\n```\n## *Italic*\n```\n*italic*\n_italic_\n```\n## Header\n```\n# h1 #\nh1\n====\n## h2 ##\nh2\n----\n### h3 ###\n#### h4 ####\n##### h5 #####\n###### h6 ######\n```\n## Dividing line\n```\n***\n---\n```\n****\n## ^Super^script & ~Sub~script\n```\nsuper x^2^\nsub H~2~0\n```\n## ++Underline++ & ~~Strikethrough~~\n```\n++underline++\n~~strikethrough~~\n```\n## ==Mark==\n```\n==mark==\n```\n## Quote\n\n```\n> quote 1\n>> quote 2\n>>> quote 3\n...\n```\n\n## List\n```\nol\n1.\n2.\n3.\n...\n\nul\n-\n-\n...\n```\n\n## Todo List\n\n- [x] task 1\n- [ ] task 2\n\n```\n- [x] task 1\n- [ ] task 2\n```\n\n## Link\n```\nText Link\n[Text](www.baidu.com)\n\nImage Link\n![Text](http://www.image.com)\n```\n## Code\n\\``` type\n\ncode block\n\n\\```\n\n\\` code \\`\n\n```c++\nint main()\n{\n    printf(\"hello world!\");\n}\n```\n`code`\n\n## Table\n```\n| th1 | th2 | th3 |\n| :--  | :--: | ----: |\n| left | center | right |\n```\n| th1 | th2 | th3 |\n| :--  | :--: | ----: |\n| left | center | right |\n| ---------------------- | ------------- | ----------------- |\n## Footnote\n```\nhello[^hello]\n```\n\nLook at the bottom[^hello]\n\n[^hello]: footnote\n\n## Emojis\nDetailed: [https://www.webpagefx.com/tools/emoji-cheat-sheet/](https://www.webpagefx.com/tools/emoji-cheat-sheet/)\n```\n:laughing:\n:blush:\n:smiley:\n:)\n...\n```\n:laughing::blush::smiley::)\n\n## $\\KaTeX$ Mathematics\n\nWe can render formulas for example：$x_i + y_i = z_i$ and $\\sum_{i=1}^n a_i=0$\nWe can also single-line rendering\n$$\\sum_{i=1}^n a_i=0$$\nDetailed: [katex](http://www.intmath.com/cg5/katex-mathjax-comparison.php)和[katex function](https://github.com/Khan/KaTeX/wiki/Function-Support-in-KaTeX)以及[latex](https://math.meta.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference)\n\n## Layout\n\n::: hljs-left\n`::: hljs-left`\n`left`\n`:::`\n:::\n\n::: hljs-center\n`::: hljs-center`\n`center`\n`:::`\n:::\n\n::: hljs-right\n`::: hljs-right`\n`right`\n`:::`\n:::\n\n## deflist\n\nTerm 1\n\n:   Definition 1\n\nTerm 2 with *inline markup*\n\n:   Definition 2\n\n        { some code, part of Definition 2 }\n\n    Third paragraph of definition 2.\n\n```\nTerm 1\n\n:   Definition 1\n\nTerm 2 with *inline markup*\n\n:   Definition 2\n\n        { some code, part of Definition 2 }\n\n    Third paragraph of definition 2.\n\n```\n\n## abbr\n*[HTML]: Hyper Text Markup Language\n*[W3C]:  World Wide Web Consortium\nThe HTML specification\nis maintained by the W3C.\n```\n*[HTML]: Hyper Text Markup Language\n*[W3C]:  World Wide Web Consortium\nThe HTML specification\nis maintained by the W3C.\n```\n"
  },
  {
    "path": "src/dev/assets/lang/en/words_en.json",
    "content": "{\r\n  \"start_editor\": \"Begin editing...\",\r\n  \"navigation_title\": \"Navigation\",\r\n  \"tl_bold\": \"Bold\",\r\n  \"tl_italic\": \"Italic\",\r\n  \"tl_header\": \"Header\",\r\n  \"tl_header_one\": \"Header 1\",\r\n  \"tl_header_two\": \"Header 2\",\r\n  \"tl_header_three\": \"Header 3\",\r\n  \"tl_header_four\": \"Header 4\",\r\n  \"tl_header_five\": \"Header 5\",\r\n  \"tl_header_six\": \"Header 6\",\r\n  \"tl_underline\": \"Underline\",\r\n  \"tl_strikethrough\": \"Strikethrough\",\r\n  \"tl_mark\": \"Mark\",\r\n  \"tl_superscript\": \"Superscript\",\r\n  \"tl_subscript\": \"Subscript\",\r\n  \"tl_quote\": \"Quote\",\r\n  \"tl_ol\": \"Ol\",\r\n  \"tl_ul\": \"Ul\",\r\n  \"tl_link\": \"Link\",\r\n  \"tl_image\": \"Image Link\",\r\n  \"tl_code\": \"Code\",\r\n  \"tl_table\": \"Table\",\r\n  \"tl_undo\": \"Undo\",\r\n  \"tl_redo\": \"Redo\",\r\n  \"tl_trash\": \"Trash\",\r\n  \"tl_save\": \"Save\",\r\n  \"tl_navigation_on\": \"Navigation ON\",\r\n  \"tl_navigation_off\": \"Navigation OFF\",\r\n  \"tl_preview\": \"Preview\",\r\n  \"tl_aligncenter\": \"Center text\",\r\n  \"tl_alignleft\": \"Clamp text to the left\",\r\n  \"tl_alignright\": \"Clamp text to the right\",\r\n  \"tl_edit\": \"Edit\",\r\n  \"tl_single_column\": \"Single Column\",\r\n  \"tl_double_column\": \"Double Columns\",\r\n  \"tl_fullscreen_on\": \"FullScreen ON\",\r\n  \"tl_fullscreen_off\": \"FullScreen OFF\",\r\n  \"tl_read\": \"Read Model\",\r\n  \"tl_html_on\": \"HTML ON\",\r\n  \"tl_html_off\": \"HTML OFF\",\r\n  \"tl_help\": \"Markdown Guide\",\r\n  \"tl_upload\": \"Upload Images\",\r\n  \"tl_upload_remove\": \"Remove\",\r\n  \"tl_popup_link_title\": \"Add Link\",\r\n  \"tl_popup_link_text\": \"Link text\",\r\n  \"tl_popup_link_addr\": \"Link address\",\r\n  \"tl_popup_img_link_title\": \"Add Image\",\r\n  \"tl_popup_img_link_text\": \"Image Text\",\r\n  \"tl_popup_img_link_addr\": \"Image Link\",\r\n  \"tl_popup_link_sure\": \"Sure\",\r\n  \"tl_popup_link_cancel\": \"Cancel\"\r\n}\r\n"
  },
  {
    "path": "src/dev/assets/lang/fr/help_fr.md",
    "content": "@[toc](Catalogue)\n\nGuide Markdown\n==============\n> Détail : [http://commonmark.org/help/](http://commonmark.org/help/)\n\n## **Bold**\n```\n**bold**\n__bold__\n```\n## *Italic*\n```\n*italic*\n_italic_\n```\n## Header\n```\n# h1 #\nh1\n====\n## h2 ##\nh2\n----\n### h3 ###\n#### h4 ####\n##### h5 #####\n###### h6 ######\n```\n## Dividing line\n```\n***\n---\n```\n****\n## ^Super^script & ~Sub~script\n```\nsuper x^2^\nsub H~2~0\n```\n## ++Underline++ & ~~Strikethrough~~\n```\n++underline++\n~~strikethrough~~\n```\n## ==Mark==\n```\n==mark==\n```\n## Quote\n\n```\n> quote 1\n>> quote 2\n>>> quote 3\n...\n```\n\n## List\n```\nol\n1.\n2.\n3.\n...\n\nul\n-\n-\n...\n```\n## Link\n\n## Todo List\n\n- [x] Équipe 1\n- [ ] Équipe 2\n\n```\n- [x] Équipe 1\n- [ ] Équipe 2\n```\n\n```\nText Link\n[Text](www.baidu.com)\n\nImage Link\n![Text](http://www.image.com)\n```\n## Code\n\\``` type\n\ncode block\n\n\\```\n\n\\` code \\`\n\n```c++\nint main()\n{\n    printf(\"hello world!\");\n}\n```\n`code`\n\n## Table\n```\n| th1 | th2 | th3 |\n| :--  | :--: | ----: |\n| left | center | right |\n```\n| th1 | th2 | th3 |\n| :--  | :--: | ----: |\n| left | center | right |\n| ---------------------- | ------------- | ----------------- |\n## Footnote\n```\nhello[^hello]\n```\n\nLook at the bottom[^hello]\n\n[^hello]: footnote\n\n## Emojis\nDetailed: [https://www.webpagefx.com/tools/emoji-cheat-sheet/](https://www.webpagefx.com/tools/emoji-cheat-sheet/)\n```\n:laughing:\n:blush:\n:smiley:\n:)\n...\n```\n:laughing::blush::smiley::)\n\n## $\\KaTeX$ Mathematics\n\nWe can render formulas for example：$x_i + y_i = z_i$ and $\\sum_{i=1}^n a_i=0$\nWe can also single-line rendering\n$$\\sum_{i=1}^n a_i=0$$\nDetailed: [katex](http://www.intmath.com/cg5/katex-mathjax-comparison.php)和[katex function](https://github.com/Khan/KaTeX/wiki/Function-Support-in-KaTeX)以及[latex](https://math.meta.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference)\n\n## Layout\n\n::: hljs-left\n`::: hljs-left`\n`left`\n`:::`\n:::\n\n::: hljs-center\n`::: hljs-center`\n`center`\n`:::`\n:::\n\n::: hljs-right\n`::: hljs-right`\n`right`\n`:::`\n:::\n\n## deflist\n\nTerm 1\n\n:   Definition 1\n\nTerm 2 with *inline markup*\n\n:   Definition 2\n\n        { some code, part of Definition 2 }\n\n    Third paragraph of definition 2.\n\n```\nTerm 1\n\n:   Definition 1\n\nTerm 2 with *inline markup*\n\n:   Definition 2\n\n        { some code, part of Definition 2 }\n\n    Third paragraph of definition 2.\n\n```\n\n## abbr\n*[HTML]: Hyper Text Markup Language\n*[W3C]:  World Wide Web Consortium\nThe HTML specification\nis maintained by the W3C.\n```\n*[HTML]: Hyper Text Markup Language\n*[W3C]:  World Wide Web Consortium\nThe HTML specification\nis maintained by the W3C.\n```\n"
  },
  {
    "path": "src/dev/assets/lang/fr/words_fr.json",
    "content": "{\n  \"start_editor\": \"Début d'édition...\",\n  \"navigation_title\": \"Navigation\",\n  \"tl_bold\": \"Gras\",\n  \"tl_italic\": \"Italique\",\n  \"tl_header\": \"Entête\",\n  \"tl_header_one\": \"Entête 1\",\n  \"tl_header_two\": \"Entête 2\",\n  \"tl_header_three\": \"Entête 3\",\n  \"tl_header_four\": \"Entête 4\",\n  \"tl_header_five\": \"Entête 5\",\n  \"tl_header_six\": \"Entête 6\",\n  \"tl_underline\": \"Souligné\",\n  \"tl_strikethrough\": \"Barré\",\n  \"tl_mark\": \"Mark\",\n  \"tl_superscript\": \"Exposant\",\n  \"tl_subscript\": \"Sous-exposant\",\n  \"tl_quote\": \"Quote\",\n  \"tl_ol\": \"Liste \",\n  \"tl_ul\": \"Puce\",\n  \"tl_link\": \"Lien\",\n  \"tl_image\": \"Image Lien\",\n  \"tl_code\": \"Code\",\n  \"tl_table\": \"Table\",\n  \"tl_undo\": \"Annuler\",\n  \"tl_redo\": \"Refaire\",\n  \"tl_trash\": \"Supprimer\",\n  \"tl_save\": \"Sauver\",\n  \"tl_navigation_on\": \"Activer la navigation\",\n  \"tl_navigation_off\": \"Désactiver le navigation\",\n  \"tl_preview\": \"Previsualisé\",\n  \"tl_aligncenter\": \"Center le texte\",\n  \"tl_alignleft\": \"Férer le texte à gauche\",\n  \"tl_alignright\": \"Férer le texte à droite\",\n  \"tl_preview\": \"Previsualisé\",\n  \"tl_edit\": \"Editer\",\n  \"tl_single_column\": \"Seule Colonne\",\n  \"tl_double_column\": \"Colonnes Doubles\",\n  \"tl_fullscreen_on\": \"Activer le mode plein écran\",\n  \"tl_fullscreen_off\": \"Désactiver le mode plein écran\",\n  \"tl_read\": \"Lire le modèle\",\n  \"tl_html_on\": \"Activer le mode HTML\",\n  \"tl_html_off\": \"Désactiver le mode HTML\",\n  \"tl_help\": \"Guide Markdown\",\n  \"tl_upload\": \"Télécharger les images\",\n  \"tl_upload_remove\": \"Supprimer\",\n  \"tl_popup_link_title\": \"Ajouter un lien\",\n  \"tl_popup_link_text\": \"Description\",\n  \"tl_popup_link_addr\": \"Link\",\n  \"tl_popup_img_link_title\": \"Ajouter une image\",\n  \"tl_popup_img_link_text\": \"Description\",\n  \"tl_popup_img_link_addr\": \"Link\",\n  \"tl_popup_link_sure\": \"sûr\",\n  \"tl_popup_link_cancel\": \"Annuler\"\n}\n"
  },
  {
    "path": "src/dev/assets/lang/pt-BR/help_pt-BR.md",
    "content": "@[toc](Directory)\n\nGuia Markdown\n===\n> Detalhes: [http://commonmark.org/help/](http://commonmark.org/help/)\n\n## **Negrito**\n```\n**negrito**\n__negrito__\n```\n## *Itálico*\n```\n*itálico*\n_itálico_\n```\n## Cabeçalho\n```\n# h1 #\nh1\n====\n## h2 ##\nh2\n----\n### h3 ###\n#### h4 ####\n##### h5 #####\n###### h6 ######\n```\n## Linha Divisora\n```\n***\n---\n```\n****\n## ^Sobre^scrito & ~Sub~scrito\n```\nsobre x^2^\nsub H~2~0\n```\n## ++Sublinhar++ & ~~Tachar~~\n```\n++sublinhar++\n~~tachar~~\n```\n## ==Marcador==\n```\n==marcador==\n```\n## Citação\n\n```\n> citação 1\n>> citação 2\n>>> citação 3\n...\n```\n\n## Listas\n```\nlista Numerada\n1.\n2.\n3.\n...\n\nlista com marcadores\n-\n-\n...\n```\n\n## Todo Listas\n\n- [x] Tarefa 1\n- [ ] Tarefa 2\n\n```\n- [x] Tarefa 1\n- [ ] Tarefa 2\n```\n\n## Link\n```\nLink Texto\n[Text](www.baidu.com)\n\nLink Imagem\n![Text](http://www.image.com)\n```\n## Código\n\\``` tipo\n\nbloco de código\n\n\\```\n\n\\` código \\`\n\n```c++\nint main()\n{\n    printf(\"hello world!\");\n}\n```\n`code`\n\n## Tabela\n```\n| th1 | th2 | th3 |\n| :--  | :--: | ----: |\n| esquerda | centro | direita |\n```\n| th1 | th2 | th3 |\n| :--  | :--: | ----: |\n| esquerda | centro | direita |\n| ---------------------- | ------------- | ----------------- |\n## Rodapé\n```\nolá[^olá]\n```\n\nOlhe para baixo[^olá]\n\n[^olá]: rodapé\n\n## Emojis\nDetalhes: [https://www.webpagefx.com/tools/emoji-cheat-sheet/](https://www.webpagefx.com/tools/emoji-cheat-sheet/)\n```\n:laughing:\n:blush:\n:smiley:\n:)\n...\n```\n:laughing::blush::smiley::)\n\n## $\\KaTeX$ Mathematics\n\nPodemos mostrar fórmulas por exemplo：$x_i + y_i = z_i$ and $\\sum_{i=1}^n a_i=0$\nPodemos também mostrar em uma única linha:\n$$\\sum_{i=1}^n a_i=0$$\nDetalhes: [katex](http://www.intmath.com/cg5/katex-mathjax-comparison.php)和[katex function](https://github.com/Khan/KaTeX/wiki/Function-Support-in-KaTeX)以及[latex](https://math.meta.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference)\n\n## Layout\n\n::: hljs-left\n`::: hljs-left`\n`esquerda`\n`:::`\n:::\n\n::: hljs-center\n`::: hljs-center`\n`centro`\n`:::`\n:::\n\n::: hljs-right\n`::: hljs-right`\n`direita`\n`:::`\n:::\n\n## Definições\n\nTermo 1\n\n:   Definição 1\n\nTermo 2 com *markup inline*\n\n:   Definição 2\n\n        { um pouco de código, parte da Definição 2 }\n\n    Terceiro parágrafo da definição 2.\n\n```\nTermo 1\n\n:   Definição 1\n\nTermo 2 com *markup inline*\n\n:   Definição 2\n\n        { um pouco de código, parte da Definição 2 }\n\n    Terceiro parágrafo da definição 2.\n\n```\n\n## Abreviações\n*[HTML]: Hyper Text Markup Language\n*[W3C]:  World Wide Web Consortium\nA especificação HTML\né mantida pela W3C.\n```\n*[HTML]: Hyper Text Markup Language\n*[W3C]:  World Wide Web Consortium\nThe HTML specification\né mantida pela W3C.\n```\n"
  },
  {
    "path": "src/dev/assets/lang/pt-BR/words_pt-BR.json",
    "content": "{\n\t\"start_editor\": \"Começar edição...\",\n\t\"navigation_title\": \"Navegação\",\n\t\"tl_bold\": \"Negrito\",\n\t\"tl_italic\": \"Itálico\",\n\t\"tl_header\": \"Cabeçalho\",\n\t\"tl_header_one\": \"Cabeçalho 1\",\n\t\"tl_header_two\": \"Cabeçalho 2\",\n\t\"tl_header_three\": \"Cabeçalho 3\",\n\t\"tl_header_four\": \"Cabeçalho 4\",\n\t\"tl_header_five\": \"Cabeçalho 5\",\n\t\"tl_header_six\": \"Cabeçalho 6\",\n\t\"tl_underline\": \"Sublinhar\",\n\t\"tl_strikethrough\": \"Tachar\",\n\t\"tl_mark\": \"Marcação\",\n\t\"tl_superscript\": \"Sobrescrito\",\n\t\"tl_subscript\": \"Subscrito\",\n\t\"tl_quote\": \"Citação\",\n\t\"tl_ol\": \"Lista Numerada\",\n\t\"tl_ul\": \"Lista com marcadores\",\n\t\"tl_link\": \"Link\",\n\t\"tl_image\": \"Link de imagem\",\n\t\"tl_code\": \"Código\",\n\t\"tl_table\": \"Tabela\",\n\t\"tl_undo\": \"Desfazer\",\n\t\"tl_redo\": \"Refazer\",\n\t\"tl_trash\": \"Lixo\",\n\t\"tl_save\": \"Salvar\",\n\t\"tl_navigation_on\": \"Mostrar Navegação\",\n\t\"tl_navigation_off\": \"Esconder Navegação\",\n\t\"tl_preview\": \"Preview\",\n\t\"tl_aligncenter\": \"Alinhar no centro\",\n\t\"tl_alignleft\": \"Alinhar à esquerda\",\n\t\"tl_alignright\": \"Alinhar à direita\",\n\t\"tl_edit\": \"Editar\",\n\t\"tl_single_column\": \"Coluna Única\",\n\t\"tl_double_column\": \"Duas Colunas\",\n\t\"tl_fullscreen_on\": \"Ligar Tela Cheia\",\n\t\"tl_fullscreen_off\": \"Desligar Tela Cheia\",\n\t\"tl_read\": \"Modo de Leitura\",\n\t\"tl_html_on\": \"Ligar HTML\",\n\t\"tl_html_off\": \"Desligar HTML\",\n\t\"tl_help\": \"Guia Markdown\",\n\t\"tl_upload\": \"Upload de Imagens\",\n\t\"tl_upload_remove\": \"Remover\",\n\t\"tl_popup_link_title\": \"Adicionar Link\",\n\t\"tl_popup_link_text\": \"Descrição\",\n\t\"tl_popup_link_addr\": \"Link\",\n\t\"tl_popup_img_link_title\": \"Adicionar fotos\",\n\t\"tl_popup_img_link_text\": \"Descrição\",\n\t\"tl_popup_img_link_addr\": \"Link\",\n\t\"tl_popup_link_sure\": \"Confirmar\",\n\t\"tl_popup_link_cancel\": \"Cancelar\"\n}"
  },
  {
    "path": "src/dev/assets/lang/ru/help_ru.md",
    "content": "@[toc](Catalog)  \n  \nMarkdown помощь  \n===  \n> Подробнее: [http://commonmark.org/help/](http://commonmark.org/help/)  \n  \n## **Полужирный**  \n```  \n**Полужирный**  \n__Полужирный__  \n```  \n## *Курсив*  \n```  \n*Курсив*  \n_Курсив_  \n```  \n## Заголовок  \n```  \n# h1 #  \nh1  \n====  \n## h2 ##  \nh2  \n----  \n### h3 ###  \n#### h4 ####  \n##### h5 #####  \n###### h6 ######  \n```  \n## Разделительная линия  \n```  \n***  \n---  \n```  \n****  \n## ^Верхний^индекс & ~Нижний~индекс  \n```  \nверхний x^2^  \nнижний H~2~0  \n```  \n## ++Подчеркнутый++ & ~~Зачеркнутый~~  \n```  \n++Подчеркнутый++  \n~~Зачеркнутый~~  \n```  \n## ==Отметка==  \n```  \n==Отметка==  \n```  \n## Цитата  \n  \n```  \n> Цитата  \n>> Цитата 2  \n>>> Цитата 3  \n...  \n```  \n  \n## Список  \n```  \nol  \n1.  \n2.  \n3.  \n...  \n  \nul  \n-  \n-  \n...  \n```  \n  \n## Список задач  \n  \n- [x] Задача 1  \n- [ ] Задача 2  \n  \n```  \n- [x] Задача 1  \n- [ ] Задача 2  \n```  \n  \n## Ссылка  \n```  \nСсылка  \n[Текст](www.baidu.com)  \n  \nСсылка изображения  \n![Текст](http://www.image.com)  \n```  \n## Код  \n\\``` type  \n  \ncode block  \n  \n\\```  \n  \n\\` code \\`  \n  \n```c++  \nint main()  \n{  \n printf(\"hello world!\");}  \n```  \n`code`  \n  \n## Таблица  \n```  \n| th1 | th2 | th3 |  \n| :--  | :--: | ----: |  \n| left | center | right |  \n```  \n| th1 | th2 | th3 |  \n| :--  | :--: | ----: |  \n| left | center | right |  \n| ---------------------- | ------------- | ----------------- |  \n## Сноска  \n```  \nПривет[^Привет]  \n```  \n  \nТут что-то непонятное[^Привет]  \n  \n[^Привет]: А тут объяснение  \n  \n## Emojis  \nПодробнее: [https://www.webpagefx.com/tools/emoji-cheat-sheet/](https://www.webpagefx.com/tools/emoji-cheat-sheet/)  \n```  \n:laughing:  \n:blush:  \n:smiley:  \n:)  \n...  \n```  \n:laughing::blush::smiley::)  \n  \n## $\\KaTeX$ Mathematics  \n  \nМожно выводить такие формулы：$x_i + y_i = z_i$ and $\\sum_{i=1}^n a_i=0$  \nА также в одну строку:\n$$\\sum_{i=1}^n a_i=0$$  \nПодробнее: \n- [katex](http://www.intmath.com/cg5/katex-mathjax-comparison.php)\n- [katex function](https://github.com/Khan/KaTeX/wiki/Function-Support-in-KaTeX)\n- [latex](https://math.meta.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference)  \n  \n## Разметка\n  \n::: hljs-left  \n`::: hljs-left`  \n`left`  \n`:::`  \n:::  \n  \n::: hljs-center  \n`::: hljs-center`  \n`center`  \n`:::`  \n:::  \n  \n::: hljs-right  \n`::: hljs-right`  \n`right`  \n`:::`  \n:::  \n  \n## Список определений\n  \nТермин 1  \n  \n:   Определение 1  \n  \nТермин  2 с использованием *разметки*\n  \n:   Определение 2  \n  \n { Какой-нибудь код, часть определения 2 }  \n Третий параграф определения 2.  \n```  \nТермин 1  \n  \n:   Определение 1  \n  \nТермин  2 с использованием *разметки*\n  \n:   Определение 2  \n  \n { Какой-нибудь код, часть определения 2 }  \n Третий параграф определения 2.  \n```  \n  \n## Сокращения\n*[HTML]: Hyper Text Markup Language  \n*[W3C]:  World Wide Web Consortium  \nThe HTML specification  \nis maintained by the W3C.  \n```  \n*[HTML]: Hyper Text Markup Language  \n*[W3C]:  World Wide Web Consortium  \nThe HTML specification  \nis maintained by the W3C.  \n```\n"
  },
  {
    "path": "src/dev/assets/lang/ru/words_ru.json",
    "content": "{\n  \"start_editor\": \"Начните редактирование...\",\n  \"navigation_title\": \"Навигация\",\n  \"tl_bold\": \"Полужирный\",\n  \"tl_italic\": \"Курсив\",\n  \"tl_header\": \"Заголовки\",\n  \"tl_header_one\": \"Заголовок 1\",\n  \"tl_header_two\": \"Заголовок 2\",\n  \"tl_header_three\": \"Заголовок 3\",\n  \"tl_header_four\": \"Заголовок 4\",\n  \"tl_header_five\": \"Заголовок 5\",\n  \"tl_header_six\": \"Заголовок 6\",\n  \"tl_underline\": \"Подчеркнутый\",\n  \"tl_strikethrough\": \"Зачеркнутый\",\n  \"tl_mark\": \"Отметка\",\n  \"tl_superscript\": \"Верхний индекс\",\n  \"tl_subscript\": \"Нижний индекс\",\n  \"tl_quote\": \"Цитата\",\n  \"tl_ol\": \"Нумерованный список\",\n  \"tl_ul\": \"Список\",\n  \"tl_link\": \"Ссылка\",\n  \"tl_image\": \"Ссылка изображения\",\n  \"tl_code\": \"Код\",\n  \"tl_table\": \"Таблица\",\n  \"tl_undo\": \"Отменить\",\n  \"tl_redo\": \"Вернуть\",\n  \"tl_trash\": \"Удалить\",\n  \"tl_save\": \"Сохранить\",\n  \"tl_navigation_on\": \"Показать навигацию\",\n  \"tl_navigation_off\": \"Скрыть навигацию\",\n  \"tl_preview\": \"Предпросмотр\",\n  \"tl_aligncenter\": \"Выровнять по центру\",\n  \"tl_alignleft\": \"Выровнять по левому краю\",\n  \"tl_alignright\": \"Выровнять по правому краю\",\n  \"tl_edit\": \"Редактор\",\n  \"tl_single_column\": \"Одно поле\",\n  \"tl_double_column\": \"Два поля\",\n  \"tl_fullscreen_on\": \"Полноэкранный режим\",\n  \"tl_fullscreen_off\": \"Выключить полноэкранный режим\",\n  \"tl_read\": \"Режим чтения\",\n  \"tl_html_on\": \"Показать HTML\",\n  \"tl_html_off\": \"Убрать HTML\",\n  \"tl_help\": \"Markdown помощь\",\n  \"tl_upload\": \"Загрузить изображение\",\n  \"tl_upload_remove\": \"Удалить\",\n  \"tl_popup_link_title\": \"Добавить ссылку\",\n  \"tl_popup_link_text\": \"Текст ссылки\",\n  \"tl_popup_link_addr\": \"Адрес ссылки\",\n  \"tl_popup_img_link_title\": \"Локальное изображение\",\n  \"tl_popup_img_link_text\": \"Текст изображения\",\n  \"tl_popup_img_link_addr\": \"Ссылка изображения\",\n  \"tl_popup_link_sure\": \"Добавить\",\n  \"tl_popup_link_cancel\": \"Отменить\"\n}\n"
  },
  {
    "path": "src/dev/assets/lang/zh-CN/help_zh-CN.md",
    "content": "@[toc](目录)\n\nMarkdown 语法简介\n=============\n> [语法详解](http://commonmark.org/help/)\n\n## **粗体**\n```\n**粗体**\n__粗体__\n```\n## *斜体*\n```\n*斜体*\n_斜体_\n```\n## 标题\n```\n# 一级标题 #\n一级标题\n====\n## 二级标题 ##\n二级标题\n----\n### 三级标题 ###\n#### 四级标题 ####\n##### 五级标题 #####\n###### 六级标题 ######\n```\n## 分割线\n```\n***\n---\n```\n****\n## ^上^角~下~标\n```\n上角标 x^2^\n下角标 H~2~0\n```\n## ++下划线++ ~~中划线~~\n```\n++下划线++\n~~中划线~~\n```\n## ==标记==\n```\n==标记==\n```\n## 段落引用\n```\n> 一级\n>> 二级\n>>> 三级\n...\n```\n\n## 列表\n```\n有序列表\n1.\n2.\n3.\n...\n无序列表\n-\n-\n...\n```\n\n## 任务列表\n\n- [x] 已完成任务\n- [ ] 未完成任务\n\n```\n- [x] 已完成任务\n- [ ] 未完成任务\n```\n\n## 链接\n```\n[链接](www.baidu.com)\n![图片描述](http://www.image.com)\n```\n## 代码段落\n\\``` type\n\n代码段落\n\n\\```\n\n\\` 代码块 \\`\n\n```c++\nint main()\n{\n    printf(\"hello world!\");\n}\n```\n`code`\n## 表格(table)\n```\n| 标题1 | 标题2 | 标题3 |\n| :--  | :--: | ----: |\n| 左对齐 | 居中 | 右对齐 |\n| ---------------------- | ------------- | ----------------- |\n```\n| 标题1 | 标题2 | 标题3 |\n| :--  | :--: | ----: |\n| 左对齐 | 居中 | 右对齐 |\n| ---------------------- | ------------- | ----------------- |\n## 脚注(footnote)\n```\nhello[^hello]\n```\n\n见底部脚注[^hello]\n\n[^hello]: 一个注脚\n\n## 表情(emoji)\n[参考网站: https://www.webpagefx.com/tools/emoji-cheat-sheet/](https://www.webpagefx.com/tools/emoji-cheat-sheet/)\n```\n:laughing:\n:blush:\n:smiley:\n:)\n...\n```\n:laughing::blush::smiley::)\n\n## $\\KaTeX$公式\n\n我们可以渲染公式例如：$x_i + y_i = z_i$和$\\sum_{i=1}^n a_i=0$\n我们也可以单行渲染\n$$\\sum_{i=1}^n a_i=0$$\n具体可参照[katex文档](http://www.intmath.com/cg5/katex-mathjax-comparison.php)和[katex支持的函数](https://github.com/Khan/KaTeX/wiki/Function-Support-in-KaTeX)以及[latex文档](https://math.meta.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference)\n\n## 布局\n\n::: hljs-left\n`::: hljs-left`\n`居左`\n`:::`\n:::\n\n::: hljs-center\n`::: hljs-center`\n`居中`\n`:::`\n:::\n\n::: hljs-right\n`::: hljs-right`\n`居右`\n`:::`\n:::\n\n## 定义\n\n术语一\n\n:   定义一\n\n包含有*行内标记*的术语二\n\n:   定义二\n\n        {一些定义二的文字或代码}\n\n    定义二的第三段\n\n```\n术语一\n\n:   定义一\n\n包含有*行内标记*的术语二\n\n:   定义二\n\n        {一些定义二的文字或代码}\n\n    定义二的第三段\n\n```\n\n## abbr\n*[HTML]: Hyper Text Markup Language\n*[W3C]:  World Wide Web Consortium\nHTML 规范由 W3C 维护\n```\n*[HTML]: Hyper Text Markup Language\n*[W3C]:  World Wide Web Consortium\nHTML 规范由 W3C 维护\n```\n\n"
  },
  {
    "path": "src/dev/assets/lang/zh-CN/words_zh-CN.json",
    "content": "{\r\n  \"start_editor\": \"开始编辑...\",\r\n  \"navigation_title\": \"导航目录\",\r\n  \"tl_bold\": \"粗体\",\r\n  \"tl_italic\": \"斜体\",\r\n  \"tl_header\": \"标题\",\r\n  \"tl_header_one\": \"一级标题\",\r\n  \"tl_header_two\": \"二级标题\",\r\n  \"tl_header_three\": \"三级标题\",\r\n  \"tl_header_four\": \"四级标题\",\r\n  \"tl_header_five\": \"五级标题\",\r\n  \"tl_header_six\": \"六级标题\",\r\n  \"tl_underline\": \"下划线\",\r\n  \"tl_strikethrough\": \"中划线\",\r\n  \"tl_mark\": \"标记\",\r\n  \"tl_superscript\": \"上角标\",\r\n  \"tl_subscript\": \"下角标\",\r\n  \"tl_quote\": \"段落引用\",\r\n  \"tl_ol\": \"有序列表\",\r\n  \"tl_ul\": \"无序列表\",\r\n  \"tl_link\": \"链接\",\r\n  \"tl_image\": \"添加图片链接\",\r\n  \"tl_code\": \"代码块\",\r\n  \"tl_table\": \"表格\",\r\n  \"tl_undo\": \"上一步\",\r\n  \"tl_redo\": \"下一步\",\r\n  \"tl_trash\": \"清空\",\r\n  \"tl_save\": \"保存\",\r\n  \"tl_navigation_on\": \"开启标题导航\",\r\n  \"tl_navigation_off\": \"关闭标题导航\",\r\n  \"tl_preview\": \"预览\",\r\n  \"tl_aligncenter\": \"居中\",\r\n  \"tl_alignleft\": \"居左\",\r\n  \"tl_alignright\": \"居右\",\r\n  \"tl_edit\": \"编辑\",\r\n  \"tl_single_column\": \"单栏\",\r\n  \"tl_double_column\": \"双栏\",\r\n  \"tl_fullscreen_on\": \"全屏编辑\",\r\n  \"tl_fullscreen_off\": \"退出全屏\",\r\n  \"tl_read\": \"沉浸式阅读\",\r\n  \"tl_html_on\": \"查看html文本\",\r\n  \"tl_html_off\": \"返回markdown文本\",\r\n  \"tl_help\": \"markdown语法帮助\",\r\n  \"tl_upload\": \"上传图片\",\r\n  \"tl_upload_remove\": \"删除\",\r\n  \"tl_popup_link_title\": \"添加链接\",\r\n  \"tl_popup_link_text\": \"链接描述\",\r\n  \"tl_popup_link_addr\": \"链接地址\",\r\n  \"tl_popup_img_link_title\": \"添加图片\",\r\n  \"tl_popup_img_link_text\": \"图片描述\",\r\n  \"tl_popup_img_link_addr\": \"图片链接\",\r\n  \"tl_popup_link_sure\": \"确定\",\r\n  \"tl_popup_link_cancel\": \"取消\"\r\n}\r\n"
  },
  {
    "path": "src/dev/assets/lang/zh-TW/help_zh-TW.md",
    "content": "@[toc](目錄)\n\nMarkdown 語法簡介\n=============\n> [語法詳解](http://commonmark.org/help/)\n\n## **粗體**\n```\n**粗體**\n__粗體__\n```\n## *斜體*\n```\n*斜體*\n_斜體_\n```\n## 標題\n```\n# 一級標題 #\n一級標題\n====\n## 二級標題 ##\n二級標題\n----\n### 三級標題 ###\n#### 四級標題 ####\n##### 五級標題 #####\n###### 六級標題 ######\n```\n## 分割線\n```\n***\n---\n```\n****\n## ^上^角~下~標\n```\n上角標 x^2^\n下角標 H~2~0\n```\n## ++下劃線++ ~~中劃線~~\n```\n++下劃線++\n~~中劃線~~\n```\n## ==標記==\n```\n==標記==\n```\n## 段落引用\n```\n> 一級\n>> 二級\n>>> 三級\n...\n```\n\n## 列表\n```\n有序列表\n1.\n2.\n3.\n...\n無序列表\n-\n-\n...\n```\n\n## 任務列表\n\n- [x] 已完成任務\n- [ ] 未完成任務\n\n```\n- [x] 已完成任務\n- [ ] 未完成任務\n```\n\n## 鏈接\n```\n[鏈接](www.baidu.com)\n![圖片描述](http://www.image.com)\n```\n## 代碼段落\n\\``` type\n\n代碼段落\n\n\\```\n\n\\` 代碼塊 \\`\n\n```c++\nint main()\n{\n    printf(\"hello world!\");\n}\n```\n`code`\n## 表格(table)\n```\n| 標題1 | 標題2 | 標題3 |\n| :--  | :--: | ----: |\n| 左對齊 | 居中 | 右對齊 |\n| ---------------------- | ------------- | ----------------- |\n```\n| 標題1 | 標題2 | 標題3 |\n| :--  | :--: | ----: |\n| 左對齊 | 居中 | 右對齊 |\n| ---------------------- | ------------- | ----------------- |\n## 腳註(footnote)\n```\nhello[^hello]\n```\n\n見底部腳註[^hello]\n\n[^hello]: 一個註腳\n\n## 表情(emoji)\n[參考網站: https://www.webpagefx.com/tools/emoji-cheat-sheet/](https://www.webpagefx.com/tools/emoji-cheat-sheet/)\n```\n:laughing:\n:blush:\n:smiley:\n:)\n...\n```\n:laughing::blush::smiley::)\n\n## $\\KaTeX$公式\n\n我們可以渲染公式例如：$x_i + y_i = z_i$和$\\sum_{i=1}^n a_i=0$\n我們也可以單行渲染\n$$\\sum_{i=1}^n a_i=0$$\n具體可參照[katex文檔](http://www.intmath.com/cg5/katex-mathjax-comparison.php)和[katex支持的函數](https://github.com/Khan/KaTeX/wiki/Function-Support-in-KaTeX)以及[latex文檔](https://math.meta.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference)\n\n## 布局\n\n::: hljs-left\n`::: hljs-left`\n`居左`\n`:::`\n:::\n\n::: hljs-center\n`::: hljs-center`\n`居中`\n`:::`\n:::\n\n::: hljs-right\n`::: hljs-right`\n`居右`\n`:::`\n:::\n\n## 定義\n\n術語一\n\n:   定義一\n\n包含有*行內標記*的術語二\n\n:   定義二\n\n        {一些定義二的文字或代碼}\n\n    定義二的第三段\n\n```\n術語一\n\n:   定義一\n\n包含有*行內標記*的術語二\n\n:   定義二\n\n        {一些定義二的文字或代碼}\n\n    定義二的第三段\n\n```\n\n## abbr\n*[HTML]: Hyper Text Markup Language\n*[W3C]:  World Wide Web Consortium\nHTML 規範由 W3C 維護\n```\n*[HTML]: Hyper Text Markup Language\n*[W3C]:  World Wide Web Consortium\nHTML 規範由 W3C 維護\n```\n\n"
  },
  {
    "path": "src/dev/assets/lang/zh-TW/words_zh-TW.json",
    "content": "{\r\n  \"start_editor\": \"開始編輯...\",\r\n  \"navigation_title\": \"導航目錄\",\r\n  \"tl_bold\": \"粗體\",\r\n  \"tl_italic\": \"斜體\",\r\n  \"tl_header\": \"標題\",\r\n  \"tl_header_one\": \"一級標題\",\r\n  \"tl_header_two\": \"二級標題\",\r\n  \"tl_header_three\": \"三級標題\",\r\n  \"tl_header_four\": \"四級標題\",\r\n  \"tl_header_five\": \"五級標題\",\r\n  \"tl_header_six\": \"六級標題\",\r\n  \"tl_underline\": \"下劃線\",\r\n  \"tl_strikethrough\": \"中劃線\",\r\n  \"tl_mark\": \"標記\",\r\n  \"tl_superscript\": \"上角標\",\r\n  \"tl_subscript\": \"下角標\",\r\n  \"tl_quote\": \"段落引用\",\r\n  \"tl_ol\": \"有序列表\",\r\n  \"tl_ul\": \"無序列表\",\r\n  \"tl_link\": \"鏈接\",\r\n  \"tl_image\": \"添加圖片鏈接\",\r\n  \"tl_code\": \"代碼塊\",\r\n  \"tl_table\": \"表格\",\r\n  \"tl_undo\": \"上一步\",\r\n  \"tl_redo\": \"下一步\",\r\n  \"tl_trash\": \"清空\",\r\n  \"tl_save\": \"保存\",\r\n  \"tl_navigation_on\": \"開啟標題導航\",\r\n  \"tl_navigation_off\": \"關閉標題導航\",\r\n  \"tl_preview\": \"預覽\",\r\n  \"tl_aligncenter\": \"居中\",\r\n  \"tl_alignleft\": \"居左\",\r\n  \"tl_alignright\": \"居右\",\r\n  \"tl_edit\": \"編輯\",\r\n  \"tl_single_column\": \"單欄\",\r\n  \"tl_double_column\": \"雙欄\",\r\n  \"tl_fullscreen_on\": \"全屏編輯\",\r\n  \"tl_fullscreen_off\": \"退出全屏\",\r\n  \"tl_read\": \"沈浸式閱讀\",\r\n  \"tl_html_on\": \"查看html文本\",\r\n  \"tl_html_off\": \"返回markdown文本\",\r\n  \"tl_help\": \"markdown語法幫助\",\r\n  \"tl_upload\": \"上傳圖片\",\r\n  \"tl_upload_remove\": \"刪除\",\r\n  \"tl_popup_link_title\": \"添加鏈接\",\r\n  \"tl_popup_link_text\": \"鏈接描述\",\r\n  \"tl_popup_link_addr\": \"鏈接地址\",\r\n  \"tl_popup_img_link_title\": \"添加圖片\",\r\n  \"tl_popup_img_link_text\": \"圖片描述\",\r\n  \"tl_popup_img_link_addr\": \"圖片鏈接\",\r\n  \"tl_popup_link_sure\": \"確定\",\r\n  \"tl_popup_link_cancel\": \"取消\"\r\n}\r\n"
  },
  {
    "path": "src/dev/demo.vue",
    "content": "<template>\n  <div>\n    <div class=\"navigate\">\n      <span @click=\"viewIndex = 1\">Full demo</span>\n      <span @click=\"viewIndex = 2\">Simple demo</span>\n    </div>\n    <div>\n      <App v-if=\"viewIndex == 1\"></App>\n      <Editor v-else-if=\"viewIndex == 2\"></Editor>\n    </div>\n  </div>\n</template>\n\n<script>\nimport app from './app.vue';\nimport editor from './editor.vue';\n\nexport default {\n  name: 'demo',\n  components: {\n    App: app,\n    Editor: editor\n  },\n  data() {\n    return {\n      viewIndex: 1\n    };\n  }\n};\n</script>\n<style>\n.navigate {\n  text-align: center;\n  font-size: 18px;\n  color: blue;\n}\n\n.navigate span {\n  margin-right: 5px;\n}\n\n.navigate span:hover {\n  cursor: pointer;\n  font-weight: bolder;\n}\n</style>\n"
  },
  {
    "path": "src/dev/editor.vue",
    "content": "<template>\n    <div class=\"container\">\n        <div id=\"editor\">\n            <mavon-editor style=\"height: 100%\" v-model=\"code\" :codeStyle=\"codeStyle\" :xssOptions=\"xssOptions\"></mavon-editor>\n        </div>\n        <div class=\"switch-code-style\">\n            <span>code style:</span>\n            <select v-model=\"codeStyle\">\n                <option v-for=\"(val, key) in styles\" :value=\"key\">{{ key }}</option>\n            </select>\n        </div>\n    </div>\n</template>\n<script>\nimport styles from '../lib/core/hljs/lang.hljs.css.js'\n\nconst code = `java\n/**\n * @author John Smith <john.smith@example.com>\n*/\npackage l2f.gameserver.model;\n\npublic abstract strictfp class L2Char extends L2Object {\n  public static final Short ERROR = 0x0001;\n\n  public void moveTo(int x, int y, int z) {\n    _ai = null;\n    log(\"Should not be called\");\n    if (1 > 5) { // wtf!?\n      return;\n    }\n  }\n}`;\n\nmodule.exports = {\n    name: 'editor',\n    data: function () {\n        return {\n            codeStyle: \"github\",\n            styles,\n            code: '<span style=\"color:red;font-size:36px;\">A</span> \\n```' + code + '\\n```',\n            xssOptions:{\n                whiteList: {\n                    span: ['style']\n                }\n            }\n        };\n    }\n}\n</script>\n<style>\n.container {\n    margin: auto;\n    width: 80%;\n}\n#editor {\n    height: 580px;\n}\n.switch-code-style {\n    margin-top: 10px;\n    font-size: 16px;\n}\n</style>\n"
  },
  {
    "path": "src/dev/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <title>md-test</title>\n    <meta name=\"viewport\" content=\"width=device-width,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,user-scalable=no\">\n</head>\n<body>\n    <div id=\"main\">\n    </div>\n</body>\n</html>\n"
  },
  {
    "path": "src/dev/index.js",
    "content": "/**\n * @Author: HuaChao Chen <CHC>\n * @Date:   2017-05-04T23:26:08+08:00\n * @Email:  chenhuachaoxyz@gmail.com\n * @Filename: index.js\n * @Last modified by:   chc\n * @Last modified time: 2017-11-25T12:14:56+08:00\n * @License: MIT\n * @Copyright: 2017\n */\n\nimport Vue from 'vue';\nvar demo = require('./demo.vue');\nvar sMd = require('../index.js');\n\nVue.use(sMd);\nvar app = new Vue({\n  el: '#main',\n  render: (h) => h(demo)\n});\n"
  },
  {
    "path": "src/index.js",
    "content": "/**\r\n * Created by zhy on 2017/4/1.\r\n */\r\n'use strict';\r\n\r\n/**\r\n * mavonEditor\r\n * @author hinesboy\r\n */\r\nconst mavonEditor = require('./mavon-editor.vue');\r\nconst VueMavonEditor = {\r\n    /**\r\n     * @deprecated\r\n     * @see mavonEditor.getMarkdownIt()\r\n     */\r\n    markdownIt: mavonEditor.mixins[0].data().markdownIt,\r\n    mavonEditor: mavonEditor,\r\n    LeftToolbar: require('./components/md-toolbar-left'),\r\n    RightToolbar: require('./components/md-toolbar-right'),\r\n    install: function(Vue) {\r\n        Vue.component('mavon-editor', mavonEditor);\r\n    }\r\n};\r\n\r\nmodule.exports = VueMavonEditor;\r\n"
  },
  {
    "path": "src/lib/config.js",
    "content": "/**\n * @Author: HuaChao Chen <CHC>\n * @Date:   2017-05-06T21:40:39+08:00\n * @Email:  chenhuachaoxyz@gmail.com\n * @Filename: config.js\n * @Last modified by:   CHC\n * @Last modified time: 2017-05-06T22:12:49+08:00\n * @License: MIT\n * @Copyright: 2017\n * @desc 初始化配置项\n */\n\nimport help_zh_CN from './lang/zh-CN/help_zh-CN.md'\nimport help_zh_TW from './lang/zh-TW/help_zh-TW.md'\nimport help_en from './lang/en/help_en.md'\nimport help_fr from './lang/fr/help_fr.md'\nimport help_pt_BR from './lang/pt-BR/help_pt-BR.md'\nimport help_ru from './lang/ru/help_ru.md'\nimport help_de from './lang/de/help_de.md'\nimport help_ja from './lang/ja/help_ja.md'\nimport help_kr from './lang/kr/help_kr.md'\n\nimport words_zh_CN from './lang/zh-CN/words_zh-CN.json'\nimport words_zh_TW from './lang/zh-TW/words_zh-TW.json'\nimport words_en from './lang/en/words_en.json'\nimport words_fr from './lang/fr/words_fr.json'\nimport words_pt_BR from './lang/pt-BR/words_pt-BR.json'\nimport words_ru from './lang/ru/words_ru.json'\nimport words_de from './lang/de/words_de.json'\nimport words_ja from './lang/ja/words_ja.json'\nimport words_kr from './lang/kr/words_kr.json'\nexport const CONFIG = {\n    'help_zh-CN': help_zh_CN,\n    'help_zh-TW': help_zh_TW,\n    'help_pt-BR': help_pt_BR,\n    'help_en': help_en,\n    'help_fr': help_fr,\n    'help_ru': help_ru,\n    'help_de': help_de,\n    'help_ja': help_ja,\n    'words_zh-CN': words_zh_CN,\n    'words_zh-TW': words_zh_TW,\n    'words_pt-BR': words_pt_BR,\n    'words_en': words_en,\n    'words_fr': words_fr,\n    'words_ru': words_ru,\n    'words_de': words_de,\n    'words_ja': words_ja,\n    'words_kr': words_kr,\n    'langList': ['en', 'zh-CN', 'zh-TW', 'fr', 'pt-BR', 'ru', 'de', 'ja', 'kr'],\n    'toolbars': {\n        'bold': true,\n        'italic': true,\n        'header': true,\n        'underline': true,\n        'strikethrough': true,\n        'mark': true,\n        'superscript': true,\n        'subscript': true,\n        'quote': true,\n        'ol': true,\n        'ul': true,\n        'link': true,\n        'imagelink': true,\n        'code': true,\n        'table': true,\n        'undo': true,\n        'redo': true,\n        'trash': true,\n        'save': true,\n        'alignleft': true,\n        'aligncenter': true,\n        'alignright': true,\n        'navigation': true,\n        'subfield': true,\n        'fullscreen': true,\n        'readmodel': true,\n        'htmlcode': true,\n        'help': true,\n        'preview': true\n    }\n};\n"
  },
  {
    "path": "src/lib/core/extra-function.js",
    "content": "/**\r\n * @Author: HuaChao Chen <chc>\r\n * @Date:   2017-06-14T23:04:34+08:00\r\n * @Email:  chenhuachaoxyz@gmail.com\r\n * @Filename: extra-function.js\r\n * @Last modified by:   CHC\r\n * @Last modified time: 2017-12-19T17:46:48+08:00\r\n * @License: MIT\r\n * @Copyright: 2017\r\n */\r\n\r\n/**\r\n * Created by zhy on 2017/4/24.\r\n */\r\n/**\r\n * textarea 插入内容\r\n */\r\nexport const insertTextAtCaret = (obj, {prefix, subfix, str, type}, $vm) => {\r\n    obj.focus()\r\n    if (isExistSelectionObj(obj)) {\r\n        var startPos = obj.selectionStart;\r\n        var endPos = obj.selectionEnd;\r\n        var tmpStr = obj.value;\r\n        if (startPos === endPos) {\r\n            // 直接插入\r\n            obj.value = tmpStr.substring(0, startPos) + prefix + str + subfix + tmpStr.substring(endPos, tmpStr.length);\r\n            obj.selectionStart = startPos + prefix.length;\r\n            obj.selectionEnd = startPos + (str.length + prefix.length);\r\n        } else {\r\n            // 存在选中区域\r\n            if (tmpStr.substring(startPos - prefix.length, startPos) === prefix && tmpStr.substring(endPos, endPos + subfix.length) === subfix && judgeItalicAndBold(prefix, subfix, tmpStr, startPos, endPos)) {\r\n                // 取消\r\n                obj.value = tmpStr.substring(0, startPos - prefix.length) + tmpStr.substring(startPos, endPos) + tmpStr.substring(endPos + subfix.length, tmpStr.length);\r\n                obj.selectionStart = startPos - prefix.length;\r\n                obj.selectionEnd = endPos - prefix.length;\r\n            } else {\r\n                // 确定\r\n                obj.value = tmpStr.substring(0, startPos) + prefix + tmpStr.substring(startPos, endPos) + subfix + tmpStr.substring(endPos, tmpStr.length);\r\n                obj.selectionStart = startPos + prefix.length;\r\n                obj.selectionEnd = startPos + (endPos - startPos + prefix.length);\r\n            }\r\n        }\r\n    } else {\r\n        alert('Error: Browser version is too low')\r\n        // obj.value += str;\r\n    }\r\n    // 触发change事件\r\n    $vm.d_value = obj.value\r\n    obj.focus()\r\n}\r\n\r\nconst code_structure = {\r\n    prefix: \"```\",\r\n    subfix: \"\\n```\\n\",\r\n    defaultLanguageText: \"language\"\r\n}\r\n\r\nexport const insertCodeBlock = ($vm) => {\r\n    let obj = $vm.getTextareaDom();\r\n\r\n    if (isExistSelectionObj(obj)) {\r\n        const {defaultLanguageText: language} = code_structure;\r\n        let { selectionStart: startPos, selectionEnd: endPos, value: tmpStr } = obj;\r\n\r\n        if (startPos === endPos) {\r\n            // 直接插入\r\n            insertCodeBlockToVM(language, \"\", obj);\r\n        } else {\r\n            // 存在选中区域\r\n            if (isCancelCodeBlock(obj)) {\r\n                // 取消\r\n                removeCodeBlockFromVM(obj);\r\n            } else {\r\n                // 确定\r\n                let value = tmpStr.substring(startPos, endPos);\r\n                insertCodeBlockToVM(\"\", value, obj);\r\n            }\r\n        }\r\n    } else {\r\n        alert('Error: Browser version is too low');\r\n        return;\r\n    }\r\n\r\n    // 触发change事件\r\n    $vm.d_value = obj.value\r\n    obj.focus();\r\n}\r\n\r\nfunction insertCodeBlockToVM(language, content, selectionObj) {\r\n    const {prefix, subfix} = code_structure;\r\n    let { selectionStart: startPos, selectionEnd: endPos, value: tmpStr } = selectionObj;\r\n\r\n    let value = tmpStr.substring(0, startPos);\r\n    value += prefix + language + \"\\n\";\r\n    value += content;\r\n    value += subfix;\r\n    value += tmpStr.substring(endPos, tmpStr.length);\r\n\r\n    selectionObj.value = value;\r\n    selectionObj.selectionStart = startPos + prefix.length + (language ? 0 : 1);\r\n    selectionObj.selectionEnd = selectionObj.selectionStart + language.length +  content.length;\r\n}\r\n\r\nfunction removeCodeBlockFromVM(selectionObj) {\r\n    let {prefix, subfix, defaultLanguageText: language} = code_structure;\r\n    let { selectionStart: startPos, selectionEnd: endPos, value: content } = selectionObj;\r\n    let selectedValue = content.substring(startPos, endPos);\r\n\r\n    if (content.substring(startPos - 1, startPos) === \"\\n\")\r\n    {\r\n        prefix = prefix + \"\\n\";\r\n    } else {\r\n        subfix = \"\\n\" + subfix;\r\n        if (prefix + language + subfix === content.substring(startPos - prefix.length,endPos + subfix.length)) {\r\n            let value = content.substring(0, startPos - prefix.length);\r\n            value += content.substring(endPos + subfix.length, content.length)\r\n\r\n            selectionObj.value = value;\r\n            selectionObj.selectionStart = startPos - prefix.length;\r\n            selectionObj.selectionEnd = selectionObj.selectionStart;\r\n            return;\r\n        }\r\n    }\r\n\r\n    let value = content.substring(0, startPos - prefix.length);\r\n    value += selectedValue;\r\n    value += content.substring(endPos + subfix.length, content.length)\r\n\r\n    selectionObj.value = value;\r\n    selectionObj.selectionStart = startPos - prefix.length;\r\n    selectionObj.selectionEnd = selectionObj.selectionStart + selectedValue.length;\r\n}\r\n\r\nfunction isExistSelectionObj(textareaDom) {\r\n    return typeof textareaDom.selectionStart === 'number' && typeof textareaDom.selectionEnd === 'number';\r\n}\r\n\r\nfunction isCancelCodeBlock(selectionObj) {\r\n    let { selectionStart: startPos, selectionEnd: endPos, value: content } = selectionObj;\r\n    let {prefix, subfix} = code_structure;\r\n\r\n    if (content.substring(startPos - 1, startPos) === \"\\n\")\r\n    {\r\n        prefix = prefix + \"\\n\";\r\n    } else {\r\n        subfix = \"\\n\" + subfix;\r\n    }\r\n\r\n    return content.substring(startPos - prefix.length, startPos) === prefix &&\r\n                content.substring(endPos, endPos + subfix.length) === subfix;\r\n}\r\n\r\n// 处理粗体与斜体冲突问题\r\nfunction judgeItalicAndBold(prefix, subfix, tmpStr, startPos, endPos) {\r\n    if (prefix === '*' && subfix ===  '*') {\r\n        if (tmpStr.substring(startPos - 2, startPos - 1) === '*' && tmpStr.substring(endPos + 1, endPos + 2) === '*') {\r\n            return false\r\n        }\r\n    }\r\n    return true\r\n}\r\n// 插入有序列表\r\nexport const insertOl = ($vm) => {\r\n    let obj = $vm.getTextareaDom();\r\n    if (isExistSelectionObj(obj)) {\r\n        var startPos = obj.selectionStart;\r\n        var endPos = obj.selectionEnd;\r\n        var tmpStr = obj.value;\r\n        if (startPos === endPos) {\r\n            // 直接插入\r\n            obj.value = tmpStr.substring(0, startPos) + '1. ' + tmpStr.substring(endPos, tmpStr.length);\r\n            obj.selectionEnd = obj.selectionStart = startPos + 3;\r\n        } else {\r\n            // 存在选中区域\r\n            let start = startPos\r\n            while (start > 0 && tmpStr.substring(start - 1, start) !== '\\n') {\r\n                start--\r\n            }\r\n            let selectStr = tmpStr.substring(start, endPos)\r\n            let selectStrs = selectStr.split('\\n')\r\n            for (let i = 0; i < selectStrs.length; i++) {\r\n                selectStrs[i] = (i + 1) + '. ' + selectStrs[i]\r\n            }\r\n            let newSelectStr = selectStrs.join('\\n')\r\n            obj.value = tmpStr.substring(0, start) + newSelectStr + tmpStr.substring(endPos, tmpStr.length);\r\n            obj.selectionStart = start\r\n            obj.selectionEnd = endPos + newSelectStr.length - selectStr.length;\r\n        }\r\n    } else {\r\n        alert('Error: Browser version is too low')\r\n        // obj.value += str;\r\n    }\r\n    // 触发change事件\r\n    $vm.d_value = obj.value\r\n    obj.focus();\r\n}\r\n// 删除行\r\nexport const removeLine = ($vm) => {\r\n    let obj = $vm.getTextareaDom();\r\n    if (isExistSelectionObj(obj)) {\r\n        var startPos = obj.selectionStart;\r\n        var endPos = obj.selectionEnd;\r\n        var tmpStr = obj.value;\r\n        // 找到行首、行尾\r\n        let start = startPos\r\n        while (start > 0 && tmpStr.substring(start - 1, start) !== '\\n') {\r\n            start--\r\n        }\r\n        let end = endPos\r\n        while (end < tmpStr.length && tmpStr.substring(end, end + 1) !== '\\n') {\r\n            end++\r\n        }\r\n        if (end < tmpStr.length) {\r\n            end++\r\n        }\r\n        obj.value = tmpStr.substring(0, start)  + tmpStr.substring(end, tmpStr.length);\r\n        obj.selectionEnd = obj.selectionStart = start === 0 ? 0 : start - 1;\r\n    } else {\r\n        alert('Error: Browser version is too low')\r\n        // obj.value += str;\r\n    }\r\n    // 触发change事件\r\n    $vm.d_value = obj.value\r\n    obj.focus();\r\n}\r\n// 插入无序列表\r\nexport const insertUl = ($vm) => {\r\n    let obj = $vm.getTextareaDom();\r\n    if (isExistSelectionObj(obj)) {\r\n        var startPos = obj.selectionStart;\r\n        var endPos = obj.selectionEnd;\r\n        var tmpStr = obj.value;\r\n        if (startPos === endPos) {\r\n            // 直接插入\r\n            obj.value = tmpStr.substring(0, startPos) + '- ' + tmpStr.substring(endPos, tmpStr.length);\r\n            obj.selectionEnd = obj.selectionStart = startPos + 2;\r\n        } else {\r\n            // 存在选中区域\r\n            let start = startPos\r\n            while (start > 0 && tmpStr.substring(start - 1, start) !== '\\n') {\r\n                start--\r\n            }\r\n            let selectStr = tmpStr.substring(start, endPos)\r\n            let newSelectStr = selectStr.replace(/\\n/g, '\\n- ')\r\n            newSelectStr = '- ' + newSelectStr\r\n            obj.value = tmpStr.substring(0, start) + newSelectStr + tmpStr.substring(endPos, tmpStr.length);\r\n            obj.selectionStart = start\r\n            obj.selectionEnd = endPos + newSelectStr.length - selectStr.length;\r\n        }\r\n    } else {\r\n        alert('Error: Browser version is too low')\r\n        // obj.value += str;\r\n    }\r\n    // 触发change事件\r\n    $vm.d_value = obj.value\r\n    obj.focus();\r\n}\r\n// 插入tab\r\nexport const insertTab = ($vm, tab) => {\r\n    tab = tab ? (new Array(tab)).fill(' ').join('') : '\\t'\r\n    let obj = $vm.getTextareaDom();\r\n    if (isExistSelectionObj(obj)) {\r\n        var startPos = obj.selectionStart;\r\n        var endPos = obj.selectionEnd;\r\n        var tmpStr = obj.value;\r\n        let lastLine = tmpStr.substring(0, startPos).split('\\n').pop()\r\n        if (lastLine.match(/^\\s*[0-9]+\\.\\s+\\S*/)) {\r\n            // 有序列表\r\n            let temp = lastLine.replace(/(\\d+)/, 1)\r\n            obj.value = tmpStr.substring(0, startPos - temp.length) + tab + temp + tmpStr.substring(endPos, tmpStr.length);\r\n        } else if (lastLine.match(/^\\s*-\\s+\\S*/)) {\r\n            // 无序列表\r\n            obj.value = tmpStr.substring(0, startPos - lastLine.length) + tab + lastLine + tmpStr.substring(endPos, tmpStr.length);\r\n        } else {\r\n            obj.value = tmpStr.substring(0, startPos) + tab + tmpStr.substring(endPos, tmpStr.length);\r\n        }\r\n        obj.selectionStart = obj.selectionEnd = startPos + tab.length;\r\n    } else {\r\n        alert('Error: Browser version is too low')\r\n        // obj.value += str;\r\n    }\r\n    // 触发change事件\r\n    $vm.d_value = obj.value\r\n    obj.focus();\r\n}\r\n// shift + tab\r\nexport const unInsertTab = ($vm, tab) => {\r\n    let regTab = new RegExp(tab ? `\\\\s{${tab}}` : '\\t')\r\n    console.log(`regTab:`, regTab)\r\n    let obj = $vm.getTextareaDom();\r\n    if (isExistSelectionObj(obj)) {\r\n        var startPos = obj.selectionStart;\r\n        var endPos = obj.selectionEnd;\r\n        var tmpStr = obj.value;\r\n        let lastLine = tmpStr.substring(0, startPos).split('\\n').pop()\r\n        if (lastLine.search(regTab) >= 0) {\r\n            // 替换最后一个制表符为空\r\n            obj.value = tmpStr.substring(0, startPos - lastLine.length) +  lastLine.replace(regTab, '') + tmpStr.substring(endPos, tmpStr.length);\r\n            obj.selectionStart = obj.selectionEnd = startPos - (tab || 1);\r\n        }\r\n    } else {\r\n        alert('Error: Browser version is too low')\r\n        // obj.value += str;\r\n    }\r\n    // 触发change事件\r\n    $vm.d_value = obj.value\r\n    obj.focus();\r\n}\r\n// 插入enter\r\nexport const insertEnter = ($vm, event) => {\r\n    let obj = $vm.getTextareaDom()\r\n    if (isExistSelectionObj(obj)) {\r\n        var startPos = obj.selectionStart;\r\n        var endPos = obj.selectionEnd;\r\n        var tmpStr = obj.value;\r\n        // 获取光标前最后一行字符串\r\n        let lastLine = tmpStr.substring(0, startPos).split('\\n').pop()\r\n        let matchListNeedChangeLine = lastLine.match(/^\\s*(?:[0-9]+\\.|-)\\s+\\S+/)\r\n        if (matchListNeedChangeLine) {\r\n            // 需要自动产生下一个列表项\r\n            event.preventDefault()\r\n            // eg: [1.  test] 仅获取[1. ]\r\n            let subfix = matchListNeedChangeLine.shift().match(/^\\s*(?:[0-9]+\\.|-)\\s/).shift()\r\n            if (subfix.search(/-/) >= 0) {\r\n                // 无序列表\r\n                obj.value = tmpStr.substring(0, startPos) + '\\n' + subfix + tmpStr.substring(endPos, tmpStr.length);\r\n                obj.selectionStart = obj.selectionEnd = startPos + subfix.length + 1\r\n            } else {\r\n                // 有序列表\r\n                let temp = subfix.replace(/(\\d+)/, parseInt(subfix) + 1)\r\n                obj.value = tmpStr.substring(0, startPos) + '\\n' + temp + tmpStr.substring(endPos, tmpStr.length);\r\n                obj.selectionStart = obj.selectionEnd = startPos + temp.length + 1\r\n            }\r\n        } else {\r\n            let matchListNeedRemoveLine = lastLine.match(/^\\s*(?:[0-9]+\\.|-)\\s+$/)\r\n            if (matchListNeedRemoveLine) {\r\n                // 需要跳出列表\r\n                event.preventDefault()\r\n                let preLength = matchListNeedRemoveLine.shift().length\r\n                obj.value = tmpStr.substring(0, startPos - preLength) + '\\n' + tmpStr.substring(endPos, tmpStr.length);\r\n                obj.selectionStart = obj.selectionEnd = startPos - preLength\r\n                // TODO 检测是否存在嵌套列表，自动生成上一级\r\n            }\r\n        }\r\n    } else {\r\n        alert('Error: Browser version is too low')\r\n    }\r\n    $vm.d_value = obj.value\r\n    obj.focus();\r\n}\r\n/**\r\n * 生成导航目录\r\n */\r\nexport const getNavigation = ($vm , full) => {\r\n    let navigationContent;\r\n\r\n    navigationContent = $vm.$refs.navigationContent\r\n\r\n    navigationContent.innerHTML = $vm.d_render\r\n    let nodes = navigationContent.children\r\n    if (nodes.length) {\r\n        for (let i = 0; i < nodes.length; i++) {\r\n            judageH(nodes[i] , i , nodes)\r\n        }\r\n    }\r\n    function judageH(node , i , nodes) {\r\n        let reg = /^H[1-6]{1}$/;\r\n        if (!reg.exec(node.tagName)) {\r\n            node.style.display = 'none'\r\n        } else {\r\n            node.onclick = function () {\r\n                let vShowContent = $vm.$refs.vShowContent;\r\n                let vNoteEdit = $vm.$refs.vNoteEdit;\r\n                if ($vm.s_subfield) {\r\n                    // 双栏\r\n                    if ($vm.s_preview_switch) {\r\n                        // 编辑预览\r\n                        vNoteEdit.scrollTop = vShowContent.children[i].offsetTop * (vNoteEdit.scrollHeight - vNoteEdit.offsetHeight) / (vShowContent.scrollHeight - vShowContent.offsetHeight);\r\n                    } else {\r\n                        // todo 编辑\r\n                    }\r\n                } else {\r\n                    // 单栏\r\n                    if ($vm.s_preview_switch) {\r\n                        // 预览\r\n                        vShowContent.scrollTop = vShowContent.children[i].offsetTop;\r\n                    } else {\r\n                        // todo 编辑\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * 滚动条联动\r\n */\r\nexport const scrollLink = ($event, $vm) => {\r\n    let element = $event.srcElement ? $event.srcElement : $event.target\r\n    let ratio = element.scrollTop / (element.scrollHeight - element.offsetHeight)\r\n    if ($vm.edit_scroll_height >= 0 && element.scrollHeight !== $vm.edit_scroll_height && (element.scrollHeight - element.offsetHeight - element.scrollTop <= 30)) {\r\n        // star 内容变化 导致 高度增加  且滚动条距离底部小于25px  自动滚动到底部\r\n        $vm.$refs.vNoteEdit.scrollTop = element.scrollHeight - element.offsetHeight\r\n        ratio = 1\r\n    }\r\n    $vm.edit_scroll_height = element.scrollHeight\r\n    // end ----\r\n    if ($vm.$refs.vShowContent.scrollHeight > $vm.$refs.vShowContent.offsetHeight) {\r\n        $vm.$refs.vShowContent.scrollTop = ($vm.$refs.vShowContent.scrollHeight - $vm.$refs.vShowContent.offsetHeight) * ratio\r\n    }\r\n}\r\n/**\r\n * 监听浏览器fullscreen\r\n * @param $vm\r\n */\r\nexport const fullscreenchange = ($vm) => {\r\n    // 阅读模式 全屏监听事件\r\n    $vm.$el.addEventListener('fullscreenchange', function (e) {\r\n        $vm.$toolbar_right_read_change_status()\r\n    }, false);\r\n    $vm.$el.addEventListener('mozfullscreenchange', function (e) {\r\n        $vm.$toolbar_right_read_change_status()\r\n    }, false);\r\n    $vm.$el.addEventListener('webkitfullscreenchange', function (e) {\r\n        $vm.$toolbar_right_read_change_status()\r\n    }, false);\r\n    $vm.$el.addEventListener('msfullscreenchange', function (e) {\r\n        $vm.$toolbar_right_read_change_status()\r\n    }, false);\r\n}\r\n\r\n/**\r\n * 监听浏览器onresize\r\n * @param $vm\r\n */\r\nexport const windowResize = ($vm) => {\r\n    function sizeToStatus() {\r\n        if ($vm.$el.clientWidth > 768) {\r\n            // > 768\r\n            $vm.s_subfield = $vm.subfield;\r\n        }\r\n        else {\r\n            // <  768\r\n            $vm.s_subfield = false;\r\n        }\r\n    }\r\n\r\n    sizeToStatus();\r\n    window.addEventListener('resize', sizeToStatus);\r\n}\r\n\r\nexport function loadScript(src, callback) {\r\n    if (!(typeof callback === 'function')) {\r\n        callback = function() {};\r\n    }\r\n    var check = document.querySelectorAll(\"script[src='\" + src + \"']\");\r\n    if (check.length > 0) {\r\n        check[0].addEventListener('load', function() {\r\n            callback();\r\n        });\r\n        callback();\r\n        return;\r\n    }\r\n    var script = document.createElement('script');\r\n    var head = document.getElementsByTagName('head')[0];\r\n    script.type = 'text/javascript';\r\n    script.charset = 'UTF-8';\r\n    script.src = src;\r\n    if (script.addEventListener) {\r\n        script.addEventListener('load', function () {\r\n            callback();\r\n        }, false);\r\n    } else if (script.attachEvent) {\r\n        script.attachEvent('onreadystatechange', function () {\r\n            var target = window.event.srcElement;\r\n            if (target.readyState === 'loaded') {\r\n                callback();\r\n            }\r\n        });\r\n    }\r\n    head.appendChild(script);\r\n}\r\n\r\n// <link href=\"https://cdn.bootcss.com/highlight.js/9.12.0/styles/agate.min.css\" rel=\"stylesheet\">\r\nexport function loadLink(src, callback, id) {\r\n    if (!(typeof callback === 'function')) {\r\n        callback = function() {};\r\n    }\r\n    var check = document.querySelectorAll(\"link[href='\" + src + \"']\");\r\n    if (check.length > 0) {\r\n        callback();\r\n        return;\r\n    }\r\n\r\n    if (id) {\r\n        var styles = document.querySelectorAll(\"link#\" + id);\r\n        if (styles.length) {\r\n            styles[0].href = src;\r\n            return;\r\n        }\r\n    }\r\n\r\n    var link = document.createElement('link');\r\n    var head = document.getElementsByTagName('head')[0];\r\n    link.rel = 'stylesheet';\r\n    link.href = src;\r\n    id && (link['id'] = id);\r\n    if (link.addEventListener) {\r\n        link.addEventListener('load', function () {\r\n            callback();\r\n        }, false);\r\n    } else if (link.attachEvent) {\r\n        link.attachEvent('onreadystatechange', function () {\r\n            var target = window.event.srcElement;\r\n            if (target.readyState === 'loaded') {\r\n                callback();\r\n            }\r\n        });\r\n    }\r\n    head.appendChild(link);\r\n}\r\n\r\nexport const ImagePreviewListener = ($vm) => {\r\n    // vShowContent\r\n    $vm.$refs.vShowContent.addEventListener('click', function (event) {\r\n        event = event ? event : window.event;\r\n        let ele = event.srcElement ? event.srcElement : event.target;\r\n        if (ele.tagName === 'IMG') {\r\n            if ($vm.imageClick != null) {\r\n                // 覆盖图片点击事件\r\n                $vm.imageClick(ele);\r\n            } else {\r\n                $vm.d_preview_imgsrc = ele.src;\r\n            }\r\n        }\r\n    })\r\n}\r\n"
  },
  {
    "path": "src/lib/core/highlight.js",
    "content": "/**\n * @Author: HuaChao Chen <CHC>\n * @Date:   2017-06-16T21:01:47+08:00\n * @Email:  chenhuachaoxyz@gmail.com\n * @Filename: highlight.js\n * @Last modified by:   chc\n * @Last modified time: 2017-11-24T19:55:22+08:00\n * @License: MIT\n * @Copyright: 2017\n */\n\nimport {\n    loadScript\n} from './extra-function.js'\nfunction highLightCode(str, callback, hljsLangFuc, hljsFuc) {\n    var hljs = window.hljs;\n    if (!hljs) {\n        if (typeof hljsFuc !== 'function') {\n            console.warn('external_link.hljs_js is not a function, hljs can not load by mavon-editor, if you want to disabled this log, set external_link.hljs_js to function');\n            callback(str);\n            return;\n        }\n        var url = hljsFuc();\n        console.warn('hljs parsing file is missing. mavon-editor will autoload', url);\n        loadScript(url, function() {\n            _highLightCode(str, callback, hljsLangFuc);\n        });\n    } else {\n        if (typeof hljsLangFuc === 'function') {\n            _highLightCode(str, callback, hljsLangFuc);\n        } else {\n            console.warn('external_link.hljs_lang is not a function, hljs will not to work');\n            callback(str);\n        }\n    }\n}\nfunction _highLightCode(str, callback, hljsLangFuc) {\n    var dom = document.createElement('div');\n    var hljs = window.hljs;\n    dom.innerHTML = str;\n    var pre_code = dom.querySelectorAll('pre > div.hljs > code');\n    if (pre_code && hljs && (typeof hljsLangFuc === 'function')) {\n        var flag = 0;\n        var i = 0;\n        var deal = 0;\n        var not_include_lang = {}; // these lang parse file need to be include.\n        var url = '';\n        for (i = 0; i < pre_code.length; i++) {\n            var lang = pre_code[i].className.toLowerCase();\n            if (lang.length > 0) {\n                // if this lang parse file missing\n                url = hljsLangFuc(lang);\n                if (!hljs.getLanguage(lang) && !not_include_lang.hasOwnProperty(lang) && url.length > 0) {\n                    not_include_lang[lang] = url;\n                }\n            }\n        }\n        // we need to include these lang parse file manually\n        var need_langs = [];\n        for (var key in not_include_lang) {\n            if (not_include_lang.hasOwnProperty(key)) {\n                need_langs.push(key);\n            }\n        }\n        for (i = 0; i < need_langs.length; i++) {\n            url = not_include_lang[need_langs[i]];\n            loadScript(url, function() {\n                deal = deal + 1;\n                if (deal === need_langs.length) {\n                    for (var i = 0; i < pre_code.length; i++) {\n                        var lang = pre_code[i].className;\n                        // if lang is valid.\n                        if (lang.length > 0 && hljs.getLanguage(lang)) {\n                            hljs.highlightBlock(pre_code[i])\n                        }\n                    }\n                    callback(dom.innerHTML);\n                }\n            });\n        }\n        if (need_langs.length === 0) {\n            for (i = 0; i < pre_code.length; i++) {\n                 lang = pre_code[i].className;\n                // if lang is valid.\n                if (lang.length > 0 && hljs.getLanguage(lang)) {\n                    hljs.highlightBlock(pre_code[i])\n                }\n            }\n            callback(dom.innerHTML);\n        }\n    } else {\n        callback(dom.innerHTML);\n    }\n}\nexport default highLightCode;\n"
  },
  {
    "path": "src/lib/core/hljs/lang.hljs.css.js",
    "content": "export default {\n  agate: 1,\n  androidstudio: 1,\n  'arduino-light': 1,\n  arta: 1,\n  ascetic: 1,\n  'atom-one-dark': 1,\n  'atom-one-light': 1,\n  'brown-paper': 1,\n  'codepen-embed': 1,\n  'color-brewer': 1,\n  dark: 1,\n  default: 1,\n  docco: 1,\n  far: 1,\n  foundation: 1,\n  github: 1,\n  googlecode: 1,\n  grayscale: 1,\n  hybrid: 1,\n  idea: 1,\n  'ir-black': 1,\n  magula: 1,\n  'mono-blue': 1,\n  'monokai-sublime': 1,\n  monokai: 1,\n  obsidian: 1,\n  'paraiso-dark': 1,\n  'paraiso-light': 1,\n  pojoaque: 1,\n  purebasic: 1,\n  rainbow: 1,\n  routeros: 1,\n  'school-book': 1,\n  sunburst: 1,\n  'tomorrow-night-blue': 1,\n  'tomorrow-night-bright': 1,\n  vs: 1,\n  vs2015: 1,\n  xcode: 1,\n  xt256: 1,\n  'a11y-dark': 1,\n  'a11y-light': 1,\n  'an-old-hope': 1,\n  'atom-one-dark-reasonable': 1,\n  'brown-pap': 1,\n  devibeans: 1,\n  'github-dark': 1,\n  'github-dark-dimmed': 1,\n  gml: 1,\n  'gradient-dark': 1,\n  'gradient-light': 1,\n  'isbl-editor-dark': 1,\n  'isbl-editor-light': 1,\n  'kimbie-dark': 1,\n  'kimbie-light': 1,\n  lightfair: 1,\n  lioshi: 1,\n  'night-owl': 1,\n  'nnfx-dark': 1,\n  'nnfx-light': 1,\n  nord: 1,\n  pojo: 1,\n  'qtcreator-dark': 1,\n  'qtcreator-light': 1,\n  'shades-of-purple': 1,\n  srcery: 1,\n  'stackoverflow-dark': 1,\n  'stackoverflow-light': 1\n};\n"
  },
  {
    "path": "src/lib/core/hljs/lang.hljs.js",
    "content": "export default {\n    '1c': '1c',\n    'abnf': 'abnf',\n    'accesslog': 'accesslog',\n    'actionscript': 'actionscript',\n    'as': 'actionscript',\n    'ada': 'ada',\n    'apache': 'apache',\n    'apacheconf': 'apache',\n    'applescript': 'applescript',\n    'osascript': 'applescript',\n    'arduino': 'arduino',\n    'armasm': 'armasm',\n    'arm': 'armasm',\n    'asciidoc': 'asciidoc',\n    'adoc': 'asciidoc',\n    'aspectj': 'aspectj',\n    'autohotkey': 'autohotkey',\n    'ahk': 'autohotkey',\n    'autoit': 'autoit',\n    'avrasm': 'avrasm',\n    'awk': 'awk',\n    'axapta': 'axapta',\n    'bash': 'bash',\n    'sh': 'bash',\n    'zsh': 'bash',\n    'basic': 'basic',\n    'bnf': 'bnf',\n    'brainfuck': 'brainfuck',\n    'bf': 'brainfuck',\n    'cal': 'cal',\n    'capnproto': 'capnproto',\n    'capnp': 'capnproto',\n    'ceylon': 'ceylon',\n    'clean': 'clean',\n    'icl': 'clean',\n    'dcl': 'clean',\n    'clojure-repl': 'clojure-repl',\n    'clojure': 'clojure',\n    'clj': 'clojure',\n    'cmake': 'cmake',\n    'cmake.in': 'cmake',\n    'coffeescript': 'coffeescript',\n    'coffee': 'coffeescript',\n    'cson': 'coffeescript',\n    'iced': 'coffeescript',\n    'coq': 'coq',\n    'cos': 'cos',\n    'cls': 'cos',\n    'cpp': 'cpp',\n    'c': 'cpp',\n    'cc': 'cpp',\n    'h': 'cpp',\n    'c++': 'cpp',\n    'h++': 'cpp',\n    'hpp': 'cpp',\n    'crmsh': 'crmsh',\n    'crm': 'crmsh',\n    'pcmk': 'crmsh',\n    'crystal': 'crystal',\n    'cr': 'crystal',\n    'cs': 'cs',\n    'csharp': 'cs',\n    'csp': 'csp',\n    'css': 'css',\n    'd': 'd',\n    'dart': 'dart',\n    'delphi': 'delphi',\n    'dpr': 'delphi',\n    'dfm': 'delphi',\n    'pas': 'delphi',\n    'pascal': 'delphi',\n    'freepascal': 'delphi',\n    'lazarus': 'delphi',\n    'lpr': 'delphi',\n    'lfm': 'delphi',\n    'diff': 'diff',\n    'patch': 'diff',\n    'django': 'django',\n    'jinja': 'django',\n    'dns': 'dns',\n    'bind': 'dns',\n    'zone': 'dns',\n    'dockerfile': 'dockerfile',\n    'docker': 'dockerfile',\n    'dos': 'dos',\n    'bat': 'dos',\n    'cmd': 'dos',\n    'dsconfig': 'dsconfig',\n    'dts': 'dts',\n    'dust': 'dust',\n    'dst': 'dust',\n    'ebnf': 'ebnf',\n    'elixir': 'elixir',\n    'elm': 'elm',\n    'erb': 'erb',\n    'erlang-repl': 'erlang-repl',\n    'erlang': 'erlang',\n    'erl': 'erlang',\n    'excel': 'excel',\n    'xlsx': 'excel',\n    'xls': 'excel',\n    'fix': 'fix',\n    'flix': 'flix',\n    'fortran': 'fortran',\n    'f90': 'fortran',\n    'f95': 'fortran',\n    'fsharp': 'fsharp',\n    'fs': 'fsharp',\n    'gams': 'gams',\n    'gms': 'gams',\n    'gauss': 'gauss',\n    'gss': 'gauss',\n    'gcode': 'gcode',\n    'nc': 'gcode',\n    'gherkin': 'gherkin',\n    'feature': 'gherkin',\n    'glsl': 'glsl',\n    'go': 'go',\n    'golang': 'go',\n    'golo': 'golo',\n    'gradle': 'gradle',\n    'groovy': 'groovy',\n    'haml': 'haml',\n    'handlebars': 'handlebars',\n    'hbs': 'handlebars',\n    'html.hbs': 'handlebars',\n    'html.handlebars': 'handlebars',\n    'haskell': 'haskell',\n    'hs': 'haskell',\n    'haxe': 'haxe',\n    'hx': 'haxe',\n    'hsp': 'hsp',\n    'htmlbars': 'htmlbars',\n    'http': 'http',\n    'https': 'http',\n    'hy': 'hy',\n    'hylang': 'hy',\n    'inform7': 'inform7',\n    'i7': 'inform7',\n    'ini': 'ini',\n    'toml': 'ini',\n    'irpf90': 'irpf90',\n    'java': 'java',\n    'jsp': 'java',\n    'javascript': 'javascript',\n    'js': 'javascript',\n    'jsx': 'javascript',\n    'jboss-cli': 'jboss-cli',\n    'wildfly-cli': 'jboss-cli',\n    'json': 'json',\n    'julia-repl': 'julia-repl',\n    'julia': 'julia',\n    'kotlin': 'kotlin',\n    'lasso': 'lasso',\n    'ls': 'livescript',\n    'lassoscript': 'lasso',\n    'ldif': 'ldif',\n    'leaf': 'leaf',\n    'less': 'less',\n    'lisp': 'lisp',\n    'livecodeserver': 'livecodeserver',\n    'livescript': 'livescript',\n    'llvm': 'llvm',\n    'lsl': 'lsl',\n    'lua': 'lua',\n    'makefile': 'makefile',\n    'mk': 'makefile',\n    'mak': 'makefile',\n    'markdown': 'markdown',\n    'md': 'markdown',\n    'mkdown': 'markdown',\n    'mkd': 'markdown',\n    'mathematica': 'mathematica',\n    'mma': 'mathematica',\n    'matlab': 'matlab',\n    'maxima': 'maxima',\n    'mel': 'mel',\n    'mercury': 'mercury',\n    'm': 'mercury',\n    'moo': 'mercury',\n    'mipsasm': 'mipsasm',\n    'mips': 'mipsasm',\n    'mizar': 'mizar',\n    'mojolicious': 'mojolicious',\n    'monkey': 'monkey',\n    'moonscript': 'moonscript',\n    'moon': 'moonscript',\n    'n1ql': 'n1ql',\n    'nginx': 'nginx',\n    'nginxconf': 'nginx',\n    'nimrod': 'nimrod',\n    'nim': 'nimrod',\n    'nix': 'nix',\n    'nixos': 'nix',\n    'nsis': 'nsis',\n    'objectivec': 'objectivec',\n    'mm': 'objectivec',\n    'objc': 'objectivec',\n    'obj-c': 'objectivec',\n    'ocaml': 'ocaml',\n    'ml': 'sml',\n    'openscad': 'openscad',\n    'scad': 'openscad',\n    'oxygene': 'oxygene',\n    'parser3': 'parser3',\n    'perl': 'perl',\n    'pl': 'perl',\n    'pm': 'perl',\n    'pf': 'pf',\n    'pf.conf': 'pf',\n    'php': 'php',\n    'php3': 'php',\n    'php4': 'php',\n    'php5': 'php',\n    'php6': 'php',\n    'pony': 'pony',\n    'powershell': 'powershell',\n    'ps': 'powershell',\n    'processing': 'processing',\n    'profile': 'profile',\n    'prolog': 'prolog',\n    'protobuf': 'protobuf',\n    'puppet': 'puppet',\n    'pp': 'puppet',\n    'purebasic': 'purebasic',\n    'pb': 'purebasic',\n    'pbi': 'purebasic',\n    'python': 'python',\n    'py': 'python',\n    'gyp': 'python',\n    'q': 'q',\n    'k': 'q',\n    'kdb': 'q',\n    'qml': 'qml',\n    'qt': 'qml',\n    'r': 'r',\n    'rib': 'rib',\n    'roboconf': 'roboconf',\n    'graph': 'roboconf',\n    'instances': 'roboconf',\n    'routeros': 'routeros',\n    'mikrotik': 'routeros',\n    'rsl': 'rsl',\n    'ruby': 'ruby',\n    'rb': 'ruby',\n    'gemspec': 'ruby',\n    'podspec': 'ruby',\n    'thor': 'ruby',\n    'irb': 'ruby',\n    'ruleslanguage': 'ruleslanguage',\n    'rust': 'rust',\n    'rs': 'rust',\n    'scala': 'scala',\n    'scheme': 'scheme',\n    'scilab': 'scilab',\n    'sci': 'scilab',\n    'scss': 'scss',\n    'shell': 'shell',\n    'console': 'shell',\n    'smali': 'smali',\n    'smalltalk': 'smalltalk',\n    'st': 'smalltalk',\n    'sml': 'sml',\n    'sqf': 'sqf',\n    'sql': 'sql',\n    'stan': 'stan',\n    'stata': 'stata',\n    'do': 'stata',\n    'ado': 'stata',\n    'step21': 'step21',\n    'p21': 'step21',\n    'step': 'step21',\n    'stp': 'step21',\n    'stylus': 'stylus',\n    'styl': 'stylus',\n    'subunit': 'subunit',\n    'swift': 'swift',\n    'taggerscript': 'taggerscript',\n    'tap': 'tap',\n    'tcl': 'tcl',\n    'tk': 'tcl',\n    'tex': 'tex',\n    'thrift': 'thrift',\n    'tp': 'tp',\n    'twig': 'twig',\n    'craftcms': 'twig',\n    'typescript': 'typescript',\n    'ts': 'typescript',\n    'vala': 'vala',\n    'vbnet': 'vbnet',\n    'vb': 'vbnet',\n    'vbscript-html': 'vbscript-html',\n    'vbscript': 'vbscript',\n    'vbs': 'vbscript',\n    'verilog': 'verilog',\n    'v': 'verilog',\n    'sv': 'verilog',\n    'svh': 'verilog',\n    'vhdl': 'vhdl',\n    'vim': 'vim',\n    'x86asm': 'x86asm',\n    'xl': 'xl',\n    'tao': 'xl',\n    'xml': 'xml',\n    'html': 'xml',\n    'xhtml': 'xml',\n    'rss': 'xml',\n    'atom': 'xml',\n    'xjb': 'xml',\n    'xsd': 'xml',\n    'xsl': 'xml',\n    'plist': 'xml',\n    'xquery': 'xquery',\n    'xpath': 'xquery',\n    'xq': 'xquery',\n    'yaml': 'yaml',\n    'yml': 'yaml',\n    'YAML': 'yaml',\n    'zephir': 'zephir',\n    'zep': 'zephir'\n};\n"
  },
  {
    "path": "src/lib/core/keydown-listen.js",
    "content": "/**\r\n * @Author: HuaChao Chen <CHC>\r\n * @Date:   2017-05-03T00:31:20+08:00\r\n * @Email:  chenhuachaoxyz@gmail.com\r\n * @Filename: keydown-listen.js\r\n * @Last modified by:   chenhuachao\r\n * @Last modified time: 2017-12-04T00:03:33+08:00\r\n * @License: MIT\r\n * @Copyright: 2017\r\n */\r\n\r\n/**\r\n * Created by zhy on 2017/4/24.\r\n */\r\nconst KEY_CODE = {\r\n    F8: 119,\r\n    F9: 120,\r\n    F10: 121,\r\n    F11: 122,\r\n    F12: 123,\r\n    B: 66,\r\n    I: 73,\r\n    H: 72,\r\n    U: 85,\r\n    D: 68,\r\n    M:77 ,\r\n    Q: 81,\r\n    O: 79,\r\n    L: 76,\r\n    S: 83,\r\n    Z: 90,\r\n    Y: 89,\r\n    C: 67,\r\n    T: 84,\r\n    R: 82,\r\n    DELETE: 8,\r\n    TAB: 9,\r\n    ENTER: 13,\r\n    ONE: 97,\r\n    TWO: 98,\r\n    THREE: 99,\r\n    FOUR: 100,\r\n    FIVE: 101,\r\n    SIX: 102,\r\n    _ONE: 49,\r\n    _TWO: 50,\r\n    _THREE: 51,\r\n    _FOUR: 52,\r\n    _FIVE: 53,\r\n    _SIX: 54\r\n};\r\nexport const keydownListen = ($vm) => {\r\n    if (!$vm.shortCut)\r\n    {\r\n        return\r\n    }\r\n    $vm.$el.addEventListener('keydown', function (e) {\r\n        // 注册监听键盘事件\r\n        if (!(e.ctrlKey || e.metaKey) && !e.altKey && !e.shiftKey) {\r\n            // one key\r\n            switch (e.keyCode) {\r\n                case KEY_CODE.F8: {\r\n                    // F8 导航\r\n                    if ($vm.toolbars.navigation) {\r\n                        e.preventDefault()\r\n                        $vm.toolbar_right_click('navigation')\r\n                    }\r\n                    break;\r\n                }\r\n                case KEY_CODE.F9: {\r\n                    // F9 预览模式\r\n                    if ($vm.toolbars.preview) {\r\n                        e.preventDefault()\r\n                        $vm.toolbar_right_click('preview')\r\n                    }\r\n                    break;\r\n                }\r\n                case KEY_CODE.F10: {\r\n                    // F10 全屏\r\n                    if ($vm.toolbars.fullscreen) {\r\n                        e.preventDefault()\r\n                        $vm.toolbar_right_click('fullscreen')\r\n                    }\r\n                    break;\r\n                }\r\n                case KEY_CODE.F11: {\r\n                    // F11 阅读\r\n                    if ($vm.toolbars.readmodel) {\r\n                        e.preventDefault()\r\n                        $vm.toolbar_right_click('read')\r\n                    }\r\n                    break;\r\n                }\r\n                case KEY_CODE.F12: {\r\n                    // F12 单双栏切换\r\n                    if ($vm.toolbars.subfield) {\r\n                        e.preventDefault()\r\n                        $vm.toolbar_right_click('subfield')\r\n                    }\r\n                    break;\r\n                }\r\n                case KEY_CODE.TAB: {\r\n                    // TAB\r\n                    if (!$vm.$refs.toolbar_left.s_img_link_open) {\r\n                        e.preventDefault()\r\n                        $vm.insertTab();\r\n                    }\r\n                    break;\r\n                }\r\n                case KEY_CODE.ENTER: {\r\n                // enter\r\n                if ($vm.$refs.toolbar_left.s_img_link_open) {\r\n                    // 当添加外部链接的弹出层打开时， enter表示确定输入此链接\r\n                    e.preventDefault()\r\n                    $vm.$refs.toolbar_left.$imgLinkAdd();\r\n                } else {\r\n                    // 在文本框中输入enter\r\n                    $vm.insertEnter(e)\r\n                }\r\n                break;\r\n            }\r\n            }\r\n        } else if ((e.ctrlKey || e.metaKey) && !e.altKey && !e.shiftKey) {\r\n            // ctrl +\r\n            switch (e.keyCode) {\r\n                case KEY_CODE.B: {\r\n                    // B\r\n                    e.preventDefault()\r\n                    $vm.toolbar_left_click('bold')\r\n                    break;\r\n                }\r\n                case KEY_CODE.I: {\r\n                    // I\r\n                    e.preventDefault()\r\n                    $vm.toolbar_left_click('italic')\r\n                    break;\r\n                }\r\n                case KEY_CODE.H: {\r\n                    // H\r\n                    e.preventDefault()\r\n                    $vm.toolbar_left_click('header')\r\n                    break;\r\n                }\r\n                case KEY_CODE.U: {\r\n                    // U\r\n                    e.preventDefault()\r\n                    $vm.toolbar_left_click('underline')\r\n                    break;\r\n                }\r\n                case KEY_CODE.D: {\r\n                    // D\r\n                    e.preventDefault()\r\n                    $vm.toolbar_left_click('removeLine')\r\n                    break;\r\n                }\r\n                case KEY_CODE.M: {\r\n                    // M\r\n                    e.preventDefault()\r\n                    $vm.toolbar_left_click('mark')\r\n                    break;\r\n                }\r\n                case KEY_CODE.Q: {\r\n                    // Q\r\n                    e.preventDefault()\r\n                    $vm.toolbar_left_click('quote')\r\n                    break;\r\n                }\r\n                case KEY_CODE.O: {\r\n                    // O\r\n                    e.preventDefault()\r\n                    $vm.toolbar_left_click('ol')\r\n                    break;\r\n                }\r\n                case KEY_CODE.L: {\r\n                    // L\r\n                    e.preventDefault()\r\n                    $vm.toolbar_left_click('link')\r\n                    break;\r\n                }\r\n                case KEY_CODE.S: {\r\n                    // S\r\n                    e.preventDefault()\r\n                    $vm.toolbar_left_click('save')\r\n                    break;\r\n                }\r\n                case KEY_CODE.Z: {\r\n                    // Z\r\n                    e.preventDefault()\r\n                    $vm.toolbar_left_click('undo')\r\n                    break;\r\n                }\r\n                case KEY_CODE.Y: {\r\n                    // Y\r\n                    e.preventDefault()\r\n                    $vm.toolbar_left_click('redo')\r\n                    break;\r\n                }\r\n                case KEY_CODE.DELETE: {\r\n                    // delete\r\n                    e.preventDefault()\r\n                    $vm.toolbar_left_click('trash')\r\n                    break;\r\n                }\r\n                case KEY_CODE.ONE: {\r\n                    // ONE\r\n                    e.preventDefault()\r\n                    $vm.toolbar_left_click('header1')\r\n                    break;\r\n                }\r\n                case KEY_CODE.TWO: {\r\n                    // TWO\r\n                    e.preventDefault()\r\n                    $vm.toolbar_left_click('header2')\r\n                    break;\r\n                }\r\n                case KEY_CODE.THREE: {\r\n                    // THREE\r\n                    e.preventDefault()\r\n                    $vm.toolbar_left_click('header3')\r\n                    break;\r\n                }\r\n                case KEY_CODE.FOUR: {\r\n                    // FOUR\r\n                    e.preventDefault()\r\n                    $vm.toolbar_left_click('header4')\r\n                    break;\r\n                }\r\n                case KEY_CODE.FIVE: {\r\n                    // FIVE\r\n                    e.preventDefault()\r\n                    $vm.toolbar_left_click('header5')\r\n                    break;\r\n                }\r\n                case KEY_CODE.SIX: {\r\n                    // SIX\r\n                    e.preventDefault()\r\n                    $vm.toolbar_left_click('header6')\r\n                    break;\r\n                }\r\n                case KEY_CODE._ONE: {\r\n                    // ONE\r\n                    e.preventDefault()\r\n                    $vm.toolbar_left_click('header1')\r\n                    break;\r\n                }\r\n                case KEY_CODE._TWO: {\r\n                    // TWO\r\n                    e.preventDefault()\r\n                    $vm.toolbar_left_click('header2')\r\n                    break;\r\n                }\r\n                case KEY_CODE._THREE: {\r\n                    // THREE\r\n                    e.preventDefault()\r\n                    $vm.toolbar_left_click('header3')\r\n                    break;\r\n                }\r\n                case KEY_CODE._FOUR: {\r\n                    // FOUR\r\n                    e.preventDefault()\r\n                    $vm.toolbar_left_click('header4')\r\n                    break;\r\n                }\r\n                case KEY_CODE._FIVE: {\r\n                    // FIVE\r\n                    e.preventDefault()\r\n                    $vm.toolbar_left_click('header5')\r\n                    break;\r\n                }\r\n                case KEY_CODE._SIX: {\r\n                    // SIX\r\n                    e.preventDefault()\r\n                    $vm.toolbar_left_click('header6')\r\n                    break;\r\n                }\r\n            }\r\n        } else if ((e.ctrlKey || e.metaKey) && e.altKey && !e.shiftKey) {\r\n            // ctrl + alt +\r\n            switch (e.keyCode) {\r\n                case KEY_CODE.S: {\r\n                    // S\r\n                    e.preventDefault()\r\n                    $vm.toolbar_left_click('superscript')\r\n                    break;\r\n                }\r\n                case KEY_CODE.U: {\r\n                    // U\r\n                    e.preventDefault()\r\n                    $vm.toolbar_left_click('ul')\r\n                    break;\r\n                }\r\n                case KEY_CODE.L: {\r\n                    // L\r\n                    e.preventDefault()\r\n                    $vm.toolbar_left_click('imagelink')\r\n                    break;\r\n                }\r\n                case KEY_CODE.C: {\r\n                    // C\r\n                    e.preventDefault()\r\n                    $vm.toolbar_left_click('code')\r\n                    break;\r\n                }\r\n                case KEY_CODE.T: {\r\n                    // T\r\n                    e.preventDefault()\r\n                    $vm.toolbar_left_click('table')\r\n                    break;\r\n                }\r\n            }\r\n        } else if ((e.ctrlKey || e.metaKey) && e.shiftKey && !e.altKey) {\r\n            // ctrl + shift\r\n            switch (e.keyCode) {\r\n                case KEY_CODE.S: {\r\n                    // S\r\n                    e.preventDefault()\r\n                    $vm.toolbar_left_click('subscript')\r\n                    break;\r\n                }\r\n                case KEY_CODE.D: {\r\n                    // D\r\n                    e.preventDefault()\r\n                    $vm.toolbar_left_click('strikethrough')\r\n                    break;\r\n                }\r\n                case KEY_CODE.L: {\r\n                    // D\r\n                    e.preventDefault()\r\n                    $vm.toolbar_left_click('alignleft')\r\n                    break;\r\n                }\r\n                case KEY_CODE.R: {\r\n                    // D\r\n                    e.preventDefault()\r\n                    $vm.toolbar_left_click('alignright')\r\n                    break;\r\n                }\r\n                case KEY_CODE.C: {\r\n                    // D\r\n                    e.preventDefault()\r\n                    $vm.toolbar_left_click('aligncenter')\r\n                    break;\r\n                }\r\n            }\r\n        } else if (!(e.ctrlKey || e.metaKey) && e.shiftKey && !e.altKey) {\r\n            // shift +\r\n            switch (e.keyCode) {\r\n                case KEY_CODE.TAB: {\r\n                    // TAB\r\n                    if (!$vm.$refs.toolbar_left.s_img_link_open) {\r\n                        e.preventDefault()\r\n                        $vm.unInsertTab();\r\n                    }\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n    });\r\n}\r\n"
  },
  {
    "path": "src/lib/core/markdown.js",
    "content": "/**\n * @Author: HuaChao Chen <CHC>\n * @Date:   2017-05-03T00:31:20+08:00\n * @Email:  chenhuachaoxyz@gmail.com\n * @Filename: markdown.js\n * @Last modified by:   chc\n * @Last modified time: 2017-11-26T16:40:54+08:00\n * @License: MIT\n * @Copyright: 2017\n */\n\nimport hljsLangs from './hljs/lang.hljs.js'\n\n/**\n * Created by zhy on 2017/3/30.\n */\n// default mode\nvar markdown_config = {\n    html: true,        // Enable HTML tags in source\n    xhtmlOut: true,        // Use '/' to close single tags (<br />).\n    breaks: true,        // Convert '\\n' in paragraphs into <br>\n    langPrefix: 'language-',  // CSS language prefix for fenced blocks. Can be\n    linkify: false,        // 自动识别url\n    typographer: true,\n    quotes: '“”‘’',\n    highlight: function (str, lang) {\n        if (lang && hljsLangs[lang]) {\n            return '<pre><div class=\"hljs\"><code class=\"' + lang + '\">' + markdown.utils.escapeHtml(str) + '</code></div></pre>';\n        }\n        return '<pre><code class=\"' + lang + '\">' + markdown.utils.escapeHtml(str) + '</code></pre>';\n    }\n}\nvar markdown = require('markdown-it')(markdown_config);\n// 表情\nvar emoji = require('markdown-it-emoji');\n// 下标\nvar sub = require('markdown-it-sub')\n// 上标\nvar sup = require('markdown-it-sup')\n// <dl/>\nvar deflist = require('markdown-it-deflist')\n// <abbr/>\nvar abbr = require('markdown-it-abbr')\n// footnote\nvar footnote = require('markdown-it-footnote')\n// insert 带有下划线 样式 ++ ++\nvar insert = require('markdown-it-ins')\n// mark\nvar mark = require('markdown-it-mark')\n// taskLists\nvar taskLists = require('markdown-it-task-lists')\n//\nvar container = require('markdown-it-container')\n// add target=\"_blank\" to all link\nvar defaultRender = markdown.renderer.rules.link_open || function(tokens, idx, options, env, self) {\n    return self.renderToken(tokens, idx, options);\n};\nmarkdown.renderer.rules.link_open = function (tokens, idx, options, env, self) {\n    // If you are sure other plugins can't add `target` - drop check below\n    var aIndex = tokens[idx].attrIndex('target');\n\n    if (aIndex < 0) {\n        tokens[idx].attrPush(['target', '_blank']); // add new attribute\n    } else {\n        tokens[idx].attrs[aIndex][1] = '_blank';    // replace value of existing attr\n    }\n\n    // pass token to default renderer.\n    return defaultRender(tokens, idx, options, env, self);\n};\n// math katex\nvar katex = require('markdown-it-katex-external');\nvar miip = require('markdown-it-images-preview');\nmarkdown.use(emoji)\n    .use(taskLists)\n    .use(sup)\n    .use(sub)\n    .use(container)\n    .use(container, 'hljs-left') /* align left */\n    .use(container, 'hljs-center')/* align center */\n    .use(container, 'hljs-right')/* align right */\n    .use(deflist)\n    .use(abbr)\n    .use(footnote)\n    .use(insert)\n    .use(mark)\n    .use(container)\n    .use(miip)\n    .use(katex)\nexport default markdown\n"
  },
  {
    "path": "src/lib/core/onecolumn-event.js",
    "content": "/**\r\n * Created by zhy on 2017/4/24.\r\n */\r\n/**\r\n * keydown enter\r\n */\r\nexport const onecolumnKeyDownEnter = ($event , $vm , tomarkdown) => {\r\n    let element = $event.srcElement ? $event.srcElement : $event.target\r\n    let sel = window.getSelection();\r\n    let range = sel.getRangeAt(0);\r\n    // code中回车处理\r\n    if (range.startContainer.tagName === 'CODE' || range.startContainer.tagName === 'PRE') {\r\n        $event.preventDefault()\r\n        onecolumnInsert(range.startContainer , '\\n')\r\n    } else if (range.startContainer.parentElement.tagName === 'CODE' || range.startContainer.parentElement.tagName === 'PRE') {\r\n        $event.preventDefault()\r\n        onecolumnInsert(range.startContainer.parentElement , '\\n')\r\n    } else if (!blockQuoteDoubleEnter(range.startContainer , $event , range.startContainer)) {\r\n        $vm.s_table_enter = false\r\n        judgeRender(range.startContainer , $event , range.startContainer , range.startContainer , $vm)\r\n        /* if (result) {\r\n         range = range.cloneRange();\r\n         // code的渲染\r\n         if (result.children !== null && result.children.length > 0 && result.children[0].tagName === 'PRE') {\r\n         result.children[0].children[0].innerHTML = '\\n'\r\n         result.innerHTML += '<div><br/></div>'\r\n         range.setStartAfter(result.children[0].children[0]);\r\n         } else if (result.lastChild) {\r\n         range.setStartAfter(result.lastChild);\r\n         } else {\r\n         range.setStartAfter(result);\r\n         }\r\n         range.collapse(true);\r\n         sel.removeAllRanges();\r\n         sel.addRange(range);\r\n         } */\r\n    }\r\n    $vm.d_value = tomarkdown(element.innerHTML)\r\n}\r\n/**\r\n * insert\r\n */\r\nexport const onecolumnInsert = (dom , html) => {\r\n    dom.focus()\r\n    var sel\r\n    var range\r\n    if (window.getSelection) {\r\n        // IE9 and non-IE\r\n        sel = window.getSelection();\r\n        if (sel.getRangeAt && sel.rangeCount) {\r\n            range = sel.getRangeAt(0);\r\n            range.deleteContents();\r\n            // Range.createContextualFragment() would be useful here but is\r\n            // non-standard and not supported in all browsers (IE9, for one)\r\n            var el = document.createElement('div');\r\n            el.innerHTML = html;\r\n            var frag = document.createDocumentFragment()\r\n            var node\r\n            var lastNode\r\n            while ((node = el.firstChild)) {\r\n                lastNode = frag.appendChild(node);\r\n            }\r\n            range.insertNode(frag);\r\n            // Preserve the selection\r\n            if (lastNode) {\r\n                range = range.cloneRange();\r\n                range.setStartAfter(lastNode);\r\n                range.collapse(true);\r\n                sel.removeAllRanges();\r\n                sel.addRange(range);\r\n            }\r\n        }\r\n    } else if (document.selection && document.selection.type !== 'Control') {\r\n        // IE < 9\r\n        document.selection.createRange().pasteHTML(html);\r\n    }\r\n}\r\n/**\r\n * 连续两次在段落中换行 跳出段落\r\n */\r\nexport const blockQuoteDoubleEnter = (dom , $event , self) => {\r\n    if (dom.tagName) {\r\n        if (dom.getAttribute('class') === 'content-div content-div-edit') {\r\n            return false\r\n        } else if (dom.tagName === 'BLOCKQUOTE') {\r\n            if (!self.innerText || self.innerText === '\\n' || self.innerText === '') {\r\n                $event.preventDefault()\r\n                let sel = window.getSelection();\r\n                let range = sel.getRangeAt(0);\r\n                let next = dom.nextSibling\r\n                self.outerHTML = ''\r\n                dom.outerHTML += '<div><br/></div>'\r\n                range = range.cloneRange()\r\n                range.setStartAfter(next.previousSibling.lastChild);\r\n                range.collapse(true);\r\n                sel.removeAllRanges();\r\n                sel.addRange(range);\r\n            }\r\n            return true\r\n        }\r\n        return blockQuoteDoubleEnter(dom.parentElement, $event , dom)\r\n    } else {\r\n        return blockQuoteDoubleEnter(dom.parentElement, $event , dom)\r\n    }\r\n}\r\n/**\r\n * 在表格中回车特殊处理(暂时只做表格回车 , 后续可能拓展)\r\n */\r\nexport const judgeRender = (dom , $event , self , pre , $vm) => {\r\n    if (dom.tagName) {\r\n        if (dom.tagName === 'TABLE') {\r\n            $vm.s_table_enter = true\r\n            self = dom\r\n        }\r\n        if (dom.getAttribute('class') === 'content-div content-div-edit') {\r\n            // 在表格中回车 在表格后换行\r\n            if ($vm.s_table_enter) {\r\n                let sel = window.getSelection();\r\n                let range = sel.getRangeAt(0);\r\n                range = range.cloneRange()\r\n                $event.preventDefault()\r\n                let next = self.nextSibling\r\n                self.outerHTML += '<div><br/></div>'\r\n                range.setStartAfter(next.previousSibling.lastChild);\r\n                range.collapse(true);\r\n                sel.removeAllRanges();\r\n                sel.addRange(range);\r\n            }\r\n            return;\r\n        }\r\n        judgeRender(dom.parentElement , $event , self , dom , $vm)\r\n        /* let obj = document.createElement('div')\r\n         obj.innerHTML = markdown.render(dom.innerHTML.replace('&gt;' , '>'))\r\n         var objText = obj.innerText\r\n         var domText = dom.innerText\r\n         var objTextNoSpaceEnter = objText.replace(/\\s+/g, '').replace(/[\\r\\n]/g, '')\r\n         var domTextNoSpaceEnter = domText.replace(/\\s+/g, '').replace(/[\\r\\n]/g, '')\r\n         if (obj.children.length > 0) {\r\n         if (obj.children[0].innerText.replace(/\\s+/g, '').replace(/[\\r\\n]/g, '') === domTextNoSpaceEnter || obj.children[0].innerText === domText || objText === domText || domTextNoSpaceEnter === objTextNoSpaceEnter) {\r\n         return judgeRender(dom.parentElement , $event , self ,dom , $vm)\r\n         } else {\r\n         // 有变化\r\n         $event.preventDefault()\r\n         dom.innerHTML = markdown.render(tomarkdown(dom.innerHTML))\r\n         return dom\r\n         }\r\n         } else {\r\n         if (objText === domText || objTextNoSpaceEnter === domTextNoSpaceEnter) {\r\n         return judgeRender(dom.parentElement , $event , self , dom , $vm)\r\n         } else {\r\n         // 有变化\r\n         dom.innerHTML = markdown.render(tomarkdown(obj.innerHTML))\r\n         return dom\r\n         }\r\n         } */\r\n    } else {\r\n        judgeRender(dom.parentElement , $event , self , dom , $vm)\r\n    }\r\n}\r\n"
  },
  {
    "path": "src/lib/core/sanitizer.js",
    "content": "import { FilterXSS } from 'xss';\n\nlet xssHandler;\n\nfunction mavoneditor_sanitizer(state) {\n  if (!xssHandler) {\n    return;\n  }\n  sanitizer(state.tokens, ['inline', 'html_block']);\n}\n\nfunction sanitizer(tokens, types) {\n  let originContent, children;\n  for (let i = 0; i < tokens.length; i++) {\n    if (types.indexOf(tokens[i].type) !== -1) {\n      originContent = tokens[i].content;\n      children = tokens[i].children;\n      tokens[i].content = xssHandler.process(originContent);\n      if (children && children.length && originContent !== tokens[i].content) {\n        sanitizer(children, ['html_inline']);\n      }\n    }\n  }\n}\n\nexport default function (md, xssOptions) {\n  if (md.options.html) {\n    xssHandler = new FilterXSS(xssOptions);\n    md.core.ruler.push('mavoneditor_sanitizer', mavoneditor_sanitizer);\n  }\n}\n"
  },
  {
    "path": "src/lib/core/to-markdown.js",
    "content": "/**\n * @Author: HuaChao Chen <chc>\n * @Date:   2017-05-03T00:31:20+08:00\n * @Email:  chenhuachaoxyz@gmail.com\n * @Filename: to-markdown.js\n * @Last modified by:   chc\n * @Last modified time: 2017-06-12T20:42:27+08:00\n * @License: MIT\n * @Copyright: 2017\n */\n\n/**\n * Created by zhy on 2017/4/9.\n */\nvar toMarkdown = require('to-markdown');\n//\nconst coverterP = {\n  filter: 'P',\n  replacement: function (content) {\n    return '\\n' + content\n  }\n}\nconst coverterp = {\n  filter: 'p',\n  replacement: function (content) {\n    return '\\n' + content\n  }\n}\nconst coverterDiv = {\n  filter: 'DIV',\n  replacement: function (content) {\n    return '\\n' + content\n  }\n}\nconst coverterdiv = {\n  filter: 'div',\n  replacement: function (content) {\n    return '\\n' + content\n  }\n}\n// 解析代码块\nconst coverterCode = {\n  filter: 'pre',\n  replacement: function (content) {\n    let objE = document.createElement('div');\n    objE.innerHTML = content;\n    let codes = objE.getElementsByTagName('code')\n    if (codes !== null && codes.length > 0) {\n      let code = codes[0]\n      let codeType = code.getAttribute('class') === null ? '' : code.getAttribute('class')\n      let codeContent = code.innerText\n      return '\\n```' + codeType + '\\n' + codeContent + '\\n```\\n';\n    }\n    return '\\n```\\n' + content + '\\n```\\n';\n  }\n}\n// 解析表格\nconst coverterTable = {\n  filter: 'table',\n  replacement: function (content) {\n    let table = document.createElement('table');\n    table.innerHTML = content;\n    let dom = '\\n';\n    let tableMark = '';\n    let thead = table.getElementsByTagName('thead')[0];\n    let thead_tr = thead.getElementsByTagName('tr')[0];\n    let thead_th = thead_tr.getElementsByTagName('th')\n    for (let i = 0; i < thead_th.length; i++) {\n      dom += '| ' + thead_th[i].innerText + ' '\n      let text_align = thead_th[i].style.textAlign\n      if (text_align === 'left') {\n        tableMark += '| :- '\n      } else if (text_align === 'center') {\n        tableMark += '| :-: '\n      } else if (text_align === 'right') {\n        tableMark += '| -: '\n      } else {\n        tableMark += '| - '\n      }\n      if (i === thead_th.length - 1) {\n        dom += '|\\n' + tableMark + ' |\\n'\n      }\n    }\n    let tbody\n    if (table.getElementsByTagName('tbody')) {\n      tbody = table.getElementsByTagName('tbody')[0];\n      let tbody_tr = tbody.getElementsByTagName('tr')\n      if (tbody_tr.length > 0) {\n        for (let i = 0; i < tbody_tr.length; i++) {\n          let tbody_td = tbody_tr[i].getElementsByTagName('td')\n          for (let j = 0; j < tbody_td.length; j++) {\n            dom += '| ' + tbody_td[j].innerText + ' ';\n            if (j === tbody_td.length - 1) {\n              dom += '|\\n';\n            }\n          }\n        }\n      }\n    }\n    return dom\n  }\n}\n// 上角标\nconst coverterSup = {\n  filter: 'sup',\n  replacement: function (content) {\n    return '^' + content + '^';\n  }\n}\n// 下角标\nconst coverterSub = {\n  filter: 'sub',\n  replacement: function (content) {\n    return '~' + content + '~';\n  }\n}\n// 下划线\nconst coverterUnderline = {\n  filter: 'ins',\n  replacement: function (content) {\n    return '++' + content + '++';\n  }\n}\n// 中画线\nconst coverterStrikethrough = {\n  filter: 's',\n  replacement: function (content) {\n    return '~~' + content + '~~';\n  }\n}\n// 标记\nconst coverterMark = {\n  filter: 'mark',\n  replacement: function (content) {\n    return '==' + content + '==';\n  }\n}\n// 图片\nconst converterImg = {\n    filter: 'img',\n    replacement: function(content, tag) {\n        var rel = tag.getAttribute('rel');\n        var alt = tag.getAttribute('alt');\n        if (rel && alt) {\n            return '![' + alt + ']' + '(' + rel + ')'\n        }\n        else {\n            var src = tag.getAttribute('src');\n            return '![' + alt + ']' + '(' + src + ')'\n        }\n    }\n}\nvar tomarkdown = function (str) {\n  return toMarkdown(str, {\n    converters: [\n      coverterCode,\n      coverterTable,\n      coverterSup,\n      coverterSub,\n      coverterUnderline,\n      coverterStrikethrough,\n      coverterMark,\n      coverterP,\n      coverterp,\n      coverterDiv,\n      coverterdiv,\n      converterImg\n    ]\n  });\n}\nexport default tomarkdown\n"
  },
  {
    "path": "src/lib/css/markdown.css",
    "content": "@font-face {\n    font-family: octicons-link;\n    src: url(data:font/woff;charset=utf-8;base64,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) format('woff');\n}\n\n.markdown-body {\n    -ms-text-size-adjust: 100%;\n    -webkit-text-size-adjust: 100%;\n    line-height: 1.5;\n    color: #24292e;\n    font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n    font-size: 16px;\n    line-height: 1.5;\n    word-wrap: break-word;\n}\n\n.markdown-body .pl-c {\n    color: #969896;\n}\n\n.markdown-body .pl-c1,\n.markdown-body .pl-s .pl-v {\n    color: #0086b3;\n}\n\n.markdown-body .pl-e,\n.markdown-body .pl-en {\n    color: #795da3;\n}\n\n.markdown-body .pl-smi,\n.markdown-body .pl-s .pl-s1 {\n    color: #333;\n}\n\n.markdown-body .pl-ent {\n    color: #63a35c;\n}\n\n.markdown-body .pl-k {\n    color: #a71d5d;\n}\n\n.markdown-body .pl-s,\n.markdown-body .pl-pds,\n.markdown-body .pl-s .pl-pse .pl-s1,\n.markdown-body .pl-sr,\n.markdown-body .pl-sr .pl-cce,\n.markdown-body .pl-sr .pl-sre,\n.markdown-body .pl-sr .pl-sra {\n    color: #183691;\n}\n\n.markdown-body .pl-v,\n.markdown-body .pl-smw {\n    color: #ed6a43;\n}\n\n.markdown-body .pl-bu {\n    color: #b52a1d;\n}\n\n.markdown-body .pl-ii {\n    color: #f8f8f8;\n    background-color: #b52a1d;\n}\n\n.markdown-body .pl-c2 {\n    color: #f8f8f8;\n    background-color: #b52a1d;\n}\n\n.markdown-body .pl-c2::before {\n    content: \"^M\";\n}\n\n.markdown-body .pl-sr .pl-cce {\n    font-weight: bold;\n    color: #63a35c;\n}\n\n.markdown-body .pl-ml {\n    color: #693a17;\n}\n\n.markdown-body .pl-mh,\n.markdown-body .pl-mh .pl-en,\n.markdown-body .pl-ms {\n    font-weight: bold;\n    color: #1d3e81;\n}\n\n.markdown-body .pl-mq {\n    color: #008080;\n}\n\n.markdown-body .pl-mi {\n    font-style: italic;\n    color: #333;\n}\n\n.markdown-body .pl-mb {\n    font-weight: bold;\n    color: #333;\n}\n\n.markdown-body .pl-md {\n    color: #bd2c00;\n    background-color: #ffecec;\n}\n\n.markdown-body .pl-mi1 {\n    color: #55a532;\n    background-color: #eaffea;\n}\n\n.markdown-body .pl-mc {\n    color: #ef9700;\n    background-color: #ffe3b4;\n}\n\n.markdown-body .pl-mi2 {\n    color: #d8d8d8;\n    background-color: #808080;\n}\n\n.markdown-body .pl-mdr {\n    font-weight: bold;\n    color: #795da3;\n}\n\n.markdown-body .pl-mo {\n    color: #1d3e81;\n}\n\n.markdown-body .pl-ba {\n    color: #595e62;\n}\n\n.markdown-body .pl-sg {\n    color: #c0c0c0;\n}\n\n.markdown-body .pl-corl {\n    text-decoration: underline;\n    color: #183691;\n}\n\n.markdown-body .octicon {\n    display: inline-block;\n    vertical-align: text-top;\n    fill: currentColor;\n}\n\n.markdown-body a {\n    background-color: transparent;\n    -webkit-text-decoration-skip: objects;\n}\n\n.markdown-body a:active,\n.markdown-body a:hover {\n    outline-width: 0;\n}\n\n.markdown-body strong {\n    font-weight: inherit;\n}\n\n.markdown-body strong {\n    font-weight: bolder;\n}\n\n.markdown-body h1 {\n    font-size: 2.4em;\n    margin: 0.67em 0;\n}\n\n.markdown-body img {\n    border-style: none;\n}\n\n.markdown-body svg:not(:root) {\n    overflow: hidden;\n}\n\n.markdown-body code,\n.markdown-body kbd,\n.markdown-body pre {\n    font-family: monospace, monospace;\n    font-size: 1em;\n}\n\n.markdown-body hr {\n    box-sizing: content-box;\n    height: 0;\n    overflow: visible;\n}\n\n.markdown-body input {\n    font: inherit;\n    margin: 0;\n}\n\n.markdown-body input {\n    overflow: visible;\n}\n\n.markdown-body [type=\"checkbox\"] {\n    box-sizing: border-box;\n    padding: 0;\n}\n\n.markdown-body * {\n    box-sizing: border-box;\n}\n\n.markdown-body input {\n    font-family: inherit;\n    font-size: inherit;\n    line-height: inherit;\n}\n\n.markdown-body a {\n    color: #0366d6;\n    text-decoration: none;\n}\n\n.markdown-body a:hover {\n    text-decoration: underline;\n}\n\n.markdown-body strong {\n    font-weight: 600;\n}\n\n.markdown-body hr {\n    height: 0;\n    margin: 15px 0;\n    overflow: hidden;\n    background: transparent;\n    border: 0;\n    border-bottom: 1px solid #dfe2e5;\n}\n\n.markdown-body hr::before {\n    display: table;\n    content: \"\";\n}\n\n.markdown-body hr::after {\n    display: table;\n    clear: both;\n    content: \"\";\n}\n\n.markdown-body table {\n    border-spacing: 0;\n    border-collapse: collapse;\n}\n\n.markdown-body td,\n.markdown-body th {\n    padding: 0;\n}\n\n.markdown-body h1,\n.markdown-body h2,\n.markdown-body h3,\n.markdown-body h4,\n.markdown-body h5,\n.markdown-body h6 {\n    margin-top: 0;\n    margin-bottom: 0;\n}\n\n.markdown-body h1 {\n    font-size: 36px;\n    font-weight: 600;\n}\n.markdown-body h2 {\n    font-size: 28px;\n    font-weight: 600;\n}\n\n.markdown-body h3 {\n    font-size: 20px;\n    font-weight: 600;\n}\n\n.markdown-body h4 {\n    font-size: 18px;\n    font-weight: 600;\n}\n\n.markdown-body h5 {\n    font-size: 14px;\n    font-weight: 600;\n}\n\n.markdown-body h6 {\n    font-size: 12px;\n    font-weight: 600;\n}\n\n.markdown-body p {\n    margin-top: 0;\n    margin-bottom: 6px;\n}\n\n.markdown-body blockquote {\n    margin: 0;\n}\n\n.markdown-body ul,\n.markdown-body ol {\n    padding-left: 0;\n    margin-top: 0;\n    margin-bottom: 0;\n}\n\n.markdown-body ol ol,\n.markdown-body ul ol {\n    list-style-type: lower-roman;\n}\n.markdown-body ul ul ol,\n.markdown-body ul ol ol,\n.markdown-body ol ul ol,\n.markdown-body ol ol ol {\n    list-style-type: lower-alpha;\n}\n\n.markdown-body dd {\n    margin-left: 0;\n}\n\n.markdown-body code {\n    font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, Courier, monospace;\n    font-size: 12px;\n}\n\n.markdown-body pre {\n    margin-top: 0;\n    margin-bottom: 0;\n    font: 12px \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, Courier, monospace;\n}\n\n.markdown-body .octicon {\n    vertical-align: text-bottom;\n}\n\n.markdown-body .pl-0 {\n    padding-left: 0 !important;\n}\n\n.markdown-body .pl-1 {\n    padding-left: 4px !important;\n}\n\n.markdown-body .pl-2 {\n    padding-left: 8px !important;\n}\n\n.markdown-body .pl-3 {\n    padding-left: 16px !important;\n}\n\n.markdown-body .pl-4 {\n    padding-left: 24px !important;\n}\n\n.markdown-body .pl-5 {\n    padding-left: 32px !important;\n}\n\n.markdown-body .pl-6 {\n    padding-left: 40px !important;\n}\n\n.markdown-body::before {\n    display: table;\n    content: \"\";\n}\n\n.markdown-body::after {\n    display: table;\n    clear: both;\n    content: \"\";\n}\n\n.markdown-body > *:first-child {\n    margin-top: 0 !important;\n}\n\n.markdown-body > *:last-child {\n    margin-bottom: 0 !important;\n}\n\n.markdown-body a:not([href]) {\n    color: inherit;\n    text-decoration: none;\n}\n\n.markdown-body .anchor {\n    float: left;\n    padding-right: 4px;\n    margin-left: -20px;\n    line-height: 1;\n}\n\n.markdown-body .anchor:focus {\n    outline: none;\n}\n\n.markdown-body blockquote,\n.markdown-body ul,\n.markdown-body ol,\n.markdown-body dl,\n.markdown-body table,\n.markdown-body pre {\n    margin-top: 0;\n    margin-bottom: 10px;\n}\n\n.markdown-body hr {\n    height: 0.25em;\n    padding: 0;\n    margin: 24px 0;\n    background-color: #e1e4e8;\n    border: 0;\n}\n\n.markdown-body blockquote {\n    padding: 0 1em;\n    color: #6a737d;\n    border-left: 0.25em solid #dfe2e5;\n}\n\n.markdown-body blockquote > :first-child {\n    margin-top: 0;\n}\n\n.markdown-body blockquote > :last-child {\n    margin-bottom: 0;\n}\n\n.markdown-body kbd {\n    display: inline-block;\n    padding: 3px 5px;\n    font-size: 11px;\n    line-height: 10px;\n    color: #444d56;\n    vertical-align: middle;\n    background-color: #fafbfc;\n    border: solid 1px #c6cbd1;\n    border-bottom-color: #959da5;\n    border-radius: 3px;\n    box-shadow: inset 0 -1px 0 #959da5;\n}\n\n.markdown-body h1,\n.markdown-body h2,\n.markdown-body h3,\n.markdown-body h4,\n.markdown-body h5,\n.markdown-body h6 {\n    margin-top: 20px;\n    margin-bottom: 12px;\n    font-weight: 600;\n    line-height: 1.25;\n}\n\n.markdown-body h1 .octicon-link,\n.markdown-body h2 .octicon-link,\n.markdown-body h3 .octicon-link,\n.markdown-body h4 .octicon-link,\n.markdown-body h5 .octicon-link,\n.markdown-body h6 .octicon-link {\n    color: #1b1f23;\n    vertical-align: middle;\n    visibility: hidden;\n}\n\n.markdown-body h1:hover .anchor,\n.markdown-body h2:hover .anchor,\n.markdown-body h3:hover .anchor,\n.markdown-body h4:hover .anchor,\n.markdown-body h5:hover .anchor,\n.markdown-body h6:hover .anchor {\n    text-decoration: none;\n}\n\n.markdown-body h1:hover .anchor .octicon-link,\n.markdown-body h2:hover .anchor .octicon-link,\n.markdown-body h3:hover .anchor .octicon-link,\n.markdown-body h4:hover .anchor .octicon-link,\n.markdown-body h5:hover .anchor .octicon-link,\n.markdown-body h6:hover .anchor .octicon-link {\n    visibility: visible;\n}\n\n.markdown-body h1 {\n    padding-bottom: 0.3em;\n    font-size: 2.2em;\n    border-bottom: 1px solid #eaecef;\n}\n\n.markdown-body h2 {\n    padding-bottom: 0.3em;\n    font-size: 1.8em;\n    border-bottom: 1px solid #eaecef;\n}\n\n.markdown-body h3 {\n    font-size: 1.5em;\n}\n\n.markdown-body h4 {\n    font-size: 1.2em;\n}\n\n.markdown-body h5 {\n    font-size: 16px;\n}\n\n.markdown-body h6 {\n    font-size: 14px;\n    color: #6a737d;\n}\n\n.markdown-body ul,\n.markdown-body ol {\n    padding-left: 2em;\n}\n\n.markdown-body ul ul,\n.markdown-body ul ol,\n.markdown-body ol ol,\n.markdown-body ol ul {\n    margin-top: 0;\n    margin-bottom: 0;\n}\n\n.markdown-body li > p {\n    margin-top: 16px;\n}\n\n.markdown-body li + li {\n    margin-top: 0.25em;\n}\n\n.markdown-body dl {\n    padding: 0;\n}\n\n.markdown-body dl dt {\n    padding: 0;\n    margin-top: 16px;\n    font-size: 1em;\n    font-style: italic;\n    font-weight: 600;\n}\n\n.markdown-body dl dd {\n    padding: 0 16px;\n    margin-bottom: 12px;\n}\n\n.markdown-body table {\n    display: block;\n    width: 100%;\n    overflow: auto;\n}\n\n.markdown-body table th {\n    font-weight: 600;\n}\n\n.markdown-body table th,\n.markdown-body table td {\n    padding: 6px 13px;\n    border: 1px solid #dfe2e5;\n}\n\n.markdown-body table tr {\n    background-color: #fff;\n    border-top: 1px solid #c6cbd1;\n}\n\n.markdown-body table tr:nth-child(2n) {\n    background-color: #f6f8fa;\n}\n\n.markdown-body img {\n    max-width: 100%;\n    box-sizing: content-box;\n    background-color: #fff;\n}\n\n.markdown-body code {\n    padding: 0;\n    padding-top: 0.2em;\n    padding-bottom: 0.2em;\n    margin: 0;\n    font-size: 85%;\n    background-color: rgba(27, 31, 35, 0.05);\n    border-radius: 3px;\n}\n\n.markdown-body code::before,\n.markdown-body code::after {\n    letter-spacing: -0.2em;\n    content: \"\\00a0\";\n}\n\n.markdown-body pre {\n    word-wrap: normal;\n}\n\n.markdown-body pre > code {\n    padding: 0;\n    margin: 0;\n    font-size: 100%;\n    word-break: normal;\n    white-space: pre;\n    background: transparent;\n    border: 0;\n}\n\n.markdown-body .highlight {\n    margin-bottom: 12px;\n}\n\n.markdown-body .highlight pre {\n    margin-bottom: 0;\n    word-break: normal;\n}\n\n.markdown-body .highlight pre,\n.markdown-body pre {\n    padding: 16px;\n    overflow: auto;\n    font-size: 85%;\n    line-height: 1.45;\n    border-radius: 3px;\n}\n\n.markdown-body pre code {\n    display: inline;\n    max-width: auto;\n    padding: 0;\n    margin: 0;\n    overflow: visible;\n    line-height: inherit;\n    word-wrap: normal;\n    background-color: transparent;\n    border: 0;\n}\n\n.markdown-body pre code::before,\n.markdown-body pre code::after {\n    content: normal;\n}\n\n.markdown-body .full-commit .btn-outline:not(:disabled):hover {\n    color: #005cc5;\n    border-color: #005cc5;\n}\n\n.markdown-body kbd {\n    display: inline-block;\n    padding: 3px 5px;\n    font: 11px \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, Courier, monospace;\n    line-height: 10px;\n    color: #444d56;\n    vertical-align: middle;\n    background-color: #fcfcfc;\n    border: solid 1px #c6cbd1;\n    border-bottom-color: #959da5;\n    border-radius: 3px;\n    box-shadow: inset 0 -1px 0 #959da5;\n}\n\n.markdown-body :checked + .radio-label {\n    position: relative;\n    z-index: 1;\n    border-color: #0366d6;\n}\n\n.markdown-body .task-list-item {\n    list-style-type: none;\n}\n\n.markdown-body .task-list-item + .task-list-item {\n    margin-top: 3px;\n}\n\n.markdown-body .task-list-item input {\n    margin: 0 0.2em 0.25em -1.6em;\n    vertical-align: middle;\n}\n\n.markdown-body hr {\n    border-bottom-color: #eee;\n}\n\n/* 高亮 */\n.markdown-body .hljs {\n    display: block;\n    overflow-x: auto;\n    padding: 0.5em;\n    color: #333;\n    background: #f2f3f1\n}\n\n.markdown-body .hljs-comment, .hljs-quote {\n    color: #998;\n    font-style: italic\n}\n\n.markdown-body .hljs-keyword, .hljs-selector-tag, .hljs-subst {\n    color: #333;\n    font-weight: bold\n}\n\n.markdown-body .hljs-number, .hljs-literal, .hljs-variable, .hljs-template-variable, .hljs-tag .hljs-attr {\n    color: #008080\n}\n\n.markdown-body .hljs-string, .hljs-doctag {\n    color: #d14\n}\n\n.markdown-body .hljs-title, .hljs-section, .hljs-selector-id {\n    color: #900;\n    font-weight: bold\n}\n\n.markdown-body .hljs-subst {\n    font-weight: normal\n}\n\n.markdown-body .hljs-type, .hljs-class .hljs-title {\n    color: #458;\n    font-weight: bold\n}\n\n.markdown-body .hljs-tag, .hljs-name, .hljs-attribute {\n    color: #000080;\n    font-weight: normal\n}\n\n.markdown-body .hljs-regexp, .hljs-link {\n    color: #009926\n}\n\n.markdown-body .hljs-symbol, .hljs-bullet {\n    color: #990073\n}\n\n.markdown-body .hljs-built_in, .hljs-builtin-name {\n    color: #0086b3\n}\n\n.markdown-body .hljs-meta {\n    color: #999;\n    font-weight: bold\n}\n\n.markdown-body .hljs-deletion {\n    background: #fdd\n}\n\n.markdown-body .hljs-addition {\n    background: #dfd\n}\n\n.markdown-body .hljs-emphasis {\n    font-style: italic\n}\n\n.markdown-body .hljs-strong {\n    font-weight: bold\n}\n"
  },
  {
    "path": "src/lib/css/mavon-editor.styl",
    "content": "  border-color = 1px solid #F2F6FC\r\n  op-height = 40px\r\n  textarea:disabled\r\n    background-color #ffffff\r\n\r\n  /* 路由内容 */\r\n  .v-note-wrapper\r\n    position relative\r\n    min-width 300px\r\n    min-height 300px\r\n    display flex\r\n    flex-direction column\r\n    background-color #fff\r\n    z-index 1500\r\n    text-align left\r\n    border border-color\r\n    border-radius 4px\r\n    &.fullscreen\r\n      position fixed\r\n      left 0\r\n      right 0\r\n      bottom 0\r\n      top 0\r\n      margin 0\r\n      height auto\r\n      z-index 1501\r\n    .v-note-op\r\n      padding 1px\r\n      width 100%\r\n      display flex\r\n      white-space pre-line\r\n      flex none\r\n      min-height op-height\r\n      user-select none\r\n      border-bottom border-color\r\n      border-radius 4px 4px 0 0\r\n      background-color #fff\r\n      z-index 1\r\n      .v-left-item, .v-right-item\r\n        flex 1\r\n        min-height op-height\r\n        box-sizing border-box\r\n        .op-icon-divider\r\n          height op-height\r\n          border-left 1px solid #e5e5e5\r\n          margin 0 6px 0 4px\r\n        .op-icon\r\n          box-sizing border-box\r\n          display inline-block\r\n          cursor pointer\r\n          height 28px\r\n          width 28px\r\n          margin 6px 0 5px 0px\r\n          font-size 14px\r\n          padding 4.5px 6px 5px 3.5px\r\n          color #757575\r\n          border-radius 5px\r\n          text-align center\r\n          background none\r\n          border none\r\n          outline none\r\n          line-height 1\r\n          //vertical-align middle\r\n          &.dropdown-wrapper\r\n            line-height 18px\r\n          &.selected\r\n            color rgba(0, 0, 0, 0.8)\r\n            background #eaeaea\r\n          &:hover\r\n            color rgba(0, 0, 0, 0.8)\r\n            background #e9e9eb\r\n        &.transition\r\n          .op-icon\r\n            transition all 0.2s linear 0s\r\n      .v-right-item\r\n        text-align right\r\n        padding-right 6px\r\n        max-width 30%\r\n      .v-left-item\r\n        text-align left\r\n        padding-left 6px\r\n    .v-note-panel\r\n      position relative\r\n      border-top none\r\n      display flex\r\n      flex 1\r\n      width 100%\r\n      box-sizing border-box\r\n      overflow hidden\r\n      .v-note-edit.divarea-wrapper\r\n        flex 0 0 50%\r\n        width 50%\r\n        padding 0\r\n        overflow-y scroll\r\n        overflow-x hidden\r\n        box-sizing border-box\r\n        cursor text\r\n        border-bottom-left-radius: 4px;\r\n        scrollbar()\r\n        &.transition\r\n          transition all 0.2s linear 0s\r\n        &.single-edit\r\n          width 100%\r\n          flex 0 0 100%\r\n          overflow-y auto\r\n        &.single-show\r\n          width 0\r\n          flex 0 0 0\r\n          display none\r\n        .content-div\r\n          width 100%\r\n          padding 20px 25px\r\n          box-sizing border-box\r\n          outline 0 none\r\n          border none !important\r\n          color #2c3e50\r\n          font-size 16px\r\n        .content-input-wrapper\r\n          width 100%\r\n          padding 8px 25px 15px 25px\r\n      .v-note-show\r\n        flex 0 0 50%\r\n        width 50%\r\n        overflow-y auto\r\n        padding 0 0\r\n        transition all 0.2s linear 0s\r\n        &.single-show\r\n          flex 0 0 100%\r\n          width 100%\r\n        .v-show-content, .v-show-content-html\r\n          width 100%\r\n          height 100%\r\n          padding 8px 25px 15px 25px\r\n          overflow-y auto\r\n          box-sizing border-box\r\n          overflow-x hidden\r\n          scrollbar()\r\n      .v-note-navigation-wrapper\r\n        display flex\r\n        position absolute\r\n        width 250px\r\n        right 0\r\n        top 0\r\n        bottom 0\r\n        height 100%\r\n        flex-direction column\r\n        background-color rgba(255,255,255,0.98)\r\n        border-left border-color\r\n        border-right border-color\r\n        &.transition\r\n          transition all 0.1s linear 0s\r\n        @media only screen and (max-width 768px)\r\n          width 50%\r\n        &.slideTop-enter-active, &.slideTop-leave-active\r\n          height 100%\r\n        &.slideTop-enter, &.slideTop-leave-active\r\n          height 0\r\n        .v-note-navigation-title\r\n          height 50px\r\n          width 100%\r\n          border-bottom border-color\r\n          flex none\r\n          line-height @height\r\n          font-size 16px\r\n          box-sizing border-box\r\n          padding 0 12px 0 18px\r\n          .v-note-navigation-close\r\n            float right\r\n            color #606266\r\n            font-size 18px\r\n            cursor pointer\r\n            &:hover\r\n              color #303133\r\n        .v-note-navigation-content\r\n          overflow-y auto\r\n          flex 1\r\n          scrollbar()\r\n          padding 8px 0\r\n          h1, h2, h3, h4, h5, h6\r\n            margin 2px 0\r\n            font-weight 500\r\n            font-size 17px\r\n            color #2185d0\r\n            cursor pointer\r\n            line-height normal\r\n            overflow hidden\r\n            text-overflow ellipsis\r\n            white-space nowrap\r\n            padding 0 12px\r\n            border-bottom none\r\n            &:hover\r\n              color #483D8B\r\n              text-decoration-line underline\r\n          h2\r\n            padding-left  27px\r\n            font-size 17px\r\n          h3\r\n            padding-left  42px\r\n            font-size 17px\r\n          h4\r\n            padding-left  58px\r\n            font-size 15px\r\n          h5\r\n            padding-left  72px\r\n            font-size 15px\r\n          h6\r\n            padding-left  87px\r\n            font-size 15px\r\n    .v-note-read-model\r\n      position relative\r\n      display none\r\n      width 100%\r\n      height 100%\r\n      background #fbfbfb\r\n      padding 30px 8% 50px 8%\r\n      overflow-y auto\r\n      scrollbar()\r\n      box-sizing border-box\r\n      &.show\r\n        display block\r\n    &.shadow\r\n      border none\r\n      // box-shadow 0 2px 12px 0 rgba(0, 0, 0, 0.1) \r\n.v-note-help-wrapper\r\n  position fixed\r\n  left 0\r\n  right 0\r\n  top 0\r\n  bottom 0\r\n  background rgba(0, 0, 0, 0.7)\r\n  z-index 1600\r\n  transition all 0.1s linear 0s\r\n  &.fade-enter-active, &.fade-leave-active\r\n    opacity 1\r\n  &.fade-enter, &.fade-leave-active\r\n    opacity 0\r\n  .v-note-help-content\r\n    position relative\r\n    width 60%\r\n    max-width 800px\r\n    margin 30px auto\r\n    height 90%\r\n    min-width 320px\r\n    transition all 0.1s linear 0s\r\n    z-index 3\r\n    border border-color\r\n    &.shadow\r\n      border none\r\n      box-shadow 0 0px 5px rgba(0, 0, 0, .156863), 0 0px 5px rgba(0, 0, 0, .227451)\r\n    i\r\n      font-size 28px\r\n      position absolute\r\n      right 15px\r\n      top 8px\r\n      color rgba(0, 0, 0, 0.7)\r\n      cursor pointer\r\n      &:hover\r\n        color rgba(0, 0, 0, 1)\r\n    .v-note-help-show\r\n      width 100%\r\n      height 100%\r\n      font-size 18px\r\n      background #fbfbfb\r\n      overflow-y auto\r\n      padding 2% 6%\r\n      scrollbar()\r\n\r\n\r\n.v-note-img-wrapper\r\n  position fixed\r\n  display flex\r\n  justify-content center\r\n  align-items center\r\n  left 0\r\n  right 0\r\n  top 0\r\n  bottom 0\r\n  background rgba(0, 0, 0, 0.7)\r\n  z-index 1600\r\n  transition all 0.1s linear 0s\r\n  &.fade-enter-active, &.fade-leave-active\r\n    opacity 1\r\n  &.fade-enter, &.fade-leave-active\r\n    opacity 0\r\n  img\r\n    flex 0 0 auto\r\n    z-index 3\r\n  i\r\n    font-size 28px\r\n    position absolute\r\n    right 15px\r\n    top 8px\r\n    color rgba(255, 255, 255, 0.7)\r\n    cursor pointer\r\n    &:hover\r\n      color rgba(255, 255, 255, 1)\r\nalign()\r\n"
  },
  {
    "path": "src/lib/css/md.css",
    "content": "/**\n * @Author: HuaChao Chen <CHC>\n * @Date:   2017-05-05T15:57:16+08:00\n * @Email:  chenhuachaoxyz@gmail.com\n * @Filename: md.css\n * @Last modified by:   chc\n * @Last modified time: 2017-06-15T00:13:34+08:00\n * @License: MIT\n * @Copyright: 2017\n */\n\n.markdown-body strong{\n    font-weight: bolder;\n}\n\n.markdown-body .hljs-center {\n    text-align: center;\n}\n.markdown-body .hljs-right {\n    text-align: right;\n}\n.markdown-body .hljs-left {\n    text-align: left;\n}\n.markdown-body .hljs {\n    overflow: auto;\n}"
  },
  {
    "path": "src/lib/css/scroll.styl",
    "content": "scrollbar()\r\n  &.scroll-style::-webkit-scrollbar\r\n    width 6px\r\n    background-color #e5e5e5\r\n  &.scroll-style::-webkit-scrollbar-thumb\r\n    background-color #b7b7b7\r\n    border-radius 4px\r\n  &.scroll-style::-webkit-scrollbar-thumb:hover\r\n    background-color #a1a1a1\r\n  &.scroll-style::-webkit-scrollbar-thumb:active\r\n    background-color #a1a1a1\r\n  &.scroll-style::-webkit-scrollbar-track\r\n    -webkit-box-shadow 0 0 0px gray inset\r\n  &.scroll-style-border-radius::-webkit-scrollbar\r\n    border-bottom-right-radius 4px"
  },
  {
    "path": "src/lib/font/LICENSE.txt",
    "content": "Font license info\n\n\n## Font Awesome\n\n   Copyright (C) 2016 by Dave Gandy\n\n   Author:    Dave Gandy\n   License:   SIL ()\n   Homepage:  http://fortawesome.github.com/Font-Awesome/\n\n\n"
  },
  {
    "path": "src/lib/font/README.txt",
    "content": "This webfont is generated by http://fontello.com open source project.\n\n\n================================================================================\nPlease, note, that you should obey original font licenses, used to make this\nwebfont pack. Details available in LICENSE.txt file.\n\n- Usually, it's enough to publish content of LICENSE.txt file somewhere on your\n  site in \"About\" section.\n\n- If your project is open-source, usually, it will be ok to make LICENSE.txt\n  file publicly available in your repository.\n\n- Fonts, used in Fontello, don't require a clickable link on your site.\n  But any kind of additional authors crediting is welcome.\n================================================================================\n\n\nComments on archive content\n---------------------------\n\n- /font/* - fonts in different formats\n\n- /css/*  - different kinds of css, for all situations. Should be ok with \n  twitter bootstrap. Also, you can skip <i> style and assign icon classes\n  directly to text elements, if you don't mind about IE7.\n\n- demo.html - demo file, to show your webfont content\n\n- LICENSE.txt - license info about source fonts, used to build your one.\n\n- config.json - keeps your settings. You can import it back into fontello\n  anytime, to continue your work\n\n\nWhy so many CSS files ?\n-----------------------\n\nBecause we like to fit all your needs :)\n\n- basic file, <your_font_name>.css - is usually enough, it contains @font-face\n  and character code definitions\n\n- *-ie7.css - if you need IE7 support, but still don't wish to put char codes\n  directly into html\n\n- *-codes.css and *-ie7-codes.css - if you like to use your own @font-face\n  rules, but still wish to benefit from css generation. That can be very\n  convenient for automated asset build systems. When you need to update font -\n  no need to manually edit files, just override old version with archive\n  content. See fontello source code for examples.\n\n- *-embedded.css - basic css file, but with embedded WOFF font, to avoid\n  CORS issues in Firefox and IE9+, when fonts are hosted on the separate domain.\n  We strongly recommend to resolve this issue by `Access-Control-Allow-Origin`\n  server headers. But if you ok with dirty hack - this file is for you. Note,\n  that data url moved to separate @font-face to avoid problems with <IE9, when\n  string is too long.\n\n- animate.css - use it to get ideas about spinner rotation animation.\n\n\nAttention for server setup\n--------------------------\n\nYou MUST setup server to reply with proper `mime-types` for font files -\notherwise some browsers will fail to show fonts.\n\nUsually, `apache` already has necessary settings, but `nginx` and other\nwebservers should be tuned. Here is list of mime types for our file extensions:\n\n- `application/vnd.ms-fontobject` - eot\n- `application/x-font-woff` - woff\n- `application/x-font-ttf` - ttf\n- `image/svg+xml` - svg\n"
  },
  {
    "path": "src/lib/font/config.json",
    "content": "{\n  \"name\": \"\",\n  \"css_prefix_text\": \"fa-mavon-\",\n  \"css_use_suffix\": false,\n  \"hinting\": true,\n  \"units_per_em\": 1000,\n  \"ascent\": 850,\n  \"glyphs\": [\n    {\n      \"uid\": \"02cca871bb69da75e8ee286b7055832c\",\n      \"css\": \"bold\",\n      \"code\": 59392,\n      \"src\": \"fontawesome\"\n    },\n    {\n      \"uid\": \"a8cb1c217f02b073db3670c061cc54d2\",\n      \"css\": \"italic\",\n      \"code\": 59393,\n      \"src\": \"fontawesome\"\n    },\n    {\n      \"uid\": \"0c708edd8fae2376b3370aa56d40cf9e\",\n      \"css\": \"header\",\n      \"code\": 61916,\n      \"src\": \"fontawesome\"\n    },\n    {\n      \"uid\": \"d4a4a38a40b728f46dad1de4ac950231\",\n      \"css\": \"underline\",\n      \"code\": 61645,\n      \"src\": \"fontawesome\"\n    },\n    {\n      \"uid\": \"61c242c9e2134d5864d7fdd57b3c9289\",\n      \"css\": \"strikethrough\",\n      \"code\": 61644,\n      \"src\": \"fontawesome\"\n    },\n    {\n      \"uid\": \"f04a5d24e9e659145b966739c4fde82a\",\n      \"css\": \"thumb-tack\",\n      \"code\": 59394,\n      \"src\": \"fontawesome\"\n    },\n    {\n      \"uid\": \"4e88371fb8857dacc1f66afe6314e426\",\n      \"css\": \"superscript\",\n      \"code\": 61739,\n      \"src\": \"fontawesome\"\n    },\n    {\n      \"uid\": \"3d1c929dbc966992185ce749548c1b2c\",\n      \"css\": \"subscript\",\n      \"code\": 61740,\n      \"src\": \"fontawesome\"\n    },\n    {\n      \"uid\": \"ab95e1351ebaec5850101097cbf7097f\",\n      \"css\": \"quote-left\",\n      \"code\": 61709,\n      \"src\": \"fontawesome\"\n    },\n    {\n      \"uid\": \"f6766a8b042c2453a4e153af03294383\",\n      \"css\": \"list-ol\",\n      \"code\": 61643,\n      \"src\": \"fontawesome\"\n    },\n    {\n      \"uid\": \"a2a74f5e7b7d9ba054897d8c795a326a\",\n      \"css\": \"list-ul\",\n      \"code\": 61642,\n      \"src\": \"fontawesome\"\n    },\n    {\n      \"uid\": \"0ddd3e8201ccc7d41f7b7c9d27eca6c1\",\n      \"css\": \"link\",\n      \"code\": 59395,\n      \"src\": \"fontawesome\"\n    },\n    {\n      \"uid\": \"381da2c2f7fd51f8de877c044d7f439d\",\n      \"css\": \"picture-o\",\n      \"code\": 59396,\n      \"src\": \"fontawesome\"\n    },\n    {\n      \"uid\": \"7034e4d22866af82bef811f52fb1ba46\",\n      \"css\": \"code\",\n      \"code\": 61729,\n      \"src\": \"fontawesome\"\n    },\n    {\n      \"uid\": \"8fb55fd696d9a0f58f3b27c1d8633750\",\n      \"css\": \"table\",\n      \"code\": 61646,\n      \"src\": \"fontawesome\"\n    },\n    {\n      \"uid\": \"bc71f4c6e53394d5ba46b063040014f1\",\n      \"css\": \"repeat\",\n      \"code\": 59397,\n      \"src\": \"fontawesome\"\n    },\n    {\n      \"uid\": \"f9c3205df26e7778abac86183aefdc99\",\n      \"css\": \"undo\",\n      \"code\": 59398,\n      \"src\": \"fontawesome\"\n    },\n    {\n      \"uid\": \"f48ae54adfb27d8ada53d0fd9e34ee10\",\n      \"css\": \"trash-o\",\n      \"code\": 59399,\n      \"src\": \"fontawesome\"\n    },\n    {\n      \"uid\": \"f4445feb55521283572ee88bc304f928\",\n      \"css\": \"floppy-o\",\n      \"code\": 59400,\n      \"src\": \"fontawesome\"\n    },\n    {\n      \"uid\": \"559647a6f430b3aeadbecd67194451dd\",\n      \"css\": \"bars\",\n      \"code\": 61641,\n      \"src\": \"fontawesome\"\n    },\n    {\n      \"uid\": \"53dd31a6cc6438192b2d7b09b1c1dd45\",\n      \"css\": \"columns\",\n      \"code\": 61659,\n      \"src\": \"fontawesome\"\n    },\n    {\n      \"uid\": \"07f0832c07f3d9713fffb06c8bffa027\",\n      \"css\": \"window-maximize\",\n      \"code\": 62160,\n      \"src\": \"fontawesome\"\n    },\n    {\n      \"uid\": \"b013f6403e5ab0326614e68d1850fd6b\",\n      \"css\": \"arrows-alt\",\n      \"code\": 61618,\n      \"src\": \"fontawesome\"\n    },\n    {\n      \"uid\": \"3c24ee33c9487bbf18796ca6dffa1905\",\n      \"css\": \"compress\",\n      \"code\": 59401,\n      \"src\": \"fontawesome\"\n    },\n    {\n      \"uid\": \"c5fd349cbd3d23e4ade333789c29c729\",\n      \"css\": \"eye\",\n      \"code\": 59402,\n      \"src\": \"fontawesome\"\n    },\n    {\n      \"uid\": \"7fd683b2c518ceb9e5fa6757f2276faa\",\n      \"css\": \"eye-slash\",\n      \"code\": 59403,\n      \"src\": \"fontawesome\"\n    },\n    {\n      \"uid\": \"17ebadd1e3f274ff0205601eef7b9cc4\",\n      \"css\": \"question-circle\",\n      \"code\": 59404,\n      \"src\": \"fontawesome\"\n    },\n    {\n      \"uid\": \"5211af474d3a9848f67f945e2ccaf143\",\n      \"css\": \"times\",\n      \"code\": 59405,\n      \"src\": \"fontawesome\"\n    },\n    {\n      \"uid\": \"f4f0e849b805be1f6d76b65581cb3b8b\",\n      \"css\": \"align-left\",\n      \"code\": 59407,\n      \"src\": \"fontawesome\"\n    },\n    {\n      \"uid\": \"ae6336c46d73af999fe7460c089abb4d\",\n      \"css\": \"align-center\",\n      \"code\": 59408,\n      \"src\": \"fontawesome\"\n    },\n    {\n      \"uid\": \"e1e7306b47c3c5e6faecce9d32571381\",\n      \"css\": \"align-right\",\n      \"code\": 59409,\n      \"src\": \"fontawesome\"\n    }\n  ]\n}"
  },
  {
    "path": "src/lib/font/css/animation.css",
    "content": "/*\n   Animation example, for spinners\n*/\n.animate-spin {\n  -moz-animation: spin 2s infinite linear;\n  -o-animation: spin 2s infinite linear;\n  -webkit-animation: spin 2s infinite linear;\n  animation: spin 2s infinite linear;\n  display: inline-block;\n}\n@-moz-keyframes spin {\n  0% {\n    -moz-transform: rotate(0deg);\n    -o-transform: rotate(0deg);\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n\n  100% {\n    -moz-transform: rotate(359deg);\n    -o-transform: rotate(359deg);\n    -webkit-transform: rotate(359deg);\n    transform: rotate(359deg);\n  }\n}\n@-webkit-keyframes spin {\n  0% {\n    -moz-transform: rotate(0deg);\n    -o-transform: rotate(0deg);\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n\n  100% {\n    -moz-transform: rotate(359deg);\n    -o-transform: rotate(359deg);\n    -webkit-transform: rotate(359deg);\n    transform: rotate(359deg);\n  }\n}\n@-o-keyframes spin {\n  0% {\n    -moz-transform: rotate(0deg);\n    -o-transform: rotate(0deg);\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n\n  100% {\n    -moz-transform: rotate(359deg);\n    -o-transform: rotate(359deg);\n    -webkit-transform: rotate(359deg);\n    transform: rotate(359deg);\n  }\n}\n@-ms-keyframes spin {\n  0% {\n    -moz-transform: rotate(0deg);\n    -o-transform: rotate(0deg);\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n\n  100% {\n    -moz-transform: rotate(359deg);\n    -o-transform: rotate(359deg);\n    -webkit-transform: rotate(359deg);\n    transform: rotate(359deg);\n  }\n}\n@keyframes spin {\n  0% {\n    -moz-transform: rotate(0deg);\n    -o-transform: rotate(0deg);\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n\n  100% {\n    -moz-transform: rotate(359deg);\n    -o-transform: rotate(359deg);\n    -webkit-transform: rotate(359deg);\n    transform: rotate(359deg);\n  }\n}\n"
  },
  {
    "path": "src/lib/font/css/fontello-codes.css",
    "content": "\n.fa-mavon-bold:before { content: '\\e800'; } /* '' */\n.fa-mavon-italic:before { content: '\\e801'; } /* '' */\n.fa-mavon-thumb-tack:before { content: '\\e802'; } /* '' */\n.fa-mavon-link:before { content: '\\e803'; } /* '' */\n.fa-mavon-picture-o:before { content: '\\e804'; } /* '' */\n.fa-mavon-repeat:before { content: '\\e805'; } /* '' */\n.fa-mavon-undo:before { content: '\\e806'; } /* '' */\n.fa-mavon-trash-o:before { content: '\\e807'; } /* '' */\n.fa-mavon-floppy-o:before { content: '\\e808'; } /* '' */\n.fa-mavon-compress:before { content: '\\e809'; } /* '' */\n.fa-mavon-eye:before { content: '\\e80a'; } /* '' */\n.fa-mavon-eye-slash:before { content: '\\e80b'; } /* '' */\n.fa-mavon-question-circle:before { content: '\\e80c'; } /* '' */\n.fa-mavon-times:before { content: '\\e80d'; } /* '' */\n.fa-mavon-align-left:before { content: '\\e80f'; } /* '' */\n.fa-mavon-align-center:before { content: '\\e810'; } /* '' */\n.fa-mavon-align-right:before { content: '\\e811'; } /* '' */\n.fa-mavon-arrows-alt:before { content: '\\f0b2'; } /* '' */\n.fa-mavon-bars:before { content: '\\f0c9'; } /* '' */\n.fa-mavon-list-ul:before { content: '\\f0ca'; } /* '' */\n.fa-mavon-list-ol:before { content: '\\f0cb'; } /* '' */\n.fa-mavon-strikethrough:before { content: '\\f0cc'; } /* '' */\n.fa-mavon-underline:before { content: '\\f0cd'; } /* '' */\n.fa-mavon-table:before { content: '\\f0ce'; } /* '' */\n.fa-mavon-columns:before { content: '\\f0db'; } /* '' */\n.fa-mavon-quote-left:before { content: '\\f10d'; } /* '' */\n.fa-mavon-code:before { content: '\\f121'; } /* '' */\n.fa-mavon-superscript:before { content: '\\f12b'; } /* '' */\n.fa-mavon-subscript:before { content: '\\f12c'; } /* '' */\n.fa-mavon-header:before { content: '\\f1dc'; } /* '' */\n.fa-mavon-window-maximize:before { content: '\\f2d0'; } /* '' */"
  },
  {
    "path": "src/lib/font/css/fontello-embedded.css",
    "content": "@font-face {\n  font-family: 'fontello';\n  src: url('../font/fontello.eot?30047687');\n  src: url('../font/fontello.eot?30047687#iefix') format('embedded-opentype'),\n       url('../font/fontello.svg?30047687#fontello') format('svg');\n  font-weight: normal;\n  font-style: normal;\n}\n@font-face {\n  font-family: 'fontello';\n  src: url('data:application/octet-stream;base64,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') format('woff'),\n       url('data:application/octet-stream;base64,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') format('truetype');\n}\n/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */\n/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */\n/*\n@media screen and (-webkit-min-device-pixel-ratio:0) {\n  @font-face {\n    font-family: 'fontello';\n    src: url('../font/fontello.svg?30047687#fontello') format('svg');\n  }\n}\n*/\n \n [class^=\"fa-mavon-\"]:before, [class*=\" fa-mavon-\"]:before {\n  font-family: \"fontello\";\n  font-style: normal;\n  font-weight: normal;\n  speak: none;\n \n  display: inline-block;\n  text-decoration: inherit;\n  width: 1em;\n  margin-right: .2em;\n  text-align: center;\n  /* opacity: .8; */\n \n  /* For safety - reset parent styles, that can break glyph codes*/\n  font-variant: normal;\n  text-transform: none;\n     \n  /* fix buttons height, for twitter bootstrap */\n  line-height: 1em;\n \n  /* Animation center compensation - margins should be symmetric */\n  /* remove if not needed */\n  margin-left: .2em;\n \n  /* you can be more comfortable with increased icons size */\n  /* font-size: 120%; */\n \n  /* Uncomment for 3D effect */\n  /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */\n}\n.fa-mavon-bold:before { content: '\\e800'; } /* '' */\n.fa-mavon-italic:before { content: '\\e801'; } /* '' */\n.fa-mavon-thumb-tack:before { content: '\\e802'; } /* '' */\n.fa-mavon-link:before { content: '\\e803'; } /* '' */\n.fa-mavon-picture-o:before { content: '\\e804'; } /* '' */\n.fa-mavon-repeat:before { content: '\\e805'; } /* '' */\n.fa-mavon-undo:before { content: '\\e806'; } /* '' */\n.fa-mavon-trash-o:before { content: '\\e807'; } /* '' */\n.fa-mavon-floppy-o:before { content: '\\e808'; } /* '' */\n.fa-mavon-compress:before { content: '\\e809'; } /* '' */\n.fa-mavon-eye:before { content: '\\e80a'; } /* '' */\n.fa-mavon-eye-slash:before { content: '\\e80b'; } /* '' */\n.fa-mavon-question-circle:before { content: '\\e80c'; } /* '' */\n.fa-mavon-times:before { content: '\\e80d'; } /* '' */\n.fa-mavon-align-left:before { content: '\\e80f'; } /* '' */\n.fa-mavon-align-center:before { content: '\\e810'; } /* '' */\n.fa-mavon-align-right:before { content: '\\e811'; } /* '' */\n.fa-mavon-arrows-alt:before { content: '\\f0b2'; } /* '' */\n.fa-mavon-bars:before { content: '\\f0c9'; } /* '' */\n.fa-mavon-list-ul:before { content: '\\f0ca'; } /* '' */\n.fa-mavon-list-ol:before { content: '\\f0cb'; } /* '' */\n.fa-mavon-strikethrough:before { content: '\\f0cc'; } /* '' */\n.fa-mavon-underline:before { content: '\\f0cd'; } /* '' */\n.fa-mavon-table:before { content: '\\f0ce'; } /* '' */\n.fa-mavon-columns:before { content: '\\f0db'; } /* '' */\n.fa-mavon-quote-left:before { content: '\\f10d'; } /* '' */\n.fa-mavon-code:before { content: '\\f121'; } /* '' */\n.fa-mavon-superscript:before { content: '\\f12b'; } /* '' */\n.fa-mavon-subscript:before { content: '\\f12c'; } /* '' */\n.fa-mavon-header:before { content: '\\f1dc'; } /* '' */\n.fa-mavon-window-maximize:before { content: '\\f2d0'; } /* '' */"
  },
  {
    "path": "src/lib/font/css/fontello-ie7-codes.css",
    "content": "\n.fa-mavon-bold { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe800;&nbsp;'); }\n.fa-mavon-italic { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe801;&nbsp;'); }\n.fa-mavon-thumb-tack { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe802;&nbsp;'); }\n.fa-mavon-link { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe803;&nbsp;'); }\n.fa-mavon-picture-o { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe804;&nbsp;'); }\n.fa-mavon-repeat { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe805;&nbsp;'); }\n.fa-mavon-undo { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe806;&nbsp;'); }\n.fa-mavon-trash-o { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe807;&nbsp;'); }\n.fa-mavon-floppy-o { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe808;&nbsp;'); }\n.fa-mavon-compress { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe809;&nbsp;'); }\n.fa-mavon-eye { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe80a;&nbsp;'); }\n.fa-mavon-eye-slash { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe80b;&nbsp;'); }\n.fa-mavon-question-circle { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe80c;&nbsp;'); }\n.fa-mavon-times { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe80d;&nbsp;'); }\n.fa-mavon-align-left { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe80f;&nbsp;'); }\n.fa-mavon-align-center { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe810;&nbsp;'); }\n.fa-mavon-align-right { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe811;&nbsp;'); }\n.fa-mavon-arrows-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0b2;&nbsp;'); }\n.fa-mavon-bars { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c9;&nbsp;'); }\n.fa-mavon-list-ul { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ca;&nbsp;'); }\n.fa-mavon-list-ol { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0cb;&nbsp;'); }\n.fa-mavon-strikethrough { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0cc;&nbsp;'); }\n.fa-mavon-underline { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0cd;&nbsp;'); }\n.fa-mavon-table { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ce;&nbsp;'); }\n.fa-mavon-columns { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0db;&nbsp;'); }\n.fa-mavon-quote-left { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf10d;&nbsp;'); }\n.fa-mavon-code { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf121;&nbsp;'); }\n.fa-mavon-superscript { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf12b;&nbsp;'); }\n.fa-mavon-subscript { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf12c;&nbsp;'); }\n.fa-mavon-header { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf1dc;&nbsp;'); }\n.fa-mavon-window-maximize { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf2d0;&nbsp;'); }"
  },
  {
    "path": "src/lib/font/css/fontello-ie7.css",
    "content": "[class^=\"fa-mavon-\"], [class*=\" fa-mavon-\"] {\n  font-family: 'fontello';\n  font-style: normal;\n  font-weight: normal;\n \n  /* fix buttons height */\n  line-height: 1em;\n \n  /* you can be more comfortable with increased icons size */\n  /* font-size: 120%; */\n}\n \n.fa-mavon-bold { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe800;&nbsp;'); }\n.fa-mavon-italic { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe801;&nbsp;'); }\n.fa-mavon-thumb-tack { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe802;&nbsp;'); }\n.fa-mavon-link { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe803;&nbsp;'); }\n.fa-mavon-picture-o { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe804;&nbsp;'); }\n.fa-mavon-repeat { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe805;&nbsp;'); }\n.fa-mavon-undo { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe806;&nbsp;'); }\n.fa-mavon-trash-o { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe807;&nbsp;'); }\n.fa-mavon-floppy-o { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe808;&nbsp;'); }\n.fa-mavon-compress { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe809;&nbsp;'); }\n.fa-mavon-eye { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe80a;&nbsp;'); }\n.fa-mavon-eye-slash { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe80b;&nbsp;'); }\n.fa-mavon-question-circle { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe80c;&nbsp;'); }\n.fa-mavon-times { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe80d;&nbsp;'); }\n.fa-mavon-align-left { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe80f;&nbsp;'); }\n.fa-mavon-align-center { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe810;&nbsp;'); }\n.fa-mavon-align-right { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe811;&nbsp;'); }\n.fa-mavon-arrows-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0b2;&nbsp;'); }\n.fa-mavon-bars { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c9;&nbsp;'); }\n.fa-mavon-list-ul { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ca;&nbsp;'); }\n.fa-mavon-list-ol { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0cb;&nbsp;'); }\n.fa-mavon-strikethrough { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0cc;&nbsp;'); }\n.fa-mavon-underline { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0cd;&nbsp;'); }\n.fa-mavon-table { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ce;&nbsp;'); }\n.fa-mavon-columns { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0db;&nbsp;'); }\n.fa-mavon-quote-left { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf10d;&nbsp;'); }\n.fa-mavon-code { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf121;&nbsp;'); }\n.fa-mavon-superscript { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf12b;&nbsp;'); }\n.fa-mavon-subscript { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf12c;&nbsp;'); }\n.fa-mavon-header { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf1dc;&nbsp;'); }\n.fa-mavon-window-maximize { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf2d0;&nbsp;'); }"
  },
  {
    "path": "src/lib/font/css/fontello.css",
    "content": "@font-face {\n  font-family: 'fontello';\n  src: url('../font/fontello.eot?60486047');\n  src: url('../font/fontello.eot?60486047#iefix') format('embedded-opentype'),\n       url('../font/fontello.woff2?60486047') format('woff2'),\n       url('../font/fontello.woff?60486047') format('woff'),\n       url('../font/fontello.ttf?60486047') format('truetype'),\n       url('../font/fontello.svg?60486047#fontello') format('svg');\n  font-weight: normal;\n  font-style: normal;\n}\n/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */\n/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */\n/*\n@media screen and (-webkit-min-device-pixel-ratio:0) {\n  @font-face {\n    font-family: 'fontello';\n    src: url('../font/fontello.svg?60486047#fontello') format('svg');\n  }\n}\n*/\n \n [class^=\"fa-mavon-\"]:before, [class*=\" fa-mavon-\"]:before {\n  font-family: \"fontello\";\n  font-style: normal;\n  font-weight: normal;\n  speak: none;\n \n  display: inline-block;\n  text-decoration: inherit;\n  width: 1em;\n  margin-right: .2em;\n  text-align: center;\n  /* opacity: .8; */\n \n  /* For safety - reset parent styles, that can break glyph codes*/\n  font-variant: normal;\n  text-transform: none;\n \n  /* fix buttons height, for twitter bootstrap */\n  line-height: 1em;\n \n  /* Animation center compensation - margins should be symmetric */\n  /* remove if not needed */\n  margin-left: .2em;\n \n  /* you can be more comfortable with increased icons size */\n  /* font-size: 120%; */\n \n  /* Font smoothing. That was taken from TWBS */\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n \n  /* Uncomment for 3D effect */\n  /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */\n}\n \n.fa-mavon-bold:before { content: '\\e800'; } /* '' */\n.fa-mavon-italic:before { content: '\\e801'; } /* '' */\n.fa-mavon-thumb-tack:before { content: '\\e802'; } /* '' */\n.fa-mavon-link:before { content: '\\e803'; } /* '' */\n.fa-mavon-picture-o:before { content: '\\e804'; } /* '' */\n.fa-mavon-repeat:before { content: '\\e805'; } /* '' */\n.fa-mavon-undo:before { content: '\\e806'; } /* '' */\n.fa-mavon-trash-o:before { content: '\\e807'; } /* '' */\n.fa-mavon-floppy-o:before { content: '\\e808'; } /* '' */\n.fa-mavon-compress:before { content: '\\e809'; } /* '' */\n.fa-mavon-eye:before { content: '\\e80a'; } /* '' */\n.fa-mavon-eye-slash:before { content: '\\e80b'; } /* '' */\n.fa-mavon-question-circle:before { content: '\\e80c'; } /* '' */\n.fa-mavon-times:before { content: '\\e80d'; } /* '' */\n.fa-mavon-align-left:before { content: '\\e80f'; } /* '' */\n.fa-mavon-align-center:before { content: '\\e810'; } /* '' */\n.fa-mavon-align-right:before { content: '\\e811'; } /* '' */\n.fa-mavon-arrows-alt:before { content: '\\f0b2'; } /* '' */\n.fa-mavon-bars:before { content: '\\f0c9'; } /* '' */\n.fa-mavon-list-ul:before { content: '\\f0ca'; } /* '' */\n.fa-mavon-list-ol:before { content: '\\f0cb'; } /* '' */\n.fa-mavon-strikethrough:before { content: '\\f0cc'; } /* '' */\n.fa-mavon-underline:before { content: '\\f0cd'; } /* '' */\n.fa-mavon-table:before { content: '\\f0ce'; } /* '' */\n.fa-mavon-columns:before { content: '\\f0db'; } /* '' */\n.fa-mavon-quote-left:before { content: '\\f10d'; } /* '' */\n.fa-mavon-code:before { content: '\\f121'; } /* '' */\n.fa-mavon-superscript:before { content: '\\f12b'; } /* '' */\n.fa-mavon-subscript:before { content: '\\f12c'; } /* '' */\n.fa-mavon-header:before { content: '\\f1dc'; } /* '' */\n.fa-mavon-window-maximize:before { content: '\\f2d0'; } /* '' */"
  },
  {
    "path": "src/lib/font/demo.html",
    "content": "<!DOCTYPE html>\n<html>\n  <head><!--[if lt IE 9]><script language=\"javascript\" type=\"text/javascript\" src=\"//html5shim.googlecode.com/svn/trunk/html5.js\"></script><![endif]-->\n    <meta charset=\"UTF-8\"><style>/*\n * Bootstrap v2.2.1\n *\n * Copyright 2012 Twitter, Inc\n * Licensed under the Apache License v2.0\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Designed and built with all the love in the world @twitter by @mdo and @fat.\n */\n.clearfix {\n  *zoom: 1;\n}\n.clearfix:before,\n.clearfix:after {\n  display: table;\n  content: \"\";\n  line-height: 0;\n}\n.clearfix:after {\n  clear: both;\n}\nhtml {\n  font-size: 100%;\n  -webkit-text-size-adjust: 100%;\n  -ms-text-size-adjust: 100%;\n}\na:focus {\n  outline: thin dotted #333;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\na:hover,\na:active {\n  outline: 0;\n}\nbutton,\ninput,\nselect,\ntextarea {\n  margin: 0;\n  font-size: 100%;\n  vertical-align: middle;\n}\nbutton,\ninput {\n  *overflow: visible;\n  line-height: normal;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  padding: 0;\n  border: 0;\n}\nbody {\n  margin: 0;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  line-height: 20px;\n  color: #333;\n  background-color: #fff;\n}\na {\n  color: #08c;\n  text-decoration: none;\n}\na:hover {\n  color: #005580;\n  text-decoration: underline;\n}\n.row {\n  margin-left: -20px;\n  *zoom: 1;\n}\n.row:before,\n.row:after {\n  display: table;\n  content: \"\";\n  line-height: 0;\n}\n.row:after {\n  clear: both;\n}\n[class*=\"span\"] {\n  float: left;\n  min-height: 1px;\n  margin-left: 20px;\n}\n.container,\n.navbar-static-top .container,\n.navbar-fixed-top .container,\n.navbar-fixed-bottom .container {\n  width: 940px;\n}\n.span12 {\n  width: 940px;\n}\n.span11 {\n  width: 860px;\n}\n.span10 {\n  width: 780px;\n}\n.span9 {\n  width: 700px;\n}\n.span8 {\n  width: 620px;\n}\n.span7 {\n  width: 540px;\n}\n.span6 {\n  width: 460px;\n}\n.span5 {\n  width: 380px;\n}\n.span4 {\n  width: 300px;\n}\n.span3 {\n  width: 220px;\n}\n.span2 {\n  width: 140px;\n}\n.span1 {\n  width: 60px;\n}\n[class*=\"span\"].pull-right,\n.row-fluid [class*=\"span\"].pull-right {\n  float: right;\n}\n.container {\n  margin-right: auto;\n  margin-left: auto;\n  *zoom: 1;\n}\n.container:before,\n.container:after {\n  display: table;\n  content: \"\";\n  line-height: 0;\n}\n.container:after {\n  clear: both;\n}\np {\n  margin: 0 0 10px;\n}\n.lead {\n  margin-bottom: 20px;\n  font-size: 21px;\n  font-weight: 200;\n  line-height: 30px;\n}\nsmall {\n  font-size: 85%;\n}\nh1 {\n  margin: 10px 0;\n  font-family: inherit;\n  font-weight: bold;\n  line-height: 20px;\n  color: inherit;\n  text-rendering: optimizelegibility;\n}\nh1 small {\n  font-weight: normal;\n  line-height: 1;\n  color: #999;\n}\nh1 {\n  line-height: 40px;\n}\nh1 {\n  font-size: 38.5px;\n}\nh1 small {\n  font-size: 24.5px;\n}\nbody {\n  margin-top: 90px;\n}\n.header {\n  position: fixed;\n  top: 0;\n  left: 50%;\n  margin-left: -480px;\n  background-color: #fff;\n  border-bottom: 1px solid #ddd;\n  padding-top: 10px;\n  z-index: 10;\n}\n.footer {\n  color: #ddd;\n  font-size: 12px;\n  text-align: center;\n  margin-top: 20px;\n}\n.footer a {\n  color: #ccc;\n  text-decoration: underline;\n}\n.the-icons {\n  font-size: 14px;\n  line-height: 24px;\n}\n.switch {\n  position: absolute;\n  right: 0;\n  bottom: 10px;\n  color: #666;\n}\n.switch input {\n  margin-right: 0.3em;\n}\n.codesOn .i-name {\n  display: none;\n}\n.codesOn .i-code {\n  display: inline;\n}\n.i-code {\n  display: none;\n}\n@font-face {\n      font-family: 'fontello';\n      src: url('./font/fontello.eot?55997964');\n      src: url('./font/fontello.eot?55997964#iefix') format('embedded-opentype'),\n           url('./font/fontello.woff?55997964') format('woff'),\n           url('./font/fontello.ttf?55997964') format('truetype'),\n           url('./font/fontello.svg?55997964#fontello') format('svg');\n      font-weight: normal;\n      font-style: normal;\n    }\n     \n     \n    .demo-icon\n    {\n      font-family: \"fontello\";\n      font-style: normal;\n      font-weight: normal;\n      speak: none;\n     \n      display: inline-block;\n      text-decoration: inherit;\n      width: 1em;\n      margin-right: .2em;\n      text-align: center;\n      /* opacity: .8; */\n     \n      /* For safety - reset parent styles, that can break glyph codes*/\n      font-variant: normal;\n      text-transform: none;\n     \n      /* fix buttons height, for twitter bootstrap */\n      line-height: 1em;\n     \n      /* Animation center compensation - margins should be symmetric */\n      /* remove if not needed */\n      margin-left: .2em;\n     \n      /* You can be more comfortable with increased icons size */\n      /* font-size: 120%; */\n     \n      /* Font smoothing. That was taken from TWBS */\n      -webkit-font-smoothing: antialiased;\n      -moz-osx-font-smoothing: grayscale;\n     \n      /* Uncomment for 3D effect */\n      /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */\n    }\n     </style>\n    <link rel=\"stylesheet\" href=\"css/animation.css\"><!--[if IE 7]><link rel=\"stylesheet\" href=\"css/fontello-ie7.css\"><![endif]-->\n    <script>\n      function toggleCodes(on) {\n        var obj = document.getElementById('icons');\n      \n        if (on) {\n          obj.className += ' codesOn';\n        } else {\n          obj.className = obj.className.replace(' codesOn', '');\n        }\n      }\n      \n    </script>\n  </head>\n  <body>\n    <div class=\"container header\">\n      <h1>\n        fontello\n         <small>font demo</small>\n      </h1>\n      <label class=\"switch\">\n        <input type=\"checkbox\" onclick=\"toggleCodes(this.checked)\">show codes\n      </label>\n    </div>\n    <div id=\"icons\" class=\"container\">\n      <div class=\"row\">\n        <div title=\"Code: 0xe800\" class=\"the-icons span3\"><i class=\"demo-icon fa-mavon-bold\">&#xe800;</i> <span class=\"i-name\">fa-mavon-bold</span><span class=\"i-code\">0xe800</span></div>\n        <div title=\"Code: 0xe801\" class=\"the-icons span3\"><i class=\"demo-icon fa-mavon-italic\">&#xe801;</i> <span class=\"i-name\">fa-mavon-italic</span><span class=\"i-code\">0xe801</span></div>\n        <div title=\"Code: 0xe802\" class=\"the-icons span3\"><i class=\"demo-icon fa-mavon-thumb-tack\">&#xe802;</i> <span class=\"i-name\">fa-mavon-thumb-tack</span><span class=\"i-code\">0xe802</span></div>\n        <div title=\"Code: 0xe803\" class=\"the-icons span3\"><i class=\"demo-icon fa-mavon-link\">&#xe803;</i> <span class=\"i-name\">fa-mavon-link</span><span class=\"i-code\">0xe803</span></div>\n      </div>\n      <div class=\"row\">\n        <div title=\"Code: 0xe804\" class=\"the-icons span3\"><i class=\"demo-icon fa-mavon-picture-o\">&#xe804;</i> <span class=\"i-name\">fa-mavon-picture-o</span><span class=\"i-code\">0xe804</span></div>\n        <div title=\"Code: 0xe805\" class=\"the-icons span3\"><i class=\"demo-icon fa-mavon-repeat\">&#xe805;</i> <span class=\"i-name\">fa-mavon-repeat</span><span class=\"i-code\">0xe805</span></div>\n        <div title=\"Code: 0xe806\" class=\"the-icons span3\"><i class=\"demo-icon fa-mavon-undo\">&#xe806;</i> <span class=\"i-name\">fa-mavon-undo</span><span class=\"i-code\">0xe806</span></div>\n        <div title=\"Code: 0xe807\" class=\"the-icons span3\"><i class=\"demo-icon fa-mavon-trash-o\">&#xe807;</i> <span class=\"i-name\">fa-mavon-trash-o</span><span class=\"i-code\">0xe807</span></div>\n      </div>\n      <div class=\"row\">\n        <div title=\"Code: 0xe808\" class=\"the-icons span3\"><i class=\"demo-icon fa-mavon-floppy-o\">&#xe808;</i> <span class=\"i-name\">fa-mavon-floppy-o</span><span class=\"i-code\">0xe808</span></div>\n        <div title=\"Code: 0xe809\" class=\"the-icons span3\"><i class=\"demo-icon fa-mavon-compress\">&#xe809;</i> <span class=\"i-name\">fa-mavon-compress</span><span class=\"i-code\">0xe809</span></div>\n        <div title=\"Code: 0xe80a\" class=\"the-icons span3\"><i class=\"demo-icon fa-mavon-eye\">&#xe80a;</i> <span class=\"i-name\">fa-mavon-eye</span><span class=\"i-code\">0xe80a</span></div>\n        <div title=\"Code: 0xe80b\" class=\"the-icons span3\"><i class=\"demo-icon fa-mavon-eye-slash\">&#xe80b;</i> <span class=\"i-name\">fa-mavon-eye-slash</span><span class=\"i-code\">0xe80b</span></div>\n      </div>\n      <div class=\"row\">\n        <div title=\"Code: 0xe80c\" class=\"the-icons span3\"><i class=\"demo-icon fa-mavon-question-circle\">&#xe80c;</i> <span class=\"i-name\">fa-mavon-question-circle</span><span class=\"i-code\">0xe80c</span></div>\n        <div title=\"Code: 0xe80d\" class=\"the-icons span3\"><i class=\"demo-icon fa-mavon-times\">&#xe80d;</i> <span class=\"i-name\">fa-mavon-times</span><span class=\"i-code\">0xe80d</span></div>\n        <div title=\"Code: 0xe80f\" class=\"the-icons span3\"><i class=\"demo-icon fa-mavon-align-left\">&#xe80f;</i> <span class=\"i-name\">fa-mavon-align-left</span><span class=\"i-code\">0xe80f</span></div>\n        <div title=\"Code: 0xe810\" class=\"the-icons span3\"><i class=\"demo-icon fa-mavon-align-center\">&#xe810;</i> <span class=\"i-name\">fa-mavon-align-center</span><span class=\"i-code\">0xe810</span></div>\n      </div>\n      <div class=\"row\">\n        <div title=\"Code: 0xe811\" class=\"the-icons span3\"><i class=\"demo-icon fa-mavon-align-right\">&#xe811;</i> <span class=\"i-name\">fa-mavon-align-right</span><span class=\"i-code\">0xe811</span></div>\n        <div title=\"Code: 0xf0b2\" class=\"the-icons span3\"><i class=\"demo-icon fa-mavon-arrows-alt\">&#xf0b2;</i> <span class=\"i-name\">fa-mavon-arrows-alt</span><span class=\"i-code\">0xf0b2</span></div>\n        <div title=\"Code: 0xf0c9\" class=\"the-icons span3\"><i class=\"demo-icon fa-mavon-bars\">&#xf0c9;</i> <span class=\"i-name\">fa-mavon-bars</span><span class=\"i-code\">0xf0c9</span></div>\n        <div title=\"Code: 0xf0ca\" class=\"the-icons span3\"><i class=\"demo-icon fa-mavon-list-ul\">&#xf0ca;</i> <span class=\"i-name\">fa-mavon-list-ul</span><span class=\"i-code\">0xf0ca</span></div>\n      </div>\n      <div class=\"row\">\n        <div title=\"Code: 0xf0cb\" class=\"the-icons span3\"><i class=\"demo-icon fa-mavon-list-ol\">&#xf0cb;</i> <span class=\"i-name\">fa-mavon-list-ol</span><span class=\"i-code\">0xf0cb</span></div>\n        <div title=\"Code: 0xf0cc\" class=\"the-icons span3\"><i class=\"demo-icon fa-mavon-strikethrough\">&#xf0cc;</i> <span class=\"i-name\">fa-mavon-strikethrough</span><span class=\"i-code\">0xf0cc</span></div>\n        <div title=\"Code: 0xf0cd\" class=\"the-icons span3\"><i class=\"demo-icon fa-mavon-underline\">&#xf0cd;</i> <span class=\"i-name\">fa-mavon-underline</span><span class=\"i-code\">0xf0cd</span></div>\n        <div title=\"Code: 0xf0ce\" class=\"the-icons span3\"><i class=\"demo-icon fa-mavon-table\">&#xf0ce;</i> <span class=\"i-name\">fa-mavon-table</span><span class=\"i-code\">0xf0ce</span></div>\n      </div>\n      <div class=\"row\">\n        <div title=\"Code: 0xf0db\" class=\"the-icons span3\"><i class=\"demo-icon fa-mavon-columns\">&#xf0db;</i> <span class=\"i-name\">fa-mavon-columns</span><span class=\"i-code\">0xf0db</span></div>\n        <div title=\"Code: 0xf10d\" class=\"the-icons span3\"><i class=\"demo-icon fa-mavon-quote-left\">&#xf10d;</i> <span class=\"i-name\">fa-mavon-quote-left</span><span class=\"i-code\">0xf10d</span></div>\n        <div title=\"Code: 0xf121\" class=\"the-icons span3\"><i class=\"demo-icon fa-mavon-code\">&#xf121;</i> <span class=\"i-name\">fa-mavon-code</span><span class=\"i-code\">0xf121</span></div>\n        <div title=\"Code: 0xf12b\" class=\"the-icons span3\"><i class=\"demo-icon fa-mavon-superscript\">&#xf12b;</i> <span class=\"i-name\">fa-mavon-superscript</span><span class=\"i-code\">0xf12b</span></div>\n      </div>\n      <div class=\"row\">\n        <div title=\"Code: 0xf12c\" class=\"the-icons span3\"><i class=\"demo-icon fa-mavon-subscript\">&#xf12c;</i> <span class=\"i-name\">fa-mavon-subscript</span><span class=\"i-code\">0xf12c</span></div>\n        <div title=\"Code: 0xf1dc\" class=\"the-icons span3\"><i class=\"demo-icon fa-mavon-header\">&#xf1dc;</i> <span class=\"i-name\">fa-mavon-header</span><span class=\"i-code\">0xf1dc</span></div>\n        <div title=\"Code: 0xf2d0\" class=\"the-icons span3\"><i class=\"demo-icon fa-mavon-window-maximize\">&#xf2d0;</i> <span class=\"i-name\">fa-mavon-window-maximize</span><span class=\"i-code\">0xf2d0</span></div>\n      </div>\n    </div>\n    <div class=\"container footer\">Generated by <a href=\"http://fontello.com\">fontello.com</a></div>\n  </body>\n</html>"
  },
  {
    "path": "src/lib/lang/de/help_de.md",
    "content": "@[toc](Catalog)\n\nMarkdown Handbuch\n===\n> Details: [http://commonmark.org/help/](http://commonmark.org/help/)\n\n## **Fett**\n```\n**fett**\n__fett__\n```\n## *Kursiv*\n```\n*kursiv*\n_kursiv_\n```\n## Überschriften\n```\n# h1 #\nh1\n====\n## h2 ##\nh2\n----\n### h3 ###\n#### h4 ####\n##### h5 #####\n###### h6 ######\n```\n## Trennlinien\n```\n***\n---\n```\n****\n## ^Hoch^gestellt & ~Tief~gestellt\n```\nhochgestellt x^2^\ntiefgestellt H~2~0\n```\n## ++Unterstrichen++ & ~~Durchgestrichen~~\n```\n++unterstrichen++\n~~durchgestrichen~~\n```\n## ==Markiert==\n```\n==markiert==\n```\n## Zitat\n\n```\n> zitat 1\n>> zitat 2\n>>> zitat 3\n...\n```\n\n## Liste\n```\nol\n1.\n2.\n3.\n...\n\nul\n-\n-\n...\n```\n\n## Todo Liste\n\n- [x] aufgabe 1\n- [ ] aufgabe 2\n\n```\n- [x] aufgabe 1\n- [ ] aufgabe 2\n```\n\n## Link\n```\nText Link\n[Text](www.baidu.com)\n\nLink mit Bild\n![Text](http://www.image.com)\n```\n## Code\n\\``` Typ\n\nCodeblock\n\n\\```\n\n\\` code \\`\n\n```c++\nint main()\n{\n    printf(\"hello world!\");\n}\n```\n`code`\n\n## Tabelle\n```\n| th1 | th2 | th3 |\n| :--  | :--: | ----: |\n| links | mitte | rechts |\n```\n| th1 | th2 | th3 |\n| :--  | :--: | ----: |\n| links | mitte | rechts |\n| ---------------------- | ------------- | ----------------- |\n## Fußnote\n```\nhallo[^hallo]\n```\n\nSchau zum unteren Rand[^hallo]\n\n[^hallo]: fussnote\n\n## Emojis\nDetails: [https://www.webpagefx.com/tools/emoji-cheat-sheet/](https://www.webpagefx.com/tools/emoji-cheat-sheet/)\n```\n:laughing:\n:blush:\n:smiley:\n:)\n...\n```\n:laughing::blush::smiley::)\n\n## $\\KaTeX$ Mathematik\n\nFormeln lassen sich darstellen z.b. ：$x_i + y_i = z_i$ und $\\sum_{i=1}^n a_i=0$\nFormeln können auf einer eigenen Zeile gerendert werden\n$$\\sum_{i=1}^n a_i=0$$\nDetails: [katex](http://www.intmath.com/cg5/katex-mathjax-comparison.php)和[katex function](https://github.com/Khan/KaTeX/wiki/Function-Support-in-KaTeX)以及[latex](https://math.meta.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference)\n\n## Layout\n\n::: hljs-left\n`::: hljs-left`\n`links`\n`:::`\n:::\n\n::: hljs-center\n`::: hljs-center`\n`mitte`\n`:::`\n:::\n\n::: hljs-right\n`::: hljs-right`\n`rechts`\n`:::`\n:::\n\n## Liste von Definitionen\n\nTerm 1\n\n:   Definition 1\n\nTerm 2 mit *inline markup*\n\n:   Definition 2\n\n        { ein wenig code, teil von Definition 2 }\n\n    Dritter Absatz von Definition 2.\n\n```\nTerm 1\n\n:   Definition 1\n\nTerm 2 mit *inline markup*\n\n:   Definition 2\n\n        { ein wenig code, teil von Definition 2 }\n\n    Dritter Absatz von Definition 2.\n\n```\n\n## Abkürzungen\n*[HTML]: Hyper Text Markup Language\n*[W3C]:  World Wide Web Consortium\nDie HTML Spezifikation\nwird gepflegt vom W3C.\n```\n*[HTML]: Hyper Text Markup Language\n*[W3C]:  World Wide Web Consortium\nDie HTML Spezifikation\nwird gepflegt vom W3C.\n```\n"
  },
  {
    "path": "src/lib/lang/de/words_de.json",
    "content": "{\r\n  \"start_editor\": \"Bearbeitung beginnen...\",\r\n  \"navigation_title\": \"Navigation\",\r\n  \"tl_bold\": \"Fett\",\r\n  \"tl_italic\": \"Kursiv\",\r\n  \"tl_header\": \"Überschrift\",\r\n  \"tl_header_one\": \"Überschrift 1\",\r\n  \"tl_header_two\": \"Überschrift 2\",\r\n  \"tl_header_three\": \"Überschrift 3\",\r\n  \"tl_header_four\": \"Überschrift 4\",\r\n  \"tl_header_five\": \"Überschrift 5\",\r\n  \"tl_header_six\": \"Überschrift 6\",\r\n  \"tl_underline\": \"Unterstrichen\",\r\n  \"tl_strikethrough\": \"Durchgestrichen\",\r\n  \"tl_mark\": \"Markiert\",\r\n  \"tl_superscript\": \"Hochgestellt\",\r\n  \"tl_subscript\": \"Tiefgestellt\",\r\n  \"tl_quote\": \"Zitat\",\r\n  \"tl_ol\": \"Ol\",\r\n  \"tl_ul\": \"Ul\",\r\n  \"tl_link\": \"Link\",\r\n  \"tl_image\": \"Link mit Bild\",\r\n  \"tl_code\": \"Code\",\r\n  \"tl_table\": \"Tabelle\",\r\n  \"tl_undo\": \"Rückgängig\",\r\n  \"tl_redo\": \"Wiederherstellen\",\r\n  \"tl_trash\": \"Mülleimer\",\r\n  \"tl_save\": \"Speichern\",\r\n  \"tl_navigation_on\": \"Navigation AN\",\r\n  \"tl_navigation_off\": \"Navigation AUS\",\r\n  \"tl_preview\": \"Vorschau\",\r\n  \"tl_aligncenter\": \"Text zentrieren\",\r\n  \"tl_alignleft\": \"Nach links ausrichten\",\r\n  \"tl_alignright\": \"Nach rechts ausrichten\",\r\n  \"tl_edit\": \"Bearbeiten\",\r\n  \"tl_single_column\": \"Einspaltig\",\r\n  \"tl_double_column\": \"Zweispaltig\",\r\n  \"tl_fullscreen_on\": \"Vollbild AN\",\r\n  \"tl_fullscreen_off\": \"Vollbild AUS\",\r\n  \"tl_read\": \"Lesemodus\",\r\n  \"tl_html_on\": \"HTML AN\",\r\n  \"tl_html_off\": \"HTML AUS\",\r\n  \"tl_help\": \"Markdown Handbuch\",\r\n  \"tl_upload\": \"Bilder-Upload\",\r\n  \"tl_upload_remove\": \"Entfernen\",\r\n  \"tl_popup_link_title\": \"Link hinzufügen\",\r\n  \"tl_popup_link_text\": \"Text des Links\",\r\n  \"tl_popup_link_addr\": \"Linkziel\",\r\n  \"tl_popup_img_link_title\": \"Bild hinzufügen\",\r\n  \"tl_popup_img_link_text\": \"Text des Bildes\",\r\n  \"tl_popup_img_link_addr\": \"Link auf Bild\",\r\n  \"tl_popup_link_sure\": \"Ja\",\r\n  \"tl_popup_link_cancel\": \"Abbruch\"\r\n}\r\n"
  },
  {
    "path": "src/lib/lang/en/help_en.md",
    "content": "@[toc](Catalog)\n\nMarkdown Guide\n===\n> Detailed: [http://commonmark.org/help/](http://commonmark.org/help/)\n\n## **Bold**\n```\n**bold**\n__bold__\n```\n## *Italic*\n```\n*italic*\n_italic_\n```\n## Header\n```\n# h1 #\nh1\n====\n## h2 ##\nh2\n----\n### h3 ###\n#### h4 ####\n##### h5 #####\n###### h6 ######\n```\n## Dividing line\n```\n***\n---\n```\n****\n## ^Super^script & ~Sub~script\n```\nsuper x^2^\nsub H~2~0\n```\n## ++Underline++ & ~~Strikethrough~~\n```\n++underline++\n~~strikethrough~~\n```\n## ==Mark==\n```\n==mark==\n```\n## Quote\n\n```\n> quote 1\n>> quote 2\n>>> quote 3\n...\n```\n\n## List\n```\nol\n1.\n2.\n3.\n...\n\nul\n-\n-\n...\n```\n\n## Todo List\n\n- [x] task 1\n- [ ] task 2\n\n```\n- [x] task 1\n- [ ] task 2\n```\n\n## Link\n```\nText Link\n[Text](www.baidu.com)\n\nImage Link\n![Text](http://www.image.com)\n```\n## Code\n\\``` type\n\ncode block\n\n\\```\n\n\\` code \\`\n\n```c++\nint main()\n{\n    printf(\"hello world!\");\n}\n```\n`code`\n\n## Table\n```\n| th1 | th2 | th3 |\n| :--  | :--: | ----: |\n| left | center | right |\n```\n| th1 | th2 | th3 |\n| :--  | :--: | ----: |\n| left | center | right |\n| ---------------------- | ------------- | ----------------- |\n## Footnote\n```\nhello[^hello]\n```\n\nLook at the bottom[^hello]\n\n[^hello]: footnote\n\n## Emojis\nDetailed: [https://www.webpagefx.com/tools/emoji-cheat-sheet/](https://www.webpagefx.com/tools/emoji-cheat-sheet/)\n```\n:laughing:\n:blush:\n:smiley:\n:)\n...\n```\n:laughing::blush::smiley::)\n\n## $\\KaTeX$ Mathematics\n\nWe can render formulas for example：$x_i + y_i = z_i$ and $\\sum_{i=1}^n a_i=0$\nWe can also single-line rendering\n$$\\sum_{i=1}^n a_i=0$$\nDetailed: [katex](http://www.intmath.com/cg5/katex-mathjax-comparison.php)和[katex function](https://github.com/Khan/KaTeX/wiki/Function-Support-in-KaTeX)以及[latex](https://math.meta.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference)\n\n## Layout\n\n::: hljs-left\n`::: hljs-left`\n`left`\n`:::`\n:::\n\n::: hljs-center\n`::: hljs-center`\n`center`\n`:::`\n:::\n\n::: hljs-right\n`::: hljs-right`\n`right`\n`:::`\n:::\n\n## deflist\n\nTerm 1\n\n:   Definition 1\n\nTerm 2 with *inline markup*\n\n:   Definition 2\n\n        { some code, part of Definition 2 }\n\n    Third paragraph of definition 2.\n\n```\nTerm 1\n\n:   Definition 1\n\nTerm 2 with *inline markup*\n\n:   Definition 2\n\n        { some code, part of Definition 2 }\n\n    Third paragraph of definition 2.\n\n```\n\n## abbr\n*[HTML]: Hyper Text Markup Language\n*[W3C]:  World Wide Web Consortium\nThe HTML specification\nis maintained by the W3C.\n```\n*[HTML]: Hyper Text Markup Language\n*[W3C]:  World Wide Web Consortium\nThe HTML specification\nis maintained by the W3C.\n```\n"
  },
  {
    "path": "src/lib/lang/en/words_en.json",
    "content": "{\r\n  \"start_editor\": \"Begin editing...\",\r\n  \"navigation_title\": \"Navigation\",\r\n  \"tl_bold\": \"Bold\",\r\n  \"tl_italic\": \"Italic\",\r\n  \"tl_header\": \"Header\",\r\n  \"tl_header_one\": \"Header 1\",\r\n  \"tl_header_two\": \"Header 2\",\r\n  \"tl_header_three\": \"Header 3\",\r\n  \"tl_header_four\": \"Header 4\",\r\n  \"tl_header_five\": \"Header 5\",\r\n  \"tl_header_six\": \"Header 6\",\r\n  \"tl_underline\": \"Underline\",\r\n  \"tl_strikethrough\": \"Strikethrough\",\r\n  \"tl_mark\": \"Mark\",\r\n  \"tl_superscript\": \"Superscript\",\r\n  \"tl_subscript\": \"Subscript\",\r\n  \"tl_quote\": \"Quote\",\r\n  \"tl_ol\": \"Ol\",\r\n  \"tl_ul\": \"Ul\",\r\n  \"tl_link\": \"Link\",\r\n  \"tl_image\": \"Image Link\",\r\n  \"tl_code\": \"Code\",\r\n  \"tl_table\": \"Table\",\r\n  \"tl_undo\": \"Undo\",\r\n  \"tl_redo\": \"Redo\",\r\n  \"tl_trash\": \"Trash\",\r\n  \"tl_save\": \"Save\",\r\n  \"tl_navigation_on\": \"Navigation ON\",\r\n  \"tl_navigation_off\": \"Navigation OFF\",\r\n  \"tl_preview\": \"Preview\",\r\n  \"tl_aligncenter\": \"Center text\",\r\n  \"tl_alignleft\": \"Clamp text to the left\",\r\n  \"tl_alignright\": \"Clamp text to the right\",\r\n  \"tl_edit\": \"Edit\",\r\n  \"tl_single_column\": \"Single Column\",\r\n  \"tl_double_column\": \"Double Columns\",\r\n  \"tl_fullscreen_on\": \"FullScreen ON\",\r\n  \"tl_fullscreen_off\": \"FullScreen OFF\",\r\n  \"tl_read\": \"Read Model\",\r\n  \"tl_html_on\": \"HTML ON\",\r\n  \"tl_html_off\": \"HTML OFF\",\r\n  \"tl_help\": \"Markdown Guide\",\r\n  \"tl_upload\": \"Upload Images\",\r\n  \"tl_upload_remove\": \"Remove\",\r\n  \"tl_popup_link_title\": \"Add Link\",\r\n  \"tl_popup_link_text\": \"Link text\",\r\n  \"tl_popup_link_addr\": \"Link address\",\r\n  \"tl_popup_img_link_title\": \"Add Image\",\r\n  \"tl_popup_img_link_text\": \"Image Text\",\r\n  \"tl_popup_img_link_addr\": \"Image Link\",\r\n  \"tl_popup_link_sure\": \"Sure\",\r\n  \"tl_popup_link_cancel\": \"Cancel\"\r\n}\r\n"
  },
  {
    "path": "src/lib/lang/fr/help_fr.md",
    "content": "@[toc](Catalogue)\n\nGuide Markdown\n==============\n> Détail : [http://commonmark.org/help/](http://commonmark.org/help/)\n\n## **Bold**\n```\n**bold**\n__bold__\n```\n## *Italic*\n```\n*italic*\n_italic_\n```\n## Header\n```\n# h1 #\nh1\n====\n## h2 ##\nh2\n----\n### h3 ###\n#### h4 ####\n##### h5 #####\n###### h6 ######\n```\n## Dividing line\n```\n***\n---\n```\n****\n## ^Super^script & ~Sub~script\n```\nsuper x^2^\nsub H~2~0\n```\n## ++Underline++ & ~~Strikethrough~~\n```\n++underline++\n~~strikethrough~~\n```\n## ==Mark==\n```\n==mark==\n```\n## Quote\n\n```\n> quote 1\n>> quote 2\n>>> quote 3\n...\n```\n\n## List\n```\nol\n1.\n2.\n3.\n...\n\nul\n-\n-\n...\n```\n## Link\n\n## Todo List\n\n- [x] Équipe 1\n- [ ] Équipe 2\n\n```\n- [x] Équipe 1\n- [ ] Équipe 2\n```\n\n```\nText Link\n[Text](www.baidu.com)\n\nImage Link\n![Text](http://www.image.com)\n```\n## Code\n\\``` type\n\ncode block\n\n\\```\n\n\\` code \\`\n\n```c++\nint main()\n{\n    printf(\"hello world!\");\n}\n```\n`code`\n\n## Table\n```\n| th1 | th2 | th3 |\n| :--  | :--: | ----: |\n| left | center | right |\n```\n| th1 | th2 | th3 |\n| :--  | :--: | ----: |\n| left | center | right |\n| ---------------------- | ------------- | ----------------- |\n## Footnote\n```\nhello[^hello]\n```\n\nLook at the bottom[^hello]\n\n[^hello]: footnote\n\n## Emojis\nDetailed: [https://www.webpagefx.com/tools/emoji-cheat-sheet/](https://www.webpagefx.com/tools/emoji-cheat-sheet/)\n```\n:laughing:\n:blush:\n:smiley:\n:)\n...\n```\n:laughing::blush::smiley::)\n\n## $\\KaTeX$ Mathematics\n\nWe can render formulas for example：$x_i + y_i = z_i$ and $\\sum_{i=1}^n a_i=0$\nWe can also single-line rendering\n$$\\sum_{i=1}^n a_i=0$$\nDetailed: [katex](http://www.intmath.com/cg5/katex-mathjax-comparison.php)和[katex function](https://github.com/Khan/KaTeX/wiki/Function-Support-in-KaTeX)以及[latex](https://math.meta.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference)\n\n## Layout\n\n::: hljs-left\n`::: hljs-left`\n`left`\n`:::`\n:::\n\n::: hljs-center\n`::: hljs-center`\n`center`\n`:::`\n:::\n\n::: hljs-right\n`::: hljs-right`\n`right`\n`:::`\n:::\n\n## deflist\n\nTerm 1\n\n:   Definition 1\n\nTerm 2 with *inline markup*\n\n:   Definition 2\n\n        { some code, part of Definition 2 }\n\n    Third paragraph of definition 2.\n\n```\nTerm 1\n\n:   Definition 1\n\nTerm 2 with *inline markup*\n\n:   Definition 2\n\n        { some code, part of Definition 2 }\n\n    Third paragraph of definition 2.\n\n```\n\n## abbr\n*[HTML]: Hyper Text Markup Language\n*[W3C]:  World Wide Web Consortium\nThe HTML specification\nis maintained by the W3C.\n```\n*[HTML]: Hyper Text Markup Language\n*[W3C]:  World Wide Web Consortium\nThe HTML specification\nis maintained by the W3C.\n```\n"
  },
  {
    "path": "src/lib/lang/fr/words_fr.json",
    "content": "{\n  \"start_editor\": \"Début d'édition...\",\n  \"navigation_title\": \"Navigation\",\n  \"tl_bold\": \"Gras\",\n  \"tl_italic\": \"Italique\",\n  \"tl_header\": \"Entête\",\n  \"tl_header_one\": \"Entête 1\",\n  \"tl_header_two\": \"Entête 2\",\n  \"tl_header_three\": \"Entête 3\",\n  \"tl_header_four\": \"Entête 4\",\n  \"tl_header_five\": \"Entête 5\",\n  \"tl_header_six\": \"Entête 6\",\n  \"tl_underline\": \"Souligné\",\n  \"tl_strikethrough\": \"Barré\",\n  \"tl_mark\": \"Mark\",\n  \"tl_superscript\": \"Exposant\",\n  \"tl_subscript\": \"Sous-exposant\",\n  \"tl_quote\": \"Quote\",\n  \"tl_ol\": \"Liste \",\n  \"tl_ul\": \"Puce\",\n  \"tl_link\": \"Lien\",\n  \"tl_image\": \"Image Lien\",\n  \"tl_code\": \"Code\",\n  \"tl_table\": \"Table\",\n  \"tl_undo\": \"Annuler\",\n  \"tl_redo\": \"Refaire\",\n  \"tl_trash\": \"Supprimer\",\n  \"tl_save\": \"Sauver\",\n  \"tl_navigation_on\": \"Activer la navigation\",\n  \"tl_navigation_off\": \"Désactiver le navigation\",\n  \"tl_preview\": \"Previsualisé\",\n  \"tl_aligncenter\": \"Center le texte\",\n  \"tl_alignleft\": \"Férer le texte à gauche\",\n  \"tl_alignright\": \"Férer le texte à droite\",\n  \"tl_preview\": \"Previsualisé\",\n  \"tl_edit\": \"Editer\",\n  \"tl_single_column\": \"Seule Colonne\",\n  \"tl_double_column\": \"Colonnes Doubles\",\n  \"tl_fullscreen_on\": \"Activer le mode plein écran\",\n  \"tl_fullscreen_off\": \"Désactiver le mode plein écran\",\n  \"tl_read\": \"Lire le modèle\",\n  \"tl_html_on\": \"Activer le mode HTML\",\n  \"tl_html_off\": \"Désactiver le mode HTML\",\n  \"tl_help\": \"Guide Markdown\",\n  \"tl_upload\": \"Télécharger les images\",\n  \"tl_upload_remove\": \"Supprimer\",\n  \"tl_popup_link_title\": \"Ajouter un lien\",\n  \"tl_popup_link_text\": \"Description\",\n  \"tl_popup_link_addr\": \"Link\",\n  \"tl_popup_img_link_title\": \"Ajouter une image\",\n  \"tl_popup_img_link_text\": \"Description\",\n  \"tl_popup_img_link_addr\": \"Link\",\n  \"tl_popup_link_sure\": \"sûr\",\n  \"tl_popup_link_cancel\": \"Annuler\"\n}\n"
  },
  {
    "path": "src/lib/lang/ja/help_ja.md",
    "content": "@[toc](目次)\n\nMarkdown 文法ガイド\n===\n> Detailed: [http://commonmark.org/help/](http://commonmark.org/help/)\n\n## **太字**\n```\n**太字**\n__太字__\n```\n## *斜体*\n```\n*斜体*\n_斜体_\n```\n## 見出し\n```\n# h1 #\nh1\n====\n## h2 ##\nh2\n----\n### h3 ###\n#### h4 ####\n##### h5 #####\n###### h6 ######\n```\n## 横線\n```\n***\n---\n```\n****\n## ^上付き^文字 & ~下付き~文字\n```\nsuper x^2^\nsub H~2~0\n```\n## ++下線++ & ~~取り消し線~~\n```\n++underline++\n~~strikethrough~~\n```\n## ==蛍光ペン==\n```\n==mark==\n```\n## 引用\n\n```\n> quote 1\n>> quote 2\n>>> quote 3\n...\n```\n\n## リスト\n```\n番号付きリスト\n1.\n2.\n3.\n...\n\n箇条書きリスト\n-\n-\n...\n```\n\n## Todoリスト\n\n- [x] task 1\n- [ ] task 2\n\n```\n- [x] task 1\n- [ ] task 2\n```\n\n## リンク\n```\nText Link\n[Text](www.baidu.com)\n\nImage Link\n![Text](http://www.image.com)\n```\n## コード\n\\``` type\n\ncode block\n\n\\```\n\n\\` code \\`\n\n```c++\nint main()\n{\n    printf(\"hello world!\");\n}\n```\n`code`\n\n## 表\n```\n| th1 | th2 | th3 |\n| :--  | :--: | ----: |\n| left | center | right |\n```\n| th1 | th2 | th3 |\n| :--  | :--: | ----: |\n| left | center | right |\n| ---------------------- | ------------- | ----------------- |\n\n## 脚注\n```\nhello[^hello]\n```\n\nLook at the bottom[^hello]\n\n[^hello]: footnote\n\n## 絵文字\n> Detailed: [https://www.webpagefx.com/tools/emoji-cheat-sheet/](https://www.webpagefx.com/tools/emoji-cheat-sheet/)\n```\n:laughing:\n:blush:\n:smiley:\n:)\n...\n```\n:laughing::blush::smiley::)\n\n## $\\KaTeX$ 数式\n> Detailed: [KaTeXマニュアル](http://www.intmath.com/cg5/katex-mathjax-comparison.php)、[KaTeX function](https://github.com/Khan/KaTeX/wiki/Function-Support-in-KaTeX)、[LaTeXマニュアル](https://math.meta.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference)\n\nWe can render formulas for example：$x_i + y_i = z_i$ and $\\sum_{i=1}^n a_i=0$  \nWe can also single-line rendering\n$$\\sum_{i=1}^n a_i=0$$\n\n## レイアウト\n\n::: hljs-left\n`::: hljs-left`\n`left`\n`:::`\n:::\n\n::: hljs-center\n`::: hljs-center`\n`center`\n`:::`\n:::\n\n::: hljs-right\n`::: hljs-right`\n`right`\n`:::`\n:::\n\n## 定義リスト\n\nTerm 1\n\n:   Definition 1\n\nTerm 2 with *inline markup*\n\n:   Definition 2\n\n        { some code, part of Definition 2 }\n\n    Third paragraph of definition 2.\n\n```\nTerm 1\n\n:   Definition 1\n\nTerm 2 with *inline markup*\n\n:   Definition 2\n\n        { some code, part of Definition 2 }\n\n    Third paragraph of definition 2.\n\n```\n\n## abbr\n*[HTML]: Hyper Text Markup Language\n*[W3C]:  World Wide Web Consortium\nThe HTML specification\nis maintained by the W3C.\n```\n*[HTML]: Hyper Text Markup Language\n*[W3C]:  World Wide Web Consortium\nThe HTML specification\nis maintained by the W3C.\n```\n"
  },
  {
    "path": "src/lib/lang/ja/words_ja.json",
    "content": "{\r\n  \"start_editor\": \"編集を始めてね！\",\r\n  \"navigation_title\": \"ナビゲーション\",\r\n  \"tl_bold\": \"太字\",\r\n  \"tl_italic\": \"斜体\",\r\n  \"tl_header\": \"見出し\",\r\n  \"tl_header_one\": \"見出し1\",\r\n  \"tl_header_two\": \"見出し2\",\r\n  \"tl_header_three\": \"見出し3\",\r\n  \"tl_header_four\": \"見出し4\",\r\n  \"tl_header_five\": \"見出し5\",\r\n  \"tl_header_six\": \"見出し6\",\r\n  \"tl_underline\": \"下線\",\r\n  \"tl_strikethrough\": \"取り消し線\",\r\n  \"tl_mark\": \"蛍光ペン\",\r\n  \"tl_superscript\": \"上付き文字\",\r\n  \"tl_subscript\": \"下付き文字\",\r\n  \"tl_quote\": \"引用\",\r\n  \"tl_ol\": \"番号付きリスト\",\r\n  \"tl_ul\": \"箇条書きリスト\",\r\n  \"tl_link\": \"ハイパーリンク\",\r\n  \"tl_image\": \"画像のリンク\",\r\n  \"tl_code\": \"コードの挿入\",\r\n  \"tl_table\": \"表の挿入\",\r\n  \"tl_undo\": \"戻る\",\r\n  \"tl_redo\": \"進む\",\r\n  \"tl_trash\": \"削除\",\r\n  \"tl_save\": \"保存\",\r\n  \"tl_navigation_on\": \"ナビゲーションを表示\",\r\n  \"tl_navigation_off\": \"ナビゲーションを非表示\",\r\n  \"tl_preview\": \"プレビュー\",\r\n  \"tl_aligncenter\": \"中央揃え\",\r\n  \"tl_alignleft\": \"左揃え\",\r\n  \"tl_alignright\": \"右揃え\",\r\n  \"tl_edit\": \"編集\",\r\n  \"tl_single_column\": \"一列\",\r\n  \"tl_double_column\": \"二列\",\r\n  \"tl_fullscreen_on\": \"全画面表示\",\r\n  \"tl_fullscreen_off\": \"全画面表示の終了\",\r\n  \"tl_read\": \"モデルの読み込み\",\r\n  \"tl_html_on\": \"HTMLで表示\",\r\n  \"tl_html_off\": \"HTML表示の終了\",\r\n  \"tl_help\": \"ヘルプ\",\r\n  \"tl_upload\": \"画像をアップロード\",\r\n  \"tl_upload_remove\": \"画像の削除\",\r\n  \"tl_popup_link_title\": \"リンクの追加\",\r\n  \"tl_popup_link_text\": \"リンクテキスト\",\r\n  \"tl_popup_link_addr\": \"リンク先のURL\",\r\n  \"tl_popup_img_link_title\": \"画像の追加\",\r\n  \"tl_popup_img_link_text\": \"画像タイトル\",\r\n  \"tl_popup_img_link_addr\": \"画像URL\",\r\n  \"tl_popup_link_sure\": \"OK\",\r\n  \"tl_popup_link_cancel\": \"戻る\"\r\n}\r\n"
  },
  {
    "path": "src/lib/lang/kr/help_kr.md",
    "content": "@[toc](Catalog)\n\n\n마크다운 가이드\n===\n> 자세히 보기: [http://commonmark.org/help/](http://commonmark.org/help/)\n\n## **볼드체(굵게)**\n```\n**볼드체**\n__볼드체__\n```\n## *이탈릭체(기울임꼴)*\n```\n*이탈릭체*\n_이탈릭체_\n```\n## 헤더\n```\n# h1 #\nh1\n====\n## h2 ##\nh2\n----\n### h3 ###\n#### h4 ####\n##### h5 #####\n###### h6 ######\n```\n## 구분선\n```\n***\n---\n```\n****\n## ^위^첨자 & ~아래~첨자\n```\n위첨자 x^2^\n아래첨자 H~2~0\n```\n## ++밑줄++ & ~~취소선~~\n```\n++밑줄++\n~~취소선~~\n```\n## ==마커==\n```\n==마커==\n```\n## 인용\n\n```\n> quote 1\n>> quote 2\n>>> quote 3\n...\n```\n\n## 리스트\n```\nol\n1.\n2.\n3.\n...\n\nul\n-\n-\n...\n```\n\n## 할일\n\n- [x] task 1\n- [ ] task 2\n\n```\n- [x] task 1\n- [ ] task 2\n```\n\n## 링크\n```\n텍스트 링크\n[Text](www.baidu.com)\n\n이미지 링크\n![Text](http://www.image.com)\n```\n## 코드블럭\n\\``` type\n\ncode block\n\n\\```\n\n\\` code \\`\n\n```c++\nint main()\n{\n    printf(\"hello world!\");\n}\n```\n`code`\n\n## 테이블\n```\n| th1 | th2 | th3 |\n| :--  | :--: | ----: |\n| left | center | right |\n```\n| th1 | th2 | th3 |\n| :--  | :--: | ----: |\n| left | center | right |\n| ---------------------- | ------------- | ----------------- |\n## Footnote\n```\nhello[^hello]\n```\n\nLook at the bottom[^hello]\n\n[^hello]: footnote\n\n## 이모티콘\nDetailed: [https://www.webpagefx.com/tools/emoji-cheat-sheet/](https://www.webpagefx.com/tools/emoji-cheat-sheet/)\n```\n:laughing:\n:blush:\n:smiley:\n:)\n...\n```\n:laughing::blush::smiley::)\n\n## $\\KaTeX$ 수학공식\n\n우리는 다음과 같이 함수를 만들 수 있습니다.：$x_i + y_i = z_i$ and $\\sum_{i=1}^n a_i=0$\n단일 항으로도 가능합니다.\n$$\\sum_{i=1}^n a_i=0$$\nDetailed: [katex](http://www.intmath.com/cg5/katex-mathjax-comparison.php) and [katex function](https://github.com/Khan/KaTeX/wiki/Function-Support-in-KaTeX) and [latex](https://math.meta.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference)\n\n## 레이아웃\n\n::: hljs-left\n`::: hljs-left`\n`left`\n`:::`\n:::\n\n::: hljs-center\n`::: hljs-center`\n`center`\n`:::`\n:::\n\n::: hljs-right\n`::: hljs-right`\n`right`\n`:::`\n:::\n\n## deflist\n\nTerm 1\n\n:   Definition 1\n\nTerm 2 with *inline markup*\n\n:   Definition 2\n\n        { some code, part of Definition 2 }\n\n    Third paragraph of definition 2.\n\n```\nTerm 1\n\n:   Definition 1\n\nTerm 2 with *inline markup*\n\n:   Definition 2\n\n        { some code, part of Definition 2 }\n\n    Third paragraph of definition 2.\n\n```\n\n## abbr\n*[HTML]: Hyper Text Markup Language\n*[W3C]:  World Wide Web Consortium\nThe HTML specification\nis maintained by the W3C.\n```\n*[HTML]: Hyper Text Markup Language\n*[W3C]:  World Wide Web Consortium\nThe HTML specification\nis maintained by the W3C.\n```\n"
  },
  {
    "path": "src/lib/lang/kr/words_kr.json",
    "content": "{\r\n  \"start_editor\": \"작성해주세요.\",\r\n  \"navigation_title\": \"네비게이션\",\r\n  \"tl_bold\": \"굵게\",\r\n  \"tl_italic\": \"기울임꼴\",\r\n  \"tl_header\": \"헤더\",\r\n  \"tl_header_one\": \"헤더 1\",\r\n  \"tl_header_two\": \"헤더 2\",\r\n  \"tl_header_three\": \"헤더 3\",\r\n  \"tl_header_four\": \"헤더 4\",\r\n  \"tl_header_five\": \"헤더 5\",\r\n  \"tl_header_six\": \"헤더 6\",\r\n  \"tl_underline\": \"밑줄\",\r\n  \"tl_strikethrough\": \"취소선\",\r\n  \"tl_mark\": \"마커\",\r\n  \"tl_superscript\": \"위첨자\",\r\n  \"tl_subscript\": \"아래첨자\",\r\n  \"tl_quote\": \"Quote\",\r\n  \"tl_ol\": \"숫자 리스트\",\r\n  \"tl_ul\": \"점 리스트\",\r\n  \"tl_link\": \"링크\",\r\n  \"tl_image\": \"이미지 링크\",\r\n  \"tl_code\": \"코드블럭\",\r\n  \"tl_table\": \"테이블\",\r\n  \"tl_undo\": \"실행취소\",\r\n  \"tl_redo\": \"되돌리기\",\r\n  \"tl_trash\": \"삭제\",\r\n  \"tl_save\": \"저장\",\r\n  \"tl_navigation_on\": \"네비게이션 끔\",\r\n  \"tl_navigation_off\": \"네비게이션 켬\",\r\n  \"tl_preview\": \"미리보기\",\r\n  \"tl_aligncenter\": \"가운데 정렬\",\r\n  \"tl_alignleft\": \"왼쪽 정렬\",\r\n  \"tl_alignright\": \"오른쪽 정렬\",\r\n  \"tl_edit\": \"수정\",\r\n  \"tl_single_column\": \"단일 열\",\r\n  \"tl_double_column\": \"복수 열\",\r\n  \"tl_fullscreen_on\": \"전체화면 활성화\",\r\n  \"tl_fullscreen_off\": \"전체화면 종료\",\r\n  \"tl_read\": \"읽기모드\",\r\n  \"tl_html_on\": \"HTML 켬\",\r\n  \"tl_html_off\": \"HTML 끔\",\r\n  \"tl_help\": \"마크다운 가이드\",\r\n  \"tl_upload\": \"이미지 업로드\",\r\n  \"tl_upload_remove\": \"제거\",\r\n  \"tl_popup_link_title\": \"링크 삽입\",\r\n  \"tl_popup_link_text\": \"텍스트\",\r\n  \"tl_popup_link_addr\": \"링크주소\",\r\n  \"tl_popup_img_link_title\": \"이미지 추가\",\r\n  \"tl_popup_img_link_text\": \"이미지 이름\",\r\n  \"tl_popup_img_link_addr\": \"링크주소\",\r\n  \"tl_popup_link_sure\": \"삽입\",\r\n  \"tl_popup_link_cancel\": \"취소\"\r\n}\r\n"
  },
  {
    "path": "src/lib/lang/pt-BR/help_pt-BR.md",
    "content": "@[toc](Directory)\n\nGuia Markdown\n===\n> Detalhes: [http://commonmark.org/help/](http://commonmark.org/help/)\n\n## **Negrito**\n```\n**negrito**\n__negrito__\n```\n## *Itálico*\n```\n*itálico*\n_itálico_\n```\n## Cabeçalho\n```\n# h1 #\nh1\n====\n## h2 ##\nh2\n----\n### h3 ###\n#### h4 ####\n##### h5 #####\n###### h6 ######\n```\n## Linha Divisora\n```\n***\n---\n```\n****\n## ^Sobre^scrito & ~Sub~scrito\n```\nsobre x^2^\nsub H~2~0\n```\n## ++Sublinhar++ & ~~Tachar~~\n```\n++sublinhar++\n~~tachar~~\n```\n## ==Marcador==\n```\n==marcador==\n```\n## Citação\n\n```\n> citação 1\n>> citação 2\n>>> citação 3\n...\n```\n\n## Listas\n```\nlista Numerada\n1.\n2.\n3.\n...\n\nlista com marcadores\n-\n-\n...\n```\n\n## Todo Listas\n\n- [x] Tarefa 1\n- [ ] Tarefa 2\n\n```\n- [x] Tarefa 1\n- [ ] Tarefa 2\n```\n\n## Link\n```\nLink Texto\n[Text](www.baidu.com)\n\nLink Imagem\n![Text](http://www.image.com)\n```\n## Código\n\\``` tipo\n\nbloco de código\n\n\\```\n\n\\` código \\`\n\n```c++\nint main()\n{\n    printf(\"hello world!\");\n}\n```\n`code`\n\n## Tabela\n```\n| th1 | th2 | th3 |\n| :--  | :--: | ----: |\n| esquerda | centro | direita |\n```\n| th1 | th2 | th3 |\n| :--  | :--: | ----: |\n| esquerda | centro | direita |\n| ---------------------- | ------------- | ----------------- |\n## Rodapé\n```\nolá[^olá]\n```\n\nOlhe para baixo[^olá]\n\n[^olá]: rodapé\n\n## Emojis\nDetalhes: [https://www.webpagefx.com/tools/emoji-cheat-sheet/](https://www.webpagefx.com/tools/emoji-cheat-sheet/)\n```\n:laughing:\n:blush:\n:smiley:\n:)\n...\n```\n:laughing::blush::smiley::)\n\n## $\\KaTeX$ Mathematics\n\nPodemos mostrar fórmulas por exemplo：$x_i + y_i = z_i$ and $\\sum_{i=1}^n a_i=0$\nPodemos também mostrar em uma única linha:\n$$\\sum_{i=1}^n a_i=0$$\nDetalhes: [katex](http://www.intmath.com/cg5/katex-mathjax-comparison.php)和[katex function](https://github.com/Khan/KaTeX/wiki/Function-Support-in-KaTeX)以及[latex](https://math.meta.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference)\n\n## Layout\n\n::: hljs-left\n`::: hljs-left`\n`esquerda`\n`:::`\n:::\n\n::: hljs-center\n`::: hljs-center`\n`centro`\n`:::`\n:::\n\n::: hljs-right\n`::: hljs-right`\n`direita`\n`:::`\n:::\n\n## Definições\n\nTermo 1\n\n:   Definição 1\n\nTermo 2 com *markup inline*\n\n:   Definição 2\n\n        { um pouco de código, parte da Definição 2 }\n\n    Terceiro parágrafo da definição 2.\n\n```\nTermo 1\n\n:   Definição 1\n\nTermo 2 com *markup inline*\n\n:   Definição 2\n\n        { um pouco de código, parte da Definição 2 }\n\n    Terceiro parágrafo da definição 2.\n\n```\n\n## Abreviações\n*[HTML]: Hyper Text Markup Language\n*[W3C]:  World Wide Web Consortium\nA especificação HTML\né mantida pela W3C.\n```\n*[HTML]: Hyper Text Markup Language\n*[W3C]:  World Wide Web Consortium\nThe HTML specification\né mantida pela W3C.\n```\n"
  },
  {
    "path": "src/lib/lang/pt-BR/words_pt-BR.json",
    "content": "{\n\t\"start_editor\": \"Começar edição...\",\n\t\"navigation_title\": \"Navegação\",\n\t\"tl_bold\": \"Negrito\",\n\t\"tl_italic\": \"Itálico\",\n\t\"tl_header\": \"Cabeçalho\",\n\t\"tl_header_one\": \"Cabeçalho 1\",\n\t\"tl_header_two\": \"Cabeçalho 2\",\n\t\"tl_header_three\": \"Cabeçalho 3\",\n\t\"tl_header_four\": \"Cabeçalho 4\",\n\t\"tl_header_five\": \"Cabeçalho 5\",\n\t\"tl_header_six\": \"Cabeçalho 6\",\n\t\"tl_underline\": \"Sublinhar\",\n\t\"tl_strikethrough\": \"Tachar\",\n\t\"tl_mark\": \"Marcação\",\n\t\"tl_superscript\": \"Sobrescrito\",\n\t\"tl_subscript\": \"Subscrito\",\n\t\"tl_quote\": \"Citação\",\n\t\"tl_ol\": \"Lista Numerada\",\n\t\"tl_ul\": \"Lista com marcadores\",\n\t\"tl_link\": \"Link\",\n\t\"tl_image\": \"Link de imagem\",\n\t\"tl_code\": \"Código\",\n\t\"tl_table\": \"Tabela\",\n\t\"tl_undo\": \"Desfazer\",\n\t\"tl_redo\": \"Refazer\",\n\t\"tl_trash\": \"Lixo\",\n\t\"tl_save\": \"Salvar\",\n\t\"tl_navigation_on\": \"Mostrar Navegação\",\n\t\"tl_navigation_off\": \"Esconder Navegação\",\n\t\"tl_preview\": \"Preview\",\n\t\"tl_aligncenter\": \"Alinhar no centro\",\n\t\"tl_alignleft\": \"Alinhar à esquerda\",\n\t\"tl_alignright\": \"Alinhar à direita\",\n\t\"tl_edit\": \"Editar\",\n\t\"tl_single_column\": \"Coluna Única\",\n\t\"tl_double_column\": \"Duas Colunas\",\n\t\"tl_fullscreen_on\": \"Ligar Tela Cheia\",\n\t\"tl_fullscreen_off\": \"Desligar Tela Cheia\",\n\t\"tl_read\": \"Modo de Leitura\",\n\t\"tl_html_on\": \"Ligar HTML\",\n\t\"tl_html_off\": \"Desligar HTML\",\n\t\"tl_help\": \"Guia Markdown\",\n\t\"tl_upload\": \"Upload de Imagens\",\n\t\"tl_upload_remove\": \"Remover\",\n\t\"tl_popup_link_title\": \"Adicionar Link\",\n\t\"tl_popup_link_text\": \"Descrição\",\n\t\"tl_popup_link_addr\": \"Link\",\n\t\"tl_popup_img_link_title\": \"Adicionar fotos\",\n\t\"tl_popup_img_link_text\": \"Descrição\",\n\t\"tl_popup_img_link_addr\": \"Link\",\n\t\"tl_popup_link_sure\": \"Confirmar\",\n\t\"tl_popup_link_cancel\": \"Cancelar\"\n}"
  },
  {
    "path": "src/lib/lang/ru/help_ru.md",
    "content": "@[toc](Catalog)  \n  \nMarkdown помощь  \n===  \n> Подробнее: [http://commonmark.org/help/](http://commonmark.org/help/)  \n  \n## **Полужирный**  \n```  \n**Полужирный**  \n__Полужирный__  \n```  \n## *Курсив*  \n```  \n*Курсив*  \n_Курсив_  \n```  \n## Заголовок  \n```  \n# h1 #  \nh1  \n====  \n## h2 ##  \nh2  \n----  \n### h3 ###  \n#### h4 ####  \n##### h5 #####  \n###### h6 ######  \n```  \n## Разделительная линия  \n```  \n***  \n---  \n```  \n****  \n## ^Верхний^индекс & ~Нижний~индекс  \n```  \nверхний x^2^  \nнижний H~2~0  \n```  \n## ++Подчеркнутый++ & ~~Зачеркнутый~~  \n```  \n++Подчеркнутый++  \n~~Зачеркнутый~~  \n```  \n## ==Отметка==  \n```  \n==Отметка==  \n```  \n## Цитата  \n  \n```  \n> Цитата  \n>> Цитата 2  \n>>> Цитата 3  \n...  \n```  \n  \n## Список  \n```  \nol  \n1.  \n2.  \n3.  \n...  \n  \nul  \n-  \n-  \n...  \n```  \n  \n## Список задач  \n  \n- [x] Задача 1  \n- [ ] Задача 2  \n  \n```  \n- [x] Задача 1  \n- [ ] Задача 2  \n```  \n  \n## Ссылка  \n```  \nСсылка  \n[Текст](www.baidu.com)  \n  \nСсылка изображения  \n![Текст](http://www.image.com)  \n```  \n## Код  \n\\``` type  \n  \ncode block  \n  \n\\```  \n  \n\\` code \\`  \n  \n```c++  \nint main()  \n{  \n printf(\"hello world!\");}  \n```  \n`code`  \n  \n## Таблица  \n```  \n| th1 | th2 | th3 |  \n| :--  | :--: | ----: |  \n| left | center | right |  \n```  \n| th1 | th2 | th3 |  \n| :--  | :--: | ----: |  \n| left | center | right |  \n| ---------------------- | ------------- | ----------------- |  \n## Сноска  \n```  \nПривет[^Привет]  \n```  \n  \nТут что-то непонятное[^Привет]  \n  \n[^Привет]: А тут объяснение  \n  \n## Emojis  \nПодробнее: [https://www.webpagefx.com/tools/emoji-cheat-sheet/](https://www.webpagefx.com/tools/emoji-cheat-sheet/)  \n```  \n:laughing:  \n:blush:  \n:smiley:  \n:)  \n...  \n```  \n:laughing::blush::smiley::)  \n  \n## $\\KaTeX$ Mathematics  \n  \nМожно выводить такие формулы：$x_i + y_i = z_i$ and $\\sum_{i=1}^n a_i=0$  \nА также в одну строку:\n$$\\sum_{i=1}^n a_i=0$$  \nПодробнее: \n- [katex](http://www.intmath.com/cg5/katex-mathjax-comparison.php)\n- [katex function](https://github.com/Khan/KaTeX/wiki/Function-Support-in-KaTeX)\n- [latex](https://math.meta.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference)  \n  \n## Разметка\n  \n::: hljs-left  \n`::: hljs-left`  \n`left`  \n`:::`  \n:::  \n  \n::: hljs-center  \n`::: hljs-center`  \n`center`  \n`:::`  \n:::  \n  \n::: hljs-right  \n`::: hljs-right`  \n`right`  \n`:::`  \n:::  \n  \n## Список определений\n  \nТермин 1  \n  \n:   Определение 1  \n  \nТермин  2 с использованием *разметки*\n  \n:   Определение 2  \n  \n { Какой-нибудь код, часть определения 2 }  \n Третий параграф определения 2.  \n```  \nТермин 1  \n  \n:   Определение 1  \n  \nТермин  2 с использованием *разметки*\n  \n:   Определение 2  \n  \n { Какой-нибудь код, часть определения 2 }  \n Третий параграф определения 2.  \n```  \n  \n## Сокращения\n*[HTML]: Hyper Text Markup Language  \n*[W3C]:  World Wide Web Consortium  \nThe HTML specification  \nis maintained by the W3C.  \n```  \n*[HTML]: Hyper Text Markup Language  \n*[W3C]:  World Wide Web Consortium  \nThe HTML specification  \nis maintained by the W3C.  \n```\n"
  },
  {
    "path": "src/lib/lang/ru/words_ru.json",
    "content": "{\n  \"start_editor\": \"Начните редактирование...\",\n  \"navigation_title\": \"Навигация\",\n  \"tl_bold\": \"Полужирный\",\n  \"tl_italic\": \"Курсив\",\n  \"tl_header\": \"Заголовки\",\n  \"tl_header_one\": \"Заголовок 1\",\n  \"tl_header_two\": \"Заголовок 2\",\n  \"tl_header_three\": \"Заголовок 3\",\n  \"tl_header_four\": \"Заголовок 4\",\n  \"tl_header_five\": \"Заголовок 5\",\n  \"tl_header_six\": \"Заголовок 6\",\n  \"tl_underline\": \"Подчеркнутый\",\n  \"tl_strikethrough\": \"Зачеркнутый\",\n  \"tl_mark\": \"Отметка\",\n  \"tl_superscript\": \"Верхний индекс\",\n  \"tl_subscript\": \"Нижний индекс\",\n  \"tl_quote\": \"Цитата\",\n  \"tl_ol\": \"Нумерованный список\",\n  \"tl_ul\": \"Список\",\n  \"tl_link\": \"Ссылка\",\n  \"tl_image\": \"Ссылка изображения\",\n  \"tl_code\": \"Код\",\n  \"tl_table\": \"Таблица\",\n  \"tl_undo\": \"Отменить\",\n  \"tl_redo\": \"Вернуть\",\n  \"tl_trash\": \"Удалить\",\n  \"tl_save\": \"Сохранить\",\n  \"tl_navigation_on\": \"Показать навигацию\",\n  \"tl_navigation_off\": \"Скрыть навигацию\",\n  \"tl_preview\": \"Предпросмотр\",\n  \"tl_aligncenter\": \"Выровнять по центру\",\n  \"tl_alignleft\": \"Выровнять по левому краю\",\n  \"tl_alignright\": \"Выровнять по правому краю\",\n  \"tl_edit\": \"Редактор\",\n  \"tl_single_column\": \"Одно поле\",\n  \"tl_double_column\": \"Два поля\",\n  \"tl_fullscreen_on\": \"Полноэкранный режим\",\n  \"tl_fullscreen_off\": \"Выключить полноэкранный режим\",\n  \"tl_read\": \"Режим чтения\",\n  \"tl_html_on\": \"Показать HTML\",\n  \"tl_html_off\": \"Убрать HTML\",\n  \"tl_help\": \"Markdown помощь\",\n  \"tl_upload\": \"Загрузить изображение\",\n  \"tl_upload_remove\": \"Удалить\",\n  \"tl_popup_link_title\": \"Добавить ссылку\",\n  \"tl_popup_link_text\": \"Текст ссылки\",\n  \"tl_popup_link_addr\": \"Адрес ссылки\",\n  \"tl_popup_img_link_title\": \"Локальное изображение\",\n  \"tl_popup_img_link_text\": \"Текст изображения\",\n  \"tl_popup_img_link_addr\": \"Ссылка изображения\",\n  \"tl_popup_link_sure\": \"Добавить\",\n  \"tl_popup_link_cancel\": \"Отменить\"\n}\n"
  },
  {
    "path": "src/lib/lang/zh-CN/help_zh-CN.md",
    "content": "@[toc](目录)\n\nMarkdown 语法简介\n=============\n> [语法详解](http://commonmark.org/help/)\n\n## **目录**\n```\n@[toc](目录)\n```\n\n## **粗体**\n```\n**粗体**\n__粗体__\n```\n## *斜体*\n```\n*斜体*\n_斜体_\n```\n## 标题\n```\n# 一级标题 #\n一级标题\n====\n## 二级标题 ##\n二级标题\n----\n### 三级标题 ###\n#### 四级标题 ####\n##### 五级标题 #####\n###### 六级标题 ######\n```\n## 分割线\n```\n***\n---\n```\n****\n## ^上^角~下~标\n```\n上角标 x^2^\n下角标 H~2~0\n```\n## ++下划线++ ~~中划线~~\n```\n++下划线++\n~~中划线~~\n```\n## ==标记==\n```\n==标记==\n```\n## 段落引用\n```\n> 一级\n>> 二级\n>>> 三级\n...\n```\n\n## 列表\n```\n有序列表\n1.\n2.\n3.\n...\n无序列表\n-\n-\n...\n```\n\n## 任务列表\n\n- [x] 已完成任务\n- [ ] 未完成任务\n\n```\n- [x] 已完成任务\n- [ ] 未完成任务\n```\n\n## 链接\n```\n[链接](www.baidu.com)\n![图片描述](http://www.image.com)\n```\n## 代码段落\n\\``` type\n\n代码段落\n\n\\```\n\n\\` 代码块 \\`\n\n```c++\nint main()\n{\n    printf(\"hello world!\");\n}\n```\n`code`\n## 表格(table)\n```\n| 标题1 | 标题2 | 标题3 |\n| :--  | :--: | ----: |\n| 左对齐 | 居中 | 右对齐 |\n| ---------------------- | ------------- | ----------------- |\n```\n| 标题1 | 标题2 | 标题3 |\n| :--  | :--: | ----: |\n| 左对齐 | 居中 | 右对齐 |\n| ---------------------- | ------------- | ----------------- |\n## 脚注(footnote)\n```\nhello[^hello]\n```\n\n见底部脚注[^hello]\n\n[^hello]: 一个注脚\n\n## 表情(emoji)\n[参考网站: https://www.webpagefx.com/tools/emoji-cheat-sheet/](https://www.webpagefx.com/tools/emoji-cheat-sheet/)\n```\n:laughing:\n:blush:\n:smiley:\n:)\n...\n```\n:laughing::blush::smiley::)\n\n## $\\KaTeX$公式\n\n我们可以渲染公式例如：$x_i + y_i = z_i$和$\\sum_{i=1}^n a_i=0$\n我们也可以单行渲染\n$$\\sum_{i=1}^n a_i=0$$\n具体可参照[katex文档](http://www.intmath.com/cg5/katex-mathjax-comparison.php)和[katex支持的函数](https://github.com/Khan/KaTeX/wiki/Function-Support-in-KaTeX)以及[latex文档](https://math.meta.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference)\n\n## 布局\n\n::: hljs-left\n`::: hljs-left`\n`居左`\n`:::`\n:::\n\n::: hljs-center\n`::: hljs-center`\n`居中`\n`:::`\n:::\n\n::: hljs-right\n`::: hljs-right`\n`居右`\n`:::`\n:::\n\n## 定义\n\n术语一\n\n:   定义一\n\n包含有*行内标记*的术语二\n\n:   定义二\n\n        {一些定义二的文字或代码}\n\n    定义二的第三段\n\n```\n术语一\n\n:   定义一\n\n包含有*行内标记*的术语二\n\n:   定义二\n\n        {一些定义二的文字或代码}\n\n    定义二的第三段\n\n```\n\n## abbr\n*[HTML]: Hyper Text Markup Language\n*[W3C]:  World Wide Web Consortium\nHTML 规范由 W3C 维护\n```\n*[HTML]: Hyper Text Markup Language\n*[W3C]:  World Wide Web Consortium\nHTML 规范由 W3C 维护\n```\n\n"
  },
  {
    "path": "src/lib/lang/zh-CN/words_zh-CN.json",
    "content": "{\r\n  \"start_editor\": \"开始编辑...\",\r\n  \"navigation_title\": \"导航目录\",\r\n  \"tl_bold\": \"粗体\",\r\n  \"tl_italic\": \"斜体\",\r\n  \"tl_header\": \"标题\",\r\n  \"tl_header_one\": \"一级标题\",\r\n  \"tl_header_two\": \"二级标题\",\r\n  \"tl_header_three\": \"三级标题\",\r\n  \"tl_header_four\": \"四级标题\",\r\n  \"tl_header_five\": \"五级标题\",\r\n  \"tl_header_six\": \"六级标题\",\r\n  \"tl_underline\": \"下划线\",\r\n  \"tl_strikethrough\": \"中划线\",\r\n  \"tl_mark\": \"标记\",\r\n  \"tl_superscript\": \"上角标\",\r\n  \"tl_subscript\": \"下角标\",\r\n  \"tl_quote\": \"段落引用\",\r\n  \"tl_ol\": \"有序列表\",\r\n  \"tl_ul\": \"无序列表\",\r\n  \"tl_link\": \"链接\",\r\n  \"tl_image\": \"添加图片链接\",\r\n  \"tl_code\": \"代码块\",\r\n  \"tl_table\": \"表格\",\r\n  \"tl_undo\": \"上一步\",\r\n  \"tl_redo\": \"下一步\",\r\n  \"tl_trash\": \"清空\",\r\n  \"tl_save\": \"保存\",\r\n  \"tl_navigation_on\": \"开启标题导航\",\r\n  \"tl_navigation_off\": \"关闭标题导航\",\r\n  \"tl_preview\": \"预览\",\r\n  \"tl_aligncenter\": \"居中\",\r\n  \"tl_alignleft\": \"居左\",\r\n  \"tl_alignright\": \"居右\",\r\n  \"tl_edit\": \"编辑\",\r\n  \"tl_single_column\": \"单栏\",\r\n  \"tl_double_column\": \"双栏\",\r\n  \"tl_fullscreen_on\": \"全屏编辑\",\r\n  \"tl_fullscreen_off\": \"退出全屏\",\r\n  \"tl_read\": \"沉浸式阅读\",\r\n  \"tl_html_on\": \"查看html文本\",\r\n  \"tl_html_off\": \"返回markdown文本\",\r\n  \"tl_help\": \"markdown语法帮助\",\r\n  \"tl_upload\": \"上传图片\",\r\n  \"tl_upload_remove\": \"删除\",\r\n  \"tl_popup_link_title\": \"添加链接\",\r\n  \"tl_popup_link_text\": \"链接描述\",\r\n  \"tl_popup_link_addr\": \"链接地址\",\r\n  \"tl_popup_img_link_title\": \"添加图片\",\r\n  \"tl_popup_img_link_text\": \"图片描述\",\r\n  \"tl_popup_img_link_addr\": \"图片链接\",\r\n  \"tl_popup_link_sure\": \"确定\",\r\n  \"tl_popup_link_cancel\": \"取消\"\r\n}\r\n"
  },
  {
    "path": "src/lib/lang/zh-TW/help_zh-TW.md",
    "content": "@[toc](目錄)\n\nMarkdown 語法簡介\n=============\n> [語法詳解](http://commonmark.org/help/)\n\n## **粗體**\n```\n**粗體**\n__粗體__\n```\n## *斜體*\n```\n*斜體*\n_斜體_\n```\n## 標題\n```\n# 一級標題 #\n一級標題\n====\n## 二級標題 ##\n二級標題\n----\n### 三級標題 ###\n#### 四級標題 ####\n##### 五級標題 #####\n###### 六級標題 ######\n```\n## 分割線\n```\n***\n---\n```\n****\n## ^上^角~下~標\n```\n上角標 x^2^\n下角標 H~2~0\n```\n## ++下劃線++ ~~中劃線~~\n```\n++下劃線++\n~~中劃線~~\n```\n## ==標記==\n```\n==標記==\n```\n## 段落引用\n```\n> 一級\n>> 二級\n>>> 三級\n...\n```\n\n## 列表\n```\n有序列表\n1.\n2.\n3.\n...\n無序列表\n-\n-\n...\n```\n\n## 任務列表\n\n- [x] 已完成任務\n- [ ] 未完成任務\n\n```\n- [x] 已完成任務\n- [ ] 未完成任務\n```\n\n## 鏈接\n```\n[鏈接](www.baidu.com)\n![圖片描述](http://www.image.com)\n```\n## 代碼段落\n\\``` type\n\n代碼段落\n\n\\```\n\n\\` 代碼塊 \\`\n\n```c++\nint main()\n{\n    printf(\"hello world!\");\n}\n```\n`code`\n## 表格(table)\n```\n| 標題1 | 標題2 | 標題3 |\n| :--  | :--: | ----: |\n| 左對齊 | 居中 | 右對齊 |\n| ---------------------- | ------------- | ----------------- |\n```\n| 標題1 | 標題2 | 標題3 |\n| :--  | :--: | ----: |\n| 左對齊 | 居中 | 右對齊 |\n| ---------------------- | ------------- | ----------------- |\n## 腳註(footnote)\n```\nhello[^hello]\n```\n\n見底部腳註[^hello]\n\n[^hello]: 一個註腳\n\n## 表情(emoji)\n[參考網站: https://www.webpagefx.com/tools/emoji-cheat-sheet/](https://www.webpagefx.com/tools/emoji-cheat-sheet/)\n```\n:laughing:\n:blush:\n:smiley:\n:)\n...\n```\n:laughing::blush::smiley::)\n\n## $\\KaTeX$公式\n\n我們可以渲染公式例如：$x_i + y_i = z_i$和$\\sum_{i=1}^n a_i=0$\n我們也可以單行渲染\n$$\\sum_{i=1}^n a_i=0$$\n具體可參照[katex文檔](http://www.intmath.com/cg5/katex-mathjax-comparison.php)和[katex支持的函數](https://github.com/Khan/KaTeX/wiki/Function-Support-in-KaTeX)以及[latex文檔](https://math.meta.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference)\n\n## 布局\n\n::: hljs-left\n`::: hljs-left`\n`居左`\n`:::`\n:::\n\n::: hljs-center\n`::: hljs-center`\n`居中`\n`:::`\n:::\n\n::: hljs-right\n`::: hljs-right`\n`居右`\n`:::`\n:::\n\n## 定義\n\n術語一\n\n:   定義一\n\n包含有*行內標記*的術語二\n\n:   定義二\n\n        {一些定義二的文字或代碼}\n\n    定義二的第三段\n\n```\n術語一\n\n:   定義一\n\n包含有*行內標記*的術語二\n\n:   定義二\n\n        {一些定義二的文字或代碼}\n\n    定義二的第三段\n\n```\n\n## abbr\n*[HTML]: Hyper Text Markup Language\n*[W3C]:  World Wide Web Consortium\nHTML 規範由 W3C 維護\n```\n*[HTML]: Hyper Text Markup Language\n*[W3C]:  World Wide Web Consortium\nHTML 規範由 W3C 維護\n```\n\n"
  },
  {
    "path": "src/lib/lang/zh-TW/words_zh-TW.json",
    "content": "{\r\n  \"start_editor\": \"開始編輯...\",\r\n  \"navigation_title\": \"導航目錄\",\r\n  \"tl_bold\": \"粗體\",\r\n  \"tl_italic\": \"斜體\",\r\n  \"tl_header\": \"標題\",\r\n  \"tl_header_one\": \"一級標題\",\r\n  \"tl_header_two\": \"二級標題\",\r\n  \"tl_header_three\": \"三級標題\",\r\n  \"tl_header_four\": \"四級標題\",\r\n  \"tl_header_five\": \"五級標題\",\r\n  \"tl_header_six\": \"六級標題\",\r\n  \"tl_underline\": \"下劃線\",\r\n  \"tl_strikethrough\": \"中劃線\",\r\n  \"tl_mark\": \"標記\",\r\n  \"tl_superscript\": \"上角標\",\r\n  \"tl_subscript\": \"下角標\",\r\n  \"tl_quote\": \"段落引用\",\r\n  \"tl_ol\": \"有序列表\",\r\n  \"tl_ul\": \"無序列表\",\r\n  \"tl_link\": \"鏈接\",\r\n  \"tl_image\": \"添加圖片鏈接\",\r\n  \"tl_code\": \"代碼塊\",\r\n  \"tl_table\": \"表格\",\r\n  \"tl_undo\": \"上一步\",\r\n  \"tl_redo\": \"下一步\",\r\n  \"tl_trash\": \"清空\",\r\n  \"tl_save\": \"保存\",\r\n  \"tl_navigation_on\": \"開啟標題導航\",\r\n  \"tl_navigation_off\": \"關閉標題導航\",\r\n  \"tl_preview\": \"預覽\",\r\n  \"tl_aligncenter\": \"居中\",\r\n  \"tl_alignleft\": \"居左\",\r\n  \"tl_alignright\": \"居右\",\r\n  \"tl_edit\": \"編輯\",\r\n  \"tl_single_column\": \"單欄\",\r\n  \"tl_double_column\": \"雙欄\",\r\n  \"tl_fullscreen_on\": \"全屏編輯\",\r\n  \"tl_fullscreen_off\": \"退出全屏\",\r\n  \"tl_read\": \"沈浸式閱讀\",\r\n  \"tl_html_on\": \"查看html文本\",\r\n  \"tl_html_off\": \"返回markdown文本\",\r\n  \"tl_help\": \"markdown語法幫助\",\r\n  \"tl_upload\": \"上傳圖片\",\r\n  \"tl_upload_remove\": \"刪除\",\r\n  \"tl_popup_link_title\": \"添加鏈接\",\r\n  \"tl_popup_link_text\": \"鏈接描述\",\r\n  \"tl_popup_link_addr\": \"鏈接地址\",\r\n  \"tl_popup_img_link_title\": \"添加圖片\",\r\n  \"tl_popup_img_link_text\": \"圖片描述\",\r\n  \"tl_popup_img_link_addr\": \"圖片鏈接\",\r\n  \"tl_popup_link_sure\": \"確定\",\r\n  \"tl_popup_link_cancel\": \"取消\"\r\n}\r\n"
  },
  {
    "path": "src/lib/mixins/markdown.js",
    "content": "import hljsLangs from '../core/hljs/lang.hljs.js'\nimport {\n    loadScript\n} from '../core/extra-function.js'\nimport sanitizer from '../core/sanitizer.js'\n\nvar markdown_config = {\n    html: true,        // Enable HTML tags in source\n    xhtmlOut: true,        // Use '/' to close single tags (<br />).\n    breaks: true,        // Convert '\\n' in paragraphs into <br>\n    langPrefix: 'lang-',  // CSS language prefix for fenced blocks. Can be\n    linkify: false,        // 自动识别url\n    typographer: true,\n    quotes: '“”‘’'\n}\n\nvar MarkdownIt = require('markdown-it');\n// 表情\nvar emoji = require('markdown-it-emoji');\n// 下标\nvar sub = require('markdown-it-sub')\n// 上标\nvar sup = require('markdown-it-sup')\n// <dl/>\nvar deflist = require('markdown-it-deflist')\n// <abbr/>\nvar abbr = require('markdown-it-abbr')\n// footnote\nvar footnote = require('markdown-it-footnote')\n// insert 带有下划线 样式 ++ ++\nvar insert = require('markdown-it-ins')\n// mark\nvar mark = require('markdown-it-mark')\n// taskLists\nvar taskLists = require('markdown-it-task-lists')\n// container\nvar container = require('markdown-it-container')\n//\nvar toc = require('markdown-it-toc')\n\nvar mihe = require('markdown-it-highlightjs-external');\n// math katex\nvar katex = require('markdown-it-katex-external');\nvar miip = require('markdown-it-images-preview');\nvar missLangs = {};\nvar needLangs = [];\nvar hljs_opts = {\n    hljs: 'auto',\n    highlighted: true,\n    langCheck: function (lang) {\n        if (lang && hljsLangs[lang] && !missLangs[lang]) {\n            missLangs[lang] = 1;\n            needLangs.push(hljsLangs[lang])\n        }\n    }\n};\n\nexport function initMarkdown() {\n    const markdown = new MarkdownIt(markdown_config);\n\n    // add target=\"_blank\" to all link\n    var defaultRender = markdown.renderer.rules.link_open || function (tokens, idx, options, env, self) {\n        return self.renderToken(tokens, idx, options);\n    };\n    markdown.renderer.rules.link_open = function (tokens, idx, options, env, self) {\n        var hIndex = tokens[idx].attrIndex('href');\n        if (tokens[idx].attrs[hIndex][1].startsWith('#')) return defaultRender(tokens, idx, options, env, self);\n        // If you are sure other plugins can't add `target` - drop check below\n        var aIndex = tokens[idx].attrIndex('target');\n\n        if (aIndex < 0) {\n            tokens[idx].attrPush(['target', '_blank']); // add new attribute\n        } else {\n            tokens[idx].attrs[aIndex][1] = '_blank';    // replace value of existing attr\n        }\n\n        // pass token to default renderer.\n        return defaultRender(tokens, idx, options, env, self);\n    };\n\n    markdown.use(mihe, hljs_opts)\n        .use(emoji)\n        .use(sup)\n        .use(sub)\n        .use(container)\n        .use(container, 'hljs-left') /* align left */\n        .use(container, 'hljs-center')/* align center */\n        .use(container, 'hljs-right')/* align right */\n        .use(deflist)\n        .use(abbr)\n        .use(footnote)\n        .use(insert)\n        .use(mark)\n        .use(container)\n        .use(miip)\n        .use(katex)\n        .use(taskLists)\n        .use(toc)\n\n    return markdown;\n}\n\nexport default {\n    data() {\n        return {\n            markdownIt: null\n        }\n    },\n    created() {\n        this.markdownIt = initMarkdown();\n        if (!this.html) {\n            this.markdownIt.set({ html: false });\n            this.xssOptions = false;\n        } else if (typeof this.xssOptions === 'object') {\n            this.markdownIt.use(sanitizer, this.xssOptions);\n        }\n    },\n    mounted() {\n        hljs_opts.highlighted = this.ishljs;\n    },\n    methods: {\n        $render(src, func) {\n            var $vm = this;\n            missLangs = {};\n            needLangs = [];\n            var res = $vm.markdownIt.render(src);\n            if (this.ishljs) {\n                if (needLangs.length > 0) {\n                    $vm.$_render(src, func, res);\n                }\n            }\n            func(res);\n        },\n        $_render(src, func, res) {\n            var $vm = this;\n            var deal = 0;\n            for (var i = 0; i < needLangs.length; i++) {\n                var url = $vm.p_external_link.hljs_lang(needLangs[i]);\n                loadScript(url, function () {\n                    deal = deal + 1;\n                    if (deal === needLangs.length) {\n                        res = $vm.markdownIt.render(src);\n                        func(res);\n                    }\n                })\n            }\n        }\n    },\n    watch: {\n        ishljs: function (val) {\n            hljs_opts.highlighted = val;\n        }\n    }\n};\n"
  },
  {
    "path": "src/lib/toolbar_left_click.js",
    "content": "/**\n * @Author: HuaChao Chen <CHC>\n * @Date:   2017-05-03T01:23:38+08:00\n * @Email:  chenhuachaoxyz@gmail.com\n * @Filename: toolbar_left_click.js\n * @Last modified by:   CHC\n * @Last modified time: 2017-08-10T12:43:22+08:00\n * @License: MIT\n * @Copyright: 2017\n */\n\nfunction $toolbar_left_undo_click($vm) {\n    if ($vm.d_history_index > 0) {\n        $vm.d_history_index--\n    }\n    // $vm.$refs.vNoteDivEdit.innerHTML = $vm.s_markdown.render($vm.d_value)\n    $vm.$nextTick(() => {\n        // 光标操作\n        let start = $vm.textarea_selectionEnds[$vm.d_history_index];\n        $vm.getTextareaDom().selectionStart = start\n        $vm.getTextareaDom().selectionEnd = start\n    })\n    $vm.getTextareaDom().focus()\n}\n// redo\nfunction $toolbar_left_redo_click($vm) {\n    if ($vm.d_history_index < $vm.d_history.length - 1) {\n        $vm.d_history_index++\n    }\n    $vm.$nextTick(() => {\n        let start = $vm.textarea_selectionEnds[$vm.d_history_index];\n        $vm.getTextareaDom().selectionStart = start\n        $vm.getTextareaDom().selectionEnd = start\n    })\n    $vm.getTextareaDom().focus()\n    // $vm.$refs.vNoteDivEdit.innerHTML = $vm.s_markdown.render($vm.d_value)\n}\nfunction $toolbar_left_trash_click($vm) {\n    $vm.d_value = ''\n    $vm.getTextareaDom().focus()\n    // $vm.$refs.vNoteDivEdit.innerHTML = $vm.s_markdown.render($vm.d_value)\n}\nfunction $toolbar_left_save_click($vm) {\n    $vm.save($vm.d_value, $vm.d_render)\n}\n// ol\nfunction $toolbar_left_ol_click($vm) {\n    $vm.insertOl()\n}\n// ul\nfunction $toolbar_left_ul_click($vm) {\n    $vm.insertUl()\n}\nfunction $toolbar_left_remove_line_click($vm) {\n    $vm.removeLine()\n}\n\nfunction $toolbar_left_codeBlock_click($vm) {\n    $vm.insertCodeBlock();\n}\n\n// 直接添加链接\nexport const toolbar_left_addlink = (type, text, link, $vm) => {\n    let insert_text = {\n        prefix: type === 'link' ? `[${text}](` : `![${text}](`,\n        subfix: ')',\n        str: link\n    };\n    $vm.insertText($vm.getTextareaDom(), insert_text);\n}\nexport const toolbar_left_click = (_type, $vm) => {\n     var _param_of_insert_text = {\n         'bold': {\n             prefix: '**',\n             subfix: '**',\n             str: $vm.d_words.tl_bold\n         },\n         'italic': {\n             prefix: '*',\n             subfix: '*',\n             str: $vm.d_words.tl_italic\n         },\n         'header': {\n             prefix: '# ',\n             subfix: '',\n             str: $vm.d_words.tl_header\n         },\n         'header1': {\n             prefix: '# ',\n             subfix: '',\n             str: $vm.d_words.tl_header_one\n         },\n         'header2': {\n             prefix: '## ',\n             subfix: '',\n             str: $vm.d_words.tl_header_two\n         },\n         'header3': {\n             prefix: '### ',\n             subfix: '',\n             str: $vm.d_words.tl_header_three\n         },\n         'header4': {\n             prefix: '#### ',\n             subfix: '',\n             str: $vm.d_words.tl_header_four\n         },\n         'header5': {\n             prefix: '##### ',\n             subfix: '',\n             str: $vm.d_words.tl_header_five\n         },\n         'header6': {\n             prefix: '###### ',\n             subfix: '',\n             str: $vm.d_words.tl_header_six\n         },\n         'underline': {\n             prefix: '++',\n             subfix: '++',\n             str: $vm.d_words.tl_underline\n         },\n         'strikethrough': {\n             prefix: '~~',\n             subfix: '~~',\n             str: $vm.d_words.tl_strikethrough\n         },\n         'mark': {\n             prefix: '==',\n             subfix: '==',\n             str: $vm.d_words.tl_mark\n         },\n         'superscript': {\n             prefix: '^',\n             subfix: '^',\n             str: $vm.d_words.tl_superscript\n         },\n         'subscript': {\n             prefix: '~',\n             subfix: '~',\n             str: $vm.d_words.tl_subscript\n         },\n         'quote': {\n             prefix: '> ',\n             subfix: '',\n             str: $vm.d_words.tl_quote\n         },\n         'link': {\n             prefix: '[](',\n             subfix: ')',\n             str: $vm.d_words.tl_link\n         },\n         'imagelink': {\n             prefix: '![](',\n             subfix: ')',\n             str: $vm.d_words.tl_image\n         },\n         'table': {\n             prefix: '',\n             subfix: '',\n             str: '|column1|column2|column3|\\n|-|-|-|\\n|content1|content2|content3|\\n'\n         },\n         'aligncenter': {\n           prefix: '::: hljs-center\\n\\n',\n           subfix: '\\n\\n:::\\n',\n           str: $vm.d_words.tl_aligncenter\n         },\n         'alignright': {\n           prefix: '::: hljs-right\\n\\n',\n           subfix: '\\n\\n:::\\n',\n           str: $vm.d_words.tl_alignright\n         },\n         'alignleft': {\n           prefix: '::: hljs-left\\n\\n',\n           subfix: '\\n\\n:::\\n',\n           str: $vm.d_words.tl_alignleft\n         }\n     };\n     if (_param_of_insert_text.hasOwnProperty(_type)) {\n         // 插入对应的内容\n         $vm.insertText($vm.getTextareaDom(),\n             _param_of_insert_text[_type]);\n     }\n     var _other_left_click = {\n         'undo': $toolbar_left_undo_click,\n         'redo': $toolbar_left_redo_click,\n         'trash': $toolbar_left_trash_click,\n         'save': $toolbar_left_save_click,\n         'ol': $toolbar_left_ol_click,\n         'ul': $toolbar_left_ul_click,\n         'removeLine': $toolbar_left_remove_line_click,\n         'code': $toolbar_left_codeBlock_click\n     };\n     if (_other_left_click.hasOwnProperty(_type)) {\n         _other_left_click[_type]($vm);\n     }\n }\n"
  },
  {
    "path": "src/lib/toolbar_right_click.js",
    "content": "/**\n * @Author: HuaChao Chen <CHC>\n * @Date:   2017-05-03T01:39:47+08:00\n * @Email:  chenhuachaoxyz@gmail.com\n * @Filename: toolbar_right_click.js\n * @Last modified by:   chc\n * @Last modified time: 2017-06-08T12:44:50+08:00\n * @License: MIT\n * @Copyright: 2017\n */\n\nfunction $toolbar_right_html_click($vm) {\n    $vm.s_html_code = !$vm.s_html_code\n    if ($vm.htmlcode) {\n        $vm.htmlcode($vm.s_html_code, $vm.d_value)\n    }\n}\n\nfunction $toolbar_right_help_click($vm) {\n    $vm.s_help = !$vm.s_help\n    if ($vm.helptoggle) {\n        $vm.helptoggle($vm.s_help, $vm.d_value)\n    }\n}\n// 导航\nfunction $toolbar_right_read_click($vm) {\n    let element = $vm.$refs.vReadModel\n    // 单栏编辑\n    if (element.requestFullscreen) {\n        element.requestFullscreen();\n    } else if (element.mozRequestFullScreen) {\n        element.mozRequestFullScreen();\n    } else if (element.webkitRequestFullscreen) {\n        element.webkitRequestFullscreen();\n    } else if (element.msRequestFullscreen) {\n        element.msRequestFullscreen();\n    }\n}\n\nfunction $toolbar_right_preview_click($vm) {\n    $vm.s_preview_switch = !$vm.s_preview_switch\n    // $vm.$refs.vNoteDivEdit.innerHTML = $vm.s_markdown.render($vm.d_value)\n    if ($vm.previewtoggle) {\n        $vm.previewtoggle($vm.s_preview_switch, $vm.d_value)\n    }\n}\n\nfunction $toolbar_right_fullscreen_click($vm) {\n    $vm.s_fullScreen = !$vm.s_fullScreen\n    if ($vm.fullscreen) {\n        $vm.fullscreen($vm.s_fullScreen, $vm.d_value)\n    }\n}\nfunction $toolbar_right_subfield_click ($vm) {\n    $vm.s_subfield = !$vm.s_subfield\n    $vm.s_preview_switch = $vm.s_subfield;\n    // $vm.$refs.vNoteDivEdit.innerHTML = $vm.s_markdown.render($vm.d_value)\n    if ($vm.previewtoggle) {\n        $vm.previewtoggle($vm.s_preview_switch, $vm.d_value)\n    }\n    // $vm.$refs.vNoteDivEdit.innerHTML = $vm.s_markdown.render($vm.d_value)\n    if ($vm.subfieldtoggle) {\n        $vm.subfieldtoggle($vm.s_subfield, $vm.d_value)\n    }\n}\nfunction $toolbar_right_navigation_click($vm) {\n    $vm.s_navigation = !$vm.s_navigation\n    if ($vm.s_navigation) {\n        $vm.s_preview_switch = true;\n    }\n    if ($vm.navigationtoggle) {\n        $vm.navigationtoggle($vm.s_navigation, $vm.d_value)\n    }\n    if ($vm.s_navigation) {\n        // 绘制标题导航\n        $vm.getNavigation($vm, false)\n    }\n}\nexport const toolbar_right_click = (_type, $vm) => {\n    var _other_right_click = {\n        'help': $toolbar_right_help_click,\n        'html': $toolbar_right_html_click,\n        'read': $toolbar_right_read_click,\n        'preview': $toolbar_right_preview_click,\n        'fullscreen': $toolbar_right_fullscreen_click,\n        'navigation': $toolbar_right_navigation_click,\n        'subfield': $toolbar_right_subfield_click\n    }\n    if (_other_right_click.hasOwnProperty(_type)) {\n        _other_right_click[_type]($vm);\n    }\n}\n"
  },
  {
    "path": "src/lib/util.js",
    "content": "/**\n * Created by zhy on 2016/12/25.\n */\n/**\n * 深度拷贝对象\n * @param target\n * @param arg\n * @returns {*}\n * @constructor\n */\nexport function p_ObjectCopy_DEEP(target, arg) {\n  for (let arg_item in arg) {\n    let type = typeof arg[arg_item];\n    if (!target[arg_item] || (type !== 'Object' && type !== 'object')) {\n      target[arg_item] = arg[arg_item];\n      continue;\n    } else {\n      target[arg_item] = p_ObjectCopy_DEEP(target[arg_item], arg[arg_item]);\n    }\n  }\n  return target;\n};\n/**\n * 解析url参数\n */\nexport function p_urlParse() {\n  let url = window.location.search;\n  let obj = {};\n  let reg = /[?&][^?&]+=[^?&]+/g;\n  let arr = url.match(reg);\n  if (arr) {\n    arr.forEach((item) => {\n      let tempArr = item.substring(1).split('=');\n      let key = decodeURIComponent(tempArr[0]);\n      let val = decodeURIComponent(tempArr[1]);\n      obj[key] = val;\n    })\n  }\n  return obj;\n};\n\nexport function stopEvent(e) {\n  if (!e) {\n    return;\n  }\n  if (e.preventDefault) {\n    e.preventDefault();\n  }\n  if (e.stopPropagation) {\n    e.stopPropagation();\n  }\n};\n"
  },
  {
    "path": "src/mavon-editor.vue",
    "content": "<template>\n    <div :class=\"[{ 'fullscreen': s_fullScreen, 'shadow': boxShadow }]\" class=\"v-note-wrapper markdown-body\" :style=\"{'box-shadow': boxShadow ? boxShadowStyle : ''}\">\n        <!--工具栏-->\n        <div class=\"v-note-op\" v-show=\"toolbarsFlag\" :style=\"{'background': toolbarsBackground}\">\n            <v-md-toolbar-left ref=\"toolbar_left\" :editable=\"editable\" :transition=\"transition\" :d_words=\"d_words\"\n                               @toolbar_left_click=\"toolbar_left_click\" @toolbar_left_addlink=\"toolbar_left_addlink\" :toolbars=\"toolbars\"\n                               @imgAdd=\"$imgAdd\" @imgDel=\"$imgDel\" @imgTouch=\"$imgTouch\" :image_filter=\"imageFilter\"\n                               :class=\"{'transition': transition}\">\n                <slot name=\"left-toolbar-before\" slot=\"left-toolbar-before\" />\n                <slot name=\"left-toolbar-after\" slot=\"left-toolbar-after\" />\n            </v-md-toolbar-left>\n            <v-md-toolbar-right ref=\"toolbar_right\" :d_words=\"d_words\" @toolbar_right_click=\"toolbar_right_click\"\n                                :toolbars=\"toolbars\"\n                                :s_subfield=\"s_subfield\"\n                                :s_preview_switch=\"s_preview_switch\" :s_fullScreen=\"s_fullScreen\"\n                                :s_html_code=\"s_html_code\"\n                                :s_navigation=\"s_navigation\"\n                                :class=\"{'transition': transition}\">\n                <slot name=\"right-toolbar-before\" slot=\"right-toolbar-before\" />\n                <slot name=\"right-toolbar-after\" slot=\"right-toolbar-after\" />\n            </v-md-toolbar-right>\n        </div>\n        <!--编辑展示区域-->\n        <div class=\"v-note-panel\">\n            <!--编辑区-->\n            <div ref=\"vNoteEdit\" @scroll=\"$v_edit_scroll\" class=\"v-note-edit divarea-wrapper\"\n                 :class=\"{'scroll-style': s_scrollStyle, 'scroll-style-border-radius': s_scrollStyle && !s_preview_switch && !s_html_code, 'single-edit': !s_preview_switch && !s_html_code, 'single-show': (!s_subfield && s_preview_switch) || (!s_subfield && s_html_code), 'transition': transition}\"\n                 @click=\"textAreaFocus\">\n                <div class=\"content-input-wrapper\" :style=\"{'background-color': editorBackground}\">\n                    <!-- 双栏 -->\n                    <v-autoTextarea ref=\"vNoteTextarea\" :placeholder=\"placeholder ? placeholder : d_words.start_editor\"\n                                    class=\"content-input\" :fontSize=\"fontSize\"\n                                    lineHeight=\"1.5\" v-model=\"d_value\" fullHeight\n                                    :style=\"{'background-color': editorBackground}\"></v-autoTextarea>\n                </div>\n            </div>\n            <!--展示区-->\n            <div :class=\"{'single-show': (!s_subfield && s_preview_switch) || (!s_subfield && s_html_code)}\"\n                 v-show=\"s_preview_switch || s_html_code\" class=\"v-note-show\">\n                <div ref=\"vShowContent\" v-html=\"d_render\" v-show=\"!s_html_code\"\n                     :class=\"{'scroll-style': s_scrollStyle, 'scroll-style-border-radius': s_scrollStyle}\" class=\"v-show-content\"\n                     :style=\"{'background-color': previewBackground}\">\n                </div>\n                <div v-show=\"s_html_code\" :class=\"{'scroll-style': s_scrollStyle, 'scroll-style-border-radius': s_scrollStyle}\" class=\"v-show-content-html\"\n                  :style=\"{'background-color': previewBackground}\">\n                    {{d_render}}\n                </div>\n            </div>\n\n            <!--标题导航-->\n            <transition name=\"slideTop\">\n                <div v-show=\"s_navigation\" class=\"v-note-navigation-wrapper\" :class=\"{'transition': transition}\">\n                    <div class=\"v-note-navigation-title\">\n                        {{d_words.navigation_title}}<i @click=\"toolbar_right_click('navigation')\"\n                                                       class=\"fa fa-mavon-times v-note-navigation-close\"\n                                                       aria-hidden=\"true\"></i>\n                    </div>\n                    <div ref=\"navigationContent\" class=\"v-note-navigation-content\" :class=\"{'scroll-style': s_scrollStyle}\">\n                    </div>\n                </div>\n            </transition>\n\n        </div>\n        <!--帮助文档-->\n        <transition name=\"fade\">\n            <div ref=\"help\">\n                <div @click.self=\"toolbar_right_click('help')\" class=\"v-note-help-wrapper\" v-if=\"s_help\">\n                    <div class=\"v-note-help-content markdown-body\" :class=\"{'shadow': boxShadow}\">\n                        <i @click.stop.prevent=\"toolbar_right_click('help')\" class=\"fa fa-mavon-times\"\n                           aria-hidden=\"true\"></i>\n                        <div class=\"scroll-style v-note-help-show\" v-html=\"d_help\"></div>\n                    </div>\n                </div>\n            </div>\n        </transition>\n        <!-- 预览图片 -->\n        <transition name=\"fade\">\n            <div @click=\"d_preview_imgsrc=null\" class=\"v-note-img-wrapper\" v-if=\"d_preview_imgsrc\">\n                <img :src=\"d_preview_imgsrc\" alt=\"none\">\n            </div>\n        </transition>\n        <!--阅读模式-->\n        <div :class=\"{'show': s_readmodel}\" class=\"v-note-read-model scroll-style\" ref=\"vReadModel\">\n            <div ref=\"vNoteReadContent\" class=\"v-note-read-content\" v-html=\"d_render\">\n            </div>\n        </div>\n    </div>\n</template>\n\n<script>\n// import tomarkdown from './lib/core/to-markdown.js'\nimport {autoTextarea} from 'auto-textarea'\nimport {keydownListen} from './lib/core/keydown-listen.js'\nimport hljsCss from './lib/core/hljs/lang.hljs.css.js'\nimport {\n    fullscreenchange,\n   /* windowResize, */\n    scrollLink,\n    insertTextAtCaret,\n    getNavigation,\n    insertTab,\n    unInsertTab,\n    insertOl,\n    insertUl,\n    insertEnter,\n    removeLine,\n    insertCodeBlock,\n    loadLink,\n    loadScript,\n    ImagePreviewListener\n} from './lib/core/extra-function.js'\nimport {stopEvent} from './lib/util.js'\nimport {toolbar_left_click, toolbar_left_addlink} from './lib/toolbar_left_click.js'\nimport {toolbar_right_click} from './lib/toolbar_right_click.js'\nimport {CONFIG} from './lib/config.js'\nimport markdown, {initMarkdown} from './lib/mixins/markdown.js'\nimport md_toolbar_left from './components/md-toolbar-left.vue'\nimport md_toolbar_right from './components/md-toolbar-right.vue'\nimport \"./lib/font/css/fontello.css\"\nimport './lib/css/md.css'\n\nexport default {\n    mixins: [markdown],\n    props: {\n        scrollStyle: {  // 是否渲染滚动条样式(webkit)\n            type: Boolean,\n            default: true\n        },\n        boxShadow: { // 是否添加阴影\n            type: Boolean,\n            default: true\n        },\n        transition: { // 是否开启动画过渡\n            type: Boolean,\n            default: true\n        },\n        autofocus: { // 是否自动获取焦点\n            type: Boolean,\n            default: true\n        },\n        fontSize: { // 字体大小\n            type: String,\n            default: '14px'\n        },\n        toolbarsBackground: { // 工具栏背景色\n            type: String,\n            default: '#ffffff'\n        },\n        editorBackground: { // TODO: 编辑栏背景色\n            type: String,\n            default: '#ffffff'\n        },\n        previewBackground: { // 预览栏背景色\n            type: String,\n            default: '#fbfbfb'\n        },\n        boxShadowStyle: { // 阴影样式\n            type: String,\n            default: '0 2px 12px 0 rgba(0, 0, 0, 0.1)'\n        },\n        help: {\n            type: String,\n            default: null\n        },\n        value: { // 初始 value\n            type: String,\n            default: ''\n        },\n        language: {  // 初始语言\n            type: String,\n            default: 'zh-CN'\n        },\n        subfield: {\n            type: Boolean,\n            default: true\n        },\n        navigation: {\n            type: Boolean,\n            default: false\n        },\n        defaultOpen: {\n            type: String,\n            default: null\n        },\n        editable: { // 是否开启编辑\n            type: Boolean,\n            default: true\n        },\n        toolbarsFlag: { // 是否开启工具栏\n            type: Boolean,\n            default: true\n        },\n        toolbars: { // 工具栏\n            type: Object,\n            default() {\n                return CONFIG.toolbars\n            }\n        },\n        html: {// Enable HTML tags in source\n            type: Boolean,\n            default: true\n        },\n        xssOptions: { // XSS 选项\n            type: [Object, Boolean],\n            default() {\n                return {}\n            }\n        },\n        codeStyle: { // <code></code> 样式\n            type: String,\n            default() {\n                return 'github';\n            }\n        },\n        placeholder: { // 编辑器默认内容\n            type: String,\n            default: null\n        },\n        ishljs: {\n            type: Boolean,\n            default: true\n        },\n        externalLink: {\n            type: [Object, Boolean],\n            default: true\n        },\n        imageFilter: {\n            type: Function,\n            default: null\n        },\n        imageClick: {\n            type: Function,\n            default: null\n        },\n        tabSize: {\n            type: Number,\n            default: 0\n        },\n        shortCut:{\n            type: Boolean,\n            default: true\n        }\n    },\n    data() {\n        return {\n            s_right_click_menu_show: false,\n            right_click_menu_top: 0,\n            right_click_menu_left: 0,\n            s_subfield: (() => {\n                return this.subfield;\n            })(),\n            s_autofocus: true,\n            // 标题导航\n            s_navigation: (() => {\n                return this.navigation;\n            })(),\n            s_scrollStyle: (() => {\n                return this.scrollStyle\n            })(),// props 是否渲染滚动条样式\n            d_value: '',// props 文本内容\n            d_render: '',// props 文本内容render\n            s_preview_switch: (() => {\n                let default_open_ = this.defaultOpen;\n                if (!default_open_) {\n                    default_open_ = this.subfield ? 'preview' : 'edit';\n                }\n                return default_open_ === 'preview' ? true : false;\n            })(), // props true 展示编辑 false展示预览\n            s_fullScreen: false,// 全屏编辑标志\n            s_help: false,// markdown帮助\n            s_html_code: false,// 分栏情况下查看html\n            d_help: null,\n            d_words: null,\n            edit_scroll_height: -1,\n            s_readmodel: false,\n            s_table_enter: false, // 回车事件是否在表格中执行\n            d_history: (() => {\n                let temp_array = []\n                temp_array.push(this.value)\n                return temp_array;\n            })(), // 编辑记录\n            d_history_index: 0, // 编辑记录索引\n            currentTimeout: '',\n            d_image_file: [],\n            d_preview_imgsrc: null, // 图片预览地址\n            s_external_link: {\n                markdown_css: function() {\n                    return 'https://cdnjs.cloudflare.com/ajax/libs/github-markdown-css/2.9.0/github-markdown.min.css';\n                },\n                hljs_js: function() {\n                    return 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.3.1/highlight.min.js';\n                },\n                hljs_lang: function(lang) {\n                    return 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.3.1/languages/' + lang + '.min.js';\n                },\n                hljs_css: function(css) {\n                    if (hljsCss[css]) {\n                        return 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.3.1/styles/' + css + '.min.css';\n                    }\n                    return '';\n                },\n                katex_js: function() {\n                    return 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.8.3/katex.min.js';\n                },\n                katex_css: function() {\n                    return 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.8.3/katex.min.css';\n                }\n            },\n            p_external_link: {},\n            textarea_selectionEnd: 0,\n            textarea_selectionEnds: [0],\n            _xssHandler: null\n        };\n    },\n    created() {\n        var $vm = this;\n        // 初始化语言\n        this.initLanguage();\n        this.initExternalFuc();\n        this.$nextTick(() => {\n            // 初始化Textarea编辑开关\n            $vm.editableTextarea();\n        })\n    },\n    mounted() {\n        var $vm = this;\n        this.$el.addEventListener('paste', function (e) {\n            $vm.$paste(e);\n        })\n        this.$el.addEventListener('drop', function (e) {\n            $vm.$drag(e);\n        })\n        // 浏览器siz大小\n       /* windowResize(this); */\n        keydownListen(this);\n        // 图片预览事件监听\n        ImagePreviewListener(this);\n        // 设置默认焦点\n        if (this.autofocus) {\n            this.getTextareaDom().focus();\n        }\n        // fullscreen事件\n        fullscreenchange(this);\n        this.d_value = this.value || \"\";\n        // 将help添加到末尾\n        document.body.appendChild(this.$refs.help);\n        this.loadExternalLink('markdown_css', 'css');\n        this.loadExternalLink('katex_css', 'css')\n        this.loadExternalLink('katex_js', 'js', function() {\n            $vm.iRender(true);\n        })\n        this.loadExternalLink('hljs_js', 'js', function() {\n            $vm.iRender(true);\n        })\n\n        $vm.codeStyleChange($vm.codeStyle, true)\n    },\n    beforeDestroy() {\n        document.body.removeChild(this.$refs.help);\n    },\n    getMarkdownIt() {\n        let mdIt = this.mixins[0].data().markdownIt;\n        if (!mdIt) {\n            mdIt = initMarkdown();\n        }\n        return mdIt\n    },\n    methods: {\n        loadExternalLink(name, type, callback) {\n            if (typeof this.p_external_link[name] !== 'function') {\n                if (this.p_external_link[name] !== false) {\n                    console.error('external_link.' + name, 'is not a function, if you want to disabled this error log, set external_link.' + name, 'to function or false');\n                }\n                return;\n            }\n            var _obj = {\n                'css': loadLink,\n                'js': loadScript\n            };\n            if (_obj.hasOwnProperty(type)) {\n                _obj[type](this.p_external_link[name](), callback);\n            }\n        },\n        initExternalFuc() {\n            var $vm = this;\n            var _external_ = ['markdown_css', 'hljs_js', 'hljs_css', 'hljs_lang', 'katex_js', 'katex_css'];\n            var _type_ = typeof $vm.externalLink;\n            var _is_object = (_type_ === 'object');\n            var _is_boolean = (_type_ === 'boolean');\n            for (var i = 0; i < _external_.length; i++) {\n                if ((_is_boolean && !$vm.externalLink) || (_is_object && $vm.externalLink[_external_[i]] === false)) {\n                    $vm.p_external_link[_external_[i]] = false;\n                } else if (_is_object && typeof $vm.externalLink[_external_[i]] === 'function') {\n                    $vm.p_external_link[_external_[i]] = $vm.externalLink[_external_[i]];\n                } else {\n                    $vm.p_external_link[_external_[i]] = $vm.s_external_link[_external_[i]];\n                }\n            }\n        },\n        textAreaFocus() {\n            this.$refs.vNoteTextarea.$refs.vTextarea.focus();\n        },\n        $drag($e) {\n            var dataTransfer = $e.dataTransfer;\n            if (dataTransfer) {\n                var files = dataTransfer.files;\n                if (files.length > 0) {\n                    $e.preventDefault();\n                    this.$refs.toolbar_left.$imgFilesAdd(files);\n                }\n            }\n        },\n        $paste($e) {\n            var clipboardData = $e.clipboardData;\n            if (clipboardData) {\n                var items = clipboardData.items;\n                if (!items) return;\n                var types = clipboardData.types || [];\n                var item = null;\n                for (var i = 0; i < types.length; i++) {\n                    if (types[i] === 'Files') {\n                        item = items[i];\n                        break;\n                    }\n                }\n                if (item && item.kind === 'file') {\n                    // prevent filename being pasted parallel along\n                    // with the image pasting process\n                    stopEvent($e)\n                    var oFile = item.getAsFile();\n                    this.$refs.toolbar_left.$imgFilesAdd([oFile]);\n                }\n            }\n        },\n        $imgTouch(file) {\n            var $vm = this;\n            // TODO 跳转到图片位置\n        },\n        $imgDel(file) {\n            this.markdownIt.image_del(file[1]);\n            // 删除所有markdown中的图片\n            let fileReg = file[0]\n            let reg = new RegExp(`\\\\!\\\\[${file[1]._name}\\\\]\\\\(${fileReg}\\\\)`, \"g\")\n\n            this.d_value = this.d_value.replace(reg, '');\n            this.iRender();\n            this.$emit('imgDel', file);\n        },\n        $imgAdd(pos, $file, isinsert) {\n            if (isinsert === undefined) isinsert = true;\n            var $vm = this;\n            if (this.__rFilter == null) {\n                // this.__rFilter = /^(?:image\\/bmp|image\\/cis\\-cod|image\\/gif|image\\/ief|image\\/jpeg|image\\/jpeg|image\\/jpeg|image\\/pipeg|image\\/png|image\\/svg\\+xml|image\\/tiff|image\\/x\\-cmu\\-raster|image\\/x\\-cmx|image\\/x\\-icon|image\\/x\\-portable\\-anymap|image\\/x\\-portable\\-bitmap|image\\/x\\-portable\\-graymap|image\\/x\\-portable\\-pixmap|image\\/x\\-rgb|image\\/x\\-xbitmap|image\\/x\\-xpixmap|image\\/x\\-xwindowdump)$/i;\n                this.__rFilter = /^image\\//i;\n            }\n            this.__oFReader = new FileReader();\n            this.__oFReader.onload = function (oFREvent) {\n                $vm.markdownIt.image_add(pos, oFREvent.target.result);\n                $file.miniurl = oFREvent.target.result;\n                if (isinsert === true) {\n                    // 去除特殊字符\n                    $file._name = $file.name.replace(/[\\[\\]\\(\\)\\+\\{\\}&\\|\\\\\\*^%$#@\\-]/g, '');\n\n                    $vm.insertText($vm.getTextareaDom(),\n                        {\n                            prefix: '![' + $file._name + '](' + pos + ')',\n                            subfix: '',\n                            str: ''\n                        });\n                    $vm.$nextTick(function () {\n                        $vm.$emit('imgAdd', pos, $file);\n                    })\n                }\n            }\n            if ($file) {\n                var oFile = $file;\n                if (this.__rFilter.test(oFile.type)) {\n                    this.__oFReader.readAsDataURL(oFile);\n                }\n            }\n        },\n        $imgUpdateByUrl(pos, url) {\n            var $vm = this;\n            this.markdownIt.image_add(pos, url);\n            this.$nextTick(function () {\n                $vm.d_render = this.markdownIt.render(this.d_value);\n            })\n        },\n        $imgAddByUrl(pos, url) {\n            if (this.$refs.toolbar_left.$imgAddByUrl(pos, url)) {\n                this.$imgUpdateByUrl(pos, url);\n                return true;\n            }\n            return false;\n        },\n        $img2Url(fileIndex, url) {\n            // x.replace(/(\\[[^\\[]*?\\](?=\\())\\(\\s*(\\.\\/2)\\s*\\)/g, \"$1(http://path/to/png.png)\")\n            var reg_str = \"/(!\\\\[\\[^\\\\[\\]*?\\\\]\\(?=\\\\(\\)\\)\\\\(\\\\s*\\(\" + fileIndex + \"\\)\\\\s*\\\\)/g\"\n            var reg = eval(reg_str);\n            this.d_value = this.d_value.replace(reg, \"$1(\" + url + \")\")\n            this.$refs.toolbar_left.$changeUrl(fileIndex, url)\n            this.iRender()\n        },\n        $imglst2Url(imglst) {\n            if (imglst instanceof Array) {\n                for (var i = 0; i < imglst.length; i++) {\n                    this.$img2Url(imglst[i][0], imglst[i][1]);\n                }\n            }\n        },\n        toolbar_left_click(_type) {\n            toolbar_left_click(_type, this);\n        },\n        toolbar_left_addlink(_type, text, link) {\n            toolbar_left_addlink(_type, text, link, this);\n        },\n        toolbar_right_click(_type) {\n            toolbar_right_click(_type, this);\n        },\n        getNavigation($vm, full) {\n            return getNavigation($vm, full);\n        },\n        // @event\n        // 修改数据触发 （val ， val_render）\n        change(val, render) {\n            this.$emit('change', val, render)\n        },\n        // 切换全屏触发 （status , val）\n        fullscreen(status, val) {\n            this.$emit('fullScreen', status, val)\n        },\n        // 打开阅读模式触发（status , val）\n        readmodel(status, val) {\n            this.$emit('readModel', status, val)\n        },\n        // 切换阅读编辑触发 （status , val）\n        previewtoggle(status, val) {\n            this.$emit('previewToggle', status, val)\n        },\n        // 切换分栏触发 （status , val）\n        subfieldtoggle(status, val) {\n            this.$emit('subfieldToggle', status, val)\n        },\n        // 切换htmlcode触发 （status , val）\n        htmlcode(status, val) {\n            this.$emit('htmlCode', status, val)\n        },\n        // 打开 , 关闭 help触发 （status , val）\n        helptoggle(status, val) {\n            this.$emit('helpToggle', status, val)\n        },\n        // 监听ctrl + s\n        save(val, render) {\n            this.$emit('save', val, render)\n        },\n        // 导航栏切换\n        navigationtoggle(status, val) {\n            this.$emit('navigationToggle', status, val)\n        },\n        $toolbar_right_read_change_status() {\n            this.s_readmodel = !this.s_readmodel\n            if (this.readmodel) {\n                this.readmodel(this.s_readmodel, this.d_value)\n            }\n            if (this.s_readmodel && this.toolbars.navigation) {\n                this.getNavigation(this, true)\n            }\n        },\n        // ---------------------------------------\n        // 滚动条联动\n        $v_edit_scroll($event) {\n            scrollLink($event, this);\n        },\n        // 获取textarea dom节点\n        getTextareaDom() {\n            return this.$refs.vNoteTextarea.$refs.vTextarea;\n        },\n        // 工具栏插入内容\n        insertText(obj, {prefix, subfix, str, type}) {\n            // if (this.s_preview_switch) {\n\n            insertTextAtCaret(obj, {prefix, subfix, str, type}, this);\n        },\n        insertTab() {\n            insertTab(this, this.tabSize)\n        },\n        insertOl() {\n            insertOl(this)\n        },\n        removeLine() {\n            removeLine(this)\n        },\n        insertUl() {\n            insertUl(this)\n        },\n        unInsertTab() {\n            unInsertTab(this, this.tabSize)\n        },\n        insertCodeBlock() {\n            insertCodeBlock(this);\n        },\n        insertEnter(event) {\n            insertEnter(this, event)\n        },\n        saveHistory() {\n            this.d_history.splice(this.d_history_index + 1, this.d_history.length)\n            this.d_history.push(this.d_value)\n            this.textarea_selectionEnds.splice(this.d_history_index + 1, this.textarea_selectionEnds.length)\n            this.textarea_selectionEnds.push(this.textarea_selectionEnd)\n            this.d_history_index = this.d_history.length - 1\n        },\n        saveSelectionEndsHistory() {\n            const textarea = this.$refs.vNoteTextarea && this.$refs.vNoteTextarea.$el.querySelector('textarea');\n            this.textarea_selectionEnd = textarea ? textarea.selectionEnd : this.textarea_selectionEnd;\n        },\n        initLanguage() {\n            let lang = CONFIG.langList.indexOf(this.language) >= 0 ? this.language : 'zh-CN';\n            var $vm = this;\n            $vm.$render(CONFIG[`help_${lang}`], function(res) {\n                $vm.d_help = res;\n            })\n            this.d_words = CONFIG[`words_${lang}`];\n        },\n        // 编辑开关\n        editableTextarea() {\n            let text_dom = this.$refs.vNoteTextarea.$refs.vTextarea;\n            if (this.editable) {\n                text_dom.removeAttribute('disabled');\n            } else {\n                text_dom.setAttribute('disabled', 'disabled');\n            }\n        },\n        codeStyleChange(val, isInit) {\n            isInit = isInit ? isInit : false;\n            if (typeof this.p_external_link.hljs_css !== 'function') {\n                if (this.p_external_link.hljs_css !== false)\n                { console.error('external_link.hljs_css is not a function, if you want to disabled this error log, set external_link.hljs_css to function or false'); }\n                return;\n            }\n            var url = this.p_external_link.hljs_css(val);\n            if (url.length === 0 && isInit) {\n                console.warn('hljs color scheme', val, 'do not exist, loading default github');\n                url = this.p_external_link.hljs_css('github')\n            }\n            if (url.length > 0) {\n                loadLink(url,null,\"md-code-style\");\n            } else {\n                console.warn('hljs color scheme', val, 'do not exist, hljs color scheme will not change');\n            }\n        },\n        iRender(toggleChange) {\n            var $vm = this;\n            this.$render($vm.d_value, function(res) {\n                $vm.d_render = res;\n                // change回调  toggleChange == false 时候触发change回调\n                if (!toggleChange)\n                {\n                    if ($vm.change) $vm.change($vm.d_value, $vm.d_render);\n                }\n                // 改变标题导航\n                if ($vm.s_navigation) getNavigation($vm, false);\n                // v-model 语法糖\n                $vm.$emit('input', $vm.d_value)\n                // 塞入编辑记录数组\n                if ($vm.d_value === $vm.d_history[$vm.d_history_index]) return\n                window.clearTimeout($vm.currentTimeout)\n                $vm.currentTimeout = setTimeout(() => {\n                    $vm.saveHistory();\n                }, 500);\n            })\n        },\n        // 清空上一步 下一步缓存\n        $emptyHistory() {\n            this.d_history = [this.d_value] // 编辑记录\n            this.d_history_index = 0 // 编辑记录索引\n        }\n    },\n    watch: {\n        d_value: function (val, oldVal) {\n            this.saveSelectionEndsHistory();\n            this.iRender();\n        },\n        value: function (val, oldVal) {\n            if (val !== this.d_value) {\n                this.d_value = val\n            }\n        },\n        subfield: function (val, oldVal) {\n            this.s_subfield = val\n        },\n        d_history_index() {\n            if (this.d_history_index > 20) {\n                this.d_history.shift()\n                this.d_history_index = this.d_history_index - 1\n            }\n            this.d_value = this.d_history[this.d_history_index]\n        },\n        language: function (val) {\n            this.initLanguage();\n        },\n        editable: function () {\n            this.editableTextarea();\n        },\n        defaultOpen: function (val) {\n            let default_open_ = val;\n            if (!default_open_) {\n                default_open_ = this.subfield ? 'preview' : 'edit';\n            }\n            this.s_preview_switch = default_open_ === 'preview' ? true : false;\n            return this.s_preview_switch;\n        },\n        codeStyle: function (val) {\n            this.codeStyleChange(val)\n        }\n    },\n    components: {\n        'v-autoTextarea': autoTextarea,\n        'v-md-toolbar-left': md_toolbar_left,\n        'v-md-toolbar-right': md_toolbar_right\n    }\n};\n</script>\n<style lang=\"stylus\" rel=\"stylesheet/stylus\">\n    @import \"lib/css/scroll.styl\"\n    @import \"lib/css/mavon-editor.styl\"\n</style>\n<style lang=\"css\" scoped>\n    .auto-textarea-wrapper {\n        height: 100%;\n    }\n</style>\n"
  },
  {
    "path": "tests/unit/__snapshots__/mavon-editor.spec.js.snap",
    "content": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`snapshot snapshot 1`] = `\n<div class=\"v-note-wrapper markdown-body shadow\" style=\"box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);\">\n  <div class=\"v-note-op\" style=\"background: rgb(255, 255, 255);\">\n    <div class=\"v-left-item transition\"> <button type=\"button\" aria-hidden=\"true\" title=\"粗体 (ctrl+b)\" class=\"op-icon fa fa-mavon-bold\"></button> <button type=\"button\" aria-hidden=\"true\" title=\"斜体 (ctrl+i)\" class=\"op-icon fa fa-mavon-italic\"></button>\n      <div type=\"button\" aria-hidden=\"true\" title=\"标题 (ctrl+h)\" class=\"op-icon fa fa-mavon-header dropdown dropdown-wrapper\">\n        <transition-stub name=\"fade\">\n          <div class=\"op-header popup-dropdown transition\" style=\"display: none;\">\n            <div title=\"#\" class=\"dropdown-item\"><span>一级标题</span></div>\n            <div title=\"## \" class=\"dropdown-item\"><span>二级标题</span></div>\n            <div title=\"### \" class=\"dropdown-item\"><span>三级标题</span></div>\n            <div title=\"#### \" class=\"dropdown-item\"><span>四级标题</span></div>\n            <div title=\"##### \" class=\"dropdown-item\"><span>五级标题</span></div>\n            <div title=\"###### \" class=\"dropdown-item\"><span>六级标题</span></div>\n          </div>\n        </transition-stub>\n      </div> <span class=\"op-icon-divider\"></span> <button type=\"button\" title=\"下划线 (ctrl+u)\" aria-hidden=\"true\" class=\"op-icon fa fa-mavon-underline\"></button> <button type=\"button\" title=\"中划线 (ctrl+shift+d)\" aria-hidden=\"true\" class=\"op-icon fa fa-mavon-strikethrough\"></button> <button type=\"button\" title=\"标记 (ctrl+m)\" aria-hidden=\"true\" class=\"op-icon fa fa-mavon-thumb-tack\"></button> <button type=\"button\" aria-hidden=\"true\" title=\"上角标 (ctrl+alt+s)\" class=\"op-icon fa fa-mavon-superscript\"></button> <button type=\"button\" aria-hidden=\"true\" title=\"下角标 (ctrl+shift+s)\" class=\"op-icon fa fa-mavon-subscript\"></button> <button type=\"button\" aria-hidden=\"true\" title=\"居左 (ctrl+l)\" class=\"op-icon fa fa-mavon-align-left\"></button> <button type=\"button\" aria-hidden=\"true\" title=\"居中 (ctrl+e)\" class=\"op-icon fa fa-mavon-align-center\"></button> <button type=\"button\" aria-hidden=\"true\" title=\"居右 (ctrl+r)\" class=\"op-icon fa fa-mavon-align-right\"></button> <span class=\"op-icon-divider\"></span> <button type=\"button\" aria-hidden=\"true\" title=\"段落引用 (ctrl+q)\" class=\"op-icon fa fa-mavon-quote-left\"></button> <button type=\"button\" aria-hidden=\"true\" title=\"有序列表 (ctrl+o)\" class=\"op-icon fa fa-mavon-list-ol\"></button> <button type=\"button\" aria-hidden=\"true\" title=\"无序列表 (ctrl+alt+u)\" class=\"op-icon fa fa-mavon-list-ul\"></button> <span class=\"op-icon-divider\"></span> <button type=\"button\" aria-hidden=\"true\" title=\"链接 (ctrl+l)\" class=\"op-icon fa fa-mavon-link\"></button>\n      <div type=\"button\" aria-hidden=\"true\" class=\"op-icon fa fa-mavon-picture-o dropdown dropdown-wrapper\">\n        <transition-stub name=\"fade\">\n          <div class=\"op-image popup-dropdown transition\" style=\"display: none;\">\n            <div class=\"dropdown-item\"><span>添加图片链接</span></div>\n            <div class=\"dropdown-item\" style=\"overflow: hidden;\"><input type=\"file\" accept=\"image/gif,image/jpeg,image/jpg,image/png,image/svg\" multiple=\"multiple\">上传图片\n            </div>\n            <!---->\n          </div>\n        </transition-stub>\n      </div> <button type=\"button\" aria-hidden=\"true\" title=\"代码块 (ctrl+alt+c)\" class=\"op-icon fa fa-mavon-code\"></button> <button type=\"button\" aria-hidden=\"true\" title=\"表格 (ctrl+alt+t)\" class=\"op-icon fa fa-mavon-table\"></button> <span class=\"op-icon-divider\"></span> <button type=\"button\" aria-hidden=\"true\" title=\"上一步 (ctrl+z)\" class=\"op-icon fa fa-mavon-undo\"></button> <button type=\"button\" aria-hidden=\"true\" title=\"下一步 (ctrl+y)\" class=\"op-icon fa fa-mavon-repeat\"></button> <button type=\"button\" aria-hidden=\"true\" title=\"清空 (ctrl+breakspace)\" class=\"op-icon fa fa-mavon-trash-o\"></button> <button type=\"button\" aria-hidden=\"true\" title=\"保存 (ctrl+s)\" class=\"op-icon fa fa-mavon-floppy-o\"></button>\n      <transition-stub name=\"fade\">\n        <!---->\n      </transition-stub>\n    </div>\n    <div class=\"v-right-item transition\"> <button type=\"button\" aria-hidden=\"true\" title=\"开启标题导航 (F8)\" class=\"op-icon fa fa-mavon-bars\"></button> <button type=\"button\" aria-hidden=\"true\" title=\"关闭标题导航 (F8)\" class=\"op-icon fa fa-mavon-bars selected\" style=\"display: none;\"></button> <button type=\"button\" aria-hidden=\"true\" title=\"编辑 (F9)\" class=\"op-icon fa fa-mavon-eye-slash selected\"></button> <button type=\"button\" aria-hidden=\"true\" title=\"预览 (F9)\" class=\"op-icon fa fa-mavon-eye\" style=\"display: none;\"></button> <button type=\"button\" title=\"全屏编辑 (F10)\" aria-hidden=\"true\" class=\"op-icon fa fa-mavon-arrows-alt\"></button> <button type=\"button\" title=\"退出全屏 (F10)\" aria-hidden=\"true\" class=\"op-icon fa fa-mavon-compress selected\" style=\"display: none;\"></button> <button type=\"button\" aria-hidden=\"true\" title=\"沉浸式阅读 (F11)\" class=\"op-icon fa fa-mavon-window-maximize\"></button> <button type=\"button\" aria-hidden=\"true\" title=\"单栏 (F12)\" class=\"op-icon fa fa-mavon-columns selected\"></button> <span class=\"op-icon-divider\"></span> <button type=\"button\" title=\"查看html文本\" aria-hidden=\"true\" class=\"op-icon fa fa-mavon-code\"></button> <button type=\"button\" title=\"返回markdown文本\" aria-hidden=\"true\" class=\"op-icon fa fa-mavon-code selected\" style=\"display: none;\"></button> <button type=\"button\" title=\"markdown语法帮助\" aria-hidden=\"true\" class=\"op-icon fa fa-mavon-question-circle\" style=\"font-size: 17px; padding: 5px 6px 5px 3px;\"></button> </div>\n  </div>\n  <div class=\"v-note-panel\">\n    <div class=\"v-note-edit divarea-wrapper scroll-style transition\">\n      <div class=\"content-input-wrapper\" style=\"background-color: rgb(255, 255, 255);\">\n        <div class=\"auto-textarea-wrapper content-input\" style=\"font-size: 14px; line-height: 1.5; height: 100%; background-color: rgb(255, 255, 255);\"><pre class=\"auto-textarea-block\" style=\"font-size: 14px; line-height: 1.5; min-height: 100%;\"><br> </pre> <textarea spellcheck=\"false\" placeholder=\"开始编辑...\" class=\"auto-textarea-input no-border no-resize\" style=\"font-size: 14px; line-height: 1.5;\"></textarea></div>\n      </div>\n    </div>\n    <div class=\"v-note-show\">\n      <div class=\"v-show-content scroll-style scroll-style-border-radius\" style=\"background-color: rgb(251, 251, 251);\"></div>\n      <div class=\"v-show-content-html scroll-style scroll-style-border-radius\" style=\"background-color: rgb(251, 251, 251); display: none;\">\n\n      </div>\n    </div>\n    <transition-stub name=\"slideTop\">\n      <div class=\"v-note-navigation-wrapper transition\" style=\"display: none;\">\n        <div class=\"v-note-navigation-title\">\n          导航目录<i aria-hidden=\"true\" class=\"fa fa-mavon-times v-note-navigation-close\"></i></div>\n        <div class=\"v-note-navigation-content scroll-style\"></div>\n      </div>\n    </transition-stub>\n  </div>\n  <transition-stub name=\"fade\"></transition-stub>\n  <transition-stub name=\"fade\">\n    <!---->\n  </transition-stub>\n  <div class=\"v-note-read-model scroll-style\">\n    <div class=\"v-note-read-content\"></div>\n  </div>\n</div>\n`;\n"
  },
  {
    "path": "tests/unit/base.spec.js",
    "content": "import { mount } from '@vue/test-utils'\r\nimport MavonEditor from '@/mavon-editor.vue'\r\nimport autoTextarea from 'auto-textarea/auto-textarea.vue'\r\n\r\n/*eslint-disable */\r\nconst factory = (propsData, mocks) => {\r\n    return mount(MavonEditor, {\r\n        propsData: {\r\n            ...propsData\r\n        },\r\n        mocks: {\r\n            ...mocks\r\n        },\r\n        stubs: {\r\n            \"v-autoTextarea\": autoTextarea\r\n        }\r\n    })\r\n}\r\nlet wrapper,\r\n    buttonClass,\r\n    textValue,\r\n    htmlValue,\r\n    textValueClass = '.auto-textarea-block',\r\n    htmlValueClass = '.v-show-content-html.scroll-style.scroll-style-border-radius'\r\n\r\nfunction checkButton(buttonClass, textValue, htmlValue) {\r\n    expect(wrapper.find(buttonClass).exists()).toBe(true)\r\n    wrapper.find(buttonClass).trigger('click')\r\n    wrapper.vm.$nextTick(() => {\r\n        expect(wrapper.find(textValueClass).text()).toEqual(textValue)\r\n        expect(wrapper.find(htmlValueClass).text()).toEqual(htmlValue)\r\n    })\r\n}\r\ndescribe('left-toolbars测试', () => {\r\n    beforeEach(() => {\r\n        wrapper = new factory({ d_words: null, value: \" \" })\r\n    })\r\n    afterEach(() => {\r\n        wrapper.destroy()\r\n    })\r\n\r\n    it('粗体按钮', async () => {\r\n        buttonClass = '.op-icon.fa.fa-mavon-bold'\r\n        textValue = '**粗体**'\r\n        htmlValue = '<p><strong>粗体</strong></p>'\r\n        expect.assertions(6)\r\n        await checkButton(buttonClass, textValue, htmlValue)\r\n        textValue = '粗体'\r\n        htmlValue = '<p>粗体</p>'\r\n        await checkButton(buttonClass, textValue, htmlValue)\r\n    })\r\n\r\n    it('斜体按钮', async () => {\r\n        let buttonClass = '.op-icon.fa.fa-mavon-italic'\r\n        let textValue = '*斜体*'\r\n        let htmlValue = '<p><em>斜体</em></p>'\r\n        await checkButton(buttonClass, textValue, htmlValue)\r\n        textValue = '斜体'\r\n        htmlValue = '<p>斜体</p>'\r\n        await checkButton(buttonClass, textValue, htmlValue)\r\n    })\r\n\r\n    it('标题按钮', async () => {\r\n        let buttonClass = '.op-header.popup-dropdown.transition span'\r\n        let textValue = '# 一级标题'\r\n        let htmlValue = '<h1><a id=\"_0\"></a>一级标题</h1>'\r\n        await checkButton(buttonClass, textValue, htmlValue)\r\n    })\r\n\r\n    it('下划线按钮', async () => {\r\n        let buttonClass = '.op-icon.fa.fa-mavon-underline'\r\n        let textValue = '++下划线++'\r\n        let htmlValue = '<p><ins>下划线</ins></p>'\r\n        await checkButton(buttonClass, textValue, htmlValue)\r\n        textValue = '下划线'\r\n        htmlValue = '<p>下划线</p>'\r\n        await checkButton(buttonClass, textValue, htmlValue)\r\n    })\r\n\r\n    it('下划线按钮', async () => {\r\n        let buttonClass = '.op-icon.fa.fa-mavon-underline'\r\n        let textValue = '++下划线++'\r\n        let htmlValue = '<p><ins>下划线</ins></p>'\r\n        await checkButton(buttonClass, textValue, htmlValue)\r\n    })\r\n\r\n    it('中划线按钮', async () => {\r\n        let buttonClass = '.op-icon.fa.fa-mavon-strikethrough'\r\n        let textValue = '~~中划线~~'\r\n        let htmlValue = '<p><s>中划线</s></p>'\r\n        await checkButton(buttonClass, textValue, htmlValue)\r\n    })\r\n\r\n    it('标记按钮', async () => {\r\n        let buttonClass = '.op-icon.fa.fa-mavon-thumb-tack'\r\n        let textValue = '==标记=='\r\n        let htmlValue = '<p><mark>标记</mark></p>'\r\n        await checkButton(buttonClass, textValue, htmlValue)\r\n    })\r\n\r\n    it('上角标按钮', async () => {\r\n        let buttonClass = '.op-icon.fa.fa-mavon-superscript'\r\n        let textValue = '^上角标^'\r\n        let htmlValue = '<p><sup>上角标</sup></p>'\r\n        await checkButton(buttonClass, textValue, htmlValue)\r\n    })\r\n\r\n    it('下角标按钮', async () => {\r\n        let buttonClass = '.op-icon.fa.fa-mavon-subscript'\r\n        let textValue = '~下角标~'\r\n        let htmlValue = '<p><sub>下角标</sub></p>'\r\n        await checkButton(buttonClass, textValue, htmlValue)\r\n    })\r\n\r\n    it('居左按钮', async () => {\r\n        let buttonClass = '.op-icon.fa.fa-mavon-align-left'\r\n        let textValue = '::: hljs-left\\n\\n居左\\n\\n:::'\r\n        let htmlValue = '<div class=\"hljs-left\">\\n<p>居左</p>\\n</div>'\r\n        await checkButton(buttonClass, textValue, htmlValue)\r\n    })\r\n\r\n    it('居中按钮', async () => {\r\n        let buttonClass = '.op-icon.fa.fa-mavon-align-center'\r\n        let textValue = '::: hljs-center\\n\\n居中\\n\\n:::'\r\n        let htmlValue = '<div class=\"hljs-center\">\\n<p>居中</p>\\n</div>'\r\n        await checkButton(buttonClass, textValue, htmlValue)\r\n    })\r\n\r\n    it('居右按钮', async () => {\r\n        let buttonClass = '.op-icon.fa.fa-mavon-align-right'\r\n        let textValue = '::: hljs-right\\n\\n居右\\n\\n:::'\r\n        let htmlValue = '<div class=\"hljs-right\">\\n<p>居右</p>\\n</div>'\r\n        await checkButton(buttonClass, textValue, htmlValue)\r\n    })\r\n\r\n    it('段落引用', async () => {\r\n        let buttonClass = '.op-icon.fa.fa-mavon-quote-left'\r\n        let textValue = '> 段落引用'\r\n        let htmlValue = '<blockquote>\\n<p>段落引用</p>\\n</blockquote>'\r\n        await checkButton(buttonClass, textValue, htmlValue)\r\n        textValue = '段落引用'\r\n        htmlValue = '<p>段落引用</p>'\r\n        await checkButton(buttonClass, textValue, htmlValue)\r\n    })\r\n\r\n    it('有序列表', async () => {\r\n        let buttonClass = '.op-icon.fa.fa-mavon-list-ol'\r\n        let textValue = '1.'\r\n        let htmlValue = '<ol>\\n<li></li>\\n</ol>'\r\n        await checkButton(buttonClass, textValue, htmlValue)\r\n    })\r\n\r\n    it('无序列表', async () => {\r\n        let buttonClass = '.op-icon.fa.fa-mavon-list-ul'\r\n        let textValue = '-'\r\n        let htmlValue = '<ul>\\n<li></li>\\n</ul>'\r\n\r\n        await checkButton(buttonClass, textValue, htmlValue)\r\n    })\r\n\r\n    it('链接', async () => {\r\n        let buttonClass = '.op-icon.fa.fa-mavon-link'\r\n        let linktext = '.link-text.input-wrapper input'\r\n        let linkaddr = '.link-addr.input-wrapper input'\r\n        let surebutten = '.op-btn.sure'\r\n        let textValue = '[mylink](http://xxx.com)'\r\n        let htmlValue = '<p><a href=\\\"http://xxx.com\\\" target=\\\"_blank\\\">mylink</a></p>'\r\n\r\n        await wrapper.find(buttonClass).trigger('click')\r\n        wrapper.find(linktext).setValue('mylink')\r\n        wrapper.find(linkaddr).setValue('http://xxx.com')\r\n        await wrapper.find(surebutten).trigger('click')\r\n\r\n        expect(wrapper.find(textValueClass).text()).toEqual(textValue)\r\n        expect(wrapper.find(htmlValueClass).text()).toEqual(htmlValue)\r\n    })\r\n\r\n    it('图片链接添加', async () => {\r\n        let buttonClass = '.op-icon.fa.fa-mavon-picture-o.dropdown.dropdown-wrapper'\r\n        let addimagelink = '.op-image.popup-dropdown.transition div span'\r\n        let linktext = '.link-text.input-wrapper input'\r\n        let linkaddr = '.link-addr.input-wrapper input'\r\n        let surebutten = '.op-btn.sure'\r\n        let textValue = '![mylink](http://xxx.com)'\r\n        let htmlValue = '<p><img src=\"http://xxx.com\" alt=\"mylink\" /></p>'\r\n\r\n        await wrapper.find(buttonClass).trigger('click')\r\n        await wrapper.find(addimagelink).trigger('click')\r\n        wrapper.find(linktext).setValue('mylink')\r\n        wrapper.find(linkaddr).setValue('http://xxx.com')\r\n        await wrapper.find(surebutten).trigger('click')\r\n\r\n        expect(wrapper.find(textValueClass).text()).toEqual(textValue)\r\n        expect(wrapper.find(htmlValueClass).text()).toEqual(htmlValue)\r\n    })\r\n\r\n    it('代码块', async () => {\r\n        let buttonClass = '.op-icon.fa.fa-mavon-code'\r\n        let textValue = '```language\\n\\n```'\r\n        let htmlValue = '<pre><code class=\"lang-language\">\\n</code></pre>'\r\n        await checkButton(buttonClass, textValue, htmlValue)\r\n    })\r\n\r\n    it('表格', async () => {\r\n        let buttonClass = '.op-icon.fa.fa-mavon-table'\r\n        let textValue = `|column1|column2|column3|\\n|-|-|-|\\n|content1|content2|content3|`\r\n        let htmlValue = '<table>\\n' +\r\n            '<thead>\\n' +\r\n            '<tr>\\n' +\r\n            '<th>column1</th>\\n' +\r\n            '<th>column2</th>\\n' +\r\n            '<th>column3</th>\\n' +\r\n            '</tr>\\n' +\r\n            '</thead>\\n' +\r\n            '<tbody>\\n' +\r\n            '<tr>\\n' +\r\n            '<td>content1</td>\\n' +\r\n            '<td>content2</td>\\n' +\r\n            '<td>content3</td>\\n' +\r\n            '</tr>\\n' +\r\n            '</tbody>\\n' +\r\n            '</table>'\r\n        await checkButton(buttonClass, textValue, htmlValue)\r\n    })\r\n\r\n    it('上一步/下一步', async () => {\r\n        let buttonClass = '.op-icon.fa.fa-mavon-undo'\r\n        let textValue = 'first'\r\n        let htmlValue = '<p>first</p>'\r\n        await wrapper.setData({\r\n            d_history: ['first', 'second', 'third'],\r\n            d_history_index: 1\r\n        })\r\n\r\n        await checkButton(buttonClass, textValue, htmlValue)\r\n        buttonClass = '.op-icon.fa.fa-mavon-repeat'\r\n        textValue = 'second'\r\n        htmlValue = '<p>second</p>'\r\n        await checkButton(buttonClass, textValue, htmlValue)\r\n    })\r\n\r\n    it('清空', async () => {\r\n        let buttonClass = '.op-icon.fa.fa-mavon-trash-o'\r\n        let textValue = ''\r\n        let htmlValue = ''\r\n        await wrapper.setData({ d_value: 'first' })\r\n        await checkButton(buttonClass, textValue, htmlValue)\r\n    })\r\n\r\n    it('保存', () => {\r\n        let buttonClass = '.op-icon.fa.fa-mavon-trash-o'\r\n        expect(wrapper.find(buttonClass).exists()).toBe(true)\r\n    })\r\n})\r\n\r\ndescribe('xssOptions test', () => {\r\n    it('xssOptions is enabled by default', async () => {\r\n        let xssCode = `<a$ <img src=x onerror=prompt(/test_really/);>#\"> <a$\\n<img onerror=\"alert(1)\" src=\"a\">`;\r\n        let htmlValue = `<p>&lt;a$ <img src>#&quot;&gt; &lt;a$<br />\\n<img src></p>`\r\n        let wrapper = new factory({ d_words: null, value: '' });\r\n\r\n        const textInput = wrapper.find('textarea')\r\n        await textInput.setValue(xssCode)\r\n\r\n        expect(wrapper.find(textValueClass).text()).toEqual(xssCode);\r\n        expect(wrapper.find(htmlValueClass).text()).toEqual(htmlValue);\r\n    });\r\n\r\n    it('disable xssOptions', async () => {\r\n        let xssCode = `<a$ <img src=x onerror=prompt(/test_really/);>#\"> <a$\\n<img onerror=\"alert(1)\" src=\"a\">`;\r\n        let htmlValue = `<p>&lt;a$ <img src=x onerror=prompt(/test_really/);>#&quot;&gt; &lt;a$<br />\\n<img onerror=\\\"alert(1)\\\" src=\\\"a\\\"></p>`\r\n        let wrapper = new factory({ d_words: null, value: '', xssOptions: false });\r\n    \r\n        const textInput = wrapper.find('textarea')\r\n        await textInput.setValue(xssCode)\r\n\r\n        expect(wrapper.find(textValueClass).text()).toEqual(xssCode);\r\n        expect(wrapper.find(htmlValueClass).text()).toEqual(htmlValue);\r\n      });\r\n});\r\n\r\ndescribe('local images upload', () => {\r\n    it('upload images', async () => {\r\n      let textValue = `![gh.png](1)`;\r\n      let htmlValue = `<p><img src=\\\"1\\\" alt=\\\"gh.png\\\" /></p>`\r\n      let wrapper = new factory({ d_words: null, value: '' });\r\n  \r\n      const textInput = wrapper.find('textarea')\r\n      await textInput.setValue(textValue)\r\n\r\n      expect(wrapper.find(textValueClass).text()).toEqual(textValue);\r\n      expect(wrapper.find(htmlValueClass).text()).toEqual(htmlValue);\r\n    });\r\n});\r\n"
  },
  {
    "path": "tests/unit/mavon-editor.spec.js",
    "content": "import { mount } from '@vue/test-utils'\nimport MavonEditor from '@/mavon-editor.vue'\nimport autoTextarea from 'auto-textarea/auto-textarea.vue'\n\n/*eslint-disable */\nconst factory = (propsData) => {\n  return mount(MavonEditor, {\n    propsData: {\n      ...propsData\n    },\n    stubs: {\n      \"v-autoTextarea\": autoTextarea\n    }\n  })\n}\n\ndescribe('snapshot', () => {\n  it('snapshot', () => {\n    const wrapper = new factory()\n    expect(wrapper.html()).toMatchSnapshot()\n  })\n})\n\n"
  },
  {
    "path": "webpack/webpack.base.js",
    "content": "/**\n * @Author: HuaChao Chen <CHC>\n * @Date:   2017-05-07T20:11:11+08:00\n * @Email:  chenhuachaoxyz@gmail.com\n * @Filename: webpack.base.js\n * @Last modified by:   chc\n * @Last modified time: 2017-11-26T22:25:40+08:00\n * @License: MIT\n * @Copyright: 2017\n */\n\nvar path = require('path');\nvar ExtractTextPlugin = require('extract-text-webpack-plugin');\nvar WebpackMd5Hash = require('webpack-md5-hash');\n// 该插件是对“webpack-md5-hash”的改进：在主文件中获取到各异步模块的hash值，然后将这些hash值与主文件的代码内容一同作为计算hash的参数，这样就能保证主文件的hash值会跟随异步模块的修改而修改。\n// var WebpackSplitHash = require('webpack-split-hash');\n// 压缩css\nvar OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin');\nvar CopyWebpackPlugin = require('copy-webpack-plugin');\nvar fs = require(\"fs\");\n// var postcss = require('postcss-loader')\n\nconst extractCSS = new ExtractTextPlugin('css/[name].css');\nmodule.exports = {\n    module: {\n        rules: [\n            {\n                test: /\\.vue$/,\n                loader: 'vue-loader',\n                options: {\n                    esModule: false,\n                    postcss: [\n                        require('autoprefixer')({\n                            browsers: ['last 10 Chrome versions', 'last 5 Firefox versions', 'Safari >= 6', 'ie > 8']\n                        })\n                    ]\n                }\n            },\n            {\n                test: /\\.js$/,\n                loader: 'babel-loader',\n                // exclude: /.*node_modules((?!auto-textarea).)*$/\n                // exclude: /node_modules/\n                include: [\n                    path.resolve(__dirname, '../src'),\n                    fs.realpathSync('node_modules/auto-textarea')\n                ]\n            },\n            {\n                test: /\\.(png|jpg|gif)$/,\n                loader: 'file-loader',\n                options: { name: '[name].[ext]?[hash]' }\n            },\n            { test: /\\.(woff|ttf|eot|svg)/, loader: 'file-loader?name=font/[name].[ext]&publicPath=../' },\n            {\n                test: /\\.styl$/,\n                loader: 'style-loader!css-loader!stylus-loader'\n            },\n            {\n                // css代码分割打包\n                test: /\\.css$/,\n                // exclude: /node_modules/,\n                use: extractCSS.extract({\n                    fallback: 'style-loader',\n                    use: [\n                        {\n                            loader: 'css-loader'\n                        },\n                        {\n                            loader: 'postcss-loader',\n                            options: {\n                                plugins: function() {\n                                    return [\n                                        // 允许在子中定义要放在最顶层的样式\n                                        require('postcss-atroot')({}),\n                                        // 允许定义样式函数\n                                        require('postcss-mixins')({}),\n                                        // import插件\n                                        require('postcss-nested-import')({}),\n                                        // 类sass-import插件，但是没法嵌套导入\n                                        // require('postcss-partial-import')({}),\n                                        // 嵌套解析插件\n                                        require('postcss-nested')({}),\n                                        // 可以通过引用方式引用父/其他样式的属性值\n                                        require('postcss-nesting')({}),\n                                        // 允许自定义选择器别名\n                                        require('postcss-custom-selectors')({}),\n                                        // 可自定义属性块别名，后面可扩充\n                                        require('postcss-extend')({}),\n                                        // 允许类sass的变量定义，for和each语法\n                                        require('postcss-advanced-variables')({}),\n                                        // 支持颜色函数color\n                                        require('postcss-color-function')({}),\n                                        // 支持media的变量定义\n                                        require('postcss-custom-media')({}),\n                                        // 支持属性自定义\n                                        require('postcss-custom-properties')({}),\n                                        // 支持media的最大最小值定义 可以通过类似@media screen and (width >= 500px) and (width <= 1200px){}来书写\n                                        require('postcss-media-minmax')({}),\n                                        // 支持通过@引用本属性块的属性\n                                        require('postcss-property-lookup')({}),\n                                        // maches函数，p:matches(:first-child, .special)解析为p:first-child, p.special\n                                        require('postcss-selector-matches')({}),\n                                        // 支持not解析，p:not(:first-child, .special)解析为p:not(:first-child), p:not(.special)\n                                        require('postcss-selector-not')({})\n                                    ];\n                                }\n                            }\n                        }\n                    ]\n                })\n            },{\n                test: /\\.md$/,\n                loader: 'raw-loader'\n            },{\n                test: /\\.less$/,\n                loader: 'style-loader!css-loader!less-loader'\n            }\n        ]\n    },\n    performance: {\n        hints: false\n    },\n    plugins: [\n        // 分离css\n        extractCSS,\n        // 分离js可能引入的css的chunkhash计算\n        new WebpackMd5Hash(),\n        // 对css文件进行压缩\n        new OptimizeCssAssetsPlugin({\n            assetNameRegExp: /\\.css$/g,\n            cssProcessor: require('cssnano'),\n            cssProcessorOptions: { discardComments: { removeAll: true } },\n            canPrint: true\n        }),\n        new CopyWebpackPlugin([{\n            from: path.resolve(__dirname, '../resources/highlight.js-11.3.1'),\n            to: path.resolve(__dirname, '../dist/highlightjs')\n        }, {\n            from: path.resolve(__dirname, '../resources/markdown'),\n            to: path.resolve(__dirname, '../dist/markdown')\n        }, {\n            context: 'node_modules/katex/dist',\n            from: {\n                glob: `${path.resolve(__dirname, '../node_modules/katex/dist')}/**/*.+(min.js|min.css|ttf|woff|woff2)`\n            },\n            to: path.resolve(__dirname, '../dist/katex')\n        }])\n    ]\n}\n"
  },
  {
    "path": "webpack/webpack.build.js",
    "content": "/**\n * @Author: HuaChao Chen <CHC>\n * @Date:   2017-05-04T23:21:48+08:00\n * @Email:  chenhuachaoxyz@gmail.com\n * @Filename: webpack.dev.js\n * @Last modified by:   CHC\n * @Last modified time: 2017-06-18T23:32:44+08:00\n * @License: MIT\n * @Copyright: 2017\n */\nvar BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;\nvar base = require('./webpack.base.js')\nvar merge = require('merges-utils')\nvar path = require('path');\nvar webpack = require('webpack');\nvar config = {\n    entry: {\n        index: path.resolve(__dirname, '../src/index.js')\n    },\n    output: {\n        path: path.resolve(__dirname, '../dist'),\n        // publicPath: '/dist/',\n        filename: 'mavon-editor.js',\n        chunkFilename: 'js/[name].js',\n        library: 'MavonEditor',\n        libraryTarget: 'umd',\n        umdNamedDefine: true\n    },\n    resolve: {\n        alias: {\n            'muse-components': 'muse-ui/src'\n        },\n        extensions: ['.js', '.vue', '.less']\n    },\n    externals: {\n        vue: {\n            root: 'Vue',\n            commonjs: 'vue',\n            commonjs2: 'vue',\n            amd: 'vue'\n        }\n    },\n    plugins: [\n        new BundleAnalyzerPlugin({\n            // Can be `server`, `static` or `disabled`.\n            // In `server` mode analyzer will start HTTP server to show bundle report.\n            // In `static` mode single HTML file with bundle report will be generated.\n            // In `disabled` mode you can use this plugin to just generate Webpack Stats JSON file by setting `generateStatsFile` to `true`.\n            analyzerMode: 'server',\n            // Host that will be used in `server` mode to start HTTP server.\n            analyzerHost: '127.0.0.1',\n            // Port that will be used in `server` mode to start HTTP server.\n            analyzerPort: 8888,\n            // Path to bundle report file that will be generated in `static` mode.\n            // Relative to bundles output directory.\n            reportFilename: 'report.html',\n            // Module sizes to show in report by default.\n            // Should be one of `stat`, `parsed` or `gzip`.\n            // See \"Definitions\" section for more information.\n            defaultSizes: 'parsed',\n            // Automatically open report in default browser\n            openAnalyzer: true,\n            // If `true`, Webpack Stats JSON file will be generated in bundles output directory\n            generateStatsFile: false,\n            // Name of Webpack Stats JSON file that will be generated if `generateStatsFile` is `true`.\n            // Relative to bundles output directory.\n            statsFilename: 'stats.json',\n            // Options for `stats.toJson()` method.\n            // For example you can exclude sources of your modules from stats file with `source: false` option.\n            // See more options here: https://github.com/webpack/webpack/blob/webpack-1/lib/Stats.js#L21\n            statsOptions: null,\n            // Log level. Can be 'info', 'warn', 'error' or 'silent'.\n            logLevel: 'info'\n        })\n    ]\n}\n\nvar res = merge([base, config])\nres.plugins = res.plugins.concat([\n    new webpack.optimize.UglifyJsPlugin({\n        compress: {\n            warnings: false\n        },\n        comments: false\n    })\n])\nmodule.exports = res\n"
  },
  {
    "path": "webpack/webpack.dev.js",
    "content": "/**\n * @Author: HuaChao Chen <CHC>\n * @Date:   2017-05-04T23:21:48+08:00\n * @Email:  chenhuachaoxyz@gmail.com\n * @Filename: webpack.dev.js\n * @Last modified by:   chc\n * @Last modified time: 2017-06-09T20:26:37+08:00\n * @License: MIT\n * @Copyright: 2017\n */\n\nvar merge = require('merges-utils')\nvar base = require('./webpack.base.js')\nvar path = require('path');\nvar webpack = require('webpack');\nvar HtmlWebpackPlugin = require('html-webpack-plugin');\n\nvar config = {\n    entry: {\n        index: './src/dev/index.js',\n        vue: ['vue']\n    },\n    output: {\n        path: path.resolve(__dirname, '../dist'),\n        // publicPath: '/dist/',\n        filename: 'js/[name].[chunkhash:8].js',\n        chunkFilename: 'js/[name].[chunkhash:8].js'\n    },\n    resolve: {\n        alias: {\n            'vue$': 'vue/dist/vue.esm.js',\n            'muse-components': 'muse-ui/src'\n        },\n        extensions: ['.js', '.vue', '.less']\n    },\n    devServer: {\n        historyApiFallback: true,\n        disableHostCheck: true,\n        host: 'localhost',\n        port: '9090',        \n        stats: 'normal'\n    },\n    devtool: 'source-map'\n}\n\nvar res = merge([base, config]);\nres.plugins = [\n    new webpack.optimize.CommonsChunkPlugin({\n        names: ['vue', 'common'],\n        filename: 'js/[name].[chunkhash:8].js',\n        minChunks: Infinity\n    }),\n    new HtmlWebpackPlugin({\n        filename: 'index.html',\n        template: 'src/dev/index.html',\n        inject: true,\n        hash: false,\n        chunks: ['common', 'vue', 'index']\n    })\n].concat(res.plugins)\n\nmodule.exports = res\n"
  }
]