@limetech/lime-elements 40.5.4 → 40.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -0
- package/dist/cjs/{adapt-color-contrast-Beo1IEl_.js → adapt-color-contrast-h6iwOfZd.js} +1 -1
- package/dist/cjs/{checkbox.template-BPk8WkQF.js → checkbox.template-CoNVC4Nf.js} +2 -2
- package/dist/cjs/{files-DI4jItxi.js → files-DpGigQ8k.js} +1 -1
- package/dist/cjs/{format-bytes-CpUKKU86.js → format-bytes-WTHVI718.js} +1 -4
- package/dist/cjs/{hotkeys-BtR8uxvl.js → hotkeys-D761KWnZ.js} +1 -0
- package/dist/cjs/{image-resize-CG2fitJT.js → image-resize-JlRLB97I.js} +1 -0
- package/dist/cjs/{image.template-DY7qwbuy.js → image.template-DlF-f23b.js} +1 -1
- package/dist/cjs/{index--B6-r0uo.js → index-BlsqxTB1.js} +1 -7
- package/dist/cjs/{index-ETPz91V5.js → index-zZvs6xK-.js} +9382 -9504
- package/dist/cjs/index.cjs.js +1 -1
- package/dist/cjs/{isArrayLikeObject-U2Ddbw4n.js → isArrayLikeObject-BhSkOTkw.js} +17 -0
- package/dist/cjs/{language-CaqPKPyW.js → language-v-MMS6ym.js} +1 -1
- package/dist/cjs/lime-elements.cjs.js +2 -2
- package/dist/cjs/limel-3d-hover-effect-glow.cjs.entry.js +2 -2
- package/dist/cjs/limel-action-bar_3.cjs.entry.js +20 -18
- package/dist/cjs/limel-ai-avatar.cjs.entry.js +5 -5
- package/dist/cjs/limel-badge.cjs.entry.js +3 -3
- package/dist/cjs/limel-banner.cjs.entry.js +2 -2
- package/dist/cjs/limel-breadcrumbs_6.cjs.entry.js +80 -80
- package/dist/cjs/limel-button-group.cjs.entry.js +3 -3
- package/dist/cjs/limel-button.cjs.entry.js +4 -4
- package/dist/cjs/limel-callout.cjs.entry.js +6 -6
- package/dist/cjs/limel-card.cjs.entry.js +8 -7
- package/dist/cjs/limel-chart.cjs.entry.js +5 -5
- package/dist/cjs/limel-checkbox.cjs.entry.js +12 -10
- package/dist/cjs/limel-chip-set.cjs.entry.js +30 -39
- package/dist/cjs/limel-chip_2.cjs.entry.js +9 -9
- package/dist/cjs/limel-circular-progress.cjs.entry.js +2 -2
- package/dist/cjs/limel-code-diff.cjs.entry.js +25 -28
- package/dist/cjs/limel-code-editor.cjs.entry.js +17 -12
- package/dist/cjs/limel-collapsible-section.cjs.entry.js +8 -8
- package/dist/cjs/limel-color-picker-palette.cjs.entry.js +3 -3
- package/dist/cjs/limel-color-picker.cjs.entry.js +6 -5
- package/dist/cjs/limel-config.cjs.entry.js +3 -3
- package/dist/cjs/limel-date-picker.cjs.entry.js +8 -11
- package/dist/cjs/limel-dialog.cjs.entry.js +6 -9
- package/dist/cjs/limel-dock-button.cjs.entry.js +6 -11
- package/dist/cjs/limel-dock.cjs.entry.js +3 -3
- package/dist/cjs/limel-drag-handle.cjs.entry.js +6 -6
- package/dist/cjs/limel-dynamic-label.cjs.entry.js +1 -1
- package/dist/cjs/limel-email-viewer.cjs.entry.js +11 -17
- package/dist/cjs/limel-file-dropzone_2.cjs.entry.js +11 -12
- package/dist/cjs/limel-file-viewer.cjs.entry.js +1099 -1147
- package/dist/cjs/limel-file.cjs.entry.js +17 -16
- package/dist/cjs/limel-flatpickr-adapter.cjs.entry.js +100 -94
- package/dist/cjs/limel-flex-container.cjs.entry.js +2 -2
- package/dist/cjs/limel-form.cjs.entry.js +67 -68
- package/dist/cjs/limel-grid.cjs.entry.js +2 -2
- package/dist/cjs/limel-header.cjs.entry.js +2 -2
- package/dist/cjs/limel-help-content.cjs.entry.js +2 -2
- package/dist/cjs/limel-help.cjs.entry.js +3 -3
- package/dist/cjs/limel-helper-line_3.cjs.entry.js +12 -14
- package/dist/cjs/limel-hotkey_4.cjs.entry.js +23 -23
- package/dist/cjs/limel-icon-button.cjs.entry.js +4 -4
- package/dist/cjs/limel-icon.cjs.entry.js +15 -13
- package/dist/cjs/limel-info-tile.cjs.entry.js +10 -10
- package/dist/cjs/limel-list-item.cjs.entry.js +10 -10
- package/dist/cjs/limel-markdown.cjs.entry.js +50 -23
- package/dist/cjs/limel-masonry-layout.cjs.entry.js +6 -5
- package/dist/cjs/limel-menu-item-meta.cjs.entry.js +3 -3
- package/dist/cjs/limel-pagination-jump.cjs.entry.js +17 -15
- package/dist/cjs/limel-pagination.cjs.entry.js +10 -9
- package/dist/cjs/limel-picker.cjs.entry.js +31 -29
- package/dist/cjs/limel-popover_2.cjs.entry.js +25 -21
- package/dist/cjs/limel-profile-picture.cjs.entry.js +12 -11
- package/dist/cjs/limel-progress-flow-item.cjs.entry.js +1 -1
- package/dist/cjs/limel-progress-flow.cjs.entry.js +11 -10
- package/dist/cjs/limel-prosemirror-adapter.cjs.entry.js +476 -408
- package/dist/cjs/limel-radio-button-group.cjs.entry.js +2 -2
- package/dist/cjs/limel-radio-button.cjs.entry.js +3 -3
- package/dist/cjs/limel-scroller.cjs.entry.js +180 -0
- package/dist/cjs/limel-select.cjs.entry.js +17 -17
- package/dist/cjs/limel-shortcut.cjs.entry.js +1 -1
- package/dist/cjs/limel-slider.cjs.entry.js +18 -27
- package/dist/cjs/limel-snackbar.cjs.entry.js +5 -5
- package/dist/cjs/limel-split-button.cjs.entry.js +1 -1
- package/dist/cjs/limel-switch.cjs.entry.js +3 -3
- package/dist/cjs/limel-tab-bar.cjs.entry.js +66 -97
- package/dist/cjs/limel-tab-panel.cjs.entry.js +12 -9
- package/dist/cjs/limel-table.cjs.entry.js +527 -106
- package/dist/cjs/limel-text-editor-link-menu.cjs.entry.js +15 -14
- package/dist/cjs/limel-text-editor.cjs.entry.js +3 -3
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/{make-enter-clickable-NuTMC9MU.js → make-enter-clickable-BZHEWIJD.js} +19 -12
- package/dist/cjs/markdown-exporter-C-UW43FF.js +6210 -0
- package/dist/cjs/{markdown-parser-YH5HSSgF.js → markdown-parser-ssDij8_l.js} +603 -870
- package/dist/cjs/{moment-CqRdiK10.js → moment-Cfsz2WF1.js} +1062 -833
- package/dist/cjs/{random-string-BTzDB2ee.js → random-string-CFCtFh5l.js} +1 -0
- package/dist/cjs/{render-list-component-5ZKWpCnM.js → render-list-component-BtAliHQp.js} +3 -5
- package/dist/cjs/{sv-BSR4W58y.js → sv-Co78RX70.js} +31 -3
- package/dist/cjs/{translations-DFFpR6AZ.js → translations-CNTWud2a.js} +5 -8
- package/dist/collection/collection-manifest.json +1 -0
- package/dist/collection/components/3d-hover-effect-glow/3d-hover-effect-glow.js +1 -1
- package/dist/collection/components/action-bar/action-bar-item/action-bar-item.js +8 -7
- package/dist/collection/components/action-bar/action-bar-item/action-bar-overflow-menu.js +1 -1
- package/dist/collection/components/action-bar/action-bar.js +6 -5
- package/dist/collection/components/ai-avatar/ai-avatar.js +1 -1
- package/dist/collection/components/badge/badge.js +2 -2
- package/dist/collection/components/banner/banner.js +1 -1
- package/dist/collection/components/breadcrumbs/breadcrumbs.js +2 -2
- package/dist/collection/components/button/button.js +2 -2
- package/dist/collection/components/button-group/button-group.js +1 -1
- package/dist/collection/components/callout/callout.js +1 -1
- package/dist/collection/components/card/card.js +6 -5
- package/dist/collection/components/checkbox/checkbox.js +9 -7
- package/dist/collection/components/checkbox/checkbox.template.js +1 -1
- package/dist/collection/components/chip/chip.js +1 -1
- package/dist/collection/components/chip-set/chip-set-input-helpers.js +18 -21
- package/dist/collection/components/chip-set/chip-set.js +7 -13
- package/dist/collection/components/circular-progress/circular-progress.js +1 -1
- package/dist/collection/components/code-diff/code-diff.js +19 -22
- package/dist/collection/components/code-diff/diff-engine.js +2 -2
- package/dist/collection/components/code-editor/code-editor.js +8 -3
- package/dist/collection/components/collapsible-section/collapsible-section.js +1 -1
- package/dist/collection/components/color-picker/color-picker-palette.js +2 -2
- package/dist/collection/components/color-picker/color-picker.js +5 -4
- package/dist/collection/components/config/config.js +2 -2
- package/dist/collection/components/date-picker/date-picker.js +3 -6
- package/dist/collection/components/date-picker/flatpickr-adapter/deferred-destroy.js +4 -3
- package/dist/collection/components/date-picker/flatpickr-adapter/flatpickr-adapter.js +1 -1
- package/dist/collection/components/date-picker/pickers/month-picker.js +40 -36
- package/dist/collection/components/date-picker/pickers/quarter-picker.js +35 -30
- package/dist/collection/components/date-picker/pickers/year-picker.js +16 -20
- package/dist/collection/components/dialog/dialog.js +4 -7
- package/dist/collection/components/dock/dock-button/dock-button.js +4 -9
- package/dist/collection/components/dock/dock.js +2 -2
- package/dist/collection/components/drag-handle/drag-handle.js +1 -1
- package/dist/collection/components/email-viewer/email-loader.js +14 -10
- package/dist/collection/components/email-viewer/email-viewer.js +1 -1
- package/dist/collection/components/email-viewer/sanitize-email-html.js +1 -4
- package/dist/collection/components/email-viewer/split-email-address-list.js +4 -10
- package/dist/collection/components/file/file.js +11 -10
- package/dist/collection/components/file-dropzone/file-dropzone.js +1 -1
- package/dist/collection/components/file-input/file-input.js +7 -8
- package/dist/collection/components/file-viewer/file-viewer.js +12 -9
- package/dist/collection/components/flex-container/flex-container.js +1 -1
- package/dist/collection/components/form/fields/schema-field.js +1 -1
- package/dist/collection/components/form/form.js +2 -5
- package/dist/collection/components/form/form.test-schemas.js +8 -10
- package/dist/collection/components/form/templates/array-field.js +7 -9
- package/dist/collection/components/form/templates/common.js +19 -19
- package/dist/collection/components/form/templates/object-field.js +1 -1
- package/dist/collection/components/form/validation-display.js +2 -2
- package/dist/collection/components/form/validators/format.js +1 -0
- package/dist/collection/components/form/widgets/code-editor.js +6 -9
- package/dist/collection/components/form/widgets/date-picker.js +1 -3
- package/dist/collection/components/grid/grid.js +1 -1
- package/dist/collection/components/header/header.js +1 -1
- package/dist/collection/components/help/help-content.js +1 -1
- package/dist/collection/components/help/help.js +2 -2
- package/dist/collection/components/helper-line/helper-line.js +3 -3
- package/dist/collection/components/hotkey/hotkey.js +1 -1
- package/dist/collection/components/icon/icon.js +11 -9
- package/dist/collection/components/icon-button/icon-button.js +1 -1
- package/dist/collection/components/info-tile/info-tile.js +9 -9
- package/dist/collection/components/input-field/input-field.js +11 -11
- package/dist/collection/components/list/list-renderer.js +5 -7
- package/dist/collection/components/list/list.js +2 -2
- package/dist/collection/components/list-item/list-item.js +2 -2
- package/dist/collection/components/list-item/menu-item-meta/menu-item-meta.js +1 -1
- package/dist/collection/components/markdown/hydrate-custom-elements.js +6 -5
- package/dist/collection/components/markdown/image-intersection-observer.js +9 -8
- package/dist/collection/components/markdown/image-markdown-plugin.js +9 -7
- package/dist/collection/components/markdown/link-markdown-plugin.js +11 -10
- package/dist/collection/components/markdown/markdown-exporter.js +186 -0
- package/dist/collection/components/markdown/markdown-parser.js +2 -3
- package/dist/collection/components/markdown/markdown.js +59 -6
- package/dist/collection/components/markdown/remove-empty-paragraphs-plugin.js +4 -5
- package/dist/collection/components/masonry-layout/masonry-layout.js +5 -4
- package/dist/collection/components/menu/menu.js +48 -46
- package/dist/collection/components/menu-list/menu-list-renderer.js +8 -8
- package/dist/collection/components/menu-list/menu-list.js +1 -1
- package/dist/collection/components/menu-surface/menu-surface.js +6 -8
- package/dist/collection/components/notched-outline/notched-outline.js +1 -1
- package/dist/collection/components/pagination/jump/pagination-jump.js +13 -11
- package/dist/collection/components/pagination/pagination.js +5 -4
- package/dist/collection/components/picker/picker.js +25 -23
- package/dist/collection/components/popover/popover.js +13 -10
- package/dist/collection/components/popover-surface/popover-surface.js +1 -1
- package/dist/collection/components/portal/contains.js +9 -8
- package/dist/collection/components/portal/portal.js +16 -16
- package/dist/collection/components/profile-picture/profile-picture.js +4 -3
- package/dist/collection/components/progress-flow/progress-flow.js +10 -9
- package/dist/collection/components/radio-button-group/radio-button-group.js +1 -1
- package/dist/collection/components/radio-button-group/radio-button.js +2 -2
- package/dist/collection/components/scroller/scroller.css +317 -0
- package/dist/collection/components/scroller/scroller.js +284 -0
- package/dist/collection/components/select/select.js +13 -11
- package/dist/collection/components/select/select.template.js +1 -3
- package/dist/collection/components/slider/get-percentage-class.js +9 -18
- package/dist/collection/components/slider/slider.js +2 -2
- package/dist/collection/components/tab-bar/tab-bar.css +7 -289
- package/dist/collection/components/tab-bar/tab-bar.js +59 -104
- package/dist/collection/components/tab-panel/tab-panel.js +11 -8
- package/dist/collection/components/table/columns.js +1 -3
- package/dist/collection/components/table/element-pool.js +1 -1
- package/dist/collection/components/table/table-selection.js +6 -5
- package/dist/collection/components/table/table.css +15 -17
- package/dist/collection/components/table/table.js +44 -39
- package/dist/collection/components/text-editor/link-menu/editor-link-menu.js +11 -10
- package/dist/collection/components/text-editor/prosemirror-adapter/menu/menu-command-utils/list-utils.js +1 -1
- package/dist/collection/components/text-editor/prosemirror-adapter/menu/menu-commands.js +6 -10
- package/dist/collection/components/text-editor/prosemirror-adapter/plugins/image/inserter.js +37 -40
- package/dist/collection/components/text-editor/prosemirror-adapter/plugins/image/node.js +2 -1
- package/dist/collection/components/text-editor/prosemirror-adapter/plugins/link/link-plugin.js +21 -20
- package/dist/collection/components/text-editor/prosemirror-adapter/plugins/menu-state-tracking-plugin.js +6 -5
- package/dist/collection/components/text-editor/prosemirror-adapter/plugins/trigger/factory-helpers/detect-trigger-removal.js +15 -14
- package/dist/collection/components/text-editor/prosemirror-adapter/prosemirror-adapter.js +40 -34
- package/dist/collection/components/text-editor/text-editor.js +1 -1
- package/dist/collection/components/text-editor/utils/metadata-utils.js +1 -1
- package/dist/collection/components/text-editor/utils/plugin-factory.js +3 -3
- package/dist/collection/components/tooltip/tooltip-content.js +1 -1
- package/dist/collection/components/tooltip/tooltip.js +2 -2
- package/dist/collection/global/icon-cache/factory.js +2 -3
- package/dist/collection/global/icon-cache/in-memory-icon-cache.js +2 -0
- package/dist/collection/global/translations.js +1 -3
- package/dist/collection/translations/fr.js +3 -3
- package/dist/collection/util/adapt-color-contrast.js +1 -1
- package/dist/collection/util/files.js +1 -1
- package/dist/collection/util/format-bytes.js +1 -4
- package/dist/collection/util/hotkeys.js +1 -0
- package/dist/collection/util/image-resize.js +1 -0
- package/dist/collection/util/language.js +1 -1
- package/dist/collection/util/make-enter-clickable.js +19 -12
- package/dist/collection/util/random-string.js +1 -0
- package/dist/collection/util/render-list-component.js +2 -4
- package/dist/esm/{adapt-color-contrast-Dgcw_h7C.js → adapt-color-contrast-BQoih_t0.js} +1 -1
- package/dist/esm/{checkbox.template-Cx_3u92S.js → checkbox.template-IDyv2bgn.js} +2 -2
- package/dist/esm/{files-DnkFEKoB.js → files-CKnLqPDj.js} +1 -1
- package/dist/esm/{format-bytes-u_sd2HMb.js → format-bytes-24yUSW40.js} +1 -4
- package/dist/esm/{hotkeys-BxrRWYts.js → hotkeys-DjmlD0Mw.js} +1 -0
- package/dist/esm/{image-resize-BTSG--2-.js → image-resize-Dv2HOgWN.js} +1 -0
- package/dist/esm/{image.template-wqMwmOF-.js → image.template-BGjw97m_.js} +1 -1
- package/dist/esm/{index-CbciMfiU.js → index-BN64nlbO.js} +9369 -9505
- package/dist/esm/{index-Bnc9lzk2.js → index-BU9IJqli.js} +1 -7
- package/dist/esm/index.js +1 -1
- package/dist/esm/{isArrayLikeObject-CJB8HbtH.js → isArrayLikeObject-tmUOLOWr.js} +17 -1
- package/dist/esm/{language-C3hECvXE.js → language-ChagAaNf.js} +1 -1
- package/dist/esm/lime-elements.js +3 -3
- package/dist/esm/limel-3d-hover-effect-glow.entry.js +2 -2
- package/dist/esm/limel-action-bar_3.entry.js +20 -18
- package/dist/esm/limel-ai-avatar.entry.js +5 -5
- package/dist/esm/limel-badge.entry.js +3 -3
- package/dist/esm/limel-banner.entry.js +2 -2
- package/dist/esm/limel-breadcrumbs_6.entry.js +80 -80
- package/dist/esm/limel-button-group.entry.js +3 -3
- package/dist/esm/limel-button.entry.js +4 -4
- package/dist/esm/limel-callout.entry.js +6 -6
- package/dist/esm/limel-card.entry.js +8 -7
- package/dist/esm/limel-chart.entry.js +5 -5
- package/dist/esm/limel-checkbox.entry.js +12 -10
- package/dist/esm/limel-chip-set.entry.js +30 -39
- package/dist/esm/limel-chip_2.entry.js +9 -9
- package/dist/esm/limel-circular-progress.entry.js +2 -2
- package/dist/esm/limel-code-diff.entry.js +25 -28
- package/dist/esm/limel-code-editor.entry.js +17 -12
- package/dist/esm/limel-collapsible-section.entry.js +8 -8
- package/dist/esm/limel-color-picker-palette.entry.js +3 -3
- package/dist/esm/limel-color-picker.entry.js +6 -5
- package/dist/esm/limel-config.entry.js +3 -3
- package/dist/esm/limel-date-picker.entry.js +8 -11
- package/dist/esm/limel-dialog.entry.js +6 -9
- package/dist/esm/limel-dock-button.entry.js +6 -11
- package/dist/esm/limel-dock.entry.js +3 -3
- package/dist/esm/limel-drag-handle.entry.js +6 -6
- package/dist/esm/limel-dynamic-label.entry.js +1 -1
- package/dist/esm/limel-email-viewer.entry.js +11 -17
- package/dist/esm/limel-file-dropzone_2.entry.js +11 -12
- package/dist/esm/limel-file-viewer.entry.js +1099 -1147
- package/dist/esm/limel-file.entry.js +17 -16
- package/dist/esm/limel-flatpickr-adapter.entry.js +100 -94
- package/dist/esm/limel-flex-container.entry.js +2 -2
- package/dist/esm/limel-form.entry.js +66 -67
- package/dist/esm/limel-grid.entry.js +2 -2
- package/dist/esm/limel-header.entry.js +2 -2
- package/dist/esm/limel-help-content.entry.js +2 -2
- package/dist/esm/limel-help.entry.js +3 -3
- package/dist/esm/limel-helper-line_3.entry.js +12 -14
- package/dist/esm/limel-hotkey_4.entry.js +23 -23
- package/dist/esm/limel-icon-button.entry.js +4 -4
- package/dist/esm/limel-icon.entry.js +15 -13
- package/dist/esm/limel-info-tile.entry.js +10 -10
- package/dist/esm/limel-list-item.entry.js +10 -10
- package/dist/esm/limel-markdown.entry.js +50 -23
- package/dist/esm/limel-masonry-layout.entry.js +6 -5
- package/dist/esm/limel-menu-item-meta.entry.js +3 -3
- package/dist/esm/limel-pagination-jump.entry.js +17 -15
- package/dist/esm/limel-pagination.entry.js +10 -9
- package/dist/esm/limel-picker.entry.js +31 -29
- package/dist/esm/limel-popover_2.entry.js +25 -21
- package/dist/esm/limel-profile-picture.entry.js +12 -11
- package/dist/esm/limel-progress-flow-item.entry.js +1 -1
- package/dist/esm/limel-progress-flow.entry.js +11 -10
- package/dist/esm/limel-prosemirror-adapter.entry.js +476 -408
- package/dist/esm/limel-radio-button-group.entry.js +2 -2
- package/dist/esm/limel-radio-button.entry.js +3 -3
- package/dist/esm/limel-scroller.entry.js +178 -0
- package/dist/esm/limel-select.entry.js +17 -17
- package/dist/esm/limel-shortcut.entry.js +1 -1
- package/dist/esm/limel-slider.entry.js +18 -27
- package/dist/esm/limel-snackbar.entry.js +5 -5
- package/dist/esm/limel-split-button.entry.js +1 -1
- package/dist/esm/limel-switch.entry.js +3 -3
- package/dist/esm/limel-tab-bar.entry.js +66 -97
- package/dist/esm/limel-tab-panel.entry.js +12 -9
- package/dist/esm/limel-table.entry.js +527 -106
- package/dist/esm/limel-text-editor-link-menu.entry.js +15 -14
- package/dist/esm/limel-text-editor.entry.js +3 -3
- package/dist/esm/loader.js +3 -3
- package/dist/esm/{make-enter-clickable-BgTwPGeH.js → make-enter-clickable-CIf8aGSd.js} +19 -12
- package/dist/esm/markdown-exporter-DblYRMhY.js +6208 -0
- package/dist/esm/{markdown-parser-DrxxGLF5.js → markdown-parser-CAPDx7i8.js} +530 -813
- package/dist/esm/{moment-DQRNe8qq.js → moment-_DadZLWp.js} +1062 -833
- package/dist/esm/{random-string-JbKhhoXs.js → random-string-BrjD-ITe.js} +1 -0
- package/dist/esm/{render-list-component-cicbMp0l.js → render-list-component-J1IzNpbv.js} +3 -5
- package/dist/esm/{sv-CY-6-yEp.js → sv-DpsDSi7k.js} +31 -3
- package/dist/esm/{translations-DMtX4tTX.js → translations-Y4i8PVc9.js} +5 -8
- package/dist/lime-elements/index.esm.js +1 -1
- package/dist/lime-elements/lime-elements.esm.js +1 -1
- package/dist/lime-elements/{p-3916b316.entry.js → p-03cb609e.entry.js} +1 -1
- package/dist/lime-elements/p-05038bbb.entry.js +1 -0
- package/dist/lime-elements/{p-835149c4.entry.js → p-0d6925f4.entry.js} +1 -1
- package/dist/lime-elements/p-0e13ec91.entry.js +1 -0
- package/dist/lime-elements/p-159603cf.entry.js +159 -0
- package/dist/lime-elements/p-22fd1c87.entry.js +1 -0
- package/dist/lime-elements/p-24yUSW40.js +1 -0
- package/dist/lime-elements/{p-f717cd7a.entry.js → p-271662d4.entry.js} +1 -1
- package/dist/lime-elements/{p-c2a60508.entry.js → p-29c73bdf.entry.js} +1 -1
- package/dist/lime-elements/{p-deceda00.entry.js → p-2a902e77.entry.js} +1 -1
- package/dist/lime-elements/{p-d0cec424.entry.js → p-2b033dfa.entry.js} +1 -1
- package/dist/lime-elements/{p-acba5700.entry.js → p-2b2253d4.entry.js} +1 -1
- package/dist/lime-elements/p-2e33d2a4.entry.js +1 -0
- package/dist/lime-elements/p-31226737.entry.js +13 -0
- package/dist/lime-elements/{p-36ce4fbc.entry.js → p-31f314e6.entry.js} +1 -1
- package/dist/lime-elements/p-32a050a3.entry.js +1 -0
- package/dist/lime-elements/{p-3735111e.entry.js → p-3cfe0eaf.entry.js} +1 -1
- package/dist/lime-elements/{p-fbcd99a3.entry.js → p-3d3bdf45.entry.js} +1 -1
- package/dist/lime-elements/p-440a0b43.entry.js +1 -0
- package/dist/lime-elements/p-45c39fb4.entry.js +1 -0
- package/dist/lime-elements/p-45fde7a1.entry.js +1 -0
- package/dist/lime-elements/p-48afa6b7.entry.js +1 -0
- package/dist/lime-elements/{p-f04f7c8e.entry.js → p-4a88d365.entry.js} +1 -1
- package/dist/lime-elements/p-4b75e653.entry.js +1 -0
- package/dist/lime-elements/p-4dfd1962.entry.js +67 -0
- package/dist/lime-elements/{p-5698e493.entry.js → p-4ecbc9f4.entry.js} +1 -1
- package/dist/lime-elements/p-5386c629.entry.js +1 -0
- package/dist/lime-elements/{p-2e568c56.entry.js → p-54a9f48f.entry.js} +1 -1
- package/dist/lime-elements/{p-0fba64eb.entry.js → p-5df21b25.entry.js} +2 -2
- package/dist/lime-elements/{p-408c4dcb.entry.js → p-5f5c6e7d.entry.js} +1 -1
- package/dist/lime-elements/{p-052c3bc6.entry.js → p-681cb6de.entry.js} +1 -1
- package/dist/lime-elements/p-6adc7c88.entry.js +1 -0
- package/dist/lime-elements/{p-90df3e1b.entry.js → p-6d9961f7.entry.js} +1 -1
- package/dist/lime-elements/{p-74bd0c1a.entry.js → p-7b4351f6.entry.js} +1 -1
- package/dist/lime-elements/{p-3fd7e8aa.entry.js → p-7eab1341.entry.js} +1 -1
- package/dist/lime-elements/p-80153f45.entry.js +1 -0
- package/dist/lime-elements/{p-35fa1063.entry.js → p-85318636.entry.js} +1 -1
- package/dist/lime-elements/p-8988b7e1.entry.js +1 -0
- package/dist/lime-elements/{p-4ffbfc79.entry.js → p-8ac79ef5.entry.js} +1 -1
- package/dist/lime-elements/{p-4902fb3f.entry.js → p-9218fa6a.entry.js} +1 -1
- package/dist/lime-elements/p-92669910.entry.js +1 -0
- package/dist/lime-elements/{p-38b09f87.entry.js → p-9415411e.entry.js} +1 -1
- package/dist/lime-elements/p-95ccd9e7.entry.js +1 -0
- package/dist/lime-elements/{p-cb407bef.entry.js → p-9afa4721.entry.js} +1 -1
- package/dist/lime-elements/{p-54dcf46f.entry.js → p-9c8c2fb7.entry.js} +1 -1
- package/dist/lime-elements/{p-B8hoCfhT.js → p-B3YP9GOq.js} +1 -1
- package/dist/lime-elements/{p-Dgcw_h7C.js → p-BQoih_t0.js} +1 -1
- package/dist/lime-elements/{p-Bnc9lzk2.js → p-BU9IJqli.js} +1 -1
- package/dist/lime-elements/{p-CGVVDGcv.js → p-Bkvc4sus.js} +1 -1
- package/dist/lime-elements/p-Bvyt2bmV.js +1 -0
- package/dist/lime-elements/{p-BgTwPGeH.js → p-CIf8aGSd.js} +1 -1
- package/dist/lime-elements/{p-C3hECvXE.js → p-ChagAaNf.js} +1 -1
- package/dist/lime-elements/p-DTcfed02.js +3 -0
- package/dist/lime-elements/p-DWMfAkOE.js +1 -0
- package/dist/lime-elements/{p-BY85K-4J.js → p-DqQOawxc.js} +1 -1
- package/dist/lime-elements/p-I0PrvthC.js +7 -0
- package/dist/lime-elements/p-N9vxZMhe.js +1 -0
- package/dist/lime-elements/{p-DsDkl4Sy.js → p-ZDFVISfu.js} +3 -3
- package/dist/lime-elements/p-_UXAljNc.js +1 -0
- package/dist/lime-elements/p-a1c69e0c.entry.js +1 -0
- package/dist/lime-elements/{p-2daf0482.entry.js → p-a1d1470c.entry.js} +1 -1
- package/dist/lime-elements/{p-cef66e53.entry.js → p-a2e6f16e.entry.js} +1 -1
- package/dist/lime-elements/p-a550ba18.entry.js +1 -0
- package/dist/lime-elements/{p-d146feda.entry.js → p-a65eb58e.entry.js} +1 -1
- package/dist/lime-elements/p-ab8021b9.entry.js +1 -0
- package/dist/lime-elements/{p-03fb2603.entry.js → p-b22b52a1.entry.js} +1 -1
- package/dist/lime-elements/p-b6c0dc91.entry.js +23 -0
- package/dist/lime-elements/{p-c2a3ca7c.entry.js → p-b6d39581.entry.js} +1 -1
- package/dist/lime-elements/{p-8475a3b8.entry.js → p-c439b68b.entry.js} +1 -1
- package/dist/lime-elements/p-d19c7a3a.entry.js +1 -0
- package/dist/lime-elements/{p-7cbf50fc.entry.js → p-d1e5dd12.entry.js} +1 -1
- package/dist/lime-elements/p-de4719a6.entry.js +1 -0
- package/dist/lime-elements/{p-b81a2728.entry.js → p-e02e2c5f.entry.js} +1 -1
- package/dist/lime-elements/{p-d351b9ae.entry.js → p-e6a34047.entry.js} +1 -1
- package/dist/lime-elements/p-eF09GxA_.js +1 -0
- package/dist/lime-elements/{p-8fa9c9ea.entry.js → p-ee719744.entry.js} +1 -1
- package/dist/lime-elements/{p-d3bd4b80.entry.js → p-f04e2897.entry.js} +3 -3
- package/dist/lime-elements/p-f3cae1e7.entry.js +1 -0
- package/dist/lime-elements/{p-8115da75.entry.js → p-f4a0b1bc.entry.js} +1 -1
- package/dist/lime-elements/{p-4855dc9b.entry.js → p-f82f72e7.entry.js} +1 -1
- package/dist/lime-elements/{p-2d84ea04.entry.js → p-f97ec7a5.entry.js} +1 -1
- package/dist/lime-elements/{p-21109d9b.entry.js → p-fdd674fc.entry.js} +1 -1
- package/dist/lime-elements/{p-459eea13.entry.js → p-fdec09e9.entry.js} +1 -1
- package/dist/lime-elements/{p-2f57c3fa.entry.js → p-fe492ff3.entry.js} +1 -1
- package/dist/lime-elements/{p-65cded0e.entry.js → p-ff1a8b2e.entry.js} +1 -1
- package/dist/types/components/chip-set/chip-set-input-helpers.d.ts +1 -1
- package/dist/types/components/markdown/markdown-exporter.d.ts +15 -0
- package/dist/types/components/markdown/markdown.d.ts +19 -0
- package/dist/types/components/pagination/jump/pagination-jump.d.ts +1 -1
- package/dist/types/components/scroller/scroller.d.ts +67 -0
- package/dist/types/components/tab-bar/tab-bar.d.ts +13 -16
- package/dist/types/components.d.ts +138 -0
- package/dist/types/global/icon-cache/factory.d.ts +2 -2
- package/dist/types/global/shared-types/custom-element.types.d.ts +25 -0
- package/dist/types/global/translations.d.ts +2 -2
- package/package.json +18 -12
- package/dist/lime-elements/p-05afb316.entry.js +0 -1
- package/dist/lime-elements/p-10594468.entry.js +0 -1
- package/dist/lime-elements/p-19344984.entry.js +0 -13
- package/dist/lime-elements/p-1e93473a.entry.js +0 -1
- package/dist/lime-elements/p-26c5c6b9.entry.js +0 -1
- package/dist/lime-elements/p-452b9b01.entry.js +0 -1
- package/dist/lime-elements/p-4aae63bd.entry.js +0 -1
- package/dist/lime-elements/p-507cc8a1.entry.js +0 -159
- package/dist/lime-elements/p-531b6a64.entry.js +0 -1
- package/dist/lime-elements/p-54793c06.entry.js +0 -1
- package/dist/lime-elements/p-5d974afa.entry.js +0 -1
- package/dist/lime-elements/p-66b125f2.entry.js +0 -1
- package/dist/lime-elements/p-6d5b23ad.entry.js +0 -1
- package/dist/lime-elements/p-7e212fa7.entry.js +0 -1
- package/dist/lime-elements/p-82696d24.entry.js +0 -1
- package/dist/lime-elements/p-9ac39039.entry.js +0 -1
- package/dist/lime-elements/p-9b631363.entry.js +0 -1
- package/dist/lime-elements/p-C9xHOCE_.js +0 -7
- package/dist/lime-elements/p-DMNtoJ8I.js +0 -1
- package/dist/lime-elements/p-DQJU9gzh.js +0 -1
- package/dist/lime-elements/p-DpJgXIWf.js +0 -1
- package/dist/lime-elements/p-a1de9bbe.entry.js +0 -1
- package/dist/lime-elements/p-a71f6e87.entry.js +0 -67
- package/dist/lime-elements/p-bd7b3f8e.entry.js +0 -1
- package/dist/lime-elements/p-be8610ff.entry.js +0 -1
- package/dist/lime-elements/p-c72e5007.entry.js +0 -1
- package/dist/lime-elements/p-cafec335.entry.js +0 -1
- package/dist/lime-elements/p-d6dadc61.entry.js +0 -1
- package/dist/lime-elements/p-d93b7b9f.entry.js +0 -23
- package/dist/lime-elements/p-pk5KIdKH.js +0 -1
- package/dist/lime-elements/p-u_sd2HMb.js +0 -1
- package/dist/lime-elements/p-zo6O9LC9.js +0 -3
- /package/dist/lime-elements/{p-JbKhhoXs.js → p-BrjD-ITe.js} +0 -0
- /package/dist/lime-elements/{p-BxrRWYts.js → p-DjmlD0Mw.js} +0 -0
- /package/dist/lime-elements/{p-BTSG--2-.js → p-Dv2HOgWN.js} +0 -0
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { r as registerInstance, c as createEvent, h, H as Host, a as getElement } from './index-
|
|
1
|
+
import { r as registerInstance, c as createEvent, h, H as Host, a as getElement } from './index-BU9IJqli.js';
|
|
2
2
|
import { L as LevelMapping, E as EditorMenuTypes, i as isInlineImageTag, M as MouseButtons, e as editorMenuTypesArray } from './types-C_Yu8dOg.js';
|
|
3
|
-
import { g as getLinkAttributes, m as markdownToHTML, s as sanitizeHTML } from './markdown-parser-
|
|
3
|
+
import { g as getLinkAttributes, m as markdownToHTML, s as sanitizeHTML } from './markdown-parser-CAPDx7i8.js';
|
|
4
4
|
import { c as cloneDeep } from './cloneDeep-DAbOtbs8.js';
|
|
5
|
-
import { t as
|
|
6
|
-
import { c as decodeHTML, e as decodeHTMLStrict } from './index-
|
|
7
|
-
import { c as createRandomString } from './random-string-
|
|
5
|
+
import { t as translations } from './translations-Y4i8PVc9.js';
|
|
6
|
+
import { c as decodeHTML, e as decodeHTMLStrict } from './index-BN64nlbO.js';
|
|
7
|
+
import { c as createRandomString } from './random-string-BrjD-ITe.js';
|
|
8
8
|
import { i as isItem } from './is-item-CrvUOVvg.js';
|
|
9
|
-
import { c as createFileInfo } from './files-
|
|
9
|
+
import { c as createFileInfo } from './files-CKnLqPDj.js';
|
|
10
10
|
import { i as isEqual } from './isEqual-CE83yS8T.js';
|
|
11
11
|
import { d as debounce } from './debounce-B67JMchz.js';
|
|
12
12
|
import './_commonjsHelpers-B85MJLTf.js';
|
|
@@ -23,7 +23,7 @@ import './_isIndex-B--C3qwe.js';
|
|
|
23
23
|
import './_assignValue-CEFvyZxO.js';
|
|
24
24
|
import './_defineProperty-C69Btzid.js';
|
|
25
25
|
import './_getPrototype-B0kMNv1F.js';
|
|
26
|
-
import './language-
|
|
26
|
+
import './language-ChagAaNf.js';
|
|
27
27
|
import './file-metadata-BHzkIH4g.js';
|
|
28
28
|
import './icons-Bu_YRgCL.js';
|
|
29
29
|
import './get-icon-props-CgNJbSP4.js';
|
|
@@ -6871,15 +6871,15 @@ function scanFor(node, off, targetNode, targetOff, dir) {
|
|
|
6871
6871
|
return true;
|
|
6872
6872
|
if (off == (dir < 0 ? 0 : nodeSize(node))) {
|
|
6873
6873
|
let parent = node.parentNode;
|
|
6874
|
-
if (!parent || parent
|
|
6874
|
+
if (!parent || !isElt(parent) || hasBlockDesc(node) || atomElements.test(node.nodeName) ||
|
|
6875
6875
|
node.contentEditable == "false")
|
|
6876
6876
|
return false;
|
|
6877
6877
|
off = domIndex(node) + (dir < 0 ? 0 : 1);
|
|
6878
6878
|
node = parent;
|
|
6879
6879
|
}
|
|
6880
|
-
else if (node
|
|
6880
|
+
else if (isElt(node)) {
|
|
6881
6881
|
let child = node.childNodes[off + (dir < 0 ? -1 : 0)];
|
|
6882
|
-
if (child
|
|
6882
|
+
if (isElt(child) && child.contentEditable == "false") {
|
|
6883
6883
|
if ((_a = child.pmViewDesc) === null || _a === void 0 ? void 0 : _a.ignoreForSelection)
|
|
6884
6884
|
off += dir;
|
|
6885
6885
|
else
|
|
@@ -6898,11 +6898,16 @@ function scanFor(node, off, targetNode, targetOff, dir) {
|
|
|
6898
6898
|
function nodeSize(node) {
|
|
6899
6899
|
return node.nodeType == 3 ? node.nodeValue.length : node.childNodes.length;
|
|
6900
6900
|
}
|
|
6901
|
+
function isElt(node) { return node.nodeType == 1; }
|
|
6902
|
+
function isText(node) { return node.nodeType == 3; }
|
|
6903
|
+
function contains(parent, child) {
|
|
6904
|
+
return child ? parent.contains(isElt(child) ? child : child.parentNode) : false;
|
|
6905
|
+
}
|
|
6901
6906
|
function textNodeBefore$1(node, offset) {
|
|
6902
6907
|
for (;;) {
|
|
6903
|
-
if (node
|
|
6908
|
+
if (isText(node) && offset)
|
|
6904
6909
|
return node;
|
|
6905
|
-
if (node
|
|
6910
|
+
if (isElt(node) && offset > 0) {
|
|
6906
6911
|
if (node.contentEditable == "false")
|
|
6907
6912
|
return null;
|
|
6908
6913
|
node = node.childNodes[offset - 1];
|
|
@@ -6919,9 +6924,9 @@ function textNodeBefore$1(node, offset) {
|
|
|
6919
6924
|
}
|
|
6920
6925
|
function textNodeAfter$1(node, offset) {
|
|
6921
6926
|
for (;;) {
|
|
6922
|
-
if (node
|
|
6927
|
+
if (isText(node) && offset < node.nodeValue.length)
|
|
6923
6928
|
return node;
|
|
6924
|
-
if (node
|
|
6929
|
+
if (isElt(node) && offset < node.childNodes.length) {
|
|
6925
6930
|
if (node.contentEditable == "false")
|
|
6926
6931
|
return null;
|
|
6927
6932
|
node = node.childNodes[offset];
|
|
@@ -7036,18 +7041,20 @@ function clientRect(node) {
|
|
|
7036
7041
|
top: rect.top, bottom: rect.top + node.clientHeight * scaleY };
|
|
7037
7042
|
}
|
|
7038
7043
|
function scrollRectIntoView(view, rect, startDOM) {
|
|
7044
|
+
// Skip empty rects with all sides at 0, for example, when the element has no CSS box (display: none)
|
|
7045
|
+
if (!nonZero(rect) && rect.left == 0)
|
|
7046
|
+
return;
|
|
7039
7047
|
let scrollThreshold = view.someProp("scrollThreshold") || 0, scrollMargin = view.someProp("scrollMargin") || 5;
|
|
7040
7048
|
let doc = view.dom.ownerDocument;
|
|
7041
7049
|
for (let parent = startDOM || view.dom;;) {
|
|
7042
7050
|
if (!parent)
|
|
7043
7051
|
break;
|
|
7044
|
-
if (parent
|
|
7052
|
+
if (!isElt(parent)) {
|
|
7045
7053
|
parent = parentNode(parent);
|
|
7046
7054
|
continue;
|
|
7047
7055
|
}
|
|
7048
|
-
let
|
|
7049
|
-
let
|
|
7050
|
-
let bounding = atTop ? windowRect(doc) : clientRect(elt);
|
|
7056
|
+
let atTop = parent == doc.body;
|
|
7057
|
+
let bounding = atTop ? windowRect(doc) : clientRect(parent);
|
|
7051
7058
|
let moveX = 0, moveY = 0;
|
|
7052
7059
|
if (rect.top < bounding.top + getSide(scrollThreshold, "top"))
|
|
7053
7060
|
moveY = -(bounding.top - rect.top + getSide(scrollMargin, "top"));
|
|
@@ -7064,12 +7071,12 @@ function scrollRectIntoView(view, rect, startDOM) {
|
|
|
7064
7071
|
doc.defaultView.scrollBy(moveX, moveY);
|
|
7065
7072
|
}
|
|
7066
7073
|
else {
|
|
7067
|
-
let startX =
|
|
7074
|
+
let startX = parent.scrollLeft, startY = parent.scrollTop;
|
|
7068
7075
|
if (moveY)
|
|
7069
|
-
|
|
7076
|
+
parent.scrollTop += moveY;
|
|
7070
7077
|
if (moveX)
|
|
7071
|
-
|
|
7072
|
-
let dX =
|
|
7078
|
+
parent.scrollLeft += moveX;
|
|
7079
|
+
let dX = parent.scrollLeft - startX, dY = parent.scrollTop - startY;
|
|
7073
7080
|
rect = { left: rect.left - dX, top: rect.top - dY, right: rect.right - dX, bottom: rect.bottom - dY };
|
|
7074
7081
|
}
|
|
7075
7082
|
}
|
|
@@ -7144,14 +7151,15 @@ function focusPreventScroll(dom) {
|
|
|
7144
7151
|
}
|
|
7145
7152
|
}
|
|
7146
7153
|
function findOffsetInNode(node, coords) {
|
|
7147
|
-
let closest
|
|
7154
|
+
let closest;
|
|
7155
|
+
let dxClosest = 2e8, coordsClosest, offset = 0;
|
|
7148
7156
|
let rowBot = coords.top, rowTop = coords.top;
|
|
7149
7157
|
let firstBelow, coordsBelow;
|
|
7150
7158
|
for (let child = node.firstChild, childIndex = 0; child; child = child.nextSibling, childIndex++) {
|
|
7151
7159
|
let rects;
|
|
7152
|
-
if (child
|
|
7160
|
+
if (isElt(child))
|
|
7153
7161
|
rects = child.getClientRects();
|
|
7154
|
-
else if (child
|
|
7162
|
+
else if (isText(child))
|
|
7155
7163
|
rects = textRange(child).getClientRects();
|
|
7156
7164
|
else
|
|
7157
7165
|
continue;
|
|
@@ -7165,11 +7173,11 @@ function findOffsetInNode(node, coords) {
|
|
|
7165
7173
|
if (dx < dxClosest) {
|
|
7166
7174
|
closest = child;
|
|
7167
7175
|
dxClosest = dx;
|
|
7168
|
-
coordsClosest = dx && closest
|
|
7176
|
+
coordsClosest = dx && isText(closest) ? {
|
|
7169
7177
|
left: rect.right < coords.left ? rect.right : rect.left,
|
|
7170
7178
|
top: coords.top
|
|
7171
7179
|
} : coords;
|
|
7172
|
-
if (child
|
|
7180
|
+
if (isElt(child) && dx)
|
|
7173
7181
|
offset = childIndex + (coords.left >= (rect.left + rect.right) / 2 ? 1 : 0);
|
|
7174
7182
|
continue;
|
|
7175
7183
|
}
|
|
@@ -7188,9 +7196,9 @@ function findOffsetInNode(node, coords) {
|
|
|
7188
7196
|
coordsClosest = coordsBelow;
|
|
7189
7197
|
dxClosest = 0;
|
|
7190
7198
|
}
|
|
7191
|
-
if (closest && closest
|
|
7199
|
+
if (closest && isText(closest))
|
|
7192
7200
|
return findOffsetInText(closest, coordsClosest);
|
|
7193
|
-
if (!closest ||
|
|
7201
|
+
if (!closest || dxClosest)
|
|
7194
7202
|
return { node, offset };
|
|
7195
7203
|
return findOffsetInNode(closest, coordsClosest);
|
|
7196
7204
|
}
|
|
@@ -7223,7 +7231,7 @@ function targetKludge(dom, coords) {
|
|
|
7223
7231
|
}
|
|
7224
7232
|
function posFromElement(view, elt, coords) {
|
|
7225
7233
|
let { node, offset } = findOffsetInNode(elt, coords), bias = -1;
|
|
7226
|
-
if (node
|
|
7234
|
+
if (isElt(node) && !node.firstChild) {
|
|
7227
7235
|
let rect = node.getBoundingClientRect();
|
|
7228
7236
|
bias = rect.left != rect.right && coords.left > (rect.left + rect.right) / 2 ? 1 : -1;
|
|
7229
7237
|
}
|
|
@@ -7243,7 +7251,7 @@ function posFromCaret(view, node, offset, coords) {
|
|
|
7243
7251
|
let desc = view.docView.nearestDesc(cur, true), rect;
|
|
7244
7252
|
if (!desc)
|
|
7245
7253
|
return null;
|
|
7246
|
-
if (desc.dom
|
|
7254
|
+
if (isElt(desc.dom) && (desc.node.isBlock && desc.parent || !desc.contentDOM) &&
|
|
7247
7255
|
// Ignore elements with zero-size bounding rectangles
|
|
7248
7256
|
((rect = desc.dom.getBoundingClientRect()).width || rect.height)) {
|
|
7249
7257
|
if (desc.node.isBlock && desc.parent && !/^T(R|BODY|HEAD|FOOT)$/.test(desc.dom.nodeName)) {
|
|
@@ -7270,7 +7278,7 @@ function elementFromPoint(element, coords, box) {
|
|
|
7270
7278
|
if (len && box.top < box.bottom) {
|
|
7271
7279
|
for (let startI = Math.max(0, Math.min(len - 1, Math.floor(len * (coords.top - box.top) / (box.bottom - box.top)) - 2)), i = startI;;) {
|
|
7272
7280
|
let child = element.childNodes[i];
|
|
7273
|
-
if (child
|
|
7281
|
+
if (isElt(child)) {
|
|
7274
7282
|
let rects = child.getClientRects();
|
|
7275
7283
|
for (let j = 0; j < rects.length; j++) {
|
|
7276
7284
|
let rect = rects[j];
|
|
@@ -7293,7 +7301,7 @@ function posAtCoords(view, coords) {
|
|
|
7293
7301
|
let elt = (view.root.elementFromPoint ? view.root : doc)
|
|
7294
7302
|
.elementFromPoint(coords.left, coords.top);
|
|
7295
7303
|
let pos;
|
|
7296
|
-
if (!elt || !view.dom.contains(elt
|
|
7304
|
+
if (!elt || !view.dom.contains(elt)) {
|
|
7297
7305
|
let box = view.dom.getBoundingClientRect();
|
|
7298
7306
|
if (!inRect(coords, box))
|
|
7299
7307
|
return null;
|
|
@@ -7309,7 +7317,7 @@ function posAtCoords(view, coords) {
|
|
|
7309
7317
|
}
|
|
7310
7318
|
elt = targetKludge(elt, coords);
|
|
7311
7319
|
if (node) {
|
|
7312
|
-
if (gecko && node
|
|
7320
|
+
if (gecko && isElt(node)) {
|
|
7313
7321
|
// Firefox will sometimes return offsets into <input> nodes, which
|
|
7314
7322
|
// have no actual children, from caretPositionFromPoint (#953)
|
|
7315
7323
|
offset = Math.min(offset, node.childNodes.length);
|
|
@@ -7324,18 +7332,18 @@ function posAtCoords(view, coords) {
|
|
|
7324
7332
|
}
|
|
7325
7333
|
let prev;
|
|
7326
7334
|
// When clicking above the right side of an uneditable node, Chrome will report a cursor position after that node.
|
|
7327
|
-
if (webkit && offset && node
|
|
7335
|
+
if (webkit && offset && isElt(node) && isElt(prev = node.childNodes[offset - 1]) &&
|
|
7328
7336
|
prev.contentEditable == "false" && prev.getBoundingClientRect().top >= coords.top)
|
|
7329
7337
|
offset--;
|
|
7330
7338
|
// Suspiciously specific kludge to work around caret*FromPoint
|
|
7331
7339
|
// never returning a position at the end of the document
|
|
7332
|
-
if (node == view.dom && offset == node.childNodes.length - 1 && node.lastChild
|
|
7340
|
+
if (node == view.dom && offset == node.childNodes.length - 1 && isElt(node.lastChild) &&
|
|
7333
7341
|
coords.top > node.lastChild.getBoundingClientRect().bottom)
|
|
7334
7342
|
pos = view.state.doc.content.size;
|
|
7335
7343
|
// Ignore positions directly after a BR, since caret*FromPoint
|
|
7336
7344
|
// 'round up' positions that would be more accurately placed
|
|
7337
7345
|
// before the BR node.
|
|
7338
|
-
else if (offset == 0 || node
|
|
7346
|
+
else if (offset == 0 || !isElt(node) || node.childNodes[offset - 1].nodeName != "BR")
|
|
7339
7347
|
pos = posFromCaret(view, node, offset, coords);
|
|
7340
7348
|
}
|
|
7341
7349
|
if (pos == null)
|
|
@@ -7361,7 +7369,7 @@ const BIDI = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/;
|
|
|
7361
7369
|
function coordsAtPos(view, pos, side) {
|
|
7362
7370
|
let { node, offset, atom } = view.docView.domFromPos(pos, side < 0 ? -1 : 1);
|
|
7363
7371
|
let supportEmptyRange = webkit || gecko;
|
|
7364
|
-
if (node
|
|
7372
|
+
if (isText(node)) {
|
|
7365
7373
|
// These browsers support querying empty text ranges. Prefer that in
|
|
7366
7374
|
// bidi context or when at the end of a node.
|
|
7367
7375
|
if (supportEmptyRange && (BIDI.test(node.nodeValue) || (side < 0 ? !offset : offset == node.nodeValue.length))) {
|
|
@@ -7403,12 +7411,12 @@ function coordsAtPos(view, pos, side) {
|
|
|
7403
7411
|
if (!$dom.parent.inlineContent) {
|
|
7404
7412
|
if (atom == null && offset && (side < 0 || offset == nodeSize(node))) {
|
|
7405
7413
|
let before = node.childNodes[offset - 1];
|
|
7406
|
-
if (before
|
|
7414
|
+
if (isElt(before))
|
|
7407
7415
|
return flattenH(before.getBoundingClientRect(), false);
|
|
7408
7416
|
}
|
|
7409
7417
|
if (atom == null && offset < nodeSize(node)) {
|
|
7410
7418
|
let after = node.childNodes[offset];
|
|
7411
|
-
if (after
|
|
7419
|
+
if (isElt(after))
|
|
7412
7420
|
return flattenH(after.getBoundingClientRect(), true);
|
|
7413
7421
|
}
|
|
7414
7422
|
return flattenH(node.getBoundingClientRect(), side >= 0);
|
|
@@ -7416,10 +7424,10 @@ function coordsAtPos(view, pos, side) {
|
|
|
7416
7424
|
// Inline, not in text node (this is not Bidi-safe)
|
|
7417
7425
|
if (atom == null && offset && (side < 0 || offset == nodeSize(node))) {
|
|
7418
7426
|
let before = node.childNodes[offset - 1];
|
|
7419
|
-
let target = before
|
|
7427
|
+
let target = isText(before) ? textRange(before, nodeSize(before) - (supportEmptyRange ? 0 : 1))
|
|
7420
7428
|
// BR nodes tend to only return the rectangle before them.
|
|
7421
7429
|
// Only use them if they are the last element in their parent
|
|
7422
|
-
: before
|
|
7430
|
+
: isElt(before) && (before.nodeName != "BR" || !before.nextSibling) ? before : null;
|
|
7423
7431
|
if (target)
|
|
7424
7432
|
return flattenV(singleRect(target, 1), false);
|
|
7425
7433
|
}
|
|
@@ -7427,13 +7435,13 @@ function coordsAtPos(view, pos, side) {
|
|
|
7427
7435
|
let after = node.childNodes[offset];
|
|
7428
7436
|
while (after.pmViewDesc && after.pmViewDesc.ignoreForCoords)
|
|
7429
7437
|
after = after.nextSibling;
|
|
7430
|
-
let target = !after ? null : after
|
|
7431
|
-
: after
|
|
7438
|
+
let target = !after ? null : isText(after) ? textRange(after, 0, (supportEmptyRange ? 0 : 1))
|
|
7439
|
+
: isElt(after) ? after : null;
|
|
7432
7440
|
if (target)
|
|
7433
7441
|
return flattenV(singleRect(target, -1), true);
|
|
7434
7442
|
}
|
|
7435
7443
|
// All else failed, just try to get a rectangle for the target node
|
|
7436
|
-
return flattenV(singleRect(node
|
|
7444
|
+
return flattenV(singleRect(isText(node) ? textRange(node) : node, -side), side >= 0);
|
|
7437
7445
|
}
|
|
7438
7446
|
function flattenV(rect, left) {
|
|
7439
7447
|
if (rect.width == 0)
|
|
@@ -7483,9 +7491,9 @@ function endOfTextblockVertical(view, state, dir) {
|
|
|
7483
7491
|
let coords = coordsAtPos(view, $pos.pos, 1);
|
|
7484
7492
|
for (let child = dom.firstChild; child; child = child.nextSibling) {
|
|
7485
7493
|
let boxes;
|
|
7486
|
-
if (child
|
|
7494
|
+
if (isElt(child))
|
|
7487
7495
|
boxes = child.getClientRects();
|
|
7488
|
-
else if (child
|
|
7496
|
+
else if (isText(child))
|
|
7489
7497
|
boxes = textRange(child, 0, child.nodeValue.length).getClientRects();
|
|
7490
7498
|
else
|
|
7491
7499
|
continue;
|
|
@@ -7525,8 +7533,7 @@ function endOfTextblockHorizontal(view, state, dir) {
|
|
|
7525
7533
|
sel.modify("move", dir, "character");
|
|
7526
7534
|
let parentDOM = $head.depth ? view.docView.domAfterPos($head.before()) : view.dom;
|
|
7527
7535
|
let { focusNode: newNode, focusOffset: newOff } = view.domSelectionRange();
|
|
7528
|
-
let result = newNode && !
|
|
7529
|
-
(oldNode == newNode && oldOff == newOff);
|
|
7536
|
+
let result = newNode && !contains(parentDOM, newNode) || (oldNode == newNode && oldOff == newOff);
|
|
7530
7537
|
// Restore the previous selection
|
|
7531
7538
|
try {
|
|
7532
7539
|
sel.collapse(anchorNode, anchorOffset);
|
|
@@ -7590,7 +7597,7 @@ class ViewDesc {
|
|
|
7590
7597
|
// When parsing in-editor content (in domchange.js), we allow
|
|
7591
7598
|
// descriptions to determine the parse rules that should be used to
|
|
7592
7599
|
// parse them.
|
|
7593
|
-
parseRule() { return null; }
|
|
7600
|
+
parseRule(addedNodes) { return null; }
|
|
7594
7601
|
// Used by the editor's event handler to ignore events that come
|
|
7595
7602
|
// from certain descs.
|
|
7596
7603
|
stopEvent(event) { return false; }
|
|
@@ -7634,7 +7641,7 @@ class ViewDesc {
|
|
|
7634
7641
|
localPosFromDOM(dom, offset, bias) {
|
|
7635
7642
|
// If the DOM position is in the content, use the child desc after
|
|
7636
7643
|
// it to figure out a position.
|
|
7637
|
-
if (this.contentDOM && this.contentDOM
|
|
7644
|
+
if (this.contentDOM && contains(this.contentDOM, dom)) {
|
|
7638
7645
|
if (bias < 0) {
|
|
7639
7646
|
let domBefore, desc;
|
|
7640
7647
|
if (dom == this.contentDOM) {
|
|
@@ -7672,7 +7679,7 @@ class ViewDesc {
|
|
|
7672
7679
|
atEnd = offset > domIndex(this.contentDOM);
|
|
7673
7680
|
}
|
|
7674
7681
|
else if (this.contentDOM && this.contentDOM != this.dom && this.dom.contains(this.contentDOM)) {
|
|
7675
|
-
atEnd = dom.compareDocumentPosition(this.contentDOM) &
|
|
7682
|
+
atEnd = !!(dom.compareDocumentPosition(this.contentDOM) & 4);
|
|
7676
7683
|
}
|
|
7677
7684
|
else if (this.dom.firstChild) {
|
|
7678
7685
|
if (offset == 0)
|
|
@@ -7702,7 +7709,7 @@ class ViewDesc {
|
|
|
7702
7709
|
if (desc && (!onlyNodes || desc.node)) {
|
|
7703
7710
|
// If dom is outside of this desc's nodeDOM, don't count it.
|
|
7704
7711
|
if (first && (nodeDOM = desc.nodeDOM) &&
|
|
7705
|
-
!(nodeDOM
|
|
7712
|
+
!(isElt(nodeDOM) ? contains(nodeDOM, dom) : nodeDOM == dom))
|
|
7706
7713
|
first = false;
|
|
7707
7714
|
else
|
|
7708
7715
|
return desc;
|
|
@@ -7752,7 +7759,7 @@ class ViewDesc {
|
|
|
7752
7759
|
let i = 0, offset = 0;
|
|
7753
7760
|
for (let curPos = 0; i < this.children.length; i++) {
|
|
7754
7761
|
let child = this.children[i], end = curPos + child.size;
|
|
7755
|
-
if (end > pos
|
|
7762
|
+
if (end > pos) {
|
|
7756
7763
|
offset = pos - curPos;
|
|
7757
7764
|
break;
|
|
7758
7765
|
}
|
|
@@ -7762,7 +7769,11 @@ class ViewDesc {
|
|
|
7762
7769
|
if (offset)
|
|
7763
7770
|
return this.children[i].domFromPos(offset - this.children[i].border, side);
|
|
7764
7771
|
// Go back if there were any zero-length widgets with side >= 0 before this point
|
|
7765
|
-
for (
|
|
7772
|
+
for (; i > 0; i--) {
|
|
7773
|
+
let prev = this.children[i - 1];
|
|
7774
|
+
if (prev.size || !(prev instanceof BufferHackViewDesc || prev instanceof WidgetViewDesc && prev.side >= 0))
|
|
7775
|
+
break;
|
|
7776
|
+
}
|
|
7766
7777
|
// Scan towards the first useable node
|
|
7767
7778
|
if (side <= 0) {
|
|
7768
7779
|
let prev, enter = true;
|
|
@@ -7839,7 +7850,7 @@ class ViewDesc {
|
|
|
7839
7850
|
}
|
|
7840
7851
|
domAfterPos(pos) {
|
|
7841
7852
|
let { node, offset } = this.domFromPos(pos, 0);
|
|
7842
|
-
if (node
|
|
7853
|
+
if (!isElt(node) || offset == node.childNodes.length)
|
|
7843
7854
|
throw new RangeError("No node after pos " + pos);
|
|
7844
7855
|
return node.childNodes[offset];
|
|
7845
7856
|
}
|
|
@@ -7868,7 +7879,7 @@ class ViewDesc {
|
|
|
7868
7879
|
// reported position in such situations (#1092).
|
|
7869
7880
|
if ((gecko || safari) && anchor == head) {
|
|
7870
7881
|
let { node, offset } = anchorDOM;
|
|
7871
|
-
if (node
|
|
7882
|
+
if (isText(node)) {
|
|
7872
7883
|
brKludge = !!(offset && node.nodeValue[offset - 1] == "\n");
|
|
7873
7884
|
// Issue #1128
|
|
7874
7885
|
if (brKludge && offset == node.nodeValue.length) {
|
|
@@ -7891,7 +7902,7 @@ class ViewDesc {
|
|
|
7891
7902
|
}
|
|
7892
7903
|
// Firefox can act strangely when the selection is in front of an
|
|
7893
7904
|
// uneditable node. See #1163 and https://bugzilla.mozilla.org/show_bug.cgi?id=1709536
|
|
7894
|
-
if (gecko && selRange.focusNode && selRange.focusNode != headDOM.node && selRange.focusNode
|
|
7905
|
+
if (gecko && selRange.focusNode && selRange.focusNode != headDOM.node && isElt(selRange.focusNode)) {
|
|
7895
7906
|
let after = selRange.focusNode.childNodes[selRange.focusOffset];
|
|
7896
7907
|
if (after && after.contentEditable == "false")
|
|
7897
7908
|
force = true;
|
|
@@ -7990,13 +8001,12 @@ class WidgetViewDesc extends ViewDesc {
|
|
|
7990
8001
|
return self.parent.posBeforeChild(self);
|
|
7991
8002
|
});
|
|
7992
8003
|
if (!widget.type.spec.raw) {
|
|
7993
|
-
|
|
7994
|
-
|
|
7995
|
-
|
|
7996
|
-
|
|
7997
|
-
|
|
7998
|
-
|
|
7999
|
-
dom.classList.add("ProseMirror-widget");
|
|
8004
|
+
let elt = isElt(dom) ? dom : document.createElement("span");
|
|
8005
|
+
if (elt != dom)
|
|
8006
|
+
elt.appendChild(dom);
|
|
8007
|
+
if (!elt.hasAttribute("contenteditable"))
|
|
8008
|
+
elt.contentEditable = "false";
|
|
8009
|
+
elt.classList.add("ProseMirror-widget");
|
|
8000
8010
|
}
|
|
8001
8011
|
super(parent, [], dom, null);
|
|
8002
8012
|
this.widget = widget;
|
|
@@ -8102,7 +8112,7 @@ class MarkViewDesc extends ViewDesc {
|
|
|
8102
8112
|
// correspond to an actual node in the document. Unlike mark descs,
|
|
8103
8113
|
// they populate their child array themselves.
|
|
8104
8114
|
class NodeViewDesc extends ViewDesc {
|
|
8105
|
-
constructor(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM
|
|
8115
|
+
constructor(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM) {
|
|
8106
8116
|
super(parent, [], dom, contentDOM);
|
|
8107
8117
|
this.node = node;
|
|
8108
8118
|
this.outerDeco = outerDeco;
|
|
@@ -8132,7 +8142,7 @@ class NodeViewDesc extends ViewDesc {
|
|
|
8132
8142
|
if (node.isText) {
|
|
8133
8143
|
if (!dom)
|
|
8134
8144
|
dom = document.createTextNode(node.text);
|
|
8135
|
-
else if (dom
|
|
8145
|
+
else if (!isText(dom))
|
|
8136
8146
|
throw new RangeError("Text must be rendered as a DOM text node");
|
|
8137
8147
|
}
|
|
8138
8148
|
else if (!dom) {
|
|
@@ -8148,13 +8158,13 @@ class NodeViewDesc extends ViewDesc {
|
|
|
8148
8158
|
let nodeDOM = dom;
|
|
8149
8159
|
dom = applyOuterDeco(dom, outerDeco, node);
|
|
8150
8160
|
if (spec)
|
|
8151
|
-
return descObj = new CustomNodeViewDesc(parent, node, outerDeco, innerDeco, dom, contentDOM || null, nodeDOM, spec
|
|
8161
|
+
return descObj = new CustomNodeViewDesc(parent, node, outerDeco, innerDeco, dom, contentDOM || null, nodeDOM, spec);
|
|
8152
8162
|
else if (node.isText)
|
|
8153
|
-
return new TextViewDesc(parent, node, outerDeco, innerDeco, dom, nodeDOM
|
|
8163
|
+
return new TextViewDesc(parent, node, outerDeco, innerDeco, dom, nodeDOM);
|
|
8154
8164
|
else
|
|
8155
|
-
return new NodeViewDesc(parent, node, outerDeco, innerDeco, dom, contentDOM || null, nodeDOM
|
|
8165
|
+
return new NodeViewDesc(parent, node, outerDeco, innerDeco, dom, contentDOM || null, nodeDOM);
|
|
8156
8166
|
}
|
|
8157
|
-
parseRule() {
|
|
8167
|
+
parseRule(addedNodes) {
|
|
8158
8168
|
// Experimental kludge to allow opt-in re-parsing of nodes
|
|
8159
8169
|
if (this.node.type.spec.reparseInView)
|
|
8160
8170
|
return null;
|
|
@@ -8182,8 +8192,14 @@ class NodeViewDesc extends ViewDesc {
|
|
|
8182
8192
|
break;
|
|
8183
8193
|
}
|
|
8184
8194
|
}
|
|
8185
|
-
if (!rule.contentElement)
|
|
8186
|
-
|
|
8195
|
+
if (!rule.contentElement) {
|
|
8196
|
+
let found = addedNodes &&
|
|
8197
|
+
addedNodes.find(n => isElt(n) && addedNodes.indexOf(n.parentNode) < 0 && this.dom.contains(n));
|
|
8198
|
+
if (found)
|
|
8199
|
+
rule.contentElement = found;
|
|
8200
|
+
else
|
|
8201
|
+
rule.getContent = () => Fragment.empty;
|
|
8202
|
+
}
|
|
8187
8203
|
}
|
|
8188
8204
|
return rule;
|
|
8189
8205
|
}
|
|
@@ -8203,6 +8219,7 @@ class NodeViewDesc extends ViewDesc {
|
|
|
8203
8219
|
let localComposition = composition && composition.pos > -1 ? composition : null;
|
|
8204
8220
|
let compositionInChild = composition && composition.pos < 0;
|
|
8205
8221
|
let updater = new ViewTreeUpdater(this, localComposition && localComposition.node, view);
|
|
8222
|
+
let addBuffers = this.node.inlineContent, atBufferPos = addBuffers && this.node.isBlock;
|
|
8206
8223
|
iterDeco(this.node, this.innerDeco, (widget, i, insideNode) => {
|
|
8207
8224
|
if (widget.spec.marks)
|
|
8208
8225
|
updater.syncToMarks(widget.spec.marks, inline, view, i);
|
|
@@ -8214,6 +8231,8 @@ class NodeViewDesc extends ViewDesc {
|
|
|
8214
8231
|
}, (child, outerDeco, innerDeco, i) => {
|
|
8215
8232
|
// Make sure the wrapping mark descs match the node's marks.
|
|
8216
8233
|
updater.syncToMarks(child.marks, inline, view, i);
|
|
8234
|
+
if (atBufferPos && child.isAtom && !child.isText)
|
|
8235
|
+
updater.addHackNode("IMG", updater.top);
|
|
8217
8236
|
// Try several strategies for drawing this node
|
|
8218
8237
|
let compIndex;
|
|
8219
8238
|
if (updater.findNodeMatch(child, outerDeco, innerDeco, i)) ;
|
|
@@ -8227,6 +8246,8 @@ class NodeViewDesc extends ViewDesc {
|
|
|
8227
8246
|
updater.addNode(child, outerDeco, innerDeco, view, off);
|
|
8228
8247
|
}
|
|
8229
8248
|
off += child.nodeSize;
|
|
8249
|
+
if (addBuffers)
|
|
8250
|
+
atBufferPos = child.isAtom && !child.isText;
|
|
8230
8251
|
});
|
|
8231
8252
|
// Drop all remaining descs after the current position.
|
|
8232
8253
|
updater.syncToMarks([], inline, view, 0);
|
|
@@ -8305,7 +8326,7 @@ class NodeViewDesc extends ViewDesc {
|
|
|
8305
8326
|
updateOuterDeco(outerDeco) {
|
|
8306
8327
|
if (sameOuterDeco(outerDeco, this.outerDeco))
|
|
8307
8328
|
return;
|
|
8308
|
-
let needsWrap = this.nodeDOM
|
|
8329
|
+
let needsWrap = !isElt(this.nodeDOM);
|
|
8309
8330
|
let oldDOM = this.dom;
|
|
8310
8331
|
this.dom = patchOuterDeco(this.dom, this.nodeDOM, computeOuterDeco(this.outerDeco, this.node, needsWrap), computeOuterDeco(outerDeco, this.node, needsWrap));
|
|
8311
8332
|
if (this.dom != oldDOM) {
|
|
@@ -8316,7 +8337,7 @@ class NodeViewDesc extends ViewDesc {
|
|
|
8316
8337
|
}
|
|
8317
8338
|
// Mark this node as being the selected node.
|
|
8318
8339
|
selectNode() {
|
|
8319
|
-
if (this.nodeDOM
|
|
8340
|
+
if (isElt(this.nodeDOM)) {
|
|
8320
8341
|
this.nodeDOM.classList.add("ProseMirror-selectednode");
|
|
8321
8342
|
if (this.contentDOM || !this.node.type.spec.draggable)
|
|
8322
8343
|
this.nodeDOM.draggable = true;
|
|
@@ -8324,7 +8345,7 @@ class NodeViewDesc extends ViewDesc {
|
|
|
8324
8345
|
}
|
|
8325
8346
|
// Remove selected node marking from this node.
|
|
8326
8347
|
deselectNode() {
|
|
8327
|
-
if (this.nodeDOM
|
|
8348
|
+
if (isElt(this.nodeDOM)) {
|
|
8328
8349
|
this.nodeDOM.classList.remove("ProseMirror-selectednode");
|
|
8329
8350
|
if (this.contentDOM || !this.node.type.spec.draggable)
|
|
8330
8351
|
this.nodeDOM.removeAttribute("draggable");
|
|
@@ -8336,14 +8357,14 @@ class NodeViewDesc extends ViewDesc {
|
|
|
8336
8357
|
// and used by the view class.
|
|
8337
8358
|
function docViewDesc(doc, outerDeco, innerDeco, dom, view) {
|
|
8338
8359
|
applyOuterDeco(dom, outerDeco, doc);
|
|
8339
|
-
let docView = new NodeViewDesc(undefined, doc, outerDeco, innerDeco, dom, dom, dom
|
|
8360
|
+
let docView = new NodeViewDesc(undefined, doc, outerDeco, innerDeco, dom, dom, dom);
|
|
8340
8361
|
if (docView.contentDOM)
|
|
8341
8362
|
docView.updateChildren(view, 0);
|
|
8342
8363
|
return docView;
|
|
8343
8364
|
}
|
|
8344
8365
|
class TextViewDesc extends NodeViewDesc {
|
|
8345
|
-
constructor(parent, node, outerDeco, innerDeco, dom, nodeDOM
|
|
8346
|
-
super(parent, node, outerDeco, innerDeco, dom, null, nodeDOM
|
|
8366
|
+
constructor(parent, node, outerDeco, innerDeco, dom, nodeDOM) {
|
|
8367
|
+
super(parent, node, outerDeco, innerDeco, dom, null, nodeDOM);
|
|
8347
8368
|
}
|
|
8348
8369
|
parseRule() {
|
|
8349
8370
|
let skip = this.nodeDOM.parentNode;
|
|
@@ -8383,9 +8404,9 @@ class TextViewDesc extends NodeViewDesc {
|
|
|
8383
8404
|
ignoreMutation(mutation) {
|
|
8384
8405
|
return mutation.type != "characterData" && mutation.type != "selection";
|
|
8385
8406
|
}
|
|
8386
|
-
slice(from, to,
|
|
8407
|
+
slice(from, to, _view) {
|
|
8387
8408
|
let node = this.node.cut(from, to), dom = document.createTextNode(node.text);
|
|
8388
|
-
return new TextViewDesc(this.parent, node, this.outerDeco, this.innerDeco, dom, dom
|
|
8409
|
+
return new TextViewDesc(this.parent, node, this.outerDeco, this.innerDeco, dom, dom);
|
|
8389
8410
|
}
|
|
8390
8411
|
markDirty(from, to) {
|
|
8391
8412
|
super.markDirty(from, to);
|
|
@@ -8395,9 +8416,9 @@ class TextViewDesc extends NodeViewDesc {
|
|
|
8395
8416
|
get domAtom() { return false; }
|
|
8396
8417
|
isText(text) { return this.node.text == text; }
|
|
8397
8418
|
}
|
|
8398
|
-
// A dummy desc used to tag
|
|
8419
|
+
// A dummy desc used to tag extra BR or IMG nodes created to work
|
|
8399
8420
|
// around contentEditable terribleness.
|
|
8400
|
-
class
|
|
8421
|
+
class BufferHackViewDesc extends ViewDesc {
|
|
8401
8422
|
parseRule() { return { ignore: true }; }
|
|
8402
8423
|
matchesHack(nodeName) { return this.dirty == NOT_DIRTY && this.dom.nodeName == nodeName; }
|
|
8403
8424
|
get domAtom() { return true; }
|
|
@@ -8407,8 +8428,8 @@ class TrailingHackViewDesc extends ViewDesc {
|
|
|
8407
8428
|
// extra checks only have to be made for nodes that are actually
|
|
8408
8429
|
// customized.
|
|
8409
8430
|
class CustomNodeViewDesc extends NodeViewDesc {
|
|
8410
|
-
constructor(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, spec
|
|
8411
|
-
super(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM
|
|
8431
|
+
constructor(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, spec) {
|
|
8432
|
+
super(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM);
|
|
8412
8433
|
this.spec = spec;
|
|
8413
8434
|
}
|
|
8414
8435
|
// A custom `update` method gets to decide whether the update goes
|
|
@@ -8570,7 +8591,7 @@ function patchAttributes(dom, prev, cur) {
|
|
|
8570
8591
|
}
|
|
8571
8592
|
}
|
|
8572
8593
|
function applyOuterDeco(dom, deco, node) {
|
|
8573
|
-
return patchOuterDeco(dom, dom, noDeco, computeOuterDeco(deco, node, dom
|
|
8594
|
+
return patchOuterDeco(dom, dom, noDeco, computeOuterDeco(deco, node, !isElt(dom)));
|
|
8574
8595
|
}
|
|
8575
8596
|
function sameOuterDeco(a, b) {
|
|
8576
8597
|
if (a.length != b.length)
|
|
@@ -8645,6 +8666,19 @@ class ViewTreeUpdater {
|
|
|
8645
8666
|
break;
|
|
8646
8667
|
}
|
|
8647
8668
|
}
|
|
8669
|
+
// When nothing matches, try to update the mark view at this position
|
|
8670
|
+
// in place, so a custom mark view can adapt to a changed mark without
|
|
8671
|
+
// re-creating its DOM.
|
|
8672
|
+
if (found < 0 && this.index < this.top.children.length) {
|
|
8673
|
+
let cur = this.top.children[this.index];
|
|
8674
|
+
if (cur instanceof MarkViewDesc && cur.dirty != NODE_DIRTY &&
|
|
8675
|
+
cur.mark.type == marks[depth].type && cur.spec.update &&
|
|
8676
|
+
!this.isLocked(cur.dom) && cur.spec.update(marks[depth])) {
|
|
8677
|
+
cur.mark = marks[depth];
|
|
8678
|
+
found = this.index;
|
|
8679
|
+
this.changed = true;
|
|
8680
|
+
}
|
|
8681
|
+
}
|
|
8648
8682
|
if (found > -1) {
|
|
8649
8683
|
if (found > this.index) {
|
|
8650
8684
|
this.changed = true;
|
|
@@ -8820,7 +8854,7 @@ class ViewTreeUpdater {
|
|
|
8820
8854
|
}
|
|
8821
8855
|
if (nodeName == "BR")
|
|
8822
8856
|
dom.className = "ProseMirror-trailingBreak";
|
|
8823
|
-
let hack = new
|
|
8857
|
+
let hack = new BufferHackViewDesc(this.top, [], dom, null);
|
|
8824
8858
|
if (parent != this.top)
|
|
8825
8859
|
parent.children.push(hack);
|
|
8826
8860
|
else
|
|
@@ -8829,7 +8863,7 @@ class ViewTreeUpdater {
|
|
|
8829
8863
|
}
|
|
8830
8864
|
}
|
|
8831
8865
|
isLocked(node) {
|
|
8832
|
-
return this.lock && (node == this.lock || node
|
|
8866
|
+
return this.lock && (node == this.lock || isElt(node) && node.contains(this.lock.parentNode));
|
|
8833
8867
|
}
|
|
8834
8868
|
}
|
|
8835
8869
|
// Iterate from the end of the fragment and array of descs to find
|
|
@@ -9031,12 +9065,27 @@ function selectionFromDOM(view, origin = null) {
|
|
|
9031
9065
|
anchor = head;
|
|
9032
9066
|
while (nearestDesc && !nearestDesc.node)
|
|
9033
9067
|
nearestDesc = nearestDesc.parent;
|
|
9034
|
-
|
|
9035
|
-
|
|
9036
|
-
|
|
9068
|
+
if (nearestDesc && nearestDesc.node.isAtom && NodeSelection.isSelectable(nearestDesc.node) &&
|
|
9069
|
+
nearestDesc.parent &&
|
|
9070
|
+
!(nearestDesc.node.isInline && isOnEdge(domSel.focusNode, domSel.focusOffset, nearestDesc.dom))) {
|
|
9037
9071
|
let pos = nearestDesc.posBefore;
|
|
9038
9072
|
selection = new NodeSelection(head == pos ? $head : doc.resolve(pos));
|
|
9039
9073
|
}
|
|
9074
|
+
else if (gecko && origin == "key" && head > view.state.selection.to &&
|
|
9075
|
+
isElt(domSel.focusNode) && domSel.focusOffset == domSel.focusNode.childNodes.length &&
|
|
9076
|
+
nearestDesc && nearestDesc.posAtStart > view.state.selection.to) {
|
|
9077
|
+
// Firefox will jump across scrollable wrapper nodes on keyboard
|
|
9078
|
+
// cursor motion (#1594). This tries to detect this situation
|
|
9079
|
+
// and work around it.
|
|
9080
|
+
for (let scan = domSel.focusNode;; scan = scan.parentNode) {
|
|
9081
|
+
if (getComputedStyle(scan).overflow != "visible") {
|
|
9082
|
+
selection = Selection.findFrom(doc.resolve(nearestDesc.posAtStart), 1);
|
|
9083
|
+
break;
|
|
9084
|
+
}
|
|
9085
|
+
if (scan == nearestDesc.dom || scan.nextSibling || !scan.parentNode || !isElt(scan.parentNode))
|
|
9086
|
+
break;
|
|
9087
|
+
}
|
|
9088
|
+
}
|
|
9040
9089
|
}
|
|
9041
9090
|
else {
|
|
9042
9091
|
if (domSel instanceof view.dom.ownerDocument.defaultView.Selection && domSel.rangeCount > 1) {
|
|
@@ -9073,14 +9122,14 @@ function selectionToDOM(view, force = false) {
|
|
|
9073
9122
|
syncNodeSelection(view, sel);
|
|
9074
9123
|
if (!editorOwnsSelection(view))
|
|
9075
9124
|
return;
|
|
9076
|
-
//
|
|
9077
|
-
//
|
|
9078
|
-
|
|
9079
|
-
if (!force &&
|
|
9125
|
+
// Need to delay selection normalization during a native selection
|
|
9126
|
+
// drag on Chrome, or it will cause further dragging to glitch.
|
|
9127
|
+
let mouseDown = view.input.mouseDown;
|
|
9128
|
+
if (!force && chrome && mouseDown) {
|
|
9080
9129
|
let domSel = view.domSelectionRange(), curSel = view.domObserver.currentSelection;
|
|
9081
9130
|
if (domSel.anchorNode && curSel.anchorNode &&
|
|
9082
|
-
isEquivalentPosition(domSel.anchorNode, domSel.anchorOffset, curSel.anchorNode, curSel.anchorOffset)
|
|
9083
|
-
|
|
9131
|
+
isEquivalentPosition(domSel.anchorNode, domSel.anchorOffset, curSel.anchorNode, curSel.anchorOffset) &&
|
|
9132
|
+
mouseDown.delaySelUpdate()) {
|
|
9084
9133
|
view.domObserver.setCurSelection();
|
|
9085
9134
|
return;
|
|
9086
9135
|
}
|
|
@@ -9222,8 +9271,7 @@ function hasSelection(view) {
|
|
|
9222
9271
|
// Firefox will raise 'permission denied' errors when accessing
|
|
9223
9272
|
// properties of `sel.anchorNode` when it's in a generated CSS
|
|
9224
9273
|
// element.
|
|
9225
|
-
return view.dom
|
|
9226
|
-
(view.editable || view.dom.contains(sel.focusNode.nodeType == 3 ? sel.focusNode.parentNode : sel.focusNode));
|
|
9274
|
+
return contains(view.dom, sel.anchorNode) && (view.editable || contains(view.dom, sel.focusNode));
|
|
9227
9275
|
}
|
|
9228
9276
|
catch (_) {
|
|
9229
9277
|
return false;
|
|
@@ -9274,15 +9322,14 @@ function selectHorizontally(view, dir, mods) {
|
|
|
9274
9322
|
if (NodeSelection.isSelectable(node)) {
|
|
9275
9323
|
return apply(view, new NodeSelection(dir < 0 ? view.state.doc.resolve($head.pos - node.nodeSize) : $head));
|
|
9276
9324
|
}
|
|
9277
|
-
else
|
|
9325
|
+
else {
|
|
9278
9326
|
// Chrome and Safari will introduce extra pointless cursor
|
|
9279
|
-
// positions around inline uneditable nodes,
|
|
9280
|
-
//
|
|
9327
|
+
// positions around inline uneditable nodes (#937), and
|
|
9328
|
+
// Firefox will sometimes just plain refuse to move across
|
|
9329
|
+
// them (#1592), so in this situation we move the cursor
|
|
9330
|
+
// ourselves.
|
|
9281
9331
|
return apply(view, new TextSelection(view.state.doc.resolve(dir < 0 ? nodePos : nodePos + node.nodeSize)));
|
|
9282
9332
|
}
|
|
9283
|
-
else {
|
|
9284
|
-
return false;
|
|
9285
|
-
}
|
|
9286
9333
|
}
|
|
9287
9334
|
}
|
|
9288
9335
|
else if (sel instanceof NodeSelection && sel.node.isInline) {
|
|
@@ -9295,12 +9342,10 @@ function selectHorizontally(view, dir, mods) {
|
|
|
9295
9342
|
return false;
|
|
9296
9343
|
}
|
|
9297
9344
|
}
|
|
9298
|
-
function nodeLen(node) {
|
|
9299
|
-
return node.nodeType == 3 ? node.nodeValue.length : node.childNodes.length;
|
|
9300
|
-
}
|
|
9301
9345
|
function isIgnorable(dom, dir) {
|
|
9302
9346
|
let desc = dom.pmViewDesc;
|
|
9303
|
-
return desc
|
|
9347
|
+
return desc ? desc.size == 0 && (dir < 0 || dom.nextSibling || dom.nodeName != "BR")
|
|
9348
|
+
: isElt(dom) && dom.contentEditable == "false";
|
|
9304
9349
|
}
|
|
9305
9350
|
function skipIgnoredNodes(view, dir) {
|
|
9306
9351
|
return dir < 0 ? skipIgnoredNodesBefore(view) : skipIgnoredNodesAfter(view);
|
|
@@ -9316,25 +9361,23 @@ function skipIgnoredNodesBefore(view) {
|
|
|
9316
9361
|
// Gecko will do odd things when the selection is directly in front
|
|
9317
9362
|
// of a non-editable node, so in that case, move it into the next
|
|
9318
9363
|
// node if possible. Issue prosemirror/prosemirror#832.
|
|
9319
|
-
if (gecko && node
|
|
9364
|
+
if (gecko && isElt(node) && offset < nodeSize(node) && isIgnorable(node.childNodes[offset], -1))
|
|
9320
9365
|
force = true;
|
|
9321
9366
|
for (;;) {
|
|
9322
9367
|
if (offset > 0) {
|
|
9323
|
-
if (node
|
|
9368
|
+
if (!isElt(node))
|
|
9324
9369
|
break;
|
|
9370
|
+
let before = node.childNodes[offset - 1];
|
|
9371
|
+
if (isIgnorable(before, -1)) {
|
|
9372
|
+
moveNode = node;
|
|
9373
|
+
moveOffset = --offset;
|
|
9374
|
+
}
|
|
9375
|
+
else if (isText(before)) {
|
|
9376
|
+
node = before;
|
|
9377
|
+
offset = node.nodeValue.length;
|
|
9325
9378
|
}
|
|
9326
9379
|
else {
|
|
9327
|
-
|
|
9328
|
-
if (isIgnorable(before, -1)) {
|
|
9329
|
-
moveNode = node;
|
|
9330
|
-
moveOffset = --offset;
|
|
9331
|
-
}
|
|
9332
|
-
else if (before.nodeType == 3) {
|
|
9333
|
-
node = before;
|
|
9334
|
-
offset = node.nodeValue.length;
|
|
9335
|
-
}
|
|
9336
|
-
else
|
|
9337
|
-
break;
|
|
9380
|
+
break;
|
|
9338
9381
|
}
|
|
9339
9382
|
}
|
|
9340
9383
|
else if (isBlockNode(node)) {
|
|
@@ -9355,7 +9398,7 @@ function skipIgnoredNodesBefore(view) {
|
|
|
9355
9398
|
}
|
|
9356
9399
|
else {
|
|
9357
9400
|
node = prev;
|
|
9358
|
-
offset =
|
|
9401
|
+
offset = nodeSize(node);
|
|
9359
9402
|
}
|
|
9360
9403
|
}
|
|
9361
9404
|
}
|
|
@@ -9371,19 +9414,20 @@ function skipIgnoredNodesAfter(view) {
|
|
|
9371
9414
|
let node = sel.focusNode, offset = sel.focusOffset;
|
|
9372
9415
|
if (!node)
|
|
9373
9416
|
return;
|
|
9374
|
-
let len =
|
|
9417
|
+
let len = nodeSize(node);
|
|
9375
9418
|
let moveNode, moveOffset;
|
|
9376
9419
|
for (;;) {
|
|
9377
9420
|
if (offset < len) {
|
|
9378
|
-
if (node
|
|
9421
|
+
if (!isElt(node))
|
|
9379
9422
|
break;
|
|
9380
9423
|
let after = node.childNodes[offset];
|
|
9381
9424
|
if (isIgnorable(after, 1)) {
|
|
9382
9425
|
moveNode = node;
|
|
9383
9426
|
moveOffset = ++offset;
|
|
9384
9427
|
}
|
|
9385
|
-
else
|
|
9428
|
+
else {
|
|
9386
9429
|
break;
|
|
9430
|
+
}
|
|
9387
9431
|
}
|
|
9388
9432
|
else if (isBlockNode(node)) {
|
|
9389
9433
|
break;
|
|
@@ -9404,7 +9448,7 @@ function skipIgnoredNodesAfter(view) {
|
|
|
9404
9448
|
else {
|
|
9405
9449
|
node = next;
|
|
9406
9450
|
offset = 0;
|
|
9407
|
-
len =
|
|
9451
|
+
len = nodeSize(node);
|
|
9408
9452
|
}
|
|
9409
9453
|
}
|
|
9410
9454
|
}
|
|
@@ -9422,9 +9466,9 @@ function textNodeAfter(node, offset) {
|
|
|
9422
9466
|
}
|
|
9423
9467
|
while (node && offset < node.childNodes.length) {
|
|
9424
9468
|
let next = node.childNodes[offset];
|
|
9425
|
-
if (next
|
|
9469
|
+
if (isText(next))
|
|
9426
9470
|
return next;
|
|
9427
|
-
if (next
|
|
9471
|
+
if (isElt(next) && next.contentEditable == "false")
|
|
9428
9472
|
break;
|
|
9429
9473
|
node = next;
|
|
9430
9474
|
offset = 0;
|
|
@@ -9437,16 +9481,16 @@ function textNodeBefore(node, offset) {
|
|
|
9437
9481
|
}
|
|
9438
9482
|
while (node && offset) {
|
|
9439
9483
|
let next = node.childNodes[offset - 1];
|
|
9440
|
-
if (next
|
|
9484
|
+
if (isText(next))
|
|
9441
9485
|
return next;
|
|
9442
|
-
if (next
|
|
9486
|
+
if (isElt(next) && next.contentEditable == "false")
|
|
9443
9487
|
break;
|
|
9444
9488
|
node = next;
|
|
9445
9489
|
offset = node.childNodes.length;
|
|
9446
9490
|
}
|
|
9447
9491
|
}
|
|
9448
9492
|
function setSelFocus(view, node, offset) {
|
|
9449
|
-
if (node
|
|
9493
|
+
if (!isText(node)) {
|
|
9450
9494
|
let before, after;
|
|
9451
9495
|
if (after = textNodeAfter(node, offset)) {
|
|
9452
9496
|
node = after;
|
|
@@ -9556,8 +9600,8 @@ function safariDownArrowBug(view) {
|
|
|
9556
9600
|
if (!safari || view.state.selection.$head.parentOffset > 0)
|
|
9557
9601
|
return false;
|
|
9558
9602
|
let { focusNode, focusOffset } = view.domSelectionRange();
|
|
9559
|
-
if (focusNode && focusNode
|
|
9560
|
-
focusNode.firstChild && focusNode.firstChild.contentEditable == "false") {
|
|
9603
|
+
if (focusNode && isElt(focusNode) && focusOffset == 0 &&
|
|
9604
|
+
focusNode.firstChild && isElt(focusNode.firstChild) && focusNode.firstChild.contentEditable == "false") {
|
|
9561
9605
|
let child = focusNode.firstChild;
|
|
9562
9606
|
switchEditable(view, child, "true");
|
|
9563
9607
|
setTimeout(() => switchEditable(view, child, "false"), 20);
|
|
@@ -9628,7 +9672,7 @@ function serializeForClipboard(view, slice) {
|
|
|
9628
9672
|
let doc = detachedDoc(), wrap = doc.createElement("div");
|
|
9629
9673
|
wrap.appendChild(serializer.serializeFragment(content, { document: doc }));
|
|
9630
9674
|
let firstChild = wrap.firstChild, needsWrap, wrappers = 0;
|
|
9631
|
-
while (firstChild && firstChild
|
|
9675
|
+
while (firstChild && isElt(firstChild) && (needsWrap = wrapMap[firstChild.nodeName.toLowerCase()])) {
|
|
9632
9676
|
for (let i = needsWrap.length - 1; i >= 0; i--) {
|
|
9633
9677
|
let wrapper = doc.createElement(needsWrap[i]);
|
|
9634
9678
|
while (wrap.firstChild)
|
|
@@ -9638,7 +9682,7 @@ function serializeForClipboard(view, slice) {
|
|
|
9638
9682
|
}
|
|
9639
9683
|
firstChild = wrap.firstChild;
|
|
9640
9684
|
}
|
|
9641
|
-
if (firstChild && firstChild
|
|
9685
|
+
if (firstChild && isElt(firstChild))
|
|
9642
9686
|
firstChild.setAttribute("data-pm-slice", `${openStart} ${openEnd}${wrappers ? ` -${wrappers}` : ""} ${JSON.stringify(context)}`);
|
|
9643
9687
|
let text = view.someProp("clipboardTextSerializer", f => f(slice, view)) ||
|
|
9644
9688
|
slice.content.textBetween(0, slice.content.size, "\n\n");
|
|
@@ -9684,7 +9728,7 @@ function parseFromClipboard(view, text, html, plainText, $context) {
|
|
|
9684
9728
|
if (sliceData && sliceData[3])
|
|
9685
9729
|
for (let i = +sliceData[3]; i > 0; i--) {
|
|
9686
9730
|
let child = dom.firstChild;
|
|
9687
|
-
while (child && child
|
|
9731
|
+
while (child && !isElt(child))
|
|
9688
9732
|
child = child.nextSibling;
|
|
9689
9733
|
if (!child)
|
|
9690
9734
|
break;
|
|
@@ -9813,9 +9857,8 @@ const wrapMap = {
|
|
|
9813
9857
|
td: ["table", "tbody", "tr"],
|
|
9814
9858
|
th: ["table", "tbody", "tr"]
|
|
9815
9859
|
};
|
|
9816
|
-
let _detachedDoc = null;
|
|
9817
9860
|
function detachedDoc() {
|
|
9818
|
-
return
|
|
9861
|
+
return document.implementation.createHTMLDocument("title");
|
|
9819
9862
|
}
|
|
9820
9863
|
let _policy = null;
|
|
9821
9864
|
function maybeWrapTrusted(html) {
|
|
@@ -9825,15 +9868,21 @@ function maybeWrapTrusted(html) {
|
|
|
9825
9868
|
// With the require-trusted-types-for CSP, Chrome will block
|
|
9826
9869
|
// innerHTML, even on a detached document. This wraps the string in
|
|
9827
9870
|
// a way that makes the browser allow us to use its parser again.
|
|
9828
|
-
if (!_policy)
|
|
9829
|
-
_policy = trustedTypes.defaultPolicy
|
|
9871
|
+
if (!_policy) {
|
|
9872
|
+
if (_policy = trustedTypes.defaultPolicy)
|
|
9873
|
+
try {
|
|
9874
|
+
return _policy.createHTML(html);
|
|
9875
|
+
}
|
|
9876
|
+
catch (_a) { }
|
|
9877
|
+
_policy = trustedTypes.createPolicy("ProseMirrorClipboard", { createHTML: (s) => s });
|
|
9878
|
+
}
|
|
9830
9879
|
return _policy.createHTML(html);
|
|
9831
9880
|
}
|
|
9832
9881
|
function readHTML(html) {
|
|
9833
9882
|
let metas = /^(\s*<meta [^>]*>)*/.exec(html);
|
|
9834
9883
|
if (metas)
|
|
9835
9884
|
html = html.slice(metas[0].length);
|
|
9836
|
-
let
|
|
9885
|
+
let doc = detachedDoc(), elt = doc.body;
|
|
9837
9886
|
let firstTag = /<([a-z][^>\s]+)/i.exec(html), wrap;
|
|
9838
9887
|
if (wrap = firstTag && wrapMap[firstTag[1].toLowerCase()])
|
|
9839
9888
|
html = wrap.map(n => "<" + n + ">").join("") + html + wrap.map(n => "</" + n + ">").reverse().join("");
|
|
@@ -9841,6 +9890,18 @@ function readHTML(html) {
|
|
|
9841
9890
|
if (wrap)
|
|
9842
9891
|
for (let i = 0; i < wrap.length; i++)
|
|
9843
9892
|
elt = elt.querySelector(wrap[i]) || elt;
|
|
9893
|
+
// Inline styles defined in the pasted content, so that parse rules pick them up
|
|
9894
|
+
for (let i = 0; i < doc.styleSheets.length; i++) {
|
|
9895
|
+
let style = doc.styleSheets[i];
|
|
9896
|
+
for (let j = 0; j < style.rules.length; j++) {
|
|
9897
|
+
let rule = style.rules[j];
|
|
9898
|
+
if (rule instanceof CSSStyleRule) {
|
|
9899
|
+
let matches = elt.querySelectorAll(rule.selectorText);
|
|
9900
|
+
for (let k = 0; k < matches.length; k++)
|
|
9901
|
+
matches[k].style.cssText += rule.style.cssText;
|
|
9902
|
+
}
|
|
9903
|
+
}
|
|
9904
|
+
}
|
|
9844
9905
|
return elt;
|
|
9845
9906
|
}
|
|
9846
9907
|
// Webkit browsers do some hard-to-predict replacement of regular
|
|
@@ -9871,7 +9932,12 @@ function addContext(slice, context) {
|
|
|
9871
9932
|
let type = schema.nodes[array[i]];
|
|
9872
9933
|
if (!type || type.hasRequiredAttrs())
|
|
9873
9934
|
break;
|
|
9874
|
-
|
|
9935
|
+
try {
|
|
9936
|
+
content = Fragment.from(type.create(array[i + 1], content));
|
|
9937
|
+
}
|
|
9938
|
+
catch (e) {
|
|
9939
|
+
break;
|
|
9940
|
+
}
|
|
9875
9941
|
openStart++;
|
|
9876
9942
|
openEnd++;
|
|
9877
9943
|
}
|
|
@@ -9932,6 +9998,8 @@ function setSelectionOrigin(view, origin) {
|
|
|
9932
9998
|
view.input.lastSelectionTime = Date.now();
|
|
9933
9999
|
}
|
|
9934
10000
|
function destroyInput(view) {
|
|
10001
|
+
if (view.input.mouseDown)
|
|
10002
|
+
view.input.mouseDown.done();
|
|
9935
10003
|
view.domObserver.stop();
|
|
9936
10004
|
for (let type in view.input.eventHandlers)
|
|
9937
10005
|
view.dom.removeEventListener(type, view.input.eventHandlers[type]);
|
|
@@ -9970,7 +10038,7 @@ function dispatchEvent(view, event) {
|
|
|
9970
10038
|
editHandlers.keydown = (view, _event) => {
|
|
9971
10039
|
let event = _event;
|
|
9972
10040
|
view.input.shiftKey = event.keyCode == 16 || event.shiftKey;
|
|
9973
|
-
if (inOrNearComposition(view
|
|
10041
|
+
if (inOrNearComposition(view))
|
|
9974
10042
|
return;
|
|
9975
10043
|
view.input.lastKeyCode = event.keyCode;
|
|
9976
10044
|
view.input.lastKeyCodeTime = Date.now();
|
|
@@ -10008,7 +10076,7 @@ editHandlers.keyup = (view, event) => {
|
|
|
10008
10076
|
};
|
|
10009
10077
|
editHandlers.keypress = (view, _event) => {
|
|
10010
10078
|
let event = _event;
|
|
10011
|
-
if (inOrNearComposition(view
|
|
10079
|
+
if (inOrNearComposition(view) || !event.charCode ||
|
|
10012
10080
|
event.ctrlKey && !event.altKey || mac$4 && event.metaKey)
|
|
10013
10081
|
return;
|
|
10014
10082
|
if (view.someProp("handleKeyPress", f => f(view, event))) {
|
|
@@ -10102,26 +10170,28 @@ function handleTripleClick$1(view, pos, inside, event) {
|
|
|
10102
10170
|
function defaultTripleClick(view, inside, event) {
|
|
10103
10171
|
if (event.button != 0)
|
|
10104
10172
|
return false;
|
|
10105
|
-
let doc = view.state.doc;
|
|
10106
|
-
if (
|
|
10107
|
-
if (doc.inlineContent) {
|
|
10108
|
-
updateSelection(view, TextSelection.create(doc, 0, doc.content.size));
|
|
10109
|
-
return true;
|
|
10110
|
-
}
|
|
10173
|
+
let selection = selectionForTripleClick(view, inside, true), doc = view.state.doc;
|
|
10174
|
+
if (!selection)
|
|
10111
10175
|
return false;
|
|
10112
|
-
|
|
10176
|
+
updateSelection(view, selection);
|
|
10177
|
+
if (selection instanceof TextSelection && doc.eq(view.state.doc))
|
|
10178
|
+
view.input.mouseDown = new TripleClickDrag(view, selection);
|
|
10179
|
+
return true;
|
|
10180
|
+
}
|
|
10181
|
+
function selectionForTripleClick(view, inside, selectNodes) {
|
|
10182
|
+
let doc = view.state.doc;
|
|
10183
|
+
if (inside == -1)
|
|
10184
|
+
return doc.inlineContent ? TextSelection.create(doc, 0, doc.content.size) : null;
|
|
10113
10185
|
let $pos = doc.resolve(inside);
|
|
10114
10186
|
for (let i = $pos.depth + 1; i > 0; i--) {
|
|
10115
10187
|
let node = i > $pos.depth ? $pos.nodeAfter : $pos.node(i);
|
|
10116
10188
|
let nodePos = $pos.before(i);
|
|
10117
10189
|
if (node.inlineContent)
|
|
10118
|
-
|
|
10119
|
-
else if (NodeSelection.isSelectable(node))
|
|
10120
|
-
|
|
10121
|
-
else
|
|
10122
|
-
continue;
|
|
10123
|
-
return true;
|
|
10190
|
+
return TextSelection.create(doc, nodePos + 1, nodePos + 1 + node.content.size);
|
|
10191
|
+
else if (selectNodes && NodeSelection.isSelectable(node))
|
|
10192
|
+
return NodeSelection.create(doc, nodePos);
|
|
10124
10193
|
}
|
|
10194
|
+
return null;
|
|
10125
10195
|
}
|
|
10126
10196
|
function forceDOMFlush(view) {
|
|
10127
10197
|
return endComposition(view);
|
|
@@ -10140,13 +10210,13 @@ handlers.mousedown = (view, _event) => {
|
|
|
10140
10210
|
type = "tripleClick";
|
|
10141
10211
|
}
|
|
10142
10212
|
view.input.lastClick = { time: now, x: event.clientX, y: event.clientY, type, button: event.button };
|
|
10213
|
+
if (view.input.mouseDown)
|
|
10214
|
+
view.input.mouseDown.done();
|
|
10143
10215
|
let pos = view.posAtCoords(eventCoords(event));
|
|
10144
10216
|
if (!pos)
|
|
10145
10217
|
return;
|
|
10146
10218
|
if (type == "singleClick") {
|
|
10147
|
-
|
|
10148
|
-
view.input.mouseDown.done();
|
|
10149
|
-
view.input.mouseDown = new MouseDown(view, pos, event, !!flushed);
|
|
10219
|
+
view.input.mouseDown = new LeftMouseDown(view, pos, event, !!flushed);
|
|
10150
10220
|
}
|
|
10151
10221
|
else if ((type == "doubleClick" ? handleDoubleClick : handleTripleClick$1)(view, pos.pos, pos.inside, event)) {
|
|
10152
10222
|
event.preventDefault();
|
|
@@ -10156,13 +10226,34 @@ handlers.mousedown = (view, _event) => {
|
|
|
10156
10226
|
}
|
|
10157
10227
|
};
|
|
10158
10228
|
class MouseDown {
|
|
10159
|
-
constructor(view
|
|
10229
|
+
constructor(view) {
|
|
10160
10230
|
this.view = view;
|
|
10231
|
+
this.mightDrag = null;
|
|
10232
|
+
view.root.addEventListener("mouseup", this.up = this.up.bind(this));
|
|
10233
|
+
view.root.addEventListener("mousemove", this.move = this.move.bind(this));
|
|
10234
|
+
}
|
|
10235
|
+
up(event) {
|
|
10236
|
+
this.done();
|
|
10237
|
+
}
|
|
10238
|
+
move(event) {
|
|
10239
|
+
if (event.buttons == 0)
|
|
10240
|
+
this.done();
|
|
10241
|
+
}
|
|
10242
|
+
done() {
|
|
10243
|
+
this.view.root.removeEventListener("mouseup", this.up);
|
|
10244
|
+
this.view.root.removeEventListener("mousemove", this.move);
|
|
10245
|
+
if (this.view.input.mouseDown == this)
|
|
10246
|
+
this.view.input.mouseDown = null;
|
|
10247
|
+
}
|
|
10248
|
+
delaySelUpdate() { return false; }
|
|
10249
|
+
}
|
|
10250
|
+
class LeftMouseDown extends MouseDown {
|
|
10251
|
+
constructor(view, pos, event, flushed) {
|
|
10252
|
+
super(view);
|
|
10161
10253
|
this.pos = pos;
|
|
10162
10254
|
this.event = event;
|
|
10163
10255
|
this.flushed = flushed;
|
|
10164
10256
|
this.delayedSelectionSync = false;
|
|
10165
|
-
this.mightDrag = null;
|
|
10166
10257
|
this.startDoc = view.state.doc;
|
|
10167
10258
|
this.selectNode = !!event[selectNodeModifier];
|
|
10168
10259
|
this.allowDefault = event.shiftKey;
|
|
@@ -10178,7 +10269,7 @@ class MouseDown {
|
|
|
10178
10269
|
}
|
|
10179
10270
|
const target = flushed ? null : event.target;
|
|
10180
10271
|
const targetDesc = target ? view.docView.nearestDesc(target, true) : null;
|
|
10181
|
-
this.target = targetDesc && targetDesc.nodeDOM
|
|
10272
|
+
this.target = targetDesc && isElt(targetDesc.nodeDOM) ? targetDesc.nodeDOM : null;
|
|
10182
10273
|
let { selection } = view.state;
|
|
10183
10274
|
if (event.button == 0 &&
|
|
10184
10275
|
(targetNode.type.spec.draggable && targetNode.type.spec.selectable !== false ||
|
|
@@ -10200,13 +10291,10 @@ class MouseDown {
|
|
|
10200
10291
|
}, 20);
|
|
10201
10292
|
this.view.domObserver.start();
|
|
10202
10293
|
}
|
|
10203
|
-
view.root.addEventListener("mouseup", this.up = this.up.bind(this));
|
|
10204
|
-
view.root.addEventListener("mousemove", this.move = this.move.bind(this));
|
|
10205
10294
|
setSelectionOrigin(view, "pointer");
|
|
10206
10295
|
}
|
|
10207
10296
|
done() {
|
|
10208
|
-
|
|
10209
|
-
this.view.root.removeEventListener("mousemove", this.move);
|
|
10297
|
+
super.done();
|
|
10210
10298
|
if (this.mightDrag && this.target) {
|
|
10211
10299
|
this.view.domObserver.stop();
|
|
10212
10300
|
if (this.mightDrag.addAttr)
|
|
@@ -10216,8 +10304,10 @@ class MouseDown {
|
|
|
10216
10304
|
this.view.domObserver.start();
|
|
10217
10305
|
}
|
|
10218
10306
|
if (this.delayedSelectionSync)
|
|
10219
|
-
setTimeout(() =>
|
|
10220
|
-
|
|
10307
|
+
setTimeout(() => {
|
|
10308
|
+
if (!this.view.isDestroyed)
|
|
10309
|
+
selectionToDOM(this.view);
|
|
10310
|
+
});
|
|
10221
10311
|
}
|
|
10222
10312
|
up(event) {
|
|
10223
10313
|
this.done();
|
|
@@ -10256,14 +10346,41 @@ class MouseDown {
|
|
|
10256
10346
|
move(event) {
|
|
10257
10347
|
this.updateAllowDefault(event);
|
|
10258
10348
|
setSelectionOrigin(this.view, "pointer");
|
|
10259
|
-
|
|
10260
|
-
this.done();
|
|
10349
|
+
super.move(event);
|
|
10261
10350
|
}
|
|
10262
10351
|
updateAllowDefault(event) {
|
|
10263
10352
|
if (!this.allowDefault && (Math.abs(this.event.x - event.clientX) > 4 ||
|
|
10264
10353
|
Math.abs(this.event.y - event.clientY) > 4))
|
|
10265
10354
|
this.allowDefault = true;
|
|
10266
10355
|
}
|
|
10356
|
+
delaySelUpdate() {
|
|
10357
|
+
if (!this.allowDefault)
|
|
10358
|
+
return false;
|
|
10359
|
+
this.delayedSelectionSync = true;
|
|
10360
|
+
return true;
|
|
10361
|
+
}
|
|
10362
|
+
}
|
|
10363
|
+
class TripleClickDrag extends MouseDown {
|
|
10364
|
+
constructor(view, startSelection) {
|
|
10365
|
+
super(view);
|
|
10366
|
+
this.startSelection = startSelection;
|
|
10367
|
+
this.startDoc = view.state.doc;
|
|
10368
|
+
}
|
|
10369
|
+
move(event) {
|
|
10370
|
+
if (event.buttons == 0 || this.view.isDestroyed || !this.view.state.doc.eq(this.startDoc)) {
|
|
10371
|
+
this.done();
|
|
10372
|
+
return;
|
|
10373
|
+
}
|
|
10374
|
+
event.preventDefault();
|
|
10375
|
+
setSelectionOrigin(this.view, "pointer");
|
|
10376
|
+
let pos = this.view.posAtCoords(eventCoords(event));
|
|
10377
|
+
let target = pos && selectionForTripleClick(this.view, pos.inside, false);
|
|
10378
|
+
if (!target)
|
|
10379
|
+
return;
|
|
10380
|
+
let { doc } = this.view.state, start = this.startSelection;
|
|
10381
|
+
let [anchor, head] = target.from < start.from ? [start.to, target.from] : [start.from, target.to];
|
|
10382
|
+
updateSelection(this.view, TextSelection.create(doc, anchor, head));
|
|
10383
|
+
}
|
|
10267
10384
|
}
|
|
10268
10385
|
handlers.touchstart = view => {
|
|
10269
10386
|
view.input.lastTouch = Date.now();
|
|
@@ -10288,7 +10405,7 @@ function inOrNearComposition(view, event) {
|
|
|
10288
10405
|
// This guards against the case where compositionend is triggered without the keyboard
|
|
10289
10406
|
// (e.g. character confirmation may be done with the mouse), and keydown is triggered
|
|
10290
10407
|
// afterwards- we wouldn't want to ignore the keydown event in this case.
|
|
10291
|
-
if (safari && Math.abs(
|
|
10408
|
+
if (safari && Math.abs(Date.now() - view.input.compositionEndedAt) < 500) {
|
|
10292
10409
|
view.input.compositionEndedAt = -2e8;
|
|
10293
10410
|
return true;
|
|
10294
10411
|
}
|
|
@@ -10300,7 +10417,7 @@ editHandlers.compositionstart = editHandlers.compositionupdate = view => {
|
|
|
10300
10417
|
if (!view.composing) {
|
|
10301
10418
|
view.domObserver.flush();
|
|
10302
10419
|
let { state } = view, $pos = state.selection.$to;
|
|
10303
|
-
if (state.selection instanceof TextSelection &&
|
|
10420
|
+
if (state.selection instanceof TextSelection && state.selection.empty &&
|
|
10304
10421
|
(state.storedMarks ||
|
|
10305
10422
|
(!$pos.textOffset && $pos.parentOffset && $pos.nodeBefore.marks.some(m => m.type.spec.inclusive === false)) ||
|
|
10306
10423
|
chrome && windows$1 && selectionBeforeUneditable(view))) { // Issue #1500
|
|
@@ -10316,11 +10433,11 @@ editHandlers.compositionstart = editHandlers.compositionupdate = view => {
|
|
|
10316
10433
|
// inside if necessary.
|
|
10317
10434
|
if (gecko && state.selection.empty && $pos.parentOffset && !$pos.textOffset && $pos.nodeBefore.marks.length) {
|
|
10318
10435
|
let sel = view.domSelectionRange();
|
|
10319
|
-
for (let node = sel.focusNode, offset = sel.focusOffset; node && node
|
|
10436
|
+
for (let node = sel.focusNode, offset = sel.focusOffset; node && isElt(node) && offset != 0;) {
|
|
10320
10437
|
let before = offset < 0 ? node.lastChild : node.childNodes[offset - 1];
|
|
10321
10438
|
if (!before)
|
|
10322
10439
|
break;
|
|
10323
|
-
if (before
|
|
10440
|
+
if (isText(before)) {
|
|
10324
10441
|
let sel = view.domSelection();
|
|
10325
10442
|
if (sel)
|
|
10326
10443
|
sel.collapse(before, before.nodeValue.length);
|
|
@@ -10339,15 +10456,15 @@ editHandlers.compositionstart = editHandlers.compositionupdate = view => {
|
|
|
10339
10456
|
};
|
|
10340
10457
|
function selectionBeforeUneditable(view) {
|
|
10341
10458
|
let { focusNode, focusOffset } = view.domSelectionRange();
|
|
10342
|
-
if (!focusNode || focusNode
|
|
10459
|
+
if (!focusNode || !isElt(focusNode) || focusOffset >= focusNode.childNodes.length)
|
|
10343
10460
|
return false;
|
|
10344
10461
|
let next = focusNode.childNodes[focusOffset];
|
|
10345
|
-
return next
|
|
10462
|
+
return isElt(next) && next.contentEditable == "false";
|
|
10346
10463
|
}
|
|
10347
10464
|
editHandlers.compositionend = (view, event) => {
|
|
10348
10465
|
if (view.composing) {
|
|
10349
10466
|
view.input.composing = false;
|
|
10350
|
-
view.input.compositionEndedAt =
|
|
10467
|
+
view.input.compositionEndedAt = Date.now();
|
|
10351
10468
|
view.input.compositionPendingChanges = view.domObserver.pendingRecords().length ? view.input.compositionID : 0;
|
|
10352
10469
|
view.input.compositionNode = null;
|
|
10353
10470
|
if (view.input.badSafariComposition)
|
|
@@ -10366,7 +10483,7 @@ function scheduleComposeEnd(view, delay) {
|
|
|
10366
10483
|
function clearComposition(view) {
|
|
10367
10484
|
if (view.composing) {
|
|
10368
10485
|
view.input.composing = false;
|
|
10369
|
-
view.input.compositionEndedAt =
|
|
10486
|
+
view.input.compositionEndedAt = Date.now();
|
|
10370
10487
|
}
|
|
10371
10488
|
while (view.input.compositionNodes.length > 0)
|
|
10372
10489
|
view.input.compositionNodes.pop().markParentsDirty();
|
|
@@ -10392,11 +10509,6 @@ function findCompositionNode(view) {
|
|
|
10392
10509
|
}
|
|
10393
10510
|
return textBefore || textAfter;
|
|
10394
10511
|
}
|
|
10395
|
-
function timestampFromCustomEvent() {
|
|
10396
|
-
let event = document.createEvent("Event");
|
|
10397
|
-
event.initEvent("event", true, true);
|
|
10398
|
-
return event.timeStamp;
|
|
10399
|
-
}
|
|
10400
10512
|
/**
|
|
10401
10513
|
@internal
|
|
10402
10514
|
*/
|
|
@@ -10549,7 +10661,7 @@ handlers.dragstart = (view, _event) => {
|
|
|
10549
10661
|
else if (mouseDown && mouseDown.mightDrag) {
|
|
10550
10662
|
node = NodeSelection.create(view.state.doc, mouseDown.mightDrag.pos);
|
|
10551
10663
|
}
|
|
10552
|
-
else if (event.target && event.target
|
|
10664
|
+
else if (event.target && isElt(event.target)) {
|
|
10553
10665
|
let desc = view.docView.nearestDesc(event.target, true);
|
|
10554
10666
|
if (desc && desc.node.type.spec.draggable && desc != view.docView)
|
|
10555
10667
|
node = NodeSelection.create(view.state.doc, desc.posBefore);
|
|
@@ -10666,8 +10778,8 @@ handlers.beforeinput = (view, _event) => {
|
|
|
10666
10778
|
// We should probably do more with beforeinput events, but support
|
|
10667
10779
|
// is so spotty that I'm still waiting to see where they are going.
|
|
10668
10780
|
// Very specific hack to deal with backspace sometimes failing on
|
|
10669
|
-
// Chrome Android when after an uneditable node.
|
|
10670
|
-
if (
|
|
10781
|
+
// Chrome and Firefox Android when after an uneditable node.
|
|
10782
|
+
if (android && event.inputType == "deleteContentBackward") {
|
|
10671
10783
|
view.domObserver.flushSoon();
|
|
10672
10784
|
let { domChangeCount } = view.input;
|
|
10673
10785
|
setTimeout(() => {
|
|
@@ -11520,7 +11632,7 @@ class DOMObserver {
|
|
|
11520
11632
|
let desc = container && this.view.docView.nearestDesc(container);
|
|
11521
11633
|
if (desc && desc.ignoreMutation({
|
|
11522
11634
|
type: "selection",
|
|
11523
|
-
target: container
|
|
11635
|
+
target: isText(container) ? container.parentNode : container
|
|
11524
11636
|
})) {
|
|
11525
11637
|
this.setCurSelection();
|
|
11526
11638
|
return true;
|
|
@@ -11553,13 +11665,16 @@ class DOMObserver {
|
|
|
11553
11665
|
}
|
|
11554
11666
|
}
|
|
11555
11667
|
}
|
|
11556
|
-
if (added.some(n => n.nodeName == "BR") &&
|
|
11668
|
+
if (added.some(n => n.nodeName == "BR") &&
|
|
11669
|
+
(view.input.lastKeyCode == 8 || view.input.lastKeyCode == 46 ||
|
|
11670
|
+
chrome && (view.composing || view.input.compositionEndedAt > Date.now() - 50) &&
|
|
11671
|
+
mutations.some(m => m.type == "childList" && m.removedNodes.length))) {
|
|
11557
11672
|
// Browsers sometimes insert a bogus break node if you
|
|
11558
11673
|
// backspace out the last bit of text before an inline-flex node (#1552)
|
|
11559
11674
|
for (let node of added)
|
|
11560
11675
|
if (node.nodeName == "BR" && node.parentNode) {
|
|
11561
11676
|
let after = node.nextSibling;
|
|
11562
|
-
while (after && after
|
|
11677
|
+
while (after && isElt(after)) {
|
|
11563
11678
|
if (after.contentEditable == "false") {
|
|
11564
11679
|
node.parentNode.removeChild(node);
|
|
11565
11680
|
break;
|
|
@@ -11632,7 +11747,7 @@ class DOMObserver {
|
|
|
11632
11747
|
for (let i = 0; i < mut.addedNodes.length; i++) {
|
|
11633
11748
|
let node = mut.addedNodes[i];
|
|
11634
11749
|
added.push(node);
|
|
11635
|
-
if (node
|
|
11750
|
+
if (isText(node))
|
|
11636
11751
|
this.lastChangedTextNode = node;
|
|
11637
11752
|
}
|
|
11638
11753
|
if (desc.contentDOM && desc.contentDOM != desc.dom && !desc.contentDOM.contains(mut.target))
|
|
@@ -11747,8 +11862,7 @@ function fixUpBadSafariComposition(view, addedNodes) {
|
|
|
11747
11862
|
let parent = nextCell;
|
|
11748
11863
|
for (;;) {
|
|
11749
11864
|
let first = parent.firstChild;
|
|
11750
|
-
if (!first || first
|
|
11751
|
-
/^(BR|IMG)$/.test(first.nodeName))
|
|
11865
|
+
if (!first || !isElt(first) || first.contentEditable == "false" || /^(BR|IMG)$/.test(first.nodeName))
|
|
11752
11866
|
break;
|
|
11753
11867
|
parent = first;
|
|
11754
11868
|
}
|
|
@@ -11768,12 +11882,12 @@ function fixUpBadSafariComposition(view, addedNodes) {
|
|
|
11768
11882
|
// that the DOM represents. If any changes came in in the meantime,
|
|
11769
11883
|
// the modification is mapped over those before it is applied, in
|
|
11770
11884
|
// readDOMChange.
|
|
11771
|
-
function parseBetween(view, from_, to_) {
|
|
11885
|
+
function parseBetween(view, from_, to_, addedNodes) {
|
|
11772
11886
|
let { node: parent, fromOffset, toOffset, from, to } = view.docView.parseRange(from_, to_);
|
|
11773
11887
|
let domSel = view.domSelectionRange();
|
|
11774
11888
|
let find;
|
|
11775
11889
|
let anchor = domSel.anchorNode;
|
|
11776
|
-
if (anchor && view.dom
|
|
11890
|
+
if (anchor && contains(view.dom, anchor)) {
|
|
11777
11891
|
find = [{ node: anchor, offset: domSel.anchorOffset }];
|
|
11778
11892
|
if (!selectionCollapsed(domSel))
|
|
11779
11893
|
find.push({ node: domSel.focusNode, offset: domSel.focusOffset });
|
|
@@ -11802,7 +11916,7 @@ function parseBetween(view, from_, to_) {
|
|
|
11802
11916
|
to: toOffset,
|
|
11803
11917
|
preserveWhitespace: $from.parent.type.whitespace == "pre" ? "full" : true,
|
|
11804
11918
|
findPositions: find,
|
|
11805
|
-
ruleFromNode,
|
|
11919
|
+
ruleFromNode: ruleFromNode(addedNodes),
|
|
11806
11920
|
context: $from
|
|
11807
11921
|
});
|
|
11808
11922
|
if (find && find[0].pos != null) {
|
|
@@ -11813,10 +11927,10 @@ function parseBetween(view, from_, to_) {
|
|
|
11813
11927
|
}
|
|
11814
11928
|
return { doc, sel, from, to };
|
|
11815
11929
|
}
|
|
11816
|
-
|
|
11930
|
+
const ruleFromNode = (added) => (dom) => {
|
|
11817
11931
|
let desc = dom.pmViewDesc;
|
|
11818
11932
|
if (desc) {
|
|
11819
|
-
return desc.parseRule();
|
|
11933
|
+
return desc.parseRule(added);
|
|
11820
11934
|
}
|
|
11821
11935
|
else if (dom.nodeName == "BR" && dom.parentNode) {
|
|
11822
11936
|
// Safari replaces the list item or table cell with a BR
|
|
@@ -11835,7 +11949,7 @@ function ruleFromNode(dom) {
|
|
|
11835
11949
|
return { ignore: true };
|
|
11836
11950
|
}
|
|
11837
11951
|
return null;
|
|
11838
|
-
}
|
|
11952
|
+
};
|
|
11839
11953
|
const isInline = /^(a|abbr|acronym|b|bd[io]|big|br|button|cite|code|data(list)?|del|dfn|em|i|img|ins|kbd|label|map|mark|meter|output|q|ruby|s|samp|small|span|strong|su[bp]|time|u|tt|var)$/i;
|
|
11840
11954
|
function readDOMChange(view, from, to, typeOver, addedNodes) {
|
|
11841
11955
|
let compositionID = view.input.compositionPendingChanges || (view.composing ? view.input.compositionID : 0);
|
|
@@ -11864,7 +11978,7 @@ function readDOMChange(view, from, to, typeOver, addedNodes) {
|
|
|
11864
11978
|
from = $before.before(shared + 1);
|
|
11865
11979
|
to = view.state.doc.resolve(to).after(shared + 1);
|
|
11866
11980
|
let sel = view.state.selection;
|
|
11867
|
-
let parse = parseBetween(view, from, to);
|
|
11981
|
+
let parse = parseBetween(view, from, to, addedNodes);
|
|
11868
11982
|
let doc = view.state.doc, compare = doc.slice(parse.from, parse.to);
|
|
11869
11983
|
let preferredPos, preferredSide;
|
|
11870
11984
|
// Prefer anchoring to end when Backspace is pressed
|
|
@@ -11881,7 +11995,7 @@ function readDOMChange(view, from, to, typeOver, addedNodes) {
|
|
|
11881
11995
|
if (change)
|
|
11882
11996
|
view.input.domChangeCount++;
|
|
11883
11997
|
if ((ios && view.input.lastIOSEnter > Date.now() - 225 || android) &&
|
|
11884
|
-
addedNodes.some(n => n
|
|
11998
|
+
addedNodes.some(n => isElt(n) && !isInline.test(n.nodeName)) &&
|
|
11885
11999
|
(!change || change.endA >= change.endB) &&
|
|
11886
12000
|
view.someProp("handleKeyDown", f => f(view, keyEvent(13, "Enter")))) {
|
|
11887
12001
|
view.input.lastIOSEnter = 0;
|
|
@@ -11939,9 +12053,7 @@ function readDOMChange(view, from, to, typeOver, addedNodes) {
|
|
|
11939
12053
|
// as being an iOS enter press), just dispatch an Enter key instead.
|
|
11940
12054
|
if (((ios && view.input.lastIOSEnter > Date.now() - 225 &&
|
|
11941
12055
|
(!inlineChange || addedNodes.some(n => n.nodeName == "DIV" || n.nodeName == "P"))) ||
|
|
11942
|
-
(!inlineChange && $from.pos
|
|
11943
|
-
(!$from.sameParent($to) || !$from.parent.inlineContent) &&
|
|
11944
|
-
$from.pos < $to.pos && !/\S/.test(parse.doc.textBetween($from.pos, $to.pos, "", "")))) &&
|
|
12056
|
+
(!inlineChange && looksLikeEnter(parse.doc, $from.pos, $to.pos))) &&
|
|
11945
12057
|
view.someProp("handleKeyDown", f => f(view, keyEvent(13, "Enter")))) {
|
|
11946
12058
|
view.input.lastIOSEnter = 0;
|
|
11947
12059
|
return;
|
|
@@ -12092,6 +12204,16 @@ function looksLikeBackspace(old, start, end, $newStart, $newEnd) {
|
|
|
12092
12204
|
// The fragments after the join point must match
|
|
12093
12205
|
return $newStart.parent.content.cut($newStart.parentOffset).eq($next.parent.content);
|
|
12094
12206
|
}
|
|
12207
|
+
function looksLikeEnter(content, from, to) {
|
|
12208
|
+
let newTextlines = 0, newLeaves = 0;
|
|
12209
|
+
content.nodesBetween(from, to, (node, pos) => {
|
|
12210
|
+
if (node.isTextblock && pos >= from && pos < to)
|
|
12211
|
+
newTextlines++;
|
|
12212
|
+
else if (node.isText ? /\S/.test(node.text.slice(Math.max(0, from - pos), Math.min(node.nodeSize, to - pos))) : node.isLeaf)
|
|
12213
|
+
newLeaves++;
|
|
12214
|
+
});
|
|
12215
|
+
return newLeaves == 0 && newTextlines == 1;
|
|
12216
|
+
}
|
|
12095
12217
|
function skipClosingAndOpening($pos, fromEnd, mayOpen) {
|
|
12096
12218
|
let depth = $pos.depth, end = fromEnd ? $pos.end() : $pos.pos;
|
|
12097
12219
|
while (depth > 0 && (fromEnd || $pos.indexAfter(depth) == $pos.node(depth).childCount)) {
|
|
@@ -12109,38 +12231,28 @@ function skipClosingAndOpening($pos, fromEnd, mayOpen) {
|
|
|
12109
12231
|
return end;
|
|
12110
12232
|
}
|
|
12111
12233
|
function findDiff(a, b, pos, preferredPos, preferredSide) {
|
|
12112
|
-
let start = a.findDiffStart(b, pos);
|
|
12234
|
+
let start = a.findDiffStart(b, pos), lenA = pos + a.size, lenB = pos + b.size;
|
|
12113
12235
|
if (start == null)
|
|
12114
12236
|
return null;
|
|
12115
|
-
let { a: endA, b: endB } = a.findDiffEnd(b,
|
|
12237
|
+
let { a: endA, b: endB } = a.findDiffEnd(b, lenA, lenB);
|
|
12116
12238
|
if (preferredSide == "end") {
|
|
12117
12239
|
let adjust = Math.max(0, start - Math.min(endA, endB));
|
|
12118
12240
|
preferredPos -= endA + adjust - start;
|
|
12119
12241
|
}
|
|
12120
|
-
if (endA < start &&
|
|
12242
|
+
if (endA < start && lenA < lenB) {
|
|
12121
12243
|
let move = preferredPos <= start && preferredPos >= endA ? start - preferredPos : 0;
|
|
12122
12244
|
start -= move;
|
|
12123
|
-
if (start && start < b.size && isSurrogatePair(b.textBetween(start - 1, start + 1)))
|
|
12124
|
-
start += move ? 1 : -1;
|
|
12125
12245
|
endB = start + (endB - endA);
|
|
12126
12246
|
endA = start;
|
|
12127
12247
|
}
|
|
12128
12248
|
else if (endB < start) {
|
|
12129
12249
|
let move = preferredPos <= start && preferredPos >= endB ? start - preferredPos : 0;
|
|
12130
12250
|
start -= move;
|
|
12131
|
-
if (start && start < a.size && isSurrogatePair(a.textBetween(start - 1, start + 1)))
|
|
12132
|
-
start += move ? 1 : -1;
|
|
12133
12251
|
endA = start + (endA - endB);
|
|
12134
12252
|
endB = start;
|
|
12135
12253
|
}
|
|
12136
12254
|
return { start, endA, endB };
|
|
12137
12255
|
}
|
|
12138
|
-
function isSurrogatePair(str) {
|
|
12139
|
-
if (str.length != 2)
|
|
12140
|
-
return false;
|
|
12141
|
-
let a = str.charCodeAt(0), b = str.charCodeAt(1);
|
|
12142
|
-
return a >= 0xDC00 && a <= 0xDFFF && b >= 0xD800 && b <= 0xDBFF;
|
|
12143
|
-
}
|
|
12144
12256
|
/**
|
|
12145
12257
|
An editor view manages the DOM structure that represents an
|
|
12146
12258
|
editable document. Its state and behavior are determined by its
|
|
@@ -12332,9 +12444,10 @@ class EditorView {
|
|
|
12332
12444
|
// a DOM selection change and the "selectionchange" event for it
|
|
12333
12445
|
// can cause a spurious DOM selection update, disrupting mouse
|
|
12334
12446
|
// drag selection.
|
|
12447
|
+
let mouseDown = this.input.mouseDown;
|
|
12335
12448
|
if (forceSelUpdate ||
|
|
12336
|
-
!(
|
|
12337
|
-
anchorInRightPlace(this))) {
|
|
12449
|
+
!(mouseDown && this.domObserver.currentSelection.eq(this.domSelectionRange()) &&
|
|
12450
|
+
anchorInRightPlace(this) && mouseDown.delaySelUpdate())) {
|
|
12338
12451
|
selectionToDOM(this, forceSelUpdate);
|
|
12339
12452
|
}
|
|
12340
12453
|
else {
|
|
@@ -12361,11 +12474,11 @@ class EditorView {
|
|
|
12361
12474
|
*/
|
|
12362
12475
|
scrollToSelection() {
|
|
12363
12476
|
let startDOM = this.domSelectionRange().focusNode;
|
|
12364
|
-
if (!startDOM || !this.dom
|
|
12477
|
+
if (!startDOM || !contains(this.dom, startDOM)) ;
|
|
12365
12478
|
else if (this.someProp("handleScrollToSelection", f => f(this))) ;
|
|
12366
12479
|
else if (this.state.selection instanceof NodeSelection) {
|
|
12367
12480
|
let target = this.docView.domAfterPos(this.state.selection.from);
|
|
12368
|
-
if (target
|
|
12481
|
+
if (isElt(target))
|
|
12369
12482
|
scrollRectIntoView(this, target.getBoundingClientRect(), startDOM);
|
|
12370
12483
|
}
|
|
12371
12484
|
else {
|
|
@@ -12630,7 +12743,7 @@ class EditorView {
|
|
|
12630
12743
|
@internal
|
|
12631
12744
|
*/
|
|
12632
12745
|
domSelectionRange() {
|
|
12633
|
-
let sel = this.domSelection();
|
|
12746
|
+
let sel = this.dom.isConnected !== false && this.domSelection();
|
|
12634
12747
|
if (!sel)
|
|
12635
12748
|
return { focusNode: null, focusOffset: 0, anchorNode: null, anchorOffset: 0 };
|
|
12636
12749
|
return safari && this.root.nodeType === 11 &&
|
|
@@ -13918,7 +14031,7 @@ const convertListsAndWrapRuns = (tr, state, targetType, startIndex, endIndex) =>
|
|
|
13918
14031
|
const inRange = i >= startIndex && i <= endIndex;
|
|
13919
14032
|
const isList = isListNode(child, state.schema);
|
|
13920
14033
|
if (inRange && child.type === state.schema.nodes.paragraph) {
|
|
13921
|
-
runStart
|
|
14034
|
+
runStart !== null && runStart !== void 0 ? runStart : (runStart = pos);
|
|
13922
14035
|
runEnd = pos + child.nodeSize;
|
|
13923
14036
|
}
|
|
13924
14037
|
else if (runStart !== null && runEnd !== null) {
|
|
@@ -14025,17 +14138,13 @@ const toggleNodeType = (schema, type, attrs = {}, shouldWrap = false) => {
|
|
|
14025
14138
|
}
|
|
14026
14139
|
return true;
|
|
14027
14140
|
}
|
|
14028
|
-
|
|
14029
|
-
|
|
14030
|
-
|
|
14031
|
-
|
|
14032
|
-
|
|
14033
|
-
return wrapIn(nodeType, attrs)(state, dispatch);
|
|
14034
|
-
}
|
|
14035
|
-
else {
|
|
14036
|
-
return setBlockType(nodeType, attrs)(state, dispatch);
|
|
14037
|
-
}
|
|
14141
|
+
if (hasActiveWrap) {
|
|
14142
|
+
return lift(state, dispatch);
|
|
14143
|
+
}
|
|
14144
|
+
if (shouldWrap) {
|
|
14145
|
+
return wrapIn(nodeType, attrs)(state, dispatch);
|
|
14038
14146
|
}
|
|
14147
|
+
return setBlockType(nodeType, attrs)(state, dispatch);
|
|
14039
14148
|
}
|
|
14040
14149
|
return false;
|
|
14041
14150
|
};
|
|
@@ -14440,7 +14549,7 @@ function buildInlineImageDOMAttrs(attrs) {
|
|
|
14440
14549
|
}
|
|
14441
14550
|
function getStatusHTML(state, alt, language) {
|
|
14442
14551
|
const key = state === 'failed' ? 'failed' : 'loading';
|
|
14443
|
-
const text =
|
|
14552
|
+
const text = translations.get(`editor-image-view.${key}`, language, {
|
|
14444
14553
|
filename: alt || 'file',
|
|
14445
14554
|
});
|
|
14446
14555
|
return `<span>${text}</span>`;
|
|
@@ -14552,7 +14661,8 @@ function createImageParseDOM(inlineImages) {
|
|
|
14552
14661
|
return rules;
|
|
14553
14662
|
}
|
|
14554
14663
|
function isEditorImageState(state) {
|
|
14555
|
-
|
|
14664
|
+
const states = ['loading', 'failed', 'success'];
|
|
14665
|
+
return states.includes(state);
|
|
14556
14666
|
}
|
|
14557
14667
|
function getOrCreateImageElement(fileInfoId, node) {
|
|
14558
14668
|
let img = imageCache.get(fileInfoId);
|
|
@@ -14570,7 +14680,7 @@ function createStatusSpanForState(state, node, language) {
|
|
|
14570
14680
|
return createStatusSpan(statusKey, node, language);
|
|
14571
14681
|
}
|
|
14572
14682
|
function createStatusSpan(key, node, language) {
|
|
14573
|
-
const text =
|
|
14683
|
+
const text = translations.get(`editor-image-view.${key}`, language, {
|
|
14574
14684
|
filename: node.attrs.alt || 'file',
|
|
14575
14685
|
});
|
|
14576
14686
|
const span = document.createElement('span');
|
|
@@ -15177,54 +15287,6 @@ var ucmicro = /*#__PURE__*/Object.freeze({
|
|
|
15177
15287
|
Z: Z
|
|
15178
15288
|
});
|
|
15179
15289
|
|
|
15180
|
-
// Generated using scripts/write-encode-map.ts
|
|
15181
|
-
function restoreDiff(arr) {
|
|
15182
|
-
for (let i = 1; i < arr.length; i++) {
|
|
15183
|
-
arr[i][0] += arr[i - 1][0] + 1;
|
|
15184
|
-
}
|
|
15185
|
-
return arr;
|
|
15186
|
-
}
|
|
15187
|
-
// prettier-ignore
|
|
15188
|
-
new Map(/* #__PURE__ */ restoreDiff([[9, "	"], [0, "
"], [22, "!"], [0, """], [0, "#"], [0, "$"], [0, "%"], [0, "&"], [0, "'"], [0, "("], [0, ")"], [0, "*"], [0, "+"], [0, ","], [1, "."], [0, "/"], [10, ":"], [0, ";"], [0, { v: "<", n: 8402, o: "<⃒" }], [0, { v: "=", n: 8421, o: "=⃥" }], [0, { v: ">", n: 8402, o: ">⃒" }], [0, "?"], [0, "@"], [26, "["], [0, "\"], [0, "]"], [0, "^"], [0, "_"], [0, "`"], [5, { n: 106, o: "fj" }], [20, "{"], [0, "|"], [0, "}"], [34, " "], [0, "¡"], [0, "¢"], [0, "£"], [0, "¤"], [0, "¥"], [0, "¦"], [0, "§"], [0, "¨"], [0, "©"], [0, "ª"], [0, "«"], [0, "¬"], [0, "­"], [0, "®"], [0, "¯"], [0, "°"], [0, "±"], [0, "²"], [0, "³"], [0, "´"], [0, "µ"], [0, "¶"], [0, "·"], [0, "¸"], [0, "¹"], [0, "º"], [0, "»"], [0, "¼"], [0, "½"], [0, "¾"], [0, "¿"], [0, "À"], [0, "Á"], [0, "Â"], [0, "Ã"], [0, "Ä"], [0, "Å"], [0, "Æ"], [0, "Ç"], [0, "È"], [0, "É"], [0, "Ê"], [0, "Ë"], [0, "Ì"], [0, "Í"], [0, "Î"], [0, "Ï"], [0, "Ð"], [0, "Ñ"], [0, "Ò"], [0, "Ó"], [0, "Ô"], [0, "Õ"], [0, "Ö"], [0, "×"], [0, "Ø"], [0, "Ù"], [0, "Ú"], [0, "Û"], [0, "Ü"], [0, "Ý"], [0, "Þ"], [0, "ß"], [0, "à"], [0, "á"], [0, "â"], [0, "ã"], [0, "ä"], [0, "å"], [0, "æ"], [0, "ç"], [0, "è"], [0, "é"], [0, "ê"], [0, "ë"], [0, "ì"], [0, "í"], [0, "î"], [0, "ï"], [0, "ð"], [0, "ñ"], [0, "ò"], [0, "ó"], [0, "ô"], [0, "õ"], [0, "ö"], [0, "÷"], [0, "ø"], [0, "ù"], [0, "ú"], [0, "û"], [0, "ü"], [0, "ý"], [0, "þ"], [0, "ÿ"], [0, "Ā"], [0, "ā"], [0, "Ă"], [0, "ă"], [0, "Ą"], [0, "ą"], [0, "Ć"], [0, "ć"], [0, "Ĉ"], [0, "ĉ"], [0, "Ċ"], [0, "ċ"], [0, "Č"], [0, "č"], [0, "Ď"], [0, "ď"], [0, "Đ"], [0, "đ"], [0, "Ē"], [0, "ē"], [2, "Ė"], [0, "ė"], [0, "Ę"], [0, "ę"], [0, "Ě"], [0, "ě"], [0, "Ĝ"], [0, "ĝ"], [0, "Ğ"], [0, "ğ"], [0, "Ġ"], [0, "ġ"], [0, "Ģ"], [1, "Ĥ"], [0, "ĥ"], [0, "Ħ"], [0, "ħ"], [0, "Ĩ"], [0, "ĩ"], [0, "Ī"], [0, "ī"], [2, "Į"], [0, "į"], [0, "İ"], [0, "ı"], [0, "IJ"], [0, "ij"], [0, "Ĵ"], [0, "ĵ"], [0, "Ķ"], [0, "ķ"], [0, "ĸ"], [0, "Ĺ"], [0, "ĺ"], [0, "Ļ"], [0, "ļ"], [0, "Ľ"], [0, "ľ"], [0, "Ŀ"], [0, "ŀ"], [0, "Ł"], [0, "ł"], [0, "Ń"], [0, "ń"], [0, "Ņ"], [0, "ņ"], [0, "Ň"], [0, "ň"], [0, "ʼn"], [0, "Ŋ"], [0, "ŋ"], [0, "Ō"], [0, "ō"], [2, "Ő"], [0, "ő"], [0, "Œ"], [0, "œ"], [0, "Ŕ"], [0, "ŕ"], [0, "Ŗ"], [0, "ŗ"], [0, "Ř"], [0, "ř"], [0, "Ś"], [0, "ś"], [0, "Ŝ"], [0, "ŝ"], [0, "Ş"], [0, "ş"], [0, "Š"], [0, "š"], [0, "Ţ"], [0, "ţ"], [0, "Ť"], [0, "ť"], [0, "Ŧ"], [0, "ŧ"], [0, "Ũ"], [0, "ũ"], [0, "Ū"], [0, "ū"], [0, "Ŭ"], [0, "ŭ"], [0, "Ů"], [0, "ů"], [0, "Ű"], [0, "ű"], [0, "Ų"], [0, "ų"], [0, "Ŵ"], [0, "ŵ"], [0, "Ŷ"], [0, "ŷ"], [0, "Ÿ"], [0, "Ź"], [0, "ź"], [0, "Ż"], [0, "ż"], [0, "Ž"], [0, "ž"], [19, "ƒ"], [34, "Ƶ"], [63, "ǵ"], [65, "ȷ"], [142, "ˆ"], [0, "ˇ"], [16, "˘"], [0, "˙"], [0, "˚"], [0, "˛"], [0, "˜"], [0, "˝"], [51, "̑"], [127, "Α"], [0, "Β"], [0, "Γ"], [0, "Δ"], [0, "Ε"], [0, "Ζ"], [0, "Η"], [0, "Θ"], [0, "Ι"], [0, "Κ"], [0, "Λ"], [0, "Μ"], [0, "Ν"], [0, "Ξ"], [0, "Ο"], [0, "Π"], [0, "Ρ"], [1, "Σ"], [0, "Τ"], [0, "Υ"], [0, "Φ"], [0, "Χ"], [0, "Ψ"], [0, "Ω"], [7, "α"], [0, "β"], [0, "γ"], [0, "δ"], [0, "ε"], [0, "ζ"], [0, "η"], [0, "θ"], [0, "ι"], [0, "κ"], [0, "λ"], [0, "μ"], [0, "ν"], [0, "ξ"], [0, "ο"], [0, "π"], [0, "ρ"], [0, "ς"], [0, "σ"], [0, "τ"], [0, "υ"], [0, "φ"], [0, "χ"], [0, "ψ"], [0, "ω"], [7, "ϑ"], [0, "ϒ"], [2, "ϕ"], [0, "ϖ"], [5, "Ϝ"], [0, "ϝ"], [18, "ϰ"], [0, "ϱ"], [3, "ϵ"], [0, "϶"], [10, "Ё"], [0, "Ђ"], [0, "Ѓ"], [0, "Є"], [0, "Ѕ"], [0, "І"], [0, "Ї"], [0, "Ј"], [0, "Љ"], [0, "Њ"], [0, "Ћ"], [0, "Ќ"], [1, "Ў"], [0, "Џ"], [0, "А"], [0, "Б"], [0, "В"], [0, "Г"], [0, "Д"], [0, "Е"], [0, "Ж"], [0, "З"], [0, "И"], [0, "Й"], [0, "К"], [0, "Л"], [0, "М"], [0, "Н"], [0, "О"], [0, "П"], [0, "Р"], [0, "С"], [0, "Т"], [0, "У"], [0, "Ф"], [0, "Х"], [0, "Ц"], [0, "Ч"], [0, "Ш"], [0, "Щ"], [0, "Ъ"], [0, "Ы"], [0, "Ь"], [0, "Э"], [0, "Ю"], [0, "Я"], [0, "а"], [0, "б"], [0, "в"], [0, "г"], [0, "д"], [0, "е"], [0, "ж"], [0, "з"], [0, "и"], [0, "й"], [0, "к"], [0, "л"], [0, "м"], [0, "н"], [0, "о"], [0, "п"], [0, "р"], [0, "с"], [0, "т"], [0, "у"], [0, "ф"], [0, "х"], [0, "ц"], [0, "ч"], [0, "ш"], [0, "щ"], [0, "ъ"], [0, "ы"], [0, "ь"], [0, "э"], [0, "ю"], [0, "я"], [1, "ё"], [0, "ђ"], [0, "ѓ"], [0, "є"], [0, "ѕ"], [0, "і"], [0, "ї"], [0, "ј"], [0, "љ"], [0, "њ"], [0, "ћ"], [0, "ќ"], [1, "ў"], [0, "џ"], [7074, " "], [0, " "], [0, " "], [0, " "], [1, " "], [0, " "], [0, " "], [0, " "], [0, "​"], [0, "‌"], [0, "‍"], [0, "‎"], [0, "‏"], [0, "‐"], [2, "–"], [0, "—"], [0, "―"], [0, "‖"], [1, "‘"], [0, "’"], [0, "‚"], [1, "“"], [0, "”"], [0, "„"], [1, "†"], [0, "‡"], [0, "•"], [2, "‥"], [0, "…"], [9, "‰"], [0, "‱"], [0, "′"], [0, "″"], [0, "‴"], [0, "‵"], [3, "‹"], [0, "›"], [3, "‾"], [2, "⁁"], [1, "⁃"], [0, "⁄"], [10, "⁏"], [7, "⁗"], [7, { v: " ", n: 8202, o: "  " }], [0, "⁠"], [0, "⁡"], [0, "⁢"], [0, "⁣"], [72, "€"], [46, "⃛"], [0, "⃜"], [37, "ℂ"], [2, "℅"], [4, "ℊ"], [0, "ℋ"], [0, "ℌ"], [0, "ℍ"], [0, "ℎ"], [0, "ℏ"], [0, "ℐ"], [0, "ℑ"], [0, "ℒ"], [0, "ℓ"], [1, "ℕ"], [0, "№"], [0, "℗"], [0, "℘"], [0, "ℙ"], [0, "ℚ"], [0, "ℛ"], [0, "ℜ"], [0, "ℝ"], [0, "℞"], [3, "™"], [1, "ℤ"], [2, "℧"], [0, "ℨ"], [0, "℩"], [2, "ℬ"], [0, "ℭ"], [1, "ℯ"], [0, "ℰ"], [0, "ℱ"], [1, "ℳ"], [0, "ℴ"], [0, "ℵ"], [0, "ℶ"], [0, "ℷ"], [0, "ℸ"], [12, "ⅅ"], [0, "ⅆ"], [0, "ⅇ"], [0, "ⅈ"], [10, "⅓"], [0, "⅔"], [0, "⅕"], [0, "⅖"], [0, "⅗"], [0, "⅘"], [0, "⅙"], [0, "⅚"], [0, "⅛"], [0, "⅜"], [0, "⅝"], [0, "⅞"], [49, "←"], [0, "↑"], [0, "→"], [0, "↓"], [0, "↔"], [0, "↕"], [0, "↖"], [0, "↗"], [0, "↘"], [0, "↙"], [0, "↚"], [0, "↛"], [1, { v: "↝", n: 824, o: "↝̸" }], [0, "↞"], [0, "↟"], [0, "↠"], [0, "↡"], [0, "↢"], [0, "↣"], [0, "↤"], [0, "↥"], [0, "↦"], [0, "↧"], [1, "↩"], [0, "↪"], [0, "↫"], [0, "↬"], [0, "↭"], [0, "↮"], [1, "↰"], [0, "↱"], [0, "↲"], [0, "↳"], [1, "↵"], [0, "↶"], [0, "↷"], [2, "↺"], [0, "↻"], [0, "↼"], [0, "↽"], [0, "↾"], [0, "↿"], [0, "⇀"], [0, "⇁"], [0, "⇂"], [0, "⇃"], [0, "⇄"], [0, "⇅"], [0, "⇆"], [0, "⇇"], [0, "⇈"], [0, "⇉"], [0, "⇊"], [0, "⇋"], [0, "⇌"], [0, "⇍"], [0, "⇎"], [0, "⇏"], [0, "⇐"], [0, "⇑"], [0, "⇒"], [0, "⇓"], [0, "⇔"], [0, "⇕"], [0, "⇖"], [0, "⇗"], [0, "⇘"], [0, "⇙"], [0, "⇚"], [0, "⇛"], [1, "⇝"], [6, "⇤"], [0, "⇥"], [15, "⇵"], [7, "⇽"], [0, "⇾"], [0, "⇿"], [0, "∀"], [0, "∁"], [0, { v: "∂", n: 824, o: "∂̸" }], [0, "∃"], [0, "∄"], [0, "∅"], [1, "∇"], [0, "∈"], [0, "∉"], [1, "∋"], [0, "∌"], [2, "∏"], [0, "∐"], [0, "∑"], [0, "−"], [0, "∓"], [0, "∔"], [1, "∖"], [0, "∗"], [0, "∘"], [1, "√"], [2, "∝"], [0, "∞"], [0, "∟"], [0, { v: "∠", n: 8402, o: "∠⃒" }], [0, "∡"], [0, "∢"], [0, "∣"], [0, "∤"], [0, "∥"], [0, "∦"], [0, "∧"], [0, "∨"], [0, { v: "∩", n: 65024, o: "∩︀" }], [0, { v: "∪", n: 65024, o: "∪︀" }], [0, "∫"], [0, "∬"], [0, "∭"], [0, "∮"], [0, "∯"], [0, "∰"], [0, "∱"], [0, "∲"], [0, "∳"], [0, "∴"], [0, "∵"], [0, "∶"], [0, "∷"], [0, "∸"], [1, "∺"], [0, "∻"], [0, { v: "∼", n: 8402, o: "∼⃒" }], [0, { v: "∽", n: 817, o: "∽̱" }], [0, { v: "∾", n: 819, o: "∾̳" }], [0, "∿"], [0, "≀"], [0, "≁"], [0, { v: "≂", n: 824, o: "≂̸" }], [0, "≃"], [0, "≄"], [0, "≅"], [0, "≆"], [0, "≇"], [0, "≈"], [0, "≉"], [0, "≊"], [0, { v: "≋", n: 824, o: "≋̸" }], [0, "≌"], [0, { v: "≍", n: 8402, o: "≍⃒" }], [0, { v: "≎", n: 824, o: "≎̸" }], [0, { v: "≏", n: 824, o: "≏̸" }], [0, { v: "≐", n: 824, o: "≐̸" }], [0, "≑"], [0, "≒"], [0, "≓"], [0, "≔"], [0, "≕"], [0, "≖"], [0, "≗"], [1, "≙"], [0, "≚"], [1, "≜"], [2, "≟"], [0, "≠"], [0, { v: "≡", n: 8421, o: "≡⃥" }], [0, "≢"], [1, { v: "≤", n: 8402, o: "≤⃒" }], [0, { v: "≥", n: 8402, o: "≥⃒" }], [0, { v: "≦", n: 824, o: "≦̸" }], [0, { v: "≧", n: 824, o: "≧̸" }], [0, { v: "≨", n: 65024, o: "≨︀" }], [0, { v: "≩", n: 65024, o: "≩︀" }], [0, { v: "≪", n: new Map(/* #__PURE__ */ restoreDiff([[824, "≪̸"], [7577, "≪⃒"]])) }], [0, { v: "≫", n: new Map(/* #__PURE__ */ restoreDiff([[824, "≫̸"], [7577, "≫⃒"]])) }], [0, "≬"], [0, "≭"], [0, "≮"], [0, "≯"], [0, "≰"], [0, "≱"], [0, "≲"], [0, "≳"], [0, "≴"], [0, "≵"], [0, "≶"], [0, "≷"], [0, "≸"], [0, "≹"], [0, "≺"], [0, "≻"], [0, "≼"], [0, "≽"], [0, "≾"], [0, { v: "≿", n: 824, o: "≿̸" }], [0, "⊀"], [0, "⊁"], [0, { v: "⊂", n: 8402, o: "⊂⃒" }], [0, { v: "⊃", n: 8402, o: "⊃⃒" }], [0, "⊄"], [0, "⊅"], [0, "⊆"], [0, "⊇"], [0, "⊈"], [0, "⊉"], [0, { v: "⊊", n: 65024, o: "⊊︀" }], [0, { v: "⊋", n: 65024, o: "⊋︀" }], [1, "⊍"], [0, "⊎"], [0, { v: "⊏", n: 824, o: "⊏̸" }], [0, { v: "⊐", n: 824, o: "⊐̸" }], [0, "⊑"], [0, "⊒"], [0, { v: "⊓", n: 65024, o: "⊓︀" }], [0, { v: "⊔", n: 65024, o: "⊔︀" }], [0, "⊕"], [0, "⊖"], [0, "⊗"], [0, "⊘"], [0, "⊙"], [0, "⊚"], [0, "⊛"], [1, "⊝"], [0, "⊞"], [0, "⊟"], [0, "⊠"], [0, "⊡"], [0, "⊢"], [0, "⊣"], [0, "⊤"], [0, "⊥"], [1, "⊧"], [0, "⊨"], [0, "⊩"], [0, "⊪"], [0, "⊫"], [0, "⊬"], [0, "⊭"], [0, "⊮"], [0, "⊯"], [0, "⊰"], [1, "⊲"], [0, "⊳"], [0, { v: "⊴", n: 8402, o: "⊴⃒" }], [0, { v: "⊵", n: 8402, o: "⊵⃒" }], [0, "⊶"], [0, "⊷"], [0, "⊸"], [0, "⊹"], [0, "⊺"], [0, "⊻"], [1, "⊽"], [0, "⊾"], [0, "⊿"], [0, "⋀"], [0, "⋁"], [0, "⋂"], [0, "⋃"], [0, "⋄"], [0, "⋅"], [0, "⋆"], [0, "⋇"], [0, "⋈"], [0, "⋉"], [0, "⋊"], [0, "⋋"], [0, "⋌"], [0, "⋍"], [0, "⋎"], [0, "⋏"], [0, "⋐"], [0, "⋑"], [0, "⋒"], [0, "⋓"], [0, "⋔"], [0, "⋕"], [0, "⋖"], [0, "⋗"], [0, { v: "⋘", n: 824, o: "⋘̸" }], [0, { v: "⋙", n: 824, o: "⋙̸" }], [0, { v: "⋚", n: 65024, o: "⋚︀" }], [0, { v: "⋛", n: 65024, o: "⋛︀" }], [2, "⋞"], [0, "⋟"], [0, "⋠"], [0, "⋡"], [0, "⋢"], [0, "⋣"], [2, "⋦"], [0, "⋧"], [0, "⋨"], [0, "⋩"], [0, "⋪"], [0, "⋫"], [0, "⋬"], [0, "⋭"], [0, "⋮"], [0, "⋯"], [0, "⋰"], [0, "⋱"], [0, "⋲"], [0, "⋳"], [0, "⋴"], [0, { v: "⋵", n: 824, o: "⋵̸" }], [0, "⋶"], [0, "⋷"], [1, { v: "⋹", n: 824, o: "⋹̸" }], [0, "⋺"], [0, "⋻"], [0, "⋼"], [0, "⋽"], [0, "⋾"], [6, "⌅"], [0, "⌆"], [1, "⌈"], [0, "⌉"], [0, "⌊"], [0, "⌋"], [0, "⌌"], [0, "⌍"], [0, "⌎"], [0, "⌏"], [0, "⌐"], [1, "⌒"], [0, "⌓"], [1, "⌕"], [0, "⌖"], [5, "⌜"], [0, "⌝"], [0, "⌞"], [0, "⌟"], [2, "⌢"], [0, "⌣"], [9, "⌭"], [0, "⌮"], [7, "⌶"], [6, "⌽"], [1, "⌿"], [60, "⍼"], [51, "⎰"], [0, "⎱"], [2, "⎴"], [0, "⎵"], [0, "⎶"], [37, "⏜"], [0, "⏝"], [0, "⏞"], [0, "⏟"], [2, "⏢"], [4, "⏧"], [59, "␣"], [164, "Ⓢ"], [55, "─"], [1, "│"], [9, "┌"], [3, "┐"], [3, "└"], [3, "┘"], [3, "├"], [7, "┤"], [7, "┬"], [7, "┴"], [7, "┼"], [19, "═"], [0, "║"], [0, "╒"], [0, "╓"], [0, "╔"], [0, "╕"], [0, "╖"], [0, "╗"], [0, "╘"], [0, "╙"], [0, "╚"], [0, "╛"], [0, "╜"], [0, "╝"], [0, "╞"], [0, "╟"], [0, "╠"], [0, "╡"], [0, "╢"], [0, "╣"], [0, "╤"], [0, "╥"], [0, "╦"], [0, "╧"], [0, "╨"], [0, "╩"], [0, "╪"], [0, "╫"], [0, "╬"], [19, "▀"], [3, "▄"], [3, "█"], [8, "░"], [0, "▒"], [0, "▓"], [13, "□"], [8, "▪"], [0, "▫"], [1, "▭"], [0, "▮"], [2, "▱"], [1, "△"], [0, "▴"], [0, "▵"], [2, "▸"], [0, "▹"], [3, "▽"], [0, "▾"], [0, "▿"], [2, "◂"], [0, "◃"], [6, "◊"], [0, "○"], [32, "◬"], [2, "◯"], [8, "◸"], [0, "◹"], [0, "◺"], [0, "◻"], [0, "◼"], [8, "★"], [0, "☆"], [7, "☎"], [49, "♀"], [1, "♂"], [29, "♠"], [2, "♣"], [1, "♥"], [0, "♦"], [3, "♪"], [2, "♭"], [0, "♮"], [0, "♯"], [163, "✓"], [3, "✗"], [8, "✠"], [21, "✶"], [33, "❘"], [25, "❲"], [0, "❳"], [84, "⟈"], [0, "⟉"], [28, "⟦"], [0, "⟧"], [0, "⟨"], [0, "⟩"], [0, "⟪"], [0, "⟫"], [0, "⟬"], [0, "⟭"], [7, "⟵"], [0, "⟶"], [0, "⟷"], [0, "⟸"], [0, "⟹"], [0, "⟺"], [1, "⟼"], [2, "⟿"], [258, "⤂"], [0, "⤃"], [0, "⤄"], [0, "⤅"], [6, "⤌"], [0, "⤍"], [0, "⤎"], [0, "⤏"], [0, "⤐"], [0, "⤑"], [0, "⤒"], [0, "⤓"], [2, "⤖"], [2, "⤙"], [0, "⤚"], [0, "⤛"], [0, "⤜"], [0, "⤝"], [0, "⤞"], [0, "⤟"], [0, "⤠"], [2, "⤣"], [0, "⤤"], [0, "⤥"], [0, "⤦"], [0, "⤧"], [0, "⤨"], [0, "⤩"], [0, "⤪"], [8, { v: "⤳", n: 824, o: "⤳̸" }], [1, "⤵"], [0, "⤶"], [0, "⤷"], [0, "⤸"], [0, "⤹"], [2, "⤼"], [0, "⤽"], [7, "⥅"], [2, "⥈"], [0, "⥉"], [0, "⥊"], [0, "⥋"], [2, "⥎"], [0, "⥏"], [0, "⥐"], [0, "⥑"], [0, "⥒"], [0, "⥓"], [0, "⥔"], [0, "⥕"], [0, "⥖"], [0, "⥗"], [0, "⥘"], [0, "⥙"], [0, "⥚"], [0, "⥛"], [0, "⥜"], [0, "⥝"], [0, "⥞"], [0, "⥟"], [0, "⥠"], [0, "⥡"], [0, "⥢"], [0, "⥣"], [0, "⥤"], [0, "⥥"], [0, "⥦"], [0, "⥧"], [0, "⥨"], [0, "⥩"], [0, "⥪"], [0, "⥫"], [0, "⥬"], [0, "⥭"], [0, "⥮"], [0, "⥯"], [0, "⥰"], [0, "⥱"], [0, "⥲"], [0, "⥳"], [0, "⥴"], [0, "⥵"], [0, "⥶"], [1, "⥸"], [0, "⥹"], [1, "⥻"], [0, "⥼"], [0, "⥽"], [0, "⥾"], [0, "⥿"], [5, "⦅"], [0, "⦆"], [4, "⦋"], [0, "⦌"], [0, "⦍"], [0, "⦎"], [0, "⦏"], [0, "⦐"], [0, "⦑"], [0, "⦒"], [0, "⦓"], [0, "⦔"], [0, "⦕"], [0, "⦖"], [3, "⦚"], [1, "⦜"], [0, "⦝"], [6, "⦤"], [0, "⦥"], [0, "⦦"], [0, "⦧"], [0, "⦨"], [0, "⦩"], [0, "⦪"], [0, "⦫"], [0, "⦬"], [0, "⦭"], [0, "⦮"], [0, "⦯"], [0, "⦰"], [0, "⦱"], [0, "⦲"], [0, "⦳"], [0, "⦴"], [0, "⦵"], [0, "⦶"], [0, "⦷"], [1, "⦹"], [1, "⦻"], [0, "⦼"], [1, "⦾"], [0, "⦿"], [0, "⧀"], [0, "⧁"], [0, "⧂"], [0, "⧃"], [0, "⧄"], [0, "⧅"], [3, "⧉"], [3, "⧍"], [0, "⧎"], [0, { v: "⧏", n: 824, o: "⧏̸" }], [0, { v: "⧐", n: 824, o: "⧐̸" }], [11, "⧜"], [0, "⧝"], [0, "⧞"], [4, "⧣"], [0, "⧤"], [0, "⧥"], [5, "⧫"], [8, "⧴"], [1, "⧶"], [9, "⨀"], [0, "⨁"], [0, "⨂"], [1, "⨄"], [1, "⨆"], [5, "⨌"], [0, "⨍"], [2, "⨐"], [0, "⨑"], [0, "⨒"], [0, "⨓"], [0, "⨔"], [0, "⨕"], [0, "⨖"], [0, "⨗"], [10, "⨢"], [0, "⨣"], [0, "⨤"], [0, "⨥"], [0, "⨦"], [0, "⨧"], [1, "⨩"], [0, "⨪"], [2, "⨭"], [0, "⨮"], [0, "⨯"], [0, "⨰"], [0, "⨱"], [1, "⨳"], [0, "⨴"], [0, "⨵"], [0, "⨶"], [0, "⨷"], [0, "⨸"], [0, "⨹"], [0, "⨺"], [0, "⨻"], [0, "⨼"], [2, "⨿"], [0, "⩀"], [1, "⩂"], [0, "⩃"], [0, "⩄"], [0, "⩅"], [0, "⩆"], [0, "⩇"], [0, "⩈"], [0, "⩉"], [0, "⩊"], [0, "⩋"], [0, "⩌"], [0, "⩍"], [2, "⩐"], [2, "⩓"], [0, "⩔"], [0, "⩕"], [0, "⩖"], [0, "⩗"], [0, "⩘"], [1, "⩚"], [0, "⩛"], [0, "⩜"], [0, "⩝"], [1, "⩟"], [6, "⩦"], [3, "⩪"], [2, { v: "⩭", n: 824, o: "⩭̸" }], [0, "⩮"], [0, "⩯"], [0, { v: "⩰", n: 824, o: "⩰̸" }], [0, "⩱"], [0, "⩲"], [0, "⩳"], [0, "⩴"], [0, "⩵"], [1, "⩷"], [0, "⩸"], [0, "⩹"], [0, "⩺"], [0, "⩻"], [0, "⩼"], [0, { v: "⩽", n: 824, o: "⩽̸" }], [0, { v: "⩾", n: 824, o: "⩾̸" }], [0, "⩿"], [0, "⪀"], [0, "⪁"], [0, "⪂"], [0, "⪃"], [0, "⪄"], [0, "⪅"], [0, "⪆"], [0, "⪇"], [0, "⪈"], [0, "⪉"], [0, "⪊"], [0, "⪋"], [0, "⪌"], [0, "⪍"], [0, "⪎"], [0, "⪏"], [0, "⪐"], [0, "⪑"], [0, "⪒"], [0, "⪓"], [0, "⪔"], [0, "⪕"], [0, "⪖"], [0, "⪗"], [0, "⪘"], [0, "⪙"], [0, "⪚"], [2, "⪝"], [0, "⪞"], [0, "⪟"], [0, "⪠"], [0, { v: "⪡", n: 824, o: "⪡̸" }], [0, { v: "⪢", n: 824, o: "⪢̸" }], [1, "⪤"], [0, "⪥"], [0, "⪦"], [0, "⪧"], [0, "⪨"], [0, "⪩"], [0, "⪪"], [0, "⪫"], [0, { v: "⪬", n: 65024, o: "⪬︀" }], [0, { v: "⪭", n: 65024, o: "⪭︀" }], [0, "⪮"], [0, { v: "⪯", n: 824, o: "⪯̸" }], [0, { v: "⪰", n: 824, o: "⪰̸" }], [2, "⪳"], [0, "⪴"], [0, "⪵"], [0, "⪶"], [0, "⪷"], [0, "⪸"], [0, "⪹"], [0, "⪺"], [0, "⪻"], [0, "⪼"], [0, "⪽"], [0, "⪾"], [0, "⪿"], [0, "⫀"], [0, "⫁"], [0, "⫂"], [0, "⫃"], [0, "⫄"], [0, { v: "⫅", n: 824, o: "⫅̸" }], [0, { v: "⫆", n: 824, o: "⫆̸" }], [0, "⫇"], [0, "⫈"], [2, { v: "⫋", n: 65024, o: "⫋︀" }], [0, { v: "⫌", n: 65024, o: "⫌︀" }], [2, "⫏"], [0, "⫐"], [0, "⫑"], [0, "⫒"], [0, "⫓"], [0, "⫔"], [0, "⫕"], [0, "⫖"], [0, "⫗"], [0, "⫘"], [0, "⫙"], [0, "⫚"], [0, "⫛"], [8, "⫤"], [1, "⫦"], [0, "⫧"], [0, "⫨"], [0, "⫩"], [1, "⫫"], [0, "⫬"], [0, "⫭"], [0, "⫮"], [0, "⫯"], [0, "⫰"], [0, "⫱"], [0, "⫲"], [0, "⫳"], [9, { v: "⫽", n: 8421, o: "⫽⃥" }], [44343, { n: new Map(/* #__PURE__ */ restoreDiff([[56476, "𝒜"], [1, "𝒞"], [0, "𝒟"], [2, "𝒢"], [2, "𝒥"], [0, "𝒦"], [2, "𝒩"], [0, "𝒪"], [0, "𝒫"], [0, "𝒬"], [1, "𝒮"], [0, "𝒯"], [0, "𝒰"], [0, "𝒱"], [0, "𝒲"], [0, "𝒳"], [0, "𝒴"], [0, "𝒵"], [0, "𝒶"], [0, "𝒷"], [0, "𝒸"], [0, "𝒹"], [1, "𝒻"], [1, "𝒽"], [0, "𝒾"], [0, "𝒿"], [0, "𝓀"], [0, "𝓁"], [0, "𝓂"], [0, "𝓃"], [1, "𝓅"], [0, "𝓆"], [0, "𝓇"], [0, "𝓈"], [0, "𝓉"], [0, "𝓊"], [0, "𝓋"], [0, "𝓌"], [0, "𝓍"], [0, "𝓎"], [0, "𝓏"], [52, "𝔄"], [0, "𝔅"], [1, "𝔇"], [0, "𝔈"], [0, "𝔉"], [0, "𝔊"], [2, "𝔍"], [0, "𝔎"], [0, "𝔏"], [0, "𝔐"], [0, "𝔑"], [0, "𝔒"], [0, "𝔓"], [0, "𝔔"], [1, "𝔖"], [0, "𝔗"], [0, "𝔘"], [0, "𝔙"], [0, "𝔚"], [0, "𝔛"], [0, "𝔜"], [1, "𝔞"], [0, "𝔟"], [0, "𝔠"], [0, "𝔡"], [0, "𝔢"], [0, "𝔣"], [0, "𝔤"], [0, "𝔥"], [0, "𝔦"], [0, "𝔧"], [0, "𝔨"], [0, "𝔩"], [0, "𝔪"], [0, "𝔫"], [0, "𝔬"], [0, "𝔭"], [0, "𝔮"], [0, "𝔯"], [0, "𝔰"], [0, "𝔱"], [0, "𝔲"], [0, "𝔳"], [0, "𝔴"], [0, "𝔵"], [0, "𝔶"], [0, "𝔷"], [0, "𝔸"], [0, "𝔹"], [1, "𝔻"], [0, "𝔼"], [0, "𝔽"], [0, "𝔾"], [1, "𝕀"], [0, "𝕁"], [0, "𝕂"], [0, "𝕃"], [0, "𝕄"], [1, "𝕆"], [3, "𝕊"], [0, "𝕋"], [0, "𝕌"], [0, "𝕍"], [0, "𝕎"], [0, "𝕏"], [0, "𝕐"], [1, "𝕒"], [0, "𝕓"], [0, "𝕔"], [0, "𝕕"], [0, "𝕖"], [0, "𝕗"], [0, "𝕘"], [0, "𝕙"], [0, "𝕚"], [0, "𝕛"], [0, "𝕜"], [0, "𝕝"], [0, "𝕞"], [0, "𝕟"], [0, "𝕠"], [0, "𝕡"], [0, "𝕢"], [0, "𝕣"], [0, "𝕤"], [0, "𝕥"], [0, "𝕦"], [0, "𝕧"], [0, "𝕨"], [0, "𝕩"], [0, "𝕪"], [0, "𝕫"]])) }], [8906, "ff"], [0, "fi"], [0, "fl"], [0, "ffi"], [0, "ffl"]]));
|
|
15189
|
-
|
|
15190
|
-
/** The level of entities to support. */
|
|
15191
|
-
var EntityLevel;
|
|
15192
|
-
(function (EntityLevel) {
|
|
15193
|
-
/** Support only XML entities. */
|
|
15194
|
-
EntityLevel[EntityLevel["XML"] = 0] = "XML";
|
|
15195
|
-
/** Support HTML entities, which are a superset of XML entities. */
|
|
15196
|
-
EntityLevel[EntityLevel["HTML"] = 1] = "HTML";
|
|
15197
|
-
})(EntityLevel || (EntityLevel = {}));
|
|
15198
|
-
var EncodingMode;
|
|
15199
|
-
(function (EncodingMode) {
|
|
15200
|
-
/**
|
|
15201
|
-
* The output is UTF-8 encoded. Only characters that need escaping within
|
|
15202
|
-
* XML will be escaped.
|
|
15203
|
-
*/
|
|
15204
|
-
EncodingMode[EncodingMode["UTF8"] = 0] = "UTF8";
|
|
15205
|
-
/**
|
|
15206
|
-
* The output consists only of ASCII characters. Characters that need
|
|
15207
|
-
* escaping within HTML, and characters that aren't ASCII characters will
|
|
15208
|
-
* be escaped.
|
|
15209
|
-
*/
|
|
15210
|
-
EncodingMode[EncodingMode["ASCII"] = 1] = "ASCII";
|
|
15211
|
-
/**
|
|
15212
|
-
* Encode all characters that have an equivalent entity, as well as all
|
|
15213
|
-
* characters that are not ASCII characters.
|
|
15214
|
-
*/
|
|
15215
|
-
EncodingMode[EncodingMode["Extensive"] = 2] = "Extensive";
|
|
15216
|
-
/**
|
|
15217
|
-
* Encode all characters that have to be escaped in HTML attributes,
|
|
15218
|
-
* following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.
|
|
15219
|
-
*/
|
|
15220
|
-
EncodingMode[EncodingMode["Attribute"] = 3] = "Attribute";
|
|
15221
|
-
/**
|
|
15222
|
-
* Encode all characters that have to be escaped in HTML text,
|
|
15223
|
-
* following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.
|
|
15224
|
-
*/
|
|
15225
|
-
EncodingMode[EncodingMode["Text"] = 4] = "Text";
|
|
15226
|
-
})(EncodingMode || (EncodingMode = {}));
|
|
15227
|
-
|
|
15228
15290
|
// Utilities
|
|
15229
15291
|
//
|
|
15230
15292
|
|
|
@@ -25518,12 +25580,11 @@ const updateLink = (view, updateLinkCallback) => {
|
|
|
25518
25580
|
const fromInNode = Math.max(0, from - pos);
|
|
25519
25581
|
const toInNode = Math.min(node.text.length, to - pos);
|
|
25520
25582
|
text += node.text.slice(fromInNode, toInNode);
|
|
25521
|
-
|
|
25522
|
-
node.marks.forEach((mark) => {
|
|
25583
|
+
for (const mark of node.marks) {
|
|
25523
25584
|
if (mark.type.name === 'link') {
|
|
25524
25585
|
href = mark.attrs.href;
|
|
25525
25586
|
}
|
|
25526
|
-
}
|
|
25587
|
+
}
|
|
25527
25588
|
});
|
|
25528
25589
|
if (updateLinkCallback) {
|
|
25529
25590
|
updateLinkCallback(text, href);
|
|
@@ -25540,8 +25601,8 @@ const findStart = (doc, pos, href) => {
|
|
|
25540
25601
|
while (pos > 0) {
|
|
25541
25602
|
const node = doc.nodeAt(pos - 1);
|
|
25542
25603
|
if (!(node === null || node === void 0 ? void 0 : node.isText) ||
|
|
25543
|
-
|
|
25544
|
-
mark.attrs.href
|
|
25604
|
+
node.marks.every((mark) => mark.type.name !== EditorMenuTypes.Link ||
|
|
25605
|
+
mark.attrs.href !== href)) {
|
|
25545
25606
|
break;
|
|
25546
25607
|
}
|
|
25547
25608
|
pos--;
|
|
@@ -25559,8 +25620,8 @@ const findEnd = (doc, pos, href) => {
|
|
|
25559
25620
|
while (pos < doc.content.size) {
|
|
25560
25621
|
const node = doc.nodeAt(pos);
|
|
25561
25622
|
if (!(node === null || node === void 0 ? void 0 : node.isText) ||
|
|
25562
|
-
|
|
25563
|
-
mark.attrs.href
|
|
25623
|
+
node.marks.every((mark) => mark.type.name !== EditorMenuTypes.Link ||
|
|
25624
|
+
mark.attrs.href !== href)) {
|
|
25564
25625
|
break;
|
|
25565
25626
|
}
|
|
25566
25627
|
pos++;
|
|
@@ -25696,16 +25757,17 @@ const createNodesWithLinksAndBreaks = (text, schema) => {
|
|
|
25696
25757
|
if (line.length > 0) {
|
|
25697
25758
|
nodes.push(...createNodesWithLinks(line, schema));
|
|
25698
25759
|
}
|
|
25699
|
-
if (index
|
|
25700
|
-
|
|
25701
|
-
|
|
25702
|
-
|
|
25703
|
-
|
|
25704
|
-
|
|
25705
|
-
|
|
25706
|
-
|
|
25707
|
-
|
|
25708
|
-
|
|
25760
|
+
if (index >= lines.length - 1) {
|
|
25761
|
+
continue;
|
|
25762
|
+
}
|
|
25763
|
+
const hb = schema.nodes.hard_break;
|
|
25764
|
+
if (hb) {
|
|
25765
|
+
nodes.push(hb.create());
|
|
25766
|
+
}
|
|
25767
|
+
else {
|
|
25768
|
+
// Fallback: if schema lacks hard_break, defer to default paste behavior
|
|
25769
|
+
// (Do NOT throw; keep behavior stable across versions)
|
|
25770
|
+
console.warn('hard_break node not found in schema');
|
|
25709
25771
|
}
|
|
25710
25772
|
}
|
|
25711
25773
|
return nodes;
|
|
@@ -25842,10 +25904,11 @@ const createLinkPlugin = (updateLinkCallback) => {
|
|
|
25842
25904
|
}
|
|
25843
25905
|
// Prevent unhandled navigation and bubbling for link clicks
|
|
25844
25906
|
const link = event.target.closest('a');
|
|
25845
|
-
if (link) {
|
|
25846
|
-
|
|
25847
|
-
event.stopPropagation();
|
|
25907
|
+
if (!link) {
|
|
25908
|
+
return;
|
|
25848
25909
|
}
|
|
25910
|
+
event.preventDefault();
|
|
25911
|
+
event.stopPropagation();
|
|
25849
25912
|
},
|
|
25850
25913
|
},
|
|
25851
25914
|
},
|
|
@@ -25916,11 +25979,12 @@ const replaceImageNodeByFileInfoId = (view, fileInfoId, buildNode) => {
|
|
|
25916
25979
|
if (found) {
|
|
25917
25980
|
return false;
|
|
25918
25981
|
}
|
|
25919
|
-
if (node.attrs.fileInfoId
|
|
25920
|
-
|
|
25921
|
-
found = true;
|
|
25922
|
-
return false;
|
|
25982
|
+
if (node.attrs.fileInfoId !== fileInfoId) {
|
|
25983
|
+
return true;
|
|
25923
25984
|
}
|
|
25985
|
+
tr.replaceWith(pos, pos + node.nodeSize, buildNode(node));
|
|
25986
|
+
found = true;
|
|
25987
|
+
return false;
|
|
25924
25988
|
});
|
|
25925
25989
|
if (found) {
|
|
25926
25990
|
dispatch(tr);
|
|
@@ -25992,24 +26056,20 @@ const isImageNode$1 = (node) => {
|
|
|
25992
26056
|
if (node.type.name === 'image') {
|
|
25993
26057
|
return true;
|
|
25994
26058
|
}
|
|
25995
|
-
|
|
25996
|
-
// eslint-disable-next-line unicorn/no-array-for-each
|
|
25997
|
-
node.content.forEach((child) => {
|
|
26059
|
+
for (const child of node.children) {
|
|
25998
26060
|
if (isImageNode$1(child)) {
|
|
25999
|
-
|
|
26061
|
+
return true;
|
|
26000
26062
|
}
|
|
26001
|
-
}
|
|
26002
|
-
return
|
|
26063
|
+
}
|
|
26064
|
+
return false;
|
|
26003
26065
|
}
|
|
26004
|
-
|
|
26005
|
-
|
|
26006
|
-
// eslint-disable-next-line unicorn/no-array-for-each
|
|
26007
|
-
node.forEach((child) => {
|
|
26066
|
+
if (node instanceof Fragment) {
|
|
26067
|
+
for (const child of node.content) {
|
|
26008
26068
|
if (isImageNode$1(child)) {
|
|
26009
|
-
|
|
26069
|
+
return true;
|
|
26010
26070
|
}
|
|
26011
|
-
}
|
|
26012
|
-
return
|
|
26071
|
+
}
|
|
26072
|
+
return false;
|
|
26013
26073
|
}
|
|
26014
26074
|
return false;
|
|
26015
26075
|
};
|
|
@@ -26020,8 +26080,7 @@ const isImageNode$1 = (node) => {
|
|
|
26020
26080
|
*/
|
|
26021
26081
|
const filterImageNodes = (fragment) => {
|
|
26022
26082
|
const filteredChildren = [];
|
|
26023
|
-
|
|
26024
|
-
fragment.forEach((child) => {
|
|
26083
|
+
for (const child of fragment.content) {
|
|
26025
26084
|
if (!isImageNode$1(child)) {
|
|
26026
26085
|
if (child.content.size > 0) {
|
|
26027
26086
|
const filteredContent = filterImageNodes(child.content);
|
|
@@ -26032,7 +26091,7 @@ const filterImageNodes = (fragment) => {
|
|
|
26032
26091
|
filteredChildren.push(child);
|
|
26033
26092
|
}
|
|
26034
26093
|
}
|
|
26035
|
-
}
|
|
26094
|
+
}
|
|
26036
26095
|
return Fragment.fromArray(filteredChildren);
|
|
26037
26096
|
};
|
|
26038
26097
|
/**
|
|
@@ -26072,27 +26131,28 @@ function handlePastedImages(view, clipboardData, inlineImages) {
|
|
|
26072
26131
|
let isImageFilePasted = false;
|
|
26073
26132
|
const files = [...(clipboardData.files || [])];
|
|
26074
26133
|
for (const file of files) {
|
|
26075
|
-
if (isImageFile(file, clipboardData)) {
|
|
26076
|
-
|
|
26077
|
-
const reader = new FileReader();
|
|
26078
|
-
reader.onloadend = () => {
|
|
26079
|
-
const base64Data = reader.result;
|
|
26080
|
-
const fileInfo = createFileInfo(file);
|
|
26081
|
-
if (inlineImages) {
|
|
26082
|
-
// Once inline images are configured they own the paste
|
|
26083
|
-
// lifecycle; never fall back to the legacy imagePasted
|
|
26084
|
-
// event. Without an upload handler the paste is a no-op.
|
|
26085
|
-
if (inlineImages.upload) {
|
|
26086
|
-
runInlineImageUpload(view, file, base64Data, fileInfo, inlineImages);
|
|
26087
|
-
}
|
|
26088
|
-
return;
|
|
26089
|
-
}
|
|
26090
|
-
view.dom.dispatchEvent(new CustomEvent('imagePasted', {
|
|
26091
|
-
detail: imageInserterFactory(view, base64Data, fileInfo),
|
|
26092
|
-
}));
|
|
26093
|
-
};
|
|
26094
|
-
reader.readAsDataURL(file);
|
|
26134
|
+
if (!isImageFile(file, clipboardData)) {
|
|
26135
|
+
continue;
|
|
26095
26136
|
}
|
|
26137
|
+
isImageFilePasted = true;
|
|
26138
|
+
const reader = new FileReader();
|
|
26139
|
+
reader.onloadend = () => {
|
|
26140
|
+
const base64Data = reader.result;
|
|
26141
|
+
const fileInfo = createFileInfo(file);
|
|
26142
|
+
if (inlineImages) {
|
|
26143
|
+
// Once inline images are configured they own the paste
|
|
26144
|
+
// lifecycle; never fall back to the legacy imagePasted
|
|
26145
|
+
// event. Without an upload handler the paste is a no-op.
|
|
26146
|
+
if (inlineImages.upload) {
|
|
26147
|
+
runInlineImageUpload(view, file, base64Data, fileInfo, inlineImages);
|
|
26148
|
+
}
|
|
26149
|
+
return;
|
|
26150
|
+
}
|
|
26151
|
+
view.dom.dispatchEvent(new CustomEvent('imagePasted', {
|
|
26152
|
+
detail: imageInserterFactory(view, base64Data, fileInfo),
|
|
26153
|
+
}));
|
|
26154
|
+
};
|
|
26155
|
+
reader.readAsDataURL(file);
|
|
26096
26156
|
}
|
|
26097
26157
|
return isImageFilePasted;
|
|
26098
26158
|
}
|
|
@@ -26152,7 +26212,7 @@ class ImageView {
|
|
|
26152
26212
|
const handle = document.createElement('div');
|
|
26153
26213
|
handle.className = `resize-handle ${position}`;
|
|
26154
26214
|
handle.setAttribute('role', 'slider');
|
|
26155
|
-
handle.setAttribute('aria-label',
|
|
26215
|
+
handle.setAttribute('aria-label', translations.get('editor-image-view.resize-handle', this.language));
|
|
26156
26216
|
handle.setAttribute('tabindex', '0');
|
|
26157
26217
|
handle.setAttribute('aria-valuemin', MIN_WIDTH.toString());
|
|
26158
26218
|
handle.setAttribute('aria-valuenow', this.img.offsetWidth.toString());
|
|
@@ -26193,7 +26253,7 @@ class ImageView {
|
|
|
26193
26253
|
this.createLoadingState = () => {
|
|
26194
26254
|
this.dom.setAttribute('aria-live', 'polite');
|
|
26195
26255
|
this.dom.setAttribute('aria-busy', 'true');
|
|
26196
|
-
this.dom.setAttribute('aria-label',
|
|
26256
|
+
this.dom.setAttribute('aria-label', translations.get('editor-image-view.loading', this.language, {
|
|
26197
26257
|
filename: this.node.attrs.alt || 'file',
|
|
26198
26258
|
}));
|
|
26199
26259
|
const spinnerElement = document.createElement('limel-linear-progress');
|
|
@@ -26203,7 +26263,7 @@ class ImageView {
|
|
|
26203
26263
|
this.createSuccessState = () => {
|
|
26204
26264
|
this.dom.setAttribute('aria-live', 'polite');
|
|
26205
26265
|
this.dom.setAttribute('aria-busy', 'false');
|
|
26206
|
-
this.dom.setAttribute('aria-label',
|
|
26266
|
+
this.dom.setAttribute('aria-label', translations.get('editor-image-view.success', this.language, {
|
|
26207
26267
|
filename: this.node.attrs.alt || 'file',
|
|
26208
26268
|
}));
|
|
26209
26269
|
const bottomRightHandle = this.createResizeHandle('bottom-right');
|
|
@@ -26214,7 +26274,7 @@ class ImageView {
|
|
|
26214
26274
|
this.createFailedState = () => {
|
|
26215
26275
|
this.dom.setAttribute('aria-live', 'assertive');
|
|
26216
26276
|
this.dom.setAttribute('aria-busy', 'false');
|
|
26217
|
-
this.dom.setAttribute('aria-label',
|
|
26277
|
+
this.dom.setAttribute('aria-label', translations.get('editor-image-view.failed', this.language, {
|
|
26218
26278
|
filename: this.node.attrs.alt || 'file',
|
|
26219
26279
|
}));
|
|
26220
26280
|
};
|
|
@@ -26286,7 +26346,7 @@ const getMenuItemStates = (menuTypes, menuCommandFactory, view) => {
|
|
|
26286
26346
|
const allowedTypes = {};
|
|
26287
26347
|
for (const type of menuTypes) {
|
|
26288
26348
|
const command = menuCommandFactory.getCommand(type);
|
|
26289
|
-
activeTypes[type] = !!((_a = command === null || command === void 0 ? void 0 : command.active) === null || _a === void 0 ? void 0 : _a.call(command, view.state))
|
|
26349
|
+
activeTypes[type] = !!((_a = command === null || command === void 0 ? void 0 : command.active) === null || _a === void 0 ? void 0 : _a.call(command, view.state));
|
|
26290
26350
|
allowedTypes[type] = !!((_c = (_b = command === null || command === void 0 ? void 0 : command.allowed) === null || _b === void 0 ? void 0 : _b.call(command, view.state)) !== null && _c !== void 0 ? _c : true);
|
|
26291
26351
|
}
|
|
26292
26352
|
return { active: activeTypes, allowed: allowedTypes };
|
|
@@ -26307,11 +26367,12 @@ const createMenuStateTrackingPlugin = (menuTypes, menuCommandFactory, updateCall
|
|
|
26307
26367
|
update: (view) => {
|
|
26308
26368
|
const oldItemStates = actionBarPluginKey.getState(view.state);
|
|
26309
26369
|
const menuItemStates = getMenuItemStates(menuTypes, menuCommandFactory, view);
|
|
26310
|
-
if (
|
|
26311
|
-
|
|
26312
|
-
view.dispatch(tr);
|
|
26313
|
-
updateCallback(menuItemStates.active, menuItemStates.allowed);
|
|
26370
|
+
if (isEqual(oldItemStates, menuItemStates)) {
|
|
26371
|
+
return;
|
|
26314
26372
|
}
|
|
26373
|
+
const tr = view.state.tr.setMeta(actionBarPluginKey, menuItemStates);
|
|
26374
|
+
view.dispatch(tr);
|
|
26375
|
+
updateCallback(menuItemStates.active, menuItemStates.allowed);
|
|
26315
26376
|
},
|
|
26316
26377
|
}),
|
|
26317
26378
|
});
|
|
@@ -26537,20 +26598,21 @@ const detectTriggerRemoval = (transaction, activeTrigger, resetActiveTrigger, co
|
|
|
26537
26598
|
return false;
|
|
26538
26599
|
}
|
|
26539
26600
|
for (const step of transaction.steps) {
|
|
26540
|
-
if (step instanceof ReplaceStep) {
|
|
26541
|
-
|
|
26542
|
-
|
|
26543
|
-
|
|
26544
|
-
|
|
26545
|
-
|
|
26546
|
-
|
|
26547
|
-
|
|
26548
|
-
|
|
26549
|
-
|
|
26550
|
-
|
|
26551
|
-
|
|
26552
|
-
|
|
26553
|
-
|
|
26601
|
+
if (!(step instanceof ReplaceStep)) {
|
|
26602
|
+
continue;
|
|
26603
|
+
}
|
|
26604
|
+
const { from, to, slice } = step; // Access properties specific to ReplaceStep
|
|
26605
|
+
// Check if the step affects the trigger position
|
|
26606
|
+
if (!(from <= activeTrigger.position && to >= activeTrigger.position)) {
|
|
26607
|
+
continue;
|
|
26608
|
+
}
|
|
26609
|
+
const text = slice.content.textBetween(0, slice.content.size, '');
|
|
26610
|
+
// Check if the trigger character has been removed
|
|
26611
|
+
// `text` is the text after the step has been applied
|
|
26612
|
+
if (!text.includes(activeTrigger.character)) {
|
|
26613
|
+
resetActiveTrigger();
|
|
26614
|
+
sendTriggerEvent('triggerStop', view, contentConverter, activeTrigger, '');
|
|
26615
|
+
return true;
|
|
26554
26616
|
}
|
|
26555
26617
|
}
|
|
26556
26618
|
return false;
|
|
@@ -28022,9 +28084,9 @@ const createNodeSpec = (config) => {
|
|
|
28022
28084
|
tag: tag,
|
|
28023
28085
|
getAttrs: (dom) => {
|
|
28024
28086
|
const attributes = {};
|
|
28025
|
-
|
|
28026
|
-
|
|
28027
|
-
|
|
28087
|
+
for (const attribute of config.attributes) {
|
|
28088
|
+
attributes[attribute] = dom.getAttribute(attribute);
|
|
28089
|
+
}
|
|
28028
28090
|
return attributes;
|
|
28029
28091
|
},
|
|
28030
28092
|
},
|
|
@@ -28205,7 +28267,7 @@ function areFrequencyMapsEqual(map1, map2) {
|
|
|
28205
28267
|
if (map1.size !== map2.size) {
|
|
28206
28268
|
return false;
|
|
28207
28269
|
}
|
|
28208
|
-
for (const [key, count] of map1
|
|
28270
|
+
for (const [key, count] of map1) {
|
|
28209
28271
|
if (map2.get(key) !== count) {
|
|
28210
28272
|
return false;
|
|
28211
28273
|
}
|
|
@@ -28277,7 +28339,7 @@ const ProsemirrorAdapter = class {
|
|
|
28277
28339
|
if (isItem(item)) {
|
|
28278
28340
|
const translationId = menuTranslationIDs[item.value];
|
|
28279
28341
|
if (translationId) {
|
|
28280
|
-
newItem.text =
|
|
28342
|
+
newItem.text = translations.get(translationId, this.language);
|
|
28281
28343
|
}
|
|
28282
28344
|
}
|
|
28283
28345
|
return newItem;
|
|
@@ -28287,7 +28349,9 @@ const ProsemirrorAdapter = class {
|
|
|
28287
28349
|
.map(this.getTranslatedItem)
|
|
28288
28350
|
.map((item) => {
|
|
28289
28351
|
if (isItem(item)) {
|
|
28290
|
-
return Object.assign(Object.assign({}, item), { selected: activeTypes[item.value],
|
|
28352
|
+
return Object.assign(Object.assign({}, item), { selected: activeTypes[item.value],
|
|
28353
|
+
// eslint-disable-next-line unicorn/no-computed-property-existence-check -- reads a boolean value, not key existence
|
|
28354
|
+
disabled: !allowedTypes[item.value] });
|
|
28291
28355
|
}
|
|
28292
28356
|
return item;
|
|
28293
28357
|
});
|
|
@@ -28344,35 +28408,38 @@ const ProsemirrorAdapter = class {
|
|
|
28344
28408
|
};
|
|
28345
28409
|
this.handleFocus = () => {
|
|
28346
28410
|
var _a;
|
|
28347
|
-
if (
|
|
28348
|
-
|
|
28349
|
-
// Workaround: On some focus interactions (especially clicking the first line and the last line),
|
|
28350
|
-
// ProseMirror does not dispatch a transaction or update the selection. This can cause
|
|
28351
|
-
// the cursor to fall back to the end of the document instead of placing it where the user clicked.
|
|
28352
|
-
//
|
|
28353
|
-
// To detect this, we wait one tick after focus. If no transaction has fired by then,
|
|
28354
|
-
// we assume the selection is unresolved and manually move the cursor to the last clicked position.
|
|
28355
|
-
//
|
|
28356
|
-
// The clicked position is only meaningful for the focus event that the
|
|
28357
|
-
// click itself triggered, so it is consumed here and cleared on blur.
|
|
28358
|
-
// Focus regained without a click (e.g. switching back to the window)
|
|
28359
|
-
// must leave the selection untouched.
|
|
28360
|
-
this.transactionFired = false;
|
|
28361
|
-
this.focusRestoreTimeout = setTimeout(() => {
|
|
28362
|
-
const clickedPos = this.lastClickedPos;
|
|
28363
|
-
this.lastClickedPos = null;
|
|
28364
|
-
if (!this.transactionFired &&
|
|
28365
|
-
clickedPos !== null &&
|
|
28366
|
-
clickedPos <= this.view.state.doc.content.size) {
|
|
28367
|
-
const { doc, tr } = this.view.state;
|
|
28368
|
-
const resolvedPos = doc.resolve(clickedPos);
|
|
28369
|
-
const selection = Selection.near(resolvedPos);
|
|
28370
|
-
tr.setMeta('pointer', true);
|
|
28371
|
-
this.view.dispatch(tr.setSelection(selection));
|
|
28372
|
-
}
|
|
28373
|
-
}, 0);
|
|
28411
|
+
if (this.disabled) {
|
|
28412
|
+
return;
|
|
28374
28413
|
}
|
|
28414
|
+
(_a = this.view) === null || _a === void 0 ? void 0 : _a.focus();
|
|
28415
|
+
// Workaround: On some focus interactions (especially clicking the first line and the last line),
|
|
28416
|
+
// ProseMirror does not dispatch a transaction or update the selection. This can cause
|
|
28417
|
+
// the cursor to fall back to the end of the document instead of placing it where the user clicked.
|
|
28418
|
+
//
|
|
28419
|
+
// To detect this, we wait one tick after focus. If no transaction has fired by then,
|
|
28420
|
+
// we assume the selection is unresolved and manually move the cursor to the last clicked position.
|
|
28421
|
+
//
|
|
28422
|
+
// The clicked position is only meaningful for the focus event that the
|
|
28423
|
+
// click itself triggered, so it is consumed here and cleared on blur.
|
|
28424
|
+
// Focus regained without a click (e.g. switching back to the window)
|
|
28425
|
+
// must leave the selection untouched.
|
|
28426
|
+
this.transactionFired = false;
|
|
28427
|
+
this.focusRestoreTimeout = setTimeout(() => {
|
|
28428
|
+
const clickedPos = this.lastClickedPos;
|
|
28429
|
+
this.lastClickedPos = null;
|
|
28430
|
+
if (this.transactionFired ||
|
|
28431
|
+
clickedPos === null ||
|
|
28432
|
+
clickedPos > this.view.state.doc.content.size) {
|
|
28433
|
+
return;
|
|
28434
|
+
}
|
|
28435
|
+
const { doc, tr } = this.view.state;
|
|
28436
|
+
const resolvedPos = doc.resolve(clickedPos);
|
|
28437
|
+
const selection = Selection.near(resolvedPos);
|
|
28438
|
+
tr.setMeta('pointer', true);
|
|
28439
|
+
this.view.dispatch(tr.setSelection(selection));
|
|
28440
|
+
}, 0);
|
|
28375
28441
|
};
|
|
28442
|
+
// eslint-disable-next-line unicorn/prefer-default-parameters -- a default parameter would not cover an empty string
|
|
28376
28443
|
this.handleNewLinkSelection = (text, href) => {
|
|
28377
28444
|
this.link.text = text;
|
|
28378
28445
|
this.link.href = href || 'https://';
|
|
@@ -28499,13 +28566,13 @@ const ProsemirrorAdapter = class {
|
|
|
28499
28566
|
(_e = this.view) === null || _e === void 0 ? void 0 : _e.destroy();
|
|
28500
28567
|
}
|
|
28501
28568
|
render() {
|
|
28502
|
-
return (h(Host, { key: '
|
|
28569
|
+
return (h(Host, { key: '16ef71481dea1fcefa1735e5a6350f47bf1d78ca', onFocus: this.handleFocus }, h("div", { key: '3b6598d8efd561afb6191d3d650f3a32e86f6904', id: "editor" }), this.renderToolbar(), this.renderLinkMenu()));
|
|
28503
28570
|
}
|
|
28504
28571
|
renderToolbar() {
|
|
28505
28572
|
if (this.actionBarItems.length === 0 || this.ui === 'no-toolbar') {
|
|
28506
28573
|
return;
|
|
28507
28574
|
}
|
|
28508
|
-
return (h("div", { class: "toolbar" }, h("limel-action-bar", { ref: (el) => (this.actionBarElement = el), accessibleLabel:
|
|
28575
|
+
return (h("div", { class: "toolbar" }, h("limel-action-bar", { ref: (el) => (this.actionBarElement = el), accessibleLabel: translations.get('editor-menu.toolbar', this.language), actions: this.actionBarItems, onItemSelected: this.handleActionBarItem })));
|
|
28509
28576
|
}
|
|
28510
28577
|
renderLinkMenu() {
|
|
28511
28578
|
if (!this.isLinkMenuOpen) {
|
|
@@ -28618,17 +28685,18 @@ const ProsemirrorAdapter = class {
|
|
|
28618
28685
|
}
|
|
28619
28686
|
}
|
|
28620
28687
|
metadataEmitter(metadata) {
|
|
28621
|
-
if (hasMetadataChanged(this.metadata, metadata)) {
|
|
28622
|
-
|
|
28623
|
-
this.metadata = metadata;
|
|
28624
|
-
this.metadataChange.emit(metadata);
|
|
28688
|
+
if (!hasMetadataChanged(this.metadata, metadata)) {
|
|
28689
|
+
return;
|
|
28625
28690
|
}
|
|
28691
|
+
this.removeImagesFromCache(this.metadata, metadata);
|
|
28692
|
+
this.metadata = metadata;
|
|
28693
|
+
this.metadataChange.emit(metadata);
|
|
28626
28694
|
}
|
|
28627
28695
|
// When the deprecated metadata events are removed, this cache eviction
|
|
28628
28696
|
// must be kept: re-derive the removed fileInfoIds from the node attrs so
|
|
28629
28697
|
// pasted images still get evicted from `imageCache` when deleted.
|
|
28630
28698
|
removeImagesFromCache(oldMetadata, newMetadata) {
|
|
28631
|
-
const removedImages = oldMetadata.images.filter((oldImage) =>
|
|
28699
|
+
const removedImages = oldMetadata.images.filter((oldImage) => newMetadata.images.every((newImage) => newImage.fileInfoId !== oldImage.fileInfoId));
|
|
28632
28700
|
for (const image of removedImages) {
|
|
28633
28701
|
imageCache.delete(image.fileInfoId);
|
|
28634
28702
|
this.imageRemoved.emit(image);
|