@worktile/theia 3.0.8 → 3.0.9
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/bundles/worktile-theia.umd.js +14357 -14343
- package/bundles/worktile-theia.umd.js.map +1 -1
- 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 +65 -65
- package/components/toolbar-dropdown/toolbar-dropdown.component.d.ts +33 -33
- package/components/toolbar-dropdown/toolbar-dropdown.component.scss +0 -1
- 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 +18 -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/esm2015/components/color-select/color-select.component.js +112 -112
- package/esm2015/components/column-resize/column-resize-notifier.js +31 -31
- package/esm2015/components/column-resize/column-resize.directive.js +98 -98
- package/esm2015/components/column-resize/column-resize.module.js +34 -34
- package/esm2015/components/column-resize/event-dispatcher.js +55 -55
- package/esm2015/components/column-resize/overlay-handle.component.js +139 -139
- package/esm2015/components/column-resize/resize-ref.js +25 -25
- package/esm2015/components/column-resize/resizing.store.js +154 -154
- package/esm2015/components/column-resize/selectors.js +4 -4
- package/esm2015/components/contextmenu/contextmenu.component.js +64 -64
- package/esm2015/components/conversion-hint/conversion-hint.component.js +59 -59
- package/esm2015/components/element/element.component.js +23 -23
- package/esm2015/components/inline-toolbar/inline-toolbar.component.js +126 -126
- package/esm2015/components/nav-split-line/nav-split-line.component.js +36 -36
- package/esm2015/components/table-select/table-select.component.js +53 -53
- package/esm2015/components/template/template.component.js +66 -66
- package/esm2015/components/text/text.component.js +57 -57
- package/esm2015/components/toolbar/toolbar.component.js +250 -250
- package/esm2015/components/toolbar-dropdown/toolbar-dropdown.component.js +132 -132
- package/esm2015/components/toolbar-group/toolbar-group.component.js +116 -116
- package/esm2015/components/toolbar-item/toolbar-item.component.js +64 -64
- package/esm2015/constants/auto-format-rules.js +166 -166
- package/esm2015/constants/code.js +88 -88
- package/esm2015/constants/color-select.js +61 -61
- package/esm2015/constants/default.js +9 -9
- package/esm2015/constants/error.js +7 -7
- package/esm2015/constants/index.js +5 -5
- package/esm2015/constants/node-types.js +132 -132
- package/esm2015/constants/selector.js +3 -3
- package/esm2015/constants/toolbar.js +69 -69
- package/esm2015/core/create-plugin.js +4 -4
- package/esm2015/core/create-toolbar.js +56 -56
- package/esm2015/core/index.js +4 -4
- package/esm2015/core/toolbar-item/base-toolbar-item.js +91 -91
- package/esm2015/core/utils/combine-plugins.js +9 -9
- package/esm2015/core/utils/flatten-deep-plugins.js +18 -18
- package/esm2015/core/utils/get-plugin-options.js +2 -2
- package/esm2015/core/utils/get-plugin.js +1 -1
- package/esm2015/core/utils/get-plugins.js +4 -4
- package/esm2015/core/utils/index.js +10 -10
- package/esm2015/core/utils/merge-array.js +17 -17
- package/esm2015/core/utils/merge-deep-plugins.js +13 -13
- package/esm2015/core/utils/merge-options.js +19 -19
- package/esm2015/core/utils/nested-structure-by-key.js +10 -10
- package/esm2015/core/utils/plugins-by-key.js +9 -9
- package/esm2015/core/with-theia.js +22 -22
- package/esm2015/custom-types.js +1 -1
- package/esm2015/editor.component.js +439 -439
- package/esm2015/editor.module.js +201 -201
- package/esm2015/interfaces/auto-format.js +1 -1
- package/esm2015/interfaces/editor.js +22 -22
- package/esm2015/interfaces/element.js +1 -1
- package/esm2015/interfaces/image.js +2 -2
- package/esm2015/interfaces/index.js +8 -8
- package/esm2015/interfaces/plugins/index.js +4 -4
- package/esm2015/interfaces/plugins/no-infer.js +1 -1
- package/esm2015/interfaces/plugins/plugin-key.js +39 -39
- package/esm2015/interfaces/plugins/plugins.js +1 -1
- package/esm2015/interfaces/plugins/with-override.js +1 -1
- package/esm2015/interfaces/reset-block-type-plugin-options.js +2 -2
- package/esm2015/interfaces/toolbar.js +11 -11
- package/esm2015/interfaces/upload.js +2 -2
- package/esm2015/interfaces/utility/index.js +3 -3
- package/esm2015/interfaces/utility/nested-structure-by-key.js +1 -1
- package/esm2015/interfaces/utility/override-by-key.js +1 -1
- package/esm2015/interfaces/utility/types.js +1 -1
- package/esm2015/interfaces/valid-children-types.js +35 -35
- package/esm2015/interfaces/view-base.js +21 -21
- package/esm2015/pipes.js +42 -42
- package/esm2015/plugins/align/align.editor.js +47 -47
- package/esm2015/plugins/align/align.plugin.js +63 -63
- package/esm2015/plugins/autoformat/autoformat.plugin.js +109 -109
- package/esm2015/plugins/autoformat/transforms/auto-format-block.js +14 -14
- package/esm2015/plugins/autoformat/transforms/auto-format-inline.js +77 -77
- package/esm2015/plugins/blockquote/blockquote.component.js +21 -21
- package/esm2015/plugins/blockquote/blockquote.editor.js +20 -20
- package/esm2015/plugins/blockquote/blockquote.plugin.js +70 -70
- package/esm2015/plugins/code/code.component.js +244 -244
- package/esm2015/plugins/code/code.editor.js +47 -47
- package/esm2015/plugins/code/code.plugin.js +41 -41
- package/esm2015/plugins/color/color.editor.js +44 -44
- package/esm2015/plugins/color/color.plugin.js +27 -27
- package/esm2015/plugins/color/toolbar-item.component.js +79 -79
- package/esm2015/plugins/common/auto-insert-data..js +77 -77
- package/esm2015/plugins/common/block-card.plugin.js +286 -286
- package/esm2015/plugins/common/get-fragment.plugin.js +24 -24
- package/esm2015/plugins/common/history.plugin.js +30 -30
- package/esm2015/plugins/common/move-selection.plugin.js +89 -89
- package/esm2015/plugins/common/remove-empty.plugin.js +59 -59
- package/esm2015/plugins/common/remove-void.plugin.js +56 -56
- package/esm2015/plugins/common/reset-type.plugin.js +34 -34
- package/esm2015/plugins/common/transforms.plugin.js +17 -17
- package/esm2015/plugins/deserializers/deserialize-html.plugin.js +38 -38
- package/esm2015/plugins/deserializers/deserialize-md.plugin.js +121 -121
- package/esm2015/plugins/font-size/font-size.editor.js +97 -97
- package/esm2015/plugins/heading/heading.editor.js +53 -53
- package/esm2015/plugins/heading/heading.plugin.js +84 -84
- package/esm2015/plugins/hr/hr.component.js +40 -40
- package/esm2015/plugins/hr/hr.editor.js +7 -7
- package/esm2015/plugins/hr/hr.plugin.js +41 -41
- package/esm2015/plugins/image/image.component.js +369 -369
- package/esm2015/plugins/image/image.editor.js +57 -57
- package/esm2015/plugins/image/image.plugin.js +57 -57
- package/esm2015/plugins/indent/indent.editor.js +72 -72
- package/esm2015/plugins/indent/indent.plugin.js +59 -59
- package/esm2015/plugins/indent/on-keydown-indent.js +53 -53
- package/esm2015/plugins/index.js +70 -70
- package/esm2015/plugins/inline-code/inline-code.component.js +21 -21
- package/esm2015/plugins/inline-code/inline-code.editor.js +48 -48
- package/esm2015/plugins/inline-code/inline-code.plugin.js +65 -65
- package/esm2015/plugins/link/edit/link-edit.component.js +108 -108
- package/esm2015/plugins/link/hover/link-hover.component.js +39 -39
- package/esm2015/plugins/link/link.component.js +162 -162
- package/esm2015/plugins/link/link.editor.js +66 -66
- package/esm2015/plugins/link/link.plugin.js +58 -58
- package/esm2015/plugins/link/link.types.js +12 -12
- package/esm2015/plugins/list/components/bulleted-list.component.js +33 -33
- package/esm2015/plugins/list/components/list-item.component.js +94 -94
- package/esm2015/plugins/list/components/numbered-list.component.js +39 -39
- package/esm2015/plugins/list/list.editor.js +125 -125
- package/esm2015/plugins/list/list.plugin.js +280 -280
- package/esm2015/plugins/list/normalizers/get-list-normalizer.js +39 -39
- package/esm2015/plugins/list/normalizers/normalize-list-item.js +19 -19
- package/esm2015/plugins/list/normalizers/normalize-no.js +42 -42
- package/esm2015/plugins/list/on-key-down-list.js +32 -32
- package/esm2015/plugins/list/queries/get-list-item-entry.js +27 -27
- package/esm2015/plugins/list/queries/get-list-item-sublist.js +12 -12
- package/esm2015/plugins/list/queries/get-list-types.js +5 -5
- package/esm2015/plugins/list/queries/get-start-list-item.js +26 -26
- package/esm2015/plugins/list/queries/has-list-in-list-item.js +27 -27
- package/esm2015/plugins/list/queries/is-in-list.js +5 -5
- package/esm2015/plugins/list/queries/is-list-nested.js +10 -10
- package/esm2015/plugins/list/queries/is-list.js +5 -5
- package/esm2015/plugins/list/queries/is-node-type-list.js +4 -4
- package/esm2015/plugins/list/queries/is-selection-at-list-item-start.js +12 -12
- package/esm2015/plugins/list/queries/is-selection-in-same-list-item.js +16 -16
- package/esm2015/plugins/list/queries/is-single-list-item.js +9 -9
- package/esm2015/plugins/list/transforms/insert-list-data.js +71 -71
- package/esm2015/plugins/list/transforms/insert-list-item.js +72 -72
- package/esm2015/plugins/list/transforms/move-list-item-down.js +41 -41
- package/esm2015/plugins/list/transforms/move-list-item-sublist-items-to-list-item-sublist.js +42 -42
- package/esm2015/plugins/list/transforms/move-list-item-sublist-items-to-list.js +29 -29
- package/esm2015/plugins/list/transforms/move-list-item-up.js +77 -77
- package/esm2015/plugins/list/transforms/unwrap-list.js +9 -9
- package/esm2015/plugins/list/types.js +2 -2
- package/esm2015/plugins/mark/mark.editor.js +28 -28
- package/esm2015/plugins/mark/mark.plugin.js +101 -101
- package/esm2015/plugins/node-id/node-id.plugin.js +68 -68
- package/esm2015/plugins/normalizers/insert-paragraph-nodes.js +28 -28
- package/esm2015/plugins/normalizers/remove-empty-nodes.js +17 -17
- package/esm2015/plugins/normalizers/trailing-node.plugin.js +33 -33
- package/esm2015/plugins/paint-format/paint-format.editor.js +122 -122
- package/esm2015/plugins/public-api.js +15 -15
- package/esm2015/plugins/quick-insert/components/quick-insert.component.js +101 -101
- package/esm2015/plugins/quick-insert/components/quick-toolbar/quick-toolbar.component.js +83 -83
- package/esm2015/plugins/quick-insert/quick-insert.editor.js +52 -52
- package/esm2015/plugins/quick-insert/quick-insert.plugin.js +74 -74
- package/esm2015/plugins/soft-break/soft-break.plugin.js +36 -36
- package/esm2015/plugins/soft-break/soft-break.types.js +1 -1
- package/esm2015/plugins/table/components/insert-mark/insert-mark.component.js +102 -102
- package/esm2015/plugins/table/components/row/row.component.js +46 -46
- package/esm2015/plugins/table/components/table.component.js +469 -469
- package/esm2015/plugins/table/components/td/td.component.js +698 -698
- package/esm2015/plugins/table/components/toolbar/table-options.component.js +67 -67
- package/esm2015/plugins/table/components/toolbar/table-toolbar.component.js +161 -161
- package/esm2015/plugins/table/table.editor.js +182 -182
- package/esm2015/plugins/table/table.plugin.js +423 -423
- package/esm2015/plugins/table/table.service.js +102 -102
- package/esm2015/plugins/table/table.store.js +479 -479
- package/esm2015/plugins/table/table.types.js +33 -33
- package/esm2015/plugins/table/toolbar-item.component.js +61 -61
- package/esm2015/plugins/table/transforms/clear-cell.js +11 -11
- package/esm2015/plugins/table/transforms/clear-table-node.js +27 -27
- package/esm2015/plugins/table/transforms/insert-column.js +57 -57
- package/esm2015/plugins/table/transforms/insert-row.js +42 -42
- package/esm2015/plugins/table/transforms/insert-table.js +14 -14
- package/esm2015/plugins/table/transforms/remove-column.js +51 -51
- package/esm2015/plugins/table/transforms/remove-row.js +50 -50
- package/esm2015/plugins/table/transforms/remove-table.js +49 -49
- package/esm2015/plugins/table/utils/add-columns.js +28 -28
- package/esm2015/plugins/table/utils/calc-anchor-position.js +24 -24
- package/esm2015/plugins/table/utils/calc-span.js +72 -72
- package/esm2015/plugins/table/utils/create-cell.js +19 -19
- package/esm2015/plugins/table/utils/create-row.js +12 -12
- package/esm2015/plugins/table/utils/create-table.js +13 -13
- package/esm2015/plugins/table/utils/get-base-height.js +22 -22
- package/esm2015/plugins/table/utils/get-select-cell-node.js +16 -16
- package/esm2015/plugins/table/utils/index.js +8 -8
- package/esm2015/plugins/table/utils/is-range-in-table.js +16 -16
- package/esm2015/plugins/table/utils/is-selection-in-table.js +11 -11
- package/esm2015/plugins/table/utils/is-virtual-key.js +13 -13
- package/esm2015/plugins/table/utils/merge-cell.js +90 -90
- package/esm2015/plugins/table/utils/next-path.js +5 -5
- package/esm2015/plugins/table/utils/normalize-table.js +30 -30
- package/esm2015/plugins/table/utils/remove-columns.js +23 -23
- package/esm2015/plugins/table/utils/set-menu-cell-invisibility.js +15 -15
- package/esm2015/plugins/table/utils/split-cell.js +31 -31
- package/esm2015/plugins/table/utils/table-position.js +242 -242
- package/esm2015/plugins/todo-item/todo-item.component.js +55 -55
- package/esm2015/plugins/todo-item/todo-item.editor.js +31 -31
- package/esm2015/plugins/todo-item/todo-item.plugin.js +78 -78
- package/esm2015/plugins/vertical-align/toolbar-item.component.js +89 -89
- package/esm2015/plugins/vertical-align/vertical-align.editor.js +54 -54
- package/esm2015/public-api.js +23 -23
- package/esm2015/queries/anchor-block-entry.js +13 -13
- package/esm2015/queries/anchor-block.js +6 -6
- package/esm2015/queries/anchor-inline-entry.js +10 -10
- package/esm2015/queries/find-descendant.js +47 -47
- package/esm2015/queries/find-node.js +45 -45
- package/esm2015/queries/find-path.js +28 -28
- package/esm2015/queries/get-above-by-type.js +10 -10
- package/esm2015/queries/get-above.js +9 -9
- package/esm2015/queries/get-anchor-block-entry.js +8 -8
- package/esm2015/queries/get-block-above.js +7 -7
- package/esm2015/queries/get-block-card-above.js +7 -7
- package/esm2015/queries/get-block-card-cursor.js +5 -5
- package/esm2015/queries/get-container-blocks.js +11 -11
- package/esm2015/queries/get-directly-parent.js +11 -11
- package/esm2015/queries/get-insert-elements-path.js +43 -43
- package/esm2015/queries/get-last-child-path.js +9 -9
- package/esm2015/queries/get-last-node.js +17 -17
- package/esm2015/queries/get-next-sibling-nodes.js +17 -17
- package/esm2015/queries/get-node.js +10 -10
- package/esm2015/queries/get-nodes-by-type.js +12 -12
- package/esm2015/queries/get-nodes.js +7 -7
- package/esm2015/queries/get-parent.js +12 -12
- package/esm2015/queries/get-plain-text.js +16 -16
- package/esm2015/queries/get-plugin-by-toolbar.js +12 -12
- package/esm2015/queries/get-point-before.js +62 -62
- package/esm2015/queries/get-point-from-location.js +15 -15
- package/esm2015/queries/get-previous-path.js +9 -9
- package/esm2015/queries/get-rang-from-block-start.js +16 -16
- package/esm2015/queries/get-range-before.js +17 -17
- package/esm2015/queries/get-selection-marks.js +19 -19
- package/esm2015/queries/get-selection-nodes-by-type.js +29 -29
- package/esm2015/queries/get-text.js +9 -9
- package/esm2015/queries/get-toolbar-disabled.js +13 -13
- package/esm2015/queries/index.js +59 -58
- package/esm2015/queries/is-across-blocks.js +7 -7
- package/esm2015/queries/is-ancestor-empty.js +6 -6
- package/esm2015/queries/is-ancestor.js +3 -3
- package/esm2015/queries/is-block-above-empty.js +11 -11
- package/esm2015/queries/is-block-active.js +7 -7
- package/esm2015/queries/is-block-card-cursor.js +4 -4
- package/esm2015/queries/is-block-text-empty-after-selection.js +31 -31
- package/esm2015/queries/is-collapsed.js +7 -7
- package/esm2015/queries/is-contain-nested-type.js +28 -28
- package/esm2015/queries/is-container-type.js +2 -2
- package/esm2015/queries/is-descendant.js +3 -3
- package/esm2015/queries/is-empty-content.js +15 -0
- package/esm2015/queries/is-empty-paragraph-by-path.js +7 -7
- package/esm2015/queries/is-empty-paragraph.js +11 -11
- package/esm2015/queries/is-first-child.js +5 -5
- package/esm2015/queries/is-include-types.js +11 -11
- package/esm2015/queries/is-node-type-in.js +9 -9
- package/esm2015/queries/is-node-type.js +15 -15
- package/esm2015/queries/is-paragraph.js +9 -9
- package/esm2015/queries/is-point-at-root.js +2 -2
- package/esm2015/queries/is-range-across-blocks.js +18 -18
- package/esm2015/queries/is-range-at-root.js +3 -3
- package/esm2015/queries/is-start.js +6 -6
- package/esm2015/queries/some-node.js +9 -9
- package/esm2015/services/color-select.service.js +49 -49
- package/esm2015/services/context.service.js +59 -59
- package/esm2015/services/table-contextmenu.service.js +189 -189
- package/esm2015/services/toolbar.service.js +47 -47
- package/esm2015/shortcuts/index.js +5 -5
- package/esm2015/shortcuts/mark.js +24 -24
- package/esm2015/transforms/apply-deep-to-nodes.js +21 -21
- package/esm2015/transforms/clear-marks.js +23 -23
- package/esm2015/transforms/close-conversion-hint.js +8 -8
- package/esm2015/transforms/delete-element.js +11 -11
- package/esm2015/transforms/handle-continual-delete-backward.js +17 -17
- package/esm2015/transforms/handle-continual-insert-break.js +19 -19
- package/esm2015/transforms/index.js +18 -18
- package/esm2015/transforms/insert-elements.js +34 -34
- package/esm2015/transforms/insert-paragraph.js +6 -6
- package/esm2015/transforms/merge-deep-to-nodes.js +8 -8
- package/esm2015/transforms/move-children.js +21 -21
- package/esm2015/transforms/on-keydown-reset-block-type.js +22 -22
- package/esm2015/transforms/set-end-selection.js +10 -10
- package/esm2015/transforms/set-marks.js +9 -9
- package/esm2015/transforms/set-node.js +5 -5
- package/esm2015/transforms/split-node.js +31 -31
- package/esm2015/transforms/un-hang-range.js +11 -11
- package/esm2015/transforms/un-wrap.js +11 -11
- package/esm2015/transforms/unwrap-nodes-by-type.js +11 -11
- package/esm2015/utils/auto-focus.js +13 -13
- package/esm2015/utils/auto-scroll-view.js +24 -24
- package/esm2015/utils/cast-array.js +7 -7
- package/esm2015/utils/common.js +2 -2
- package/esm2015/utils/create-empty-paragraph.js +14 -14
- package/esm2015/utils/data-transform.js +48 -48
- package/esm2015/utils/dom.js +46 -46
- package/esm2015/utils/editor-uuid.js +8 -8
- package/esm2015/utils/fragment.js +65 -65
- package/esm2015/utils/get-editable-element-height.js +6 -6
- package/esm2015/utils/get-toolbar-class.js +6 -6
- package/esm2015/utils/id-creator.js +11 -11
- package/esm2015/utils/index.js +13 -13
- package/esm2015/utils/is-clean-empty-paragraph.js +36 -36
- package/esm2015/utils/is-inline.js +9 -9
- package/esm2015/utils/lodash.js +3 -3
- package/esm2015/utils/match.js +29 -29
- package/esm2015/utils/merge-element-options.js +19 -19
- package/esm2015/utils/weak-maps.js +3 -3
- package/esm2015/worktile-theia.js +4 -4
- package/fesm2015/worktile-theia.js +13156 -13142
- package/fesm2015/worktile-theia.js.map +1 -1
- 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 +1 -1
- 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 -57
- 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 -0
- 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
|
@@ -1,35 +1,35 @@
|
|
|
1
|
-
import { Editor, Range } from 'slate';
|
|
2
|
-
import { hotkeys, IS_SAFARI } from 'slate-angular';
|
|
3
|
-
import { createPluginFactory } from '../../core';
|
|
4
|
-
import { PluginKeys } from '../../interfaces';
|
|
5
|
-
import { BLOCK_DELETE_BACKWARD_TYPES } from '../../constants';
|
|
6
|
-
import * as TheQueries from '../../queries';
|
|
7
|
-
export const withResetType = (editor) => {
|
|
8
|
-
const { onKeydown } = editor;
|
|
9
|
-
editor.onKeydown = (event) => {
|
|
10
|
-
const { selection } = editor;
|
|
11
|
-
if (IS_SAFARI && selection && Range.isCollapsed(selection) && hotkeys.isDeleteBackward(event)) {
|
|
12
|
-
const blockEntry = TheQueries.getAboveByType(editor, BLOCK_DELETE_BACKWARD_TYPES);
|
|
13
|
-
if (blockEntry && blockEntry[0]) {
|
|
14
|
-
const isStart = Editor.isStart(editor, selection.anchor, blockEntry[1]);
|
|
15
|
-
if (isStart) {
|
|
16
|
-
event.preventDefault();
|
|
17
|
-
Editor.deleteBackward(editor);
|
|
18
|
-
return;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
if (Editor.isStart(editor, selection.anchor, [0])) {
|
|
22
|
-
event.preventDefault();
|
|
23
|
-
Editor.deleteBackward(editor);
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
onKeydown(event);
|
|
28
|
-
};
|
|
29
|
-
return editor;
|
|
30
|
-
};
|
|
31
|
-
export const createResetTypePlugin = createPluginFactory({
|
|
32
|
-
key: PluginKeys.resetType,
|
|
33
|
-
withOverrides: withResetType
|
|
34
|
-
});
|
|
1
|
+
import { Editor, Range } from 'slate';
|
|
2
|
+
import { hotkeys, IS_SAFARI } from 'slate-angular';
|
|
3
|
+
import { createPluginFactory } from '../../core';
|
|
4
|
+
import { PluginKeys } from '../../interfaces';
|
|
5
|
+
import { BLOCK_DELETE_BACKWARD_TYPES } from '../../constants';
|
|
6
|
+
import * as TheQueries from '../../queries';
|
|
7
|
+
export const withResetType = (editor) => {
|
|
8
|
+
const { onKeydown } = editor;
|
|
9
|
+
editor.onKeydown = (event) => {
|
|
10
|
+
const { selection } = editor;
|
|
11
|
+
if (IS_SAFARI && selection && Range.isCollapsed(selection) && hotkeys.isDeleteBackward(event)) {
|
|
12
|
+
const blockEntry = TheQueries.getAboveByType(editor, BLOCK_DELETE_BACKWARD_TYPES);
|
|
13
|
+
if (blockEntry && blockEntry[0]) {
|
|
14
|
+
const isStart = Editor.isStart(editor, selection.anchor, blockEntry[1]);
|
|
15
|
+
if (isStart) {
|
|
16
|
+
event.preventDefault();
|
|
17
|
+
Editor.deleteBackward(editor);
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
if (Editor.isStart(editor, selection.anchor, [0])) {
|
|
22
|
+
event.preventDefault();
|
|
23
|
+
Editor.deleteBackward(editor);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
onKeydown(event);
|
|
28
|
+
};
|
|
29
|
+
return editor;
|
|
30
|
+
};
|
|
31
|
+
export const createResetTypePlugin = createPluginFactory({
|
|
32
|
+
key: PluginKeys.resetType,
|
|
33
|
+
withOverrides: withResetType
|
|
34
|
+
});
|
|
35
35
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzZXQtdHlwZS5wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvcGx1Z2lucy9jb21tb24vcmVzZXQtdHlwZS5wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDdEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RCxPQUFPLEtBQUssVUFBVSxNQUFNLGVBQWUsQ0FBQztBQUU1QyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBbUIsTUFBUyxFQUFLLEVBQUU7SUFDNUQsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUU3QixNQUFNLENBQUMsU0FBUyxHQUFHLENBQUMsS0FBb0IsRUFBRSxFQUFFO1FBQ3hDLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFFN0IsSUFBSSxTQUFTLElBQUksU0FBUyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksT0FBTyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzNGLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLDJCQUEyQixDQUFDLENBQUM7WUFDbEYsSUFBSSxVQUFVLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUM3QixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN4RSxJQUFJLE9BQU8sRUFBRTtvQkFDVCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ3ZCLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQzlCLE9BQU87aUJBQ1Y7YUFDSjtZQUNELElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQy9DLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdkIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDOUIsT0FBTzthQUNWO1NBQ0o7UUFDRCxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckIsQ0FBQyxDQUFDO0lBRUYsT0FBTyxNQUFNLENBQUM7QUFDbEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsbUJBQW1CLENBQUM7SUFDckQsR0FBRyxFQUFFLFVBQVUsQ0FBQyxTQUFTO0lBQ3pCLGFBQWEsRUFBRSxhQUFhO0NBQy9CLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVkaXRvciwgUmFuZ2UgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgeyBob3RrZXlzLCBJU19TQUZBUkkgfSBmcm9tICdzbGF0ZS1hbmd1bGFyJztcbmltcG9ydCB7IGNyZWF0ZVBsdWdpbkZhY3RvcnkgfSBmcm9tICcuLi8uLi9jb3JlJztcbmltcG9ydCB7IFBsdWdpbktleXMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEJMT0NLX0RFTEVURV9CQUNLV0FSRF9UWVBFUyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgKiBhcyBUaGVRdWVyaWVzIGZyb20gJy4uLy4uL3F1ZXJpZXMnO1xuXG5leHBvcnQgY29uc3Qgd2l0aFJlc2V0VHlwZSA9IDxUIGV4dGVuZHMgRWRpdG9yPihlZGl0b3I6IFQpOiBUID0+IHtcbiAgICBjb25zdCB7IG9uS2V5ZG93biB9ID0gZWRpdG9yO1xuXG4gICAgZWRpdG9yLm9uS2V5ZG93biA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICBjb25zdCB7IHNlbGVjdGlvbiB9ID0gZWRpdG9yO1xuXG4gICAgICAgIGlmIChJU19TQUZBUkkgJiYgc2VsZWN0aW9uICYmIFJhbmdlLmlzQ29sbGFwc2VkKHNlbGVjdGlvbikgJiYgaG90a2V5cy5pc0RlbGV0ZUJhY2t3YXJkKGV2ZW50KSkge1xuICAgICAgICAgICAgY29uc3QgYmxvY2tFbnRyeSA9IFRoZVF1ZXJpZXMuZ2V0QWJvdmVCeVR5cGUoZWRpdG9yLCBCTE9DS19ERUxFVEVfQkFDS1dBUkRfVFlQRVMpO1xuICAgICAgICAgICAgaWYgKGJsb2NrRW50cnkgJiYgYmxvY2tFbnRyeVswXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzU3RhcnQgPSBFZGl0b3IuaXNTdGFydChlZGl0b3IsIHNlbGVjdGlvbi5hbmNob3IsIGJsb2NrRW50cnlbMV0pO1xuICAgICAgICAgICAgICAgIGlmIChpc1N0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIEVkaXRvci5kZWxldGVCYWNrd2FyZChlZGl0b3IpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEVkaXRvci5pc1N0YXJ0KGVkaXRvciwgc2VsZWN0aW9uLmFuY2hvciwgWzBdKSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUJhY2t3YXJkKGVkaXRvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9uS2V5ZG93bihldmVudCk7XG4gICAgfTtcblxuICAgIHJldHVybiBlZGl0b3I7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlUmVzZXRUeXBlUGx1Z2luID0gY3JlYXRlUGx1Z2luRmFjdG9yeSh7XG4gICAga2V5OiBQbHVnaW5LZXlzLnJlc2V0VHlwZSxcbiAgICB3aXRoT3ZlcnJpZGVzOiB3aXRoUmVzZXRUeXBlXG59KTtcbiJdfQ==
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import { Transforms } from 'slate';
|
|
2
|
-
import { createPluginFactory } from '../../core';
|
|
3
|
-
import { PluginKeys } from '../../interfaces';
|
|
4
|
-
export const withTransforms = (editor) => {
|
|
5
|
-
const e = editor;
|
|
6
|
-
e.insertNodes = (nodes, options) => {
|
|
7
|
-
try {
|
|
8
|
-
Transforms.insertNodes(editor, nodes, options);
|
|
9
|
-
}
|
|
10
|
-
catch (err) { }
|
|
11
|
-
};
|
|
12
|
-
return e;
|
|
13
|
-
};
|
|
14
|
-
export const createTransformsPlugin = createPluginFactory({
|
|
15
|
-
key: PluginKeys.transforms,
|
|
16
|
-
withOverrides: withTransforms
|
|
17
|
-
});
|
|
1
|
+
import { Transforms } from 'slate';
|
|
2
|
+
import { createPluginFactory } from '../../core';
|
|
3
|
+
import { PluginKeys } from '../../interfaces';
|
|
4
|
+
export const withTransforms = (editor) => {
|
|
5
|
+
const e = editor;
|
|
6
|
+
e.insertNodes = (nodes, options) => {
|
|
7
|
+
try {
|
|
8
|
+
Transforms.insertNodes(editor, nodes, options);
|
|
9
|
+
}
|
|
10
|
+
catch (err) { }
|
|
11
|
+
};
|
|
12
|
+
return e;
|
|
13
|
+
};
|
|
14
|
+
export const createTransformsPlugin = createPluginFactory({
|
|
15
|
+
key: PluginKeys.transforms,
|
|
16
|
+
withOverrides: withTransforms
|
|
17
|
+
});
|
|
18
18
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3Jtcy5wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvcGx1Z2lucy9jb21tb24vdHJhbnNmb3Jtcy5wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFVLFVBQVUsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUMzQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBUTlDLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFtQixNQUFTLEVBQUUsRUFBRTtJQUMxRCxNQUFNLENBQUMsR0FBRyxNQUE2QixDQUFDO0lBRXhDLENBQUMsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDL0IsSUFBSTtZQUNBLFVBQVUsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztTQUNsRDtRQUFDLE9BQU8sR0FBRyxFQUFFLEdBQUU7SUFDcEIsQ0FBQyxDQUFDO0lBRUYsT0FBTyxDQUFDLENBQUM7QUFDYixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxtQkFBbUIsQ0FBQztJQUN0RCxHQUFHLEVBQUUsVUFBVSxDQUFDLFVBQVU7SUFDMUIsYUFBYSxFQUFFLGNBQWM7Q0FDaEMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWRpdG9yLCBUcmFuc2Zvcm1zIH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IHsgY3JlYXRlUGx1Z2luRmFjdG9yeSB9IGZyb20gJy4uLy4uL2NvcmUnO1xuaW1wb3J0IHsgUGx1Z2luS2V5cyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuXG50eXBlIFBhcmFtcyA9IFBhcmFtZXRlcnM8dHlwZW9mIFRyYW5zZm9ybXMuaW5zZXJ0Tm9kZXM+O1xuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zZm9ybUVkaXRvciB7XG4gICAgaW5zZXJ0Tm9kZXM6IChub2RlczogUGFyYW1zWzFdLCBvcHRpb25zPzogUGFyYW1zWzJdKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3Qgd2l0aFRyYW5zZm9ybXMgPSA8VCBleHRlbmRzIEVkaXRvcj4oZWRpdG9yOiBUKSA9PiB7XG4gICAgY29uc3QgZSA9IGVkaXRvciBhcyBUICYgVHJhbnNmb3JtRWRpdG9yO1xuXG4gICAgZS5pbnNlcnROb2RlcyA9IChub2Rlcywgb3B0aW9ucykgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgVHJhbnNmb3Jtcy5pbnNlcnROb2RlcyhlZGl0b3IsIG5vZGVzLCBvcHRpb25zKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7fVxuICAgIH07XG5cbiAgICByZXR1cm4gZTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVUcmFuc2Zvcm1zUGx1Z2luID0gY3JlYXRlUGx1Z2luRmFjdG9yeSh7XG4gICAga2V5OiBQbHVnaW5LZXlzLnRyYW5zZm9ybXMsXG4gICAgd2l0aE92ZXJyaWRlczogd2l0aFRyYW5zZm9ybXNcbn0pO1xuIl19
|
|
@@ -1,39 +1,39 @@
|
|
|
1
|
-
import { Editor, Transforms } from 'slate';
|
|
2
|
-
import { TheiaConverter } from '@atinc/selene';
|
|
3
|
-
import { CLIPBOARD_FORMAT_KEY, ElementKinds } from '../../constants';
|
|
4
|
-
import { filterTextFormat } from '../../utils/fragment';
|
|
5
|
-
import { createPluginFactory } from '../../core';
|
|
6
|
-
import { PluginKeys } from '../../interfaces';
|
|
7
|
-
export const withDeserializeHMTL = (editor) => {
|
|
8
|
-
const { insertData } = editor;
|
|
9
|
-
editor.insertData = (data) => {
|
|
10
|
-
const html = data.getData(`text/html`);
|
|
11
|
-
const slateFragment = data.getData(`application/${CLIPBOARD_FORMAT_KEY}`);
|
|
12
|
-
if (html && !slateFragment) {
|
|
13
|
-
const htmlDom = new DOMParser().parseFromString(html, 'text/html');
|
|
14
|
-
const fragment = TheiaConverter.convertToTheia(Array.from(htmlDom.body.children));
|
|
15
|
-
// 无法识别HTML内容时后退一下:识别纯文本
|
|
16
|
-
if (fragment.length === 1 && Editor.isEmpty(editor, fragment[0]) && fragment[0].type === ElementKinds.paragraph) {
|
|
17
|
-
insertData(data);
|
|
18
|
-
return;
|
|
19
|
-
}
|
|
20
|
-
// 识出纯图片并且粘贴板中存在文件则不进行处理, hook 直接右键复制图片的场景,流转到上传图片流程
|
|
21
|
-
// 后续需要做识别html图片后自动上传处理
|
|
22
|
-
if (fragment.length === 1 && fragment[0].type === ElementKinds.image && data.files.length > 0) {
|
|
23
|
-
insertData(data);
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
26
|
-
// 过滤 text 节点的 color/background-color 属性
|
|
27
|
-
fragment.forEach(node => filterTextFormat(node));
|
|
28
|
-
Transforms.insertFragment(editor, fragment);
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
insertData(data);
|
|
32
|
-
};
|
|
33
|
-
return editor;
|
|
34
|
-
};
|
|
35
|
-
export const createDeserializeHMTLPlugin = createPluginFactory({
|
|
36
|
-
key: PluginKeys.deserializeHtml,
|
|
37
|
-
withOverrides: withDeserializeHMTL
|
|
38
|
-
});
|
|
1
|
+
import { Editor, Transforms } from 'slate';
|
|
2
|
+
import { TheiaConverter } from '@atinc/selene';
|
|
3
|
+
import { CLIPBOARD_FORMAT_KEY, ElementKinds } from '../../constants';
|
|
4
|
+
import { filterTextFormat } from '../../utils/fragment';
|
|
5
|
+
import { createPluginFactory } from '../../core';
|
|
6
|
+
import { PluginKeys } from '../../interfaces';
|
|
7
|
+
export const withDeserializeHMTL = (editor) => {
|
|
8
|
+
const { insertData } = editor;
|
|
9
|
+
editor.insertData = (data) => {
|
|
10
|
+
const html = data.getData(`text/html`);
|
|
11
|
+
const slateFragment = data.getData(`application/${CLIPBOARD_FORMAT_KEY}`);
|
|
12
|
+
if (html && !slateFragment) {
|
|
13
|
+
const htmlDom = new DOMParser().parseFromString(html, 'text/html');
|
|
14
|
+
const fragment = TheiaConverter.convertToTheia(Array.from(htmlDom.body.children));
|
|
15
|
+
// 无法识别HTML内容时后退一下:识别纯文本
|
|
16
|
+
if (fragment.length === 1 && Editor.isEmpty(editor, fragment[0]) && fragment[0].type === ElementKinds.paragraph) {
|
|
17
|
+
insertData(data);
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
// 识出纯图片并且粘贴板中存在文件则不进行处理, hook 直接右键复制图片的场景,流转到上传图片流程
|
|
21
|
+
// 后续需要做识别html图片后自动上传处理
|
|
22
|
+
if (fragment.length === 1 && fragment[0].type === ElementKinds.image && data.files.length > 0) {
|
|
23
|
+
insertData(data);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
// 过滤 text 节点的 color/background-color 属性
|
|
27
|
+
fragment.forEach(node => filterTextFormat(node));
|
|
28
|
+
Transforms.insertFragment(editor, fragment);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
insertData(data);
|
|
32
|
+
};
|
|
33
|
+
return editor;
|
|
34
|
+
};
|
|
35
|
+
export const createDeserializeHMTLPlugin = createPluginFactory({
|
|
36
|
+
key: PluginKeys.deserializeHtml,
|
|
37
|
+
withOverrides: withDeserializeHMTL
|
|
38
|
+
});
|
|
39
39
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzZXJpYWxpemUtaHRtbC5wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvcGx1Z2lucy9kZXNlcmlhbGl6ZXJzL2Rlc2VyaWFsaXplLWh0bWwucGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFOUMsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBbUIsTUFBUyxFQUFLLEVBQUU7SUFDbEUsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUU5QixNQUFNLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBa0IsRUFBRSxFQUFFO1FBQ3ZDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdkMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLG9CQUFvQixFQUFFLENBQUMsQ0FBQztRQUUxRSxJQUFJLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN4QixNQUFNLE9BQU8sR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDbkUsTUFBTSxRQUFRLEdBQUcsY0FBYyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNsRix3QkFBd0I7WUFDeEIsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQyxTQUFTLEVBQUU7Z0JBQzdHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDakIsT0FBTzthQUNWO1lBQ0Qsb0RBQW9EO1lBQ3BELHVCQUF1QjtZQUN2QixJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQzNGLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDakIsT0FBTzthQUNWO1lBQ0Qsd0NBQXdDO1lBQ3hDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ2pELFVBQVUsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzVDLE9BQU87U0FDVjtRQUVELFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQixDQUFDLENBQUM7SUFDRixPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxtQkFBbUIsQ0FBQztJQUMzRCxHQUFHLEVBQUUsVUFBVSxDQUFDLGVBQWU7SUFDL0IsYUFBYSxFQUFFLG1CQUFtQjtDQUNyQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFZGl0b3IsIFRyYW5zZm9ybXMgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgeyBUaGVpYUNvbnZlcnRlciB9IGZyb20gJ0BhdGluYy9zZWxlbmUnO1xuaW1wb3J0IHsgQ0xJUEJPQVJEX0ZPUk1BVF9LRVksIEVsZW1lbnRLaW5kcyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBmaWx0ZXJUZXh0Rm9ybWF0IH0gZnJvbSAnLi4vLi4vdXRpbHMvZnJhZ21lbnQnO1xuaW1wb3J0IHsgY3JlYXRlUGx1Z2luRmFjdG9yeSB9IGZyb20gJy4uLy4uL2NvcmUnO1xuaW1wb3J0IHsgUGx1Z2luS2V5cyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuXG5leHBvcnQgY29uc3Qgd2l0aERlc2VyaWFsaXplSE1UTCA9IDxUIGV4dGVuZHMgRWRpdG9yPihlZGl0b3I6IFQpOiBUID0+IHtcbiAgICBjb25zdCB7IGluc2VydERhdGEgfSA9IGVkaXRvcjtcblxuICAgIGVkaXRvci5pbnNlcnREYXRhID0gKGRhdGE6IERhdGFUcmFuc2ZlcikgPT4ge1xuICAgICAgICBjb25zdCBodG1sID0gZGF0YS5nZXREYXRhKGB0ZXh0L2h0bWxgKTtcbiAgICAgICAgY29uc3Qgc2xhdGVGcmFnbWVudCA9IGRhdGEuZ2V0RGF0YShgYXBwbGljYXRpb24vJHtDTElQQk9BUkRfRk9STUFUX0tFWX1gKTtcblxuICAgICAgICBpZiAoaHRtbCAmJiAhc2xhdGVGcmFnbWVudCkge1xuICAgICAgICAgICAgY29uc3QgaHRtbERvbSA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoaHRtbCwgJ3RleHQvaHRtbCcpO1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnQgPSBUaGVpYUNvbnZlcnRlci5jb252ZXJ0VG9UaGVpYShBcnJheS5mcm9tKGh0bWxEb20uYm9keS5jaGlsZHJlbikpO1xuICAgICAgICAgICAgLy8g5peg5rOV6K+G5YirSFRNTOWGheWuueaXtuWQjumAgOS4gOS4i++8muivhuWIq+e6r+aWh+acrFxuICAgICAgICAgICAgaWYgKGZyYWdtZW50Lmxlbmd0aCA9PT0gMSAmJiBFZGl0b3IuaXNFbXB0eShlZGl0b3IsIGZyYWdtZW50WzBdKSAmJiBmcmFnbWVudFswXS50eXBlID09PSBFbGVtZW50S2luZHMucGFyYWdyYXBoKSB7XG4gICAgICAgICAgICAgICAgaW5zZXJ0RGF0YShkYXRhKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyDor4blh7rnuq/lm77niYflubbkuJTnspjotLTmnb/kuK3lrZjlnKjmlofku7bliJnkuI3ov5vooYzlpITnkIYsIGhvb2sg55u05o6l5Y+z6ZSu5aSN5Yi25Zu+54mH55qE5Zy65pmv77yM5rWB6L2s5Yiw5LiK5Lyg5Zu+54mH5rWB56iLXG4gICAgICAgICAgICAvLyDlkI7nu63pnIDopoHlgZror4bliKtodG1s5Zu+54mH5ZCO6Ieq5Yqo5LiK5Lyg5aSE55CGXG4gICAgICAgICAgICBpZiAoZnJhZ21lbnQubGVuZ3RoID09PSAxICYmIGZyYWdtZW50WzBdLnR5cGUgPT09IEVsZW1lbnRLaW5kcy5pbWFnZSAmJiBkYXRhLmZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBpbnNlcnREYXRhKGRhdGEpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIOi/h+a7pCB0ZXh0IOiKgueCueeahCBjb2xvci9iYWNrZ3JvdW5kLWNvbG9yIOWxnuaAp1xuICAgICAgICAgICAgZnJhZ21lbnQuZm9yRWFjaChub2RlID0+IGZpbHRlclRleHRGb3JtYXQobm9kZSkpO1xuICAgICAgICAgICAgVHJhbnNmb3Jtcy5pbnNlcnRGcmFnbWVudChlZGl0b3IsIGZyYWdtZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGluc2VydERhdGEoZGF0YSk7XG4gICAgfTtcbiAgICByZXR1cm4gZWRpdG9yO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZURlc2VyaWFsaXplSE1UTFBsdWdpbiA9IGNyZWF0ZVBsdWdpbkZhY3Rvcnkoe1xuICAgIGtleTogUGx1Z2luS2V5cy5kZXNlcmlhbGl6ZUh0bWwsXG4gICAgd2l0aE92ZXJyaWRlczogd2l0aERlc2VyaWFsaXplSE1UTFxufSk7XG4iXX0=
|
|
@@ -1,122 +1,122 @@
|
|
|
1
|
-
import { ChangeDetectorRef, ViewContainerRef } from '@angular/core';
|
|
2
|
-
import { Overlay } from '@angular/cdk/overlay';
|
|
3
|
-
import { ThyPopover } from 'ngx-tethys/popover';
|
|
4
|
-
import { Text, Transforms } from 'slate';
|
|
5
|
-
import { AngularEditor } from 'slate-angular';
|
|
6
|
-
import marked from 'marked';
|
|
7
|
-
import { TheiaConverter } from '@atinc/selene';
|
|
8
|
-
import { CLIPBOARD_FORMAT_KEY, ElementKinds } from '../../constants';
|
|
9
|
-
import * as TheTransforms from '../../transforms';
|
|
10
|
-
import { TheConversionHintComponent } from '../../components/conversion-hint/conversion-hint.component';
|
|
11
|
-
import { THE_EDITOR_CONVERSION_HINT_REF, getToolbarClass } from '../../utils';
|
|
12
|
-
import { createPluginFactory } from '../../core';
|
|
13
|
-
import { PluginKeys } from '../../interfaces';
|
|
14
|
-
export const withDeserializeMd = (editor) => {
|
|
15
|
-
const { insertData, onKeydown } = editor;
|
|
16
|
-
editor.onKeydown = (event) => {
|
|
17
|
-
TheTransforms.closeConversionHint(editor);
|
|
18
|
-
onKeydown(event);
|
|
19
|
-
};
|
|
20
|
-
editor.insertData = (data) => {
|
|
21
|
-
const popover = editor.injector.get(ThyPopover);
|
|
22
|
-
const viewContainerRef = editor.injector.get(ViewContainerRef);
|
|
23
|
-
const cdr = editor.injector.get(ChangeDetectorRef);
|
|
24
|
-
const plainFragment = data.getData('text/plain');
|
|
25
|
-
const slateFragment = data.getData(`application/${CLIPBOARD_FORMAT_KEY}`);
|
|
26
|
-
const oldRange = editor.selection;
|
|
27
|
-
TheTransforms.closeConversionHint(editor);
|
|
28
|
-
if (plainFragment && isMarkdownStynx(plainFragment) && !slateFragment) {
|
|
29
|
-
setTimeout(() => {
|
|
30
|
-
const overlay = editor.injector.get(Overlay);
|
|
31
|
-
const bodyElement = document.body;
|
|
32
|
-
const toolbarClass = getToolbarClass(editor);
|
|
33
|
-
const toolbarElement = document.querySelector(`.${toolbarClass}`);
|
|
34
|
-
const origin = toolbarElement ? toolbarElement : bodyElement;
|
|
35
|
-
const placement = toolbarElement ? 'top' : 'topRight';
|
|
36
|
-
const hintPopverRef = popover.open(TheConversionHintComponent, {
|
|
37
|
-
initialState: {
|
|
38
|
-
editor,
|
|
39
|
-
conversion: () => {
|
|
40
|
-
try {
|
|
41
|
-
const html = marked(plainFragment.replace(/\n```/g, '\n\n```'), { gfm: true });
|
|
42
|
-
const htmlDom = new DOMParser().parseFromString(html, 'text/html');
|
|
43
|
-
const fragment = TheiaConverter.convertToTheia(Array.from(htmlDom.body.children));
|
|
44
|
-
if (!isUnformatted(fragment)) {
|
|
45
|
-
TheTransforms.closeConversionHint(editor);
|
|
46
|
-
editor.undo();
|
|
47
|
-
setTimeout(() => {
|
|
48
|
-
Transforms.select(editor, oldRange);
|
|
49
|
-
Transforms.insertFragment(editor, fragment);
|
|
50
|
-
AngularEditor.focus(editor);
|
|
51
|
-
});
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
else {
|
|
55
|
-
TheTransforms.closeConversionHint(editor);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
catch (error) {
|
|
59
|
-
TheTransforms.closeConversionHint(editor);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
},
|
|
63
|
-
origin,
|
|
64
|
-
viewContainerRef,
|
|
65
|
-
placement,
|
|
66
|
-
offset: -100,
|
|
67
|
-
minWidth: 0,
|
|
68
|
-
hasBackdrop: false,
|
|
69
|
-
backdropClosable: false,
|
|
70
|
-
closeOnNavigation: false,
|
|
71
|
-
scrollStrategy: overlay.scrollStrategies.reposition()
|
|
72
|
-
});
|
|
73
|
-
THE_EDITOR_CONVERSION_HINT_REF.set(editor, hintPopverRef);
|
|
74
|
-
cdr.markForCheck();
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
insertData(data);
|
|
78
|
-
};
|
|
79
|
-
return editor;
|
|
80
|
-
};
|
|
81
|
-
export const createDeserializeMdPlugin = createPluginFactory({
|
|
82
|
-
key: PluginKeys.deserializeMd,
|
|
83
|
-
withOverrides: withDeserializeMd
|
|
84
|
-
});
|
|
85
|
-
const isUnformatted = (elements) => {
|
|
86
|
-
return elements.every(element => element.type === ElementKinds.default &&
|
|
87
|
-
element.children.every((node) => {
|
|
88
|
-
return Text.isText(node) && Object.keys(node).length === 1;
|
|
89
|
-
}));
|
|
90
|
-
};
|
|
91
|
-
const isMarkdownStynx = content => {
|
|
92
|
-
// https://github.com/Chalarangelo/parse-md-js/blob/master/parsemd.js
|
|
93
|
-
const codeBlockRegex = /((\n\t)(.*))+/g;
|
|
94
|
-
const inlineCodeRegex = /(`)(.*?)\1/g;
|
|
95
|
-
const imageRegex = /!\[([^\[]+)\]\(([^\)]+)\)/g;
|
|
96
|
-
const linkRegex = /\[([^\[]+)\]\(([^\)]+)\)/g;
|
|
97
|
-
const headingRegex = /(#+\s*)(.*)/g;
|
|
98
|
-
const boldItalicsRegex = /(\*{1,2})(\S+)\1/g;
|
|
99
|
-
const strikethroughRegex = /(\~\~)(.*?)\1/g;
|
|
100
|
-
const blockquoteRegex = /\n(>|\>)(.*)/g;
|
|
101
|
-
const horizontalRuleRegex = /\n((\-{3,})|(={3,}))/g;
|
|
102
|
-
const unorderedListRegex = /(\n\s*(\-|\+)\s.*)+/g;
|
|
103
|
-
const orderedListRegex = /(\n\s*([0-9]+\.)\s.*)+/g;
|
|
104
|
-
const paragraphRegex = /\n+(?!<pre>)(?!<h)(?!<ul>)(?!<blockquote)(?!<hr)(?!\t)([^\n]+)\n/g;
|
|
105
|
-
// from marked
|
|
106
|
-
const table = /^\s*([^\s].*\|.*)\s{0,3}(?:\|\s*)?(:?-+:?\s*(?:\|\s*:?-+:?\s*)*)\|?(?:\s*((?:(?!|hr|heading|blockquote|code|fences|list|html).*(?:|$))*)*|$)/g;
|
|
107
|
-
const regexps = [
|
|
108
|
-
inlineCodeRegex,
|
|
109
|
-
imageRegex,
|
|
110
|
-
linkRegex,
|
|
111
|
-
headingRegex,
|
|
112
|
-
boldItalicsRegex,
|
|
113
|
-
strikethroughRegex,
|
|
114
|
-
blockquoteRegex,
|
|
115
|
-
horizontalRuleRegex,
|
|
116
|
-
unorderedListRegex,
|
|
117
|
-
orderedListRegex,
|
|
118
|
-
table
|
|
119
|
-
];
|
|
120
|
-
return regexps.some(regexp => regexp.test(content));
|
|
121
|
-
};
|
|
1
|
+
import { ChangeDetectorRef, ViewContainerRef } from '@angular/core';
|
|
2
|
+
import { Overlay } from '@angular/cdk/overlay';
|
|
3
|
+
import { ThyPopover } from 'ngx-tethys/popover';
|
|
4
|
+
import { Text, Transforms } from 'slate';
|
|
5
|
+
import { AngularEditor } from 'slate-angular';
|
|
6
|
+
import marked from 'marked';
|
|
7
|
+
import { TheiaConverter } from '@atinc/selene';
|
|
8
|
+
import { CLIPBOARD_FORMAT_KEY, ElementKinds } from '../../constants';
|
|
9
|
+
import * as TheTransforms from '../../transforms';
|
|
10
|
+
import { TheConversionHintComponent } from '../../components/conversion-hint/conversion-hint.component';
|
|
11
|
+
import { THE_EDITOR_CONVERSION_HINT_REF, getToolbarClass } from '../../utils';
|
|
12
|
+
import { createPluginFactory } from '../../core';
|
|
13
|
+
import { PluginKeys } from '../../interfaces';
|
|
14
|
+
export const withDeserializeMd = (editor) => {
|
|
15
|
+
const { insertData, onKeydown } = editor;
|
|
16
|
+
editor.onKeydown = (event) => {
|
|
17
|
+
TheTransforms.closeConversionHint(editor);
|
|
18
|
+
onKeydown(event);
|
|
19
|
+
};
|
|
20
|
+
editor.insertData = (data) => {
|
|
21
|
+
const popover = editor.injector.get(ThyPopover);
|
|
22
|
+
const viewContainerRef = editor.injector.get(ViewContainerRef);
|
|
23
|
+
const cdr = editor.injector.get(ChangeDetectorRef);
|
|
24
|
+
const plainFragment = data.getData('text/plain');
|
|
25
|
+
const slateFragment = data.getData(`application/${CLIPBOARD_FORMAT_KEY}`);
|
|
26
|
+
const oldRange = editor.selection;
|
|
27
|
+
TheTransforms.closeConversionHint(editor);
|
|
28
|
+
if (plainFragment && isMarkdownStynx(plainFragment) && !slateFragment) {
|
|
29
|
+
setTimeout(() => {
|
|
30
|
+
const overlay = editor.injector.get(Overlay);
|
|
31
|
+
const bodyElement = document.body;
|
|
32
|
+
const toolbarClass = getToolbarClass(editor);
|
|
33
|
+
const toolbarElement = document.querySelector(`.${toolbarClass}`);
|
|
34
|
+
const origin = toolbarElement ? toolbarElement : bodyElement;
|
|
35
|
+
const placement = toolbarElement ? 'top' : 'topRight';
|
|
36
|
+
const hintPopverRef = popover.open(TheConversionHintComponent, {
|
|
37
|
+
initialState: {
|
|
38
|
+
editor,
|
|
39
|
+
conversion: () => {
|
|
40
|
+
try {
|
|
41
|
+
const html = marked(plainFragment.replace(/\n```/g, '\n\n```'), { gfm: true });
|
|
42
|
+
const htmlDom = new DOMParser().parseFromString(html, 'text/html');
|
|
43
|
+
const fragment = TheiaConverter.convertToTheia(Array.from(htmlDom.body.children));
|
|
44
|
+
if (!isUnformatted(fragment)) {
|
|
45
|
+
TheTransforms.closeConversionHint(editor);
|
|
46
|
+
editor.undo();
|
|
47
|
+
setTimeout(() => {
|
|
48
|
+
Transforms.select(editor, oldRange);
|
|
49
|
+
Transforms.insertFragment(editor, fragment);
|
|
50
|
+
AngularEditor.focus(editor);
|
|
51
|
+
});
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
TheTransforms.closeConversionHint(editor);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
TheTransforms.closeConversionHint(editor);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
origin,
|
|
64
|
+
viewContainerRef,
|
|
65
|
+
placement,
|
|
66
|
+
offset: -100,
|
|
67
|
+
minWidth: 0,
|
|
68
|
+
hasBackdrop: false,
|
|
69
|
+
backdropClosable: false,
|
|
70
|
+
closeOnNavigation: false,
|
|
71
|
+
scrollStrategy: overlay.scrollStrategies.reposition()
|
|
72
|
+
});
|
|
73
|
+
THE_EDITOR_CONVERSION_HINT_REF.set(editor, hintPopverRef);
|
|
74
|
+
cdr.markForCheck();
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
insertData(data);
|
|
78
|
+
};
|
|
79
|
+
return editor;
|
|
80
|
+
};
|
|
81
|
+
export const createDeserializeMdPlugin = createPluginFactory({
|
|
82
|
+
key: PluginKeys.deserializeMd,
|
|
83
|
+
withOverrides: withDeserializeMd
|
|
84
|
+
});
|
|
85
|
+
const isUnformatted = (elements) => {
|
|
86
|
+
return elements.every(element => element.type === ElementKinds.default &&
|
|
87
|
+
element.children.every((node) => {
|
|
88
|
+
return Text.isText(node) && Object.keys(node).length === 1;
|
|
89
|
+
}));
|
|
90
|
+
};
|
|
91
|
+
const isMarkdownStynx = content => {
|
|
92
|
+
// https://github.com/Chalarangelo/parse-md-js/blob/master/parsemd.js
|
|
93
|
+
const codeBlockRegex = /((\n\t)(.*))+/g;
|
|
94
|
+
const inlineCodeRegex = /(`)(.*?)\1/g;
|
|
95
|
+
const imageRegex = /!\[([^\[]+)\]\(([^\)]+)\)/g;
|
|
96
|
+
const linkRegex = /\[([^\[]+)\]\(([^\)]+)\)/g;
|
|
97
|
+
const headingRegex = /(#+\s*)(.*)/g;
|
|
98
|
+
const boldItalicsRegex = /(\*{1,2})(\S+)\1/g;
|
|
99
|
+
const strikethroughRegex = /(\~\~)(.*?)\1/g;
|
|
100
|
+
const blockquoteRegex = /\n(>|\>)(.*)/g;
|
|
101
|
+
const horizontalRuleRegex = /\n((\-{3,})|(={3,}))/g;
|
|
102
|
+
const unorderedListRegex = /(\n\s*(\-|\+)\s.*)+/g;
|
|
103
|
+
const orderedListRegex = /(\n\s*([0-9]+\.)\s.*)+/g;
|
|
104
|
+
const paragraphRegex = /\n+(?!<pre>)(?!<h)(?!<ul>)(?!<blockquote)(?!<hr)(?!\t)([^\n]+)\n/g;
|
|
105
|
+
// from marked
|
|
106
|
+
const table = /^\s*([^\s].*\|.*)\s{0,3}(?:\|\s*)?(:?-+:?\s*(?:\|\s*:?-+:?\s*)*)\|?(?:\s*((?:(?!|hr|heading|blockquote|code|fences|list|html).*(?:|$))*)*|$)/g;
|
|
107
|
+
const regexps = [
|
|
108
|
+
inlineCodeRegex,
|
|
109
|
+
imageRegex,
|
|
110
|
+
linkRegex,
|
|
111
|
+
headingRegex,
|
|
112
|
+
boldItalicsRegex,
|
|
113
|
+
strikethroughRegex,
|
|
114
|
+
blockquoteRegex,
|
|
115
|
+
horizontalRuleRegex,
|
|
116
|
+
unorderedListRegex,
|
|
117
|
+
orderedListRegex,
|
|
118
|
+
table
|
|
119
|
+
];
|
|
120
|
+
return regexps.some(regexp => regexp.test(content));
|
|
121
|
+
};
|
|
122
122
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzZXJpYWxpemUtbWQucGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL3BsdWdpbnMvZGVzZXJpYWxpemVycy9kZXNlcmlhbGl6ZS1tZC5wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUF5QixJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUMsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JFLE9BQU8sS0FBSyxhQUFhLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDeEcsT0FBTyxFQUFFLDhCQUE4QixFQUFFLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM5RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTlDLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQW1CLE1BQVMsRUFBSyxFQUFFO0lBQ2hFLE1BQU0sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBTSxDQUFDO0lBRXpDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsQ0FBQyxLQUFvQixF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QUMsQ0FBQztRQUMvRCxDQUFDLENBQUMsQ0FDVCxDQUFDO0FBQ04sQ0FBQyxDQUFDO0FBRUYsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLEVBQUU7SUFDOUIscUVBQXFFO0lBQ3JFLE1BQU0sY0FBYyxHQUFHLGdCQUFnQixDQUFDO0lBQ3hDLE1BQU0sZUFBZSxHQUFHLGFBQWEsQ0FBQztJQUN0QyxNQUFNLFVBQVUsR0FBRyw0QkFBNEIsQ0FBQztJQUNoRCxNQUFNLFNBQVMsR0FBRywyQkFBMkIsQ0FBQztJQUM5QyxNQUFNLFlBQVksR0FBRyxjQUFjLENBQUM7SUFDcEMsTUFBTSxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQztJQUM3QyxNQUFNLGtCQUFrQixHQUFHLGdCQUFnQixDQUFDO0lBQzVDLE1BQU0sZUFBZSxHQUFHLGtCQUFrQixDQUFDO0lBQzNDLE1BQU0sbUJBQW1CLEdBQUcsdUJBQXVCLENBQUM7SUFDcEQsTUFBTSxrQkFBa0IsR0FBRyxzQkFBc0IsQ0FBQztJQUNsRCxNQUFNLGdCQUFnQixHQUFHLHlCQUF5QixDQUFDO0lBQ25ELE1BQU0sY0FBYyxHQUFHLG1FQUFtRSxDQUFDO0lBQzNGLGNBQWM7SUFDZCxNQUFNLEtBQUssR0FDUCwrSUFBK0ksQ0FBQztJQUNwSixNQUFNLE9BQU8sR0FBRztRQUNaLGVBQWU7UUFDZixVQUFVO1FBQ1YsU0FBUztRQUNULFlBQVk7UUFDWixnQkFBZ0I7UUFDaEIsa0JBQWtCO1FBQ2xCLGVBQWU7UUFDZixtQkFBbUI7UUFDbkIsa0JBQWtCO1FBQ2xCLGdCQUFnQjtRQUNoQixLQUFLO0tBQ1IsQ0FBQztJQUNGLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUN4RCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT3ZlcmxheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IFRoeVBvcG92ZXIgfSBmcm9tICduZ3gtdGV0aHlzL3BvcG92ZXInO1xuaW1wb3J0IHsgRWRpdG9yLCBFbGVtZW50LCBOb2RlLCBUZXh0LCBUcmFuc2Zvcm1zIH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IHsgQW5ndWxhckVkaXRvciB9IGZyb20gJ3NsYXRlLWFuZ3VsYXInO1xuaW1wb3J0IG1hcmtlZCBmcm9tICdtYXJrZWQnO1xuaW1wb3J0IHsgVGhlaWFDb252ZXJ0ZXIgfSBmcm9tICdAYXRpbmMvc2VsZW5lJztcbmltcG9ydCB7IENMSVBCT0FSRF9GT1JNQVRfS0VZLCBFbGVtZW50S2luZHMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0ICogYXMgVGhlVHJhbnNmb3JtcyBmcm9tICcuLi8uLi90cmFuc2Zvcm1zJztcbmltcG9ydCB7IFRoZUNvbnZlcnNpb25IaW50Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jb252ZXJzaW9uLWhpbnQvY29udmVyc2lvbi1oaW50LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUSEVfRURJVE9SX0NPTlZFUlNJT05fSElOVF9SRUYsIGdldFRvb2xiYXJDbGFzcyB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IGNyZWF0ZVBsdWdpbkZhY3RvcnkgfSBmcm9tICcuLi8uLi9jb3JlJztcbmltcG9ydCB7IFBsdWdpbktleXMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNvbnN0IHdpdGhEZXNlcmlhbGl6ZU1kID0gPFQgZXh0ZW5kcyBFZGl0b3I+KGVkaXRvcjogVCk6IFQgPT4ge1xuICAgIGNvbnN0IHsgaW5zZXJ0RGF0YSwgb25LZXlkb3duIH0gPSBlZGl0b3I7XG5cbiAgICBlZGl0b3Iub25LZXlkb3duID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIFRoZVRyYW5zZm9ybXMuY2xvc2VDb252ZXJzaW9uSGludChlZGl0b3IpO1xuICAgICAgICBvbktleWRvd24oZXZlbnQpO1xuICAgIH07XG5cbiAgICBlZGl0b3IuaW5zZXJ0RGF0YSA9IChkYXRhOiBEYXRhVHJhbnNmZXIpID0+IHtcbiAgICAgICAgY29uc3QgcG9wb3ZlciA9IGVkaXRvci5pbmplY3Rvci5nZXQoVGh5UG9wb3Zlcik7XG4gICAgICAgIGNvbnN0IHZpZXdDb250YWluZXJSZWYgPSBlZGl0b3IuaW5qZWN0b3IuZ2V0KFZpZXdDb250YWluZXJSZWYpO1xuICAgICAgICBjb25zdCBjZHIgPSBlZGl0b3IuaW5qZWN0b3IuZ2V0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICAgICAgICBjb25zdCBwbGFpbkZyYWdtZW50ID0gZGF0YS5nZXREYXRhKCd0ZXh0L3BsYWluJyk7XG4gICAgICAgIGNvbnN0IHNsYXRlRnJhZ21lbnQgPSBkYXRhLmdldERhdGEoYGFwcGxpY2F0aW9uLyR7Q0xJUEJPQVJEX0ZPUk1BVF9LRVl9YCk7XG4gICAgICAgIGNvbnN0IG9sZFJhbmdlID0gZWRpdG9yLnNlbGVjdGlvbjtcbiAgICAgICAgVGhlVHJhbnNmb3Jtcy5jbG9zZUNvbnZlcnNpb25IaW50KGVkaXRvcik7XG5cbiAgICAgICAgaWYgKHBsYWluRnJhZ21lbnQgJiYgaXNNYXJrZG93blN0eW54KHBsYWluRnJhZ21lbnQpICYmICFzbGF0ZUZyYWdtZW50KSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBvdmVybGF5ID0gZWRpdG9yLmluamVjdG9yLmdldChPdmVybGF5KTtcbiAgICAgICAgICAgICAgICBjb25zdCBib2R5RWxlbWVudCA9IGRvY3VtZW50LmJvZHk7XG4gICAgICAgICAgICAgICAgY29uc3QgdG9vbGJhckNsYXNzID0gZ2V0VG9vbGJhckNsYXNzKGVkaXRvcik7XG4gICAgICAgICAgICAgICAgY29uc3QgdG9vbGJhckVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuJHt0b29sYmFyQ2xhc3N9YCkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luID0gdG9vbGJhckVsZW1lbnQgPyB0b29sYmFyRWxlbWVudCA6IGJvZHlFbGVtZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IHBsYWNlbWVudCA9IHRvb2xiYXJFbGVtZW50ID8gJ3RvcCcgOiAndG9wUmlnaHQnO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgaGludFBvcHZlclJlZiA9IHBvcG92ZXIub3BlbihUaGVDb252ZXJzaW9uSGludENvbXBvbmVudCwge1xuICAgICAgICAgICAgICAgICAgICBpbml0aWFsU3RhdGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRvcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnNpb246ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBodG1sID0gbWFya2VkKHBsYWluRnJhZ21lbnQucmVwbGFjZSgvXFxuYGBgL2csICdcXG5cXG5gYGAnKSwgeyBnZm06IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGh0bWxEb20gPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGh0bWwsICd0ZXh0L2h0bWwnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZnJhZ21lbnQgPSBUaGVpYUNvbnZlcnRlci5jb252ZXJ0VG9UaGVpYShBcnJheS5mcm9tKGh0bWxEb20uYm9keS5jaGlsZHJlbikpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNVbmZvcm1hdHRlZChmcmFnbWVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZVRyYW5zZm9ybXMuY2xvc2VDb252ZXJzaW9uSGludChlZGl0b3IpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IudW5kbygpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNlbGVjdChlZGl0b3IsIG9sZFJhbmdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLmluc2VydEZyYWdtZW50KGVkaXRvciwgZnJhZ21lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFuZ3VsYXJFZGl0b3IuZm9jdXMoZWRpdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlVHJhbnNmb3Jtcy5jbG9zZUNvbnZlcnNpb25IaW50KGVkaXRvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGVUcmFuc2Zvcm1zLmNsb3NlQ29udmVyc2lvbkhpbnQoZWRpdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbixcbiAgICAgICAgICAgICAgICAgICAgdmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IC0xMDAsXG4gICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiAwLFxuICAgICAgICAgICAgICAgICAgICBoYXNCYWNrZHJvcDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGJhY2tkcm9wQ2xvc2FibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBjbG9zZU9uTmF2aWdhdGlvbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbFN0cmF0ZWd5OiBvdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgVEhFX0VESVRPUl9DT05WRVJTSU9OX0hJTlRfUkVGLnNldChlZGl0b3IsIGhpbnRQb3B2ZXJSZWYpO1xuICAgICAgICAgICAgICAgIGNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5zZXJ0RGF0YShkYXRhKTtcbiAgICB9O1xuICAgIHJldHVybiBlZGl0b3I7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlRGVzZXJpYWxpemVNZFBsdWdpbiA9IGNyZWF0ZVBsdWdpbkZhY3Rvcnkoe1xuICAgIGtleTogUGx1Z2luS2V5cy5kZXNlcmlhbGl6ZU1kLFxuICAgIHdpdGhPdmVycmlkZXM6IHdpdGhEZXNlcmlhbGl6ZU1kXG59KTtcblxuY29uc3QgaXNVbmZvcm1hdHRlZCA9IChlbGVtZW50czogRWxlbWVudFtdKSA9PiB7XG4gICAgcmV0dXJuIGVsZW1lbnRzLmV2ZXJ5KFxuICAgICAgICBlbGVtZW50ID0+XG4gICAgICAgICAgICBlbGVtZW50LnR5cGUgPT09IEVsZW1lbnRLaW5kcy5kZWZhdWx0ICYmXG4gICAgICAgICAgICBlbGVtZW50LmNoaWxkcmVuLmV2ZXJ5KChub2RlOiBOb2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFRleHQuaXNUZXh0KG5vZGUpICYmIE9iamVjdC5rZXlzKG5vZGUpLmxlbmd0aCA9PT0gMTtcbiAgICAgICAgICAgIH0pXG4gICAgKTtcbn07XG5cbmNvbnN0IGlzTWFya2Rvd25TdHlueCA9IGNvbnRlbnQgPT4ge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9DaGFsYXJhbmdlbG8vcGFyc2UtbWQtanMvYmxvYi9tYXN0ZXIvcGFyc2VtZC5qc1xuICAgIGNvbnN0IGNvZGVCbG9ja1JlZ2V4ID0gLygoXFxuXFx0KSguKikpKy9nO1xuICAgIGNvbnN0IGlubGluZUNvZGVSZWdleCA9IC8oYCkoLio/KVxcMS9nO1xuICAgIGNvbnN0IGltYWdlUmVnZXggPSAvIVxcWyhbXlxcW10rKVxcXVxcKChbXlxcKV0rKVxcKS9nO1xuICAgIGNvbnN0IGxpbmtSZWdleCA9IC9cXFsoW15cXFtdKylcXF1cXCgoW15cXCldKylcXCkvZztcbiAgICBjb25zdCBoZWFkaW5nUmVnZXggPSAvKCMrXFxzKikoLiopL2c7XG4gICAgY29uc3QgYm9sZEl0YWxpY3NSZWdleCA9IC8oXFwqezEsMn0pKFxcUyspXFwxL2c7XG4gICAgY29uc3Qgc3RyaWtldGhyb3VnaFJlZ2V4ID0gLyhcXH5cXH4pKC4qPylcXDEvZztcbiAgICBjb25zdCBibG9ja3F1b3RlUmVnZXggPSAvXFxuKCZndDt8XFw+KSguKikvZztcbiAgICBjb25zdCBob3Jpem9udGFsUnVsZVJlZ2V4ID0gL1xcbigoXFwtezMsfSl8KD17Myx9KSkvZztcbiAgICBjb25zdCB1bm9yZGVyZWRMaXN0UmVnZXggPSAvKFxcblxccyooXFwtfFxcKylcXHMuKikrL2c7XG4gICAgY29uc3Qgb3JkZXJlZExpc3RSZWdleCA9IC8oXFxuXFxzKihbMC05XStcXC4pXFxzLiopKy9nO1xuICAgIGNvbnN0IHBhcmFncmFwaFJlZ2V4ID0gL1xcbisoPyE8cHJlPikoPyE8aCkoPyE8dWw+KSg/ITxibG9ja3F1b3RlKSg/ITxocikoPyFcXHQpKFteXFxuXSspXFxuL2c7XG4gICAgLy8gZnJvbSBtYXJrZWRcbiAgICBjb25zdCB0YWJsZSA9XG4gICAgICAgIC9eXFxzKihbXlxcc10uKlxcfC4qKVxcc3swLDN9KD86XFx8XFxzKik/KDo/LSs6P1xccyooPzpcXHxcXHMqOj8tKzo/XFxzKikqKVxcfD8oPzpcXHMqKCg/Oig/IXxocnxoZWFkaW5nfGJsb2NrcXVvdGV8Y29kZXxmZW5jZXN8bGlzdHxodG1sKS4qKD86fCQpKSopKnwkKS9nO1xuICAgIGNvbnN0IHJlZ2V4cHMgPSBbXG4gICAgICAgIGlubGluZUNvZGVSZWdleCxcbiAgICAgICAgaW1hZ2VSZWdleCxcbiAgICAgICAgbGlua1JlZ2V4LFxuICAgICAgICBoZWFkaW5nUmVnZXgsXG4gICAgICAgIGJvbGRJdGFsaWNzUmVnZXgsXG4gICAgICAgIHN0cmlrZXRocm91Z2hSZWdleCxcbiAgICAgICAgYmxvY2txdW90ZVJlZ2V4LFxuICAgICAgICBob3Jpem9udGFsUnVsZVJlZ2V4LFxuICAgICAgICB1bm9yZGVyZWRMaXN0UmVnZXgsXG4gICAgICAgIG9yZGVyZWRMaXN0UmVnZXgsXG4gICAgICAgIHRhYmxlXG4gICAgXTtcbiAgICByZXR1cm4gcmVnZXhwcy5zb21lKHJlZ2V4cCA9PiByZWdleHAudGVzdChjb250ZW50KSk7XG59O1xuIl19
|