@talrace/ngx-noder 0.0.17 → 0.0.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +72 -9
- package/assets/i18n/noder.en.json +93 -0
- package/assets/i18n/noder.es.json +93 -0
- package/assets/i18n/noder.ru.json +93 -0
- package/fesm2022/talrace-ngx-noder.mjs +371 -298
- package/fesm2022/talrace-ngx-noder.mjs.map +1 -1
- package/lib/apart-components/add-link-dialog/add-link-dialog.component.d.ts +1 -10
- package/lib/apart-components/editor-title/editor-title.component.d.ts +5 -3
- package/lib/apart-components/editor-toolbar/components/base-toolbar.component.d.ts +1 -1
- package/lib/apart-components/editor-toolbar/editor-mobile-toolbar/editor-mobile-toolbar.component.d.ts +3 -1
- package/lib/apart-components/editor-toolbar/editor-toolbar.module.d.ts +23 -23
- package/lib/editor/components/edges/edge.component.d.ts +10 -3
- package/lib/editor/components/edges/edges.d.ts +0 -2
- package/lib/editor/components/external-element/external.component.d.ts +1 -1
- package/lib/editor/components/external-element/models/external-element.model.d.ts +3 -3
- 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/lib/editor/components/table/overlay-menu/overlay-menu.component.d.ts +3 -1
- package/lib/editor/editor.module.d.ts +2 -1
- package/lib/editor/gadgets/scrollbar.d.ts +1 -0
- package/lib/translate/noder-translate.loader.d.ts +11 -0
- package/package.json +3 -3
- package/public-api.d.ts +1 -0
- 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 -47
- package/esm2022/lib/apart-components/confirm-dialog/confirm-dialog.component.mjs +0 -32
- package/esm2022/lib/apart-components/editor-search/editor-search-dialog.component.mjs +0 -64
- package/esm2022/lib/apart-components/editor-title/editor-title.component.mjs +0 -92
- package/esm2022/lib/apart-components/editor-title-mobile/editor-title-mobile.component.mjs +0 -22
- 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/heading/heading.component.mjs +0 -22
- 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 -106
- package/esm2022/lib/apart-components/editor-toolbar/components/menu-dropdowns-mobile/menu-dropdowns-mobile.component.mjs +0 -24
- 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 -84
- 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 -127
- 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 -84
- package/esm2022/lib/apart-components/text-format-mobile/text-format-mobile.component.mjs +0 -123
- 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 -99
- package/esm2022/lib/editor/components/edges/edges.mjs +0 -142
- 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 -74
- 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 -67
- 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 -1367
- 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 -81
- 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/public-api.mjs +0 -53
- package/esm2022/talrace-ngx-noder.mjs +0 -5
- package/lib/apart-components/editor-toolbar/components/buttons/heading/heading.component.d.ts +0 -8
|
@@ -1,204 +0,0 @@
|
|
|
1
|
-
import { CursorLayer } from './layers/cursor.layer';
|
|
2
|
-
import { DistanceModel } from '../execution/distance.model';
|
|
3
|
-
import { DomHelper } from '../execution/helpers/dom.helper';
|
|
4
|
-
import { EventEmitting } from '../core/event-emitting';
|
|
5
|
-
import { PositionHelper } from '../positioning/position.helper';
|
|
6
|
-
import { RenderChangesModel } from './render-changes.model';
|
|
7
|
-
import { RenderLoop } from './renderloop';
|
|
8
|
-
import { SelectionLayer } from './layers/selection.layer';
|
|
9
|
-
import { TextLayer } from './layers/text.layer';
|
|
10
|
-
export class Renderer extends EventEmitting {
|
|
11
|
-
constructor(parentContainer, session) {
|
|
12
|
-
super();
|
|
13
|
-
this.session = session;
|
|
14
|
-
this.layerConfig = {
|
|
15
|
-
width: 1,
|
|
16
|
-
contentRange: new DistanceModel({ start: 0, end: 0 }),
|
|
17
|
-
minHeight: 1,
|
|
18
|
-
maxHeight: 1,
|
|
19
|
-
offset: 0,
|
|
20
|
-
height: 1,
|
|
21
|
-
scrollTop: 0,
|
|
22
|
-
pages: [],
|
|
23
|
-
visibleRange: {
|
|
24
|
-
startParagraph: 0,
|
|
25
|
-
startLine: 0,
|
|
26
|
-
startScreenLine: 0,
|
|
27
|
-
startScreenFullLine: 0,
|
|
28
|
-
endParagraph: 0,
|
|
29
|
-
endLine: 0,
|
|
30
|
-
endScreenLine: 0,
|
|
31
|
-
endScreenFullLine: 0
|
|
32
|
-
}
|
|
33
|
-
};
|
|
34
|
-
this.changes = new RenderChangesModel();
|
|
35
|
-
this.textareaSize = {
|
|
36
|
-
height: 1,
|
|
37
|
-
width: 1
|
|
38
|
-
};
|
|
39
|
-
this.pagesCountChangedHandler = () => {
|
|
40
|
-
this.loop.schedule({ lines: true, selection: true });
|
|
41
|
-
};
|
|
42
|
-
this.container = parentContainer;
|
|
43
|
-
this.container.className += ' noder-editor';
|
|
44
|
-
this.createContentContainer();
|
|
45
|
-
this.textLayer = new TextLayer(this.content, this.session);
|
|
46
|
-
this.selectionLayer = new SelectionLayer(this.content, 'text-selection', this.session);
|
|
47
|
-
this.cursorLayer = new CursorLayer(this.content, this.session);
|
|
48
|
-
this.loop = new RenderLoop(changes => this.renderChanges(changes));
|
|
49
|
-
this.session.displayData.addEventListener('pagesCountChanged', this.pagesCountChangedHandler);
|
|
50
|
-
}
|
|
51
|
-
renderChanges(changes, force) {
|
|
52
|
-
changes.apply(this.changes);
|
|
53
|
-
this.changes = new RenderChangesModel();
|
|
54
|
-
if (!changes.any && !force) {
|
|
55
|
-
this.changes.apply(changes);
|
|
56
|
-
return;
|
|
57
|
-
}
|
|
58
|
-
// text, scrolling and resize changes can cause the view port size to change
|
|
59
|
-
if (changes.full || changes.size || changes.text || changes.lines || changes.scroll) {
|
|
60
|
-
changes.apply(this.computeLayerConfig());
|
|
61
|
-
DomHelper.translate(this.content, 0, -this.layerConfig.offset);
|
|
62
|
-
DomHelper.setStyle(this.content.style, 'width', `${this.layerConfig.width}px`);
|
|
63
|
-
DomHelper.setStyle(this.content.style, 'height', `${this.layerConfig.height}px`);
|
|
64
|
-
}
|
|
65
|
-
// full
|
|
66
|
-
if (changes.full) {
|
|
67
|
-
this.renderFull();
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
if (changes.text || changes.scroll) {
|
|
71
|
-
this.renderText();
|
|
72
|
-
}
|
|
73
|
-
if (changes.cursor) {
|
|
74
|
-
this.renderCursor();
|
|
75
|
-
}
|
|
76
|
-
if (changes.marker || changes.selection) {
|
|
77
|
-
this.renderSelection();
|
|
78
|
-
}
|
|
79
|
-
this.session.onRendered();
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Triggers a partial update of the text, from the range given by the two parameters.
|
|
83
|
-
**/
|
|
84
|
-
updateLines(firstRow, lastRow) {
|
|
85
|
-
// If the change happened offscreen above us then it's possible
|
|
86
|
-
// that a new line wrap will affect the position of the lines on our
|
|
87
|
-
// screen, so they need redrawn.
|
|
88
|
-
if (lastRow < this.layerConfig.contentRange.start || firstRow > this.layerConfig.contentRange.end) {
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
this.loop.schedule({ lines: true });
|
|
92
|
-
}
|
|
93
|
-
moveTextAreaToCursor() {
|
|
94
|
-
if (!this.textarea) {
|
|
95
|
-
return;
|
|
96
|
-
}
|
|
97
|
-
let cursorPosition = this.cursorLayer.cursorPosition;
|
|
98
|
-
if (!cursorPosition) {
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
const posTop = cursorPosition.pageY - this.layerConfig.offset;
|
|
102
|
-
if (posTop < 0 || posTop > this.layerConfig.height - this.textareaSize.height) {
|
|
103
|
-
DomHelper.translate(this.textarea, 0, 0);
|
|
104
|
-
return;
|
|
105
|
-
}
|
|
106
|
-
DomHelper.setStyle(this.textarea.style, 'height', `${this.textareaSize.height}px`);
|
|
107
|
-
DomHelper.setStyle(this.textarea.style, 'width', `${this.textareaSize.width}px`);
|
|
108
|
-
DomHelper.translate(this.textarea, Math.min(cursorPosition.pageX, this.textareaSize.width), Math.min(posTop, this.textareaSize.height));
|
|
109
|
-
}
|
|
110
|
-
updateSelection(range) {
|
|
111
|
-
if (range.isEmpty && this.selectionLayer.marker) {
|
|
112
|
-
this.selectionLayer.marker = null;
|
|
113
|
-
this.loop.schedule({ selection: true });
|
|
114
|
-
}
|
|
115
|
-
else if (!range.isEmpty && !this.selectionLayer.marker?.isEqual(range)) {
|
|
116
|
-
this.selectionLayer.marker = range;
|
|
117
|
-
this.loop.schedule({ selection: true });
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* Triggers a full update of the text, for all the rows.
|
|
122
|
-
**/
|
|
123
|
-
updateText() {
|
|
124
|
-
this.loop.schedule({ text: true });
|
|
125
|
-
}
|
|
126
|
-
updateCursor() {
|
|
127
|
-
this.loop.schedule({ cursor: true });
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* Converts screen coordinates to text coordinates by mapping to the closest token midpoint.
|
|
131
|
-
*/
|
|
132
|
-
screenToTextCoordinatesUsingMidpoint(x, y, rect) {
|
|
133
|
-
const { left, top } = rect ?? this.container.getBoundingClientRect();
|
|
134
|
-
const { paragraphIndex, lineIndex } = PositionHelper.getParagraphAndLineIndexFromYPosition(this.session, y, top);
|
|
135
|
-
const { line, indexInLine } = PositionHelper.mapPixelToClosestTokenMidpoint(this.session, x, paragraphIndex, lineIndex, left);
|
|
136
|
-
return PositionHelper.screenToDocument(this.session, line, indexInLine);
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* Converts screen coordinates to text coordinates by mapping to the next token boundary.
|
|
140
|
-
*/
|
|
141
|
-
screenToTextCoordinatesUsingBoundary(x, y, rect) {
|
|
142
|
-
const { left, top } = rect ?? this.container.getBoundingClientRect();
|
|
143
|
-
const { paragraphIndex, lineIndex } = PositionHelper.getParagraphAndLineIndexFromYPosition(this.session, y, top);
|
|
144
|
-
const { line, indexInLine } = PositionHelper.mapPixelToNextTokenBoundary(this.session, x, paragraphIndex, lineIndex, left);
|
|
145
|
-
return PositionHelper.screenToDocument(this.session, line, indexInLine);
|
|
146
|
-
}
|
|
147
|
-
showCursor() {
|
|
148
|
-
this.cursorLayer.showCursor();
|
|
149
|
-
}
|
|
150
|
-
hideCursor() {
|
|
151
|
-
this.cursorLayer.hideCursor();
|
|
152
|
-
}
|
|
153
|
-
destroy() {
|
|
154
|
-
this.session.displayData.removeEventListener('pagesCountChanged', this.pagesCountChangedHandler);
|
|
155
|
-
this.textLayer.destroy();
|
|
156
|
-
DomHelper.removeChildren(this.container);
|
|
157
|
-
}
|
|
158
|
-
renderFull() {
|
|
159
|
-
this.textLayer.updateLines(this.layerConfig);
|
|
160
|
-
this.selectionLayer.update(this.layerConfig);
|
|
161
|
-
this.cursorLayer.update(this.layerConfig);
|
|
162
|
-
this.moveTextAreaToCursor();
|
|
163
|
-
this.session.onRendered();
|
|
164
|
-
}
|
|
165
|
-
renderText() {
|
|
166
|
-
this.textLayer.updateLines(this.layerConfig);
|
|
167
|
-
this.cursorLayer.detectVisibility();
|
|
168
|
-
}
|
|
169
|
-
renderCursor() {
|
|
170
|
-
this.cursorLayer.update(this.layerConfig);
|
|
171
|
-
this.moveTextAreaToCursor();
|
|
172
|
-
}
|
|
173
|
-
renderSelection() {
|
|
174
|
-
this.selectionLayer.update(this.layerConfig);
|
|
175
|
-
this.cursorLayer.detectVisibility();
|
|
176
|
-
}
|
|
177
|
-
computeLayerConfig() {
|
|
178
|
-
const displayData = this.session.displayData;
|
|
179
|
-
const maxHeight = displayData.allPagesHeight;
|
|
180
|
-
const minHeight = displayData.minHeight;
|
|
181
|
-
const changes = new RenderChangesModel({ scroll: true });
|
|
182
|
-
this.layerConfig = {
|
|
183
|
-
width: this.session.displayData.contentWidth + displayData.pageMargin.left + displayData.pageMargin.right,
|
|
184
|
-
height: displayData.defaultVerticalData.contentHeight,
|
|
185
|
-
contentRange: new DistanceModel({ start: 0, end: displayData.paragraphs.filter(x => x.paragraphSettings).length - 1 }),
|
|
186
|
-
minHeight,
|
|
187
|
-
maxHeight,
|
|
188
|
-
offset: 0,
|
|
189
|
-
scrollTop: this.session.scrollTop
|
|
190
|
-
};
|
|
191
|
-
return changes;
|
|
192
|
-
}
|
|
193
|
-
createContentContainer() {
|
|
194
|
-
this.content = document.createElement('div');
|
|
195
|
-
this.content.className = 'noder-content';
|
|
196
|
-
if (this.container.firstChild) {
|
|
197
|
-
this.container.firstChild.appendChild(this.content);
|
|
198
|
-
}
|
|
199
|
-
else {
|
|
200
|
-
this.container.appendChild(this.content);
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbm9kZXIvc3JjL2xpYi9lZGl0b3IvZGlzcGxheS9yZW5kZXJlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFcEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU1RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRWhFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDMUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVoRCxNQUFNLE9BQU8sUUFBUyxTQUFRLGFBQWE7SUEyQ3ZDLFlBQVksZUFBNEIsRUFBUyxPQUFvQjtRQUNqRSxLQUFLLEVBQUUsQ0FBQztRQURxQyxZQUFPLEdBQVAsT0FBTyxDQUFhO1FBNUJyRSxnQkFBVyxHQUFpQjtZQUN4QixLQUFLLEVBQUUsQ0FBQztZQUNSLFlBQVksRUFBRSxJQUFJLGFBQWEsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3JELFNBQVMsRUFBRSxDQUFDO1lBQ1osU0FBUyxFQUFFLENBQUM7WUFDWixNQUFNLEVBQUUsQ0FBQztZQUNULE1BQU0sRUFBRSxDQUFDO1lBQ1QsU0FBUyxFQUFFLENBQUM7WUFDWixLQUFLLEVBQUUsRUFBRTtZQUNULFlB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QyxFQUFFLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3RILFNBQVM7WUFDVCxTQUFTO1lBQ1QsTUFBTSxFQUFFLENBQUM7WUFDVCxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTO1NBQ3BDLENBQUM7UUFFRixPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBTU8sc0JBQXNCO1FBQzFCLElBQUksQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxlQUFlLENBQUM7UUFFekMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRTtZQUMzQixJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3ZEO2FBQU07WUFDSCxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDNUM7SUFDTCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDdXJzb3JMYXllciB9IGZyb20gJy4vbGF5ZXJzL2N1cnNvci5sYXllcic7XG5pbXBvcnQgeyBDdXJzb3JQYXJhZ3JhcGggfSBmcm9tICcuLi9wb3NpdGlvbmluZy9jdXJzb3ItcGFyYWdyYXBoJztcbmltcG9ydCB7IERpc3RhbmNlTW9kZWwgfSBmcm9tICcuLi9leGVjdXRpb24vZGlzdGFuY2UubW9kZWwnO1xuaW1wb3J0IHsgRG9tSGVscGVyIH0gZnJvbSAnLi4vZXhlY3V0aW9uL2hlbHBlcnMvZG9tLmhlbHBlcic7XG5pbXBvcnQgeyBFZGl0U2Vzc2lvbiB9IGZyb20gJy4uL2V4ZWN1dGlvbi9lZGl0LnNlc3Npb24nO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGluZyB9IGZyb20gJy4uL2NvcmUvZXZlbnQtZW1pdHRpbmcnO1xuaW1wb3J0IHsgSUxheWVyQ29uZmlnIH0gZnJvbSAnLi9sYXllcnMvbGF5ZXIuY29uZmlnJztcbmltcG9ydCB7IFBvc2l0aW9uSGVscGVyIH0gZnJvbSAnLi4vcG9zaXRpb25pbmcvcG9zaXRpb24uaGVscGVyJztcbmltcG9ydCB7IFJhbmdlIH0gZnJvbSAnLi4vcG9zaXRpb25pbmcvcmFuZ2UnO1xuaW1wb3J0IHsgUmVuZGVyQ2hhbmdlc01vZGVsIH0gZnJvbSAnLi9yZW5kZXItY2hhbmdlcy5tb2RlbCc7XG5pbXBvcnQgeyBSZW5kZXJMb29wIH0gZnJvbSAnLi9yZW5kZXJsb29wJztcbmltcG9ydCB7IFNlbGVjdGlvbkxheWVyIH0gZnJvbSAnLi9sYXllcnMvc2VsZWN0aW9uLmxheWVyJztcbmltcG9ydCB7IFRleHRMYXllciB9IGZyb20gJy4vbGF5ZXJzL3RleHQubGF5ZXInO1xuXG5leHBvcnQgY2xhc3MgUmVuZGVyZXIgZXh0ZW5kcyBFdmVudEVtaXR0aW5nIHtcbiAgICBjb250YWluZXI6IEhUTUxFbGVtZW50O1xuXG4gICAgY29udGVudDogSFRNTEVsZW1lbnQ7XG5cbiAgICBjdXJzb3JMYXllcjogQ3Vyc29yTGF5ZXI7XG5cbiAgICB0ZXh0TGF5ZXI6IFRleHRMYXllcjtcblxuICAgIHNlbGVjdGlvbkxheWVyOiBTZWxlY3Rpb25MYXllcjtcblxuICAgIGxvb3A6IFJlbmRlckxvb3A7XG5cbiAgICB0ZXh0YXJlYTogSFRNTEVsZW1lbnQ7XG5cbiAgICBsYXllckNvbmZpZzogSUxheWVyQ29uZmlnID0ge1xuICAgICAgICB3aWR0aDogMSxcbiAgICAgICAgY29udGVudFJhbmdlOiBuZXcgRGlzdGFuY2VNb2RlbCh7IHN0YXJ0OiAwLCBlbmQ6IDAgfSksXG4gICAgICAgIG1pbkhlaWdodDogMSxcbiAgICAgICAgbWF4SGVpZ2h0OiAxLFxuICAgICAgICBvZmZzZXQ6IDAsXG4gICAgICAgIGhlaWdodDogMSxcbiAgICAgICAgc2Nyb2xsVG9wOiAwLFxuICAgICAgICBwYWdlczogW10sXG4gICAgICAgIHZpc2libGVSYW5nZToge1xuICAgICAgICAgICAgc3RhcnRQYXJhZ3JhcGg6IDAsXG4gICAgICAgICAgICBzdGFydExpbmU6IDAsXG4gICAgICAgICAgICBzdGFydFNjcmVlbkxpbmU6IDAsXG4gICAgICAgICAgICBzdGFydFNjcmVlbkZ1bGxMaW5lOiAwLFxuICAgICAgICAgICAgZW5kUGFyYWdyYXBoOiAwLFxuICAgICAgICAgICAgZW5kTGluZTogMCxcbiAgICAgICAgICAgIGVuZFNjcmVlbkxpbmU6IDAsXG4gICAgICAgICAgICBlbmRTY3JlZW5GdWxsTGluZTogMFxuICAgICAgICB9XG4gICAgfTtcblxuICAgIGNoYW5nZXMgPSBuZXcgUmVuZGVyQ2hhbmdlc01vZGVsKCk7XG5cbiAgICByZWFkb25seSB0ZXh0YXJlYVNpemUgPSB7XG4gICAgICAgIGhlaWdodDogMSxcbiAgICAgICAgd2lkdGg6IDFcbiAgICB9O1xuXG4gICAgY29uc3RydWN0b3IocGFyZW50Q29udGFpbmVyOiBIVE1MRWxlbWVudCwgcHVibGljIHNlc3Npb246IEVkaXRTZXNzaW9uKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuY29udGFpbmVyID0gcGFyZW50Q29udGFpbmVyO1xuICAgICAgICB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWUgKz0gJyBub2Rlci1lZGl0b3InO1xuICAgICAgICB0aGlzLmNyZWF0ZUNvbnRlbnRDb250YWluZXIoKTtcbiAgICAgICAgdGhpcy50ZXh0TGF5ZXIgPSBuZXcgVGV4dExheWVyKHRoaXMuY29udGVudCwgdGhpcy5zZXNzaW9uKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25MYXllciA9IG5ldyBTZWxlY3Rpb25MYXllcih0aGlzLmNvbnRlbnQsICd0ZXh0LXNlbGVjdGlvbicsIHRoaXMuc2Vzc2lvbik7XG4gICAgICAgIHRoaXMuY3Vyc29yTGF5ZXIgPSBuZXcgQ3Vyc29yTGF5ZXIodGhpcy5jb250ZW50LCB0aGlzLnNlc3Npb24pO1xuICAgICAgICB0aGlzLmxvb3AgPSBuZXcgUmVuZGVyTG9vcChjaGFuZ2VzID0+IHRoaXMucmVuZGVyQ2hhbmdlcyhjaGFuZ2VzKSk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5hZGRFdmVudExpc3RlbmVyKCdwYWdlc0NvdW50Q2hhbmdlZCcsIHRoaXMucGFnZXNDb3VudENoYW5nZWRIYW5kbGVyKTtcbiAgICB9XG5cbiAgICByZW5kZXJDaGFuZ2VzKGNoYW5nZXM6IFJlbmRlckNoYW5nZXNNb2RlbCwgZm9yY2U/OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGNoYW5nZXMuYXBwbHkodGhpcy5jaGFuZ2VzKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VzID0gbmV3IFJlbmRlckNoYW5nZXNNb2RlbCgpO1xuXG4gICAgICAgIGlmICghY2hhbmdlcy5hbnkgJiYgIWZvcmNlKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZXMuYXBwbHkoY2hhbmdlcyk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRleHQsIHNjcm9sbGluZyBhbmQgcmVzaXplIGNoYW5nZXMgY2FuIGNhdXNlIHRoZSB2aWV3IHBvcnQgc2l6ZSB0byBjaGFuZ2VcbiAgICAgICAgaWYgKGNoYW5nZXMuZnVsbCB8fCBjaGFuZ2VzLnNpemUgfHwgY2hhbmdlcy50ZXh0IHx8IGNoYW5nZXMubGluZXMgfHwgY2hhbmdlcy5zY3JvbGwpIHtcbiAgICAgICAgICAgIGNoYW5nZXMuYXBwbHkodGhpcy5jb21wdXRlTGF5ZXJDb25maWcoKSk7XG5cbiAgICAgICAgICAgIERvbUhlbHBlci50cmFuc2xhdGUodGhpcy5jb250ZW50LCAwLCAtdGhpcy5sYXllckNvbmZpZy5vZmZzZXQpO1xuXG4gICAgICAgICAgICBEb21IZWxwZXIuc2V0U3R5bGUodGhpcy5jb250ZW50LnN0eWxlLCAnd2lkdGgnLCBgJHt0aGlzLmxheWVyQ29uZmlnLndpZHRofXB4YCk7XG4gICAgICAgICAgICBEb21IZWxwZXIuc2V0U3R5bGUodGhpcy5jb250ZW50LnN0eWxlLCAnaGVpZ2h0JywgYCR7dGhpcy5sYXllckNvbmZpZy5oZWlnaHR9cHhgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGZ1bGxcbiAgICAgICAgaWYgKGNoYW5nZXMuZnVsbCkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJGdWxsKCk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzLnRleHQgfHwgY2hhbmdlcy5zY3JvbGwpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyVGV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXMuY3Vyc29yKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlckN1cnNvcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXMubWFya2VyIHx8IGNoYW5nZXMuc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlclNlbGVjdGlvbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXNzaW9uLm9uUmVuZGVyZWQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VycyBhIHBhcnRpYWwgdXBkYXRlIG9mIHRoZSB0ZXh0LCBmcm9tIHRoZSByYW5nZSBnaXZlbiBieSB0aGUgdHdvIHBhcmFtZXRlcnMuXG4gICAgICoqL1xuICAgIHVwZGF0ZUxpbmVzKGZpcnN0Um93OiBudW1iZXIsIGxhc3RSb3c6IG51bWJlcik6IHZvaWQge1xuICAgICAgICAvLyBJZiB0aGUgY2hhbmdlIGhhcHBlbmVkIG9mZnNjcmVlbiBhYm92ZSB1cyB0aGVuIGl0J3MgcG9zc2libGVcbiAgICAgICAgLy8gdGhhdCBhIG5ldyBsaW5lIHdyYXAgd2lsbCBhZmZlY3QgdGhlIHBvc2l0aW9uIG9mIHRoZSBsaW5lcyBvbiBvdXJcbiAgICAgICAgLy8gc2NyZWVuLCBzbyB0aGV5IG5lZWQgcmVkcmF3bi5cbiAgICAgICAgaWYgKGxhc3RSb3cgPCB0aGlzLmxheWVyQ29uZmlnLmNvbnRlbnRSYW5nZS5zdGFydCB8fCBmaXJzdFJvdyA+IHRoaXMubGF5ZXJDb25maWcuY29udGVudFJhbmdlLmVuZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sb29wLnNjaGVkdWxlKHsgbGluZXM6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgbW92ZVRleHRBcmVhVG9DdXJzb3IoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy50ZXh0YXJlYSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGN1cnNvclBvc2l0aW9uID0gdGhpcy5jdXJzb3JMYXllci5jdXJzb3JQb3NpdGlvbjtcbiAgICAgICAgaWYgKCFjdXJzb3JQb3NpdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcG9zVG9wID0gY3Vyc29yUG9zaXRpb24ucGFnZVkgLSB0aGlzLmxheWVyQ29uZmlnLm9mZnNldDtcbiAgICAgICAgaWYgKHBvc1RvcCA8IDAgfHwgcG9zVG9wID4gdGhpcy5sYXllckNvbmZpZy5oZWlnaHQgLSB0aGlzLnRleHRhcmVhU2l6ZS5oZWlnaHQpIHtcbiAgICAgICAgICAgIERvbUhlbHBlci50cmFuc2xhdGUodGhpcy50ZXh0YXJlYSwgMCwgMCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBEb21IZWxwZXIuc2V0U3R5bGUodGhpcy50ZXh0YXJlYS5zdHlsZSwgJ2hlaWdodCcsIGAke3RoaXMudGV4dGFyZWFTaXplLmhlaWdodH1weGApO1xuICAgICAgICBEb21IZWxwZXIuc2V0U3R5bGUodGhpcy50ZXh0YXJlYS5zdHlsZSwgJ3dpZHRoJywgYCR7dGhpcy50ZXh0YXJlYVNpemUud2lkdGh9cHhgKTtcbiAgICAgICAgRG9tSGVscGVyLnRyYW5zbGF0ZShcbiAgICAgICAgICAgIHRoaXMudGV4dGFyZWEsXG4gICAgICAgICAgICBNYXRoLm1pbihjdXJzb3JQb3NpdGlvbi5wYWdlWCwgdGhpcy50ZXh0YXJlYVNpemUud2lkdGgpLFxuICAgICAgICAgICAgTWF0aC5taW4ocG9zVG9wLCB0aGlzLnRleHRhcmVhU2l6ZS5oZWlnaHQpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdXBkYXRlU2VsZWN0aW9uKHJhbmdlOiBSYW5nZSk6IHZvaWQge1xuICAgICAgICBpZiAocmFuZ2UuaXNFbXB0eSAmJiB0aGlzLnNlbGVjdGlvbkxheWVyLm1hcmtlcikge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25MYXllci5tYXJrZXIgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5sb29wLnNjaGVkdWxlKHsgc2VsZWN0aW9uOiB0cnVlIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKCFyYW5nZS5pc0VtcHR5ICYmICF0aGlzLnNlbGVjdGlvbkxheWVyLm1hcmtlcj8uaXNFcXVhbChyYW5nZSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTGF5ZXIubWFya2VyID0gcmFuZ2U7XG4gICAgICAgICAgICB0aGlzLmxvb3Auc2NoZWR1bGUoeyBzZWxlY3Rpb246IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VycyBhIGZ1bGwgdXBkYXRlIG9mIHRoZSB0ZXh0LCBmb3IgYWxsIHRoZSByb3dzLlxuICAgICAqKi9cbiAgICB1cGRhdGVUZXh0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmxvb3Auc2NoZWR1bGUoeyB0ZXh0OiB0cnVlIH0pO1xuICAgIH1cblxuICAgIHVwZGF0ZUN1cnNvcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sb29wLnNjaGVkdWxlKHsgY3Vyc29yOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIHNjcmVlbiBjb29yZGluYXRlcyB0byB0ZXh0IGNvb3JkaW5hdGVzIGJ5IG1hcHBpbmcgdG8gdGhlIGNsb3Nlc3QgdG9rZW4gbWlkcG9pbnQuXG4gICAgICovXG4gICAgc2NyZWVuVG9UZXh0Q29vcmRpbmF0ZXNVc2luZ01pZHBvaW50KHg6IG51bWJlciwgeTogbnVtYmVyLCByZWN0PzogRE9NUmVjdCk6IEN1cnNvclBhcmFncmFwaCB7XG4gICAgICAgIGNvbnN0IHsgbGVmdCwgdG9wIH0gPSByZWN0ID8/IHRoaXMuY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCB7IHBhcmFncmFwaEluZGV4LCBsaW5lSW5kZXggfSA9IFBvc2l0aW9uSGVscGVyLmdldFBhcmFncmFwaEFuZExpbmVJbmRleEZyb21ZUG9zaXRpb24odGhpcy5zZXNzaW9uLCB5LCB0b3ApO1xuICAgICAgICBjb25zdCB7IGxpbmUsIGluZGV4SW5MaW5lIH0gPSBQb3NpdGlvbkhlbHBlci5tYXBQaXhlbFRvQ2xvc2VzdFRva2VuTWlkcG9pbnQodGhpcy5zZXNzaW9uLCB4LCBwYXJhZ3JhcGhJbmRleCwgbGluZUluZGV4LCBsZWZ0KTtcbiAgICAgICAgcmV0dXJuIFBvc2l0aW9uSGVscGVyLnNjcmVlblRvRG9jdW1lbnQodGhpcy5zZXNzaW9uLCBsaW5lLCBpbmRleEluTGluZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgc2NyZWVuIGNvb3JkaW5hdGVzIHRvIHRleHQgY29vcmRpbmF0ZXMgYnkgbWFwcGluZyB0byB0aGUgbmV4dCB0b2tlbiBib3VuZGFyeS5cbiAgICAgKi9cbiAgICBzY3JlZW5Ub1RleHRDb29yZGluYXRlc1VzaW5nQm91bmRhcnkoeDogbnVtYmVyLCB5OiBudW1iZXIsIHJlY3Q/OiBET01SZWN0KTogQ3Vyc29yUGFyYWdyYXBoIHtcbiAgICAgICAgY29uc3QgeyBsZWZ0LCB0b3AgfSA9IHJlY3QgPz8gdGhpcy5jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHsgcGFyYWdyYXBoSW5kZXgsIGxpbmVJbmRleCB9ID0gUG9zaXRpb25IZWxwZXIuZ2V0UGFyYWdyYXBoQW5kTGluZUluZGV4RnJvbVlQb3NpdGlvbih0aGlzLnNlc3Npb24sIHksIHRvcCk7XG4gICAgICAgIGNvbnN0IHsgbGluZSwgaW5kZXhJbkxpbmUgfSA9IFBvc2l0aW9uSGVscGVyLm1hcFBpeGVsVG9OZXh0VG9rZW5Cb3VuZGFyeSh0aGlzLnNlc3Npb24sIHgsIHBhcmFncmFwaEluZGV4LCBsaW5lSW5kZXgsIGxlZnQpO1xuICAgICAgICByZXR1cm4gUG9zaXRpb25IZWxwZXIuc2NyZWVuVG9Eb2N1bWVudCh0aGlzLnNlc3Npb24sIGxpbmUsIGluZGV4SW5MaW5lKTtcbiAgICB9XG5cbiAgICBzaG93Q3Vyc29yKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmN1cnNvckxheWVyLnNob3dDdXJzb3IoKTtcbiAgICB9XG5cbiAgICBoaWRlQ3Vyc29yKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmN1cnNvckxheWVyLmhpZGVDdXJzb3IoKTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlc3Npb24uZGlzcGxheURhdGEucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGFnZXNDb3VudENoYW5nZWQnLCB0aGlzLnBhZ2VzQ291bnRDaGFuZ2VkSGFuZGxlcik7XG4gICAgICAgIHRoaXMudGV4dExheWVyLmRlc3Ryb3koKTtcbiAgICAgICAgRG9tSGVscGVyLnJlbW92ZUNoaWxkcmVuKHRoaXMuY29udGFpbmVyKTtcbiAgICB9XG5cbiAgICByZW5kZXJGdWxsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRleHRMYXllci51cGRhdGVMaW5lcyh0aGlzLmxheWVyQ29uZmlnKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25MYXllci51cGRhdGUodGhpcy5sYXllckNvbmZpZyk7XG4gICAgICAgIHRoaXMuY3Vyc29yTGF5ZXIudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpO1xuICAgICAgICB0aGlzLm1vdmVUZXh0QXJlYVRvQ3Vyc29yKCk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5vblJlbmRlcmVkKCk7XG4gICAgfVxuXG4gICAgcmVuZGVyVGV4dCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50ZXh0TGF5ZXIudXBkYXRlTGluZXModGhpcy5sYXllckNvbmZpZyk7XG4gICAgICAgIHRoaXMuY3Vyc29yTGF5ZXIuZGV0ZWN0VmlzaWJpbGl0eSgpO1xuICAgIH1cblxuICAgIHJlbmRlckN1cnNvcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdXJzb3JMYXllci51cGRhdGUodGhpcy5sYXllckNvbmZpZyk7XG4gICAgICAgIHRoaXMubW92ZVRleHRBcmVhVG9DdXJzb3IoKTtcbiAgICB9XG5cbiAgICByZW5kZXJTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uTGF5ZXIudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpO1xuICAgICAgICB0aGlzLmN1cnNvckxheWVyLmRldGVjdFZpc2liaWxpdHkoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbXB1dGVMYXllckNvbmZpZygpOiBSZW5kZXJDaGFuZ2VzTW9kZWwge1xuICAgICAgICBjb25zdCBkaXNwbGF5RGF0YSA9IHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YTtcbiAgICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gZGlzcGxheURhdGEuYWxsUGFnZXNIZWlnaHQ7XG4gICAgICAgIGNvbnN0IG1pbkhlaWdodCA9IGRpc3BsYXlEYXRhLm1pbkhlaWdodDtcblxuICAgICAgICBjb25zdCBjaGFuZ2VzID0gbmV3IFJlbmRlckNoYW5nZXNNb2RlbCh7IHNjcm9sbDogdHJ1ZSB9KTtcbiAgICAgICAgdGhpcy5sYXllckNvbmZpZyA9IHtcbiAgICAgICAgICAgIHdpZHRoOiB0aGlzLnNlc3Npb24uZGlzcGxheURhdGEuY29udGVudFdpZHRoICsgZGlzcGxheURhdGEucGFnZU1hcmdpbi5sZWZ0ICsgZGlzcGxheURhdGEucGFnZU1hcmdpbi5yaWdodCxcbiAgICAgICAgICAgIGhlaWdodDogZGlzcGxheURhdGEuZGVmYXVsdFZlcnRpY2FsRGF0YS5jb250ZW50SGVpZ2h0LFxuICAgICAgICAgICAgY29udGVudFJhbmdlOiBuZXcgRGlzdGFuY2VNb2RlbCh7IHN0YXJ0OiAwLCBlbmQ6IGRpc3BsYXlEYXRhLnBhcmFncmFwaHMuZmlsdGVyKHggPT4geC5wYXJhZ3JhcGhTZXR0aW5ncykubGVuZ3RoIC0gMSB9KSxcbiAgICAgICAgICAgIG1pbkhlaWdodCxcbiAgICAgICAgICAgIG1heEhlaWdodCxcbiAgICAgICAgICAgIG9mZnNldDogMCxcbiAgICAgICAgICAgIHNjcm9sbFRvcDogdGhpcy5zZXNzaW9uLnNjcm9sbFRvcFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBjaGFuZ2VzO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGFnZXNDb3VudENoYW5nZWRIYW5kbGVyID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLmxvb3Auc2NoZWR1bGUoeyBsaW5lczogdHJ1ZSwgc2VsZWN0aW9uOiB0cnVlIH0pO1xuICAgIH07XG5cbiAgICBwcml2YXRlIGNyZWF0ZUNvbnRlbnRDb250YWluZXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29udGVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB0aGlzLmNvbnRlbnQuY2xhc3NOYW1lID0gJ25vZGVyLWNvbnRlbnQnO1xuXG4gICAgICAgIGlmICh0aGlzLmNvbnRhaW5lci5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5maXJzdENoaWxkLmFwcGVuZENoaWxkKHRoaXMuY29udGVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmNvbnRlbnQpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
|
|
@@ -1,185 +0,0 @@
|
|
|
1
|
-
import { BreakHelper } from '../gadgets/page-break/break.helper';
|
|
2
|
-
import { ContentStyleHelper } from '../content/helpers/content-style.helper';
|
|
3
|
-
import { DistanceModel } from '../execution/distance.model';
|
|
4
|
-
import { DomHelper } from '../execution/helpers/dom.helper';
|
|
5
|
-
import { FormatExtModel } from '../content/display-data/format-ext.model';
|
|
6
|
-
import { HYPERLINK_HEADING_STYLE_ID, NEW_LINE_MARKUP } from '../content/constants/editor.const';
|
|
7
|
-
import { ScalingHelper } from '../content/helpers/scaling.helper';
|
|
8
|
-
import { TextStyleModel } from '../../models/generated/text-style.model';
|
|
9
|
-
export class RenderingHelper {
|
|
10
|
-
static createLineElement(lineInfo, numberingOffsetLeft, scalingRatio) {
|
|
11
|
-
let lineEl = document.createElement('div');
|
|
12
|
-
lineEl.className = 'noder-line';
|
|
13
|
-
if (lineInfo) {
|
|
14
|
-
const paddingLeft = ScalingHelper.scale(lineInfo.paddingLeft - numberingOffsetLeft, scalingRatio);
|
|
15
|
-
const marginLeft = paddingLeft < 0 ? paddingLeft : 0;
|
|
16
|
-
lineEl.setAttribute('style',
|
|
17
|
-
// eslint-disable-next-line prettier/prettier
|
|
18
|
-
`padding-left:${paddingLeft}px;height:${lineInfo.height + lineInfo.offsetAfter}px;margin-top:${lineInfo.offsetBefore}px;margin-bottom:${lineInfo.endPageOffset}px;margin-left:${marginLeft}px;background-color:${lineInfo.backgroundColor}`);
|
|
19
|
-
lineEl.setAttribute('screen-index', `${lineInfo.screenLine}`);
|
|
20
|
-
}
|
|
21
|
-
return lineEl;
|
|
22
|
-
}
|
|
23
|
-
static renderContentSimpleLine(domContent, formatsExt, rowDistance, customContentService, customComponents, breaks = []) {
|
|
24
|
-
const valueFragment = DomHelper.createFragment(domContent.currentElement);
|
|
25
|
-
for (const formatExt of formatsExt) {
|
|
26
|
-
const fragmentDocumentStartIndex = rowDistance.start > formatExt.startIndex ? rowDistance.start : formatExt.startIndex;
|
|
27
|
-
const fragmentDocumentEndIndex = formatExt.endIndex > rowDistance.end ? rowDistance.end : formatExt.endIndex;
|
|
28
|
-
const fragmentDocumentDistance = new DistanceModel({ start: fragmentDocumentStartIndex, end: fragmentDocumentEndIndex });
|
|
29
|
-
const fragmentStartIndex = rowDistance.start > formatExt.startIndex ? rowDistance.start - formatExt.startIndex : 0;
|
|
30
|
-
const fragmentEndIndex = formatExt.endIndex > rowDistance.end ? rowDistance.end - formatExt.startIndex : formatExt.endIndex - formatExt.startIndex;
|
|
31
|
-
const fragmentDistance = new DistanceModel({ start: fragmentStartIndex, end: fragmentEndIndex });
|
|
32
|
-
this.renderFormatContent(valueFragment, formatExt, fragmentDocumentDistance, fragmentDistance, customContentService, customComponents, breaks);
|
|
33
|
-
}
|
|
34
|
-
domContent.parentNode.appendChild(valueFragment);
|
|
35
|
-
}
|
|
36
|
-
static renderContentWrappedLine(domContent, splits, currentParagraph, formatsExt, distance, customContentService, customComponents, scalingRatio, breaks = []) {
|
|
37
|
-
let splitIndex = 0;
|
|
38
|
-
const numberingOffsetLeft = currentParagraph.numberingData.numberingId === null
|
|
39
|
-
? 0
|
|
40
|
-
: currentParagraph.numberingData.width + currentParagraph.numberingData.paddingLeft;
|
|
41
|
-
let lineEl = RenderingHelper.createLineElement(currentParagraph.textLinesInfo[splitIndex], numberingOffsetLeft, scalingRatio);
|
|
42
|
-
domContent.parentNode.appendChild(lineEl);
|
|
43
|
-
const valueFragment = DomHelper.createFragment(domContent.currentElement);
|
|
44
|
-
let paragraphChars = 0;
|
|
45
|
-
let split = splits[splitIndex];
|
|
46
|
-
for (const formatExt of formatsExt) {
|
|
47
|
-
const beforeSplitIndex = split ? split - 1 : distance.end - distance.start;
|
|
48
|
-
const beforeSplitDocumentIndex = distance.start + beforeSplitIndex;
|
|
49
|
-
const fragmentDocumentStartIndex = distance.start + paragraphChars;
|
|
50
|
-
const fragmentDocumentEndIndex = formatExt.endIndex < beforeSplitDocumentIndex ? formatExt.endIndex : beforeSplitDocumentIndex;
|
|
51
|
-
const fragmentDocumentDistance = new DistanceModel({ start: fragmentDocumentStartIndex, end: fragmentDocumentEndIndex });
|
|
52
|
-
const fragmentStartIndex = distance.start > formatExt.startIndex ? distance.start - formatExt.startIndex : 0;
|
|
53
|
-
const fragmentEndIndex = formatExt.endIndex < beforeSplitDocumentIndex
|
|
54
|
-
? fragmentStartIndex + formatExt.endIndex - formatExt.startIndex
|
|
55
|
-
: distance.start + beforeSplitIndex - formatExt.startIndex;
|
|
56
|
-
const fragmentDistance = new DistanceModel({ start: fragmentStartIndex, end: fragmentEndIndex });
|
|
57
|
-
paragraphChars += this.renderFormatContent(valueFragment, formatExt, fragmentDocumentDistance, fragmentDistance, customContentService, customComponents, breaks);
|
|
58
|
-
lineEl.appendChild(valueFragment);
|
|
59
|
-
let nextFragmentStartIndex = fragmentEndIndex + 1;
|
|
60
|
-
while (paragraphChars === split && nextFragmentStartIndex !== distance.end) {
|
|
61
|
-
split = splits[++splitIndex];
|
|
62
|
-
const nextFragmentDocumentStartIndex = fragmentDocumentStartIndex + nextFragmentStartIndex - fragmentStartIndex;
|
|
63
|
-
lineEl = RenderingHelper.createLineElement(currentParagraph.textLinesInfo[splitIndex], numberingOffsetLeft, scalingRatio);
|
|
64
|
-
if (split > formatExt.endIndex) {
|
|
65
|
-
const nextFragmentEndIndex = formatExt.content.length - 1;
|
|
66
|
-
const nextFragmentDistance = new DistanceModel({ start: nextFragmentStartIndex, end: nextFragmentEndIndex });
|
|
67
|
-
const nextFragmentDocumentEndIndex = nextFragmentDocumentStartIndex + nextFragmentEndIndex - nextFragmentStartIndex;
|
|
68
|
-
const nextFragmentDocumentDistance = new DistanceModel({
|
|
69
|
-
start: nextFragmentDocumentStartIndex,
|
|
70
|
-
end: nextFragmentDocumentEndIndex
|
|
71
|
-
});
|
|
72
|
-
paragraphChars += this.renderFormatContent(valueFragment, formatExt, nextFragmentDocumentDistance, nextFragmentDistance, customContentService, customComponents, breaks);
|
|
73
|
-
lineEl.appendChild(valueFragment);
|
|
74
|
-
domContent.parentNode.appendChild(lineEl);
|
|
75
|
-
break;
|
|
76
|
-
}
|
|
77
|
-
const textIndexLength = RenderingHelper.getTextIndexLengthForInsert(formatExt, nextFragmentDocumentStartIndex, distance, split, paragraphChars);
|
|
78
|
-
const nextFragmentDocumentEndIndex = nextFragmentDocumentStartIndex + textIndexLength;
|
|
79
|
-
const nextFragmentEndIndex = nextFragmentStartIndex + textIndexLength;
|
|
80
|
-
const nextFragmentDistance = new DistanceModel({ start: nextFragmentStartIndex, end: nextFragmentEndIndex });
|
|
81
|
-
const nextFragmentDocumentDistance = new DistanceModel({
|
|
82
|
-
start: nextFragmentDocumentStartIndex,
|
|
83
|
-
end: nextFragmentDocumentEndIndex
|
|
84
|
-
});
|
|
85
|
-
const renderedChars = this.renderFormatContent(valueFragment, formatExt, nextFragmentDocumentDistance, nextFragmentDistance, customContentService, customComponents, breaks);
|
|
86
|
-
lineEl.appendChild(valueFragment);
|
|
87
|
-
domContent.parentNode.appendChild(lineEl);
|
|
88
|
-
nextFragmentStartIndex += renderedChars;
|
|
89
|
-
paragraphChars += renderedChars;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
static renderNumberingMarker(paragraph, layerElement, scalingRatio) {
|
|
94
|
-
const markerHeight = paragraph.numberingData.height;
|
|
95
|
-
const markerLineInfo = {
|
|
96
|
-
paddingLeft: paragraph.numberingData.paddingLeft,
|
|
97
|
-
height: markerHeight,
|
|
98
|
-
offsetBefore: 0,
|
|
99
|
-
firstLinePageOffset: 0,
|
|
100
|
-
endPageOffset: 0,
|
|
101
|
-
offsetAfter: 0,
|
|
102
|
-
screenLine: 0
|
|
103
|
-
};
|
|
104
|
-
const numberingLineEl = this.createLineElement(markerLineInfo, 0, scalingRatio);
|
|
105
|
-
const markerFragment = DomHelper.createFragment(layerElement);
|
|
106
|
-
const marker = paragraph.numberingData.marker;
|
|
107
|
-
const markerExtModel = new FormatExtModel({
|
|
108
|
-
textStyle: paragraph.numberingData.markerTextStyle,
|
|
109
|
-
content: marker
|
|
110
|
-
});
|
|
111
|
-
this.renderText(markerFragment, markerExtModel, marker);
|
|
112
|
-
numberingLineEl.appendChild(markerFragment);
|
|
113
|
-
return numberingLineEl;
|
|
114
|
-
}
|
|
115
|
-
static createDivContainer(className) {
|
|
116
|
-
const containerElement = document.createElement('div');
|
|
117
|
-
containerElement.className = className;
|
|
118
|
-
return containerElement;
|
|
119
|
-
}
|
|
120
|
-
static renderFormatContent(fragment, formatExt, fragmentDocumentDistance, fragmentDistance, customContentService, customComponents, breaks) {
|
|
121
|
-
let textFragment = formatExt.content.substring(fragmentDistance.start, fragmentDistance.end + 1);
|
|
122
|
-
if (!textFragment) {
|
|
123
|
-
return 0;
|
|
124
|
-
}
|
|
125
|
-
const textFragmentWithoutBreaks = BreakHelper.removeBreakMarker(breaks, textFragment, fragmentDocumentDistance.start);
|
|
126
|
-
if (customContentService.isFragmentContainComponent(customComponents, textFragment, fragmentDocumentDistance)) {
|
|
127
|
-
this.renderTextWithCustomContent(fragment, formatExt, fragmentDocumentDistance, textFragmentWithoutBreaks, customContentService, customComponents);
|
|
128
|
-
}
|
|
129
|
-
else {
|
|
130
|
-
RenderingHelper.renderText(fragment, formatExt, textFragmentWithoutBreaks);
|
|
131
|
-
}
|
|
132
|
-
return textFragment.length;
|
|
133
|
-
}
|
|
134
|
-
static renderTextWithCustomContent(fragment, formatExt, fragmentDocumentDistance, textFragment, customContentService, customComponents) {
|
|
135
|
-
const components = customContentService.getComponents(customComponents, fragmentDocumentDistance);
|
|
136
|
-
if (!components.length) {
|
|
137
|
-
RenderingHelper.renderText(fragment, formatExt, textFragment);
|
|
138
|
-
return;
|
|
139
|
-
}
|
|
140
|
-
let newTextFragmentStartIndex = fragmentDocumentDistance.start;
|
|
141
|
-
let nextTextFragment = textFragment;
|
|
142
|
-
for (const component of components) {
|
|
143
|
-
const textBeforeElement = nextTextFragment.substring(0, component.instance.insertIndex - newTextFragmentStartIndex);
|
|
144
|
-
nextTextFragment = nextTextFragment.substring(textBeforeElement.length + 1, nextTextFragment.length);
|
|
145
|
-
newTextFragmentStartIndex = newTextFragmentStartIndex + (textBeforeElement.length ? textBeforeElement.length + 1 : 1);
|
|
146
|
-
if (textBeforeElement.length) {
|
|
147
|
-
RenderingHelper.renderText(fragment, formatExt, textBeforeElement);
|
|
148
|
-
}
|
|
149
|
-
this.attachComponent(fragment, component, customContentService);
|
|
150
|
-
}
|
|
151
|
-
if (nextTextFragment.length) {
|
|
152
|
-
RenderingHelper.renderText(fragment, formatExt, nextTextFragment);
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
static renderText(fragment, formatExt, textFragment) {
|
|
156
|
-
const span = document.createElement('span');
|
|
157
|
-
const textStyle = new TextStyleModel({ ...formatExt.textStyle });
|
|
158
|
-
if (textFragment === NEW_LINE_MARKUP) {
|
|
159
|
-
span.className = 'paragraph-symbol';
|
|
160
|
-
}
|
|
161
|
-
if (textStyle.headingStyleId === HYPERLINK_HEADING_STYLE_ID) {
|
|
162
|
-
span.classList.add('hyperlink');
|
|
163
|
-
span.onmousemove = event => {
|
|
164
|
-
if (event.ctrlKey) {
|
|
165
|
-
span.classList.add('hyperlink-hover');
|
|
166
|
-
}
|
|
167
|
-
else {
|
|
168
|
-
span.classList.remove('hyperlink-hover');
|
|
169
|
-
}
|
|
170
|
-
};
|
|
171
|
-
span.onmouseleave = () => span.classList.remove('hyperlink-hover');
|
|
172
|
-
}
|
|
173
|
-
span.textContent = textFragment;
|
|
174
|
-
span.setAttribute('style', ContentStyleHelper.getTextStylesString(textStyle));
|
|
175
|
-
fragment.appendChild(span);
|
|
176
|
-
}
|
|
177
|
-
static getTextIndexLengthForInsert(formatExt, fragmentDocumentStartIndex, paragraphDistance, split, paragraphChars) {
|
|
178
|
-
const maxLength = Math.max(paragraphDistance.end - paragraphChars - paragraphDistance.start, 0);
|
|
179
|
-
return (Math.min(split - paragraphChars || Number.MAX_VALUE, maxLength, formatExt.endIndex - fragmentDocumentStartIndex + 1, formatExt.content.length) - 1);
|
|
180
|
-
}
|
|
181
|
-
static attachComponent(fragment, component, customContentService) {
|
|
182
|
-
customContentService.componentService.attachComponent(fragment, component);
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyaW5nLmhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1ub2Rlci9zcmMvbGliL2VkaXRvci9kaXNwbGF5L3JlbmRlcmluZy5oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRWpFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRTdFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDNUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUdoRyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRXpFLE1BQU0sT0FBTyxlQUFlO0lBQ3hCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxRQUFzQixFQUFFLG1CQUEyQixFQUFFLFlBQW9CO1FBQzlGLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0MsTUFBTSxDQUFDLFNBQVMsR0FBRyxZQUFZLENBQUM7UUFFaEMsSUFBSSxRQUFRLEVBQUU7WUFDVixNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEdBQUcsbUJBQW1CLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDbEcsTUFBTSxVQUFVLEdBQUcsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFckQsTUFB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LE1BQU0sQ0FBQywyQkFBMkIsQ0FDdEMsU0FBeUIsRUFDekIsMEJBQWtDLEVBQ2xDLGlCQUFnQyxFQUNoQyxLQUFhLEVBQ2IsY0FBc0I7UUFFdEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEdBQUcsY0FBYyxHQUFHLGlCQUFpQixDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNoRyxPQUFPLENBQ0gsSUFBSSxDQUFDLEdBQUcsQ0FDSixLQUFLLEdBQUcsY0FBYyxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQzFDLFNBQVMsRUFDVCxTQUFTLENBQUMsUUFBUSxHQUFHLDBCQUEwQixHQUFHLENBQUMsRUFDbkQsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQzNCLEdBQUcsQ0FBQyxDQUNSLENBQUM7SUFDTixDQUFDO0lBRVMsTUFBTSxDQUFDLGVBQWUsQ0FDNUIsUUFBMEIsRUFDMUIsU0FBZ0MsRUFDaEMsb0JBQTBDO1FBRTFDLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDL0UsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEJyZWFrSGVscGVyIH0gZnJvbSAnLi4vZ2FkZ2V0cy9wYWdlLWJyZWFrL2JyZWFrLmhlbHBlcic7XG5pbXBvcnQgeyBCcmVha01vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9icmVhay5tb2RlbCc7XG5pbXBvcnQgeyBDb250ZW50U3R5bGVIZWxwZXIgfSBmcm9tICcuLi9jb250ZW50L2hlbHBlcnMvY29udGVudC1zdHlsZS5oZWxwZXInO1xuaW1wb3J0IHsgQ3VzdG9tQ29udGVudFNlcnZpY2UgfSBmcm9tICcuLi9jb21wb25lbnRzL3NoYXJlZC9zZXJ2aWNlcy9jdXN0b20tY29udGVudC5zZXJ2aWNlJztcbmltcG9ydCB7IERpc3RhbmNlTW9kZWwgfSBmcm9tICcuLi9leGVjdXRpb24vZGlzdGFuY2UubW9kZWwnO1xuaW1wb3J0IHsgRG9tSGVscGVyIH0gZnJvbSAnLi4vZXhlY3V0aW9uL2hlbHBlcnMvZG9tLmhlbHBlcic7XG5pbXBvcnQgeyBGb3JtYXRFeHRNb2RlbCB9IGZyb20gJy4uL2NvbnRlbnQvZGlzcGxheS1kYXRhL2Zvcm1hdC1leHQubW9kZWwnO1xuaW1wb3J0IHsgSFlQRVJMSU5LX0hFQURJTkdfU1RZTEVfSUQsIE5FV19MSU5FX01BUktVUCB9IGZyb20gJy4uL2NvbnRlbnQvY29uc3RhbnRzL2VkaXRvci5jb25zdCc7XG5pbXBvcnQgeyBJQ3VzdG9tQ29tcG9uZW50cyB9IGZyb20gJy4uL2NvbXBvbmVudHMvc2hhcmVkL2N1c3RvbS1jb21wb25lbnRzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQYXJhZ3JhcGggfSBmcm9tICcuLi9jb250ZW50L2Rpc3BsYXktZGF0YS9wYXJhZ3JhcGgnO1xuaW1wb3J0IHsgU2NhbGluZ0hlbHBlciB9IGZyb20gJy4uL2NvbnRlbnQvaGVscGVycy9zY2FsaW5nLmhlbHBlcic7XG5pbXBvcnQgeyBUZXh0TGluZUluZm8gfSBmcm9tICcuLi9jb250ZW50L2Rpc3BsYXktZGF0YS90ZXh0LWxpbmUtaW5mbyc7XG5pbXBvcnQgeyBUZXh0U3R5bGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvdGV4dC1zdHlsZS5tb2RlbCc7XG5cbmV4cG9ydCBjbGFzcyBSZW5kZXJpbmdIZWxwZXIge1xuICAgIHN0YXRpYyBjcmVhdGVMaW5lRWxlbWVudChsaW5lSW5mbzogVGV4dExpbmVJbmZvLCBudW1iZXJpbmdPZmZzZXRMZWZ0OiBudW1iZXIsIHNjYWxpbmdSYXRpbzogbnVtYmVyKTogSFRNTEVsZW1lbnQge1xuICAgICAgICBsZXQgbGluZUVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGxpbmVFbC5jbGFzc05hbWUgPSAnbm9kZXItbGluZSc7XG5cbiAgICAgICAgaWYgKGxpbmVJbmZvKSB7XG4gICAgICAgICAgICBjb25zdCBwYWRkaW5nTGVmdCA9IFNjYWxpbmdIZWxwZXIuc2NhbGUobGluZUluZm8ucGFkZGluZ0xlZnQgLSBudW1iZXJpbmdPZmZzZXRMZWZ0LCBzY2FsaW5nUmF0aW8pO1xuICAgICAgICAgICAgY29uc3QgbWFyZ2luTGVmdCA9IHBhZGRpbmdMZWZ0IDwgMCA/IHBhZGRpbmdMZWZ0IDogMDtcblxuICAgICAgICAgICAgbGluZUVsLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAnc3R5bGUnLFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmV0dGllci9wcmV0dGllclxuICAgICAgICAgICAgICAgIGBwYWRkaW5nLWxlZnQ6JHtwYWRkaW5nTGVmdH1weDtoZWlnaHQ6JHtsaW5lSW5mby5oZWlnaHQgKyBsaW5lSW5mby5vZmZzZXRBZnRlcn1weDttYXJnaW4tdG9wOiR7XG4gICAgICAgICAgICAgICAgICAgIGxpbmVJbmZvLm9mZnNldEJlZm9yZVxuICAgICAgICAgICAgICAgIH1weDttYXJnaW4tYm90dG9tOiR7bGluZUluZm8uZW5kUGFnZU9mZnNldH1weDttYXJnaW4tbGVmdDoke21hcmdpbkxlZnR9cHg7YmFja2dyb3VuZC1jb2xvcjoke2xpbmVJbmZvLmJhY2tncm91bmRDb2xvcn1gXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbGluZUVsLnNldEF0dHJpYnV0ZSgnc2NyZWVuLWluZGV4JywgYCR7bGluZUluZm8uc2NyZWVuTGluZX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsaW5lRWw7XG4gICAgfVxuXG4gICAgc3RhdGljIHJlbmRlckNvbnRlbnRTaW1wbGVMaW5lKFxuICAgICAgICBkb21Db250ZW50OiB7IGN1cnJlbnRFbGVtZW50OiBIVE1MRWxlbWVudDsgcGFyZW50Tm9kZTogTm9kZSB9LFxuICAgICAgICBmb3JtYXRzRXh0OiBGb3JtYXRFeHRNb2RlbFtdLFxuICAgICAgICByb3dEaXN0YW5jZTogRGlzdGFuY2VNb2RlbCxcbiAgICAgICAgY3VzdG9tQ29udGVudFNlcnZpY2U6IEN1c3RvbUNvbnRlbnRTZXJ2aWNlLFxuICAgICAgICBjdXN0b21Db21wb25lbnRzOiBJQ3VzdG9tQ29tcG9uZW50cyxcbiAgICAgICAgYnJlYWtzOiBCcmVha01vZGVsW10gPSBbXVxuICAgICk6IHZvaWQge1xuICAgICAgICBjb25zdCB2YWx1ZUZyYWdtZW50ID0gRG9tSGVscGVyLmNyZWF0ZUZyYWdtZW50KGRvbUNvbnRlbnQuY3VycmVudEVsZW1lbnQpO1xuICAgICAgICBmb3IgKGNvbnN0IGZvcm1hdEV4dCBvZiBmb3JtYXRzRXh0KSB7XG4gICAgICAgICAgICBjb25zdCBmcmFnbWVudERvY3VtZW50U3RhcnRJbmRleCA9IHJvd0Rpc3RhbmNlLnN0YXJ0ID4gZm9ybWF0RXh0LnN0YXJ0SW5kZXggPyByb3dEaXN0YW5jZS5zdGFydCA6IGZvcm1hdEV4dC5zdGFydEluZGV4O1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnREb2N1bWVudEVuZEluZGV4ID0gZm9ybWF0RXh0LmVuZEluZGV4ID4gcm93RGlzdGFuY2UuZW5kID8gcm93RGlzdGFuY2UuZW5kIDogZm9ybWF0RXh0LmVuZEluZGV4O1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnREb2N1bWVudERpc3RhbmNlID0gbmV3IERpc3RhbmNlTW9kZWwoeyBzdGFydDogZnJhZ21lbnREb2N1bWVudFN0YXJ0SW5kZXgsIGVuZDogZnJhZ21lbnREb2N1bWVudEVuZEluZGV4IH0pO1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnRTdGFydEluZGV4ID0gcm93RGlzdGFuY2Uuc3RhcnQgPiBmb3JtYXRFeHQuc3RhcnRJbmRleCA/IHJvd0Rpc3RhbmNlLnN0YXJ0IC0gZm9ybWF0RXh0LnN0YXJ0SW5kZXggOiAwO1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnRFbmRJbmRleCA9XG4gICAgICAgICAgICAgICAgZm9ybWF0RXh0LmVuZEluZGV4ID4gcm93RGlzdGFuY2UuZW5kID8gcm93RGlzdGFuY2UuZW5kIC0gZm9ybWF0RXh0LnN0YXJ0SW5kZXggOiBmb3JtYXRFeHQuZW5kSW5kZXggLSBmb3JtYXRFeHQuc3RhcnRJbmRleDtcbiAgICAgICAgICAgIGNvbnN0IGZyYWdtZW50RGlzdGFuY2UgPSBuZXcgRGlzdGFuY2VNb2RlbCh7IHN0YXJ0OiBmcmFnbWVudFN0YXJ0SW5kZXgsIGVuZDogZnJhZ21lbnRFbmRJbmRleCB9KTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyRm9ybWF0Q29udGVudChcbiAgICAgICAgICAgICAgICB2YWx1ZUZyYWdtZW50LFxuICAgICAgICAgICAgICAgIGZvcm1hdEV4dCxcbiAgICAgICAgICAgICAgICBmcmFnbWVudERvY3VtZW50RGlzdGFuY2UsXG4gICAgICAgICAgICAgICAgZnJhZ21lbnREaXN0YW5jZSxcbiAgICAgICAgICAgICAgICBjdXN0b21Db250ZW50U2VydmljZSxcbiAgICAgICAgICAgICAgICBjdXN0b21Db21wb25lbnRzLFxuICAgICAgICAgICAgICAgIGJyZWFrc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRvbUNvbnRlbnQucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh2YWx1ZUZyYWdtZW50KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcmVuZGVyQ29udGVudFdyYXBwZWRMaW5lKFxuICAgICAgICBkb21Db250ZW50OiB7IGN1cnJlbnRFbGVtZW50OiBIVE1MRWxlbWVudDsgcGFyZW50Tm9kZTogTm9kZSB9LFxuICAgICAgICBzcGxpdHM6IG51bWJlcltdLFxuICAgICAgICBjdXJyZW50UGFyYWdyYXBoOiBQYXJhZ3JhcGgsXG4gICAgICAgIGZvcm1hdHNFeHQ6IEZvcm1hdEV4dE1vZGVsW10sXG4gICAgICAgIGRpc3RhbmNlOiBEaXN0YW5jZU1vZGVsLFxuICAgICAgICBjdXN0b21Db250ZW50U2VydmljZTogQ3VzdG9tQ29udGVudFNlcnZpY2UsXG4gICAgICAgIGN1c3RvbUNvbXBvbmVudHM6IElDdXN0b21Db21wb25lbnRzLFxuICAgICAgICBzY2FsaW5nUmF0aW86IG51bWJlcixcbiAgICAgICAgYnJlYWtzOiBCcmVha01vZGVsW10gPSBbXVxuICAgICk6IHZvaWQge1xuICAgICAgICBsZXQgc3BsaXRJbmRleCA9IDA7XG4gICAgICAgIGNvbnN0IG51bWJlcmluZ09mZnNldExlZnQgPVxuICAgICAgICAgICAgY3VycmVudFBhcmFncmFwaC5udW1iZXJpbmdEYXRhLm51bWJlcmluZ0lkID09PSBudWxsXG4gICAgICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICAgICAgOiBjdXJyZW50UGFyYWdyYXBoLm51bWJlcmluZ0RhdGEud2lkdGggKyBjdXJyZW50UGFyYWdyYXBoLm51bWJlcmluZ0RhdGEucGFkZGluZ0xlZnQ7XG4gICAgICAgIGxldCBsaW5lRWwgPSBSZW5kZXJpbmdIZWxwZXIuY3JlYXRlTGluZUVsZW1lbnQoY3VycmVudFBhcmFncmFwaC50ZXh0TGluZXNJbmZvW3NwbGl0SW5kZXhdLCBudW1iZXJpbmdPZmZzZXRMZWZ0LCBzY2FsaW5nUmF0aW8pO1xuICAgICAgICBkb21Db250ZW50LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQobGluZUVsKTtcblxuICAgICAgICBjb25zdCB2YWx1ZUZyYWdtZW50ID0gRG9tSGVscGVyLmNyZWF0ZUZyYWdtZW50KGRvbUNvbnRlbnQuY3VycmVudEVsZW1lbnQpO1xuICAgICAgICBsZXQgcGFyYWdyYXBoQ2hhcnMgPSAwO1xuICAgICAgICBsZXQgc3BsaXQgPSBzcGxpdHNbc3BsaXRJbmRleF07XG4gICAgICAgIGZvciAoY29uc3QgZm9ybWF0RXh0IG9mIGZvcm1hdHNFeHQpIHtcbiAgICAgICAgICAgIGNvbnN0IGJlZm9yZVNwbGl0SW5kZXggPSBzcGxpdCA/IHNwbGl0IC0gMSA6IGRpc3RhbmNlLmVuZCAtIGRpc3RhbmNlLnN0YXJ0O1xuICAgICAgICAgICAgY29uc3QgYmVmb3JlU3BsaXREb2N1bWVudEluZGV4ID0gZGlzdGFuY2Uuc3RhcnQgKyBiZWZvcmVTcGxpdEluZGV4O1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnREb2N1bWVudFN0YXJ0SW5kZXggPSBkaXN0YW5jZS5zdGFydCArIHBhcmFncmFwaENoYXJzO1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnREb2N1bWVudEVuZEluZGV4ID0gZm9ybWF0RXh0LmVuZEluZGV4IDwgYmVmb3JlU3BsaXREb2N1bWVudEluZGV4ID8gZm9ybWF0RXh0LmVuZEluZGV4IDogYmVmb3JlU3BsaXREb2N1bWVudEluZGV4O1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnREb2N1bWVudERpc3RhbmNlID0gbmV3IERpc3RhbmNlTW9kZWwoeyBzdGFydDogZnJhZ21lbnREb2N1bWVudFN0YXJ0SW5kZXgsIGVuZDogZnJhZ21lbnREb2N1bWVudEVuZEluZGV4IH0pO1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnRTdGFydEluZGV4ID0gZGlzdGFuY2Uuc3RhcnQgPiBmb3JtYXRFeHQuc3RhcnRJbmRleCA/IGRpc3RhbmNlLnN0YXJ0IC0gZm9ybWF0RXh0LnN0YXJ0SW5kZXggOiAwO1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnRFbmRJbmRleCA9XG4gICAgICAgICAgICAgICAgZm9ybWF0RXh0LmVuZEluZGV4IDwgYmVmb3JlU3BsaXREb2N1bWVudEluZGV4XG4gICAgICAgICAgICAgICAgICAgID8gZnJhZ21lbnRTdGFydEluZGV4ICsgZm9ybWF0RXh0LmVuZEluZGV4IC0gZm9ybWF0RXh0LnN0YXJ0SW5kZXhcbiAgICAgICAgICAgICAgICAgICAgOiBkaXN0YW5jZS5zdGFydCArIGJlZm9yZVNwbGl0SW5kZXggLSBmb3JtYXRFeHQuc3RhcnRJbmRleDtcbiAgICAgICAgICAgIGNvbnN0IGZyYWdtZW50RGlzdGFuY2UgPSBuZXcgRGlzdGFuY2VNb2RlbCh7IHN0YXJ0OiBmcmFnbWVudFN0YXJ0SW5kZXgsIGVuZDogZnJhZ21lbnRFbmRJbmRleCB9KTtcbiAgICAgICAgICAgIHBhcmFncmFwaENoYXJzICs9IHRoaXMucmVuZGVyRm9ybWF0Q29udGVudChcbiAgICAgICAgICAgICAgICB2YWx1ZUZyYWdtZW50LFxuICAgICAgICAgICAgICAgIGZvcm1hdEV4dCxcbiAgICAgICAgICAgICAgICBmcmFnbWVudERvY3VtZW50RGlzdGFuY2UsXG4gICAgICAgICAgICAgICAgZnJhZ21lbnREaXN0YW5jZSxcbiAgICAgICAgICAgICAgICBjdXN0b21Db250ZW50U2VydmljZSxcbiAgICAgICAgICAgICAgICBjdXN0b21Db21wb25lbnRzLFxuICAgICAgICAgICAgICAgIGJyZWFrc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGxpbmVFbC5hcHBlbmRDaGlsZCh2YWx1ZUZyYWdtZW50KTtcbiAgICAgICAgICAgIGxldCBuZXh0RnJhZ21lbnRTdGFydEluZGV4ID0gZnJhZ21lbnRFbmRJbmRleCArIDE7XG4gICAgICAgICAgICB3aGlsZSAocGFyYWdyYXBoQ2hhcnMgPT09IHNwbGl0ICYmIG5leHRGcmFnbWVudFN0YXJ0SW5kZXggIT09IGRpc3RhbmNlLmVuZCkge1xuICAgICAgICAgICAgICAgIHNwbGl0ID0gc3BsaXRzWysrc3BsaXRJbmRleF07XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dEZyYWdtZW50RG9jdW1lbnRTdGFydEluZGV4ID0gZnJhZ21lbnREb2N1bWVudFN0YXJ0SW5kZXggKyBuZXh0RnJhZ21lbnRTdGFydEluZGV4IC0gZnJhZ21lbnRTdGFydEluZGV4O1xuICAgICAgICAgICAgICAgIGxpbmVFbCA9IFJlbmRlcmluZ0hlbHBlci5jcmVhdGVMaW5lRWxlbWVudChjdXJyZW50UGFyYWdyYXBoLnRleHRMaW5lc0luZm9bc3BsaXRJbmRleF0sIG51bWJlcmluZ09mZnNldExlZnQsIHNjYWxpbmdSYXRpbyk7XG4gICAgICAgICAgICAgICAgaWYgKHNwbGl0ID4gZm9ybWF0RXh0LmVuZEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRGcmFnbWVudEVuZEluZGV4ID0gZm9ybWF0RXh0LmNvbnRlbnQubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dEZyYWdtZW50RGlzdGFuY2UgPSBuZXcgRGlzdGFuY2VNb2RlbCh7IHN0YXJ0OiBuZXh0RnJhZ21lbnRTdGFydEluZGV4LCBlbmQ6IG5leHRGcmFnbWVudEVuZEluZGV4IH0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0RnJhZ21lbnREb2N1bWVudEVuZEluZGV4ID0gbmV4dEZyYWdtZW50RG9jdW1lbnRTdGFydEluZGV4ICsgbmV4dEZyYWdtZW50RW5kSW5kZXggLSBuZXh0RnJhZ21lbnRTdGFydEluZGV4O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0RnJhZ21lbnREb2N1bWVudERpc3RhbmNlID0gbmV3IERpc3RhbmNlTW9kZWwoe1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IG5leHRGcmFnbWVudERvY3VtZW50U3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogbmV4dEZyYWdtZW50RG9jdW1lbnRFbmRJbmRleFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcGFyYWdyYXBoQ2hhcnMgKz0gdGhpcy5yZW5kZXJGb3JtYXRDb250ZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVGcmFnbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdEV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRGcmFnbWVudERvY3VtZW50RGlzdGFuY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0RnJhZ21lbnREaXN0YW5jZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbUNvbnRlbnRTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tQ29tcG9uZW50cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrc1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBsaW5lRWwuYXBwZW5kQ2hpbGQodmFsdWVGcmFnbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIGRvbUNvbnRlbnQucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChsaW5lRWwpO1xuXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHRleHRJbmRleExlbmd0aCA9IFJlbmRlcmluZ0hlbHBlci5nZXRUZXh0SW5kZXhMZW5ndGhGb3JJbnNlcnQoXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdEV4dCxcbiAgICAgICAgICAgICAgICAgICAgbmV4dEZyYWdtZW50RG9jdW1lbnRTdGFydEluZGV4LFxuICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZSxcbiAgICAgICAgICAgICAgICAgICAgc3BsaXQsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFncmFwaENoYXJzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0RnJhZ21lbnREb2N1bWVudEVuZEluZGV4ID0gbmV4dEZyYWdtZW50RG9jdW1lbnRTdGFydEluZGV4ICsgdGV4dEluZGV4TGVuZ3RoO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHRGcmFnbWVudEVuZEluZGV4ID0gbmV4dEZyYWdtZW50U3RhcnRJbmRleCArIHRleHRJbmRleExlbmd0aDtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0RnJhZ21lbnREaXN0YW5jZSA9IG5ldyBEaXN0YW5jZU1vZGVsKHsgc3RhcnQ6IG5leHRGcmFnbWVudFN0YXJ0SW5kZXgsIGVuZDogbmV4dEZyYWdtZW50RW5kSW5kZXggfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dEZyYWdtZW50RG9jdW1lbnREaXN0YW5jZSA9IG5ldyBEaXN0YW5jZU1vZGVsKHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IG5leHRGcmFnbWVudERvY3VtZW50U3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgZW5kOiBuZXh0RnJhZ21lbnREb2N1bWVudEVuZEluZGV4XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVuZGVyZWRDaGFycyA9IHRoaXMucmVuZGVyRm9ybWF0Q29udGVudChcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVGcmFnbWVudCxcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0RXh0LFxuICAgICAgICAgICAgICAgICAgICBuZXh0RnJhZ21lbnREb2N1bWVudERpc3RhbmNlLFxuICAgICAgICAgICAgICAgICAgICBuZXh0RnJhZ21lbnREaXN0YW5jZSxcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tQ29udGVudFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbUNvbXBvbmVudHMsXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgbGluZUVsLmFwcGVuZENoaWxkKHZhbHVlRnJhZ21lbnQpO1xuICAgICAgICAgICAgICAgIGRvbUNvbnRlbnQucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChsaW5lRWwpO1xuICAgICAgICAgICAgICAgIG5leHRGcmFnbWVudFN0YXJ0SW5kZXggKz0gcmVuZGVyZWRDaGFycztcbiAgICAgICAgICAgICAgICBwYXJhZ3JhcGhDaGFycyArPSByZW5kZXJlZENoYXJzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIHJlbmRlck51bWJlcmluZ01hcmtlcihwYXJhZ3JhcGg6IFBhcmFncmFwaCwgbGF5ZXJFbGVtZW50OiBIVE1MRWxlbWVudCwgc2NhbGluZ1JhdGlvOiBudW1iZXIpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IG1hcmtlckhlaWdodCA9IHBhcmFncmFwaC5udW1iZXJpbmdEYXRhLmhlaWdodDtcblxuICAgICAgICBjb25zdCBtYXJrZXJMaW5lSW5mbyA9IHtcbiAgICAgICAgICAgIHBhZGRpbmdMZWZ0OiBwYXJhZ3JhcGgubnVtYmVyaW5nRGF0YS5wYWRkaW5nTGVmdCxcbiAgICAgICAgICAgIGhlaWdodDogbWFya2VySGVpZ2h0LFxuICAgICAgICAgICAgb2Zmc2V0QmVmb3JlOiAwLFxuICAgICAgICAgICAgZmlyc3RMaW5lUGFnZU9mZnNldDogMCxcbiAgICAgICAgICAgIGVuZFBhZ2VPZmZzZXQ6IDAsXG4gICAgICAgICAgICBvZmZzZXRBZnRlcjogMCxcbiAgICAgICAgICAgIHNjcmVlbkxpbmU6IDBcbiAgICAgICAgfSBhcyBUZXh0TGluZUluZm87XG4gICAgICAgIGNvbnN0IG51bWJlcmluZ0xpbmVFbCA9IHRoaXMuY3JlYXRlTGluZUVsZW1lbnQobWFya2VyTGluZUluZm8sIDAsIHNjYWxpbmdSYXRpbyk7XG5cbiAgICAgICAgY29uc3QgbWFya2VyRnJhZ21lbnQgPSBEb21IZWxwZXIuY3JlYXRlRnJhZ21lbnQobGF5ZXJFbGVtZW50KTtcbiAgICAgICAgY29uc3QgbWFya2VyID0gcGFyYWdyYXBoLm51bWJlcmluZ0RhdGEubWFya2VyO1xuICAgICAgICBjb25zdCBtYXJrZXJFeHRNb2RlbCA9IG5ldyBGb3JtYXRFeHRNb2RlbCh7XG4gICAgICAgICAgICB0ZXh0U3R5bGU6IHBhcmFncmFwaC5udW1iZXJpbmdEYXRhLm1hcmtlclRleHRTdHlsZSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IG1hcmtlclxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZW5kZXJUZXh0KG1hcmtlckZyYWdtZW50LCBtYXJrZXJFeHRNb2RlbCwgbWFya2VyKTtcbiAgICAgICAgbnVtYmVyaW5nTGluZUVsLmFwcGVuZENoaWxkKG1hcmtlckZyYWdtZW50KTtcblxuICAgICAgICByZXR1cm4gbnVtYmVyaW5nTGluZUVsO1xuICAgIH1cblxuICAgIHN0YXRpYyBjcmVhdGVEaXZDb250YWluZXIoY2xhc3NOYW1lOiBzdHJpbmcpOiBIVE1MRGl2RWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgY29udGFpbmVyRWxlbWVudC5jbGFzc05hbWUgPSBjbGFzc05hbWU7XG5cbiAgICAgICAgcmV0dXJuIGNvbnRhaW5lckVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVuZGVyRm9ybWF0Q29udGVudChcbiAgICAgICAgZnJhZ21lbnQ6IERvY3VtZW50RnJhZ21lbnQsXG4gICAgICAgIGZvcm1hdEV4dDogRm9ybWF0RXh0TW9kZWwsXG4gICAgICAgIGZyYWdtZW50RG9jdW1lbnREaXN0YW5jZTogRGlzdGFuY2VNb2RlbCxcbiAgICAgICAgZnJhZ21lbnREaXN0YW5jZTogRGlzdGFuY2VNb2RlbCxcbiAgICAgICAgY3VzdG9tQ29udGVudFNlcnZpY2U6IEN1c3RvbUNvbnRlbnRTZXJ2aWNlLFxuICAgICAgICBjdXN0b21Db21wb25lbnRzOiBJQ3VzdG9tQ29tcG9uZW50cyxcbiAgICAgICAgYnJlYWtzOiBCcmVha01vZGVsW11cbiAgICApOiBudW1iZXIge1xuICAgICAgICBsZXQgdGV4dEZyYWdtZW50ID0gZm9ybWF0RXh0LmNvbnRlbnQuc3Vic3RyaW5nKGZyYWdtZW50RGlzdGFuY2Uuc3RhcnQsIGZyYWdtZW50RGlzdGFuY2UuZW5kICsgMSk7XG4gICAgICAgIGlmICghdGV4dEZyYWdtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRleHRGcmFnbWVudFdpdGhvdXRCcmVha3MgPSBCcmVha0hlbHBlci5yZW1vdmVCcmVha01hcmtlcihicmVha3MsIHRleHRGcmFnbWVudCwgZnJhZ21lbnREb2N1bWVudERpc3RhbmNlLnN0YXJ0KTtcblxuICAgICAgICBpZiAoY3VzdG9tQ29udGVudFNlcnZpY2UuaXNGcmFnbWVudENvbnRhaW5Db21wb25lbnQoY3VzdG9tQ29tcG9uZW50cywgdGV4dEZyYWdtZW50LCBmcmFnbWVudERvY3VtZW50RGlzdGFuY2UpKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlclRleHRXaXRoQ3VzdG9tQ29udGVudChcbiAgICAgICAgICAgICAgICBmcmFnbWVudCxcbiAgICAgICAgICAgICAgICBmb3JtYXRFeHQsXG4gICAgICAgICAgICAgICAgZnJhZ21lbnREb2N1bWVudERpc3RhbmNlLFxuICAgICAgICAgICAgICAgIHRleHRGcmFnbWVudFdpdGhvdXRCcmVha3MsXG4gICAgICAgICAgICAgICAgY3VzdG9tQ29udGVudFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgY3VzdG9tQ29tcG9uZW50c1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIFJlbmRlcmluZ0hlbHBlci5yZW5kZXJUZXh0KGZyYWdtZW50LCBmb3JtYXRFeHQsIHRleHRGcmFnbWVudFdpdGhvdXRCcmVha3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRleHRGcmFnbWVudC5sZW5ndGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVuZGVyVGV4dFdpdGhDdXN0b21Db250ZW50KFxuICAgICAgICBmcmFnbWVudDogRG9jdW1lbnRGcmFnbWVudCxcbiAgICAgICAgZm9ybWF0RXh0OiBGb3JtYXRFeHRNb2RlbCxcbiAgICAgICAgZnJhZ21lbnREb2N1bWVudERpc3RhbmNlOiBEaXN0YW5jZU1vZGVsLFxuICAgICAgICB0ZXh0RnJhZ21lbnQ6IHN0cmluZyxcbiAgICAgICAgY3VzdG9tQ29udGVudFNlcnZpY2U6IEN1c3RvbUNvbnRlbnRTZXJ2aWNlLFxuICAgICAgICBjdXN0b21Db21wb25lbnRzOiBJQ3VzdG9tQ29tcG9uZW50c1xuICAgICk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gY3VzdG9tQ29udGVudFNlcnZpY2UuZ2V0Q29tcG9uZW50cyhjdXN0b21Db21wb25lbnRzLCBmcmFnbWVudERvY3VtZW50RGlzdGFuY2UpO1xuXG4gICAgICAgIGlmICghY29tcG9uZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIFJlbmRlcmluZ0hlbHBlci5yZW5kZXJUZXh0KGZyYWdtZW50LCBmb3JtYXRFeHQsIHRleHRGcmFnbWVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbmV3VGV4dEZyYWdtZW50U3RhcnRJbmRleCA9IGZyYWdtZW50RG9jdW1lbnREaXN0YW5jZS5zdGFydDtcbiAgICAgICAgbGV0IG5leHRUZXh0RnJhZ21lbnQgPSB0ZXh0RnJhZ21lbnQ7XG5cbiAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgICAgY29uc3QgdGV4dEJlZm9yZUVsZW1lbnQgPSBuZXh0VGV4dEZyYWdtZW50LnN1YnN0cmluZygwLCBjb21wb25lbnQuaW5zdGFuY2UuaW5zZXJ0SW5kZXggLSBuZXdUZXh0RnJhZ21lbnRTdGFydEluZGV4KTtcbiAgICAgICAgICAgIG5leHRUZXh0RnJhZ21lbnQgPSBuZXh0VGV4dEZyYWdtZW50LnN1YnN0cmluZyh0ZXh0QmVmb3JlRWxlbWVudC5sZW5ndGggKyAxLCBuZXh0VGV4dEZyYWdtZW50Lmxlbmd0aCk7XG4gICAgICAgICAgICBuZXdUZXh0RnJhZ21lbnRTdGFydEluZGV4ID0gbmV3VGV4dEZyYWdtZW50U3RhcnRJbmRleCArICh0ZXh0QmVmb3JlRWxlbWVudC5sZW5ndGggPyB0ZXh0QmVmb3JlRWxlbWVudC5sZW5ndGggKyAxIDogMSk7XG5cbiAgICAgICAgICAgIGlmICh0ZXh0QmVmb3JlRWxlbWVudC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBSZW5kZXJpbmdIZWxwZXIucmVuZGVyVGV4dChmcmFnbWVudCwgZm9ybWF0RXh0LCB0ZXh0QmVmb3JlRWxlbWVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuYXR0YWNoQ29tcG9uZW50KGZyYWdtZW50LCBjb21wb25lbnQsIGN1c3RvbUNvbnRlbnRTZXJ2aWNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXh0VGV4dEZyYWdtZW50Lmxlbmd0aCkge1xuICAgICAgICAgICAgUmVuZGVyaW5nSGVscGVyLnJlbmRlclRleHQoZnJhZ21lbnQsIGZvcm1hdEV4dCwgbmV4dFRleHRGcmFnbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyByZW5kZXJUZXh0KGZyYWdtZW50OiBEb2N1bWVudEZyYWdtZW50LCBmb3JtYXRFeHQ6IEZvcm1hdEV4dE1vZGVsLCB0ZXh0RnJhZ21lbnQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICBjb25zdCB0ZXh0U3R5bGUgPSBuZXcgVGV4dFN0eWxlTW9kZWwoeyAuLi5mb3JtYXRFeHQudGV4dFN0eWxlIH0pO1xuXG4gICAgICAgIGlmICh0ZXh0RnJhZ21lbnQgPT09IE5FV19MSU5FX01BUktVUCkge1xuICAgICAgICAgICAgc3Bhbi5jbGFzc05hbWUgPSAncGFyYWdyYXBoLXN5bWJvbCc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGV4dFN0eWxlLmhlYWRpbmdTdHlsZUlkID09PSBIWVBFUkxJTktfSEVBRElOR19TVFlMRV9JRCkge1xuICAgICAgICAgICAgc3Bhbi5jbGFzc0xpc3QuYWRkKCdoeXBlcmxpbmsnKTtcbiAgICAgICAgICAgIHNwYW4ub25tb3VzZW1vdmUgPSBldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmN0cmxLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5jbGFzc0xpc3QuYWRkKCdoeXBlcmxpbmstaG92ZXInKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzcGFuLmNsYXNzTGlzdC5yZW1vdmUoJ2h5cGVybGluay1ob3ZlcicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBzcGFuLm9ubW91c2VsZWF2ZSA9ICgpID0+IHNwYW4uY2xhc3NMaXN0LnJlbW92ZSgnaHlwZXJsaW5rLWhvdmVyJyk7XG4gICAgICAgIH1cblxuICAgICAgICBzcGFuLnRleHRDb250ZW50ID0gdGV4dEZyYWdtZW50O1xuICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBDb250ZW50U3R5bGVIZWxwZXIuZ2V0VGV4dFN0eWxlc1N0cmluZyh0ZXh0U3R5bGUpKTtcbiAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoc3Bhbik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0VGV4dEluZGV4TGVuZ3RoRm9ySW5zZXJ0KFxuICAgICAgICBmb3JtYXRFeHQ6IEZvcm1hdEV4dE1vZGVsLFxuICAgICAgICBmcmFnbWVudERvY3VtZW50U3RhcnRJbmRleDogbnVtYmVyLFxuICAgICAgICBwYXJhZ3JhcGhEaXN0YW5jZTogRGlzdGFuY2VNb2RlbCxcbiAgICAgICAgc3BsaXQ6IG51bWJlcixcbiAgICAgICAgcGFyYWdyYXBoQ2hhcnM6IG51bWJlclxuICAgICk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IG1heExlbmd0aCA9IE1hdGgubWF4KHBhcmFncmFwaERpc3RhbmNlLmVuZCAtIHBhcmFncmFwaENoYXJzIC0gcGFyYWdyYXBoRGlzdGFuY2Uuc3RhcnQsIDApO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgTWF0aC5taW4oXG4gICAgICAgICAgICAgICAgc3BsaXQgLSBwYXJhZ3JhcGhDaGFycyB8fCBOdW1iZXIuTUFYX1ZBTFVFLFxuICAgICAgICAgICAgICAgIG1heExlbmd0aCxcbiAgICAgICAgICAgICAgICBmb3JtYXRFeHQuZW5kSW5kZXggLSBmcmFnbWVudERvY3VtZW50U3RhcnRJbmRleCArIDEsXG4gICAgICAgICAgICAgICAgZm9ybWF0RXh0LmNvbnRlbnQubGVuZ3RoXG4gICAgICAgICAgICApIC0gMVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBzdGF0aWMgYXR0YWNoQ29tcG9uZW50KFxuICAgICAgICBmcmFnbWVudDogRG9jdW1lbnRGcmFnbWVudCxcbiAgICAgICAgY29tcG9uZW50OiBDb21wb25lbnRSZWY8dW5rbm93bj4sXG4gICAgICAgIGN1c3RvbUNvbnRlbnRTZXJ2aWNlOiBDdXN0b21Db250ZW50U2VydmljZVxuICAgICk6IHZvaWQge1xuICAgICAgICBjdXN0b21Db250ZW50U2VydmljZS5jb21wb25lbnRTZXJ2aWNlLmF0dGFjaENvbXBvbmVudChmcmFnbWVudCwgY29tcG9uZW50KTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { EventHelper } from './event.helper';
|
|
2
|
-
import { RenderChangesModel } from './render-changes.model';
|
|
3
|
-
export class RenderLoop {
|
|
4
|
-
constructor(onRender) {
|
|
5
|
-
this.changes = new RenderChangesModel();
|
|
6
|
-
this.flush = () => {
|
|
7
|
-
const changes = this.changes;
|
|
8
|
-
if (changes.any) {
|
|
9
|
-
this.changes = new RenderChangesModel();
|
|
10
|
-
onRender(changes);
|
|
11
|
-
}
|
|
12
|
-
if (this.changes.any) {
|
|
13
|
-
this.schedule();
|
|
14
|
-
}
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
schedule(changes) {
|
|
18
|
-
if (changes) {
|
|
19
|
-
this.changes.apply(changes);
|
|
20
|
-
}
|
|
21
|
-
if (this.changes) {
|
|
22
|
-
EventHelper.nextFrame(this.flush);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVybG9vcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1ub2Rlci9zcmMvbGliL2VkaXRvci9kaXNwbGF5L3JlbmRlcmxvb3AudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTVELE1BQU0sT0FBTyxVQUFVO0lBS25CLFlBQVksUUFBK0M7UUFGbkQsWUFBTyxHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUd2QyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRTtZQUNkLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7WUFFN0IsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFO2dCQUNiLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO2dCQUN4QyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDckI7WUFFRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFO2dCQUNsQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7YUFDbkI7UUFDTCxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQsUUFBUSxDQUFDLE9BQXdCO1FBQzdCLElBQUksT0FBTyxFQUFFO1lBQ1QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDL0I7UUFFRCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDZCxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNyQztJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50SGVscGVyIH0gZnJvbSAnLi9ldmVudC5oZWxwZXInO1xuaW1wb3J0IHsgSVJlbmRlckNoYW5nZXMgfSBmcm9tICcuL3JlbmRlci1jaGFuZ2VzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBSZW5kZXJDaGFuZ2VzTW9kZWwgfSBmcm9tICcuL3JlbmRlci1jaGFuZ2VzLm1vZGVsJztcblxuZXhwb3J0IGNsYXNzIFJlbmRlckxvb3Age1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZmx1c2g6ICgpID0+IHZvaWQ7XG5cbiAgICBwcml2YXRlIGNoYW5nZXMgPSBuZXcgUmVuZGVyQ2hhbmdlc01vZGVsKCk7XG5cbiAgICBjb25zdHJ1Y3RvcihvblJlbmRlcjogKGNoYW5nZXM6IFJlbmRlckNoYW5nZXNNb2RlbCkgPT4gdm9pZCkge1xuICAgICAgICB0aGlzLmZsdXNoID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2hhbmdlcyA9IHRoaXMuY2hhbmdlcztcblxuICAgICAgICAgICAgaWYgKGNoYW5nZXMuYW55KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VzID0gbmV3IFJlbmRlckNoYW5nZXNNb2RlbCgpO1xuICAgICAgICAgICAgICAgIG9uUmVuZGVyKGNoYW5nZXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5jaGFuZ2VzLmFueSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NoZWR1bGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBzY2hlZHVsZShjaGFuZ2VzPzogSVJlbmRlckNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlcy5hcHBseShjaGFuZ2VzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNoYW5nZXMpIHtcbiAgICAgICAgICAgIEV2ZW50SGVscGVyLm5leHRGcmFtZSh0aGlzLmZsdXNoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|