@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,69 +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 BubbleFormula from '../BubbleFormula';
|
|
18
|
-
import { CONTROL_KEY, getKeyCode } from '@/utils/shortcutKey';
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* 插入行内公式
|
|
22
|
-
* @see https://github.com/QianJianTech/LaTeXLive/blob/master/README.md
|
|
23
|
-
*/
|
|
24
|
-
export default class Formula extends MenuBase {
|
|
25
|
-
/**
|
|
26
|
-
* @param {import('@/toolbars/MenuBase').MenuBaseConstructorParams} $cherry
|
|
27
|
-
*/
|
|
28
|
-
constructor($cherry) {
|
|
29
|
-
super($cherry);
|
|
30
|
-
this.setName('formula', 'insertFormula');
|
|
31
|
-
this.subBubbleFormulaMenu = new BubbleFormula($cherry?.options?.toolbars?.config?.formula);
|
|
32
|
-
$cherry.editor.options.wrapperDom.appendChild(this.subBubbleFormulaMenu.dom);
|
|
33
|
-
this.catchOnce = '';
|
|
34
|
-
this.shortcutKeyMap = {
|
|
35
|
-
[`${CONTROL_KEY}-${getKeyCode('m')}`]: {
|
|
36
|
-
hookName: this.name,
|
|
37
|
-
aliasName: this.$cherry.locale[this.name],
|
|
38
|
-
},
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* 响应点击事件
|
|
44
|
-
* @param {string} selection 被用户选中的文本内容
|
|
45
|
-
* @returns {boolean} 回填到编辑器光标位置/选中文本区域的内容
|
|
46
|
-
*/
|
|
47
|
-
onClick(selection, shortKey = '') {
|
|
48
|
-
if (this.subBubbleFormulaMenu.isHide() || !this.hasCacheOnce()) {
|
|
49
|
-
const pos = this.dom.getBoundingClientRect();
|
|
50
|
-
this.subBubbleFormulaMenu.dom.style.left = `${pos.left + pos.width}px`;
|
|
51
|
-
this.subBubbleFormulaMenu.dom.style.top = `${pos.top + pos.height}px`;
|
|
52
|
-
this.subBubbleFormulaMenu.show((latex) => {
|
|
53
|
-
const before = /\n/.test(latex)
|
|
54
|
-
? `${/\n$/.test(selection) ? selection : `${selection}\n`}$$`
|
|
55
|
-
: `${selection} $ `;
|
|
56
|
-
const after = /\n/.test(latex) ? '\n$$ ' : ' $ ';
|
|
57
|
-
this.registerAfterClickCb(() => {
|
|
58
|
-
this.setLessSelection(before, after);
|
|
59
|
-
});
|
|
60
|
-
const final = `${before}${latex}${after}`;
|
|
61
|
-
this.setCacheOnce(final);
|
|
62
|
-
this.fire(null);
|
|
63
|
-
});
|
|
64
|
-
this.updateMarkdown = false;
|
|
65
|
-
return false;
|
|
66
|
-
}
|
|
67
|
-
return this.getAndCleanCacheOnce();
|
|
68
|
-
}
|
|
69
|
-
}
|
|
@@ -1,50 +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 { createElement } from '@/utils/dom';
|
|
18
|
-
/**
|
|
19
|
-
* 全屏按钮
|
|
20
|
-
*/
|
|
21
|
-
export default class FullScreen extends MenuBase {
|
|
22
|
-
constructor($cherry) {
|
|
23
|
-
super($cherry);
|
|
24
|
-
this.updateMarkdown = false;
|
|
25
|
-
this.setName('fullScreen', 'fullscreen');
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* 响应点击事件
|
|
30
|
-
*/
|
|
31
|
-
onClick() {
|
|
32
|
-
const cherryClass = this.editor.options.editorDom.parentElement.classList;
|
|
33
|
-
const cherryToolbarFullscreen = document.querySelector('.cherry-toolbar-fullscreen');
|
|
34
|
-
while (cherryToolbarFullscreen && cherryToolbarFullscreen.firstChild) {
|
|
35
|
-
// 循环删除父元素下的第一个子元素,直到父元素下没有子元素
|
|
36
|
-
cherryToolbarFullscreen.removeChild(cherryToolbarFullscreen.firstChild);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
if (cherryClass.contains('fullscreen')) {
|
|
40
|
-
const fullScreen = createElement('i', 'ch-icon ch-icon-fullscreen');
|
|
41
|
-
cherryToolbarFullscreen && cherryToolbarFullscreen.appendChild(fullScreen);
|
|
42
|
-
cherryClass.remove('fullscreen');
|
|
43
|
-
} else {
|
|
44
|
-
const minScreen = createElement('i', 'ch-icon ch-icon-minscreen');
|
|
45
|
-
cherryToolbarFullscreen && cherryToolbarFullscreen.appendChild(minScreen);
|
|
46
|
-
cherryClass.add('fullscreen');
|
|
47
|
-
}
|
|
48
|
-
this.editor.editor.refresh();
|
|
49
|
-
}
|
|
50
|
-
}
|
|
@@ -1,263 +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
|
-
function generateExample(title, mermaidCode) {
|
|
19
|
-
return [title, '```mermaid', mermaidCode, '```'].join('\n');
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
const flowChartContent = [
|
|
23
|
-
'\tA[公司] -->| 下 班 | B(菜市场)',
|
|
24
|
-
'\tB --> C{看见<br>卖西瓜的}',
|
|
25
|
-
'\tC -->|Yes| D[买一个包子]',
|
|
26
|
-
'\tC -->|No| E[买一斤包子]',
|
|
27
|
-
].join('\n');
|
|
28
|
-
|
|
29
|
-
const flowChartContentEn = [
|
|
30
|
-
'\tA[Company] -->| Finish work | B(Grocery Store)',
|
|
31
|
-
'\tB --> C{See<br>Watermelon Seller}',
|
|
32
|
-
'\tC -->|Yes| D[Buy a bun]',
|
|
33
|
-
'\tC -->|No| E[Buy a kilogram of buns]',
|
|
34
|
-
].join('\n');
|
|
35
|
-
|
|
36
|
-
const sample = {
|
|
37
|
-
flow: [
|
|
38
|
-
'FlowChart',
|
|
39
|
-
generateExample('左右结构', `graph LR\n${flowChartContent}`),
|
|
40
|
-
generateExample('上下结构', `graph TD\n${flowChartContent}`),
|
|
41
|
-
].join('\n'),
|
|
42
|
-
sequence: generateExample(
|
|
43
|
-
'SequenceDiagram',
|
|
44
|
-
[
|
|
45
|
-
'sequenceDiagram',
|
|
46
|
-
'autonumber',
|
|
47
|
-
'A-->A: 文本1',
|
|
48
|
-
'A->>B: 文本2',
|
|
49
|
-
'loop 循环1',
|
|
50
|
-
'loop 循环2',
|
|
51
|
-
'A->B: 文本3',
|
|
52
|
-
'end',
|
|
53
|
-
'loop 循环3',
|
|
54
|
-
'B -->>A: 文本4',
|
|
55
|
-
'end',
|
|
56
|
-
'B -->> B: 文本5',
|
|
57
|
-
'end',
|
|
58
|
-
].join('\n'),
|
|
59
|
-
),
|
|
60
|
-
state: generateExample(
|
|
61
|
-
'StateDiagram',
|
|
62
|
-
[
|
|
63
|
-
'stateDiagram-v2',
|
|
64
|
-
'[*] --> A',
|
|
65
|
-
'A --> B',
|
|
66
|
-
'A --> C',
|
|
67
|
-
'state A {',
|
|
68
|
-
' \t[*] --> D',
|
|
69
|
-
' \tD --> [*]',
|
|
70
|
-
'}',
|
|
71
|
-
'B --> [*]',
|
|
72
|
-
'C --> [*]',
|
|
73
|
-
].join('\n'),
|
|
74
|
-
),
|
|
75
|
-
class: generateExample(
|
|
76
|
-
'ClassDiagram',
|
|
77
|
-
[
|
|
78
|
-
'classDiagram',
|
|
79
|
-
'Base <|-- One',
|
|
80
|
-
'Base <|-- Two',
|
|
81
|
-
'Base : +String name',
|
|
82
|
-
'Base: +getName()',
|
|
83
|
-
'Base: +setName(String name)',
|
|
84
|
-
'class One{',
|
|
85
|
-
' \t+String newName',
|
|
86
|
-
' \t+getNewName()',
|
|
87
|
-
'}',
|
|
88
|
-
'class Two{',
|
|
89
|
-
' \t-int id',
|
|
90
|
-
' \t-getId()',
|
|
91
|
-
'}',
|
|
92
|
-
].join('\n'),
|
|
93
|
-
),
|
|
94
|
-
pie: generateExample('PieChart', ['pie', 'title 饼图', '"A" : 100', '"B" : 80', '"C" : 40', '"D" : 30'].join('\n')),
|
|
95
|
-
gantt: generateExample(
|
|
96
|
-
'GanttChart',
|
|
97
|
-
[
|
|
98
|
-
'gantt',
|
|
99
|
-
'\ttitle 敏捷研发流程',
|
|
100
|
-
'\tsection 迭代前',
|
|
101
|
-
'\t\t交互设计 :a1, 2020-03-01, 4d',
|
|
102
|
-
'\t\tUI设计 :after a1, 5d',
|
|
103
|
-
'\t\t需求评审 : 1d',
|
|
104
|
-
'\tsection 迭代中',
|
|
105
|
-
'\t\t详细设计 :a2, 2020-03-11, 2d',
|
|
106
|
-
'\t\t开发 :2020-03-15, 7d',
|
|
107
|
-
'\t\t测试 :2020-03-22, 5d',
|
|
108
|
-
'\tsection 迭代后',
|
|
109
|
-
'\t\t发布: 1d',
|
|
110
|
-
'\t\t验收: 2d',
|
|
111
|
-
'\t\t回顾: 1d',
|
|
112
|
-
].join('\n'),
|
|
113
|
-
),
|
|
114
|
-
};
|
|
115
|
-
|
|
116
|
-
// 英文例子
|
|
117
|
-
const sampleEn = {
|
|
118
|
-
flow: [
|
|
119
|
-
'FlowChart',
|
|
120
|
-
generateExample('Left-right structure', `graph LR\n${flowChartContentEn}`),
|
|
121
|
-
generateExample('Top-bottom structure', `graph TD\n${flowChartContentEn}`),
|
|
122
|
-
].join('\n'),
|
|
123
|
-
sequence: generateExample(
|
|
124
|
-
'SequenceDiagram',
|
|
125
|
-
[
|
|
126
|
-
'sequenceDiagram',
|
|
127
|
-
'autonumber',
|
|
128
|
-
'A-->A: text1',
|
|
129
|
-
'A->>B: text2',
|
|
130
|
-
'loop loop1',
|
|
131
|
-
'loop loop2',
|
|
132
|
-
'A->B: text3',
|
|
133
|
-
'end',
|
|
134
|
-
'loop loop3',
|
|
135
|
-
'B -->>A: text4',
|
|
136
|
-
'end',
|
|
137
|
-
'B -->> B: text5',
|
|
138
|
-
'end',
|
|
139
|
-
].join('\n'),
|
|
140
|
-
),
|
|
141
|
-
state: generateExample(
|
|
142
|
-
'StateDiagram',
|
|
143
|
-
[
|
|
144
|
-
'stateDiagram-v2',
|
|
145
|
-
'[*] --> A',
|
|
146
|
-
'A --> B',
|
|
147
|
-
'A --> C',
|
|
148
|
-
'state A {',
|
|
149
|
-
' \t[*] --> D',
|
|
150
|
-
' \tD --> [*]',
|
|
151
|
-
'}',
|
|
152
|
-
'B --> [*]',
|
|
153
|
-
'C --> [*]',
|
|
154
|
-
].join('\n'),
|
|
155
|
-
),
|
|
156
|
-
class: generateExample(
|
|
157
|
-
'ClassDiagram',
|
|
158
|
-
[
|
|
159
|
-
'classDiagram',
|
|
160
|
-
'Base <|-- One',
|
|
161
|
-
'Base <|-- Two',
|
|
162
|
-
'Base : +String name',
|
|
163
|
-
'Base: +getName()',
|
|
164
|
-
'Base: +setName(String name)',
|
|
165
|
-
'class One{',
|
|
166
|
-
' \t+String newName',
|
|
167
|
-
' \t+getNewName()',
|
|
168
|
-
'}',
|
|
169
|
-
'class Two{',
|
|
170
|
-
' \t-int id',
|
|
171
|
-
' \t-getId()',
|
|
172
|
-
'}',
|
|
173
|
-
].join('\n'),
|
|
174
|
-
),
|
|
175
|
-
pie: generateExample('PieChart', ['pie', 'title pie', '"A" : 100', '"B" : 80', '"C" : 40', '"D" : 30'].join('\n')),
|
|
176
|
-
gantt: generateExample(
|
|
177
|
-
'GanttChart',
|
|
178
|
-
[
|
|
179
|
-
'gantt',
|
|
180
|
-
'\ttitle work',
|
|
181
|
-
'\tsection session 1',
|
|
182
|
-
'\t\twork1 :a1, 2020-03-01, 4d',
|
|
183
|
-
'\t\twork2 :after a1, 5d',
|
|
184
|
-
'\t\twork3 : 1d',
|
|
185
|
-
'\tsection session 2',
|
|
186
|
-
'\t\twork4 :a2, 2020-03-11, 2d',
|
|
187
|
-
'\t\twork5 :2020-03-15, 7d',
|
|
188
|
-
'\t\twork6 :2020-03-22, 5d',
|
|
189
|
-
'\tsection session 3',
|
|
190
|
-
'\t\twork7: 1d',
|
|
191
|
-
'\t\twork8: 2d',
|
|
192
|
-
'\t\twork9: 1d',
|
|
193
|
-
].join('\n'),
|
|
194
|
-
),
|
|
195
|
-
};
|
|
196
|
-
|
|
197
|
-
/**
|
|
198
|
-
* 插入“画图”的按钮
|
|
199
|
-
* 本功能依赖[Mermaid.js](https://mermaid-js.github.io)组件,请保证调用CherryMarkdown前已加载mermaid.js组件
|
|
200
|
-
*/
|
|
201
|
-
export default class Graph extends MenuBase {
|
|
202
|
-
constructor($cherry) {
|
|
203
|
-
super($cherry);
|
|
204
|
-
this.setName('graph', 'insertChart');
|
|
205
|
-
this.noIcon = true;
|
|
206
|
-
this.localeName = $cherry.options.locale;
|
|
207
|
-
this.subMenuConfig = [
|
|
208
|
-
// 流程图
|
|
209
|
-
// 访问[Mermaid 流程图](https://mermaid-js.github.io/mermaid/#/flowchart)参考具体使用方法。
|
|
210
|
-
{ iconName: 'insertFlow', name: 'insertFlow', onclick: this.bindSubClick.bind(this, '1') },
|
|
211
|
-
// 时序图
|
|
212
|
-
// 访问[Mermaid 时序图](https://mermaid-js.github.io/mermaid/#/sequenceDiagram)参考具体使用方法
|
|
213
|
-
{ iconName: 'insertSeq', name: 'insertSeq', onclick: this.bindSubClick.bind(this, '2') },
|
|
214
|
-
// 状态图
|
|
215
|
-
// 访问[Mermaid 状态图](https://mermaid-js.github.io/mermaid/#/stateDiagram)参考具体使用方法
|
|
216
|
-
{ iconName: 'insertState', name: 'insertState', onclick: this.bindSubClick.bind(this, '3') },
|
|
217
|
-
// 类图
|
|
218
|
-
// 访问[Mermaid UML图](https://mermaid-js.github.io/mermaid/#/classDiagram)参考具体使用方法
|
|
219
|
-
{ iconName: 'insertClass', name: 'insertClass', onclick: this.bindSubClick.bind(this, '4') },
|
|
220
|
-
// 饼图
|
|
221
|
-
// 访问[Mermaid 饼图](https://mermaid-js.github.io/mermaid/#/pie)参考具体使用方法
|
|
222
|
-
{ iconName: 'insertPie', name: 'insertPie', onclick: this.bindSubClick.bind(this, '5') },
|
|
223
|
-
// 甘特图
|
|
224
|
-
{ iconName: 'insertGantt', name: 'insertGantt', onclick: this.bindSubClick.bind(this, '6') },
|
|
225
|
-
];
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
getSubMenuConfig() {
|
|
229
|
-
return this.subMenuConfig;
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
/**
|
|
233
|
-
* 响应点击事件
|
|
234
|
-
* @param {string} selection 被用户选中的文本内容,本函数不处理选中的内容,会直接清空用户选中的内容
|
|
235
|
-
* @param {1|2|3|4|5|6|'1'|'2'|'3'|'4'|'5'|'6'|'flow'|'sequence'|'state'|'class'|'pie'|'gantt'|''} shortKey 快捷键参数
|
|
236
|
-
* @returns {string} 回填到编辑器光标位置/选中文本区域的内容
|
|
237
|
-
*/
|
|
238
|
-
onClick(selection, shortKey = '') {
|
|
239
|
-
const shortcutKeyMap = [null, 'flow', 'sequence', 'state', 'class', 'pie', 'gantt'];
|
|
240
|
-
const type = shortcutKeyMap[shortKey] ? shortcutKeyMap[shortKey] : shortKey;
|
|
241
|
-
|
|
242
|
-
if (!type || !/^(flow|sequence|state|class|pie|gantt)$/.test(type)) {
|
|
243
|
-
return;
|
|
244
|
-
}
|
|
245
|
-
this.registerAfterClickCb(() => {
|
|
246
|
-
this.setLessSelection('\n\n\n\n\n', '\n\n');
|
|
247
|
-
});
|
|
248
|
-
return `\n\n${this.$getSampleCode(type)}\n`;
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
/**
|
|
252
|
-
* 画图的markdown源码模版
|
|
253
|
-
* @param {string} type 画图的类型
|
|
254
|
-
* @returns
|
|
255
|
-
*/
|
|
256
|
-
$getSampleCode(type) {
|
|
257
|
-
if (this.localeName !== 'zh-CN' && this.localeName !== 'zh_CN') {
|
|
258
|
-
// 只要不是中文,就返回英文例子
|
|
259
|
-
return sampleEn[type]?.replace(/\t/g, ' ');
|
|
260
|
-
}
|
|
261
|
-
return sample[type]?.replace(/\t/g, ' ');
|
|
262
|
-
}
|
|
263
|
-
}
|
package/src/toolbars/hooks/H1.js
DELETED
|
@@ -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
|
-
/**
|
|
19
|
-
* 插入1级标题
|
|
20
|
-
*/
|
|
21
|
-
export default class H1 extends MenuBase {
|
|
22
|
-
constructor($cherry) {
|
|
23
|
-
super($cherry);
|
|
24
|
-
this.setName('h1', 'h1');
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
$testIsHead(selection) {
|
|
28
|
-
return /^\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, 'line', true) || this.locale.h1;
|
|
39
|
-
const header = '#';
|
|
40
|
-
if (!this.isSelections && !this.$testIsHead($selection)) {
|
|
41
|
-
this.getMoreSelection('\n', '', () => {
|
|
42
|
-
const newSelection = this.editor.editor.getSelection();
|
|
43
|
-
const isHead = this.$testIsHead(newSelection);
|
|
44
|
-
if (isHead) {
|
|
45
|
-
$selection = newSelection;
|
|
46
|
-
}
|
|
47
|
-
return isHead;
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
if (this.$testIsHead($selection)) {
|
|
51
|
-
// 如果选中的内容里有标题语法,并且标记级别与目标一致,则去掉标题语法
|
|
52
|
-
// 反之,修改标题级别与目标一致
|
|
53
|
-
let needClean = true;
|
|
54
|
-
const tmp = $selection.replace(/(^\s*)(#+)(\s*)(.+$)/gm, (w, m1, m2, m3, m4) => {
|
|
55
|
-
needClean = needClean ? m2.length === header.length : false;
|
|
56
|
-
return `${m1}${header}${m3}${m4}`;
|
|
57
|
-
});
|
|
58
|
-
if (needClean) {
|
|
59
|
-
return $selection.replace(/(^\s*)(#+)(\s*)(.+$)/gm, '$1$4');
|
|
60
|
-
}
|
|
61
|
-
this.registerAfterClickCb(() => {
|
|
62
|
-
this.setLessSelection(`${header} `, '');
|
|
63
|
-
});
|
|
64
|
-
return tmp;
|
|
65
|
-
}
|
|
66
|
-
this.registerAfterClickCb(() => {
|
|
67
|
-
this.setLessSelection(`${header} `, '');
|
|
68
|
-
});
|
|
69
|
-
return $selection.replace(/(^)([\s]*)([^\n]+)($)/gm, `$1${header} $3$4`);
|
|
70
|
-
}
|
|
71
|
-
}
|
package/src/toolbars/hooks/H2.js
DELETED
|
@@ -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
|
-
/**
|
|
19
|
-
* 插入2级标题
|
|
20
|
-
*/
|
|
21
|
-
export default class H2 extends MenuBase {
|
|
22
|
-
constructor($cherry) {
|
|
23
|
-
super($cherry);
|
|
24
|
-
this.setName('h2', 'h2');
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
$testIsHead(selection) {
|
|
28
|
-
return /^\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, 'line', true) || this.locale.h2;
|
|
39
|
-
const header = '##';
|
|
40
|
-
if (!this.isSelections && !this.$testIsHead($selection)) {
|
|
41
|
-
this.getMoreSelection('\n', '', () => {
|
|
42
|
-
const newSelection = this.editor.editor.getSelection();
|
|
43
|
-
const isHead = this.$testIsHead(newSelection);
|
|
44
|
-
if (isHead) {
|
|
45
|
-
$selection = newSelection;
|
|
46
|
-
}
|
|
47
|
-
return isHead;
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
if (this.$testIsHead($selection)) {
|
|
51
|
-
// 如果选中的内容里有标题语法,并且标记级别与目标一致,则去掉标题语法
|
|
52
|
-
// 反之,修改标题级别与目标一致
|
|
53
|
-
let needClean = true;
|
|
54
|
-
const tmp = $selection.replace(/(^\s*)(#+)(\s*)(.+$)/gm, (w, m1, m2, m3, m4) => {
|
|
55
|
-
needClean = needClean ? m2.length === header.length : false;
|
|
56
|
-
return `${m1}${header}${m3}${m4}`;
|
|
57
|
-
});
|
|
58
|
-
if (needClean) {
|
|
59
|
-
return $selection.replace(/(^\s*)(#+)(\s*)(.+$)/gm, '$1$4');
|
|
60
|
-
}
|
|
61
|
-
this.registerAfterClickCb(() => {
|
|
62
|
-
this.setLessSelection(`${header} `, '');
|
|
63
|
-
});
|
|
64
|
-
return tmp;
|
|
65
|
-
}
|
|
66
|
-
this.registerAfterClickCb(() => {
|
|
67
|
-
this.setLessSelection(`${header} `, '');
|
|
68
|
-
});
|
|
69
|
-
return $selection.replace(/(^)([\s]*)([^\n]+)($)/gm, `$1${header} $3$4`);
|
|
70
|
-
}
|
|
71
|
-
}
|
package/src/toolbars/hooks/H3.js
DELETED
|
@@ -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
|
-
/**
|
|
19
|
-
* 插入3级标题
|
|
20
|
-
*/
|
|
21
|
-
export default class H3 extends MenuBase {
|
|
22
|
-
constructor($cherry) {
|
|
23
|
-
super($cherry);
|
|
24
|
-
this.setName('h3', 'h3');
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
$testIsHead(selection) {
|
|
28
|
-
return /^\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, 'line', true) || this.locale.h3;
|
|
39
|
-
const header = '###';
|
|
40
|
-
if (!this.isSelections && !this.$testIsHead($selection)) {
|
|
41
|
-
this.getMoreSelection('\n', '', () => {
|
|
42
|
-
const newSelection = this.editor.editor.getSelection();
|
|
43
|
-
const isHead = this.$testIsHead(newSelection);
|
|
44
|
-
if (isHead) {
|
|
45
|
-
$selection = newSelection;
|
|
46
|
-
}
|
|
47
|
-
return isHead;
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
if (this.$testIsHead($selection)) {
|
|
51
|
-
// 如果选中的内容里有标题语法,并且标记级别与目标一致,则去掉标题语法
|
|
52
|
-
// 反之,修改标题级别与目标一致
|
|
53
|
-
let needClean = true;
|
|
54
|
-
const tmp = $selection.replace(/(^\s*)(#+)(\s*)(.+$)/gm, (w, m1, m2, m3, m4) => {
|
|
55
|
-
needClean = needClean ? m2.length === header.length : false;
|
|
56
|
-
return `${m1}${header}${m3}${m4}`;
|
|
57
|
-
});
|
|
58
|
-
if (needClean) {
|
|
59
|
-
return $selection.replace(/(^\s*)(#+)(\s*)(.+$)/gm, '$1$4');
|
|
60
|
-
}
|
|
61
|
-
this.registerAfterClickCb(() => {
|
|
62
|
-
this.setLessSelection(`${header} `, '');
|
|
63
|
-
});
|
|
64
|
-
return tmp;
|
|
65
|
-
}
|
|
66
|
-
this.registerAfterClickCb(() => {
|
|
67
|
-
this.setLessSelection(`${header} `, '');
|
|
68
|
-
});
|
|
69
|
-
return $selection.replace(/(^)([\s]*)([^\n]+)($)/gm, `$1${header} $3$4`);
|
|
70
|
-
}
|
|
71
|
-
}
|