@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,147 +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
- const createTableItem = (dataset, className) => {
17
- const dom = document.createElement('td');
18
- dom.className = className || 'table-item';
19
- Object.keys(dataset).forEach((prop) => {
20
- dom.dataset[prop] = dataset[prop];
21
- });
22
- return dom;
23
- };
24
-
25
- /**
26
- * 插入表格的辅助面板
27
- */
28
- export default class BubbleTableMenu {
29
- constructor({ row, col }, className) {
30
- this.init(row, col, className);
31
- this.initEventListeners();
32
- this.afterClick = (...args) => {};
33
- }
34
-
35
- init(row, col, className) {
36
- const container = document.createElement('table');
37
- const cellArr = [];
38
- const classNames = ['cherry-insert-table-menu', 'cherry-dropdown'];
39
- container.className = classNames.join(' ');
40
- for (let r = 1; r <= row; r++) {
41
- const rowContainer = document.createElement('tr');
42
- rowContainer.className = 'cherry-insert-table-menu-row';
43
- cellArr[r - 1] = [];
44
- for (let c = 1; c <= col; c++) {
45
- const cell = createTableItem({ row: r, col: c }, 'cherry-insert-table-menu-item');
46
- rowContainer.appendChild(cell);
47
- cellArr[r - 1][c - 1] = cell;
48
- }
49
- container.appendChild(rowContainer);
50
- }
51
- container.style.display = 'none';
52
- container.addEventListener('EditorHideToolbarSubMenu', () => {
53
- this.hide();
54
- });
55
- this.dom = container;
56
- this.cell = cellArr;
57
- this.maxRow = row;
58
- this.maxCol = col;
59
- this.activeRow = 0;
60
- this.activeCol = 0;
61
- return this.dom;
62
- }
63
-
64
- initEventListeners() {
65
- this.dom.addEventListener('mousemove', this.handleMouseMove.bind(this), false);
66
- // 不能用click
67
- this.dom.addEventListener('mouseup', this.handleMouseUp.bind(this));
68
- }
69
-
70
- setActiveCell(row, col) {
71
- if (this.activeRow === row && this.activeCol === col) {
72
- return;
73
- }
74
- const minRow = Math.min(this.activeRow, row);
75
- const maxRow = Math.max(this.activeRow, row);
76
- if (minRow !== maxRow) {
77
- // 先清空或按照历史列数增减active类
78
- for (let r = maxRow; r > minRow; r--) {
79
- for (let c = 1; c <= this.activeCol; c++) {
80
- this.cell[r - 1][c - 1].classList.toggle('active');
81
- }
82
- }
83
- }
84
- const minCol = Math.min(this.activeCol, col);
85
- const maxCol = Math.max(this.activeCol, col);
86
- if (minCol !== maxCol) {
87
- for (let c = maxCol; c > minCol; c--) {
88
- for (let r = 1; r <= row; r++) {
89
- this.cell[r - 1][c - 1].classList.toggle('active');
90
- }
91
- }
92
- }
93
- this.activeRow = row;
94
- this.activeCol = col;
95
- }
96
-
97
- handleMouseMove(event) {
98
- let { target } = event;
99
- if (target === this.dom) {
100
- return;
101
- }
102
- if (!target.classList.contains('cherry-insert-table-menu-item')) {
103
- target = target.querySelector('.cherry-insert-table-menu-item');
104
- }
105
- if (!target) {
106
- return;
107
- }
108
- this.setActiveCell(target.dataset.row, target.dataset.col);
109
- }
110
-
111
- handleMouseUp(event) {
112
- let { target } = event;
113
- if (target === this.dom) {
114
- this.afterClick(this.activeRow, this.activeCol);
115
- this.hide();
116
- return;
117
- }
118
- if (!target.classList.contains('cherry-insert-table-menu-item')) {
119
- target = target.querySelector('.cherry-insert-table-menu-item');
120
- }
121
- if (!target) {
122
- this.afterClick(this.activeRow, this.activeCol);
123
- this.hide();
124
- return;
125
- }
126
- // 正中单元格时才使用target的dataset
127
- this.afterClick(this.activeRow, this.activeCol);
128
- this.hide();
129
- }
130
-
131
- show(callback) {
132
- this.dom.style.display = 'block';
133
- this.afterClick = callback;
134
- }
135
-
136
- hide() {
137
- this.dom.style.display = 'none';
138
- // reset active status
139
- for (let r = 0; r < this.maxRow; r++) {
140
- for (let c = 0; c < this.maxCol; c++) {
141
- this.cell[r][c].classList.remove('active');
142
- }
143
- }
144
- this.activeRow = 0;
145
- this.activeCol = 0;
146
- }
147
- }
@@ -1,131 +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 Toolbar from './Toolbar';
17
- /**
18
- * 当光标处于编辑器新行起始位置时出现的浮动工具栏
19
- */
20
- export default class FloatMenu extends Toolbar {
21
- // constructor(options) {
22
- // super(options);
23
- // }
24
-
25
- init() {
26
- this.editor = this.$cherry.editor;
27
- this.editorDom = this.editor.getEditorDom();
28
- this.editorDom.querySelector('.CodeMirror-scroll').appendChild(this.options.dom);
29
- this.initAction();
30
- Object.entries(this.shortcutKeyMap).forEach(([key, value]) => {
31
- this.$cherry.toolbar.shortcutKeyMap[key] = value;
32
- });
33
- }
34
-
35
- appendMenusToDom(menus) {
36
- this.options.dom.appendChild(menus);
37
- }
38
-
39
- initAction() {
40
- const self = this;
41
- this.editor.addListener('cursorActivity', (codemirror, evt) => {
42
- // 当编辑区光标位置改变时触发
43
- self.cursorActivity(evt, codemirror);
44
- });
45
-
46
- this.editor.addListener('update', (codemirror, evt) => {
47
- // 当编辑区内容改变时触发
48
- self.cursorActivity(evt, codemirror);
49
- });
50
-
51
- this.editor.addListener('refresh', (codemirror, evt) => {
52
- // 当编辑器刷新时触发
53
- setTimeout(() => {
54
- self.cursorActivity(evt, codemirror);
55
- }, 0);
56
- });
57
- }
58
-
59
- update(evt, codeMirror) {
60
- const pos = codeMirror.getCursor();
61
- if (this.isHidden(pos.line, codeMirror)) {
62
- this.options.dom.style.display = 'none';
63
- return false;
64
- }
65
- this.options.dom.style.display = 'inline-block';
66
- }
67
-
68
- /**
69
- * 当光标激活时触发,当光标处于行起始位置时展示float工具栏;反之隐藏
70
- * @param {Event} evt
71
- * @param {CodeMirror.Editor} codeMirror
72
- * @returns
73
- */
74
- cursorActivity(evt, codeMirror) {
75
- const pos = codeMirror.getCursor();
76
- const codeMirrorLines = document.querySelector('.cherry-editor .CodeMirror-lines');
77
- if (!codeMirrorLines) {
78
- return false;
79
- }
80
- const computedLinesStyle = getComputedStyle(codeMirrorLines);
81
- const codeWrapPaddingLeft = parseFloat(computedLinesStyle.paddingLeft);
82
- const codeWrapPaddingTop = parseFloat(computedLinesStyle.paddingTop);
83
- // const cursorHandle = codeMirror.getLineHandle(pos.line);
84
- // const verticalMiddle = cursorHandle.height * 1 / 2;
85
-
86
- if (this.isHidden(pos.line, codeMirror)) {
87
- this.options.dom.style.display = 'none';
88
- return false;
89
- }
90
- this.options.dom.style.display = 'inline-block';
91
- this.options.dom.style.left = `${codeWrapPaddingLeft}px`;
92
- this.options.dom.style.top = `${this.getLineHeight(pos.line, codeMirror) + codeWrapPaddingTop}px`;
93
- }
94
-
95
- /**
96
- * 判断是否需要隐藏Float工具栏
97
- * 有选中内容,或者光标所在行有内容时隐藏float 工具栏
98
- * @param {number} line
99
- * @param {CodeMirror.Editor} codeMirror
100
- * @returns {boolean} 是否需要隐藏float工具栏,true:需要隐藏
101
- */
102
- isHidden(line, codeMirror) {
103
- const selections = codeMirror.getSelections();
104
- if (selections.length > 1) {
105
- return true;
106
- }
107
- const selection = codeMirror.getSelection();
108
- if (selection.length > 0) {
109
- return true;
110
- }
111
- if (codeMirror.getLine(line)) {
112
- return true;
113
- }
114
- return false;
115
- }
116
-
117
- /**
118
- * 获取对应行的行高度,用来让float 工具栏在该行保持垂直居中
119
- * @param {number} line
120
- * @param {CodeMirror.Editor} codeMirror
121
- * @returns
122
- */
123
- getLineHeight(line, codeMirror) {
124
- let height = 0;
125
- codeMirror.getDoc().eachLine(0, line, (line) => {
126
- height += line.height;
127
- });
128
-
129
- return height;
130
- }
131
- }
@@ -1,36 +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 Toolbar from './Toolbar';
17
- /**
18
- * 预览区域右侧悬浮的工具栏
19
- * 推荐放置跟编辑区域完全无关的工具栏
20
- * 比如复制预览区域内容、修改预览区域主题等
21
- */
22
- export default class HiddenToolbar extends Toolbar {
23
- // constructor(options) {
24
- // super(options);
25
- // }
26
- appendMenusToDom(menus) {
27
- return;
28
- }
29
-
30
- init() {
31
- super.init();
32
- Object.entries(this.shortcutKeyMap).forEach(([key, value]) => {
33
- this.$cherry.toolbar.shortcutKeyMap[key] = value;
34
- });
35
- }
36
- }
@@ -1,231 +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
- /**
17
- * 工具栏各个实例的注册中心
18
- */
19
- import Bold from './hooks/Bold';
20
- import Italic from './hooks/Italic';
21
- import Split from './hooks/Split';
22
- import Strikethrough from './hooks/Strikethrough';
23
- import Sub from './hooks/Sub';
24
- import Sup from './hooks/Sup';
25
- import Color from './hooks/Color';
26
- import Header from './hooks/Header';
27
- import Insert from './hooks/Insert';
28
- import List from './hooks/List';
29
- import Ol from './hooks/Ol';
30
- import Ul from './hooks/Ul';
31
- import CheckList from './hooks/CheckList';
32
- import Graph from './hooks/Graph';
33
- import Size from './hooks/Size';
34
- import H1 from './hooks/H1';
35
- import H2 from './hooks/H2';
36
- import H3 from './hooks/H3';
37
- import Quote from './hooks/Quote';
38
- import QuickTable from './hooks/QuickTable';
39
- import TogglePreview from './hooks/TogglePreview';
40
- import FullScreen from './hooks/FullScreen';
41
- import Undo from './hooks/Undo';
42
- import Redo from './hooks/Redo';
43
- import Code from './hooks/Code';
44
- import InlineCode from './hooks/InlineCode';
45
- import CodeTheme from './hooks/CodeTheme';
46
- import Export from './hooks/Export';
47
- import Settings from './hooks/Settings';
48
- import Underline from './hooks/Underline';
49
- import SwitchModel from './hooks/SwitchModel';
50
- import Image from './hooks/Image';
51
- import Audio from './hooks/Audio';
52
- import Video from './hooks/Video';
53
- import Br from './hooks/Br';
54
- import Hr from './hooks/Hr';
55
- import Formula from './hooks/Formula';
56
- import Link from './hooks/Link';
57
- import Table from './hooks/Table';
58
- import Toc from './hooks/Toc';
59
- import LineTable from './hooks/LineTable';
60
- import BarTable from './hooks/BarTable';
61
- import Pdf from './hooks/Pdf';
62
- import File from './hooks/File';
63
- import Word from './hooks/Word';
64
- import Ruby from './hooks/Ruby';
65
- import Theme from './hooks/Theme';
66
- import WordCount from './hooks/WordCount';
67
- // import ChatGpt from './hooks/ChatGpt';
68
- // Sidebar
69
- import MobilePreview from './hooks/MobilePreview';
70
- import Copy from './hooks/Copy';
71
- import Panel from './hooks/Panel';
72
- import Justify from './hooks/Justify';
73
- import Detail from './hooks/Detail';
74
- import DrawIo from './hooks/DrawIo';
75
- import Publish from './hooks/Publish';
76
- import ChangeLocale from './hooks/ChangeLocale';
77
- import ShortcutKey from './hooks/ShortcutKey';
78
- import Search from './hooks/Search';
79
-
80
- // 定义默认支持的工具栏
81
- // 目前不支持按需动态加载
82
- // 如果对CherryMarkdown构建后的文件大小有比较严格的要求,可以根据实际情况删减hook
83
- const HookList = {
84
- bold: Bold,
85
- italic: Italic,
86
- '|': Split,
87
- strikethrough: Strikethrough,
88
- sub: Sub,
89
- sup: Sup,
90
- header: Header,
91
- insert: Insert,
92
- list: List,
93
- ol: Ol,
94
- ul: Ul,
95
- checklist: CheckList,
96
- graph: Graph,
97
- size: Size,
98
- h1: H1,
99
- h2: H2,
100
- h3: H3,
101
- color: Color,
102
- quote: Quote,
103
- quickTable: QuickTable,
104
- togglePreview: TogglePreview,
105
- code: Code,
106
- inlineCode: InlineCode,
107
- codeTheme: CodeTheme,
108
- export: Export,
109
- settings: Settings,
110
- fullScreen: FullScreen,
111
- mobilePreview: MobilePreview,
112
- copy: Copy,
113
- undo: Undo,
114
- redo: Redo,
115
- underline: Underline,
116
- switchModel: SwitchModel,
117
- image: Image,
118
- audio: Audio,
119
- video: Video,
120
- br: Br,
121
- hr: Hr,
122
- formula: Formula,
123
- link: Link,
124
- table: Table,
125
- toc: Toc,
126
- lineTable: LineTable,
127
- barTable: BarTable,
128
- pdf: Pdf,
129
- word: Word,
130
- ruby: Ruby,
131
- theme: Theme,
132
- file: File,
133
- panel: Panel,
134
- justify: Justify,
135
- detail: Detail,
136
- drawIo: DrawIo,
137
- wordCount: WordCount,
138
- // chatgpt: ChatGpt,
139
- publish: Publish,
140
- changeLocale: ChangeLocale,
141
- shortcutKey: ShortcutKey,
142
- search: Search,
143
- };
144
-
145
- export default class HookCenter {
146
- constructor(toolbar) {
147
- this.toolbar = toolbar;
148
- /**
149
- * @type {{[key: string]: import('@/toolbars/MenuBase').default}} 保存所有菜单实例
150
- */
151
- this.hooks = {};
152
- /**
153
- * @type {string[]} 所有注册的菜单名称
154
- */
155
- this.allMenusName = [];
156
- /**
157
- * @type {string[]} 一级菜单的名称
158
- */
159
- this.level1MenusName = [];
160
- /**
161
- * @type {{ [parentName: string]: string[]}} 二级菜单的名称, e.g. {一级菜单名称: [二级菜单名称1, 二级菜单名称2]}
162
- */
163
- this.level2MenusName = {};
164
- // menu 参数配置的属性名
165
- this.menuOptionsKey = ['name', 'icon', 'subMenu'];
166
- this.init();
167
- }
168
-
169
- /**
170
- * 实例化菜单
171
- * @param {string} name 菜单名称
172
- * @param {null|import('~types/menus').CustomMenuConfig} options 菜单配置项
173
- * @returns
174
- */
175
- $newMenu(name, options = null) {
176
- if (this.hooks[name]) {
177
- return;
178
- }
179
- /**
180
- * 传入了options代表是新写法,不传兼容旧写法:即name和iconName一致,省去了在MenuBase的子类中调用setName
181
- * 因为下面判断了name的合法性,这里就不需要再判断一次了,也防止了setName写错
182
- * @type {import('~types/menus').CustomMenuConfig}
183
- */
184
- const currentMenuOptions = options || { name, icon: name };
185
- const { $cherry, customMenu } = this.toolbar.options;
186
- $cherry.$currentMenuOptions = currentMenuOptions;
187
- if (HookList[name]) {
188
- this.allMenusName.push(name);
189
- this.hooks[name] = new HookList[name]($cherry);
190
- } else if (customMenu !== undefined && customMenu !== null && customMenu[name]) {
191
- this.allMenusName.push(name);
192
- // 如果是自定义菜单,传参兼容旧版
193
- this.hooks[name] = new customMenu[name]($cherry);
194
- }
195
- }
196
-
197
- /**
198
- * 根据配置动态渲染、绑定工具栏
199
- * @returns
200
- */
201
- init() {
202
- const { buttonConfig } = this.toolbar.options;
203
- buttonConfig.forEach((item) => {
204
- if (typeof item === 'string') {
205
- this.level1MenusName.push(item);
206
- this.$newMenu(item);
207
- } else if (typeof item === 'object') {
208
- const keys = Object.keys(item);
209
- if (keys.length === 1) {
210
- // 只接受形如{ name: [ subMenu ] }的参数
211
- const [name] = keys;
212
- if (this.menuOptionsKey.includes(name)) {
213
- throw Error(`this menu key is not allowed: ${name}, forbid menu key: ${this.menuOptionsKey}`);
214
- }
215
- this.level1MenusName.push(name);
216
- this.$newMenu(name);
217
- this.level2MenusName[name] = item[name];
218
- item[name].forEach((subItem) => {
219
- this.$newMenu(subItem);
220
- });
221
- } else {
222
- if (!item.name) {
223
- return;
224
- }
225
- this.level1MenusName.push(item.name);
226
- this.$newMenu(item.name, item);
227
- }
228
- }
229
- });
230
- }
231
- }