@cherry-markdown/cherry-markdown-dev 0.9.0-dev.202504110650.834443a → 0.9.0-dev.202504160300.d23d141

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 (327) hide show
  1. package/README.md +2 -2
  2. package/dist/addons/advance/cherry-table-echarts-plugin.js +1 -1
  3. package/dist/addons/cherry-code-block-mermaid-plugin.js +1 -1
  4. package/dist/cherry-markdown.core.common.js +1 -1
  5. package/dist/cherry-markdown.core.js +1 -1
  6. package/dist/cherry-markdown.engine.core.common.js +1 -1
  7. package/dist/cherry-markdown.engine.core.esm.js +1 -1
  8. package/dist/cherry-markdown.engine.core.js +1 -1
  9. package/dist/cherry-markdown.esm.js +1 -1
  10. package/dist/cherry-markdown.js +1 -1
  11. package/dist/cherry-markdown.min.js +1 -1
  12. package/dist/fonts/ch-icon.eot +0 -0
  13. package/dist/fonts/ch-icon.ttf +0 -0
  14. package/dist/fonts/ch-icon.woff +0 -0
  15. package/dist/fonts/ch-icon.woff2 +0 -0
  16. package/package.json +1 -3
  17. package/src/Cherry.config.js +0 -634
  18. package/src/Cherry.js +0 -1104
  19. package/src/CherryStatic.js +0 -70
  20. package/src/Editor.js +0 -748
  21. package/src/Engine.js +0 -402
  22. package/src/Event.js +0 -140
  23. package/src/Factory.js +0 -180
  24. package/src/Logger.js +0 -31
  25. package/src/Previewer.js +0 -1192
  26. package/src/Sanitizer.js +0 -4
  27. package/src/Sanitizer.node.js +0 -7
  28. package/src/UrlCache.js +0 -98
  29. package/src/addons/advance/cherry-table-echarts-plugin.js +0 -170
  30. package/src/addons/cherry-code-block-mermaid-plugin.js +0 -158
  31. package/src/addons/cherry-code-block-plantuml-plugin.js +0 -106
  32. package/src/core/HookCenter.js +0 -297
  33. package/src/core/HooksConfig.js +0 -105
  34. package/src/core/ParagraphBase.js +0 -332
  35. package/src/core/SentenceBase.js +0 -65
  36. package/src/core/SyntaxBase.js +0 -194
  37. package/src/core/hooks/AutoLink.js +0 -232
  38. package/src/core/hooks/BackgroundColor.js +0 -46
  39. package/src/core/hooks/Blockquote.js +0 -70
  40. package/src/core/hooks/Br.js +0 -85
  41. package/src/core/hooks/CodeBlock.js +0 -456
  42. package/src/core/hooks/Color.js +0 -46
  43. package/src/core/hooks/CommentReference.js +0 -96
  44. package/src/core/hooks/Detail.js +0 -108
  45. package/src/core/hooks/Emoji.config.js +0 -1825
  46. package/src/core/hooks/Emoji.js +0 -119
  47. package/src/core/hooks/Emphasis.js +0 -113
  48. package/src/core/hooks/Footnote.js +0 -125
  49. package/src/core/hooks/FrontMatter.js +0 -51
  50. package/src/core/hooks/Header.js +0 -234
  51. package/src/core/hooks/HighLight.js +0 -37
  52. package/src/core/hooks/Hr.js +0 -52
  53. package/src/core/hooks/HtmlBlock.js +0 -199
  54. package/src/core/hooks/Image.js +0 -174
  55. package/src/core/hooks/InlineCode.js +0 -48
  56. package/src/core/hooks/InlineMath.js +0 -108
  57. package/src/core/hooks/Link.js +0 -160
  58. package/src/core/hooks/List.js +0 -264
  59. package/src/core/hooks/MathBlock.js +0 -104
  60. package/src/core/hooks/Panel.js +0 -145
  61. package/src/core/hooks/Paragraph.js +0 -84
  62. package/src/core/hooks/Ruby.js +0 -34
  63. package/src/core/hooks/Size.js +0 -51
  64. package/src/core/hooks/Strikethrough.js +0 -54
  65. package/src/core/hooks/Sub.js +0 -47
  66. package/src/core/hooks/SuggestList.js +0 -333
  67. package/src/core/hooks/Suggester.js +0 -707
  68. package/src/core/hooks/Sup.js +0 -47
  69. package/src/core/hooks/Table.js +0 -275
  70. package/src/core/hooks/Toc.js +0 -292
  71. package/src/core/hooks/Transfer.js +0 -47
  72. package/src/core/hooks/Underline.js +0 -37
  73. package/src/index.core.js +0 -29
  74. package/src/index.engine.core.js +0 -68
  75. package/src/index.engine.js +0 -28
  76. package/src/index.js +0 -32
  77. package/src/libs/mermaidAPI.8.4.8.js +0 -1
  78. package/src/libs/mermaidAPI.8.5.2.js +0 -42
  79. package/src/libs/rawdeflate.js +0 -1663
  80. package/src/locales/en_US.js +0 -139
  81. package/src/locales/index.js +0 -25
  82. package/src/locales/ru_RU.js +0 -139
  83. package/src/locales/zh_CN.js +0 -142
  84. package/src/sass/base.scss +0 -26
  85. package/src/sass/bubble_formula.scss +0 -166
  86. package/src/sass/ch-icon.scss +0 -118
  87. package/src/sass/cherry.scss +0 -1116
  88. package/src/sass/components/bubble.scss +0 -173
  89. package/src/sass/components/shortcut_key_config.scss +0 -108
  90. package/src/sass/formula_utils_bubble.scss +0 -82
  91. package/src/sass/icon_template.scss +0 -24
  92. package/src/sass/icons/uEA03-list.svg +0 -19
  93. package/src/sass/icons/uEA04-check.svg +0 -14
  94. package/src/sass/icons/uEA09-square.svg +0 -10
  95. package/src/sass/icons/uEA0A-bold.svg +0 -20
  96. package/src/sass/icons/uEA0B-code.svg +0 -18
  97. package/src/sass/icons/uEA0C-color.svg +0 -13
  98. package/src/sass/icons/uEA0D-header.svg +0 -8
  99. package/src/sass/icons/uEA0E-image.svg +0 -15
  100. package/src/sass/icons/uEA0F-italic.svg +0 -8
  101. package/src/sass/icons/uEA10-link.svg +0 -16
  102. package/src/sass/icons/uEA11-ol.svg +0 -21
  103. package/src/sass/icons/uEA12-size.svg +0 -11
  104. package/src/sass/icons/uEA13-strike.svg +0 -16
  105. package/src/sass/icons/uEA14-table.svg +0 -12
  106. package/src/sass/icons/uEA15-ul.svg +0 -17
  107. package/src/sass/icons/uEA16-underline.svg +0 -13
  108. package/src/sass/icons/uEA17-word.svg +0 -16
  109. package/src/sass/icons/uEA18-blockquote.svg +0 -11
  110. package/src/sass/icons/uEA19-font.svg +0 -10
  111. package/src/sass/icons/uEA1F-insertClass.svg +0 -39
  112. package/src/sass/icons/uEA20-insertFlow.svg +0 -8
  113. package/src/sass/icons/uEA21-insertFormula.svg +0 -23
  114. package/src/sass/icons/uEA22-insertGantt.svg +0 -13
  115. package/src/sass/icons/uEA23-insertGraph.svg +0 -13
  116. package/src/sass/icons/uEA24-insertPie.svg +0 -19
  117. package/src/sass/icons/uEA25-insertSeq.svg +0 -20
  118. package/src/sass/icons/uEA26-insertState.svg +0 -35
  119. package/src/sass/icons/uEA27-line.svg +0 -11
  120. package/src/sass/icons/uEA28-preview.svg +0 -18
  121. package/src/sass/icons/uEA29-previewClose.svg +0 -24
  122. package/src/sass/icons/uEA2A-toc.svg +0 -24
  123. package/src/sass/icons/uEA2D-sub.svg +0 -15
  124. package/src/sass/icons/uEA2E-sup.svg +0 -15
  125. package/src/sass/icons/uEA2F-h1.svg +0 -16
  126. package/src/sass/icons/uEA30-h2.svg +0 -20
  127. package/src/sass/icons/uEA31-h3.svg +0 -23
  128. package/src/sass/icons/uEA32-h4.svg +0 -16
  129. package/src/sass/icons/uEA33-h5.svg +0 -20
  130. package/src/sass/icons/uEA34-h6.svg +0 -17
  131. package/src/sass/icons/uEA35-video.svg +0 -20
  132. package/src/sass/icons/uEA36-insert.svg +0 -25
  133. package/src/sass/icons/uEA37-little_table.svg +0 -30
  134. package/src/sass/icons/uEA38-pdf.svg +0 -27
  135. package/src/sass/icons/uEA39-checklist.svg +0 -22
  136. package/src/sass/icons/uEA40-close.svg +0 -12
  137. package/src/sass/icons/uEA41-fullscreen.svg +0 -81
  138. package/src/sass/icons/uEA42-minscreen.svg +0 -77
  139. package/src/sass/icons/uEA43-insertChart.svg +0 -23
  140. package/src/sass/icons/uEA44-question.svg +0 -25
  141. package/src/sass/icons/uEA45-settings.svg +0 -32
  142. package/src/sass/icons/uEA46-ok.svg +0 -7
  143. package/src/sass/icons/uEA47-br.svg +0 -22
  144. package/src/sass/icons/uEA48-normal.svg +0 -15
  145. package/src/sass/icons/uEA49-undo.svg +0 -19
  146. package/src/sass/icons/uEA50-redo.svg +0 -21
  147. package/src/sass/icons/uEA51-copy.svg +0 -6
  148. package/src/sass/icons/uEA52-phone.svg +0 -5
  149. package/src/sass/icons/uEA53-cherry-table-delete.svg +0 -17
  150. package/src/sass/icons/uEA54-cherry-table-insert-bottom.svg +0 -16
  151. package/src/sass/icons/uEA55-cherry-table-insert-left.svg +0 -15
  152. package/src/sass/icons/uEA56-cherry-table-insert-right.svg +0 -16
  153. package/src/sass/icons/uEA57-cherry-table-insert-top.svg +0 -16
  154. package/src/sass/icons/uEA58-sort-s.svg +0 -13
  155. package/src/sass/icons/uEA59-pinyin.svg +0 -1
  156. package/src/sass/icons/uEA5A-create.svg +0 -24
  157. package/src/sass/icons/uEA5B-download.svg +0 -34
  158. package/src/sass/icons/uEA5C-edit.svg +0 -3
  159. package/src/sass/icons/uEA5D-export.svg +0 -53
  160. package/src/sass/icons/uEA5E-folder-open.svg +0 -3
  161. package/src/sass/icons/uEA5F-folder.svg +0 -3
  162. package/src/sass/icons/uEA60-help.svg +0 -5
  163. package/src/sass/icons/uEA61-pen-fill.svg +0 -13
  164. package/src/sass/icons/uEA62-pen.svg +0 -3
  165. package/src/sass/icons/uEA64-tips.svg +0 -5
  166. package/src/sass/icons/uEA65-warn.svg +0 -5
  167. package/src/sass/icons/uEA66-mistake.svg +0 -4
  168. package/src/sass/icons/uEA67-success.svg +0 -4
  169. package/src/sass/icons/uEA68-danger.svg +0 -4
  170. package/src/sass/icons/uEA69-info.svg +0 -5
  171. package/src/sass/icons/uEA6A-primary.svg +0 -5
  172. package/src/sass/icons/uEA6B-warning.svg +0 -5
  173. package/src/sass/icons/uEA6C-justify.svg +0 -19
  174. package/src/sass/icons/uEA6D-justifyCenter.svg +0 -19
  175. package/src/sass/icons/uEA6E-justifyLeft.svg +0 -19
  176. package/src/sass/icons/uEA6F-justifyRight.svg +0 -19
  177. package/src/sass/icons/uEA70-chevronsLeft.svg +0 -1
  178. package/src/sass/icons/uEA71-chevronsRight.svg +0 -1
  179. package/src/sass/icons/uEA72-trendingUp.svg +0 -1
  180. package/src/sass/icons/uEA74-codeBlock.svg +0 -1
  181. package/src/sass/icons/uEA75-expand.svg +0 -3
  182. package/src/sass/icons/uEA76-unExpand.svg +0 -3
  183. package/src/sass/icons/uEA77-swap-vert.svg +0 -1
  184. package/src/sass/icons/uEA78-swap.svg +0 -1
  185. package/src/sass/icons/uEA79-keyboard.svg +0 -1
  186. package/src/sass/icons/uEA7A-command.svg +0 -1
  187. package/src/sass/icons/uEA7B-search.svg +0 -1
  188. package/src/sass/index.scss +0 -3
  189. package/src/sass/markdown.scss +0 -668
  190. package/src/sass/markdown_pure.scss +0 -9
  191. package/src/sass/prettyprint/prettyprint.scss +0 -118
  192. package/src/sass/previewer.scss +0 -179
  193. package/src/sass/print.scss +0 -13
  194. package/src/sass/prism/coy.scss +0 -220
  195. package/src/sass/prism/dark.scss +0 -132
  196. package/src/sass/prism/default.scss +0 -143
  197. package/src/sass/prism/funky.scss +0 -133
  198. package/src/sass/prism/okaidia.scss +0 -126
  199. package/src/sass/prism/one-dark.scss +0 -440
  200. package/src/sass/prism/one-light.scss +0 -428
  201. package/src/sass/prism/solarized-light.scss +0 -153
  202. package/src/sass/prism/tomorrow-night.scss +0 -125
  203. package/src/sass/prism/twilight.scss +0 -202
  204. package/src/sass/prism/vs-dark.scss +0 -275
  205. package/src/sass/prism/vs-light.scss +0 -168
  206. package/src/sass/themes/blue.scss +0 -411
  207. package/src/sass/themes/dark.scss +0 -517
  208. package/src/sass/themes/default.scss +0 -255
  209. package/src/sass/themes/green.scss +0 -395
  210. package/src/sass/themes/light.scss +0 -368
  211. package/src/sass/themes/red.scss +0 -397
  212. package/src/sass/themes/violet.scss +0 -410
  213. package/src/sass/variable.scss +0 -84
  214. package/src/toolbars/Bubble.js +0 -234
  215. package/src/toolbars/BubbleFormula.js +0 -298
  216. package/src/toolbars/BubbleTable.js +0 -147
  217. package/src/toolbars/FloatMenu.js +0 -131
  218. package/src/toolbars/HiddenToolbar.js +0 -36
  219. package/src/toolbars/HookCenter.js +0 -231
  220. package/src/toolbars/MenuBase.js +0 -569
  221. package/src/toolbars/PreviewerBubble.js +0 -608
  222. package/src/toolbars/ShortcutKeyConfigPanel.js +0 -345
  223. package/src/toolbars/Sidebar.js +0 -36
  224. package/src/toolbars/Toc.js +0 -242
  225. package/src/toolbars/Toolbar.js +0 -449
  226. package/src/toolbars/ToolbarRight.js +0 -37
  227. package/src/toolbars/hooks/Audio.js +0 -79
  228. package/src/toolbars/hooks/BarTable.js +0 -41
  229. package/src/toolbars/hooks/Bold.js +0 -73
  230. package/src/toolbars/hooks/Br.js +0 -34
  231. package/src/toolbars/hooks/ChangeLocale.js +0 -62
  232. package/src/toolbars/hooks/ChatGpt.js +0 -182
  233. package/src/toolbars/hooks/CheckList.js +0 -41
  234. package/src/toolbars/hooks/Code.js +0 -49
  235. package/src/toolbars/hooks/CodeTheme.js +0 -66
  236. package/src/toolbars/hooks/Color.js +0 -298
  237. package/src/toolbars/hooks/Copy.js +0 -141
  238. package/src/toolbars/hooks/Detail.js +0 -69
  239. package/src/toolbars/hooks/DrawIo.js +0 -57
  240. package/src/toolbars/hooks/Export.js +0 -49
  241. package/src/toolbars/hooks/File.js +0 -79
  242. package/src/toolbars/hooks/Formula.js +0 -69
  243. package/src/toolbars/hooks/FullScreen.js +0 -50
  244. package/src/toolbars/hooks/Graph.js +0 -263
  245. package/src/toolbars/hooks/H1.js +0 -71
  246. package/src/toolbars/hooks/H2.js +0 -71
  247. package/src/toolbars/hooks/H3.js +0 -71
  248. package/src/toolbars/hooks/Header.js +0 -118
  249. package/src/toolbars/hooks/Hr.js +0 -35
  250. package/src/toolbars/hooks/Image.js +0 -91
  251. package/src/toolbars/hooks/InlineCode.js +0 -53
  252. package/src/toolbars/hooks/Insert.js +0 -193
  253. package/src/toolbars/hooks/Italic.js +0 -72
  254. package/src/toolbars/hooks/Justify.js +0 -49
  255. package/src/toolbars/hooks/LineTable.js +0 -41
  256. package/src/toolbars/hooks/Link.js +0 -49
  257. package/src/toolbars/hooks/List.js +0 -55
  258. package/src/toolbars/hooks/MobilePreview.js +0 -44
  259. package/src/toolbars/hooks/Ol.js +0 -41
  260. package/src/toolbars/hooks/Panel.js +0 -140
  261. package/src/toolbars/hooks/Pdf.js +0 -78
  262. package/src/toolbars/hooks/Publish.js +0 -123
  263. package/src/toolbars/hooks/QuickTable.js +0 -43
  264. package/src/toolbars/hooks/Quote.js +0 -45
  265. package/src/toolbars/hooks/Redo.js +0 -33
  266. package/src/toolbars/hooks/Ruby.js +0 -59
  267. package/src/toolbars/hooks/Search.js +0 -53
  268. package/src/toolbars/hooks/Settings.js +0 -220
  269. package/src/toolbars/hooks/ShortcutKey.js +0 -62
  270. package/src/toolbars/hooks/Size.js +0 -118
  271. package/src/toolbars/hooks/Split.js +0 -37
  272. package/src/toolbars/hooks/Strikethrough.js +0 -71
  273. package/src/toolbars/hooks/Sub.js +0 -58
  274. package/src/toolbars/hooks/Sup.js +0 -58
  275. package/src/toolbars/hooks/SwitchModel.js +0 -56
  276. package/src/toolbars/hooks/Table.js +0 -56
  277. package/src/toolbars/hooks/Theme.js +0 -62
  278. package/src/toolbars/hooks/Toc.js +0 -35
  279. package/src/toolbars/hooks/TogglePreview.js +0 -91
  280. package/src/toolbars/hooks/Ul.js +0 -41
  281. package/src/toolbars/hooks/Underline.js +0 -68
  282. package/src/toolbars/hooks/Undo.js +0 -30
  283. package/src/toolbars/hooks/Video.js +0 -79
  284. package/src/toolbars/hooks/Word.js +0 -78
  285. package/src/toolbars/hooks/WordCount.js +0 -106
  286. package/src/utils/autoindent.js +0 -58
  287. package/src/utils/cm-search-replace.js +0 -794
  288. package/src/utils/code-preview-language-setting.js +0 -180
  289. package/src/utils/codeBlockContentHandler.js +0 -400
  290. package/src/utils/config.js +0 -174
  291. package/src/utils/copy.js +0 -55
  292. package/src/utils/dialog.js +0 -214
  293. package/src/utils/dom.js +0 -163
  294. package/src/utils/downloadUtil.js +0 -23
  295. package/src/utils/env.js +0 -22
  296. package/src/utils/error.js +0 -61
  297. package/src/utils/event.js +0 -38
  298. package/src/utils/export.js +0 -166
  299. package/src/utils/file.js +0 -164
  300. package/src/utils/formulaUtilsHandler.js +0 -232
  301. package/src/utils/htmlparser.js +0 -976
  302. package/src/utils/image.js +0 -99
  303. package/src/utils/imgSizeHandler.js +0 -279
  304. package/src/utils/lazyLoadImg.js +0 -327
  305. package/src/utils/lineFeed.js +0 -49
  306. package/src/utils/listContentHandler.js +0 -227
  307. package/src/utils/lookbehind-replace.js +0 -81
  308. package/src/utils/mathjax.js +0 -89
  309. package/src/utils/myersDiff.js +0 -211
  310. package/src/utils/pasteHelper.js +0 -253
  311. package/src/utils/platformTransform.js +0 -71
  312. package/src/utils/recount-pos.js +0 -59
  313. package/src/utils/regexp.js +0 -295
  314. package/src/utils/sanitize.js +0 -477
  315. package/src/utils/selection.js +0 -50
  316. package/src/utils/shortcutKey.js +0 -291
  317. package/src/utils/svgUtils.js +0 -96
  318. package/src/utils/tableContentHandler.js +0 -876
  319. package/test/core/CommonMark.spec.ts +0 -62
  320. package/test/core/hooks/AutoLink.spec.ts +0 -28
  321. package/test/core/hooks/List.spec.ts +0 -79
  322. package/test/core/hooks/__snapshots__/List.spec.ts.snap +0 -11
  323. package/test/example.md +0 -778
  324. package/test/node.js +0 -10
  325. package/test/suites/commonmark.spec.json +0 -5218
  326. package/test/tsconfig.test.json +0 -6
  327. package/test/utils/regexp.spec.ts +0 -28
