@talrace/ngx-noder 0.0.7 → 0.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +75 -66
- package/esm2022/lib/apart-components/add-link-dialog/add-link-dialog.component.mjs +67 -0
- package/esm2022/lib/apart-components/add-link-dialog/validation.helper.mjs +7 -0
- package/esm2022/lib/apart-components/add-link-mobile/add-link-mobile.component.mjs +47 -0
- package/esm2022/lib/apart-components/confirm-dialog/confirm-dialog.component.mjs +32 -0
- package/esm2022/lib/apart-components/editor-search/editor-search-dialog.component.mjs +64 -0
- package/esm2022/lib/apart-components/editor-title/editor-title.component.mjs +89 -0
- package/esm2022/lib/apart-components/editor-title-mobile/editor-title-mobile.component.mjs +22 -0
- package/esm2022/lib/apart-components/editor-toolbar/components/base-toolbar.component.mjs +117 -0
- package/esm2022/lib/apart-components/editor-toolbar/components/buttons/color-picker/color-picker.component.mjs +37 -0
- package/esm2022/lib/apart-components/editor-toolbar/components/buttons/font/font.component.mjs +49 -0
- package/esm2022/lib/apart-components/editor-toolbar/components/buttons/font-size/font-size.component.mjs +90 -0
- package/esm2022/lib/apart-components/editor-toolbar/components/buttons/font-style/font-style.component.mjs +81 -0
- package/esm2022/lib/apart-components/editor-toolbar/components/buttons/format/format.component.mjs +28 -0
- package/esm2022/lib/apart-components/editor-toolbar/components/buttons/heading/heading.component.mjs +22 -0
- package/esm2022/lib/apart-components/editor-toolbar/components/buttons/numbering/numbering.component.mjs +53 -0
- package/esm2022/lib/apart-components/editor-toolbar/components/buttons/print/print.component.mjs +18 -0
- package/esm2022/lib/apart-components/editor-toolbar/components/buttons/undo-redo/undo-redo.component.mjs +27 -0
- package/esm2022/lib/apart-components/editor-toolbar/components/buttons/zoom/zoom.component.mjs +71 -0
- package/esm2022/lib/apart-components/editor-toolbar/components/menu-dropdowns/menu-dropdowns.component.mjs +94 -0
- package/esm2022/lib/apart-components/editor-toolbar/components/menu-dropdowns-mobile/menu-dropdowns-mobile.component.mjs +24 -0
- package/esm2022/lib/apart-components/editor-toolbar/components/toolbar-actions/toolbar-actions.component.mjs +65 -0
- package/esm2022/lib/apart-components/editor-toolbar/editor-mobile-toolbar/editor-mobile-toolbar.component.mjs +84 -0
- package/esm2022/lib/apart-components/editor-toolbar/editor-toolbar/editor-toolbar.component.mjs +90 -0
- package/esm2022/lib/apart-components/editor-toolbar/editor-toolbar.module.mjs +117 -0
- package/esm2022/lib/apart-components/editor-toolbar/shared/constants/editor-toolbar-modes.const.mjs +8 -0
- package/esm2022/lib/{+shared/editor-toolbar → apart-components/editor-toolbar/shared}/constants/numbering-templates.const.mjs +6 -6
- package/esm2022/lib/apart-components/editor-toolbar/shared/constants/svg-icons.const.mjs +157 -0
- package/esm2022/lib/apart-components/editor-toolbar/shared/enums/alignment.enum.mjs +8 -0
- package/esm2022/lib/apart-components/editor-toolbar/shared/enums/editor-toolbar-mode.enum.mjs +11 -0
- package/esm2022/lib/{+shared/editor-toolbar → apart-components/editor-toolbar/shared}/enums/numbering-template-type.enum.mjs +1 -1
- package/esm2022/lib/apart-components/editor-toolbar/shared/enums/numbering-type.enum.mjs +6 -0
- package/esm2022/lib/apart-components/editor-toolbar/shared/services/custom-icon.service.mjs +34 -0
- package/esm2022/lib/apart-components/editor-toolbar/shared/services/editor-toolbar.service.mjs +26 -0
- package/esm2022/lib/apart-components/editor-toolbar/shared/services/toolbar-core.service.mjs +60 -0
- package/esm2022/lib/apart-components/editor-toolbar/shared/toolbar-styles.helper.mjs +48 -0
- package/esm2022/lib/apart-components/insert-table/insert-table.component.mjs +54 -0
- package/esm2022/lib/apart-components/insert-table-mobile/insert-table-mobile.component.mjs +84 -0
- package/esm2022/lib/apart-components/text-format-mobile/text-format-mobile.component.mjs +123 -0
- package/esm2022/lib/editor/components/edges/edge-element.model.mjs +9 -0
- package/esm2022/lib/editor/components/edges/edge-type.enum.mjs +6 -0
- package/esm2022/lib/editor/components/edges/edge.component.mjs +99 -0
- package/esm2022/lib/editor/components/edges/edges.mjs +127 -0
- package/esm2022/lib/editor/components/edges/page-type.enum.mjs +7 -0
- package/esm2022/lib/editor/components/editor.component.mjs +112 -0
- package/esm2022/lib/editor/components/external-element/external-element.service.mjs +6 -0
- package/esm2022/lib/editor/components/external-element/external-elements.const.mjs +4 -0
- package/esm2022/lib/editor/components/external-element/external-sidenav.interface.mjs +2 -0
- package/esm2022/lib/editor/components/external-element/external.component.mjs +41 -0
- package/esm2022/lib/editor/components/external-element/models/element-data.model.mjs +9 -0
- package/esm2022/lib/editor/components/external-element/models/external-element.model.mjs +11 -0
- package/esm2022/lib/editor/components/external-element/models/external-sidenav.model.mjs +15 -0
- package/esm2022/lib/editor/components/image/components/image.component.mjs +88 -0
- package/esm2022/lib/editor/components/image/image-api.service.mjs +36 -0
- package/esm2022/lib/editor/components/image/input-handler/image-input.handler.mjs +55 -0
- package/esm2022/lib/editor/components/image/resizer/coordinate.mjs +2 -0
- package/esm2022/lib/editor/components/image/resizer/direction-wrapper.mjs +19 -0
- package/esm2022/lib/editor/components/image/resizer/direction.enum.mjs +12 -0
- package/esm2022/lib/editor/components/image/resizer/resizer.component.mjs +106 -0
- package/esm2022/lib/editor/components/image/resizer/size-delta.mjs +2 -0
- package/esm2022/lib/editor/components/image/resizer/size-wrapper.mjs +52 -0
- package/esm2022/lib/editor/components/image/size.mjs +2 -0
- package/esm2022/lib/editor/components/shared/abstract/base.component.mjs +59 -0
- package/esm2022/lib/editor/components/shared/abstract/destroy.component.mjs +18 -0
- package/esm2022/lib/editor/components/shared/custom-component.hepler.mjs +43 -0
- package/esm2022/lib/editor/components/shared/custom-components.interface.mjs +2 -0
- package/esm2022/lib/editor/components/shared/custom-content-markers.const.mjs +3 -0
- package/esm2022/lib/editor/components/shared/custom-content.mjs +2 -0
- package/esm2022/lib/editor/components/shared/services/component.service.mjs +64 -0
- package/esm2022/lib/editor/components/shared/services/custom-content.service.mjs +129 -0
- package/esm2022/lib/editor/components/shared/services/overlay.service.mjs +55 -0
- package/esm2022/lib/editor/components/tab/tab.component.mjs +44 -0
- package/esm2022/lib/editor/components/tab/tab.helper.mjs +6 -0
- package/esm2022/lib/editor/components/table/cell-resizer/cell-resizer.mjs +118 -0
- package/esm2022/lib/editor/components/table/components/table-cell.component.mjs +97 -0
- package/esm2022/lib/editor/components/table/components/table.component.mjs +410 -0
- package/esm2022/lib/{+shared/editor/core → editor/components/table}/enums/hrule.enum.mjs +1 -1
- package/esm2022/lib/editor/components/table/enums/reisizer-side.enum.mjs +8 -0
- package/esm2022/lib/editor/components/table/enums/vertical-merge.enum.mjs +6 -0
- package/esm2022/lib/editor/components/table/models/cell-data.model.mjs +17 -0
- package/esm2022/lib/editor/components/table/models/cell-resizer-parameters.model.mjs +9 -0
- package/esm2022/lib/editor/components/table/models/row-data.model.mjs +8 -0
- package/esm2022/lib/editor/components/table/models/selection-range.model.mjs +7 -0
- package/esm2022/lib/editor/components/table/overlay-menu/overlay-menu.component.mjs +74 -0
- package/esm2022/lib/editor/components/table/selection/table-selection.mjs +376 -0
- package/esm2022/lib/editor/content/constants/display-values.const.mjs +8 -0
- package/esm2022/lib/editor/content/constants/document-info.const.mjs +13 -0
- package/esm2022/lib/editor/content/constants/editor.const.mjs +70 -0
- package/esm2022/lib/editor/content/contents.interface.mjs +2 -0
- package/esm2022/lib/editor/content/display-data/display-data.mjs +839 -0
- package/esm2022/lib/editor/content/display-data/display-token.model.mjs +12 -0
- package/esm2022/lib/editor/content/display-data/format-ext.model.mjs +10 -0
- package/esm2022/lib/editor/content/display-data/general-properties.model.mjs +11 -0
- package/esm2022/lib/editor/content/display-data/indent.model.mjs +9 -0
- package/esm2022/lib/editor/content/display-data/line-info.model.mjs +9 -0
- package/esm2022/lib/editor/content/display-data/lines.mjs +96 -0
- package/esm2022/lib/editor/content/display-data/models/paragraph-info.model.mjs +8 -0
- package/esm2022/lib/editor/content/display-data/paragraph-info.interface.mjs +2 -0
- package/esm2022/lib/editor/content/display-data/paragraph.mjs +56 -0
- package/esm2022/lib/editor/content/display-data/text-line-info.mjs +35 -0
- package/esm2022/lib/editor/content/display-data/toolbar-styles.interface.mjs +2 -0
- package/esm2022/lib/editor/content/helpers/content-style.helper.mjs +78 -0
- package/esm2022/lib/editor/content/helpers/display-token.helper.mjs +62 -0
- package/esm2022/lib/{+shared/editor → editor/content}/helpers/format.helper.mjs +1 -1
- package/esm2022/lib/{+shared/editor → editor/content}/helpers/indexed-element.helper.mjs +1 -1
- package/esm2022/lib/editor/content/helpers/scaling.helper.mjs +9 -0
- package/esm2022/lib/editor/content/margin.model.mjs +16 -0
- package/esm2022/lib/editor/content/page-vertical-data.model.mjs +9 -0
- package/esm2022/lib/{+shared/editor/core/enums → editor/content}/vertical-alignment.enum.mjs +1 -1
- package/esm2022/lib/editor/core/event-emitting.mjs +56 -0
- package/esm2022/lib/editor/display/cell.interface.mjs +2 -0
- package/esm2022/lib/editor/display/event.helper.mjs +18 -0
- package/esm2022/lib/editor/display/layers/cursor.layer.mjs +102 -0
- package/esm2022/lib/editor/display/layers/layer.config.mjs +2 -0
- package/esm2022/lib/editor/display/layers/pages.layer.mjs +97 -0
- package/esm2022/lib/editor/display/layers/print.pages.layer.mjs +7 -0
- package/esm2022/lib/editor/display/layers/print.text.layer.mjs +7 -0
- package/esm2022/lib/editor/display/layers/selection.layer.mjs +119 -0
- package/esm2022/lib/editor/display/layers/text.layer.mjs +201 -0
- package/esm2022/lib/editor/display/print/print.helper.mjs +40 -0
- package/esm2022/lib/editor/display/print/print.renderer.mjs +67 -0
- package/esm2022/lib/editor/display/print/print.rendering.helper.mjs +7 -0
- package/esm2022/lib/editor/display/render-changes.interface.mjs +2 -0
- package/esm2022/lib/editor/display/render-changes.model.mjs +25 -0
- package/esm2022/lib/editor/display/renderer.mjs +206 -0
- package/esm2022/lib/editor/display/rendering.helper.mjs +185 -0
- package/esm2022/lib/editor/display/renderloop.mjs +26 -0
- package/esm2022/lib/editor/display/virtual.renderer.mjs +317 -0
- package/esm2022/lib/editor/display/visible-range.interface.mjs +2 -0
- package/esm2022/lib/editor/editor.module.mjs +67 -0
- package/esm2022/lib/editor/execution/distance.model.mjs +10 -0
- package/esm2022/lib/editor/execution/edit.session.mjs +561 -0
- package/esm2022/lib/editor/execution/editor.mjs +1387 -0
- package/esm2022/lib/editor/execution/helpers/dom.helper.mjs +42 -0
- package/esm2022/lib/editor/execution/helpers/format-style.helper.mjs +32 -0
- package/esm2022/lib/editor/execution/helpers/image.helpet.mjs +12 -0
- package/esm2022/lib/editor/execution/helpers/page.helper.mjs +12 -0
- package/esm2022/lib/editor/execution/helpers/paragraph-style.helper.mjs +41 -0
- package/esm2022/lib/editor/execution/helpers/paragraph.helper.mjs +177 -0
- package/esm2022/lib/editor/execution/regulator.service.mjs +206 -0
- package/esm2022/lib/editor/execution/targeting/cell-session-source.model.mjs +19 -0
- package/esm2022/lib/editor/execution/targeting/edge-session-source.model.mjs +15 -0
- package/esm2022/lib/editor/execution/targeting/main-session-source.model.mjs +8 -0
- package/esm2022/lib/editor/execution/targeting/session-source.model.mjs +3 -0
- package/esm2022/lib/editor/execution/targeting/session.model.mjs +10 -0
- package/esm2022/lib/editor/gadgets/font-metrics/editor-version.const.mjs +2 -0
- package/esm2022/lib/editor/gadgets/font-metrics/font-metric-size.interface.mjs +2 -0
- package/esm2022/lib/editor/gadgets/font-metrics/font-metrics.helper.mjs +88 -0
- package/esm2022/lib/editor/gadgets/history/operation-history.mjs +206 -0
- package/esm2022/lib/editor/gadgets/history/operation.type.mjs +2 -0
- package/esm2022/lib/editor/gadgets/history/operations-history-info.model.mjs +7 -0
- package/esm2022/lib/editor/gadgets/numbering/numbering-data.model.mjs +9 -0
- package/esm2022/lib/{+shared/editor/core/enums → editor/gadgets/numbering}/numbering-marker-type.enum.mjs +1 -1
- package/esm2022/lib/editor/gadgets/numbering/numbering-paragraph-style.model.mjs +13 -0
- package/esm2022/lib/editor/gadgets/numbering/numbering.helper.mjs +149 -0
- package/esm2022/lib/editor/gadgets/page-break/break-types.enum.mjs +7 -0
- package/esm2022/lib/editor/gadgets/page-break/break.helper.mjs +18 -0
- package/esm2022/lib/editor/gadgets/scrollbar.mjs +81 -0
- package/esm2022/lib/editor/gadgets/search/replace.interface.mjs +2 -0
- package/esm2022/lib/editor/gadgets/search/search-iteration.interface.mjs +2 -0
- package/esm2022/lib/editor/gadgets/search/search.mjs +231 -0
- package/esm2022/lib/editor/gadgets/unicode/unicode-chars.const.mjs +5 -0
- package/esm2022/lib/editor/gadgets/unicode/unicode.helper.mjs +20 -0
- package/esm2022/lib/editor/interaction/base.handler.mjs +19 -0
- package/esm2022/lib/editor/interaction/document.handler.mjs +27 -0
- package/esm2022/lib/editor/interaction/editor.service.mjs +346 -0
- package/esm2022/lib/editor/interaction/input.handler.mjs +152 -0
- package/esm2022/lib/{+shared/enums → editor/interaction}/mode.enum.mjs +1 -1
- package/esm2022/lib/editor/interaction/mouse-button.enum.mjs +7 -0
- package/esm2022/lib/editor/interaction/mouse.handler.mjs +50 -0
- package/esm2022/lib/editor/interaction/text-input.mjs +53 -0
- package/esm2022/lib/editor/operations/commands.service.mjs +20 -0
- package/esm2022/lib/editor/operations/enums/command-type.enum.mjs +32 -0
- package/esm2022/lib/editor/operations/enums/target-type.enum.mjs +7 -0
- package/esm2022/lib/editor/operations/helpers/break-operations.helper.mjs +9 -0
- package/esm2022/lib/editor/operations/helpers/content-operations.helper.mjs +15 -0
- package/esm2022/lib/editor/operations/helpers/format-operations.helper.mjs +85 -0
- package/esm2022/lib/editor/operations/helpers/image-operations.helper.mjs +19 -0
- package/esm2022/lib/editor/operations/helpers/indexed-element-operations.helper.mjs +43 -0
- package/esm2022/lib/editor/operations/helpers/link-operations.helper.mjs +63 -0
- package/esm2022/lib/editor/operations/helpers/numbering-operations.helper.mjs +55 -0
- package/esm2022/lib/editor/operations/helpers/paragraph-operations.helper.mjs +114 -0
- package/esm2022/lib/editor/operations/helpers/tab-operations.helper.mjs +16 -0
- package/esm2022/lib/editor/operations/helpers/table-operations.helper.mjs +374 -0
- package/esm2022/lib/editor/operations/operations-helper.helper.mjs +431 -0
- package/esm2022/lib/editor/operations/save-commands.helper.mjs +127 -0
- package/esm2022/lib/editor/operations/target-operations.helper.mjs +23 -0
- package/esm2022/lib/editor/positioning/alignments.const.mjs +8 -0
- package/esm2022/lib/editor/positioning/content.helper.mjs +36 -0
- package/esm2022/lib/editor/positioning/cursor-paragraph.mjs +13 -0
- package/esm2022/lib/editor/positioning/cursor-position.interface.mjs +2 -0
- package/esm2022/lib/editor/positioning/insert-index.interface.mjs +2 -0
- package/esm2022/lib/editor/positioning/line-width.helper.mjs +13 -0
- package/esm2022/lib/editor/positioning/position.helper.mjs +196 -0
- package/esm2022/lib/editor/positioning/range.mjs +94 -0
- package/esm2022/lib/editor/positioning/selection.mjs +317 -0
- package/esm2022/lib/editor/revision.helper.mjs +92 -0
- package/esm2022/lib/models/generated/cell.model.mjs +1 -1
- package/esm2022/lib/models/generated/command.model.mjs +5 -1
- package/esm2022/lib/models/generated/insert-paragraph.model.mjs +20 -0
- package/esm2022/lib/models/generated/replace.model.mjs +5 -1
- package/esm2022/public-api.mjs +37 -31
- package/fesm2022/talrace-ngx-noder.mjs +8169 -7285
- package/fesm2022/talrace-ngx-noder.mjs.map +1 -1
- package/lib/apart-components/add-link-dialog/add-link-dialog.component.d.ts +26 -0
- package/lib/apart-components/add-link-dialog/validation.helper.d.ts +5 -0
- package/lib/apart-components/add-link-mobile/add-link-mobile.component.d.ts +19 -0
- package/lib/{+shared → apart-components}/confirm-dialog/confirm-dialog.component.d.ts +2 -1
- package/lib/{+shared → apart-components}/editor-search/editor-search-dialog.component.d.ts +6 -7
- package/lib/apart-components/editor-title/editor-title.component.d.ts +25 -0
- package/lib/apart-components/editor-title-mobile/editor-title-mobile.component.d.ts +6 -0
- package/lib/apart-components/editor-toolbar/components/base-toolbar.component.d.ts +49 -0
- package/lib/{+shared/editor-toolbar → apart-components/editor-toolbar/components/buttons}/color-picker/color-picker.component.d.ts +1 -1
- package/lib/{+shared/editor-toolbar → apart-components/editor-toolbar/components/buttons}/font/font.component.d.ts +2 -2
- package/lib/{+shared/editor-toolbar → apart-components/editor-toolbar/components/buttons}/font-size/font-size.component.d.ts +1 -1
- package/lib/{+shared/editor-toolbar → apart-components/editor-toolbar/components/buttons}/font-style/font-style.component.d.ts +1 -1
- package/lib/{+shared/editor-toolbar → apart-components/editor-toolbar/components/buttons}/format/format.component.d.ts +2 -2
- package/lib/{+shared/editor-toolbar → apart-components/editor-toolbar/components/buttons}/heading/heading.component.d.ts +1 -1
- package/lib/{+shared/editor-toolbar → apart-components/editor-toolbar/components/buttons}/numbering/numbering.component.d.ts +3 -3
- package/lib/{+shared/editor-toolbar → apart-components/editor-toolbar/components/buttons}/print/print.component.d.ts +1 -1
- package/lib/{+shared/editor-toolbar → apart-components/editor-toolbar/components/buttons}/undo-redo/undo-redo.component.d.ts +1 -1
- package/lib/{+shared/editor-toolbar → apart-components/editor-toolbar/components/buttons}/zoom/zoom.component.d.ts +1 -1
- package/lib/apart-components/editor-toolbar/components/menu-dropdowns/menu-dropdowns.component.d.ts +36 -0
- package/lib/apart-components/editor-toolbar/components/menu-dropdowns-mobile/menu-dropdowns-mobile.component.d.ts +14 -0
- package/lib/apart-components/editor-toolbar/components/toolbar-actions/toolbar-actions.component.d.ts +23 -0
- package/lib/apart-components/editor-toolbar/editor-mobile-toolbar/editor-mobile-toolbar.component.d.ts +26 -0
- package/lib/apart-components/editor-toolbar/editor-toolbar/editor-toolbar.component.d.ts +40 -0
- package/lib/apart-components/editor-toolbar/editor-toolbar.module.d.ts +32 -0
- package/lib/apart-components/editor-toolbar/shared/constants/editor-toolbar-modes.const.d.ts +2 -0
- package/lib/apart-components/editor-toolbar/shared/constants/numbering-templates.const.d.ts +6 -0
- package/lib/apart-components/editor-toolbar/shared/enums/editor-toolbar-mode.enum.d.ts +9 -0
- package/lib/apart-components/editor-toolbar/shared/services/editor-toolbar.service.d.ts +14 -0
- package/lib/apart-components/editor-toolbar/shared/services/toolbar-core.service.d.ts +38 -0
- package/lib/apart-components/editor-toolbar/shared/toolbar-styles.helper.d.ts +4 -0
- package/lib/{+shared → apart-components}/insert-table/insert-table.component.d.ts +1 -1
- package/lib/apart-components/insert-table-mobile/insert-table-mobile.component.d.ts +30 -0
- package/lib/apart-components/text-format-mobile/text-format-mobile.component.d.ts +35 -0
- package/lib/{+shared/editor/core/models → editor/components/edges}/edge-element.model.d.ts +1 -1
- package/lib/editor/components/edges/edge.component.d.ts +44 -0
- package/lib/{+shared/editor/core → editor}/components/edges/edges.d.ts +7 -7
- package/lib/{+shared/editor → editor/components}/editor.component.d.ts +11 -11
- package/lib/{+shared/editor/custom-components → editor/components}/external-element/external-sidenav.interface.d.ts +1 -1
- package/lib/{+shared/editor/custom-components → editor/components}/external-element/external.component.d.ts +4 -4
- package/lib/{+shared/editor/custom-components → editor/components}/external-element/models/external-element.model.d.ts +2 -1
- package/lib/{+shared/editor/custom-components → editor/components}/image/components/image.component.d.ts +4 -4
- package/lib/editor/components/image/image-api.service.d.ts +17 -0
- package/lib/{+shared/editor/custom-components → editor/components}/image/input-handler/image-input.handler.d.ts +3 -0
- package/lib/{+shared/editor/custom-components → editor/components}/image/resizer/resizer.component.d.ts +2 -2
- package/lib/{+shared/editor/custom-components → editor/components}/image/resizer/size-wrapper.d.ts +1 -1
- package/lib/{+shared/editor/custom-components → editor/components}/shared/abstract/base.component.d.ts +6 -4
- package/lib/editor/components/shared/abstract/destroy.component.d.ts +9 -0
- package/lib/{+shared/editor/custom-components/shared/helpers → editor/components/shared}/custom-component.hepler.d.ts +3 -3
- package/lib/editor/components/shared/custom-components.interface.d.ts +13 -0
- package/lib/editor/components/shared/custom-content.d.ts +5 -0
- package/lib/{+shared/editor/custom-components/shared/services/component → editor/components/shared/services}/component.service.d.ts +1 -1
- package/lib/{+shared/editor/custom-components/shared/services/custom-content → editor/components/shared/services}/custom-content.service.d.ts +14 -13
- package/lib/{+shared/editor/custom-components → editor/components}/tab/tab.component.d.ts +2 -2
- package/lib/{+shared/editor/custom-components → editor/components}/table/cell-resizer/cell-resizer.d.ts +2 -1
- package/lib/editor/components/table/components/table-cell.component.d.ts +45 -0
- package/lib/{+shared/editor/custom-components → editor/components}/table/components/table.component.d.ts +27 -11
- package/lib/{+shared/editor/custom-components → editor/components}/table/models/cell-data.model.d.ts +1 -1
- package/lib/{+shared/editor/custom-components → editor/components}/table/overlay-menu/overlay-menu.component.d.ts +2 -2
- package/lib/{+shared/editor/custom-components → editor/components}/table/selection/table-selection.d.ts +5 -3
- package/lib/{+shared/editor/core → editor/content}/constants/editor.const.d.ts +5 -3
- package/lib/editor/content/contents.interface.d.ts +22 -0
- package/lib/editor/content/display-data/display-data.d.ts +103 -0
- package/lib/{+shared/editor/core/models → editor/content/display-data}/display-token.model.d.ts +1 -1
- package/lib/{+shared/editor/core/models → editor/content/display-data}/format-ext.model.d.ts +1 -1
- package/lib/editor/content/display-data/general-properties.model.d.ts +13 -0
- package/lib/{+shared/editor/core/models → editor/content/display-data}/line-info.model.d.ts +1 -0
- package/lib/{+shared/editor/core/layers → editor/content/display-data}/lines.d.ts +1 -1
- package/lib/editor/content/display-data/models/paragraph-info.model.d.ts +9 -0
- package/lib/{+shared/editor/core/paging → editor/content/display-data}/paragraph.d.ts +9 -5
- package/lib/{+shared/editor/core/paging → editor/content/display-data}/text-line-info.d.ts +5 -2
- package/lib/{+shared/editor/core/interfaces → editor/content/display-data}/toolbar-styles.interface.d.ts +1 -1
- package/lib/editor/content/helpers/content-style.helper.d.ts +10 -0
- package/lib/editor/content/helpers/display-token.helper.d.ts +6 -0
- package/lib/{+shared/editor → editor/content}/helpers/indexed-element.helper.d.ts +1 -1
- package/lib/editor/content/helpers/scaling.helper.d.ts +4 -0
- package/lib/{+shared/editor/core/paging → editor/content}/page-vertical-data.model.d.ts +1 -1
- package/lib/{+shared/editor/core/base → editor/core}/event-emitting.d.ts +0 -5
- package/lib/{+shared/editor/core → editor/display}/layers/cursor.layer.d.ts +7 -8
- package/lib/{+shared/editor/core/interfaces → editor/display/layers}/layer.config.d.ts +2 -2
- package/lib/{+shared/editor/core → editor/display}/layers/pages.layer.d.ts +5 -6
- package/lib/editor/display/layers/print.text.layer.d.ts +4 -0
- package/lib/{+shared/editor/core → editor/display}/layers/selection.layer.d.ts +5 -6
- package/lib/editor/display/layers/text.layer.d.ts +33 -0
- package/lib/{+shared/helpers → editor/display/print}/print.helper.d.ts +3 -3
- package/lib/editor/display/print/print.renderer.d.ts +21 -0
- package/lib/{+shared/editor/core/helpers → editor/display/print}/print.rendering.helper.d.ts +2 -2
- package/lib/{+shared/editor/core/models → editor/display}/render-changes.model.d.ts +1 -1
- package/lib/{+shared/editor/core → editor/display}/renderer.d.ts +10 -13
- package/lib/{+shared/editor/core/helpers → editor/display}/rendering.helper.d.ts +10 -10
- package/lib/{+shared/editor/core/layers → editor/display}/renderloop.d.ts +2 -2
- package/lib/{+shared/editor/core → editor/display}/virtual.renderer.d.ts +14 -29
- package/lib/editor/editor.module.d.ts +31 -0
- package/lib/editor/execution/edit.session.d.ts +113 -0
- package/lib/{+shared/editor/core → editor/execution}/editor.d.ts +55 -46
- package/lib/{+shared/editor/core → editor/execution}/helpers/format-style.helper.d.ts +1 -5
- package/lib/editor/execution/helpers/image.helpet.d.ts +4 -0
- package/lib/{+shared/editor/core → editor/execution}/helpers/page.helper.d.ts +1 -1
- package/lib/{+shared/editor/core → editor/execution}/helpers/paragraph-style.helper.d.ts +1 -1
- package/lib/{+shared/editor/core → editor/execution}/helpers/paragraph.helper.d.ts +14 -8
- package/lib/{+shared/editor → editor}/execution/regulator.service.d.ts +16 -15
- package/lib/{+shared/editor/execution/models → editor/execution/targeting}/cell-session-source.model.d.ts +3 -3
- package/lib/{+shared/editor/execution/models → editor/execution/targeting}/edge-session-source.model.d.ts +3 -3
- package/lib/{+shared/editor/execution/models → editor/execution/targeting}/main-session-source.model.d.ts +1 -1
- package/lib/{+shared/editor/execution/models → editor/execution/targeting}/session-source.model.d.ts +1 -1
- package/lib/{+shared/editor/execution/models → editor/execution/targeting}/session.model.d.ts +3 -3
- package/lib/{+shared/editor/core/helpers → editor/gadgets/font-metrics}/font-metrics.helper.d.ts +1 -1
- package/lib/{+shared/editor/operation-history → editor/gadgets/history}/operation-history.d.ts +9 -7
- package/lib/{+shared/editor/operation-history → editor/gadgets/history}/operation.type.d.ts +2 -1
- package/lib/{+shared/editor/core/models → editor/gadgets/numbering}/numbering-data.model.d.ts +1 -1
- package/lib/editor/gadgets/numbering/numbering-paragraph-style.model.d.ts +6 -0
- package/lib/editor/gadgets/numbering/numbering.helper.d.ts +26 -0
- package/lib/{+shared/editor/helpers → editor/gadgets/page-break}/break.helper.d.ts +2 -2
- package/lib/{+shared/editor/core/layers → editor/gadgets}/scrollbar.d.ts +9 -18
- package/lib/{+shared/editor/core → editor/gadgets/search}/search.d.ts +4 -4
- package/lib/editor/interaction/base.handler.d.ts +9 -0
- package/lib/editor/interaction/document.handler.d.ts +10 -0
- package/lib/{+shared/editor → editor}/interaction/editor.service.d.ts +36 -21
- package/lib/{+shared/editor → editor}/interaction/input.handler.d.ts +4 -5
- package/lib/{+shared/editor → editor}/interaction/mouse.handler.d.ts +1 -1
- package/lib/{+shared/editor → editor}/operations/enums/command-type.enum.d.ts +11 -10
- package/lib/{+shared/editor → editor}/operations/helpers/break-operations.helper.d.ts +2 -2
- package/lib/{+shared/editor → editor}/operations/helpers/format-operations.helper.d.ts +2 -2
- package/lib/editor/operations/helpers/image-operations.helper.d.ts +7 -0
- package/lib/{+shared/editor → editor}/operations/helpers/indexed-element-operations.helper.d.ts +1 -1
- package/lib/editor/operations/helpers/link-operations.helper.d.ts +8 -0
- package/lib/{+shared/editor → editor}/operations/helpers/numbering-operations.helper.d.ts +3 -3
- package/lib/{+shared/editor → editor}/operations/helpers/paragraph-operations.helper.d.ts +3 -2
- package/lib/{+shared/editor → editor}/operations/helpers/tab-operations.helper.d.ts +1 -1
- package/lib/{+shared/editor → editor}/operations/helpers/table-operations.helper.d.ts +6 -6
- package/lib/{+shared/editor/operations/helpers → editor/operations}/operations-helper.helper.d.ts +21 -19
- package/lib/{+shared/editor/operations/helpers → editor/operations}/save-commands.helper.d.ts +28 -22
- package/lib/editor/operations/target-operations.helper.d.ts +6 -0
- package/lib/editor/positioning/content.helper.d.ts +15 -0
- package/lib/editor/positioning/cursor-paragraph.d.ts +7 -0
- package/lib/{+shared/editor/core/interfaces → editor/positioning}/cursor-position.interface.d.ts +1 -1
- package/lib/{+shared/editor/core/helpers → editor/positioning}/line-width.helper.d.ts +2 -2
- package/lib/{+shared/editor/core/helpers → editor/positioning}/position.helper.d.ts +11 -11
- package/lib/{+shared/editor/core → editor/positioning}/range.d.ts +12 -12
- package/lib/{+shared/editor → editor}/positioning/selection.d.ts +13 -10
- package/lib/editor/revision.helper.d.ts +15 -0
- package/lib/models/generated/cell.model.d.ts +1 -0
- package/lib/models/generated/command.model.d.ts +2 -0
- package/lib/models/generated/insert-paragraph.model.d.ts +10 -0
- package/lib/models/generated/replace.model.d.ts +2 -0
- package/package.json +1 -1
- package/public-api.d.ts +36 -30
- package/src/_ngx-noder.theme.scss +49 -13
- package/src/assets/fonts/nc-iconfont.css +112 -106
- package/src/assets/fonts/nc-iconfont.eot +0 -0
- package/src/assets/fonts/nc-iconfont.svg +4 -1
- package/src/assets/fonts/nc-iconfont.ttf +0 -0
- package/src/assets/fonts/nc-iconfont.woff +0 -0
- package/src/lib/{+shared → apart-components}/add-link-dialog/_add-link-dialog.theme.scss +4 -4
- package/src/lib/apart-components/add-link-mobile/_add-link-mobile.theme.scss +25 -0
- package/src/lib/apart-components/confirm-dialog/_theme.scss +30 -0
- package/src/lib/apart-components/editor-title/_editor-title.theme.scss +28 -0
- package/src/lib/apart-components/editor-title-mobile/_editor-title-mobile.theme.scss +42 -0
- package/src/lib/apart-components/editor-toolbar/_editor-toolbar.theme.scss +27 -0
- package/src/lib/apart-components/editor-toolbar/_theme.scss +25 -0
- package/src/lib/apart-components/editor-toolbar/components/buttons/color-picker/_color-picker.theme.scss +12 -0
- package/src/lib/apart-components/editor-toolbar/components/buttons/font/_font.theme.scss +12 -0
- package/src/lib/apart-components/editor-toolbar/components/buttons/font-size/_font-size.theme.scss +14 -0
- package/src/lib/apart-components/editor-toolbar/components/buttons/font-style/_font-style.theme.scss +21 -0
- package/src/lib/apart-components/editor-toolbar/components/buttons/format/_format.theme.scss +21 -0
- package/src/lib/apart-components/editor-toolbar/components/buttons/numbering/_numbering.theme.scss +70 -0
- package/src/lib/apart-components/editor-toolbar/components/buttons/undo-redo/_undo-redo.theme.scss +16 -0
- package/src/lib/apart-components/editor-toolbar/components/menu-dropdowns/_menu-dropdowns.theme.scss +26 -0
- package/src/lib/apart-components/editor-toolbar/components/menu-dropdowns-mobile/_menu-dropdowns-mobile.theme.scss +33 -0
- package/src/lib/apart-components/editor-toolbar/components/toolbar-actions/_toolbar-actions.theme.scss +22 -0
- package/src/lib/{+shared → apart-components}/insert-table/_insert-table.theme.scss +10 -7
- package/src/lib/apart-components/insert-table-mobile/_insert-table-mobile.theme.scss +54 -0
- package/src/lib/apart-components/text-format-mobile/_text-format-mobile.theme.scss +86 -0
- package/src/lib/editor/_theme.scss +5 -0
- package/src/lib/editor/components/_editor.theme.scss +112 -0
- package/src/scss/_fonts.scss +3 -0
- package/src/scss/base-editor.scss +329 -0
- package/src/styles.scss +3 -58
- package/esm2022/lib/+shared/abstract/base-api.service.mjs +0 -99
- package/esm2022/lib/+shared/abstract/observer.component.mjs +0 -24
- package/esm2022/lib/+shared/confirm-dialog/confirm-dialog.component.mjs +0 -28
- package/esm2022/lib/+shared/constants/default-file-name.const.mjs +0 -2
- package/esm2022/lib/+shared/constants/paginator-sizes.const.mjs +0 -3
- package/esm2022/lib/+shared/editor/core/base/event-emitting.mjs +0 -71
- package/esm2022/lib/+shared/editor/core/components/edges/edge-type.enum.mjs +0 -6
- package/esm2022/lib/+shared/editor/core/components/edges/edge.component.mjs +0 -100
- package/esm2022/lib/+shared/editor/core/components/edges/edges.mjs +0 -104
- package/esm2022/lib/+shared/editor/core/constants/alignments.const.mjs +0 -8
- package/esm2022/lib/+shared/editor/core/constants/clipboardEventTypes.const.mjs +0 -6
- package/esm2022/lib/+shared/editor/core/constants/content-style-change.const.mjs +0 -15
- package/esm2022/lib/+shared/editor/core/constants/display-values.const.mjs +0 -8
- package/esm2022/lib/+shared/editor/core/constants/document-info.const.mjs +0 -13
- package/esm2022/lib/+shared/editor/core/constants/editor-version.const.mjs +0 -2
- package/esm2022/lib/+shared/editor/core/constants/editor.const.mjs +0 -62
- package/esm2022/lib/+shared/editor/core/constants/unicode-chars.const.mjs +0 -5
- package/esm2022/lib/+shared/editor/core/document.mjs +0 -134
- package/esm2022/lib/+shared/editor/core/edit.session.mjs +0 -1102
- package/esm2022/lib/+shared/editor/core/editor.mjs +0 -1279
- package/esm2022/lib/+shared/editor/core/enums/break-types.enum.mjs +0 -7
- package/esm2022/lib/+shared/editor/core/enums/mouse-button.enum.mjs +0 -7
- package/esm2022/lib/+shared/editor/core/enums/page-type.enum.mjs +0 -7
- package/esm2022/lib/+shared/editor/core/helpers/content-style.helper.mjs +0 -156
- package/esm2022/lib/+shared/editor/core/helpers/delta.helper.mjs +0 -18
- package/esm2022/lib/+shared/editor/core/helpers/dom.helper.mjs +0 -42
- package/esm2022/lib/+shared/editor/core/helpers/event.helper.mjs +0 -18
- package/esm2022/lib/+shared/editor/core/helpers/font-metrics.helper.mjs +0 -88
- package/esm2022/lib/+shared/editor/core/helpers/format-style.helper.mjs +0 -72
- package/esm2022/lib/+shared/editor/core/helpers/line-width.helper.mjs +0 -13
- package/esm2022/lib/+shared/editor/core/helpers/numbering.helper.mjs +0 -83
- package/esm2022/lib/+shared/editor/core/helpers/page.helper.mjs +0 -12
- package/esm2022/lib/+shared/editor/core/helpers/paragraph-style.helper.mjs +0 -41
- package/esm2022/lib/+shared/editor/core/helpers/paragraph.helper.mjs +0 -132
- package/esm2022/lib/+shared/editor/core/helpers/position.helper.mjs +0 -191
- package/esm2022/lib/+shared/editor/core/helpers/print.rendering.helper.mjs +0 -7
- package/esm2022/lib/+shared/editor/core/helpers/rendering.helper.mjs +0 -186
- package/esm2022/lib/+shared/editor/core/helpers/unicode.helper.mjs +0 -20
- package/esm2022/lib/+shared/editor/core/interfaces/cell.interface.mjs +0 -2
- package/esm2022/lib/+shared/editor/core/interfaces/cursor-position.interface.mjs +0 -2
- package/esm2022/lib/+shared/editor/core/interfaces/font-metric-size.interface.mjs +0 -2
- package/esm2022/lib/+shared/editor/core/interfaces/layer.config.mjs +0 -2
- package/esm2022/lib/+shared/editor/core/interfaces/paragraph-info.interface.mjs +0 -2
- package/esm2022/lib/+shared/editor/core/interfaces/render-changes.interface.mjs +0 -2
- package/esm2022/lib/+shared/editor/core/interfaces/replace.interface.mjs +0 -2
- package/esm2022/lib/+shared/editor/core/interfaces/search-iteration.interface.mjs +0 -2
- package/esm2022/lib/+shared/editor/core/interfaces/toolbar-styles.interface.mjs +0 -2
- package/esm2022/lib/+shared/editor/core/interfaces/visible-line-info.interface.mjs +0 -2
- package/esm2022/lib/+shared/editor/core/interfaces/visible-range.interface.mjs +0 -2
- package/esm2022/lib/+shared/editor/core/keyboard/text-input.mjs +0 -53
- package/esm2022/lib/+shared/editor/core/layers/cursor.layer.mjs +0 -103
- package/esm2022/lib/+shared/editor/core/layers/edges.layer.mjs +0 -99
- package/esm2022/lib/+shared/editor/core/layers/lines.mjs +0 -96
- package/esm2022/lib/+shared/editor/core/layers/pages.layer.mjs +0 -106
- package/esm2022/lib/+shared/editor/core/layers/print.edges.layer.mjs +0 -7
- package/esm2022/lib/+shared/editor/core/layers/print.pages.layer.mjs +0 -7
- package/esm2022/lib/+shared/editor/core/layers/print.text.layer.mjs +0 -7
- package/esm2022/lib/+shared/editor/core/layers/renderloop.mjs +0 -26
- package/esm2022/lib/+shared/editor/core/layers/scrollbar.mjs +0 -100
- package/esm2022/lib/+shared/editor/core/layers/selection.layer.mjs +0 -115
- package/esm2022/lib/+shared/editor/core/layers/text.layer.mjs +0 -124
- package/esm2022/lib/+shared/editor/core/models/display-token.model.mjs +0 -12
- package/esm2022/lib/+shared/editor/core/models/distance.model.mjs +0 -10
- package/esm2022/lib/+shared/editor/core/models/edge-element.model.mjs +0 -9
- package/esm2022/lib/+shared/editor/core/models/format-ext.model.mjs +0 -10
- package/esm2022/lib/+shared/editor/core/models/indent.model.mjs +0 -9
- package/esm2022/lib/+shared/editor/core/models/line-info.model.mjs +0 -9
- package/esm2022/lib/+shared/editor/core/models/margin.model.mjs +0 -16
- package/esm2022/lib/+shared/editor/core/models/numbering-data.model.mjs +0 -9
- package/esm2022/lib/+shared/editor/core/models/render-changes.model.mjs +0 -25
- package/esm2022/lib/+shared/editor/core/paging/page-vertical-data.model.mjs +0 -9
- package/esm2022/lib/+shared/editor/core/paging/pages.wrap.mjs +0 -219
- package/esm2022/lib/+shared/editor/core/paging/paragraph.mjs +0 -52
- package/esm2022/lib/+shared/editor/core/paging/text-line-info.mjs +0 -34
- package/esm2022/lib/+shared/editor/core/point.mjs +0 -13
- package/esm2022/lib/+shared/editor/core/print.renderer.mjs +0 -72
- package/esm2022/lib/+shared/editor/core/range.mjs +0 -94
- package/esm2022/lib/+shared/editor/core/renderer.mjs +0 -217
- package/esm2022/lib/+shared/editor/core/search.mjs +0 -231
- package/esm2022/lib/+shared/editor/core/virtual.renderer.mjs +0 -356
- package/esm2022/lib/+shared/editor/custom-components/external-element/element-toolbar/element-toolbar.component.mjs +0 -35
- package/esm2022/lib/+shared/editor/custom-components/external-element/external-element.service.mjs +0 -6
- package/esm2022/lib/+shared/editor/custom-components/external-element/external-elements.const.mjs +0 -4
- package/esm2022/lib/+shared/editor/custom-components/external-element/external-sidenav.interface.mjs +0 -2
- package/esm2022/lib/+shared/editor/custom-components/external-element/external.component.mjs +0 -41
- package/esm2022/lib/+shared/editor/custom-components/external-element/models/element-data.model.mjs +0 -9
- package/esm2022/lib/+shared/editor/custom-components/external-element/models/external-element.model.mjs +0 -10
- package/esm2022/lib/+shared/editor/custom-components/external-element/models/external-sidenav.model.mjs +0 -15
- package/esm2022/lib/+shared/editor/custom-components/image/components/image.component.mjs +0 -87
- package/esm2022/lib/+shared/editor/custom-components/image/input-handler/image-input.handler.mjs +0 -38
- package/esm2022/lib/+shared/editor/custom-components/image/interfaces/size.mjs +0 -2
- package/esm2022/lib/+shared/editor/custom-components/image/resizer/coordinate.mjs +0 -2
- package/esm2022/lib/+shared/editor/custom-components/image/resizer/direction-wrapper.mjs +0 -19
- package/esm2022/lib/+shared/editor/custom-components/image/resizer/direction.enum.mjs +0 -12
- package/esm2022/lib/+shared/editor/custom-components/image/resizer/resizer.component.mjs +0 -106
- package/esm2022/lib/+shared/editor/custom-components/image/resizer/size-delta.mjs +0 -2
- package/esm2022/lib/+shared/editor/custom-components/image/resizer/size-wrapper.mjs +0 -52
- package/esm2022/lib/+shared/editor/custom-components/image/services/image-api.service.mjs +0 -14
- package/esm2022/lib/+shared/editor/custom-components/shared/abstract/base.component.mjs +0 -57
- package/esm2022/lib/+shared/editor/custom-components/shared/constants/custom-content-markers.const.mjs +0 -3
- package/esm2022/lib/+shared/editor/custom-components/shared/helpers/custom-component.hepler.mjs +0 -43
- package/esm2022/lib/+shared/editor/custom-components/shared/interfaces/custom-components.interface.mjs +0 -2
- package/esm2022/lib/+shared/editor/custom-components/shared/services/component/component.service.mjs +0 -64
- package/esm2022/lib/+shared/editor/custom-components/shared/services/custom-content/custom-content.service.mjs +0 -120
- package/esm2022/lib/+shared/editor/custom-components/shared/services/overlay/overlay.service.mjs +0 -55
- package/esm2022/lib/+shared/editor/custom-components/shared/types/custom-content.mjs +0 -2
- package/esm2022/lib/+shared/editor/custom-components/tab/tab.component.mjs +0 -43
- package/esm2022/lib/+shared/editor/custom-components/table/cell-resizer/cell-resizer.mjs +0 -118
- package/esm2022/lib/+shared/editor/custom-components/table/components/table-cell.component.mjs +0 -95
- package/esm2022/lib/+shared/editor/custom-components/table/components/table.component.mjs +0 -293
- package/esm2022/lib/+shared/editor/custom-components/table/enums/reisizer-side.enum.mjs +0 -8
- package/esm2022/lib/+shared/editor/custom-components/table/enums/vertical-merge.enum.mjs +0 -6
- package/esm2022/lib/+shared/editor/custom-components/table/models/cell-data.model.mjs +0 -18
- package/esm2022/lib/+shared/editor/custom-components/table/models/cell-resizer-parameters.model.mjs +0 -9
- package/esm2022/lib/+shared/editor/custom-components/table/models/row-data.model.mjs +0 -8
- package/esm2022/lib/+shared/editor/custom-components/table/models/selection-range.model.mjs +0 -7
- package/esm2022/lib/+shared/editor/custom-components/table/overlay-menu/overlay-menu.component.mjs +0 -74
- package/esm2022/lib/+shared/editor/custom-components/table/selection/table-selection.mjs +0 -358
- package/esm2022/lib/+shared/editor/editor.component.mjs +0 -103
- package/esm2022/lib/+shared/editor/editor.module.mjs +0 -85
- package/esm2022/lib/+shared/editor/execution/models/cell-session-source.model.mjs +0 -19
- package/esm2022/lib/+shared/editor/execution/models/edge-session-source.model.mjs +0 -15
- package/esm2022/lib/+shared/editor/execution/models/general-properties.model.mjs +0 -11
- package/esm2022/lib/+shared/editor/execution/models/main-session-source.model.mjs +0 -8
- package/esm2022/lib/+shared/editor/execution/models/session-source.model.mjs +0 -3
- package/esm2022/lib/+shared/editor/execution/models/session.model.mjs +0 -10
- package/esm2022/lib/+shared/editor/execution/regulator.service.mjs +0 -193
- package/esm2022/lib/+shared/editor/helpers/break.helper.mjs +0 -18
- package/esm2022/lib/+shared/editor/helpers/content.helper.mjs +0 -30
- package/esm2022/lib/+shared/editor/helpers/tab.helper.mjs +0 -6
- package/esm2022/lib/+shared/editor/interaction/editor.service.mjs +0 -309
- package/esm2022/lib/+shared/editor/interaction/input.handler.mjs +0 -160
- package/esm2022/lib/+shared/editor/interaction/mouse.handler.mjs +0 -49
- package/esm2022/lib/+shared/editor/interfaces/contents.interface.mjs +0 -2
- package/esm2022/lib/+shared/editor/interfaces/insert-index.interface.mjs +0 -2
- package/esm2022/lib/+shared/editor/operation-history/operation-history.mjs +0 -184
- package/esm2022/lib/+shared/editor/operation-history/operation.type.mjs +0 -2
- package/esm2022/lib/+shared/editor/operation-history/operations-history-info.model.mjs +0 -7
- package/esm2022/lib/+shared/editor/operations/enums/command-type.enum.mjs +0 -31
- package/esm2022/lib/+shared/editor/operations/enums/target-type.enum.mjs +0 -7
- package/esm2022/lib/+shared/editor/operations/helpers/break-operations.helper.mjs +0 -9
- package/esm2022/lib/+shared/editor/operations/helpers/content-operations.helper.mjs +0 -15
- package/esm2022/lib/+shared/editor/operations/helpers/format-operations.helper.mjs +0 -56
- package/esm2022/lib/+shared/editor/operations/helpers/image-operations.helper.mjs +0 -19
- package/esm2022/lib/+shared/editor/operations/helpers/indexed-element-operations.helper.mjs +0 -43
- package/esm2022/lib/+shared/editor/operations/helpers/link-operations.helper.mjs +0 -28
- package/esm2022/lib/+shared/editor/operations/helpers/numbering-operations.helper.mjs +0 -55
- package/esm2022/lib/+shared/editor/operations/helpers/operations-helper.helper.mjs +0 -394
- package/esm2022/lib/+shared/editor/operations/helpers/paragraph-operations.helper.mjs +0 -83
- package/esm2022/lib/+shared/editor/operations/helpers/save-commands.helper.mjs +0 -118
- package/esm2022/lib/+shared/editor/operations/helpers/tab-operations.helper.mjs +0 -16
- package/esm2022/lib/+shared/editor/operations/helpers/table-operations.helper.mjs +0 -371
- package/esm2022/lib/+shared/editor/operations/helpers/target-operations.helper.mjs +0 -23
- package/esm2022/lib/+shared/editor/positioning/selection.mjs +0 -307
- package/esm2022/lib/+shared/editor/store/editor.actions.mjs +0 -13
- package/esm2022/lib/+shared/editor-header/editor-header.component.mjs +0 -314
- package/esm2022/lib/+shared/editor-search/editor-search-dialog.component.mjs +0 -71
- package/esm2022/lib/+shared/editor-toolbar/color-picker/color-picker.component.mjs +0 -32
- package/esm2022/lib/+shared/editor-toolbar/constants/svg-icons.const.mjs +0 -157
- package/esm2022/lib/+shared/editor-toolbar/editor-toolbar.component.mjs +0 -115
- package/esm2022/lib/+shared/editor-toolbar/editor-toolbar.module.mjs +0 -107
- package/esm2022/lib/+shared/editor-toolbar/enums/alignment.enum.mjs +0 -8
- package/esm2022/lib/+shared/editor-toolbar/enums/numbering-type.enum.mjs +0 -6
- package/esm2022/lib/+shared/editor-toolbar/font/font.component.mjs +0 -45
- package/esm2022/lib/+shared/editor-toolbar/font-size/font-size.component.mjs +0 -85
- package/esm2022/lib/+shared/editor-toolbar/font-style/font-style.component.mjs +0 -80
- package/esm2022/lib/+shared/editor-toolbar/format/format.component.mjs +0 -28
- package/esm2022/lib/+shared/editor-toolbar/heading/heading.component.mjs +0 -23
- package/esm2022/lib/+shared/editor-toolbar/helpers/toolbar-styles.helper.mjs +0 -55
- package/esm2022/lib/+shared/editor-toolbar/numbering/numbering.component.mjs +0 -53
- package/esm2022/lib/+shared/editor-toolbar/print/print.component.mjs +0 -18
- package/esm2022/lib/+shared/editor-toolbar/undo-redo/undo-redo.component.mjs +0 -27
- package/esm2022/lib/+shared/editor-toolbar/zoom/zoom.component.mjs +0 -74
- package/esm2022/lib/+shared/helpers/print.helper.mjs +0 -40
- package/esm2022/lib/+shared/insert-table/insert-table.component.mjs +0 -54
- package/esm2022/lib/+shared/services/commands.service.mjs +0 -20
- package/esm2022/lib/+shared/services/custom-icon.service.mjs +0 -34
- package/lib/+shared/abstract/base-api.service.d.ts +0 -23
- package/lib/+shared/abstract/observer.component.d.ts +0 -10
- package/lib/+shared/constants/default-file-name.const.d.ts +0 -1
- package/lib/+shared/constants/paginator-sizes.const.d.ts +0 -2
- package/lib/+shared/editor/core/components/edges/edge.component.d.ts +0 -45
- package/lib/+shared/editor/core/constants/clipboardEventTypes.const.d.ts +0 -5
- package/lib/+shared/editor/core/constants/content-style-change.const.d.ts +0 -14
- package/lib/+shared/editor/core/document.d.ts +0 -56
- package/lib/+shared/editor/core/edit.session.d.ts +0 -159
- package/lib/+shared/editor/core/helpers/content-style.helper.d.ts +0 -16
- package/lib/+shared/editor/core/helpers/delta.helper.d.ts +0 -6
- package/lib/+shared/editor/core/helpers/numbering.helper.d.ts +0 -19
- package/lib/+shared/editor/core/interfaces/visible-line-info.interface.d.ts +0 -5
- package/lib/+shared/editor/core/layers/edges.layer.d.ts +0 -24
- package/lib/+shared/editor/core/layers/print.edges.layer.d.ts +0 -4
- package/lib/+shared/editor/core/layers/print.text.layer.d.ts +0 -5
- package/lib/+shared/editor/core/layers/text.layer.d.ts +0 -22
- package/lib/+shared/editor/core/paging/pages.wrap.d.ts +0 -41
- package/lib/+shared/editor/core/point.d.ts +0 -7
- package/lib/+shared/editor/core/print.renderer.d.ts +0 -25
- package/lib/+shared/editor/custom-components/external-element/element-toolbar/element-toolbar.component.d.ts +0 -14
- package/lib/+shared/editor/custom-components/image/services/image-api.service.d.ts +0 -8
- package/lib/+shared/editor/custom-components/shared/interfaces/custom-components.interface.d.ts +0 -13
- package/lib/+shared/editor/custom-components/shared/types/custom-content.d.ts +0 -5
- package/lib/+shared/editor/custom-components/table/components/table-cell.component.d.ts +0 -45
- package/lib/+shared/editor/editor.module.d.ts +0 -30
- package/lib/+shared/editor/execution/models/general-properties.model.d.ts +0 -7
- package/lib/+shared/editor/helpers/content.helper.d.ts +0 -9
- package/lib/+shared/editor/interfaces/contents.interface.d.ts +0 -22
- package/lib/+shared/editor/operations/helpers/image-operations.helper.d.ts +0 -7
- package/lib/+shared/editor/operations/helpers/link-operations.helper.d.ts +0 -6
- package/lib/+shared/editor/operations/helpers/target-operations.helper.d.ts +0 -6
- package/lib/+shared/editor/store/editor.actions.d.ts +0 -11
- package/lib/+shared/editor-header/editor-header.component.d.ts +0 -101
- package/lib/+shared/editor-toolbar/constants/numbering-templates.const.d.ts +0 -6
- package/lib/+shared/editor-toolbar/editor-toolbar.component.d.ts +0 -44
- package/lib/+shared/editor-toolbar/editor-toolbar.module.d.ts +0 -28
- package/lib/+shared/editor-toolbar/helpers/toolbar-styles.helper.d.ts +0 -6
- package/src/lib/+shared/editor/_editor.theme.scss +0 -35
- package/src/lib/+shared/editor/custom-components/external-element/element-toolbar/_element-toolbar.theme.scss +0 -10
- package/src/lib/+shared/editor-header/_editor-header.theme.scss +0 -106
- package/src/lib/+shared/editor-toolbar/_editor-toolbar.theme.scss +0 -33
- package/src/lib/+shared/editor-toolbar/numbering/_numbering.theme.scss +0 -29
- /package/lib/{+shared/editor-toolbar → apart-components/editor-toolbar/shared}/constants/svg-icons.const.d.ts +0 -0
- /package/lib/{+shared/editor-toolbar → apart-components/editor-toolbar/shared}/enums/alignment.enum.d.ts +0 -0
- /package/lib/{+shared/editor-toolbar → apart-components/editor-toolbar/shared}/enums/numbering-template-type.enum.d.ts +0 -0
- /package/lib/{+shared/editor-toolbar → apart-components/editor-toolbar/shared}/enums/numbering-type.enum.d.ts +0 -0
- /package/lib/{+shared → apart-components/editor-toolbar/shared}/services/custom-icon.service.d.ts +0 -0
- /package/lib/{+shared/editor/core → editor}/components/edges/edge-type.enum.d.ts +0 -0
- /package/lib/{+shared/editor/core/enums → editor/components/edges}/page-type.enum.d.ts +0 -0
- /package/lib/{+shared/editor/custom-components → editor/components}/external-element/external-element.service.d.ts +0 -0
- /package/lib/{+shared/editor/custom-components → editor/components}/external-element/external-elements.const.d.ts +0 -0
- /package/lib/{+shared/editor/custom-components → editor/components}/external-element/models/element-data.model.d.ts +0 -0
- /package/lib/{+shared/editor/custom-components → editor/components}/external-element/models/external-sidenav.model.d.ts +0 -0
- /package/lib/{+shared/editor/custom-components → editor/components}/image/resizer/coordinate.d.ts +0 -0
- /package/lib/{+shared/editor/custom-components → editor/components}/image/resizer/direction-wrapper.d.ts +0 -0
- /package/lib/{+shared/editor/custom-components → editor/components}/image/resizer/direction.enum.d.ts +0 -0
- /package/lib/{+shared/editor/custom-components → editor/components}/image/resizer/size-delta.d.ts +0 -0
- /package/lib/{+shared/editor/custom-components/image/interfaces → editor/components/image}/size.d.ts +0 -0
- /package/lib/{+shared/editor/custom-components/shared/constants → editor/components/shared}/custom-content-markers.const.d.ts +0 -0
- /package/lib/{+shared/editor/custom-components/shared/services/overlay → editor/components/shared/services}/overlay.service.d.ts +0 -0
- /package/lib/{+shared/editor/helpers → editor/components/tab}/tab.helper.d.ts +0 -0
- /package/lib/{+shared/editor/core → editor/components/table}/enums/hrule.enum.d.ts +0 -0
- /package/lib/{+shared/editor/custom-components → editor/components}/table/enums/reisizer-side.enum.d.ts +0 -0
- /package/lib/{+shared/editor/custom-components → editor/components}/table/enums/vertical-merge.enum.d.ts +0 -0
- /package/lib/{+shared/editor/custom-components → editor/components}/table/models/cell-resizer-parameters.model.d.ts +0 -0
- /package/lib/{+shared/editor/custom-components → editor/components}/table/models/row-data.model.d.ts +0 -0
- /package/lib/{+shared/editor/custom-components → editor/components}/table/models/selection-range.model.d.ts +0 -0
- /package/lib/{+shared/editor/core → editor/content}/constants/display-values.const.d.ts +0 -0
- /package/lib/{+shared/editor/core → editor/content}/constants/document-info.const.d.ts +0 -0
- /package/lib/{+shared/editor/core/models → editor/content/display-data}/indent.model.d.ts +0 -0
- /package/lib/{+shared/editor/core/interfaces → editor/content/display-data}/paragraph-info.interface.d.ts +0 -0
- /package/lib/{+shared/editor → editor/content}/helpers/format.helper.d.ts +0 -0
- /package/lib/{+shared/editor/core/models → editor/content}/margin.model.d.ts +0 -0
- /package/lib/{+shared/editor/core/enums → editor/content}/vertical-alignment.enum.d.ts +0 -0
- /package/lib/{+shared/editor/core/interfaces → editor/display}/cell.interface.d.ts +0 -0
- /package/lib/{+shared/editor/core/helpers → editor/display}/event.helper.d.ts +0 -0
- /package/lib/{+shared/editor/core → editor/display}/layers/print.pages.layer.d.ts +0 -0
- /package/lib/{+shared/editor/core/interfaces → editor/display}/render-changes.interface.d.ts +0 -0
- /package/lib/{+shared/editor/core/interfaces → editor/display}/visible-range.interface.d.ts +0 -0
- /package/lib/{+shared/editor/core/models → editor/execution}/distance.model.d.ts +0 -0
- /package/lib/{+shared/editor/core → editor/execution}/helpers/dom.helper.d.ts +0 -0
- /package/lib/{+shared/editor/core/constants → editor/gadgets/font-metrics}/editor-version.const.d.ts +0 -0
- /package/lib/{+shared/editor/core/interfaces → editor/gadgets/font-metrics}/font-metric-size.interface.d.ts +0 -0
- /package/lib/{+shared/editor/operation-history → editor/gadgets/history}/operations-history-info.model.d.ts +0 -0
- /package/lib/{+shared/editor/core/enums → editor/gadgets/numbering}/numbering-marker-type.enum.d.ts +0 -0
- /package/lib/{+shared/editor/core/enums → editor/gadgets/page-break}/break-types.enum.d.ts +0 -0
- /package/lib/{+shared/editor/core/interfaces → editor/gadgets/search}/replace.interface.d.ts +0 -0
- /package/lib/{+shared/editor/core/interfaces → editor/gadgets/search}/search-iteration.interface.d.ts +0 -0
- /package/lib/{+shared/editor/core/constants → editor/gadgets/unicode}/unicode-chars.const.d.ts +0 -0
- /package/lib/{+shared/editor/core/helpers → editor/gadgets/unicode}/unicode.helper.d.ts +0 -0
- /package/lib/{+shared/enums → editor/interaction}/mode.enum.d.ts +0 -0
- /package/lib/{+shared/editor/core/enums → editor/interaction}/mouse-button.enum.d.ts +0 -0
- /package/lib/{+shared/editor/core/keyboard → editor/interaction}/text-input.d.ts +0 -0
- /package/lib/{+shared/services → editor/operations}/commands.service.d.ts +0 -0
- /package/lib/{+shared/editor → editor}/operations/enums/target-type.enum.d.ts +0 -0
- /package/lib/{+shared/editor → editor}/operations/helpers/content-operations.helper.d.ts +0 -0
- /package/lib/{+shared/editor/core/constants → editor/positioning}/alignments.const.d.ts +0 -0
- /package/lib/{+shared/editor/interfaces → editor/positioning}/insert-index.interface.d.ts +0 -0
|
@@ -0,0 +1,206 @@
|
|
|
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, editorService, session) {
|
|
12
|
+
super();
|
|
13
|
+
this.editorService = editorService;
|
|
14
|
+
this.session = session;
|
|
15
|
+
this.layerConfig = {
|
|
16
|
+
width: 1,
|
|
17
|
+
contentRange: new DistanceModel({ start: 0, end: 0 }),
|
|
18
|
+
minHeight: 1,
|
|
19
|
+
maxHeight: 1,
|
|
20
|
+
offset: 0,
|
|
21
|
+
height: 1,
|
|
22
|
+
scrollTop: 0,
|
|
23
|
+
pages: [],
|
|
24
|
+
visibleRange: {
|
|
25
|
+
startParagraph: 0,
|
|
26
|
+
startLine: 0,
|
|
27
|
+
startScreenLine: 0,
|
|
28
|
+
startScreenFullLine: 0,
|
|
29
|
+
endParagraph: 0,
|
|
30
|
+
endLine: 0,
|
|
31
|
+
endScreenLine: 0,
|
|
32
|
+
endScreenFullLine: 0
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
this.changes = new RenderChangesModel();
|
|
36
|
+
this.textareaSize = {
|
|
37
|
+
height: 1,
|
|
38
|
+
width: 1
|
|
39
|
+
};
|
|
40
|
+
this.pagesCountChangedHandler = () => {
|
|
41
|
+
this.loop.schedule({ lines: true, selection: true });
|
|
42
|
+
};
|
|
43
|
+
this.container = parentContainer;
|
|
44
|
+
this.container.className += ' noder-editor';
|
|
45
|
+
this.createContentContainer();
|
|
46
|
+
this.textLayer = new TextLayer(this.content, this.session, this.editorService);
|
|
47
|
+
this.selectionLayer = new SelectionLayer(this.content, 'text-selection', this.session);
|
|
48
|
+
this.cursorLayer = new CursorLayer(this.content, this.session);
|
|
49
|
+
this.loop = new RenderLoop(changes => this.renderChanges(changes));
|
|
50
|
+
this.session.displayData.addEventListener('pagesCountChanged', this.pagesCountChangedHandler);
|
|
51
|
+
}
|
|
52
|
+
renderChanges(changes, force) {
|
|
53
|
+
changes.apply(this.changes);
|
|
54
|
+
this.changes = new RenderChangesModel();
|
|
55
|
+
if (!changes.any && !force) {
|
|
56
|
+
this.changes.apply(changes);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
// text, scrolling and resize changes can cause the view port size to change
|
|
60
|
+
if (changes.full || changes.size || changes.text || changes.lines || changes.scroll) {
|
|
61
|
+
changes.apply(this.computeLayerConfig());
|
|
62
|
+
DomHelper.translate(this.content, 0, -this.layerConfig.offset);
|
|
63
|
+
DomHelper.setStyle(this.content.style, 'width', `${this.layerConfig.width}px`);
|
|
64
|
+
DomHelper.setStyle(this.content.style, 'height', `${this.layerConfig.height}px`);
|
|
65
|
+
}
|
|
66
|
+
// full
|
|
67
|
+
if (changes.full) {
|
|
68
|
+
this.renderFull();
|
|
69
|
+
this.editorService.rendererUpdated(this.session.sessionId);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
if (changes.text || changes.scroll) {
|
|
73
|
+
this.renderText();
|
|
74
|
+
}
|
|
75
|
+
if (changes.cursor) {
|
|
76
|
+
this.renderCursor();
|
|
77
|
+
}
|
|
78
|
+
if (changes.marker || changes.selection) {
|
|
79
|
+
this.renderSelection();
|
|
80
|
+
}
|
|
81
|
+
this.editorService.rendererUpdated(this.session.sessionId);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Triggers a partial update of the text, from the range given by the two parameters.
|
|
85
|
+
**/
|
|
86
|
+
updateLines(firstRow, lastRow) {
|
|
87
|
+
// If the change happened offscreen above us then it's possible
|
|
88
|
+
// that a new line wrap will affect the position of the lines on our
|
|
89
|
+
// screen, so they need redrawn.
|
|
90
|
+
if (lastRow < this.layerConfig.contentRange.start || firstRow > this.layerConfig.contentRange.end) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
this.loop.schedule({ lines: true });
|
|
94
|
+
}
|
|
95
|
+
moveTextAreaToCursor() {
|
|
96
|
+
if (this.isMousePressed || !this.textarea) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
let cursorPosition = this.cursorLayer.cursorPosition;
|
|
100
|
+
if (!cursorPosition) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
const posTop = cursorPosition.pageY - this.layerConfig.offset;
|
|
104
|
+
if (posTop < 0 || posTop > this.layerConfig.height - this.textareaSize.height) {
|
|
105
|
+
DomHelper.translate(this.textarea, 0, 0);
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
DomHelper.setStyle(this.textarea.style, 'height', `${this.textareaSize.height}px`);
|
|
109
|
+
DomHelper.setStyle(this.textarea.style, 'width', `${this.textareaSize.width}px`);
|
|
110
|
+
DomHelper.translate(this.textarea, Math.min(cursorPosition.pageX, this.textareaSize.width), Math.min(posTop, this.textareaSize.height));
|
|
111
|
+
}
|
|
112
|
+
updateSelection(range) {
|
|
113
|
+
if (range.isEmpty && this.selectionLayer.marker) {
|
|
114
|
+
this.selectionLayer.marker = null;
|
|
115
|
+
this.loop.schedule({ selection: true });
|
|
116
|
+
}
|
|
117
|
+
else if (!range.isEmpty && !this.selectionLayer.marker?.isEqual(range)) {
|
|
118
|
+
this.selectionLayer.marker = range;
|
|
119
|
+
this.loop.schedule({ selection: true });
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Triggers a full update of the text, for all the rows.
|
|
124
|
+
**/
|
|
125
|
+
updateText() {
|
|
126
|
+
this.loop.schedule({ text: true });
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Triggers a full update of all the layers, for all the rows.
|
|
130
|
+
**/
|
|
131
|
+
updateFull(force) {
|
|
132
|
+
if (force) {
|
|
133
|
+
this.renderChanges(new RenderChangesModel({ full: true }), true);
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
this.loop.schedule({ full: true });
|
|
137
|
+
}
|
|
138
|
+
updateCursor() {
|
|
139
|
+
this.loop.schedule({ cursor: true });
|
|
140
|
+
}
|
|
141
|
+
screenToTextCoordinates(x, y) {
|
|
142
|
+
const screen = PositionHelper.pixelToScreen(this.session, x, y, this.container.getBoundingClientRect());
|
|
143
|
+
return PositionHelper.screenToDocument(this.session, screen.row, screen.column);
|
|
144
|
+
}
|
|
145
|
+
showCursor() {
|
|
146
|
+
this.cursorLayer.showCursor();
|
|
147
|
+
DomHelper.addCssClass(this.container, 'ace_focus');
|
|
148
|
+
this.editorService.rendererUpdated(this.session.sessionId);
|
|
149
|
+
}
|
|
150
|
+
hideCursor() {
|
|
151
|
+
this.cursorLayer.hideCursor();
|
|
152
|
+
DomHelper.removeCssClass(this.container, 'ace_focus');
|
|
153
|
+
this.editorService.rendererUpdated(this.session.sessionId);
|
|
154
|
+
}
|
|
155
|
+
destroy() {
|
|
156
|
+
this.session.displayData.removeEventListener('pagesCountChanged', this.pagesCountChangedHandler);
|
|
157
|
+
this.textLayer.destroy();
|
|
158
|
+
DomHelper.removeChildren(this.container);
|
|
159
|
+
}
|
|
160
|
+
renderFull() {
|
|
161
|
+
this.textLayer.updateLines(this.layerConfig);
|
|
162
|
+
this.selectionLayer.update(this.layerConfig);
|
|
163
|
+
this.cursorLayer.update(this.layerConfig);
|
|
164
|
+
this.moveTextAreaToCursor();
|
|
165
|
+
}
|
|
166
|
+
renderText() {
|
|
167
|
+
this.textLayer.updateLines(this.layerConfig);
|
|
168
|
+
this.cursorLayer.detectVisibility();
|
|
169
|
+
}
|
|
170
|
+
renderCursor() {
|
|
171
|
+
this.cursorLayer.update(this.layerConfig);
|
|
172
|
+
this.moveTextAreaToCursor();
|
|
173
|
+
}
|
|
174
|
+
renderSelection() {
|
|
175
|
+
this.selectionLayer.update(this.layerConfig);
|
|
176
|
+
this.cursorLayer.detectVisibility();
|
|
177
|
+
}
|
|
178
|
+
computeLayerConfig() {
|
|
179
|
+
const displayData = this.session.displayData;
|
|
180
|
+
const maxHeight = displayData.allPagesHeight;
|
|
181
|
+
const minHeight = displayData.minHeight;
|
|
182
|
+
const changes = new RenderChangesModel({ scroll: true });
|
|
183
|
+
// todo check logic after move wrapdata to display data
|
|
184
|
+
this.layerConfig = {
|
|
185
|
+
width: this.session.displayData.contentWidth + displayData.pageMargin.left + displayData.pageMargin.right,
|
|
186
|
+
height: displayData.defaultVerticalData.contentHeight,
|
|
187
|
+
contentRange: new DistanceModel({ start: 0, end: displayData.paragraphs.filter(x => x.paragraphSettings).length - 1 }),
|
|
188
|
+
minHeight,
|
|
189
|
+
maxHeight,
|
|
190
|
+
offset: 0,
|
|
191
|
+
scrollTop: this.session.scrollTop
|
|
192
|
+
};
|
|
193
|
+
return changes;
|
|
194
|
+
}
|
|
195
|
+
createContentContainer() {
|
|
196
|
+
this.content = document.createElement('div');
|
|
197
|
+
this.content.className = 'noder-content';
|
|
198
|
+
if (this.container.firstChild) {
|
|
199
|
+
this.container.firstChild.appendChild(this.content);
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
this.container.appendChild(this.content);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbm9kZXIvc3JjL2xpYi9lZGl0b3IvZGlzcGxheS9yZW5kZXJlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFcEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUc1RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRWhFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDMUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVoRCxNQUFNLE9BQU8sUUFBUyxTQUFRLGFBQWE7SUE2Q3ZDLFlBQVksZUFBNEIsRUFBVSxhQUE0QixFQUFTLE9BQW9CO1FBQ3ZHLEtBQUssRUFBRSxDQUFDO1FBRHNDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQVMsWUFBTyxHQUFQLE9BQU8sQ0FBYTtRQTVCM0csZ0JBQVcsR0FBaUI7WUFDeEIsS0FBSyxFQUFFLENBQUM7WUFDUixZQUFZLEVBQUUsSUFBSSxhQUFhLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNyRCxTQUFTLEVBQUUsQ0FBQztZQUNaLFNBQVMsRUFBRSxDQUFDO1lBQ1osTUFBTSxFQUFFLENBQUM7WUFDVCxNQUFNLEVBQUUsQ0FBQztZQUNULFNBQVMs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QUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdEgsU0FBUztZQUNULFNBQVM7WUFDVCxNQUFNLEVBQUUsQ0FBQztZQUNULFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVM7U0FDcEMsQ0FBQztRQUVGLE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7SUFNTyxzQkFBc0I7UUFDMUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHLGVBQWUsQ0FBQztRQUV6QyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFO1lBQzNCLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDdkQ7YUFBTTtZQUNILElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUM1QztJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEN1cnNvckxheWVyIH0gZnJvbSAnLi9sYXllcnMvY3Vyc29yLmxheWVyJztcbmltcG9ydCB7IEN1cnNvclBhcmFncmFwaCB9IGZyb20gJy4uL3Bvc2l0aW9uaW5nL2N1cnNvci1wYXJhZ3JhcGgnO1xuaW1wb3J0IHsgRGlzdGFuY2VNb2RlbCB9IGZyb20gJy4uL2V4ZWN1dGlvbi9kaXN0YW5jZS5tb2RlbCc7XG5pbXBvcnQgeyBEb21IZWxwZXIgfSBmcm9tICcuLi9leGVjdXRpb24vaGVscGVycy9kb20uaGVscGVyJztcbmltcG9ydCB7IEVkaXRvclNlcnZpY2UgfSBmcm9tICcuLi9pbnRlcmFjdGlvbi9lZGl0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBFZGl0U2Vzc2lvbiB9IGZyb20gJy4uL2V4ZWN1dGlvbi9lZGl0LnNlc3Npb24nO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGluZyB9IGZyb20gJy4uL2NvcmUvZXZlbnQtZW1pdHRpbmcnO1xuaW1wb3J0IHsgSUxheWVyQ29uZmlnIH0gZnJvbSAnLi9sYXllcnMvbGF5ZXIuY29uZmlnJztcbmltcG9ydCB7IFBvc2l0aW9uSGVscGVyIH0gZnJvbSAnLi4vcG9zaXRpb25pbmcvcG9zaXRpb24uaGVscGVyJztcbmltcG9ydCB7IFJhbmdlIH0gZnJvbSAnLi4vcG9zaXRpb25pbmcvcmFuZ2UnO1xuaW1wb3J0IHsgUmVuZGVyQ2hhbmdlc01vZGVsIH0gZnJvbSAnLi9yZW5kZXItY2hhbmdlcy5tb2RlbCc7XG5pbXBvcnQgeyBSZW5kZXJMb29wIH0gZnJvbSAnLi9yZW5kZXJsb29wJztcbmltcG9ydCB7IFNlbGVjdGlvbkxheWVyIH0gZnJvbSAnLi9sYXllcnMvc2VsZWN0aW9uLmxheWVyJztcbmltcG9ydCB7IFRleHRMYXllciB9IGZyb20gJy4vbGF5ZXJzL3RleHQubGF5ZXInO1xuXG5leHBvcnQgY2xhc3MgUmVuZGVyZXIgZXh0ZW5kcyBFdmVudEVtaXR0aW5nIHtcbiAgICBpc01vdXNlUHJlc3NlZDogYm9vbGVhbjtcblxuICAgIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG5cbiAgICBjb250ZW50OiBIVE1MRWxlbWVudDtcblxuICAgIGN1cnNvckxheWVyOiBDdXJzb3JMYXllcjtcblxuICAgIHRleHRMYXllcjogVGV4dExheWVyO1xuXG4gICAgc2VsZWN0aW9uTGF5ZXI6IFNlbGVjdGlvbkxheWVyO1xuXG4gICAgbG9vcDogUmVuZGVyTG9vcDtcblxuICAgIHRleHRhcmVhOiBIVE1MRWxlbWVudDtcblxuICAgIGxheWVyQ29uZmlnOiBJTGF5ZXJDb25maWcgPSB7XG4gICAgICAgIHdpZHRoOiAxLFxuICAgICAgICBjb250ZW50UmFuZ2U6IG5ldyBEaXN0YW5jZU1vZGVsKHsgc3RhcnQ6IDAsIGVuZDogMCB9KSxcbiAgICAgICAgbWluSGVpZ2h0OiAxLFxuICAgICAgICBtYXhIZWlnaHQ6IDEsXG4gICAgICAgIG9mZnNldDogMCxcbiAgICAgICAgaGVpZ2h0OiAxLFxuICAgICAgICBzY3JvbGxUb3A6IDAsXG4gICAgICAgIHBhZ2VzOiBbXSxcbiAgICAgICAgdmlzaWJsZVJhbmdlOiB7XG4gICAgICAgICAgICBzdGFydFBhcmFncmFwaDogMCxcbiAgICAgICAgICAgIHN0YXJ0TGluZTogMCxcbiAgICAgICAgICAgIHN0YXJ0U2NyZWVuTGluZTogMCxcbiAgICAgICAgICAgIHN0YXJ0U2NyZWVuRnVsbExpbmU6IDAsXG4gICAgICAgICAgICBlbmRQYXJhZ3JhcGg6IDAsXG4gICAgICAgICAgICBlbmRMaW5lOiAwLFxuICAgICAgICAgICAgZW5kU2NyZWVuTGluZTogMCxcbiAgICAgICAgICAgIGVuZFNjcmVlbkZ1bGxMaW5lOiAwXG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY2hhbmdlcyA9IG5ldyBSZW5kZXJDaGFuZ2VzTW9kZWwoKTtcblxuICAgIHJlYWRvbmx5IHRleHRhcmVhU2l6ZSA9IHtcbiAgICAgICAgaGVpZ2h0OiAxLFxuICAgICAgICB3aWR0aDogMVxuICAgIH07XG5cbiAgICBjb25zdHJ1Y3RvcihwYXJlbnRDb250YWluZXI6IEhUTUxFbGVtZW50LCBwcml2YXRlIGVkaXRvclNlcnZpY2U6IEVkaXRvclNlcnZpY2UsIHB1YmxpYyBzZXNzaW9uOiBFZGl0U2Vzc2lvbikge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmNvbnRhaW5lciA9IHBhcmVudENvbnRhaW5lcjtcbiAgICAgICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lICs9ICcgbm9kZXItZWRpdG9yJztcbiAgICAgICAgdGhpcy5jcmVhdGVDb250ZW50Q29udGFpbmVyKCk7XG4gICAgICAgIHRoaXMudGV4dExheWVyID0gbmV3IFRleHRMYXllcih0aGlzLmNvbnRlbnQsIHRoaXMuc2Vzc2lvbiwgdGhpcy5lZGl0b3JTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25MYXllciA9IG5ldyBTZWxlY3Rpb25MYXllcih0aGlzLmNvbnRlbnQsICd0ZXh0LXNlbGVjdGlvbicsIHRoaXMuc2Vzc2lvbik7XG4gICAgICAgIHRoaXMuY3Vyc29yTGF5ZXIgPSBuZXcgQ3Vyc29yTGF5ZXIodGhpcy5jb250ZW50LCB0aGlzLnNlc3Npb24pO1xuICAgICAgICB0aGlzLmxvb3AgPSBuZXcgUmVuZGVyTG9vcChjaGFuZ2VzID0+IHRoaXMucmVuZGVyQ2hhbmdlcyhjaGFuZ2VzKSk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5hZGRFdmVudExpc3RlbmVyKCdwYWdlc0NvdW50Q2hhbmdlZCcsIHRoaXMucGFnZXNDb3VudENoYW5nZWRIYW5kbGVyKTtcbiAgICB9XG5cbiAgICByZW5kZXJDaGFuZ2VzKGNoYW5nZXM6IFJlbmRlckNoYW5nZXNNb2RlbCwgZm9yY2U/OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGNoYW5nZXMuYXBwbHkodGhpcy5jaGFuZ2VzKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VzID0gbmV3IFJlbmRlckNoYW5nZXNNb2RlbCgpO1xuXG4gICAgICAgIGlmICghY2hhbmdlcy5hbnkgJiYgIWZvcmNlKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZXMuYXBwbHkoY2hhbmdlcyk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRleHQsIHNjcm9sbGluZyBhbmQgcmVzaXplIGNoYW5nZXMgY2FuIGNhdXNlIHRoZSB2aWV3IHBvcnQgc2l6ZSB0byBjaGFuZ2VcbiAgICAgICAgaWYgKGNoYW5nZXMuZnVsbCB8fCBjaGFuZ2VzLnNpemUgfHwgY2hhbmdlcy50ZXh0IHx8IGNoYW5nZXMubGluZXMgfHwgY2hhbmdlcy5zY3JvbGwpIHtcbiAgICAgICAgICAgIGNoYW5nZXMuYXBwbHkodGhpcy5jb21wdXRlTGF5ZXJDb25maWcoKSk7XG5cbiAgICAgICAgICAgIERvbUhlbHBlci50cmFuc2xhdGUodGhpcy5jb250ZW50LCAwLCAtdGhpcy5sYXllckNvbmZpZy5vZmZzZXQpO1xuXG4gICAgICAgICAgICBEb21IZWxwZXIuc2V0U3R5bGUodGhpcy5jb250ZW50LnN0eWxlLCAnd2lkdGgnLCBgJHt0aGlzLmxheWVyQ29uZmlnLndpZHRofXB4YCk7XG4gICAgICAgICAgICBEb21IZWxwZXIuc2V0U3R5bGUodGhpcy5jb250ZW50LnN0eWxlLCAnaGVpZ2h0JywgYCR7dGhpcy5sYXllckNvbmZpZy5oZWlnaHR9cHhgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGZ1bGxcbiAgICAgICAgaWYgKGNoYW5nZXMuZnVsbCkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJGdWxsKCk7XG4gICAgICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2UucmVuZGVyZXJVcGRhdGVkKHRoaXMuc2Vzc2lvbi5zZXNzaW9uSWQpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlcy50ZXh0IHx8IGNoYW5nZXMuc2Nyb2xsKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlclRleHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzLmN1cnNvcikge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJDdXJzb3IoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzLm1hcmtlciB8fCBjaGFuZ2VzLnNlbGVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJTZWxlY3Rpb24oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5yZW5kZXJlclVwZGF0ZWQodGhpcy5zZXNzaW9uLnNlc3Npb25JZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlcnMgYSBwYXJ0aWFsIHVwZGF0ZSBvZiB0aGUgdGV4dCwgZnJvbSB0aGUgcmFuZ2UgZ2l2ZW4gYnkgdGhlIHR3byBwYXJhbWV0ZXJzLlxuICAgICAqKi9cbiAgICB1cGRhdGVMaW5lcyhmaXJzdFJvdzogbnVtYmVyLCBsYXN0Um93OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgLy8gSWYgdGhlIGNoYW5nZSBoYXBwZW5lZCBvZmZzY3JlZW4gYWJvdmUgdXMgdGhlbiBpdCdzIHBvc3NpYmxlXG4gICAgICAgIC8vIHRoYXQgYSBuZXcgbGluZSB3cmFwIHdpbGwgYWZmZWN0IHRoZSBwb3NpdGlvbiBvZiB0aGUgbGluZXMgb24gb3VyXG4gICAgICAgIC8vIHNjcmVlbiwgc28gdGhleSBuZWVkIHJlZHJhd24uXG4gICAgICAgIGlmIChsYXN0Um93IDwgdGhpcy5sYXllckNvbmZpZy5jb250ZW50UmFuZ2Uuc3RhcnQgfHwgZmlyc3RSb3cgPiB0aGlzLmxheWVyQ29uZmlnLmNvbnRlbnRSYW5nZS5lbmQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9vcC5zY2hlZHVsZSh7IGxpbmVzOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIG1vdmVUZXh0QXJlYVRvQ3Vyc29yKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc01vdXNlUHJlc3NlZCB8fCAhdGhpcy50ZXh0YXJlYSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGN1cnNvclBvc2l0aW9uID0gdGhpcy5jdXJzb3JMYXllci5jdXJzb3JQb3NpdGlvbjtcbiAgICAgICAgaWYgKCFjdXJzb3JQb3NpdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcG9zVG9wID0gY3Vyc29yUG9zaXRpb24ucGFnZVkgLSB0aGlzLmxheWVyQ29uZmlnLm9mZnNldDtcbiAgICAgICAgaWYgKHBvc1RvcCA8IDAgfHwgcG9zVG9wID4gdGhpcy5sYXllckNvbmZpZy5oZWlnaHQgLSB0aGlzLnRleHRhcmVhU2l6ZS5oZWlnaHQpIHtcbiAgICAgICAgICAgIERvbUhlbHBlci50cmFuc2xhdGUodGhpcy50ZXh0YXJlYSwgMCwgMCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBEb21IZWxwZXIuc2V0U3R5bGUodGhpcy50ZXh0YXJlYS5zdHlsZSwgJ2hlaWdodCcsIGAke3RoaXMudGV4dGFyZWFTaXplLmhlaWdodH1weGApO1xuICAgICAgICBEb21IZWxwZXIuc2V0U3R5bGUodGhpcy50ZXh0YXJlYS5zdHlsZSwgJ3dpZHRoJywgYCR7dGhpcy50ZXh0YXJlYVNpemUud2lkdGh9cHhgKTtcbiAgICAgICAgRG9tSGVscGVyLnRyYW5zbGF0ZShcbiAgICAgICAgICAgIHRoaXMudGV4dGFyZWEsXG4gICAgICAgICAgICBNYXRoLm1pbihjdXJzb3JQb3NpdGlvbi5wYWdlWCwgdGhpcy50ZXh0YXJlYVNpemUud2lkdGgpLFxuICAgICAgICAgICAgTWF0aC5taW4ocG9zVG9wLCB0aGlzLnRleHRhcmVhU2l6ZS5oZWlnaHQpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdXBkYXRlU2VsZWN0aW9uKHJhbmdlOiBSYW5nZSk6IHZvaWQge1xuICAgICAgICBpZiAocmFuZ2UuaXNFbXB0eSAmJiB0aGlzLnNlbGVjdGlvbkxheWVyLm1hcmtlcikge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25MYXllci5tYXJrZXIgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5sb29wLnNjaGVkdWxlKHsgc2VsZWN0aW9uOiB0cnVlIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKCFyYW5nZS5pc0VtcHR5ICYmICF0aGlzLnNlbGVjdGlvbkxheWVyLm1hcmtlcj8uaXNFcXVhbChyYW5nZSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTGF5ZXIubWFya2VyID0gcmFuZ2U7XG4gICAgICAgICAgICB0aGlzLmxvb3Auc2NoZWR1bGUoeyBzZWxlY3Rpb246IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VycyBhIGZ1bGwgdXBkYXRlIG9mIHRoZSB0ZXh0LCBmb3IgYWxsIHRoZSByb3dzLlxuICAgICAqKi9cbiAgICB1cGRhdGVUZXh0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmxvb3Auc2NoZWR1bGUoeyB0ZXh0OiB0cnVlIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXJzIGEgZnVsbCB1cGRhdGUgb2YgYWxsIHRoZSBsYXllcnMsIGZvciBhbGwgdGhlIHJvd3MuXG4gICAgICoqL1xuICAgIHVwZGF0ZUZ1bGwoZm9yY2U/OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmIChmb3JjZSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJDaGFuZ2VzKG5ldyBSZW5kZXJDaGFuZ2VzTW9kZWwoeyBmdWxsOiB0cnVlIH0pLCB0cnVlKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sb29wLnNjaGVkdWxlKHsgZnVsbDogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICB1cGRhdGVDdXJzb3IoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubG9vcC5zY2hlZHVsZSh7IGN1cnNvcjogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICBzY3JlZW5Ub1RleHRDb29yZGluYXRlcyh4OiBudW1iZXIsIHk6IG51bWJlcik6IEN1cnNvclBhcmFncmFwaCB7XG4gICAgICAgIGNvbnN0IHNjcmVlbiA9IFBvc2l0aW9uSGVscGVyLnBpeGVsVG9TY3JlZW4odGhpcy5zZXNzaW9uLCB4LCB5LCB0aGlzLmNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG5cbiAgICAgICAgcmV0dXJuIFBvc2l0aW9uSGVscGVyLnNjcmVlblRvRG9jdW1lbnQodGhpcy5zZXNzaW9uLCBzY3JlZW4ucm93LCBzY3JlZW4uY29sdW1uKTtcbiAgICB9XG5cbiAgICBzaG93Q3Vyc29yKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmN1cnNvckxheWVyLnNob3dDdXJzb3IoKTtcbiAgICAgICAgRG9tSGVscGVyLmFkZENzc0NsYXNzKHRoaXMuY29udGFpbmVyLCAnYWNlX2ZvY3VzJyk7XG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5yZW5kZXJlclVwZGF0ZWQodGhpcy5zZXNzaW9uLnNlc3Npb25JZCk7XG4gICAgfVxuXG4gICAgaGlkZUN1cnNvcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdXJzb3JMYXllci5oaWRlQ3Vyc29yKCk7XG4gICAgICAgIERvbUhlbHBlci5yZW1vdmVDc3NDbGFzcyh0aGlzLmNvbnRhaW5lciwgJ2FjZV9mb2N1cycpO1xuICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2UucmVuZGVyZXJVcGRhdGVkKHRoaXMuc2Vzc2lvbi5zZXNzaW9uSWQpO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdwYWdlc0NvdW50Q2hhbmdlZCcsIHRoaXMucGFnZXNDb3VudENoYW5nZWRIYW5kbGVyKTtcbiAgICAgICAgdGhpcy50ZXh0TGF5ZXIuZGVzdHJveSgpO1xuICAgICAgICBEb21IZWxwZXIucmVtb3ZlQ2hpbGRyZW4odGhpcy5jb250YWluZXIpO1xuICAgIH1cblxuICAgIHJlbmRlckZ1bGwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGV4dExheWVyLnVwZGF0ZUxpbmVzKHRoaXMubGF5ZXJDb25maWcpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbkxheWVyLnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKTtcbiAgICAgICAgdGhpcy5jdXJzb3JMYXllci51cGRhdGUodGhpcy5sYXllckNvbmZpZyk7XG4gICAgICAgIHRoaXMubW92ZVRleHRBcmVhVG9DdXJzb3IoKTtcbiAgICB9XG5cbiAgICByZW5kZXJUZXh0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRleHRMYXllci51cGRhdGVMaW5lcyh0aGlzLmxheWVyQ29uZmlnKTtcbiAgICAgICAgdGhpcy5jdXJzb3JMYXllci5kZXRlY3RWaXNpYmlsaXR5KCk7XG4gICAgfVxuXG4gICAgcmVuZGVyQ3Vyc29yKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmN1cnNvckxheWVyLnVwZGF0ZSh0aGlzLmxheWVyQ29uZmlnKTtcbiAgICAgICAgdGhpcy5tb3ZlVGV4dEFyZWFUb0N1cnNvcigpO1xuICAgIH1cblxuICAgIHJlbmRlclNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25MYXllci51cGRhdGUodGhpcy5sYXllckNvbmZpZyk7XG4gICAgICAgIHRoaXMuY3Vyc29yTGF5ZXIuZGV0ZWN0VmlzaWJpbGl0eSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29tcHV0ZUxheWVyQ29uZmlnKCk6IFJlbmRlckNoYW5nZXNNb2RlbCB7XG4gICAgICAgIGNvbnN0IGRpc3BsYXlEYXRhID0gdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhO1xuICAgICAgICBjb25zdCBtYXhIZWlnaHQgPSBkaXNwbGF5RGF0YS5hbGxQYWdlc0hlaWdodDtcbiAgICAgICAgY29uc3QgbWluSGVpZ2h0ID0gZGlzcGxheURhdGEubWluSGVpZ2h0O1xuXG4gICAgICAgIGNvbnN0IGNoYW5nZXMgPSBuZXcgUmVuZGVyQ2hhbmdlc01vZGVsKHsgc2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgICAvLyB0b2RvIGNoZWNrIGxvZ2ljIGFmdGVyIG1vdmUgd3JhcGRhdGEgdG8gZGlzcGxheSBkYXRhXG4gICAgICAgIHRoaXMubGF5ZXJDb25maWcgPSB7XG4gICAgICAgICAgICB3aWR0aDogdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLmNvbnRlbnRXaWR0aCArIGRpc3BsYXlEYXRhLnBhZ2VNYXJnaW4ubGVmdCArIGRpc3BsYXlEYXRhLnBhZ2VNYXJnaW4ucmlnaHQsXG4gICAgICAgICAgICBoZWlnaHQ6IGRpc3BsYXlEYXRhLmRlZmF1bHRWZXJ0aWNhbERhdGEuY29udGVudEhlaWdodCxcbiAgICAgICAgICAgIGNvbnRlbnRSYW5nZTogbmV3IERpc3RhbmNlTW9kZWwoeyBzdGFydDogMCwgZW5kOiBkaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLmZpbHRlcih4ID0+IHgucGFyYWdyYXBoU2V0dGluZ3MpLmxlbmd0aCAtIDEgfSksXG4gICAgICAgICAgICBtaW5IZWlnaHQsXG4gICAgICAgICAgICBtYXhIZWlnaHQsXG4gICAgICAgICAgICBvZmZzZXQ6IDAsXG4gICAgICAgICAgICBzY3JvbGxUb3A6IHRoaXMuc2Vzc2lvbi5zY3JvbGxUb3BcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gY2hhbmdlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIHBhZ2VzQ291bnRDaGFuZ2VkSGFuZGxlciA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy5sb29wLnNjaGVkdWxlKHsgbGluZXM6IHRydWUsIHNlbGVjdGlvbjogdHJ1ZSB9KTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBjcmVhdGVDb250ZW50Q29udGFpbmVyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGhpcy5jb250ZW50LmNsYXNzTmFtZSA9ICdub2Rlci1jb250ZW50JztcblxuICAgICAgICBpZiAodGhpcy5jb250YWluZXIuZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgdGhpcy5jb250YWluZXIuZmlyc3RDaGlsZC5hcHBlbmRDaGlsZCh0aGlzLmNvbnRlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5jb250ZW50KTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,185 @@
|
|
|
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=
|
|
@@ -0,0 +1,26 @@
|
|
|
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==
|