@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":";;;;;AAAA,kEAAiC;AAOjC,kFAA2F;AAC3F,yDAAiE;AACjE,6CAA2C;AAC3C,oDAAyD;AAEzD,oCAAkG;AAE3F,MAAM,SAAS,GAAG,CACrB,EAAe,EACf,IAAmB,EACnB,IAA+B,EACjC,EAAE;IACA,OAAO,IAAI,qBAAqB,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAChF,CAAC,CAAC;AANW,QAAA,SAAS,aAMpB;AAEW,QAAA,YAAY,GAAG,mCAAgB,CAAC;AAS7C,MAAM,qBAAsB,SAAQ,wCAAqB;IACpC,OAAO,CAAC;IACR,IAAI,CAAC;IACL,YAAY,CAAC;IACb,oCAAoC,CAAU;IAC9C,6BAA6B,CAAW;IACxC,eAAe,CAAsC;IAE9D,aAAa,GAA8B,IAAI,CAAC;IAExD,YAAY,OAAe,EAAE,IAAmB,EAAE,IAA+B;QAC7E,KAAK,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACtC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;QAC5C,IAAI,CAAC,oCAAoC,GAAG,IAAI,CAAC,oCAAoC,CAAC;QACtF,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC,6BAA6B,CAAC;IAC5E,CAAC;IAED,gBAAgB,CAAC,IAAgB,EAAE,MAAoB;QACnD,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACtB,IAAI,CAAC,aAAa,GAAG,IAAI,kBAAkB,CACvC;gBACI,IAAI;gBACJ,MAAM;gBACN,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,eAAe,EAAE,IAAI,CAAC,eAAe;gBACrC,oCAAoC,EAAE,IAAI,CAAC,oCAAoC;gBAC/E,6BAA6B,EAAE,IAAI,CAAC,6BAA6B;aACpE,EACD,IAAI,CAAC,IAAI,CACZ,CAAC;QACN,CAAC;QACD,OAAO,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC;IAED,UAAU;QACN,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,kBAAkB,CAAC,IAAgB,EAAE,MAAoB;QACrD,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC9E,CAAC;IAED,MAAM;QACF,KAAK,CAAC,MAAM,EAAE,CAAC;QACf,IAAI,CAAC,aAAa,EAAE,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;IAC9B,CAAC;CACJ;AAYD,MAAM,kBAAkB;IACZ,IAAI,CAAC;IACL,MAAM,CAAC;IAEE,MAAM,CAAS;IACf,YAAY,CAAC;IACb,YAAY,CAAC;IACb,oCAAoC,CAAU;IAC9C,6BAA6B,CAAW;IACxC,eAAe,CAAsC;IAE9D,SAAS,GAAG,KAAK,CAAC;IAE1B,YACI,EACI,MAAM,EACN,IAAI,EACJ,MAAM,EACN,YAAY,EACZ,eAAe,EACf,oCAAoC,EACpC,6BAA6B,GACP,EAC1B,IAAmB;QAEnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,YAAY,GAAG,IAAA,8BAAmB,EAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,oCAAoC,GAAG,oCAAoC,CAAC;QACjF,IAAI,CAAC,6BAA6B,GAAG,6BAA6B,CAAC;IACvE,CAAC;IAED,QAAQ;QACJ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED,gBAAgB,CAAC,IAAgB,EAAE,MAAoB;QACnD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,OAAO,CACH,uBAAC,uBAAgB,IACb,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,QAAQ,EAAE,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,EAC5C,UAAU,EAAE,IAAI,CAAC,eAAe,GAClC,CACL,CAAC;IACN,CAAC;IAEO,QAAQ,GAAsC,GAAG,EAAE;QACvD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAA,mCAAgB,EAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACtE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC,CAAC;IAEM,QAAQ,GAAsC,CAAC,MAAM,EAAE,EAAE;QAC7D,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QAE3B,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC;QAC/C,IAAI,CAAC,GAAG;YAAE,OAAO;QAEjB,MAAM,KAAK,GAAG;YACV,CAAC,mBAAW,CAAC,GAAG,CAAC,EAAE,GAAG;YACtB,CAAC,mBAAW,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,IAAI;YAChC,CAAC,mBAAW,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG;YAC7B,CAAC,mBAAW,CAAC,KAAK,CAAC,EAAE,IAAA,mBAAQ,EAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI;YACzE,CAAC,mBAAW,CAAC,MAAM,CAAC,EAAE,IAAA,mBAAQ,EAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI;SAC/E,CAAC;QAEF,MAAM,IAAI,GAAG,IAAA,oBAAS,EAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7D,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7B,CAAC,CAAC;IAEM,QAAQ,GAAsC,KAAK,EAAE,KAAK,EAAE,EAAE;QAClE,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO;QAEjD,MAAM,EAAC,IAAI,EAAC,GAAG,IAAI,CAAC;QACpB,IAAI,4BAAmB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE;YACnE,cAAc,EAAE,IAAI,CAAC,oCAAoC;YACzD,6BAA6B,EAAE,IAAI,CAAC,6BAA6B;SACpE,CAAC,CAAC,GAAG,EAAE,CAAC;QACT,IAAI,CAAC,QAAQ,CAAC,IAAA,oBAAY,EAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACxD,IAAI,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC,CAAC;IAEM,WAAW,CAAC,SAAiB;QACjC,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QAE3B,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;QACzD,EAAE,GAAG,IAAA,oBAAY,EAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;CACJ","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 {
|
|
@@ -11,7 +11,9 @@ const ImgSize = (builder, opts) => {
|
|
|
11
11
|
builder.use(ImgSizeSpecs_1.ImgSizeSpecs, opts);
|
|
12
12
|
builder.use(ImageWidget_1.ImageWidget, {
|
|
13
13
|
imageUploadHandler: opts.imageUploadHandler,
|
|
14
|
+
renderImageWidgetForm: opts.renderImageWidgetForm,
|
|
14
15
|
needToSetDimensionsForUploadedImages: Boolean(opts.needToSetDimensionsForUploadedImages),
|
|
16
|
+
enableNewImageSizeCalculation: Boolean(opts.enableNewImageSizeCalculation),
|
|
15
17
|
});
|
|
16
18
|
if (opts.imageUploadHandler || opts.parseInsertedUrlAsImage) {
|
|
17
19
|
builder.use(ImagePaste_1.ImagePaste, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"../../../../../src","sources":["extensions/yfm/ImgSize/index.ts"],"names":[],"mappings":";;;AAEA,sDAAgE;AAChE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"../../../../../src","sources":["extensions/yfm/ImgSize/index.ts"],"names":[],"mappings":";;;AAEA,sDAAgE;AAChE,wDAAmE;AACnE,0DAAsE;AACtE,0CAAuD;AACvD,sCAAuC;AACvC,wEAAgE;AAezD,MAAM,OAAO,GAAkC,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;IACpE,OAAO,CAAC,GAAG,CAAC,2BAAY,EAAE,IAAI,CAAC,CAAC;IAEhC,OAAO,CAAC,GAAG,CAAC,yBAAW,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,uBAAU,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,sBAAc,EAAE,CAAC,EAAC,MAAM,EAAC,EAAE,EAAE,CAAC,IAAA,kBAAQ,EAAC,MAAM,CAAC,CAAC,CAAC;IAElE,OAAO,CAAC,SAAS,CAAC,uCAAqB,CAAC,CAAC;AAC7C,CAAC,CAAC;AAtBW,QAAA,OAAO,WAsBlB","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;
|
|
@@ -13,7 +13,7 @@ const const_1 = require("./const.js");
|
|
|
13
13
|
function isImageNode(node) {
|
|
14
14
|
return node.type.name === markdown_1.imageNodeName;
|
|
15
15
|
}
|
|
16
|
-
const createImageNode = (imgType, opts) => async ({ result, file }) => {
|
|
16
|
+
const createImageNode = (imgType, opts, logger) => async ({ result, file }) => {
|
|
17
17
|
const attrs = {
|
|
18
18
|
[specs_1.ImgSizeAttr.Src]: result.url,
|
|
19
19
|
[specs_1.ImgSizeAttr.Alt]: result.name ?? file.name,
|
|
@@ -24,7 +24,8 @@ const createImageNode = (imgType, opts) => async ({ result, file }) => {
|
|
|
24
24
|
Object.assign(attrs, sizes);
|
|
25
25
|
}
|
|
26
26
|
catch (err) {
|
|
27
|
-
logger_1.
|
|
27
|
+
logger_1.globalLogger.error(err);
|
|
28
|
+
logger.error({ error: err });
|
|
28
29
|
}
|
|
29
30
|
}
|
|
30
31
|
return imgType.create(attrs);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"../../../../../src","sources":["extensions/yfm/ImgSize/utils.ts"],"names":[],"mappings":";;;AASA,kCAEC;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"../../../../../src","sources":["extensions/yfm/ImgSize/utils.ts"],"names":[],"mappings":";;;AASA,kCAEC;AA4BD,8BAUC;AAED,oCAEC;AAED,0CAUC;AA/DD,+CAA2D;AAC3D,mDAA2E;AAC3E,sDAA6C;AAC7C,0CAAwC;AAExC,sCAAuC;AAEvC,SAAgB,WAAW,CAAC,IAAU;IAClC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,wBAAa,CAAC;AAC5C,CAAC;AAOM,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,mBAAW,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG;QAC7B,CAAC,mBAAW,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,qBAAY,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;AAnBO,QAAA,eAAe,mBAmBtB;AAEC,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,SAAgB,YAAY,CAAC,GAAqB;IAC9C,OAAO,EAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,sBAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,EAAC,CAAC;AAClE,CAAC;AAED,SAAgB,eAAe,CAAC,EAAC,KAAK,EAAE,MAAM,EAAmB;IAI7D,MAAM,IAAI,GAAG,IAAA,2BAAmB,EAAC;QAC7B,KAAK;QACL,MAAM;QACN,YAAY,EAAE,sBAAc;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;
|
|
@@ -4,6 +4,7 @@ exports.YfmFilePaste = void 0;
|
|
|
4
4
|
const prosemirror_model_1 = require("prosemirror-model");
|
|
5
5
|
const prosemirror_state_1 = require("prosemirror-state");
|
|
6
6
|
const prosemirror_transform_1 = require("prosemirror-transform");
|
|
7
|
+
const core_1 = require("../../../../core/index.js");
|
|
7
8
|
const lodash_1 = require("../../../../lodash.js");
|
|
8
9
|
const Clipboard_1 = require("../../../behavior/Clipboard/index.js");
|
|
9
10
|
const markdown_1 = require("../../../markdown/index.js");
|
|
@@ -18,9 +19,15 @@ const YfmFilePaste = (builder, opts) => {
|
|
|
18
19
|
props: {
|
|
19
20
|
handleDOMEvents: {
|
|
20
21
|
paste(view, e) {
|
|
22
|
+
const logger = (0, core_1.getLoggerFromState)(view.state);
|
|
21
23
|
const files = getPastedFiles(e.clipboardData);
|
|
22
24
|
if (files) {
|
|
23
25
|
e.preventDefault();
|
|
26
|
+
logger.event({
|
|
27
|
+
event: 'paste-files',
|
|
28
|
+
plugin: 'yfm-file-paste',
|
|
29
|
+
domEvent: 'paste',
|
|
30
|
+
});
|
|
24
31
|
new YfmFilesPasteUploadProcess(view, files, {
|
|
25
32
|
uploadHandler: opts.fileUploadHandler,
|
|
26
33
|
needToSetDimensionsForUploadedImages: opts.needToSetDimensionsForUploadedImages,
|
|
@@ -40,6 +47,13 @@ const YfmFilePaste = (builder, opts) => {
|
|
|
40
47
|
if (dropPos === -1)
|
|
41
48
|
return false;
|
|
42
49
|
const posToInsert = (0, prosemirror_transform_1.dropPoint)(view.state.doc, dropPos, createFakeFileSlice(view.state.schema));
|
|
50
|
+
const logger = (0, core_1.getLoggerFromState)(view.state);
|
|
51
|
+
logger.event({
|
|
52
|
+
event: 'drop-files',
|
|
53
|
+
plugin: 'yfm-file-paste',
|
|
54
|
+
domEvent: 'drop',
|
|
55
|
+
runProcess: posToInsert !== null,
|
|
56
|
+
});
|
|
43
57
|
if (posToInsert !== null) {
|
|
44
58
|
new YfmFilesPasteUploadProcess(view, files, {
|
|
45
59
|
pos: posToInsert,
|
|
@@ -78,7 +92,7 @@ class YfmFilesPasteUploadProcess extends upload_1.YfmFilesUploadProcessBase {
|
|
|
78
92
|
if ((0, markdown_1.imageType)(schema)) {
|
|
79
93
|
this.createImage = (0, utils_1.createImageNode)((0, markdown_1.imageType)(schema), {
|
|
80
94
|
needDimensions: opts.needToSetDimensionsForUploadedImages,
|
|
81
|
-
});
|
|
95
|
+
}, this.logger);
|
|
82
96
|
}
|
|
83
97
|
}
|
|
84
98
|
getSkeletonInitPos() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"../../../../../../src","sources":["extensions/yfm/YfmFile/YfmFilePaste/index.ts"],"names":[],"mappings":";;;AAAA,yDAA0E;AAC1E,yDAAyC;AACzC,iEAAgD;
|
|
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/cjs/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/cjs/logger.js
CHANGED
|
@@ -1,7 +1,88 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.logger = void 0;
|
|
3
|
+
exports.globalLogger = exports.logger = exports.Logger2 = void 0;
|
|
4
|
+
const event_emitter_1 = require("./utils/event-emitter.js");
|
|
5
|
+
class Logger2 {
|
|
6
|
+
#emitter = new event_emitter_1.SafeEventEmitter();
|
|
7
|
+
log(msg, ...data) {
|
|
8
|
+
const obj = Object.assign({}, ...data);
|
|
9
|
+
const logData = Object.assign(obj, { msg });
|
|
10
|
+
this.#emitter.emit('log', logData);
|
|
11
|
+
}
|
|
12
|
+
warn(msg, ...data) {
|
|
13
|
+
const obj = Object.assign({}, ...data);
|
|
14
|
+
const warnData = Object.assign(obj, { msg });
|
|
15
|
+
this.#emitter.emit('warn', warnData);
|
|
16
|
+
}
|
|
17
|
+
error(err, ...data) {
|
|
18
|
+
const error = typeof err === 'string' ? Error(err) : err;
|
|
19
|
+
const obj = Object.assign({}, ...data);
|
|
20
|
+
const errorData = Object.assign(obj, { error });
|
|
21
|
+
this.#emitter.emit('error', errorData);
|
|
22
|
+
}
|
|
23
|
+
action(data) {
|
|
24
|
+
this.#emitter.emit('action', data);
|
|
25
|
+
}
|
|
26
|
+
metrics(data) {
|
|
27
|
+
this.#emitter.emit('metrics', data);
|
|
28
|
+
}
|
|
29
|
+
event(data) {
|
|
30
|
+
this.#emitter.emit('event', data);
|
|
31
|
+
}
|
|
32
|
+
nested(params) {
|
|
33
|
+
const self = this;
|
|
34
|
+
const paramsKey = Symbol();
|
|
35
|
+
const logger = {
|
|
36
|
+
[paramsKey]: params,
|
|
37
|
+
log(msg, ...data) {
|
|
38
|
+
if (self.#emitter.countOf('log'))
|
|
39
|
+
self.log(msg, this[paramsKey], ...data);
|
|
40
|
+
},
|
|
41
|
+
warn(msg, ...data) {
|
|
42
|
+
if (self.#emitter.countOf('warn'))
|
|
43
|
+
self.warn(msg, this[paramsKey], ...data);
|
|
44
|
+
},
|
|
45
|
+
error(err, ...data) {
|
|
46
|
+
if (self.#emitter.countOf('error'))
|
|
47
|
+
self.error(err, this[paramsKey], ...data);
|
|
48
|
+
},
|
|
49
|
+
action(data) {
|
|
50
|
+
if (self.#emitter.countOf('action'))
|
|
51
|
+
self.action({ ...this[paramsKey], ...data });
|
|
52
|
+
},
|
|
53
|
+
metrics(data) {
|
|
54
|
+
if (self.#emitter.countOf('metrics'))
|
|
55
|
+
self.metrics({ ...this[paramsKey], ...data });
|
|
56
|
+
},
|
|
57
|
+
event(data) {
|
|
58
|
+
if (self.#emitter.countOf('event'))
|
|
59
|
+
self.event({ ...this[paramsKey], ...data });
|
|
60
|
+
},
|
|
61
|
+
nested(nestedParams) {
|
|
62
|
+
return {
|
|
63
|
+
...this,
|
|
64
|
+
[paramsKey]: {
|
|
65
|
+
...this[paramsKey],
|
|
66
|
+
...nestedParams,
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
},
|
|
70
|
+
on: self.on.bind(self),
|
|
71
|
+
off: self.off.bind(self),
|
|
72
|
+
};
|
|
73
|
+
return logger;
|
|
74
|
+
}
|
|
75
|
+
on(type, listener) {
|
|
76
|
+
this.#emitter.on(type, listener);
|
|
77
|
+
}
|
|
78
|
+
off(type, listener) {
|
|
79
|
+
this.#emitter.off(type, listener);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
exports.Logger2 = Logger2;
|
|
83
|
+
// MAJOR: remove old logger implementation
|
|
4
84
|
const noop = () => { };
|
|
85
|
+
/** @deprecated */
|
|
5
86
|
class Logger {
|
|
6
87
|
#logger = this.createLogger({});
|
|
7
88
|
get log() {
|
|
@@ -41,5 +122,12 @@ class Logger {
|
|
|
41
122
|
};
|
|
42
123
|
}
|
|
43
124
|
}
|
|
125
|
+
/** @deprecated */
|
|
44
126
|
exports.logger = new Logger();
|
|
127
|
+
/**
|
|
128
|
+
* Alias for global singleton logger instance
|
|
129
|
+
*
|
|
130
|
+
* @deprecated
|
|
131
|
+
*/
|
|
132
|
+
exports.globalLogger = exports.logger;
|
|
45
133
|
//# sourceMappingURL=logger.js.map
|
package/build/cjs/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;AAEY,QAAA,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;
|
|
@@ -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
|
}
|