@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,675 @@
|
|
|
1
|
+
import CodeMirror from 'codemirror';
|
|
2
|
+
import SyntaxBase from '../src/core/SyntaxBase';
|
|
3
|
+
import { FormulaMenu } from '@/toolbars/BubbleFormula';
|
|
4
|
+
|
|
5
|
+
export interface CherryExternalsOptions {
|
|
6
|
+
[key: string]: any;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* 自定义toolbar键名[key]
|
|
11
|
+
*/
|
|
12
|
+
export interface CustomMenuType {
|
|
13
|
+
[key: string]: any;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
type CherryToolbarsCustomType = {
|
|
17
|
+
CustomMenuType: CustomMenuType
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
type CherryCustomOptions = {
|
|
21
|
+
CustomToolbar: CherryToolbarsCustomType
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* @description By by default, the types declared by Cherry markdown are supported.
|
|
27
|
+
* @description If you want to force the **custom toolbar** key type, please refer to the following.
|
|
28
|
+
* @example
|
|
29
|
+
* ```
|
|
30
|
+
* type CustomConfig = {
|
|
31
|
+
* CustomToolbar: {
|
|
32
|
+
* CustomMenuType: {
|
|
33
|
+
* customMenu_fileUpload: string
|
|
34
|
+
* },
|
|
35
|
+
* },
|
|
36
|
+
* }
|
|
37
|
+
*
|
|
38
|
+
* const cherryConfig: CherryOptions<CustomConfig> = {
|
|
39
|
+
* ...
|
|
40
|
+
* toolbars: {
|
|
41
|
+
* toolbar: [
|
|
42
|
+
* 'bold',
|
|
43
|
+
* 'italic',
|
|
44
|
+
* "customMenu_fileUpload",
|
|
45
|
+
* {
|
|
46
|
+
* customMenu_fileUpload: [
|
|
47
|
+
* 'image',
|
|
48
|
+
* 'audio',
|
|
49
|
+
* ],
|
|
50
|
+
* },
|
|
51
|
+
* 'settings',
|
|
52
|
+
* ],
|
|
53
|
+
* customMenu: {
|
|
54
|
+
* customMenu_fileUpload: customMenu_fileUpload,
|
|
55
|
+
* },
|
|
56
|
+
* }
|
|
57
|
+
* ```
|
|
58
|
+
* Among them, `customMenu` is the fixed attribute of the custom menu, and `customMenu_fileUpload` is the key name of the custom button
|
|
59
|
+
*/
|
|
60
|
+
|
|
61
|
+
export interface Cherry<T extends CherryCustomOptions = CherryCustomOptions> {
|
|
62
|
+
options: CherryOptions<T>;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export type CherryOptions<T extends CherryCustomOptions = CherryCustomOptions> = Partial<_CherryOptions<T>>;
|
|
66
|
+
|
|
67
|
+
export interface _CherryOptions<T extends CherryCustomOptions = CherryCustomOptions> {
|
|
68
|
+
openai: any;
|
|
69
|
+
/** 第三方依赖 */
|
|
70
|
+
externals: CherryExternalsOptions;
|
|
71
|
+
/** 引擎配置 */
|
|
72
|
+
engine: CherryEngineOptions;
|
|
73
|
+
/** 编辑区域配置 */
|
|
74
|
+
editor: CherryEditorOptions;
|
|
75
|
+
/** 工具栏区域配置 */
|
|
76
|
+
toolbars: CherryToolbarsOptions<T['CustomToolbar']> | undefined;
|
|
77
|
+
// 打开draw.io编辑页的url,如果为空则drawio按钮失效
|
|
78
|
+
drawioIframeUrl: string;
|
|
79
|
+
// drawio iframe的样式
|
|
80
|
+
drawioIframeStyle: string;
|
|
81
|
+
/** 文件上传回调 */
|
|
82
|
+
fileUpload: CherryFileUploadHandler;
|
|
83
|
+
/** 上传文件的时候用来指定文件类型 */
|
|
84
|
+
fileTypeLimitMap: {
|
|
85
|
+
video: string,
|
|
86
|
+
audio: string,
|
|
87
|
+
image: string,
|
|
88
|
+
word: string,
|
|
89
|
+
pdf: string,
|
|
90
|
+
file: string,
|
|
91
|
+
};
|
|
92
|
+
/** 文件是否支持多选 */
|
|
93
|
+
multipleFileSelection: {
|
|
94
|
+
video: boolean;
|
|
95
|
+
audio: boolean;
|
|
96
|
+
image: boolean;
|
|
97
|
+
word: boolean;
|
|
98
|
+
pdf: boolean;
|
|
99
|
+
file: boolean;
|
|
100
|
+
};
|
|
101
|
+
/** 定义cherry缓存的作用范围,相同nameSpace的实例共享localStorage缓存 */
|
|
102
|
+
nameSpace: string;
|
|
103
|
+
/**
|
|
104
|
+
* 有哪些主题,第三方可以自行扩展主题
|
|
105
|
+
* @deprecated 不再支持theme的配置,统一在`themeSettings.themeList`中配置
|
|
106
|
+
*/
|
|
107
|
+
theme: { className: string, label: string }[];
|
|
108
|
+
/**
|
|
109
|
+
* 定义主题的作用范围,相同themeNameSpace的实例共享主题配置
|
|
110
|
+
* @deprecated 不再支持themeNameSpace的配置,统一在`nameSpace`中配置
|
|
111
|
+
*/
|
|
112
|
+
themeNameSpace: string,
|
|
113
|
+
themeSettings: {
|
|
114
|
+
/** 主题列表,用于切换主题 */
|
|
115
|
+
themeList: {
|
|
116
|
+
/** 主题对应的class名 */
|
|
117
|
+
className: string,
|
|
118
|
+
/** 主题名称 */
|
|
119
|
+
label: string
|
|
120
|
+
}[],
|
|
121
|
+
/** cherry主题,控制工具栏、编辑区、预览区的样式 */
|
|
122
|
+
mainTheme: string,
|
|
123
|
+
/** 代码块主题 */
|
|
124
|
+
codeBlockTheme: string,
|
|
125
|
+
/** 行内代码主题,只有 red 和 black 两个主题 */
|
|
126
|
+
inlineCodeTheme: 'red' | 'black',
|
|
127
|
+
/** 工具栏主题,只有 light 和 dark 两个主题,优先级低于 mainTheme */
|
|
128
|
+
toolbarTheme: 'light' | 'dark',
|
|
129
|
+
}
|
|
130
|
+
callback: {
|
|
131
|
+
/**
|
|
132
|
+
* 全局的URL处理器,返回值将填充到编辑区域
|
|
133
|
+
* @param url 来源url
|
|
134
|
+
* @param srcType 来源类型
|
|
135
|
+
*/
|
|
136
|
+
urlProcessor?: (url: string, srcType: 'image' | 'audio' | 'video' | 'autolink' | 'link', callback?: any) => string;
|
|
137
|
+
/** 文件上传回调 */
|
|
138
|
+
fileUpload?: CherryFileUploadHandler;
|
|
139
|
+
/** 多文件上传回调 */
|
|
140
|
+
fileUploadMulti?: CherryFileUploadHandler;
|
|
141
|
+
/** 编辑器内容改变并完成渲染后触发 */
|
|
142
|
+
afterChange?: CherryLifecycle;
|
|
143
|
+
/** 编辑器完成初次渲染后触发 */
|
|
144
|
+
afterInit?: CherryLifecycle;
|
|
145
|
+
/** img 标签挂载前触发,可用于懒加载等场景 */
|
|
146
|
+
beforeImageMounted?: (srcProp: string, src: string) => { srcProp: string; src: string };
|
|
147
|
+
onClickPreview?: (e: MouseEvent) => void;
|
|
148
|
+
onCopyCode?: (e: ClipboardEvent, code: string) => string | false;
|
|
149
|
+
changeString2Pinyin?: (str: string) => string;
|
|
150
|
+
onPaste?: (clipboardData: ClipboardEvent['clipboardData'], cherry: Cherry) => string | boolean;
|
|
151
|
+
onExpandCode?: (e: MouseEvent, code: string) => string;
|
|
152
|
+
onUnExpandCode?: (e: MouseEvent, code: string) => string;
|
|
153
|
+
};
|
|
154
|
+
event: {
|
|
155
|
+
focus?: ({ e: MouseEvent, cherry: Cherry }) => void;
|
|
156
|
+
blur?: ({ e: MouseEvent, cherry: Cherry }) => void;
|
|
157
|
+
/** 编辑器内容改变并完成渲染后触发 */
|
|
158
|
+
afterChange?: CherryLifecycle;
|
|
159
|
+
/** 编辑器完成初次渲染后触发 */
|
|
160
|
+
afterInit?: CherryLifecycle;
|
|
161
|
+
/** 编辑器选区变化时触发 */
|
|
162
|
+
selectionChange?: ({ selections: [], lastSelections: [], info }) => void;
|
|
163
|
+
/** 变更语言时触发 */
|
|
164
|
+
afterChangeLocale?: (locale: string) => void;
|
|
165
|
+
/** 变更主题时触发 */
|
|
166
|
+
changeMainTheme?: (theme: string) => void;
|
|
167
|
+
/** 变更代码块主题时触发 */
|
|
168
|
+
changeCodeBlockTheme?: (theme: string) => void;
|
|
169
|
+
};
|
|
170
|
+
/** 预览区域配置 */
|
|
171
|
+
previewer: CherryPreviewerOptions;
|
|
172
|
+
/** 是否开启仅预览模式 */
|
|
173
|
+
isPreviewOnly: boolean;
|
|
174
|
+
/** 预览区域跟随编辑器光标自动滚动 */
|
|
175
|
+
autoScrollByCursor: boolean;
|
|
176
|
+
/** 外层容器不存在时,是否强制输出到body上 */
|
|
177
|
+
forceAppend: boolean;
|
|
178
|
+
/** cherry初始化后是否检查 location.hash 尝试滚动到对应位置 */
|
|
179
|
+
autoScrollByHashAfterInit: boolean;
|
|
180
|
+
/** 挂载DOM节点ID,引擎模式下不生效 */
|
|
181
|
+
id?: string;
|
|
182
|
+
/** 挂载DOM节点,引擎模式下不生效 */
|
|
183
|
+
el?: HTMLElement;
|
|
184
|
+
/** 初始内容,引擎模式下不生效 */
|
|
185
|
+
value: string;
|
|
186
|
+
instanceId?: string;
|
|
187
|
+
/** Locale **/
|
|
188
|
+
locale: string;
|
|
189
|
+
locales: {
|
|
190
|
+
[locale: string]: Record<string, string>
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* 自定义语法注册配置
|
|
196
|
+
*/
|
|
197
|
+
export interface CustomSyntaxRegConfig {
|
|
198
|
+
/** 语法class */
|
|
199
|
+
syntaxClass: typeof SyntaxBase;
|
|
200
|
+
/** 在某个hook前执行,填入hookName */
|
|
201
|
+
before?: string;
|
|
202
|
+
/** 在某个hook后执行,填入hookName */
|
|
203
|
+
after?: string;
|
|
204
|
+
/** 强制覆盖同名hook */
|
|
205
|
+
force?: boolean;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
export interface CherryEngineOptions {
|
|
209
|
+
/** 引擎的全局配置 */
|
|
210
|
+
global?: {
|
|
211
|
+
/**
|
|
212
|
+
* 是否启用经典换行逻辑
|
|
213
|
+
* true:一个换行会被忽略,两个以上连续换行会分割成段落,
|
|
214
|
+
* false: 一个换行会转成<br>,两个连续换行会分割成段落,三个以上连续换行会转成<br>并分割段落
|
|
215
|
+
*/
|
|
216
|
+
classicBr?: boolean;
|
|
217
|
+
/**
|
|
218
|
+
* 全局的URL处理器,返回值将填充到编辑区域
|
|
219
|
+
* @param url 来源url
|
|
220
|
+
* @param srcType 来源类型
|
|
221
|
+
*/
|
|
222
|
+
urlProcessor?: (url: string, srcType: 'image' | 'audio' | 'video' | 'autolink' | 'link', callback?: any) => string;
|
|
223
|
+
/**
|
|
224
|
+
* 额外允许渲染的html标签
|
|
225
|
+
* 标签以英文竖线分隔,如:htmlWhiteList: 'iframe|script|style'
|
|
226
|
+
* 默认为空,默认允许渲染的html见src/utils/sanitize.js whiteList 属性
|
|
227
|
+
* 需要注意:
|
|
228
|
+
* - 启用iframe、script等标签后,会产生xss注入,请根据实际场景判断是否需要启用
|
|
229
|
+
* - 一般编辑权限可控的场景(如api文档系统)可以允许iframe、script等标签
|
|
230
|
+
*/
|
|
231
|
+
htmlWhiteList?: string;
|
|
232
|
+
/**
|
|
233
|
+
* 适配流式会话的场景,开启后将具备以下特性:
|
|
234
|
+
* 1. 代码块自动闭合,相当于强制 `engine.syntax.codeBlock.selfClosing=true`
|
|
235
|
+
* 2. 文章末尾的段横线标题语法(`\n-`)失效
|
|
236
|
+
*
|
|
237
|
+
* 后续如果有新的需求,可提issue反馈
|
|
238
|
+
*/
|
|
239
|
+
flowSessionContext?: boolean;
|
|
240
|
+
/**
|
|
241
|
+
* 流式会话时,在最后位置增加一个类似光标的dom
|
|
242
|
+
* - 'default':用cherry提供的默认样式
|
|
243
|
+
* - '':不增加任何dom
|
|
244
|
+
* - '<span class="custom-cursor"></span>': 自定义的dom
|
|
245
|
+
*/
|
|
246
|
+
flowSessionCursor?: string;
|
|
247
|
+
};
|
|
248
|
+
/** 内置语法配置 */
|
|
249
|
+
syntax?: {
|
|
250
|
+
// 语法开关
|
|
251
|
+
// 'hookName': false,
|
|
252
|
+
// 语法配置
|
|
253
|
+
// 'hookName': {
|
|
254
|
+
//
|
|
255
|
+
// }
|
|
256
|
+
link?: {
|
|
257
|
+
/** 生成的<a>标签追加target属性的默认值 空:在<a>标签里不会追加target属性, _blank:在<a>标签里追加target="_blank"属性 */
|
|
258
|
+
target?: '_blank' | '',
|
|
259
|
+
/** 生成的<a>标签追加rel属性的默认值 空:在<a>标签里不会追加rel属性, nofollow:在<a>标签里追加rel="nofollow:在"属性*/
|
|
260
|
+
rel?: '_blank' | 'nofollow' | '',
|
|
261
|
+
},
|
|
262
|
+
autoLink?: {
|
|
263
|
+
/** 生成的<a>标签追加target属性的默认值 空:在<a>标签里不会追加target属性, _blank:在<a>标签里追加target="_blank"属性 */
|
|
264
|
+
target?: '_blank' | '',
|
|
265
|
+
/** 生成的<a>标签追加rel属性的默认值 空:在<a>标签里不会追加rel属性, nofollow:在<a>标签里追加rel="nofollow:在"属性*/
|
|
266
|
+
rel?: '_blank' | 'nofollow' | '',
|
|
267
|
+
/** 是否开启短链接 默认:true */
|
|
268
|
+
enableShortLink?: boolean,
|
|
269
|
+
/** 短链接长度 默认:20 */
|
|
270
|
+
shortLinkLength?: number,
|
|
271
|
+
},
|
|
272
|
+
list?: {
|
|
273
|
+
listNested?: boolean, // 同级列表类型转换后变为子级
|
|
274
|
+
indentSpace?: number, // 默认2个空格缩进
|
|
275
|
+
},
|
|
276
|
+
table: {
|
|
277
|
+
enableChart?: boolean,
|
|
278
|
+
selfClosing?: boolean, // 自动闭合,为true时,当输入第一行table内容时,cherry会自动按表格进行解析
|
|
279
|
+
// chartRenderEngine: EChartsTableEngine,
|
|
280
|
+
// externals: ['echarts'],
|
|
281
|
+
},
|
|
282
|
+
inlineCode?: {
|
|
283
|
+
/**
|
|
284
|
+
* @deprecated 不再支持theme的配置,统一在`themeSettings.inlineCodeTheme`中配置
|
|
285
|
+
*/
|
|
286
|
+
// theme: 'red',
|
|
287
|
+
},
|
|
288
|
+
codeBlock?: {
|
|
289
|
+
/**
|
|
290
|
+
* @deprecated 不再支持theme的配置,统一在`themeSettings.codeBlockTheme`中配置
|
|
291
|
+
*/
|
|
292
|
+
// theme: 'dark', // 默认为深色主题
|
|
293
|
+
wrap?: boolean, // 超出长度是否换行,false则显示滚动条
|
|
294
|
+
lineNumber?: boolean, // 默认显示行号
|
|
295
|
+
copyCode?: boolean, // 是否显示“复制”按钮
|
|
296
|
+
editCode?: boolean, // 是否显示“编辑”按钮
|
|
297
|
+
changeLang?: boolean, // 是否显示“切换语言”按钮
|
|
298
|
+
expandCode?: boolean, // 是否展开/收起代码块,当代码块行数大于10行时,会自动收起代码块
|
|
299
|
+
selfClosing?: boolean, // 自动闭合,为true时,当md中有奇数个```时,会自动在md末尾追加一个```
|
|
300
|
+
customRenderer?: {
|
|
301
|
+
// 自定义语法渲染器
|
|
302
|
+
},
|
|
303
|
+
mermaid?: {
|
|
304
|
+
svg2img?: boolean, // 是否将mermaid生成的画图变成img格式
|
|
305
|
+
},
|
|
306
|
+
/**
|
|
307
|
+
* indentedCodeBlock是缩进代码块是否启用的开关
|
|
308
|
+
*
|
|
309
|
+
* 在6.X之前的版本中默认不支持该语法。
|
|
310
|
+
* 因为cherry的开发团队认为该语法太丑了(容易误触)
|
|
311
|
+
* 开发团队希望用```代码块语法来彻底取代该语法
|
|
312
|
+
* 但在后续的沟通中,开发团队发现在某些场景下该语法有更好的显示效果
|
|
313
|
+
* 因此开发团队在6.X版本中才引入了该语法
|
|
314
|
+
* 已经引用6.x以下版本的业务如果想做到用户无感知升级,可以去掉该语法:
|
|
315
|
+
* indentedCodeBlock:false
|
|
316
|
+
*/
|
|
317
|
+
indentedCodeBlock?: boolean,
|
|
318
|
+
/**
|
|
319
|
+
* 自定义按钮,出现在代码块右上角
|
|
320
|
+
**/
|
|
321
|
+
customBtns?: {
|
|
322
|
+
'html': '',
|
|
323
|
+
'onClick': (event: MouseEvent, code: string, language: string) => {},
|
|
324
|
+
}[],
|
|
325
|
+
},
|
|
326
|
+
emoji?: {
|
|
327
|
+
useUnicode?: boolean, // 是否使用unicode进行渲染
|
|
328
|
+
},
|
|
329
|
+
fontEmphasis?: {
|
|
330
|
+
/**
|
|
331
|
+
* 是否允许首尾空格
|
|
332
|
+
* 首尾、前后的定义: 语法前**语法首+内容+语法尾**语法后
|
|
333
|
+
* 例:
|
|
334
|
+
* true:
|
|
335
|
+
* __ hello __ ====> <strong> hello </strong>
|
|
336
|
+
* __hello__ ====> <strong>hello</strong>
|
|
337
|
+
* false:
|
|
338
|
+
* __ hello __ ====> <em>_ hello _</em>
|
|
339
|
+
* __hello__ ====> <strong>hello</strong>
|
|
340
|
+
*/
|
|
341
|
+
allowWhitespace?: boolean,
|
|
342
|
+
selfClosing?: boolean, // 自动闭合,为true时,当输入**XXX时,会自动在末尾追加**
|
|
343
|
+
},
|
|
344
|
+
strikethrough?: {
|
|
345
|
+
/**
|
|
346
|
+
* 是否必须有前后空格
|
|
347
|
+
* 首尾、前后的定义: 语法前**语法首+内容+语法尾**语法后
|
|
348
|
+
* 例:
|
|
349
|
+
* true:
|
|
350
|
+
* hello wor~~l~~d ====> hello wor~~l~~d
|
|
351
|
+
* hello wor ~~l~~ d ====> hello wor <del>l</del> d
|
|
352
|
+
* false:
|
|
353
|
+
* hello wor~~l~~d ====> hello wor<del>l</del>d
|
|
354
|
+
* hello wor ~~l~~ d ====> hello wor <del>l</del> d
|
|
355
|
+
*/
|
|
356
|
+
needWhitespace?: boolean,
|
|
357
|
+
},
|
|
358
|
+
mathBlock?: {
|
|
359
|
+
engine?: 'katex' | 'MathJax', // katex或MathJax
|
|
360
|
+
src?: string,
|
|
361
|
+
plugins?: boolean, // 加载插件
|
|
362
|
+
},
|
|
363
|
+
inlineMath?: {
|
|
364
|
+
engine?: 'katex' | 'MathJax', // katex或MathJax
|
|
365
|
+
src?: string,
|
|
366
|
+
},
|
|
367
|
+
toc?: {
|
|
368
|
+
/** 默认只渲染一个目录 */
|
|
369
|
+
allowMultiToc?: boolean,
|
|
370
|
+
/** 是否显示自增序号 */
|
|
371
|
+
showAutoNumber?: boolean,
|
|
372
|
+
},
|
|
373
|
+
header?: {
|
|
374
|
+
/**
|
|
375
|
+
* 标题的样式:
|
|
376
|
+
* - default 默认样式,标题前面有锚点
|
|
377
|
+
* - autonumber 标题前面有自增序号锚点
|
|
378
|
+
* - none 标题没有锚点
|
|
379
|
+
*/
|
|
380
|
+
anchorStyle?: 'default' | 'autonumber' | 'none',
|
|
381
|
+
/**
|
|
382
|
+
* 是否开启严格模式
|
|
383
|
+
* true:严格模式
|
|
384
|
+
* # head ⭕️ valid
|
|
385
|
+
* #head ❌ invalid
|
|
386
|
+
* false:宽松模式
|
|
387
|
+
* # head ⭕️ valid
|
|
388
|
+
* #head ⭕️ valid
|
|
389
|
+
*/
|
|
390
|
+
strict?: boolean,
|
|
391
|
+
},
|
|
392
|
+
htmlBlock?: {
|
|
393
|
+
/**
|
|
394
|
+
* 是否过滤html标签中的style属性
|
|
395
|
+
* true:过滤style属性
|
|
396
|
+
* false:不过滤style属性
|
|
397
|
+
*/
|
|
398
|
+
filterStyle?: boolean,
|
|
399
|
+
},
|
|
400
|
+
};
|
|
401
|
+
/** 自定义语法 */
|
|
402
|
+
customSyntax?: Record<string, CustomSyntaxRegConfig['syntaxClass'] | CustomSyntaxRegConfig>;
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
export type EditorMode =
|
|
406
|
+
/** 仅编辑 */
|
|
407
|
+
| 'editOnly'
|
|
408
|
+
/** 仅预览 */
|
|
409
|
+
| 'previewOnly'
|
|
410
|
+
/** 双栏编辑 */
|
|
411
|
+
| 'edit&preview';
|
|
412
|
+
|
|
413
|
+
export interface CherryEditorOptions {
|
|
414
|
+
id?: string; // textarea 的id属性值
|
|
415
|
+
name?: string; // textarea 的name属性值
|
|
416
|
+
autoSave2Textarea?: boolean; // 是否自动将编辑区的内容回写到textarea里
|
|
417
|
+
/**
|
|
418
|
+
* @deprecated 不再支持theme的配置,废弃该功能,统一由`themeSettings.mainTheme`配置
|
|
419
|
+
*/
|
|
420
|
+
theme?: string;
|
|
421
|
+
/** 编辑器的高度,默认100%,如果挂载点存在内联设置的height则以内联样式为主 */
|
|
422
|
+
height?: string;
|
|
423
|
+
/** 编辑器初始化后的模式 */
|
|
424
|
+
defaultModel?: EditorMode;
|
|
425
|
+
/** 粘贴时是否自动将html转成markdown */
|
|
426
|
+
convertWhenPaste?: boolean;
|
|
427
|
+
/** 快捷键风格,目前仅支持 sublime 和 vim */
|
|
428
|
+
keyMap?: 'sublime' | 'vim';
|
|
429
|
+
/** 透传给codemirror的配置项 */
|
|
430
|
+
codemirror?: object;
|
|
431
|
+
/** 书写风格,normal 普通 | typewriter 打字机 | focus 专注,默认normal */
|
|
432
|
+
writingStyle?: string;
|
|
433
|
+
editor?: CodeMirror.Editor;
|
|
434
|
+
/** 在初始化后是否保持网页的滚动,true:保持滚动;false:网页自动滚动到cherry初始化的位置 */
|
|
435
|
+
keepDocumentScrollAfterInit?: boolean;
|
|
436
|
+
/** 是否高亮全角符号 ·|¥|、|:|“|”|【|】|(|)|《|》 */
|
|
437
|
+
showFullWidthMark?: boolean;
|
|
438
|
+
/** 是否显示联想框 */
|
|
439
|
+
showSuggestList?: boolean;
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
export type CherryLifecycle = (text: string, html: string) => void;
|
|
443
|
+
|
|
444
|
+
export interface CherryPreviewerOptions {
|
|
445
|
+
dom?: HTMLDivElement | false;
|
|
446
|
+
/** 预览区域的DOM className */
|
|
447
|
+
className?: string;
|
|
448
|
+
enablePreviewerBubble?: boolean;
|
|
449
|
+
floatWhenClosePreviewer?: boolean;
|
|
450
|
+
// 配置图片懒加载的逻辑
|
|
451
|
+
lazyLoadImg?: {
|
|
452
|
+
// 加载图片时如果需要展示loaing图,则配置loading图的地址
|
|
453
|
+
loadingImgPath?: string;
|
|
454
|
+
// 同一时间最多有几个图片请求,最大同时加载6张图片
|
|
455
|
+
maxNumPerTime?: 1 | 2 | 3 | 4 | 5 | 6,
|
|
456
|
+
// 不进行懒加载处理的图片数量,如果为0,即所有图片都进行懒加载处理, 如果设置为-1,则所有图片都不进行懒加载处理
|
|
457
|
+
noLoadImgNum?: number,
|
|
458
|
+
// 首次自动加载几张图片(不论图片是否滚动到视野内),autoLoadImgNum = -1 表示会自动加载完所有图片
|
|
459
|
+
autoLoadImgNum?: -1 | number;
|
|
460
|
+
// 针对加载失败的图片 或 beforeLoadOneImgCallback 返回false 的图片,最多尝试加载几次,为了防止死循环,最多5次。以图片的src为纬度统计重试次数
|
|
461
|
+
maxTryTimesPerSrc?: 0 | 1 | 2 | 3 | 4 | 5,
|
|
462
|
+
// 加载一张图片之前的回调函数,函数return false 会终止加载操作
|
|
463
|
+
beforeLoadOneImgCallback?: (img: HTMLImageElement) => void | boolean;
|
|
464
|
+
// 加载一张图片失败之后的回调函数
|
|
465
|
+
failLoadOneImgCallback?: (img: HTMLImageElement) => void;
|
|
466
|
+
// 加载一张图片之后的回调函数,如果图片加载失败,则不会回调该函数
|
|
467
|
+
afterLoadOneImgCallback?: (img: HTMLImageElement) => void;
|
|
468
|
+
// 加载完所有图片后调用的回调函数
|
|
469
|
+
afterLoadAllImgCallback?: () => void;
|
|
470
|
+
};
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
export type CherryToolbarSeparator = '|';
|
|
474
|
+
|
|
475
|
+
export type CherryDefaultToolbar =
|
|
476
|
+
| 'audio'
|
|
477
|
+
| 'bar-table'
|
|
478
|
+
| 'bold'
|
|
479
|
+
| 'br'
|
|
480
|
+
| 'checklist'
|
|
481
|
+
| 'code'
|
|
482
|
+
| 'codeTheme'
|
|
483
|
+
| 'color'
|
|
484
|
+
| 'copy'
|
|
485
|
+
| 'detail'
|
|
486
|
+
| 'drawIo'
|
|
487
|
+
| 'export'
|
|
488
|
+
| 'file'
|
|
489
|
+
| 'fullScreen'
|
|
490
|
+
| 'formula'
|
|
491
|
+
| 'graph'
|
|
492
|
+
| 'h1'
|
|
493
|
+
| 'h2'
|
|
494
|
+
| 'h3'
|
|
495
|
+
| 'header'
|
|
496
|
+
| 'hr'
|
|
497
|
+
| 'image'
|
|
498
|
+
| 'insert'
|
|
499
|
+
| 'italic'
|
|
500
|
+
| 'justify'
|
|
501
|
+
| 'line-table'
|
|
502
|
+
| 'link'
|
|
503
|
+
| 'list'
|
|
504
|
+
| 'mobilePreview'
|
|
505
|
+
| 'ol'
|
|
506
|
+
| 'panel'
|
|
507
|
+
| 'pdf'
|
|
508
|
+
| 'publish'
|
|
509
|
+
| 'quickTable'
|
|
510
|
+
| 'quote'
|
|
511
|
+
| 'redo'
|
|
512
|
+
| 'ruby'
|
|
513
|
+
| 'settings'
|
|
514
|
+
| 'size'
|
|
515
|
+
| 'strikethrough'
|
|
516
|
+
| 'sub'
|
|
517
|
+
| 'sup'
|
|
518
|
+
| 'switchModel'
|
|
519
|
+
| 'table'
|
|
520
|
+
| 'theme'
|
|
521
|
+
| 'toc'
|
|
522
|
+
| 'togglePreview'
|
|
523
|
+
| 'underline'
|
|
524
|
+
| 'undo'
|
|
525
|
+
| 'ul'
|
|
526
|
+
| 'video'
|
|
527
|
+
| 'word'
|
|
528
|
+
| 'wordCount';
|
|
529
|
+
|
|
530
|
+
export type CherryDefaultBubbleToolbar =
|
|
531
|
+
| CherryToolbarSeparator
|
|
532
|
+
| 'bold'
|
|
533
|
+
| 'italic'
|
|
534
|
+
| 'strikethrough'
|
|
535
|
+
| 'sub'
|
|
536
|
+
| 'sup'
|
|
537
|
+
| 'size'
|
|
538
|
+
| 'color';
|
|
539
|
+
|
|
540
|
+
export type CherryDefaultFloatToolbar =
|
|
541
|
+
| CherryToolbarSeparator
|
|
542
|
+
| 'h1'
|
|
543
|
+
| 'h2'
|
|
544
|
+
| 'h3'
|
|
545
|
+
| 'checklist'
|
|
546
|
+
| 'quote'
|
|
547
|
+
| 'quickTable'
|
|
548
|
+
| 'code';
|
|
549
|
+
|
|
550
|
+
export type SupportPlatform = 'wechat' | 'toutiao';
|
|
551
|
+
export interface CherryPublishToolbarOption {
|
|
552
|
+
/** 发布平台名称 */
|
|
553
|
+
name: string;
|
|
554
|
+
/** 发布平台唯一标识 */
|
|
555
|
+
key: SupportPlatform;
|
|
556
|
+
/** 发布平台图标地址 */
|
|
557
|
+
icon?: string;
|
|
558
|
+
/** 发布平台图标名称(需存在) */
|
|
559
|
+
iconName?: string;
|
|
560
|
+
/** 发布平台服务地址 */
|
|
561
|
+
serviceUrl: string;
|
|
562
|
+
/**
|
|
563
|
+
* 额外注入的payload
|
|
564
|
+
*/
|
|
565
|
+
injectPayload?: Record<string, any> | (() => Promise<Record<string, any>>) | (() => Record<string, any>);
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
export interface CherryFormulaToolbarOption {
|
|
569
|
+
/** 显示外链 */
|
|
570
|
+
showLatexLive?: boolean;
|
|
571
|
+
/** 使用默认模板 */
|
|
572
|
+
templateConfig?: boolean | Record<string, FormulaMenu>;
|
|
573
|
+
}
|
|
574
|
+
export interface CherryToolbarConfig {
|
|
575
|
+
/** 发布功能配置 */
|
|
576
|
+
publish?: CherryPublishToolbarOption[]
|
|
577
|
+
/** 公式 */
|
|
578
|
+
formula?: CherryFormulaToolbarOption
|
|
579
|
+
changeLocale?: CherryChangeLocaleToolbarOption[]
|
|
580
|
+
}
|
|
581
|
+
export interface CherryChangeLocaleToolbarOption {
|
|
582
|
+
locale: string;
|
|
583
|
+
name: string;
|
|
584
|
+
}
|
|
585
|
+
export interface CherryToolbarsOptions<F extends CherryToolbarsCustomType = CherryToolbarsCustomType> {
|
|
586
|
+
/**
|
|
587
|
+
* @deprecated 不再支持theme的配置,统一在`themeSettings.toolbarTheme`中配置
|
|
588
|
+
*/
|
|
589
|
+
theme?: 'light' | 'dark';
|
|
590
|
+
toolbar?:
|
|
591
|
+
| (CherryDefaultBubbleToolbar |
|
|
592
|
+
CherryDefaultToolbar |
|
|
593
|
+
keyof Partial<F['CustomMenuType']> |
|
|
594
|
+
{ [K in (keyof Partial<F['CustomMenuType']>) | CherryDefaultToolbar]?: (keyof F['CustomMenuType'] | CherryDefaultToolbar)[] })[]
|
|
595
|
+
| false;
|
|
596
|
+
toolbarRight?:
|
|
597
|
+
| (CherryDefaultBubbleToolbar | CherryDefaultToolbar)[]
|
|
598
|
+
| false;
|
|
599
|
+
/** 是否展示悬浮目录 */
|
|
600
|
+
toc?: false | {
|
|
601
|
+
/** 要不要更新URL的hash */
|
|
602
|
+
updateLocationHash?: boolean,
|
|
603
|
+
/** pure: 精简模式/缩略模式,只有一排小点; full: 完整模式,会展示所有标题 */
|
|
604
|
+
defaultModel?: 'pure' | 'full',
|
|
605
|
+
/** 是否显示自增序号 */
|
|
606
|
+
showAutoNumber?: boolean,
|
|
607
|
+
/** 悬浮目录的悬浮方式。当滚动条在cherry内部时,用absolute;当滚动条在cherry外部时,用fixed */
|
|
608
|
+
position?: 'absolute' | 'fixed',
|
|
609
|
+
/** 额外样式 */
|
|
610
|
+
cssText?: string,
|
|
611
|
+
};
|
|
612
|
+
/** 不展示在编辑器中的工具栏,只使用工具栏的api和快捷键功能 */
|
|
613
|
+
hiddenToolbar?: any[];
|
|
614
|
+
/** 是否展示顶部工具栏 */
|
|
615
|
+
showToolbar?: boolean;
|
|
616
|
+
/** 侧边栏配置 */
|
|
617
|
+
sidebar?: any[] | false;
|
|
618
|
+
/** 选中悬停菜单配置 */
|
|
619
|
+
bubble?: any[] | false;
|
|
620
|
+
/** 新行悬停菜单配置 */
|
|
621
|
+
float?: any[] | false;
|
|
622
|
+
customMenu?: Record<string, any>;
|
|
623
|
+
/**
|
|
624
|
+
* 自定义快捷键
|
|
625
|
+
* @deprecated 请使用`shortcutKeySettings`
|
|
626
|
+
*/
|
|
627
|
+
shortcutKey?: Object | false;
|
|
628
|
+
/**
|
|
629
|
+
* 自定义快捷键
|
|
630
|
+
*/
|
|
631
|
+
shortcutKeySettings?: {
|
|
632
|
+
/** 是否替换已有的快捷键, true: 替换默认快捷键; false: 会追加到默认快捷键里,相同的shortcutKey会覆盖默认的 */
|
|
633
|
+
isReplace?: boolean,
|
|
634
|
+
shortcutKeyMap?: { [shortcutKey: string]: ShortcutKeyMapStruct };
|
|
635
|
+
};
|
|
636
|
+
/** 一些按钮的配置信息 */
|
|
637
|
+
config?: CherryToolbarConfig;
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
export interface CherryFileUploadHandler {
|
|
641
|
+
/**
|
|
642
|
+
* @param file 用户上传的文件对象
|
|
643
|
+
* @param callback 回调函数,接收最终的文件url
|
|
644
|
+
*/
|
|
645
|
+
(file: File,
|
|
646
|
+
/**
|
|
647
|
+
* @param params.name 回填的alt信息
|
|
648
|
+
* @param params.poster 封面图片地址(视频的场景下生效)
|
|
649
|
+
* @param params.isBorder 是否有边框样式(图片场景下生效)
|
|
650
|
+
* @param params.isShadow 是否有阴影样式(图片场景下生效)
|
|
651
|
+
* @param params.isRadius 是否有圆角样式(图片场景下生效)
|
|
652
|
+
* @param params.width 设置宽度,可以是像素、也可以是百分比(图片、视频场景下生效)
|
|
653
|
+
* @param params.height 设置高度,可以是像素、也可以是百分比(图片、视频场景下生效)
|
|
654
|
+
*/
|
|
655
|
+
callback: (url: string, params?: { name?: string, poster?: string, isBorder?: boolean, isShadow?: boolean, isRadius?: boolean; width?: string, height?: string }
|
|
656
|
+
) => void): void;
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
|
|
660
|
+
type ShortcutKeyMapStruct = {
|
|
661
|
+
/**
|
|
662
|
+
* 原始hook
|
|
663
|
+
*/
|
|
664
|
+
hookName: string;
|
|
665
|
+
/**
|
|
666
|
+
* 展示名称
|
|
667
|
+
*/
|
|
668
|
+
aliasName: string;
|
|
669
|
+
/**
|
|
670
|
+
* 其他扩展字段
|
|
671
|
+
* 如果存在则会赋值给 data-[fieldName]=value 存储记录
|
|
672
|
+
* @summary 切记不要使用驼峰,因为dataset 会全部转成全小写,除非你在取值的时候能记住,否则永远不要这么做
|
|
673
|
+
*/
|
|
674
|
+
[x: string]: string | number;
|
|
675
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
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 * as CodeMirror from 'codemirror';
|
|
17
|
+
|
|
18
|
+
declare module 'codemirror' {
|
|
19
|
+
interface LineHandle {
|
|
20
|
+
height: number;
|
|
21
|
+
}
|
|
22
|
+
}
|