@worktile/theia 3.0.9 → 3.1.0-next.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -11
- package/components/color-select/color-select.component.d.ts +32 -32
- package/components/color-select/color-select.component.scss +107 -107
- package/components/column-resize/column-resize-notifier.d.ts +35 -35
- package/components/column-resize/column-resize.directive.d.ts +26 -26
- package/components/column-resize/column-resize.module.d.ts +14 -14
- package/components/column-resize/event-dispatcher.d.ts +31 -31
- package/components/column-resize/overlay-handle.component.d.ts +33 -33
- package/components/column-resize/resize-ref.d.ts +25 -25
- package/components/column-resize/resizing.store.d.ts +28 -28
- package/components/column-resize/selectors.d.ts +3 -3
- package/components/contextmenu/contextmenu.component.d.ts +22 -22
- package/components/conversion-hint/conversion-hint.component.d.ts +18 -18
- package/components/conversion-hint/conversion-hint.component.scss +11 -11
- package/components/element/element.component.d.ts +7 -7
- package/components/inline-toolbar/inline-toolbar.component.d.ts +26 -26
- package/components/nav-split-line/nav-split-line.component.d.ts +13 -13
- package/components/table-select/table-select.component.d.ts +20 -20
- package/components/table-select/table-select.component.scss +35 -35
- package/components/template/template.component.d.ts +15 -15
- package/components/text/text.component.d.ts +14 -14
- package/components/toolbar/toolbar.component.d.ts +64 -65
- package/components/toolbar-dropdown/toolbar-dropdown.component.d.ts +33 -33
- package/components/toolbar-group/toolbar-group.component.d.ts +33 -33
- package/components/toolbar-group/toolbar-group.component.scss +17 -17
- package/components/toolbar-item/toolbar-item.component.d.ts +17 -18
- package/constants/auto-format-rules.d.ts +2 -2
- package/constants/code.d.ts +9 -9
- package/constants/color-select.d.ts +14 -14
- package/constants/default.d.ts +9 -9
- package/constants/error.d.ts +5 -5
- package/constants/index.d.ts +5 -5
- package/constants/node-types.d.ts +99 -99
- package/constants/selector.d.ts +2 -2
- package/constants/toolbar.d.ts +17 -17
- package/core/create-plugin.d.ts +2 -2
- package/core/create-toolbar.d.ts +5 -5
- package/core/index.d.ts +4 -4
- package/core/toolbar-item/base-toolbar-item.d.ts +29 -29
- package/core/utils/combine-plugins.d.ts +2 -2
- package/core/utils/flatten-deep-plugins.d.ts +6 -6
- package/core/utils/get-plugin-options.d.ts +2 -2
- package/core/utils/get-plugin.d.ts +2 -2
- package/core/utils/get-plugins.d.ts +2 -2
- package/core/utils/index.d.ts +10 -10
- package/core/utils/merge-array.d.ts +1 -1
- package/core/utils/merge-deep-plugins.d.ts +2 -2
- package/core/utils/merge-options.d.ts +2 -2
- package/core/utils/nested-structure-by-key.d.ts +2 -2
- package/core/utils/plugins-by-key.d.ts +2 -2
- package/core/with-theia.d.ts +4 -4
- package/custom-types.d.ts +131 -131
- package/editor.component.d.ts +92 -92
- package/editor.module.d.ts +98 -98
- package/esm2020/components/color-select/color-select.component.mjs +109 -0
- package/esm2020/components/column-resize/column-resize-notifier.mjs +31 -0
- package/{esm2015/components/column-resize/column-resize.directive.js → esm2020/components/column-resize/column-resize.directive.mjs} +99 -99
- package/esm2020/components/column-resize/column-resize.module.mjs +33 -0
- package/{esm2015/components/column-resize/event-dispatcher.js → esm2020/components/column-resize/event-dispatcher.mjs} +56 -56
- package/{esm2015/components/column-resize/overlay-handle.component.js → esm2020/components/column-resize/overlay-handle.component.mjs} +140 -140
- package/{esm2015/components/column-resize/resize-ref.js → esm2020/components/column-resize/resize-ref.mjs} +25 -25
- package/{esm2015/components/column-resize/resizing.store.js → esm2020/components/column-resize/resizing.store.mjs} +155 -155
- package/{esm2015/components/column-resize/selectors.js → esm2020/components/column-resize/selectors.mjs} +4 -4
- package/esm2020/components/contextmenu/contextmenu.component.mjs +61 -0
- package/esm2020/components/conversion-hint/conversion-hint.component.mjs +54 -0
- package/esm2020/components/element/element.component.mjs +23 -0
- package/esm2020/components/inline-toolbar/inline-toolbar.component.mjs +138 -0
- package/{esm2015/components/nav-split-line/nav-split-line.component.js → esm2020/components/nav-split-line/nav-split-line.component.mjs} +37 -37
- package/esm2020/components/table-select/table-select.component.mjs +50 -0
- package/esm2020/components/template/template.component.mjs +62 -0
- package/{esm2015/components/text/text.component.js → esm2020/components/text/text.component.mjs} +58 -58
- package/esm2020/components/toolbar/toolbar.component.mjs +241 -0
- package/esm2020/components/toolbar-dropdown/toolbar-dropdown.component.mjs +129 -0
- package/esm2020/components/toolbar-group/toolbar-group.component.mjs +110 -0
- package/esm2020/components/toolbar-item/toolbar-item.component.mjs +101 -0
- package/{esm2015/constants/auto-format-rules.js → esm2020/constants/auto-format-rules.mjs} +166 -166
- package/{esm2015/constants/code.js → esm2020/constants/code.mjs} +88 -88
- package/{esm2015/constants/color-select.js → esm2020/constants/color-select.mjs} +61 -61
- package/{esm2015/constants/default.js → esm2020/constants/default.mjs} +9 -9
- package/{esm2015/constants/error.js → esm2020/constants/error.mjs} +7 -7
- package/{esm2015/constants/index.js → esm2020/constants/index.mjs} +5 -5
- package/{esm2015/constants/node-types.js → esm2020/constants/node-types.mjs} +132 -132
- package/{esm2015/constants/selector.js → esm2020/constants/selector.mjs} +3 -3
- package/{esm2015/constants/toolbar.js → esm2020/constants/toolbar.mjs} +69 -69
- package/{esm2015/core/create-plugin.js → esm2020/core/create-plugin.mjs} +4 -4
- package/esm2020/core/create-toolbar.mjs +56 -0
- package/{esm2015/core/index.js → esm2020/core/index.mjs} +4 -4
- package/esm2020/core/toolbar-item/base-toolbar-item.mjs +90 -0
- package/{esm2015/core/utils/combine-plugins.js → esm2020/core/utils/combine-plugins.mjs} +9 -9
- package/{esm2015/core/utils/flatten-deep-plugins.js → esm2020/core/utils/flatten-deep-plugins.mjs} +18 -18
- package/esm2020/core/utils/get-plugin-options.mjs +3 -0
- package/{esm2015/core/utils/get-plugin.js → esm2020/core/utils/get-plugin.mjs} +1 -1
- package/esm2020/core/utils/get-plugins.mjs +4 -0
- package/{esm2015/core/utils/index.js → esm2020/core/utils/index.mjs} +10 -10
- package/esm2020/core/utils/merge-array.mjs +18 -0
- package/{esm2015/core/utils/merge-deep-plugins.js → esm2020/core/utils/merge-deep-plugins.mjs} +13 -13
- package/{esm2015/core/utils/merge-options.js → esm2020/core/utils/merge-options.mjs} +19 -19
- package/{esm2015/core/utils/nested-structure-by-key.js → esm2020/core/utils/nested-structure-by-key.mjs} +10 -10
- package/{esm2015/core/utils/plugins-by-key.js → esm2020/core/utils/plugins-by-key.mjs} +9 -9
- package/{esm2015/core/with-theia.js → esm2020/core/with-theia.mjs} +22 -22
- package/{esm2015/custom-types.js → esm2020/custom-types.mjs} +1 -1
- package/esm2020/editor.component.mjs +431 -0
- package/{esm2015/editor.module.js → esm2020/editor.module.mjs} +201 -202
- package/{esm2015/interfaces/auto-format.js → esm2020/interfaces/auto-format.mjs} +1 -1
- package/esm2020/interfaces/editor.mjs +25 -0
- package/{esm2015/interfaces/element.js → esm2020/interfaces/element.mjs} +1 -1
- package/{esm2015/interfaces/image.js → esm2020/interfaces/image.mjs} +2 -2
- package/{esm2015/interfaces/index.js → esm2020/interfaces/index.mjs} +8 -8
- package/{esm2015/interfaces/plugins/index.js → esm2020/interfaces/plugins/index.mjs} +4 -4
- package/{esm2015/interfaces/plugins/no-infer.js → esm2020/interfaces/plugins/no-infer.mjs} +1 -1
- package/{esm2015/interfaces/plugins/plugin-key.js → esm2020/interfaces/plugins/plugin-key.mjs} +39 -39
- package/{esm2015/interfaces/plugins/plugins.js → esm2020/interfaces/plugins/plugins.mjs} +1 -1
- package/{esm2015/interfaces/plugins/with-override.js → esm2020/interfaces/plugins/with-override.mjs} +1 -1
- package/esm2020/interfaces/reset-block-type-plugin-options.mjs +2 -0
- package/{esm2015/interfaces/toolbar.js → esm2020/interfaces/toolbar.mjs} +11 -11
- package/esm2020/interfaces/upload.mjs +2 -0
- package/{esm2015/interfaces/utility/index.js → esm2020/interfaces/utility/index.mjs} +3 -3
- package/{esm2015/interfaces/utility/nested-structure-by-key.js → esm2020/interfaces/utility/nested-structure-by-key.mjs} +1 -1
- package/{esm2015/interfaces/utility/override-by-key.js → esm2020/interfaces/utility/override-by-key.mjs} +1 -1
- package/{esm2015/interfaces/utility/types.js → esm2020/interfaces/utility/types.mjs} +1 -1
- package/{esm2015/interfaces/valid-children-types.js → esm2020/interfaces/valid-children-types.mjs} +35 -35
- package/{esm2015/interfaces/view-base.js → esm2020/interfaces/view-base.mjs} +21 -21
- package/{esm2015/pipes.js → esm2020/pipes.mjs} +42 -42
- package/esm2020/plugins/align/align.editor.mjs +47 -0
- package/{esm2015/plugins/align/align.plugin.js → esm2020/plugins/align/align.plugin.mjs} +63 -63
- package/esm2020/plugins/autoformat/autoformat.plugin.mjs +109 -0
- package/{esm2015/plugins/autoformat/transforms/auto-format-block.js → esm2020/plugins/autoformat/transforms/auto-format-block.mjs} +14 -14
- package/{esm2015/plugins/autoformat/transforms/auto-format-inline.js → esm2020/plugins/autoformat/transforms/auto-format-inline.mjs} +77 -77
- package/{esm2015/plugins/blockquote/blockquote.component.js → esm2020/plugins/blockquote/blockquote.component.mjs} +21 -21
- package/esm2020/plugins/blockquote/blockquote.editor.mjs +20 -0
- package/{esm2015/plugins/blockquote/blockquote.plugin.js → esm2020/plugins/blockquote/blockquote.plugin.mjs} +70 -70
- package/esm2020/plugins/code/code.component.mjs +241 -0
- package/{esm2015/plugins/code/code.editor.js → esm2020/plugins/code/code.editor.mjs} +47 -47
- package/{esm2015/plugins/code/code.plugin.js → esm2020/plugins/code/code.plugin.mjs} +41 -41
- package/esm2020/plugins/color/color.editor.mjs +44 -0
- package/{esm2015/plugins/color/color.plugin.js → esm2020/plugins/color/color.plugin.mjs} +27 -27
- package/esm2020/plugins/color/toolbar-item.component.mjs +123 -0
- package/esm2020/plugins/common/auto-insert-data..mjs +77 -0
- package/{esm2015/plugins/common/block-card.plugin.js → esm2020/plugins/common/block-card.plugin.mjs} +287 -287
- package/esm2020/plugins/common/get-fragment.plugin.mjs +24 -0
- package/{esm2015/plugins/common/history.plugin.js → esm2020/plugins/common/history.plugin.mjs} +30 -30
- package/{esm2015/plugins/common/move-selection.plugin.js → esm2020/plugins/common/move-selection.plugin.mjs} +89 -89
- package/{esm2015/plugins/common/remove-empty.plugin.js → esm2020/plugins/common/remove-empty.plugin.mjs} +59 -59
- package/{esm2015/plugins/common/remove-void.plugin.js → esm2020/plugins/common/remove-void.plugin.mjs} +56 -56
- package/{esm2015/plugins/common/reset-type.plugin.js → esm2020/plugins/common/reset-type.plugin.mjs} +34 -34
- package/{esm2015/plugins/common/transforms.plugin.js → esm2020/plugins/common/transforms.plugin.mjs} +17 -17
- package/{esm2015/plugins/deserializers/deserialize-html.plugin.js → esm2020/plugins/deserializers/deserialize-html.plugin.mjs} +38 -38
- package/{esm2015/plugins/deserializers/deserialize-md.plugin.js → esm2020/plugins/deserializers/deserialize-md.plugin.mjs} +121 -121
- package/esm2020/plugins/font-size/font-size.editor.mjs +98 -0
- package/{esm2015/plugins/heading/heading.editor.js → esm2020/plugins/heading/heading.editor.mjs} +53 -53
- package/{esm2015/plugins/heading/heading.plugin.js → esm2020/plugins/heading/heading.plugin.mjs} +84 -84
- package/{esm2015/plugins/hr/hr.component.js → esm2020/plugins/hr/hr.component.mjs} +40 -40
- package/{esm2015/plugins/hr/hr.editor.js → esm2020/plugins/hr/hr.editor.mjs} +7 -7
- package/{esm2015/plugins/hr/hr.plugin.js → esm2020/plugins/hr/hr.plugin.mjs} +41 -41
- package/esm2020/plugins/image/image.component.mjs +365 -0
- package/{esm2015/plugins/image/image.editor.js → esm2020/plugins/image/image.editor.mjs} +57 -57
- package/esm2020/plugins/image/image.plugin.mjs +57 -0
- package/esm2020/plugins/indent/indent.editor.mjs +71 -0
- package/esm2020/plugins/indent/indent.plugin.mjs +58 -0
- package/{esm2015/plugins/indent/on-keydown-indent.js → esm2020/plugins/indent/on-keydown-indent.mjs} +53 -53
- package/{esm2015/plugins/index.js → esm2020/plugins/index.mjs} +70 -70
- package/{esm2015/plugins/inline-code/inline-code.component.js → esm2020/plugins/inline-code/inline-code.component.mjs} +23 -23
- package/{esm2015/plugins/inline-code/inline-code.editor.js → esm2020/plugins/inline-code/inline-code.editor.mjs} +48 -49
- package/{esm2015/plugins/inline-code/inline-code.plugin.js → esm2020/plugins/inline-code/inline-code.plugin.mjs} +65 -65
- package/esm2020/plugins/link/edit/link-edit.component.mjs +105 -0
- package/esm2020/plugins/link/hover/link-hover.component.mjs +36 -0
- package/{esm2015/plugins/link/link.component.js → esm2020/plugins/link/link.component.mjs} +164 -164
- package/{esm2015/plugins/link/link.editor.js → esm2020/plugins/link/link.editor.mjs} +66 -66
- package/{esm2015/plugins/link/link.plugin.js → esm2020/plugins/link/link.plugin.mjs} +58 -58
- package/{esm2015/plugins/link/link.types.js → esm2020/plugins/link/link.types.mjs} +12 -12
- package/esm2020/plugins/list/components/bulleted-list.component.mjs +33 -0
- package/esm2020/plugins/list/components/list-item.component.mjs +93 -0
- package/esm2020/plugins/list/components/numbered-list.component.mjs +39 -0
- package/{esm2015/plugins/list/list.editor.js → esm2020/plugins/list/list.editor.mjs} +125 -125
- package/esm2020/plugins/list/list.plugin.mjs +286 -0
- package/{esm2015/plugins/list/normalizers/get-list-normalizer.js → esm2020/plugins/list/normalizers/get-list-normalizer.mjs} +39 -39
- package/esm2020/plugins/list/normalizers/normalize-list-item.mjs +18 -0
- package/{esm2015/plugins/list/normalizers/normalize-no.js → esm2020/plugins/list/normalizers/normalize-no.mjs} +42 -42
- package/{esm2015/plugins/list/on-key-down-list.js → esm2020/plugins/list/on-key-down-list.mjs} +32 -32
- package/{esm2015/plugins/list/queries/get-list-item-entry.js → esm2020/plugins/list/queries/get-list-item-entry.mjs} +27 -27
- package/{esm2015/plugins/list/queries/get-list-item-sublist.js → esm2020/plugins/list/queries/get-list-item-sublist.mjs} +12 -12
- package/{esm2015/plugins/list/queries/get-list-types.js → esm2020/plugins/list/queries/get-list-types.mjs} +5 -5
- package/{esm2015/plugins/list/queries/get-start-list-item.js → esm2020/plugins/list/queries/get-start-list-item.mjs} +26 -26
- package/{esm2015/plugins/list/queries/has-list-in-list-item.js → esm2020/plugins/list/queries/has-list-in-list-item.mjs} +27 -27
- package/{esm2015/plugins/list/queries/is-in-list.js → esm2020/plugins/list/queries/is-in-list.mjs} +5 -5
- package/{esm2015/plugins/list/queries/is-list-nested.js → esm2020/plugins/list/queries/is-list-nested.mjs} +10 -10
- package/{esm2015/plugins/list/queries/is-list.js → esm2020/plugins/list/queries/is-list.mjs} +5 -5
- package/{esm2015/plugins/list/queries/is-node-type-list.js → esm2020/plugins/list/queries/is-node-type-list.mjs} +4 -4
- package/{esm2015/plugins/list/queries/is-selection-at-list-item-start.js → esm2020/plugins/list/queries/is-selection-at-list-item-start.mjs} +12 -12
- package/{esm2015/plugins/list/queries/is-selection-in-same-list-item.js → esm2020/plugins/list/queries/is-selection-in-same-list-item.mjs} +16 -16
- package/{esm2015/plugins/list/queries/is-single-list-item.js → esm2020/plugins/list/queries/is-single-list-item.mjs} +9 -9
- package/{esm2015/plugins/list/transforms/insert-list-data.js → esm2020/plugins/list/transforms/insert-list-data.mjs} +71 -71
- package/{esm2015/plugins/list/transforms/insert-list-item.js → esm2020/plugins/list/transforms/insert-list-item.mjs} +72 -72
- package/{esm2015/plugins/list/transforms/move-list-item-down.js → esm2020/plugins/list/transforms/move-list-item-down.mjs} +41 -41
- package/{esm2015/plugins/list/transforms/move-list-item-sublist-items-to-list-item-sublist.js → esm2020/plugins/list/transforms/move-list-item-sublist-items-to-list-item-sublist.mjs} +42 -42
- package/{esm2015/plugins/list/transforms/move-list-item-sublist-items-to-list.js → esm2020/plugins/list/transforms/move-list-item-sublist-items-to-list.mjs} +29 -29
- package/{esm2015/plugins/list/transforms/move-list-item-up.js → esm2020/plugins/list/transforms/move-list-item-up.mjs} +77 -77
- package/{esm2015/plugins/list/transforms/unwrap-list.js → esm2020/plugins/list/transforms/unwrap-list.mjs} +9 -9
- package/esm2020/plugins/list/types.mjs +2 -0
- package/esm2020/plugins/mark/mark.editor.mjs +28 -0
- package/esm2020/plugins/mark/mark.plugin.mjs +105 -0
- package/esm2020/plugins/node-id/node-id.plugin.mjs +78 -0
- package/esm2020/plugins/normalizers/insert-paragraph-nodes.mjs +28 -0
- package/{esm2015/plugins/normalizers/remove-empty-nodes.js → esm2020/plugins/normalizers/remove-empty-nodes.mjs} +17 -17
- package/esm2020/plugins/normalizers/trailing-node.plugin.mjs +33 -0
- package/{esm2015/plugins/paint-format/paint-format.editor.js → esm2020/plugins/paint-format/paint-format.editor.mjs} +122 -122
- package/{esm2015/plugins/public-api.js → esm2020/plugins/public-api.mjs} +15 -15
- package/esm2020/plugins/quick-insert/components/quick-insert.component.mjs +96 -0
- package/esm2020/plugins/quick-insert/components/quick-toolbar/quick-toolbar.component.mjs +80 -0
- package/{esm2015/plugins/quick-insert/quick-insert.editor.js → esm2020/plugins/quick-insert/quick-insert.editor.mjs} +52 -52
- package/esm2020/plugins/quick-insert/quick-insert.plugin.mjs +74 -0
- package/esm2020/plugins/soft-break/soft-break.plugin.mjs +36 -0
- package/{esm2015/plugins/soft-break/soft-break.types.js → esm2020/plugins/soft-break/soft-break.types.mjs} +1 -1
- package/esm2020/plugins/table/components/insert-mark/insert-mark.component.mjs +100 -0
- package/{esm2015/plugins/table/components/row/row.component.js → esm2020/plugins/table/components/row/row.component.mjs} +47 -47
- package/esm2020/plugins/table/components/table.component.mjs +461 -0
- package/esm2020/plugins/table/components/td/td.component.mjs +696 -0
- package/{esm2015/plugins/table/components/toolbar/table-options.component.js → esm2020/plugins/table/components/toolbar/table-options.component.mjs} +72 -69
- package/esm2020/plugins/table/components/toolbar/table-toolbar.component.mjs +159 -0
- package/{esm2015/plugins/table/table.editor.js → esm2020/plugins/table/table.editor.mjs} +182 -182
- package/esm2020/plugins/table/table.plugin.mjs +427 -0
- package/{esm2015/plugins/table/table.service.js → esm2020/plugins/table/table.service.mjs} +103 -103
- package/esm2020/plugins/table/table.store.mjs +484 -0
- package/{esm2015/plugins/table/table.types.js → esm2020/plugins/table/table.types.mjs} +33 -33
- package/esm2020/plugins/table/toolbar-item.component.mjs +85 -0
- package/esm2020/plugins/table/transforms/clear-cell.mjs +14 -0
- package/{esm2015/plugins/table/transforms/clear-table-node.js → esm2020/plugins/table/transforms/clear-table-node.mjs} +27 -27
- package/{esm2015/plugins/table/transforms/insert-column.js → esm2020/plugins/table/transforms/insert-column.mjs} +57 -57
- package/{esm2015/plugins/table/transforms/insert-row.js → esm2020/plugins/table/transforms/insert-row.mjs} +42 -42
- package/esm2020/plugins/table/transforms/insert-table.mjs +15 -0
- package/{esm2015/plugins/table/transforms/remove-column.js → esm2020/plugins/table/transforms/remove-column.mjs} +51 -51
- package/{esm2015/plugins/table/transforms/remove-row.js → esm2020/plugins/table/transforms/remove-row.mjs} +50 -50
- package/{esm2015/plugins/table/transforms/remove-table.js → esm2020/plugins/table/transforms/remove-table.mjs} +49 -49
- package/{esm2015/plugins/table/utils/add-columns.js → esm2020/plugins/table/utils/add-columns.mjs} +28 -28
- package/{esm2015/plugins/table/utils/calc-anchor-position.js → esm2020/plugins/table/utils/calc-anchor-position.mjs} +24 -24
- package/{esm2015/plugins/table/utils/calc-span.js → esm2020/plugins/table/utils/calc-span.mjs} +72 -72
- package/{esm2015/plugins/table/utils/create-cell.js → esm2020/plugins/table/utils/create-cell.mjs} +19 -19
- package/{esm2015/plugins/table/utils/create-row.js → esm2020/plugins/table/utils/create-row.mjs} +12 -12
- package/{esm2015/plugins/table/utils/create-table.js → esm2020/plugins/table/utils/create-table.mjs} +13 -13
- package/{esm2015/plugins/table/utils/get-base-height.js → esm2020/plugins/table/utils/get-base-height.mjs} +22 -22
- package/{esm2015/plugins/table/utils/get-select-cell-node.js → esm2020/plugins/table/utils/get-select-cell-node.mjs} +19 -16
- package/{esm2015/plugins/table/utils/index.js → esm2020/plugins/table/utils/index.mjs} +8 -8
- package/{esm2015/plugins/table/utils/is-range-in-table.js → esm2020/plugins/table/utils/is-range-in-table.mjs} +16 -16
- package/{esm2015/plugins/table/utils/is-selection-in-table.js → esm2020/plugins/table/utils/is-selection-in-table.mjs} +11 -11
- package/{esm2015/plugins/table/utils/is-virtual-key.js → esm2020/plugins/table/utils/is-virtual-key.mjs} +13 -13
- package/{esm2015/plugins/table/utils/merge-cell.js → esm2020/plugins/table/utils/merge-cell.mjs} +90 -90
- package/{esm2015/plugins/table/utils/next-path.js → esm2020/plugins/table/utils/next-path.mjs} +5 -5
- package/{esm2015/plugins/table/utils/normalize-table.js → esm2020/plugins/table/utils/normalize-table.mjs} +30 -30
- package/{esm2015/plugins/table/utils/remove-columns.js → esm2020/plugins/table/utils/remove-columns.mjs} +23 -23
- package/{esm2015/plugins/table/utils/set-menu-cell-invisibility.js → esm2020/plugins/table/utils/set-menu-cell-invisibility.mjs} +15 -15
- package/{esm2015/plugins/table/utils/split-cell.js → esm2020/plugins/table/utils/split-cell.mjs} +31 -31
- package/{esm2015/plugins/table/utils/table-position.js → esm2020/plugins/table/utils/table-position.mjs} +242 -242
- package/esm2020/plugins/todo-item/todo-item.component.mjs +64 -0
- package/{esm2015/plugins/todo-item/todo-item.editor.js → esm2020/plugins/todo-item/todo-item.editor.mjs} +31 -31
- package/{esm2015/plugins/todo-item/todo-item.plugin.js → esm2020/plugins/todo-item/todo-item.plugin.mjs} +78 -78
- package/esm2020/plugins/vertical-align/toolbar-item.component.mjs +83 -0
- package/{esm2015/plugins/vertical-align/vertical-align.editor.js → esm2020/plugins/vertical-align/vertical-align.editor.mjs} +54 -54
- package/{esm2015/public-api.js → esm2020/public-api.mjs} +23 -23
- package/{esm2015/queries/anchor-block-entry.js → esm2020/queries/anchor-block-entry.mjs} +13 -13
- package/{esm2015/queries/anchor-block.js → esm2020/queries/anchor-block.mjs} +6 -6
- package/{esm2015/queries/anchor-inline-entry.js → esm2020/queries/anchor-inline-entry.mjs} +10 -10
- package/{esm2015/queries/find-descendant.js → esm2020/queries/find-descendant.mjs} +47 -47
- package/{esm2015/queries/find-node.js → esm2020/queries/find-node.mjs} +45 -45
- package/{esm2015/queries/find-path.js → esm2020/queries/find-path.mjs} +28 -28
- package/esm2020/queries/get-above-by-type.mjs +14 -0
- package/{esm2015/queries/get-above.js → esm2020/queries/get-above.mjs} +9 -9
- package/{esm2015/queries/get-anchor-block-entry.js → esm2020/queries/get-anchor-block-entry.mjs} +8 -8
- package/esm2020/queries/get-block-above.mjs +10 -0
- package/esm2020/queries/get-block-card-above.mjs +10 -0
- package/{esm2015/queries/get-block-card-cursor.js → esm2020/queries/get-block-card-cursor.mjs} +5 -5
- package/{esm2015/queries/get-container-blocks.js → esm2020/queries/get-container-blocks.mjs} +11 -11
- package/{esm2015/queries/get-directly-parent.js → esm2020/queries/get-directly-parent.mjs} +11 -11
- package/{esm2015/queries/get-insert-elements-path.js → esm2020/queries/get-insert-elements-path.mjs} +43 -43
- package/{esm2015/queries/get-last-child-path.js → esm2020/queries/get-last-child-path.mjs} +9 -9
- package/{esm2015/queries/get-last-node.js → esm2020/queries/get-last-node.mjs} +17 -17
- package/{esm2015/queries/get-next-sibling-nodes.js → esm2020/queries/get-next-sibling-nodes.mjs} +17 -17
- package/{esm2015/queries/get-node.js → esm2020/queries/get-node.mjs} +10 -10
- package/esm2020/queries/get-nodes-by-type.mjs +15 -0
- package/{esm2015/queries/get-nodes.js → esm2020/queries/get-nodes.mjs} +7 -7
- package/{esm2015/queries/get-parent.js → esm2020/queries/get-parent.mjs} +12 -12
- package/esm2020/queries/get-plain-text.mjs +16 -0
- package/{esm2015/queries/get-plugin-by-toolbar.js → esm2020/queries/get-plugin-by-toolbar.mjs} +12 -12
- package/{esm2015/queries/get-point-before.js → esm2020/queries/get-point-before.mjs} +62 -62
- package/{esm2015/queries/get-point-from-location.js → esm2020/queries/get-point-from-location.mjs} +15 -15
- package/{esm2015/queries/get-previous-path.js → esm2020/queries/get-previous-path.mjs} +9 -9
- package/{esm2015/queries/get-rang-from-block-start.js → esm2020/queries/get-rang-from-block-start.mjs} +16 -16
- package/{esm2015/queries/get-range-before.js → esm2020/queries/get-range-before.mjs} +17 -17
- package/esm2020/queries/get-selection-marks.mjs +18 -0
- package/{esm2015/queries/get-selection-nodes-by-type.js → esm2020/queries/get-selection-nodes-by-type.mjs} +29 -29
- package/{esm2015/queries/get-text.js → esm2020/queries/get-text.mjs} +9 -9
- package/esm2020/queries/get-toolbar-disabled.mjs +13 -0
- package/{esm2015/queries/index.js → esm2020/queries/index.mjs} +58 -58
- package/{esm2015/queries/is-across-blocks.js → esm2020/queries/is-across-blocks.mjs} +7 -7
- package/{esm2015/queries/is-ancestor-empty.js → esm2020/queries/is-ancestor-empty.mjs} +6 -6
- package/{esm2015/queries/is-ancestor.js → esm2020/queries/is-ancestor.mjs} +3 -3
- package/{esm2015/queries/is-block-above-empty.js → esm2020/queries/is-block-above-empty.mjs} +11 -11
- package/{esm2015/queries/is-block-active.js → esm2020/queries/is-block-active.mjs} +7 -7
- package/{esm2015/queries/is-block-card-cursor.js → esm2020/queries/is-block-card-cursor.mjs} +4 -4
- package/{esm2015/queries/is-block-text-empty-after-selection.js → esm2020/queries/is-block-text-empty-after-selection.mjs} +31 -31
- package/{esm2015/queries/is-collapsed.js → esm2020/queries/is-collapsed.mjs} +7 -7
- package/{esm2015/queries/is-contain-nested-type.js → esm2020/queries/is-contain-nested-type.mjs} +28 -28
- package/{esm2015/queries/is-container-type.js → esm2020/queries/is-container-type.mjs} +2 -2
- package/{esm2015/queries/is-descendant.js → esm2020/queries/is-descendant.mjs} +3 -3
- package/{esm2015/queries/is-empty-content.js → esm2020/queries/is-empty-content.mjs} +14 -14
- package/{esm2015/queries/is-empty-paragraph-by-path.js → esm2020/queries/is-empty-paragraph-by-path.mjs} +7 -7
- package/{esm2015/queries/is-empty-paragraph.js → esm2020/queries/is-empty-paragraph.mjs} +11 -11
- package/{esm2015/queries/is-first-child.js → esm2020/queries/is-first-child.mjs} +5 -5
- package/{esm2015/queries/is-include-types.js → esm2020/queries/is-include-types.mjs} +11 -11
- package/{esm2015/queries/is-node-type-in.js → esm2020/queries/is-node-type-in.mjs} +9 -9
- package/{esm2015/queries/is-node-type.js → esm2020/queries/is-node-type.mjs} +15 -15
- package/{esm2015/queries/is-paragraph.js → esm2020/queries/is-paragraph.mjs} +9 -9
- package/{esm2015/queries/is-point-at-root.js → esm2020/queries/is-point-at-root.mjs} +2 -2
- package/esm2020/queries/is-range-across-blocks.mjs +22 -0
- package/{esm2015/queries/is-range-at-root.js → esm2020/queries/is-range-at-root.mjs} +3 -3
- package/{esm2015/queries/is-start.js → esm2020/queries/is-start.mjs} +6 -6
- package/{esm2015/queries/some-node.js → esm2020/queries/some-node.mjs} +9 -9
- package/{esm2015/services/color-select.service.js → esm2020/services/color-select.service.mjs} +50 -50
- package/esm2020/services/context.service.mjs +59 -0
- package/{esm2015/services/table-contextmenu.service.js → esm2020/services/table-contextmenu.service.mjs} +190 -190
- package/esm2020/services/toolbar.service.mjs +48 -0
- package/{esm2015/shortcuts/index.js → esm2020/shortcuts/index.mjs} +5 -5
- package/{esm2015/shortcuts/mark.js → esm2020/shortcuts/mark.mjs} +24 -24
- package/{esm2015/transforms/apply-deep-to-nodes.js → esm2020/transforms/apply-deep-to-nodes.mjs} +21 -21
- package/{esm2015/transforms/clear-marks.js → esm2020/transforms/clear-marks.mjs} +23 -23
- package/{esm2015/transforms/close-conversion-hint.js → esm2020/transforms/close-conversion-hint.mjs} +8 -8
- package/{esm2015/transforms/delete-element.js → esm2020/transforms/delete-element.mjs} +11 -11
- package/{esm2015/transforms/handle-continual-delete-backward.js → esm2020/transforms/handle-continual-delete-backward.mjs} +17 -17
- package/{esm2015/transforms/handle-continual-insert-break.js → esm2020/transforms/handle-continual-insert-break.mjs} +19 -19
- package/{esm2015/transforms/index.js → esm2020/transforms/index.mjs} +18 -18
- package/esm2020/transforms/insert-elements.mjs +34 -0
- package/{esm2015/transforms/insert-paragraph.js → esm2020/transforms/insert-paragraph.mjs} +6 -6
- package/esm2020/transforms/merge-deep-to-nodes.mjs +9 -0
- package/{esm2015/transforms/move-children.js → esm2020/transforms/move-children.mjs} +21 -21
- package/{esm2015/transforms/on-keydown-reset-block-type.js → esm2020/transforms/on-keydown-reset-block-type.mjs} +22 -22
- package/{esm2015/transforms/set-end-selection.js → esm2020/transforms/set-end-selection.mjs} +10 -10
- package/{esm2015/transforms/set-marks.js → esm2020/transforms/set-marks.mjs} +9 -9
- package/{esm2015/transforms/set-node.js → esm2020/transforms/set-node.mjs} +5 -5
- package/{esm2015/transforms/split-node.js → esm2020/transforms/split-node.mjs} +31 -31
- package/{esm2015/transforms/un-hang-range.js → esm2020/transforms/un-hang-range.mjs} +11 -11
- package/{esm2015/transforms/un-wrap.js → esm2020/transforms/un-wrap.mjs} +11 -11
- package/esm2020/transforms/unwrap-nodes-by-type.mjs +14 -0
- package/{esm2015/utils/auto-focus.js → esm2020/utils/auto-focus.mjs} +13 -13
- package/{esm2015/utils/auto-scroll-view.js → esm2020/utils/auto-scroll-view.mjs} +24 -24
- package/{esm2015/utils/cast-array.js → esm2020/utils/cast-array.mjs} +7 -7
- package/{esm2015/utils/common.js → esm2020/utils/common.mjs} +2 -2
- package/{esm2015/utils/create-empty-paragraph.js → esm2020/utils/create-empty-paragraph.mjs} +14 -14
- package/{esm2015/utils/data-transform.js → esm2020/utils/data-transform.mjs} +48 -48
- package/{esm2015/utils/dom.js → esm2020/utils/dom.mjs} +46 -46
- package/{esm2015/utils/editor-uuid.js → esm2020/utils/editor-uuid.mjs} +8 -8
- package/{esm2015/utils/fragment.js → esm2020/utils/fragment.mjs} +65 -65
- package/{esm2015/utils/get-editable-element-height.js → esm2020/utils/get-editable-element-height.mjs} +6 -6
- package/{esm2015/utils/get-toolbar-class.js → esm2020/utils/get-toolbar-class.mjs} +6 -6
- package/{esm2015/utils/id-creator.js → esm2020/utils/id-creator.mjs} +11 -11
- package/{esm2015/utils/index.js → esm2020/utils/index.mjs} +13 -13
- package/{esm2015/utils/is-clean-empty-paragraph.js → esm2020/utils/is-clean-empty-paragraph.mjs} +36 -36
- package/esm2020/utils/is-inline.mjs +9 -0
- package/{esm2015/utils/lodash.js → esm2020/utils/lodash.mjs} +3 -3
- package/esm2020/utils/match.mjs +32 -0
- package/{esm2015/utils/merge-element-options.js → esm2020/utils/merge-element-options.mjs} +19 -19
- package/{esm2015/utils/weak-maps.js → esm2020/utils/weak-maps.mjs} +3 -3
- package/{esm2015/worktile-theia.js → esm2020/worktile-theia.mjs} +4 -4
- package/fesm2015/{worktile-theia.js → worktile-theia.mjs} +13096 -13169
- package/fesm2015/worktile-theia.mjs.map +1 -0
- package/fesm2020/worktile-theia.mjs +13739 -0
- package/fesm2020/worktile-theia.mjs.map +1 -0
- package/interfaces/auto-format.d.ts +64 -64
- package/interfaces/editor.d.ts +146 -146
- package/interfaces/element.d.ts +9 -9
- package/interfaces/image.d.ts +25 -25
- package/interfaces/index.d.ts +8 -8
- package/interfaces/plugins/index.d.ts +4 -4
- package/interfaces/plugins/no-infer.d.ts +1 -1
- package/interfaces/plugins/plugin-key.d.ts +48 -48
- package/interfaces/plugins/plugins.d.ts +45 -45
- package/interfaces/plugins/with-override.d.ts +7 -7
- package/interfaces/reset-block-type-plugin-options.d.ts +23 -23
- package/interfaces/toolbar.d.ts +64 -64
- package/interfaces/upload.d.ts +11 -11
- package/interfaces/utility/index.d.ts +3 -3
- package/interfaces/utility/nested-structure-by-key.d.ts +3 -3
- package/interfaces/utility/override-by-key.d.ts +3 -3
- package/interfaces/utility/types.d.ts +1 -1
- package/interfaces/valid-children-types.d.ts +9 -9
- package/interfaces/view-base.d.ts +9 -9
- package/package.json +19 -6
- package/pipes.d.ts +16 -16
- package/plugins/align/align.editor.d.ts +7 -7
- package/plugins/align/align.plugin.d.ts +2 -2
- package/plugins/autoformat/autoformat.plugin.d.ts +6 -6
- package/plugins/autoformat/transforms/auto-format-block.d.ts +5 -5
- package/plugins/autoformat/transforms/auto-format-inline.d.ts +9 -9
- package/plugins/blockquote/blockquote.component.d.ts +11 -11
- package/plugins/blockquote/blockquote.editor.d.ts +4 -4
- package/plugins/blockquote/blockquote.plugin.d.ts +2 -2
- package/plugins/code/code.component.d.ts +65 -65
- package/plugins/code/code.editor.d.ts +8 -8
- package/plugins/code/code.plugin.d.ts +2 -2
- package/plugins/color/color.editor.d.ts +8 -8
- package/plugins/color/color.plugin.d.ts +1 -1
- package/plugins/color/toolbar-item.component.d.ts +16 -16
- package/plugins/common/auto-insert-data..d.ts +2 -2
- package/plugins/common/block-card.plugin.d.ts +2 -2
- package/plugins/common/get-fragment.plugin.d.ts +6 -6
- package/plugins/common/history.plugin.d.ts +9 -9
- package/plugins/common/move-selection.plugin.d.ts +2 -2
- package/plugins/common/remove-empty.plugin.d.ts +2 -2
- package/plugins/common/remove-void.plugin.d.ts +2 -2
- package/plugins/common/reset-type.plugin.d.ts +2 -2
- package/plugins/common/transforms.plugin.d.ts +8 -8
- package/plugins/deserializers/deserialize-html.plugin.d.ts +2 -2
- package/plugins/deserializers/deserialize-md.plugin.d.ts +2 -2
- package/plugins/font-size/font-size.editor.d.ts +10 -10
- package/plugins/heading/heading.editor.d.ts +9 -9
- package/plugins/heading/heading.plugin.d.ts +7 -7
- package/plugins/hr/hr.component.d.ts +12 -12
- package/plugins/hr/hr.editor.d.ts +4 -4
- package/plugins/hr/hr.plugin.d.ts +2 -2
- package/plugins/image/image.component.d.ts +74 -74
- package/plugins/image/image.editor.d.ts +12 -12
- package/plugins/image/image.plugin.d.ts +7 -7
- package/plugins/indent/indent.editor.d.ts +10 -10
- package/plugins/indent/indent.plugin.d.ts +8 -8
- package/plugins/indent/on-keydown-indent.d.ts +3 -3
- package/plugins/index.d.ts +1 -1
- package/plugins/inline-code/inline-code.component.d.ts +9 -9
- package/plugins/inline-code/inline-code.editor.d.ts +7 -7
- package/plugins/inline-code/inline-code.plugin.d.ts +2 -2
- package/plugins/link/edit/link-edit.component.d.ts +36 -36
- package/plugins/link/hover/link-hover.component.d.ts +15 -15
- package/plugins/link/link.component.d.ts +39 -39
- package/plugins/link/link.editor.d.ts +7 -7
- package/plugins/link/link.plugin.d.ts +2 -2
- package/plugins/link/link.types.d.ts +9 -9
- package/plugins/list/components/bulleted-list.component.d.ts +15 -15
- package/plugins/list/components/list-item.component.d.ts +20 -20
- package/plugins/list/components/numbered-list.component.d.ts +16 -16
- package/plugins/list/list.editor.d.ts +12 -12
- package/plugins/list/list.plugin.d.ts +3 -3
- package/plugins/list/normalizers/get-list-normalizer.d.ts +6 -6
- package/plugins/list/normalizers/normalize-list-item.d.ts +5 -5
- package/plugins/list/normalizers/normalize-no.d.ts +2 -2
- package/plugins/list/on-key-down-list.d.ts +2 -2
- package/plugins/list/queries/get-list-item-entry.d.ts +10 -10
- package/plugins/list/queries/get-list-item-sublist.d.ts +6 -6
- package/plugins/list/queries/get-list-types.d.ts +2 -2
- package/plugins/list/queries/get-start-list-item.d.ts +8 -8
- package/plugins/list/queries/has-list-in-list-item.d.ts +15 -15
- package/plugins/list/queries/is-in-list.d.ts +2 -2
- package/plugins/list/queries/is-list-nested.d.ts +5 -5
- package/plugins/list/queries/is-list.d.ts +2 -2
- package/plugins/list/queries/is-node-type-list.d.ts +2 -2
- package/plugins/list/queries/is-selection-at-list-item-start.d.ts +5 -5
- package/plugins/list/queries/is-selection-in-same-list-item.d.ts +5 -5
- package/plugins/list/queries/is-single-list-item.d.ts +5 -5
- package/plugins/list/transforms/insert-list-data.d.ts +12 -12
- package/plugins/list/transforms/insert-list-item.d.ts +5 -5
- package/plugins/list/transforms/move-list-item-down.d.ts +6 -6
- package/plugins/list/transforms/move-list-item-sublist-items-to-list-item-sublist.d.ts +20 -20
- package/plugins/list/transforms/move-list-item-sublist-items-to-list.d.ts +19 -19
- package/plugins/list/transforms/move-list-item-up.d.ts +10 -10
- package/plugins/list/transforms/unwrap-list.d.ts +2 -2
- package/plugins/list/types.d.ts +7 -7
- package/plugins/mark/mark.editor.d.ts +8 -8
- package/plugins/mark/mark.plugin.d.ts +3 -3
- package/plugins/node-id/node-id.plugin.d.ts +8 -8
- package/plugins/normalizers/insert-paragraph-nodes.d.ts +7 -7
- package/plugins/normalizers/remove-empty-nodes.d.ts +7 -7
- package/plugins/normalizers/trailing-node.plugin.d.ts +9 -9
- package/plugins/paint-format/paint-format.editor.d.ts +8 -8
- package/plugins/public-api.d.ts +15 -15
- package/plugins/quick-insert/components/quick-insert.component.d.ts +28 -28
- package/plugins/quick-insert/components/quick-toolbar/quick-toolbar.component.d.ts +28 -28
- package/plugins/quick-insert/quick-insert.editor.d.ts +7 -7
- package/plugins/quick-insert/quick-insert.plugin.d.ts +10 -10
- package/plugins/soft-break/soft-break.plugin.d.ts +5 -5
- package/plugins/soft-break/soft-break.types.d.ts +8 -8
- package/plugins/table/components/insert-mark/insert-mark.component.d.ts +24 -24
- package/plugins/table/components/row/row.component.d.ts +14 -14
- package/plugins/table/components/table.component.d.ts +79 -79
- package/plugins/table/components/td/td.component.d.ts +95 -95
- package/plugins/table/components/toolbar/table-options.component.d.ts +20 -20
- package/plugins/table/components/toolbar/table-toolbar.component.d.ts +38 -38
- package/plugins/table/table.editor.d.ts +25 -25
- package/plugins/table/table.plugin.d.ts +3 -3
- package/plugins/table/table.service.d.ts +30 -30
- package/plugins/table/table.store.d.ts +71 -71
- package/plugins/table/table.types.d.ts +67 -67
- package/plugins/table/toolbar-item.component.d.ts +17 -17
- package/plugins/table/transforms/clear-cell.d.ts +6 -6
- package/plugins/table/transforms/clear-table-node.d.ts +6 -6
- package/plugins/table/transforms/insert-column.d.ts +12 -12
- package/plugins/table/transforms/insert-row.d.ts +6 -6
- package/plugins/table/transforms/insert-table.d.ts +6 -6
- package/plugins/table/transforms/remove-column.d.ts +3 -3
- package/plugins/table/transforms/remove-row.d.ts +3 -3
- package/plugins/table/transforms/remove-table.d.ts +3 -3
- package/plugins/table/utils/add-columns.d.ts +2 -2
- package/plugins/table/utils/calc-anchor-position.d.ts +6 -6
- package/plugins/table/utils/calc-span.d.ts +11 -11
- package/plugins/table/utils/create-cell.d.ts +16 -16
- package/plugins/table/utils/create-row.d.ts +7 -7
- package/plugins/table/utils/create-table.d.ts +7 -7
- package/plugins/table/utils/get-base-height.d.ts +9 -9
- package/plugins/table/utils/get-select-cell-node.d.ts +7 -7
- package/plugins/table/utils/index.d.ts +7 -7
- package/plugins/table/utils/is-range-in-table.d.ts +6 -6
- package/plugins/table/utils/is-selection-in-table.d.ts +6 -6
- package/plugins/table/utils/is-virtual-key.d.ts +1 -1
- package/plugins/table/utils/merge-cell.d.ts +21 -21
- package/plugins/table/utils/next-path.d.ts +2 -2
- package/plugins/table/utils/normalize-table.d.ts +2 -2
- package/plugins/table/utils/remove-columns.d.ts +2 -2
- package/plugins/table/utils/set-menu-cell-invisibility.d.ts +3 -3
- package/plugins/table/utils/split-cell.d.ts +4 -4
- package/plugins/table/utils/table-position.d.ts +97 -97
- package/plugins/todo-item/todo-item.component.d.ts +21 -21
- package/plugins/todo-item/todo-item.editor.d.ts +5 -5
- package/plugins/todo-item/todo-item.plugin.d.ts +5 -5
- package/plugins/vertical-align/toolbar-item.component.d.ts +25 -25
- package/plugins/vertical-align/vertical-align.editor.d.ts +7 -7
- package/public-api.d.ts +20 -20
- package/queries/anchor-block-entry.d.ts +2 -2
- package/queries/anchor-block.d.ts +2 -2
- package/queries/anchor-inline-entry.d.ts +2 -2
- package/queries/find-descendant.d.ts +10 -10
- package/queries/find-node.d.ts +15 -15
- package/queries/find-path.d.ts +6 -6
- package/queries/get-above-by-type.d.ts +6 -6
- package/queries/get-above.d.ts +6 -6
- package/queries/get-anchor-block-entry.d.ts +2 -2
- package/queries/get-block-above.d.ts +7 -7
- package/queries/get-block-card-above.d.ts +7 -7
- package/queries/get-block-card-cursor.d.ts +2 -2
- package/queries/get-container-blocks.d.ts +2 -2
- package/queries/get-directly-parent.d.ts +2 -2
- package/queries/get-insert-elements-path.d.ts +7 -7
- package/queries/get-last-child-path.d.ts +6 -6
- package/queries/get-last-node.d.ts +2 -2
- package/queries/get-next-sibling-nodes.d.ts +7 -7
- package/queries/get-node.d.ts +2 -2
- package/queries/get-nodes-by-type.d.ts +6 -6
- package/queries/get-nodes.d.ts +4 -4
- package/queries/get-parent.d.ts +7 -7
- package/queries/get-plain-text.d.ts +6 -6
- package/queries/get-plugin-by-toolbar.d.ts +3 -3
- package/queries/get-point-before.d.ts +38 -38
- package/queries/get-point-from-location.d.ts +5 -5
- package/queries/get-previous-path.d.ts +2 -2
- package/queries/get-rang-from-block-start.d.ts +9 -9
- package/queries/get-range-before.d.ts +7 -7
- package/queries/get-selection-marks.d.ts +12 -12
- package/queries/get-selection-nodes-by-type.d.ts +3 -3
- package/queries/get-text.d.ts +6 -6
- package/queries/get-toolbar-disabled.d.ts +4 -4
- package/queries/index.d.ts +58 -58
- package/queries/is-across-blocks.d.ts +2 -2
- package/queries/is-ancestor-empty.d.ts +5 -5
- package/queries/is-ancestor.d.ts +2 -2
- package/queries/is-block-above-empty.d.ts +5 -5
- package/queries/is-block-active.d.ts +3 -3
- package/queries/is-block-card-cursor.d.ts +2 -2
- package/queries/is-block-text-empty-after-selection.d.ts +7 -7
- package/queries/is-collapsed.d.ts +6 -6
- package/queries/is-contain-nested-type.d.ts +2 -2
- package/queries/is-container-type.d.ts +2 -2
- package/queries/is-descendant.d.ts +2 -2
- package/queries/is-empty-content.d.ts +2 -2
- package/queries/is-empty-paragraph-by-path.d.ts +2 -2
- package/queries/is-empty-paragraph.d.ts +2 -2
- package/queries/is-first-child.d.ts +5 -5
- package/queries/is-include-types.d.ts +3 -3
- package/queries/is-node-type-in.d.ts +6 -6
- package/queries/is-node-type.d.ts +6 -6
- package/queries/is-paragraph.d.ts +2 -2
- package/queries/is-point-at-root.d.ts +2 -2
- package/queries/is-range-across-blocks.d.ts +8 -8
- package/queries/is-range-at-root.d.ts +2 -2
- package/queries/is-start.d.ts +5 -5
- package/queries/some-node.d.ts +7 -7
- package/services/color-select.service.d.ts +20 -20
- package/services/context.service.d.ts +49 -49
- package/services/table-contextmenu.service.d.ts +25 -25
- package/services/toolbar.service.d.ts +9 -9
- package/shortcuts/index.d.ts +2 -2
- package/shortcuts/mark.d.ts +2 -2
- package/transforms/apply-deep-to-nodes.d.ts +12 -12
- package/transforms/clear-marks.d.ts +2 -2
- package/transforms/close-conversion-hint.d.ts +2 -2
- package/transforms/delete-element.d.ts +2 -2
- package/transforms/handle-continual-delete-backward.d.ts +3 -3
- package/transforms/handle-continual-insert-break.d.ts +3 -3
- package/transforms/index.d.ts +18 -18
- package/transforms/insert-elements.d.ts +2 -2
- package/transforms/insert-paragraph.d.ts +2 -2
- package/transforms/merge-deep-to-nodes.d.ts +5 -5
- package/transforms/move-children.d.ts +24 -24
- package/transforms/on-keydown-reset-block-type.d.ts +3 -3
- package/transforms/set-end-selection.d.ts +2 -2
- package/transforms/set-marks.d.ts +12 -12
- package/transforms/set-node.d.ts +2 -2
- package/transforms/split-node.d.ts +3 -3
- package/transforms/un-hang-range.d.ts +10 -10
- package/transforms/un-wrap.d.ts +3 -3
- package/transforms/unwrap-nodes-by-type.d.ts +6 -6
- package/utils/auto-focus.d.ts +2 -2
- package/utils/auto-scroll-view.d.ts +6 -6
- package/utils/cast-array.d.ts +1 -1
- package/utils/common.d.ts +2 -2
- package/utils/create-empty-paragraph.d.ts +2 -2
- package/utils/data-transform.d.ts +6 -6
- package/utils/dom.d.ts +10 -10
- package/utils/editor-uuid.d.ts +3 -3
- package/utils/fragment.d.ts +10 -10
- package/utils/get-editable-element-height.d.ts +2 -2
- package/utils/get-toolbar-class.d.ts +2 -2
- package/utils/id-creator.d.ts +1 -1
- package/utils/index.d.ts +13 -13
- package/utils/is-clean-empty-paragraph.d.ts +9 -9
- package/utils/is-inline.d.ts +2 -2
- package/utils/lodash.d.ts +1 -1
- package/utils/match.d.ts +18 -18
- package/utils/merge-element-options.d.ts +2 -2
- package/utils/weak-maps.d.ts +5 -5
- package/worktile-theia.d.ts +5 -5
- package/bundles/worktile-theia.umd.js +0 -14919
- package/bundles/worktile-theia.umd.js.map +0 -1
- package/esm2015/components/color-select/color-select.component.js +0 -113
- package/esm2015/components/column-resize/column-resize-notifier.js +0 -31
- package/esm2015/components/column-resize/column-resize.module.js +0 -34
- package/esm2015/components/contextmenu/contextmenu.component.js +0 -64
- package/esm2015/components/conversion-hint/conversion-hint.component.js +0 -59
- package/esm2015/components/element/element.component.js +0 -24
- package/esm2015/components/inline-toolbar/inline-toolbar.component.js +0 -139
- package/esm2015/components/table-select/table-select.component.js +0 -53
- package/esm2015/components/template/template.component.js +0 -66
- package/esm2015/components/toolbar/toolbar.component.js +0 -250
- package/esm2015/components/toolbar-dropdown/toolbar-dropdown.component.js +0 -133
- package/esm2015/components/toolbar-group/toolbar-group.component.js +0 -116
- package/esm2015/components/toolbar-item/toolbar-item.component.js +0 -105
- package/esm2015/core/create-toolbar.js +0 -57
- package/esm2015/core/toolbar-item/base-toolbar-item.js +0 -92
- package/esm2015/core/utils/get-plugin-options.js +0 -3
- package/esm2015/core/utils/get-plugins.js +0 -5
- package/esm2015/core/utils/merge-array.js +0 -18
- package/esm2015/editor.component.js +0 -440
- package/esm2015/interfaces/editor.js +0 -23
- package/esm2015/interfaces/reset-block-type-plugin-options.js +0 -2
- package/esm2015/interfaces/upload.js +0 -2
- package/esm2015/plugins/align/align.editor.js +0 -48
- package/esm2015/plugins/autoformat/autoformat.plugin.js +0 -110
- package/esm2015/plugins/blockquote/blockquote.editor.js +0 -21
- package/esm2015/plugins/code/code.component.js +0 -245
- package/esm2015/plugins/color/color.editor.js +0 -45
- package/esm2015/plugins/color/toolbar-item.component.js +0 -124
- package/esm2015/plugins/common/auto-insert-data..js +0 -78
- package/esm2015/plugins/common/get-fragment.plugin.js +0 -25
- package/esm2015/plugins/font-size/font-size.editor.js +0 -98
- package/esm2015/plugins/image/image.component.js +0 -370
- package/esm2015/plugins/image/image.plugin.js +0 -58
- package/esm2015/plugins/indent/indent.editor.js +0 -73
- package/esm2015/plugins/indent/indent.plugin.js +0 -60
- package/esm2015/plugins/link/edit/link-edit.component.js +0 -108
- package/esm2015/plugins/link/hover/link-hover.component.js +0 -39
- package/esm2015/plugins/list/components/bulleted-list.component.js +0 -34
- package/esm2015/plugins/list/components/list-item.component.js +0 -95
- package/esm2015/plugins/list/components/numbered-list.component.js +0 -40
- package/esm2015/plugins/list/list.plugin.js +0 -281
- package/esm2015/plugins/list/normalizers/normalize-list-item.js +0 -19
- package/esm2015/plugins/list/types.js +0 -2
- package/esm2015/plugins/mark/mark.editor.js +0 -29
- package/esm2015/plugins/mark/mark.plugin.js +0 -102
- package/esm2015/plugins/node-id/node-id.plugin.js +0 -69
- package/esm2015/plugins/normalizers/insert-paragraph-nodes.js +0 -29
- package/esm2015/plugins/normalizers/trailing-node.plugin.js +0 -34
- package/esm2015/plugins/quick-insert/components/quick-insert.component.js +0 -102
- package/esm2015/plugins/quick-insert/components/quick-toolbar/quick-toolbar.component.js +0 -84
- package/esm2015/plugins/quick-insert/quick-insert.plugin.js +0 -75
- package/esm2015/plugins/soft-break/soft-break.plugin.js +0 -37
- package/esm2015/plugins/table/components/insert-mark/insert-mark.component.js +0 -103
- package/esm2015/plugins/table/components/table.component.js +0 -470
- package/esm2015/plugins/table/components/td/td.component.js +0 -698
- package/esm2015/plugins/table/components/toolbar/table-toolbar.component.js +0 -162
- package/esm2015/plugins/table/table.plugin.js +0 -424
- package/esm2015/plugins/table/table.store.js +0 -480
- package/esm2015/plugins/table/toolbar-item.component.js +0 -86
- package/esm2015/plugins/table/transforms/clear-cell.js +0 -11
- package/esm2015/plugins/table/transforms/insert-table.js +0 -15
- package/esm2015/plugins/todo-item/todo-item.component.js +0 -66
- package/esm2015/plugins/vertical-align/toolbar-item.component.js +0 -90
- package/esm2015/queries/get-above-by-type.js +0 -11
- package/esm2015/queries/get-block-above.js +0 -7
- package/esm2015/queries/get-block-card-above.js +0 -7
- package/esm2015/queries/get-nodes-by-type.js +0 -12
- package/esm2015/queries/get-plain-text.js +0 -16
- package/esm2015/queries/get-selection-marks.js +0 -19
- package/esm2015/queries/get-toolbar-disabled.js +0 -14
- package/esm2015/queries/is-range-across-blocks.js +0 -18
- package/esm2015/services/context.service.js +0 -60
- package/esm2015/services/toolbar.service.js +0 -48
- package/esm2015/transforms/insert-elements.js +0 -35
- package/esm2015/transforms/merge-deep-to-nodes.js +0 -9
- package/esm2015/transforms/unwrap-nodes-by-type.js +0 -11
- package/esm2015/utils/is-inline.js +0 -10
- package/esm2015/utils/match.js +0 -29
- package/fesm2015/worktile-theia.js.map +0 -1
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
import { Transforms, Node, Editor, Path } from 'slate';
|
|
2
|
+
import { AngularEditor, getPlainText } from 'slate-angular';
|
|
3
|
+
import { CLIPBOARD_FORMAT_KEY, ElementKinds } from '../../constants';
|
|
4
|
+
import * as TheQueries from '../../queries';
|
|
5
|
+
import * as TheTransforms from '../../transforms';
|
|
6
|
+
import { isList } from './queries/is-list';
|
|
7
|
+
import { isInList } from './queries/is-in-list';
|
|
8
|
+
import { isListNested } from './queries/is-list-nested';
|
|
9
|
+
import { getListTypes } from './queries/get-list-types';
|
|
10
|
+
import { getStartListItem } from './queries/get-start-list-item';
|
|
11
|
+
import { isSingleListItem } from './queries/is-single-list-item';
|
|
12
|
+
import { getListItemEntry } from './queries/get-list-item-entry';
|
|
13
|
+
import { hasListInListItem, hasStableListInListItem, hasStableListItem } from './queries/has-list-in-list-item';
|
|
14
|
+
import { isSelectionAtListItemStart } from './queries/is-selection-at-list-item-start';
|
|
15
|
+
import { insertListData } from './transforms/insert-list-data';
|
|
16
|
+
import { moveListItemUp } from './transforms/move-list-item-up';
|
|
17
|
+
import { insertListItem } from './transforms/insert-list-item';
|
|
18
|
+
import { unwrapList } from './transforms/unwrap-list';
|
|
19
|
+
import { moveListItemSublistItemsToListItemSublist } from './transforms/move-list-item-sublist-items-to-list-item-sublist';
|
|
20
|
+
import { getListNormalizer } from './normalizers/get-list-normalizer';
|
|
21
|
+
import { onKeyDownList } from './on-key-down-list';
|
|
22
|
+
import { TheNumberedListComponent } from './components/numbered-list.component';
|
|
23
|
+
import { TheBulletedListComponent } from './components/bulleted-list.component';
|
|
24
|
+
import { TheListItemComponent } from './components/list-item.component';
|
|
25
|
+
import { extractFragment } from '../../utils/fragment';
|
|
26
|
+
import { isSelectionInSameListItem } from './queries/is-selection-in-same-list-item';
|
|
27
|
+
import { createPluginFactory, getPluginOptions } from '../../core';
|
|
28
|
+
import { PluginKeys } from '../../interfaces';
|
|
29
|
+
import { ListEditor } from './list.editor';
|
|
30
|
+
export const withList = (editor) => {
|
|
31
|
+
const { insertBreak, deleteBackward, onKeydown, insertData, setFragmentData, renderElement } = editor;
|
|
32
|
+
const validLiChildrenTypes = getPluginOptions(editor, PluginKeys.list)?.validLiChildrenTypes ?? [];
|
|
33
|
+
const resetBlockTypesListRule = {
|
|
34
|
+
types: [ElementKinds.listItem],
|
|
35
|
+
defaultType: ElementKinds.paragraph,
|
|
36
|
+
onReset: (_editor) => unwrapList(_editor)
|
|
37
|
+
};
|
|
38
|
+
editor.insertBreak = () => {
|
|
39
|
+
const node = TheQueries.anchorBlock(editor);
|
|
40
|
+
if (!node) {
|
|
41
|
+
insertBreak();
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
const isVoid = Editor.isVoid(editor, node);
|
|
45
|
+
if (isVoid) {
|
|
46
|
+
insertBreak();
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const listEntry = getListItemEntry(editor, {});
|
|
50
|
+
if (listEntry) {
|
|
51
|
+
let moved;
|
|
52
|
+
const { list, listItem } = listEntry;
|
|
53
|
+
const [listItemNode, listItemPath] = listItem;
|
|
54
|
+
const cursor = editor.selection.focus;
|
|
55
|
+
const isStart = Editor.isStart(editor, cursor, listItemPath);
|
|
56
|
+
// deprecated
|
|
57
|
+
// 如果有子级
|
|
58
|
+
if (hasListInListItem(listItemNode)) {
|
|
59
|
+
/**
|
|
60
|
+
* If selection is at the end of li,
|
|
61
|
+
* insert below li where children will be moved.
|
|
62
|
+
*/
|
|
63
|
+
if (Editor.isEnd(editor, cursor, listItemPath)) {
|
|
64
|
+
return Transforms.insertNodes(editor, {
|
|
65
|
+
type: ElementKinds.listItem,
|
|
66
|
+
children: [{ type: ElementKinds.paragraph, children: [{ text: '' }] }]
|
|
67
|
+
}, { at: Path.next(listItemPath), select: true });
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* 如果选区是在listItem的开头,则在listItem上方插入
|
|
71
|
+
*/
|
|
72
|
+
if (isStart) {
|
|
73
|
+
return Transforms.insertNodes(editor, {
|
|
74
|
+
type: ElementKinds.listItem,
|
|
75
|
+
children: [{ type: ElementKinds.paragraph, children: [{ text: '' }] }]
|
|
76
|
+
}, { at: listItemPath });
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// 如果选择的listItem为空则将其向上移动
|
|
80
|
+
if (isStart && TheQueries.isBlockAboveEmpty(editor)) {
|
|
81
|
+
moved = moveListItemUp(editor, { list, listItem });
|
|
82
|
+
if (moved)
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const didReset = TheTransforms.onKeyDownResetBlockType({
|
|
86
|
+
rules: [
|
|
87
|
+
{
|
|
88
|
+
...resetBlockTypesListRule,
|
|
89
|
+
predicate: () => !moved && isStart && TheQueries.isBlockAboveEmpty(editor)
|
|
90
|
+
}
|
|
91
|
+
]
|
|
92
|
+
})(null, editor);
|
|
93
|
+
if (didReset) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Add a new list item if selection is in a LIST_ITEM > p.type.
|
|
98
|
+
*/
|
|
99
|
+
if (!moved) {
|
|
100
|
+
const inserted = insertListItem(editor);
|
|
101
|
+
if (inserted) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
insertBreak();
|
|
107
|
+
};
|
|
108
|
+
editor.setFragmentData = unit => {
|
|
109
|
+
const { selection } = editor;
|
|
110
|
+
const [start] = Editor.edges(editor, selection);
|
|
111
|
+
if (isInList(editor, start)) {
|
|
112
|
+
const fragmentData = editor.getFragment();
|
|
113
|
+
const fragmentElement = fragmentData[0];
|
|
114
|
+
if (getListTypes().includes(fragmentElement.type)) {
|
|
115
|
+
const startNodes = getStartListItem([fragmentElement.children[0]]);
|
|
116
|
+
const children = startNodes.concat(fragmentElement.children.slice(1));
|
|
117
|
+
let fragmentNodes = [
|
|
118
|
+
{
|
|
119
|
+
...fragmentElement,
|
|
120
|
+
children
|
|
121
|
+
}
|
|
122
|
+
];
|
|
123
|
+
if (isSelectionInSameListItem(editor)) {
|
|
124
|
+
// 仅仅复制列表中的内容
|
|
125
|
+
fragmentNodes = children[0].children;
|
|
126
|
+
}
|
|
127
|
+
const fragment = fragmentNodes.concat(fragmentData.slice(1));
|
|
128
|
+
const domRange = AngularEditor.toDOMRange(editor, selection);
|
|
129
|
+
const contents = domRange.cloneContents();
|
|
130
|
+
const stringObj = JSON.stringify(fragment);
|
|
131
|
+
const encoded = window.btoa(encodeURIComponent(stringObj));
|
|
132
|
+
unit.setData(`application/${CLIPBOARD_FORMAT_KEY}`, encoded);
|
|
133
|
+
const div = document.createElement('div');
|
|
134
|
+
div.appendChild(contents);
|
|
135
|
+
div.setAttribute('hidden', 'true');
|
|
136
|
+
document.body.appendChild(div);
|
|
137
|
+
unit.setData('text/html', div.innerHTML);
|
|
138
|
+
unit.setData('text/plain', getPlainText(div));
|
|
139
|
+
document.body.removeChild(div);
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
setFragmentData(unit);
|
|
144
|
+
};
|
|
145
|
+
editor.deleteBackward = unit => {
|
|
146
|
+
const res = getListItemEntry(editor, {});
|
|
147
|
+
if (res && isSelectionAtListItemStart(editor)) {
|
|
148
|
+
const { list, listItem } = res;
|
|
149
|
+
const [, listPath] = list;
|
|
150
|
+
const [listItemNode, listItemPath] = listItem;
|
|
151
|
+
const previousListItemPath = TheQueries.getPreviousPath(listItemPath);
|
|
152
|
+
if (previousListItemPath) {
|
|
153
|
+
const beforePoint = Editor.before(editor, listItemPath);
|
|
154
|
+
const parentPath = Path.parent(beforePoint.path);
|
|
155
|
+
const parentNode = Node.get(editor, parentPath);
|
|
156
|
+
if (Editor.isVoid(editor, parentNode)) {
|
|
157
|
+
Editor.withoutNormalizing(editor, () => {
|
|
158
|
+
TheTransforms.unwrapNodesByType(editor, [ElementKinds.bulletedList, ElementKinds.numberedList], {
|
|
159
|
+
split: true
|
|
160
|
+
});
|
|
161
|
+
TheTransforms.unwrapNodesByType(editor, ElementKinds.listItem);
|
|
162
|
+
});
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
if (previousListItemPath && hasStableListInListItem(listItemNode)) {
|
|
167
|
+
Editor.withoutNormalizing(editor, () => {
|
|
168
|
+
deleteBackward(unit);
|
|
169
|
+
const [previousListItemNode] = Editor.node(editor, previousListItemPath);
|
|
170
|
+
moveListItemSublistItemsToListItemSublist(editor, {
|
|
171
|
+
fromListItem: listItem,
|
|
172
|
+
toListItem: [previousListItemNode, previousListItemPath],
|
|
173
|
+
start: false
|
|
174
|
+
}, {});
|
|
175
|
+
});
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
// move listItem children to before listItem
|
|
179
|
+
if (listItemNode.children.length > 1) {
|
|
180
|
+
Editor.withoutNormalizing(editor, () => {
|
|
181
|
+
const beforePathRef = Editor.pathRef(editor, listItemPath);
|
|
182
|
+
const beforePoint = Editor.before(editor, listItemPath);
|
|
183
|
+
const startPoint = Editor.start(editor, listItemPath);
|
|
184
|
+
const endPoint = Editor.end(editor, listItemPath);
|
|
185
|
+
const isInFirstChild = !isListNested(editor, listPath) && TheQueries.isFirstChild(listItemPath);
|
|
186
|
+
const to = isInFirstChild ? listPath : Path.next(Path.parent(beforePoint.path));
|
|
187
|
+
Transforms.moveNodes(editor, {
|
|
188
|
+
at: Editor.range(editor, startPoint, endPoint),
|
|
189
|
+
to,
|
|
190
|
+
match: node => listItemNode.children.includes(node)
|
|
191
|
+
});
|
|
192
|
+
Transforms.delete(editor, { at: beforePathRef.unref() });
|
|
193
|
+
if (!isInFirstChild) {
|
|
194
|
+
deleteBackward(unit);
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
// deprecated
|
|
200
|
+
if (!isListNested(editor, listPath) && TheQueries.isFirstChild(listItemPath)) {
|
|
201
|
+
unwrapList(editor);
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
deleteBackward(unit);
|
|
206
|
+
};
|
|
207
|
+
editor.insertData = (data) => {
|
|
208
|
+
const text = data.getData('text/plain');
|
|
209
|
+
const fragment = extractFragment(data);
|
|
210
|
+
const aboveEntry = Editor.above(editor, {
|
|
211
|
+
match: n => Editor.isBlock(editor, n) && n.type === ElementKinds.listItem
|
|
212
|
+
});
|
|
213
|
+
if (fragment) {
|
|
214
|
+
const res = getListItemEntry(editor, {});
|
|
215
|
+
if (fragment.length === 1 &&
|
|
216
|
+
isList(fragment[0]) &&
|
|
217
|
+
aboveEntry &&
|
|
218
|
+
!isSingleListItem(fragment[0]) &&
|
|
219
|
+
hasStableListItem(res.listItem[0])) {
|
|
220
|
+
insertListData(editor, { fromList: fragment[0], toListItemEntry: aboveEntry });
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
insertData(data);
|
|
225
|
+
};
|
|
226
|
+
editor.onKeydown = (event) => {
|
|
227
|
+
const isContinue = !onKeyDownList(event, editor);
|
|
228
|
+
if (isContinue) {
|
|
229
|
+
onKeydown(event);
|
|
230
|
+
}
|
|
231
|
+
};
|
|
232
|
+
editor.normalizeNode = getListNormalizer(editor, { validLiChildrenTypes: validLiChildrenTypes });
|
|
233
|
+
editor.renderElement = (element) => {
|
|
234
|
+
if (element.type === ElementKinds.numberedList) {
|
|
235
|
+
return TheNumberedListComponent;
|
|
236
|
+
}
|
|
237
|
+
if (element.type === ElementKinds.bulletedList) {
|
|
238
|
+
return TheBulletedListComponent;
|
|
239
|
+
}
|
|
240
|
+
if (element.type === ElementKinds.listItem) {
|
|
241
|
+
return TheListItemComponent;
|
|
242
|
+
}
|
|
243
|
+
return renderElement(element);
|
|
244
|
+
};
|
|
245
|
+
return editor;
|
|
246
|
+
};
|
|
247
|
+
const listOptions = {
|
|
248
|
+
validLiChildrenTypes: [ElementKinds.image],
|
|
249
|
+
allowParentTypes: [ElementKinds.listItem, ElementKinds.tableCell, ElementKinds.blockquote]
|
|
250
|
+
};
|
|
251
|
+
export const createListPlugin = createPluginFactory({
|
|
252
|
+
key: PluginKeys.list,
|
|
253
|
+
withOverrides: withList,
|
|
254
|
+
plugins: [
|
|
255
|
+
{
|
|
256
|
+
key: PluginKeys.numberedList,
|
|
257
|
+
options: listOptions
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
key: PluginKeys.bulletedList,
|
|
261
|
+
options: listOptions
|
|
262
|
+
}
|
|
263
|
+
],
|
|
264
|
+
nestedStructureByKey: {
|
|
265
|
+
[ElementKinds.bulletedList]: ElementKinds.listItem,
|
|
266
|
+
[ElementKinds.numberedList]: ElementKinds.listItem
|
|
267
|
+
},
|
|
268
|
+
toolbarItems: [
|
|
269
|
+
{
|
|
270
|
+
key: ElementKinds.numberedList,
|
|
271
|
+
icon: 'list-ordered',
|
|
272
|
+
name: '有序列表',
|
|
273
|
+
execute: editor => ListEditor.toggleList(editor, ElementKinds.numberedList),
|
|
274
|
+
active: editor => ListEditor.isActive(editor, ElementKinds.numberedList)
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
key: ElementKinds.bulletedList,
|
|
278
|
+
icon: 'list-bullet',
|
|
279
|
+
name: '无序列表',
|
|
280
|
+
execute: editor => ListEditor.toggleList(editor, ElementKinds.bulletedList),
|
|
281
|
+
active: editor => ListEditor.isActive(editor, ElementKinds.bulletedList)
|
|
282
|
+
}
|
|
283
|
+
],
|
|
284
|
+
options: listOptions
|
|
285
|
+
});
|
|
286
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvcGx1Z2lucy9saXN0L2xpc3QucGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQXFCLE1BQU0sT0FBTyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRSxPQUFPLEtBQUssVUFBVSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEtBQUssYUFBYSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNoSCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN2RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxD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RSxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxZQUFZLENBQUM7WUFDM0UsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLFlBQVksQ0FBQztTQUMzRTtRQUNEO1lBQ0ksR0FBRyxFQUFFLFlBQVksQ0FBQyxZQUFZO1lBQzlCLElBQUksRUFBRSxhQUFhO1lBQ25CLElBQUksRUFBRSxNQUFNO1lBQ1osT0FBTyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLFlBQVksQ0FBQztZQUMzRSxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsWUFBWSxDQUFDO1NBQzNFO0tBQ0o7SUFDRCxPQUFPLEVBQUUsV0FBVztDQUN2QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUcmFuc2Zvcm1zLCBOb2RlLCBFZGl0b3IsIFBhdGgsIEFuY2VzdG9yLCBFbGVtZW50IH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IHsgQW5ndWxhckVkaXRvciwgZ2V0UGxhaW5UZXh0IH0gZnJvbSAnc2xhdGUtYW5ndWxhcic7XG5pbXBvcnQgeyBDTElQQk9BUkRfRk9STUFUX0tFWSwgRWxlbWVudEtpbmRzIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCAqIGFzIFRoZVF1ZXJpZXMgZnJvbSAnLi4vLi4vcXVlcmllcyc7XG5pbXBvcnQgKiBhcyBUaGVUcmFuc2Zvcm1zIGZyb20gJy4uLy4uL3RyYW5zZm9ybXMnO1xuaW1wb3J0IHsgaXNMaXN0IH0gZnJvbSAnLi9xdWVyaWVzL2lzLWxpc3QnO1xuaW1wb3J0IHsgaXNJbkxpc3QgfSBmcm9tICcuL3F1ZXJpZXMvaXMtaW4tbGlzdCc7XG5pbXBvcnQgeyBpc0xpc3ROZXN0ZWQgfSBmcm9tICcuL3F1ZXJpZXMvaXMtbGlzdC1uZXN0ZWQnO1xuaW1wb3J0IHsgZ2V0TGlzdFR5cGVzIH0gZnJvbSAnLi9xdWVyaWVzL2dldC1saXN0LXR5cGVzJztcbmltcG9ydCB7IGdldFN0YXJ0TGlzdEl0ZW0gfSBmcm9tICcuL3F1ZXJpZXMvZ2V0LXN0YXJ0LWxpc3QtaXRlbSc7XG5pbXBvcnQgeyBpc1NpbmdsZUxpc3RJdGVtIH0gZnJvbSAnLi9xdWVyaWVzL2lzLXNpbmdsZS1saXN0LWl0ZW0nO1xuaW1wb3J0IHsgZ2V0TGlzdEl0ZW1FbnRyeSB9IGZyb20gJy4vcXVlcmllcy9nZXQtbGlzdC1pdGVtLWVudHJ5JztcbmltcG9ydCB7IGhhc0xpc3RJbkxpc3RJdGVtLCBoYXNTdGFibGVMaXN0SW5MaXN0SXRlbSwgaGFzU3RhYmxlTGlzdEl0ZW0gfSBmcm9tICcuL3F1ZXJpZXMvaGFzLWxpc3QtaW4tbGlzdC1pdGVtJztcbmltcG9ydCB7IGlzU2VsZWN0aW9uQXRMaXN0SXRlbVN0YXJ0IH0gZnJvbSAnLi9xdWVyaWVzL2lzLXNlbGVjdGlvbi1hdC1saXN0LWl0ZW0tc3RhcnQnO1xuaW1wb3J0IHsgaW5zZXJ0TGlzdERhdGEgfSBmcm9tICcuL3RyYW5zZm9ybXMvaW5zZXJ0LWxpc3QtZGF0YSc7XG5pbXBvcnQgeyBtb3ZlTGlzdEl0ZW1VcCB9IGZyb20gJy4vdHJhbnNmb3Jtcy9tb3ZlLWxpc3QtaXRlbS11cCc7XG5pbXBvcnQgeyBpbnNlcnRMaXN0SXRlbSB9IGZyb20gJy4vdHJhbnNmb3Jtcy9pbnNlcnQtbGlzdC1pdGVtJztcbmltcG9ydCB7IHVud3JhcExpc3QgfSBmcm9tICcuL3RyYW5zZm9ybXMvdW53cmFwLWxpc3QnO1xuaW1wb3J0IHsgbW92ZUxpc3RJdGVtU3VibGlzdEl0ZW1zVG9MaXN0SXRlbVN1Ymxpc3QgfSBmcm9tICcuL3RyYW5zZm9ybXMvbW92ZS1saXN0LWl0ZW0tc3VibGlzdC1pdGVtcy10by1saXN0LWl0ZW0tc3VibGlzdCc7XG5pbXBvcnQgeyBnZXRMaXN0Tm9ybWFsaXplciB9IGZyb20gJy4vbm9ybWFsaXplcnMvZ2V0LWxpc3Qtbm9ybWFsaXplcic7XG5pbXBvcnQgeyBvbktleURvd25MaXN0IH0gZnJvbSAnLi9vbi1rZXktZG93bi1saXN0JztcbmltcG9ydCB7IFdpdGhMaXN0T3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgVGhlTnVtYmVyZWRMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL251bWJlcmVkLWxpc3QuY29tcG9uZW50JztcbmltcG9ydCB7IFRoZUJ1bGxldGVkTGlzdENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9idWxsZXRlZC1saXN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUaGVMaXN0SXRlbUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9saXN0LWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IGV4dHJhY3RGcmFnbWVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2ZyYWdtZW50JztcbmltcG9ydCB7IGlzU2VsZWN0aW9uSW5TYW1lTGlzdEl0ZW0gfSBmcm9tICcuL3F1ZXJpZXMvaXMtc2VsZWN0aW9uLWluLXNhbWUtbGlzdC1pdGVtJztcbmltcG9ydCB7IGNyZWF0ZVBsdWdpbkZhY3RvcnksIGdldFBsdWdpbk9wdGlvbnMgfSBmcm9tICcuLi8uLi9jb3JlJztcbmltcG9ydCB7IFBsdWdpbktleXMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IExpc3RFZGl0b3IgfSBmcm9tICcuL2xpc3QuZWRpdG9yJztcblxuZXhwb3J0IGNvbnN0IHdpdGhMaXN0ID0gPFQgZXh0ZW5kcyBFZGl0b3I+KGVkaXRvcjogVCk6IFQgPT4ge1xuICAgIGNvbnN0IHsgaW5zZXJ0QnJlYWssIGRlbGV0ZUJhY2t3YXJkLCBvbktleWRvd24sIGluc2VydERhdGEsIHNldEZyYWdtZW50RGF0YSwgcmVuZGVyRWxlbWVudCB9ID0gZWRpdG9yO1xuXG4gICAgY29uc3QgdmFsaWRMaUNoaWxkcmVuVHlwZXMgPSBnZXRQbHVnaW5PcHRpb25zPFdpdGhMaXN0T3B0aW9ucz4oZWRpdG9yLCBQbHVnaW5LZXlzLmxpc3QpPy52YWxpZExpQ2hpbGRyZW5UeXBlcyA/PyBbXTtcblxuICAgIGNvbnN0IHJlc2V0QmxvY2tUeXBlc0xpc3RSdWxlID0ge1xuICAgICAgICB0eXBlczogW0VsZW1lbnRLaW5kcy5saXN0SXRlbV0sXG4gICAgICAgIGRlZmF1bHRUeXBlOiBFbGVtZW50S2luZHMucGFyYWdyYXBoLFxuICAgICAgICBvblJlc2V0OiAoX2VkaXRvcjogRWRpdG9yKSA9PiB1bndyYXBMaXN0KF9lZGl0b3IpXG4gICAgfTtcblxuICAgIGVkaXRvci5pbnNlcnRCcmVhayA9ICgpID0+IHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IFRoZVF1ZXJpZXMuYW5jaG9yQmxvY2soZWRpdG9yKTtcblxuICAgICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgICAgIGluc2VydEJyZWFrKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpc1ZvaWQgPSBFZGl0b3IuaXNWb2lkKGVkaXRvciwgbm9kZSk7XG4gICAgICAgIGlmIChpc1ZvaWQpIHtcbiAgICAgICAgICAgIGluc2VydEJyZWFrKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGlzdEVudHJ5ID0gZ2V0TGlzdEl0ZW1FbnRyeShlZGl0b3IsIHt9KTtcbiAgICAgICAgaWYgKGxpc3RFbnRyeSkge1xuICAgICAgICAgICAgbGV0IG1vdmVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgeyBsaXN0LCBsaXN0SXRlbSB9ID0gbGlzdEVudHJ5O1xuICAgICAgICAgICAgY29uc3QgW2xpc3RJdGVtTm9kZSwgbGlzdEl0ZW1QYXRoXSA9IGxpc3RJdGVtO1xuICAgICAgICAgICAgY29uc3QgY3Vyc29yID0gZWRpdG9yLnNlbGVjdGlvbi5mb2N1cztcbiAgICAgICAgICAgIGNvbnN0IGlzU3RhcnQgPSBFZGl0b3IuaXNTdGFydChlZGl0b3IsIGN1cnNvciwgbGlzdEl0ZW1QYXRoKTtcblxuICAgICAgICAgICAgLy8gZGVwcmVjYXRlZFxuICAgICAgICAgICAgLy8g5aaC5p6c5pyJ5a2Q57qnXG4gICAgICAgICAgICBpZiAoaGFzTGlzdEluTGlzdEl0ZW0obGlzdEl0ZW1Ob2RlKSkge1xuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIElmIHNlbGVjdGlvbiBpcyBhdCB0aGUgZW5kIG9mIGxpLFxuICAgICAgICAgICAgICAgICAqIGluc2VydCBiZWxvdyBsaSB3aGVyZSBjaGlsZHJlbiB3aWxsIGJlIG1vdmVkLlxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGlmIChFZGl0b3IuaXNFbmQoZWRpdG9yLCBjdXJzb3IsIGxpc3RJdGVtUGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRyYW5zZm9ybXMuaW5zZXJ0Tm9kZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogRWxlbWVudEtpbmRzLmxpc3RJdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbeyB0eXBlOiBFbGVtZW50S2luZHMucGFyYWdyYXBoLCBjaGlsZHJlbjogW3sgdGV4dDogJycgfV0gfV1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGF0OiBQYXRoLm5leHQobGlzdEl0ZW1QYXRoKSwgc2VsZWN0OiB0cnVlIH1cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiDlpoLmnpzpgInljLrmmK/lnKhsaXN0SXRlbeeahOW8gOWktO+8jOWImeWcqGxpc3RJdGVt5LiK5pa55o+S5YWlXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgaWYgKGlzU3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRyYW5zZm9ybXMuaW5zZXJ0Tm9kZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogRWxlbWVudEtpbmRzLmxpc3RJdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbeyB0eXBlOiBFbGVtZW50S2luZHMucGFyYWdyYXBoLCBjaGlsZHJlbjogW3sgdGV4dDogJycgfV0gfV1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGF0OiBsaXN0SXRlbVBhdGggfVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8g5aaC5p6c6YCJ5oup55qEbGlzdEl0ZW3kuLrnqbrliJnlsIblhbblkJHkuIrnp7vliqhcbiAgICAgICAgICAgIGlmIChpc1N0YXJ0ICYmIFRoZVF1ZXJpZXMuaXNCbG9ja0Fib3ZlRW1wdHkoZWRpdG9yKSkge1xuICAgICAgICAgICAgICAgIG1vdmVkID0gbW92ZUxpc3RJdGVtVXAoZWRpdG9yLCB7IGxpc3QsIGxpc3RJdGVtIH0pO1xuICAgICAgICAgICAgICAgIGlmIChtb3ZlZCkgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBkaWRSZXNldCA9IFRoZVRyYW5zZm9ybXMub25LZXlEb3duUmVzZXRCbG9ja1R5cGUoe1xuICAgICAgICAgICAgICAgIHJ1bGVzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnJlc2V0QmxvY2tUeXBlc0xpc3RSdWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlZGljYXRlOiAoKSA9PiAhbW92ZWQgJiYgaXNTdGFydCAmJiBUaGVRdWVyaWVzLmlzQmxvY2tBYm92ZUVtcHR5KGVkaXRvcilcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pKG51bGwsIGVkaXRvcik7XG4gICAgICAgICAgICBpZiAoZGlkUmVzZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQWRkIGEgbmV3IGxpc3QgaXRlbSBpZiBzZWxlY3Rpb24gaXMgaW4gYSBMSVNUX0lURU0gPiBwLnR5cGUuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmICghbW92ZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnNlcnRlZCA9IGluc2VydExpc3RJdGVtKGVkaXRvcik7XG4gICAgICAgICAgICAgICAgaWYgKGluc2VydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpbnNlcnRCcmVhaygpO1xuICAgIH07XG5cbiAgICBlZGl0b3Iuc2V0RnJhZ21lbnREYXRhID0gdW5pdCA9PiB7XG4gICAgICAgIGNvbnN0IHsgc2VsZWN0aW9uIH0gPSBlZGl0b3I7XG4gICAgICAgIGNvbnN0IFtzdGFydF0gPSBFZGl0b3IuZWRnZXMoZWRpdG9yLCBzZWxlY3Rpb24pO1xuICAgICAgICBpZiAoaXNJbkxpc3QoZWRpdG9yLCBzdGFydCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZyYWdtZW50RGF0YSA9IGVkaXRvci5nZXRGcmFnbWVudCgpO1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnRFbGVtZW50ID0gZnJhZ21lbnREYXRhWzBdIGFzIEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoZ2V0TGlzdFR5cGVzKCkuaW5jbHVkZXMoZnJhZ21lbnRFbGVtZW50LnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnROb2RlcyA9IGdldFN0YXJ0TGlzdEl0ZW0oW2ZyYWdtZW50RWxlbWVudC5jaGlsZHJlblswXV0gYXMgRWxlbWVudFtdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHN0YXJ0Tm9kZXMuY29uY2F0KChmcmFnbWVudEVsZW1lbnQuY2hpbGRyZW4gYXMgRWxlbWVudFtdKS5zbGljZSgxKSk7XG4gICAgICAgICAgICAgICAgbGV0IGZyYWdtZW50Tm9kZXMgPSBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmZyYWdtZW50RWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdIGFzIE5vZGVbXTtcbiAgICAgICAgICAgICAgICBpZiAoaXNTZWxlY3Rpb25JblNhbWVMaXN0SXRlbShlZGl0b3IpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIOS7heS7heWkjeWItuWIl+ihqOS4reeahOWGheWuuVxuICAgICAgICAgICAgICAgICAgICBmcmFnbWVudE5vZGVzID0gY2hpbGRyZW5bMF0uY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGZyYWdtZW50ID0gZnJhZ21lbnROb2Rlcy5jb25jYXQoZnJhZ21lbnREYXRhLnNsaWNlKDEpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkb21SYW5nZSA9IEFuZ3VsYXJFZGl0b3IudG9ET01SYW5nZShlZGl0b3IsIHNlbGVjdGlvbik7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGVudHMgPSBkb21SYW5nZS5jbG9uZUNvbnRlbnRzKCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nT2JqID0gSlNPTi5zdHJpbmdpZnkoZnJhZ21lbnQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuY29kZWQgPSB3aW5kb3cuYnRvYShlbmNvZGVVUklDb21wb25lbnQoc3RyaW5nT2JqKSk7XG4gICAgICAgICAgICAgICAgdW5pdC5zZXREYXRhKGBhcHBsaWNhdGlvbi8ke0NMSVBCT0FSRF9GT1JNQVRfS0VZfWAsIGVuY29kZWQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIGRpdi5hcHBlbmRDaGlsZChjb250ZW50cyk7XG4gICAgICAgICAgICAgICAgZGl2LnNldEF0dHJpYnV0ZSgnaGlkZGVuJywgJ3RydWUnKTtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdik7XG4gICAgICAgICAgICAgICAgdW5pdC5zZXREYXRhKCd0ZXh0L2h0bWwnLCBkaXYuaW5uZXJIVE1MKTtcbiAgICAgICAgICAgICAgICB1bml0LnNldERhdGEoJ3RleHQvcGxhaW4nLCBnZXRQbGFpblRleHQoZGl2KSk7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChkaXYpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzZXRGcmFnbWVudERhdGEodW5pdCk7XG4gICAgfTtcblxuICAgIGVkaXRvci5kZWxldGVCYWNrd2FyZCA9IHVuaXQgPT4ge1xuICAgICAgICBjb25zdCByZXMgPSBnZXRMaXN0SXRlbUVudHJ5KGVkaXRvciwge30pO1xuXG4gICAgICAgIGlmIChyZXMgJiYgaXNTZWxlY3Rpb25BdExpc3RJdGVtU3RhcnQoZWRpdG9yKSkge1xuICAgICAgICAgICAgY29uc3QgeyBsaXN0LCBsaXN0SXRlbSB9ID0gcmVzO1xuICAgICAgICAgICAgY29uc3QgWywgbGlzdFBhdGhdID0gbGlzdDtcbiAgICAgICAgICAgIGNvbnN0IFtsaXN0SXRlbU5vZGUsIGxpc3RJdGVtUGF0aF0gPSBsaXN0SXRlbTtcblxuICAgICAgICAgICAgY29uc3QgcHJldmlvdXNMaXN0SXRlbVBhdGggPSBUaGVRdWVyaWVzLmdldFByZXZpb3VzUGF0aChsaXN0SXRlbVBhdGgpO1xuXG4gICAgICAgICAgICBpZiAocHJldmlvdXNMaXN0SXRlbVBhdGgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBiZWZvcmVQb2ludCA9IEVkaXRvci5iZWZvcmUoZWRpdG9yLCBsaXN0SXRlbVBhdGgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudFBhdGggPSBQYXRoLnBhcmVudChiZWZvcmVQb2ludC5wYXRoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gTm9kZS5nZXQoZWRpdG9yLCBwYXJlbnRQYXRoKTtcbiAgICAgICAgICAgICAgICBpZiAoRWRpdG9yLmlzVm9pZChlZGl0b3IsIHBhcmVudE5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIEVkaXRvci53aXRob3V0Tm9ybWFsaXppbmcoZWRpdG9yLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBUaGVUcmFuc2Zvcm1zLnVud3JhcE5vZGVzQnlUeXBlKGVkaXRvciwgW0VsZW1lbnRLaW5kcy5idWxsZXRlZExpc3QsIEVsZW1lbnRLaW5kcy5udW1iZXJlZExpc3RdLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXQ6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgVGhlVHJhbnNmb3Jtcy51bndyYXBOb2Rlc0J5VHlwZShlZGl0b3IsIEVsZW1lbnRLaW5kcy5saXN0SXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocHJldmlvdXNMaXN0SXRlbVBhdGggJiYgaGFzU3RhYmxlTGlzdEluTGlzdEl0ZW0obGlzdEl0ZW1Ob2RlKSkge1xuICAgICAgICAgICAgICAgIEVkaXRvci53aXRob3V0Tm9ybWFsaXppbmcoZWRpdG9yLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZUJhY2t3YXJkKHVuaXQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBbcHJldmlvdXNMaXN0SXRlbU5vZGVdID0gRWRpdG9yLm5vZGUoZWRpdG9yLCBwcmV2aW91c0xpc3RJdGVtUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIG1vdmVMaXN0SXRlbVN1Ymxpc3RJdGVtc1RvTGlzdEl0ZW1TdWJsaXN0KFxuICAgICAgICAgICAgICAgICAgICAgICAgZWRpdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21MaXN0SXRlbTogbGlzdEl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9MaXN0SXRlbTogW3ByZXZpb3VzTGlzdEl0ZW1Ob2RlIGFzIEFuY2VzdG9yLCBwcmV2aW91c0xpc3RJdGVtUGF0aF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge31cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIG1vdmUgbGlzdEl0ZW0gY2hpbGRyZW4gdG8gYmVmb3JlIGxpc3RJdGVtXG4gICAgICAgICAgICBpZiAobGlzdEl0ZW1Ob2RlLmNoaWxkcmVuLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICBFZGl0b3Iud2l0aG91dE5vcm1hbGl6aW5nKGVkaXRvciwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBiZWZvcmVQYXRoUmVmID0gRWRpdG9yLnBhdGhSZWYoZWRpdG9yLCBsaXN0SXRlbVBhdGgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBiZWZvcmVQb2ludCA9IEVkaXRvci5iZWZvcmUoZWRpdG9yLCBsaXN0SXRlbVBhdGgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydFBvaW50ID0gRWRpdG9yLnN0YXJ0KGVkaXRvciwgbGlzdEl0ZW1QYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kUG9pbnQgPSBFZGl0b3IuZW5kKGVkaXRvciwgbGlzdEl0ZW1QYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNJbkZpcnN0Q2hpbGQgPSAhaXNMaXN0TmVzdGVkKGVkaXRvciwgbGlzdFBhdGgpICYmIFRoZVF1ZXJpZXMuaXNGaXJzdENoaWxkKGxpc3RJdGVtUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvID0gaXNJbkZpcnN0Q2hpbGQgPyBsaXN0UGF0aCA6IFBhdGgubmV4dChQYXRoLnBhcmVudChiZWZvcmVQb2ludC5wYXRoKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5tb3ZlTm9kZXMoZWRpdG9yLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdDogRWRpdG9yLnJhbmdlKGVkaXRvciwgc3RhcnRQb2ludCwgZW5kUG9pbnQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdG8sXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaDogbm9kZSA9PiBsaXN0SXRlbU5vZGUuY2hpbGRyZW4uaW5jbHVkZXMobm9kZSBhcyBhbnkpXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLmRlbGV0ZShlZGl0b3IsIHsgYXQ6IGJlZm9yZVBhdGhSZWYudW5yZWYoKSB9KTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzSW5GaXJzdENoaWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVCYWNrd2FyZCh1bml0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZGVwcmVjYXRlZFxuICAgICAgICAgICAgaWYgKCFpc0xpc3ROZXN0ZWQoZWRpdG9yLCBsaXN0UGF0aCkgJiYgVGhlUXVlcmllcy5pc0ZpcnN0Q2hpbGQobGlzdEl0ZW1QYXRoKSkge1xuICAgICAgICAgICAgICAgIHVud3JhcExpc3QoZWRpdG9yKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBkZWxldGVCYWNrd2FyZCh1bml0KTtcbiAgICB9O1xuXG4gICAgZWRpdG9yLmluc2VydERhdGEgPSAoZGF0YTogRGF0YVRyYW5zZmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHRleHQgPSBkYXRhLmdldERhdGEoJ3RleHQvcGxhaW4nKTtcbiAgICAgICAgY29uc3QgZnJhZ21lbnQgPSBleHRyYWN0RnJhZ21lbnQoZGF0YSk7XG4gICAgICAgIGNvbnN0IGFib3ZlRW50cnkgPSBFZGl0b3IuYWJvdmUoZWRpdG9yLCB7XG4gICAgICAgICAgICBtYXRjaDogbiA9PiBFZGl0b3IuaXNCbG9jayhlZGl0b3IsIG4pICYmIG4udHlwZSA9PT0gRWxlbWVudEtpbmRzLmxpc3RJdGVtXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZnJhZ21lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGdldExpc3RJdGVtRW50cnkoZWRpdG9yLCB7fSk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZnJhZ21lbnQubGVuZ3RoID09PSAxICYmXG4gICAgICAgICAgICAgICAgaXNMaXN0KGZyYWdtZW50WzBdIGFzIEVsZW1lbnQpICYmXG4gICAgICAgICAgICAgICAgYWJvdmVFbnRyeSAmJlxuICAgICAgICAgICAgICAgICFpc1NpbmdsZUxpc3RJdGVtKGZyYWdtZW50WzBdKSAmJlxuICAgICAgICAgICAgICAgIGhhc1N0YWJsZUxpc3RJdGVtKHJlcy5saXN0SXRlbVswXSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGluc2VydExpc3REYXRhKGVkaXRvciwgeyBmcm9tTGlzdDogZnJhZ21lbnRbMF0gYXMgRWxlbWVudCwgdG9MaXN0SXRlbUVudHJ5OiBhYm92ZUVudHJ5IH0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGluc2VydERhdGEoZGF0YSk7XG4gICAgfTtcblxuICAgIGVkaXRvci5vbktleWRvd24gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgaXNDb250aW51ZSA9ICFvbktleURvd25MaXN0KGV2ZW50LCBlZGl0b3IpO1xuICAgICAgICBpZiAoaXNDb250aW51ZSkge1xuICAgICAgICAgICAgb25LZXlkb3duKGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBlZGl0b3Iubm9ybWFsaXplTm9kZSA9IGdldExpc3ROb3JtYWxpemVyKGVkaXRvciwgeyB2YWxpZExpQ2hpbGRyZW5UeXBlczogdmFsaWRMaUNoaWxkcmVuVHlwZXMgfSk7XG5cbiAgICBlZGl0b3IucmVuZGVyRWxlbWVudCA9IChlbGVtZW50OiBFbGVtZW50KSA9PiB7XG4gICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09IEVsZW1lbnRLaW5kcy5udW1iZXJlZExpc3QpIHtcbiAgICAgICAgICAgIHJldHVybiBUaGVOdW1iZXJlZExpc3RDb21wb25lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gRWxlbWVudEtpbmRzLmJ1bGxldGVkTGlzdCkge1xuICAgICAgICAgICAgcmV0dXJuIFRoZUJ1bGxldGVkTGlzdENvbXBvbmVudDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWxlbWVudC50eXBlID09PSBFbGVtZW50S2luZHMubGlzdEl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiBUaGVMaXN0SXRlbUNvbXBvbmVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVuZGVyRWxlbWVudChlbGVtZW50KTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGVkaXRvcjtcbn07XG5cbmNvbnN0IGxpc3RPcHRpb25zID0ge1xuICAgIHZhbGlkTGlDaGlsZHJlblR5cGVzOiBbRWxlbWVudEtpbmRzLmltYWdlXSxcbiAgICBhbGxvd1BhcmVudFR5cGVzOiBbRWxlbWVudEtpbmRzLmxpc3RJdGVtLCBFbGVtZW50S2luZHMudGFibGVDZWxsLCBFbGVtZW50S2luZHMuYmxvY2txdW90ZV1cbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVMaXN0UGx1Z2luID0gY3JlYXRlUGx1Z2luRmFjdG9yeTxXaXRoTGlzdE9wdGlvbnM+KHtcbiAgICBrZXk6IFBsdWdpbktleXMubGlzdCxcbiAgICB3aXRoT3ZlcnJpZGVzOiB3aXRoTGlzdCxcbiAgICBwbHVnaW5zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogUGx1Z2luS2V5cy5udW1iZXJlZExpc3QsXG4gICAgICAgICAgICBvcHRpb25zOiBsaXN0T3B0aW9uc1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFBsdWdpbktleXMuYnVsbGV0ZWRMaXN0LFxuICAgICAgICAgICAgb3B0aW9uczogbGlzdE9wdGlvbnNcbiAgICAgICAgfVxuICAgIF0sXG4gICAgbmVzdGVkU3RydWN0dXJlQnlLZXk6IHtcbiAgICAgICAgW0VsZW1lbnRLaW5kcy5idWxsZXRlZExpc3RdOiBFbGVtZW50S2luZHMubGlzdEl0ZW0sXG4gICAgICAgIFtFbGVtZW50S2luZHMubnVtYmVyZWRMaXN0XTogRWxlbWVudEtpbmRzLmxpc3RJdGVtXG4gICAgfSxcbiAgICB0b29sYmFySXRlbXM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBFbGVtZW50S2luZHMubnVtYmVyZWRMaXN0LFxuICAgICAgICAgICAgaWNvbjogJ2xpc3Qtb3JkZXJlZCcsXG4gICAgICAgICAgICBuYW1lOiAn5pyJ5bqP5YiX6KGoJyxcbiAgICAgICAgICAgIGV4ZWN1dGU6IGVkaXRvciA9PiBMaXN0RWRpdG9yLnRvZ2dsZUxpc3QoZWRpdG9yLCBFbGVtZW50S2luZHMubnVtYmVyZWRMaXN0KSxcbiAgICAgICAgICAgIGFjdGl2ZTogZWRpdG9yID0+IExpc3RFZGl0b3IuaXNBY3RpdmUoZWRpdG9yLCBFbGVtZW50S2luZHMubnVtYmVyZWRMaXN0KVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IEVsZW1lbnRLaW5kcy5idWxsZXRlZExpc3QsXG4gICAgICAgICAgICBpY29uOiAnbGlzdC1idWxsZXQnLFxuICAgICAgICAgICAgbmFtZTogJ+aXoOW6j+WIl+ihqCcsXG4gICAgICAgICAgICBleGVjdXRlOiBlZGl0b3IgPT4gTGlzdEVkaXRvci50b2dnbGVMaXN0KGVkaXRvciwgRWxlbWVudEtpbmRzLmJ1bGxldGVkTGlzdCksXG4gICAgICAgICAgICBhY3RpdmU6IGVkaXRvciA9PiBMaXN0RWRpdG9yLmlzQWN0aXZlKGVkaXRvciwgRWxlbWVudEtpbmRzLmJ1bGxldGVkTGlzdClcbiAgICAgICAgfVxuICAgIF0sXG4gICAgb3B0aW9uczogbGlzdE9wdGlvbnNcbn0pO1xuIl19
|
|
@@ -1,39 +1,39 @@
|
|
|
1
|
-
import { Transforms, Element } from 'slate';
|
|
2
|
-
import { ElementKinds } from '../../../constants';
|
|
3
|
-
import { match } from '../../../utils/match';
|
|
4
|
-
import { getListTypes } from '../queries/get-list-types';
|
|
5
|
-
import { normalizeListItem } from './normalize-list-item';
|
|
6
|
-
import { normalizeNo } from './normalize-no';
|
|
7
|
-
import { isList } from '../queries/is-list';
|
|
8
|
-
import { TheHistoryEditor } from '../../common/history.plugin';
|
|
9
|
-
/**
|
|
10
|
-
* Normalize list node to force the ul>li>p+ul structure.
|
|
11
|
-
*/
|
|
12
|
-
export const getListNormalizer = (editor, { validLiChildrenTypes }) => {
|
|
13
|
-
const { normalizeNode } = editor;
|
|
14
|
-
return ([node, path]) => {
|
|
15
|
-
// 不是选区, 执行续号检测操作
|
|
16
|
-
if (isList(node) && !TheHistoryEditor.isUndoing(editor)) {
|
|
17
|
-
const moved = normalizeNo(editor, [node, path]);
|
|
18
|
-
if (moved) {
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
if (match(node, { type: getListTypes() })) {
|
|
23
|
-
if (Element.isElement(node) && !node.children.length) {
|
|
24
|
-
return Transforms.removeNodes(editor, { at: path });
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
// normalize list item
|
|
28
|
-
// 1. list-item at least one child
|
|
29
|
-
// 2. list-item first child is not list
|
|
30
|
-
if (Element.isElement(node) && node.type === ElementKinds.listItem) {
|
|
31
|
-
if (normalizeListItem(editor, { nodeEntry: [node, path] })) {
|
|
32
|
-
// Tree changed - kick off another normalization
|
|
33
|
-
return;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
normalizeNode([node, path]);
|
|
37
|
-
};
|
|
38
|
-
};
|
|
39
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
import { Transforms, Element } from 'slate';
|
|
2
|
+
import { ElementKinds } from '../../../constants';
|
|
3
|
+
import { match } from '../../../utils/match';
|
|
4
|
+
import { getListTypes } from '../queries/get-list-types';
|
|
5
|
+
import { normalizeListItem } from './normalize-list-item';
|
|
6
|
+
import { normalizeNo } from './normalize-no';
|
|
7
|
+
import { isList } from '../queries/is-list';
|
|
8
|
+
import { TheHistoryEditor } from '../../common/history.plugin';
|
|
9
|
+
/**
|
|
10
|
+
* Normalize list node to force the ul>li>p+ul structure.
|
|
11
|
+
*/
|
|
12
|
+
export const getListNormalizer = (editor, { validLiChildrenTypes }) => {
|
|
13
|
+
const { normalizeNode } = editor;
|
|
14
|
+
return ([node, path]) => {
|
|
15
|
+
// 不是选区, 执行续号检测操作
|
|
16
|
+
if (isList(node) && !TheHistoryEditor.isUndoing(editor)) {
|
|
17
|
+
const moved = normalizeNo(editor, [node, path]);
|
|
18
|
+
if (moved) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
if (match(node, { type: getListTypes() })) {
|
|
23
|
+
if (Element.isElement(node) && !node.children.length) {
|
|
24
|
+
return Transforms.removeNodes(editor, { at: path });
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
// normalize list item
|
|
28
|
+
// 1. list-item at least one child
|
|
29
|
+
// 2. list-item first child is not list
|
|
30
|
+
if (Element.isElement(node) && node.type === ElementKinds.listItem) {
|
|
31
|
+
if (normalizeListItem(editor, { nodeEntry: [node, path] })) {
|
|
32
|
+
// Tree changed - kick off another normalization
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
normalizeNode([node, path]);
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWxpc3Qtbm9ybWFsaXplci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NyYy9wbHVnaW5zL2xpc3Qvbm9ybWFsaXplcnMvZ2V0LWxpc3Qtbm9ybWFsaXplci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlDLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUUvRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsTUFBYyxFQUFFLEVBQUUsb0JBQW9CLEVBQXlCLEVBQUUsRUFBRTtJQUNqRyxNQUFNLEVBQUUsYUFBYSxFQUFFLEdBQUcsTUFBTSxDQUFDO0lBRWpDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQVksRUFBRSxFQUFFO1FBQy9CLGlCQUFpQjtRQUNqQixJQUFJLE1BQU0sQ0FBQyxJQUFlLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNoRSxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDaEQsSUFBSSxLQUFLLEVBQUU7Z0JBQ1AsT0FBTzthQUNWO1NBQ0o7UUFFRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1lBQ3ZDLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFFLElBQUksQ0FBQyxRQUF5QixDQUFDLE1BQU0sRUFBRTtnQkFDcEUsT0FBTyxVQUFVLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2FBQ3ZEO1NBQ0o7UUFFRCxzQkFBc0I7UUFDdEIsa0NBQWtDO1FBQ2xDLHVDQUF1QztRQUN2QyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxZQUFZLENBQUMsUUFBUSxFQUFFO1lBQ2hFLElBQUksaUJBQWlCLENBQUMsTUFBTSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFDeEQsZ0RBQWdEO2dCQUNoRCxPQUFPO2FBQ1Y7U0FDSjtRQUVELGFBQWEsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLENBQUMsQ0FBQztBQUNOLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc2NlbmRhbnQsIEVkaXRvciwgTm9kZUVudHJ5LCBUcmFuc2Zvcm1zLCBFbGVtZW50IH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IHsgRWxlbWVudEtpbmRzIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IG1hdGNoIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvbWF0Y2gnO1xuaW1wb3J0IHsgZ2V0TGlzdFR5cGVzIH0gZnJvbSAnLi4vcXVlcmllcy9nZXQtbGlzdC10eXBlcyc7XG5pbXBvcnQgeyBub3JtYWxpemVMaXN0SXRlbSB9IGZyb20gJy4vbm9ybWFsaXplLWxpc3QtaXRlbSc7XG5pbXBvcnQgeyBMaXN0Tm9ybWFsaXplck9wdGlvbnMgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBub3JtYWxpemVObyB9IGZyb20gJy4vbm9ybWFsaXplLW5vJztcbmltcG9ydCB7IGlzTGlzdCB9IGZyb20gJy4uL3F1ZXJpZXMvaXMtbGlzdCc7XG5pbXBvcnQgeyBUaGVIaXN0b3J5RWRpdG9yIH0gZnJvbSAnLi4vLi4vY29tbW9uL2hpc3RvcnkucGx1Z2luJztcblxuLyoqXG4gKiBOb3JtYWxpemUgbGlzdCBub2RlIHRvIGZvcmNlIHRoZSB1bD5saT5wK3VsIHN0cnVjdHVyZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldExpc3ROb3JtYWxpemVyID0gKGVkaXRvcjogRWRpdG9yLCB7IHZhbGlkTGlDaGlsZHJlblR5cGVzIH06IExpc3ROb3JtYWxpemVyT3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IHsgbm9ybWFsaXplTm9kZSB9ID0gZWRpdG9yO1xuXG4gICAgcmV0dXJuIChbbm9kZSwgcGF0aF06IE5vZGVFbnRyeSkgPT4ge1xuICAgICAgICAvLyDkuI3mmK/pgInljLosIOaJp+ihjOe7reWPt+ajgOa1i+aTjeS9nFxuICAgICAgICBpZiAoaXNMaXN0KG5vZGUgYXMgRWxlbWVudCkgJiYgIVRoZUhpc3RvcnlFZGl0b3IuaXNVbmRvaW5nKGVkaXRvcikpIHtcbiAgICAgICAgICAgIGNvbnN0IG1vdmVkID0gbm9ybWFsaXplTm8oZWRpdG9yLCBbbm9kZSwgcGF0aF0pO1xuICAgICAgICAgICAgaWYgKG1vdmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1hdGNoKG5vZGUsIHsgdHlwZTogZ2V0TGlzdFR5cGVzKCkgfSkpIHtcbiAgICAgICAgICAgIGlmIChFbGVtZW50LmlzRWxlbWVudChub2RlKSAmJiAhKG5vZGUuY2hpbGRyZW4gYXMgRGVzY2VuZGFudFtdKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gVHJhbnNmb3Jtcy5yZW1vdmVOb2RlcyhlZGl0b3IsIHsgYXQ6IHBhdGggfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBub3JtYWxpemUgbGlzdCBpdGVtXG4gICAgICAgIC8vIDEuIGxpc3QtaXRlbSBhdCBsZWFzdCBvbmUgY2hpbGRcbiAgICAgICAgLy8gMi4gbGlzdC1pdGVtIGZpcnN0IGNoaWxkIGlzIG5vdCBsaXN0XG4gICAgICAgIGlmIChFbGVtZW50LmlzRWxlbWVudChub2RlKSAmJiBub2RlLnR5cGUgPT09IEVsZW1lbnRLaW5kcy5saXN0SXRlbSkge1xuICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZUxpc3RJdGVtKGVkaXRvciwgeyBub2RlRW50cnk6IFtub2RlLCBwYXRoXSB9KSkge1xuICAgICAgICAgICAgICAgIC8vIFRyZWUgY2hhbmdlZCAtIGtpY2sgb2ZmIGFub3RoZXIgbm9ybWFsaXphdGlvblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG5vcm1hbGl6ZU5vZGUoW25vZGUsIHBhdGhdKTtcbiAgICB9O1xufTtcbiJdfQ==
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Element } from 'slate';
|
|
2
|
+
import { ElementKinds } from '../../../constants';
|
|
3
|
+
import { insertParagraph } from '../../../transforms/insert-paragraph';
|
|
4
|
+
export const normalizeListItem = (editor, { nodeEntry }) => {
|
|
5
|
+
const [listItemNode, listItemPath] = nodeEntry;
|
|
6
|
+
const firstChildPath = listItemPath.concat([0]);
|
|
7
|
+
const firstChild = listItemNode.children?.[0];
|
|
8
|
+
if (!firstChild) {
|
|
9
|
+
insertParagraph(editor, firstChildPath);
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
12
|
+
// Ensure that all lists have a <p> tag as a first element
|
|
13
|
+
if (Element.isElement(firstChild) && (firstChild.type === ElementKinds.bulletedList || firstChild.type === ElementKinds.numberedList)) {
|
|
14
|
+
insertParagraph(editor, firstChildPath);
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsaXplLWxpc3QtaXRlbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NyYy9wbHVnaW5zL2xpc3Qvbm9ybWFsaXplcnMvbm9ybWFsaXplLWxpc3QtaXRlbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlDLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUUvRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRXZFLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsTUFBYyxFQUFFLEVBQUUsU0FBUyxFQUE2QyxFQUFFLEVBQUU7SUFDMUcsTUFBTSxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsR0FBRyxTQUFTLENBQUM7SUFDL0MsTUFBTSxjQUFjLEdBQVMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEQsTUFBTSxVQUFVLEdBQUksWUFBWSxDQUFDLFFBQW1CLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUUxRCxJQUFJLENBQUMsVUFBVSxFQUFFO1FBQ2IsZUFBZSxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FBQztRQUN4QyxPQUFPLElBQUksQ0FBQztLQUNmO0lBRUQsMERBQTBEO0lBQzFELElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUFDLFlBQVksSUFBSSxVQUFVLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQyxZQUFZLENBQUMsRUFBRTtRQUNuSSxlQUFlLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ3hDLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7QUFDTCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFZGl0b3IsIE5vZGUsIE5vZGVFbnRyeSwgUGF0aCwgRWxlbWVudCB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7IExpc3RJdGVtRWxlbWVudCB9IGZyb20gJy4uLy4uLy4uL2N1c3RvbS10eXBlcyc7XG5pbXBvcnQgeyBFbGVtZW50S2luZHMgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgaW5zZXJ0UGFyYWdyYXBoIH0gZnJvbSAnLi4vLi4vLi4vdHJhbnNmb3Jtcy9pbnNlcnQtcGFyYWdyYXBoJztcblxuZXhwb3J0IGNvbnN0IG5vcm1hbGl6ZUxpc3RJdGVtID0gKGVkaXRvcjogRWRpdG9yLCB7IG5vZGVFbnRyeSB9OiB7IG5vZGVFbnRyeTogTm9kZUVudHJ5PExpc3RJdGVtRWxlbWVudD4gfSkgPT4ge1xuICAgIGNvbnN0IFtsaXN0SXRlbU5vZGUsIGxpc3RJdGVtUGF0aF0gPSBub2RlRW50cnk7XG4gICAgY29uc3QgZmlyc3RDaGlsZFBhdGg6IFBhdGggPSBsaXN0SXRlbVBhdGguY29uY2F0KFswXSk7XG4gICAgY29uc3QgZmlyc3RDaGlsZCA9IChsaXN0SXRlbU5vZGUuY2hpbGRyZW4gYXMgTm9kZVtdKT8uWzBdO1xuXG4gICAgaWYgKCFmaXJzdENoaWxkKSB7XG4gICAgICAgIGluc2VydFBhcmFncmFwaChlZGl0b3IsIGZpcnN0Q2hpbGRQYXRoKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gRW5zdXJlIHRoYXQgYWxsIGxpc3RzIGhhdmUgYSA8cD4gdGFnIGFzIGEgZmlyc3QgZWxlbWVudFxuICAgIGlmIChFbGVtZW50LmlzRWxlbWVudChmaXJzdENoaWxkKSAmJiAoZmlyc3RDaGlsZC50eXBlID09PSBFbGVtZW50S2luZHMuYnVsbGV0ZWRMaXN0IHx8IGZpcnN0Q2hpbGQudHlwZSA9PT0gRWxlbWVudEtpbmRzLm51bWJlcmVkTGlzdCkpIHtcbiAgICAgICAgaW5zZXJ0UGFyYWdyYXBoKGVkaXRvciwgZmlyc3RDaGlsZFBhdGgpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59O1xuIl19
|
|
@@ -1,43 +1,43 @@
|
|
|
1
|
-
import { Editor, Transforms, Path, Element } from 'slate';
|
|
2
|
-
import * as TheQueries from '../../../queries';
|
|
3
|
-
import * as TheTransforms from '../../../transforms';
|
|
4
|
-
// 列表续号
|
|
5
|
-
export const normalizeNo = (editor, nodeEntry) => {
|
|
6
|
-
const [listNode, listPath] = nodeEntry;
|
|
7
|
-
let moved = false;
|
|
8
|
-
Editor.withoutNormalizing(editor, () => {
|
|
9
|
-
/**
|
|
10
|
-
* 获取nextList判断是否为同类型list
|
|
11
|
-
* 如果为同类型list,则把nextList children移动到当前list的尾部, 并删除nextList
|
|
12
|
-
*/
|
|
13
|
-
const nextPath = Path.next(listPath);
|
|
14
|
-
const nextNode = TheQueries.getNode(editor, nextPath);
|
|
15
|
-
if (nextNode && Element.isElement(nextNode) && Element.isElement(listNode) && nextNode.type === listNode.type) {
|
|
16
|
-
TheTransforms.moveChildren(editor, {
|
|
17
|
-
at: [nextNode, nextPath],
|
|
18
|
-
to: listPath.concat(listNode.children.length)
|
|
19
|
-
});
|
|
20
|
-
Transforms.removeNodes(editor, { at: nextPath });
|
|
21
|
-
moved = true;
|
|
22
|
-
}
|
|
23
|
-
if (listPath[listPath.length - 1] !== 0) {
|
|
24
|
-
/**
|
|
25
|
-
* 获取prevList判断是否为同类型list
|
|
26
|
-
* 如果为同类型list,则把当前list children移动到prevList的尾部, 并删除当前List
|
|
27
|
-
*/
|
|
28
|
-
const currentListNode = TheQueries.getNode(editor, listPath);
|
|
29
|
-
const prevPath = Path.previous(listPath);
|
|
30
|
-
const prevNode = TheQueries.getNode(editor, prevPath);
|
|
31
|
-
if (prevNode && Element.isElement(prevNode) && Element.isElement(currentListNode) && prevNode.type === currentListNode.type) {
|
|
32
|
-
TheTransforms.moveChildren(editor, {
|
|
33
|
-
at: [currentListNode, listPath],
|
|
34
|
-
to: prevPath.concat(prevNode.children.length)
|
|
35
|
-
});
|
|
36
|
-
Transforms.removeNodes(editor, { at: listPath });
|
|
37
|
-
moved = true;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
});
|
|
41
|
-
return moved;
|
|
42
|
-
};
|
|
1
|
+
import { Editor, Transforms, Path, Element } from 'slate';
|
|
2
|
+
import * as TheQueries from '../../../queries';
|
|
3
|
+
import * as TheTransforms from '../../../transforms';
|
|
4
|
+
// 列表续号
|
|
5
|
+
export const normalizeNo = (editor, nodeEntry) => {
|
|
6
|
+
const [listNode, listPath] = nodeEntry;
|
|
7
|
+
let moved = false;
|
|
8
|
+
Editor.withoutNormalizing(editor, () => {
|
|
9
|
+
/**
|
|
10
|
+
* 获取nextList判断是否为同类型list
|
|
11
|
+
* 如果为同类型list,则把nextList children移动到当前list的尾部, 并删除nextList
|
|
12
|
+
*/
|
|
13
|
+
const nextPath = Path.next(listPath);
|
|
14
|
+
const nextNode = TheQueries.getNode(editor, nextPath);
|
|
15
|
+
if (nextNode && Element.isElement(nextNode) && Element.isElement(listNode) && nextNode.type === listNode.type) {
|
|
16
|
+
TheTransforms.moveChildren(editor, {
|
|
17
|
+
at: [nextNode, nextPath],
|
|
18
|
+
to: listPath.concat(listNode.children.length)
|
|
19
|
+
});
|
|
20
|
+
Transforms.removeNodes(editor, { at: nextPath });
|
|
21
|
+
moved = true;
|
|
22
|
+
}
|
|
23
|
+
if (listPath[listPath.length - 1] !== 0) {
|
|
24
|
+
/**
|
|
25
|
+
* 获取prevList判断是否为同类型list
|
|
26
|
+
* 如果为同类型list,则把当前list children移动到prevList的尾部, 并删除当前List
|
|
27
|
+
*/
|
|
28
|
+
const currentListNode = TheQueries.getNode(editor, listPath);
|
|
29
|
+
const prevPath = Path.previous(listPath);
|
|
30
|
+
const prevNode = TheQueries.getNode(editor, prevPath);
|
|
31
|
+
if (prevNode && Element.isElement(prevNode) && Element.isElement(currentListNode) && prevNode.type === currentListNode.type) {
|
|
32
|
+
TheTransforms.moveChildren(editor, {
|
|
33
|
+
at: [currentListNode, listPath],
|
|
34
|
+
to: prevPath.concat(prevNode.children.length)
|
|
35
|
+
});
|
|
36
|
+
Transforms.removeNodes(editor, { at: listPath });
|
|
37
|
+
moved = true;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
return moved;
|
|
42
|
+
};
|
|
43
43
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsaXplLW5vLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL3BsdWdpbnMvbGlzdC9ub3JtYWxpemVycy9ub3JtYWxpemUtbm8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFtQixPQUFPLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDM0UsT0FBTyxLQUFLLFVBQVUsTUFBTSxrQkFBa0IsQ0FBQztBQUMvQyxPQUFPLEtBQUssYUFBYSxNQUFNLHFCQUFxQixDQUFDO0FBRXJELE9BQU87QUFDUCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxNQUFjLEVBQUUsU0FBb0IsRUFBRSxFQUFFO0lBQ2hFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLEdBQUcsU0FBUyxDQUFDO0lBQ3ZDLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNsQixNQUFNLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRTtRQUNuQzs7O1dBR0c7UUFDSCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBUyxDQUFDO1FBQzlELElBQUksUUFBUSxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxJQUFJLEVBQUU7WUFDM0csYUFBYSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUU7Z0JBQy9CLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUM7Z0JBQ3hCLEVBQUUsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFFLFFBQVEsQ0FBQyxRQUFtQixDQUFDLE1BQU0sQ0FBQzthQUM1RCxDQUFDLENBQUM7WUFDSCxVQUFVLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ2pELEtBQUssR0FBRyxJQUFJLENBQUM7U0FDaEI7UUFFRCxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNyQzs7O2VBR0c7WUFDSCxNQUFNLGVBQWUsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztZQUM3RCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBUyxDQUFDO1lBQzlELElBQUksUUFBUSxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxJQUFJLEVBQUU7Z0JBQ3pILGFBQWEsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFO29CQUMvQixFQUFFLEVBQUUsQ0FBQyxlQUFlLEVBQUUsUUFBUSxDQUFDO29CQUMvQixFQUFFLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBRSxRQUFRLENBQUMsUUFBbUIsQ0FBQyxNQUFNLENBQUM7aUJBQzVELENBQUMsQ0FBQztnQkFDSCxVQUFVLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUNqRCxLQUFLLEdBQUcsSUFBSSxDQUFDO2FBQ2hCO1NBQ0o7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVkaXRvciwgVHJhbnNmb3JtcywgUGF0aCwgTm9kZSwgTm9kZUVudHJ5LCBFbGVtZW50IH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0ICogYXMgVGhlUXVlcmllcyBmcm9tICcuLi8uLi8uLi9xdWVyaWVzJztcbmltcG9ydCAqIGFzIFRoZVRyYW5zZm9ybXMgZnJvbSAnLi4vLi4vLi4vdHJhbnNmb3Jtcyc7XG5cbi8vIOWIl+ihqOe7reWPt1xuZXhwb3J0IGNvbnN0IG5vcm1hbGl6ZU5vID0gKGVkaXRvcjogRWRpdG9yLCBub2RlRW50cnk6IE5vZGVFbnRyeSkgPT4ge1xuICAgIGNvbnN0IFtsaXN0Tm9kZSwgbGlzdFBhdGhdID0gbm9kZUVudHJ5O1xuICAgIGxldCBtb3ZlZCA9IGZhbHNlO1xuICAgIEVkaXRvci53aXRob3V0Tm9ybWFsaXppbmcoZWRpdG9yLCAoKSA9PiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiDojrflj5ZuZXh0TGlzdOWIpOaWreaYr+WQpuS4uuWQjOexu+Wei2xpc3RcbiAgICAgICAgICog5aaC5p6c5Li65ZCM57G75Z6LbGlzdO+8jOWImeaKim5leHRMaXN0IGNoaWxkcmVu56e75Yqo5Yiw5b2T5YmNbGlzdOeahOWwvumDqCwg5bm25Yig6ZmkbmV4dExpc3RcbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IG5leHRQYXRoID0gUGF0aC5uZXh0KGxpc3RQYXRoKTtcbiAgICAgICAgY29uc3QgbmV4dE5vZGUgPSBUaGVRdWVyaWVzLmdldE5vZGUoZWRpdG9yLCBuZXh0UGF0aCkgYXMgTm9kZTtcbiAgICAgICAgaWYgKG5leHROb2RlICYmIEVsZW1lbnQuaXNFbGVtZW50KG5leHROb2RlKSAmJiBFbGVtZW50LmlzRWxlbWVudChsaXN0Tm9kZSkgJiYgbmV4dE5vZGUudHlwZSA9PT0gbGlzdE5vZGUudHlwZSkge1xuICAgICAgICAgICAgVGhlVHJhbnNmb3Jtcy5tb3ZlQ2hpbGRyZW4oZWRpdG9yLCB7XG4gICAgICAgICAgICAgICAgYXQ6IFtuZXh0Tm9kZSwgbmV4dFBhdGhdLFxuICAgICAgICAgICAgICAgIHRvOiBsaXN0UGF0aC5jb25jYXQoKGxpc3ROb2RlLmNoaWxkcmVuIGFzIE5vZGVbXSkubGVuZ3RoKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBUcmFuc2Zvcm1zLnJlbW92ZU5vZGVzKGVkaXRvciwgeyBhdDogbmV4dFBhdGggfSk7XG4gICAgICAgICAgICBtb3ZlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGlzdFBhdGhbbGlzdFBhdGgubGVuZ3RoIC0gMV0gIT09IDApIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICog6I635Y+WcHJldkxpc3TliKTmlq3mmK/lkKbkuLrlkIznsbvlnotsaXN0XG4gICAgICAgICAgICAgKiDlpoLmnpzkuLrlkIznsbvlnotsaXN077yM5YiZ5oqK5b2T5YmNbGlzdCBjaGlsZHJlbuenu+WKqOWIsHByZXZMaXN055qE5bC+6YOoLCDlubbliKDpmaTlvZPliY1MaXN0XG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRMaXN0Tm9kZSA9IFRoZVF1ZXJpZXMuZ2V0Tm9kZShlZGl0b3IsIGxpc3RQYXRoKTtcbiAgICAgICAgICAgIGNvbnN0IHByZXZQYXRoID0gUGF0aC5wcmV2aW91cyhsaXN0UGF0aCk7XG4gICAgICAgICAgICBjb25zdCBwcmV2Tm9kZSA9IFRoZVF1ZXJpZXMuZ2V0Tm9kZShlZGl0b3IsIHByZXZQYXRoKSBhcyBOb2RlO1xuICAgICAgICAgICAgaWYgKHByZXZOb2RlICYmIEVsZW1lbnQuaXNFbGVtZW50KHByZXZOb2RlKSAmJiBFbGVtZW50LmlzRWxlbWVudChjdXJyZW50TGlzdE5vZGUpICYmIHByZXZOb2RlLnR5cGUgPT09IGN1cnJlbnRMaXN0Tm9kZS50eXBlKSB7XG4gICAgICAgICAgICAgICAgVGhlVHJhbnNmb3Jtcy5tb3ZlQ2hpbGRyZW4oZWRpdG9yLCB7XG4gICAgICAgICAgICAgICAgICAgIGF0OiBbY3VycmVudExpc3ROb2RlLCBsaXN0UGF0aF0sXG4gICAgICAgICAgICAgICAgICAgIHRvOiBwcmV2UGF0aC5jb25jYXQoKHByZXZOb2RlLmNoaWxkcmVuIGFzIE5vZGVbXSkubGVuZ3RoKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMucmVtb3ZlTm9kZXMoZWRpdG9yLCB7IGF0OiBsaXN0UGF0aCB9KTtcbiAgICAgICAgICAgICAgICBtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gbW92ZWQ7XG59O1xuIl19
|
package/{esm2015/plugins/list/on-key-down-list.js → esm2020/plugins/list/on-key-down-list.mjs}
RENAMED
|
@@ -1,33 +1,33 @@
|
|
|
1
|
-
import { moveListItemUp } from './transforms/move-list-item-up';
|
|
2
|
-
import { moveListItemDown } from './transforms/move-list-item-down';
|
|
3
|
-
import { getListItemEntry } from './queries/get-list-item-entry';
|
|
4
|
-
import * as TheQueries from '../../queries';
|
|
5
|
-
export function onKeyDownList(e, editor) {
|
|
6
|
-
let moved = false;
|
|
7
|
-
if (e.key === 'Tab') {
|
|
8
|
-
const res = getListItemEntry(editor, {});
|
|
9
|
-
if (!res) {
|
|
10
|
-
return false;
|
|
11
|
-
}
|
|
12
|
-
const { list, listItem } = res;
|
|
13
|
-
const [, listItemPath] = listItem;
|
|
14
|
-
e.preventDefault();
|
|
15
|
-
// move up with shift+tab
|
|
16
|
-
const shiftTab = e.shiftKey;
|
|
17
|
-
if (shiftTab) {
|
|
18
|
-
moved = moveListItemUp(editor, { list, listItem });
|
|
19
|
-
if (moved) {
|
|
20
|
-
e.preventDefault();
|
|
21
|
-
return true;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
// move down with tab
|
|
25
|
-
const tab = !e.shiftKey;
|
|
26
|
-
if (tab && !TheQueries.isFirstChild(listItemPath)) {
|
|
27
|
-
moveListItemDown(editor, { list, listItem });
|
|
28
|
-
return true;
|
|
29
|
-
}
|
|
30
|
-
return false;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
1
|
+
import { moveListItemUp } from './transforms/move-list-item-up';
|
|
2
|
+
import { moveListItemDown } from './transforms/move-list-item-down';
|
|
3
|
+
import { getListItemEntry } from './queries/get-list-item-entry';
|
|
4
|
+
import * as TheQueries from '../../queries';
|
|
5
|
+
export function onKeyDownList(e, editor) {
|
|
6
|
+
let moved = false;
|
|
7
|
+
if (e.key === 'Tab') {
|
|
8
|
+
const res = getListItemEntry(editor, {});
|
|
9
|
+
if (!res) {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
const { list, listItem } = res;
|
|
13
|
+
const [, listItemPath] = listItem;
|
|
14
|
+
e.preventDefault();
|
|
15
|
+
// move up with shift+tab
|
|
16
|
+
const shiftTab = e.shiftKey;
|
|
17
|
+
if (shiftTab) {
|
|
18
|
+
moved = moveListItemUp(editor, { list, listItem });
|
|
19
|
+
if (moved) {
|
|
20
|
+
e.preventDefault();
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
// move down with tab
|
|
25
|
+
const tab = !e.shiftKey;
|
|
26
|
+
if (tab && !TheQueries.isFirstChild(listItemPath)) {
|
|
27
|
+
moveListItemDown(editor, { list, listItem });
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
33
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib24ta2V5LWRvd24tbGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3NyYy9wbHVnaW5zL2xpc3Qvb24ta2V5LWRvd24tbGlzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDaEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDcEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxLQUFLLFVBQVUsTUFBTSxlQUFlLENBQUM7QUFFNUMsTUFBTSxVQUFVLGFBQWEsQ0FBQyxDQUFnQixFQUFFLE1BQWM7SUFDMUQsSUFBSSxLQUFLLEdBQXdCLEtBQUssQ0FBQztJQUN2QyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssS0FBSyxFQUFFO1FBQ2pCLE1BQU0sR0FBRyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ04sT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFDRCxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxHQUFHLEdBQUcsQ0FBQztRQUMvQixNQUFNLENBQUMsRUFBRSxZQUFZLENBQUMsR0FBRyxRQUFRLENBQUM7UUFFbEMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRW5CLHlCQUF5QjtRQUN6QixNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO1FBQzVCLElBQUksUUFBUSxFQUFFO1lBQ1YsS0FBSyxHQUFHLGNBQWMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUNuRCxJQUFJLEtBQUssRUFBRTtnQkFDUCxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ25CLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7U0FDSjtRQUVELHFCQUFxQjtRQUNyQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFDeEIsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQy9DLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFDRCxPQUFPLEtBQUssQ0FBQztLQUNoQjtBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFZGl0b3IgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgeyBtb3ZlTGlzdEl0ZW1VcCB9IGZyb20gJy4vdHJhbnNmb3Jtcy9tb3ZlLWxpc3QtaXRlbS11cCc7XG5pbXBvcnQgeyBtb3ZlTGlzdEl0ZW1Eb3duIH0gZnJvbSAnLi90cmFuc2Zvcm1zL21vdmUtbGlzdC1pdGVtLWRvd24nO1xuaW1wb3J0IHsgZ2V0TGlzdEl0ZW1FbnRyeSB9IGZyb20gJy4vcXVlcmllcy9nZXQtbGlzdC1pdGVtLWVudHJ5JztcbmltcG9ydCAqIGFzIFRoZVF1ZXJpZXMgZnJvbSAnLi4vLi4vcXVlcmllcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBvbktleURvd25MaXN0KGU6IEtleWJvYXJkRXZlbnQsIGVkaXRvcjogRWRpdG9yKSB7XG4gICAgbGV0IG1vdmVkOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG4gICAgaWYgKGUua2V5ID09PSAnVGFiJykge1xuICAgICAgICBjb25zdCByZXMgPSBnZXRMaXN0SXRlbUVudHJ5KGVkaXRvciwge30pO1xuICAgICAgICBpZiAoIXJlcykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgbGlzdCwgbGlzdEl0ZW0gfSA9IHJlcztcbiAgICAgICAgY29uc3QgWywgbGlzdEl0ZW1QYXRoXSA9IGxpc3RJdGVtO1xuXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAvLyBtb3ZlIHVwIHdpdGggc2hpZnQrdGFiXG4gICAgICAgIGNvbnN0IHNoaWZ0VGFiID0gZS5zaGlmdEtleTtcbiAgICAgICAgaWYgKHNoaWZ0VGFiKSB7XG4gICAgICAgICAgICBtb3ZlZCA9IG1vdmVMaXN0SXRlbVVwKGVkaXRvciwgeyBsaXN0LCBsaXN0SXRlbSB9KTtcbiAgICAgICAgICAgIGlmIChtb3ZlZCkge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1vdmUgZG93biB3aXRoIHRhYlxuICAgICAgICBjb25zdCB0YWIgPSAhZS5zaGlmdEtleTtcbiAgICAgICAgaWYgKHRhYiAmJiAhVGhlUXVlcmllcy5pc0ZpcnN0Q2hpbGQobGlzdEl0ZW1QYXRoKSkge1xuICAgICAgICAgICAgbW92ZUxpc3RJdGVtRG93bihlZGl0b3IsIHsgbGlzdCwgbGlzdEl0ZW0gfSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuIl19
|