@@ -1,49 +0,0 @@
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 MenuBase from '@/toolbars/MenuBase';
17
- import { CONTROL_KEY, getKeyCode } from '@/utils/shortcutKey';
18
- /**
19
- * 插入超链接
20
- */
21
- export default class Link extends MenuBase {
22
- /**
23
- * @param {import('@/toolbars/MenuBase').MenuBaseConstructorParams} $cherry
24
- */
25
- constructor($cherry) {
26
- super($cherry);
27
- this.setName('link', 'link');
28
- this.shortcutKeyMap = {
29
- [`${CONTROL_KEY}-${getKeyCode('l')}`]: {
30
- hookName: this.name,
31
- aliasName: this.$cherry.locale[this.name],
32
- },
33
- };
34
- }
35
-
36
- /**
37
- * 响应点击事件
38
- * @param {string} selection 被用户选中的文本内容
39
- * @returns {string} 回填到编辑器光标位置/选中文本区域的内容
40
- */
41
- onClick(selection, shortKey = '') {
42
- // 插入图片,调用上传文件逻辑
43
- if (/^http/.test(selection)) {
44
- return `[${this.locale.link}](${selection})`;
45
- }
46
- const title = selection ? selection : this.locale.link;
47
- return `[${title}](http://url.com) `;
48
- }
49
- }
@@ -1,55 +0,0 @@
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 MenuBase from '@/toolbars/MenuBase';
17
- import { getSelection } from '@/utils/selection';
18
- import { getListFromStr } from '@/utils/regexp';
19
- /**
20
- * 插入有序/无序/checklist列表的按钮
21
- */
22
- export default class List extends MenuBase {
23
- constructor($cherry) {
24
- super($cherry);
25
- this.setName('list', 'list');
26
- this.subMenuConfig = [
27
- { iconName: 'ol', name: 'ol', onclick: this.bindSubClick.bind(this, '1') },
28
- { iconName: 'ul', name: 'ul', onclick: this.bindSubClick.bind(this, '2') },
29
- { iconName: 'checklist', name: 'checklist', onclick: this.bindSubClick.bind(this, '3') },
30
- ];
31
- }
32
-
33
- getSubMenuConfig() {
34
- return this.subMenuConfig;
35
- }
36
-
37
- /**
38
- * 响应点击事件
39
- * @param {string} selection 编辑区选中的文本内容
40
- * @param {1|2|3|'ol'|'1'|'2'|'3'|'ul'|'checklist'|''} shortKey 快捷键:ol(1)有序列表,ul(2)无序列表,checklist(3) 检查项
41
- * @returns 对应markdown的源码
42
- */
43
- onClick(selection, shortKey = '') {
44
- const listType = [null, 'ol', 'ul', 'checklist']; // 下标1, 2, 3生效
45
- const $selection = getSelection(this.editor.editor, selection, 'line', true);
46
- const [before] = $selection.match(/^\n*/);
47
- const [after] = $selection.match(/\n*$/);
48
- const type = listType[shortKey] ? listType[shortKey] : shortKey;
49
-
50
- if (!type || !/^(ol|ul|checklist)$/.test(type)) {
51
- return $selection;
52
- }
53
- return `${before}${getListFromStr($selection, type)}${after}`;
54
- }
55
- }
@@ -1,44 +0,0 @@
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 MenuBase from '@/toolbars/MenuBase';
17
- /**
18
- * 预览区域切换到“移动端视图”的按钮
19
- */
20
- export default class MobilePreview extends MenuBase {
21
- constructor($cherry) {
22
- super($cherry);
23
- this.previewer = $cherry.previewer;
24
- this.updateMarkdown = false;
25
- this.setName('mobilePreview', 'phone');
26
- }
27
-
28
- /**
29
- * 响应点击事件
30
- * 因为是预览区域的按钮,所以不用关注编辑区的选中内容
31
- */
32
- onClick() {
33
- this.previewer.removeScroll();
34
- // TODO:是否可以只通过修改外层class的方式来实现移动端预览效果的展示,而不是增加删除dom结构的方式
35
- const previewerDom = this.previewer.getDomContainer();
36
- if (this.previewer.isMobilePreview) {
37
- previewerDom.parentNode.innerHTML = previewerDom.innerHTML;
38
- } else {
39
- previewerDom.innerHTML = `<div class='cherry-mobile-previewer-content'>${previewerDom.innerHTML}</div>`;
40
- }
41
- this.previewer.isMobilePreview = !this.previewer.isMobilePreview;
42
- this.previewer.bindScroll();
43
- }
44
- }
@@ -1,41 +0,0 @@
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 MenuBase from '@/toolbars/MenuBase';
17
- import { getSelection } from '@/utils/selection';
18
- import { getListFromStr } from '@/utils/regexp';
19
-
20
- /**
21
- * 下标的按钮
22
- **/
23
- export default class Ol extends MenuBase {
24
- constructor($cherry) {
25
- super($cherry);
26
- this.setName('ol', 'ol');
27
- }
28
-
29
- /**
30
- *
31
- * @param {string} selection 被用户选中的文本内容
32
- * @param {string} shortKey 快捷键参数,本函数不处理这个参数
33
- * @returns {string} 回填到编辑器光标位置/选中文本区域的内容
34
- */
35
- onClick(selection, shortKey = '') {
36
- const $selection = getSelection(this.editor.editor, selection, 'line', true) || 'Item 1\n Item 1.1\nItem 2';
37
- const [before] = $selection.match(/^\n*/);
38
- const [after] = $selection.match(/\n*$/);
39
- return `${before}${getListFromStr($selection, 'ol')}${after}`;
40
- }
41
- }
@@ -1,140 +0,0 @@
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 MenuBase from '@/toolbars/MenuBase';
17
- import { getPanelRule } from '@/utils/regexp';
18
- import { getSelection } from '@/utils/selection';
19
- /**
20
- * 插入面板
21
- */
22
- export default class Panel extends MenuBase {
23
- constructor($cherry) {
24
- super($cherry);
25
- this.setName('panel', 'tips');
26
- this.panelRule = getPanelRule().reg;
27
- this.subMenuConfig = [
28
- {
29
- iconName: 'tips',
30
- name: 'tips',
31
- onclick: this.bindSubClick.bind(this, 'primary'),
32
- },
33
- {
34
- iconName: 'info',
35
- name: 'info',
36
- onclick: this.bindSubClick.bind(this, 'info'),
37
- },
38
- {
39
- iconName: 'warning',
40
- name: 'warning',
41
- onclick: this.bindSubClick.bind(this, 'warning'),
42
- },
43
- {
44
- iconName: 'danger',
45
- name: 'danger',
46
- onclick: this.bindSubClick.bind(this, 'danger'),
47
- },
48
- {
49
- iconName: 'success',
50
- name: 'success',
51
- onclick: this.bindSubClick.bind(this, 'success'),
52
- },
53
- ];
54
- }
55
-
56
- /**
57
- * 从字符串中找打面板的name
58
- * @param {string} str
59
- * @returns {string | false}
60
- */
61
- $getNameFromStr(str) {
62
- let ret = false;
63
- this.panelRule.lastIndex = 0;
64
- str.replace(this.panelRule, (match, preLines, name, content) => {
65
- const $name = /\s/.test(name.trim()) ? name.trim().replace(/\s.*$/, '') : name;
66
- ret = $name ? $name.trim().toLowerCase() : '';
67
- return match;
68
- });
69
- return ret;
70
- }
71
-
72
- $getTitle(str) {
73
- this.panelRule.lastIndex = 0;
74
- str.replace(this.panelRule, (match, preLines, name, content) => {
75
- const $name = name.trim();
76
- return /\s/.test($name) ? $name.replace(/[^\s]+\s/, '') : '';
77
- });
78
- return '';
79
- }
80
-
81
- /**
82
- * 响应点击事件
83
- * @param {string} selection 被用户选中的文本内容
84
- * @param {string} shortKey 快捷键参数
85
- * @returns {string} 回填到编辑器光标位置/选中文本区域的内容
86
- */
87
- onClick(selection, shortKey = '') {
88
- let $selection = getSelection(this.editor.editor, selection, 'line', true) || '内容';
89
- let currentName = this.$getNameFromStr($selection);
90
- let title = this.$getTitle($selection);
91
- if (currentName === false) {
92
- // 如果没有命中面板语法,则尝试扩大选区
93
- this.getMoreSelection('::: ', '\n', () => {
94
- const newSelection = this.editor.editor.getSelection();
95
- const isMatch = this.$getNameFromStr(newSelection);
96
- if (isMatch !== false) {
97
- $selection = newSelection;
98
- currentName = isMatch;
99
- title = this.$getTitle(newSelection);
100
- }
101
- return isMatch !== false;
102
- });
103
- }
104
- if (currentName !== false) {
105
- // 如果命中了面板语法,则尝试去掉语法或者变更语法
106
- if (currentName === shortKey) {
107
- // 去掉面板语法
108
- this.panelRule.lastIndex = 0;
109
- return $selection.replace(this.panelRule, (match, preLines, name, content) => {
110
- const $name = name.trim();
111
- const $title = /\s/.test($name) ? $name.replace(/[^\s]+\s/, '') : '';
112
- return `${$title}\n${content}`;
113
- });
114
- }
115
- // 修改name
116
- this.registerAfterClickCb(() => {
117
- this.setLessSelection('::: ', '\n');
118
- });
119
- this.panelRule.lastIndex = 0;
120
- return $selection.replace(this.panelRule, (match, preLines, name, content) => {
121
- const $name = name.trim();
122
- const $title = /\s/.test($name) ? $name.replace(/[^\s]+\s/, '') : '';
123
- return `::: ${shortKey} ${$title}\n${content.replace(/\n+$/, '')}\n:::`;
124
- });
125
- }
126
- this.registerAfterClickCb(() => {
127
- this.setLessSelection('::: ', '\n');
128
- });
129
- $selection = $selection.replace(/^\n+/, '');
130
- if (/\n/.test($selection)) {
131
- if (!title) {
132
- title = $selection.replace(/\n[\w\W]+$/, '');
133
- $selection = $selection.replace(/^[^\n]+\n/, '');
134
- }
135
- } else {
136
- title = title ? title : '标题';
137
- }
138
- return `::: ${shortKey} ${title}\n${$selection}\n:::`.replace(/\n{2,}:::/g, '\n:::');
139
- }
140
- }
@@ -1,78 +0,0 @@
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 MenuBase from '@/toolbars/MenuBase';
17
- import { handleUpload, handleUploadMulti } from '@/utils/file';
18
- /**
19
- * 插入pdf
20
- */
21
- export default class Pdf extends MenuBase {
22
- constructor($cherry) {
23
- super($cherry);
24
- this.setName('pdf', 'pdf');
25
- }
26
-
27
- /**
28
- * 响应点击事件
29
- * @param {string} selection 被用户选中的文本内容
30
- * @returns {string} 回填到编辑器光标位置/选中文本区域的内容
31
- */
32
- onClick(selection, shortKey = '') {
33
- const accept = this.$cherry.options?.fileTypeLimitMap?.pdf ?? '*';
34
- const multiple = this.$cherry?.options.multipleFileSelection?.pdf ?? false;
35
- if (multiple) {
36
- if (this.hasCacheOnce()) {
37
- const arr = this.getAndCleanCacheOnce();
38
- let res = '';
39
- // @ts-ignore
40
- for (const { url, params } of arr) {
41
- const begin = '[';
42
- const end = `](${url})`;
43
- this.registerAfterClickCb(() => {
44
- this.setLessSelection(begin, end);
45
- });
46
- const finalName = params.name ? params.name : name;
47
- res += `${begin}${finalName}${end}\n`;
48
- }
49
- return res;
50
- }
51
- // 插入图片,调用上传文件逻辑
52
- handleUploadMulti(this.editor, 'pdf', accept, (arr) => {
53
- this.setCacheOnce(arr);
54
- this.fire(null);
55
- });
56
- this.updateMarkdown = false;
57
- return selection;
58
- }
59
- if (this.hasCacheOnce()) {
60
- // @ts-ignore
61
- const { name, url, params } = this.getAndCleanCacheOnce();
62
- const begin = '[';
63
- const end = `](${url})`;
64
- this.registerAfterClickCb(() => {
65
- this.setLessSelection(begin, end);
66
- });
67
- const finalName = params.name ? params.name : name;
68
- return `${begin}${finalName}${end}`;
69
- }
70
- // 插入图片,调用上传文件逻辑
71
- handleUpload(this.editor, 'pdf', accept, (name, url, params) => {
72
- this.setCacheOnce({ name, url, params });
73
- this.fire(null);
74
- });
75
- this.updateMarkdown = false;
76
- return selection;
77
- }
78
- }
@@ -1,123 +0,0 @@
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 MenuBase from '@/toolbars/MenuBase';
17
- import { isBrowser } from '@/utils/env';
18
- import platformTransform from '@/utils/platformTransform';
19
-
20
- /** @typedef {import('../../../types/cherry').SupportPlatform} SupportPlatform */
21
-
22
- /** @type {Array<SupportPlatform>} */
23
- const supportPlatforms = ['wechat'];
24
-
25
- export default class Publish extends MenuBase {
26
- /**
27
- * @param {import('@/toolbars/MenuBase').MenuBaseConstructorParams} $cherry
28
- */
29
- constructor($cherry) {
30
- super($cherry);
31
- this.previewer = $cherry.previewer;
32
- this.updateMarkdown = false;
33
- this.setName('publish', 'copy');
34
- const publishConfigs = $cherry?.options?.toolbars?.config?.publish || [];
35
- const keys = publishConfigs.map((config) => {
36
- if (!Object.prototype.hasOwnProperty.call(config, 'key')) {
37
- throw new Error('publish config must have key');
38
- }
39
- // @ts-ignore
40
- if (!supportPlatforms.includes(config.key)) {
41
- throw new Error(`publish config key must be one of ${supportPlatforms.join(',')}`);
42
- }
43
- return config.key;
44
- });
45
- if (new Set(keys).size !== keys.length) {
46
- throw new Error('publish config key must be unique');
47
- }
48
- this.subMenuConfig = publishConfigs.map((config) => {
49
- /** @type {import('../MenuBase').SubMenuConfigItem}*/
50
- const subMenuConfig = {
51
- name: config.name,
52
- iconName: config.iconName,
53
- icon: config.icon,
54
- onclick: this.bindSubClick.bind(this, config),
55
- };
56
- return subMenuConfig;
57
- });
58
- }
59
-
60
- /**
61
- * 子菜单点击事件
62
- * @param {string} selection 编辑器中选中的内容
63
- * @param {import('../../../types/cherry').CherryPublishToolbarOption} shortcut 子菜单配置项
64
- */
65
- onClick(selection, shortcut) {
66
- if (!isBrowser()) return;
67
- const { previewerDom } = this.$cherry.previewer.options;
68
- const title = previewerDom?.querySelector('h1')?.innerText ?? '';
69
- const { key, serviceUrl, injectPayload } = shortcut;
70
- const execute = async () => {
71
- let injectPayloadResult = {};
72
- if (typeof injectPayload === 'function') {
73
- injectPayloadResult = await injectPayload();
74
- } else if (typeof injectPayload === 'object' && injectPayload !== null) {
75
- injectPayloadResult = injectPayload;
76
- }
77
- const style = this.getAllStyleSheets();
78
- const html = await platformTransform(previewerDom?.outerHTML ?? '', key);
79
- const res = await fetch(`${serviceUrl}/publish`, {
80
- method: 'POST',
81
- headers: {
82
- 'Content-Type': 'application/json',
83
- },
84
- body: JSON.stringify({
85
- target: key,
86
- contentType: 'html',
87
- needInlineStyle: true,
88
- articles: [
89
- {
90
- title,
91
- content: html + style,
92
- ...injectPayloadResult,
93
- },
94
- ],
95
- }),
96
- });
97
- const publishRes = await res.json();
98
- if (publishRes?.code === 0) {
99
- alert('发布成功');
100
- } else {
101
- alert(`错误码:${publishRes?.code} 错误信息:${publishRes?.msg}`);
102
- }
103
- };
104
- execute();
105
- }
106
-
107
- /**
108
- * 获取所有的样式表
109
- * @returns {string}
110
- */
111
- getAllStyleSheets() {
112
- const allSheets = Array.from(document.styleSheets).filter((item) => item.cssRules[0]);
113
- // 每一条styleSheet用一个style标签包裹
114
- return allSheets
115
- .map(
116
- (cssStyleSheet) =>
117
- `<style>${Array.from(cssStyleSheet.cssRules)
118
- .map((cssRule) => cssRule.cssText)
119
- .join('')}</style>`,
120
- )
121
- .join('');
122
- }
123
- }
@@ -1,43 +0,0 @@
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 MenuBase from '@/toolbars/MenuBase';
17
- /**
18
- * 插入“简单表格”的按钮
19
- * 所谓简单表格,是源于[TAPD](https://tapd.cn) wiki应用里的一种表格语法
20
- * 该表格语法不是markdown通用语法,请慎用
21
- */
22
- export default class QuickTable extends MenuBase {
23
- constructor($cherry) {
24
- super($cherry);
25
- this.setName('quickTable', 'table');
26
- }
27
-
28
- /**
29
- * 响应点击事件
30
- * @param {string} selection 编辑器里选中的内容
31
- * @param {string} shortKey 本函数不处理快捷键
32
- * @returns
33
- */
34
- onClick(selection, shortKey = '') {
35
- // TODO:可以尝试解析下selection里的内容,按\s、\t区分列,按\n区分行
36
- return (
37
- `${selection}| LeftAlignedCol | CenterAlignedCol | RightAlignedCol |\n` +
38
- '| :--- | :---: | ---: |\n' +
39
- '| sampleText | sampleText | sampleText |\n' +
40
- '| **left**Text | centered Text | *right*Text |\n'
41
- );
42
- }
43
- }
@@ -1,45 +0,0 @@
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 MenuBase from '@/toolbars/MenuBase';
17
- import { getSelection } from '@/utils/selection';
18
- /**
19
- * 插入“引用”的按钮
20
- */
21
- export default class Quote extends MenuBase {
22
- constructor($cherry) {
23
- super($cherry);
24
- this.setName('quote', 'blockquote');
25
- }
26
-
27
- /**
28
- * click handler
29
- * @param {string} selection selection in editor
30
- * @returns
31
- */
32
- onClick(selection) {
33
- const $selection = getSelection(this.editor.editor, selection, 'line', true) || this.locale.quote;
34
- const isWrapped = $selection.split('\n').every((text) => /^\s*>[^\n]+$/.exec(text));
35
- if (isWrapped) {
36
- // 去掉>号
37
- return $selection.replace(/(^\s*)>\s*([^\n]+)($)/gm, '$1$2$3').replace(/\n+$/, '\n\n');
38
- }
39
- this.registerAfterClickCb(() => {
40
- this.setLessSelection('> ', '');
41
- });
42
- // 给每一行增加>号
43
- return $selection.replace(/(^)([^\n]+)($)/gm, '$1> $2$3').replace(/\n+$/, '\n\n');
44
- }
45
- }
@@ -1,33 +0,0 @@
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 MenuBase from '@/toolbars/MenuBase';
17
- /**
18
- * 撤销/重做 里的“重做”按键
19
- * 依赖codemirror的undo接口
20
- */
21
- export default class Redo extends MenuBase {
22
- constructor($cherry) {
23
- super($cherry);
24
- this.setName('redo', 'redo');
25
- }
26
-
27
- /**
28
- * 直接调用codemirror的redo方法就好了
29
- */
30
- onClick() {
31
- this.editor.editor.redo();
32
- }
33
- }