cherry-muse 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (226) hide show
  1. package/LICENSE +162 -0
  2. package/README.md +139 -0
  3. package/dist/addons/cherry-code-block-card-plugin.js +1 -0
  4. package/dist/addons/cherry-code-block-echarts-plugin.js +1 -0
  5. package/dist/addons/cherry-code-block-mermaid-plugin.js +1 -0
  6. package/dist/cherry-markdown.core.common.js +1 -0
  7. package/dist/cherry-markdown.core.js +1 -0
  8. package/dist/cherry-markdown.css +4089 -0
  9. package/dist/cherry-markdown.engine.core.common.js +1 -0
  10. package/dist/cherry-markdown.engine.core.esm.js +1 -0
  11. package/dist/cherry-markdown.engine.core.js +1 -0
  12. package/dist/cherry-markdown.esm.js +1 -0
  13. package/dist/cherry-markdown.js +70837 -0
  14. package/dist/cherry-markdown.js.map +1 -0
  15. package/dist/cherry-markdown.min.css +1 -0
  16. package/dist/cherry-markdown.min.js +1 -0
  17. package/dist/stats.html +4838 -0
  18. package/examples/scripts/pinyin/README.md +53 -0
  19. package/package.json +167 -0
  20. package/src/Cherry.config.js +411 -0
  21. package/src/Cherry.js +788 -0
  22. package/src/CherryStatic.js +70 -0
  23. package/src/Editor.js +746 -0
  24. package/src/Engine.js +334 -0
  25. package/src/Event.js +74 -0
  26. package/src/Factory.js +180 -0
  27. package/src/Logger.js +31 -0
  28. package/src/Previewer.js +1147 -0
  29. package/src/Sanitizer.js +4 -0
  30. package/src/Sanitizer.node.js +7 -0
  31. package/src/Stats.js +101 -0
  32. package/src/Theme.js +46 -0
  33. package/src/UrlCache.js +98 -0
  34. package/src/addons/cherry-code-block-card-plugin.js +213 -0
  35. package/src/addons/cherry-code-block-echarts-plugin.js +161 -0
  36. package/src/addons/cherry-code-block-mermaid-plugin.js +118 -0
  37. package/src/core/HookCenter.js +303 -0
  38. package/src/core/HooksConfig.js +106 -0
  39. package/src/core/ParagraphBase.js +314 -0
  40. package/src/core/SentenceBase.js +65 -0
  41. package/src/core/SyntaxBase.js +197 -0
  42. package/src/core/hooks/AutoLink.js +251 -0
  43. package/src/core/hooks/BackgroundColor.js +46 -0
  44. package/src/core/hooks/Badge.js +100 -0
  45. package/src/core/hooks/Blockquote.js +113 -0
  46. package/src/core/hooks/Br.js +85 -0
  47. package/src/core/hooks/CodeBlock.js +876 -0
  48. package/src/core/hooks/Color.js +78 -0
  49. package/src/core/hooks/CommentReference.js +96 -0
  50. package/src/core/hooks/Detail.js +138 -0
  51. package/src/core/hooks/Emoji.config.js +9388 -0
  52. package/src/core/hooks/Emoji.js +223 -0
  53. package/src/core/hooks/Emphasis.js +113 -0
  54. package/src/core/hooks/Footnote.js +125 -0
  55. package/src/core/hooks/FrontMatter.js +52 -0
  56. package/src/core/hooks/FrontMatterVars.js +82 -0
  57. package/src/core/hooks/Header.js +229 -0
  58. package/src/core/hooks/HighLight.js +37 -0
  59. package/src/core/hooks/Hr.js +52 -0
  60. package/src/core/hooks/HtmlBlock.js +159 -0
  61. package/src/core/hooks/Iframe.js +80 -0
  62. package/src/core/hooks/Image.js +276 -0
  63. package/src/core/hooks/InlineCode.js +45 -0
  64. package/src/core/hooks/InlineMath.js +142 -0
  65. package/src/core/hooks/Link.js +169 -0
  66. package/src/core/hooks/List.js +260 -0
  67. package/src/core/hooks/Mark.js +55 -0
  68. package/src/core/hooks/MathBlock.js +97 -0
  69. package/src/core/hooks/Panel.js +170 -0
  70. package/src/core/hooks/Paragraph.js +84 -0
  71. package/src/core/hooks/Ruby.js +34 -0
  72. package/src/core/hooks/Size.js +84 -0
  73. package/src/core/hooks/Strikethrough.js +54 -0
  74. package/src/core/hooks/Sub.js +47 -0
  75. package/src/core/hooks/SuggestList.js +317 -0
  76. package/src/core/hooks/Suggester.js +759 -0
  77. package/src/core/hooks/Sup.js +47 -0
  78. package/src/core/hooks/Table.js +315 -0
  79. package/src/core/hooks/Toc.js +290 -0
  80. package/src/core/hooks/Transfer.js +47 -0
  81. package/src/core/hooks/Underline.js +37 -0
  82. package/src/index.core.js +29 -0
  83. package/src/index.engine.core.js +62 -0
  84. package/src/index.engine.js +30 -0
  85. package/src/index.js +28 -0
  86. package/src/locales/index.js +21 -0
  87. package/src/locales/zh_CN.js +170 -0
  88. package/src/sass/cherry.scss +122 -0
  89. package/src/sass/components/bubble.scss +122 -0
  90. package/src/sass/components/codemirror.scss +628 -0
  91. package/src/sass/components/dropdown.scss +37 -0
  92. package/src/sass/components/editor.scss +78 -0
  93. package/src/sass/components/preview.scss +71 -0
  94. package/src/sass/components/prism.scss +142 -0
  95. package/src/sass/components/stats.scss +32 -0
  96. package/src/sass/components/toc.scss +184 -0
  97. package/src/sass/components/toolbar.scss +117 -0
  98. package/src/sass/core/AutoLink.scss +20 -0
  99. package/src/sass/core/BackgroundColor.scss +0 -0
  100. package/src/sass/core/Badge.scss +116 -0
  101. package/src/sass/core/Blockquote.scss +12 -0
  102. package/src/sass/core/Br.scss +0 -0
  103. package/src/sass/core/Card.scss +219 -0
  104. package/src/sass/core/CodeBlock.scss +205 -0
  105. package/src/sass/core/Color.scss +37 -0
  106. package/src/sass/core/CommentReference.scss +0 -0
  107. package/src/sass/core/Detail.scss +107 -0
  108. package/src/sass/core/Emoji.scss +127 -0
  109. package/src/sass/core/Emphasis.scss +9 -0
  110. package/src/sass/core/Footnote.scss +21 -0
  111. package/src/sass/core/FrontMatterVars.scss +19 -0
  112. package/src/sass/core/Header.scss +103 -0
  113. package/src/sass/core/HighLight.scss +0 -0
  114. package/src/sass/core/Hr.scss +10 -0
  115. package/src/sass/core/HtmlBlock.scss +0 -0
  116. package/src/sass/core/Iframe.scss +36 -0
  117. package/src/sass/core/Image.scss +59 -0
  118. package/src/sass/core/InlineCode.scss +10 -0
  119. package/src/sass/core/InlineMath.scss +11 -0
  120. package/src/sass/core/Link.scss +16 -0
  121. package/src/sass/core/List.scss +61 -0
  122. package/src/sass/core/Mark.scss +15 -0
  123. package/src/sass/core/MathBlock.scss +0 -0
  124. package/src/sass/core/Panel.scss +150 -0
  125. package/src/sass/core/Paragraph.scss +6 -0
  126. package/src/sass/core/Ruby.scss +0 -0
  127. package/src/sass/core/Size.scss +8 -0
  128. package/src/sass/core/Strikethrough.scss +0 -0
  129. package/src/sass/core/Sub.scss +5 -0
  130. package/src/sass/core/Suggester.scss +62 -0
  131. package/src/sass/core/Sup.scss +5 -0
  132. package/src/sass/core/Table.scss +127 -0
  133. package/src/sass/core/Toc.scss +28 -0
  134. package/src/sass/core/Transfer.scss +0 -0
  135. package/src/sass/core/Underline.scss +0 -0
  136. package/src/sass/google-fonts.scss +34 -0
  137. package/src/sass/index.scss +3 -0
  138. package/src/sass/prism/dark.scss +131 -0
  139. package/src/sass/prism/light.scss +143 -0
  140. package/src/sass/variables/colors.scss +96 -0
  141. package/src/toolbars/Bubble.js +232 -0
  142. package/src/toolbars/BubbleTable.js +147 -0
  143. package/src/toolbars/HookCenter.js +185 -0
  144. package/src/toolbars/MenuBase.js +357 -0
  145. package/src/toolbars/PreviewerBubble.js +558 -0
  146. package/src/toolbars/Toc.js +246 -0
  147. package/src/toolbars/Toolbar.js +401 -0
  148. package/src/toolbars/hooks/Audio.js +53 -0
  149. package/src/toolbars/hooks/Badge.js +80 -0
  150. package/src/toolbars/hooks/BarTable.js +41 -0
  151. package/src/toolbars/hooks/Bold.js +70 -0
  152. package/src/toolbars/hooks/Br.js +34 -0
  153. package/src/toolbars/hooks/Card.js +64 -0
  154. package/src/toolbars/hooks/CheckList.js +41 -0
  155. package/src/toolbars/hooks/Code.js +46 -0
  156. package/src/toolbars/hooks/Color.js +285 -0
  157. package/src/toolbars/hooks/Copy.js +139 -0
  158. package/src/toolbars/hooks/Detail.js +70 -0
  159. package/src/toolbars/hooks/ECharts.js +303 -0
  160. package/src/toolbars/hooks/Emoji.js +303 -0
  161. package/src/toolbars/hooks/Export.js +47 -0
  162. package/src/toolbars/hooks/File.js +54 -0
  163. package/src/toolbars/hooks/Formula.js +36 -0
  164. package/src/toolbars/hooks/FullScreen.js +55 -0
  165. package/src/toolbars/hooks/Graph.js +281 -0
  166. package/src/toolbars/hooks/H1.js +71 -0
  167. package/src/toolbars/hooks/H2.js +71 -0
  168. package/src/toolbars/hooks/H3.js +71 -0
  169. package/src/toolbars/hooks/Header.js +100 -0
  170. package/src/toolbars/hooks/Hr.js +35 -0
  171. package/src/toolbars/hooks/Iframe.js +35 -0
  172. package/src/toolbars/hooks/Image.js +60 -0
  173. package/src/toolbars/hooks/Insert.js +36 -0
  174. package/src/toolbars/hooks/Italic.js +70 -0
  175. package/src/toolbars/hooks/LineTable.js +41 -0
  176. package/src/toolbars/hooks/Link.js +46 -0
  177. package/src/toolbars/hooks/List.js +55 -0
  178. package/src/toolbars/hooks/Ol.js +41 -0
  179. package/src/toolbars/hooks/Panel.js +155 -0
  180. package/src/toolbars/hooks/Quote.js +45 -0
  181. package/src/toolbars/hooks/Redo.js +33 -0
  182. package/src/toolbars/hooks/Ruby.js +59 -0
  183. package/src/toolbars/hooks/Size.js +100 -0
  184. package/src/toolbars/hooks/Split.js +37 -0
  185. package/src/toolbars/hooks/Strikethrough.js +65 -0
  186. package/src/toolbars/hooks/Sub.js +58 -0
  187. package/src/toolbars/hooks/Sup.js +58 -0
  188. package/src/toolbars/hooks/SwitchModel.js +78 -0
  189. package/src/toolbars/hooks/Table.js +56 -0
  190. package/src/toolbars/hooks/Toc.js +35 -0
  191. package/src/toolbars/hooks/TogglePreview.js +79 -0
  192. package/src/toolbars/hooks/Ul.js +41 -0
  193. package/src/toolbars/hooks/Underline.js +65 -0
  194. package/src/toolbars/hooks/Undo.js +30 -0
  195. package/src/toolbars/hooks/Video.js +53 -0
  196. package/src/utils/LazyLoadImg.js +341 -0
  197. package/src/utils/autoindent.js +58 -0
  198. package/src/utils/codeBlockContentHandler.js +351 -0
  199. package/src/utils/config.js +98 -0
  200. package/src/utils/copy.js +55 -0
  201. package/src/utils/dialog.js +196 -0
  202. package/src/utils/dom.js +162 -0
  203. package/src/utils/downloadUtil.js +23 -0
  204. package/src/utils/env.js +22 -0
  205. package/src/utils/error.js +61 -0
  206. package/src/utils/event.js +38 -0
  207. package/src/utils/export.js +115 -0
  208. package/src/utils/file.js +121 -0
  209. package/src/utils/formulaUtilsHandler.js +230 -0
  210. package/src/utils/htmlparser.js +977 -0
  211. package/src/utils/image.js +99 -0
  212. package/src/utils/imgSizeHandler.js +279 -0
  213. package/src/utils/jsonUtils.js +17 -0
  214. package/src/utils/lineFeed.js +49 -0
  215. package/src/utils/listContentHandler.js +227 -0
  216. package/src/utils/lookbehind-replace.js +81 -0
  217. package/src/utils/mathjax.js +89 -0
  218. package/src/utils/myersDiff.js +211 -0
  219. package/src/utils/pasteHelper.js +253 -0
  220. package/src/utils/recount-pos.js +59 -0
  221. package/src/utils/regexp.js +295 -0
  222. package/src/utils/sanitize.js +477 -0
  223. package/src/utils/selection.js +50 -0
  224. package/src/utils/svgUtils.js +96 -0
  225. package/src/utils/tableContentHandler.js +592 -0
  226. package/tools/README.md +3 -0
