@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.
- package/README.md +2 -2
- package/dist/addons/advance/cherry-table-echarts-plugin.js +1 -1
- package/dist/addons/cherry-code-block-mermaid-plugin.js +1 -1
- package/dist/cherry-markdown.core.common.js +1 -1
- package/dist/cherry-markdown.core.js +1 -1
- package/dist/cherry-markdown.engine.core.common.js +1 -1
- package/dist/cherry-markdown.engine.core.esm.js +1 -1
- package/dist/cherry-markdown.engine.core.js +1 -1
- package/dist/cherry-markdown.esm.js +1 -1
- package/dist/cherry-markdown.js +1 -1
- package/dist/cherry-markdown.min.js +1 -1
- package/dist/fonts/ch-icon.eot +0 -0
- package/dist/fonts/ch-icon.ttf +0 -0
- package/dist/fonts/ch-icon.woff +0 -0
- package/dist/fonts/ch-icon.woff2 +0 -0
- package/package.json +1 -3
- package/src/Cherry.config.js +0 -634
- package/src/Cherry.js +0 -1104
- package/src/CherryStatic.js +0 -70
- package/src/Editor.js +0 -748
- package/src/Engine.js +0 -402
- package/src/Event.js +0 -140
- package/src/Factory.js +0 -180
- package/src/Logger.js +0 -31
- package/src/Previewer.js +0 -1192
- package/src/Sanitizer.js +0 -4
- package/src/Sanitizer.node.js +0 -7
- package/src/UrlCache.js +0 -98
- package/src/addons/advance/cherry-table-echarts-plugin.js +0 -170
- package/src/addons/cherry-code-block-mermaid-plugin.js +0 -158
- package/src/addons/cherry-code-block-plantuml-plugin.js +0 -106
- package/src/core/HookCenter.js +0 -297
- package/src/core/HooksConfig.js +0 -105
- package/src/core/ParagraphBase.js +0 -332
- package/src/core/SentenceBase.js +0 -65
- package/src/core/SyntaxBase.js +0 -194
- package/src/core/hooks/AutoLink.js +0 -232
- package/src/core/hooks/BackgroundColor.js +0 -46
- package/src/core/hooks/Blockquote.js +0 -70
- package/src/core/hooks/Br.js +0 -85
- package/src/core/hooks/CodeBlock.js +0 -456
- package/src/core/hooks/Color.js +0 -46
- package/src/core/hooks/CommentReference.js +0 -96
- package/src/core/hooks/Detail.js +0 -108
- package/src/core/hooks/Emoji.config.js +0 -1825
- package/src/core/hooks/Emoji.js +0 -119
- package/src/core/hooks/Emphasis.js +0 -113
- package/src/core/hooks/Footnote.js +0 -125
- package/src/core/hooks/FrontMatter.js +0 -51
- package/src/core/hooks/Header.js +0 -234
- package/src/core/hooks/HighLight.js +0 -37
- package/src/core/hooks/Hr.js +0 -52
- package/src/core/hooks/HtmlBlock.js +0 -199
- package/src/core/hooks/Image.js +0 -174
- package/src/core/hooks/InlineCode.js +0 -48
- package/src/core/hooks/InlineMath.js +0 -108
- package/src/core/hooks/Link.js +0 -160
- package/src/core/hooks/List.js +0 -264
- package/src/core/hooks/MathBlock.js +0 -104
- package/src/core/hooks/Panel.js +0 -145
- package/src/core/hooks/Paragraph.js +0 -84
- package/src/core/hooks/Ruby.js +0 -34
- package/src/core/hooks/Size.js +0 -51
- package/src/core/hooks/Strikethrough.js +0 -54
- package/src/core/hooks/Sub.js +0 -47
- package/src/core/hooks/SuggestList.js +0 -333
- package/src/core/hooks/Suggester.js +0 -707
- package/src/core/hooks/Sup.js +0 -47
- package/src/core/hooks/Table.js +0 -275
- package/src/core/hooks/Toc.js +0 -292
- package/src/core/hooks/Transfer.js +0 -47
- package/src/core/hooks/Underline.js +0 -37
- package/src/index.core.js +0 -29
- package/src/index.engine.core.js +0 -68
- package/src/index.engine.js +0 -28
- package/src/index.js +0 -32
- package/src/libs/mermaidAPI.8.4.8.js +0 -1
- package/src/libs/mermaidAPI.8.5.2.js +0 -42
- package/src/libs/rawdeflate.js +0 -1663
- package/src/locales/en_US.js +0 -139
- package/src/locales/index.js +0 -25
- package/src/locales/ru_RU.js +0 -139
- package/src/locales/zh_CN.js +0 -142
- package/src/sass/base.scss +0 -26
- package/src/sass/bubble_formula.scss +0 -166
- package/src/sass/ch-icon.scss +0 -118
- package/src/sass/cherry.scss +0 -1116
- package/src/sass/components/bubble.scss +0 -173
- package/src/sass/components/shortcut_key_config.scss +0 -108
- package/src/sass/formula_utils_bubble.scss +0 -82
- package/src/sass/icon_template.scss +0 -24
- package/src/sass/icons/uEA03-list.svg +0 -19
- package/src/sass/icons/uEA04-check.svg +0 -14
- package/src/sass/icons/uEA09-square.svg +0 -10
- package/src/sass/icons/uEA0A-bold.svg +0 -20
- package/src/sass/icons/uEA0B-code.svg +0 -18
- package/src/sass/icons/uEA0C-color.svg +0 -13
- package/src/sass/icons/uEA0D-header.svg +0 -8
- package/src/sass/icons/uEA0E-image.svg +0 -15
- package/src/sass/icons/uEA0F-italic.svg +0 -8
- package/src/sass/icons/uEA10-link.svg +0 -16
- package/src/sass/icons/uEA11-ol.svg +0 -21
- package/src/sass/icons/uEA12-size.svg +0 -11
- package/src/sass/icons/uEA13-strike.svg +0 -16
- package/src/sass/icons/uEA14-table.svg +0 -12
- package/src/sass/icons/uEA15-ul.svg +0 -17
- package/src/sass/icons/uEA16-underline.svg +0 -13
- package/src/sass/icons/uEA17-word.svg +0 -16
- package/src/sass/icons/uEA18-blockquote.svg +0 -11
- package/src/sass/icons/uEA19-font.svg +0 -10
- package/src/sass/icons/uEA1F-insertClass.svg +0 -39
- package/src/sass/icons/uEA20-insertFlow.svg +0 -8
- package/src/sass/icons/uEA21-insertFormula.svg +0 -23
- package/src/sass/icons/uEA22-insertGantt.svg +0 -13
- package/src/sass/icons/uEA23-insertGraph.svg +0 -13
- package/src/sass/icons/uEA24-insertPie.svg +0 -19
- package/src/sass/icons/uEA25-insertSeq.svg +0 -20
- package/src/sass/icons/uEA26-insertState.svg +0 -35
- package/src/sass/icons/uEA27-line.svg +0 -11
- package/src/sass/icons/uEA28-preview.svg +0 -18
- package/src/sass/icons/uEA29-previewClose.svg +0 -24
- package/src/sass/icons/uEA2A-toc.svg +0 -24
- package/src/sass/icons/uEA2D-sub.svg +0 -15
- package/src/sass/icons/uEA2E-sup.svg +0 -15
- package/src/sass/icons/uEA2F-h1.svg +0 -16
- package/src/sass/icons/uEA30-h2.svg +0 -20
- package/src/sass/icons/uEA31-h3.svg +0 -23
- package/src/sass/icons/uEA32-h4.svg +0 -16
- package/src/sass/icons/uEA33-h5.svg +0 -20
- package/src/sass/icons/uEA34-h6.svg +0 -17
- package/src/sass/icons/uEA35-video.svg +0 -20
- package/src/sass/icons/uEA36-insert.svg +0 -25
- package/src/sass/icons/uEA37-little_table.svg +0 -30
- package/src/sass/icons/uEA38-pdf.svg +0 -27
- package/src/sass/icons/uEA39-checklist.svg +0 -22
- package/src/sass/icons/uEA40-close.svg +0 -12
- package/src/sass/icons/uEA41-fullscreen.svg +0 -81
- package/src/sass/icons/uEA42-minscreen.svg +0 -77
- package/src/sass/icons/uEA43-insertChart.svg +0 -23
- package/src/sass/icons/uEA44-question.svg +0 -25
- package/src/sass/icons/uEA45-settings.svg +0 -32
- package/src/sass/icons/uEA46-ok.svg +0 -7
- package/src/sass/icons/uEA47-br.svg +0 -22
- package/src/sass/icons/uEA48-normal.svg +0 -15
- package/src/sass/icons/uEA49-undo.svg +0 -19
- package/src/sass/icons/uEA50-redo.svg +0 -21
- package/src/sass/icons/uEA51-copy.svg +0 -6
- package/src/sass/icons/uEA52-phone.svg +0 -5
- package/src/sass/icons/uEA53-cherry-table-delete.svg +0 -17
- package/src/sass/icons/uEA54-cherry-table-insert-bottom.svg +0 -16
- package/src/sass/icons/uEA55-cherry-table-insert-left.svg +0 -15
- package/src/sass/icons/uEA56-cherry-table-insert-right.svg +0 -16
- package/src/sass/icons/uEA57-cherry-table-insert-top.svg +0 -16
- package/src/sass/icons/uEA58-sort-s.svg +0 -13
- package/src/sass/icons/uEA59-pinyin.svg +0 -1
- package/src/sass/icons/uEA5A-create.svg +0 -24
- package/src/sass/icons/uEA5B-download.svg +0 -34
- package/src/sass/icons/uEA5C-edit.svg +0 -3
- package/src/sass/icons/uEA5D-export.svg +0 -53
- package/src/sass/icons/uEA5E-folder-open.svg +0 -3
- package/src/sass/icons/uEA5F-folder.svg +0 -3
- package/src/sass/icons/uEA60-help.svg +0 -5
- package/src/sass/icons/uEA61-pen-fill.svg +0 -13
- package/src/sass/icons/uEA62-pen.svg +0 -3
- package/src/sass/icons/uEA64-tips.svg +0 -5
- package/src/sass/icons/uEA65-warn.svg +0 -5
- package/src/sass/icons/uEA66-mistake.svg +0 -4
- package/src/sass/icons/uEA67-success.svg +0 -4
- package/src/sass/icons/uEA68-danger.svg +0 -4
- package/src/sass/icons/uEA69-info.svg +0 -5
- package/src/sass/icons/uEA6A-primary.svg +0 -5
- package/src/sass/icons/uEA6B-warning.svg +0 -5
- package/src/sass/icons/uEA6C-justify.svg +0 -19
- package/src/sass/icons/uEA6D-justifyCenter.svg +0 -19
- package/src/sass/icons/uEA6E-justifyLeft.svg +0 -19
- package/src/sass/icons/uEA6F-justifyRight.svg +0 -19
- package/src/sass/icons/uEA70-chevronsLeft.svg +0 -1
- package/src/sass/icons/uEA71-chevronsRight.svg +0 -1
- package/src/sass/icons/uEA72-trendingUp.svg +0 -1
- package/src/sass/icons/uEA74-codeBlock.svg +0 -1
- package/src/sass/icons/uEA75-expand.svg +0 -3
- package/src/sass/icons/uEA76-unExpand.svg +0 -3
- package/src/sass/icons/uEA77-swap-vert.svg +0 -1
- package/src/sass/icons/uEA78-swap.svg +0 -1
- package/src/sass/icons/uEA79-keyboard.svg +0 -1
- package/src/sass/icons/uEA7A-command.svg +0 -1
- package/src/sass/icons/uEA7B-search.svg +0 -1
- package/src/sass/index.scss +0 -3
- package/src/sass/markdown.scss +0 -668
- package/src/sass/markdown_pure.scss +0 -9
- package/src/sass/prettyprint/prettyprint.scss +0 -118
- package/src/sass/previewer.scss +0 -179
- package/src/sass/print.scss +0 -13
- package/src/sass/prism/coy.scss +0 -220
- package/src/sass/prism/dark.scss +0 -132
- package/src/sass/prism/default.scss +0 -143
- package/src/sass/prism/funky.scss +0 -133
- package/src/sass/prism/okaidia.scss +0 -126
- package/src/sass/prism/one-dark.scss +0 -440
- package/src/sass/prism/one-light.scss +0 -428
- package/src/sass/prism/solarized-light.scss +0 -153
- package/src/sass/prism/tomorrow-night.scss +0 -125
- package/src/sass/prism/twilight.scss +0 -202
- package/src/sass/prism/vs-dark.scss +0 -275
- package/src/sass/prism/vs-light.scss +0 -168
- package/src/sass/themes/blue.scss +0 -411
- package/src/sass/themes/dark.scss +0 -517
- package/src/sass/themes/default.scss +0 -255
- package/src/sass/themes/green.scss +0 -395
- package/src/sass/themes/light.scss +0 -368
- package/src/sass/themes/red.scss +0 -397
- package/src/sass/themes/violet.scss +0 -410
- package/src/sass/variable.scss +0 -84
- package/src/toolbars/Bubble.js +0 -234
- package/src/toolbars/BubbleFormula.js +0 -298
- package/src/toolbars/BubbleTable.js +0 -147
- package/src/toolbars/FloatMenu.js +0 -131
- package/src/toolbars/HiddenToolbar.js +0 -36
- package/src/toolbars/HookCenter.js +0 -231
- package/src/toolbars/MenuBase.js +0 -569
- package/src/toolbars/PreviewerBubble.js +0 -608
- package/src/toolbars/ShortcutKeyConfigPanel.js +0 -345
- package/src/toolbars/Sidebar.js +0 -36
- package/src/toolbars/Toc.js +0 -242
- package/src/toolbars/Toolbar.js +0 -449
- package/src/toolbars/ToolbarRight.js +0 -37
- package/src/toolbars/hooks/Audio.js +0 -79
- package/src/toolbars/hooks/BarTable.js +0 -41
- package/src/toolbars/hooks/Bold.js +0 -73
- package/src/toolbars/hooks/Br.js +0 -34
- package/src/toolbars/hooks/ChangeLocale.js +0 -62
- package/src/toolbars/hooks/ChatGpt.js +0 -182
- package/src/toolbars/hooks/CheckList.js +0 -41
- package/src/toolbars/hooks/Code.js +0 -49
- package/src/toolbars/hooks/CodeTheme.js +0 -66
- package/src/toolbars/hooks/Color.js +0 -298
- package/src/toolbars/hooks/Copy.js +0 -141
- package/src/toolbars/hooks/Detail.js +0 -69
- package/src/toolbars/hooks/DrawIo.js +0 -57
- package/src/toolbars/hooks/Export.js +0 -49
- package/src/toolbars/hooks/File.js +0 -79
- package/src/toolbars/hooks/Formula.js +0 -69
- package/src/toolbars/hooks/FullScreen.js +0 -50
- package/src/toolbars/hooks/Graph.js +0 -263
- package/src/toolbars/hooks/H1.js +0 -71
- package/src/toolbars/hooks/H2.js +0 -71
- package/src/toolbars/hooks/H3.js +0 -71
- package/src/toolbars/hooks/Header.js +0 -118
- package/src/toolbars/hooks/Hr.js +0 -35
- package/src/toolbars/hooks/Image.js +0 -91
- package/src/toolbars/hooks/InlineCode.js +0 -53
- package/src/toolbars/hooks/Insert.js +0 -193
- package/src/toolbars/hooks/Italic.js +0 -72
- package/src/toolbars/hooks/Justify.js +0 -49
- package/src/toolbars/hooks/LineTable.js +0 -41
- package/src/toolbars/hooks/Link.js +0 -49
- package/src/toolbars/hooks/List.js +0 -55
- package/src/toolbars/hooks/MobilePreview.js +0 -44
- package/src/toolbars/hooks/Ol.js +0 -41
- package/src/toolbars/hooks/Panel.js +0 -140
- package/src/toolbars/hooks/Pdf.js +0 -78
- package/src/toolbars/hooks/Publish.js +0 -123
- package/src/toolbars/hooks/QuickTable.js +0 -43
- package/src/toolbars/hooks/Quote.js +0 -45
- package/src/toolbars/hooks/Redo.js +0 -33
- package/src/toolbars/hooks/Ruby.js +0 -59
- package/src/toolbars/hooks/Search.js +0 -53
- package/src/toolbars/hooks/Settings.js +0 -220
- package/src/toolbars/hooks/ShortcutKey.js +0 -62
- package/src/toolbars/hooks/Size.js +0 -118
- package/src/toolbars/hooks/Split.js +0 -37
- package/src/toolbars/hooks/Strikethrough.js +0 -71
- package/src/toolbars/hooks/Sub.js +0 -58
- package/src/toolbars/hooks/Sup.js +0 -58
- package/src/toolbars/hooks/SwitchModel.js +0 -56
- package/src/toolbars/hooks/Table.js +0 -56
- package/src/toolbars/hooks/Theme.js +0 -62
- package/src/toolbars/hooks/Toc.js +0 -35
- package/src/toolbars/hooks/TogglePreview.js +0 -91
- package/src/toolbars/hooks/Ul.js +0 -41
- package/src/toolbars/hooks/Underline.js +0 -68
- package/src/toolbars/hooks/Undo.js +0 -30
- package/src/toolbars/hooks/Video.js +0 -79
- package/src/toolbars/hooks/Word.js +0 -78
- package/src/toolbars/hooks/WordCount.js +0 -106
- package/src/utils/autoindent.js +0 -58
- package/src/utils/cm-search-replace.js +0 -794
- package/src/utils/code-preview-language-setting.js +0 -180
- package/src/utils/codeBlockContentHandler.js +0 -400
- package/src/utils/config.js +0 -174
- package/src/utils/copy.js +0 -55
- package/src/utils/dialog.js +0 -214
- package/src/utils/dom.js +0 -163
- package/src/utils/downloadUtil.js +0 -23
- package/src/utils/env.js +0 -22
- package/src/utils/error.js +0 -61
- package/src/utils/event.js +0 -38
- package/src/utils/export.js +0 -166
- package/src/utils/file.js +0 -164
- package/src/utils/formulaUtilsHandler.js +0 -232
- package/src/utils/htmlparser.js +0 -976
- package/src/utils/image.js +0 -99
- package/src/utils/imgSizeHandler.js +0 -279
- package/src/utils/lazyLoadImg.js +0 -327
- package/src/utils/lineFeed.js +0 -49
- package/src/utils/listContentHandler.js +0 -227
- package/src/utils/lookbehind-replace.js +0 -81
- package/src/utils/mathjax.js +0 -89
- package/src/utils/myersDiff.js +0 -211
- package/src/utils/pasteHelper.js +0 -253
- package/src/utils/platformTransform.js +0 -71
- package/src/utils/recount-pos.js +0 -59
- package/src/utils/regexp.js +0 -295
- package/src/utils/sanitize.js +0 -477
- package/src/utils/selection.js +0 -50
- package/src/utils/shortcutKey.js +0 -291
- package/src/utils/svgUtils.js +0 -96
- package/src/utils/tableContentHandler.js +0 -876
- package/test/core/CommonMark.spec.ts +0 -62
- package/test/core/hooks/AutoLink.spec.ts +0 -28
- package/test/core/hooks/List.spec.ts +0 -79
- package/test/core/hooks/__snapshots__/List.spec.ts.snap +0 -11
- package/test/example.md +0 -778
- package/test/node.js +0 -10
- package/test/suites/commonmark.spec.json +0 -5218
- package/test/tsconfig.test.json +0 -6
- package/test/utils/regexp.spec.ts +0 -28
package/src/utils/shortcutKey.js
DELETED
|
@@ -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
|
-
};
|
package/src/utils/svgUtils.js
DELETED
|
@@ -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
|
-
}
|