@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,291 +0,0 @@
1
- import { mac } from 'codemirror/src/util/browser';
2
-
3
- export const SHIFT_KEY = 'Shift';
4
- export const ALT_KEY = 'Alt';
5
- // mac的command(meta)键,windows的ctrl键
6
- export const CONTROL_KEY = mac ? 'Meta' : 'Control';
7
- export const META_KEY = 'Meta';
8
- export const ENTER_KEY = 'Enter';
9
- export const ESCAPE_KEY = 'Escape';
10
- export const BACKSPACE_KEY = 'Backspace';
11
-
12
- export const shortKey2UnPlatformKey = {
13
- [SHIFT_KEY]: (/** @type {boolean} */ isMac) => {
14
- if (isMac) {
15
- return {
16
- text: '⇧',
17
- tip: 'Shift',
18
- };
19
- }
20
- return {
21
- text: '⇧',
22
- tip: 'Shift',
23
- };
24
- },
25
- [CONTROL_KEY]: (/** @type {boolean} */ isMac) => {
26
- if (isMac) {
27
- return {
28
- text: '⌃',
29
- tip: 'Control',
30
- };
31
- }
32
- return {
33
- text: 'Ctrl',
34
- tip: 'Control',
35
- };
36
- },
37
- [ALT_KEY]: (/** @type {boolean} */ isMac) => {
38
- if (isMac) {
39
- return {
40
- text: '⌥',
41
- tip: 'Option',
42
- };
43
- }
44
- return {
45
- text: 'Alt',
46
- tip: 'Alt',
47
- };
48
- },
49
- [META_KEY]: (/** @type {boolean} */ isMac) => {
50
- if (isMac) {
51
- return {
52
- text: '⌘',
53
- tip: 'Command',
54
- };
55
- }
56
- return {
57
- text: '⊞',
58
- tip: 'Windows',
59
- };
60
- },
61
- };
62
-
63
- /**
64
- * 编辑属性的快捷键
65
- * @type {string[]}
66
- * @see https://developer.mozilla.org/zh-CN/docs/Web/API/UI_Events/Keyboard_event_key_values#editing_keys
67
- */
68
- const editingKeys = [
69
- 'Backspace',
70
- 'Clear',
71
- 'Copy',
72
- 'CrSel',
73
- 'Cut',
74
- 'Delete',
75
- 'EraseEof',
76
- 'ExSel',
77
- 'Insert',
78
- 'Paste',
79
- 'Redo',
80
- 'Undo',
81
- ];
82
-
83
- /**
84
- * 导航快捷键
85
- * @type {string[]}
86
- * @see https://developer.mozilla.org/zh-CN/docs/Web/API/UI_Events/Keyboard_event_key_values#navigation_keys
87
- */
88
- const navigationKeys = ['ArrowDown', 'ArrowLeft', 'ArrowRight', 'ArrowUp', 'End', 'Home', 'PageDown', 'PageUp'];
89
-
90
- /**
91
- * whitespace_keys
92
- * @type {string[]}
93
- * @see https://developer.mozilla.org/zh-CN/docs/Web/API/UI_Events/Keyboard_event_key_values#whitespace_keys
94
- */
95
- const whiteSpaceKeys = [' ', 'Tab', 'Enter'];
96
-
97
- /**
98
- * 默认禁止的快捷键,主要是一些会对编辑器造成影响的快捷键
99
- * @type {string[]}
100
- */
101
- const defaultForbiddenKeys = [...editingKeys, ...navigationKeys, ...whiteSpaceKeys];
102
-
103
- /**
104
- * 获取合法的快捷键
105
- * @param {KeyboardEvent} event 键盘事件
106
- * @param {string[]} customForbiddenKeys 自定义的禁止的快捷键
107
- */
108
- export const getAllowedShortcutKey = (event, customForbiddenKeys = []) => {
109
- const finalForbiddenKeys = [...defaultForbiddenKeys, ...customForbiddenKeys];
110
- /** @type {string[]} */
111
- const keyStack = [];
112
- const isSpecialKey = event.metaKey || event.ctrlKey || event.altKey || event.shiftKey;
113
- /**
114
- * 这里用 key 是因为 code 带有布局特征
115
- */
116
- if (finalForbiddenKeys.includes(event.key)) {
117
- return keyStack;
118
- }
119
- /**
120
- * 这个逻辑体内就规定了特殊按键的顺序:Meta > Control > Alt > Shift,从而保证了快捷键的顺序而不会重复
121
- * 也就是说这四个特殊键无论怎么按下,都会按照这个顺序排列
122
- */
123
- if (isSpecialKey) {
124
- if (event.metaKey) {
125
- keyStack.push(META_KEY);
126
- }
127
- if (event.ctrlKey) {
128
- keyStack.push(CONTROL_KEY);
129
- }
130
- if (event.altKey) {
131
- keyStack.push(ALT_KEY);
132
- }
133
- if (event.shiftKey) {
134
- keyStack.push(SHIFT_KEY);
135
- }
136
- }
137
- // 这里排除掉上面 isSpecialKey 的键,追加其他键
138
- if (!keyStack.includes(event.key)) {
139
- /**
140
- * 这里用 code 的原因在于要抹平不同浏览器对键值的不同处理,以及按下Shift键时key的表示不同
141
- * shfit、alt 等调节性键,在按下时,key的值会不同,但code的值是相同的
142
- * @see https://developer.mozilla.org/zh-CN/docs/Web/API/KeyboardEvent/code
143
- */
144
- // 当前键是否是重复按下的
145
- if (event.repeat) {
146
- keyStack.push(event.code);
147
- return keyStack;
148
- }
149
- keyStack.push(event.code);
150
- }
151
- return keyStack;
152
- };
153
-
154
- /**
155
- * 判断一个快捷键栈是否只包含了修饰键+输入键
156
- * @param {string[]} keyStack 快捷键栈
157
- */
158
- export const keyStackIsModifierkeys = (keyStack) => {
159
- // 不是数组或长度不为2的肯定不是,(shift/alt)+input
160
- if (!Array.isArray(keyStack) || keyStack.length !== 2) {
161
- return false;
162
- }
163
- const includeShiftKey = keyStack.includes(SHIFT_KEY);
164
- const includeAltKey = keyStack.includes(ALT_KEY);
165
- // 只包含 Shift 和 Alt 的肯定不是
166
- if (includeShiftKey && includeAltKey && keyStack.length === 2) {
167
- return false;
168
- }
169
- return (includeShiftKey || includeAltKey) && !keyStack.includes(META_KEY) && !keyStack.includes(CONTROL_KEY);
170
- };
171
-
172
- export const setDisableShortcutKey = (nameSpace, value = 'disable') => {
173
- window.localStorage.setItem(`${nameSpace}-disable-cherry-shortcut-key`, value);
174
- };
175
-
176
- export const isEnableShortcutKey = (nameSpace) => {
177
- const disableShortcutKeyStorage = window.localStorage.getItem(`${nameSpace}-disable-cherry-shortcut-key`);
178
- if (disableShortcutKeyStorage === 'disable') {
179
- return false;
180
- }
181
- return true;
182
- };
183
-
184
- /**
185
- * 缓存快捷键映射
186
- * @param {string} nameSpace cherry 的缓存命名空间
187
- * @param {import('@/toolbars/MenuBase').HookShortcutKeyMap} keyMap 快捷键映射
188
- * @returns
189
- */
190
- export const storageKeyMap = (nameSpace, keyMap) => {
191
- if (!keyMap || typeof keyMap !== 'object') {
192
- throw new Error('keyMap must be a object');
193
- }
194
- return window.localStorage.setItem(`${nameSpace}-cherry-shortcut-keymap`, JSON.stringify(keyMap));
195
- };
196
-
197
- /**
198
- * 获取缓存快捷键映射
199
- * @param {string} nameSpace cherry 的缓存命名空间
200
- * @returns
201
- */
202
- export const getStorageKeyMap = (nameSpace) => {
203
- const shortcutKeyMapStorage = window.localStorage.getItem(`${nameSpace}-cherry-shortcut-keymap`);
204
- if (shortcutKeyMapStorage) {
205
- try {
206
- /** @type {import('@/toolbars/MenuBase').HookShortcutKeyMap} */
207
- const res = JSON.parse(shortcutKeyMapStorage);
208
- return res;
209
- } catch (error) {
210
- console.error(error);
211
- return null;
212
- }
213
- }
214
- return null;
215
- };
216
-
217
- /**
218
- * 将快捷键栈转换为唯一字符串
219
- * @param {string[]} keyStack 快捷键栈
220
- * @returns
221
- */
222
- export const keyStack2UniqueString = (keyStack) => {
223
- if (!Array.isArray(keyStack)) {
224
- throw new Error('keyStack must be a array');
225
- }
226
- return keyStack.join('-');
227
- };
228
-
229
- /**
230
- * 将快捷键代码转换为平台对应的快捷键
231
- * @param {string} code 源code
232
- * @param {boolean} isMac 是否是mac平台
233
- */
234
- export const shortcutCode2Key = (code, isMac) => {
235
- if (code in shortKey2UnPlatformKey) {
236
- /** @type {keyof shortKey2UnPlatformKey} */
237
- // @ts-ignore
238
- const origin = code;
239
- const func = shortKey2UnPlatformKey[origin];
240
- if (typeof func === 'function') {
241
- return func(isMac);
242
- }
243
- }
244
- // 由于code包含了Key、Digit等,所以需要替换掉
245
- const text = code.replace(/Key|Digit/g, '');
246
- return {
247
- text,
248
- tip: text,
249
- };
250
- };
251
-
252
- /**
253
- * 将快捷键栈转换为平台无关的唯一字符串
254
- * @param {string[]} keyStack 快捷键栈
255
- * @param {boolean} isMac 是否是mac平台
256
- * @returns
257
- */
258
- export const keyStack2UnPlatformUniqueString = (keyStack, isMac) => {
259
- if (!Array.isArray(keyStack)) {
260
- throw new Error('keyStack must be a array');
261
- }
262
- return keyStack2UniqueString(keyStack.map((code) => shortcutCode2Key(code, isMac).text));
263
- };
264
-
265
- /**
266
- * 获取快捷键
267
- * @param {string|number} key 易读的键
268
- * @example [0-9, a-z]
269
- * @see https://developer.mozilla.org/en-US/docs/Web/API/UI_Events/Keyboard_event_code_values
270
- */
271
- export const getKeyCode = (key) => {
272
- if (typeof key === 'number') {
273
- return `Digit${key}`;
274
- }
275
- if (typeof key !== 'string') {
276
- throw new Error('key must be a string or number');
277
- }
278
- // 一次只能输入一个字符
279
- if (key.length > 1) {
280
- throw new Error(`key length must be 1, but get ${key.length}`);
281
- }
282
- const upperCaseKey = key.toUpperCase();
283
- // 字符串数字
284
- if (/\d/.test(upperCaseKey)) {
285
- return `Digit${upperCaseKey}`;
286
- }
287
- // 字符串字母
288
- if (/[A-Z]/.test(upperCaseKey)) {
289
- return `Key${upperCaseKey}`;
290
- }
291
- };
@@ -1,96 +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
- import { downloadByATag } from './downloadUtil';
18
- /**
19
- * @typedef {Object} Svg2ImgOptions
20
- * @property {string=} filename 文件名
21
- * @property {number=} width 宽度
22
- * @property {number=} height 高度
23
- * @property {number=} scale 缩放比例
24
- * @property {number=} quality 图片质量
25
- * @property {string=} backgroundColor 背景颜色
26
- * @property {"svg" | "png" | "jpg"=} format 图片格式
27
- * @property {string=} encoderOptions 编码器选项
28
- * @property {string=} mimeType mime类型
29
- * @property {string=} type 类型
30
- * @property {string=} crossOrigin 跨域
31
- */
32
- /**
33
- * svg转img
34
- * @param {SVGSVGElement} svgElement
35
- * @param {Svg2ImgOptions} options
36
- */
37
- export function svg2img(svgElement, options = {}) {
38
- if (options.format === 'svg') {
39
- downloadSvg(svgElement, options.filename ?? 'formula.svg');
40
- return;
41
- }
42
- const {
43
- width = svgElement.width.baseVal.value,
44
- height = svgElement.height.baseVal.value,
45
- scale = 5,
46
- quality = 1,
47
- backgroundColor = 'white',
48
- filename = 'formula',
49
- format = 'png',
50
- mimeType = 'image/png',
51
- } = options;
52
- const svgString = getSvgString(svgElement);
53
- // 创建一个新的 Canvas 元素
54
- const canvas = document.createElement('canvas');
55
- const ctx = canvas.getContext('2d');
56
- const img = new Image();
57
- img.src = `data:image/svg+xml;base64,${btoa(unescape(encodeURIComponent(svgString)))}`;
58
- img.onload = () => {
59
- canvas.width = width * scale;
60
- canvas.height = height * scale;
61
- ctx.fillStyle = backgroundColor;
62
- ctx.fillRect(0, 0, canvas.width, canvas.height);
63
- ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
64
- canvas.toBlob(
65
- (blob) => {
66
- const url = URL.createObjectURL(blob);
67
- downloadByATag(url, `${filename}.${format}`);
68
- URL.revokeObjectURL(url);
69
- },
70
- mimeType,
71
- quality,
72
- );
73
- };
74
- }
75
-
76
- /**
77
- * 获取带xmlns的svg字符串
78
- * @param {SVGSVGElement} svgElement svg元素
79
- * @returns {string}
80
- */
81
- export function getSvgString(svgElement) {
82
- return new XMLSerializer().serializeToString(svgElement);
83
- }
84
-
85
- /**
86
- * 下载svg
87
- * @param {SVGSVGElement} svgElement svg元素
88
- * @param {string} filename 文件名
89
- */
90
- export function downloadSvg(svgElement, filename) {
91
- const svgString = getSvgString(svgElement);
92
- const blob = new Blob([svgString], { type: 'image/svg+xml;charset=utf-8' });
93
- const url = URL.createObjectURL(blob);
94
- downloadByATag(url, filename);
95
- URL.revokeObjectURL(url);
96
- }