@@ -0,0 +1,53 @@
1
+ https://github.com/liu11hao11/pinyin_js
2
+
3
+ # pinyin_js
4
+ 中文转拼音
5
+ ##安装
6
+ ```
7
+ npm install
8
+ ```
9
+
10
+
11
+ ##汉字转化成带音节的拼音
12
+ ```javascript
13
+ var pinyin=require("pinyin_js");
14
+ console.log(pinyin.pinyin("你好"," "));
15
+ //输出结果是nǐ hǎo
16
+ ```
17
+
18
+ ##汉字转化成不带音节的拼音
19
+ ```javascript
20
+ var pinyin=require("pinyin_js");
21
+ console.log(pinyin.pinyinWithOutYin("你好"," "));
22
+ //输出结果是ni hao
23
+ ```
24
+
25
+ ##判断是否是汉字
26
+ ```javascript
27
+ var pinyin=require("pinyin_js");
28
+ console.log(pinyin.isChineseWord("你好"));//true
29
+ console.log(pinyin.isChineseWord("!你好",false));//true
30
+ console.log(pinyin.isChineseWord("!你好",true));//第二个参数:true是严格模式,默认为严格模式
31
+ //false
32
+ ```
33
+
34
+ ##首字母排序
35
+
36
+ ```javascript
37
+ var pinyin=require("pinyin_js");
38
+ var users = [
39
+ { 'user': '张三丰', 'age': 40 },
40
+ { 'user': '123', 'age': 48 },
41
+ { 'user': '张三', 'age': 48 },
42
+ { 'user': '李四', 'age': 36 },
43
+ { 'user': '张三炮', 'age': 34 }
44
+ ];
45
+ var sortResult = pinyin.sort(users, "user");
46
+ console.log(sortResult)
47
+ /*[ { user: '123', age: 48 },
48
+ { user: '李四', age: 36 },
49
+ { user: '张三', age: 48 },
50
+ { user: '张三丰', age: 40 },
51
+ { user: '张三炮', age: 34 } ]*/
52
+
53
+ ```
package/package.json ADDED
@@ -0,0 +1,167 @@
1
+ {
2
+ "name": "cherry-muse",
3
+ "license": "Apache-2.0",
4
+ "version": "1.0.1",
5
+ "description": "Lightweight Cherry Markdown fork with 83% smaller bundle size (800KB vs 4.8MB)",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/AnkioTomas/cherry-muse.git"
9
+ },
10
+ "main": "./dist/cherry-markdown.min.js",
11
+ "module": "./dist/cherry-markdown.esm.js",
12
+ "style": "./dist/cherry-markdown.min.css",
13
+ "directories": {
14
+ "example": "examples"
15
+ },
16
+ "files": [
17
+ "dist",
18
+ "src",
19
+ "README.md",
20
+ "LICENSE"
21
+ ],
22
+ "sideEffects": [
23
+ "./dist/*.css"
24
+ ],
25
+ "scripts": {
26
+ "dev": "run-p watch:js watch:styles ",
27
+ "watch:js": "cross-env NODE_ENV=development rollup -w --config build/dev.js",
28
+ "watch:styles": "cross-env NODE_ENV=development rollup -w --config build/rollup.styles.config.js",
29
+ "dev:js": "cross-env NODE_ENV=development HOT_RELOAD=false rollup --config build/dev.js",
30
+ "dev:styles": "cross-env NODE_ENV=development rollup --config build/rollup.styles.config.js",
31
+ "build": "run-s clean build:debug build:all build:cjs",
32
+ "build:all": "run-p build:styles build:addons build:full build:core build:engine",
33
+ "build:cjs": "run-p build:core-cjs build:engine-cjs",
34
+ "build:debug": "run-p dev:js dev:styles",
35
+ "build:full": "cross-env NODE_ENV=production rollup --config build/build.js",
36
+ "build:core": "cross-env CORE_BUILD=true NODE_ENV=production rollup --config build/rollup.core.config.js",
37
+ "build:core-cjs": "cross-env BUILD_TARGET=commonjs CORE_BUILD=true NODE_ENV=production rollup --config build/rollup.core.config.js",
38
+ "build:engine": "cross-env CORE_BUILD=true NODE_ENV=production rollup --config build/rollup.engine.config.js",
39
+ "build:engine-cjs": "cross-env BUILD_TARGET=commonjs CORE_BUILD=true NODE_ENV=production rollup --config build/rollup.engine.config.js",
40
+ "build:addons": "node build/addons.build.js",
41
+ "build:styles": "cross-env NODE_ENV=production rollup --config build/rollup.styles.config.js",
42
+ "clean": "rimraf ./dist",
43
+ "check-bundle": "es-check es5 dist/cherry-markdown.js dist/cherry-markdown.min.js",
44
+ "test:commonmark": "jest test/core/CommonMark.spec.ts",
45
+ "test:snapshot": "jest test/core/hooks/*.spec.ts",
46
+ "lint": "eslint --plugin file-progress --rule \"file-progress/activate: 1\" --ext .js .",
47
+ "lint:fix": "yarn lint --fix",
48
+ "lint:ci": "eslint --max-warnings=0 --ext .js .",
49
+ "prepare": "husky install",
50
+ "publish": "git push --follow-tags origin main",
51
+ "examples": "serve -p 3000 ."
52
+ },
53
+ "keywords": [
54
+ "markdown",
55
+ "editor",
56
+ "wysiwyg",
57
+ "cherry",
58
+ "markdown-editor",
59
+ "lightweight"
60
+ ],
61
+ "author": "ankio <ankio@ankio.net>",
62
+ "homepage": "https://github.com/AnkioTomas/cherry-muse#readme",
63
+ "bugs": {
64
+ "url": "https://github.com/AnkioTomas/cherry-muse/issues"
65
+ },
66
+ "devDependencies": {
67
+ "@babel/core": "^7.7.2",
68
+ "@babel/eslint-parser": "^7.12.1",
69
+ "@babel/node": "^7.12.10",
70
+ "@babel/plugin-proposal-class-properties": "^7.8.3",
71
+ "@babel/plugin-proposal-decorators": "^7.14.5",
72
+ "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1",
73
+ "@babel/plugin-proposal-optional-chaining": "^7.12.7",
74
+ "@babel/plugin-transform-runtime": "^7.12.10",
75
+ "@babel/preset-env": "^7.7.1",
76
+ "@babel/register": "^7.12.1",
77
+ "@babel/runtime": "^7.12.5",
78
+ "@babel/runtime-corejs3": "^7.12.5",
79
+ "@rollup/plugin-alias": "^3.1.1",
80
+ "@rollup/plugin-babel": "^5.0.0",
81
+ "@rollup/plugin-commonjs": "^11.0.2",
82
+ "@rollup/plugin-eslint": "^8.0.1",
83
+ "@rollup/plugin-json": "^4.1.0",
84
+ "@rollup/plugin-node-resolve": "^15.1.0",
85
+ "@rollup/plugin-replace": "^2.3.1",
86
+ "@rollup/plugin-terser": "^0.4.3",
87
+ "@types/echarts": "4.9.15",
88
+ "@types/glob": "^7.2.0",
89
+ "@types/jest": "^27.0.3",
90
+ "@types/jsdom": "^16.2.13",
91
+ "@types/lodash": "^4.14.170",
92
+ "@types/mermaid": "^8.2.6",
93
+ "@types/node": "^17.0.42",
94
+ "@types/virtual-dom": "^2.1.0",
95
+ "@typescript-eslint/eslint-plugin": "^4.27.0",
96
+ "@typescript-eslint/parser": "^4.27.0",
97
+ "async": "^3.2.4",
98
+ "babel-jest": "27",
99
+ "babel-plugin-prismjs": "^2.1.0",
100
+ "cm-search-replace": "^1.0.0",
101
+ "codemirror": "5.58.2",
102
+ "commitizen": "^4.0.5",
103
+ "core-js-pure": "^3.8.2",
104
+ "cross-env": "^7.0.2",
105
+ "dom-parser": "^0.1.6",
106
+ "dompurify": "^2.0.11",
107
+ "es-check": "^7.1.1",
108
+ "eslint": "^7.32.0",
109
+ "eslint-config-prettier": "^8.1.0",
110
+ "eslint-config-tencent": "^1.0.2",
111
+ "eslint-plugin-file-progress": "^1.3.0",
112
+ "eslint-plugin-import": "^2.27.5",
113
+ "eslint-plugin-jest": "^25.3.0",
114
+ "eslint-plugin-prettier": "^4.0.0",
115
+ "glob": "^8.0.3",
116
+ "html2canvas": "^1.1.3",
117
+ "husky": "~7.0.4",
118
+ "jest": "^27.5.1",
119
+ "jest-diff": "^27.5.1",
120
+ "lint-staged": "~12.5.0",
121
+ "lodash": "^4.17.20",
122
+ "md5": "^2.2.1",
123
+ "mitt": "^3.0.0",
124
+ "npm-run-all": "^4.1.5",
125
+ "openai": "^3.3.0",
126
+ "postcss": "^8.2.15",
127
+ "prettier": "2.6.2",
128
+ "prismjs": "^1.24.1",
129
+ "replace-in-file": "^7.0.1",
130
+ "rimraf": "^3.0.2",
131
+ "rollup": "~2.79.1",
132
+ "rollup-plugin-livereload": "~2.0.5",
133
+ "rollup-plugin-postcss": "~3.1.8",
134
+ "rollup-plugin-scss": "^4.0.0",
135
+ "rollup-plugin-serve": "^2.0.2",
136
+ "rollup-plugin-serve-proxy": "^1.1.4",
137
+ "rollup-plugin-typescript2": "^0.32.1",
138
+ "rollup-plugin-visualizer": "^5.10.0",
139
+ "sass": "^1.52.3",
140
+ "serve": "^14.2.0",
141
+ "standard-version": "^9.3.2",
142
+ "virtual-dom": "^2.1.1"
143
+ },
144
+ "dependencies": {
145
+ "@types/codemirror": "^0.0.108",
146
+ "@types/dompurify": "^2.2.3",
147
+ "js-base64": "^3.7.7",
148
+ "js-yaml": "^4.1.0",
149
+ "jsdom": "~19.0.0"
150
+ },
151
+ "resolutions": {
152
+ "glob-parent": "5.1.2",
153
+ "set-value": "4.0.1",
154
+ "lodash.template": "4.5.0",
155
+ "yargs-parser": "20.2.9",
156
+ "xmldom": "0.5.0",
157
+ "ansi-regex": "5.0.1",
158
+ "glob-watcher": "6.0.0"
159
+ },
160
+ "config": {},
161
+ "lint-staged": {
162
+ "*.js": "eslint --fix"
163
+ },
164
+ "engines": {
165
+ "node": ">=14"
166
+ }
167
+ }
@@ -0,0 +1,411 @@
1
+ /**
2
+ * Copyright (C) 2021 THL A29 Limited, a Tencent company.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import cloneDeep from 'lodash/cloneDeep';
17
+
18
+ const callbacks = {
19
+ /**
20
+ * 全局的URL处理器
21
+ * @param {string} url 来源url
22
+ * @param {'image'|'audio'|'video'|'autolink'|'link'} srcType 来源类型
23
+ * @returns
24
+ */
25
+ urlProcessor: (url, srcType) => url,
26
+ fileUpload(file, callback) {
27
+ if (/video/i.test(file.type)) {
28
+ callback('images/demo-dog.png', {
29
+ name: `${file.name.replace(/\.[^.]+$/, '')}`,
30
+ poster: 'images/demo-dog.png?poster=true',
31
+ isBorder: true,
32
+ isShadow: true,
33
+ isRadius: true,
34
+ });
35
+ } else if (/image/i.test(file.type)) {
36
+ // 如果上传的是图片,则默认回显base64内容(因为没有图床)
37
+ // 创建 FileReader 对象
38
+ const reader = new FileReader();
39
+ // 读取文件内容
40
+ reader.onload = (event) => {
41
+ // 获取 base64 内容
42
+ const base64Content = event.target.result;
43
+ callback(base64Content, {
44
+ name: `${file.name.replace(/\.[^.]+$/, '')}`,
45
+ isShadow: true,
46
+ width: '60%',
47
+ height: 'auto',
48
+ });
49
+ };
50
+ reader.readAsDataURL(file);
51
+ } else {
52
+ callback('images/demo-dog.png');
53
+ }
54
+ },
55
+ afterChange: (text, html) => {},
56
+ afterInit: (text, html) => {},
57
+ beforeImageMounted: (srcProp, src) => ({ srcProp, src }),
58
+ onClickPreview: (event) => {},
59
+ /**
60
+ * 粘贴时触发
61
+ * @param {ClipboardEvent['clipboardData']} clipboardData
62
+ * @returns
63
+ * false: 走cherry粘贴的默认逻辑
64
+ * string: 直接粘贴的内容
65
+ */
66
+ onPaste: (clipboardData) => {
67
+ return false;
68
+ },
69
+ onCopyCode: (event, code) => {
70
+ // 阻止默认的粘贴事件
71
+ // return false;
72
+ // 对复制内容进行额外处理
73
+ return code;
74
+ },
75
+ // 获取中文的拼音
76
+ changeString2Pinyin: (string) => {
77
+ /**
78
+ * 推荐使用这个组件:https://github.com/liu11hao11/pinyin_js
79
+ *
80
+ * 可以在 ../scripts/pinyin/pinyin_dist.js 里直接引用
81
+ */
82
+ return string;
83
+ },
84
+ };
85
+
86
+ const defaultConfig = {
87
+ theme: 'default',
88
+ // 第三方包
89
+ externals: {
90
+ // externals
91
+ },
92
+ // 解析引擎配置
93
+ engine: {
94
+ // 全局配置
95
+ global: {
96
+ // 是否启用经典换行逻辑
97
+ // true:一个换行会被忽略,两个以上连续换行会分割成段落,
98
+ // false: 一个换行会转成<br>,两个连续换行会分割成段落,三个以上连续换行会转成<br>并分割段落
99
+ classicBr: false,
100
+ /**
101
+ * 全局的URL处理器
102
+ * @param {string} url 来源url
103
+ * @param {'image'|'audio'|'video'|'autolink'|'link'} srcType 来源类型
104
+ * @returns
105
+ */
106
+ urlProcessor: callbacks.urlProcessor,
107
+ /**
108
+ * 额外允许渲染的html标签
109
+ * 标签以英文竖线分隔,如:htmlWhiteList: 'iframe|script|style'
110
+ * 默认为空,默认允许渲染的html见src/utils/sanitize.js whiteList 属性
111
+ * 需要注意:
112
+ * - 启用iframe、script等标签后,会产生xss注入,请根据实际场景判断是否需要启用
113
+ * - 一般编辑权限可控的场景(如api文档系统)可以允许iframe、script等标签
114
+ */
115
+ htmlWhiteList: 'iframe',
116
+ /**
117
+ * 适配流式会话的场景,开启后将具备以下特性:
118
+ * 1. 代码块自动闭合,相当于强制 `engine.syntax.codeBlock.selfClosing=true`
119
+ * 2. 文章末尾的段横线标题语法(`\n-`)失效
120
+ *
121
+ * 后续如果有新的需求,可提issue反馈
122
+ */
123
+ flowSessionContext: true,
124
+ },
125
+ // 内置语法配置
126
+ syntax: {
127
+ // 语法开关
128
+ // 'hookName': false,
129
+ // 语法配置
130
+ // 'hookName': {
131
+ //
132
+ // }
133
+ link: {
134
+ /** 生成的<a>标签追加target属性的默认值 空:在<a>标签里不会追加target属性, _blank:在<a>标签里追加target="_blank"属性 */
135
+ target: '',
136
+ /** 生成的<a>标签追加rel属性的默认值 空:在<a>标签里不会追加rel属性, nofollow:在<a>标签里追加rel="nofollow:在"属性*/
137
+ rel: '',
138
+ },
139
+ autoLink: {
140
+ /** 生成的<a>标签追加target属性的默认值 空:在<a>标签里不会追加target属性, _blank:在<a>标签里追加target="_blank"属性 */
141
+ target: '',
142
+ /** 生成的<a>标签追加rel属性的默认值 空:在<a>标签里不会追加rel属性, nofollow:在<a>标签里追加rel="nofollow:在"属性*/
143
+ rel: '',
144
+ /** 是否开启短链接 */
145
+ enableShortLink: true,
146
+ /** 短链接长度 */
147
+ shortLinkLength: 20,
148
+ },
149
+ list: {
150
+ listNested: false, // 同级列表类型转换后变为子级
151
+ indentSpace: 2, // 默认2个空格缩进
152
+ },
153
+ table: {
154
+ enableChart: true,
155
+ selfClosing: true, // 自动闭合,为true时,当输入第一行table内容时,cherry会自动按表格进行解析
156
+ },
157
+ codeBlock: {
158
+ wrap: true, // 超出长度是否换行,false则显示滚动条
159
+ lineNumber: true, // 默认显示行号
160
+ copyCode: true, // 是否显示“复制”按钮
161
+ editCode: true, // 是否显示“编辑”按钮
162
+ expandCode: true, // 是否显示“展开”按钮
163
+ selfClosing: true, // 自动闭合,为true时,当输入```代码块语法时,会自动在末尾追加```
164
+ cdn: 'https://unpkg.com/prismjs@1.29.0/components/', // 代码块的cdn地址
165
+ customRenderer: {
166
+ // 自定义语法渲染器
167
+ },
168
+ /**
169
+ * indentedCodeBlock是缩进代码块是否启用的开关
170
+ *
171
+ * 在6.X之前的版本中默认不支持该语法。
172
+ * 因为cherry的开发团队认为该语法太丑了(容易误触)
173
+ * 开发团队希望用```代码块语法来彻底取代该语法
174
+ * 但在后续的沟通中,开发团队发现在某些场景下该语法有更好的显示效果
175
+ * 因此开发团队在6.X版本中才引入了该语法
176
+ * 已经引用6.x以下版本的业务如果想做到用户无感知升级,可以去掉该语法:
177
+ * indentedCodeBlock:false
178
+ */
179
+ indentedCodeBlock: true,
180
+ highlighter: null,
181
+ },
182
+ emoji: {
183
+ useUnicode: true, // 是否使用unicode进行渲染
184
+ },
185
+ fontEmphasis: {
186
+ /**
187
+ * 是否允许首尾空格
188
+ * 首尾、前后的定义: 语法前**语法首+内容+语法尾**语法后
189
+ * 例:
190
+ * true:
191
+ * __ hello __ ====> <strong> hello </strong>
192
+ * __hello__ ====> <strong>hello</strong>
193
+ * false:
194
+ * __ hello __ ====> <em>_ hello _</em>
195
+ * __hello__ ====> <strong>hello</strong>
196
+ */
197
+ allowWhitespace: false,
198
+ selfClosing: true, // 自动闭合,为true时,当输入**XXX时,会自动在末尾追加**
199
+ },
200
+ strikethrough: {
201
+ /**
202
+ * 是否必须有前后空格
203
+ * 首尾、前后的定义: 语法前**语法首+内容+语法尾**语法后
204
+ * 例:
205
+ * true:
206
+ * hello wor~~l~~d ====> hello wor~~l~~d
207
+ * hello wor ~~l~~ d ====> hello wor <del>l</del> d
208
+ * false:
209
+ * hello wor~~l~~d ====> hello wor<del>l</del>d
210
+ * hello wor ~~l~~ d ====> hello wor <del>l</del> d
211
+ */
212
+ needWhitespace: false,
213
+ },
214
+ mathBlock: {
215
+ engine: 'MathJax', // katex或MathJax
216
+ src: '',
217
+ plugins: true, // 默认加载插件
218
+ },
219
+ inlineMath: {
220
+ engine: 'MathJax', // katex或MathJax
221
+ src: '',
222
+ },
223
+ toc: {
224
+ /** 默认只渲染一个目录 */
225
+ allowMultiToc: false,
226
+ /** 是否显示自增序号 */
227
+ showAutoNumber: false,
228
+ },
229
+ header: {
230
+ /**
231
+ * 标题的样式:
232
+ * - default 默认样式,标题前面有锚点
233
+ * - autonumber 标题前面有自增序号锚点
234
+ * - none 标题没有锚点
235
+ */
236
+ anchorStyle: 'default',
237
+ },
238
+ },
239
+ },
240
+ editor: {
241
+ id: 'code', // textarea 的id属性值
242
+ name: 'code', // textarea 的name属性值
243
+ autoSave2Textarea: false, // 是否自动将编辑区的内容回写到textarea里
244
+ theme: 'default', // depend on codemirror theme name: https://codemirror.net/demo/theme.htm
245
+ // 编辑器的高度,默认100%,如果挂载点存在内联设置的height则以内联样式为主
246
+ height: '100%',
247
+ showStats: true,
248
+ // defaultModel 编辑器初始化后的默认模式,一共有三种模式:1、双栏编辑预览模式;2、纯编辑模式;3、预览模式
249
+ // edit&preview: 双栏编辑预览模式
250
+ // editOnly: 纯编辑模式(没有预览,可通过toolbar切换成双栏或预览模式)
251
+ // previewOnly: 预览模式(没有编辑框,toolbar只显示“返回编辑”按钮,可通过toolbar切换成编辑模式)
252
+ defaultModel: 'edit&preview',
253
+ // 粘贴时是否自动将html转成markdown
254
+ convertWhenPaste: true,
255
+ codemirror: {
256
+ // 是否自动focus 默认为true
257
+ autofocus: true,
258
+ lineNumbers: false,
259
+ cursorHeight: 1,
260
+ },
261
+ overlay: [],
262
+ writingStyle: 'normal', // 书写风格,normal 普通 | typewriter 打字机 | focus 专注,默认normal
263
+ keepDocumentScrollAfterInit: false, // 在初始化后是否保持网页的滚动,true:保持滚动;false:网页自动滚动到cherry初始化的位置
264
+ showFullWidthMark: true, // 是否高亮全角符号 ·|¥|、|:|“|”|【|】|(|)|《|》
265
+ showSuggestList: true, // 是否显示联想框
266
+ },
267
+ toolbars: {
268
+ theme: 'dark', // light or dark
269
+ showToolbar: true, // false:不展示顶部工具栏; true:展示工具栏; toolbars.showToolbar=false 与 toolbars.toolbar=false 等效
270
+ toc: true,
271
+ toolbar: [
272
+ 'togglePreview',
273
+ 'switchModel',
274
+ {
275
+ strikethrough: ['strikethrough', 'underline', 'sub', 'sup', 'ruby', 'bold', 'italic', 'quote'],
276
+ },
277
+
278
+ 'size',
279
+ '|',
280
+ 'color',
281
+ 'emoji',
282
+ 'header',
283
+ '|',
284
+ 'badge',
285
+ 'panel',
286
+ {
287
+ insert: [
288
+ 'ol',
289
+ 'ul',
290
+ 'checklist',
291
+ 'image',
292
+ 'audio',
293
+ 'video',
294
+ 'file',
295
+ 'link',
296
+ 'hr',
297
+ 'br',
298
+ 'code',
299
+ 'formula',
300
+ 'toc',
301
+ 'table',
302
+ 'detail',
303
+ 'lineTable',
304
+ 'barTable',
305
+ 'iframe',
306
+ ],
307
+ },
308
+ 'graph',
309
+ 'echarts',
310
+ 'card',
311
+
312
+ 'redo',
313
+ 'undo',
314
+ ],
315
+ toolbarRight: ['fullScreen', '|', 'export'],
316
+ bubble: ['bold', 'italic', 'header', 'underline', 'strikethrough', 'sub', 'sup', 'quote', '|', 'size', 'color'], // array or false
317
+ // 快捷键配置,如果配置为空,则使用toolbar的配置
318
+ shortcutKey: {
319
+ // 'Alt-1': 'header',
320
+ // 'Alt-2': 'header',
321
+ // 'Ctrl-b': 'bold',
322
+ // 'Ctrl-Alt-m': 'formula',
323
+ },
324
+ // 一些按钮的配置信息
325
+ config: {},
326
+ },
327
+ fileUpload: callbacks.fileUpload,
328
+ /**
329
+ * 上传文件的时候用来指定文件类型
330
+ */
331
+ fileTypeLimitMap: {
332
+ video: 'video/*',
333
+ audio: 'audio/*',
334
+ image: 'image/*',
335
+ file: '*',
336
+ },
337
+ callback: {
338
+ // 上传文件的回调
339
+ afterChange: callbacks.afterChange,
340
+ afterInit: callbacks.afterInit,
341
+ beforeImageMounted: callbacks.beforeImageMounted,
342
+ // 预览区域点击事件,previewer.enablePreviewerBubble = true 时生效
343
+ onClickPreview: callbacks.onClickPreview,
344
+ // 复制代码块代码时的回调
345
+ onCopyCode: callbacks.onCopyCode,
346
+ // 把中文变成拼音的回调,当然也可以把中文变成英文、英文变成中文
347
+ changeString2Pinyin: callbacks.changeString2Pinyin,
348
+ /**
349
+ * 粘贴时触发
350
+ * @param {ClipboardEvent['clipboardData']} clipboardData
351
+ * @returns
352
+ * false: 走cherry粘贴的默认逻辑
353
+ * string: 直接粘贴的内容
354
+ */
355
+ onPaste: callbacks.onPaste,
356
+ },
357
+ previewer: {
358
+ dom: false,
359
+ className: 'cherry-markdown',
360
+ // 是否启用预览区域编辑能力(目前支持编辑图片尺寸、编辑表格内容)
361
+ enablePreviewerBubble: true,
362
+ /**
363
+ * 配置图片懒加载的逻辑
364
+ * - 如果不希望图片懒加载,可配置成 lazyLoadImg = {noLoadImgNum: -1}
365
+ * - 如果希望所有图片都无脑懒加载,可配置成 lazyLoadImg = {noLoadImgNum: 0, autoLoadImgNum: -1}
366
+ * - 如果一共有15张图片,希望:
367
+ * 1、前5张图片(1~5)直接加载;
368
+ * 2、后5张图片(6~10)不论在不在视区内,都无脑懒加载;
369
+ * 3、其他图片(11~15)在视区内时,进行懒加载;
370
+ * 则配置应该为:lazyLoadImg = {noLoadImgNum: 5, autoLoadImgNum: 5}
371
+ */
372
+ lazyLoadImg: {
373
+ // 加载图片时如果需要展示loading图,则配置loading图的地址
374
+ loadingImgPath: '',
375
+ // 同一时间最多有几个图片请求,最大同时加载6张图片
376
+ maxNumPerTime: 2,
377
+ // 不进行懒加载处理的图片数量,如果为0,即所有图片都进行懒加载处理, 如果设置为-1,则所有图片都不进行懒加载处理
378
+ noLoadImgNum: 5,
379
+ // 首次自动加载几张图片(不论图片是否滚动到视野内),autoLoadImgNum = -1 表示会自动加载完所有图片
380
+ autoLoadImgNum: 5,
381
+ // 针对加载失败的图片 或 beforeLoadOneImgCallback 返回false 的图片,最多尝试加载几次,为了防止死循环,最多5次。以图片的src为纬度统计重试次数
382
+ maxTryTimesPerSrc: 2,
383
+ // 加载一张图片之前的回调函数,函数return false 会终止加载操作
384
+ beforeLoadOneImgCallback: (img) => {
385
+ return true;
386
+ },
387
+ // 加载一张图片失败之后的回调函数
388
+ failLoadOneImgCallback: (img) => {},
389
+ // 加载一张图片之后的回调函数,如果图片加载失败,则不会回调该函数
390
+ afterLoadOneImgCallback: (img) => {},
391
+ // 加载完所有图片后调用的回调函数
392
+ afterLoadAllImgCallback: () => {},
393
+ },
394
+ },
395
+
396
+ // 预览页面不需要绑定事件
397
+ isPreviewOnly: false,
398
+ // 预览区域跟随编辑器光标自动滚动
399
+ autoScrollByCursor: true,
400
+ // 外层容器不存在时,是否强制输出到body上
401
+ forceAppend: true,
402
+ // The locale Cherry is going to use. Locales live in /src/locales/
403
+ locale: 'zh_CN',
404
+ // cherry初始化后是否检查 location.hash 尝试滚动到对应位置
405
+ autoScrollByHashAfterInit: true,
406
+ stats: true,
407
+ };
408
+ if (window.outerWidth <= 600) {
409
+ defaultConfig.toolbars.toolbar = ['switchModel'];
410
+ }
411
+ export default cloneDeep(defaultConfig);