@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
|
@@ -1,59 +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
|
-
* 生成ruby,使用场景:给中文增加拼音、给中文增加英文、给英文增加中文等等
|
|
20
|
-
*/
|
|
21
|
-
export default class Ruby extends MenuBase {
|
|
22
|
-
constructor($cherry) {
|
|
23
|
-
super($cherry);
|
|
24
|
-
this.setName('pinyin', 'pinyin');
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
$testIsRuby(selection) {
|
|
28
|
-
return /^\s*\{[\s\S]+\|[\s\S]+\}/.test(selection);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* 响应点击事件
|
|
33
|
-
* @param {string} selection 被用户选中的文本内容
|
|
34
|
-
* @param {string} shortKey 快捷键参数,本函数不处理这个参数
|
|
35
|
-
* @returns {string} 回填到编辑器光标位置/选中文本区域的内容
|
|
36
|
-
*/
|
|
37
|
-
onClick(selection, shortKey = '') {
|
|
38
|
-
let $selection = getSelection(this.editor.editor, selection) || '拼音';
|
|
39
|
-
// 如果选中的文本中已经有ruby语法了,则去掉该语法
|
|
40
|
-
if (!this.isSelections && !this.$testIsRuby($selection)) {
|
|
41
|
-
this.getMoreSelection(' { ', ' } ', () => {
|
|
42
|
-
const newSelection = this.editor.editor.getSelection();
|
|
43
|
-
const isRuby = this.$testIsRuby(newSelection);
|
|
44
|
-
if (isRuby) {
|
|
45
|
-
$selection = newSelection;
|
|
46
|
-
}
|
|
47
|
-
return isRuby;
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
if (this.$testIsRuby($selection)) {
|
|
51
|
-
return $selection.replace(/^\s*\{\s*([\s\S]+?)\s*\|[\s\S]+\}\s*/gm, '$1');
|
|
52
|
-
}
|
|
53
|
-
const pinyin = (this.editor.$cherry.options.callback.changeString2Pinyin($selection) || 'pin yin').trim();
|
|
54
|
-
this.registerAfterClickCb(() => {
|
|
55
|
-
this.setLessSelection(' { ', ' } ');
|
|
56
|
-
});
|
|
57
|
-
return ` { ${$selection} | ${pinyin} } `;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
@@ -1,53 +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 SearchBox from '@/utils/cm-search-replace';
|
|
18
|
-
import { CONTROL_KEY, getKeyCode } from '@/utils/shortcutKey';
|
|
19
|
-
/**
|
|
20
|
-
* 搜索功能
|
|
21
|
-
*/
|
|
22
|
-
export default class Search extends MenuBase {
|
|
23
|
-
constructor($cherry) {
|
|
24
|
-
super($cherry);
|
|
25
|
-
this.setName('search', 'search');
|
|
26
|
-
this.updateMarkdown = false;
|
|
27
|
-
this.shortcutKeyMap = {
|
|
28
|
-
[`${CONTROL_KEY}-${getKeyCode('f')}`]: {
|
|
29
|
-
hookName: this.name,
|
|
30
|
-
aliasName: $cherry.locale[this.name],
|
|
31
|
-
},
|
|
32
|
-
};
|
|
33
|
-
this.searchBox = new SearchBox();
|
|
34
|
-
this.searchBoxInit = false;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* 响应点击事件
|
|
39
|
-
* @param {string} selection 被用户选中的文本内容
|
|
40
|
-
* @param {string} shortKey 快捷键参数,本函数不处理这个参数
|
|
41
|
-
*/
|
|
42
|
-
onClick(selection, shortKey = '') {
|
|
43
|
-
if (!this.searchBoxInit) {
|
|
44
|
-
this.searchBoxInit = true;
|
|
45
|
-
this.searchBox.init(this.$cherry.editor.editor);
|
|
46
|
-
}
|
|
47
|
-
if (this.searchBox.isVisible()) {
|
|
48
|
-
this.searchBox.hide();
|
|
49
|
-
} else {
|
|
50
|
-
this.searchBox.show(selection, true);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
@@ -1,220 +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 { saveIsClassicBrToLocal, getIsClassicBrFromLocal, testKeyInLocal } from '@/utils/config';
|
|
18
|
-
import ShortcutKeyConfigPanel from '@/toolbars/ShortcutKeyConfigPanel';
|
|
19
|
-
import { CONTROL_KEY, getKeyCode, getStorageKeyMap } from '@/utils/shortcutKey';
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* 设置按钮
|
|
23
|
-
*/
|
|
24
|
-
export default class Settings extends MenuBase {
|
|
25
|
-
/**
|
|
26
|
-
* TODO: 需要优化参数传入方式
|
|
27
|
-
*/
|
|
28
|
-
constructor($cherry) {
|
|
29
|
-
super($cherry);
|
|
30
|
-
this.setName('settings', 'settings');
|
|
31
|
-
this.updateMarkdown = false;
|
|
32
|
-
this.engine = $cherry.engine;
|
|
33
|
-
const classicBr = testKeyInLocal('classicBr')
|
|
34
|
-
? getIsClassicBrFromLocal()
|
|
35
|
-
: this.engine.$cherry.options.engine.global?.classicBr;
|
|
36
|
-
const { defaultModel } = $cherry.editor.options;
|
|
37
|
-
const classicBrIconName = classicBr ? 'br' : 'normal';
|
|
38
|
-
const classicBrName = classicBr ? 'classicBr' : 'normalBr';
|
|
39
|
-
const previewIcon = defaultModel === 'editOnly' ? 'preview' : 'previewClose';
|
|
40
|
-
const previewName = defaultModel === 'editOnly' ? 'togglePreview' : 'previewClose';
|
|
41
|
-
this.instanceId = $cherry.instanceId;
|
|
42
|
-
/** @type {import('@/toolbars/MenuBase').SubMenuConfigItem[]} */
|
|
43
|
-
this.subMenuConfig = [
|
|
44
|
-
{ iconName: classicBrIconName, name: classicBrName, onclick: this.bindSubClick.bind(this, 'classicBr') },
|
|
45
|
-
{ iconName: previewIcon, name: previewName, onclick: this.bindSubClick.bind(this, 'previewClose') },
|
|
46
|
-
{ iconName: '', name: 'hide', onclick: this.bindSubClick.bind(this, 'toggleToolbar') },
|
|
47
|
-
];
|
|
48
|
-
this.attachEventListeners();
|
|
49
|
-
this.shortcutKeyMap = {
|
|
50
|
-
[`${CONTROL_KEY}-${getKeyCode('0')}`]: {
|
|
51
|
-
hookName: this.name,
|
|
52
|
-
sub: 'toggleToolbar',
|
|
53
|
-
aliasName: this.$cherry.locale.hide,
|
|
54
|
-
},
|
|
55
|
-
};
|
|
56
|
-
// this.shortcutKeyMaps = [
|
|
57
|
-
// {
|
|
58
|
-
// shortKey: 'toggleToolbar',
|
|
59
|
-
// shortcutKey: 'Ctrl-0',
|
|
60
|
-
// },
|
|
61
|
-
// ];
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* 获取子菜单数组
|
|
66
|
-
* @returns {Array} 返回子菜单
|
|
67
|
-
*/
|
|
68
|
-
getSubMenuConfig() {
|
|
69
|
-
return this.subMenuConfig;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* 监听快捷键,并触发回调
|
|
74
|
-
* @param {string} shortCut 快捷键
|
|
75
|
-
* @param {string} selection 编辑区选中的内容
|
|
76
|
-
* @param {boolean} [async] 是否异步
|
|
77
|
-
* @param {Function} [callback] 回调函数
|
|
78
|
-
* @returns
|
|
79
|
-
*/
|
|
80
|
-
bindSubClick(shortCut, selection, async, callback) {
|
|
81
|
-
if (async) {
|
|
82
|
-
return this.onClick(selection, shortCut, callback);
|
|
83
|
-
}
|
|
84
|
-
return this.onClick(selection, shortCut);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* 切换预览按钮
|
|
89
|
-
* @param {boolean} isOpen 预览模式是否打开
|
|
90
|
-
*/
|
|
91
|
-
togglePreviewBtn(isOpen) {
|
|
92
|
-
const previewIcon = isOpen ? 'previewClose' : 'preview';
|
|
93
|
-
const previewName = isOpen ? 'previewClose' : 'togglePreview';
|
|
94
|
-
if (this.subMenu) {
|
|
95
|
-
const dropdown = document.querySelector('.cherry-dropdown[name="settings"]');
|
|
96
|
-
if (dropdown) {
|
|
97
|
-
const icon = /** @type {HTMLElement} */ (dropdown.querySelector('.ch-icon-previewClose,.ch-icon-preview'));
|
|
98
|
-
icon.classList.toggle('ch-icon-previewClose');
|
|
99
|
-
icon.classList.toggle('ch-icon-preview');
|
|
100
|
-
icon.title = this.locale[previewName];
|
|
101
|
-
icon.parentElement.innerHTML = icon.parentElement.innerHTML.replace(
|
|
102
|
-
/<\/i>.+$/,
|
|
103
|
-
`</i>${this.locale[previewName]}`,
|
|
104
|
-
);
|
|
105
|
-
}
|
|
106
|
-
} else {
|
|
107
|
-
this.subMenuConfig = this.subMenuConfig.map((item) => {
|
|
108
|
-
if (item.iconName === 'previewClose' || item.iconName === 'preview') {
|
|
109
|
-
return { iconName: previewIcon, name: previewName, onclick: this.bindSubClick.bind(this, 'previewClose') };
|
|
110
|
-
}
|
|
111
|
-
return item;
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* 绑定预览事件
|
|
118
|
-
*/
|
|
119
|
-
attachEventListeners() {
|
|
120
|
-
this.$cherry.$event.on('previewerClose', () => {
|
|
121
|
-
this.togglePreviewBtn(false);
|
|
122
|
-
});
|
|
123
|
-
this.$cherry.$event.on('previewerOpen', () => {
|
|
124
|
-
this.togglePreviewBtn(true);
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
/**
|
|
129
|
-
* 响应点击事件
|
|
130
|
-
* @param {string} selection 编辑区选中的内容
|
|
131
|
-
* @param {string} shortKey 快捷键
|
|
132
|
-
* @param {Function} [callback] 回调函数
|
|
133
|
-
* @returns
|
|
134
|
-
*/
|
|
135
|
-
onClick(selection, shortKey = '', callback) {
|
|
136
|
-
// eslint-disable-next-line no-param-reassign
|
|
137
|
-
shortKey = this.matchShortcutKey(shortKey);
|
|
138
|
-
if (shortKey === 'classicBr') {
|
|
139
|
-
const targetIsClassicBr = !getIsClassicBrFromLocal();
|
|
140
|
-
saveIsClassicBrToLocal(targetIsClassicBr);
|
|
141
|
-
this.engine.$cherry.options.engine.global.classicBr = targetIsClassicBr;
|
|
142
|
-
this.engine.hookCenter.hookList.paragraph.forEach((item) => {
|
|
143
|
-
item.classicBr = targetIsClassicBr;
|
|
144
|
-
});
|
|
145
|
-
|
|
146
|
-
let i = this.$cherry.wrapperDom.querySelector('.cherry-dropdown .ch-icon-normal');
|
|
147
|
-
i = i ? i : this.$cherry.wrapperDom.querySelector('.cherry-dropdown .ch-icon-br');
|
|
148
|
-
if (targetIsClassicBr) {
|
|
149
|
-
i.classList.replace('ch-icon-normal', 'ch-icon-br');
|
|
150
|
-
i.parentElement.childNodes[1].textContent = this.locale.classicBr;
|
|
151
|
-
} else {
|
|
152
|
-
i.classList.replace('ch-icon-br', 'ch-icon-normal');
|
|
153
|
-
i.parentElement.childNodes[1].textContent = this.locale.normalBr;
|
|
154
|
-
}
|
|
155
|
-
this.engine.$cherry.previewer.update('');
|
|
156
|
-
this.engine.$cherry.initText(this.engine.$cherry.editor.editor);
|
|
157
|
-
} else if (shortKey === 'previewClose') {
|
|
158
|
-
// 需要浮动预览
|
|
159
|
-
if (this.editor.previewer.isPreviewerNeedFloat()) {
|
|
160
|
-
// 正在浮动预览
|
|
161
|
-
if (this.editor.previewer.isPreviewerFloat()) {
|
|
162
|
-
this.editor.previewer.recoverFloatPreviewer(true);
|
|
163
|
-
} else {
|
|
164
|
-
this.editor.previewer.floatPreviewer();
|
|
165
|
-
}
|
|
166
|
-
return;
|
|
167
|
-
}
|
|
168
|
-
if (this.editor.previewer.isPreviewerHidden()) {
|
|
169
|
-
this.editor.previewer.recoverPreviewer(true);
|
|
170
|
-
} else {
|
|
171
|
-
this.editor.previewer.editOnly(true);
|
|
172
|
-
}
|
|
173
|
-
} else if (shortKey === 'toggleToolbar') {
|
|
174
|
-
this.toggleToolbar();
|
|
175
|
-
} else if (shortKey === 'shortcutKey') {
|
|
176
|
-
if (!this.shortcutKeyConfigPanel) {
|
|
177
|
-
this.shortcutKeyConfigPanel = new ShortcutKeyConfigPanel(this.engine.$cherry);
|
|
178
|
-
}
|
|
179
|
-
const subMenuDropdownDom = this.engine?.$cherry?.toolbar?.subMenus?.[this.name];
|
|
180
|
-
if (subMenuDropdownDom instanceof HTMLElement) {
|
|
181
|
-
subMenuDropdownDom.style.display = 'none';
|
|
182
|
-
}
|
|
183
|
-
this.shortcutKeyConfigPanel.toggle(this.dom);
|
|
184
|
-
}
|
|
185
|
-
return selection;
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
/**
|
|
189
|
-
* 解析快捷键
|
|
190
|
-
* @param {string} shortcutKey 快捷键
|
|
191
|
-
* @returns
|
|
192
|
-
*/
|
|
193
|
-
matchShortcutKey(shortcutKey) {
|
|
194
|
-
// 处理 bindSubClick 事件
|
|
195
|
-
const shortcutConfig = Object.values(this.shortcutKeyMap).find(({ sub }) => sub === shortcutKey);
|
|
196
|
-
if (typeof shortcutConfig === 'undefined') {
|
|
197
|
-
// 尝试找快捷键
|
|
198
|
-
const storageKeyMap = getStorageKeyMap(this.$cherry.nameSpace);
|
|
199
|
-
const storageShortcutConfig = storageKeyMap?.[shortcutKey];
|
|
200
|
-
return storageShortcutConfig ? String(storageShortcutConfig.sub) : shortcutKey;
|
|
201
|
-
}
|
|
202
|
-
return shortcutConfig.sub;
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
/**
|
|
206
|
-
* 切换Toolbar显示状态
|
|
207
|
-
*/
|
|
208
|
-
toggleToolbar() {
|
|
209
|
-
const { wrapperDom } = this.engine.$cherry;
|
|
210
|
-
if (wrapperDom instanceof HTMLDivElement) {
|
|
211
|
-
if (wrapperDom.className.indexOf('cherry--no-toolbar') > -1) {
|
|
212
|
-
wrapperDom.classList.remove('cherry--no-toolbar');
|
|
213
|
-
this.$cherry.$event.emit('toolbarShow');
|
|
214
|
-
} else {
|
|
215
|
-
wrapperDom.classList.add('cherry--no-toolbar');
|
|
216
|
-
this.$cherry.$event.emit('toolbarHide');
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
}
|
|
@@ -1,62 +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 ShortcutKeyConfigPanel from '@/toolbars/ShortcutKeyConfigPanel';
|
|
18
|
-
import { CONTROL_KEY, getKeyCode } from '@/utils/shortcutKey';
|
|
19
|
-
/**
|
|
20
|
-
* 快捷键配置
|
|
21
|
-
*/
|
|
22
|
-
export default class ShortcutKey extends MenuBase {
|
|
23
|
-
constructor($cherry) {
|
|
24
|
-
super($cherry);
|
|
25
|
-
this.setName('shortcutKeySetting', 'command');
|
|
26
|
-
this.updateMarkdown = false;
|
|
27
|
-
this.disabledHideAllSubMenu = true;
|
|
28
|
-
this.shortcutKeyMap = {
|
|
29
|
-
[`${CONTROL_KEY}-${getKeyCode('0')}`]: {
|
|
30
|
-
hookName: this.name,
|
|
31
|
-
sub: 'toggleToolbar',
|
|
32
|
-
aliasName: this.$cherry.locale.hide,
|
|
33
|
-
},
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
hideOtherSubMenu(hideAllSubMenu) {
|
|
38
|
-
if (!this.shortcutKeyConfigPanel) {
|
|
39
|
-
return hideAllSubMenu();
|
|
40
|
-
}
|
|
41
|
-
const lastDisplay = this.shortcutKeyConfigPanel.isHide();
|
|
42
|
-
hideAllSubMenu();
|
|
43
|
-
if (lastDisplay) {
|
|
44
|
-
this.shortcutKeyConfigPanel.hide();
|
|
45
|
-
} else {
|
|
46
|
-
this.shortcutKeyConfigPanel.show();
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* 响应点击事件
|
|
52
|
-
* @param {string} selection 被用户选中的文本内容
|
|
53
|
-
* @param {string} shortKey 快捷键参数,本函数不处理这个参数
|
|
54
|
-
*/
|
|
55
|
-
onClick(selection, shortKey = '') {
|
|
56
|
-
if (!this.shortcutKeyConfigPanel) {
|
|
57
|
-
this.shortcutKeyConfigPanel = new ShortcutKeyConfigPanel(this.$cherry);
|
|
58
|
-
}
|
|
59
|
-
this.shortcutKeyConfigPanel.toggle(this.dom);
|
|
60
|
-
return selection;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
@@ -1,118 +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 { ALT_KEY, getKeyCode } from '@/utils/shortcutKey';
|
|
19
|
-
|
|
20
|
-
export default class Size extends MenuBase {
|
|
21
|
-
/**
|
|
22
|
-
* @param {import('@/toolbars/MenuBase').MenuBaseConstructorParams} $cherry
|
|
23
|
-
*/
|
|
24
|
-
constructor($cherry) {
|
|
25
|
-
super($cherry);
|
|
26
|
-
this.setName('size', 'size');
|
|
27
|
-
this.subMenuConfig = [
|
|
28
|
-
{ name: this.$cherry.locale.small, noIcon: true, onclick: this.bindSubClick.bind(this, '12') },
|
|
29
|
-
{ name: this.$cherry.locale.medium, noIcon: true, onclick: this.bindSubClick.bind(this, '17') },
|
|
30
|
-
{ name: this.$cherry.locale.large, noIcon: true, onclick: this.bindSubClick.bind(this, '24') },
|
|
31
|
-
{ name: this.$cherry.locale.superLarge, noIcon: true, onclick: this.bindSubClick.bind(this, '32') },
|
|
32
|
-
];
|
|
33
|
-
this.shortKeyMap = {
|
|
34
|
-
'Alt-1': '12',
|
|
35
|
-
'Alt-2': '17',
|
|
36
|
-
'Alt-3': '24',
|
|
37
|
-
'Alt-4': '32',
|
|
38
|
-
};
|
|
39
|
-
this.shortcutKeyMap = {
|
|
40
|
-
[`${ALT_KEY}-${getKeyCode(1)}`]: {
|
|
41
|
-
hookName: this.name,
|
|
42
|
-
aliasName: `${this.$cherry.locale[this.name]}-${this.$cherry.locale.small}`,
|
|
43
|
-
},
|
|
44
|
-
[`${ALT_KEY}-${getKeyCode(2)}`]: {
|
|
45
|
-
hookName: this.name,
|
|
46
|
-
aliasName: `${this.$cherry.locale[this.name]}-${this.$cherry.locale.medium}`,
|
|
47
|
-
},
|
|
48
|
-
[`${ALT_KEY}-${getKeyCode(3)}`]: {
|
|
49
|
-
hookName: this.name,
|
|
50
|
-
aliasName: `${this.$cherry.locale[this.name]}-${this.$cherry.locale.large}`,
|
|
51
|
-
},
|
|
52
|
-
[`${ALT_KEY}-${getKeyCode(4)}`]: {
|
|
53
|
-
hookName: this.name,
|
|
54
|
-
aliasName: `${this.$cherry.locale[this.name]}-${this.$cherry.locale.superLarge}`,
|
|
55
|
-
},
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
getSubMenuConfig() {
|
|
60
|
-
return this.subMenuConfig;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
_getFlagStr(shortKey) {
|
|
64
|
-
const test = shortKey.replace(/[^0-9]+([0-9])/g, '$1');
|
|
65
|
-
let header = '#';
|
|
66
|
-
for (let i = 1; i < test; i++) {
|
|
67
|
-
header += '#';
|
|
68
|
-
}
|
|
69
|
-
return header;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
$testIsSize(selection) {
|
|
73
|
-
return /^\s*(![0-9]+) [\s\S]+!/.test(selection);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
$getSizeByShortKey(shortKey) {
|
|
77
|
-
if (/^[0-9]+$/.test(shortKey)) {
|
|
78
|
-
return shortKey;
|
|
79
|
-
}
|
|
80
|
-
return this.shortKeyMap[shortKey] || '17';
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
onClick(selection, shortKey = '17') {
|
|
84
|
-
const size = this.$getSizeByShortKey(shortKey);
|
|
85
|
-
let $selection = getSelection(this.editor.editor, selection) || '字号';
|
|
86
|
-
// 如果选中的内容里有字号语法,则直接去掉该语法
|
|
87
|
-
if (!this.isSelections && !this.$testIsSize($selection)) {
|
|
88
|
-
this.getMoreSelection('!32 ', '!', () => {
|
|
89
|
-
const newSelection = this.editor.editor.getSelection();
|
|
90
|
-
if (this.$testIsSize(newSelection)) {
|
|
91
|
-
$selection = newSelection;
|
|
92
|
-
return true;
|
|
93
|
-
}
|
|
94
|
-
return false;
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
if (this.$testIsSize($selection)) {
|
|
98
|
-
// 如果选中的内容里有字号语法,并且字号与目标一致,则去掉字号语法
|
|
99
|
-
// 反之,修改字号与目标一致
|
|
100
|
-
let needClean = true;
|
|
101
|
-
const tmp = $selection.replace(/(^)(\s*)(![0-9]+)([^\n]+)(!)(\s*)($)/gm, (w, m1, m2, m3, m4, m5, m6, m7) => {
|
|
102
|
-
needClean = needClean ? m3 === `!${size}` : false;
|
|
103
|
-
return `${m1}${m2}!${size}${m4}${m5}${m6}${m7}`;
|
|
104
|
-
});
|
|
105
|
-
if (needClean) {
|
|
106
|
-
return $selection.replace(/(^)(\s*)(![0-9]+\s*)([^\n]+)(!)(\s*)($)/gm, '$1$4$7');
|
|
107
|
-
}
|
|
108
|
-
this.registerAfterClickCb(() => {
|
|
109
|
-
this.setLessSelection(`!${size} `, '!');
|
|
110
|
-
});
|
|
111
|
-
return tmp;
|
|
112
|
-
}
|
|
113
|
-
this.registerAfterClickCb(() => {
|
|
114
|
-
this.setLessSelection(`!${size} `, '!');
|
|
115
|
-
});
|
|
116
|
-
return $selection.replace(/(^)([^\n]+)($)/gm, `$1!${size} $2!$3`);
|
|
117
|
-
}
|
|
118
|
-
}
|
|
@@ -1,37 +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
|
-
*/
|
|
21
|
-
export default class Split extends MenuBase {
|
|
22
|
-
constructor($cherry) {
|
|
23
|
-
super($cherry);
|
|
24
|
-
this.setName('split', '|');
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* 重载创建按钮逻辑
|
|
29
|
-
* @returns {HTMLElement} 分割线标签
|
|
30
|
-
*/
|
|
31
|
-
createBtn() {
|
|
32
|
-
const className = 'cherry-toolbar-button cherry-toolbar-split';
|
|
33
|
-
const i = document.createElement('i');
|
|
34
|
-
i.className = className;
|
|
35
|
-
return i;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
@@ -1,71 +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 { CONTROL_KEY, getKeyCode } from '@/utils/shortcutKey';
|
|
19
|
-
/**
|
|
20
|
-
* 删除线的按钮
|
|
21
|
-
*/
|
|
22
|
-
export default class Strikethrough extends MenuBase {
|
|
23
|
-
/**
|
|
24
|
-
* @param {import('@/toolbars/MenuBase').MenuBaseConstructorParams} $cherry
|
|
25
|
-
*/
|
|
26
|
-
constructor($cherry) {
|
|
27
|
-
super($cherry);
|
|
28
|
-
this.setName('strikethrough', 'strike');
|
|
29
|
-
this.shortcutKeyMap = {
|
|
30
|
-
[`${CONTROL_KEY}-${getKeyCode('d')}`]: {
|
|
31
|
-
hookName: this.name,
|
|
32
|
-
aliasName: this.$cherry.locale[this.name],
|
|
33
|
-
},
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
$testIsStrike(selection) {
|
|
38
|
-
return /(~~)[\s\S]+(\1)/.test(selection);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
*
|
|
43
|
-
* @param {string} selection 被用户选中的文本内容
|
|
44
|
-
* @param {string} shortKey 快捷键参数,本函数不处理这个参数
|
|
45
|
-
* @returns {string} 回填到编辑器光标位置/选中文本区域的内容
|
|
46
|
-
*/
|
|
47
|
-
onClick(selection, shortKey = '') {
|
|
48
|
-
let $selection = getSelection(this.editor.editor, selection) || this.locale.strikethrough;
|
|
49
|
-
// @ts-ignore
|
|
50
|
-
const needWhitespace = this.$cherry?.options?.engine?.syntax?.strikethrough?.needWhitespace;
|
|
51
|
-
const space = needWhitespace ? ' ' : '';
|
|
52
|
-
// 如果被选中的文本中包含删除线语法,则去掉删除线语法
|
|
53
|
-
if (!this.isSelections && !this.$testIsStrike($selection)) {
|
|
54
|
-
this.getMoreSelection(`${space}~~`, `~~${space}`, () => {
|
|
55
|
-
const newSelection = this.editor.editor.getSelection();
|
|
56
|
-
const isStrike = this.$testIsStrike(newSelection);
|
|
57
|
-
if (isStrike) {
|
|
58
|
-
$selection = newSelection;
|
|
59
|
-
}
|
|
60
|
-
return isStrike;
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
if (this.$testIsStrike($selection)) {
|
|
64
|
-
return selection.replace(/[\s]*(~~)([\s\S]+)(\1)[\s]*/g, '$2');
|
|
65
|
-
}
|
|
66
|
-
this.registerAfterClickCb(() => {
|
|
67
|
-
this.setLessSelection(`${space}~~`, `~~${space}`);
|
|
68
|
-
});
|
|
69
|
-
return $selection.replace(/(^)[\s]*([\s\S]+?)[\s]*($)/g, `$1${space}~~$2~~${space}$3`);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
@@ -1,58 +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 Sub extends MenuBase {
|
|
22
|
-
constructor($cherry) {
|
|
23
|
-
super($cherry);
|
|
24
|
-
this.setName('sub', 'sub');
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
$testIsSub(selection) {
|
|
28
|
-
return /^\s*(\^\^)[\s\S]+(\1)/.test(selection);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
*
|
|
33
|
-
* @param {string} selection 被用户选中的文本内容
|
|
34
|
-
* @param {string} shortKey 快捷键参数,本函数不处理这个参数
|
|
35
|
-
* @returns {string} 回填到编辑器光标位置/选中文本区域的内容
|
|
36
|
-
*/
|
|
37
|
-
onClick(selection, shortKey = '') {
|
|
38
|
-
let $selection = getSelection(this.editor.editor, selection) || this.locale.sub;
|
|
39
|
-
// 如果选中的内容里有下标的语法,则认为是要去掉下标语法
|
|
40
|
-
if (!this.isSelections && !this.$testIsSub($selection)) {
|
|
41
|
-
this.getMoreSelection('^^', '^^', () => {
|
|
42
|
-
const newSelection = this.editor.editor.getSelection();
|
|
43
|
-
const isSub = this.$testIsSub(newSelection);
|
|
44
|
-
if (isSub) {
|
|
45
|
-
$selection = newSelection;
|
|
46
|
-
}
|
|
47
|
-
return isSub;
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
if (this.$testIsSub($selection)) {
|
|
51
|
-
return $selection.replace(/(^)(\s*)(\^\^)([^\n]+)(\3)(\s*)($)/gm, '$1$4$7');
|
|
52
|
-
}
|
|
53
|
-
this.registerAfterClickCb(() => {
|
|
54
|
-
this.setLessSelection('^^', '^^');
|
|
55
|
-
});
|
|
56
|
-
return $selection.replace(/(^)([^\n]+)($)/gm, '$1^^$2^^$3');
|
|
57
|
-
}
|
|
58
|
-
}
|