@cherry-markdown/cherry-markdown-dev 0.8.58-dev
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/package.json +149 -0
- package/src/Cherry.config.js +625 -0
- package/src/Cherry.js +1104 -0
- package/src/CherryStatic.js +70 -0
- package/src/Editor.js +748 -0
- package/src/Engine.js +381 -0
- package/src/Event.js +140 -0
- package/src/Factory.js +180 -0
- package/src/Logger.js +31 -0
- package/src/Previewer.js +1183 -0
- package/src/Sanitizer.js +4 -0
- package/src/Sanitizer.node.js +7 -0
- package/src/UrlCache.js +98 -0
- package/src/addons/advance/cherry-table-echarts-plugin.js +170 -0
- package/src/addons/cherry-code-block-mermaid-plugin.js +158 -0
- package/src/addons/cherry-code-block-plantuml-plugin.js +106 -0
- package/src/core/HookCenter.js +297 -0
- package/src/core/HooksConfig.js +100 -0
- package/src/core/ParagraphBase.js +332 -0
- package/src/core/SentenceBase.js +65 -0
- package/src/core/SyntaxBase.js +194 -0
- package/src/core/hooks/AutoLink.js +232 -0
- package/src/core/hooks/BackgroundColor.js +46 -0
- package/src/core/hooks/Blockquote.js +70 -0
- package/src/core/hooks/Br.js +85 -0
- package/src/core/hooks/CodeBlock.js +446 -0
- package/src/core/hooks/Color.js +46 -0
- package/src/core/hooks/CommentReference.js +96 -0
- package/src/core/hooks/Detail.js +108 -0
- package/src/core/hooks/Emoji.config.js +1825 -0
- package/src/core/hooks/Emoji.js +119 -0
- package/src/core/hooks/Emphasis.js +113 -0
- package/src/core/hooks/Footnote.js +125 -0
- package/src/core/hooks/FrontMatter.js +51 -0
- package/src/core/hooks/Header.js +234 -0
- package/src/core/hooks/HighLight.js +37 -0
- package/src/core/hooks/Hr.js +52 -0
- package/src/core/hooks/HtmlBlock.js +184 -0
- package/src/core/hooks/Image.js +174 -0
- package/src/core/hooks/InlineCode.js +48 -0
- package/src/core/hooks/InlineMath.js +107 -0
- package/src/core/hooks/Link.js +160 -0
- package/src/core/hooks/List.js +264 -0
- package/src/core/hooks/MathBlock.js +103 -0
- package/src/core/hooks/Panel.js +145 -0
- package/src/core/hooks/Paragraph.js +84 -0
- package/src/core/hooks/Ruby.js +34 -0
- package/src/core/hooks/Size.js +51 -0
- package/src/core/hooks/Strikethrough.js +54 -0
- package/src/core/hooks/Sub.js +47 -0
- package/src/core/hooks/SuggestList.js +333 -0
- package/src/core/hooks/Suggester.js +707 -0
- package/src/core/hooks/Sup.js +47 -0
- package/src/core/hooks/Table.js +275 -0
- package/src/core/hooks/Toc.js +292 -0
- package/src/core/hooks/Transfer.js +47 -0
- package/src/core/hooks/Underline.js +37 -0
- package/src/index.core.js +29 -0
- package/src/index.engine.core.js +68 -0
- package/src/index.engine.js +28 -0
- package/src/index.js +32 -0
- package/src/libs/mermaidAPI.8.4.8.js +1 -0
- package/src/libs/mermaidAPI.8.5.2.js +42 -0
- package/src/libs/rawdeflate.js +1663 -0
- package/src/locales/en_US.js +139 -0
- package/src/locales/index.js +25 -0
- package/src/locales/ru_RU.js +139 -0
- package/src/locales/zh_CN.js +142 -0
- package/src/sass/base.scss +26 -0
- package/src/sass/bubble_formula.scss +166 -0
- package/src/sass/ch-icon.scss +118 -0
- package/src/sass/cherry.scss +1116 -0
- package/src/sass/components/bubble.scss +173 -0
- package/src/sass/components/shortcut_key_config.scss +108 -0
- package/src/sass/formula_utils_bubble.scss +82 -0
- package/src/sass/icon_template.scss +24 -0
- package/src/sass/icons/uEA03-list.svg +19 -0
- package/src/sass/icons/uEA04-check.svg +14 -0
- package/src/sass/icons/uEA09-square.svg +10 -0
- package/src/sass/icons/uEA0A-bold.svg +20 -0
- package/src/sass/icons/uEA0B-code.svg +18 -0
- package/src/sass/icons/uEA0C-color.svg +13 -0
- package/src/sass/icons/uEA0D-header.svg +8 -0
- package/src/sass/icons/uEA0E-image.svg +15 -0
- package/src/sass/icons/uEA0F-italic.svg +8 -0
- package/src/sass/icons/uEA10-link.svg +16 -0
- package/src/sass/icons/uEA11-ol.svg +21 -0
- package/src/sass/icons/uEA12-size.svg +11 -0
- package/src/sass/icons/uEA13-strike.svg +16 -0
- package/src/sass/icons/uEA14-table.svg +12 -0
- package/src/sass/icons/uEA15-ul.svg +17 -0
- package/src/sass/icons/uEA16-underline.svg +13 -0
- package/src/sass/icons/uEA17-word.svg +16 -0
- package/src/sass/icons/uEA18-blockquote.svg +11 -0
- package/src/sass/icons/uEA19-font.svg +10 -0
- package/src/sass/icons/uEA1F-insertClass.svg +39 -0
- package/src/sass/icons/uEA20-insertFlow.svg +8 -0
- package/src/sass/icons/uEA21-insertFormula.svg +23 -0
- package/src/sass/icons/uEA22-insertGantt.svg +13 -0
- package/src/sass/icons/uEA23-insertGraph.svg +13 -0
- package/src/sass/icons/uEA24-insertPie.svg +19 -0
- package/src/sass/icons/uEA25-insertSeq.svg +20 -0
- package/src/sass/icons/uEA26-insertState.svg +35 -0
- package/src/sass/icons/uEA27-line.svg +11 -0
- package/src/sass/icons/uEA28-preview.svg +18 -0
- package/src/sass/icons/uEA29-previewClose.svg +24 -0
- package/src/sass/icons/uEA2A-toc.svg +24 -0
- package/src/sass/icons/uEA2D-sub.svg +15 -0
- package/src/sass/icons/uEA2E-sup.svg +15 -0
- package/src/sass/icons/uEA2F-h1.svg +16 -0
- package/src/sass/icons/uEA30-h2.svg +20 -0
- package/src/sass/icons/uEA31-h3.svg +23 -0
- package/src/sass/icons/uEA32-h4.svg +16 -0
- package/src/sass/icons/uEA33-h5.svg +20 -0
- package/src/sass/icons/uEA34-h6.svg +17 -0
- package/src/sass/icons/uEA35-video.svg +20 -0
- package/src/sass/icons/uEA36-insert.svg +25 -0
- package/src/sass/icons/uEA37-little_table.svg +30 -0
- package/src/sass/icons/uEA38-pdf.svg +27 -0
- package/src/sass/icons/uEA39-checklist.svg +22 -0
- package/src/sass/icons/uEA40-close.svg +12 -0
- package/src/sass/icons/uEA41-fullscreen.svg +81 -0
- package/src/sass/icons/uEA42-minscreen.svg +77 -0
- package/src/sass/icons/uEA43-insertChart.svg +23 -0
- package/src/sass/icons/uEA44-question.svg +25 -0
- package/src/sass/icons/uEA45-settings.svg +32 -0
- package/src/sass/icons/uEA46-ok.svg +7 -0
- package/src/sass/icons/uEA47-br.svg +22 -0
- package/src/sass/icons/uEA48-normal.svg +15 -0
- package/src/sass/icons/uEA49-undo.svg +19 -0
- package/src/sass/icons/uEA50-redo.svg +21 -0
- package/src/sass/icons/uEA51-copy.svg +6 -0
- package/src/sass/icons/uEA52-phone.svg +5 -0
- package/src/sass/icons/uEA53-cherry-table-delete.svg +17 -0
- package/src/sass/icons/uEA54-cherry-table-insert-bottom.svg +16 -0
- package/src/sass/icons/uEA55-cherry-table-insert-left.svg +15 -0
- package/src/sass/icons/uEA56-cherry-table-insert-right.svg +16 -0
- package/src/sass/icons/uEA57-cherry-table-insert-top.svg +16 -0
- package/src/sass/icons/uEA58-sort-s.svg +13 -0
- package/src/sass/icons/uEA59-pinyin.svg +1 -0
- package/src/sass/icons/uEA5A-create.svg +24 -0
- package/src/sass/icons/uEA5B-download.svg +34 -0
- package/src/sass/icons/uEA5C-edit.svg +3 -0
- package/src/sass/icons/uEA5D-export.svg +53 -0
- package/src/sass/icons/uEA5E-folder-open.svg +3 -0
- package/src/sass/icons/uEA5F-folder.svg +3 -0
- package/src/sass/icons/uEA60-help.svg +5 -0
- package/src/sass/icons/uEA61-pen-fill.svg +13 -0
- package/src/sass/icons/uEA62-pen.svg +3 -0
- package/src/sass/icons/uEA64-tips.svg +5 -0
- package/src/sass/icons/uEA65-warn.svg +5 -0
- package/src/sass/icons/uEA66-mistake.svg +4 -0
- package/src/sass/icons/uEA67-success.svg +4 -0
- package/src/sass/icons/uEA68-danger.svg +4 -0
- package/src/sass/icons/uEA69-info.svg +5 -0
- package/src/sass/icons/uEA6A-primary.svg +5 -0
- package/src/sass/icons/uEA6B-warning.svg +5 -0
- package/src/sass/icons/uEA6C-justify.svg +19 -0
- package/src/sass/icons/uEA6D-justifyCenter.svg +19 -0
- package/src/sass/icons/uEA6E-justifyLeft.svg +19 -0
- package/src/sass/icons/uEA6F-justifyRight.svg +19 -0
- package/src/sass/icons/uEA70-chevronsLeft.svg +1 -0
- package/src/sass/icons/uEA71-chevronsRight.svg +1 -0
- package/src/sass/icons/uEA72-trendingUp.svg +1 -0
- package/src/sass/icons/uEA74-codeBlock.svg +1 -0
- package/src/sass/icons/uEA75-expand.svg +3 -0
- package/src/sass/icons/uEA76-unExpand.svg +3 -0
- package/src/sass/icons/uEA77-swap-vert.svg +1 -0
- package/src/sass/icons/uEA78-swap.svg +1 -0
- package/src/sass/icons/uEA79-keyboard.svg +1 -0
- package/src/sass/icons/uEA7A-command.svg +1 -0
- package/src/sass/icons/uEA7B-search.svg +1 -0
- package/src/sass/index.scss +3 -0
- package/src/sass/markdown.scss +668 -0
- package/src/sass/markdown_pure.scss +9 -0
- package/src/sass/prettyprint/prettyprint.scss +118 -0
- package/src/sass/previewer.scss +179 -0
- package/src/sass/print.scss +13 -0
- package/src/sass/prism/coy.scss +220 -0
- package/src/sass/prism/dark.scss +132 -0
- package/src/sass/prism/default.scss +143 -0
- package/src/sass/prism/funky.scss +133 -0
- package/src/sass/prism/okaidia.scss +126 -0
- package/src/sass/prism/one-dark.scss +440 -0
- package/src/sass/prism/one-light.scss +428 -0
- package/src/sass/prism/solarized-light.scss +153 -0
- package/src/sass/prism/tomorrow-night.scss +125 -0
- package/src/sass/prism/twilight.scss +202 -0
- package/src/sass/prism/vs-dark.scss +275 -0
- package/src/sass/prism/vs-light.scss +168 -0
- package/src/sass/themes/blue.scss +411 -0
- package/src/sass/themes/dark.scss +517 -0
- package/src/sass/themes/default.scss +255 -0
- package/src/sass/themes/green.scss +395 -0
- package/src/sass/themes/light.scss +368 -0
- package/src/sass/themes/red.scss +397 -0
- package/src/sass/themes/violet.scss +410 -0
- package/src/sass/variable.scss +84 -0
- package/src/toolbars/Bubble.js +234 -0
- package/src/toolbars/BubbleFormula.js +298 -0
- package/src/toolbars/BubbleTable.js +147 -0
- package/src/toolbars/FloatMenu.js +131 -0
- package/src/toolbars/HiddenToolbar.js +36 -0
- package/src/toolbars/HookCenter.js +234 -0
- package/src/toolbars/MenuBase.js +569 -0
- package/src/toolbars/PreviewerBubble.js +608 -0
- package/src/toolbars/ShortcutKeyConfigPanel.js +345 -0
- package/src/toolbars/Sidebar.js +36 -0
- package/src/toolbars/Toc.js +242 -0
- package/src/toolbars/Toolbar.js +449 -0
- package/src/toolbars/ToolbarRight.js +37 -0
- package/src/toolbars/hooks/Audio.js +79 -0
- package/src/toolbars/hooks/BarTable.js +41 -0
- package/src/toolbars/hooks/Bold.js +73 -0
- package/src/toolbars/hooks/Br.js +34 -0
- package/src/toolbars/hooks/ChangeLocale.js +62 -0
- package/src/toolbars/hooks/ChatGpt.js +182 -0
- package/src/toolbars/hooks/CheckList.js +41 -0
- package/src/toolbars/hooks/Code.js +49 -0
- package/src/toolbars/hooks/CodeTheme.js +66 -0
- package/src/toolbars/hooks/Color.js +298 -0
- package/src/toolbars/hooks/Copy.js +141 -0
- package/src/toolbars/hooks/Detail.js +69 -0
- package/src/toolbars/hooks/DrawIo.js +57 -0
- package/src/toolbars/hooks/Export.js +49 -0
- package/src/toolbars/hooks/File.js +79 -0
- package/src/toolbars/hooks/Formula.js +69 -0
- package/src/toolbars/hooks/FullScreen.js +50 -0
- package/src/toolbars/hooks/Graph.js +263 -0
- package/src/toolbars/hooks/H1.js +71 -0
- package/src/toolbars/hooks/H2.js +71 -0
- package/src/toolbars/hooks/H3.js +71 -0
- package/src/toolbars/hooks/Header.js +118 -0
- package/src/toolbars/hooks/Hr.js +35 -0
- package/src/toolbars/hooks/Image.js +91 -0
- package/src/toolbars/hooks/InlineCode.js +53 -0
- package/src/toolbars/hooks/Insert.js +193 -0
- package/src/toolbars/hooks/Italic.js +72 -0
- package/src/toolbars/hooks/Justify.js +49 -0
- package/src/toolbars/hooks/LineTable.js +41 -0
- package/src/toolbars/hooks/Link.js +49 -0
- package/src/toolbars/hooks/List.js +55 -0
- package/src/toolbars/hooks/MobilePreview.js +44 -0
- package/src/toolbars/hooks/Ol.js +41 -0
- package/src/toolbars/hooks/Panel.js +140 -0
- package/src/toolbars/hooks/Pdf.js +78 -0
- package/src/toolbars/hooks/Publish.js +123 -0
- package/src/toolbars/hooks/QuickTable.js +43 -0
- package/src/toolbars/hooks/Quote.js +45 -0
- package/src/toolbars/hooks/Redo.js +33 -0
- package/src/toolbars/hooks/Ruby.js +59 -0
- package/src/toolbars/hooks/Search.js +53 -0
- package/src/toolbars/hooks/Settings.js +220 -0
- package/src/toolbars/hooks/ShortcutKey.js +62 -0
- package/src/toolbars/hooks/Size.js +118 -0
- package/src/toolbars/hooks/Split.js +37 -0
- package/src/toolbars/hooks/Strikethrough.js +71 -0
- package/src/toolbars/hooks/Sub.js +58 -0
- package/src/toolbars/hooks/Sup.js +58 -0
- package/src/toolbars/hooks/SwitchModel.js +56 -0
- package/src/toolbars/hooks/Table.js +56 -0
- package/src/toolbars/hooks/Theme.js +62 -0
- package/src/toolbars/hooks/Toc.js +35 -0
- package/src/toolbars/hooks/TogglePreview.js +91 -0
- package/src/toolbars/hooks/Ul.js +41 -0
- package/src/toolbars/hooks/Underline.js +68 -0
- package/src/toolbars/hooks/Undo.js +30 -0
- package/src/toolbars/hooks/Video.js +79 -0
- package/src/toolbars/hooks/Word.js +78 -0
- package/src/toolbars/hooks/WordCount.js +106 -0
- package/src/utils/autoindent.js +58 -0
- package/src/utils/cm-search-replace.js +794 -0
- package/src/utils/code-preview-language-setting.js +180 -0
- package/src/utils/codeBlockContentHandler.js +400 -0
- package/src/utils/config.js +174 -0
- package/src/utils/copy.js +55 -0
- package/src/utils/dialog.js +214 -0
- package/src/utils/dom.js +163 -0
- package/src/utils/downloadUtil.js +23 -0
- package/src/utils/env.js +22 -0
- package/src/utils/error.js +61 -0
- package/src/utils/event.js +38 -0
- package/src/utils/export.js +166 -0
- package/src/utils/file.js +164 -0
- package/src/utils/formulaUtilsHandler.js +232 -0
- package/src/utils/htmlparser.js +976 -0
- package/src/utils/image.js +99 -0
- package/src/utils/imgSizeHandler.js +279 -0
- package/src/utils/lazyLoadImg.js +327 -0
- package/src/utils/lineFeed.js +49 -0
- package/src/utils/listContentHandler.js +227 -0
- package/src/utils/lookbehind-replace.js +81 -0
- package/src/utils/mathjax.js +89 -0
- package/src/utils/myersDiff.js +211 -0
- package/src/utils/pasteHelper.js +253 -0
- package/src/utils/platformTransform.js +71 -0
- package/src/utils/recount-pos.js +59 -0
- package/src/utils/regexp.js +295 -0
- package/src/utils/sanitize.js +477 -0
- package/src/utils/selection.js +50 -0
- package/src/utils/shortcutKey.js +291 -0
- package/src/utils/svgUtils.js +96 -0
- package/src/utils/tableContentHandler.js +876 -0
- package/test/core/CommonMark.spec.ts +62 -0
- package/test/core/hooks/AutoLink.spec.ts +28 -0
- package/test/core/hooks/List.spec.ts +79 -0
- package/test/core/hooks/__snapshots__/List.spec.ts.snap +11 -0
- package/test/example.md +778 -0
- package/test/node.js +10 -0
- package/test/suites/commonmark.spec.json +5218 -0
- package/test/tsconfig.test.json +6 -0
- package/test/utils/regexp.spec.ts +28 -0
- package/types/cherry.d.ts +675 -0
- package/types/codemirror.d.ts +22 -0
- package/types/editor.d.ts +72 -0
- package/types/global.d.ts +16 -0
- package/types/menus.d.ts +24 -0
- package/types/previewer.d.ts +53 -0
- package/types/syntax.d.ts +52 -0
|
@@ -0,0 +1,625 @@
|
|
|
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 cloneDeep from 'lodash/cloneDeep';
|
|
17
|
+
|
|
18
|
+
const callbacks = {
|
|
19
|
+
/**
|
|
20
|
+
* 全局的URL处理器
|
|
21
|
+
* @param {string} url 来源url
|
|
22
|
+
* @param {'image'|'audio'|'video'|'autolink'|'link'} srcType 来源类型
|
|
23
|
+
* @returns
|
|
24
|
+
*/
|
|
25
|
+
urlProcessor: (url, srcType) => url,
|
|
26
|
+
fileUpload(file, callback) {
|
|
27
|
+
if (/video/i.test(file.type)) {
|
|
28
|
+
callback('images/demo-dog.png', {
|
|
29
|
+
name: `${file.name.replace(/\.[^.]+$/, '')}`,
|
|
30
|
+
poster: 'images/demo-dog.png?poster=true',
|
|
31
|
+
isBorder: true,
|
|
32
|
+
isShadow: true,
|
|
33
|
+
isRadius: true,
|
|
34
|
+
});
|
|
35
|
+
} else if (/image/i.test(file.type)) {
|
|
36
|
+
// 如果上传的是图片,则默认回显base64内容(因为没有图床)
|
|
37
|
+
// 创建 FileReader 对象
|
|
38
|
+
const reader = new FileReader();
|
|
39
|
+
// 读取文件内容
|
|
40
|
+
reader.onload = (event) => {
|
|
41
|
+
// 获取 base64 内容
|
|
42
|
+
const base64Content = event.target.result;
|
|
43
|
+
callback(base64Content, {
|
|
44
|
+
name: `${file.name.replace(/\.[^.]+$/, '')}`,
|
|
45
|
+
isShadow: true,
|
|
46
|
+
width: '60%',
|
|
47
|
+
height: 'auto',
|
|
48
|
+
});
|
|
49
|
+
};
|
|
50
|
+
reader.readAsDataURL(file);
|
|
51
|
+
} else {
|
|
52
|
+
callback('images/demo-dog.png');
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
fileUploadMulti(files, callback) {
|
|
56
|
+
const fileType = files[0].type;
|
|
57
|
+
const promises = [];
|
|
58
|
+
for (const file of files) {
|
|
59
|
+
const promise = new Promise((resolve) => {
|
|
60
|
+
if (/video/i.test(fileType)) {
|
|
61
|
+
resolve({
|
|
62
|
+
url: 'images/demo-dog.png',
|
|
63
|
+
params: {
|
|
64
|
+
name: `${file.name.replace(/\.[^.]+$/, '')}`,
|
|
65
|
+
poster: 'images/demo-dog.png?poster=true',
|
|
66
|
+
isBorder: true,
|
|
67
|
+
isShadow: true,
|
|
68
|
+
isRadius: true,
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
} else if (/image/i.test(fileType)) {
|
|
72
|
+
// 如果上传的是图片,则默认回显base64内容(因为没有图床)
|
|
73
|
+
// 创建 FileReader 对象
|
|
74
|
+
const reader = new FileReader();
|
|
75
|
+
// 读取文件内容
|
|
76
|
+
reader.onload = (event) => {
|
|
77
|
+
// 获取 base64 内容
|
|
78
|
+
const base64Content = event.target.result;
|
|
79
|
+
resolve({
|
|
80
|
+
url: base64Content,
|
|
81
|
+
params: {
|
|
82
|
+
name: `${file.name.replace(/\.[^.]+$/, '')}`,
|
|
83
|
+
isShadow: true,
|
|
84
|
+
width: '60%',
|
|
85
|
+
height: 'auto',
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
};
|
|
89
|
+
reader.readAsDataURL(file);
|
|
90
|
+
} else if (/audio/i.test(fileType)) {
|
|
91
|
+
resolve({
|
|
92
|
+
url: 'images/demo-dog.png',
|
|
93
|
+
params: {
|
|
94
|
+
name: `${file.name.replace(/\.[^.]+$/, '')}`,
|
|
95
|
+
poster: 'images/demo-dog.png?poster=true',
|
|
96
|
+
isBorder: true,
|
|
97
|
+
isShadow: true,
|
|
98
|
+
isRadius: true,
|
|
99
|
+
},
|
|
100
|
+
});
|
|
101
|
+
} else {
|
|
102
|
+
resolve('images/demo-dog.png');
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
promises.push(promise);
|
|
106
|
+
}
|
|
107
|
+
Promise.all(promises).then((results) => {
|
|
108
|
+
callback(results);
|
|
109
|
+
});
|
|
110
|
+
},
|
|
111
|
+
afterChange: (text, html) => {},
|
|
112
|
+
afterInit: (text, html) => {},
|
|
113
|
+
beforeImageMounted: (srcProp, src) => ({ srcProp, src }),
|
|
114
|
+
onClickPreview: (event) => {},
|
|
115
|
+
onExpandCode: (event, code) => {
|
|
116
|
+
// 阻止默认的粘贴事件
|
|
117
|
+
// return false;
|
|
118
|
+
// 对复制内容进行额外处理
|
|
119
|
+
// console.log(event, code);
|
|
120
|
+
return code;
|
|
121
|
+
},
|
|
122
|
+
onUnExpandCode: (event, code) => {
|
|
123
|
+
// 阻止默认的粘贴事件
|
|
124
|
+
// return false;
|
|
125
|
+
// 对复制内容进行额外处理
|
|
126
|
+
// console.log(event, code);
|
|
127
|
+
return code;
|
|
128
|
+
},
|
|
129
|
+
/**
|
|
130
|
+
* 粘贴时触发
|
|
131
|
+
* @param {ClipboardEvent['clipboardData']} clipboardData
|
|
132
|
+
* @param {object} cherry
|
|
133
|
+
* @returns
|
|
134
|
+
* false: 走cherry粘贴的默认逻辑
|
|
135
|
+
* string: 直接粘贴的内容
|
|
136
|
+
*/
|
|
137
|
+
onPaste: (clipboardData, cherry) => {
|
|
138
|
+
return false;
|
|
139
|
+
},
|
|
140
|
+
onCopyCode: (event, code) => {
|
|
141
|
+
// 阻止默认的粘贴事件
|
|
142
|
+
// return false;
|
|
143
|
+
// 对复制内容进行额外处理
|
|
144
|
+
return code;
|
|
145
|
+
},
|
|
146
|
+
// 获取中文的拼音
|
|
147
|
+
changeString2Pinyin: (string) => {
|
|
148
|
+
/**
|
|
149
|
+
* 推荐使用这个组件:https://github.com/liu11hao11/pinyin_js
|
|
150
|
+
*
|
|
151
|
+
* 可以在 ../scripts/pinyin/pinyin_dist.js 里直接引用
|
|
152
|
+
*/
|
|
153
|
+
return string;
|
|
154
|
+
},
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
/** @type {Partial<import('~types/cherry').CherryOptions>} */
|
|
158
|
+
const defaultConfig = {
|
|
159
|
+
// 第三方包
|
|
160
|
+
externals: {
|
|
161
|
+
// externals
|
|
162
|
+
},
|
|
163
|
+
// chatGpt的openai配置
|
|
164
|
+
openai: {
|
|
165
|
+
apiKey: '', // apiKey
|
|
166
|
+
// proxy: {
|
|
167
|
+
// host: '127.0.0.1',
|
|
168
|
+
// port: '7890',
|
|
169
|
+
// }, // http & https代理配置
|
|
170
|
+
ignoreError: false, // 是否忽略请求失败,默认忽略
|
|
171
|
+
},
|
|
172
|
+
// 解析引擎配置
|
|
173
|
+
engine: {
|
|
174
|
+
// 全局配置
|
|
175
|
+
global: {
|
|
176
|
+
// 是否启用经典换行逻辑
|
|
177
|
+
// true:一个换行会被忽略,两个以上连续换行会分割成段落,
|
|
178
|
+
// false: 一个换行会转成<br>,两个连续换行会分割成段落,三个以上连续换行会转成<br>并分割段落
|
|
179
|
+
classicBr: false,
|
|
180
|
+
/**
|
|
181
|
+
* 额外允许渲染的html标签
|
|
182
|
+
* 标签以英文竖线分隔,如:htmlWhiteList: 'iframe|script|style'
|
|
183
|
+
* 默认为空,默认允许渲染的html见src/utils/sanitize.js whiteList 属性
|
|
184
|
+
* 需要注意:
|
|
185
|
+
* - 启用iframe、script等标签后,会产生xss注入,请根据实际场景判断是否需要启用
|
|
186
|
+
* - 一般编辑权限可控的场景(如api文档系统)可以允许iframe、script等标签
|
|
187
|
+
*/
|
|
188
|
+
htmlWhiteList: '',
|
|
189
|
+
/**
|
|
190
|
+
* 适配流式会话的场景,开启后将具备以下特性:
|
|
191
|
+
* - cherry渲染频率从50ms/次提升到10ms/次
|
|
192
|
+
* - 代码块自动闭合,相当于强制 `engine.syntax.codeBlock.selfClosing=true`
|
|
193
|
+
* - 文章末尾的段横线标题语法(`\n-`)失效
|
|
194
|
+
* - 表格语法自动闭合,相当于强制`engine.syntax.table.selfClosing=true`
|
|
195
|
+
* - 加粗、斜体语法自动闭合,相当于强制`engine.syntax.fontEmphasis.selfClosing=true`
|
|
196
|
+
*
|
|
197
|
+
* 后续如果有新的需求,可提issue反馈
|
|
198
|
+
*/
|
|
199
|
+
flowSessionContext: true,
|
|
200
|
+
/**
|
|
201
|
+
* 流式会话时,在最后位置增加一个类似光标的dom
|
|
202
|
+
* - 'default':用cherry提供的默认样式
|
|
203
|
+
* - '':不增加任何dom
|
|
204
|
+
* - '<span class="custom-cursor"></span>': 自定义的dom
|
|
205
|
+
*/
|
|
206
|
+
flowSessionCursor: '',
|
|
207
|
+
},
|
|
208
|
+
// 内置语法配置
|
|
209
|
+
syntax: {
|
|
210
|
+
// 语法开关
|
|
211
|
+
// 'hookName': false,
|
|
212
|
+
// 语法配置
|
|
213
|
+
// 'hookName': {
|
|
214
|
+
//
|
|
215
|
+
// }
|
|
216
|
+
link: {
|
|
217
|
+
/** 生成的<a>标签追加target属性的默认值 空:在<a>标签里不会追加target属性, _blank:在<a>标签里追加target="_blank"属性 */
|
|
218
|
+
target: '',
|
|
219
|
+
/** 生成的<a>标签追加rel属性的默认值 空:在<a>标签里不会追加rel属性, nofollow:在<a>标签里追加rel="nofollow:在"属性*/
|
|
220
|
+
rel: '',
|
|
221
|
+
},
|
|
222
|
+
autoLink: {
|
|
223
|
+
/** 生成的<a>标签追加target属性的默认值 空:在<a>标签里不会追加target属性, _blank:在<a>标签里追加target="_blank"属性 */
|
|
224
|
+
target: '',
|
|
225
|
+
/** 生成的<a>标签追加rel属性的默认值 空:在<a>标签里不会追加rel属性, nofollow:在<a>标签里追加rel="nofollow:在"属性*/
|
|
226
|
+
rel: '',
|
|
227
|
+
/** 是否开启短链接 */
|
|
228
|
+
enableShortLink: false,
|
|
229
|
+
/** 短链接长度 */
|
|
230
|
+
shortLinkLength: 20,
|
|
231
|
+
},
|
|
232
|
+
list: {
|
|
233
|
+
listNested: false, // 同级列表类型转换后变为子级
|
|
234
|
+
indentSpace: 2, // 默认2个空格缩进
|
|
235
|
+
},
|
|
236
|
+
table: {
|
|
237
|
+
enableChart: false,
|
|
238
|
+
selfClosing: false, // 自动闭合,为true时,当输入第一行table内容时,cherry会自动按表格进行解析
|
|
239
|
+
// chartRenderEngine: EChartsTableEngine,
|
|
240
|
+
// externals: ['echarts'],
|
|
241
|
+
},
|
|
242
|
+
inlineCode: {
|
|
243
|
+
/**
|
|
244
|
+
* @deprecated 不再支持theme的配置,统一在`themeSettings.inlineCodeTheme`中配置
|
|
245
|
+
*/
|
|
246
|
+
// theme: 'red',
|
|
247
|
+
},
|
|
248
|
+
codeBlock: {
|
|
249
|
+
// theme: 'dark', // @deprecated 不再支持theme的配置,统一在`themeSettings.codeBlockTheme`中配置
|
|
250
|
+
wrap: true, // 超出长度是否换行,false则显示滚动条
|
|
251
|
+
lineNumber: true, // 默认显示行号
|
|
252
|
+
copyCode: true, // 是否显示“复制”按钮
|
|
253
|
+
editCode: true, // 是否显示“编辑”按钮
|
|
254
|
+
changeLang: true, // 是否显示“切换语言”按钮
|
|
255
|
+
expandCode: false, // 是否展开/收起代码块,当代码块行数大于10行时,会自动收起代码块
|
|
256
|
+
selfClosing: true, // 自动闭合,为true时,当md中有奇数个```时,会自动在md末尾追加一个```
|
|
257
|
+
customRenderer: {
|
|
258
|
+
// 自定义语法渲染器
|
|
259
|
+
},
|
|
260
|
+
mermaid: {
|
|
261
|
+
svg2img: false, // 是否将mermaid生成的画图变成img格式
|
|
262
|
+
},
|
|
263
|
+
/**
|
|
264
|
+
* indentedCodeBlock是缩进代码块是否启用的开关
|
|
265
|
+
*
|
|
266
|
+
* 在6.X之前的版本中默认不支持该语法。
|
|
267
|
+
* 因为cherry的开发团队认为该语法太丑了(容易误触)
|
|
268
|
+
* 开发团队希望用```代码块语法来彻底取代该语法
|
|
269
|
+
* 但在后续的沟通中,开发团队发现在某些场景下该语法有更好的显示效果
|
|
270
|
+
* 因此开发团队在6.X版本中才引入了该语法
|
|
271
|
+
* 已经引用6.x以下版本的业务如果想做到用户无感知升级,可以去掉该语法:
|
|
272
|
+
* indentedCodeBlock:false
|
|
273
|
+
*/
|
|
274
|
+
indentedCodeBlock: true,
|
|
275
|
+
/**
|
|
276
|
+
* 自定义按钮,出现在代码块右上角
|
|
277
|
+
**/
|
|
278
|
+
customBtns: [],
|
|
279
|
+
},
|
|
280
|
+
emoji: {
|
|
281
|
+
useUnicode: true, // 是否使用unicode进行渲染
|
|
282
|
+
},
|
|
283
|
+
fontEmphasis: {
|
|
284
|
+
/**
|
|
285
|
+
* 是否允许首尾空格
|
|
286
|
+
* 首尾、前后的定义: 语法前**语法首+内容+语法尾**语法后
|
|
287
|
+
* 例:
|
|
288
|
+
* true:
|
|
289
|
+
* __ hello __ ====> <strong> hello </strong>
|
|
290
|
+
* __hello__ ====> <strong>hello</strong>
|
|
291
|
+
* false:
|
|
292
|
+
* __ hello __ ====> <em>_ hello _</em>
|
|
293
|
+
* __hello__ ====> <strong>hello</strong>
|
|
294
|
+
*/
|
|
295
|
+
allowWhitespace: false,
|
|
296
|
+
selfClosing: false, // 自动闭合,为true时,当输入**XXX时,会自动在末尾追加**
|
|
297
|
+
},
|
|
298
|
+
strikethrough: {
|
|
299
|
+
/**
|
|
300
|
+
* 是否必须有前后空格
|
|
301
|
+
* 首尾、前后的定义: 语法前**语法首+内容+语法尾**语法后
|
|
302
|
+
* 例:
|
|
303
|
+
* true:
|
|
304
|
+
* hello wor~~l~~d ====> hello wor~~l~~d
|
|
305
|
+
* hello wor ~~l~~ d ====> hello wor <del>l</del> d
|
|
306
|
+
* false:
|
|
307
|
+
* hello wor~~l~~d ====> hello wor<del>l</del>d
|
|
308
|
+
* hello wor ~~l~~ d ====> hello wor <del>l</del> d
|
|
309
|
+
*/
|
|
310
|
+
needWhitespace: false,
|
|
311
|
+
},
|
|
312
|
+
mathBlock: {
|
|
313
|
+
engine: 'MathJax', // katex或MathJax
|
|
314
|
+
src: '',
|
|
315
|
+
plugins: true, // 默认加载插件
|
|
316
|
+
},
|
|
317
|
+
inlineMath: {
|
|
318
|
+
engine: 'MathJax', // katex或MathJax
|
|
319
|
+
src: '',
|
|
320
|
+
},
|
|
321
|
+
toc: {
|
|
322
|
+
/** 默认只渲染一个目录 */
|
|
323
|
+
allowMultiToc: false,
|
|
324
|
+
/** 是否显示自增序号 */
|
|
325
|
+
showAutoNumber: false,
|
|
326
|
+
},
|
|
327
|
+
header: {
|
|
328
|
+
/**
|
|
329
|
+
* 标题的样式:
|
|
330
|
+
* - default 默认样式,标题前面有锚点
|
|
331
|
+
* - autonumber 标题前面有自增序号锚点
|
|
332
|
+
* - none 标题没有锚点
|
|
333
|
+
*/
|
|
334
|
+
anchorStyle: 'default',
|
|
335
|
+
/**
|
|
336
|
+
* 是否开启严格模式
|
|
337
|
+
* true:严格模式
|
|
338
|
+
* # head ⭕️ valid
|
|
339
|
+
* #head ❌ invalid
|
|
340
|
+
* false:宽松模式
|
|
341
|
+
* # head ⭕️ valid
|
|
342
|
+
* #head ⭕️ valid
|
|
343
|
+
*/
|
|
344
|
+
strict: false,
|
|
345
|
+
},
|
|
346
|
+
htmlBlock: {
|
|
347
|
+
/**
|
|
348
|
+
* 是否过滤html标签中的style属性
|
|
349
|
+
* true:过滤style属性
|
|
350
|
+
* false:不过滤style属性
|
|
351
|
+
*/
|
|
352
|
+
filterStyle: false,
|
|
353
|
+
},
|
|
354
|
+
},
|
|
355
|
+
},
|
|
356
|
+
editor: {
|
|
357
|
+
id: 'code', // textarea 的id属性值
|
|
358
|
+
name: 'code', // textarea 的name属性值
|
|
359
|
+
autoSave2Textarea: false, // 是否自动将编辑区的内容回写到textarea里
|
|
360
|
+
/**
|
|
361
|
+
* @deprecated 不再支持theme的配置,废弃该功能,统一由`themeSettings.mainTheme`配置
|
|
362
|
+
*/
|
|
363
|
+
// theme: 'default',
|
|
364
|
+
// 编辑器的高度,默认100%,如果挂载点存在内联设置的height则以内联样式为主
|
|
365
|
+
height: '100%',
|
|
366
|
+
// defaultModel 编辑器初始化后的默认模式,一共有三种模式:1、双栏编辑预览模式;2、纯编辑模式;3、预览模式
|
|
367
|
+
// edit&preview: 双栏编辑预览模式
|
|
368
|
+
// editOnly: 纯编辑模式(没有预览,可通过toolbar切换成双栏或预览模式)
|
|
369
|
+
// previewOnly: 预览模式(没有编辑框,toolbar只显示“返回编辑”按钮,可通过toolbar切换成编辑模式)
|
|
370
|
+
defaultModel: 'edit&preview',
|
|
371
|
+
// 粘贴时是否自动将html转成markdown
|
|
372
|
+
convertWhenPaste: true,
|
|
373
|
+
// 快捷键风格,目前仅支持 sublime 和 vim
|
|
374
|
+
keyMap: 'sublime',
|
|
375
|
+
codemirror: {
|
|
376
|
+
// 是否自动focus 默认为true
|
|
377
|
+
autofocus: true,
|
|
378
|
+
},
|
|
379
|
+
writingStyle: 'normal', // 书写风格,normal 普通 | typewriter 打字机 | focus 专注,默认normal
|
|
380
|
+
keepDocumentScrollAfterInit: false, // 在初始化后是否保持网页的滚动,true:保持滚动;false:网页自动滚动到cherry初始化的位置
|
|
381
|
+
showFullWidthMark: true, // 是否高亮全角符号 ·|¥|、|:|“|”|【|】|(|)|《|》
|
|
382
|
+
showSuggestList: true, // 是否显示联想框
|
|
383
|
+
},
|
|
384
|
+
toolbars: {
|
|
385
|
+
/**
|
|
386
|
+
* @deprecated 不再支持theme的配置,统一在`themeSettings.toolbarTheme`中配置
|
|
387
|
+
*/
|
|
388
|
+
// theme: 'dark', // light or dark
|
|
389
|
+
showToolbar: true, // false:不展示顶部工具栏; true:展示工具栏; toolbars.showToolbar=false 与 toolbars.toolbar=false 等效
|
|
390
|
+
toolbar: [
|
|
391
|
+
'bold',
|
|
392
|
+
'italic',
|
|
393
|
+
'strikethrough',
|
|
394
|
+
'|',
|
|
395
|
+
'color',
|
|
396
|
+
'header',
|
|
397
|
+
'ruby',
|
|
398
|
+
'|',
|
|
399
|
+
'list',
|
|
400
|
+
'panel',
|
|
401
|
+
// 'justify', // 对齐方式,默认不推荐这么“复杂”的样式要求
|
|
402
|
+
'detail',
|
|
403
|
+
{
|
|
404
|
+
insert: [
|
|
405
|
+
'image',
|
|
406
|
+
'audio',
|
|
407
|
+
'video',
|
|
408
|
+
'link',
|
|
409
|
+
'hr',
|
|
410
|
+
'br',
|
|
411
|
+
'code',
|
|
412
|
+
'formula',
|
|
413
|
+
'toc',
|
|
414
|
+
'table',
|
|
415
|
+
'line-table',
|
|
416
|
+
'bar-table',
|
|
417
|
+
'pdf',
|
|
418
|
+
'word',
|
|
419
|
+
],
|
|
420
|
+
},
|
|
421
|
+
'graph',
|
|
422
|
+
'shortcutKey',
|
|
423
|
+
'togglePreview',
|
|
424
|
+
],
|
|
425
|
+
toolbarRight: [],
|
|
426
|
+
sidebar: false,
|
|
427
|
+
bubble: ['bold', 'italic', 'underline', 'strikethrough', 'sub', 'sup', 'quote', '|', 'size', 'color'], // array or false
|
|
428
|
+
float: ['h1', 'h2', 'h3', '|', 'checklist', 'quote', 'table', 'code'], // array or false
|
|
429
|
+
hiddenToolbar: [], // 不展示在编辑器中的工具栏,只使用工具栏的api和快捷键功能
|
|
430
|
+
toc: false, // 不展示悬浮目录
|
|
431
|
+
// toc: {
|
|
432
|
+
// updateLocationHash: false, // 要不要更新URL的hash
|
|
433
|
+
// defaultModel: 'full', // pure: 精简模式/缩略模式,只有一排小点; full: 完整模式,会展示所有标题
|
|
434
|
+
// showAutoNumber: false, // 是否显示自增序号
|
|
435
|
+
// position: 'absolute', // 悬浮目录的悬浮方式。当滚动条在cherry内部时,用absolute;当滚动条在cherry外部时,用fixed
|
|
436
|
+
// cssText: '', // 自定义样式
|
|
437
|
+
// },
|
|
438
|
+
/**
|
|
439
|
+
* 自定义快捷键
|
|
440
|
+
* @deprecated 请使用`shortcutKeySettings`
|
|
441
|
+
*/
|
|
442
|
+
shortcutKey: {
|
|
443
|
+
// 'Alt-1': 'header',
|
|
444
|
+
// 'Alt-2': 'header',
|
|
445
|
+
// 'Ctrl-b': 'bold',
|
|
446
|
+
// 'Ctrl-Alt-m': 'formula',
|
|
447
|
+
},
|
|
448
|
+
shortcutKeySettings: {
|
|
449
|
+
/** 是否替换已有的快捷键, true: 替换默认快捷键; false: 会追加到默认快捷键里,相同的shortcutKey会覆盖默认的 */
|
|
450
|
+
isReplace: false,
|
|
451
|
+
shortcutKeyMap: {
|
|
452
|
+
// 'Alt-Digit1': {
|
|
453
|
+
// hookName: 'header',
|
|
454
|
+
// aliasName: '标题',
|
|
455
|
+
// },
|
|
456
|
+
// 'Control-Shift-KeyB': {
|
|
457
|
+
// hookName: 'bold',
|
|
458
|
+
// aliasName: '加粗',
|
|
459
|
+
// },
|
|
460
|
+
},
|
|
461
|
+
},
|
|
462
|
+
// 一些按钮的配置信息
|
|
463
|
+
config: {
|
|
464
|
+
formula: {
|
|
465
|
+
showLatexLive: true, // true: 显示 www.latexlive.com 外链; false:不显示
|
|
466
|
+
templateConfig: false, // false: 使用默认模板
|
|
467
|
+
},
|
|
468
|
+
changeLocale: [
|
|
469
|
+
{
|
|
470
|
+
locale: 'zh_CN',
|
|
471
|
+
name: '中文',
|
|
472
|
+
},
|
|
473
|
+
{
|
|
474
|
+
locale: 'en_US',
|
|
475
|
+
name: 'English',
|
|
476
|
+
},
|
|
477
|
+
{
|
|
478
|
+
locale: 'ru_RU',
|
|
479
|
+
name: 'Русский',
|
|
480
|
+
},
|
|
481
|
+
],
|
|
482
|
+
},
|
|
483
|
+
},
|
|
484
|
+
// 打开draw.io编辑页的url,如果为空则drawio按钮失效
|
|
485
|
+
drawioIframeUrl: '',
|
|
486
|
+
// drawio iframe的样式
|
|
487
|
+
drawioIframeStyle: 'border: none;',
|
|
488
|
+
/**
|
|
489
|
+
* 上传文件的时候用来指定文件类型
|
|
490
|
+
*/
|
|
491
|
+
fileTypeLimitMap: {
|
|
492
|
+
video: 'video/*',
|
|
493
|
+
audio: 'audio/*',
|
|
494
|
+
image: 'image/*',
|
|
495
|
+
word: '.doc,.docx',
|
|
496
|
+
pdf: '.pdf',
|
|
497
|
+
file: '*',
|
|
498
|
+
},
|
|
499
|
+
/**
|
|
500
|
+
* 上传文件的时候是否开启多选
|
|
501
|
+
*/
|
|
502
|
+
multipleFileSelection: {
|
|
503
|
+
video: false,
|
|
504
|
+
audio: false,
|
|
505
|
+
image: false,
|
|
506
|
+
word: false,
|
|
507
|
+
pdf: false,
|
|
508
|
+
file: false,
|
|
509
|
+
},
|
|
510
|
+
callback: {
|
|
511
|
+
/**
|
|
512
|
+
* 全局的URL处理器
|
|
513
|
+
* @param {string} url 来源url
|
|
514
|
+
* @param {'image'|'audio'|'video'|'autolink'|'link'} srcType 来源类型
|
|
515
|
+
* @returns
|
|
516
|
+
*/
|
|
517
|
+
urlProcessor: callbacks.urlProcessor,
|
|
518
|
+
// 上传文件的回调
|
|
519
|
+
fileUpload: callbacks.fileUpload,
|
|
520
|
+
// 上传多文件的回调
|
|
521
|
+
fileUploadMulti: callbacks.fileUploadMulti,
|
|
522
|
+
beforeImageMounted: callbacks.beforeImageMounted,
|
|
523
|
+
// 预览区域点击事件
|
|
524
|
+
onClickPreview: callbacks.onClickPreview,
|
|
525
|
+
// 复制代码块代码时的回调
|
|
526
|
+
onCopyCode: callbacks.onCopyCode,
|
|
527
|
+
// 展开代码块代码时的回调
|
|
528
|
+
onExpandCode: callbacks.onExpandCode,
|
|
529
|
+
// 缩起代码块代码时的回调
|
|
530
|
+
onUnExpandCode: callbacks.onUnExpandCode,
|
|
531
|
+
// 把中文变成拼音的回调,当然也可以把中文变成英文、英文变成中文
|
|
532
|
+
changeString2Pinyin: callbacks.changeString2Pinyin,
|
|
533
|
+
/**
|
|
534
|
+
* 粘贴时触发
|
|
535
|
+
* @param {ClipboardEvent['clipboardData']} clipboardData
|
|
536
|
+
* @param {Cherry} cherry
|
|
537
|
+
* @returns
|
|
538
|
+
* false: 走cherry粘贴的默认逻辑
|
|
539
|
+
* string: 直接粘贴的内容
|
|
540
|
+
*/
|
|
541
|
+
onPaste: callbacks.onPaste,
|
|
542
|
+
},
|
|
543
|
+
event: {
|
|
544
|
+
// 当编辑区内容有实际变化时触发
|
|
545
|
+
afterChange: callbacks.afterChange,
|
|
546
|
+
afterInit: callbacks.afterInit,
|
|
547
|
+
focus: ({ e, cherry }) => {},
|
|
548
|
+
blur: ({ e, cherry }) => {},
|
|
549
|
+
selectionChange: ({ selections, lastSelections, info }) => {},
|
|
550
|
+
afterChangeLocale: (locale) => {},
|
|
551
|
+
changeMainTheme: (theme) => {},
|
|
552
|
+
changeCodeBlockTheme: (theme) => {},
|
|
553
|
+
},
|
|
554
|
+
previewer: {
|
|
555
|
+
dom: false,
|
|
556
|
+
className: 'cherry-markdown',
|
|
557
|
+
// 是否启用预览区域编辑能力(目前支持编辑图片尺寸、编辑表格内容)
|
|
558
|
+
enablePreviewerBubble: true,
|
|
559
|
+
floatWhenClosePreviewer: false,
|
|
560
|
+
/**
|
|
561
|
+
* 配置图片懒加载的逻辑
|
|
562
|
+
* - 如果不希望图片懒加载,可配置成 lazyLoadImg = {noLoadImgNum: -1}
|
|
563
|
+
* - 如果希望所有图片都无脑懒加载,可配置成 lazyLoadImg = {noLoadImgNum: 0, autoLoadImgNum: -1}
|
|
564
|
+
* - 如果一共有15张图片,希望:
|
|
565
|
+
* 1、前5张图片(1~5)直接加载;
|
|
566
|
+
* 2、后5张图片(6~10)不论在不在视区内,都无脑懒加载;
|
|
567
|
+
* 3、其他图片(11~15)在视区内时,进行懒加载;
|
|
568
|
+
* 则配置应该为:lazyLoadImg = {noLoadImgNum: 5, autoLoadImgNum: 5}
|
|
569
|
+
*/
|
|
570
|
+
lazyLoadImg: {
|
|
571
|
+
// 加载图片时如果需要展示loading图,则配置loading图的地址
|
|
572
|
+
loadingImgPath: '',
|
|
573
|
+
// 同一时间最多有几个图片请求,最大同时加载6张图片
|
|
574
|
+
maxNumPerTime: 2,
|
|
575
|
+
// 不进行懒加载处理的图片数量,如果为0,即所有图片都进行懒加载处理, 如果设置为-1,则所有图片都不进行懒加载处理
|
|
576
|
+
noLoadImgNum: 5,
|
|
577
|
+
// 首次自动加载几张图片(不论图片是否滚动到视野内),autoLoadImgNum = -1 表示会自动加载完所有图片
|
|
578
|
+
autoLoadImgNum: 5,
|
|
579
|
+
// 针对加载失败的图片 或 beforeLoadOneImgCallback 返回false 的图片,最多尝试加载几次,为了防止死循环,最多5次。以图片的src为纬度统计重试次数
|
|
580
|
+
maxTryTimesPerSrc: 2,
|
|
581
|
+
// 加载一张图片之前的回调函数,函数return false 会终止加载操作
|
|
582
|
+
beforeLoadOneImgCallback: (img) => {
|
|
583
|
+
return true;
|
|
584
|
+
},
|
|
585
|
+
// 加载一张图片失败之后的回调函数
|
|
586
|
+
failLoadOneImgCallback: (img) => {},
|
|
587
|
+
// 加载一张图片之后的回调函数,如果图片加载失败,则不会回调该函数
|
|
588
|
+
afterLoadOneImgCallback: (img) => {},
|
|
589
|
+
// 加载完所有图片后调用的回调函数
|
|
590
|
+
afterLoadAllImgCallback: () => {},
|
|
591
|
+
},
|
|
592
|
+
},
|
|
593
|
+
/** 定义cherry缓存的作用范围,相同nameSpace的实例共享localStorage缓存 */
|
|
594
|
+
nameSpace: 'cherry',
|
|
595
|
+
themeSettings: {
|
|
596
|
+
// 主题列表,用于切换主题
|
|
597
|
+
themeList: [
|
|
598
|
+
{ className: 'default', label: '默认' },
|
|
599
|
+
{ className: 'dark', label: '暗黑' },
|
|
600
|
+
{ className: 'light', label: '明亮' },
|
|
601
|
+
{ className: 'green', label: '清新' },
|
|
602
|
+
{ className: 'red', label: '热情' },
|
|
603
|
+
{ className: 'violet', label: '淡雅' },
|
|
604
|
+
{ className: 'blue', label: '清幽' },
|
|
605
|
+
],
|
|
606
|
+
mainTheme: 'light',
|
|
607
|
+
codeBlockTheme: 'default',
|
|
608
|
+
inlineCodeTheme: 'red', // red or black
|
|
609
|
+
toolbarTheme: 'dark', // light or dark 优先级低于mainTheme
|
|
610
|
+
},
|
|
611
|
+
// 预览页面不需要绑定事件
|
|
612
|
+
isPreviewOnly: false,
|
|
613
|
+
// 预览区域跟随编辑器光标自动滚动
|
|
614
|
+
autoScrollByCursor: true,
|
|
615
|
+
// 外层容器不存在时,是否强制输出到body上
|
|
616
|
+
forceAppend: true,
|
|
617
|
+
// The locale Cherry is going to use. Locales live in /src/locales/
|
|
618
|
+
locale: 'zh_CN',
|
|
619
|
+
// Supplementary locales
|
|
620
|
+
locales: {},
|
|
621
|
+
// cherry初始化后是否检查 location.hash 尝试滚动到对应位置
|
|
622
|
+
autoScrollByHashAfterInit: false,
|
|
623
|
+
};
|
|
624
|
+
|
|
625
|
+
export default cloneDeep(defaultConfig);
|