@worktile/theia 18.0.16 → 18.1.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/constants/node-types.d.ts +1 -0
- package/core/toolbar-item/base-toolbar-item.d.ts +2 -2
- package/fesm2022/worktile-theia.mjs +297 -310
- package/fesm2022/worktile-theia.mjs.map +1 -1
- package/interfaces/view-base.d.ts +1 -1
- package/package.json +4 -6
- package/plugins/code/code.component.scss +1 -2
- package/plugins/image/image.component.d.ts +1 -1
- package/plugins/link/link.component.d.ts +1 -1
- package/plugins/mention/suggestion.component.d.ts +1 -1
- package/esm2022/components/action/prevent-default.mjs +0 -21
- package/esm2022/components/column-resize/column-resize-notifier.mjs +0 -31
- package/esm2022/components/column-resize/column-resize.directive.mjs +0 -124
- package/esm2022/components/column-resize/event-dispatcher.mjs +0 -56
- package/esm2022/components/column-resize/overlay-handle.component.mjs +0 -144
- package/esm2022/components/column-resize/resize-ref.mjs +0 -26
- package/esm2022/components/column-resize/resizing.store.mjs +0 -92
- package/esm2022/components/column-resize/selectors.mjs +0 -4
- package/esm2022/components/contextmenu/contextmenu.component.mjs +0 -99
- package/esm2022/components/conversion-hint/conversion-hint.component.mjs +0 -56
- package/esm2022/components/element/element.component.mjs +0 -23
- package/esm2022/components/index.mjs +0 -24
- package/esm2022/components/inline-toolbar/inline-toolbar.component.mjs +0 -131
- package/esm2022/components/listbox/listbox.mjs +0 -380
- package/esm2022/components/listbox/listbox.type.mjs +0 -5
- package/esm2022/components/plugin-menu/plugin-menu.component.mjs +0 -272
- package/esm2022/components/table-select/table-select.component.mjs +0 -49
- package/esm2022/components/template/template.component.mjs +0 -62
- package/esm2022/components/text/text.component.mjs +0 -57
- package/esm2022/components/toolbar/toolbar.component.mjs +0 -262
- package/esm2022/components/toolbar-dropdown/toolbar-dropdown.component.mjs +0 -137
- package/esm2022/components/toolbar-group/toolbar-group.component.mjs +0 -125
- package/esm2022/components/toolbar-item/toolbar-item.component.mjs +0 -80
- package/esm2022/constants/auto-format-rules.mjs +0 -167
- package/esm2022/constants/code.mjs +0 -85
- package/esm2022/constants/color-select.mjs +0 -3
- package/esm2022/constants/default.mjs +0 -11
- package/esm2022/constants/error.mjs +0 -7
- package/esm2022/constants/index.mjs +0 -9
- package/esm2022/constants/node-types.mjs +0 -136
- package/esm2022/constants/plugin-menu.mjs +0 -311
- package/esm2022/constants/selector.mjs +0 -3
- package/esm2022/constants/toolbar.mjs +0 -53
- package/esm2022/core/create-plugin.mjs +0 -5
- package/esm2022/core/create-toolbar.mjs +0 -55
- package/esm2022/core/index.mjs +0 -6
- package/esm2022/core/toolbar-item/base-toolbar-item.mjs +0 -95
- package/esm2022/core/utils/combine-plugins.mjs +0 -10
- package/esm2022/core/utils/flatten-deep-plugins.mjs +0 -19
- package/esm2022/core/utils/get-plugin-options.mjs +0 -3
- package/esm2022/core/utils/get-plugin.mjs +0 -2
- package/esm2022/core/utils/get-plugins.mjs +0 -4
- package/esm2022/core/utils/index.mjs +0 -12
- package/esm2022/core/utils/merge-array.mjs +0 -18
- package/esm2022/core/utils/merge-deep-plugins.mjs +0 -14
- package/esm2022/core/utils/merge-options.mjs +0 -25
- package/esm2022/core/utils/nested-structure-by-key.mjs +0 -11
- package/esm2022/core/utils/plugin-menu.mjs +0 -63
- package/esm2022/core/utils/plugins-by-key.mjs +0 -10
- package/esm2022/core/with-theia.mjs +0 -25
- package/esm2022/custom-types.mjs +0 -2
- package/esm2022/editor.component.mjs +0 -488
- package/esm2022/editor.module.mjs +0 -18
- package/esm2022/i18n/i18n.mjs +0 -10
- package/esm2022/i18n/i18n.service.mjs +0 -46
- package/esm2022/i18n/i18n.token.mjs +0 -9
- package/esm2022/i18n/index.mjs +0 -10
- package/esm2022/i18n/locales/de-de.mjs +0 -102
- package/esm2022/i18n/locales/en-us.mjs +0 -102
- package/esm2022/i18n/locales/ja-jp.mjs +0 -102
- package/esm2022/i18n/locales/ru-ru.mjs +0 -102
- package/esm2022/i18n/locales/zh-hans.mjs +0 -102
- package/esm2022/i18n/locales/zh-hant.mjs +0 -102
- package/esm2022/interfaces/auto-format.mjs +0 -2
- package/esm2022/interfaces/editor.mjs +0 -26
- package/esm2022/interfaces/element.mjs +0 -2
- package/esm2022/interfaces/image.mjs +0 -3
- package/esm2022/interfaces/index.mjs +0 -11
- package/esm2022/interfaces/plugins/index.mjs +0 -6
- package/esm2022/interfaces/plugins/no-infer.mjs +0 -2
- package/esm2022/interfaces/plugins/plugin-key.mjs +0 -42
- package/esm2022/interfaces/plugins/plugin-menu.mjs +0 -19
- package/esm2022/interfaces/plugins/plugins.mjs +0 -2
- package/esm2022/interfaces/plugins/with-override.mjs +0 -2
- package/esm2022/interfaces/preset.mjs +0 -3
- package/esm2022/interfaces/reset-block-type-plugin-options.mjs +0 -2
- package/esm2022/interfaces/toolbar.mjs +0 -12
- package/esm2022/interfaces/upload.mjs +0 -2
- package/esm2022/interfaces/utility/index.mjs +0 -4
- package/esm2022/interfaces/utility/nested-structure-by-key.mjs +0 -2
- package/esm2022/interfaces/utility/override-by-key.mjs +0 -2
- package/esm2022/interfaces/utility/types.mjs +0 -2
- package/esm2022/interfaces/valid-children-types.mjs +0 -36
- package/esm2022/interfaces/view-base.mjs +0 -38
- package/esm2022/pipes.mjs +0 -61
- package/esm2022/plugins/align/align.editor.mjs +0 -41
- package/esm2022/plugins/align/align.plugin.mjs +0 -64
- package/esm2022/plugins/autoformat/autoformat.plugin.mjs +0 -109
- package/esm2022/plugins/autoformat/transforms/auto-format-block.mjs +0 -14
- package/esm2022/plugins/autoformat/transforms/auto-format-inline.mjs +0 -78
- package/esm2022/plugins/blockquote/blockquote.component.mjs +0 -16
- package/esm2022/plugins/blockquote/blockquote.editor.mjs +0 -20
- package/esm2022/plugins/blockquote/blockquote.plugin.mjs +0 -84
- package/esm2022/plugins/code/code.component.mjs +0 -255
- package/esm2022/plugins/code/code.editor.mjs +0 -59
- package/esm2022/plugins/code/code.plugin.mjs +0 -67
- package/esm2022/plugins/color/color.editor.mjs +0 -27
- package/esm2022/plugins/color/color.plugin.mjs +0 -32
- package/esm2022/plugins/color/toolbar-item.component.mjs +0 -99
- package/esm2022/plugins/common/block-card.plugin.mjs +0 -330
- package/esm2022/plugins/common/common.plugin.mjs +0 -49
- package/esm2022/plugins/common/get-fragment.plugin.mjs +0 -24
- package/esm2022/plugins/common/history.plugin.mjs +0 -31
- package/esm2022/plugins/common/insert-data-by-invalid-type.mjs +0 -23
- package/esm2022/plugins/common/move-selection.plugin.mjs +0 -105
- package/esm2022/plugins/common/remove-empty.plugin.mjs +0 -61
- package/esm2022/plugins/common/remove-void.plugin.mjs +0 -60
- package/esm2022/plugins/common/reset-type.plugin.mjs +0 -35
- package/esm2022/plugins/deserialize/deserialize-html.plugin.mjs +0 -61
- package/esm2022/plugins/deserialize/deserialize-md.plugin.mjs +0 -142
- package/esm2022/plugins/font-size/font-size.editor.mjs +0 -98
- package/esm2022/plugins/heading/heading.editor.mjs +0 -54
- package/esm2022/plugins/heading/heading.plugin.mjs +0 -136
- package/esm2022/plugins/hr/hr.component.mjs +0 -37
- package/esm2022/plugins/hr/hr.editor.mjs +0 -16
- package/esm2022/plugins/hr/hr.plugin.mjs +0 -56
- package/esm2022/plugins/image/image.component.mjs +0 -474
- package/esm2022/plugins/image/image.editor.mjs +0 -116
- package/esm2022/plugins/image/image.plugin.mjs +0 -90
- package/esm2022/plugins/indent/indent.editor.mjs +0 -78
- package/esm2022/plugins/indent/indent.plugin.mjs +0 -59
- package/esm2022/plugins/indent/on-keydown-indent.mjs +0 -59
- package/esm2022/plugins/index.mjs +0 -73
- package/esm2022/plugins/inline-code/inline-code.component.mjs +0 -28
- package/esm2022/plugins/inline-code/inline-code.editor.mjs +0 -49
- package/esm2022/plugins/inline-code/inline-code.plugin.mjs +0 -67
- package/esm2022/plugins/link/edit/link-edit.component.mjs +0 -104
- package/esm2022/plugins/link/hover/link-hover.component.mjs +0 -38
- package/esm2022/plugins/link/link.component.mjs +0 -170
- package/esm2022/plugins/link/link.editor.mjs +0 -87
- package/esm2022/plugins/link/link.plugin.mjs +0 -89
- package/esm2022/plugins/link/link.types.mjs +0 -12
- package/esm2022/plugins/list/components/bulleted-list.component.mjs +0 -28
- package/esm2022/plugins/list/components/list-item.component.mjs +0 -88
- package/esm2022/plugins/list/components/numbered-list.component.mjs +0 -37
- package/esm2022/plugins/list/list.editor.mjs +0 -128
- package/esm2022/plugins/list/list.plugin.mjs +0 -302
- package/esm2022/plugins/list/normalizers/get-list-normalizer.mjs +0 -39
- package/esm2022/plugins/list/normalizers/normalize-list-item.mjs +0 -18
- package/esm2022/plugins/list/normalizers/normalize-no.mjs +0 -43
- package/esm2022/plugins/list/on-key-down-list.mjs +0 -33
- package/esm2022/plugins/list/queries/get-list-item-entry.mjs +0 -28
- package/esm2022/plugins/list/queries/get-list-item-sublist.mjs +0 -12
- package/esm2022/plugins/list/queries/get-list-types.mjs +0 -5
- package/esm2022/plugins/list/queries/get-start-list-item.mjs +0 -27
- package/esm2022/plugins/list/queries/has-list-in-list-item.mjs +0 -27
- package/esm2022/plugins/list/queries/is-in-list.mjs +0 -6
- package/esm2022/plugins/list/queries/is-list-nested.mjs +0 -10
- package/esm2022/plugins/list/queries/is-list.mjs +0 -5
- package/esm2022/plugins/list/queries/is-node-type-list.mjs +0 -5
- package/esm2022/plugins/list/queries/is-selection-at-list-item-start.mjs +0 -13
- package/esm2022/plugins/list/queries/is-selection-in-same-list-item.mjs +0 -17
- package/esm2022/plugins/list/queries/is-single-list-item.mjs +0 -9
- package/esm2022/plugins/list/transforms/insert-list-data.mjs +0 -72
- package/esm2022/plugins/list/transforms/insert-list-item.mjs +0 -73
- package/esm2022/plugins/list/transforms/move-list-item-down.mjs +0 -41
- package/esm2022/plugins/list/transforms/move-list-item-sublist-items-to-list-item-sublist.mjs +0 -43
- package/esm2022/plugins/list/transforms/move-list-item-sublist-items-to-list.mjs +0 -30
- package/esm2022/plugins/list/transforms/move-list-item-up.mjs +0 -78
- package/esm2022/plugins/list/transforms/unwrap-list.mjs +0 -10
- package/esm2022/plugins/list/types.mjs +0 -2
- package/esm2022/plugins/mark/mark.editor.mjs +0 -28
- package/esm2022/plugins/mark/mark.plugin.mjs +0 -105
- package/esm2022/plugins/mention/index.mjs +0 -5
- package/esm2022/plugins/mention/mention.editor.mjs +0 -179
- package/esm2022/plugins/mention/mention.plugin.mjs +0 -92
- package/esm2022/plugins/mention/mention.type.mjs +0 -2
- package/esm2022/plugins/mention/suggestion.component.mjs +0 -22
- package/esm2022/plugins/node-id/node-id.plugin.mjs +0 -78
- package/esm2022/plugins/normalizers/insert-paragraph-nodes.mjs +0 -28
- package/esm2022/plugins/normalizers/remove-empty-nodes.mjs +0 -18
- package/esm2022/plugins/normalizers/trailing-node.plugin.mjs +0 -33
- package/esm2022/plugins/paint-format/paint-format.editor.mjs +0 -126
- package/esm2022/plugins/public-api.mjs +0 -20
- package/esm2022/plugins/quick-insert/components/quick-insert.component.mjs +0 -126
- package/esm2022/plugins/quick-insert/index.mjs +0 -4
- package/esm2022/plugins/quick-insert/quick-insert.editor.mjs +0 -70
- package/esm2022/plugins/quick-insert/quick-insert.plugin.mjs +0 -109
- package/esm2022/plugins/soft-break/soft-break.plugin.mjs +0 -36
- package/esm2022/plugins/soft-break/soft-break.types.mjs +0 -2
- package/esm2022/plugins/table/components/insert-mark/insert-mark.component.mjs +0 -132
- package/esm2022/plugins/table/components/row/row.component.mjs +0 -93
- package/esm2022/plugins/table/components/table.component.mjs +0 -887
- package/esm2022/plugins/table/components/td/td.component.mjs +0 -610
- package/esm2022/plugins/table/components/toolbar/table-options.component.mjs +0 -102
- package/esm2022/plugins/table/components/toolbar/table-toolbar.component.mjs +0 -179
- package/esm2022/plugins/table/table.editor.mjs +0 -301
- package/esm2022/plugins/table/table.pipe.mjs +0 -66
- package/esm2022/plugins/table/table.plugin.mjs +0 -556
- package/esm2022/plugins/table/table.service.mjs +0 -122
- package/esm2022/plugins/table/table.store.mjs +0 -417
- package/esm2022/plugins/table/table.types.mjs +0 -68
- package/esm2022/plugins/table/toolbar-item.component.mjs +0 -95
- package/esm2022/plugins/table/transforms/clear-cell.mjs +0 -14
- package/esm2022/plugins/table/transforms/clear-table-node.mjs +0 -27
- package/esm2022/plugins/table/transforms/index.mjs +0 -8
- package/esm2022/plugins/table/transforms/insert-column.mjs +0 -69
- package/esm2022/plugins/table/transforms/insert-row.mjs +0 -50
- package/esm2022/plugins/table/transforms/insert-table.mjs +0 -15
- package/esm2022/plugins/table/transforms/move-selection-from-cell.mjs +0 -91
- package/esm2022/plugins/table/transforms/remove-column.mjs +0 -51
- package/esm2022/plugins/table/transforms/remove-row.mjs +0 -48
- package/esm2022/plugins/table/transforms/remove-table.mjs +0 -49
- package/esm2022/plugins/table/utils/add-columns.mjs +0 -38
- package/esm2022/plugins/table/utils/calc-anchor-position.mjs +0 -26
- package/esm2022/plugins/table/utils/calc-span.mjs +0 -73
- package/esm2022/plugins/table/utils/calculate-table.mjs +0 -116
- package/esm2022/plugins/table/utils/cell-position.mjs +0 -57
- package/esm2022/plugins/table/utils/create-cell.mjs +0 -19
- package/esm2022/plugins/table/utils/create-row.mjs +0 -12
- package/esm2022/plugins/table/utils/create-table-position.mjs +0 -10
- package/esm2022/plugins/table/utils/create-table.mjs +0 -15
- package/esm2022/plugins/table/utils/get-grid-columns.mjs +0 -79
- package/esm2022/plugins/table/utils/get-min-max-cell-index.mjs +0 -69
- package/esm2022/plugins/table/utils/get-next-cell.mjs +0 -44
- package/esm2022/plugins/table/utils/get-select-cell-node.mjs +0 -16
- package/esm2022/plugins/table/utils/handle-cell.mjs +0 -25
- package/esm2022/plugins/table/utils/index.mjs +0 -16
- package/esm2022/plugins/table/utils/is-header-row.mjs +0 -15
- package/esm2022/plugins/table/utils/is-legal-table.mjs +0 -26
- package/esm2022/plugins/table/utils/is-range-in-table.mjs +0 -16
- package/esm2022/plugins/table/utils/is-selection-in-table.mjs +0 -51
- package/esm2022/plugins/table/utils/is-virtual-key.mjs +0 -13
- package/esm2022/plugins/table/utils/merge-cell.mjs +0 -110
- package/esm2022/plugins/table/utils/next-path.mjs +0 -5
- package/esm2022/plugins/table/utils/normalize-table.mjs +0 -31
- package/esm2022/plugins/table/utils/remove-columns.mjs +0 -23
- package/esm2022/plugins/table/utils/remove-row-column.mjs +0 -45
- package/esm2022/plugins/table/utils/set-menu-cell-invisibility.mjs +0 -45
- package/esm2022/plugins/table/utils/split-cell.mjs +0 -29
- package/esm2022/plugins/table/utils/table-entry.mjs +0 -21
- package/esm2022/plugins/table/utils/table-position.mjs +0 -251
- package/esm2022/plugins/table/utils/table-viewport.mjs +0 -41
- package/esm2022/plugins/todo-item/todo-item.component.mjs +0 -65
- package/esm2022/plugins/todo-item/todo-item.editor.mjs +0 -32
- package/esm2022/plugins/todo-item/todo-item.plugin.mjs +0 -93
- package/esm2022/plugins/vertical-align/toolbar-item.component.mjs +0 -95
- package/esm2022/plugins/vertical-align/vertical-align.editor.mjs +0 -59
- package/esm2022/public-api.mjs +0 -22
- package/esm2022/queries/anchor-block-entry.mjs +0 -13
- package/esm2022/queries/anchor-block.mjs +0 -6
- package/esm2022/queries/anchor-inline-entry.mjs +0 -10
- package/esm2022/queries/find-descendant.mjs +0 -47
- package/esm2022/queries/find-node.mjs +0 -45
- package/esm2022/queries/find-path.mjs +0 -28
- package/esm2022/queries/get-above-by-type.mjs +0 -14
- package/esm2022/queries/get-above.mjs +0 -9
- package/esm2022/queries/get-anchor-block-entry.mjs +0 -8
- package/esm2022/queries/get-block-above.mjs +0 -10
- package/esm2022/queries/get-block-card-above.mjs +0 -10
- package/esm2022/queries/get-block-card-cursor.mjs +0 -9
- package/esm2022/queries/get-container-blocks.mjs +0 -12
- package/esm2022/queries/get-directly-parent.mjs +0 -12
- package/esm2022/queries/get-insert-elements-path.mjs +0 -46
- package/esm2022/queries/get-last-child-path.mjs +0 -9
- package/esm2022/queries/get-last-node.mjs +0 -17
- package/esm2022/queries/get-next-sibling-nodes.mjs +0 -17
- package/esm2022/queries/get-node.mjs +0 -10
- package/esm2022/queries/get-nodes-by-type.mjs +0 -15
- package/esm2022/queries/get-nodes.mjs +0 -7
- package/esm2022/queries/get-parent.mjs +0 -12
- package/esm2022/queries/get-plain-text.mjs +0 -16
- package/esm2022/queries/get-plugin-by-toolbar.mjs +0 -13
- package/esm2022/queries/get-point-before.mjs +0 -62
- package/esm2022/queries/get-point-from-location.mjs +0 -15
- package/esm2022/queries/get-previous-path.mjs +0 -9
- package/esm2022/queries/get-rang-from-block-start.mjs +0 -16
- package/esm2022/queries/get-range-before.mjs +0 -17
- package/esm2022/queries/get-selection-marks.mjs +0 -18
- package/esm2022/queries/get-selection-nodes-by-type.mjs +0 -30
- package/esm2022/queries/get-text.mjs +0 -9
- package/esm2022/queries/get-toolbar-disabled.mjs +0 -13
- package/esm2022/queries/index.mjs +0 -62
- package/esm2022/queries/is-across-blocks.mjs +0 -7
- package/esm2022/queries/is-ancestor-empty.mjs +0 -6
- package/esm2022/queries/is-ancestor.mjs +0 -3
- package/esm2022/queries/is-block-above-empty.mjs +0 -11
- package/esm2022/queries/is-block-active.mjs +0 -8
- package/esm2022/queries/is-block-card-cursor.mjs +0 -16
- package/esm2022/queries/is-block-text-empty-after-selection.mjs +0 -31
- package/esm2022/queries/is-collapsed.mjs +0 -7
- package/esm2022/queries/is-contain-nested-type.mjs +0 -29
- package/esm2022/queries/is-container-type.mjs +0 -3
- package/esm2022/queries/is-descendant.mjs +0 -3
- package/esm2022/queries/is-empty-content-filter.mjs +0 -22
- package/esm2022/queries/is-empty-content.mjs +0 -15
- package/esm2022/queries/is-empty-paragraph-by-path.mjs +0 -7
- package/esm2022/queries/is-empty-paragraph.mjs +0 -28
- package/esm2022/queries/is-first-child.mjs +0 -5
- package/esm2022/queries/is-global-collapsed.mjs +0 -5
- package/esm2022/queries/is-include-types.mjs +0 -12
- package/esm2022/queries/is-node-type-in.mjs +0 -9
- package/esm2022/queries/is-node-type.mjs +0 -15
- package/esm2022/queries/is-paragraph.mjs +0 -9
- package/esm2022/queries/is-point-at-root.mjs +0 -2
- package/esm2022/queries/is-range-across-blocks.mjs +0 -22
- package/esm2022/queries/is-range-at-root.mjs +0 -3
- package/esm2022/queries/is-root-path.mjs +0 -2
- package/esm2022/queries/is-start.mjs +0 -6
- package/esm2022/queries/some-node.mjs +0 -9
- package/esm2022/services/context.service.mjs +0 -140
- package/esm2022/services/table-contextmenu.service.mjs +0 -288
- package/esm2022/services/toolbar.service.mjs +0 -47
- package/esm2022/shortcuts/index.mjs +0 -5
- package/esm2022/shortcuts/mark.mjs +0 -25
- package/esm2022/test/basic/basic.component.mjs +0 -61
- package/esm2022/test/faker/data-transfer-faker.mjs +0 -13
- package/esm2022/test/faker/tethys-icon-faker.mjs +0 -22
- package/esm2022/test/index.mjs +0 -7
- package/esm2022/test/utils/mock-plugins.mjs +0 -104
- package/esm2022/test/utils/preset-config.mjs +0 -17
- package/esm2022/test/utils/with-plugin.mjs +0 -11
- package/esm2022/transforms/apply-deep-to-nodes.mjs +0 -22
- package/esm2022/transforms/clear-marks.mjs +0 -23
- package/esm2022/transforms/delete-element.mjs +0 -12
- package/esm2022/transforms/delete-node-by-type.mjs +0 -10
- package/esm2022/transforms/handle-continual-delete-backward.mjs +0 -18
- package/esm2022/transforms/handle-continual-insert-break.mjs +0 -20
- package/esm2022/transforms/index.mjs +0 -19
- package/esm2022/transforms/insert-elements.mjs +0 -55
- package/esm2022/transforms/insert-paragraph.mjs +0 -6
- package/esm2022/transforms/merge-deep-to-nodes.mjs +0 -9
- package/esm2022/transforms/move-children.mjs +0 -22
- package/esm2022/transforms/on-keydown-reset-block-type.mjs +0 -23
- package/esm2022/transforms/set-end-selection.mjs +0 -10
- package/esm2022/transforms/set-marks.mjs +0 -9
- package/esm2022/transforms/set-node-by-type.mjs +0 -10
- package/esm2022/transforms/set-node.mjs +0 -6
- package/esm2022/transforms/un-hang-range.mjs +0 -11
- package/esm2022/transforms/un-wrap.mjs +0 -12
- package/esm2022/transforms/unwrap-nodes-by-type.mjs +0 -14
- package/esm2022/utils/auto-focus.mjs +0 -24
- package/esm2022/utils/blob.mjs +0 -16
- package/esm2022/utils/cast-array.mjs +0 -7
- package/esm2022/utils/color-picker.mjs +0 -15
- package/esm2022/utils/common.mjs +0 -11
- package/esm2022/utils/copy-node.mjs +0 -38
- package/esm2022/utils/create-empty-paragraph.mjs +0 -14
- package/esm2022/utils/data-transform.mjs +0 -48
- package/esm2022/utils/dom.mjs +0 -56
- package/esm2022/utils/editor-uuid.mjs +0 -8
- package/esm2022/utils/fragment.mjs +0 -82
- package/esm2022/utils/get-editable-element-height.mjs +0 -6
- package/esm2022/utils/get-mode.mjs +0 -14
- package/esm2022/utils/get-toolbar-class.mjs +0 -6
- package/esm2022/utils/id-creator.mjs +0 -11
- package/esm2022/utils/index.mjs +0 -23
- package/esm2022/utils/insert-data-by-invalid-type.mjs +0 -70
- package/esm2022/utils/is-clean-empty-paragraph.mjs +0 -37
- package/esm2022/utils/is-inline.mjs +0 -9
- package/esm2022/utils/lodash.mjs +0 -3
- package/esm2022/utils/match.mjs +0 -32
- package/esm2022/utils/merge-element-options.mjs +0 -19
- package/esm2022/utils/normalize.mjs +0 -61
- package/esm2022/utils/refocus.mjs +0 -47
- package/esm2022/utils/scrolling.mjs +0 -43
- package/esm2022/utils/update-popover-position.mjs +0 -26
- package/esm2022/utils/weak-maps.mjs +0 -9
- package/esm2022/worktile-theia.mjs +0 -5
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { createPluginFactory } from '../../core';
|
|
2
|
-
import { PluginKeys } from '../../interfaces';
|
|
3
|
-
export const UNDOING = new WeakMap();
|
|
4
|
-
export const REDOING = new WeakMap();
|
|
5
|
-
export const withTheHistory = (editor) => {
|
|
6
|
-
const { undo, redo } = editor;
|
|
7
|
-
editor.undo = () => {
|
|
8
|
-
UNDOING.set(editor, true);
|
|
9
|
-
undo();
|
|
10
|
-
UNDOING.set(editor, false);
|
|
11
|
-
};
|
|
12
|
-
editor.redo = () => {
|
|
13
|
-
REDOING.set(editor, true);
|
|
14
|
-
redo();
|
|
15
|
-
REDOING.set(editor, false);
|
|
16
|
-
};
|
|
17
|
-
return editor;
|
|
18
|
-
};
|
|
19
|
-
export const TheHistoryEditor = {
|
|
20
|
-
isUndoing(editor) {
|
|
21
|
-
return UNDOING.get(editor);
|
|
22
|
-
},
|
|
23
|
-
isRedoing(editor) {
|
|
24
|
-
return REDOING.get(editor);
|
|
25
|
-
}
|
|
26
|
-
};
|
|
27
|
-
export const createTheHistoryPlugin = createPluginFactory({
|
|
28
|
-
key: PluginKeys.theHistory,
|
|
29
|
-
withOverrides: withTheHistory
|
|
30
|
-
});
|
|
31
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yeS5wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvcGx1Z2lucy9jb21tb24vaGlzdG9yeS5wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUU5QyxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLEVBQStCLENBQUM7QUFDbEUsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxFQUErQixDQUFDO0FBRWxFLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFtQixNQUFTLEVBQUssRUFBRTtJQUM3RCxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUU5QixNQUFNLENBQUMsSUFBSSxHQUFHLEdBQUcsRUFBRTtRQUNmLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzFCLElBQUksRUFBRSxDQUFDO1FBQ1AsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQyxDQUFDO0lBQ0YsTUFBTSxDQUFDLElBQUksR0FBRyxHQUFHLEVBQUU7UUFDZixPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxQixJQUFJLEVBQUUsQ0FBQztRQUNQLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUMsQ0FBQztJQUVGLE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHO0lBQzVCLFNBQVMsQ0FBQyxNQUFjO1FBQ3BCLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBQ0QsU0FBUyxDQUFDLE1BQWM7UUFDcEIsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9CLENBQUM7Q0FDSixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsbUJBQW1CLENBQUM7SUFDdEQsR0FBRyxFQUFFLFVBQVUsQ0FBQyxVQUFVO0lBQzFCLGFBQWEsRUFBRSxjQUFjO0NBQ2hDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVkaXRvciB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7IGNyZWF0ZVBsdWdpbkZhY3RvcnkgfSBmcm9tICcuLi8uLi9jb3JlJztcbmltcG9ydCB7IFBsdWdpbktleXMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNvbnN0IFVORE9JTkcgPSBuZXcgV2Vha01hcDxFZGl0b3IsIGJvb2xlYW4gfCB1bmRlZmluZWQ+KCk7XG5leHBvcnQgY29uc3QgUkVET0lORyA9IG5ldyBXZWFrTWFwPEVkaXRvciwgYm9vbGVhbiB8IHVuZGVmaW5lZD4oKTtcblxuZXhwb3J0IGNvbnN0IHdpdGhUaGVIaXN0b3J5ID0gPFQgZXh0ZW5kcyBFZGl0b3I+KGVkaXRvcjogVCk6IFQgPT4ge1xuICAgIGNvbnN0IHsgdW5kbywgcmVkbyB9ID0gZWRpdG9yO1xuXG4gICAgZWRpdG9yLnVuZG8gPSAoKSA9PiB7XG4gICAgICAgIFVORE9JTkcuc2V0KGVkaXRvciwgdHJ1ZSk7XG4gICAgICAgIHVuZG8oKTtcbiAgICAgICAgVU5ET0lORy5zZXQoZWRpdG9yLCBmYWxzZSk7XG4gICAgfTtcbiAgICBlZGl0b3IucmVkbyA9ICgpID0+IHtcbiAgICAgICAgUkVET0lORy5zZXQoZWRpdG9yLCB0cnVlKTtcbiAgICAgICAgcmVkbygpO1xuICAgICAgICBSRURPSU5HLnNldChlZGl0b3IsIGZhbHNlKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGVkaXRvcjtcbn07XG5cbmV4cG9ydCBjb25zdCBUaGVIaXN0b3J5RWRpdG9yID0ge1xuICAgIGlzVW5kb2luZyhlZGl0b3I6IEVkaXRvcik6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gVU5ET0lORy5nZXQoZWRpdG9yKTtcbiAgICB9LFxuICAgIGlzUmVkb2luZyhlZGl0b3I6IEVkaXRvcik6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gUkVET0lORy5nZXQoZWRpdG9yKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlVGhlSGlzdG9yeVBsdWdpbiA9IGNyZWF0ZVBsdWdpbkZhY3Rvcnkoe1xuICAgIGtleTogUGx1Z2luS2V5cy50aGVIaXN0b3J5LFxuICAgIHdpdGhPdmVycmlkZXM6IHdpdGhUaGVIaXN0b3J5XG59KTtcbiJdfQ==
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { PluginKeys } from '../../interfaces';
|
|
2
|
-
import { createPluginFactory } from '../../core';
|
|
3
|
-
import { extractFragment } from '../../utils/fragment';
|
|
4
|
-
import { insertDataByInvalidType } from '../../utils';
|
|
5
|
-
export const withInsertDataByInvalidType = (editor) => {
|
|
6
|
-
const { insertFragmentData } = editor;
|
|
7
|
-
editor.insertFragmentData = async (data) => {
|
|
8
|
-
const fragment = await extractFragment(data);
|
|
9
|
-
if (fragment) {
|
|
10
|
-
const isContinue = insertDataByInvalidType(editor, fragment);
|
|
11
|
-
if (!isContinue) {
|
|
12
|
-
return true;
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
return insertFragmentData(data);
|
|
16
|
-
};
|
|
17
|
-
return editor;
|
|
18
|
-
};
|
|
19
|
-
export const createInsertDataByInvalidTypePlugin = createPluginFactory({
|
|
20
|
-
key: PluginKeys.insertDataByInvalidType,
|
|
21
|
-
withOverrides: withInsertDataByInvalidType
|
|
22
|
-
});
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zZXJ0LWRhdGEtYnktaW52YWxpZC10eXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL3BsdWdpbnMvY29tbW9uL2luc2VydC1kYXRhLWJ5LWludmFsaWQtdHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFdEQsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsQ0FBbUIsTUFBUyxFQUFLLEVBQUU7SUFDMUUsTUFBTSxFQUFFLGtCQUFrQixFQUFFLEdBQUcsTUFBTSxDQUFDO0lBRXRDLE1BQU0sQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLEVBQUUsSUFBa0IsRUFBRSxFQUFFO1FBQ3JELE1BQU0sUUFBUSxHQUFHLE1BQU0sZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdDLElBQUksUUFBUSxFQUFFLENBQUM7WUFDWCxNQUFNLFVBQVUsR0FBRyx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDN0QsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNkLE9BQU8sSUFBSSxDQUFDO1lBQ2hCLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDLENBQUM7SUFFRixPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxtQ0FBbUMsR0FBRyxtQkFBbUIsQ0FBQztJQUNuRSxHQUFHLEVBQUUsVUFBVSxDQUFDLHVCQUF1QjtJQUN2QyxhQUFhLEVBQUUsMkJBQTJCO0NBQzdDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVkaXRvciB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7IFBsdWdpbktleXMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGNyZWF0ZVBsdWdpbkZhY3RvcnkgfSBmcm9tICcuLi8uLi9jb3JlJztcbmltcG9ydCB7IGV4dHJhY3RGcmFnbWVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2ZyYWdtZW50JztcbmltcG9ydCB7IGluc2VydERhdGFCeUludmFsaWRUeXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuXG5leHBvcnQgY29uc3Qgd2l0aEluc2VydERhdGFCeUludmFsaWRUeXBlID0gPFQgZXh0ZW5kcyBFZGl0b3I+KGVkaXRvcjogVCk6IFQgPT4ge1xuICAgIGNvbnN0IHsgaW5zZXJ0RnJhZ21lbnREYXRhIH0gPSBlZGl0b3I7XG5cbiAgICBlZGl0b3IuaW5zZXJ0RnJhZ21lbnREYXRhID0gYXN5bmMgKGRhdGE6IERhdGFUcmFuc2ZlcikgPT4ge1xuICAgICAgICBjb25zdCBmcmFnbWVudCA9IGF3YWl0IGV4dHJhY3RGcmFnbWVudChkYXRhKTtcbiAgICAgICAgaWYgKGZyYWdtZW50KSB7XG4gICAgICAgICAgICBjb25zdCBpc0NvbnRpbnVlID0gaW5zZXJ0RGF0YUJ5SW52YWxpZFR5cGUoZWRpdG9yLCBmcmFnbWVudCk7XG4gICAgICAgICAgICBpZiAoIWlzQ29udGludWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5zZXJ0RnJhZ21lbnREYXRhKGRhdGEpO1xuICAgIH07XG5cbiAgICByZXR1cm4gZWRpdG9yO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUluc2VydERhdGFCeUludmFsaWRUeXBlUGx1Z2luID0gY3JlYXRlUGx1Z2luRmFjdG9yeSh7XG4gICAga2V5OiBQbHVnaW5LZXlzLmluc2VydERhdGFCeUludmFsaWRUeXBlLFxuICAgIHdpdGhPdmVycmlkZXM6IHdpdGhJbnNlcnREYXRhQnlJbnZhbGlkVHlwZVxufSk7XG4iXX0=
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
import { timer } from 'rxjs';
|
|
2
|
-
import { Editor, Element, Operation, Range, Transforms } from 'slate';
|
|
3
|
-
import { AngularEditor, hotkeys } from 'slate-angular';
|
|
4
|
-
import { createPluginFactory } from '../../core';
|
|
5
|
-
import { PluginKeys } from '../../interfaces';
|
|
6
|
-
import * as TheQueries from '../../queries';
|
|
7
|
-
import { isInline } from '../../utils/is-inline';
|
|
8
|
-
import { THE_EDITOR_PREVIOUS_SELECTION } from '../../utils/weak-maps';
|
|
9
|
-
export const withMoveSelection = (editor) => {
|
|
10
|
-
const { onClick, deleteBackward, onKeydown, onChange } = editor;
|
|
11
|
-
editor.onClick = (event) => {
|
|
12
|
-
const domSelection = window.getSelection();
|
|
13
|
-
if (domSelection && !domSelection.isCollapsed && event.detail >= 2 && editor.selection) {
|
|
14
|
-
const slateSelection = AngularEditor.toSlateRange(editor, domSelection);
|
|
15
|
-
const isNextStart = slateSelection.focus.offset === 0;
|
|
16
|
-
if (Range.isExpanded(slateSelection) && Range.isForward(slateSelection) && isNextStart) {
|
|
17
|
-
const beforePoint = Editor.before(editor, slateSelection.focus);
|
|
18
|
-
const changedRange = Editor.range(editor, slateSelection.anchor, beforePoint);
|
|
19
|
-
// slate-angular throttle 80ms, so wait selectionchange complete
|
|
20
|
-
timer(81).subscribe(() => {
|
|
21
|
-
Transforms.select(editor, changedRange);
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
onClick(event);
|
|
26
|
-
};
|
|
27
|
-
editor.deleteBackward = unit => {
|
|
28
|
-
const { selection } = editor;
|
|
29
|
-
const inlineBlockEntry = Editor.above(editor, {
|
|
30
|
-
match: n => Element.isElement(n) && Editor.isInline(editor, n)
|
|
31
|
-
});
|
|
32
|
-
// fix deleteBackward on the start of inline block
|
|
33
|
-
// deleteBackward logic bug
|
|
34
|
-
if (inlineBlockEntry &&
|
|
35
|
-
!(Element.isElement(inlineBlockEntry[0]) && Editor.isVoid(editor, inlineBlockEntry[0])) &&
|
|
36
|
-
selection.anchor.offset === 0) {
|
|
37
|
-
const beforePoint = TheQueries.getPointBefore(editor, selection.focus);
|
|
38
|
-
Transforms.select(editor, beforePoint);
|
|
39
|
-
}
|
|
40
|
-
deleteBackward(unit);
|
|
41
|
-
};
|
|
42
|
-
editor.onKeydown = (event) => {
|
|
43
|
-
const { selection } = editor;
|
|
44
|
-
if (!selection || !selection.anchor || !selection.focus) {
|
|
45
|
-
onKeydown(event);
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
const isMoveBackward = hotkeys.isMoveBackward(event);
|
|
49
|
-
const isMoveForward = hotkeys.isMoveForward(event);
|
|
50
|
-
const isCollapsed = selection && TheQueries.isCollapsed(selection);
|
|
51
|
-
const isInlineNode = isInline(editor);
|
|
52
|
-
if (isCollapsed && isMoveForward) {
|
|
53
|
-
let isInlineCodeBefore = false;
|
|
54
|
-
if (!isInlineNode) {
|
|
55
|
-
try {
|
|
56
|
-
const { path } = Editor.after(editor, selection);
|
|
57
|
-
if (path) {
|
|
58
|
-
isInlineCodeBefore = isInline(editor, path);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
catch (error) { }
|
|
62
|
-
}
|
|
63
|
-
if (isInlineNode || isInlineCodeBefore) {
|
|
64
|
-
event.preventDefault();
|
|
65
|
-
Transforms.move(editor, { unit: 'offset' });
|
|
66
|
-
return;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
if (isCollapsed && isMoveBackward) {
|
|
70
|
-
let isInlineCodeAfter = false;
|
|
71
|
-
if (!isInlineNode) {
|
|
72
|
-
try {
|
|
73
|
-
const { path } = Editor.before(editor, selection);
|
|
74
|
-
isInlineCodeAfter = isInline(editor, path);
|
|
75
|
-
}
|
|
76
|
-
catch (error) { }
|
|
77
|
-
}
|
|
78
|
-
if (isInlineNode || isInlineCodeAfter) {
|
|
79
|
-
event.preventDefault();
|
|
80
|
-
Transforms.move(editor, { unit: 'offset', reverse: true });
|
|
81
|
-
return;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
onKeydown(event);
|
|
85
|
-
};
|
|
86
|
-
editor.onChange = () => {
|
|
87
|
-
if (!editor.selection && editor.operations.length) {
|
|
88
|
-
const isSelectionOperation = editor.operations.every(op => Operation.isSelectionOperation(op));
|
|
89
|
-
if (isSelectionOperation) {
|
|
90
|
-
const prevSelection = editor.operations[0].properties;
|
|
91
|
-
THE_EDITOR_PREVIOUS_SELECTION.set(editor, {
|
|
92
|
-
rangeRef: Editor.rangeRef(editor, prevSelection),
|
|
93
|
-
selection: prevSelection
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
onChange();
|
|
98
|
-
};
|
|
99
|
-
return editor;
|
|
100
|
-
};
|
|
101
|
-
export const createMoveSelectionPlugin = createPluginFactory({
|
|
102
|
-
key: PluginKeys.moveSelection,
|
|
103
|
-
withOverrides: withMoveSelection
|
|
104
|
-
});
|
|
105
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW92ZS1zZWxlY3Rpb24ucGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL3BsdWdpbnMvY29tbW9uL21vdmUtc2VsZWN0aW9uLnBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBYSxNQUFNLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXNCLFVBQVUsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNyRyxPQUFPLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sS0FBSyxVQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RSxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFtQixNQUFTLEVBQUssRUFBRTtJQUNoRSxNQUFNLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEdBQUcsTUFBTSxDQUFDO0lBRWhFLE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEVBQUU7UUFDbkMsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzNDLElBQUksWUFBWSxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDckYsTUFBTSxjQUFjLEdBQUcsYUFBYSxDQUFD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QUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JCLENBQUMsQ0FBQztJQUVGLE1BQU0sQ0FBQyxRQUFRLEdBQUcsR0FBRyxFQUFFO1FBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEQsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQy9GLElBQUksb0JBQW9CLEVBQUUsQ0FBQztnQkFDdkIsTUFBTSxhQUFhLEdBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQXdCLENBQUMsVUFBdUIsQ0FBQztnQkFDM0YsNkJBQTZCLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRTtvQkFDdEMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQztvQkFDaEQsU0FBUyxFQUFFLGFBQWE7aUJBQzNCLENBQUMsQ0FBQztZQUNQLENBQUM7UUFDTCxDQUFDO1FBQ0QsUUFBUSxFQUFFLENBQUM7SUFDZixDQUFDLENBQUM7SUFFRixPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxtQkFBbUIsQ0FBQztJQUN6RCxHQUFHLEVBQUUsVUFBVSxDQUFDLGFBQWE7SUFDN0IsYUFBYSxFQUFFLGlCQUFpQjtDQUNuQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQmFzZVJhbmdlLCBFZGl0b3IsIEVsZW1lbnQsIE9wZXJhdGlvbiwgUmFuZ2UsIFNlbGVjdGlvbk9wZXJhdGlvbiwgVHJhbnNmb3JtcyB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7IEFuZ3VsYXJFZGl0b3IsIGhvdGtleXMgfSBmcm9tICdzbGF0ZS1hbmd1bGFyJztcbmltcG9ydCB7IGNyZWF0ZVBsdWdpbkZhY3RvcnkgfSBmcm9tICcuLi8uLi9jb3JlJztcbmltcG9ydCB7IFBsdWdpbktleXMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCAqIGFzIFRoZVF1ZXJpZXMgZnJvbSAnLi4vLi4vcXVlcmllcyc7XG5pbXBvcnQgeyBpc0lubGluZSB9IGZyb20gJy4uLy4uL3V0aWxzL2lzLWlubGluZSc7XG5pbXBvcnQgeyBUSEVfRURJVE9SX1BSRVZJT1VTX1NFTEVDVElPTiB9IGZyb20gJy4uLy4uL3V0aWxzL3dlYWstbWFwcyc7XG5cbmV4cG9ydCBjb25zdCB3aXRoTW92ZVNlbGVjdGlvbiA9IDxUIGV4dGVuZHMgRWRpdG9yPihlZGl0b3I6IFQpOiBUID0+IHtcbiAgICBjb25zdCB7IG9uQ2xpY2ssIGRlbGV0ZUJhY2t3YXJkLCBvbktleWRvd24sIG9uQ2hhbmdlIH0gPSBlZGl0b3I7XG5cbiAgICBlZGl0b3Iub25DbGljayA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICBjb25zdCBkb21TZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgIGlmIChkb21TZWxlY3Rpb24gJiYgIWRvbVNlbGVjdGlvbi5pc0NvbGxhcHNlZCAmJiBldmVudC5kZXRhaWwgPj0gMiAmJiBlZGl0b3Iuc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBzbGF0ZVNlbGVjdGlvbiA9IEFuZ3VsYXJFZGl0b3IudG9TbGF0ZVJhbmdlKGVkaXRvciwgZG9tU2VsZWN0aW9uKTtcbiAgICAgICAgICAgIGNvbnN0IGlzTmV4dFN0YXJ0ID0gc2xhdGVTZWxlY3Rpb24uZm9jdXMub2Zmc2V0ID09PSAwO1xuXG4gICAgICAgICAgICBpZiAoUmFuZ2UuaXNFeHBhbmRlZChzbGF0ZVNlbGVjdGlvbikgJiYgUmFuZ2UuaXNGb3J3YXJkKHNsYXRlU2VsZWN0aW9uKSAmJiBpc05leHRTdGFydCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJlZm9yZVBvaW50ID0gRWRpdG9yLmJlZm9yZShlZGl0b3IsIHNsYXRlU2VsZWN0aW9uLmZvY3VzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGFuZ2VkUmFuZ2UgPSBFZGl0b3IucmFuZ2UoZWRpdG9yLCBzbGF0ZVNlbGVjdGlvbi5hbmNob3IsIGJlZm9yZVBvaW50KTtcblxuICAgICAgICAgICAgICAgIC8vIHNsYXRlLWFuZ3VsYXIgdGhyb3R0bGUgODBtcywgc28gd2FpdCBzZWxlY3Rpb25jaGFuZ2UgY29tcGxldGVcbiAgICAgICAgICAgICAgICB0aW1lcig4MSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZWxlY3QoZWRpdG9yLCBjaGFuZ2VkUmFuZ2UpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9uQ2xpY2soZXZlbnQpO1xuICAgIH07XG5cbiAgICBlZGl0b3IuZGVsZXRlQmFja3dhcmQgPSB1bml0ID0+IHtcbiAgICAgICAgY29uc3QgeyBzZWxlY3Rpb24gfSA9IGVkaXRvcjtcbiAgICAgICAgY29uc3QgaW5saW5lQmxvY2tFbnRyeSA9IEVkaXRvci5hYm92ZShlZGl0b3IsIHtcbiAgICAgICAgICAgIG1hdGNoOiBuID0+IEVsZW1lbnQuaXNFbGVtZW50KG4pICYmIEVkaXRvci5pc0lubGluZShlZGl0b3IsIG4pXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBmaXggZGVsZXRlQmFja3dhcmQgb24gdGhlIHN0YXJ0IG9mIGlubGluZSBibG9ja1xuICAgICAgICAvLyBkZWxldGVCYWNrd2FyZCBsb2dpYyBidWdcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgaW5saW5lQmxvY2tFbnRyeSAmJlxuICAgICAgICAgICAgIShFbGVtZW50LmlzRWxlbWVudChpbmxpbmVCbG9ja0VudHJ5WzBdKSAmJiBFZGl0b3IuaXNWb2lkKGVkaXRvciwgaW5saW5lQmxvY2tFbnRyeVswXSkpICYmXG4gICAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yLm9mZnNldCA9PT0gMFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IGJlZm9yZVBvaW50ID0gVGhlUXVlcmllcy5nZXRQb2ludEJlZm9yZShlZGl0b3IsIHNlbGVjdGlvbi5mb2N1cyk7XG4gICAgICAgICAgICBUcmFuc2Zvcm1zLnNlbGVjdChlZGl0b3IsIGJlZm9yZVBvaW50KTtcbiAgICAgICAgfVxuICAgICAgICBkZWxldGVCYWNrd2FyZCh1bml0KTtcbiAgICB9O1xuXG4gICAgZWRpdG9yLm9uS2V5ZG93biA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICBjb25zdCB7IHNlbGVjdGlvbiB9ID0gZWRpdG9yO1xuICAgICAgICBpZiAoIXNlbGVjdGlvbiB8fCAhc2VsZWN0aW9uLmFuY2hvciB8fCAhc2VsZWN0aW9uLmZvY3VzKSB7XG4gICAgICAgICAgICBvbktleWRvd24oZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlzTW92ZUJhY2t3YXJkID0gaG90a2V5cy5pc01vdmVCYWNrd2FyZChldmVudCk7XG4gICAgICAgIGNvbnN0IGlzTW92ZUZvcndhcmQgPSBob3RrZXlzLmlzTW92ZUZvcndhcmQoZXZlbnQpO1xuICAgICAgICBjb25zdCBpc0NvbGxhcHNlZCA9IHNlbGVjdGlvbiAmJiBUaGVRdWVyaWVzLmlzQ29sbGFwc2VkKHNlbGVjdGlvbik7XG4gICAgICAgIGNvbnN0IGlzSW5saW5lTm9kZSA9IGlzSW5saW5lKGVkaXRvcik7XG4gICAgICAgIGlmIChpc0NvbGxhcHNlZCAmJiBpc01vdmVGb3J3YXJkKSB7XG4gICAgICAgICAgICBsZXQgaXNJbmxpbmVDb2RlQmVmb3JlID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoIWlzSW5saW5lTm9kZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgcGF0aCB9ID0gRWRpdG9yLmFmdGVyKGVkaXRvciwgc2VsZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzSW5saW5lQ29kZUJlZm9yZSA9IGlzSW5saW5lKGVkaXRvciwgcGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge31cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0lubGluZU5vZGUgfHwgaXNJbmxpbmVDb2RlQmVmb3JlKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLm1vdmUoZWRpdG9yLCB7IHVuaXQ6ICdvZmZzZXQnIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNDb2xsYXBzZWQgJiYgaXNNb3ZlQmFja3dhcmQpIHtcbiAgICAgICAgICAgIGxldCBpc0lubGluZUNvZGVBZnRlciA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKCFpc0lubGluZU5vZGUpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHBhdGggfSA9IEVkaXRvci5iZWZvcmUoZWRpdG9yLCBzZWxlY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICBpc0lubGluZUNvZGVBZnRlciA9IGlzSW5saW5lKGVkaXRvciwgcGF0aCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNJbmxpbmVOb2RlIHx8IGlzSW5saW5lQ29kZUFmdGVyKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLm1vdmUoZWRpdG9yLCB7IHVuaXQ6ICdvZmZzZXQnLCByZXZlcnNlOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvbktleWRvd24oZXZlbnQpO1xuICAgIH07XG5cbiAgICBlZGl0b3Iub25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgICAgIGlmICghZWRpdG9yLnNlbGVjdGlvbiAmJiBlZGl0b3Iub3BlcmF0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGlzU2VsZWN0aW9uT3BlcmF0aW9uID0gZWRpdG9yLm9wZXJhdGlvbnMuZXZlcnkob3AgPT4gT3BlcmF0aW9uLmlzU2VsZWN0aW9uT3BlcmF0aW9uKG9wKSk7XG4gICAgICAgICAgICBpZiAoaXNTZWxlY3Rpb25PcGVyYXRpb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2U2VsZWN0aW9uID0gKGVkaXRvci5vcGVyYXRpb25zWzBdIGFzIFNlbGVjdGlvbk9wZXJhdGlvbikucHJvcGVydGllcyBhcyBCYXNlUmFuZ2U7XG4gICAgICAgICAgICAgICAgVEhFX0VESVRPUl9QUkVWSU9VU19TRUxFQ1RJT04uc2V0KGVkaXRvciwge1xuICAgICAgICAgICAgICAgICAgICByYW5nZVJlZjogRWRpdG9yLnJhbmdlUmVmKGVkaXRvciwgcHJldlNlbGVjdGlvbiksXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogcHJldlNlbGVjdGlvblxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9uQ2hhbmdlKCk7XG4gICAgfTtcblxuICAgIHJldHVybiBlZGl0b3I7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlTW92ZVNlbGVjdGlvblBsdWdpbiA9IGNyZWF0ZVBsdWdpbkZhY3Rvcnkoe1xuICAgIGtleTogUGx1Z2luS2V5cy5tb3ZlU2VsZWN0aW9uLFxuICAgIHdpdGhPdmVycmlkZXM6IHdpdGhNb3ZlU2VsZWN0aW9uXG59KTtcbiJdfQ==
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { Editor, Element, Node, Path, Transforms } from 'slate';
|
|
2
|
-
import { HistoryEditor } from 'slate-history';
|
|
3
|
-
import { HEADING_TYPES } from '../../constants';
|
|
4
|
-
import { createPluginFactory } from '../../core';
|
|
5
|
-
import { PluginKeys } from '../../interfaces';
|
|
6
|
-
import * as TheQueries from '../../queries';
|
|
7
|
-
export const withRemoveEmpty = (editor) => {
|
|
8
|
-
const { deleteBackward, deleteForward } = editor;
|
|
9
|
-
editor.deleteBackward = unit => {
|
|
10
|
-
const { selection } = editor;
|
|
11
|
-
const anchorBlock = TheQueries.anchorBlock(editor);
|
|
12
|
-
if (!anchorBlock) {
|
|
13
|
-
deleteBackward(unit);
|
|
14
|
-
return;
|
|
15
|
-
}
|
|
16
|
-
// delete empty paragraphs or empty headings, the default operation is to delete before the void node
|
|
17
|
-
const parentPath = Path.parent(editor.selection.anchor.path);
|
|
18
|
-
const isEmptyHeading = HEADING_TYPES.includes(anchorBlock.type) && Editor.isEmpty(editor, anchorBlock);
|
|
19
|
-
const isEmptyParagraph = TheQueries.isEmptyParagraph(editor, editor.selection.anchor);
|
|
20
|
-
if ((isEmptyParagraph || isEmptyHeading) && parentPath[parentPath.length - 1] > 0) {
|
|
21
|
-
const previousNodeOfParent = Node.get(editor, Path.previous(parentPath));
|
|
22
|
-
if (Element.isElement(previousNodeOfParent) && Editor.isVoid(editor, previousNodeOfParent)) {
|
|
23
|
-
Transforms.delete(editor, { at: editor.selection.anchor.path.slice(0, editor.selection.anchor.path.length - 1) });
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
// just remove inline node when before inline node text length is 1, default action is remove current the block above inline node
|
|
28
|
-
if (selection.anchor.path[selection.anchor.path.length - 1] > 0 && selection.anchor.offset === 0) {
|
|
29
|
-
const beforePoint = Editor.before(editor, editor.selection);
|
|
30
|
-
const inlineEntry = Editor.above(editor, {
|
|
31
|
-
at: beforePoint,
|
|
32
|
-
match: n => Element.isElement(n) && Editor.isInline(editor, n) && !Editor.isVoid(editor, n)
|
|
33
|
-
});
|
|
34
|
-
if (inlineEntry && Editor.string(editor, inlineEntry[1]).length === 1) {
|
|
35
|
-
Transforms.removeNodes(editor, { at: inlineEntry[1] });
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
deleteBackward(unit);
|
|
40
|
-
};
|
|
41
|
-
editor.deleteForward = unit => {
|
|
42
|
-
const anchorBlockEntry = TheQueries.anchorBlockEntry(editor);
|
|
43
|
-
if (anchorBlockEntry &&
|
|
44
|
-
TheQueries.isAncestorEmpty(editor, anchorBlockEntry[0]) &&
|
|
45
|
-
TheQueries.getNode(editor, Path.next(anchorBlockEntry[1]))) {
|
|
46
|
-
const pathRef = Editor.pathRef(editor, Path.parent(editor.selection.anchor.path));
|
|
47
|
-
HistoryEditor.withoutMerging(editor, () => {
|
|
48
|
-
Transforms.move(editor);
|
|
49
|
-
});
|
|
50
|
-
Transforms.delete(editor, { at: pathRef.unref() });
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
deleteForward(unit);
|
|
54
|
-
};
|
|
55
|
-
return editor;
|
|
56
|
-
};
|
|
57
|
-
export const createRemoveEmptyPlugin = createPluginFactory({
|
|
58
|
-
key: PluginKeys.removeEmpty,
|
|
59
|
-
withOverrides: withRemoveEmpty
|
|
60
|
-
});
|
|
61
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3ZlLWVtcHR5LnBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NyYy9wbHVnaW5zL2NvbW1vbi9yZW1vdmUtZW1wdHkucGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxLQUFLLFVBQVUsTUFBTSxlQUFlLENBQUM7QUFFNUMsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQW1CLE1BQVMsRUFBSyxFQUFFO0lBQzlELE1BQU0sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLEdBQUcsTUFBTSxDQUFDO0lBRWpELE1BQU0sQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLEVBQUU7UUFDM0IsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sQ0FBQztRQUM3QixNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRW5ELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNmLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyQixPQUFPO1FBQ1gsQ0FBQztRQUVELHFHQUFxRztRQUNyRyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdELE1BQU0sY0FBYyxHQUFHLGFBQWEsQ0FB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LENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ2xGLGFBQWEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRTtnQkFDdEMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM1QixDQUFDLENBQUMsQ0FBQztZQUNILFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbkQsT0FBTztRQUNYLENBQUM7UUFDRCxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEIsQ0FBQyxDQUFDO0lBRUYsT0FBTyxNQUFNLENBQUM7QUFDbEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsbUJBQW1CLENBQUM7SUFDdkQsR0FBRyxFQUFFLFVBQVUsQ0FBQyxXQUFXO0lBQzNCLGFBQWEsRUFBRSxlQUFlO0NBQ2pDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVkaXRvciwgRWxlbWVudCwgTm9kZSwgUGF0aCwgVHJhbnNmb3JtcyB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7IEhpc3RvcnlFZGl0b3IgfSBmcm9tICdzbGF0ZS1oaXN0b3J5JztcbmltcG9ydCB7IEhFQURJTkdfVFlQRVMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgY3JlYXRlUGx1Z2luRmFjdG9yeSB9IGZyb20gJy4uLy4uL2NvcmUnO1xuaW1wb3J0IHsgUGx1Z2luS2V5cyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0ICogYXMgVGhlUXVlcmllcyBmcm9tICcuLi8uLi9xdWVyaWVzJztcblxuZXhwb3J0IGNvbnN0IHdpdGhSZW1vdmVFbXB0eSA9IDxUIGV4dGVuZHMgRWRpdG9yPihlZGl0b3I6IFQpOiBUID0+IHtcbiAgICBjb25zdCB7IGRlbGV0ZUJhY2t3YXJkLCBkZWxldGVGb3J3YXJkIH0gPSBlZGl0b3I7XG5cbiAgICBlZGl0b3IuZGVsZXRlQmFja3dhcmQgPSB1bml0ID0+IHtcbiAgICAgICAgY29uc3QgeyBzZWxlY3Rpb24gfSA9IGVkaXRvcjtcbiAgICAgICAgY29uc3QgYW5jaG9yQmxvY2sgPSBUaGVRdWVyaWVzLmFuY2hvckJsb2NrKGVkaXRvcik7XG5cbiAgICAgICAgaWYgKCFhbmNob3JCbG9jaykge1xuICAgICAgICAgICAgZGVsZXRlQmFja3dhcmQodW5pdCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkZWxldGUgZW1wdHkgcGFyYWdyYXBocyBvciBlbXB0eSBoZWFkaW5ncywgdGhlIGRlZmF1bHQgb3BlcmF0aW9uIGlzIHRvIGRlbGV0ZSBiZWZvcmUgdGhlIHZvaWQgbm9kZVxuICAgICAgICBjb25zdCBwYXJlbnRQYXRoID0gUGF0aC5wYXJlbnQoZWRpdG9yLnNlbGVjdGlvbi5hbmNob3IucGF0aCk7XG4gICAgICAgIGNvbnN0IGlzRW1wdHlIZWFkaW5nID0gSEVBRElOR19UWVBFUy5pbmNsdWRlcyhhbmNob3JCbG9jay50eXBlKSAmJiBFZGl0b3IuaXNFbXB0eShlZGl0b3IsIGFuY2hvckJsb2NrKTtcbiAgICAgICAgY29uc3QgaXNFbXB0eVBhcmFncmFwaCA9IFRoZVF1ZXJpZXMuaXNFbXB0eVBhcmFncmFwaChlZGl0b3IsIGVkaXRvci5zZWxlY3Rpb24uYW5jaG9yKTtcbiAgICAgICAgaWYgKChpc0VtcHR5UGFyYWdyYXBoIHx8IGlzRW1wdHlIZWFkaW5nKSAmJiBwYXJlbnRQYXRoW3BhcmVudFBhdGgubGVuZ3RoIC0gMV0gPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBwcmV2aW91c05vZGVPZlBhcmVudCA9IE5vZGUuZ2V0KGVkaXRvciwgUGF0aC5wcmV2aW91cyhwYXJlbnRQYXRoKSk7XG4gICAgICAgICAgICBpZiAoRWxlbWVudC5pc0VsZW1lbnQocHJldmlvdXNOb2RlT2ZQYXJlbnQpICYmIEVkaXRvci5pc1ZvaWQoZWRpdG9yLCBwcmV2aW91c05vZGVPZlBhcmVudCkpIHtcbiAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLmRlbGV0ZShlZGl0b3IsIHsgYXQ6IGVkaXRvci5zZWxlY3Rpb24uYW5jaG9yLnBhdGguc2xpY2UoMCwgZWRpdG9yLnNlbGVjdGlvbi5hbmNob3IucGF0aC5sZW5ndGggLSAxKSB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBqdXN0IHJlbW92ZSBpbmxpbmUgbm9kZSB3aGVuIGJlZm9yZSBpbmxpbmUgbm9kZSB0ZXh0IGxlbmd0aCBpcyAxLCBkZWZhdWx0IGFjdGlvbiBpcyByZW1vdmUgY3VycmVudCB0aGUgYmxvY2sgYWJvdmUgaW5saW5lIG5vZGVcbiAgICAgICAgaWYgKHNlbGVjdGlvbi5hbmNob3IucGF0aFtzZWxlY3Rpb24uYW5jaG9yLnBhdGgubGVuZ3RoIC0gMV0gPiAwICYmIHNlbGVjdGlvbi5hbmNob3Iub2Zmc2V0ID09PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBiZWZvcmVQb2ludCA9IEVkaXRvci5iZWZvcmUoZWRpdG9yLCBlZGl0b3Iuc2VsZWN0aW9uKTtcbiAgICAgICAgICAgIGNvbnN0IGlubGluZUVudHJ5ID0gRWRpdG9yLmFib3ZlPEVsZW1lbnQ+KGVkaXRvciwge1xuICAgICAgICAgICAgICAgIGF0OiBiZWZvcmVQb2ludCxcbiAgICAgICAgICAgICAgICBtYXRjaDogbiA9PiBFbGVtZW50LmlzRWxlbWVudChuKSAmJiBFZGl0b3IuaXNJbmxpbmUoZWRpdG9yLCBuKSAmJiAhRWRpdG9yLmlzVm9pZChlZGl0b3IsIG4pXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChpbmxpbmVFbnRyeSAmJiBFZGl0b3Iuc3RyaW5nKGVkaXRvciwgaW5saW5lRW50cnlbMV0pLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMucmVtb3ZlTm9kZXMoZWRpdG9yLCB7IGF0OiBpbmxpbmVFbnRyeVsxXSB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlQmFja3dhcmQodW5pdCk7XG4gICAgfTtcblxuICAgIGVkaXRvci5kZWxldGVGb3J3YXJkID0gdW5pdCA9PiB7XG4gICAgICAgIGNvbnN0IGFuY2hvckJsb2NrRW50cnkgPSBUaGVRdWVyaWVzLmFuY2hvckJsb2NrRW50cnkoZWRpdG9yKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgYW5jaG9yQmxvY2tFbnRyeSAmJlxuICAgICAgICAgICAgVGhlUXVlcmllcy5pc0FuY2VzdG9yRW1wdHkoZWRpdG9yLCBhbmNob3JCbG9ja0VudHJ5WzBdKSAmJlxuICAgICAgICAgICAgVGhlUXVlcmllcy5nZXROb2RlKGVkaXRvciwgUGF0aC5uZXh0KGFuY2hvckJsb2NrRW50cnlbMV0pKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IHBhdGhSZWYgPSBFZGl0b3IucGF0aFJlZihlZGl0b3IsIFBhdGgucGFyZW50KGVkaXRvci5zZWxlY3Rpb24uYW5jaG9yLnBhdGgpKTtcbiAgICAgICAgICAgIEhpc3RvcnlFZGl0b3Iud2l0aG91dE1lcmdpbmcoZWRpdG9yLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5tb3ZlKGVkaXRvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFRyYW5zZm9ybXMuZGVsZXRlKGVkaXRvciwgeyBhdDogcGF0aFJlZi51bnJlZigpIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZUZvcndhcmQodW5pdCk7XG4gICAgfTtcblxuICAgIHJldHVybiBlZGl0b3I7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlUmVtb3ZlRW1wdHlQbHVnaW4gPSBjcmVhdGVQbHVnaW5GYWN0b3J5KHtcbiAgICBrZXk6IFBsdWdpbktleXMucmVtb3ZlRW1wdHksXG4gICAgd2l0aE92ZXJyaWRlczogd2l0aFJlbW92ZUVtcHR5XG59KTtcbiJdfQ==
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { Editor, Element, Path, Transforms } from 'slate';
|
|
2
|
-
import { hotkeys } from 'slate-angular';
|
|
3
|
-
import { HistoryEditor } from 'slate-history';
|
|
4
|
-
import { createPluginFactory } from '../../core';
|
|
5
|
-
import { PluginKeys } from '../../interfaces';
|
|
6
|
-
import * as TheQueries from '../../queries';
|
|
7
|
-
import { createEmptyParagraph } from '../../utils/create-empty-paragraph';
|
|
8
|
-
export const withRemoveVoid = (editor) => {
|
|
9
|
-
const { deleteBackward, deleteForward, onKeydown } = editor;
|
|
10
|
-
const deleteBlockVoid = (e) => {
|
|
11
|
-
const aboveEntry = TheQueries.getAbove(e);
|
|
12
|
-
const canDelete = aboveEntry && Element.isElement(aboveEntry[0]) && Editor.isBlock(e, aboveEntry[0]) && Editor.isVoid(e, aboveEntry[0]);
|
|
13
|
-
if (canDelete) {
|
|
14
|
-
Transforms.insertNodes(e, createEmptyParagraph(), { at: Path.next(aboveEntry[1]) });
|
|
15
|
-
Transforms.select(e, Path.next(aboveEntry[1]));
|
|
16
|
-
Transforms.removeNodes(e, { at: aboveEntry[1] });
|
|
17
|
-
}
|
|
18
|
-
return canDelete;
|
|
19
|
-
};
|
|
20
|
-
editor.deleteBackward = unit => {
|
|
21
|
-
if (deleteBlockVoid(editor)) {
|
|
22
|
-
return;
|
|
23
|
-
}
|
|
24
|
-
deleteBackward(unit);
|
|
25
|
-
};
|
|
26
|
-
editor.onKeydown = event => {
|
|
27
|
-
const aboveEntry = TheQueries.getAbove(editor);
|
|
28
|
-
if (aboveEntry &&
|
|
29
|
-
Element.isElement(aboveEntry[0]) &&
|
|
30
|
-
Editor.isVoid(editor, aboveEntry[0]) &&
|
|
31
|
-
Editor.isInline(editor, aboveEntry[0])) {
|
|
32
|
-
if (hotkeys.isDeleteBackward(event) || hotkeys.isDeleteForward(event)) {
|
|
33
|
-
event.preventDefault();
|
|
34
|
-
HistoryEditor.withoutMerging(editor, () => {
|
|
35
|
-
Transforms.move(editor);
|
|
36
|
-
});
|
|
37
|
-
Transforms.delete(editor, { reverse: true });
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
if (hotkeys.isSplitBlock(event)) {
|
|
41
|
-
event.preventDefault();
|
|
42
|
-
Transforms.move(editor);
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
onKeydown(event);
|
|
47
|
-
};
|
|
48
|
-
editor.deleteForward = unit => {
|
|
49
|
-
if (deleteBlockVoid(editor)) {
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
deleteForward(unit);
|
|
53
|
-
};
|
|
54
|
-
return editor;
|
|
55
|
-
};
|
|
56
|
-
export const createRemoveVoidPlugin = createPluginFactory({
|
|
57
|
-
key: PluginKeys.removeVoid,
|
|
58
|
-
withOverrides: withRemoveVoid
|
|
59
|
-
});
|
|
60
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3ZlLXZvaWQucGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL3BsdWdpbnMvY29tbW9uL3JlbW92ZS12b2lkLnBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQzFELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sS0FBSyxVQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRTFFLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFtQixNQUFTLEVBQUssRUFBRTtJQUM3RCxNQUFNLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFFNUQsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFTLEVBQUUsRUFBRTtRQUNsQyxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sU0FBUyxHQUNYLFVBQVUsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFILElBQUksU0FBUyxFQUFFLENBQUM7WUFDWixVQUFVLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxvQkFBb0IsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3BGLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDLENBQUM7SUFFRixNQUFNLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxFQUFFO1FBQzNCLElBQUksZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDMUIsT0FBTztRQUNYLENBQUM7UUFDRCxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekIsQ0FBQyxDQUFDO0lBRUYsTUFBTSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsRUFBRTtRQUN2QixNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9DLElBQ0ksVUFBVTtZQUNWLE9BQU8sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDeEMsQ0FBQztZQUNDLElBQUksT0FBTyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDcEUsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixhQUFhLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUU7b0JBQ3RDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzVCLENBQUMsQ0FBQyxDQUFDO2dCQUNILFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQzdDLE9BQU87WUFDWCxDQUFDO1lBQ0QsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdkIsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDeEIsT0FBTztZQUNYLENBQUM7UUFDTCxDQUFDO1FBQ0QsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JCLENBQUMsQ0FBQztJQUVGLE1BQU0sQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEVBQUU7UUFDMUIsSUFBSSxlQUFlLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUMxQixPQUFPO1FBQ1gsQ0FBQztRQUNELGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QixDQUFDLENBQUM7SUFDRixPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxtQkFBbUIsQ0FBQztJQUN0RCxHQUFHLEVBQUUsVUFBVSxDQUFDLFVBQVU7SUFDMUIsYUFBYSxFQUFFLGNBQWM7Q0FDaEMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWRpdG9yLCBFbGVtZW50LCBQYXRoLCBUcmFuc2Zvcm1zIH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IHsgaG90a2V5cyB9IGZyb20gJ3NsYXRlLWFuZ3VsYXInO1xuaW1wb3J0IHsgSGlzdG9yeUVkaXRvciB9IGZyb20gJ3NsYXRlLWhpc3RvcnknO1xuaW1wb3J0IHsgY3JlYXRlUGx1Z2luRmFjdG9yeSB9IGZyb20gJy4uLy4uL2NvcmUnO1xuaW1wb3J0IHsgUGx1Z2luS2V5cyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0ICogYXMgVGhlUXVlcmllcyBmcm9tICcuLi8uLi9xdWVyaWVzJztcbmltcG9ydCB7IGNyZWF0ZUVtcHR5UGFyYWdyYXBoIH0gZnJvbSAnLi4vLi4vdXRpbHMvY3JlYXRlLWVtcHR5LXBhcmFncmFwaCc7XG5cbmV4cG9ydCBjb25zdCB3aXRoUmVtb3ZlVm9pZCA9IDxUIGV4dGVuZHMgRWRpdG9yPihlZGl0b3I6IFQpOiBUID0+IHtcbiAgICBjb25zdCB7IGRlbGV0ZUJhY2t3YXJkLCBkZWxldGVGb3J3YXJkLCBvbktleWRvd24gfSA9IGVkaXRvcjtcblxuICAgIGNvbnN0IGRlbGV0ZUJsb2NrVm9pZCA9IChlOiBFZGl0b3IpID0+IHtcbiAgICAgICAgY29uc3QgYWJvdmVFbnRyeSA9IFRoZVF1ZXJpZXMuZ2V0QWJvdmUoZSk7XG4gICAgICAgIGNvbnN0IGNhbkRlbGV0ZSA9XG4gICAgICAgICAgICBhYm92ZUVudHJ5ICYmIEVsZW1lbnQuaXNFbGVtZW50KGFib3ZlRW50cnlbMF0pICYmIEVkaXRvci5pc0Jsb2NrKGUsIGFib3ZlRW50cnlbMF0pICYmIEVkaXRvci5pc1ZvaWQoZSwgYWJvdmVFbnRyeVswXSk7XG4gICAgICAgIGlmIChjYW5EZWxldGUpIHtcbiAgICAgICAgICAgIFRyYW5zZm9ybXMuaW5zZXJ0Tm9kZXMoZSwgY3JlYXRlRW1wdHlQYXJhZ3JhcGgoKSwgeyBhdDogUGF0aC5uZXh0KGFib3ZlRW50cnlbMV0pIH0pO1xuICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZWxlY3QoZSwgUGF0aC5uZXh0KGFib3ZlRW50cnlbMV0pKTtcbiAgICAgICAgICAgIFRyYW5zZm9ybXMucmVtb3ZlTm9kZXMoZSwgeyBhdDogYWJvdmVFbnRyeVsxXSB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FuRGVsZXRlO1xuICAgIH07XG5cbiAgICBlZGl0b3IuZGVsZXRlQmFja3dhcmQgPSB1bml0ID0+IHtcbiAgICAgICAgaWYgKGRlbGV0ZUJsb2NrVm9pZChlZGl0b3IpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlQmFja3dhcmQodW5pdCk7XG4gICAgfTtcblxuICAgIGVkaXRvci5vbktleWRvd24gPSBldmVudCA9PiB7XG4gICAgICAgIGNvbnN0IGFib3ZlRW50cnkgPSBUaGVRdWVyaWVzLmdldEFib3ZlKGVkaXRvcik7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGFib3ZlRW50cnkgJiZcbiAgICAgICAgICAgIEVsZW1lbnQuaXNFbGVtZW50KGFib3ZlRW50cnlbMF0pICYmXG4gICAgICAgICAgICBFZGl0b3IuaXNWb2lkKGVkaXRvciwgYWJvdmVFbnRyeVswXSkgJiZcbiAgICAgICAgICAgIEVkaXRvci5pc0lubGluZShlZGl0b3IsIGFib3ZlRW50cnlbMF0pXG4gICAgICAgICkge1xuICAgICAgICAgICAgaWYgKGhvdGtleXMuaXNEZWxldGVCYWNrd2FyZChldmVudCkgfHwgaG90a2V5cy5pc0RlbGV0ZUZvcndhcmQoZXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBIaXN0b3J5RWRpdG9yLndpdGhvdXRNZXJnaW5nKGVkaXRvciwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLm1vdmUoZWRpdG9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLmRlbGV0ZShlZGl0b3IsIHsgcmV2ZXJzZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaG90a2V5cy5pc1NwbGl0QmxvY2soZXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLm1vdmUoZWRpdG9yKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb25LZXlkb3duKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgZWRpdG9yLmRlbGV0ZUZvcndhcmQgPSB1bml0ID0+IHtcbiAgICAgICAgaWYgKGRlbGV0ZUJsb2NrVm9pZChlZGl0b3IpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlRm9yd2FyZCh1bml0KTtcbiAgICB9O1xuICAgIHJldHVybiBlZGl0b3I7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlUmVtb3ZlVm9pZFBsdWdpbiA9IGNyZWF0ZVBsdWdpbkZhY3Rvcnkoe1xuICAgIGtleTogUGx1Z2luS2V5cy5yZW1vdmVWb2lkLFxuICAgIHdpdGhPdmVycmlkZXM6IHdpdGhSZW1vdmVWb2lkXG59KTtcbiJdfQ==
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { Editor, Range } from 'slate';
|
|
2
|
-
import { IS_SAFARI, hotkeys } from 'slate-angular';
|
|
3
|
-
import { BLOCK_DELETE_BACKWARD_TYPES } from '../../constants';
|
|
4
|
-
import { createPluginFactory } from '../../core';
|
|
5
|
-
import { PluginKeys } from '../../interfaces';
|
|
6
|
-
import * as TheQueries from '../../queries';
|
|
7
|
-
export const withResetType = (editor) => {
|
|
8
|
-
const { onKeydown } = editor;
|
|
9
|
-
editor.onKeydown = (event) => {
|
|
10
|
-
const { selection } = editor;
|
|
11
|
-
if (IS_SAFARI && selection && Range.isCollapsed(selection) && hotkeys.isDeleteBackward(event)) {
|
|
12
|
-
const blockEntry = TheQueries.getAboveByType(editor, BLOCK_DELETE_BACKWARD_TYPES);
|
|
13
|
-
if (blockEntry && blockEntry[0]) {
|
|
14
|
-
const isStart = Editor.isStart(editor, selection.anchor, blockEntry[1]);
|
|
15
|
-
if (isStart) {
|
|
16
|
-
event.preventDefault();
|
|
17
|
-
Editor.deleteBackward(editor);
|
|
18
|
-
return;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
if (Editor.isStart(editor, selection.anchor, [0])) {
|
|
22
|
-
event.preventDefault();
|
|
23
|
-
Editor.deleteBackward(editor);
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
onKeydown(event);
|
|
28
|
-
};
|
|
29
|
-
return editor;
|
|
30
|
-
};
|
|
31
|
-
export const createResetTypePlugin = createPluginFactory({
|
|
32
|
-
key: PluginKeys.resetType,
|
|
33
|
-
withOverrides: withResetType
|
|
34
|
-
});
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzZXQtdHlwZS5wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvcGx1Z2lucy9jb21tb24vcmVzZXQtdHlwZS5wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDdEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM5QyxPQUFPLEtBQUssVUFBVSxNQUFNLGVBQWUsQ0FBQztBQUU1QyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBbUIsTUFBUyxFQUFLLEVBQUU7SUFDNUQsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUU3QixNQUFNLENBQUMsU0FBUyxHQUFHLENBQUMsS0FBb0IsRUFBRSxFQUFFO1FBQ3hDLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFFN0IsSUFBSSxTQUFTLElBQUksU0FBUyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksT0FBTyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDNUYsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsMkJBQTJCLENBQUMsQ0FBQztZQUNsRixJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDOUIsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDeEUsSUFBSSxPQUFPLEVBQUUsQ0FBQztvQkFDVixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ3ZCLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQzlCLE9BQU87Z0JBQ1gsQ0FBQztZQUNMLENBQUM7WUFDRCxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdkIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDOUIsT0FBTztZQUNYLENBQUM7UUFDTCxDQUFDO1FBQ0QsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JCLENBQUMsQ0FBQztJQUVGLE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLG1CQUFtQixDQUFDO0lBQ3JELEdBQUcsRUFBRSxVQUFVLENBQUMsU0FBUztJQUN6QixhQUFhLEVBQUUsYUFBYTtDQUMvQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFZGl0b3IsIFJhbmdlIH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IHsgSVNfU0FGQVJJLCBob3RrZXlzIH0gZnJvbSAnc2xhdGUtYW5ndWxhcic7XG5pbXBvcnQgeyBCTE9DS19ERUxFVEVfQkFDS1dBUkRfVFlQRVMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgY3JlYXRlUGx1Z2luRmFjdG9yeSB9IGZyb20gJy4uLy4uL2NvcmUnO1xuaW1wb3J0IHsgUGx1Z2luS2V5cyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0ICogYXMgVGhlUXVlcmllcyBmcm9tICcuLi8uLi9xdWVyaWVzJztcblxuZXhwb3J0IGNvbnN0IHdpdGhSZXNldFR5cGUgPSA8VCBleHRlbmRzIEVkaXRvcj4oZWRpdG9yOiBUKTogVCA9PiB7XG4gICAgY29uc3QgeyBvbktleWRvd24gfSA9IGVkaXRvcjtcblxuICAgIGVkaXRvci5vbktleWRvd24gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgeyBzZWxlY3Rpb24gfSA9IGVkaXRvcjtcblxuICAgICAgICBpZiAoSVNfU0FGQVJJICYmIHNlbGVjdGlvbiAmJiBSYW5nZS5pc0NvbGxhcHNlZChzZWxlY3Rpb24pICYmIGhvdGtleXMuaXNEZWxldGVCYWNrd2FyZChldmVudCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGJsb2NrRW50cnkgPSBUaGVRdWVyaWVzLmdldEFib3ZlQnlUeXBlKGVkaXRvciwgQkxPQ0tfREVMRVRFX0JBQ0tXQVJEX1RZUEVTKTtcbiAgICAgICAgICAgIGlmIChibG9ja0VudHJ5ICYmIGJsb2NrRW50cnlbMF0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc1N0YXJ0ID0gRWRpdG9yLmlzU3RhcnQoZWRpdG9yLCBzZWxlY3Rpb24uYW5jaG9yLCBibG9ja0VudHJ5WzFdKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNTdGFydCkge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBFZGl0b3IuZGVsZXRlQmFja3dhcmQoZWRpdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChFZGl0b3IuaXNTdGFydChlZGl0b3IsIHNlbGVjdGlvbi5hbmNob3IsIFswXSkpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIEVkaXRvci5kZWxldGVCYWNrd2FyZChlZGl0b3IpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvbktleWRvd24oZXZlbnQpO1xuICAgIH07XG5cbiAgICByZXR1cm4gZWRpdG9yO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVJlc2V0VHlwZVBsdWdpbiA9IGNyZWF0ZVBsdWdpbkZhY3Rvcnkoe1xuICAgIGtleTogUGx1Z2luS2V5cy5yZXNldFR5cGUsXG4gICAgd2l0aE92ZXJyaWRlczogd2l0aFJlc2V0VHlwZVxufSk7XG4iXX0=
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { TheiaConverter } from '@atinc/selene';
|
|
2
|
-
import isUrl from 'is-url';
|
|
3
|
-
import { Element, Transforms } from 'slate';
|
|
4
|
-
import { getClipboardData } from 'slate-angular';
|
|
5
|
-
import { ElementKinds } from '../../constants';
|
|
6
|
-
import { PluginKeys } from '../../interfaces';
|
|
7
|
-
import { createPluginFactory } from '../../core';
|
|
8
|
-
import { isLogicEmptyParagraphElement } from '../../queries/is-empty-paragraph';
|
|
9
|
-
import { insertDataByInvalidType, filterTextFormat, recursionNodes } from '../../utils';
|
|
10
|
-
import { ImageEditor } from '../image/image.editor';
|
|
11
|
-
export const withDeserializeHTML = (editor) => {
|
|
12
|
-
const { insertFragmentData } = editor;
|
|
13
|
-
editor.insertFragmentData = async (data) => {
|
|
14
|
-
const clipboardData = await getClipboardData(data);
|
|
15
|
-
if (!clipboardData?.elements && clipboardData?.html) {
|
|
16
|
-
const htmlDom = new DOMParser().parseFromString(clipboardData?.html, 'text/html');
|
|
17
|
-
const fragment = TheiaConverter.convertToTheia(Array.from(htmlDom.body.children));
|
|
18
|
-
// 识别粘贴的 HTML 只有纯链接, 跳至 link
|
|
19
|
-
if (fragment.length === 1 && fragment.every(block => isUrl(block?.children?.[0]?.['text']))) {
|
|
20
|
-
return insertFragmentData(data);
|
|
21
|
-
}
|
|
22
|
-
// 无法识别HTML内容时后退一下:识别纯文本
|
|
23
|
-
if (fragment.every(block => block.type === ElementKinds.paragraph && isLogicEmptyParagraphElement(editor, block))) {
|
|
24
|
-
return insertFragmentData(data);
|
|
25
|
-
}
|
|
26
|
-
// 识出纯图片并且粘贴板中存在文件则不进行处理, hook 直接右键复制图片的场景,流转到上传图片流程
|
|
27
|
-
// 后续需要做识别html图片后自动上传处理
|
|
28
|
-
if (fragment.length === 1 && fragment[0].type === ElementKinds.image && data.files.length > 0) {
|
|
29
|
-
return insertFragmentData(data);
|
|
30
|
-
}
|
|
31
|
-
// 过滤 text 节点的 color/background-color 属性
|
|
32
|
-
fragment.forEach(node => filterTextFormat(node));
|
|
33
|
-
// base 64 图片处理
|
|
34
|
-
recursionNodes(fragment, (node) => {
|
|
35
|
-
const isImage = Element.isElement(node) && node.type === ElementKinds.image;
|
|
36
|
-
if (isImage) {
|
|
37
|
-
const isBase64 = ImageEditor.isBase64(node?.originUrl);
|
|
38
|
-
if (isBase64) {
|
|
39
|
-
ImageEditor.handleBase64ImageElement(editor, node);
|
|
40
|
-
}
|
|
41
|
-
else {
|
|
42
|
-
ImageEditor.handleExternalImageElement(editor, node);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
});
|
|
46
|
-
const isContinue = insertDataByInvalidType(editor, fragment);
|
|
47
|
-
if (!isContinue) {
|
|
48
|
-
return true;
|
|
49
|
-
}
|
|
50
|
-
Transforms.insertFragment(editor, fragment);
|
|
51
|
-
return true;
|
|
52
|
-
}
|
|
53
|
-
return insertFragmentData(data);
|
|
54
|
-
};
|
|
55
|
-
return editor;
|
|
56
|
-
};
|
|
57
|
-
export const createDeserializeHTMLPlugin = createPluginFactory({
|
|
58
|
-
key: PluginKeys.deserializeHtml,
|
|
59
|
-
withOverrides: withDeserializeHTML
|
|
60
|
-
});
|
|
61
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzZXJpYWxpemUtaHRtbC5wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvcGx1Z2lucy9kZXNlcmlhbGl6ZS9kZXNlcmlhbGl6ZS1odG1sLnBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sS0FBSyxNQUFNLFFBQVEsQ0FBQztBQUMzQixPQUFPLEVBQVUsT0FBTyxFQUFRLFVBQVUsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUMxRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDakQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDaEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN4RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFcEQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBbUIsTUFBUyxFQUFLLEVBQUU7SUFDbEUsTUFBTSxFQUFFLGtCQUFrQixFQUFFLEdBQUcsTUFBTSxDQUFDO0lBRXRDLE1BQU0sQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLEVBQUUsSUFBa0IsRUFBRSxFQUFFO1FBQ3JELE1BQU0sYUFBYSxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFbkQsSUFBSSxDQUFDLGFBQWEsRUFBRSxRQUFRLElBQUksYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ2xELE1BQU0s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cnRlciB9IGZyb20gJ0BhdGluYy9zZWxlbmUnO1xuaW1wb3J0IGlzVXJsIGZyb20gJ2lzLXVybCc7XG5pbXBvcnQgeyBFZGl0b3IsIEVsZW1lbnQsIE5vZGUsIFRyYW5zZm9ybXMgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgeyBnZXRDbGlwYm9hcmREYXRhIH0gZnJvbSAnc2xhdGUtYW5ndWxhcic7XG5pbXBvcnQgeyBFbGVtZW50S2luZHMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgUGx1Z2luS2V5cyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgY3JlYXRlUGx1Z2luRmFjdG9yeSB9IGZyb20gJy4uLy4uL2NvcmUnO1xuaW1wb3J0IHsgaXNMb2dpY0VtcHR5UGFyYWdyYXBoRWxlbWVudCB9IGZyb20gJy4uLy4uL3F1ZXJpZXMvaXMtZW1wdHktcGFyYWdyYXBoJztcbmltcG9ydCB7IGluc2VydERhdGFCeUludmFsaWRUeXBlLCBmaWx0ZXJUZXh0Rm9ybWF0LCByZWN1cnNpb25Ob2RlcyB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IEltYWdlRWRpdG9yIH0gZnJvbSAnLi4vaW1hZ2UvaW1hZ2UuZWRpdG9yJztcblxuZXhwb3J0IGNvbnN0IHdpdGhEZXNlcmlhbGl6ZUhUTUwgPSA8VCBleHRlbmRzIEVkaXRvcj4oZWRpdG9yOiBUKTogVCA9PiB7XG4gICAgY29uc3QgeyBpbnNlcnRGcmFnbWVudERhdGEgfSA9IGVkaXRvcjtcblxuICAgIGVkaXRvci5pbnNlcnRGcmFnbWVudERhdGEgPSBhc3luYyAoZGF0YTogRGF0YVRyYW5zZmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGNsaXBib2FyZERhdGEgPSBhd2FpdCBnZXRDbGlwYm9hcmREYXRhKGRhdGEpO1xuXG4gICAgICAgIGlmICghY2xpcGJvYXJkRGF0YT8uZWxlbWVudHMgJiYgY2xpcGJvYXJkRGF0YT8uaHRtbCkge1xuICAgICAgICAgICAgY29uc3QgaHRtbERvbSA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoY2xpcGJvYXJkRGF0YT8uaHRtbCwgJ3RleHQvaHRtbCcpO1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnQgPSBUaGVpYUNvbnZlcnRlci5jb252ZXJ0VG9UaGVpYShBcnJheS5mcm9tKGh0bWxEb20uYm9keS5jaGlsZHJlbikpIGFzIEVsZW1lbnRbXTtcblxuICAgICAgICAgICAgLy8g6K+G5Yir57KY6LS055qEIEhUTUwg5Y+q5pyJ57qv6ZO+5o6lLCDot7Poh7MgbGlua1xuICAgICAgICAgICAgaWYgKGZyYWdtZW50Lmxlbmd0aCA9PT0gMSAmJiBmcmFnbWVudC5ldmVyeShibG9jayA9PiBpc1VybChibG9jaz8uY2hpbGRyZW4/LlswXT8uWyd0ZXh0J10pKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnNlcnRGcmFnbWVudERhdGEoZGF0YSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIOaXoOazleivhuWIq0hUTUzlhoXlrrnml7blkI7pgIDkuIDkuIvvvJror4bliKvnuq/mlofmnKxcbiAgICAgICAgICAgIGlmIChmcmFnbWVudC5ldmVyeShibG9jayA9PiBibG9jay50eXBlID09PSBFbGVtZW50S2luZHMucGFyYWdyYXBoICYmIGlzTG9naWNFbXB0eVBhcmFncmFwaEVsZW1lbnQoZWRpdG9yLCBibG9jaykpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydEZyYWdtZW50RGF0YShkYXRhKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8g6K+G5Ye657qv5Zu+54mH5bm25LiU57KY6LS05p2/5Lit5a2Y5Zyo5paH5Lu25YiZ5LiN6L+b6KGM5aSE55CGLCBob29rIOebtOaOpeWPs+mUruWkjeWItuWbvueJh+eahOWcuuaZr++8jOa1gei9rOWIsOS4iuS8oOWbvueJh+a1geeoi1xuICAgICAgICAgICAgLy8g5ZCO57ut6ZyA6KaB5YGa6K+G5YiraHRtbOWbvueJh+WQjuiHquWKqOS4iuS8oOWkhOeQhlxuICAgICAgICAgICAgaWYgKGZyYWdtZW50Lmxlbmd0aCA9PT0gMSAmJiBmcmFnbWVudFswXS50eXBlID09PSBFbGVtZW50S2luZHMuaW1hZ2UgJiYgZGF0YS5maWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydEZyYWdtZW50RGF0YShkYXRhKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8g6L+H5rukIHRleHQg6IqC54K555qEIGNvbG9yL2JhY2tncm91bmQtY29sb3Ig5bGe5oCnXG4gICAgICAgICAgICBmcmFnbWVudC5mb3JFYWNoKG5vZGUgPT4gZmlsdGVyVGV4dEZvcm1hdChub2RlKSk7XG5cbiAgICAgICAgICAgIC8vIGJhc2UgNjQg5Zu+54mH5aSE55CGXG4gICAgICAgICAgICByZWN1cnNpb25Ob2RlcyhmcmFnbWVudCwgKG5vZGU6IE5vZGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0ltYWdlID0gRWxlbWVudC5pc0VsZW1lbnQobm9kZSkgJiYgbm9kZS50eXBlID09PSBFbGVtZW50S2luZHMuaW1hZ2U7XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNJbWFnZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0Jhc2U2NCA9IEltYWdlRWRpdG9yLmlzQmFzZTY0KG5vZGU/Lm9yaWdpblVybCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0Jhc2U2NCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2VFZGl0b3IuaGFuZGxlQmFzZTY0SW1hZ2VFbGVtZW50KGVkaXRvciwgbm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBJbWFnZUVkaXRvci5oYW5kbGVFeHRlcm5hbEltYWdlRWxlbWVudChlZGl0b3IsIG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBpc0NvbnRpbnVlID0gaW5zZXJ0RGF0YUJ5SW52YWxpZFR5cGUoZWRpdG9yLCBmcmFnbWVudCk7XG4gICAgICAgICAgICBpZiAoIWlzQ29udGludWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFRyYW5zZm9ybXMuaW5zZXJ0RnJhZ21lbnQoZWRpdG9yLCBmcmFnbWVudCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpbnNlcnRGcmFnbWVudERhdGEoZGF0YSk7XG4gICAgfTtcbiAgICByZXR1cm4gZWRpdG9yO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZURlc2VyaWFsaXplSFRNTFBsdWdpbiA9IGNyZWF0ZVBsdWdpbkZhY3Rvcnkoe1xuICAgIGtleTogUGx1Z2luS2V5cy5kZXNlcmlhbGl6ZUh0bWwsXG4gICAgd2l0aE92ZXJyaWRlczogd2l0aERlc2VyaWFsaXplSFRNTFxufSk7XG4iXX0=
|