@gravity-ui/markdown-editor 15.0.2 → 15.2.0
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/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/Html/index.js +2 -1
- package/build/cjs/extensions/markdown/Html/index.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/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/ImageWidget/index.d.ts +3 -1
- package/build/cjs/extensions/yfm/ImgSize/ImageWidget/index.js +2 -0
- package/build/cjs/extensions/yfm/ImgSize/ImageWidget/index.js.map +1 -1
- package/build/cjs/extensions/yfm/ImgSize/ImageWidget/view.d.ts +15 -3
- package/build/cjs/extensions/yfm/ImgSize/ImageWidget/view.js +16 -8
- package/build/cjs/extensions/yfm/ImgSize/ImageWidget/view.js.map +1 -1
- package/build/cjs/extensions/yfm/ImgSize/ImageWidget/widget.d.ts +3 -0
- package/build/cjs/extensions/yfm/ImgSize/ImageWidget/widget.js +13 -2
- package/build/cjs/extensions/yfm/ImgSize/ImageWidget/widget.js.map +1 -1
- package/build/cjs/extensions/yfm/ImgSize/index.d.ts +2 -1
- package/build/cjs/extensions/yfm/ImgSize/index.js +2 -0
- package/build/cjs/extensions/yfm/ImgSize/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/YfmCut/index.css +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/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/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/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/Html/index.js +3 -2
- package/build/esm/extensions/markdown/Html/index.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/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/ImageWidget/index.d.ts +3 -1
- package/build/esm/extensions/yfm/ImgSize/ImageWidget/index.js +2 -0
- package/build/esm/extensions/yfm/ImgSize/ImageWidget/index.js.map +1 -1
- package/build/esm/extensions/yfm/ImgSize/ImageWidget/view.d.ts +15 -3
- package/build/esm/extensions/yfm/ImgSize/ImageWidget/view.js +15 -7
- package/build/esm/extensions/yfm/ImgSize/ImageWidget/view.js.map +1 -1
- package/build/esm/extensions/yfm/ImgSize/ImageWidget/widget.d.ts +3 -0
- package/build/esm/extensions/yfm/ImgSize/ImageWidget/widget.js +14 -3
- package/build/esm/extensions/yfm/ImgSize/ImageWidget/widget.js.map +1 -1
- package/build/esm/extensions/yfm/ImgSize/index.d.ts +2 -1
- package/build/esm/extensions/yfm/ImgSize/index.js +2 -0
- package/build/esm/extensions/yfm/ImgSize/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/YfmCut/index.css +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/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/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/build/styles.css +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"widget.js","sourceRoot":"../../../../../../src","sources":["extensions/yfm/ImgSize/ImageWidget/widget.tsx"],"names":[],"mappings":"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","sourcesContent":["import isNumber from 'is-number';\nimport type {Node} from 'prosemirror-model';\nimport type {Transaction} from 'prosemirror-state';\nimport type {EditorView} from 'prosemirror-view';\n\nimport type {ExtensionDeps} from '../../../../core';\nimport type {FileUploadHandler} from '../../../../utils/upload';\nimport {ReactWidgetDescriptor, removeDecoration} from '../../../behavior/WidgetDecoration';\nimport {imageType, normalizeUrlFactory} from '../../../markdown';\nimport {ImgSizeAttr} from '../../../specs';\nimport {ImagesUploadProcess} from '../ImagePaste/upload';\n\nimport {FilePlaceholder, type FilePlaceholderProps} from './view';\n\nexport const addWidget = (\n tr: Transaction,\n deps: ExtensionDeps,\n opts: ImageWidgetDescriptorOpts,\n) => {\n return new ImageWidgetDescriptor(tr.selection.from, deps, opts).applyTo(tr);\n};\n\nexport const removeWidget = removeDecoration;\n\nexport type ImageWidgetDescriptorOpts = {\n needToSetDimensionsForUploadedImages: boolean;\n uploadImages?: FileUploadHandler;\n};\n\nclass ImageWidgetDescriptor extends ReactWidgetDescriptor {\n private readonly domElem;\n private readonly deps;\n private readonly uploadImages;\n private readonly needToSetDimensionsForUploadedImages: boolean;\n\n private widgetHandler: ImageWidgetHandler | null = null;\n\n constructor(initPos: number, deps: ExtensionDeps, opts: ImageWidgetDescriptorOpts) {\n super(initPos, 'image_placeholder');\n this.domElem = document.createElement('span');\n this.deps = deps;\n this.uploadImages = opts.uploadImages;\n this.needToSetDimensionsForUploadedImages = opts.needToSetDimensionsForUploadedImages;\n }\n\n getWidgetHandler(view: EditorView, getPos: () => number): ImageWidgetHandler {\n if (!this.widgetHandler) {\n this.widgetHandler = new ImageWidgetHandler(\n {\n view,\n getPos,\n decoId: this.id,\n uploadImages: this.uploadImages,\n needToSetDimensionsForUploadedImages: this.needToSetDimensionsForUploadedImages,\n },\n this.deps,\n );\n }\n return this.widgetHandler;\n }\n\n getDomElem(): HTMLElement {\n return this.domElem;\n }\n\n renderReactElement(view: EditorView, getPos: () => number): React.ReactElement {\n return this.getWidgetHandler(view, getPos).renderWidgetView(view, getPos);\n }\n\n remove(): void {\n super.remove();\n this.widgetHandler?.destruct();\n this.widgetHandler = null;\n }\n}\n\ntype ImageWidgetHandlerProps = {\n decoId: string;\n view: EditorView;\n getPos: () => number;\n uploadImages?: FileUploadHandler;\n needToSetDimensionsForUploadedImages: boolean;\n};\n\nclass ImageWidgetHandler {\n private view;\n private getPos;\n\n private readonly decoId: string;\n private readonly uploadImages;\n private readonly normalizeUrl;\n private readonly needToSetDimensionsForUploadedImages: boolean;\n\n private cancelled = false;\n\n constructor(\n {\n decoId,\n view,\n getPos,\n uploadImages,\n needToSetDimensionsForUploadedImages,\n }: ImageWidgetHandlerProps,\n deps: ExtensionDeps,\n ) {\n this.decoId = decoId;\n this.view = view;\n this.getPos = getPos;\n this.uploadImages = uploadImages;\n this.normalizeUrl = normalizeUrlFactory(deps);\n this.needToSetDimensionsForUploadedImages = needToSetDimensionsForUploadedImages;\n }\n\n destruct() {\n this.cancelled = true;\n }\n\n renderWidgetView(view: EditorView, getPos: () => number): React.ReactElement {\n this.view = view;\n this.getPos = getPos;\n return (\n <FilePlaceholder\n onCancel={this.onCancel}\n onSubmit={this.onSubmit}\n onAttach={this.uploadImages && this.onAttach}\n />\n );\n }\n\n private onCancel: FilePlaceholderProps['onCancel'] = () => {\n this.cancelled = true;\n this.view.dispatch(removeDecoration(this.view.state.tr, this.decoId));\n this.view.focus();\n };\n\n private onSubmit: FilePlaceholderProps['onSubmit'] = (params) => {\n if (this.cancelled) return;\n\n const url = this.normalizeUrl(params.url)?.url;\n if (!url) return;\n\n const attrs = {\n [ImgSizeAttr.Src]: url,\n [ImgSizeAttr.Title]: params.name,\n [ImgSizeAttr.Alt]: params.alt,\n [ImgSizeAttr.Width]: isNumber(params.width) ? String(params.width) : null,\n [ImgSizeAttr.Height]: isNumber(params.height) ? String(params.height) : null,\n };\n\n const node = imageType(this.view.state.schema).create(attrs);\n this.insertNodes([node]);\n };\n\n private onAttach: FilePlaceholderProps['onAttach'] = async (files) => {\n if (this.cancelled || !this.uploadImages) return;\n\n const {view} = this;\n new ImagesUploadProcess(view, files, this.uploadImages, this.getPos(), {\n needDimensions: this.needToSetDimensionsForUploadedImages,\n }).run();\n view.dispatch(removeWidget(view.state.tr, this.decoId));\n view.focus();\n };\n\n private insertNodes(fileNodes: Node[]) {\n if (this.cancelled) return;\n\n let tr = this.view.state.tr;\n tr = tr.insert(tr.mapping.map(this.getPos()), fileNodes);\n tr = removeWidget(tr, this.decoId);\n this.view.dispatch(tr);\n this.view.focus();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"widget.js","sourceRoot":"../../../../../../src","sources":["extensions/yfm/ImgSize/ImageWidget/widget.tsx"],"names":[],"mappings":"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","sourcesContent":["import isNumber from 'is-number';\nimport type {Node} from 'prosemirror-model';\nimport type {Transaction} from 'prosemirror-state';\nimport type {EditorView} from 'prosemirror-view';\n\nimport type {ExtensionDeps} from '../../../../core';\nimport type {FileUploadHandler} from '../../../../utils/upload';\nimport {ReactWidgetDescriptor, removeDecoration} from '../../../behavior/WidgetDecoration';\nimport {imageType, normalizeUrlFactory} from '../../../markdown';\nimport {ImgSizeAttr} from '../../../specs';\nimport {ImagesUploadProcess} from '../ImagePaste/upload';\n\nimport {ImagePlaceholder, type ImagePlaceholderProps, type RenderImageWidgetFormFn} from './view';\n\nexport const addWidget = (\n tr: Transaction,\n deps: ExtensionDeps,\n opts: ImageWidgetDescriptorOpts,\n) => {\n return new ImageWidgetDescriptor(tr.selection.from, deps, opts).applyTo(tr);\n};\n\nexport const removeWidget = removeDecoration;\n\nexport type ImageWidgetDescriptorOpts = {\n needToSetDimensionsForUploadedImages: boolean;\n uploadImages?: FileUploadHandler;\n enableNewImageSizeCalculation?: boolean;\n renderImageForm?: RenderImageWidgetFormFn;\n};\n\nclass ImageWidgetDescriptor extends ReactWidgetDescriptor {\n private readonly domElem;\n private readonly deps;\n private readonly uploadImages;\n private readonly needToSetDimensionsForUploadedImages: boolean;\n private readonly enableNewImageSizeCalculation?: boolean;\n private readonly renderImageForm: RenderImageWidgetFormFn | undefined;\n\n private widgetHandler: ImageWidgetHandler | null = null;\n\n constructor(initPos: number, deps: ExtensionDeps, opts: ImageWidgetDescriptorOpts) {\n super(initPos, 'image_placeholder');\n this.domElem = document.createElement('span');\n this.deps = deps;\n this.uploadImages = opts.uploadImages;\n this.renderImageForm = opts.renderImageForm;\n this.needToSetDimensionsForUploadedImages = opts.needToSetDimensionsForUploadedImages;\n this.enableNewImageSizeCalculation = opts.enableNewImageSizeCalculation;\n }\n\n getWidgetHandler(view: EditorView, getPos: () => number): ImageWidgetHandler {\n if (!this.widgetHandler) {\n this.widgetHandler = new ImageWidgetHandler(\n {\n view,\n getPos,\n decoId: this.id,\n uploadImages: this.uploadImages,\n renderImageForm: this.renderImageForm,\n needToSetDimensionsForUploadedImages: this.needToSetDimensionsForUploadedImages,\n enableNewImageSizeCalculation: this.enableNewImageSizeCalculation,\n },\n this.deps,\n );\n }\n return this.widgetHandler;\n }\n\n getDomElem(): HTMLElement {\n return this.domElem;\n }\n\n renderReactElement(view: EditorView, getPos: () => number): React.ReactElement {\n return this.getWidgetHandler(view, getPos).renderWidgetView(view, getPos);\n }\n\n remove(): void {\n super.remove();\n this.widgetHandler?.destruct();\n this.widgetHandler = null;\n }\n}\n\ntype ImageWidgetHandlerProps = {\n decoId: string;\n view: EditorView;\n getPos: () => number;\n uploadImages?: FileUploadHandler;\n renderImageForm?: RenderImageWidgetFormFn;\n needToSetDimensionsForUploadedImages: boolean;\n enableNewImageSizeCalculation?: boolean;\n};\n\nclass ImageWidgetHandler {\n private view;\n private getPos;\n\n private readonly decoId: string;\n private readonly uploadImages;\n private readonly normalizeUrl;\n private readonly needToSetDimensionsForUploadedImages: boolean;\n private readonly enableNewImageSizeCalculation?: boolean;\n private readonly renderImageForm: RenderImageWidgetFormFn | undefined;\n\n private cancelled = false;\n\n constructor(\n {\n decoId,\n view,\n getPos,\n uploadImages,\n renderImageForm,\n needToSetDimensionsForUploadedImages,\n enableNewImageSizeCalculation,\n }: ImageWidgetHandlerProps,\n deps: ExtensionDeps,\n ) {\n this.decoId = decoId;\n this.view = view;\n this.getPos = getPos;\n this.uploadImages = uploadImages;\n this.normalizeUrl = normalizeUrlFactory(deps);\n this.renderImageForm = renderImageForm;\n this.needToSetDimensionsForUploadedImages = needToSetDimensionsForUploadedImages;\n this.enableNewImageSizeCalculation = enableNewImageSizeCalculation;\n }\n\n destruct() {\n this.cancelled = true;\n }\n\n renderWidgetView(view: EditorView, getPos: () => number): React.ReactElement {\n this.view = view;\n this.getPos = getPos;\n return (\n <ImagePlaceholder\n onCancel={this.onCancel}\n onSubmit={this.onSubmit}\n onAttach={this.uploadImages && this.onAttach}\n renderForm={this.renderImageForm}\n />\n );\n }\n\n private onCancel: ImagePlaceholderProps['onCancel'] = () => {\n this.cancelled = true;\n this.view.dispatch(removeDecoration(this.view.state.tr, this.decoId));\n this.view.focus();\n };\n\n private onSubmit: ImagePlaceholderProps['onSubmit'] = (params) => {\n if (this.cancelled) return;\n\n const url = this.normalizeUrl(params.url)?.url;\n if (!url) return;\n\n const attrs = {\n [ImgSizeAttr.Src]: url,\n [ImgSizeAttr.Title]: params.name,\n [ImgSizeAttr.Alt]: params.alt,\n [ImgSizeAttr.Width]: isNumber(params.width) ? String(params.width) : null,\n [ImgSizeAttr.Height]: isNumber(params.height) ? String(params.height) : null,\n };\n\n const node = imageType(this.view.state.schema).create(attrs);\n this.insertNodes([node]);\n };\n\n private onAttach: ImagePlaceholderProps['onAttach'] = async (files) => {\n if (this.cancelled || !this.uploadImages) return;\n\n const {view} = this;\n new ImagesUploadProcess(view, files, this.uploadImages, this.getPos(), {\n needDimensions: this.needToSetDimensionsForUploadedImages,\n enableNewImageSizeCalculation: this.enableNewImageSizeCalculation,\n }).run();\n view.dispatch(removeWidget(view.state.tr, this.decoId));\n view.focus();\n };\n\n private insertNodes(fileNodes: Node[]) {\n if (this.cancelled) return;\n\n let tr = this.view.state.tr;\n tr = tr.insert(tr.mapping.map(this.getPos()), fileNodes);\n tr = removeWidget(tr, this.decoId);\n this.view.dispatch(tr);\n this.view.focus();\n }\n}\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Action, ExtensionAuto } from "../../../core/index.js";
|
|
2
2
|
import { type ImagePasteOptions } from "./ImagePaste/index.js";
|
|
3
|
+
import { type ImageWidgetOptions } from "./ImageWidget/index.js";
|
|
3
4
|
import { type ImgSizeSpecsOptions } from "./ImgSizeSpecs/index.js";
|
|
4
5
|
import { type AddImageAttrs } from "./actions.js";
|
|
5
6
|
import { addImageAction } from "./const.js";
|
|
@@ -10,7 +11,7 @@ export type ImgSizeOptions = ImgSizeSpecsOptions & {
|
|
|
10
11
|
* @default false
|
|
11
12
|
*/
|
|
12
13
|
needToSetDimensionsForUploadedImages?: boolean;
|
|
13
|
-
} & Pick<ImagePasteOptions, 'imageUploadHandler' | 'parseInsertedUrlAsImage' | 'enableNewImageSizeCalculation'>;
|
|
14
|
+
} & Pick<ImagePasteOptions, 'imageUploadHandler' | 'parseInsertedUrlAsImage' | 'enableNewImageSizeCalculation'> & Pick<ImageWidgetOptions, 'renderImageWidgetForm'>;
|
|
14
15
|
export declare const ImgSize: ExtensionAuto<ImgSizeOptions>;
|
|
15
16
|
declare global {
|
|
16
17
|
namespace WysiwygEditor {
|
|
@@ -8,7 +8,9 @@ export const ImgSize = (builder, opts) => {
|
|
|
8
8
|
builder.use(ImgSizeSpecs, opts);
|
|
9
9
|
builder.use(ImageWidget, {
|
|
10
10
|
imageUploadHandler: opts.imageUploadHandler,
|
|
11
|
+
renderImageWidgetForm: opts.renderImageWidgetForm,
|
|
11
12
|
needToSetDimensionsForUploadedImages: Boolean(opts.needToSetDimensionsForUploadedImages),
|
|
13
|
+
enableNewImageSizeCalculation: Boolean(opts.enableNewImageSizeCalculation),
|
|
12
14
|
});
|
|
13
15
|
if (opts.imageUploadHandler || opts.parseInsertedUrlAsImage) {
|
|
14
16
|
builder.use(ImagePaste, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"../../../../../src","sources":["extensions/yfm/ImgSize/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,UAAU,EAAyB,8BAAqB;AAChE,OAAO,EAAC,WAAW,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"../../../../../src","sources":["extensions/yfm/ImgSize/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,UAAU,EAAyB,8BAAqB;AAChE,OAAO,EAAC,WAAW,EAA0B,+BAAsB;AACnE,OAAO,EAAC,YAAY,EAA2B,gCAAuB;AACtE,OAAO,EAAqB,QAAQ,EAAC,qBAAkB;AACvD,OAAO,EAAC,cAAc,EAAC,mBAAgB;AACvC,OAAO,EAAC,qBAAqB,EAAC,2CAAkC;AAehE,MAAM,CAAC,MAAM,OAAO,GAAkC,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;IACpE,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IAEhC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE;QACrB,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;QAC3C,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;QACjD,oCAAoC,EAAE,OAAO,CAAC,IAAI,CAAC,oCAAoC,CAAC;QACxF,6BAA6B,EAAE,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC;KAC7E,CAAC,CAAC;IAEH,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE;YACpB,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;YAC3C,cAAc,EAAE,OAAO,CAAC,IAAI,CAAC,oCAAoC,CAAC;YAClE,uBAAuB,EAAE,IAAI,CAAC,uBAAuB;YACrD,6BAA6B,EAAE,IAAI,CAAC,6BAA6B;SACpE,CAAC,CAAC;IACP,CAAC;IAED,OAAO,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC,EAAC,MAAM,EAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAElE,OAAO,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;AAC7C,CAAC,CAAC","sourcesContent":["import type {Action, ExtensionAuto} from '../../../core';\n\nimport {ImagePaste, type ImagePasteOptions} from './ImagePaste';\nimport {ImageWidget, type ImageWidgetOptions} from './ImageWidget';\nimport {ImgSizeSpecs, type ImgSizeSpecsOptions} from './ImgSizeSpecs';\nimport {type AddImageAttrs, addImage} from './actions';\nimport {addImageAction} from './const';\nimport {imgSizeNodeViewPlugin} from './plugins/ImgSizeNodeView';\n\nexport type ImgSizeOptions = ImgSizeSpecsOptions & {\n /**\n * If we need to set dimensions for uploaded images\n *\n * @default false\n */\n needToSetDimensionsForUploadedImages?: boolean;\n} & Pick<\n ImagePasteOptions,\n 'imageUploadHandler' | 'parseInsertedUrlAsImage' | 'enableNewImageSizeCalculation'\n > &\n Pick<ImageWidgetOptions, 'renderImageWidgetForm'>;\n\nexport const ImgSize: ExtensionAuto<ImgSizeOptions> = (builder, opts) => {\n builder.use(ImgSizeSpecs, opts);\n\n builder.use(ImageWidget, {\n imageUploadHandler: opts.imageUploadHandler,\n renderImageWidgetForm: opts.renderImageWidgetForm,\n needToSetDimensionsForUploadedImages: Boolean(opts.needToSetDimensionsForUploadedImages),\n enableNewImageSizeCalculation: Boolean(opts.enableNewImageSizeCalculation),\n });\n\n if (opts.imageUploadHandler || opts.parseInsertedUrlAsImage) {\n builder.use(ImagePaste, {\n imageUploadHandler: opts.imageUploadHandler,\n needDimensions: Boolean(opts.needToSetDimensionsForUploadedImages),\n parseInsertedUrlAsImage: opts.parseInsertedUrlAsImage,\n enableNewImageSizeCalculation: opts.enableNewImageSizeCalculation,\n });\n }\n\n builder.addAction(addImageAction, ({schema}) => addImage(schema));\n\n builder.addPlugin(imgSizeNodeViewPlugin);\n};\n\ndeclare global {\n namespace WysiwygEditor {\n interface Actions {\n // @ts-expect-error\n [addImageAction]: Action<AddImageAttrs>;\n }\n }\n}\n"]}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Node, NodeType } from 'prosemirror-model';
|
|
2
|
+
import { type Logger2 } from "../../../logger.js";
|
|
2
3
|
import { type UploadSuccessItem } from "../../../utils/index.js";
|
|
3
4
|
import { ImgSizeAttr } from "../../specs.js";
|
|
4
5
|
export declare function isImageNode(node: Node): boolean;
|
|
@@ -6,7 +7,7 @@ export type CreateImageNodeOptions = {
|
|
|
6
7
|
needDimensions: boolean;
|
|
7
8
|
enableNewImageSizeCalculation?: boolean;
|
|
8
9
|
};
|
|
9
|
-
export declare const createImageNode: (imgType: NodeType, opts: CreateImageNodeOptions) => ({ result, file }: UploadSuccessItem) => Promise<Node>;
|
|
10
|
+
export declare const createImageNode: (imgType: NodeType, opts: CreateImageNodeOptions, logger: Logger2.ILogger) => ({ result, file }: UploadSuccessItem) => Promise<Node>;
|
|
10
11
|
export declare function loadImage(imgFile: File): Promise<HTMLImageElement>;
|
|
11
12
|
export declare function getImageSize(img: HTMLImageElement): {
|
|
12
13
|
[ImgSizeAttr.Height]?: string;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { globalLogger } from "../../../logger.js";
|
|
2
2
|
import { getProportionalSize } from "../../../utils/index.js";
|
|
3
3
|
import { imageNodeName } from "../../markdown/index.js";
|
|
4
4
|
import { ImgSizeAttr } from "../../specs.js";
|
|
@@ -6,7 +6,7 @@ import { IMG_MAX_HEIGHT } from "./const.js";
|
|
|
6
6
|
export function isImageNode(node) {
|
|
7
7
|
return node.type.name === imageNodeName;
|
|
8
8
|
}
|
|
9
|
-
export const createImageNode = (imgType, opts) => async ({ result, file }) => {
|
|
9
|
+
export const createImageNode = (imgType, opts, logger) => async ({ result, file }) => {
|
|
10
10
|
const attrs = {
|
|
11
11
|
[ImgSizeAttr.Src]: result.url,
|
|
12
12
|
[ImgSizeAttr.Alt]: result.name ?? file.name,
|
|
@@ -17,7 +17,8 @@ export const createImageNode = (imgType, opts) => async ({ result, file }) => {
|
|
|
17
17
|
Object.assign(attrs, sizes);
|
|
18
18
|
}
|
|
19
19
|
catch (err) {
|
|
20
|
-
|
|
20
|
+
globalLogger.error(err);
|
|
21
|
+
logger.error({ error: err });
|
|
21
22
|
}
|
|
22
23
|
}
|
|
23
24
|
return imgType.create(attrs);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"../../../../../src","sources":["extensions/yfm/ImgSize/utils.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"../../../../../src","sources":["extensions/yfm/ImgSize/utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAe,YAAY,EAAC,2BAAwB;AAC3D,OAAO,EAAyB,mBAAmB,EAAC,gCAAuB;AAC3E,OAAO,EAAC,aAAa,EAAC,gCAAuB;AAC7C,OAAO,EAAC,WAAW,EAAC,uBAAoB;AAExC,OAAO,EAAC,cAAc,EAAC,mBAAgB;AAEvC,MAAM,UAAU,WAAW,CAAC,IAAU;IAClC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC;AAC5C,CAAC;AAOD,MAAM,CAAC,MAAM,eAAe,GACxB,CAAC,OAAiB,EAAE,IAA4B,EAAE,MAAuB,EAAE,EAAE,CAC7E,KAAK,EAAE,EAAC,MAAM,EAAE,IAAI,EAAoB,EAAE,EAAE;IACxC,MAAM,KAAK,GAA2B;QAClC,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG;QAC7B,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI;KAC9C,CAAC;IACF,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CACpC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,YAAY,CACtE,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACxB,MAAM,CAAC,KAAK,CAAC,EAAC,KAAK,EAAE,GAAG,EAAC,CAAC,CAAC;QAC/B,CAAC;IACL,CAAC;IACD,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACjC,CAAC,CAAC;AAEN,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAa;IACzC,OAAO,IAAI,OAAO,CAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrD,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1C,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACvC,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE;YACd,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,CAAC;QACjB,CAAC,CAAC;QACF,GAAG,CAAC,OAAO,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAqB;IAC9C,OAAO,EAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,EAAC,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAAC,KAAK,EAAE,MAAM,EAAmB;IAI7D,MAAM,IAAI,GAAG,mBAAmB,CAAC;QAC7B,KAAK;QACL,MAAM;QACN,YAAY,EAAE,cAAc;KAC/B,CAAC,CAAC;IACH,OAAO,EAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAC,CAAC;AACpE,CAAC","sourcesContent":["import type {Node, NodeType} from 'prosemirror-model';\n\nimport {type Logger2, globalLogger} from '../../../logger';\nimport {type UploadSuccessItem, getProportionalSize} from '../../../utils';\nimport {imageNodeName} from '../../markdown';\nimport {ImgSizeAttr} from '../../specs';\n\nimport {IMG_MAX_HEIGHT} from './const';\n\nexport function isImageNode(node: Node): boolean {\n return node.type.name === imageNodeName;\n}\n\nexport type CreateImageNodeOptions = {\n needDimensions: boolean;\n enableNewImageSizeCalculation?: boolean;\n};\n\nexport const createImageNode =\n (imgType: NodeType, opts: CreateImageNodeOptions, logger: Logger2.ILogger) =>\n async ({result, file}: UploadSuccessItem) => {\n const attrs: Record<string, string> = {\n [ImgSizeAttr.Src]: result.url,\n [ImgSizeAttr.Alt]: result.name ?? file.name,\n };\n if (opts.needDimensions) {\n try {\n const sizes = await loadImage(file).then(\n opts.enableNewImageSizeCalculation ? getImageSizeNew : getImageSize,\n );\n Object.assign(attrs, sizes);\n } catch (err) {\n globalLogger.error(err);\n logger.error({error: err});\n }\n }\n return imgType.create(attrs);\n };\n\nexport async function loadImage(imgFile: File) {\n return new Promise<HTMLImageElement>((resolve, reject) => {\n const img = document.createElement('img');\n img.src = URL.createObjectURL(imgFile);\n img.onload = () => {\n URL.revokeObjectURL(img.src);\n resolve(img);\n };\n img.onerror = (_e, _s, _l, _c, error) => reject(error);\n });\n}\n\nexport function getImageSize(img: HTMLImageElement): {[ImgSizeAttr.Height]?: string} {\n return {height: String(Math.min(IMG_MAX_HEIGHT, img.height))};\n}\n\nexport function getImageSizeNew({width, height}: HTMLImageElement): {\n [ImgSizeAttr.Width]?: string;\n [ImgSizeAttr.Height]?: string;\n} {\n const size = getProportionalSize({\n width,\n height,\n imgMaxHeight: IMG_MAX_HEIGHT,\n });\n return {width: String(size.width), height: String(size.height)};\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type ExtensionAuto } from "../../../../core/index.js";
|
|
2
2
|
import type { FileUploadHandler } from "../../../../utils/index.js";
|
|
3
3
|
export type YfmFilePasteOptions = {
|
|
4
4
|
fileUploadHandler: FileUploadHandler;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Fragment, Slice } from 'prosemirror-model';
|
|
2
2
|
import { Plugin } from 'prosemirror-state';
|
|
3
3
|
import { dropPoint } from 'prosemirror-transform';
|
|
4
|
+
import { getLoggerFromState } from "../../../../core/index.js";
|
|
4
5
|
import { isFunction } from "../../../../lodash.js";
|
|
5
6
|
import { clipboardUtils } from "../../../behavior/Clipboard/index.js";
|
|
6
7
|
import { imageType } from "../../../markdown/index.js";
|
|
@@ -15,9 +16,15 @@ export const YfmFilePaste = (builder, opts) => {
|
|
|
15
16
|
props: {
|
|
16
17
|
handleDOMEvents: {
|
|
17
18
|
paste(view, e) {
|
|
19
|
+
const logger = getLoggerFromState(view.state);
|
|
18
20
|
const files = getPastedFiles(e.clipboardData);
|
|
19
21
|
if (files) {
|
|
20
22
|
e.preventDefault();
|
|
23
|
+
logger.event({
|
|
24
|
+
event: 'paste-files',
|
|
25
|
+
plugin: 'yfm-file-paste',
|
|
26
|
+
domEvent: 'paste',
|
|
27
|
+
});
|
|
21
28
|
new YfmFilesPasteUploadProcess(view, files, {
|
|
22
29
|
uploadHandler: opts.fileUploadHandler,
|
|
23
30
|
needToSetDimensionsForUploadedImages: opts.needToSetDimensionsForUploadedImages,
|
|
@@ -37,6 +44,13 @@ export const YfmFilePaste = (builder, opts) => {
|
|
|
37
44
|
if (dropPos === -1)
|
|
38
45
|
return false;
|
|
39
46
|
const posToInsert = dropPoint(view.state.doc, dropPos, createFakeFileSlice(view.state.schema));
|
|
47
|
+
const logger = getLoggerFromState(view.state);
|
|
48
|
+
logger.event({
|
|
49
|
+
event: 'drop-files',
|
|
50
|
+
plugin: 'yfm-file-paste',
|
|
51
|
+
domEvent: 'drop',
|
|
52
|
+
runProcess: posToInsert !== null,
|
|
53
|
+
});
|
|
40
54
|
if (posToInsert !== null) {
|
|
41
55
|
new YfmFilesPasteUploadProcess(view, files, {
|
|
42
56
|
pos: posToInsert,
|
|
@@ -74,7 +88,7 @@ class YfmFilesPasteUploadProcess extends YfmFilesUploadProcessBase {
|
|
|
74
88
|
if (imageType(schema)) {
|
|
75
89
|
this.createImage = createImageNode(imageType(schema), {
|
|
76
90
|
needDimensions: opts.needToSetDimensionsForUploadedImages,
|
|
77
|
-
});
|
|
91
|
+
}, this.logger);
|
|
78
92
|
}
|
|
79
93
|
}
|
|
80
94
|
getSkeletonInitPos() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"../../../../../../src","sources":["extensions/yfm/YfmFile/YfmFilePaste/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAA0B,KAAK,EAAC,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAC,MAAM,EAAC,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAC,SAAS,EAAC,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"../../../../../../src","sources":["extensions/yfm/YfmFile/YfmFilePaste/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {Fragment, type Node, type Schema, Slice} from 'prosemirror-model';\nimport {Plugin} from 'prosemirror-state';\nimport {dropPoint} from 'prosemirror-transform';\nimport type {EditorView} from 'prosemirror-view';\n\nimport {type ExtensionAuto, getLoggerFromState} from '../../../../core';\nimport {isFunction} from '../../../../lodash';\nimport type {FileUploadHandler, UploadSuccessItem} from '../../../../utils';\nimport {clipboardUtils} from '../../../behavior/Clipboard';\nimport {imageType} from '../../../markdown';\nimport {createImageNode} from '../../ImgSize/utils'; // TODO: remove hard import\nimport {fileType} from '../YfmFileSpecs';\n\nimport {YfmFilesUploadProcessBase} from './upload';\n\nconst {isFilesOnly, isFilesFromHtml, isImageFile} = clipboardUtils;\n\nexport type YfmFilePasteOptions = {\n fileUploadHandler: FileUploadHandler;\n needToSetDimensionsForUploadedImages: boolean;\n};\n\nexport const YfmFilePaste: ExtensionAuto<YfmFilePasteOptions> = (builder, opts) => {\n if (!opts || !isFunction(opts.fileUploadHandler))\n throw new Error('YfmFilePaste extension: fileUploadHandler is not a function');\n\n builder.addPlugin(\n () =>\n new Plugin({\n props: {\n handleDOMEvents: {\n paste(view, e) {\n const logger = getLoggerFromState(view.state);\n const files = getPastedFiles(e.clipboardData);\n if (files) {\n e.preventDefault();\n logger.event({\n event: 'paste-files',\n plugin: 'yfm-file-paste',\n domEvent: 'paste',\n });\n new YfmFilesPasteUploadProcess(view, files, {\n uploadHandler: opts.fileUploadHandler,\n needToSetDimensionsForUploadedImages:\n opts.needToSetDimensionsForUploadedImages,\n }).run();\n return true;\n }\n return false;\n },\n drop(view, e) {\n // handle drop files from device\n if (view.dragging) return false;\n\n const files = getPastedFiles(e.dataTransfer);\n if (!files) return false;\n\n const dropPos =\n view.posAtCoords({left: e.clientX, top: e.clientY})?.pos ?? -1;\n if (dropPos === -1) return false;\n\n const posToInsert = dropPoint(\n view.state.doc,\n dropPos,\n createFakeFileSlice(view.state.schema),\n );\n\n const logger = getLoggerFromState(view.state);\n logger.event({\n event: 'drop-files',\n plugin: 'yfm-file-paste',\n domEvent: 'drop',\n runProcess: posToInsert !== null,\n });\n\n if (posToInsert !== null) {\n new YfmFilesPasteUploadProcess(view, files, {\n pos: posToInsert,\n uploadHandler: opts.fileUploadHandler,\n needToSetDimensionsForUploadedImages:\n opts.needToSetDimensionsForUploadedImages,\n }).run();\n }\n\n e.preventDefault();\n return true;\n },\n },\n },\n }),\n builder.Priority.Low,\n );\n};\n\nfunction getPastedFiles(data: DataTransfer | null): File[] | null {\n if (!data) return null;\n if (!isFilesOnly(data) && !isFilesFromHtml(data)) return null;\n return Array.from(data.files);\n}\n\nfunction createFakeFileSlice(schema: Schema): Slice {\n return new Slice(\n Fragment.from(\n fileType(schema).create({\n href: 'fake',\n download: 'file',\n }),\n ),\n 0,\n 0,\n );\n}\n\ntype YfmFilesPasteUploadProcessOptions = {\n pos?: number;\n uploadHandler: FileUploadHandler;\n needToSetDimensionsForUploadedImages: boolean;\n};\n\nclass YfmFilesPasteUploadProcess extends YfmFilesUploadProcessBase {\n protected readonly pos?: number;\n protected readonly createImage?;\n\n constructor(view: EditorView, files: readonly File[], opts: YfmFilesPasteUploadProcessOptions) {\n super(view, files, opts.uploadHandler);\n\n this.pos = opts.pos;\n\n const {schema} = this.view.state;\n if (imageType(schema)) {\n this.createImage = createImageNode(\n imageType(schema),\n {\n needDimensions: opts.needToSetDimensionsForUploadedImages,\n },\n this.logger,\n );\n }\n }\n\n protected getSkeletonInitPos(): number {\n return this.pos ?? this.view.state.tr.selection.from;\n }\n\n protected async createPMNode(res: UploadSuccessItem): Promise<Node> {\n return isImageFile(res.file) && this.createImage\n ? this.createImage(res)\n : this.createFile(res);\n }\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const i18n: <G extends "
|
|
1
|
+
export declare const i18n: <G extends "info" | "remove" | "alert" | "tip" | "warning", S extends string>(key: G | (string extends S ? S : never), params?: {
|
|
2
2
|
[key: string]: any;
|
|
3
3
|
}) => S extends G ? {
|
|
4
4
|
info: string;
|
package/build/esm/logger.d.ts
CHANGED
|
@@ -1,16 +1,82 @@
|
|
|
1
|
+
import { type Listener, type Receiver } from "./utils/event-emitter.js";
|
|
2
|
+
type MsgObj = {
|
|
3
|
+
msg: string;
|
|
4
|
+
[key: string]: unknown;
|
|
5
|
+
};
|
|
6
|
+
type ErrObj = {
|
|
7
|
+
error: any;
|
|
8
|
+
[key: string]: unknown;
|
|
9
|
+
};
|
|
10
|
+
type EventObj = {
|
|
11
|
+
event: string;
|
|
12
|
+
[key: string]: unknown;
|
|
13
|
+
};
|
|
14
|
+
export declare namespace Logger2 {
|
|
15
|
+
type LogData = MsgObj;
|
|
16
|
+
type WarnData = MsgObj;
|
|
17
|
+
type ErrorData = ErrObj;
|
|
18
|
+
type ActionData = MdEditorLogger.ActionData;
|
|
19
|
+
type MetricsData = MdEditorLogger.MetricsData;
|
|
20
|
+
type EventData = EventObj;
|
|
21
|
+
type ReceiverDataMap = {
|
|
22
|
+
log: LogData;
|
|
23
|
+
warn: WarnData;
|
|
24
|
+
error: ErrorData;
|
|
25
|
+
event: EventData;
|
|
26
|
+
action: ActionData;
|
|
27
|
+
metrics: MetricsData;
|
|
28
|
+
};
|
|
29
|
+
interface LogReceiver extends Receiver<ReceiverDataMap> {
|
|
30
|
+
}
|
|
31
|
+
interface LogEmitter {
|
|
32
|
+
/** Log a regular message */
|
|
33
|
+
log(msg: string, ...data: object[]): void;
|
|
34
|
+
/** Log a warning message */
|
|
35
|
+
warn(msg: string, ...data: object[]): void;
|
|
36
|
+
/** Log an error */
|
|
37
|
+
error(err: string | Error | unknown, ...data: object[]): void;
|
|
38
|
+
/** Log an event triggered in editor. For example, changing mode, pasting, or otherwise */
|
|
39
|
+
event(data: Logger2.EventData): void;
|
|
40
|
+
/** Log the action called in editor and its source (from toolbar, or hotkeys, etc.) */
|
|
41
|
+
action(data: Logger2.ActionData): void;
|
|
42
|
+
/** Log metric data, such as parsing or execution time */
|
|
43
|
+
metrics(data: Logger2.MetricsData): void;
|
|
44
|
+
}
|
|
45
|
+
interface ILogger extends Logger2.LogEmitter, Logger2.LogReceiver {
|
|
46
|
+
/** Create nested logger with bound parameters */
|
|
47
|
+
nested(params: object): ILogger;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
export declare class Logger2 implements Logger2.ILogger {
|
|
51
|
+
#private;
|
|
52
|
+
log(msg: string, ...data: object[]): void;
|
|
53
|
+
warn(msg: string, ...data: object[]): void;
|
|
54
|
+
error(err: string | Error | unknown, ...data: object[]): void;
|
|
55
|
+
action(data: Logger2.ActionData): void;
|
|
56
|
+
metrics(data: Logger2.MetricsData): void;
|
|
57
|
+
event(data: Logger2.EventData): void;
|
|
58
|
+
nested(params: object): Logger2.ILogger;
|
|
59
|
+
on<K extends keyof Logger2.ReceiverDataMap>(type: K, listener: Listener<Logger2.ReceiverDataMap[K]>): void;
|
|
60
|
+
off<K extends keyof Logger2.ReceiverDataMap>(type: K, listener: Listener<Logger2.ReceiverDataMap[K]>): void;
|
|
61
|
+
}
|
|
1
62
|
declare global {
|
|
63
|
+
/** @deprecated */
|
|
2
64
|
namespace MdEditorLogger {
|
|
65
|
+
/** @deprecated */
|
|
3
66
|
type MetricsData = {
|
|
4
67
|
component: string;
|
|
5
68
|
event: string;
|
|
6
69
|
duration?: number;
|
|
7
70
|
meta?: Record<string, any>;
|
|
71
|
+
[key: string]: any;
|
|
8
72
|
};
|
|
73
|
+
/** @deprecated */
|
|
9
74
|
interface ActionData {
|
|
10
75
|
action: string;
|
|
11
76
|
source: string;
|
|
12
77
|
[key: string]: any;
|
|
13
78
|
}
|
|
79
|
+
/** @deprecated */
|
|
14
80
|
interface Logger {
|
|
15
81
|
log(...data: any[]): void;
|
|
16
82
|
info(...data: any[]): void;
|
|
@@ -19,10 +85,12 @@ declare global {
|
|
|
19
85
|
metrics(data: MetricsData): void;
|
|
20
86
|
action(data: ActionData): void;
|
|
21
87
|
}
|
|
88
|
+
/** @deprecated */
|
|
22
89
|
interface Settings extends Partial<Logger> {
|
|
23
90
|
}
|
|
24
91
|
}
|
|
25
92
|
}
|
|
93
|
+
/** @deprecated */
|
|
26
94
|
declare class Logger implements MdEditorLogger.Logger {
|
|
27
95
|
#private;
|
|
28
96
|
get log(): (...data: any[]) => void;
|
|
@@ -39,5 +107,12 @@ declare class Logger implements MdEditorLogger.Logger {
|
|
|
39
107
|
*/
|
|
40
108
|
createLogger(settings: MdEditorLogger.Settings): MdEditorLogger.Logger;
|
|
41
109
|
}
|
|
110
|
+
/** @deprecated */
|
|
42
111
|
export declare const logger: Logger;
|
|
112
|
+
/**
|
|
113
|
+
* Alias for global singleton logger instance
|
|
114
|
+
*
|
|
115
|
+
* @deprecated
|
|
116
|
+
*/
|
|
117
|
+
export declare const globalLogger: Logger;
|
|
43
118
|
export {};
|
package/build/esm/logger.js
CHANGED
|
@@ -1,4 +1,84 @@
|
|
|
1
|
+
import { SafeEventEmitter } from "./utils/event-emitter.js";
|
|
2
|
+
export class Logger2 {
|
|
3
|
+
#emitter = new SafeEventEmitter();
|
|
4
|
+
log(msg, ...data) {
|
|
5
|
+
const obj = Object.assign({}, ...data);
|
|
6
|
+
const logData = Object.assign(obj, { msg });
|
|
7
|
+
this.#emitter.emit('log', logData);
|
|
8
|
+
}
|
|
9
|
+
warn(msg, ...data) {
|
|
10
|
+
const obj = Object.assign({}, ...data);
|
|
11
|
+
const warnData = Object.assign(obj, { msg });
|
|
12
|
+
this.#emitter.emit('warn', warnData);
|
|
13
|
+
}
|
|
14
|
+
error(err, ...data) {
|
|
15
|
+
const error = typeof err === 'string' ? Error(err) : err;
|
|
16
|
+
const obj = Object.assign({}, ...data);
|
|
17
|
+
const errorData = Object.assign(obj, { error });
|
|
18
|
+
this.#emitter.emit('error', errorData);
|
|
19
|
+
}
|
|
20
|
+
action(data) {
|
|
21
|
+
this.#emitter.emit('action', data);
|
|
22
|
+
}
|
|
23
|
+
metrics(data) {
|
|
24
|
+
this.#emitter.emit('metrics', data);
|
|
25
|
+
}
|
|
26
|
+
event(data) {
|
|
27
|
+
this.#emitter.emit('event', data);
|
|
28
|
+
}
|
|
29
|
+
nested(params) {
|
|
30
|
+
const self = this;
|
|
31
|
+
const paramsKey = Symbol();
|
|
32
|
+
const logger = {
|
|
33
|
+
[paramsKey]: params,
|
|
34
|
+
log(msg, ...data) {
|
|
35
|
+
if (self.#emitter.countOf('log'))
|
|
36
|
+
self.log(msg, this[paramsKey], ...data);
|
|
37
|
+
},
|
|
38
|
+
warn(msg, ...data) {
|
|
39
|
+
if (self.#emitter.countOf('warn'))
|
|
40
|
+
self.warn(msg, this[paramsKey], ...data);
|
|
41
|
+
},
|
|
42
|
+
error(err, ...data) {
|
|
43
|
+
if (self.#emitter.countOf('error'))
|
|
44
|
+
self.error(err, this[paramsKey], ...data);
|
|
45
|
+
},
|
|
46
|
+
action(data) {
|
|
47
|
+
if (self.#emitter.countOf('action'))
|
|
48
|
+
self.action({ ...this[paramsKey], ...data });
|
|
49
|
+
},
|
|
50
|
+
metrics(data) {
|
|
51
|
+
if (self.#emitter.countOf('metrics'))
|
|
52
|
+
self.metrics({ ...this[paramsKey], ...data });
|
|
53
|
+
},
|
|
54
|
+
event(data) {
|
|
55
|
+
if (self.#emitter.countOf('event'))
|
|
56
|
+
self.event({ ...this[paramsKey], ...data });
|
|
57
|
+
},
|
|
58
|
+
nested(nestedParams) {
|
|
59
|
+
return {
|
|
60
|
+
...this,
|
|
61
|
+
[paramsKey]: {
|
|
62
|
+
...this[paramsKey],
|
|
63
|
+
...nestedParams,
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
},
|
|
67
|
+
on: self.on.bind(self),
|
|
68
|
+
off: self.off.bind(self),
|
|
69
|
+
};
|
|
70
|
+
return logger;
|
|
71
|
+
}
|
|
72
|
+
on(type, listener) {
|
|
73
|
+
this.#emitter.on(type, listener);
|
|
74
|
+
}
|
|
75
|
+
off(type, listener) {
|
|
76
|
+
this.#emitter.off(type, listener);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// MAJOR: remove old logger implementation
|
|
1
80
|
const noop = () => { };
|
|
81
|
+
/** @deprecated */
|
|
2
82
|
class Logger {
|
|
3
83
|
#logger = this.createLogger({});
|
|
4
84
|
get log() {
|
|
@@ -38,5 +118,12 @@ class Logger {
|
|
|
38
118
|
};
|
|
39
119
|
}
|
|
40
120
|
}
|
|
121
|
+
/** @deprecated */
|
|
41
122
|
export const logger = new Logger();
|
|
123
|
+
/**
|
|
124
|
+
* Alias for global singleton logger instance
|
|
125
|
+
*
|
|
126
|
+
* @deprecated
|
|
127
|
+
*/
|
|
128
|
+
export const globalLogger = logger;
|
|
42
129
|
//# sourceMappingURL=logger.js.map
|
package/build/esm/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"../../src","sources":["logger.ts"],"names":[],"mappings":"AAAA,MAAM,IAAI,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;AA8BtB,MAAM,MAAM;IACR,OAAO,GAA0B,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAEvD,IAAI,GAAG;QACH,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;IAC5B,CAAC;IAED,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC7B,CAAC;IAED,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;IAC9B,CAAC;IAED,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC7B,CAAC;IAED,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;IAChC,CAAC;IAED,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC/B,CAAC;IAED,SAAS,CAAC,WAAoC,EAAE;QAC5C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;IAED;;;;OAIG;IACH,YAAY,CAAC,QAAiC;QAC1C,OAAO;YACH,GAAG,EAAE,QAAQ,CAAC,GAAG,IAAI,IAAI;YACzB,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,IAAI;YAC3B,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,IAAI;YAC3B,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,IAAI;YAC7B,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,IAAI;YACjC,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,IAAI;SAClC,CAAC;IACN,CAAC;CACJ;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC","sourcesContent":["const noop = () => {};\n\ndeclare global {\n namespace MdEditorLogger {\n type MetricsData = {\n component: string;\n event: string;\n duration?: number;\n meta?: Record<string, any>;\n };\n\n interface ActionData {\n action: string;\n source: string;\n [key: string]: any;\n }\n\n interface Logger {\n log(...data: any[]): void;\n info(...data: any[]): void;\n error(...data: any[]): void;\n warn(...data: any[]): void;\n metrics(data: MetricsData): void;\n action(data: ActionData): void;\n }\n\n interface Settings extends Partial<Logger> {}\n }\n}\n\nclass Logger implements MdEditorLogger.Logger {\n #logger: MdEditorLogger.Logger = this.createLogger({});\n\n get log() {\n return this.#logger.log;\n }\n\n get info() {\n return this.#logger.info;\n }\n\n get error() {\n return this.#logger.error;\n }\n\n get warn() {\n return this.#logger.warn;\n }\n\n get metrics() {\n return this.#logger.metrics;\n }\n\n get action() {\n return this.#logger.action;\n }\n\n setLogger(settings: MdEditorLogger.Settings = {}) {\n this.#logger = this.createLogger(settings);\n }\n\n /**\n * @inner\n *\n * To override the default logger, use setLogger\n */\n createLogger(settings: MdEditorLogger.Settings): MdEditorLogger.Logger {\n return {\n log: settings.log ?? noop,\n info: settings.info ?? noop,\n warn: settings.warn ?? noop,\n error: settings.error ?? noop,\n metrics: settings.metrics ?? noop,\n action: settings.action ?? noop,\n };\n }\n}\n\nexport const logger = new Logger();\n"]}
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"../../src","sources":["logger.ts"],"names":[],"mappings":"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","sourcesContent":["import {type Listener, type Receiver, SafeEventEmitter} from './utils/event-emitter';\n\ntype MsgObj = {\n msg: string;\n [key: string]: unknown;\n};\n\ntype ErrObj = {\n error: any;\n [key: string]: unknown;\n};\n\ntype EventObj = {\n event: string;\n [key: string]: unknown;\n};\n\n// MAJOR: rename Logger2 to Logger (namespace and class)\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace Logger2 {\n export type LogData = MsgObj;\n export type WarnData = MsgObj;\n export type ErrorData = ErrObj;\n export type ActionData = MdEditorLogger.ActionData;\n export type MetricsData = MdEditorLogger.MetricsData;\n export type EventData = EventObj;\n\n export type ReceiverDataMap = {\n log: LogData;\n warn: WarnData;\n error: ErrorData;\n event: EventData;\n action: ActionData;\n metrics: MetricsData;\n };\n\n export interface LogReceiver extends Receiver<ReceiverDataMap> {}\n\n export interface LogEmitter {\n /** Log a regular message */\n log(msg: string, ...data: object[]): void;\n /** Log a warning message */\n warn(msg: string, ...data: object[]): void;\n /** Log an error */\n error(err: string | Error | unknown, ...data: object[]): void;\n /** Log an event triggered in editor. For example, changing mode, pasting, or otherwise */\n event(data: Logger2.EventData): void;\n /** Log the action called in editor and its source (from toolbar, or hotkeys, etc.) */\n action(data: Logger2.ActionData): void;\n /** Log metric data, such as parsing or execution time */\n metrics(data: Logger2.MetricsData): void;\n }\n\n export interface ILogger extends Logger2.LogEmitter, Logger2.LogReceiver {\n /** Create nested logger with bound parameters */\n nested(params: object): ILogger;\n }\n}\n\nexport class Logger2 implements Logger2.ILogger {\n readonly #emitter = new SafeEventEmitter<Logger2.ReceiverDataMap>();\n\n log(msg: string, ...data: object[]): void {\n const obj: object = Object.assign({}, ...data);\n const logData = Object.assign(obj, {msg});\n this.#emitter.emit('log', logData);\n }\n\n warn(msg: string, ...data: object[]): void {\n const obj: object = Object.assign({}, ...data);\n const warnData = Object.assign(obj, {msg});\n this.#emitter.emit('warn', warnData);\n }\n\n error(err: string | Error | unknown, ...data: object[]): void {\n const error = typeof err === 'string' ? Error(err) : err;\n const obj: object = Object.assign({}, ...data);\n const errorData = Object.assign(obj, {error});\n this.#emitter.emit('error', errorData);\n }\n\n action(data: Logger2.ActionData): void {\n this.#emitter.emit('action', data);\n }\n\n metrics(data: Logger2.MetricsData): void {\n this.#emitter.emit('metrics', data);\n }\n\n event(data: Logger2.EventData): void {\n this.#emitter.emit('event', data);\n }\n\n nested(params: object): Logger2.ILogger {\n const self = this;\n const paramsKey = Symbol();\n\n const logger: Logger2.ILogger & {[paramsKey]: object} = {\n [paramsKey]: params,\n log(msg, ...data) {\n if (self.#emitter.countOf('log')) self.log(msg, this[paramsKey], ...data);\n },\n warn(msg, ...data) {\n if (self.#emitter.countOf('warn')) self.warn(msg, this[paramsKey], ...data);\n },\n error(err, ...data) {\n if (self.#emitter.countOf('error')) self.error(err, this[paramsKey], ...data);\n },\n action(data) {\n if (self.#emitter.countOf('action')) self.action({...this[paramsKey], ...data});\n },\n metrics(data) {\n if (self.#emitter.countOf('metrics')) self.metrics({...this[paramsKey], ...data});\n },\n event(data) {\n if (self.#emitter.countOf('event')) self.event({...this[paramsKey], ...data});\n },\n nested(nestedParams) {\n return {\n ...this,\n [paramsKey]: {\n ...this[paramsKey],\n ...nestedParams,\n },\n };\n },\n on: self.on.bind(self),\n off: self.off.bind(self),\n };\n\n return logger;\n }\n\n on<K extends keyof Logger2.ReceiverDataMap>(\n type: K,\n listener: Listener<Logger2.ReceiverDataMap[K]>,\n ): void {\n this.#emitter.on(type, listener);\n }\n\n off<K extends keyof Logger2.ReceiverDataMap>(\n type: K,\n listener: Listener<Logger2.ReceiverDataMap[K]>,\n ): void {\n this.#emitter.off(type, listener);\n }\n}\n\n// MAJOR: remove old logger implementation\n\nconst noop = () => {};\n\ndeclare global {\n /** @deprecated */\n namespace MdEditorLogger {\n /** @deprecated */\n type MetricsData = {\n component: string;\n event: string;\n duration?: number;\n meta?: Record<string, any>;\n [key: string]: any;\n };\n\n /** @deprecated */\n interface ActionData {\n action: string;\n source: string;\n [key: string]: any;\n }\n\n /** @deprecated */\n interface Logger {\n log(...data: any[]): void;\n info(...data: any[]): void;\n error(...data: any[]): void;\n warn(...data: any[]): void;\n metrics(data: MetricsData): void;\n action(data: ActionData): void;\n }\n\n /** @deprecated */\n interface Settings extends Partial<Logger> {}\n }\n}\n\n/** @deprecated */\nclass Logger implements MdEditorLogger.Logger {\n #logger: MdEditorLogger.Logger = this.createLogger({});\n\n get log() {\n return this.#logger.log;\n }\n\n get info() {\n return this.#logger.info;\n }\n\n get error() {\n return this.#logger.error;\n }\n\n get warn() {\n return this.#logger.warn;\n }\n\n get metrics() {\n return this.#logger.metrics;\n }\n\n get action() {\n return this.#logger.action;\n }\n\n setLogger(settings: MdEditorLogger.Settings = {}) {\n this.#logger = this.createLogger(settings);\n }\n\n /**\n * @inner\n *\n * To override the default logger, use setLogger\n */\n createLogger(settings: MdEditorLogger.Settings): MdEditorLogger.Logger {\n return {\n log: settings.log ?? noop,\n info: settings.info ?? noop,\n warn: settings.warn ?? noop,\n error: settings.error ?? noop,\n metrics: settings.metrics ?? noop,\n action: settings.action ?? noop,\n };\n }\n}\n\n/** @deprecated */\nexport const logger = new Logger();\n/**\n * Alias for global singleton logger instance\n *\n * @deprecated\n */\nexport const globalLogger = logger;\n"]}
|
|
@@ -4,6 +4,7 @@ import { EditorView, type EditorViewConfig, type KeyBinding, placeholder } from
|
|
|
4
4
|
import type { ParseInsertedUrlAsImage } from "../../bundle/index.js";
|
|
5
5
|
import type { EventMap } from "../../bundle/Editor.js";
|
|
6
6
|
import type { ReactRenderStorage } from "../../extensions/index.js";
|
|
7
|
+
import { type Logger2 } from "../../logger.js";
|
|
7
8
|
import type { Receiver } from "../../utils/index.js";
|
|
8
9
|
import type { DirectiveSyntaxContext } from "../../utils/directive.js";
|
|
9
10
|
import { type FileUploadHandler } from "./files-upload-facet.js";
|
|
@@ -13,6 +14,7 @@ type Autocompletion = Parameters<typeof autocompletion>[0];
|
|
|
13
14
|
export type CreateCodemirrorParams = {
|
|
14
15
|
doc: EditorViewConfig['doc'];
|
|
15
16
|
placeholder: Parameters<typeof placeholder>[0];
|
|
17
|
+
logger: Logger2.ILogger;
|
|
16
18
|
onCancel: () => void;
|
|
17
19
|
onSubmit: () => void;
|
|
18
20
|
onChange: () => void;
|
|
@@ -3,7 +3,7 @@ import { defaultKeymap, history, historyKeymap, indentWithTab, insertNewlineKeep
|
|
|
3
3
|
import { syntaxHighlighting } from '@codemirror/language';
|
|
4
4
|
import { EditorView, keymap, placeholder, } from '@codemirror/view';
|
|
5
5
|
import { ActionName } from "../../bundle/config/action-names.js";
|
|
6
|
-
import {
|
|
6
|
+
import { globalLogger } from "../../logger.js";
|
|
7
7
|
import { Action as A, formatter as f } from "../../shortcuts/index.js";
|
|
8
8
|
import { DataTransferType, shouldSkipHtmlConversion } from "../../utils/clipboard.js";
|
|
9
9
|
import { insertEmptyRow, insertImages, insertLink, toH1, toH2, toH3, toH4, toH5, toH6, toggleBold, toggleItalic, toggleStrikethrough, toggleUnderline, wrapToCodeBlock, wrapToInlineCode, wrapToYfmCut, wrapToYfmNote, } from "../commands/index.js";
|
|
@@ -11,18 +11,19 @@ import { DirectiveSyntaxFacet } from "./directive-facet.js";
|
|
|
11
11
|
import { FileUploadHandlerFacet } from "./files-upload-facet.js";
|
|
12
12
|
import { gravityHighlightStyle, gravityTheme } from "./gravity.js";
|
|
13
13
|
import { MarkdownConverter } from "./html-to-markdown/converters.js";
|
|
14
|
+
import { LoggerFacet } from "./logger-facet.js";
|
|
14
15
|
import { PairingCharactersExtension } from "./pairing-chars.js";
|
|
15
16
|
import { ReactRendererFacet } from "./react-facet.js";
|
|
16
17
|
import { SearchPanelPlugin } from "./search-plugin/plugin.js";
|
|
17
18
|
import { smartReindent } from "./smart-reindent/index.js";
|
|
18
19
|
import { yfmLang } from "./yfm.js";
|
|
19
20
|
export function createCodemirror(params) {
|
|
20
|
-
const { doc, reactRenderer, onCancel, onScroll, onSubmit, onChange, onDocChange, disabledExtensions = {}, keymaps = [], receiver, yfmLangOptions, extensions: extraExtensions, placeholder: placeholderContent, autocompletion: autocompletionConfig, parseHtmlOnPaste, parseInsertedUrlAsImage, directiveSyntax, preserveEmptyRows, } = params;
|
|
21
|
+
const { logger, doc, reactRenderer, onCancel, onScroll, onSubmit, onChange, onDocChange, disabledExtensions = {}, keymaps = [], receiver, yfmLangOptions, extensions: extraExtensions, placeholder: placeholderContent, autocompletion: autocompletionConfig, parseHtmlOnPaste, parseInsertedUrlAsImage, directiveSyntax, preserveEmptyRows, } = params;
|
|
21
22
|
const extensions = [gravityTheme, placeholder(placeholderContent)];
|
|
22
23
|
if (!disabledExtensions.history) {
|
|
23
24
|
extensions.push(history());
|
|
24
25
|
}
|
|
25
|
-
extensions.push(syntaxHighlighting(gravityHighlightStyle), keymap.of([
|
|
26
|
+
extensions.push(syntaxHighlighting(gravityHighlightStyle), LoggerFacet.of(logger), keymap.of([
|
|
26
27
|
{ key: f.toCM(A.Bold), run: withLogger(ActionName.bold, toggleBold) },
|
|
27
28
|
{ key: f.toCM(A.Italic), run: withLogger(ActionName.italic, toggleItalic) },
|
|
28
29
|
{ key: f.toCM(A.Strike), run: withLogger(ActionName.strike, toggleStrikethrough) },
|
|
@@ -70,6 +71,10 @@ export function createCodemirror(params) {
|
|
|
70
71
|
paste(event, editor) {
|
|
71
72
|
if (!event.clipboardData)
|
|
72
73
|
return;
|
|
74
|
+
const pasteLogger = logger.nested({
|
|
75
|
+
domEvent: 'paste',
|
|
76
|
+
dataTypes: event.clipboardData.types,
|
|
77
|
+
});
|
|
73
78
|
const { from } = editor.state.selection.main;
|
|
74
79
|
const line = editor.state.doc.lineAt(from);
|
|
75
80
|
const currentLine = line.text;
|
|
@@ -78,6 +83,7 @@ export function createCodemirror(params) {
|
|
|
78
83
|
const yfmContent = event.clipboardData.getData(DataTransferType.Yfm);
|
|
79
84
|
if (yfmContent) {
|
|
80
85
|
event.preventDefault();
|
|
86
|
+
logger.event({ event: 'paste-markup' });
|
|
81
87
|
const reindentedYfmContent = smartReindent(yfmContent, currentLine);
|
|
82
88
|
editor.dispatch(editor.state.replaceSelection(reindentedYfmContent));
|
|
83
89
|
return;
|
|
@@ -100,10 +106,12 @@ export function createCodemirror(params) {
|
|
|
100
106
|
// especially with invalid HTML or weird DOM parsing errors.
|
|
101
107
|
// If something goes wrong, I just want to fall back to the "default pasting"
|
|
102
108
|
// rather than break the entire experience for the user.
|
|
103
|
-
|
|
109
|
+
pasteLogger.error(e, { event: 'parse-html-to-md' });
|
|
110
|
+
globalLogger.error(e);
|
|
104
111
|
}
|
|
105
112
|
if (parsedMarkdownMarkup !== undefined) {
|
|
106
113
|
event.preventDefault();
|
|
114
|
+
logger.event({ event: 'paste-parsed-html' });
|
|
107
115
|
const reindentedHtmlContent = smartReindent(parsedMarkdownMarkup, currentLine);
|
|
108
116
|
editor.dispatch(editor.state.replaceSelection(reindentedHtmlContent));
|
|
109
117
|
return;
|
|
@@ -113,6 +121,7 @@ export function createCodemirror(params) {
|
|
|
113
121
|
const { imageUrl, title } = parseInsertedUrlAsImage(event.clipboardData.getData(DataTransferType.Text) ?? '') || {};
|
|
114
122
|
if (imageUrl) {
|
|
115
123
|
event.preventDefault();
|
|
124
|
+
logger.event({ event: 'paste-url-as-image' });
|
|
116
125
|
insertImages([
|
|
117
126
|
{
|
|
118
127
|
url: imageUrl,
|
|
@@ -164,7 +173,9 @@ export function createCodemirror(params) {
|
|
|
164
173
|
}
|
|
165
174
|
export function withLogger(action, command) {
|
|
166
175
|
return (...args) => {
|
|
167
|
-
|
|
176
|
+
const { state } = args[0];
|
|
177
|
+
state.facet(LoggerFacet).action({ source: 'keymap', action });
|
|
178
|
+
globalLogger.action({ mode: 'markup', source: 'keymap', action });
|
|
168
179
|
return command(...args);
|
|
169
180
|
};
|
|
170
181
|
}
|