@talrace/ngx-noder 0.0.18 → 0.0.20
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/fesm2022/talrace-ngx-noder.mjs +181 -181
- package/fesm2022/talrace-ngx-noder.mjs.map +1 -1
- package/lib/apart-components/editor-toolbar/components/base-toolbar.component.d.ts +1 -1
- package/lib/editor/components/external-element/external.component.d.ts +1 -1
- package/lib/editor/components/shared/abstract/base.component.d.ts +1 -1
- package/lib/editor/components/shared/abstract/destroy.component.d.ts +1 -1
- package/package.json +1 -3
- package/src/lib/apart-components/add-link-dialog/_add-link-dialog.theme.scss +3 -6
- package/src/lib/apart-components/add-link-mobile/_add-link-mobile.theme.scss +4 -7
- package/src/lib/apart-components/confirm-dialog/_theme.scss +6 -9
- package/src/lib/apart-components/editor-title/_editor-title.theme.scss +6 -9
- package/src/lib/apart-components/editor-title-mobile/_editor-title-mobile.theme.scss +9 -12
- package/src/lib/apart-components/editor-toolbar/_editor-toolbar.theme.scss +5 -8
- package/src/lib/apart-components/editor-toolbar/components/buttons/color-picker/_color-picker.theme.scss +1 -3
- package/src/lib/apart-components/editor-toolbar/components/buttons/font/_font.theme.scss +1 -3
- package/src/lib/apart-components/editor-toolbar/components/buttons/font-size/_font-size.theme.scss +2 -5
- package/src/lib/apart-components/editor-toolbar/components/buttons/font-style/_font-style.theme.scss +3 -6
- package/src/lib/apart-components/editor-toolbar/components/buttons/format/_format.theme.scss +3 -6
- package/src/lib/apart-components/editor-toolbar/components/buttons/numbering/_numbering.theme.scss +15 -18
- package/src/lib/apart-components/editor-toolbar/components/buttons/undo-redo/_undo-redo.theme.scss +2 -4
- package/src/lib/apart-components/editor-toolbar/components/menu-dropdowns/_menu-dropdowns.theme.scss +5 -8
- package/src/lib/apart-components/editor-toolbar/components/menu-dropdowns-mobile/_menu-dropdowns-mobile.theme.scss +6 -9
- package/src/lib/apart-components/editor-toolbar/components/toolbar-actions/_toolbar-actions.theme.scss +3 -6
- package/src/lib/apart-components/insert-table/_insert-table.theme.scss +6 -9
- package/src/lib/apart-components/insert-table-mobile/_insert-table-mobile.theme.scss +12 -15
- package/src/lib/apart-components/text-format-mobile/_text-format-mobile.theme.scss +22 -25
- package/src/lib/editor/components/_editor.theme.scss +25 -28
- package/esm2022/lib/apart-components/add-link-dialog/add-link-dialog.component.mjs +0 -73
- package/esm2022/lib/apart-components/add-link-dialog/validation.helper.mjs +0 -7
- package/esm2022/lib/apart-components/add-link-mobile/add-link-mobile.component.mjs +0 -49
- package/esm2022/lib/apart-components/confirm-dialog/confirm-dialog.component.mjs +0 -34
- package/esm2022/lib/apart-components/editor-search/editor-search-dialog.component.mjs +0 -75
- package/esm2022/lib/apart-components/editor-title/editor-title.component.mjs +0 -95
- package/esm2022/lib/apart-components/editor-title-mobile/editor-title-mobile.component.mjs +0 -24
- package/esm2022/lib/apart-components/editor-toolbar/components/base-toolbar.component.mjs +0 -117
- package/esm2022/lib/apart-components/editor-toolbar/components/buttons/color-picker/color-picker.component.mjs +0 -37
- package/esm2022/lib/apart-components/editor-toolbar/components/buttons/font/font.component.mjs +0 -49
- package/esm2022/lib/apart-components/editor-toolbar/components/buttons/font-size/font-size.component.mjs +0 -90
- package/esm2022/lib/apart-components/editor-toolbar/components/buttons/font-style/font-style.component.mjs +0 -81
- package/esm2022/lib/apart-components/editor-toolbar/components/buttons/format/format.component.mjs +0 -28
- package/esm2022/lib/apart-components/editor-toolbar/components/buttons/numbering/numbering.component.mjs +0 -53
- package/esm2022/lib/apart-components/editor-toolbar/components/buttons/print/print.component.mjs +0 -18
- package/esm2022/lib/apart-components/editor-toolbar/components/buttons/undo-redo/undo-redo.component.mjs +0 -27
- package/esm2022/lib/apart-components/editor-toolbar/components/buttons/zoom/zoom.component.mjs +0 -71
- package/esm2022/lib/apart-components/editor-toolbar/components/menu-dropdowns/menu-dropdowns.component.mjs +0 -107
- package/esm2022/lib/apart-components/editor-toolbar/components/menu-dropdowns-mobile/menu-dropdowns-mobile.component.mjs +0 -25
- package/esm2022/lib/apart-components/editor-toolbar/components/toolbar-actions/toolbar-actions.component.mjs +0 -65
- package/esm2022/lib/apart-components/editor-toolbar/editor-mobile-toolbar/editor-mobile-toolbar.component.mjs +0 -86
- package/esm2022/lib/apart-components/editor-toolbar/editor-toolbar/editor-toolbar.component.mjs +0 -90
- package/esm2022/lib/apart-components/editor-toolbar/editor-toolbar.module.mjs +0 -122
- package/esm2022/lib/apart-components/editor-toolbar/shared/constants/editor-toolbar-modes.const.mjs +0 -8
- package/esm2022/lib/apart-components/editor-toolbar/shared/constants/numbering-templates.const.mjs +0 -1148
- package/esm2022/lib/apart-components/editor-toolbar/shared/constants/svg-icons.const.mjs +0 -157
- package/esm2022/lib/apart-components/editor-toolbar/shared/enums/alignment.enum.mjs +0 -8
- package/esm2022/lib/apart-components/editor-toolbar/shared/enums/editor-toolbar-mode.enum.mjs +0 -11
- package/esm2022/lib/apart-components/editor-toolbar/shared/enums/numbering-template-type.enum.mjs +0 -16
- package/esm2022/lib/apart-components/editor-toolbar/shared/enums/numbering-type.enum.mjs +0 -6
- package/esm2022/lib/apart-components/editor-toolbar/shared/services/custom-icon.service.mjs +0 -34
- package/esm2022/lib/apart-components/editor-toolbar/shared/services/editor-toolbar.service.mjs +0 -26
- package/esm2022/lib/apart-components/editor-toolbar/shared/services/toolbar-core.service.mjs +0 -60
- package/esm2022/lib/apart-components/editor-toolbar/shared/toolbar-styles.helper.mjs +0 -48
- package/esm2022/lib/apart-components/insert-table/insert-table.component.mjs +0 -54
- package/esm2022/lib/apart-components/insert-table-mobile/insert-table-mobile.component.mjs +0 -86
- package/esm2022/lib/apart-components/text-format-mobile/text-format-mobile.component.mjs +0 -134
- package/esm2022/lib/editor/components/edges/edge-element.model.mjs +0 -38
- package/esm2022/lib/editor/components/edges/edge-type.enum.mjs +0 -6
- package/esm2022/lib/editor/components/edges/edge.component.mjs +0 -141
- package/esm2022/lib/editor/components/edges/edges.mjs +0 -120
- package/esm2022/lib/editor/components/edges/page-type.enum.mjs +0 -7
- package/esm2022/lib/editor/components/editor.component.mjs +0 -112
- package/esm2022/lib/editor/components/external-element/external-element.service.mjs +0 -6
- package/esm2022/lib/editor/components/external-element/external-elements.const.mjs +0 -4
- package/esm2022/lib/editor/components/external-element/external-sidenav.interface.mjs +0 -2
- package/esm2022/lib/editor/components/external-element/external.component.mjs +0 -41
- package/esm2022/lib/editor/components/external-element/models/element-data.model.mjs +0 -9
- package/esm2022/lib/editor/components/external-element/models/external-element.model.mjs +0 -11
- package/esm2022/lib/editor/components/external-element/models/external-sidenav.model.mjs +0 -15
- package/esm2022/lib/editor/components/image/components/image.component.mjs +0 -88
- package/esm2022/lib/editor/components/image/image-api.service.mjs +0 -36
- package/esm2022/lib/editor/components/image/input-handler/image-input.handler.mjs +0 -46
- package/esm2022/lib/editor/components/image/resizer/coordinate.mjs +0 -2
- package/esm2022/lib/editor/components/image/resizer/direction-wrapper.mjs +0 -19
- package/esm2022/lib/editor/components/image/resizer/direction.enum.mjs +0 -12
- package/esm2022/lib/editor/components/image/resizer/resizer.component.mjs +0 -106
- package/esm2022/lib/editor/components/image/resizer/size-delta.mjs +0 -2
- package/esm2022/lib/editor/components/image/resizer/size-wrapper.mjs +0 -52
- package/esm2022/lib/editor/components/image/size.mjs +0 -2
- package/esm2022/lib/editor/components/shared/abstract/base.component.mjs +0 -60
- package/esm2022/lib/editor/components/shared/abstract/destroy.component.mjs +0 -18
- package/esm2022/lib/editor/components/shared/custom-component.hepler.mjs +0 -43
- package/esm2022/lib/editor/components/shared/custom-components.interface.mjs +0 -2
- package/esm2022/lib/editor/components/shared/custom-content-markers.const.mjs +0 -3
- package/esm2022/lib/editor/components/shared/custom-content.mjs +0 -2
- package/esm2022/lib/editor/components/shared/services/component.service.mjs +0 -52
- package/esm2022/lib/editor/components/shared/services/custom-content.service.mjs +0 -123
- package/esm2022/lib/editor/components/shared/services/overlay.service.mjs +0 -55
- package/esm2022/lib/editor/components/tab/tab.component.mjs +0 -44
- package/esm2022/lib/editor/components/tab/tab.helper.mjs +0 -6
- package/esm2022/lib/editor/components/table/cell-resizer/cell-resizer.mjs +0 -118
- package/esm2022/lib/editor/components/table/components/table-cell.component.mjs +0 -99
- package/esm2022/lib/editor/components/table/components/table.component.mjs +0 -412
- package/esm2022/lib/editor/components/table/enums/hrule.enum.mjs +0 -7
- package/esm2022/lib/editor/components/table/enums/reisizer-side.enum.mjs +0 -8
- package/esm2022/lib/editor/components/table/enums/vertical-merge.enum.mjs +0 -6
- package/esm2022/lib/editor/components/table/models/cell-data.model.mjs +0 -17
- package/esm2022/lib/editor/components/table/models/cell-resizer-parameters.model.mjs +0 -9
- package/esm2022/lib/editor/components/table/models/row-data.model.mjs +0 -8
- package/esm2022/lib/editor/components/table/models/selection-range.model.mjs +0 -7
- package/esm2022/lib/editor/components/table/overlay-menu/overlay-menu.component.mjs +0 -84
- package/esm2022/lib/editor/components/table/selection/table-selection.mjs +0 -383
- package/esm2022/lib/editor/content/constants/display-values.const.mjs +0 -8
- package/esm2022/lib/editor/content/constants/document-info.const.mjs +0 -13
- package/esm2022/lib/editor/content/constants/editor.const.mjs +0 -70
- package/esm2022/lib/editor/content/contents.interface.mjs +0 -2
- package/esm2022/lib/editor/content/display-data/display-data.mjs +0 -839
- package/esm2022/lib/editor/content/display-data/display-token.model.mjs +0 -12
- package/esm2022/lib/editor/content/display-data/format-ext.model.mjs +0 -10
- package/esm2022/lib/editor/content/display-data/general-properties.model.mjs +0 -11
- package/esm2022/lib/editor/content/display-data/indent.model.mjs +0 -9
- package/esm2022/lib/editor/content/display-data/line-info.model.mjs +0 -9
- package/esm2022/lib/editor/content/display-data/lines.mjs +0 -96
- package/esm2022/lib/editor/content/display-data/models/paragraph-info.model.mjs +0 -8
- package/esm2022/lib/editor/content/display-data/paragraph-info.interface.mjs +0 -2
- package/esm2022/lib/editor/content/display-data/paragraph.mjs +0 -56
- package/esm2022/lib/editor/content/display-data/text-line-info.mjs +0 -35
- package/esm2022/lib/editor/content/display-data/toolbar-styles.interface.mjs +0 -2
- package/esm2022/lib/editor/content/helpers/content-style.helper.mjs +0 -78
- package/esm2022/lib/editor/content/helpers/display-token.helper.mjs +0 -62
- package/esm2022/lib/editor/content/helpers/format.helper.mjs +0 -23
- package/esm2022/lib/editor/content/helpers/indexed-element.helper.mjs +0 -6
- package/esm2022/lib/editor/content/helpers/link.helper.mjs +0 -42
- package/esm2022/lib/editor/content/helpers/scaling.helper.mjs +0 -9
- package/esm2022/lib/editor/content/margin.model.mjs +0 -16
- package/esm2022/lib/editor/content/page-vertical-data.model.mjs +0 -9
- package/esm2022/lib/editor/content/vertical-alignment.enum.mjs +0 -11
- package/esm2022/lib/editor/core/event-emitting.mjs +0 -56
- package/esm2022/lib/editor/display/cell.interface.mjs +0 -2
- package/esm2022/lib/editor/display/event.helper.mjs +0 -18
- package/esm2022/lib/editor/display/layers/cursor.layer.mjs +0 -102
- package/esm2022/lib/editor/display/layers/layer.config.mjs +0 -2
- package/esm2022/lib/editor/display/layers/pages.layer.mjs +0 -109
- package/esm2022/lib/editor/display/layers/print.pages.layer.mjs +0 -7
- package/esm2022/lib/editor/display/layers/print.text.layer.mjs +0 -7
- package/esm2022/lib/editor/display/layers/selection.layer.mjs +0 -119
- package/esm2022/lib/editor/display/layers/text.layer.mjs +0 -226
- package/esm2022/lib/editor/display/print/print.helper.mjs +0 -40
- package/esm2022/lib/editor/display/print/print.renderer.mjs +0 -67
- package/esm2022/lib/editor/display/print/print.rendering.helper.mjs +0 -7
- package/esm2022/lib/editor/display/render-changes.interface.mjs +0 -2
- package/esm2022/lib/editor/display/render-changes.model.mjs +0 -25
- package/esm2022/lib/editor/display/renderer.mjs +0 -204
- package/esm2022/lib/editor/display/rendering.helper.mjs +0 -185
- package/esm2022/lib/editor/display/renderloop.mjs +0 -26
- package/esm2022/lib/editor/display/virtual.renderer.mjs +0 -284
- package/esm2022/lib/editor/display/visible-range.interface.mjs +0 -2
- package/esm2022/lib/editor/editor.module.mjs +0 -91
- package/esm2022/lib/editor/execution/distance.model.mjs +0 -10
- package/esm2022/lib/editor/execution/edit.session.mjs +0 -602
- package/esm2022/lib/editor/execution/editor.mjs +0 -1368
- package/esm2022/lib/editor/execution/helpers/dom.helper.mjs +0 -42
- package/esm2022/lib/editor/execution/helpers/format-style.helper.mjs +0 -73
- package/esm2022/lib/editor/execution/helpers/image.helpet.mjs +0 -12
- package/esm2022/lib/editor/execution/helpers/page.helper.mjs +0 -12
- package/esm2022/lib/editor/execution/helpers/paragraph-style.helper.mjs +0 -41
- package/esm2022/lib/editor/execution/helpers/paragraph.helper.mjs +0 -177
- package/esm2022/lib/editor/execution/regulator.service.mjs +0 -212
- package/esm2022/lib/editor/execution/targeting/cell-session-source.model.mjs +0 -18
- package/esm2022/lib/editor/execution/targeting/edge-session-source.model.mjs +0 -14
- package/esm2022/lib/editor/execution/targeting/main-session-source.model.mjs +0 -8
- package/esm2022/lib/editor/execution/targeting/session-source.model.mjs +0 -3
- package/esm2022/lib/editor/execution/targeting/session.model.mjs +0 -10
- package/esm2022/lib/editor/gadgets/font-metrics/editor-version.const.mjs +0 -2
- package/esm2022/lib/editor/gadgets/font-metrics/font-metric-size.interface.mjs +0 -2
- package/esm2022/lib/editor/gadgets/font-metrics/font-metrics.helper.mjs +0 -88
- package/esm2022/lib/editor/gadgets/history/operation-history.mjs +0 -208
- package/esm2022/lib/editor/gadgets/history/operation.type.mjs +0 -2
- package/esm2022/lib/editor/gadgets/history/operations-history-info.model.mjs +0 -7
- package/esm2022/lib/editor/gadgets/numbering/numbering-data.model.mjs +0 -9
- package/esm2022/lib/editor/gadgets/numbering/numbering-marker-type.enum.mjs +0 -12
- package/esm2022/lib/editor/gadgets/numbering/numbering-paragraph-style.model.mjs +0 -13
- package/esm2022/lib/editor/gadgets/numbering/numbering.helper.mjs +0 -149
- package/esm2022/lib/editor/gadgets/page-break/break-types.enum.mjs +0 -7
- package/esm2022/lib/editor/gadgets/page-break/break.helper.mjs +0 -18
- package/esm2022/lib/editor/gadgets/scrollbar.mjs +0 -86
- package/esm2022/lib/editor/gadgets/search/replace.interface.mjs +0 -2
- package/esm2022/lib/editor/gadgets/search/search-iteration.interface.mjs +0 -2
- package/esm2022/lib/editor/gadgets/search/search.mjs +0 -231
- package/esm2022/lib/editor/gadgets/unicode/unicode-chars.const.mjs +0 -5
- package/esm2022/lib/editor/gadgets/unicode/unicode.helper.mjs +0 -20
- package/esm2022/lib/editor/interaction/base.handler.mjs +0 -19
- package/esm2022/lib/editor/interaction/document.handler.mjs +0 -27
- package/esm2022/lib/editor/interaction/editor.service.mjs +0 -386
- package/esm2022/lib/editor/interaction/input.handler.mjs +0 -152
- package/esm2022/lib/editor/interaction/mode.enum.mjs +0 -7
- package/esm2022/lib/editor/interaction/mouse-button.enum.mjs +0 -7
- package/esm2022/lib/editor/interaction/mouse.handler.mjs +0 -50
- package/esm2022/lib/editor/interaction/text-input.mjs +0 -53
- package/esm2022/lib/editor/operations/commands.service.mjs +0 -20
- package/esm2022/lib/editor/operations/enums/command-type.enum.mjs +0 -32
- package/esm2022/lib/editor/operations/enums/target-type.enum.mjs +0 -7
- package/esm2022/lib/editor/operations/helpers/break-operations.helper.mjs +0 -9
- package/esm2022/lib/editor/operations/helpers/content-operations.helper.mjs +0 -15
- package/esm2022/lib/editor/operations/helpers/format-operations.helper.mjs +0 -85
- package/esm2022/lib/editor/operations/helpers/image-operations.helper.mjs +0 -19
- package/esm2022/lib/editor/operations/helpers/indexed-element-operations.helper.mjs +0 -43
- package/esm2022/lib/editor/operations/helpers/link-operations.helper.mjs +0 -136
- package/esm2022/lib/editor/operations/helpers/numbering-operations.helper.mjs +0 -55
- package/esm2022/lib/editor/operations/helpers/paragraph-operations.helper.mjs +0 -114
- package/esm2022/lib/editor/operations/helpers/tab-operations.helper.mjs +0 -16
- package/esm2022/lib/editor/operations/helpers/table-operations.helper.mjs +0 -374
- package/esm2022/lib/editor/operations/operations-helper.helper.mjs +0 -438
- package/esm2022/lib/editor/operations/save-commands.helper.mjs +0 -128
- package/esm2022/lib/editor/operations/target-operations.helper.mjs +0 -23
- package/esm2022/lib/editor/positioning/alignments.const.mjs +0 -8
- package/esm2022/lib/editor/positioning/content.helper.mjs +0 -45
- package/esm2022/lib/editor/positioning/cursor-paragraph.mjs +0 -13
- package/esm2022/lib/editor/positioning/cursor-position.interface.mjs +0 -2
- package/esm2022/lib/editor/positioning/insert-index.interface.mjs +0 -2
- package/esm2022/lib/editor/positioning/line-width.helper.mjs +0 -13
- package/esm2022/lib/editor/positioning/position.helper.mjs +0 -210
- package/esm2022/lib/editor/positioning/range.mjs +0 -94
- package/esm2022/lib/editor/positioning/selection.mjs +0 -351
- package/esm2022/lib/editor/revision.helper.mjs +0 -94
- package/esm2022/lib/models/generated/add-numbering.model.mjs +0 -8
- package/esm2022/lib/models/generated/apply-element-style.model.mjs +0 -8
- package/esm2022/lib/models/generated/apply-image-style.model.mjs +0 -8
- package/esm2022/lib/models/generated/apply-paragraph-style.model.mjs +0 -12
- package/esm2022/lib/models/generated/apply-text-style.model.mjs +0 -12
- package/esm2022/lib/models/generated/borders-style.model.mjs +0 -8
- package/esm2022/lib/models/generated/break.model.mjs +0 -8
- package/esm2022/lib/models/generated/cell.model.mjs +0 -12
- package/esm2022/lib/models/generated/column-section.model.mjs +0 -8
- package/esm2022/lib/models/generated/column.model.mjs +0 -8
- package/esm2022/lib/models/generated/command.model.mjs +0 -120
- package/esm2022/lib/models/generated/delete.model.mjs +0 -8
- package/esm2022/lib/models/generated/document-name.model.mjs +0 -8
- package/esm2022/lib/models/generated/document.model.mjs +0 -8
- package/esm2022/lib/models/generated/docx.model.mjs +0 -12
- package/esm2022/lib/models/generated/edge-target.model.mjs +0 -8
- package/esm2022/lib/models/generated/edge.model.mjs +0 -8
- package/esm2022/lib/models/generated/element.model.mjs +0 -8
- package/esm2022/lib/models/generated/file-source.model.mjs +0 -8
- package/esm2022/lib/models/generated/format.model.mjs +0 -12
- package/esm2022/lib/models/generated/heading.model.mjs +0 -16
- package/esm2022/lib/models/generated/image-data.model.mjs +0 -8
- package/esm2022/lib/models/generated/image.model.mjs +0 -12
- package/esm2022/lib/models/generated/insert-break.model.mjs +0 -8
- package/esm2022/lib/models/generated/insert-element.model.mjs +0 -12
- package/esm2022/lib/models/generated/insert-image.model.mjs +0 -12
- package/esm2022/lib/models/generated/insert-link.model.mjs +0 -12
- package/esm2022/lib/models/generated/insert-paragraph.model.mjs +0 -20
- package/esm2022/lib/models/generated/insert-styled-text.model.mjs +0 -12
- package/esm2022/lib/models/generated/insert-tab.model.mjs +0 -8
- package/esm2022/lib/models/generated/insert-table-columns.model.mjs +0 -8
- package/esm2022/lib/models/generated/insert-table-rows.model.mjs +0 -8
- package/esm2022/lib/models/generated/insert-table.model.mjs +0 -8
- package/esm2022/lib/models/generated/insert-text.model.mjs +0 -8
- package/esm2022/lib/models/generated/last-document-revision.model.mjs +0 -12
- package/esm2022/lib/models/generated/link-data.model.mjs +0 -8
- package/esm2022/lib/models/generated/link.model.mjs +0 -8
- package/esm2022/lib/models/generated/margins.model.mjs +0 -8
- package/esm2022/lib/models/generated/numbering-level.model.mjs +0 -12
- package/esm2022/lib/models/generated/numbering.model.mjs +0 -8
- package/esm2022/lib/models/generated/operation.model.mjs +0 -12
- package/esm2022/lib/models/generated/page-numbers.model.mjs +0 -8
- package/esm2022/lib/models/generated/paragraph-style.model.mjs +0 -8
- package/esm2022/lib/models/generated/paragraph.model.mjs +0 -12
- package/esm2022/lib/models/generated/remove-numberings.model.mjs +0 -8
- package/esm2022/lib/models/generated/remove-table-columns.model.mjs +0 -8
- package/esm2022/lib/models/generated/remove-table-rows.model.mjs +0 -8
- package/esm2022/lib/models/generated/replace-by-text.model.mjs +0 -8
- package/esm2022/lib/models/generated/replace.model.mjs +0 -44
- package/esm2022/lib/models/generated/resize-table-columns.model.mjs +0 -8
- package/esm2022/lib/models/generated/restore-numberings.model.mjs +0 -8
- package/esm2022/lib/models/generated/restore-paragraph-styles.model.mjs +0 -8
- package/esm2022/lib/models/generated/restore-table.model.mjs +0 -12
- package/esm2022/lib/models/generated/restore-text-styles.model.mjs +0 -8
- package/esm2022/lib/models/generated/restore.model.mjs +0 -8
- package/esm2022/lib/models/generated/revision.model.mjs +0 -12
- package/esm2022/lib/models/generated/row.model.mjs +0 -8
- package/esm2022/lib/models/generated/tab.model.mjs +0 -8
- package/esm2022/lib/models/generated/table-cell.model.mjs +0 -8
- package/esm2022/lib/models/generated/table.model.mjs +0 -12
- package/esm2022/lib/models/generated/target.model.mjs +0 -16
- package/esm2022/lib/models/generated/text-style.model.mjs +0 -8
- package/esm2022/lib/translate/noder-translate.loader.mjs +0 -22
- package/esm2022/public-api.mjs +0 -54
- package/esm2022/talrace-ngx-noder.mjs +0 -5
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
import { CursorParagraph } from './cursor-paragraph';
|
|
2
|
-
import { PositionHelper } from './position.helper';
|
|
3
|
-
export class Range {
|
|
4
|
-
get isEmpty() {
|
|
5
|
-
return this.isSingleLine && this.start.column === this.end.column;
|
|
6
|
-
}
|
|
7
|
-
get isSingleLine() {
|
|
8
|
-
return this.start.row === this.end.row;
|
|
9
|
-
}
|
|
10
|
-
constructor(start, end) {
|
|
11
|
-
this.start = start;
|
|
12
|
-
this.end = end;
|
|
13
|
-
}
|
|
14
|
-
isEqual(range) {
|
|
15
|
-
return (this.start.row === range.start.row &&
|
|
16
|
-
this.end.row === range.end.row &&
|
|
17
|
-
this.start.column === range.start.column &&
|
|
18
|
-
this.end.column === range.end.column);
|
|
19
|
-
}
|
|
20
|
-
contains(position) {
|
|
21
|
-
return this.comparePosition(position) === 0;
|
|
22
|
-
}
|
|
23
|
-
comparePosition(position) {
|
|
24
|
-
const compare = this.compareSingleLine(position);
|
|
25
|
-
return compare ?? this.compareMultiLine(position);
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Given the current `Range`,
|
|
29
|
-
* this function converts those starting and ending cursor positions into screen positions, and then returns a new `Range` object.
|
|
30
|
-
* @param {EditSession} session The `EditSession` to retrieve coordinates from
|
|
31
|
-
* @returns {Range}
|
|
32
|
-
**/
|
|
33
|
-
toScreenRange(session) {
|
|
34
|
-
const screenPosStart = PositionHelper.documentToScreen(session, this.start.row, this.start.column);
|
|
35
|
-
const screenPosEnd = PositionHelper.documentToScreen(session, this.end.row, this.end.column);
|
|
36
|
-
return new Range(screenPosStart, screenPosEnd);
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Returns the part of the current `Range` that occurs within the boundaries of `firstRow` and `lastRow` as a new `Range` object.
|
|
40
|
-
* @param {Number} firstRow The starting row
|
|
41
|
-
* @param {Number} lastRow The ending row
|
|
42
|
-
* @returns {CursorParagraph}
|
|
43
|
-
**/
|
|
44
|
-
clipRows(firstRow, lastRow) {
|
|
45
|
-
let end;
|
|
46
|
-
if (this.end.row > lastRow) {
|
|
47
|
-
end = new CursorParagraph(lastRow + 1, 0);
|
|
48
|
-
}
|
|
49
|
-
else if (this.end.row < firstRow) {
|
|
50
|
-
end = new CursorParagraph(firstRow, 0);
|
|
51
|
-
}
|
|
52
|
-
let start;
|
|
53
|
-
if (this.start.row > lastRow) {
|
|
54
|
-
start = new CursorParagraph(lastRow + 1, 0);
|
|
55
|
-
}
|
|
56
|
-
else if (this.start.row < firstRow) {
|
|
57
|
-
start = new CursorParagraph(firstRow, 0);
|
|
58
|
-
}
|
|
59
|
-
return new Range(start || this.start, end || this.end);
|
|
60
|
-
}
|
|
61
|
-
compareSingleLine(position) {
|
|
62
|
-
if (!this.isSingleLine) {
|
|
63
|
-
return null;
|
|
64
|
-
}
|
|
65
|
-
if (position.row === this.start.row) {
|
|
66
|
-
if (position.column < this.start.column) {
|
|
67
|
-
return -1;
|
|
68
|
-
}
|
|
69
|
-
else if (position.column > this.end.column) {
|
|
70
|
-
return 1;
|
|
71
|
-
}
|
|
72
|
-
else {
|
|
73
|
-
return 0;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
return null;
|
|
77
|
-
}
|
|
78
|
-
compareMultiLine(position) {
|
|
79
|
-
if (this.start.row === position.row) {
|
|
80
|
-
return position.column >= this.start.column ? 0 : -1;
|
|
81
|
-
}
|
|
82
|
-
if (this.end.row === position.row) {
|
|
83
|
-
return position.column <= this.end.column ? 0 : 1;
|
|
84
|
-
}
|
|
85
|
-
if (position.row < this.start.row) {
|
|
86
|
-
return -1;
|
|
87
|
-
}
|
|
88
|
-
if (position.row > this.end.row) {
|
|
89
|
-
return 1;
|
|
90
|
-
}
|
|
91
|
-
return 0;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbm9kZXIvc3JjL2xpYi9lZGl0b3IvcG9zaXRpb25pbmcvcmFuZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXJELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVuRCxNQUFNLE9BQU8sS0FBSztJQU1kLElBQUksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztJQUN0RSxDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ1osT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztJQUMzQyxDQUFDO0lBRUQsWUFBWSxLQUFzQixFQUFFLEdBQW9CO1FBQ3BELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ25CLENBQUM7SUFFTSxPQUFPLENBQUMsS0FBK0Q7UUFDMUUsT0FBTyxDQUNILElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRztZQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUc7WUFDOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQ3hDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUN2QyxDQUFDO0lBQ04sQ0FBQztJQUVELFFBQVEsQ0FBQyxRQUF5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QUVELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUMvQixPQUFPLFFBQVEsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3JEO1FBRUQsSUFBSSxRQUFRLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFO1lBQy9CLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDYjtRQUVELElBQUksUUFBUSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUM3QixPQUFPLENBQUMsQ0FBQztTQUNaO1FBRUQsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDdXJzb3JQYXJhZ3JhcGggfSBmcm9tICcuL2N1cnNvci1wYXJhZ3JhcGgnO1xuaW1wb3J0IHsgRWRpdFNlc3Npb24gfSBmcm9tICcuLi9leGVjdXRpb24vZWRpdC5zZXNzaW9uJztcbmltcG9ydCB7IFBvc2l0aW9uSGVscGVyIH0gZnJvbSAnLi9wb3NpdGlvbi5oZWxwZXInO1xuXG5leHBvcnQgY2xhc3MgUmFuZ2Uge1xuICAgIHN0YXJ0OiBDdXJzb3JQYXJhZ3JhcGg7XG4gICAgZW5kOiBDdXJzb3JQYXJhZ3JhcGg7XG5cbiAgICBjdXJzb3I6IEN1cnNvclBhcmFncmFwaDtcblxuICAgIGdldCBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1NpbmdsZUxpbmUgJiYgdGhpcy5zdGFydC5jb2x1bW4gPT09IHRoaXMuZW5kLmNvbHVtbjtcbiAgICB9XG5cbiAgICBnZXQgaXNTaW5nbGVMaW5lKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGFydC5yb3cgPT09IHRoaXMuZW5kLnJvdztcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihzdGFydDogQ3Vyc29yUGFyYWdyYXBoLCBlbmQ6IEN1cnNvclBhcmFncmFwaCkge1xuICAgICAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG4gICAgICAgIHRoaXMuZW5kID0gZW5kO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0VxdWFsKHJhbmdlOiBSYW5nZSB8IHsgc3RhcnQ6IEN1cnNvclBhcmFncmFwaDsgZW5kOiBDdXJzb3JQYXJhZ3JhcGggfSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5zdGFydC5yb3cgPT09IHJhbmdlLnN0YXJ0LnJvdyAmJlxuICAgICAgICAgICAgdGhpcy5lbmQucm93ID09PSByYW5nZS5lbmQucm93ICYmXG4gICAgICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiA9PT0gcmFuZ2Uuc3RhcnQuY29sdW1uICYmXG4gICAgICAgICAgICB0aGlzLmVuZC5jb2x1bW4gPT09IHJhbmdlLmVuZC5jb2x1bW5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBjb250YWlucyhwb3NpdGlvbjogQ3Vyc29yUGFyYWdyYXBoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmVQb3NpdGlvbihwb3NpdGlvbikgPT09IDA7XG4gICAgfVxuXG4gICAgY29tcGFyZVBvc2l0aW9uKHBvc2l0aW9uOiBDdXJzb3JQYXJhZ3JhcGgpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBjb21wYXJlID0gdGhpcy5jb21wYXJlU2luZ2xlTGluZShwb3NpdGlvbik7XG5cbiAgICAgICAgcmV0dXJuIGNvbXBhcmUgPz8gdGhpcy5jb21wYXJlTXVsdGlMaW5lKHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiB0aGUgY3VycmVudCBgUmFuZ2VgLFxuICAgICAqIHRoaXMgZnVuY3Rpb24gY29udmVydHMgdGhvc2Ugc3RhcnRpbmcgYW5kIGVuZGluZyBjdXJzb3IgcG9zaXRpb25zIGludG8gc2NyZWVuIHBvc2l0aW9ucywgYW5kIHRoZW4gcmV0dXJucyBhIG5ldyBgUmFuZ2VgIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge0VkaXRTZXNzaW9ufSBzZXNzaW9uIFRoZSBgRWRpdFNlc3Npb25gIHRvIHJldHJpZXZlIGNvb3JkaW5hdGVzIGZyb21cbiAgICAgKiBAcmV0dXJucyB7UmFuZ2V9XG4gICAgICoqL1xuICAgIHRvU2NyZWVuUmFuZ2Uoc2Vzc2lvbjogRWRpdFNlc3Npb24pOiBSYW5nZSB7XG4gICAgICAgIGNvbnN0IHNjcmVlblBvc1N0YXJ0ID0gUG9zaXRpb25IZWxwZXIuZG9jdW1lbnRUb1NjcmVlbihzZXNzaW9uLCB0aGlzLnN0YXJ0LnJvdywgdGhpcy5zdGFydC5jb2x1bW4pO1xuICAgICAgICBjb25zdCBzY3JlZW5Qb3NFbmQgPSBQb3NpdGlvbkhlbHBlci5kb2N1bWVudFRvU2NyZWVuKHNlc3Npb24sIHRoaXMuZW5kLnJvdywgdGhpcy5lbmQuY29sdW1uKTtcblxuICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHNjcmVlblBvc1N0YXJ0LCBzY3JlZW5Qb3NFbmQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHBhcnQgb2YgdGhlIGN1cnJlbnQgYFJhbmdlYCB0aGF0IG9jY3VycyB3aXRoaW4gdGhlIGJvdW5kYXJpZXMgb2YgYGZpcnN0Um93YCBhbmQgYGxhc3RSb3dgIGFzIGEgbmV3IGBSYW5nZWAgb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBmaXJzdFJvdyBUaGUgc3RhcnRpbmcgcm93XG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IGxhc3RSb3cgVGhlIGVuZGluZyByb3dcbiAgICAgKiBAcmV0dXJucyB7Q3Vyc29yUGFyYWdyYXBofVxuICAgICAqKi9cbiAgICBjbGlwUm93cyhmaXJzdFJvdzogbnVtYmVyLCBsYXN0Um93OiBudW1iZXIpOiBSYW5nZSB7XG4gICAgICAgIGxldCBlbmQ6IEN1cnNvclBhcmFncmFwaDtcbiAgICAgICAgaWYgKHRoaXMuZW5kLnJvdyA+IGxhc3RSb3cpIHtcbiAgICAgICAgICAgIGVuZCA9IG5ldyBDdXJzb3JQYXJhZ3JhcGgobGFzdFJvdyArIDEsIDApO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZW5kLnJvdyA8IGZpcnN0Um93KSB7XG4gICAgICAgICAgICBlbmQgPSBuZXcgQ3Vyc29yUGFyYWdyYXBoKGZpcnN0Um93LCAwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzdGFydDogQ3Vyc29yUGFyYWdyYXBoO1xuICAgICAgICBpZiAodGhpcy5zdGFydC5yb3cgPiBsYXN0Um93KSB7XG4gICAgICAgICAgICBzdGFydCA9IG5ldyBDdXJzb3JQYXJhZ3JhcGgobGFzdFJvdyArIDEsIDApO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3RhcnQucm93IDwgZmlyc3RSb3cpIHtcbiAgICAgICAgICAgIHN0YXJ0ID0gbmV3IEN1cnNvclBhcmFncmFwaChmaXJzdFJvdywgMCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0IHx8IHRoaXMuc3RhcnQsIGVuZCB8fCB0aGlzLmVuZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb21wYXJlU2luZ2xlTGluZShwb3NpdGlvbjogQ3Vyc29yUGFyYWdyYXBoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzU2luZ2xlTGluZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocG9zaXRpb24ucm93ID09PSB0aGlzLnN0YXJ0LnJvdykge1xuICAgICAgICAgICAgaWYgKHBvc2l0aW9uLmNvbHVtbiA8IHRoaXMuc3RhcnQuY29sdW1uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwb3NpdGlvbi5jb2x1bW4gPiB0aGlzLmVuZC5jb2x1bW4pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbXBhcmVNdWx0aUxpbmUocG9zaXRpb246IEN1cnNvclBhcmFncmFwaCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLnN0YXJ0LnJvdyA9PT0gcG9zaXRpb24ucm93KSB7XG4gICAgICAgICAgICByZXR1cm4gcG9zaXRpb24uY29sdW1uID49IHRoaXMuc3RhcnQuY29sdW1uID8gMCA6IC0xO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZW5kLnJvdyA9PT0gcG9zaXRpb24ucm93KSB7XG4gICAgICAgICAgICByZXR1cm4gcG9zaXRpb24uY29sdW1uIDw9IHRoaXMuZW5kLmNvbHVtbiA/IDAgOiAxO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uLnJvdyA8IHRoaXMuc3RhcnQucm93KSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocG9zaXRpb24ucm93ID4gdGhpcy5lbmQucm93KSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -1,351 +0,0 @@
|
|
|
1
|
-
import { ContentHelper } from './content.helper';
|
|
2
|
-
import { CursorParagraph } from './cursor-paragraph';
|
|
3
|
-
import { PositionHelper } from './position.helper';
|
|
4
|
-
import { Range } from './range';
|
|
5
|
-
export class Selection {
|
|
6
|
-
constructor() {
|
|
7
|
-
this.anchor = null;
|
|
8
|
-
this.cursor = new CursorParagraph(0, 0);
|
|
9
|
-
this.isDisabled = false;
|
|
10
|
-
this.focusedComponent = null;
|
|
11
|
-
this.keepLinePositionX = null;
|
|
12
|
-
}
|
|
13
|
-
get isFocused() {
|
|
14
|
-
return !!this.focusedComponent;
|
|
15
|
-
}
|
|
16
|
-
get isEmpty() {
|
|
17
|
-
return this.anchor === null || (this.anchor.row === this.cursor.row && this.anchor.column === this.cursor.column);
|
|
18
|
-
}
|
|
19
|
-
get isBackwards() {
|
|
20
|
-
return this.anchor.row > this.cursor.row || (this.anchor.row === this.cursor.row && this.anchor.column > this.cursor.column);
|
|
21
|
-
}
|
|
22
|
-
get selectedRange() {
|
|
23
|
-
if (!this.focusedComponent) {
|
|
24
|
-
return this.range;
|
|
25
|
-
}
|
|
26
|
-
const cursor = new CursorParagraph(this.cursor.row, this.cursor.column);
|
|
27
|
-
return new Range(cursor, cursor);
|
|
28
|
-
}
|
|
29
|
-
get range() {
|
|
30
|
-
const cursor = new CursorParagraph(this.cursor.row, this.cursor.column);
|
|
31
|
-
if (this.isEmpty) {
|
|
32
|
-
return new Range(cursor, cursor);
|
|
33
|
-
}
|
|
34
|
-
const anchor = new CursorParagraph(this.anchor.row, this.anchor.column);
|
|
35
|
-
return this.isBackwards ? new Range(cursor, anchor) : new Range(anchor, cursor);
|
|
36
|
-
}
|
|
37
|
-
focus(component, position) {
|
|
38
|
-
if (component === this.focusedComponent) {
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
|
-
this.focusedComponent?.instance.blur();
|
|
42
|
-
component.instance.focus();
|
|
43
|
-
this.focusedComponent = component;
|
|
44
|
-
this.cursor = position;
|
|
45
|
-
this.anchor = new CursorParagraph(position.row, position.column + 1);
|
|
46
|
-
this.keepLinePositionX = null;
|
|
47
|
-
}
|
|
48
|
-
blur() {
|
|
49
|
-
this.focusedComponent?.instance.blur();
|
|
50
|
-
this.focusedComponent = null;
|
|
51
|
-
}
|
|
52
|
-
placeCursor(cursor) {
|
|
53
|
-
this.cursor = cursor;
|
|
54
|
-
this.anchor = null;
|
|
55
|
-
this.keepLinePositionX = null;
|
|
56
|
-
this.focusedComponent?.instance.blur();
|
|
57
|
-
this.focusedComponent = null;
|
|
58
|
-
}
|
|
59
|
-
moveCursor(cursor) {
|
|
60
|
-
this.cursor = cursor;
|
|
61
|
-
this.keepLinePositionX = null;
|
|
62
|
-
this.focusedComponent?.instance.blur();
|
|
63
|
-
this.focusedComponent = null;
|
|
64
|
-
}
|
|
65
|
-
placeSelection(cursor, anchor) {
|
|
66
|
-
this.cursor = cursor;
|
|
67
|
-
this.anchor = anchor;
|
|
68
|
-
this.keepLinePositionX = null;
|
|
69
|
-
this.focusedComponent?.instance.blur();
|
|
70
|
-
this.focusedComponent = null;
|
|
71
|
-
}
|
|
72
|
-
moveSelection(position) {
|
|
73
|
-
if (!this.anchor) {
|
|
74
|
-
this.anchor = this.cursor;
|
|
75
|
-
}
|
|
76
|
-
this.moveCursor(position);
|
|
77
|
-
}
|
|
78
|
-
clearSelection() {
|
|
79
|
-
this.anchor = null;
|
|
80
|
-
this.keepLinePositionX = null;
|
|
81
|
-
this.focusedComponent?.instance.blur();
|
|
82
|
-
this.focusedComponent = null;
|
|
83
|
-
}
|
|
84
|
-
disableSelection() {
|
|
85
|
-
this.isDisabled = true;
|
|
86
|
-
this.clearSelection();
|
|
87
|
-
}
|
|
88
|
-
enableSelection() {
|
|
89
|
-
this.isDisabled = false;
|
|
90
|
-
}
|
|
91
|
-
selectAll(model) {
|
|
92
|
-
const last = model.paragraphs.length - 1;
|
|
93
|
-
const length = last > 0 ? model.contentLength - model.paragraphs[last - 1].insertIndex - 1 : model.contentLength;
|
|
94
|
-
this.placeSelection(new CursorParagraph(0, 0), new CursorParagraph(last, length));
|
|
95
|
-
}
|
|
96
|
-
selectUp(session) {
|
|
97
|
-
if (!this.anchor) {
|
|
98
|
-
this.anchor = this.cursor;
|
|
99
|
-
}
|
|
100
|
-
this.moveCursorUp(session, this.cursor);
|
|
101
|
-
}
|
|
102
|
-
navigateUp(session) {
|
|
103
|
-
const position = this.isEmpty || this.isBackwards ? this.cursor : this.anchor;
|
|
104
|
-
this.moveCursorUp(session, position);
|
|
105
|
-
this.anchor = null;
|
|
106
|
-
}
|
|
107
|
-
selectDown(session) {
|
|
108
|
-
if (!this.anchor) {
|
|
109
|
-
this.anchor = this.cursor;
|
|
110
|
-
}
|
|
111
|
-
this.moveCursorDown(session, this.cursor);
|
|
112
|
-
}
|
|
113
|
-
navigateDown(session) {
|
|
114
|
-
const position = this.isEmpty || !this.isBackwards ? this.cursor : this.anchor;
|
|
115
|
-
this.moveCursorDown(session, position);
|
|
116
|
-
this.anchor = null;
|
|
117
|
-
}
|
|
118
|
-
selectRight(session) {
|
|
119
|
-
const position = this.getCursorRight(session);
|
|
120
|
-
this.moveSelection(position);
|
|
121
|
-
}
|
|
122
|
-
navigateRight(session) {
|
|
123
|
-
if (this.isEmpty) {
|
|
124
|
-
const position = this.getCursorRight(session);
|
|
125
|
-
this.placeCursor(position);
|
|
126
|
-
}
|
|
127
|
-
else {
|
|
128
|
-
const position = !this.isBackwards ? this.cursor : this.anchor;
|
|
129
|
-
this.placeCursor(position);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
selectLeft(session) {
|
|
133
|
-
const position = this.getCursorLeft(session);
|
|
134
|
-
this.moveSelection(position);
|
|
135
|
-
}
|
|
136
|
-
navigateLeft(session) {
|
|
137
|
-
if (this.isEmpty) {
|
|
138
|
-
const position = this.getCursorLeft(session);
|
|
139
|
-
this.placeCursor(position);
|
|
140
|
-
}
|
|
141
|
-
else {
|
|
142
|
-
const position = this.isBackwards ? this.cursor : this.anchor;
|
|
143
|
-
this.placeCursor(position);
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
selectLineStart(session) {
|
|
147
|
-
const position = this.getLineStart(session, this.cursor);
|
|
148
|
-
this.moveSelection(position);
|
|
149
|
-
}
|
|
150
|
-
navigateLineStart(session) {
|
|
151
|
-
const position = this.getLineStart(session, this.cursor);
|
|
152
|
-
this.placeCursor(position);
|
|
153
|
-
}
|
|
154
|
-
selectLineEnd(session) {
|
|
155
|
-
const position = this.getLineEnd(session, this.cursor);
|
|
156
|
-
this.moveSelection(position);
|
|
157
|
-
}
|
|
158
|
-
navigateLineEnd(session) {
|
|
159
|
-
const position = this.getLineEnd(session, this.cursor);
|
|
160
|
-
this.placeCursor(position);
|
|
161
|
-
}
|
|
162
|
-
selectFileEnd(session) {
|
|
163
|
-
const paragraph = session.displayData.paragraphs.length - 1;
|
|
164
|
-
const paragraphIndex = session.displayData.getParagraphContent(paragraph).length;
|
|
165
|
-
this.moveSelection(new CursorParagraph(paragraph, paragraphIndex));
|
|
166
|
-
}
|
|
167
|
-
navigateFileEnd(session) {
|
|
168
|
-
const paragraph = session.displayData.paragraphs.length - 1;
|
|
169
|
-
const paragraphIndex = session.displayData.getParagraphContent(paragraph).length;
|
|
170
|
-
this.placeCursor(new CursorParagraph(paragraph, paragraphIndex));
|
|
171
|
-
}
|
|
172
|
-
selectFileStart() {
|
|
173
|
-
this.moveSelection(new CursorParagraph(0, 0));
|
|
174
|
-
}
|
|
175
|
-
navigateFileStart() {
|
|
176
|
-
this.placeCursor(new CursorParagraph(0, 0));
|
|
177
|
-
}
|
|
178
|
-
selectWordRight(session) {
|
|
179
|
-
const position = this.getWordRight(session, this.cursor);
|
|
180
|
-
this.moveSelection(position);
|
|
181
|
-
}
|
|
182
|
-
navigateWordRight(session) {
|
|
183
|
-
const position = this.getWordRight(session, this.cursor);
|
|
184
|
-
this.placeCursor(position);
|
|
185
|
-
}
|
|
186
|
-
selectWordLeft(session) {
|
|
187
|
-
const position = this.getWordLeft(session, this.cursor);
|
|
188
|
-
this.moveSelection(position);
|
|
189
|
-
}
|
|
190
|
-
navigateWordLeft(session) {
|
|
191
|
-
const position = this.getWordLeft(session, this.cursor);
|
|
192
|
-
this.placeCursor(position);
|
|
193
|
-
}
|
|
194
|
-
moveCursorUp(session, position) {
|
|
195
|
-
const line = PositionHelper.documentToScreen(session, position.row, position.column);
|
|
196
|
-
if (line.row === 0) {
|
|
197
|
-
this.selectLineStart(session);
|
|
198
|
-
}
|
|
199
|
-
else {
|
|
200
|
-
this.moveToLine(session, line.row - 1, line);
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
moveCursorDown(session, position) {
|
|
204
|
-
const line = PositionHelper.documentToScreen(session, position.row, position.column);
|
|
205
|
-
const lastParagraphsIndex = session.displayData.paragraphs.length - 1;
|
|
206
|
-
const lastParagraph = session.displayData.getParagraphSettings(lastParagraphsIndex);
|
|
207
|
-
const lastParagraphLine = lastParagraph.textLinesInfo[lastParagraph.textLinesInfo.length - 1].screenLine;
|
|
208
|
-
if (line.row === lastParagraphLine) {
|
|
209
|
-
this.selectLineEnd(session);
|
|
210
|
-
}
|
|
211
|
-
else {
|
|
212
|
-
this.moveToLine(session, line.row + 1, line);
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
moveToLine(session, line, fromLine) {
|
|
216
|
-
if (!this.keepLinePositionX) {
|
|
217
|
-
this.keepLinePositionX = PositionHelper.screenToPixel(session, fromLine.row, fromLine.column).pageX;
|
|
218
|
-
}
|
|
219
|
-
const column = PositionHelper.getApproximatePosition(session, line, this.keepLinePositionX);
|
|
220
|
-
this.cursor = PositionHelper.screenToDocument(session, line, column);
|
|
221
|
-
}
|
|
222
|
-
getCursorLeft(session) {
|
|
223
|
-
if (this.cursor.row === 0 && this.cursor.column === 0) {
|
|
224
|
-
return this.cursor;
|
|
225
|
-
}
|
|
226
|
-
const index = ContentHelper.paragraphPositionToDocumentIndex(session.displayData.paragraphs, this.cursor);
|
|
227
|
-
return ContentHelper.documentIndexToParagraphIndex(session.displayData.paragraphs, index - 1);
|
|
228
|
-
}
|
|
229
|
-
getCursorRight(session) {
|
|
230
|
-
const last = session.displayData.paragraphs.length - 1;
|
|
231
|
-
if (this.cursor.row === last && this.cursor.column === session.displayData.getParagraphContent(last).length) {
|
|
232
|
-
return this.cursor;
|
|
233
|
-
}
|
|
234
|
-
const index = ContentHelper.paragraphPositionToDocumentIndex(session.displayData.paragraphs, this.cursor);
|
|
235
|
-
return ContentHelper.documentIndexToParagraphIndex(session.displayData.paragraphs, index + 1);
|
|
236
|
-
}
|
|
237
|
-
getLineStart(session, position) {
|
|
238
|
-
const line = PositionHelper.documentToScreen(session, position.row, position.column);
|
|
239
|
-
return PositionHelper.screenToDocument(session, line.row, 0);
|
|
240
|
-
}
|
|
241
|
-
getLineEnd(session, position) {
|
|
242
|
-
const line = PositionHelper.documentToScreen(session, position.row, position.column);
|
|
243
|
-
const paragraphLength = session.displayData.getParagraphContent(position.row).length;
|
|
244
|
-
const linesCount = session.displayData.getParagraphSettings(position.row).textLinesInfo.length;
|
|
245
|
-
if (linesCount === 1) {
|
|
246
|
-
return PositionHelper.screenToDocument(session, line.row, paragraphLength);
|
|
247
|
-
}
|
|
248
|
-
const paragraphLine = line.row - session.displayData.paragraphs[position.row].lineNumber;
|
|
249
|
-
let index;
|
|
250
|
-
if (paragraphLine === 0) {
|
|
251
|
-
index = session.displayData.paragraphs[position.row].nextLineIndexes[0];
|
|
252
|
-
}
|
|
253
|
-
else if (paragraphLine === linesCount - 1) {
|
|
254
|
-
index = paragraphLength - session.displayData.paragraphs[position.row].nextLineIndexes[paragraphLine - 1];
|
|
255
|
-
}
|
|
256
|
-
else {
|
|
257
|
-
index =
|
|
258
|
-
session.displayData.paragraphs[position.row].nextLineIndexes[paragraphLine] -
|
|
259
|
-
session.displayData.paragraphs[position.row].nextLineIndexes[paragraphLine - 1];
|
|
260
|
-
}
|
|
261
|
-
return PositionHelper.screenToDocument(session, line.row, index);
|
|
262
|
-
}
|
|
263
|
-
getWordRight(session, position) {
|
|
264
|
-
let row = position.row;
|
|
265
|
-
let column = position.column;
|
|
266
|
-
const paragraphContent = session.displayData.getParagraphContent(row);
|
|
267
|
-
const documentLength = session.displayData.paragraphs.length;
|
|
268
|
-
if (row + 1 >= documentLength && column === paragraphContent.length) {
|
|
269
|
-
return position;
|
|
270
|
-
}
|
|
271
|
-
let rightOfCursor = paragraphContent.substring(column);
|
|
272
|
-
if (column === paragraphContent.length) {
|
|
273
|
-
do {
|
|
274
|
-
row++;
|
|
275
|
-
rightOfCursor = session.displayData.getParagraphContent(row);
|
|
276
|
-
} while (row < documentLength && /^\s*$/.test(rightOfCursor));
|
|
277
|
-
if (!/^\s+/.test(rightOfCursor)) {
|
|
278
|
-
rightOfCursor = '';
|
|
279
|
-
}
|
|
280
|
-
column = 0;
|
|
281
|
-
}
|
|
282
|
-
const index = this.shortWordEndIndex(session.tokenRe, rightOfCursor);
|
|
283
|
-
return new CursorParagraph(row, column + index);
|
|
284
|
-
}
|
|
285
|
-
getWordLeft(session, position) {
|
|
286
|
-
let row = position.row;
|
|
287
|
-
let column = position.column;
|
|
288
|
-
if (column === 0 && row === 0) {
|
|
289
|
-
return position;
|
|
290
|
-
}
|
|
291
|
-
let paragraphContent = session.displayData.getParagraphContent(row).substring(0, column);
|
|
292
|
-
if (column === 0) {
|
|
293
|
-
do {
|
|
294
|
-
row--;
|
|
295
|
-
paragraphContent = session.displayData.getParagraphContent(row);
|
|
296
|
-
} while (row > 0 && /^\s*$/.test(paragraphContent));
|
|
297
|
-
column = paragraphContent.length;
|
|
298
|
-
if (!/\s+$/.test(paragraphContent)) {
|
|
299
|
-
paragraphContent = '';
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
const leftOfCursor = paragraphContent.split('').reverse().join('');
|
|
303
|
-
const index = this.shortWordEndIndex(session.tokenRe, leftOfCursor);
|
|
304
|
-
return new CursorParagraph(row, column - index);
|
|
305
|
-
}
|
|
306
|
-
shortWordEndIndex(tokenRe, rightOfCursor) {
|
|
307
|
-
let index;
|
|
308
|
-
tokenRe.lastIndex = 0;
|
|
309
|
-
if (tokenRe.exec(rightOfCursor)) {
|
|
310
|
-
index = tokenRe.lastIndex;
|
|
311
|
-
}
|
|
312
|
-
else {
|
|
313
|
-
index = this.handleNoTokenFound(tokenRe, rightOfCursor);
|
|
314
|
-
}
|
|
315
|
-
tokenRe.lastIndex = 0;
|
|
316
|
-
return index;
|
|
317
|
-
}
|
|
318
|
-
handleNoTokenFound(tokenRe, rightOfCursor) {
|
|
319
|
-
const whitespaceRe = /\s/;
|
|
320
|
-
let index = 0;
|
|
321
|
-
while (rightOfCursor[index] && whitespaceRe.test(rightOfCursor[index])) {
|
|
322
|
-
index++;
|
|
323
|
-
}
|
|
324
|
-
if (index < 1) {
|
|
325
|
-
index = this.handleNoWhitespaceFound(tokenRe, rightOfCursor, whitespaceRe);
|
|
326
|
-
}
|
|
327
|
-
return index;
|
|
328
|
-
}
|
|
329
|
-
handleNoWhitespaceFound(tokenRe, rightOfCursor, whitespaceRe) {
|
|
330
|
-
let index = 0;
|
|
331
|
-
tokenRe.lastIndex = 0;
|
|
332
|
-
while (rightOfCursor[index] && !tokenRe.test(rightOfCursor[index])) {
|
|
333
|
-
tokenRe.lastIndex = 0;
|
|
334
|
-
index++;
|
|
335
|
-
if (whitespaceRe.test(rightOfCursor[index])) {
|
|
336
|
-
if (index > 2) {
|
|
337
|
-
index--;
|
|
338
|
-
break;
|
|
339
|
-
}
|
|
340
|
-
while (rightOfCursor[index] && whitespaceRe.test(rightOfCursor[index])) {
|
|
341
|
-
index++;
|
|
342
|
-
}
|
|
343
|
-
if (index > 2) {
|
|
344
|
-
break;
|
|
345
|
-
}
|
|
346
|
-
}
|
|
347
|
-
}
|
|
348
|
-
return index;
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvZWRpdG9yL3Bvc2l0aW9uaW5nL3NlbGVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXJELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE1BQU0sT0FBTyxTQUFTO0lBQXRCO1FBQ0ksV0FBTSxHQUEyQixJQUFJLENBQUM7UUFFdEMsV0FBTSxHQUFHLElBQUksZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVuQyxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBRVgscUJBQWdCLEdBQTRDLElBQUksQ0FBQztRQUVqRSxzQkFBaUIsR0FBa0IsSUFBSSxDQUFDO0lBNFhwRCxDQUFDO0lBMVhHLElBQUksU0FBUztRQUNULE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUNuQyxDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEgsQ0FBQztJQUVELElBQUksV0FBVztRQUNYLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENB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QUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUN6QyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7b0JBQ1gsS0FBSyxFQUFFLENBQUM7b0JBQ1IsTUFBTTtpQkFDVDtnQkFDRCxPQUFPLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO29CQUNwRSxLQUFLLEVBQUUsQ0FBQztpQkFDWDtnQkFDRCxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7b0JBQ1gsTUFBTTtpQkFDVDthQUNKO1NBQ0o7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQmFzZU5vZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9zaGFyZWQvYWJzdHJhY3QvYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29udGVudEhlbHBlciB9IGZyb20gJy4vY29udGVudC5oZWxwZXInO1xuaW1wb3J0IHsgQ29udGVudHNJbnRlcmZhY2UgfSBmcm9tICcuLi9jb250ZW50L2NvbnRlbnRzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDdXJzb3JQYXJhZ3JhcGggfSBmcm9tICcuL2N1cnNvci1wYXJhZ3JhcGgnO1xuaW1wb3J0IHsgRWRpdFNlc3Npb24gfSBmcm9tICcuLi9leGVjdXRpb24vZWRpdC5zZXNzaW9uJztcbmltcG9ydCB7IFBvc2l0aW9uSGVscGVyIH0gZnJvbSAnLi9wb3NpdGlvbi5oZWxwZXInO1xuaW1wb3J0IHsgUmFuZ2UgfSBmcm9tICcuL3JhbmdlJztcblxuZXhwb3J0IGNsYXNzIFNlbGVjdGlvbiB7XG4gICAgYW5jaG9yOiBDdXJzb3JQYXJhZ3JhcGggfCBudWxsID0gbnVsbDtcblxuICAgIGN1cnNvciA9IG5ldyBDdXJzb3JQYXJhZ3JhcGgoMCwgMCk7XG5cbiAgICBpc0Rpc2FibGVkID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIGZvY3VzZWRDb21wb25lbnQ6IENvbXBvbmVudFJlZjxCYXNlTm9kZXJDb21wb25lbnQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgICBwcml2YXRlIGtlZXBMaW5lUG9zaXRpb25YOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIGdldCBpc0ZvY3VzZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZm9jdXNlZENvbXBvbmVudDtcbiAgICB9XG5cbiAgICBnZXQgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYW5jaG9yID09PSBudWxsIHx8ICh0aGlzLmFuY2hvci5yb3cgPT09IHRoaXMuY3Vyc29yLnJvdyAmJiB0aGlzLmFuY2hvci5jb2x1bW4gPT09IHRoaXMuY3Vyc29yLmNvbHVtbik7XG4gICAgfVxuXG4gICAgZ2V0IGlzQmFja3dhcmRzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hbmNob3Iucm93ID4gdGhpcy5jdXJzb3Iucm93IHx8ICh0aGlzLmFuY2hvci5yb3cgPT09IHRoaXMuY3Vyc29yLnJvdyAmJiB0aGlzLmFuY2hvci5jb2x1bW4gPiB0aGlzLmN1cnNvci5jb2x1bW4pO1xuICAgIH1cblxuICAgIGdldCBzZWxlY3RlZFJhbmdlKCk6IFJhbmdlIHtcbiAgICAgICAgaWYgKCF0aGlzLmZvY3VzZWRDb21wb25lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhbmdlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnNvciA9IG5ldyBDdXJzb3JQYXJhZ3JhcGgodGhpcy5jdXJzb3Iucm93LCB0aGlzLmN1cnNvci5jb2x1bW4pO1xuICAgICAgICByZXR1cm4gbmV3IFJhbmdlKGN1cnNvciwgY3Vyc29yKTtcbiAgICB9XG5cbiAgICBnZXQgcmFuZ2UoKTogUmFuZ2Uge1xuICAgICAgICBjb25zdCBjdXJzb3IgPSBuZXcgQ3Vyc29yUGFyYWdyYXBoKHRoaXMuY3Vyc29yLnJvdywgdGhpcy5jdXJzb3IuY29sdW1uKTtcbiAgICAgICAgaWYgKHRoaXMuaXNFbXB0eSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShjdXJzb3IsIGN1cnNvcik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhbmNob3IgPSBuZXcgQ3Vyc29yUGFyYWdyYXBoKHRoaXMuYW5jaG9yLnJvdywgdGhpcy5hbmNob3IuY29sdW1uKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNCYWNrd2FyZHMgPyBuZXcgUmFuZ2UoY3Vyc29yLCBhbmNob3IpIDogbmV3IFJhbmdlKGFuY2hvciwgY3Vyc29yKTtcbiAgICB9XG5cbiAgICBmb2N1cyhjb21wb25lbnQ6IENvbXBvbmVudFJlZjxCYXNlTm9kZXJDb21wb25lbnQ+LCBwb3NpdGlvbjogQ3Vyc29yUGFyYWdyYXBoKTogdm9pZCB7XG4gICAgICAgIGlmIChjb21wb25lbnQgPT09IHRoaXMuZm9jdXNlZENvbXBvbmVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5mb2N1c2VkQ29tcG9uZW50Py5pbnN0YW5jZS5ibHVyKCk7XG4gICAgICAgIGNvbXBvbmVudC5pbnN0YW5jZS5mb2N1cygpO1xuICAgICAgICB0aGlzLmZvY3VzZWRDb21wb25lbnQgPSBjb21wb25lbnQ7XG4gICAgICAgIHRoaXMuY3Vyc29yID0gcG9zaXRpb247XG4gICAgICAgIHRoaXMuYW5jaG9yID0gbmV3IEN1cnNvclBhcmFncmFwaChwb3NpdGlvbi5yb3csIHBvc2l0aW9uLmNvbHVtbiArIDEpO1xuICAgICAgICB0aGlzLmtlZXBMaW5lUG9zaXRpb25YID0gbnVsbDtcbiAgICB9XG5cbiAgICBibHVyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZvY3VzZWRDb21wb25lbnQ/Lmluc3RhbmNlLmJsdXIoKTtcbiAgICAgICAgdGhpcy5mb2N1c2VkQ29tcG9uZW50ID0gbnVsbDtcbiAgICB9XG5cbiAgICBwbGFjZUN1cnNvcihjdXJzb3I6IEN1cnNvclBhcmFncmFwaCk6IHZvaWQge1xuICAgICAgICB0aGlzLmN1cnNvciA9IGN1cnNvcjtcbiAgICAgICAgdGhpcy5hbmNob3IgPSBudWxsO1xuICAgICAgICB0aGlzLmtlZXBMaW5lUG9zaXRpb25YID0gbnVsbDtcbiAgICAgICAgdGhpcy5mb2N1c2VkQ29tcG9uZW50Py5pbnN0YW5jZS5ibHVyKCk7XG4gICAgICAgIHRoaXMuZm9jdXNlZENvbXBvbmVudCA9IG51bGw7XG4gICAgfVxuXG4gICAgbW92ZUN1cnNvcihjdXJzb3I6IEN1cnNvclBhcmFncmFwaCk6IHZvaWQge1xuICAgICAgICB0aGlzLmN1cnNvciA9IGN1cnNvcjtcbiAgICAgICAgdGhpcy5rZWVwTGluZVBvc2l0aW9uWCA9IG51bGw7XG4gICAgICAgIHRoaXMuZm9jdXNlZENvbXBvbmVudD8uaW5zdGFuY2UuYmx1cigpO1xuICAgICAgICB0aGlzLmZvY3VzZWRDb21wb25lbnQgPSBudWxsO1xuICAgIH1cblxuICAgIHBsYWNlU2VsZWN0aW9uKGN1cnNvcjogQ3Vyc29yUGFyYWdyYXBoLCBhbmNob3I6IEN1cnNvclBhcmFncmFwaCk6IHZvaWQge1xuICAgICAgICB0aGlzLmN1cnNvciA9IGN1cnNvcjtcbiAgICAgICAgdGhpcy5hbmNob3IgPSBhbmNob3I7XG4gICAgICAgIHRoaXMua2VlcExpbmVQb3NpdGlvblggPSBudWxsO1xuICAgICAgICB0aGlzLmZvY3VzZWRDb21wb25lbnQ/Lmluc3RhbmNlLmJsdXIoKTtcbiAgICAgICAgdGhpcy5mb2N1c2VkQ29tcG9uZW50ID0gbnVsbDtcbiAgICB9XG5cbiAgICBtb3ZlU2VsZWN0aW9uKHBvc2l0aW9uOiBDdXJzb3JQYXJhZ3JhcGgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmFuY2hvcikge1xuICAgICAgICAgICAgdGhpcy5hbmNob3IgPSB0aGlzLmN1cnNvcjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1vdmVDdXJzb3IocG9zaXRpb24pO1xuICAgIH1cblxuICAgIGNsZWFyU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmFuY2hvciA9IG51bGw7XG4gICAgICAgIHRoaXMua2VlcExpbmVQb3NpdGlvblggPSBudWxsO1xuICAgICAgICB0aGlzLmZvY3VzZWRDb21wb25lbnQ/Lmluc3RhbmNlLmJsdXIoKTtcbiAgICAgICAgdGhpcy5mb2N1c2VkQ29tcG9uZW50ID0gbnVsbDtcbiAgICB9XG5cbiAgICBkaXNhYmxlU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgfVxuXG4gICAgZW5hYmxlU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzRGlzYWJsZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBzZWxlY3RBbGwobW9kZWw6IENvbnRlbnRzSW50ZXJmYWNlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGxhc3QgPSBtb2RlbC5wYXJhZ3JhcGhzLmxlbmd0aCAtIDE7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IGxhc3QgPiAwID8gbW9kZWwuY29udGVudExlbmd0aCAtIG1vZGVsLnBhcmFncmFwaHNbbGFzdCAtIDFdLmluc2VydEluZGV4IC0gMSA6IG1vZGVsLmNvbnRlbnRMZW5ndGg7XG4gICAgICAgIHRoaXMucGxhY2VTZWxlY3Rpb24obmV3IEN1cnNvclBhcmFncmFwaCgwLCAwKSwgbmV3IEN1cnNvclBhcmFncmFwaChsYXN0LCBsZW5ndGgpKTtcbiAgICB9XG5cbiAgICBzZWxlY3RVcChzZXNzaW9uOiBFZGl0U2Vzc2lvbik6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuYW5jaG9yKSB7XG4gICAgICAgICAgICB0aGlzLmFuY2hvciA9IHRoaXMuY3Vyc29yO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubW92ZUN1cnNvclVwKHNlc3Npb24sIHRoaXMuY3Vyc29yKTtcbiAgICB9XG5cbiAgICBuYXZpZ2F0ZVVwKHNlc3Npb246IEVkaXRTZXNzaW9uKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5pc0VtcHR5IHx8IHRoaXMuaXNCYWNrd2FyZHMgPyB0aGlzLmN1cnNvciA6IHRoaXMuYW5jaG9yO1xuICAgICAgICB0aGlzLm1vdmVDdXJzb3JVcChzZXNzaW9uLCBwb3NpdGlvbik7XG4gICAgICAgIHRoaXMuYW5jaG9yID0gbnVsbDtcbiAgICB9XG5cbiAgICBzZWxlY3REb3duKHNlc3Npb246IEVkaXRTZXNzaW9uKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5hbmNob3IpIHtcbiAgICAgICAgICAgIHRoaXMuYW5jaG9yID0gdGhpcy5jdXJzb3I7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yRG93bihzZXNzaW9uLCB0aGlzLmN1cnNvcik7XG4gICAgfVxuXG4gICAgbmF2aWdhdGVEb3duKHNlc3Npb246IEVkaXRTZXNzaW9uKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5pc0VtcHR5IHx8ICF0aGlzLmlzQmFja3dhcmRzID8gdGhpcy5jdXJzb3IgOiB0aGlzLmFuY2hvcjtcbiAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yRG93bihzZXNzaW9uLCBwb3NpdGlvbik7XG4gICAgICAgIHRoaXMuYW5jaG9yID0gbnVsbDtcbiAgICB9XG5cbiAgICBzZWxlY3RSaWdodChzZXNzaW9uOiBFZGl0U2Vzc2lvbik6IHZvaWQge1xuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZ2V0Q3Vyc29yUmlnaHQoc2Vzc2lvbik7XG4gICAgICAgIHRoaXMubW92ZVNlbGVjdGlvbihwb3NpdGlvbik7XG4gICAgfVxuXG4gICAgbmF2aWdhdGVSaWdodChzZXNzaW9uOiBFZGl0U2Vzc2lvbik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc0VtcHR5KSB7XG4gICAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZ2V0Q3Vyc29yUmlnaHQoc2Vzc2lvbik7XG4gICAgICAgICAgICB0aGlzLnBsYWNlQ3Vyc29yKHBvc2l0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gIXRoaXMuaXNCYWNrd2FyZHMgPyB0aGlzLmN1cnNvciA6IHRoaXMuYW5jaG9yO1xuICAgICAgICAgICAgdGhpcy5wbGFjZUN1cnNvcihwb3NpdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZWxlY3RMZWZ0KHNlc3Npb246IEVkaXRTZXNzaW9uKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5nZXRDdXJzb3JMZWZ0KHNlc3Npb24pO1xuICAgICAgICB0aGlzLm1vdmVTZWxlY3Rpb24ocG9zaXRpb24pO1xuICAgIH1cblxuICAgIG5hdmlnYXRlTGVmdChzZXNzaW9uOiBFZGl0U2Vzc2lvbik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc0VtcHR5KSB7XG4gICAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZ2V0Q3Vyc29yTGVmdChzZXNzaW9uKTtcbiAgICAgICAgICAgIHRoaXMucGxhY2VDdXJzb3IocG9zaXRpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLmlzQmFja3dhcmRzID8gdGhpcy5jdXJzb3IgOiB0aGlzLmFuY2hvcjtcbiAgICAgICAgICAgIHRoaXMucGxhY2VDdXJzb3IocG9zaXRpb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2VsZWN0TGluZVN0YXJ0KHNlc3Npb246IEVkaXRTZXNzaW9uKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5nZXRMaW5lU3RhcnQoc2Vzc2lvbiwgdGhpcy5jdXJzb3IpO1xuICAgICAgICB0aGlzLm1vdmVTZWxlY3Rpb24ocG9zaXRpb24pO1xuICAgIH1cblxuICAgIG5hdmlnYXRlTGluZVN0YXJ0KHNlc3Npb246IEVkaXRTZXNzaW9uKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5nZXRMaW5lU3RhcnQoc2Vzc2lvbiwgdGhpcy5jdXJzb3IpO1xuICAgICAgICB0aGlzLnBsYWNlQ3Vyc29yKHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICBzZWxlY3RMaW5lRW5kKHNlc3Npb246IEVkaXRTZXNzaW9uKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5nZXRMaW5lRW5kKHNlc3Npb24sIHRoaXMuY3Vyc29yKTtcbiAgICAgICAgdGhpcy5tb3ZlU2VsZWN0aW9uKHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICBuYXZpZ2F0ZUxpbmVFbmQoc2Vzc2lvbjogRWRpdFNlc3Npb24pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLmdldExpbmVFbmQoc2Vzc2lvbiwgdGhpcy5jdXJzb3IpO1xuICAgICAgICB0aGlzLnBsYWNlQ3Vyc29yKHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICBzZWxlY3RGaWxlRW5kKHNlc3Npb246IEVkaXRTZXNzaW9uKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaCA9IHNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBocy5sZW5ndGggLSAxO1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGhJbmRleCA9IHNlc3Npb24uZGlzcGxheURhdGEuZ2V0UGFyYWdyYXBoQ29udGVudChwYXJhZ3JhcGgpLmxlbmd0aDtcbiAgICAgICAgdGhpcy5tb3ZlU2VsZWN0aW9uKG5ldyBDdXJzb3JQYXJhZ3JhcGgocGFyYWdyYXBoLCBwYXJhZ3JhcGhJbmRleCkpO1xuICAgIH1cblxuICAgIG5hdmlnYXRlRmlsZUVuZChzZXNzaW9uOiBFZGl0U2Vzc2lvbik6IHZvaWQge1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGggPSBzZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMubGVuZ3RoIC0gMTtcbiAgICAgICAgY29uc3QgcGFyYWdyYXBoSW5kZXggPSBzZXNzaW9uLmRpc3BsYXlEYXRhLmdldFBhcmFncmFwaENvbnRlbnQocGFyYWdyYXBoKS5sZW5ndGg7XG4gICAgICAgIHRoaXMucGxhY2VDdXJzb3IobmV3IEN1cnNvclBhcmFncmFwaChwYXJhZ3JhcGgsIHBhcmFncmFwaEluZGV4KSk7XG4gICAgfVxuXG4gICAgc2VsZWN0RmlsZVN0YXJ0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLm1vdmVTZWxlY3Rpb24obmV3IEN1cnNvclBhcmFncmFwaCgwLCAwKSk7XG4gICAgfVxuXG4gICAgbmF2aWdhdGVGaWxlU3RhcnQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucGxhY2VDdXJzb3IobmV3IEN1cnNvclBhcmFncmFwaCgwLCAwKSk7XG4gICAgfVxuXG4gICAgc2VsZWN0V29yZFJpZ2h0KHNlc3Npb246IEVkaXRTZXNzaW9uKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5nZXRXb3JkUmlnaHQoc2Vzc2lvbiwgdGhpcy5jdXJzb3IpO1xuICAgICAgICB0aGlzLm1vdmVTZWxlY3Rpb24ocG9zaXRpb24pO1xuICAgIH1cblxuICAgIG5hdmlnYXRlV29yZFJpZ2h0KHNlc3Npb246IEVkaXRTZXNzaW9uKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5nZXRXb3JkUmlnaHQoc2Vzc2lvbiwgdGhpcy5jdXJzb3IpO1xuICAgICAgICB0aGlzLnBsYWNlQ3Vyc29yKHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICBzZWxlY3RXb3JkTGVmdChzZXNzaW9uOiBFZGl0U2Vzc2lvbik6IHZvaWQge1xuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZ2V0V29yZExlZnQoc2Vzc2lvbiwgdGhpcy5jdXJzb3IpO1xuICAgICAgICB0aGlzLm1vdmVTZWxlY3Rpb24ocG9zaXRpb24pO1xuICAgIH1cblxuICAgIG5hdmlnYXRlV29yZExlZnQoc2Vzc2lvbjogRWRpdFNlc3Npb24pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLmdldFdvcmRMZWZ0KHNlc3Npb24sIHRoaXMuY3Vyc29yKTtcbiAgICAgICAgdGhpcy5wbGFjZUN1cnNvcihwb3NpdGlvbik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtb3ZlQ3Vyc29yVXAoc2Vzc2lvbjogRWRpdFNlc3Npb24sIHBvc2l0aW9uOiBDdXJzb3JQYXJhZ3JhcGgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbGluZSA9IFBvc2l0aW9uSGVscGVyLmRvY3VtZW50VG9TY3JlZW4oc2Vzc2lvbiwgcG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4pO1xuICAgICAgICBpZiAobGluZS5yb3cgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0TGluZVN0YXJ0KHNlc3Npb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tb3ZlVG9MaW5lKHNlc3Npb24sIGxpbmUucm93IC0gMSwgbGluZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG1vdmVDdXJzb3JEb3duKHNlc3Npb246IEVkaXRTZXNzaW9uLCBwb3NpdGlvbjogQ3Vyc29yUGFyYWdyYXBoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGxpbmUgPSBQb3NpdGlvbkhlbHBlci5kb2N1bWVudFRvU2NyZWVuKHNlc3Npb24sIHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKTtcbiAgICAgICAgY29uc3QgbGFzdFBhcmFncmFwaHNJbmRleCA9IHNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBocy5sZW5ndGggLSAxO1xuICAgICAgICBjb25zdCBsYXN0UGFyYWdyYXBoID0gc2Vzc2lvbi5kaXNwbGF5RGF0YS5nZXRQYXJhZ3JhcGhTZXR0aW5ncyhsYXN0UGFyYWdyYXBoc0luZGV4KTtcbiAgICAgICAgY29uc3QgbGFzdFBhcmFncmFwaExpbmUgPSBsYXN0UGFyYWdyYXBoLnRleHRMaW5lc0luZm9bbGFzdFBhcmFncmFwaC50ZXh0TGluZXNJbmZvLmxlbmd0aCAtIDFdLnNjcmVlbkxpbmU7XG4gICAgICAgIGlmIChsaW5lLnJvdyA9PT0gbGFzdFBhcmFncmFwaExpbmUpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0TGluZUVuZChzZXNzaW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubW92ZVRvTGluZShzZXNzaW9uLCBsaW5lLnJvdyArIDEsIGxpbmUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtb3ZlVG9MaW5lKHNlc3Npb246IEVkaXRTZXNzaW9uLCBsaW5lOiBudW1iZXIsIGZyb21MaW5lOiBDdXJzb3JQYXJhZ3JhcGgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmtlZXBMaW5lUG9zaXRpb25YKSB7XG4gICAgICAgICAgICB0aGlzLmtlZXBMaW5lUG9zaXRpb25YID0gUG9zaXRpb25IZWxwZXIuc2NyZWVuVG9QaXhlbChzZXNzaW9uLCBmcm9tTGluZS5yb3csIGZyb21MaW5lLmNvbHVtbikucGFnZVg7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29sdW1uID0gUG9zaXRpb25IZWxwZXIuZ2V0QXBwcm94aW1hdGVQb3NpdGlvbihzZXNzaW9uLCBsaW5lLCB0aGlzLmtlZXBMaW5lUG9zaXRpb25YKTtcbiAgICAgICAgdGhpcy5jdXJzb3IgPSBQb3NpdGlvbkhlbHBlci5zY3JlZW5Ub0RvY3VtZW50KHNlc3Npb24sIGxpbmUsIGNvbHVtbik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDdXJzb3JMZWZ0KHNlc3Npb246IEVkaXRTZXNzaW9uKTogQ3Vyc29yUGFyYWdyYXBoIHtcbiAgICAgICAgaWYgKHRoaXMuY3Vyc29yLnJvdyA9PT0gMCAmJiB0aGlzLmN1cnNvci5jb2x1bW4gPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmN1cnNvcjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmRleCA9IENvbnRlbnRIZWxwZXIucGFyYWdyYXBoUG9zaXRpb25Ub0RvY3VtZW50SW5kZXgoc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLCB0aGlzLmN1cnNvcik7XG4gICAgICAgIHJldHVybiBDb250ZW50SGVscGVyLmRvY3VtZW50SW5kZXhUb1BhcmFncmFwaEluZGV4KHNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBocywgaW5kZXggLSAxKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEN1cnNvclJpZ2h0KHNlc3Npb246IEVkaXRTZXNzaW9uKTogQ3Vyc29yUGFyYWdyYXBoIHtcbiAgICAgICAgY29uc3QgbGFzdCA9IHNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBocy5sZW5ndGggLSAxO1xuICAgICAgICBpZiAodGhpcy5jdXJzb3Iucm93ID09PSBsYXN0ICYmIHRoaXMuY3Vyc29yLmNvbHVtbiA9PT0gc2Vzc2lvbi5kaXNwbGF5RGF0YS5nZXRQYXJhZ3JhcGhDb250ZW50KGxhc3QpLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3Vyc29yO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluZGV4ID0gQ29udGVudEhlbHBlci5wYXJhZ3JhcGhQb3NpdGlvblRvRG9jdW1lbnRJbmRleChzZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIHRoaXMuY3Vyc29yKTtcbiAgICAgICAgcmV0dXJuIENvbnRlbnRIZWxwZXIuZG9jdW1lbnRJbmRleFRvUGFyYWdyYXBoSW5kZXgoc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLCBpbmRleCArIDEpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TGluZVN0YXJ0KHNlc3Npb246IEVkaXRTZXNzaW9uLCBwb3NpdGlvbjogQ3Vyc29yUGFyYWdyYXBoKTogQ3Vyc29yUGFyYWdyYXBoIHtcbiAgICAgICAgY29uc3QgbGluZSA9IFBvc2l0aW9uSGVscGVyLmRvY3VtZW50VG9TY3JlZW4oc2Vzc2lvbiwgcG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4pO1xuICAgICAgICByZXR1cm4gUG9zaXRpb25IZWxwZXIuc2NyZWVuVG9Eb2N1bWVudChzZXNzaW9uLCBsaW5lLnJvdywgMCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRMaW5lRW5kKHNlc3Npb246IEVkaXRTZXNzaW9uLCBwb3NpdGlvbjogQ3Vyc29yUGFyYWdyYXBoKTogQ3Vyc29yUGFyYWdyYXBoIHtcbiAgICAgICAgY29uc3QgbGluZSA9IFBvc2l0aW9uSGVscGVyLmRvY3VtZW50VG9TY3JlZW4oc2Vzc2lvbiwgcG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4pO1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGhMZW5ndGggPSBzZXNzaW9uLmRpc3BsYXlEYXRhLmdldFBhcmFncmFwaENvbnRlbnQocG9zaXRpb24ucm93KS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGxpbmVzQ291bnQgPSBzZXNzaW9uLmRpc3BsYXlEYXRhLmdldFBhcmFncmFwaFNldHRpbmdzKHBvc2l0aW9uLnJvdykudGV4dExpbmVzSW5mby5sZW5ndGg7XG4gICAgICAgIGlmIChsaW5lc0NvdW50ID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gUG9zaXRpb25IZWxwZXIuc2NyZWVuVG9Eb2N1bWVudChzZXNzaW9uLCBsaW5lLnJvdywgcGFyYWdyYXBoTGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJhZ3JhcGhMaW5lID0gbGluZS5yb3cgLSBzZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHNbcG9zaXRpb24ucm93XS5saW5lTnVtYmVyO1xuICAgICAgICBsZXQgaW5kZXg6IG51bWJlcjtcbiAgICAgICAgaWYgKHBhcmFncmFwaExpbmUgPT09IDApIHtcbiAgICAgICAgICAgIGluZGV4ID0gc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzW3Bvc2l0aW9uLnJvd10ubmV4dExpbmVJbmRleGVzWzBdO1xuICAgICAgICB9IGVsc2UgaWYgKHBhcmFncmFwaExpbmUgPT09IGxpbmVzQ291bnQgLSAxKSB7XG4gICAgICAgICAgICBpbmRleCA9IHBhcmFncmFwaExlbmd0aCAtIHNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBoc1twb3NpdGlvbi5yb3ddLm5leHRMaW5lSW5kZXhlc1twYXJhZ3JhcGhMaW5lIC0gMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbmRleCA9XG4gICAgICAgICAgICAgICAgc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzW3Bvc2l0aW9uLnJvd10ubmV4dExpbmVJbmRleGVzW3BhcmFncmFwaExpbmVdIC1cbiAgICAgICAgICAgICAgICBzZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHNbcG9zaXRpb24ucm93XS5uZXh0TGluZUluZGV4ZXNbcGFyYWdyYXBoTGluZSAtIDFdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQb3NpdGlvbkhlbHBlci5zY3JlZW5Ub0RvY3VtZW50KHNlc3Npb24sIGxpbmUucm93LCBpbmRleCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRXb3JkUmlnaHQoc2Vzc2lvbjogRWRpdFNlc3Npb24sIHBvc2l0aW9uOiBDdXJzb3JQYXJhZ3JhcGgpOiBDdXJzb3JQYXJhZ3JhcGgge1xuICAgICAgICBsZXQgcm93ID0gcG9zaXRpb24ucm93O1xuICAgICAgICBsZXQgY29sdW1uID0gcG9zaXRpb24uY29sdW1uO1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGhDb250ZW50ID0gc2Vzc2lvbi5kaXNwbGF5RGF0YS5nZXRQYXJhZ3JhcGhDb250ZW50KHJvdyk7XG4gICAgICAgIGNvbnN0IGRvY3VtZW50TGVuZ3RoID0gc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLmxlbmd0aDtcbiAgICAgICAgaWYgKHJvdyArIDEgPj0gZG9jdW1lbnRMZW5ndGggJiYgY29sdW1uID09PSBwYXJhZ3JhcGhDb250ZW50Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGxldCByaWdodE9mQ3Vyc29yID0gcGFyYWdyYXBoQ29udGVudC5zdWJzdHJpbmcoY29sdW1uKTtcbiAgICAgICAgaWYgKGNvbHVtbiA9PT0gcGFyYWdyYXBoQ29udGVudC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICByb3crKztcbiAgICAgICAgICAgICAgICByaWdodE9mQ3Vyc29yID0gc2Vzc2lvbi5kaXNwbGF5RGF0YS5nZXRQYXJhZ3JhcGhDb250ZW50KHJvdyk7XG4gICAgICAgICAgICB9IHdoaWxlIChyb3cgPCBkb2N1bWVudExlbmd0aCAmJiAvXlxccyokLy50ZXN0KHJpZ2h0T2ZDdXJzb3IpKTtcbiAgICAgICAgICAgIGlmICghL15cXHMrLy50ZXN0KHJpZ2h0T2ZDdXJzb3IpKSB7XG4gICAgICAgICAgICAgICAgcmlnaHRPZkN1cnNvciA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29sdW1uID0gMDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuc2hvcnRXb3JkRW5kSW5kZXgoc2Vzc2lvbi50b2tlblJlLCByaWdodE9mQ3Vyc29yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDdXJzb3JQYXJhZ3JhcGgocm93LCBjb2x1bW4gKyBpbmRleCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRXb3JkTGVmdChzZXNzaW9uOiBFZGl0U2Vzc2lvbiwgcG9zaXRpb246IEN1cnNvclBhcmFncmFwaCk6IEN1cnNvclBhcmFncmFwaCB7XG4gICAgICAgIGxldCByb3cgPSBwb3NpdGlvbi5yb3c7XG4gICAgICAgIGxldCBjb2x1bW4gPSBwb3NpdGlvbi5jb2x1bW47XG4gICAgICAgIGlmIChjb2x1bW4gPT09IDAgJiYgcm93ID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gcG9zaXRpb247XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHBhcmFncmFwaENvbnRlbnQgPSBzZXNzaW9uLmRpc3BsYXlEYXRhLmdldFBhcmFncmFwaENvbnRlbnQocm93KS5zdWJzdHJpbmcoMCwgY29sdW1uKTtcbiAgICAgICAgaWYgKGNvbHVtbiA9PT0gMCkge1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIHJvdy0tO1xuICAgICAgICAgICAgICAgIHBhcmFncmFwaENvbnRlbnQgPSBzZXNzaW9uLmRpc3BsYXlEYXRhLmdldFBhcmFncmFwaENvbnRlbnQocm93KTtcbiAgICAgICAgICAgIH0gd2hpbGUgKHJvdyA+IDAgJiYgL15cXHMqJC8udGVzdChwYXJhZ3JhcGhDb250ZW50KSk7XG4gICAgICAgICAgICBjb2x1bW4gPSBwYXJhZ3JhcGhDb250ZW50Lmxlbmd0aDtcbiAgICAgICAgICAgIGlmICghL1xccyskLy50ZXN0KHBhcmFncmFwaENvbnRlbnQpKSB7XG4gICAgICAgICAgICAgICAgcGFyYWdyYXBoQ29udGVudCA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxlZnRPZkN1cnNvciA9IHBhcmFncmFwaENvbnRlbnQuc3BsaXQoJycpLnJldmVyc2UoKS5qb2luKCcnKTtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnNob3J0V29yZEVuZEluZGV4KHNlc3Npb24udG9rZW5SZSwgbGVmdE9mQ3Vyc29yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDdXJzb3JQYXJhZ3JhcGgocm93LCBjb2x1bW4gLSBpbmRleCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzaG9ydFdvcmRFbmRJbmRleCh0b2tlblJlOiBSZWdFeHAsIHJpZ2h0T2ZDdXJzb3I6IHN0cmluZyk6IG51bWJlciB7XG4gICAgICAgIGxldCBpbmRleDogbnVtYmVyO1xuICAgICAgICB0b2tlblJlLmxhc3RJbmRleCA9IDA7XG4gICAgICAgIGlmICh0b2tlblJlLmV4ZWMocmlnaHRPZkN1cnNvcikpIHtcbiAgICAgICAgICAgIGluZGV4ID0gdG9rZW5SZS5sYXN0SW5kZXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbmRleCA9IHRoaXMuaGFuZGxlTm9Ub2tlbkZvdW5kKHRva2VuUmUsIHJpZ2h0T2ZDdXJzb3IpO1xuICAgICAgICB9XG4gICAgICAgIHRva2VuUmUubGFzdEluZGV4ID0gMDtcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlTm9Ub2tlbkZvdW5kKHRva2VuUmU6IFJlZ0V4cCwgcmlnaHRPZkN1cnNvcjogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3Qgd2hpdGVzcGFjZVJlID0gL1xccy87XG4gICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgIHdoaWxlIChyaWdodE9mQ3Vyc29yW2luZGV4XSAmJiB3aGl0ZXNwYWNlUmUudGVzdChyaWdodE9mQ3Vyc29yW2luZGV4XSkpIHtcbiAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZGV4IDwgMSkge1xuICAgICAgICAgICAgaW5kZXggPSB0aGlzLmhhbmRsZU5vV2hpdGVzcGFjZUZvdW5kKHRva2VuUmUsIHJpZ2h0T2ZDdXJzb3IsIHdoaXRlc3BhY2VSZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlTm9XaGl0ZXNwYWNlRm91bmQodG9rZW5SZTogUmVnRXhwLCByaWdodE9mQ3Vyc29yOiBzdHJpbmcsIHdoaXRlc3BhY2VSZTogUmVnRXhwKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgICAgdG9rZW5SZS5sYXN0SW5kZXggPSAwO1xuICAgICAgICB3aGlsZSAocmlnaHRPZkN1cnNvcltpbmRleF0gJiYgIXRva2VuUmUudGVzdChyaWdodE9mQ3Vyc29yW2luZGV4XSkpIHtcbiAgICAgICAgICAgIHRva2VuUmUubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICBpZiAod2hpdGVzcGFjZVJlLnRlc3QocmlnaHRPZkN1cnNvcltpbmRleF0pKSB7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gMikge1xuICAgICAgICAgICAgICAgICAgICBpbmRleC0tO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgd2hpbGUgKHJpZ2h0T2ZDdXJzb3JbaW5kZXhdICYmIHdoaXRlc3BhY2VSZS50ZXN0KHJpZ2h0T2ZDdXJzb3JbaW5kZXhdKSkge1xuICAgICAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAyKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxufVxuIl19
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
import { ContentStyleHelper } from './content/helpers/content-style.helper';
|
|
2
|
-
import { DEFAULT_HEADINGS, DEFAULT_PARAGRAPH_STYLE, DEFAULT_TAB_WIDTH, DEFAULT_TEXT_STYLE } from './content/constants/editor.const';
|
|
3
|
-
import { DocumentInfo } from './content/constants/document-info.const';
|
|
4
|
-
import { DocxModel } from '../models/generated/docx.model';
|
|
5
|
-
import { FormatModel } from '../models/generated/format.model';
|
|
6
|
-
import { MarginModel } from './content/margin.model';
|
|
7
|
-
import { OperationsHelper } from './operations/operations-helper.helper';
|
|
8
|
-
import { ParagraphModel } from '../models/generated/paragraph.model';
|
|
9
|
-
import { ParagraphStyleModel } from '../models/generated/paragraph-style.model';
|
|
10
|
-
export class RevisionHelper {
|
|
11
|
-
static applyOperationsToRevision(revision, operations) {
|
|
12
|
-
operations.sort((a, b) => a.createTime - b.createTime);
|
|
13
|
-
const actions = operations.map(x => x.command);
|
|
14
|
-
OperationsHelper.applyOperations(revision.content, actions);
|
|
15
|
-
}
|
|
16
|
-
static fillTablesDefaultStyles(tables) {
|
|
17
|
-
for (const table of tables) {
|
|
18
|
-
for (const row of table.rows) {
|
|
19
|
-
for (const cell of row.cells) {
|
|
20
|
-
this.fillDefaultStyles(cell);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
static fillEdgesDefaultStyles(headers, footers) {
|
|
26
|
-
for (const header of headers) {
|
|
27
|
-
this.fillTablesDefaultStyles(header.tables);
|
|
28
|
-
this.fillDefaultStyles(header);
|
|
29
|
-
}
|
|
30
|
-
for (const footer of footers) {
|
|
31
|
-
this.fillTablesDefaultStyles(footer.tables);
|
|
32
|
-
this.fillDefaultStyles(footer);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
static fillDefaultStyles(contents) {
|
|
36
|
-
for (const format of contents.formats) {
|
|
37
|
-
format.textStyle = ContentStyleHelper.combineTextStyles(format.textStyle, DEFAULT_TEXT_STYLE);
|
|
38
|
-
}
|
|
39
|
-
for (const paragraph of contents.paragraphs) {
|
|
40
|
-
paragraph.paragraphStyle = this.fillParagraphStyleModel(paragraph.paragraphStyle);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
static fillParagraphStyleModel(paragraphStyle) {
|
|
44
|
-
return new ParagraphStyleModel({
|
|
45
|
-
alignment: paragraphStyle.alignment ?? DEFAULT_PARAGRAPH_STYLE.alignment,
|
|
46
|
-
backgroundColor: paragraphStyle.backgroundColor ?? DEFAULT_PARAGRAPH_STYLE.backgroundColor,
|
|
47
|
-
headingStyleId: paragraphStyle.headingStyleId,
|
|
48
|
-
indentFirstLine: paragraphStyle.indentFirstLine ?? DEFAULT_PARAGRAPH_STYLE.indentFirstLine,
|
|
49
|
-
indentHanging: paragraphStyle.indentHanging ?? DEFAULT_PARAGRAPH_STYLE.indentHanging,
|
|
50
|
-
indentLeft: paragraphStyle.indentLeft ?? DEFAULT_PARAGRAPH_STYLE.indentLeft,
|
|
51
|
-
indentRight: paragraphStyle.indentRight ?? DEFAULT_PARAGRAPH_STYLE.indentRight,
|
|
52
|
-
lineSpacing: paragraphStyle.lineSpacing ?? DEFAULT_PARAGRAPH_STYLE.lineSpacing,
|
|
53
|
-
spaceAfter: paragraphStyle.spaceAfter ?? DEFAULT_PARAGRAPH_STYLE.spaceAfter,
|
|
54
|
-
spaceBefore: paragraphStyle.spaceBefore ?? DEFAULT_PARAGRAPH_STYLE.spaceBefore,
|
|
55
|
-
contextualSpacing: paragraphStyle.contextualSpacing ?? DEFAULT_PARAGRAPH_STYLE.contextualSpacing,
|
|
56
|
-
beforeAutospacing: paragraphStyle.beforeAutospacing ?? DEFAULT_PARAGRAPH_STYLE.beforeAutospacing,
|
|
57
|
-
afterAutospacing: paragraphStyle.afterAutospacing ?? DEFAULT_PARAGRAPH_STYLE.afterAutospacing,
|
|
58
|
-
numberingId: paragraphStyle.numberingId ?? DEFAULT_PARAGRAPH_STYLE.numberingId,
|
|
59
|
-
numberingLevel: paragraphStyle.numberingLevel ?? DEFAULT_PARAGRAPH_STYLE.numberingLevel
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
static getEmptyDocxModel() {
|
|
63
|
-
const pageMargin = new MarginModel();
|
|
64
|
-
return new DocxModel({
|
|
65
|
-
content: '',
|
|
66
|
-
contentLength: 0,
|
|
67
|
-
headings: DEFAULT_HEADINGS,
|
|
68
|
-
pageHeight: DocumentInfo.height,
|
|
69
|
-
pageWidth: DocumentInfo.width,
|
|
70
|
-
paragraphs: [
|
|
71
|
-
new ParagraphModel({
|
|
72
|
-
insertIndex: 0,
|
|
73
|
-
paragraphStyle: DEFAULT_PARAGRAPH_STYLE
|
|
74
|
-
})
|
|
75
|
-
],
|
|
76
|
-
breaks: [],
|
|
77
|
-
elements: [],
|
|
78
|
-
formats: [new FormatModel({ startIndex: 0, endIndex: 0, textStyle: DEFAULT_TEXT_STYLE })],
|
|
79
|
-
images: [],
|
|
80
|
-
links: [],
|
|
81
|
-
marginBottom: pageMargin.bottom,
|
|
82
|
-
marginFooter: pageMargin.footer,
|
|
83
|
-
marginHeader: pageMargin.header,
|
|
84
|
-
marginLeft: pageMargin.left,
|
|
85
|
-
marginRight: pageMargin.right,
|
|
86
|
-
marginTop: pageMargin.top,
|
|
87
|
-
tables: [],
|
|
88
|
-
numberings: [],
|
|
89
|
-
tabs: [],
|
|
90
|
-
defaultTabWidth: DEFAULT_TAB_WIDTH
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV2aXNpb24uaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvZWRpdG9yL3JldmlzaW9uLmhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwSSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDdkUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRTNELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMvRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFckQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDekUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBSWhGLE1BQU0sT0FBTyxjQUFjO0lBQ3ZCLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxRQUF1QixFQUFFLFVBQTRCO1FBQ2xGLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN2RCxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9DLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLE9B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QU0sVUFBVSxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFDckMsT0FBTyxJQUFJLFNBQVMsQ0FBQztZQUNqQixPQUFPLEVBQUUsRUFBRTtZQUNYLGFBQWEsRUFBRSxDQUFDO1lBQ2hCLFFBQVEsRUFBRSxnQkFBZ0I7WUFDMUIsVUFBVSxFQUFFLFlBQVksQ0FBQyxNQUFNO1lBQy9CLFNBQVMsRUFBRSxZQUFZLENBQUMsS0FBSztZQUM3QixVQUFVLEVBQUU7Z0JBQ1IsSUFBSSxjQUFjLENBQUM7b0JBQ2YsV0FBVyxFQUFFLENBQUM7b0JBQ2QsY0FBYyxFQUFFLHVCQUF1QjtpQkFDMUMsQ0FBQzthQUNMO1lBQ0QsTUFBTSxFQUFFLEVBQUU7WUFDVixRQUFRLEVBQUUsRUFBRTtZQUNaLE9BQU8sRUFBRSxDQUFDLElBQUksV0FBVyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLENBQUM7WUFDekYsTUFBTSxFQUFFLEVBQUU7WUFDVixLQUFLLEVBQUUsRUFBRTtZQUNULFlBQVksRUFBRSxVQUFVLENBQUMsTUFBTTtZQUMvQixZQUFZLEVBQUUsVUFBVSxDQUFDLE1BQU07WUFDL0IsWUFBWSxFQUFFLFVBQVUsQ0FBQyxNQUFNO1lBQy9CLFVBQVUsRUFBRSxVQUFVLENBQUMsSUFBSTtZQUMzQixXQUFXLEVBQUUsVUFBVSxDQUFDLEtBQUs7WUFDN0IsU0FBUyxFQUFFLFVBQVUsQ0FBQyxHQUFHO1lBQ3pCLE1BQU0sRUFBRSxFQUFFO1lBQ1YsVUFBVSxFQUFFLEVBQUU7WUFDZCxJQUFJLEVBQUUsRUFBRTtZQUNSLGVBQWUsRUFBRSxpQkFBaUI7U0FDckMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udGVudHNJbnRlcmZhY2UgfSBmcm9tICcuL2NvbnRlbnQvY29udGVudHMuaW50ZXJmYWNlJztcbmltcG9ydCB7IENvbnRlbnRTdHlsZUhlbHBlciB9IGZyb20gJy4vY29udGVudC9oZWxwZXJzL2NvbnRlbnQtc3R5bGUuaGVscGVyJztcbmltcG9ydCB7IERFRkFVTFRfSEVBRElOR1MsIERFRkFVTFRfUEFSQUdSQVBIX1NUWUxFLCBERUZBVUxUX1RBQl9XSURUSCwgREVGQVVMVF9URVhUX1NUWUxFIH0gZnJvbSAnLi9jb250ZW50L2NvbnN0YW50cy9lZGl0b3IuY29uc3QnO1xuaW1wb3J0IHsgRG9jdW1lbnRJbmZvIH0gZnJvbSAnLi9jb250ZW50L2NvbnN0YW50cy9kb2N1bWVudC1pbmZvLmNvbnN0JztcbmltcG9ydCB7IERvY3hNb2RlbCB9IGZyb20gJy4uL21vZGVscy9nZW5lcmF0ZWQvZG9jeC5tb2RlbCc7XG5pbXBvcnQgeyBFZGdlTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvZ2VuZXJhdGVkL2VkZ2UubW9kZWwnO1xuaW1wb3J0IHsgRm9ybWF0TW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvZ2VuZXJhdGVkL2Zvcm1hdC5tb2RlbCc7XG5pbXBvcnQgeyBNYXJnaW5Nb2RlbCB9IGZyb20gJy4vY29udGVudC9tYXJnaW4ubW9kZWwnO1xuaW1wb3J0IHsgT3BlcmF0aW9uTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvZ2VuZXJhdGVkL29wZXJhdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBPcGVyYXRpb25zSGVscGVyIH0gZnJvbSAnLi9vcGVyYXRpb25zL29wZXJhdGlvbnMtaGVscGVyLmhlbHBlcic7XG5pbXBvcnQgeyBQYXJhZ3JhcGhNb2RlbCB9IGZyb20gJy4uL21vZGVscy9nZW5lcmF0ZWQvcGFyYWdyYXBoLm1vZGVsJztcbmltcG9ydCB7IFBhcmFncmFwaFN0eWxlTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvZ2VuZXJhdGVkL3BhcmFncmFwaC1zdHlsZS5tb2RlbCc7XG5pbXBvcnQgeyBSZXZpc2lvbk1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL2dlbmVyYXRlZC9yZXZpc2lvbi5tb2RlbCc7XG5pbXBvcnQgeyBUYWJsZU1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL2dlbmVyYXRlZC90YWJsZS5tb2RlbCc7XG5cbmV4cG9ydCBjbGFzcyBSZXZpc2lvbkhlbHBlciB7XG4gICAgc3RhdGljIGFwcGx5T3BlcmF0aW9uc1RvUmV2aXNpb24ocmV2aXNpb246IFJldmlzaW9uTW9kZWwsIG9wZXJhdGlvbnM6IE9wZXJhdGlvbk1vZGVsW10pOiB2b2lkIHtcbiAgICAgICAgb3BlcmF0aW9ucy5zb3J0KChhLCBiKSA9PiBhLmNyZWF0ZVRpbWUgLSBiLmNyZWF0ZVRpbWUpO1xuICAgICAgICBjb25zdCBhY3Rpb25zID0gb3BlcmF0aW9ucy5tYXAoeCA9PiB4LmNvbW1hbmQpO1xuICAgICAgICBPcGVyYXRpb25zSGVscGVyLmFwcGx5T3BlcmF0aW9ucyhyZXZpc2lvbi5jb250ZW50LCBhY3Rpb25zKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZmlsbFRhYmxlc0RlZmF1bHRTdHlsZXModGFibGVzOiBUYWJsZU1vZGVsW10pOiB2b2lkIHtcbiAgICAgICAgZm9yIChjb25zdCB0YWJsZSBvZiB0YWJsZXMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgcm93IG9mIHRhYmxlLnJvd3MpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNlbGwgb2Ygcm93LmNlbGxzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsbERlZmF1bHRTdHlsZXMoY2VsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZpbGxFZGdlc0RlZmF1bHRTdHlsZXMoaGVhZGVyczogRWRnZU1vZGVsW10sIGZvb3RlcnM6IEVkZ2VNb2RlbFtdKTogdm9pZCB7XG4gICAgICAgIGZvciAoY29uc3QgaGVhZGVyIG9mIGhlYWRlcnMpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsbFRhYmxlc0RlZmF1bHRTdHlsZXMoaGVhZGVyLnRhYmxlcyk7XG4gICAgICAgICAgICB0aGlzLmZpbGxEZWZhdWx0U3R5bGVzKGhlYWRlcik7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGZvb3RlciBvZiBmb290ZXJzKSB7XG4gICAgICAgICAgICB0aGlzLmZpbGxUYWJsZXNEZWZhdWx0U3R5bGVzKGZvb3Rlci50YWJsZXMpO1xuICAgICAgICAgICAgdGhpcy5maWxsRGVmYXVsdFN0eWxlcyhmb290ZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGZpbGxEZWZhdWx0U3R5bGVzKGNvbnRlbnRzOiBDb250ZW50c0ludGVyZmFjZSk6IHZvaWQge1xuICAgICAgICBmb3IgKGNvbnN0IGZvcm1hdCBvZiBjb250ZW50cy5mb3JtYXRzKSB7XG4gICAgICAgICAgICBmb3JtYXQudGV4dFN0eWxlID0gQ29udGVudFN0eWxlSGVscGVyLmNvbWJpbmVUZXh0U3R5bGVzKGZvcm1hdC50ZXh0U3R5bGUsIERFRkFVTFRfVEVYVF9TVFlMRSk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHBhcmFncmFwaCBvZiBjb250ZW50cy5wYXJhZ3JhcGhzKSB7XG4gICAgICAgICAgICBwYXJhZ3JhcGgucGFyYWdyYXBoU3R5bGUgPSB0aGlzLmZpbGxQYXJhZ3JhcGhTdHlsZU1vZGVsKHBhcmFncmFwaC5wYXJhZ3JhcGhTdHlsZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZmlsbFBhcmFncmFwaFN0eWxlTW9kZWwocGFyYWdyYXBoU3R5bGU6IFBhcmFncmFwaFN0eWxlTW9kZWwpOiBQYXJhZ3JhcGhTdHlsZU1vZGVsIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQYXJhZ3JhcGhTdHlsZU1vZGVsKHtcbiAgICAgICAgICAgIGFsaWdubWVudDogcGFyYWdyYXBoU3R5bGUuYWxpZ25tZW50ID8/IERFRkFVTFRfUEFSQUdSQVBIX1NUWUxFLmFsaWdubWVudCxcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogcGFyYWdyYXBoU3R5bGUuYmFja2dyb3VuZENvbG9yID8/IERFRkFVTFRfUEFSQUdSQVBIX1NUWUxFLmJhY2tncm91bmRDb2xvcixcbiAgICAgICAgICAgIGhlYWRpbmdTdHlsZUlkOiBwYXJhZ3JhcGhTdHlsZS5oZWFkaW5nU3R5bGVJZCxcbiAgICAgICAgICAgIGluZGVudEZpcnN0TGluZTogcGFyYWdyYXBoU3R5bGUuaW5kZW50Rmlyc3RMaW5lID8/IERFRkFVTFRfUEFSQUdSQVBIX1NUWUxFLmluZGVudEZpcnN0TGluZSxcbiAgICAgICAgICAgIGluZGVudEhhbmdpbmc6IHBhcmFncmFwaFN0eWxlLmluZGVudEhhbmdpbmcgPz8gREVGQVVMVF9QQVJBR1JBUEhfU1RZTEUuaW5kZW50SGFuZ2luZyxcbiAgICAgICAgICAgIGluZGVudExlZnQ6IHBhcmFncmFwaFN0eWxlLmluZGVudExlZnQgPz8gREVGQVVMVF9QQVJBR1JBUEhfU1RZTEUuaW5kZW50TGVmdCxcbiAgICAgICAgICAgIGluZGVudFJpZ2h0OiBwYXJhZ3JhcGhTdHlsZS5pbmRlbnRSaWdodCA/PyBERUZBVUxUX1BBUkFHUkFQSF9TVFlMRS5pbmRlbnRSaWdodCxcbiAgICAgICAgICAgIGxpbmVTcGFjaW5nOiBwYXJhZ3JhcGhTdHlsZS5saW5lU3BhY2luZyA/PyBERUZBVUxUX1BBUkFHUkFQSF9TVFlMRS5saW5lU3BhY2luZyxcbiAgICAgICAgICAgIHNwYWNlQWZ0ZXI6IHBhcmFncmFwaFN0eWxlLnNwYWNlQWZ0ZXIgPz8gREVGQVVMVF9QQVJBR1JBUEhfU1RZTEUuc3BhY2VBZnRlcixcbiAgICAgICAgICAgIHNwYWNlQmVmb3JlOiBwYXJhZ3JhcGhTdHlsZS5zcGFjZUJlZm9yZSA/PyBERUZBVUxUX1BBUkFHUkFQSF9TVFlMRS5zcGFjZUJlZm9yZSxcbiAgICAgICAgICAgIGNvbnRleHR1YWxTcGFjaW5nOiBwYXJhZ3JhcGhTdHlsZS5jb250ZXh0dWFsU3BhY2luZyA/PyBERUZBVUxUX1BBUkFHUkFQSF9TVFlMRS5jb250ZXh0dWFsU3BhY2luZyxcbiAgICAgICAgICAgIGJlZm9yZUF1dG9zcGFjaW5nOiBwYXJhZ3JhcGhTdHlsZS5iZWZvcmVBdXRvc3BhY2luZyA/PyBERUZBVUxUX1BBUkFHUkFQSF9TVFlMRS5iZWZvcmVBdXRvc3BhY2luZyxcbiAgICAgICAgICAgIGFmdGVyQXV0b3NwYWNpbmc6IHBhcmFncmFwaFN0eWxlLmFmdGVyQXV0b3NwYWNpbmcgPz8gREVGQVVMVF9QQVJBR1JBUEhfU1RZTEUuYWZ0ZXJBdXRvc3BhY2luZyxcbiAgICAgICAgICAgIG51bWJlcmluZ0lkOiBwYXJhZ3JhcGhTdHlsZS5udW1iZXJpbmdJZCA/PyBERUZBVUxUX1BBUkFHUkFQSF9TVFlMRS5udW1iZXJpbmdJZCxcbiAgICAgICAgICAgIG51bWJlcmluZ0xldmVsOiBwYXJhZ3JhcGhTdHlsZS5udW1iZXJpbmdMZXZlbCA/PyBERUZBVUxUX1BBUkFHUkFQSF9TVFlMRS5udW1iZXJpbmdMZXZlbFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0RW1wdHlEb2N4TW9kZWwoKTogRG9jeE1vZGVsIHtcbiAgICAgICAgY29uc3QgcGFnZU1hcmdpbiA9IG5ldyBNYXJnaW5Nb2RlbCgpO1xuICAgICAgICByZXR1cm4gbmV3IERvY3hNb2RlbCh7XG4gICAgICAgICAgICBjb250ZW50OiAnJyxcbiAgICAgICAgICAgIGNvbnRlbnRMZW5ndGg6IDAsXG4gICAgICAgICAgICBoZWFkaW5nczogREVGQVVMVF9IRUFESU5HUyxcbiAgICAgICAgICAgIHBhZ2VIZWlnaHQ6IERvY3VtZW50SW5mby5oZWlnaHQsXG4gICAgICAgICAgICBwYWdlV2lkdGg6IERvY3VtZW50SW5mby53aWR0aCxcbiAgICAgICAgICAgIHBhcmFncmFwaHM6IFtcbiAgICAgICAgICAgICAgICBuZXcgUGFyYWdyYXBoTW9kZWwoe1xuICAgICAgICAgICAgICAgICAgICBpbnNlcnRJbmRleDogMCxcbiAgICAgICAgICAgICAgICAgICAgcGFyYWdyYXBoU3R5bGU6IERFRkFVTFRfUEFSQUdSQVBIX1NUWUxFXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBicmVha3M6IFtdLFxuICAgICAgICAgICAgZWxlbWVudHM6IFtdLFxuICAgICAgICAgICAgZm9ybWF0czogW25ldyBGb3JtYXRNb2RlbCh7IHN0YXJ0SW5kZXg6IDAsIGVuZEluZGV4OiAwLCB0ZXh0U3R5bGU6IERFRkFVTFRfVEVYVF9TVFlMRSB9KV0sXG4gICAgICAgICAgICBpbWFnZXM6IFtdLFxuICAgICAgICAgICAgbGlua3M6IFtdLFxuICAgICAgICAgICAgbWFyZ2luQm90dG9tOiBwYWdlTWFyZ2luLmJvdHRvbSxcbiAgICAgICAgICAgIG1hcmdpbkZvb3RlcjogcGFnZU1hcmdpbi5mb290ZXIsXG4gICAgICAgICAgICBtYXJnaW5IZWFkZXI6IHBhZ2VNYXJnaW4uaGVhZGVyLFxuICAgICAgICAgICAgbWFyZ2luTGVmdDogcGFnZU1hcmdpbi5sZWZ0LFxuICAgICAgICAgICAgbWFyZ2luUmlnaHQ6IHBhZ2VNYXJnaW4ucmlnaHQsXG4gICAgICAgICAgICBtYXJnaW5Ub3A6IHBhZ2VNYXJnaW4udG9wLFxuICAgICAgICAgICAgdGFibGVzOiBbXSxcbiAgICAgICAgICAgIG51bWJlcmluZ3M6IFtdLFxuICAgICAgICAgICAgdGFiczogW10sXG4gICAgICAgICAgICBkZWZhdWx0VGFiV2lkdGg6IERFRkFVTFRfVEFCX1dJRFRIXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
|