@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,374 +0,0 @@
|
|
|
1
|
-
import { CellModel } from '../../../models/generated/cell.model';
|
|
2
|
-
import { ColumnModel } from '../../../models/generated/column.model';
|
|
3
|
-
import { DEFAULT_PARAGRAPH_STYLE, DEFAULT_TEXT_STYLE } from '../../content/constants/editor.const';
|
|
4
|
-
import { FormatModel } from '../../../models/generated/format.model';
|
|
5
|
-
import { IndexedElementOperationsHelper } from './indexed-element-operations.helper';
|
|
6
|
-
import { ParagraphModel } from '../../../models/generated/paragraph.model';
|
|
7
|
-
import { ParagraphStyleModel } from '../../../models/generated/paragraph-style.model';
|
|
8
|
-
import { ResizerSide } from '../../components/table/enums/reisizer-side.enum';
|
|
9
|
-
import { RowModel } from '../../../models/generated/row.model';
|
|
10
|
-
import { TableModel } from '../../../models/generated/table.model';
|
|
11
|
-
import { TextStyleModel } from '../../../models/generated/text-style.model';
|
|
12
|
-
import { VerticalMerge } from '../../components/table/enums/vertical-merge.enum';
|
|
13
|
-
export class TableOperationsHelper {
|
|
14
|
-
static insertContent(tables, insertIndex, tableModel, contentWidth) {
|
|
15
|
-
let rows = [];
|
|
16
|
-
for (let i = 0; i < tableModel.rowsCount; i++) {
|
|
17
|
-
let cells = [];
|
|
18
|
-
for (let j = 0; j < tableModel.columnsCount; j++) {
|
|
19
|
-
const cell = new CellModel({
|
|
20
|
-
breaks: [],
|
|
21
|
-
content: '',
|
|
22
|
-
contentLength: 0,
|
|
23
|
-
elements: [],
|
|
24
|
-
formats: [new FormatModel({ startIndex: 0, endIndex: 0, textStyle: DEFAULT_TEXT_STYLE })],
|
|
25
|
-
images: [],
|
|
26
|
-
paragraphs: [new ParagraphModel({ insertIndex: 0, paragraphStyle: DEFAULT_PARAGRAPH_STYLE })],
|
|
27
|
-
tables: [],
|
|
28
|
-
tabs: [],
|
|
29
|
-
links: [],
|
|
30
|
-
widthType: 'dxa'
|
|
31
|
-
});
|
|
32
|
-
cells.push(cell);
|
|
33
|
-
}
|
|
34
|
-
rows.push(new RowModel({ cells: cells }));
|
|
35
|
-
}
|
|
36
|
-
const columnWidth = Math.round(contentWidth / tableModel.columnsCount);
|
|
37
|
-
const columns = [];
|
|
38
|
-
for (let i = 0; i < tableModel.columnsCount; i++) {
|
|
39
|
-
const column = new ColumnModel({
|
|
40
|
-
width: columnWidth
|
|
41
|
-
});
|
|
42
|
-
columns.push(column);
|
|
43
|
-
}
|
|
44
|
-
const table = new TableModel({ insertIndex: tableModel.insertTableIndex, alignment: 0, rows, columns });
|
|
45
|
-
IndexedElementOperationsHelper.insertContent(tables, insertIndex, tableModel.content.length);
|
|
46
|
-
const index = tables.findIndex(x => x.insertIndex > table.insertIndex);
|
|
47
|
-
if (index < 0) {
|
|
48
|
-
tables.push(table);
|
|
49
|
-
}
|
|
50
|
-
else {
|
|
51
|
-
tables.splice(index, 0, table);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
static insertTableRows(tables, insertIndex, rowsCount, targetIndex, inheritIndex) {
|
|
55
|
-
const table = tables.find(x => x.insertIndex === insertIndex);
|
|
56
|
-
const matrix = this.getMatrix(table);
|
|
57
|
-
const newCells = this.getNewRowCells(matrix, targetIndex, inheritIndex);
|
|
58
|
-
this.insertNewRowCells(table, newCells, rowsCount, targetIndex, inheritIndex);
|
|
59
|
-
}
|
|
60
|
-
static insertTableColumns(tables, insertIndex, columnsCount, targetIndex, inheritIndex, contentWidth) {
|
|
61
|
-
const table = tables.find(x => x.insertIndex === insertIndex);
|
|
62
|
-
const matrix = this.getMatrix(table);
|
|
63
|
-
const targetIndexes = this.getTargetIndexes(matrix, targetIndex);
|
|
64
|
-
const newCells = this.getNewColumnCells(matrix, columnsCount, targetIndex, inheritIndex);
|
|
65
|
-
this.insertNewColumnCells(table, targetIndexes, newCells);
|
|
66
|
-
this.insertNewColumns(table, columnsCount, targetIndex, inheritIndex);
|
|
67
|
-
this.calculateColumnsWidth(table, contentWidth);
|
|
68
|
-
}
|
|
69
|
-
static removeTableRows(tables, insertIndex, startIndex, endIndex) {
|
|
70
|
-
const table = tables.find(x => x.insertIndex === insertIndex);
|
|
71
|
-
const matrix = this.getMatrix(table);
|
|
72
|
-
this.removeMatrixRows(matrix, startIndex, endIndex);
|
|
73
|
-
table.rows.splice(startIndex, endIndex - startIndex + 1);
|
|
74
|
-
}
|
|
75
|
-
static removeTableColumns(tables, insertIndex, startIndex, endIndex, contentWidth) {
|
|
76
|
-
const table = tables.find(x => x.insertIndex === insertIndex);
|
|
77
|
-
const matrix = this.getMatrix(table);
|
|
78
|
-
table.columns.splice(startIndex, endIndex - startIndex + 1);
|
|
79
|
-
this.removeMatrixRowCells(matrix, table, startIndex, endIndex);
|
|
80
|
-
for (let i = 0; i < table.rows.length; i++) {
|
|
81
|
-
table.rows[i].cells = table.rows[i].cells.filter(x => matrix[i].cells.includes(x));
|
|
82
|
-
}
|
|
83
|
-
this.calculateColumnsWidth(table, contentWidth);
|
|
84
|
-
}
|
|
85
|
-
static resizeTableColumns(tables, resizeTableColumns) {
|
|
86
|
-
const table = tables.find(x => x.insertIndex === resizeTableColumns.insertIndex);
|
|
87
|
-
this.resizeColumns(table, resizeTableColumns);
|
|
88
|
-
this.calculateCellsWidth(table);
|
|
89
|
-
}
|
|
90
|
-
static restoreTable(tables, insertIndex, oldTable) {
|
|
91
|
-
const table = tables.find(x => x.insertIndex === insertIndex);
|
|
92
|
-
table.alignment = oldTable.alignment;
|
|
93
|
-
table.borders = oldTable.borders;
|
|
94
|
-
table.callSpacing = oldTable.callSpacing;
|
|
95
|
-
table.columns = oldTable.columns;
|
|
96
|
-
table.headingStyleId = oldTable.headingStyleId;
|
|
97
|
-
table.indentLeft = oldTable.indentLeft;
|
|
98
|
-
table.indentLeftFromText = oldTable.indentLeftFromText;
|
|
99
|
-
table.indentRightFromText = oldTable.indentRightFromText;
|
|
100
|
-
table.margins = oldTable.margins;
|
|
101
|
-
table.rows = oldTable.rows;
|
|
102
|
-
}
|
|
103
|
-
static getMatrix(table) {
|
|
104
|
-
const matrix = [];
|
|
105
|
-
table.rows.forEach((row, rowIndex) => {
|
|
106
|
-
matrix.push(new RowModel({ ...row, cells: [] }));
|
|
107
|
-
row.cells.forEach(cell => {
|
|
108
|
-
for (let i = 0; i < (cell.horizontalMerge ?? 1); i++) {
|
|
109
|
-
matrix[rowIndex].cells.push(cell);
|
|
110
|
-
}
|
|
111
|
-
});
|
|
112
|
-
});
|
|
113
|
-
return matrix;
|
|
114
|
-
}
|
|
115
|
-
static getNewRowCells(matrix, targetIndex, inheritIndex) {
|
|
116
|
-
const newCells = [];
|
|
117
|
-
for (let i = 0; i < matrix[inheritIndex].cells.length; i++) {
|
|
118
|
-
if (matrix[inheritIndex].cells[i] === matrix[inheritIndex].cells[i - 1]) {
|
|
119
|
-
continue;
|
|
120
|
-
}
|
|
121
|
-
const newCell = new CellModel({
|
|
122
|
-
...matrix[inheritIndex].cells[i],
|
|
123
|
-
breaks: [],
|
|
124
|
-
content: '',
|
|
125
|
-
contentLength: 0,
|
|
126
|
-
elements: [],
|
|
127
|
-
images: [],
|
|
128
|
-
formats: [
|
|
129
|
-
new FormatModel({
|
|
130
|
-
startIndex: 0,
|
|
131
|
-
endIndex: 0,
|
|
132
|
-
textStyle: new TextStyleModel(matrix[inheritIndex].cells[i].formats[0].textStyle)
|
|
133
|
-
})
|
|
134
|
-
],
|
|
135
|
-
paragraphs: [
|
|
136
|
-
new ParagraphModel({
|
|
137
|
-
insertIndex: 0,
|
|
138
|
-
paragraphStyle: new ParagraphStyleModel(matrix[inheritIndex].cells[i].paragraphs[0].paragraphStyle)
|
|
139
|
-
})
|
|
140
|
-
],
|
|
141
|
-
verticalMerge: this.getCellVerticalMerge(matrix[inheritIndex].cells[i].verticalMerge, targetIndex, inheritIndex),
|
|
142
|
-
tables: [],
|
|
143
|
-
tabs: [],
|
|
144
|
-
links: []
|
|
145
|
-
});
|
|
146
|
-
newCells.push(newCell);
|
|
147
|
-
}
|
|
148
|
-
return newCells;
|
|
149
|
-
}
|
|
150
|
-
static getCellVerticalMerge(currentVerticalMerge, targetIndex, inheritIndex) {
|
|
151
|
-
if (currentVerticalMerge !== VerticalMerge.Restart) {
|
|
152
|
-
return currentVerticalMerge;
|
|
153
|
-
}
|
|
154
|
-
return targetIndex > inheritIndex ? VerticalMerge.Merge : null;
|
|
155
|
-
}
|
|
156
|
-
static insertNewRowCells(table, newCells, rowsCount, targetIndex, inheritIndex) {
|
|
157
|
-
for (let i = 0; i < rowsCount; i++) {
|
|
158
|
-
const newRowCells = newCells.map(x => new CellModel({
|
|
159
|
-
...x,
|
|
160
|
-
breaks: [],
|
|
161
|
-
content: '',
|
|
162
|
-
contentLength: 0,
|
|
163
|
-
elements: [],
|
|
164
|
-
formats: [new FormatModel({ startIndex: 0, endIndex: 0, textStyle: new TextStyleModel(x.formats[0].textStyle) })],
|
|
165
|
-
images: [],
|
|
166
|
-
paragraphs: [
|
|
167
|
-
new ParagraphModel({ insertIndex: 0, paragraphStyle: new ParagraphStyleModel(x.paragraphs[0].paragraphStyle) })
|
|
168
|
-
],
|
|
169
|
-
tables: [],
|
|
170
|
-
tabs: []
|
|
171
|
-
}));
|
|
172
|
-
const newRow = new RowModel({ ...table.rows[inheritIndex], cells: newRowCells });
|
|
173
|
-
table.rows.splice(targetIndex, 0, newRow);
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
static getTargetIndexes(matrix, targetIndex) {
|
|
177
|
-
const targetIndexes = [];
|
|
178
|
-
for (const row of matrix) {
|
|
179
|
-
let absoluteCellIndex = 0;
|
|
180
|
-
let currentTargetIndex = 0;
|
|
181
|
-
let cellMatrixIndex = 0;
|
|
182
|
-
while (absoluteCellIndex < targetIndex) {
|
|
183
|
-
if (row.cells[cellMatrixIndex] === row.cells[cellMatrixIndex - 1]) {
|
|
184
|
-
cellMatrixIndex++;
|
|
185
|
-
continue;
|
|
186
|
-
}
|
|
187
|
-
if (!row.cells[cellMatrixIndex]) {
|
|
188
|
-
break;
|
|
189
|
-
}
|
|
190
|
-
absoluteCellIndex += row.cells[cellMatrixIndex].horizontalMerge ?? 1;
|
|
191
|
-
cellMatrixIndex++;
|
|
192
|
-
currentTargetIndex++;
|
|
193
|
-
}
|
|
194
|
-
targetIndexes.push(currentTargetIndex);
|
|
195
|
-
}
|
|
196
|
-
return targetIndexes;
|
|
197
|
-
}
|
|
198
|
-
static getNewColumnCells(matrix, columnsCount, targetIndex, inheritIndex) {
|
|
199
|
-
return matrix.map(row => {
|
|
200
|
-
const newRowCells = [];
|
|
201
|
-
const isContinuousCell = inheritIndex === targetIndex
|
|
202
|
-
? row.cells[inheritIndex] === row.cells[targetIndex - 1] && row.cells[inheritIndex].horizontalMerge
|
|
203
|
-
: row.cells[inheritIndex] === row.cells[targetIndex] && row.cells[inheritIndex].horizontalMerge;
|
|
204
|
-
if (isContinuousCell) {
|
|
205
|
-
row.cells[inheritIndex].horizontalMerge += columnsCount;
|
|
206
|
-
return newRowCells;
|
|
207
|
-
}
|
|
208
|
-
for (let i = 0; i < columnsCount; i++) {
|
|
209
|
-
const newCell = new CellModel({
|
|
210
|
-
...row.cells[inheritIndex],
|
|
211
|
-
breaks: [],
|
|
212
|
-
content: '',
|
|
213
|
-
contentLength: 0,
|
|
214
|
-
elements: [],
|
|
215
|
-
formats: [new FormatModel({ startIndex: 0, endIndex: 0, textStyle: row.cells[inheritIndex].formats[0].textStyle })],
|
|
216
|
-
horizontalMerge: null,
|
|
217
|
-
images: [],
|
|
218
|
-
paragraphs: [
|
|
219
|
-
new ParagraphModel({ insertIndex: 0, paragraphStyle: row.cells[inheritIndex].paragraphs[0].paragraphStyle })
|
|
220
|
-
],
|
|
221
|
-
tables: [],
|
|
222
|
-
tabs: [],
|
|
223
|
-
verticalMerge: null,
|
|
224
|
-
width: row.cells[inheritIndex].width
|
|
225
|
-
});
|
|
226
|
-
newRowCells.push(newCell);
|
|
227
|
-
}
|
|
228
|
-
return newRowCells;
|
|
229
|
-
});
|
|
230
|
-
}
|
|
231
|
-
static insertNewColumnCells(table, targetIndexes, newCells) {
|
|
232
|
-
for (let i = 0; i < targetIndexes.length; i++) {
|
|
233
|
-
if (!newCells[i].length) {
|
|
234
|
-
continue;
|
|
235
|
-
}
|
|
236
|
-
table.rows[i].cells.splice(targetIndexes[i], 0, ...newCells[i]);
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
static insertNewColumns(table, columnsCount, targetIndex, inheritIndex) {
|
|
240
|
-
const newColumn = table.columns[inheritIndex];
|
|
241
|
-
for (let i = 0; i < columnsCount; i++) {
|
|
242
|
-
table.columns.splice(targetIndex, 0, new ColumnModel(newColumn));
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
static calculateColumnsWidth(table, contentWidth) {
|
|
246
|
-
let currentTableWidth = table.columns.reduce((prev, next) => prev + next.width, 0);
|
|
247
|
-
table.columns.forEach(x => (x.width = Math.round((x.width / currentTableWidth) * contentWidth)));
|
|
248
|
-
table.rows.forEach(row => {
|
|
249
|
-
for (let i = 0; i < row.cells.length; i++) {
|
|
250
|
-
if (row.cells[i].horizontalMerge) {
|
|
251
|
-
let width = table.columns[i].width;
|
|
252
|
-
for (let j = 1; j < row.cells[i].horizontalMerge; j++) {
|
|
253
|
-
width += table.columns[i + j].width;
|
|
254
|
-
}
|
|
255
|
-
row.cells[i].width = width;
|
|
256
|
-
}
|
|
257
|
-
else {
|
|
258
|
-
row.cells[i].width = table.columns[i].width;
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
});
|
|
262
|
-
}
|
|
263
|
-
static removeMatrixRows(matrix, startIndex, endIndex) {
|
|
264
|
-
const removedRows = matrix.slice(startIndex, endIndex + 1);
|
|
265
|
-
matrix.splice(startIndex, endIndex - startIndex + 1);
|
|
266
|
-
let i = 0;
|
|
267
|
-
while (i < matrix.length) {
|
|
268
|
-
let j = 0;
|
|
269
|
-
while (j < matrix[i].cells.length) {
|
|
270
|
-
if (matrix[i].cells[j].verticalMerge === VerticalMerge.Restart &&
|
|
271
|
-
(!matrix[i + 1] || matrix[i + 1].cells[j].verticalMerge !== VerticalMerge.Merge)) {
|
|
272
|
-
matrix[i].cells[j].verticalMerge = null;
|
|
273
|
-
}
|
|
274
|
-
if (matrix[i].cells[j].verticalMerge === VerticalMerge.Merge &&
|
|
275
|
-
![VerticalMerge.Restart, VerticalMerge.Merge].includes(matrix[i - 1]?.cells[j].verticalMerge)) {
|
|
276
|
-
this.fillMergedCellAfterRemove(matrix, removedRows, i, j);
|
|
277
|
-
}
|
|
278
|
-
j++;
|
|
279
|
-
}
|
|
280
|
-
i++;
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
static fillMergedCellAfterRemove(matrix, removedRows, rowIndex, cellIndex) {
|
|
284
|
-
let i = removedRows.length - 1;
|
|
285
|
-
let removedCell;
|
|
286
|
-
while (!removedCell) {
|
|
287
|
-
if (removedRows[i].cells[cellIndex].verticalMerge === VerticalMerge.Restart) {
|
|
288
|
-
removedCell = removedRows[i].cells[cellIndex];
|
|
289
|
-
}
|
|
290
|
-
i--;
|
|
291
|
-
}
|
|
292
|
-
matrix[rowIndex].cells[cellIndex].backgroundColor = removedCell.backgroundColor;
|
|
293
|
-
matrix[rowIndex].cells[cellIndex].borders = removedCell.borders;
|
|
294
|
-
matrix[rowIndex].cells[cellIndex].breaks = removedCell.breaks;
|
|
295
|
-
matrix[rowIndex].cells[cellIndex].columnSections = removedCell.columnSections;
|
|
296
|
-
matrix[rowIndex].cells[cellIndex].content = removedCell.content;
|
|
297
|
-
matrix[rowIndex].cells[cellIndex].contentLength = removedCell.contentLength;
|
|
298
|
-
matrix[rowIndex].cells[cellIndex].elements = removedCell.elements;
|
|
299
|
-
matrix[rowIndex].cells[cellIndex].formats = removedCell.formats;
|
|
300
|
-
matrix[rowIndex].cells[cellIndex].horizontalMerge = removedCell.horizontalMerge;
|
|
301
|
-
matrix[rowIndex].cells[cellIndex].images = removedCell.images;
|
|
302
|
-
matrix[rowIndex].cells[cellIndex].margins = removedCell.margins;
|
|
303
|
-
matrix[rowIndex].cells[cellIndex].paragraphs = removedCell.paragraphs;
|
|
304
|
-
matrix[rowIndex].cells[cellIndex].tables = removedCell.tables;
|
|
305
|
-
matrix[rowIndex].cells[cellIndex].verticalAlign = removedCell.verticalAlign;
|
|
306
|
-
matrix[rowIndex].cells[cellIndex].verticalMerge = removedCell.verticalMerge;
|
|
307
|
-
matrix[rowIndex].cells[cellIndex].width = removedCell.width;
|
|
308
|
-
}
|
|
309
|
-
static removeMatrixRowCells(matrix, table, startIndex, endIndex) {
|
|
310
|
-
let i = 0;
|
|
311
|
-
while (i < matrix.length) {
|
|
312
|
-
let j = 0;
|
|
313
|
-
matrix[i].cells.splice(startIndex, endIndex - startIndex + 1);
|
|
314
|
-
while (j < matrix[i].cells.length) {
|
|
315
|
-
if (matrix[i].cells[j].horizontalMerge > 1) {
|
|
316
|
-
const mergedCellsCount = this.fillDataForHorizontalMergedCell(matrix, table, i, j);
|
|
317
|
-
j += mergedCellsCount;
|
|
318
|
-
}
|
|
319
|
-
else {
|
|
320
|
-
j++;
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
i++;
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
static fillDataForHorizontalMergedCell(matrix, table, rowIndex, cellIndex) {
|
|
327
|
-
const mergedCells = matrix[rowIndex].cells.filter(x => x === matrix[rowIndex].cells[cellIndex]);
|
|
328
|
-
if (mergedCells.length > 1) {
|
|
329
|
-
matrix[rowIndex].cells[cellIndex].horizontalMerge = mergedCells.length;
|
|
330
|
-
matrix[rowIndex].cells[cellIndex].width = 0;
|
|
331
|
-
for (let i = 0; i < matrix[rowIndex].cells[cellIndex].horizontalMerge; i++) {
|
|
332
|
-
matrix[rowIndex].cells[cellIndex].width += table.columns[cellIndex + i].width;
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
else {
|
|
336
|
-
matrix[rowIndex].cells[cellIndex].horizontalMerge = null;
|
|
337
|
-
matrix[rowIndex].cells[cellIndex].width = table.columns[cellIndex].width;
|
|
338
|
-
}
|
|
339
|
-
matrix[rowIndex].cells[cellIndex].horizontalMerge = mergedCells.length > 1 ? mergedCells.length : null;
|
|
340
|
-
return mergedCells.length;
|
|
341
|
-
}
|
|
342
|
-
static resizeColumns(table, resizeTableColumns) {
|
|
343
|
-
if (resizeTableColumns.resizerSide === ResizerSide.Left) {
|
|
344
|
-
table.columns[resizeTableColumns.columnIndex].width += resizeTableColumns.distance;
|
|
345
|
-
return;
|
|
346
|
-
}
|
|
347
|
-
const cellHorizontalMerge = table.rows[resizeTableColumns.rowIndex].cells[resizeTableColumns.cellIndex].horizontalMerge ?? 1;
|
|
348
|
-
const resizerColumnIndex = resizeTableColumns.columnIndex + cellHorizontalMerge - 1;
|
|
349
|
-
table.columns[resizerColumnIndex].width += resizeTableColumns.distance;
|
|
350
|
-
if (table.rows[resizeTableColumns.rowIndex].cells[resizeTableColumns.cellIndex + 1]) {
|
|
351
|
-
table.columns[resizerColumnIndex + 1].width -= resizeTableColumns.distance;
|
|
352
|
-
}
|
|
353
|
-
}
|
|
354
|
-
static calculateCellsWidth(table) {
|
|
355
|
-
table.rows.forEach(row => {
|
|
356
|
-
let columnIndex = 0;
|
|
357
|
-
for (let i = 0; i < row.cells.length; i++) {
|
|
358
|
-
if (row.cells[i].horizontalMerge) {
|
|
359
|
-
let width = table.columns[columnIndex].width;
|
|
360
|
-
for (let j = 1; j < row.cells[i].horizontalMerge; j++) {
|
|
361
|
-
width += table.columns[columnIndex + j].width;
|
|
362
|
-
}
|
|
363
|
-
row.cells[i].width = width;
|
|
364
|
-
columnIndex += row.cells[i].horizontalMerge;
|
|
365
|
-
}
|
|
366
|
-
else {
|
|
367
|
-
row.cells[i].width = table.columns[columnIndex].width;
|
|
368
|
-
columnIndex++;
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
});
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtb3BlcmF0aW9ucy5oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbm9kZXIvc3JjL2xpYi9lZGl0b3Ivb3BlcmF0aW9ucy9oZWxwZXJzL3RhYmxlLW9wZXJhdGlvbnMuaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDckUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDbkcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRXJGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUV0RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saURBQWlELENBQUM7QUFDOUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDNUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBRWpGLE1BQU0sT0FBTyxxQkFBcUI7SUFDOUIsTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFvQixFQUFFLFdBQW1CLEVBQUUsVUFBNEIsRUFBRSxZQUFvQjtRQUM5RyxJQUFJLElBQUksR0FBZSxFQUFFLENBQUM7UUFDMUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFH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TUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQztRQUNoRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDO1FBQzlELE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsY0FBYyxHQUFHLFdBQVcsQ0FBQyxjQUFjLENBQUM7UUFDOUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQztRQUNoRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLGFBQWEsR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDO1FBQzVFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUM7UUFDbEUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQztRQUNoRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLGVBQWUsR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDO1FBQ2hGLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUM7UUFDOUQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQztRQUNoRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMs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Li8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2NlbGwubW9kZWwnO1xuaW1wb3J0IHsgQ29sdW1uTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2NvbHVtbi5tb2RlbCc7XG5pbXBvcnQgeyBERUZBVUxUX1BBUkFHUkFQSF9TVFlMRSwgREVGQVVMVF9URVhUX1NUWUxFIH0gZnJvbSAnLi4vLi4vY29udGVudC9jb25zdGFudHMvZWRpdG9yLmNvbnN0JztcbmltcG9ydCB7IEZvcm1hdE1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9mb3JtYXQubW9kZWwnO1xuaW1wb3J0IHsgSW5kZXhlZEVsZW1lbnRPcGVyYXRpb25zSGVscGVyIH0gZnJvbSAnLi9pbmRleGVkLWVsZW1lbnQtb3BlcmF0aW9ucy5oZWxwZXInO1xuaW1wb3J0IHsgSW5zZXJ0VGFibGVNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW5zZXJ0LXRhYmxlLm1vZGVsJztcbmltcG9ydCB7IFBhcmFncmFwaE1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9wYXJhZ3JhcGgubW9kZWwnO1xuaW1wb3J0IHsgUGFyYWdyYXBoU3R5bGVNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcGFyYWdyYXBoLXN0eWxlLm1vZGVsJztcbmltcG9ydCB7IFJlc2l6ZVRhYmxlQ29sdW1uc01vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9yZXNpemUtdGFibGUtY29sdW1ucy5tb2RlbCc7XG5pbXBvcnQgeyBSZXNpemVyU2lkZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvdGFibGUvZW51bXMvcmVpc2l6ZXItc2lkZS5lbnVtJztcbmltcG9ydCB7IFJvd01vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9yb3cubW9kZWwnO1xuaW1wb3J0IHsgVGFibGVNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvdGFibGUubW9kZWwnO1xuaW1wb3J0IHsgVGV4dFN0eWxlTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3RleHQtc3R5bGUubW9kZWwnO1xuaW1wb3J0IHsgVmVydGljYWxNZXJnZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvdGFibGUvZW51bXMvdmVydGljYWwtbWVyZ2UuZW51bSc7XG5cbmV4cG9ydCBjbGFzcyBUYWJsZU9wZXJhdGlvbnNIZWxwZXIge1xuICAgIHN0YXRpYyBpbnNlcnRDb250ZW50KHRhYmxlczogVGFibGVNb2RlbFtdLCBpbnNlcnRJbmRleDogbnVtYmVyLCB0YWJsZU1vZGVsOiBJbnNlcnRUYWJsZU1vZGVsLCBjb250ZW50V2lkdGg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBsZXQgcm93czogUm93TW9kZWxbXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRhYmxlTW9kZWwucm93c0NvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGxldCBjZWxsczogQ2VsbE1vZGVsW10gPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGFibGVNb2RlbC5jb2x1bW5zQ291bnQ7IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGwgPSBuZXcgQ2VsbE1vZGVsKHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogJycsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRMZW5ndGg6IDAsXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0czogW25ldyBGb3JtYXRNb2RlbCh7IHN0YXJ0SW5kZXg6IDAsIGVuZEluZGV4OiAwLCB0ZXh0U3R5bGU6IERFRkFVTFRfVEVYVF9TVFlMRSB9KV0sXG4gICAgICAgICAgICAgICAgICAgIGltYWdlczogW10sXG4gICAgICAgICAgICAgICAgICAgIHBhcmFncmFwaHM6IFtuZXcgUGFyYWdyYXBoTW9kZWwoeyBpbnNlcnRJbmRleDogMCwgcGFyYWdyYXBoU3R5bGU6IERFRkFVTFRfUEFSQUdSQVBIX1NUWUxFIH0pXSxcbiAgICAgICAgICAgICAgICAgICAgdGFibGVzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgdGFiczogW10sXG4gICAgICAgICAgICAgICAgICAgIGxpbmtzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGhUeXBlOiAnZHhhJ1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNlbGxzLnB1c2goY2VsbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJvd3MucHVzaChuZXcgUm93TW9kZWwoeyBjZWxsczogY2VsbHMgfSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29sdW1uV2lkdGggPSBNYXRoLnJvdW5kKGNvbnRlbnRXaWR0aCAvIHRhYmxlTW9kZWwuY29sdW1uc0NvdW50KTtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRhYmxlTW9kZWwuY29sdW1uc0NvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IG5ldyBDb2x1bW5Nb2RlbCh7XG4gICAgICAgICAgICAgICAgd2lkdGg6IGNvbHVtbldpZHRoXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhYmxlID0gbmV3IFRhYmxlTW9kZWwoeyBpbnNlcnRJbmRleDogdGFibGVNb2RlbC5pbnNlcnRUYWJsZUluZGV4LCBhbGlnbm1lbnQ6IDAsIHJvd3MsIGNvbHVtbnMgfSk7XG5cbiAgICAgICAgSW5kZXhlZEVsZW1lbnRPcGVyYXRpb25zSGVscGVyLmluc2VydENvbnRlbnQodGFibGVzLCBpbnNlcnRJbmRleCwgdGFibGVNb2RlbC5jb250ZW50Lmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGFibGVzLmZpbmRJbmRleCh4ID0+IHguaW5zZXJ0SW5kZXggPiB0YWJsZS5pbnNlcnRJbmRleCk7XG4gICAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgICAgIHRhYmxlcy5wdXNoKHRhYmxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRhYmxlcy5zcGxpY2UoaW5kZXgsIDAsIHRhYmxlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgaW5zZXJ0VGFibGVSb3dzKHRhYmxlczogVGFibGVNb2RlbFtdLCBpbnNlcnRJbmRleDogbnVtYmVyLCByb3dzQ291bnQ6IG51bWJlciwgdGFyZ2V0SW5kZXg6IG51bWJlciwgaW5oZXJpdEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGFibGUgPSB0YWJsZXMuZmluZCh4ID0+IHguaW5zZXJ0SW5kZXggPT09IGluc2VydEluZGV4KTtcbiAgICAgICAgY29uc3QgbWF0cml4ID0gdGhpcy5nZXRNYXRyaXgodGFibGUpO1xuICAgICAgICBjb25zdCBuZXdDZWxscyA9IHRoaXMuZ2V0TmV3Um93Q2VsbHMobWF0cml4LCB0YXJnZXRJbmRleCwgaW5oZXJpdEluZGV4KTtcbiAgICAgICAgdGhpcy5pbnNlcnROZXdSb3dDZWxscyh0YWJsZSwgbmV3Q2VsbHMsIHJvd3NDb3VudCwgdGFyZ2V0SW5kZXgsIGluaGVyaXRJbmRleCk7XG4gICAgfVxuXG4gICAgc3RhdGljIGluc2VydFRhYmxlQ29sdW1ucyhcbiAgICAgICAgdGFibGVzOiBUYWJsZU1vZGVsW10sXG4gICAgICAgIGluc2VydEluZGV4OiBudW1iZXIsXG4gICAgICAgIGNvbHVtbnNDb3VudDogbnVtYmVyLFxuICAgICAgICB0YXJnZXRJbmRleDogbnVtYmVyLFxuICAgICAgICBpbmhlcml0SW5kZXg6IG51bWJlcixcbiAgICAgICAgY29udGVudFdpZHRoOiBudW1iZXJcbiAgICApOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGFibGUgPSB0YWJsZXMuZmluZCh4ID0+IHguaW5zZXJ0SW5kZXggPT09IGluc2VydEluZGV4KTtcbiAgICAgICAgY29uc3QgbWF0cml4ID0gdGhpcy5nZXRNYXRyaXgodGFibGUpO1xuICAgICAgICBjb25zdCB0YXJnZXRJbmRleGVzID0gdGhpcy5nZXRUYXJnZXRJbmRleGVzKG1hdHJpeCwgdGFyZ2V0SW5kZXgpO1xuICAgICAgICBjb25zdCBuZXdDZWxscyA9IHRoaXMuZ2V0TmV3Q29sdW1uQ2VsbHMobWF0cml4LCBjb2x1bW5zQ291bnQsIHRhcmdldEluZGV4LCBpbmhlcml0SW5kZXgpO1xuICAgICAgICB0aGlzLmluc2VydE5ld0NvbHVtbkNlbGxzKHRhYmxlLCB0YXJnZXRJbmRleGVzLCBuZXdDZWxscyk7XG4gICAgICAgIHRoaXMuaW5zZXJ0TmV3Q29sdW1ucyh0YWJsZSwgY29sdW1uc0NvdW50LCB0YXJnZXRJbmRleCwgaW5oZXJpdEluZGV4KTtcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVDb2x1bW5zV2lkdGgodGFibGUsIGNvbnRlbnRXaWR0aCk7XG4gICAgfVxuXG4gICAgc3RhdGljIHJlbW92ZVRhYmxlUm93cyh0YWJsZXM6IFRhYmxlTW9kZWxbXSwgaW5zZXJ0SW5kZXg6IG51bWJlciwgc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gdGFibGVzLmZpbmQoeCA9PiB4Lmluc2VydEluZGV4ID09PSBpbnNlcnRJbmRleCk7XG4gICAgICAgIGNvbnN0IG1hdHJpeCA9IHRoaXMuZ2V0TWF0cml4KHRhYmxlKTtcbiAgICAgICAgdGhpcy5yZW1vdmVNYXRyaXhSb3dzKG1hdHJpeCwgc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgICAgICB0YWJsZS5yb3dzLnNwbGljZShzdGFydEluZGV4LCBlbmRJbmRleCAtIHN0YXJ0SW5kZXggKyAxKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcmVtb3ZlVGFibGVDb2x1bW5zKHRhYmxlczogVGFibGVNb2RlbFtdLCBpbnNlcnRJbmRleDogbnVtYmVyLCBzdGFydEluZGV4OiBudW1iZXIsIGVuZEluZGV4OiBudW1iZXIsIGNvbnRlbnRXaWR0aDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gdGFibGVzLmZpbmQoeCA9PiB4Lmluc2VydEluZGV4ID09PSBpbnNlcnRJbmRleCk7XG4gICAgICAgIGNvbnN0IG1hdHJpeCA9IHRoaXMuZ2V0TWF0cml4KHRhYmxlKTtcbiAgICAgICAgdGFibGUuY29sdW1ucy5zcGxpY2Uoc3RhcnRJbmRleCwgZW5kSW5kZXggLSBzdGFydEluZGV4ICsgMSk7XG4gICAgICAgIHRoaXMucmVtb3ZlTWF0cml4Um93Q2VsbHMobWF0cml4LCB0YWJsZSwgc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRhYmxlLnJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRhYmxlLnJvd3NbaV0uY2VsbHMgPSB0YWJsZS5yb3dzW2ldLmNlbGxzLmZpbHRlcih4ID0+IG1hdHJpeFtpXS5jZWxscy5pbmNsdWRlcyh4KSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNhbGN1bGF0ZUNvbHVtbnNXaWR0aCh0YWJsZSwgY29udGVudFdpZHRoKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcmVzaXplVGFibGVDb2x1bW5zKHRhYmxlczogVGFibGVNb2RlbFtdLCByZXNpemVUYWJsZUNvbHVtbnM6IFJlc2l6ZVRhYmxlQ29sdW1uc01vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gdGFibGVzLmZpbmQoeCA9PiB4Lmluc2VydEluZGV4ID09PSByZXNpemVUYWJsZUNvbHVtbnMuaW5zZXJ0SW5kZXgpO1xuICAgICAgICB0aGlzLnJlc2l6ZUNvbHVtbnModGFibGUsIHJlc2l6ZVRhYmxlQ29sdW1ucyk7XG4gICAgICAgIHRoaXMuY2FsY3VsYXRlQ2VsbHNXaWR0aCh0YWJsZSk7XG4gICAgfVxuXG4gICAgc3RhdGljIHJlc3RvcmVUYWJsZSh0YWJsZXM6IFRhYmxlTW9kZWxbXSwgaW5zZXJ0SW5kZXg6IG51bWJlciwgb2xkVGFibGU6IFRhYmxlTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGFibGUgPSB0YWJsZXMuZmluZCh4ID0+IHguaW5zZXJ0SW5kZXggPT09IGluc2VydEluZGV4KTtcbiAgICAgICAgdGFibGUuYWxpZ25tZW50ID0gb2xkVGFibGUuYWxpZ25tZW50O1xuICAgICAgICB0YWJsZS5ib3JkZXJzID0gb2xkVGFibGUuYm9yZGVycztcbiAgICAgICAgdGFibGUuY2FsbFNwYWNpbmcgPSBvbGRUYWJsZS5jYWxsU3BhY2luZztcbiAgICAgICAgdGFibGUuY29sdW1ucyA9IG9sZFRhYmxlLmNvbHVtbnM7XG4gICAgICAgIHRhYmxlLmhlYWRpbmdTdHlsZUlkID0gb2xkVGFibGUuaGVhZGluZ1N0eWxlSWQ7XG4gICAgICAgIHRhYmxlLmluZGVudExlZnQgPSBvbGRUYWJsZS5pbmRlbnRMZWZ0O1xuICAgICAgICB0YWJsZS5pbmRlbnRMZWZ0RnJvbVRleHQgPSBvbGRUYWJsZS5pbmRlbnRMZWZ0RnJvbVRleHQ7XG4gICAgICAgIHRhYmxlLmluZGVudFJpZ2h0RnJvbVRleHQgPSBvbGRUYWJsZS5pbmRlbnRSaWdodEZyb21UZXh0O1xuICAgICAgICB0YWJsZS5tYXJnaW5zID0gb2xkVGFibGUubWFyZ2lucztcbiAgICAgICAgdGFibGUucm93cyA9IG9sZFRhYmxlLnJvd3M7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldE1hdHJpeCh0YWJsZTogVGFibGVNb2RlbCk6IFJvd01vZGVsW10ge1xuICAgICAgICBjb25zdCBtYXRyaXg6IFJvd01vZGVsW10gPSBbXTtcblxuICAgICAgICB0YWJsZS5yb3dzLmZvckVhY2goKHJvdywgcm93SW5kZXgpID0+IHtcbiAgICAgICAgICAgIG1hdHJpeC5wdXNoKG5ldyBSb3dNb2RlbCh7IC4uLnJvdywgY2VsbHM6IFtdIH0pKTtcblxuICAgICAgICAgICAgcm93LmNlbGxzLmZvckVhY2goY2VsbCA9PiB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAoY2VsbC5ob3Jpem9udGFsTWVyZ2UgPz8gMSk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBtYXRyaXhbcm93SW5kZXhdLmNlbGxzLnB1c2goY2VsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBtYXRyaXg7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldE5ld1Jvd0NlbGxzKG1hdHJpeDogUm93TW9kZWxbXSwgdGFyZ2V0SW5kZXg6IG51bWJlciwgaW5oZXJpdEluZGV4OiBudW1iZXIpOiBDZWxsTW9kZWxbXSB7XG4gICAgICAgIGNvbnN0IG5ld0NlbGxzOiBDZWxsTW9kZWxbXSA9IFtdO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0cml4W2luaGVyaXRJbmRleF0uY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChtYXRyaXhbaW5oZXJpdEluZGV4XS5jZWxsc1tpXSA9PT0gbWF0cml4W2luaGVyaXRJbmRleF0uY2VsbHNbaSAtIDFdKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG5ld0NlbGwgPSBuZXcgQ2VsbE1vZGVsKHtcbiAgICAgICAgICAgICAgICAuLi5tYXRyaXhbaW5oZXJpdEluZGV4XS5jZWxsc1tpXSxcbiAgICAgICAgICAgICAgICBicmVha3M6IFtdLFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICcnLFxuICAgICAgICAgICAgICAgIGNvbnRlbnRMZW5ndGg6IDAsXG4gICAgICAgICAgICAgICAgZWxlbWVudHM6IFtdLFxuICAgICAgICAgICAgICAgIGltYWdlczogW10sXG4gICAgICAgICAgICAgICAgZm9ybWF0czogW1xuICAgICAgICAgICAgICAgICAgICBuZXcgRm9ybWF0TW9kZWwoe1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRJbmRleDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZEluZGV4OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFN0eWxlOiBuZXcgVGV4dFN0eWxlTW9kZWwobWF0cml4W2luaGVyaXRJbmRleF0uY2VsbHNbaV0uZm9ybWF0c1swXS50ZXh0U3R5bGUpXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBwYXJhZ3JhcGhzOiBbXG4gICAgICAgICAgICAgICAgICAgIG5ldyBQYXJhZ3JhcGhNb2RlbCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRJbmRleDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFncmFwaFN0eWxlOiBuZXcgUGFyYWdyYXBoU3R5bGVNb2RlbChtYXRyaXhbaW5oZXJpdEluZGV4XS5jZWxsc1tpXS5wYXJhZ3JhcGhzWzBdLnBhcmFncmFwaFN0eWxlKVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgdmVydGljYWxNZXJnZTogdGhpcy5nZXRDZWxsVmVydGljYWxNZXJnZShcbiAgICAgICAgICAgICAgICAgICAgbWF0cml4W2luaGVyaXRJbmRleF0uY2VsbHNbaV0udmVydGljYWxNZXJnZSBhcyBWZXJ0aWNhbE1lcmdlLFxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgaW5oZXJpdEluZGV4XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB0YWJsZXM6IFtdLFxuICAgICAgICAgICAgICAgIHRhYnM6IFtdLFxuICAgICAgICAgICAgICAgIGxpbmtzOiBbXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBuZXdDZWxscy5wdXNoKG5ld0NlbGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ld0NlbGxzO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRDZWxsVmVydGljYWxNZXJnZShjdXJyZW50VmVydGljYWxNZXJnZTogVmVydGljYWxNZXJnZSwgdGFyZ2V0SW5kZXg6IG51bWJlciwgaW5oZXJpdEluZGV4OiBudW1iZXIpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgaWYgKGN1cnJlbnRWZXJ0aWNhbE1lcmdlICE9PSBWZXJ0aWNhbE1lcmdlLlJlc3RhcnQpIHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50VmVydGljYWxNZXJnZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0YXJnZXRJbmRleCA+IGluaGVyaXRJbmRleCA/IFZlcnRpY2FsTWVyZ2UuTWVyZ2UgOiBudWxsO1xuICAgIH1cblxuICAgIHN0YXRpYyBpbnNlcnROZXdSb3dDZWxscyh0YWJsZTogVGFibGVNb2RlbCwgbmV3Q2VsbHM6IENlbGxNb2RlbFtdLCByb3dzQ291bnQ6IG51bWJlciwgdGFyZ2V0SW5kZXg6IG51bWJlciwgaW5oZXJpdEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgbmV3Um93Q2VsbHMgPSBuZXdDZWxscy5tYXAoXG4gICAgICAgICAgICAgICAgeCA9PlxuICAgICAgICAgICAgICAgICAgICBuZXcgQ2VsbE1vZGVsKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLngsXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha3M6IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogJycsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50TGVuZ3RoOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHM6IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0czogW25ldyBGb3JtYXRNb2RlbCh7IHN0YXJ0SW5kZXg6IDAsIGVuZEluZGV4OiAwLCB0ZXh0U3R5bGU6IG5ldyBUZXh0U3R5bGVNb2RlbCh4LmZvcm1hdHNbMF0udGV4dFN0eWxlKSB9KV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXM6IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYWdyYXBoczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQYXJhZ3JhcGhNb2RlbCh7IGluc2VydEluZGV4OiAwLCBwYXJhZ3JhcGhTdHlsZTogbmV3IFBhcmFncmFwaFN0eWxlTW9kZWwoeC5wYXJhZ3JhcGhzWzBdLnBhcmFncmFwaFN0eWxlKSB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlczogW10sXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJzOiBbXVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld1JvdyA9IG5ldyBSb3dNb2RlbCh7IC4uLnRhYmxlLnJvd3NbaW5oZXJpdEluZGV4XSwgY2VsbHM6IG5ld1Jvd0NlbGxzIH0pO1xuICAgICAgICAgICAgdGFibGUucm93cy5zcGxpY2UodGFyZ2V0SW5kZXgsIDAsIG5ld1Jvdyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0VGFyZ2V0SW5kZXhlcyhtYXRyaXg6IFJvd01vZGVsW10sIHRhcmdldEluZGV4OiBudW1iZXIpOiBudW1iZXJbXSB7XG4gICAgICAgIGNvbnN0IHRhcmdldEluZGV4ZXM6IG51bWJlcltdID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCByb3cgb2YgbWF0cml4KSB7XG4gICAgICAgICAgICBsZXQgYWJzb2x1dGVDZWxsSW5kZXggPSAwO1xuICAgICAgICAgICAgbGV0IGN1cnJlbnRUYXJnZXRJbmRleCA9IDA7XG4gICAgICAgICAgICBsZXQgY2VsbE1hdHJpeEluZGV4ID0gMDtcblxuICAgICAgICAgICAgd2hpbGUgKGFic29sdXRlQ2VsbEluZGV4IDwgdGFyZ2V0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICBpZiAocm93LmNlbGxzW2NlbGxNYXRyaXhJbmRleF0gPT09IHJvdy5jZWxsc1tjZWxsTWF0cml4SW5kZXggLSAxXSkge1xuICAgICAgICAgICAgICAgICAgICBjZWxsTWF0cml4SW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFyb3cuY2VsbHNbY2VsbE1hdHJpeEluZGV4XSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBhYnNvbHV0ZUNlbGxJbmRleCArPSByb3cuY2VsbHNbY2VsbE1hdHJpeEluZGV4XS5ob3Jpem9udGFsTWVyZ2UgPz8gMTtcbiAgICAgICAgICAgICAgICBjZWxsTWF0cml4SW5kZXgrKztcbiAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0SW5kZXgrKztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGFyZ2V0SW5kZXhlcy5wdXNoKGN1cnJlbnRUYXJnZXRJbmRleCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGFyZ2V0SW5kZXhlcztcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0TmV3Q29sdW1uQ2VsbHMobWF0cml4OiBSb3dNb2RlbFtdLCBjb2x1bW5zQ291bnQ6IG51bWJlciwgdGFyZ2V0SW5kZXg6IG51bWJlciwgaW5oZXJpdEluZGV4OiBudW1iZXIpOiBDZWxsTW9kZWxbXVtdIHtcbiAgICAgICAgcmV0dXJuIG1hdHJpeC5tYXAocm93ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1Jvd0NlbGxzOiBDZWxsTW9kZWxbXSA9IFtdO1xuICAgICAgICAgICAgY29uc3QgaXNDb250aW51b3VzQ2VsbCA9XG4gICAgICAgICAgICAgICAgaW5oZXJpdEluZGV4ID09PSB0YXJnZXRJbmRleFxuICAgICAgICAgICAgICAgICAgICA/IHJvdy5jZWxsc1tpbmhlcml0SW5kZXhdID09PSByb3cuY2VsbHNbdGFyZ2V0SW5kZXggLSAxXSAmJiByb3cuY2VsbHNbaW5oZXJpdEluZGV4XS5ob3Jpem9udGFsTWVyZ2VcbiAgICAgICAgICAgICAgICAgICAgOiByb3cuY2VsbHNbaW5oZXJpdEluZGV4XSA9PT0gcm93LmNlbGxzW3RhcmdldEluZGV4XSAmJiByb3cuY2VsbHNbaW5oZXJpdEluZGV4XS5ob3Jpem9udGFsTWVyZ2U7XG5cbiAgICAgICAgICAgIGlmIChpc0NvbnRpbnVvdXNDZWxsKSB7XG4gICAgICAgICAgICAgICAgcm93LmNlbGxzW2luaGVyaXRJbmRleF0uaG9yaXpvbnRhbE1lcmdlICs9IGNvbHVtbnNDb3VudDtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3Um93Q2VsbHM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sdW1uc0NvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdDZWxsID0gbmV3IENlbGxNb2RlbCh7XG4gICAgICAgICAgICAgICAgICAgIC4uLnJvdy5jZWxsc1tpbmhlcml0SW5kZXhdLFxuICAgICAgICAgICAgICAgICAgICBicmVha3M6IFtdLFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnJyxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudExlbmd0aDogMCxcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudHM6IFtdLFxuICAgICAgICAgICAgICAgICAgICBmb3JtYXRzOiBbbmV3IEZvcm1hdE1vZGVsKHsgc3RhcnRJbmRleDogMCwgZW5kSW5kZXg6IDAsIHRleHRTdHlsZTogcm93LmNlbGxzW2luaGVyaXRJbmRleF0uZm9ybWF0c1swXS50ZXh0U3R5bGUgfSldLFxuICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsTWVyZ2U6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGltYWdlczogW10sXG4gICAgICAgICAgICAgICAgICAgIHBhcmFncmFwaHM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQYXJhZ3JhcGhNb2RlbCh7IGluc2VydEluZGV4OiAwLCBwYXJhZ3JhcGhTdHlsZTogcm93LmNlbGxzW2luaGVyaXRJbmRleF0ucGFyYWdyYXBoc1swXS5wYXJhZ3JhcGhTdHlsZSB9KVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB0YWJsZXM6IFtdLFxuICAgICAgICAgICAgICAgICAgICB0YWJzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWxNZXJnZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHJvdy5jZWxsc1tpbmhlcml0SW5kZXhdLndpZHRoXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBuZXdSb3dDZWxscy5wdXNoKG5ld0NlbGwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbmV3Um93Q2VsbHM7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBpbnNlcnROZXdDb2x1bW5DZWxscyh0YWJsZTogVGFibGVNb2RlbCwgdGFyZ2V0SW5kZXhlczogbnVtYmVyW10sIG5ld0NlbGxzOiBDZWxsTW9kZWxbXVtdKTogdm9pZCB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFyZ2V0SW5kZXhlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKCFuZXdDZWxsc1tpXS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGFibGUucm93c1tpXS5jZWxscy5zcGxpY2UodGFyZ2V0SW5kZXhlc1tpXSwgMCwgLi4ubmV3Q2VsbHNbaV0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGluc2VydE5ld0NvbHVtbnModGFibGU6IFRhYmxlTW9kZWwsIGNvbHVtbnNDb3VudDogbnVtYmVyLCB0YXJnZXRJbmRleDogbnVtYmVyLCBpbmhlcml0SW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBuZXdDb2x1bW4gPSB0YWJsZS5jb2x1bW5zW2luaGVyaXRJbmRleF07XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sdW1uc0NvdW50OyBpKyspIHtcbiAgICAgICAgICAgIHRhYmxlLmNvbHVtbnMuc3BsaWNlKHRhcmdldEluZGV4LCAwLCBuZXcgQ29sdW1uTW9kZWwobmV3Q29sdW1uKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgY2FsY3VsYXRlQ29sdW1uc1dpZHRoKHRhYmxlOiBUYWJsZU1vZGVsLCBjb250ZW50V2lkdGg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBsZXQgY3VycmVudFRhYmxlV2lkdGggPSB0YWJsZS5jb2x1bW5zLnJlZHVjZSgocHJldiwgbmV4dCkgPT4gcHJldiArIG5leHQud2lkdGgsIDApO1xuICAgICAgICB0YWJsZS5jb2x1bW5zLmZvckVhY2goeCA9PiAoeC53aWR0aCA9IE1hdGgucm91bmQoKHgud2lkdGggLyBjdXJyZW50VGFibGVXaWR0aCkgKiBjb250ZW50V2lkdGgpKSk7XG5cbiAgICAgICAgdGFibGUucm93cy5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvdy5jZWxscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChyb3cuY2VsbHNbaV0uaG9yaXpvbnRhbE1lcmdlKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB3aWR0aCA9IHRhYmxlLmNvbHVtbnNbaV0ud2lkdGg7XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPCByb3cuY2VsbHNbaV0uaG9yaXpvbnRhbE1lcmdlOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoICs9IHRhYmxlLmNvbHVtbnNbaSArIGpdLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcm93LmNlbGxzW2ldLndpZHRoID0gd2lkdGg7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcm93LmNlbGxzW2ldLndpZHRoID0gdGFibGUuY29sdW1uc1tpXS53aWR0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YXRpYyByZW1vdmVNYXRyaXhSb3dzKG1hdHJpeDogUm93TW9kZWxbXSwgc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlbW92ZWRSb3dzID0gbWF0cml4LnNsaWNlKHN0YXJ0SW5kZXgsIGVuZEluZGV4ICsgMSk7XG4gICAgICAgIG1hdHJpeC5zcGxpY2Uoc3RhcnRJbmRleCwgZW5kSW5kZXggLSBzdGFydEluZGV4ICsgMSk7XG4gICAgICAgIGxldCBpID0gMDtcblxuICAgICAgICB3aGlsZSAoaSA8IG1hdHJpeC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGxldCBqID0gMDtcblxuICAgICAgICAgICAgd2hpbGUgKGogPCBtYXRyaXhbaV0uY2VsbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAobWF0cml4W2ldLmNlbGxzW2pdLnZlcnRpY2FsTWVyZ2UgYXMgVmVydGljYWxNZXJnZSkgPT09IFZlcnRpY2FsTWVyZ2UuUmVzdGFydCAmJlxuICAgICAgICAgICAgICAgICAgICAoIW1hdHJpeFtpICsgMV0gfHwgKG1hdHJpeFtpICsgMV0uY2VsbHNbal0udmVydGljYWxNZXJnZSBhcyBWZXJ0aWNhbE1lcmdlKSAhPT0gVmVydGljYWxNZXJnZS5NZXJnZSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgbWF0cml4W2ldLmNlbGxzW2pdLnZlcnRpY2FsTWVyZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgKG1hdHJpeFtpXS5jZWxsc1tqXS52ZXJ0aWNhbE1lcmdlIGFzIFZlcnRpY2FsTWVyZ2UpID09PSBWZXJ0aWNhbE1lcmdlLk1lcmdlICYmXG4gICAgICAgICAgICAgICAgICAgICFbVmVydGljYWxNZXJnZS5SZXN0YXJ0LCBWZXJ0aWNhbE1lcmdlLk1lcmdlXS5pbmNsdWRlcyhtYXRyaXhbaSAtIDFdPy5jZWxsc1tqXS52ZXJ0aWNhbE1lcmdlIGFzIFZlcnRpY2FsTWVyZ2UpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsbE1lcmdlZENlbGxBZnRlclJlbW92ZShtYXRyaXgsIHJlbW92ZWRSb3dzLCBpLCBqKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBqKys7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmaWxsTWVyZ2VkQ2VsbEFmdGVyUmVtb3ZlKG1hdHJpeDogUm93TW9kZWxbXSwgcmVtb3ZlZFJvd3M6IFJvd01vZGVsW10sIHJvd0luZGV4OiBudW1iZXIsIGNlbGxJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGxldCBpID0gcmVtb3ZlZFJvd3MubGVuZ3RoIC0gMTtcbiAgICAgICAgbGV0IHJlbW92ZWRDZWxsOiBDZWxsTW9kZWw7XG5cbiAgICAgICAgd2hpbGUgKCFyZW1vdmVkQ2VsbCkge1xuICAgICAgICAgICAgaWYgKChyZW1vdmVkUm93c1tpXS5jZWxsc1tjZWxsSW5kZXhdLnZlcnRpY2FsTWVyZ2UgYXMgVmVydGljYWxNZXJnZSkgPT09IFZlcnRpY2FsTWVyZ2UuUmVzdGFydCkge1xuICAgICAgICAgICAgICAgIHJlbW92ZWRDZWxsID0gcmVtb3ZlZFJvd3NbaV0uY2VsbHNbY2VsbEluZGV4XTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaS0tO1xuICAgICAgICB9XG5cbiAgICAgICAgbWF0cml4W3Jvd0luZGV4XS5jZWxsc1tjZWxsSW5kZXhdLmJhY2tncm91bmRDb2xvciA9IHJlbW92ZWRDZWxsLmJhY2tncm91bmRDb2xvcjtcbiAgICAgICAgbWF0cml4W3Jvd0luZGV4XS5jZWxsc1tjZWxsSW5kZXhdLmJvcmRlcnMgPSByZW1vdmVkQ2VsbC5ib3JkZXJzO1xuICAgICAgICBtYXRyaXhbcm93SW5kZXhdLmNlbGxzW2NlbGxJbmRleF0uYnJlYWtzID0gcmVtb3ZlZENlbGwuYnJlYWtzO1xuICAgICAgICBtYXRyaXhbcm93SW5kZXhdLmNlbGxzW2NlbGxJbmRleF0uY29sdW1uU2VjdGlvbnMgPSByZW1vdmVkQ2VsbC5jb2x1bW5TZWN0aW9ucztcbiAgICAgICAgbWF0cml4W3Jvd0luZGV4XS5jZWxsc1tjZWxsSW5kZXhdLmNvbnRlbnQgPSByZW1vdmVkQ2VsbC5jb250ZW50O1xuICAgICAgICBtYXRyaXhbcm93SW5kZXhdLmNlbGxzW2NlbGxJbmRleF0uY29udGVudExlbmd0aCA9IHJlbW92ZWRDZWxsLmNvbnRlbnRMZW5ndGg7XG4gICAgICAgIG1hdHJpeFtyb3dJbmRleF0uY2VsbHNbY2VsbEluZGV4XS5lbGVtZW50cyA9IHJlbW92ZWRDZWxsLmVsZW1lbnRzO1xuICAgICAgICBtYXRyaXhbcm93SW5kZXhdLmNlbGxzW2NlbGxJbmRleF0uZm9ybWF0cyA9IHJlbW92ZWRDZWxsLmZvcm1hdHM7XG4gICAgICAgIG1hdHJpeFtyb3dJbmRleF0uY2VsbHNbY2VsbEluZGV4XS5ob3Jpem9udGFsTWVyZ2UgPSByZW1vdmVkQ2VsbC5ob3Jpem9udGFsTWVyZ2U7XG4gICAgICAgIG1hdHJpeFtyb3dJbmRleF0uY2VsbHNbY2VsbEluZGV4XS5pbWFnZXMgPSByZW1vdmVkQ2VsbC5pbWFnZXM7XG4gICAgICAgIG1hdHJpeFtyb3dJbmRleF0uY2VsbHNbY2VsbEluZGV4XS5tYXJnaW5zID0gcmVtb3ZlZENlbGwubWFyZ2lucztcbiAgICAgICAgbWF0cml4W3Jvd0luZGV4XS5jZWxsc1tjZWxsSW5kZXhdLnBhcmFncmFwaHMgPSByZW1vdmVkQ2VsbC5wYXJhZ3JhcGhzO1xuICAgICAgICBtYXRyaXhbcm93SW5kZXhdLmNlbGxzW2NlbGxJbmRleF0udGFibGVzID0gcmVtb3ZlZENlbGwudGFibGVzO1xuICAgICAgICBtYXRyaXhbcm93SW5kZXhdLmNlbGxzW2NlbGxJbmRleF0udmVydGljYWxBbGlnbiA9IHJlbW92ZWRDZWxsLnZlcnRpY2FsQWxpZ247XG4gICAgICAgIG1hdHJpeFtyb3dJbmRleF0uY2VsbHNbY2VsbEluZGV4XS52ZXJ0aWNhbE1lcmdlID0gcmVtb3ZlZENlbGwudmVydGljYWxNZXJnZTtcbiAgICAgICAgbWF0cml4W3Jvd0luZGV4XS5jZWxsc1tjZWxsSW5kZXhdLndpZHRoID0gcmVtb3ZlZENlbGwud2lkdGg7XG4gICAgfVxuXG4gICAgc3RhdGljIHJlbW92ZU1hdHJpeFJvd0NlbGxzKG1hdHJpeDogUm93TW9kZWxbXSwgdGFibGU6IFRhYmxlTW9kZWwsIHN0YXJ0SW5kZXg6IG51bWJlciwgZW5kSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBsZXQgaSA9IDA7XG5cbiAgICAgICAgd2hpbGUgKGkgPCBtYXRyaXgubGVuZ3RoKSB7XG4gICAgICAgICAgICBsZXQgaiA9IDA7XG4gICAgICAgICAgICBtYXRyaXhbaV0uY2VsbHMuc3BsaWNlKHN0YXJ0SW5kZXgsIGVuZEluZGV4IC0gc3RhcnRJbmRleCArIDEpO1xuXG4gICAgICAgICAgICB3aGlsZSAoaiA8IG1hdHJpeFtpXS5jZWxscy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBpZiAobWF0cml4W2ldLmNlbGxzW2pdLmhvcml6b250YWxNZXJnZSA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVyZ2VkQ2VsbHNDb3VudCA9IHRoaXMuZmlsbERhdGFGb3JIb3Jpem9udGFsTWVyZ2VkQ2VsbChtYXRyaXgsIHRhYmxlLCBpLCBqKTtcbiAgICAgICAgICAgICAgICAgICAgaiArPSBtZXJnZWRDZWxsc0NvdW50O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGorKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBmaWxsRGF0YUZvckhvcml6b250YWxNZXJnZWRDZWxsKG1hdHJpeDogUm93TW9kZWxbXSwgdGFibGU6IFRhYmxlTW9kZWwsIHJvd0luZGV4OiBudW1iZXIsIGNlbGxJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgbWVyZ2VkQ2VsbHMgPSBtYXRyaXhbcm93SW5kZXhdLmNlbGxzLmZpbHRlcih4ID0+IHggPT09IG1hdHJpeFtyb3dJbmRleF0uY2VsbHNbY2VsbEluZGV4XSk7XG5cbiAgICAgICAgaWYgKG1lcmdlZENlbGxzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIG1hdHJpeFtyb3dJbmRleF0uY2VsbHNbY2VsbEluZGV4XS5ob3Jpem9udGFsTWVyZ2UgPSBtZXJnZWRDZWxscy5sZW5ndGg7XG4gICAgICAgICAgICBtYXRyaXhbcm93SW5kZXhdLmNlbGxzW2NlbGxJbmRleF0ud2lkdGggPSAwO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdHJpeFtyb3dJbmRleF0uY2VsbHNbY2VsbEluZGV4XS5ob3Jpem9udGFsTWVyZ2U7IGkrKykge1xuICAgICAgICAgICAgICAgIG1hdHJpeFtyb3dJbmRleF0uY2VsbHNbY2VsbEluZGV4XS53aWR0aCArPSB0YWJsZS5jb2x1bW5zW2NlbGxJbmRleCArIGldLndpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWF0cml4W3Jvd0luZGV4XS5jZWxsc1tjZWxsSW5kZXhdLmhvcml6b250YWxNZXJnZSA9IG51bGw7XG4gICAgICAgICAgICBtYXRyaXhbcm93SW5kZXhdLmNlbGxzW2NlbGxJbmRleF0ud2lkdGggPSB0YWJsZS5jb2x1bW5zW2NlbGxJbmRleF0ud2lkdGg7XG4gICAgICAgIH1cblxuICAgICAgICBtYXRyaXhbcm93SW5kZXhdLmNlbGxzW2NlbGxJbmRleF0uaG9yaXpvbnRhbE1lcmdlID0gbWVyZ2VkQ2VsbHMubGVuZ3RoID4gMSA/IG1lcmdlZENlbGxzLmxlbmd0aCA6IG51bGw7XG4gICAgICAgIHJldHVybiBtZXJnZWRDZWxscy5sZW5ndGg7XG4gICAgfVxuXG4gICAgc3RhdGljIHJlc2l6ZUNvbHVtbnModGFibGU6IFRhYmxlTW9kZWwsIHJlc2l6ZVRhYmxlQ29sdW1uczogUmVzaXplVGFibGVDb2x1bW5zTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgaWYgKHJlc2l6ZVRhYmxlQ29sdW1ucy5yZXNpemVyU2lkZSA9PT0gUmVzaXplclNpZGUuTGVmdCkge1xuICAgICAgICAgICAgdGFibGUuY29sdW1uc1tyZXNpemVUYWJsZUNvbHVtbnMuY29sdW1uSW5kZXhdLndpZHRoICs9IHJlc2l6ZVRhYmxlQ29sdW1ucy5kaXN0YW5jZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNlbGxIb3Jpem9udGFsTWVyZ2UgPSB0YWJsZS5yb3dzW3Jlc2l6ZVRhYmxlQ29sdW1ucy5yb3dJbmRleF0uY2VsbHNbcmVzaXplVGFibGVDb2x1bW5zLmNlbGxJbmRleF0uaG9yaXpvbnRhbE1lcmdlID8/IDE7XG4gICAgICAgIGNvbnN0IHJlc2l6ZXJDb2x1bW5JbmRleCA9IHJlc2l6ZVRhYmxlQ29sdW1ucy5jb2x1bW5JbmRleCArIGNlbGxIb3Jpem9udGFsTWVyZ2UgLSAxO1xuICAgICAgICB0YWJsZS5jb2x1bW5zW3Jlc2l6ZXJDb2x1bW5JbmRleF0ud2lkdGggKz0gcmVzaXplVGFibGVDb2x1bW5zLmRpc3RhbmNlO1xuXG4gICAgICAgIGlmICh0YWJsZS5yb3dzW3Jlc2l6ZVRhYmxlQ29sdW1ucy5yb3dJbmRleF0uY2VsbHNbcmVzaXplVGFibGVDb2x1bW5zLmNlbGxJbmRleCArIDFdKSB7XG4gICAgICAgICAgICB0YWJsZS5jb2x1bW5zW3Jlc2l6ZXJDb2x1bW5JbmRleCArIDFdLndpZHRoIC09IHJlc2l6ZVRhYmxlQ29sdW1ucy5kaXN0YW5jZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBjYWxjdWxhdGVDZWxsc1dpZHRoKHRhYmxlOiBUYWJsZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIHRhYmxlLnJvd3MuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICAgICAgbGV0IGNvbHVtbkluZGV4ID0gMDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93LmNlbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJvdy5jZWxsc1tpXS5ob3Jpem9udGFsTWVyZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHdpZHRoID0gdGFibGUuY29sdW1uc1tjb2x1bW5JbmRleF0ud2lkdGg7XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPCByb3cuY2VsbHNbaV0uaG9yaXpvbnRhbE1lcmdlOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoICs9IHRhYmxlLmNvbHVtbnNbY29sdW1uSW5kZXggKyBqXS53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJvdy5jZWxsc1tpXS53aWR0aCA9IHdpZHRoO1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5JbmRleCArPSByb3cuY2VsbHNbaV0uaG9yaXpvbnRhbE1lcmdlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJvdy5jZWxsc1tpXS53aWR0aCA9IHRhYmxlLmNvbHVtbnNbY29sdW1uSW5kZXhdLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5JbmRleCsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
|