@gravity-ui/markdown-editor 15.1.0 → 15.2.1
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/build/cjs/bundle/Editor.d.ts +3 -0
- package/build/cjs/bundle/Editor.js +21 -2
- package/build/cjs/bundle/Editor.js.map +1 -1
- package/build/cjs/bundle/MarkdownEditorView.js +2 -1
- package/build/cjs/bundle/MarkdownEditorView.js.map +1 -1
- package/build/cjs/bundle/MarkupEditorView.js +6 -1
- package/build/cjs/bundle/MarkupEditorView.js.map +1 -1
- package/build/cjs/bundle/MarkupManager.d.ts +3 -6
- package/build/cjs/bundle/MarkupManager.js +5 -5
- package/build/cjs/bundle/MarkupManager.js.map +1 -1
- package/build/cjs/bundle/WysiwygEditorView.js +6 -1
- package/build/cjs/bundle/WysiwygEditorView.js.map +1 -1
- package/build/cjs/bundle/types.d.ts +2 -0
- package/build/cjs/bundle/types.js.map +1 -1
- package/build/cjs/bundle/useMarkdownEditor.js +4 -2
- package/build/cjs/bundle/useMarkdownEditor.js.map +1 -1
- package/build/cjs/core/Editor.d.ts +3 -1
- package/build/cjs/core/Editor.js +6 -3
- package/build/cjs/core/Editor.js.map +1 -1
- package/build/cjs/core/ExtensionBuilder.d.ts +3 -1
- package/build/cjs/core/ExtensionBuilder.js +6 -1
- package/build/cjs/core/ExtensionBuilder.js.map +1 -1
- package/build/cjs/core/ExtensionsManager.d.ts +4 -2
- package/build/cjs/core/ExtensionsManager.js +6 -5
- package/build/cjs/core/ExtensionsManager.js.map +1 -1
- package/build/cjs/core/ParserTokensRegistry.d.ts +6 -0
- package/build/cjs/core/ParserTokensRegistry.js +9 -1
- package/build/cjs/core/ParserTokensRegistry.js.map +1 -1
- package/build/cjs/core/index.d.ts +1 -0
- package/build/cjs/core/index.js +3 -1
- package/build/cjs/core/index.js.map +1 -1
- package/build/cjs/core/markdown/MarkdownParser.d.ts +9 -1
- package/build/cjs/core/markdown/MarkdownParser.js +7 -3
- package/build/cjs/core/markdown/MarkdownParser.js.map +1 -1
- package/build/cjs/core/utils/logger.d.ts +3 -0
- package/build/cjs/core/utils/logger.js +12 -0
- package/build/cjs/core/utils/logger.js.map +1 -0
- package/build/cjs/core/utils/metrics.d.ts +2 -1
- package/build/cjs/core/utils/metrics.js +8 -2
- package/build/cjs/core/utils/metrics.js.map +1 -1
- package/build/cjs/extensions/additional/YfmHtmlBlock/utils.d.ts +1 -1
- package/build/cjs/extensions/additional/YfmHtmlBlock/utils.js +2 -2
- package/build/cjs/extensions/additional/YfmHtmlBlock/utils.js.map +1 -1
- package/build/cjs/extensions/behavior/Autocomplete/handler.d.ts +3 -1
- package/build/cjs/extensions/behavior/Autocomplete/handler.js +16 -10
- package/build/cjs/extensions/behavior/Autocomplete/handler.js.map +1 -1
- package/build/cjs/extensions/behavior/Autocomplete/index.js +1 -1
- package/build/cjs/extensions/behavior/Autocomplete/index.js.map +1 -1
- package/build/cjs/extensions/behavior/Clipboard/clipboard.d.ts +3 -1
- package/build/cjs/extensions/behavior/Clipboard/clipboard.js +31 -3
- package/build/cjs/extensions/behavior/Clipboard/clipboard.js.map +1 -1
- package/build/cjs/extensions/behavior/Clipboard/index.js +4 -0
- package/build/cjs/extensions/behavior/Clipboard/index.js.map +1 -1
- package/build/cjs/extensions/behavior/CommandMenu/handler.d.ts +3 -1
- package/build/cjs/extensions/behavior/CommandMenu/handler.js +6 -3
- package/build/cjs/extensions/behavior/CommandMenu/handler.js.map +1 -1
- package/build/cjs/extensions/behavior/CommandMenu/index.js +5 -3
- package/build/cjs/extensions/behavior/CommandMenu/index.js.map +1 -1
- package/build/cjs/extensions/behavior/EditorModeKeymap/index.js +13 -2
- package/build/cjs/extensions/behavior/EditorModeKeymap/index.js.map +1 -1
- package/build/cjs/extensions/behavior/FilePaste/index.d.ts +1 -1
- package/build/cjs/extensions/behavior/FilePaste/index.js +12 -0
- package/build/cjs/extensions/behavior/FilePaste/index.js.map +1 -1
- package/build/cjs/extensions/behavior/SelectionContext/index.js +3 -3
- package/build/cjs/extensions/behavior/SelectionContext/index.js.map +1 -1
- package/build/cjs/extensions/behavior/SelectionContext/tooltip.d.ts +3 -1
- package/build/cjs/extensions/behavior/SelectionContext/tooltip.js +7 -2
- package/build/cjs/extensions/behavior/SelectionContext/tooltip.js.map +1 -1
- package/build/cjs/extensions/behavior/utils/upload.d.ts +2 -0
- package/build/cjs/extensions/behavior/utils/upload.js +3 -0
- package/build/cjs/extensions/behavior/utils/upload.js.map +1 -1
- package/build/cjs/extensions/markdown/Breaks/index.js +2 -1
- package/build/cjs/extensions/markdown/Breaks/index.js.map +1 -1
- package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js +2 -1
- package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js.map +1 -1
- package/build/cjs/extensions/markdown/Deflist/DeflistSpecs/index.js +2 -2
- package/build/cjs/extensions/markdown/Deflist/DeflistSpecs/index.js.map +1 -1
- package/build/cjs/extensions/markdown/Html/index.js +2 -1
- package/build/cjs/extensions/markdown/Html/index.js.map +1 -1
- package/build/cjs/extensions/markdown/Html/schema.js +2 -2
- package/build/cjs/extensions/markdown/Html/schema.js.map +1 -1
- package/build/cjs/extensions/markdown/Link/paste-plugin.d.ts +1 -1
- package/build/cjs/extensions/markdown/Link/paste-plugin.js +11 -0
- package/build/cjs/extensions/markdown/Link/paste-plugin.js.map +1 -1
- package/build/cjs/extensions/markdown/Superscript/SuperscriptSpecs/index.js +3 -3
- package/build/cjs/extensions/markdown/Superscript/SuperscriptSpecs/index.js.map +1 -1
- package/build/cjs/extensions/yfm/Checkbox/CheckboxSpecs/index.js +2 -2
- package/build/cjs/extensions/yfm/Checkbox/CheckboxSpecs/index.js.map +1 -1
- package/build/cjs/extensions/yfm/Emoji/EmojiSpecs/EmojiSpecs.js +2 -2
- package/build/cjs/extensions/yfm/Emoji/EmojiSpecs/EmojiSpecs.js.map +1 -1
- package/build/cjs/extensions/yfm/ImgSize/ImagePaste/index.d.ts +1 -1
- package/build/cjs/extensions/yfm/ImgSize/ImagePaste/index.js +14 -0
- package/build/cjs/extensions/yfm/ImgSize/ImagePaste/index.js.map +1 -1
- package/build/cjs/extensions/yfm/ImgSize/ImagePaste/upload.js +6 -5
- package/build/cjs/extensions/yfm/ImgSize/ImagePaste/upload.js.map +1 -1
- package/build/cjs/extensions/yfm/ImgSize/ImgSizeSpecs/const.d.ts +1 -1
- package/build/cjs/extensions/yfm/ImgSize/ImgSizeSpecs/const.js +6 -6
- package/build/cjs/extensions/yfm/ImgSize/ImgSizeSpecs/const.js.map +1 -1
- package/build/cjs/extensions/yfm/ImgSize/ImgSizeSpecs/index.js +3 -3
- package/build/cjs/extensions/yfm/ImgSize/ImgSizeSpecs/index.js.map +1 -1
- package/build/cjs/extensions/yfm/ImgSize/utils.d.ts +2 -1
- package/build/cjs/extensions/yfm/ImgSize/utils.js +3 -2
- package/build/cjs/extensions/yfm/ImgSize/utils.js.map +1 -1
- package/build/cjs/extensions/yfm/Monospace/MonospaceSpecs/index.js +3 -3
- package/build/cjs/extensions/yfm/Monospace/MonospaceSpecs/index.js.map +1 -1
- package/build/cjs/extensions/yfm/Video/VideoSpecs/index.js +2 -2
- package/build/cjs/extensions/yfm/Video/VideoSpecs/index.js.map +1 -1
- package/build/cjs/extensions/yfm/Video/VideoSpecs/md-video.d.ts +4 -4
- package/build/cjs/extensions/yfm/Video/VideoSpecs/md-video.js +7 -7
- package/build/cjs/extensions/yfm/Video/VideoSpecs/md-video.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmConfigs/index.d.ts +2 -2
- package/build/cjs/extensions/yfm/YfmConfigs/index.js +2 -2
- package/build/cjs/extensions/yfm/YfmConfigs/index.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmFile/YfmFilePaste/index.d.ts +1 -1
- package/build/cjs/extensions/yfm/YfmFile/YfmFilePaste/index.js +15 -1
- package/build/cjs/extensions/yfm/YfmFile/YfmFilePaste/index.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmNote/YfmNoteSpecs/index.js +3 -3
- package/build/cjs/extensions/yfm/YfmNote/YfmNoteSpecs/index.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmTable/YfmTableSpecs/index.js +3 -3
- package/build/cjs/extensions/yfm/YfmTable/YfmTableSpecs/index.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmTabs/actions.js +4 -4
- package/build/cjs/extensions/yfm/YfmTabs/actions.js.map +1 -1
- package/build/cjs/extensions/yfm/YfmTabs/plugins.js +11 -11
- package/build/cjs/extensions/yfm/YfmTabs/plugins.js.map +1 -1
- package/build/cjs/i18n/yfm-note/index.d.ts +1 -1
- package/build/cjs/logger.d.ts +75 -0
- package/build/cjs/logger.js +89 -1
- package/build/cjs/logger.js.map +1 -1
- package/build/cjs/markdown-it/emoji.d.ts +2 -2
- package/build/cjs/markdown-it/emoji.js +4 -4
- package/build/cjs/markdown-it/emoji.js.map +1 -1
- package/build/cjs/markup/codemirror/create.d.ts +2 -0
- package/build/cjs/markup/codemirror/create.js +15 -4
- package/build/cjs/markup/codemirror/create.js.map +1 -1
- package/build/cjs/markup/codemirror/files-upload-plugin/plugin.js +13 -0
- package/build/cjs/markup/codemirror/files-upload-plugin/plugin.js.map +1 -1
- package/build/cjs/markup/codemirror/logger-facet.d.ts +3 -0
- package/build/cjs/markup/codemirror/logger-facet.js +9 -0
- package/build/cjs/markup/codemirror/logger-facet.js.map +1 -0
- package/build/cjs/utils/event-emitter.d.ts +1 -0
- package/build/cjs/utils/event-emitter.js +3 -0
- package/build/cjs/utils/event-emitter.js.map +1 -1
- package/build/cjs/utils/facet.d.ts +1 -0
- package/build/cjs/utils/facet.js +33 -0
- package/build/cjs/utils/facet.js.map +1 -0
- package/build/cjs/utils/keymap.js +7 -2
- package/build/cjs/utils/keymap.js.map +1 -1
- package/build/cjs/version.js +1 -1
- package/build/cjs/version.js.map +1 -1
- package/build/esm/bundle/Editor.d.ts +3 -0
- package/build/esm/bundle/Editor.js +22 -3
- package/build/esm/bundle/Editor.js.map +1 -1
- package/build/esm/bundle/MarkdownEditorView.js +3 -2
- package/build/esm/bundle/MarkdownEditorView.js.map +1 -1
- package/build/esm/bundle/MarkupEditorView.js +7 -2
- package/build/esm/bundle/MarkupEditorView.js.map +1 -1
- package/build/esm/bundle/MarkupManager.d.ts +3 -6
- package/build/esm/bundle/MarkupManager.js +5 -5
- package/build/esm/bundle/MarkupManager.js.map +1 -1
- package/build/esm/bundle/WysiwygEditorView.js +7 -2
- package/build/esm/bundle/WysiwygEditorView.js.map +1 -1
- package/build/esm/bundle/types.d.ts +2 -0
- package/build/esm/bundle/types.js.map +1 -1
- package/build/esm/bundle/useMarkdownEditor.js +5 -3
- package/build/esm/bundle/useMarkdownEditor.js.map +1 -1
- package/build/esm/core/Editor.d.ts +3 -1
- package/build/esm/core/Editor.js +6 -3
- package/build/esm/core/Editor.js.map +1 -1
- package/build/esm/core/ExtensionBuilder.d.ts +3 -1
- package/build/esm/core/ExtensionBuilder.js +6 -1
- package/build/esm/core/ExtensionBuilder.js.map +1 -1
- package/build/esm/core/ExtensionsManager.d.ts +4 -2
- package/build/esm/core/ExtensionsManager.js +6 -5
- package/build/esm/core/ExtensionsManager.js.map +1 -1
- package/build/esm/core/ParserTokensRegistry.d.ts +6 -0
- package/build/esm/core/ParserTokensRegistry.js +9 -1
- package/build/esm/core/ParserTokensRegistry.js.map +1 -1
- package/build/esm/core/index.d.ts +1 -0
- package/build/esm/core/index.js +1 -0
- package/build/esm/core/index.js.map +1 -1
- package/build/esm/core/markdown/MarkdownParser.d.ts +9 -1
- package/build/esm/core/markdown/MarkdownParser.js +7 -3
- package/build/esm/core/markdown/MarkdownParser.js.map +1 -1
- package/build/esm/core/utils/logger.d.ts +3 -0
- package/build/esm/core/utils/logger.js +8 -0
- package/build/esm/core/utils/logger.js.map +1 -0
- package/build/esm/core/utils/metrics.d.ts +2 -1
- package/build/esm/core/utils/metrics.js +8 -2
- package/build/esm/core/utils/metrics.js.map +1 -1
- package/build/esm/extensions/additional/YfmHtmlBlock/utils.d.ts +1 -1
- package/build/esm/extensions/additional/YfmHtmlBlock/utils.js +1 -1
- package/build/esm/extensions/additional/YfmHtmlBlock/utils.js.map +1 -1
- package/build/esm/extensions/behavior/Autocomplete/handler.d.ts +3 -1
- package/build/esm/extensions/behavior/Autocomplete/handler.js +15 -9
- package/build/esm/extensions/behavior/Autocomplete/handler.js.map +1 -1
- package/build/esm/extensions/behavior/Autocomplete/index.js +1 -1
- package/build/esm/extensions/behavior/Autocomplete/index.js.map +1 -1
- package/build/esm/extensions/behavior/Clipboard/clipboard.d.ts +3 -1
- package/build/esm/extensions/behavior/Clipboard/clipboard.js +32 -4
- package/build/esm/extensions/behavior/Clipboard/clipboard.js.map +1 -1
- package/build/esm/extensions/behavior/Clipboard/index.js +4 -0
- package/build/esm/extensions/behavior/Clipboard/index.js.map +1 -1
- package/build/esm/extensions/behavior/CommandMenu/handler.d.ts +3 -1
- package/build/esm/extensions/behavior/CommandMenu/handler.js +7 -4
- package/build/esm/extensions/behavior/CommandMenu/handler.js.map +1 -1
- package/build/esm/extensions/behavior/CommandMenu/index.js +6 -4
- package/build/esm/extensions/behavior/CommandMenu/index.js.map +1 -1
- package/build/esm/extensions/behavior/EditorModeKeymap/index.js +13 -2
- package/build/esm/extensions/behavior/EditorModeKeymap/index.js.map +1 -1
- package/build/esm/extensions/behavior/FilePaste/index.d.ts +1 -1
- package/build/esm/extensions/behavior/FilePaste/index.js +12 -0
- package/build/esm/extensions/behavior/FilePaste/index.js.map +1 -1
- package/build/esm/extensions/behavior/SelectionContext/index.js +3 -3
- package/build/esm/extensions/behavior/SelectionContext/index.js.map +1 -1
- package/build/esm/extensions/behavior/SelectionContext/tooltip.d.ts +3 -1
- package/build/esm/extensions/behavior/SelectionContext/tooltip.js +8 -3
- package/build/esm/extensions/behavior/SelectionContext/tooltip.js.map +1 -1
- package/build/esm/extensions/behavior/utils/upload.d.ts +2 -0
- package/build/esm/extensions/behavior/utils/upload.js +3 -0
- package/build/esm/extensions/behavior/utils/upload.js.map +1 -1
- package/build/esm/extensions/markdown/Breaks/index.js +3 -2
- package/build/esm/extensions/markdown/Breaks/index.js.map +1 -1
- package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js +3 -2
- package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/CodeBlockHighlight.js.map +1 -1
- package/build/esm/extensions/markdown/Deflist/DeflistSpecs/index.js +1 -1
- package/build/esm/extensions/markdown/Deflist/DeflistSpecs/index.js.map +1 -1
- package/build/esm/extensions/markdown/Html/index.js +3 -2
- package/build/esm/extensions/markdown/Html/index.js.map +1 -1
- package/build/esm/extensions/markdown/Html/schema.js +1 -1
- package/build/esm/extensions/markdown/Html/schema.js.map +1 -1
- package/build/esm/extensions/markdown/Link/paste-plugin.d.ts +1 -1
- package/build/esm/extensions/markdown/Link/paste-plugin.js +11 -0
- package/build/esm/extensions/markdown/Link/paste-plugin.js.map +1 -1
- package/build/esm/extensions/markdown/Superscript/SuperscriptSpecs/index.js +2 -2
- package/build/esm/extensions/markdown/Superscript/SuperscriptSpecs/index.js.map +1 -1
- package/build/esm/extensions/yfm/Checkbox/CheckboxSpecs/index.js +1 -1
- package/build/esm/extensions/yfm/Checkbox/CheckboxSpecs/index.js.map +1 -1
- package/build/esm/extensions/yfm/Emoji/EmojiSpecs/EmojiSpecs.js +1 -1
- package/build/esm/extensions/yfm/Emoji/EmojiSpecs/EmojiSpecs.js.map +1 -1
- package/build/esm/extensions/yfm/ImgSize/ImagePaste/index.d.ts +1 -1
- package/build/esm/extensions/yfm/ImgSize/ImagePaste/index.js +14 -0
- package/build/esm/extensions/yfm/ImgSize/ImagePaste/index.js.map +1 -1
- package/build/esm/extensions/yfm/ImgSize/ImagePaste/upload.js +7 -6
- package/build/esm/extensions/yfm/ImgSize/ImagePaste/upload.js.map +1 -1
- package/build/esm/extensions/yfm/ImgSize/ImgSizeSpecs/const.d.ts +1 -1
- package/build/esm/extensions/yfm/ImgSize/ImgSizeSpecs/const.js +1 -1
- package/build/esm/extensions/yfm/ImgSize/ImgSizeSpecs/const.js.map +1 -1
- package/build/esm/extensions/yfm/ImgSize/ImgSizeSpecs/index.js +2 -2
- package/build/esm/extensions/yfm/ImgSize/ImgSizeSpecs/index.js.map +1 -1
- package/build/esm/extensions/yfm/ImgSize/utils.d.ts +2 -1
- package/build/esm/extensions/yfm/ImgSize/utils.js +4 -3
- package/build/esm/extensions/yfm/ImgSize/utils.js.map +1 -1
- package/build/esm/extensions/yfm/Monospace/MonospaceSpecs/index.js +2 -2
- package/build/esm/extensions/yfm/Monospace/MonospaceSpecs/index.js.map +1 -1
- package/build/esm/extensions/yfm/Video/VideoSpecs/index.js +1 -1
- package/build/esm/extensions/yfm/Video/VideoSpecs/index.js.map +1 -1
- package/build/esm/extensions/yfm/Video/VideoSpecs/md-video.d.ts +4 -4
- package/build/esm/extensions/yfm/Video/VideoSpecs/md-video.js +3 -3
- package/build/esm/extensions/yfm/Video/VideoSpecs/md-video.js.map +1 -1
- package/build/esm/extensions/yfm/YfmConfigs/index.d.ts +2 -2
- package/build/esm/extensions/yfm/YfmConfigs/index.js +2 -2
- package/build/esm/extensions/yfm/YfmConfigs/index.js.map +1 -1
- package/build/esm/extensions/yfm/YfmFile/YfmFilePaste/index.d.ts +1 -1
- package/build/esm/extensions/yfm/YfmFile/YfmFilePaste/index.js +15 -1
- package/build/esm/extensions/yfm/YfmFile/YfmFilePaste/index.js.map +1 -1
- package/build/esm/extensions/yfm/YfmNote/YfmNoteSpecs/index.js +2 -2
- package/build/esm/extensions/yfm/YfmNote/YfmNoteSpecs/index.js.map +1 -1
- package/build/esm/extensions/yfm/YfmTable/YfmTableSpecs/index.js +2 -2
- package/build/esm/extensions/yfm/YfmTable/YfmTableSpecs/index.js.map +1 -1
- package/build/esm/extensions/yfm/YfmTabs/actions.js +1 -1
- package/build/esm/extensions/yfm/YfmTabs/actions.js.map +1 -1
- package/build/esm/extensions/yfm/YfmTabs/plugins.js +1 -1
- package/build/esm/extensions/yfm/YfmTabs/plugins.js.map +1 -1
- package/build/esm/i18n/yfm-note/index.d.ts +1 -1
- package/build/esm/logger.d.ts +75 -0
- package/build/esm/logger.js +87 -0
- package/build/esm/logger.js.map +1 -1
- package/build/esm/markdown-it/emoji.d.ts +2 -2
- package/build/esm/markdown-it/emoji.js +2 -2
- package/build/esm/markdown-it/emoji.js.map +1 -1
- package/build/esm/markup/codemirror/create.d.ts +2 -0
- package/build/esm/markup/codemirror/create.js +16 -5
- package/build/esm/markup/codemirror/create.js.map +1 -1
- package/build/esm/markup/codemirror/files-upload-plugin/plugin.js +13 -0
- package/build/esm/markup/codemirror/files-upload-plugin/plugin.js.map +1 -1
- package/build/esm/markup/codemirror/logger-facet.d.ts +3 -0
- package/build/esm/markup/codemirror/logger-facet.js +6 -0
- package/build/esm/markup/codemirror/logger-facet.js.map +1 -0
- package/build/esm/utils/event-emitter.d.ts +1 -0
- package/build/esm/utils/event-emitter.js +3 -0
- package/build/esm/utils/event-emitter.js.map +1 -1
- package/build/esm/utils/facet.d.ts +1 -0
- package/build/esm/utils/facet.js +29 -0
- package/build/esm/utils/facet.js.map +1 -0
- package/build/esm/utils/keymap.js +7 -2
- package/build/esm/utils/keymap.js.map +1 -1
- package/build/esm/version.js +1 -1
- package/build/esm/version.js.map +1 -1
- package/package.json +1 -1
|
@@ -15,18 +15,19 @@ const directive_facet_1 = require("./directive-facet.js");
|
|
|
15
15
|
const files_upload_facet_1 = require("./files-upload-facet.js");
|
|
16
16
|
const gravity_1 = require("./gravity.js");
|
|
17
17
|
const converters_1 = require("./html-to-markdown/converters.js");
|
|
18
|
+
const logger_facet_1 = require("./logger-facet.js");
|
|
18
19
|
const pairing_chars_1 = require("./pairing-chars.js");
|
|
19
20
|
const react_facet_1 = require("./react-facet.js");
|
|
20
21
|
const plugin_1 = require("./search-plugin/plugin.js");
|
|
21
22
|
const smart_reindent_1 = require("./smart-reindent/index.js");
|
|
22
23
|
const yfm_1 = require("./yfm.js");
|
|
23
24
|
function createCodemirror(params) {
|
|
24
|
-
const { doc, reactRenderer, onCancel, onScroll, onSubmit, onChange, onDocChange, disabledExtensions = {}, keymaps = [], receiver, yfmLangOptions, extensions: extraExtensions, placeholder: placeholderContent, autocompletion: autocompletionConfig, parseHtmlOnPaste, parseInsertedUrlAsImage, directiveSyntax, preserveEmptyRows, } = params;
|
|
25
|
+
const { logger, doc, reactRenderer, onCancel, onScroll, onSubmit, onChange, onDocChange, disabledExtensions = {}, keymaps = [], receiver, yfmLangOptions, extensions: extraExtensions, placeholder: placeholderContent, autocompletion: autocompletionConfig, parseHtmlOnPaste, parseInsertedUrlAsImage, directiveSyntax, preserveEmptyRows, } = params;
|
|
25
26
|
const extensions = [gravity_1.gravityTheme, (0, view_1.placeholder)(placeholderContent)];
|
|
26
27
|
if (!disabledExtensions.history) {
|
|
27
28
|
extensions.push((0, commands_1.history)());
|
|
28
29
|
}
|
|
29
|
-
extensions.push((0, language_1.syntaxHighlighting)(gravity_1.gravityHighlightStyle), view_1.keymap.of([
|
|
30
|
+
extensions.push((0, language_1.syntaxHighlighting)(gravity_1.gravityHighlightStyle), logger_facet_1.LoggerFacet.of(logger), view_1.keymap.of([
|
|
30
31
|
{ key: shortcuts_1.formatter.toCM(shortcuts_1.Action.Bold), run: withLogger(action_names_1.ActionName.bold, commands_2.toggleBold) },
|
|
31
32
|
{ key: shortcuts_1.formatter.toCM(shortcuts_1.Action.Italic), run: withLogger(action_names_1.ActionName.italic, commands_2.toggleItalic) },
|
|
32
33
|
{ key: shortcuts_1.formatter.toCM(shortcuts_1.Action.Strike), run: withLogger(action_names_1.ActionName.strike, commands_2.toggleStrikethrough) },
|
|
@@ -74,6 +75,10 @@ function createCodemirror(params) {
|
|
|
74
75
|
paste(event, editor) {
|
|
75
76
|
if (!event.clipboardData)
|
|
76
77
|
return;
|
|
78
|
+
const pasteLogger = logger.nested({
|
|
79
|
+
domEvent: 'paste',
|
|
80
|
+
dataTypes: event.clipboardData.types,
|
|
81
|
+
});
|
|
77
82
|
const { from } = editor.state.selection.main;
|
|
78
83
|
const line = editor.state.doc.lineAt(from);
|
|
79
84
|
const currentLine = line.text;
|
|
@@ -82,6 +87,7 @@ function createCodemirror(params) {
|
|
|
82
87
|
const yfmContent = event.clipboardData.getData(clipboard_1.DataTransferType.Yfm);
|
|
83
88
|
if (yfmContent) {
|
|
84
89
|
event.preventDefault();
|
|
90
|
+
logger.event({ event: 'paste-markup' });
|
|
85
91
|
const reindentedYfmContent = (0, smart_reindent_1.smartReindent)(yfmContent, currentLine);
|
|
86
92
|
editor.dispatch(editor.state.replaceSelection(reindentedYfmContent));
|
|
87
93
|
return;
|
|
@@ -104,10 +110,12 @@ function createCodemirror(params) {
|
|
|
104
110
|
// especially with invalid HTML or weird DOM parsing errors.
|
|
105
111
|
// If something goes wrong, I just want to fall back to the "default pasting"
|
|
106
112
|
// rather than break the entire experience for the user.
|
|
107
|
-
|
|
113
|
+
pasteLogger.error(e, { event: 'parse-html-to-md' });
|
|
114
|
+
logger_1.globalLogger.error(e);
|
|
108
115
|
}
|
|
109
116
|
if (parsedMarkdownMarkup !== undefined) {
|
|
110
117
|
event.preventDefault();
|
|
118
|
+
logger.event({ event: 'paste-parsed-html' });
|
|
111
119
|
const reindentedHtmlContent = (0, smart_reindent_1.smartReindent)(parsedMarkdownMarkup, currentLine);
|
|
112
120
|
editor.dispatch(editor.state.replaceSelection(reindentedHtmlContent));
|
|
113
121
|
return;
|
|
@@ -117,6 +125,7 @@ function createCodemirror(params) {
|
|
|
117
125
|
const { imageUrl, title } = parseInsertedUrlAsImage(event.clipboardData.getData(clipboard_1.DataTransferType.Text) ?? '') || {};
|
|
118
126
|
if (imageUrl) {
|
|
119
127
|
event.preventDefault();
|
|
128
|
+
logger.event({ event: 'paste-url-as-image' });
|
|
120
129
|
(0, commands_2.insertImages)([
|
|
121
130
|
{
|
|
122
131
|
url: imageUrl,
|
|
@@ -168,7 +177,9 @@ function createCodemirror(params) {
|
|
|
168
177
|
}
|
|
169
178
|
function withLogger(action, command) {
|
|
170
179
|
return (...args) => {
|
|
171
|
-
|
|
180
|
+
const { state } = args[0];
|
|
181
|
+
state.facet(logger_facet_1.LoggerFacet).action({ source: 'keymap', action });
|
|
182
|
+
logger_1.globalLogger.action({ mode: 'markup', source: 'keymap', action });
|
|
172
183
|
return command(...args);
|
|
173
184
|
};
|
|
174
185
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"../../../../src","sources":["markup/codemirror/create.ts"],"names":[],"mappings":"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","sourcesContent":["import {autocompletion} from '@codemirror/autocomplete';\nimport {\n defaultKeymap,\n history,\n historyKeymap,\n indentWithTab,\n insertNewlineKeepIndent,\n insertTab,\n} from '@codemirror/commands';\nimport {syntaxHighlighting} from '@codemirror/language';\nimport type {Extension, StateCommand} from '@codemirror/state';\nimport {\n EditorView,\n type EditorViewConfig,\n type KeyBinding,\n keymap,\n placeholder,\n} from '@codemirror/view';\n\nimport type {ParseInsertedUrlAsImage} from '../../bundle';\nimport type {EventMap} from '../../bundle/Editor';\nimport {ActionName} from '../../bundle/config/action-names';\nimport type {ReactRenderStorage} from '../../extensions';\nimport {logger} from '../../logger';\nimport {Action as A, formatter as f} from '../../shortcuts';\nimport type {Receiver} from '../../utils';\nimport {DataTransferType, shouldSkipHtmlConversion} from '../../utils/clipboard';\nimport type {DirectiveSyntaxContext} from '../../utils/directive';\nimport {\n insertEmptyRow,\n insertImages,\n insertLink,\n toH1,\n toH2,\n toH3,\n toH4,\n toH5,\n toH6,\n toggleBold,\n toggleItalic,\n toggleStrikethrough,\n toggleUnderline,\n wrapToCodeBlock,\n wrapToInlineCode,\n wrapToYfmCut,\n wrapToYfmNote,\n} from '../commands';\n\nimport {DirectiveSyntaxFacet} from './directive-facet';\nimport {type FileUploadHandler, FileUploadHandlerFacet} from './files-upload-facet';\nimport {gravityHighlightStyle, gravityTheme} from './gravity';\nimport {MarkdownConverter} from './html-to-markdown/converters';\nimport {PairingCharactersExtension} from './pairing-chars';\nimport {ReactRendererFacet} from './react-facet';\nimport {SearchPanelPlugin} from './search-plugin/plugin';\nimport {smartReindent} from './smart-reindent';\nimport {type YfmLangOptions, yfmLang} from './yfm';\n\nexport type {YfmLangOptions};\n\ntype Autocompletion = Parameters<typeof autocompletion>[0];\n\nexport type CreateCodemirrorParams = {\n doc: EditorViewConfig['doc'];\n placeholder: Parameters<typeof placeholder>[0];\n onCancel: () => void;\n onSubmit: () => void;\n onChange: () => void;\n onDocChange: () => void;\n onScroll: (event: Event) => void;\n reactRenderer: ReactRenderStorage;\n uploadHandler?: FileUploadHandler;\n parseHtmlOnPaste?: boolean;\n parseInsertedUrlAsImage?: ParseInsertedUrlAsImage;\n needImageDimensions?: boolean;\n enableNewImageSizeCalculation?: boolean;\n extensions?: Extension[];\n disabledExtensions?: {\n history?: boolean;\n };\n keymaps?: readonly KeyBinding[];\n receiver?: Receiver<EventMap>;\n yfmLangOptions?: YfmLangOptions;\n autocompletion?: Autocompletion;\n directiveSyntax: DirectiveSyntaxContext;\n preserveEmptyRows: boolean;\n};\n\nexport function createCodemirror(params: CreateCodemirrorParams) {\n const {\n doc,\n reactRenderer,\n onCancel,\n onScroll,\n onSubmit,\n onChange,\n onDocChange,\n disabledExtensions = {},\n keymaps = [],\n receiver,\n yfmLangOptions,\n extensions: extraExtensions,\n placeholder: placeholderContent,\n autocompletion: autocompletionConfig,\n parseHtmlOnPaste,\n parseInsertedUrlAsImage,\n directiveSyntax,\n preserveEmptyRows,\n } = params;\n\n const extensions: Extension[] = [gravityTheme, placeholder(placeholderContent)];\n\n if (!disabledExtensions.history) {\n extensions.push(history());\n }\n\n extensions.push(\n syntaxHighlighting(gravityHighlightStyle),\n keymap.of([\n {key: f.toCM(A.Bold)!, run: withLogger(ActionName.bold, toggleBold)},\n {key: f.toCM(A.Italic)!, run: withLogger(ActionName.italic, toggleItalic)},\n {key: f.toCM(A.Strike)!, run: withLogger(ActionName.strike, toggleStrikethrough)},\n {key: f.toCM(A.Underline)!, run: withLogger(ActionName.underline, toggleUnderline)},\n {key: f.toCM(A.Link)!, run: withLogger(ActionName.link, insertLink)},\n {key: f.toCM(A.Heading1)!, run: withLogger(ActionName.heading1, toH1)},\n {key: f.toCM(A.Heading2)!, run: withLogger(ActionName.heading2, toH2)},\n {key: f.toCM(A.Heading3)!, run: withLogger(ActionName.heading3, toH3)},\n {key: f.toCM(A.Heading4)!, run: withLogger(ActionName.heading4, toH4)},\n {key: f.toCM(A.Heading5)!, run: withLogger(ActionName.heading5, toH5)},\n {key: f.toCM(A.Heading6)!, run: withLogger(ActionName.heading6, toH6)},\n {key: f.toCM(A.Code)!, run: withLogger(ActionName.code_inline, wrapToInlineCode)},\n {key: f.toCM(A.CodeBlock)!, run: withLogger(ActionName.code_block, wrapToCodeBlock)},\n {key: f.toCM(A.Cut)!, run: withLogger(ActionName.yfm_cut, wrapToYfmCut)},\n {key: f.toCM(A.Note)!, run: withLogger(ActionName.yfm_note, wrapToYfmNote)},\n {\n key: f.toCM(A.Cancel)!,\n preventDefault: true,\n run: () => {\n onCancel();\n return true;\n },\n },\n {\n key: f.toCM(A.Submit)!,\n preventDefault: true,\n run: () => {\n onSubmit();\n return true;\n },\n },\n {key: 'Tab', preventDefault: true, run: insertTab},\n {\n key: 'Enter',\n shift: insertNewlineKeepIndent,\n },\n indentWithTab,\n ...defaultKeymap,\n ...(disabledExtensions.history ? [] : historyKeymap),\n ...keymaps,\n ]),\n autocompletion(autocompletionConfig),\n yfmLang(yfmLangOptions),\n ReactRendererFacet.of(reactRenderer),\n DirectiveSyntaxFacet.of(directiveSyntax),\n PairingCharactersExtension,\n EditorView.lineWrapping,\n EditorView.contentAttributes.of({spellcheck: 'true'}),\n EditorView.domEventHandlers({\n scroll(event) {\n onScroll(event);\n },\n paste(event, editor) {\n if (!event.clipboardData) return;\n\n const {from} = editor.state.selection.main;\n const line = editor.state.doc.lineAt(from);\n const currentLine = line.text;\n\n // if clipboard contains YFM content - avoid any meddling with pasted content\n // since text/yfm will contain valid markdown\n const yfmContent = event.clipboardData.getData(DataTransferType.Yfm);\n if (yfmContent) {\n event.preventDefault();\n const reindentedYfmContent = smartReindent(yfmContent, currentLine);\n editor.dispatch(editor.state.replaceSelection(reindentedYfmContent));\n return;\n }\n\n // checking if a copy buffer content is suitable for convertion\n const shouldSkipHtml = shouldSkipHtmlConversion(event.clipboardData);\n\n // if we have text/html inside copy/paste buffer\n const htmlContent = event.clipboardData.getData(DataTransferType.Html);\n // if we pasting markdown from VsCode we need skip html transformation\n if (htmlContent && parseHtmlOnPaste && !shouldSkipHtml) {\n let parsedMarkdownMarkup: string | undefined;\n try {\n const parser = new DOMParser();\n const htmlDoc = parser.parseFromString(htmlContent, 'text/html');\n\n const converter = new MarkdownConverter();\n parsedMarkdownMarkup = converter.processNode(htmlDoc.body).trim();\n } catch (e) {\n // The code is pretty new and there might be random issues we haven't caught yet,\n // especially with invalid HTML or weird DOM parsing errors.\n // If something goes wrong, I just want to fall back to the \"default pasting\"\n // rather than break the entire experience for the user.\n logger.error(e);\n }\n\n if (parsedMarkdownMarkup !== undefined) {\n event.preventDefault();\n const reindentedHtmlContent = smartReindent(\n parsedMarkdownMarkup,\n currentLine,\n );\n editor.dispatch(editor.state.replaceSelection(reindentedHtmlContent));\n return;\n }\n }\n\n if (parseInsertedUrlAsImage) {\n const {imageUrl, title} =\n parseInsertedUrlAsImage(\n event.clipboardData.getData(DataTransferType.Text) ?? '',\n ) || {};\n\n if (imageUrl) {\n event.preventDefault();\n\n insertImages([\n {\n url: imageUrl,\n alt: title,\n title,\n },\n ])(editor);\n }\n }\n\n // Reindenting pasted plain text\n const pastedText = event.clipboardData.getData(DataTransferType.Text);\n const reindentedText = smartReindent(pastedText, currentLine);\n // but only if there is a need for reindentation\n if (pastedText !== reindentedText) {\n editor.dispatch(editor.state.replaceSelection(reindentedText));\n event.preventDefault();\n }\n },\n }),\n SearchPanelPlugin({\n anchorSelector: '.g-md-search-anchor',\n receiver,\n }),\n );\n\n if (preserveEmptyRows) {\n extensions.push(\n keymap.of([\n {key: f.toCM(A.EmptyRow)!, run: withLogger(ActionName.emptyRow, insertEmptyRow)},\n ]),\n );\n }\n\n if (params.uploadHandler) {\n extensions.push(\n FileUploadHandlerFacet.of({\n fn: params.uploadHandler,\n imageWithDimensions: params.needImageDimensions,\n enableNewImageSizeCalculation: params.enableNewImageSizeCalculation,\n }),\n );\n }\n\n if (extraExtensions) {\n extensions.push(...extraExtensions);\n }\n\n return new EditorView({\n doc,\n extensions,\n dispatchTransactions: (trs, view) => {\n view.update(trs);\n onChange();\n if (trs.some((tr) => tr.docChanged)) {\n onDocChange();\n }\n },\n });\n}\n\nexport function withLogger(action: string, command: StateCommand): StateCommand {\n return (...args) => {\n logger.action({mode: 'markup', source: 'keymap', action});\n return command(...args);\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"../../../../src","sources":["markup/codemirror/create.ts"],"names":[],"mappings":"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","sourcesContent":["import {autocompletion} from '@codemirror/autocomplete';\nimport {\n defaultKeymap,\n history,\n historyKeymap,\n indentWithTab,\n insertNewlineKeepIndent,\n insertTab,\n} from '@codemirror/commands';\nimport {syntaxHighlighting} from '@codemirror/language';\nimport type {Extension, StateCommand} from '@codemirror/state';\nimport {\n EditorView,\n type EditorViewConfig,\n type KeyBinding,\n keymap,\n placeholder,\n} from '@codemirror/view';\n\nimport type {ParseInsertedUrlAsImage} from '../../bundle';\nimport type {EventMap} from '../../bundle/Editor';\nimport {ActionName} from '../../bundle/config/action-names';\nimport type {ReactRenderStorage} from '../../extensions';\nimport {type Logger2, globalLogger} from '../../logger';\nimport {Action as A, formatter as f} from '../../shortcuts';\nimport type {Receiver} from '../../utils';\nimport {DataTransferType, shouldSkipHtmlConversion} from '../../utils/clipboard';\nimport type {DirectiveSyntaxContext} from '../../utils/directive';\nimport {\n insertEmptyRow,\n insertImages,\n insertLink,\n toH1,\n toH2,\n toH3,\n toH4,\n toH5,\n toH6,\n toggleBold,\n toggleItalic,\n toggleStrikethrough,\n toggleUnderline,\n wrapToCodeBlock,\n wrapToInlineCode,\n wrapToYfmCut,\n wrapToYfmNote,\n} from '../commands';\n\nimport {DirectiveSyntaxFacet} from './directive-facet';\nimport {type FileUploadHandler, FileUploadHandlerFacet} from './files-upload-facet';\nimport {gravityHighlightStyle, gravityTheme} from './gravity';\nimport {MarkdownConverter} from './html-to-markdown/converters';\nimport {LoggerFacet} from './logger-facet';\nimport {PairingCharactersExtension} from './pairing-chars';\nimport {ReactRendererFacet} from './react-facet';\nimport {SearchPanelPlugin} from './search-plugin/plugin';\nimport {smartReindent} from './smart-reindent';\nimport {type YfmLangOptions, yfmLang} from './yfm';\n\nexport type {YfmLangOptions};\n\ntype Autocompletion = Parameters<typeof autocompletion>[0];\n\nexport type CreateCodemirrorParams = {\n doc: EditorViewConfig['doc'];\n placeholder: Parameters<typeof placeholder>[0];\n logger: Logger2.ILogger;\n onCancel: () => void;\n onSubmit: () => void;\n onChange: () => void;\n onDocChange: () => void;\n onScroll: (event: Event) => void;\n reactRenderer: ReactRenderStorage;\n uploadHandler?: FileUploadHandler;\n parseHtmlOnPaste?: boolean;\n parseInsertedUrlAsImage?: ParseInsertedUrlAsImage;\n needImageDimensions?: boolean;\n enableNewImageSizeCalculation?: boolean;\n extensions?: Extension[];\n disabledExtensions?: {\n history?: boolean;\n };\n keymaps?: readonly KeyBinding[];\n receiver?: Receiver<EventMap>;\n yfmLangOptions?: YfmLangOptions;\n autocompletion?: Autocompletion;\n directiveSyntax: DirectiveSyntaxContext;\n preserveEmptyRows: boolean;\n};\n\nexport function createCodemirror(params: CreateCodemirrorParams) {\n const {\n logger,\n doc,\n reactRenderer,\n onCancel,\n onScroll,\n onSubmit,\n onChange,\n onDocChange,\n disabledExtensions = {},\n keymaps = [],\n receiver,\n yfmLangOptions,\n extensions: extraExtensions,\n placeholder: placeholderContent,\n autocompletion: autocompletionConfig,\n parseHtmlOnPaste,\n parseInsertedUrlAsImage,\n directiveSyntax,\n preserveEmptyRows,\n } = params;\n\n const extensions: Extension[] = [gravityTheme, placeholder(placeholderContent)];\n\n if (!disabledExtensions.history) {\n extensions.push(history());\n }\n\n extensions.push(\n syntaxHighlighting(gravityHighlightStyle),\n LoggerFacet.of(logger),\n keymap.of([\n {key: f.toCM(A.Bold)!, run: withLogger(ActionName.bold, toggleBold)},\n {key: f.toCM(A.Italic)!, run: withLogger(ActionName.italic, toggleItalic)},\n {key: f.toCM(A.Strike)!, run: withLogger(ActionName.strike, toggleStrikethrough)},\n {key: f.toCM(A.Underline)!, run: withLogger(ActionName.underline, toggleUnderline)},\n {key: f.toCM(A.Link)!, run: withLogger(ActionName.link, insertLink)},\n {key: f.toCM(A.Heading1)!, run: withLogger(ActionName.heading1, toH1)},\n {key: f.toCM(A.Heading2)!, run: withLogger(ActionName.heading2, toH2)},\n {key: f.toCM(A.Heading3)!, run: withLogger(ActionName.heading3, toH3)},\n {key: f.toCM(A.Heading4)!, run: withLogger(ActionName.heading4, toH4)},\n {key: f.toCM(A.Heading5)!, run: withLogger(ActionName.heading5, toH5)},\n {key: f.toCM(A.Heading6)!, run: withLogger(ActionName.heading6, toH6)},\n {key: f.toCM(A.Code)!, run: withLogger(ActionName.code_inline, wrapToInlineCode)},\n {key: f.toCM(A.CodeBlock)!, run: withLogger(ActionName.code_block, wrapToCodeBlock)},\n {key: f.toCM(A.Cut)!, run: withLogger(ActionName.yfm_cut, wrapToYfmCut)},\n {key: f.toCM(A.Note)!, run: withLogger(ActionName.yfm_note, wrapToYfmNote)},\n {\n key: f.toCM(A.Cancel)!,\n preventDefault: true,\n run: () => {\n onCancel();\n return true;\n },\n },\n {\n key: f.toCM(A.Submit)!,\n preventDefault: true,\n run: () => {\n onSubmit();\n return true;\n },\n },\n {key: 'Tab', preventDefault: true, run: insertTab},\n {\n key: 'Enter',\n shift: insertNewlineKeepIndent,\n },\n indentWithTab,\n ...defaultKeymap,\n ...(disabledExtensions.history ? [] : historyKeymap),\n ...keymaps,\n ]),\n autocompletion(autocompletionConfig),\n yfmLang(yfmLangOptions),\n ReactRendererFacet.of(reactRenderer),\n DirectiveSyntaxFacet.of(directiveSyntax),\n PairingCharactersExtension,\n EditorView.lineWrapping,\n EditorView.contentAttributes.of({spellcheck: 'true'}),\n EditorView.domEventHandlers({\n scroll(event) {\n onScroll(event);\n },\n paste(event, editor) {\n if (!event.clipboardData) return;\n\n const pasteLogger = logger.nested({\n domEvent: 'paste',\n dataTypes: event.clipboardData.types,\n });\n\n const {from} = editor.state.selection.main;\n const line = editor.state.doc.lineAt(from);\n const currentLine = line.text;\n\n // if clipboard contains YFM content - avoid any meddling with pasted content\n // since text/yfm will contain valid markdown\n const yfmContent = event.clipboardData.getData(DataTransferType.Yfm);\n if (yfmContent) {\n event.preventDefault();\n logger.event({event: 'paste-markup'});\n const reindentedYfmContent = smartReindent(yfmContent, currentLine);\n editor.dispatch(editor.state.replaceSelection(reindentedYfmContent));\n return;\n }\n\n // checking if a copy buffer content is suitable for convertion\n const shouldSkipHtml = shouldSkipHtmlConversion(event.clipboardData);\n\n // if we have text/html inside copy/paste buffer\n const htmlContent = event.clipboardData.getData(DataTransferType.Html);\n // if we pasting markdown from VsCode we need skip html transformation\n if (htmlContent && parseHtmlOnPaste && !shouldSkipHtml) {\n let parsedMarkdownMarkup: string | undefined;\n try {\n const parser = new DOMParser();\n const htmlDoc = parser.parseFromString(htmlContent, 'text/html');\n\n const converter = new MarkdownConverter();\n parsedMarkdownMarkup = converter.processNode(htmlDoc.body).trim();\n } catch (e) {\n // The code is pretty new and there might be random issues we haven't caught yet,\n // especially with invalid HTML or weird DOM parsing errors.\n // If something goes wrong, I just want to fall back to the \"default pasting\"\n // rather than break the entire experience for the user.\n pasteLogger.error(e, {event: 'parse-html-to-md'});\n globalLogger.error(e);\n }\n\n if (parsedMarkdownMarkup !== undefined) {\n event.preventDefault();\n logger.event({event: 'paste-parsed-html'});\n const reindentedHtmlContent = smartReindent(\n parsedMarkdownMarkup,\n currentLine,\n );\n editor.dispatch(editor.state.replaceSelection(reindentedHtmlContent));\n return;\n }\n }\n\n if (parseInsertedUrlAsImage) {\n const {imageUrl, title} =\n parseInsertedUrlAsImage(\n event.clipboardData.getData(DataTransferType.Text) ?? '',\n ) || {};\n\n if (imageUrl) {\n event.preventDefault();\n logger.event({event: 'paste-url-as-image'});\n insertImages([\n {\n url: imageUrl,\n alt: title,\n title,\n },\n ])(editor);\n }\n }\n\n // Reindenting pasted plain text\n const pastedText = event.clipboardData.getData(DataTransferType.Text);\n const reindentedText = smartReindent(pastedText, currentLine);\n // but only if there is a need for reindentation\n if (pastedText !== reindentedText) {\n editor.dispatch(editor.state.replaceSelection(reindentedText));\n event.preventDefault();\n }\n },\n }),\n SearchPanelPlugin({\n anchorSelector: '.g-md-search-anchor',\n receiver,\n }),\n );\n\n if (preserveEmptyRows) {\n extensions.push(\n keymap.of([\n {key: f.toCM(A.EmptyRow)!, run: withLogger(ActionName.emptyRow, insertEmptyRow)},\n ]),\n );\n }\n\n if (params.uploadHandler) {\n extensions.push(\n FileUploadHandlerFacet.of({\n fn: params.uploadHandler,\n imageWithDimensions: params.needImageDimensions,\n enableNewImageSizeCalculation: params.enableNewImageSizeCalculation,\n }),\n );\n }\n\n if (extraExtensions) {\n extensions.push(...extraExtensions);\n }\n\n return new EditorView({\n doc,\n extensions,\n dispatchTransactions: (trs, view) => {\n view.update(trs);\n onChange();\n if (trs.some((tr) => tr.docChanged)) {\n onDocChange();\n }\n },\n });\n}\n\nexport function withLogger(action: string, command: StateCommand): StateCommand {\n return (...args) => {\n const {state} = args[0];\n state.facet(LoggerFacet).action({source: 'keymap', action});\n globalLogger.action({mode: 'markup', source: 'keymap', action});\n return command(...args);\n };\n}\n"]}
|
|
@@ -4,6 +4,7 @@ exports.FilesUploadPlugin = void 0;
|
|
|
4
4
|
const view_1 = require("@codemirror/view");
|
|
5
5
|
const utils_1 = require("../../../utils/index.js");
|
|
6
6
|
const files_upload_facet_1 = require("../files-upload-facet.js");
|
|
7
|
+
const logger_facet_1 = require("../logger-facet.js");
|
|
7
8
|
const react_facet_1 = require("../react-facet.js");
|
|
8
9
|
const const_1 = require("./const.js");
|
|
9
10
|
const effects_1 = require("./effects.js");
|
|
@@ -209,6 +210,12 @@ exports.FilesUploadPlugin = view_1.ViewPlugin.fromClass(class {
|
|
|
209
210
|
if (!files)
|
|
210
211
|
return false;
|
|
211
212
|
const { from, to } = view.state.selection.main;
|
|
213
|
+
view.state.facet(logger_facet_1.LoggerFacet).event({
|
|
214
|
+
domEvent: 'paste',
|
|
215
|
+
event: 'paste-files',
|
|
216
|
+
plugin: 'files-upload',
|
|
217
|
+
dataTypes: event.clipboardData.types,
|
|
218
|
+
});
|
|
212
219
|
view.dispatch({
|
|
213
220
|
selection: { anchor: from },
|
|
214
221
|
effects: effects_1.AddUploadWidgetEffect.of({ files, pos: from }),
|
|
@@ -223,6 +230,12 @@ exports.FilesUploadPlugin = view_1.ViewPlugin.fromClass(class {
|
|
|
223
230
|
const files = (0, utils_2.getTransferFiles)(event.dataTransfer);
|
|
224
231
|
if (!files)
|
|
225
232
|
return false;
|
|
233
|
+
view.state.facet(logger_facet_1.LoggerFacet).event({
|
|
234
|
+
domEvent: 'drop',
|
|
235
|
+
event: 'drop-files',
|
|
236
|
+
plugin: 'files-upload',
|
|
237
|
+
dataTypes: event.dataTransfer.types,
|
|
238
|
+
});
|
|
226
239
|
const pos = this.view.posAtCoords(event, false);
|
|
227
240
|
view.dispatch({
|
|
228
241
|
selection: { anchor: pos },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"../../../../../src","sources":["markup/codemirror/files-upload-plugin/plugin.ts"],"names":[],"mappings":"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","sourcesContent":["import type {ChangeSpec} from '@codemirror/state';\nimport {\n Decoration,\n type DecorationSet,\n type EditorView,\n type PluginValue,\n ViewPlugin,\n type ViewUpdate,\n WidgetType,\n} from '@codemirror/view';\n\nimport type {RendererItem} from '../../../extensions';\nimport {type FileUploadHandler, type FileUploadResult, getProportionalSize} from '../../../utils';\nimport {FileUploadHandlerFacet} from '../files-upload-facet';\nimport {ReactRendererFacet} from '../react-facet';\n\nimport {IMG_MAX_HEIGHT, SUCCESS_UPLOAD_REMOVE_TIMEOUT} from './const';\nimport {AddUploadWidgetEffect, RemoveUploadWidgetEffect} from './effects';\nimport {getImageDimensions, getTransferFiles, isImageFile, uniqueId} from './utils';\nimport {renderWidget} from './widget';\n\nclass FileUploadWidget extends WidgetType {\n readonly selfId: string;\n\n private presenter?: FileUploadPresenter;\n\n private renderer: RendererItem | null = null;\n private props: object = {};\n\n constructor(id: string) {\n super();\n this.selfId = id;\n }\n\n toDOM(view: EditorView): HTMLElement {\n const dom = document.createElement('div');\n dom.className = 'cm-file-upload-widget';\n dom.style.display = 'inline-block';\n this.renderer?.remove();\n this.createRenderItem(dom, view);\n return dom;\n }\n\n updateDOM(dom: HTMLElement, view: EditorView): boolean {\n this.renderer?.remove();\n this.createRenderItem(dom, view);\n return true;\n }\n\n destroy(dom: HTMLElement): void {\n super.destroy(dom);\n this.renderer?.remove();\n this.presenter?.cancel();\n this.presenter = undefined;\n }\n\n setPresenter(presenter: FileUploadPresenter) {\n this.presenter = presenter;\n }\n\n render(props: object) {\n Object.assign(this.props, props);\n this.renderer?.rerender();\n }\n\n private createRenderItem(dom: HTMLElement, view: EditorView) {\n this.renderer = view.state\n .facet(ReactRendererFacet)\n .createItem('cm-file-upload-widget', () => renderWidget(dom, {...(this.props as any)}));\n }\n}\n\nclass FileUploadPresenter {\n readonly widget: FileUploadWidget;\n\n private readonly file: File;\n private readonly view: EditorView;\n private readonly uploader: FileUploadHandler;\n private readonly needDimensionsForImages: boolean;\n private readonly enableNewImageSizeCalculation: boolean;\n\n private state: 'initial' | 'uploading' | 'success' | 'error' | 'canceled' = 'initial';\n\n constructor(params: {\n file: File;\n widget: FileUploadWidget;\n uploader: FileUploadHandler;\n view: EditorView;\n needDimensionsForImages: boolean;\n enableNewImageSizeCalculation: boolean;\n }) {\n this.file = params.file;\n this.view = params.view;\n this.widget = params.widget;\n this.uploader = params.uploader;\n this.needDimensionsForImages = params.needDimensionsForImages;\n this.enableNewImageSizeCalculation = params.enableNewImageSizeCalculation;\n this.widget.setPresenter(this);\n this.run();\n }\n\n cancel() {\n this.state = 'canceled';\n }\n\n private run() {\n this.state = 'uploading';\n this.widget.render({\n status: 'uploading',\n fileName: this.file.name,\n fileType: isImageFile(this.file) ? 'image' : 'file',\n });\n this.uploader(this.file).then(this.onUploadSuccess, this.onUploadError);\n }\n\n private onUploadSuccess = (res: FileUploadResult) => {\n if (this.state === 'canceled') return;\n this.state = 'success';\n this.widget.render({\n status: 'success',\n fileName: this.file.name,\n fileType: isImageFile(this.file) ? 'image' : 'file',\n });\n setTimeout(async () => {\n const markup = await this.formatFileMarkup(res);\n if (this.state === 'canceled') return;\n\n this.view.dispatch({\n effects: RemoveUploadWidgetEffect.of({\n id: this.widget.selfId,\n markup,\n }),\n });\n }, SUCCESS_UPLOAD_REMOVE_TIMEOUT);\n };\n\n private onUploadError = (err: unknown) => {\n if (this.state === 'canceled') return;\n this.state = 'error';\n this.widget.render({\n status: 'error',\n fileName: this.file.name,\n fileType: isImageFile(this.file) ? 'image' : 'file',\n errorText: String(err),\n onReUploadClick: () => {\n if (this.state === 'error') this.run();\n },\n });\n };\n\n private async formatFileMarkup(res: FileUploadResult) {\n const fileName = res.name ?? this.file.name ?? '';\n\n let markup = `) {\n if (this.needDimensionsForImages) {\n try {\n const fileSize = await getImageDimensions(this.file);\n\n if (this.enableNewImageSizeCalculation) {\n const {width, height} = getProportionalSize({\n width: fileSize.width,\n height: fileSize.height,\n imgMaxHeight: IMG_MAX_HEIGHT,\n });\n\n markup += ` =${width}x${height}`;\n } else {\n const height = Math.min(fileSize.height, IMG_MAX_HEIGHT);\n markup += ` =x${height}`;\n }\n } catch (err) {\n console.error(err);\n }\n }\n\n markup += `)`;\n } else {\n markup = `{% file src=\"${res.url}\" name=\"${fileName.replace('\"', '')}\" %}`;\n }\n\n return markup;\n }\n}\n\nexport const FilesUploadPlugin = ViewPlugin.fromClass(\n class implements PluginValue {\n decos: DecorationSet = Decoration.none;\n readonly view: EditorView;\n\n constructor(view: EditorView) {\n this.view = view;\n }\n\n update(update: ViewUpdate): void {\n this.decos = this.decos.map(update.changes);\n const uploadFacet = this.view.state.facet(FileUploadHandlerFacet);\n\n const changes: ChangeSpec[] = [];\n\n for (const tr of update.transactions) {\n for (const eff of tr.effects) {\n if (eff.is(AddUploadWidgetEffect)) {\n this.decos = this.decos.update({\n add: Array.from(eff.value.files).map((file, index) => {\n const {widget} = new FileUploadPresenter({\n file,\n view: this.view,\n uploader: uploadFacet.fn,\n needDimensionsForImages: Boolean(\n uploadFacet.imageWithDimensions,\n ),\n enableNewImageSizeCalculation: Boolean(\n uploadFacet.enableNewImageSizeCalculation,\n ),\n widget: new FileUploadWidget(uniqueId('__file_widget_id')),\n });\n return Decoration.widget({\n widget,\n side: 1,\n __file_widget_id: widget.selfId,\n }).range(eff.value.pos + index);\n }),\n });\n }\n if (eff.is(RemoveUploadWidgetEffect)) {\n this.decos = this.decos.update({\n filter: (from, to, deco) => {\n if (deco.spec.__file_widget_id !== eff.value.id) return true;\n if (eff.value.markup) {\n changes.push({from, to, insert: eff.value.markup});\n }\n return false;\n },\n });\n }\n }\n }\n\n if (changes.length) {\n setTimeout(() => {\n this.view.dispatch({changes});\n });\n }\n }\n },\n {\n decorations: (v) => v.decos,\n eventHandlers: {\n paste(event, view) {\n if (!event.clipboardData) return false;\n\n const files = getTransferFiles(event.clipboardData);\n if (!files) return false;\n\n const {from, to} = view.state.selection.main;\n\n view.dispatch({\n selection: {anchor: from},\n effects: AddUploadWidgetEffect.of({files, pos: from}),\n changes: {from, to, insert: ' '.repeat(files.length)},\n });\n event.preventDefault();\n return true;\n },\n drop(event, view) {\n if (!event.dataTransfer) return false;\n\n const files = getTransferFiles(event.dataTransfer);\n if (!files) return false;\n\n const pos = this.view.posAtCoords(event, false);\n view.dispatch({\n selection: {anchor: pos},\n effects: AddUploadWidgetEffect.of({files, pos}),\n changes: {from: pos, insert: ' '.repeat(files.length)},\n });\n event.preventDefault();\n return true;\n },\n },\n },\n);\n"]}
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"../../../../../src","sources":["markup/codemirror/files-upload-plugin/plugin.ts"],"names":[],"mappings":"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","sourcesContent":["import type {ChangeSpec} from '@codemirror/state';\nimport {\n Decoration,\n type DecorationSet,\n type EditorView,\n type PluginValue,\n ViewPlugin,\n type ViewUpdate,\n WidgetType,\n} from '@codemirror/view';\n\nimport type {RendererItem} from '../../../extensions';\nimport {type FileUploadHandler, type FileUploadResult, getProportionalSize} from '../../../utils';\nimport {FileUploadHandlerFacet} from '../files-upload-facet';\nimport {LoggerFacet} from '../logger-facet';\nimport {ReactRendererFacet} from '../react-facet';\n\nimport {IMG_MAX_HEIGHT, SUCCESS_UPLOAD_REMOVE_TIMEOUT} from './const';\nimport {AddUploadWidgetEffect, RemoveUploadWidgetEffect} from './effects';\nimport {getImageDimensions, getTransferFiles, isImageFile, uniqueId} from './utils';\nimport {renderWidget} from './widget';\n\nclass FileUploadWidget extends WidgetType {\n readonly selfId: string;\n\n private presenter?: FileUploadPresenter;\n\n private renderer: RendererItem | null = null;\n private props: object = {};\n\n constructor(id: string) {\n super();\n this.selfId = id;\n }\n\n toDOM(view: EditorView): HTMLElement {\n const dom = document.createElement('div');\n dom.className = 'cm-file-upload-widget';\n dom.style.display = 'inline-block';\n this.renderer?.remove();\n this.createRenderItem(dom, view);\n return dom;\n }\n\n updateDOM(dom: HTMLElement, view: EditorView): boolean {\n this.renderer?.remove();\n this.createRenderItem(dom, view);\n return true;\n }\n\n destroy(dom: HTMLElement): void {\n super.destroy(dom);\n this.renderer?.remove();\n this.presenter?.cancel();\n this.presenter = undefined;\n }\n\n setPresenter(presenter: FileUploadPresenter) {\n this.presenter = presenter;\n }\n\n render(props: object) {\n Object.assign(this.props, props);\n this.renderer?.rerender();\n }\n\n private createRenderItem(dom: HTMLElement, view: EditorView) {\n this.renderer = view.state\n .facet(ReactRendererFacet)\n .createItem('cm-file-upload-widget', () => renderWidget(dom, {...(this.props as any)}));\n }\n}\n\nclass FileUploadPresenter {\n readonly widget: FileUploadWidget;\n\n private readonly file: File;\n private readonly view: EditorView;\n private readonly uploader: FileUploadHandler;\n private readonly needDimensionsForImages: boolean;\n private readonly enableNewImageSizeCalculation: boolean;\n\n private state: 'initial' | 'uploading' | 'success' | 'error' | 'canceled' = 'initial';\n\n constructor(params: {\n file: File;\n widget: FileUploadWidget;\n uploader: FileUploadHandler;\n view: EditorView;\n needDimensionsForImages: boolean;\n enableNewImageSizeCalculation: boolean;\n }) {\n this.file = params.file;\n this.view = params.view;\n this.widget = params.widget;\n this.uploader = params.uploader;\n this.needDimensionsForImages = params.needDimensionsForImages;\n this.enableNewImageSizeCalculation = params.enableNewImageSizeCalculation;\n this.widget.setPresenter(this);\n this.run();\n }\n\n cancel() {\n this.state = 'canceled';\n }\n\n private run() {\n this.state = 'uploading';\n this.widget.render({\n status: 'uploading',\n fileName: this.file.name,\n fileType: isImageFile(this.file) ? 'image' : 'file',\n });\n this.uploader(this.file).then(this.onUploadSuccess, this.onUploadError);\n }\n\n private onUploadSuccess = (res: FileUploadResult) => {\n if (this.state === 'canceled') return;\n this.state = 'success';\n this.widget.render({\n status: 'success',\n fileName: this.file.name,\n fileType: isImageFile(this.file) ? 'image' : 'file',\n });\n setTimeout(async () => {\n const markup = await this.formatFileMarkup(res);\n if (this.state === 'canceled') return;\n\n this.view.dispatch({\n effects: RemoveUploadWidgetEffect.of({\n id: this.widget.selfId,\n markup,\n }),\n });\n }, SUCCESS_UPLOAD_REMOVE_TIMEOUT);\n };\n\n private onUploadError = (err: unknown) => {\n if (this.state === 'canceled') return;\n this.state = 'error';\n this.widget.render({\n status: 'error',\n fileName: this.file.name,\n fileType: isImageFile(this.file) ? 'image' : 'file',\n errorText: String(err),\n onReUploadClick: () => {\n if (this.state === 'error') this.run();\n },\n });\n };\n\n private async formatFileMarkup(res: FileUploadResult) {\n const fileName = res.name ?? this.file.name ?? '';\n\n let markup = `) {\n if (this.needDimensionsForImages) {\n try {\n const fileSize = await getImageDimensions(this.file);\n\n if (this.enableNewImageSizeCalculation) {\n const {width, height} = getProportionalSize({\n width: fileSize.width,\n height: fileSize.height,\n imgMaxHeight: IMG_MAX_HEIGHT,\n });\n\n markup += ` =${width}x${height}`;\n } else {\n const height = Math.min(fileSize.height, IMG_MAX_HEIGHT);\n markup += ` =x${height}`;\n }\n } catch (err) {\n console.error(err);\n }\n }\n\n markup += `)`;\n } else {\n markup = `{% file src=\"${res.url}\" name=\"${fileName.replace('\"', '')}\" %}`;\n }\n\n return markup;\n }\n}\n\nexport const FilesUploadPlugin = ViewPlugin.fromClass(\n class implements PluginValue {\n decos: DecorationSet = Decoration.none;\n readonly view: EditorView;\n\n constructor(view: EditorView) {\n this.view = view;\n }\n\n update(update: ViewUpdate): void {\n this.decos = this.decos.map(update.changes);\n const uploadFacet = this.view.state.facet(FileUploadHandlerFacet);\n\n const changes: ChangeSpec[] = [];\n\n for (const tr of update.transactions) {\n for (const eff of tr.effects) {\n if (eff.is(AddUploadWidgetEffect)) {\n this.decos = this.decos.update({\n add: Array.from(eff.value.files).map((file, index) => {\n const {widget} = new FileUploadPresenter({\n file,\n view: this.view,\n uploader: uploadFacet.fn,\n needDimensionsForImages: Boolean(\n uploadFacet.imageWithDimensions,\n ),\n enableNewImageSizeCalculation: Boolean(\n uploadFacet.enableNewImageSizeCalculation,\n ),\n widget: new FileUploadWidget(uniqueId('__file_widget_id')),\n });\n return Decoration.widget({\n widget,\n side: 1,\n __file_widget_id: widget.selfId,\n }).range(eff.value.pos + index);\n }),\n });\n }\n if (eff.is(RemoveUploadWidgetEffect)) {\n this.decos = this.decos.update({\n filter: (from, to, deco) => {\n if (deco.spec.__file_widget_id !== eff.value.id) return true;\n if (eff.value.markup) {\n changes.push({from, to, insert: eff.value.markup});\n }\n return false;\n },\n });\n }\n }\n }\n\n if (changes.length) {\n setTimeout(() => {\n this.view.dispatch({changes});\n });\n }\n }\n },\n {\n decorations: (v) => v.decos,\n eventHandlers: {\n paste(event, view) {\n if (!event.clipboardData) return false;\n\n const files = getTransferFiles(event.clipboardData);\n if (!files) return false;\n\n const {from, to} = view.state.selection.main;\n\n view.state.facet(LoggerFacet).event({\n domEvent: 'paste',\n event: 'paste-files',\n plugin: 'files-upload',\n dataTypes: event.clipboardData.types,\n });\n\n view.dispatch({\n selection: {anchor: from},\n effects: AddUploadWidgetEffect.of({files, pos: from}),\n changes: {from, to, insert: ' '.repeat(files.length)},\n });\n event.preventDefault();\n return true;\n },\n drop(event, view) {\n if (!event.dataTransfer) return false;\n\n const files = getTransferFiles(event.dataTransfer);\n if (!files) return false;\n\n view.state.facet(LoggerFacet).event({\n domEvent: 'drop',\n event: 'drop-files',\n plugin: 'files-upload',\n dataTypes: event.dataTransfer.types,\n });\n\n const pos = this.view.posAtCoords(event, false);\n view.dispatch({\n selection: {anchor: pos},\n effects: AddUploadWidgetEffect.of({files, pos}),\n changes: {from: pos, insert: ' '.repeat(files.length)},\n });\n event.preventDefault();\n return true;\n },\n },\n },\n);\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LoggerFacet = void 0;
|
|
4
|
+
const state_1 = require("@codemirror/state");
|
|
5
|
+
exports.LoggerFacet = state_1.Facet.define({
|
|
6
|
+
combine: (value) => value[0],
|
|
7
|
+
static: true,
|
|
8
|
+
});
|
|
9
|
+
//# sourceMappingURL=logger-facet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger-facet.js","sourceRoot":"../../../../src","sources":["markup/codemirror/logger-facet.ts"],"names":[],"mappings":";;;AAAA,6CAAwC;AAI3B,QAAA,WAAW,GAAG,aAAK,CAAC,MAAM,CAAmC;IACtE,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5B,MAAM,EAAE,IAAI;CACf,CAAC,CAAC","sourcesContent":["import {Facet} from '@codemirror/state';\n\nimport type {Logger2} from '../../logger';\n\nexport const LoggerFacet = Facet.define<Logger2.ILogger, Logger2.ILogger>({\n combine: (value) => value[0],\n static: true,\n});\n"]}
|
|
@@ -14,6 +14,7 @@ export declare class EventEmitter<T extends object = UnkObj> implements Emitter<
|
|
|
14
14
|
on<K extends keyof T>(type: K, listener: Listener<T[K]>): void;
|
|
15
15
|
off<K extends keyof T>(type: K, listener: Listener<T[K]>): void;
|
|
16
16
|
emit<K extends keyof T>(type: K, value: T[K]): void;
|
|
17
|
+
countOf<K extends keyof T>(type: K): number;
|
|
17
18
|
}
|
|
18
19
|
export declare class SafeEventEmitter<T extends object = UnkObj> extends EventEmitter<T> {
|
|
19
20
|
private onError;
|
|
@@ -17,6 +17,9 @@ class EventEmitter {
|
|
|
17
17
|
emit(type, value) {
|
|
18
18
|
this._listeners.get(type)?.forEach((listener) => listener(value));
|
|
19
19
|
}
|
|
20
|
+
countOf(type) {
|
|
21
|
+
return this._listeners.get(type)?.length || 0;
|
|
22
|
+
}
|
|
20
23
|
}
|
|
21
24
|
exports.EventEmitter = EventEmitter;
|
|
22
25
|
class SafeEventEmitter extends EventEmitter {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-emitter.js","sourceRoot":"../../../src","sources":["utils/event-emitter.ts"],"names":[],"mappings":";;;AAaA,MAAa,YAAY;IACX,UAAU,GAAG,IAAI,GAAG,EAA4B,CAAC;IAE3D,EAAE,CAAoB,IAAO,EAAE,QAAwB;QACnD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAClC,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAED,GAAG,CAAoB,IAAO,EAAE,QAAwB;QACpD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,UAAU,CAAC,GAAG,CACf,IAAI,EACJ,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,QAAQ,CAAC,CAC/D,CAAC;QACN,CAAC;IACL,CAAC;IAED,IAAI,CAAoB,IAAO,EAAE,KAAW;QACxC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IACtE,CAAC;CACJ;
|
|
1
|
+
{"version":3,"file":"event-emitter.js","sourceRoot":"../../../src","sources":["utils/event-emitter.ts"],"names":[],"mappings":";;;AAaA,MAAa,YAAY;IACX,UAAU,GAAG,IAAI,GAAG,EAA4B,CAAC;IAE3D,EAAE,CAAoB,IAAO,EAAE,QAAwB;QACnD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAClC,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAED,GAAG,CAAoB,IAAO,EAAE,QAAwB;QACpD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,UAAU,CAAC,GAAG,CACf,IAAI,EACJ,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,QAAQ,CAAC,CAC/D,CAAC;QACN,CAAC;IACL,CAAC;IAED,IAAI,CAAoB,IAAO,EAAE,KAAW;QACxC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,OAAO,CAAoB,IAAO;QAC9B,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;IAClD,CAAC;CACJ;AA1BD,oCA0BC;AAED,MAAa,gBAA4C,SAAQ,YAAe;IACpE,OAAO,CAA2B;IAE1C,YAAY,OAA8C;QACtD,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC;IACrD,CAAC;IAED,IAAI,CAAoB,IAAO,EAAE,KAAW;QACxC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3F,CAAC;IAEO,QAAQ,CAAC,EAAc;QAC3B,IAAI,CAAC;YACD,EAAE,EAAE,CAAC;QACT,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC;CACJ;AAnBD,4CAmBC","sourcesContent":["type UnkObj = {[key: string]: unknown};\n\nexport type Listener<T> = (value: T) => void;\n\nexport interface Emitter<T extends object = UnkObj> {\n emit<K extends keyof T>(type: K, data: T[K]): void;\n}\n\nexport interface Receiver<T extends object = UnkObj> {\n on<K extends keyof T>(type: K, listener: Listener<T[K]>): void;\n off<K extends keyof T>(type: K, listener: Listener<T[K]>): void;\n}\n\nexport class EventEmitter<T extends object = UnkObj> implements Emitter<T>, Receiver<T> {\n protected _listeners = new Map<keyof T, Listener<any>[]>();\n\n on<K extends keyof T>(type: K, listener: Listener<T[K]>): void {\n if (!this._listeners.has(type)) {\n this._listeners.set(type, []);\n }\n this._listeners.get(type)!.push(listener);\n }\n\n off<K extends keyof T>(type: K, listener: Listener<T[K]>): void {\n if (this._listeners.has(type)) {\n this._listeners.set(\n type,\n this._listeners.get(type)!.filter((val) => val !== listener),\n );\n }\n }\n\n emit<K extends keyof T>(type: K, value: T[K]): void {\n this._listeners.get(type)?.forEach((listener) => listener(value));\n }\n\n countOf<K extends keyof T>(type: K): number {\n return this._listeners.get(type)?.length || 0;\n }\n}\n\nexport class SafeEventEmitter<T extends object = UnkObj> extends EventEmitter<T> {\n private onError: (error: unknown) => void;\n\n constructor(options?: {onError?: (error: unknown) => void}) {\n super();\n this.onError = options?.onError ?? console.error;\n }\n\n emit<K extends keyof T>(type: K, value: T[K]): void {\n this._listeners.get(type)?.forEach((listener) => this.safeExec(() => listener(value)));\n }\n\n private safeExec(fn: () => void): void {\n try {\n fn();\n } catch (e) {\n this.onError(e);\n }\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Partial realization of Facet from CodeMirror, but for ProseMirror
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.Facet = void 0;
|
|
5
|
+
const prosemirror_state_1 = require("prosemirror-state");
|
|
6
|
+
const lodash_1 = require("../lodash.js");
|
|
7
|
+
/** @internal @unstable */
|
|
8
|
+
class Facet {
|
|
9
|
+
static define(config) {
|
|
10
|
+
return new this(config);
|
|
11
|
+
}
|
|
12
|
+
_combine;
|
|
13
|
+
_key;
|
|
14
|
+
constructor(config) {
|
|
15
|
+
this._combine = config.combine;
|
|
16
|
+
this._key = new prosemirror_state_1.PluginKey(`Facet${config.static ? '_static' : ''}:${config.name || ''}:${(0, lodash_1.uniqueId)()}`);
|
|
17
|
+
}
|
|
18
|
+
of(value) {
|
|
19
|
+
const output = this._combine([value]);
|
|
20
|
+
return new prosemirror_state_1.Plugin({
|
|
21
|
+
key: this._key,
|
|
22
|
+
state: {
|
|
23
|
+
init: () => output,
|
|
24
|
+
apply: () => output,
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
getState(state) {
|
|
29
|
+
return this._key.getState(state);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
exports.Facet = Facet;
|
|
33
|
+
//# sourceMappingURL=facet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"facet.js","sourceRoot":"../../../src","sources":["utils/facet.ts"],"names":[],"mappings":";AAAA,oEAAoE;;;AAEpE,yDAAsE;AAEtE,yCAAmC;AASnC,0BAA0B;AAC1B,MAAa,KAAK;IACd,MAAM,CAAC,MAAM,CACT,MAAkC;QAElC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAEgB,QAAQ,CAAC;IACT,IAAI,CAAoB;IAEzC,YAAoB,MAAkC;QAClD,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,6BAAS,CACrB,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,MAAM,CAAC,IAAI,IAAI,EAAE,IAAI,IAAA,iBAAQ,GAAE,EAAE,CAC9E,CAAC;IACN,CAAC;IAED,EAAE,CAAC,KAAY;QACX,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACtC,OAAO,IAAI,0BAAM,CAAS;YACtB,GAAG,EAAE,IAAI,CAAC,IAAI;YACd,KAAK,EAAE;gBACH,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM;gBAClB,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM;aACtB;SACJ,CAAC,CAAC;IACP,CAAC;IAED,QAAQ,CAAC,KAAkB;QACvB,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;CACJ;AA/BD,sBA+BC","sourcesContent":["// Partial realization of Facet from CodeMirror, but for ProseMirror\n\nimport {type EditorState, Plugin, PluginKey} from 'prosemirror-state';\n\nimport {uniqueId} from '../lodash';\n\n/** @internal @unstable */\nexport type FacetConfig<Input, Output> = {\n combine: (value: readonly Input[]) => Output;\n static: true;\n name?: string;\n};\n\n/** @internal @unstable */\nexport class Facet<Input, Output = readonly Input[]> {\n static define<Input, Output = readonly Input[]>(\n config: FacetConfig<Input, Output>,\n ): Facet<Input, Output> {\n return new this(config);\n }\n\n private readonly _combine;\n private readonly _key: PluginKey<Output>;\n\n private constructor(config: FacetConfig<Input, Output>) {\n this._combine = config.combine;\n this._key = new PluginKey(\n `Facet${config.static ? '_static' : ''}:${config.name || ''}:${uniqueId()}`,\n );\n }\n\n of(value: Input): Plugin<Output> {\n const output = this._combine([value]);\n return new Plugin<Output>({\n key: this._key,\n state: {\n init: () => output,\n apply: () => output,\n },\n });\n }\n\n getState(state: EditorState): Output | undefined {\n return this._key.getState(state);\n }\n}\n"]}
|
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.withLogAction = withLogAction;
|
|
4
|
+
const core_1 = require("../core/index.js");
|
|
4
5
|
const logger_1 = require("../logger.js");
|
|
5
6
|
function withLogAction(action, command) {
|
|
6
7
|
return (...args) => {
|
|
7
8
|
const res = command(...args);
|
|
8
|
-
if (res)
|
|
9
|
-
|
|
9
|
+
if (res) {
|
|
10
|
+
const [state] = args;
|
|
11
|
+
const logger = (0, core_1.getLoggerFromState)(state);
|
|
12
|
+
logger.action({ action, source: 'keymap' });
|
|
13
|
+
logger_1.globalLogger.action({ action, source: 'keymap', mode: 'wysiwyg' });
|
|
14
|
+
}
|
|
10
15
|
return res;
|
|
11
16
|
};
|
|
12
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keymap.js","sourceRoot":"../../../src","sources":["utils/keymap.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"keymap.js","sourceRoot":"../../../src","sources":["utils/keymap.ts"],"names":[],"mappings":";;AAKA,sCAWC;AAdD,2CAA2C;AAC3C,yCAAuC;AAEvC,SAAgB,aAAa,CAAC,MAAc,EAAE,OAAgB;IAC1D,OAAO,CAAC,GAAG,IAAI,EAAE,EAAE;QACf,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QAC7B,IAAI,GAAG,EAAE,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;YACrB,MAAM,MAAM,GAAG,IAAA,yBAAkB,EAAC,KAAK,CAAC,CAAC;YACzC,MAAM,CAAC,MAAM,CAAC,EAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAC,CAAC,CAAC;YAC1C,qBAAY,CAAC,MAAM,CAAC,EAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAC,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,GAAG,CAAC;IACf,CAAC,CAAC;AACN,CAAC","sourcesContent":["import type {Command} from 'prosemirror-state';\n\nimport {getLoggerFromState} from '../core';\nimport {globalLogger} from '../logger';\n\nexport function withLogAction(action: string, command: Command): Command {\n return (...args) => {\n const res = command(...args);\n if (res) {\n const [state] = args;\n const logger = getLoggerFromState(state);\n logger.action({action, source: 'keymap'});\n globalLogger.action({action, source: 'keymap', mode: 'wysiwyg'});\n }\n return res;\n };\n}\n"]}
|
package/build/cjs/version.js
CHANGED
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.VERSION = void 0;
|
|
4
4
|
/** During build process, the current version will be injected here */
|
|
5
|
-
exports.VERSION = typeof '15.1
|
|
5
|
+
exports.VERSION = typeof '15.2.1' !== 'undefined' ? '15.2.1' : 'unknown';
|
|
6
6
|
//# sourceMappingURL=version.js.map
|
package/build/cjs/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"../../src","sources":["version.ts"],"names":[],"mappings":";;;AAAA,sEAAsE;AACzD,QAAA,OAAO,GAAG,OAAO,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC","sourcesContent":["/** During build process, the current version will be injected here */\nexport const VERSION = typeof '15.1
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"../../src","sources":["version.ts"],"names":[],"mappings":";;;AAAA,sEAAsE;AACzD,QAAA,OAAO,GAAG,OAAO,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC","sourcesContent":["/** During build process, the current version will be injected here */\nexport const VERSION = typeof '15.2.1' !== 'undefined' ? '15.2.1' : 'unknown';\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { CommonEditor } from "../common/index.js";
|
|
2
2
|
import type { TransformFn } from "../core/markdown/ProseMirrorTransformer/index.js";
|
|
3
3
|
import type { ReactRenderStorage } from "../extensions/index.js";
|
|
4
|
+
import { type Logger2 } from "../logger.js";
|
|
4
5
|
import { type Receiver } from "../utils/index.js";
|
|
5
6
|
import type { DirectiveSyntaxContext } from "../utils/directive.js";
|
|
6
7
|
import type { MarkdownEditorMode as EditorMode, MarkdownEditorPreset as EditorPreset, MarkdownEditorOptions } from "./types.js";
|
|
@@ -27,6 +28,7 @@ export interface EventMap {
|
|
|
27
28
|
};
|
|
28
29
|
}
|
|
29
30
|
export interface Editor extends Receiver<EventMap>, CommonEditor {
|
|
31
|
+
readonly logger: Logger2.LogReceiver;
|
|
30
32
|
readonly currentMode: EditorMode;
|
|
31
33
|
readonly toolbarVisible: boolean;
|
|
32
34
|
setEditorMode(mode: EditorMode, opts?: SetEditorModeOptions): void;
|
|
@@ -41,6 +43,7 @@ export type ChangeEditorModeOptions = {
|
|
|
41
43
|
emit?: boolean;
|
|
42
44
|
};
|
|
43
45
|
export type EditorOptions = Pick<MarkdownEditorOptions, 'md' | 'initial' | 'handlers' | 'experimental' | 'markupConfig' | 'wysiwygConfig'> & {
|
|
46
|
+
logger: Logger2.ILogger;
|
|
44
47
|
renderStorage: ReactRenderStorage;
|
|
45
48
|
preset: EditorPreset;
|
|
46
49
|
directiveSyntax: DirectiveSyntaxContext;
|
|
@@ -2,7 +2,7 @@ import { EditorView as CMEditorView } from '@codemirror/view';
|
|
|
2
2
|
import { TextSelection } from 'prosemirror-state';
|
|
3
3
|
import { WysiwygEditor, } from "../core/index.js";
|
|
4
4
|
import { i18n } from "../i18n/bundle/index.js";
|
|
5
|
-
import {
|
|
5
|
+
import { globalLogger } from "../logger.js";
|
|
6
6
|
import { createCodemirror } from "../markup/index.js";
|
|
7
7
|
import { getAutocompleteConfig } from "../markup/codemirror/autocomplete/index.js";
|
|
8
8
|
import { Editor as MarkupEditor } from "../markup/editor.js";
|
|
@@ -11,6 +11,7 @@ import { MarkupManager } from "./MarkupManager.js";
|
|
|
11
11
|
import { createDynamicModifiers } from "./config/dynamicModifiers.js";
|
|
12
12
|
/** @internal */
|
|
13
13
|
export class EditorImpl extends SafeEventEmitter {
|
|
14
|
+
#logger;
|
|
14
15
|
#markup;
|
|
15
16
|
#editorMode;
|
|
16
17
|
#toolbarVisible;
|
|
@@ -39,6 +40,9 @@ export class EditorImpl extends SafeEventEmitter {
|
|
|
39
40
|
// @ts-expect-error internal typing
|
|
40
41
|
return this.#wysiwygEditor?.view;
|
|
41
42
|
}
|
|
43
|
+
get logger() {
|
|
44
|
+
return this.#logger;
|
|
45
|
+
}
|
|
42
46
|
get currentMode() {
|
|
43
47
|
return this.#editorMode;
|
|
44
48
|
}
|
|
@@ -118,6 +122,7 @@ export class EditorImpl extends SafeEventEmitter {
|
|
|
118
122
|
const mdPreset = this.#preset === 'zero' || this.#preset === 'commonmark' ? this.#preset : 'default';
|
|
119
123
|
this.#wysiwygEditor = new WysiwygEditor({
|
|
120
124
|
mdPreset,
|
|
125
|
+
logger: this.logger.nested({ mode: 'wysiwyg' }),
|
|
121
126
|
initialContent: this.#markup,
|
|
122
127
|
extensions: this.#extensions,
|
|
123
128
|
pmTransformers: this.#pmTransformers,
|
|
@@ -136,6 +141,7 @@ export class EditorImpl extends SafeEventEmitter {
|
|
|
136
141
|
if (!this.#markupEditor) {
|
|
137
142
|
this.#markupEditor = new MarkupEditor(createCodemirror({
|
|
138
143
|
doc: this.#markup,
|
|
144
|
+
logger: this.logger.nested({ mode: 'markup' }),
|
|
139
145
|
placeholder: this.#markupConfig.placeholder ?? i18n('markup_placeholder'),
|
|
140
146
|
onCancel: () => this.emit('cancel', null),
|
|
141
147
|
onSubmit: () => this.emit('submit', null),
|
|
@@ -180,10 +186,17 @@ export class EditorImpl extends SafeEventEmitter {
|
|
|
180
186
|
return this.#enableNewImageSizeCalculation;
|
|
181
187
|
}
|
|
182
188
|
constructor(opts) {
|
|
183
|
-
|
|
189
|
+
const { logger } = opts;
|
|
190
|
+
super({
|
|
191
|
+
onError: (error) => {
|
|
192
|
+
logger.error(error);
|
|
193
|
+
globalLogger.error(error);
|
|
194
|
+
},
|
|
195
|
+
});
|
|
184
196
|
const { md = {}, initial = {}, handlers = {}, experimental = {}, markupConfig = {}, wysiwygConfig = {}, } = opts;
|
|
197
|
+
this.#logger = logger;
|
|
185
198
|
this.#modifiers = experimental.preserveMarkupFormatting
|
|
186
|
-
? createDynamicModifiers(new MarkupManager())
|
|
199
|
+
? createDynamicModifiers(new MarkupManager(this.logger.nested({ module: 'markup-manager' })))
|
|
187
200
|
: undefined;
|
|
188
201
|
this.#editorMode = initial.mode ?? 'wysiwyg';
|
|
189
202
|
this.#toolbarVisible = initial.toolbarVisible ?? true;
|
|
@@ -236,6 +249,12 @@ export class EditorImpl extends SafeEventEmitter {
|
|
|
236
249
|
if (this.#beforeEditorModeChange?.({ mode: opts.mode, reason: opts.reason }) === false) {
|
|
237
250
|
return;
|
|
238
251
|
}
|
|
252
|
+
this.logger.event({
|
|
253
|
+
event: 'mode-change',
|
|
254
|
+
prevMode: this.#editorMode,
|
|
255
|
+
nextMode: opts.mode,
|
|
256
|
+
reason: opts.reason,
|
|
257
|
+
});
|
|
239
258
|
this.currentMode = opts.mode;
|
|
240
259
|
this.emit('rerender', null);
|
|
241
260
|
if (emit) {
|