@talrace/ngx-noder 0.0.18 → 0.0.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (288) hide show
  1. package/fesm2022/talrace-ngx-noder.mjs +181 -181
  2. package/fesm2022/talrace-ngx-noder.mjs.map +1 -1
  3. package/lib/apart-components/editor-toolbar/components/base-toolbar.component.d.ts +1 -1
  4. package/lib/editor/components/external-element/external.component.d.ts +1 -1
  5. package/lib/editor/components/shared/abstract/base.component.d.ts +1 -1
  6. package/lib/editor/components/shared/abstract/destroy.component.d.ts +1 -1
  7. package/package.json +1 -3
  8. package/src/lib/apart-components/add-link-dialog/_add-link-dialog.theme.scss +3 -6
  9. package/src/lib/apart-components/add-link-mobile/_add-link-mobile.theme.scss +4 -7
  10. package/src/lib/apart-components/confirm-dialog/_theme.scss +6 -9
  11. package/src/lib/apart-components/editor-title/_editor-title.theme.scss +6 -9
  12. package/src/lib/apart-components/editor-title-mobile/_editor-title-mobile.theme.scss +9 -12
  13. package/src/lib/apart-components/editor-toolbar/_editor-toolbar.theme.scss +5 -8
  14. package/src/lib/apart-components/editor-toolbar/components/buttons/color-picker/_color-picker.theme.scss +1 -3
  15. package/src/lib/apart-components/editor-toolbar/components/buttons/font/_font.theme.scss +1 -3
  16. package/src/lib/apart-components/editor-toolbar/components/buttons/font-size/_font-size.theme.scss +2 -5
  17. package/src/lib/apart-components/editor-toolbar/components/buttons/font-style/_font-style.theme.scss +3 -6
  18. package/src/lib/apart-components/editor-toolbar/components/buttons/format/_format.theme.scss +3 -6
  19. package/src/lib/apart-components/editor-toolbar/components/buttons/numbering/_numbering.theme.scss +15 -18
  20. package/src/lib/apart-components/editor-toolbar/components/buttons/undo-redo/_undo-redo.theme.scss +2 -4
  21. package/src/lib/apart-components/editor-toolbar/components/menu-dropdowns/_menu-dropdowns.theme.scss +5 -8
  22. package/src/lib/apart-components/editor-toolbar/components/menu-dropdowns-mobile/_menu-dropdowns-mobile.theme.scss +6 -9
  23. package/src/lib/apart-components/editor-toolbar/components/toolbar-actions/_toolbar-actions.theme.scss +3 -6
  24. package/src/lib/apart-components/insert-table/_insert-table.theme.scss +6 -9
  25. package/src/lib/apart-components/insert-table-mobile/_insert-table-mobile.theme.scss +12 -15
  26. package/src/lib/apart-components/text-format-mobile/_text-format-mobile.theme.scss +22 -25
  27. package/src/lib/editor/components/_editor.theme.scss +25 -28
  28. package/esm2022/lib/apart-components/add-link-dialog/add-link-dialog.component.mjs +0 -73
  29. package/esm2022/lib/apart-components/add-link-dialog/validation.helper.mjs +0 -7
  30. package/esm2022/lib/apart-components/add-link-mobile/add-link-mobile.component.mjs +0 -49
  31. package/esm2022/lib/apart-components/confirm-dialog/confirm-dialog.component.mjs +0 -34
  32. package/esm2022/lib/apart-components/editor-search/editor-search-dialog.component.mjs +0 -75
  33. package/esm2022/lib/apart-components/editor-title/editor-title.component.mjs +0 -95
  34. package/esm2022/lib/apart-components/editor-title-mobile/editor-title-mobile.component.mjs +0 -24
  35. package/esm2022/lib/apart-components/editor-toolbar/components/base-toolbar.component.mjs +0 -117
  36. package/esm2022/lib/apart-components/editor-toolbar/components/buttons/color-picker/color-picker.component.mjs +0 -37
  37. package/esm2022/lib/apart-components/editor-toolbar/components/buttons/font/font.component.mjs +0 -49
  38. package/esm2022/lib/apart-components/editor-toolbar/components/buttons/font-size/font-size.component.mjs +0 -90
  39. package/esm2022/lib/apart-components/editor-toolbar/components/buttons/font-style/font-style.component.mjs +0 -81
  40. package/esm2022/lib/apart-components/editor-toolbar/components/buttons/format/format.component.mjs +0 -28
  41. package/esm2022/lib/apart-components/editor-toolbar/components/buttons/numbering/numbering.component.mjs +0 -53
  42. package/esm2022/lib/apart-components/editor-toolbar/components/buttons/print/print.component.mjs +0 -18
  43. package/esm2022/lib/apart-components/editor-toolbar/components/buttons/undo-redo/undo-redo.component.mjs +0 -27
  44. package/esm2022/lib/apart-components/editor-toolbar/components/buttons/zoom/zoom.component.mjs +0 -71
  45. package/esm2022/lib/apart-components/editor-toolbar/components/menu-dropdowns/menu-dropdowns.component.mjs +0 -107
  46. package/esm2022/lib/apart-components/editor-toolbar/components/menu-dropdowns-mobile/menu-dropdowns-mobile.component.mjs +0 -25
  47. package/esm2022/lib/apart-components/editor-toolbar/components/toolbar-actions/toolbar-actions.component.mjs +0 -65
  48. package/esm2022/lib/apart-components/editor-toolbar/editor-mobile-toolbar/editor-mobile-toolbar.component.mjs +0 -86
  49. package/esm2022/lib/apart-components/editor-toolbar/editor-toolbar/editor-toolbar.component.mjs +0 -90
  50. package/esm2022/lib/apart-components/editor-toolbar/editor-toolbar.module.mjs +0 -122
  51. package/esm2022/lib/apart-components/editor-toolbar/shared/constants/editor-toolbar-modes.const.mjs +0 -8
  52. package/esm2022/lib/apart-components/editor-toolbar/shared/constants/numbering-templates.const.mjs +0 -1148
  53. package/esm2022/lib/apart-components/editor-toolbar/shared/constants/svg-icons.const.mjs +0 -157
  54. package/esm2022/lib/apart-components/editor-toolbar/shared/enums/alignment.enum.mjs +0 -8
  55. package/esm2022/lib/apart-components/editor-toolbar/shared/enums/editor-toolbar-mode.enum.mjs +0 -11
  56. package/esm2022/lib/apart-components/editor-toolbar/shared/enums/numbering-template-type.enum.mjs +0 -16
  57. package/esm2022/lib/apart-components/editor-toolbar/shared/enums/numbering-type.enum.mjs +0 -6
  58. package/esm2022/lib/apart-components/editor-toolbar/shared/services/custom-icon.service.mjs +0 -34
  59. package/esm2022/lib/apart-components/editor-toolbar/shared/services/editor-toolbar.service.mjs +0 -26
  60. package/esm2022/lib/apart-components/editor-toolbar/shared/services/toolbar-core.service.mjs +0 -60
  61. package/esm2022/lib/apart-components/editor-toolbar/shared/toolbar-styles.helper.mjs +0 -48
  62. package/esm2022/lib/apart-components/insert-table/insert-table.component.mjs +0 -54
  63. package/esm2022/lib/apart-components/insert-table-mobile/insert-table-mobile.component.mjs +0 -86
  64. package/esm2022/lib/apart-components/text-format-mobile/text-format-mobile.component.mjs +0 -134
  65. package/esm2022/lib/editor/components/edges/edge-element.model.mjs +0 -38
  66. package/esm2022/lib/editor/components/edges/edge-type.enum.mjs +0 -6
  67. package/esm2022/lib/editor/components/edges/edge.component.mjs +0 -141
  68. package/esm2022/lib/editor/components/edges/edges.mjs +0 -120
  69. package/esm2022/lib/editor/components/edges/page-type.enum.mjs +0 -7
  70. package/esm2022/lib/editor/components/editor.component.mjs +0 -112
  71. package/esm2022/lib/editor/components/external-element/external-element.service.mjs +0 -6
  72. package/esm2022/lib/editor/components/external-element/external-elements.const.mjs +0 -4
  73. package/esm2022/lib/editor/components/external-element/external-sidenav.interface.mjs +0 -2
  74. package/esm2022/lib/editor/components/external-element/external.component.mjs +0 -41
  75. package/esm2022/lib/editor/components/external-element/models/element-data.model.mjs +0 -9
  76. package/esm2022/lib/editor/components/external-element/models/external-element.model.mjs +0 -11
  77. package/esm2022/lib/editor/components/external-element/models/external-sidenav.model.mjs +0 -15
  78. package/esm2022/lib/editor/components/image/components/image.component.mjs +0 -88
  79. package/esm2022/lib/editor/components/image/image-api.service.mjs +0 -36
  80. package/esm2022/lib/editor/components/image/input-handler/image-input.handler.mjs +0 -46
  81. package/esm2022/lib/editor/components/image/resizer/coordinate.mjs +0 -2
  82. package/esm2022/lib/editor/components/image/resizer/direction-wrapper.mjs +0 -19
  83. package/esm2022/lib/editor/components/image/resizer/direction.enum.mjs +0 -12
  84. package/esm2022/lib/editor/components/image/resizer/resizer.component.mjs +0 -106
  85. package/esm2022/lib/editor/components/image/resizer/size-delta.mjs +0 -2
  86. package/esm2022/lib/editor/components/image/resizer/size-wrapper.mjs +0 -52
  87. package/esm2022/lib/editor/components/image/size.mjs +0 -2
  88. package/esm2022/lib/editor/components/shared/abstract/base.component.mjs +0 -60
  89. package/esm2022/lib/editor/components/shared/abstract/destroy.component.mjs +0 -18
  90. package/esm2022/lib/editor/components/shared/custom-component.hepler.mjs +0 -43
  91. package/esm2022/lib/editor/components/shared/custom-components.interface.mjs +0 -2
  92. package/esm2022/lib/editor/components/shared/custom-content-markers.const.mjs +0 -3
  93. package/esm2022/lib/editor/components/shared/custom-content.mjs +0 -2
  94. package/esm2022/lib/editor/components/shared/services/component.service.mjs +0 -52
  95. package/esm2022/lib/editor/components/shared/services/custom-content.service.mjs +0 -123
  96. package/esm2022/lib/editor/components/shared/services/overlay.service.mjs +0 -55
  97. package/esm2022/lib/editor/components/tab/tab.component.mjs +0 -44
  98. package/esm2022/lib/editor/components/tab/tab.helper.mjs +0 -6
  99. package/esm2022/lib/editor/components/table/cell-resizer/cell-resizer.mjs +0 -118
  100. package/esm2022/lib/editor/components/table/components/table-cell.component.mjs +0 -99
  101. package/esm2022/lib/editor/components/table/components/table.component.mjs +0 -412
  102. package/esm2022/lib/editor/components/table/enums/hrule.enum.mjs +0 -7
  103. package/esm2022/lib/editor/components/table/enums/reisizer-side.enum.mjs +0 -8
  104. package/esm2022/lib/editor/components/table/enums/vertical-merge.enum.mjs +0 -6
  105. package/esm2022/lib/editor/components/table/models/cell-data.model.mjs +0 -17
  106. package/esm2022/lib/editor/components/table/models/cell-resizer-parameters.model.mjs +0 -9
  107. package/esm2022/lib/editor/components/table/models/row-data.model.mjs +0 -8
  108. package/esm2022/lib/editor/components/table/models/selection-range.model.mjs +0 -7
  109. package/esm2022/lib/editor/components/table/overlay-menu/overlay-menu.component.mjs +0 -84
  110. package/esm2022/lib/editor/components/table/selection/table-selection.mjs +0 -383
  111. package/esm2022/lib/editor/content/constants/display-values.const.mjs +0 -8
  112. package/esm2022/lib/editor/content/constants/document-info.const.mjs +0 -13
  113. package/esm2022/lib/editor/content/constants/editor.const.mjs +0 -70
  114. package/esm2022/lib/editor/content/contents.interface.mjs +0 -2
  115. package/esm2022/lib/editor/content/display-data/display-data.mjs +0 -839
  116. package/esm2022/lib/editor/content/display-data/display-token.model.mjs +0 -12
  117. package/esm2022/lib/editor/content/display-data/format-ext.model.mjs +0 -10
  118. package/esm2022/lib/editor/content/display-data/general-properties.model.mjs +0 -11
  119. package/esm2022/lib/editor/content/display-data/indent.model.mjs +0 -9
  120. package/esm2022/lib/editor/content/display-data/line-info.model.mjs +0 -9
  121. package/esm2022/lib/editor/content/display-data/lines.mjs +0 -96
  122. package/esm2022/lib/editor/content/display-data/models/paragraph-info.model.mjs +0 -8
  123. package/esm2022/lib/editor/content/display-data/paragraph-info.interface.mjs +0 -2
  124. package/esm2022/lib/editor/content/display-data/paragraph.mjs +0 -56
  125. package/esm2022/lib/editor/content/display-data/text-line-info.mjs +0 -35
  126. package/esm2022/lib/editor/content/display-data/toolbar-styles.interface.mjs +0 -2
  127. package/esm2022/lib/editor/content/helpers/content-style.helper.mjs +0 -78
  128. package/esm2022/lib/editor/content/helpers/display-token.helper.mjs +0 -62
  129. package/esm2022/lib/editor/content/helpers/format.helper.mjs +0 -23
  130. package/esm2022/lib/editor/content/helpers/indexed-element.helper.mjs +0 -6
  131. package/esm2022/lib/editor/content/helpers/link.helper.mjs +0 -42
  132. package/esm2022/lib/editor/content/helpers/scaling.helper.mjs +0 -9
  133. package/esm2022/lib/editor/content/margin.model.mjs +0 -16
  134. package/esm2022/lib/editor/content/page-vertical-data.model.mjs +0 -9
  135. package/esm2022/lib/editor/content/vertical-alignment.enum.mjs +0 -11
  136. package/esm2022/lib/editor/core/event-emitting.mjs +0 -56
  137. package/esm2022/lib/editor/display/cell.interface.mjs +0 -2
  138. package/esm2022/lib/editor/display/event.helper.mjs +0 -18
  139. package/esm2022/lib/editor/display/layers/cursor.layer.mjs +0 -102
  140. package/esm2022/lib/editor/display/layers/layer.config.mjs +0 -2
  141. package/esm2022/lib/editor/display/layers/pages.layer.mjs +0 -109
  142. package/esm2022/lib/editor/display/layers/print.pages.layer.mjs +0 -7
  143. package/esm2022/lib/editor/display/layers/print.text.layer.mjs +0 -7
  144. package/esm2022/lib/editor/display/layers/selection.layer.mjs +0 -119
  145. package/esm2022/lib/editor/display/layers/text.layer.mjs +0 -226
  146. package/esm2022/lib/editor/display/print/print.helper.mjs +0 -40
  147. package/esm2022/lib/editor/display/print/print.renderer.mjs +0 -67
  148. package/esm2022/lib/editor/display/print/print.rendering.helper.mjs +0 -7
  149. package/esm2022/lib/editor/display/render-changes.interface.mjs +0 -2
  150. package/esm2022/lib/editor/display/render-changes.model.mjs +0 -25
  151. package/esm2022/lib/editor/display/renderer.mjs +0 -204
  152. package/esm2022/lib/editor/display/rendering.helper.mjs +0 -185
  153. package/esm2022/lib/editor/display/renderloop.mjs +0 -26
  154. package/esm2022/lib/editor/display/virtual.renderer.mjs +0 -284
  155. package/esm2022/lib/editor/display/visible-range.interface.mjs +0 -2
  156. package/esm2022/lib/editor/editor.module.mjs +0 -91
  157. package/esm2022/lib/editor/execution/distance.model.mjs +0 -10
  158. package/esm2022/lib/editor/execution/edit.session.mjs +0 -602
  159. package/esm2022/lib/editor/execution/editor.mjs +0 -1368
  160. package/esm2022/lib/editor/execution/helpers/dom.helper.mjs +0 -42
  161. package/esm2022/lib/editor/execution/helpers/format-style.helper.mjs +0 -73
  162. package/esm2022/lib/editor/execution/helpers/image.helpet.mjs +0 -12
  163. package/esm2022/lib/editor/execution/helpers/page.helper.mjs +0 -12
  164. package/esm2022/lib/editor/execution/helpers/paragraph-style.helper.mjs +0 -41
  165. package/esm2022/lib/editor/execution/helpers/paragraph.helper.mjs +0 -177
  166. package/esm2022/lib/editor/execution/regulator.service.mjs +0 -212
  167. package/esm2022/lib/editor/execution/targeting/cell-session-source.model.mjs +0 -18
  168. package/esm2022/lib/editor/execution/targeting/edge-session-source.model.mjs +0 -14
  169. package/esm2022/lib/editor/execution/targeting/main-session-source.model.mjs +0 -8
  170. package/esm2022/lib/editor/execution/targeting/session-source.model.mjs +0 -3
  171. package/esm2022/lib/editor/execution/targeting/session.model.mjs +0 -10
  172. package/esm2022/lib/editor/gadgets/font-metrics/editor-version.const.mjs +0 -2
  173. package/esm2022/lib/editor/gadgets/font-metrics/font-metric-size.interface.mjs +0 -2
  174. package/esm2022/lib/editor/gadgets/font-metrics/font-metrics.helper.mjs +0 -88
  175. package/esm2022/lib/editor/gadgets/history/operation-history.mjs +0 -208
  176. package/esm2022/lib/editor/gadgets/history/operation.type.mjs +0 -2
  177. package/esm2022/lib/editor/gadgets/history/operations-history-info.model.mjs +0 -7
  178. package/esm2022/lib/editor/gadgets/numbering/numbering-data.model.mjs +0 -9
  179. package/esm2022/lib/editor/gadgets/numbering/numbering-marker-type.enum.mjs +0 -12
  180. package/esm2022/lib/editor/gadgets/numbering/numbering-paragraph-style.model.mjs +0 -13
  181. package/esm2022/lib/editor/gadgets/numbering/numbering.helper.mjs +0 -149
  182. package/esm2022/lib/editor/gadgets/page-break/break-types.enum.mjs +0 -7
  183. package/esm2022/lib/editor/gadgets/page-break/break.helper.mjs +0 -18
  184. package/esm2022/lib/editor/gadgets/scrollbar.mjs +0 -86
  185. package/esm2022/lib/editor/gadgets/search/replace.interface.mjs +0 -2
  186. package/esm2022/lib/editor/gadgets/search/search-iteration.interface.mjs +0 -2
  187. package/esm2022/lib/editor/gadgets/search/search.mjs +0 -231
  188. package/esm2022/lib/editor/gadgets/unicode/unicode-chars.const.mjs +0 -5
  189. package/esm2022/lib/editor/gadgets/unicode/unicode.helper.mjs +0 -20
  190. package/esm2022/lib/editor/interaction/base.handler.mjs +0 -19
  191. package/esm2022/lib/editor/interaction/document.handler.mjs +0 -27
  192. package/esm2022/lib/editor/interaction/editor.service.mjs +0 -386
  193. package/esm2022/lib/editor/interaction/input.handler.mjs +0 -152
  194. package/esm2022/lib/editor/interaction/mode.enum.mjs +0 -7
  195. package/esm2022/lib/editor/interaction/mouse-button.enum.mjs +0 -7
  196. package/esm2022/lib/editor/interaction/mouse.handler.mjs +0 -50
  197. package/esm2022/lib/editor/interaction/text-input.mjs +0 -53
  198. package/esm2022/lib/editor/operations/commands.service.mjs +0 -20
  199. package/esm2022/lib/editor/operations/enums/command-type.enum.mjs +0 -32
  200. package/esm2022/lib/editor/operations/enums/target-type.enum.mjs +0 -7
  201. package/esm2022/lib/editor/operations/helpers/break-operations.helper.mjs +0 -9
  202. package/esm2022/lib/editor/operations/helpers/content-operations.helper.mjs +0 -15
  203. package/esm2022/lib/editor/operations/helpers/format-operations.helper.mjs +0 -85
  204. package/esm2022/lib/editor/operations/helpers/image-operations.helper.mjs +0 -19
  205. package/esm2022/lib/editor/operations/helpers/indexed-element-operations.helper.mjs +0 -43
  206. package/esm2022/lib/editor/operations/helpers/link-operations.helper.mjs +0 -136
  207. package/esm2022/lib/editor/operations/helpers/numbering-operations.helper.mjs +0 -55
  208. package/esm2022/lib/editor/operations/helpers/paragraph-operations.helper.mjs +0 -114
  209. package/esm2022/lib/editor/operations/helpers/tab-operations.helper.mjs +0 -16
  210. package/esm2022/lib/editor/operations/helpers/table-operations.helper.mjs +0 -374
  211. package/esm2022/lib/editor/operations/operations-helper.helper.mjs +0 -438
  212. package/esm2022/lib/editor/operations/save-commands.helper.mjs +0 -128
  213. package/esm2022/lib/editor/operations/target-operations.helper.mjs +0 -23
  214. package/esm2022/lib/editor/positioning/alignments.const.mjs +0 -8
  215. package/esm2022/lib/editor/positioning/content.helper.mjs +0 -45
  216. package/esm2022/lib/editor/positioning/cursor-paragraph.mjs +0 -13
  217. package/esm2022/lib/editor/positioning/cursor-position.interface.mjs +0 -2
  218. package/esm2022/lib/editor/positioning/insert-index.interface.mjs +0 -2
  219. package/esm2022/lib/editor/positioning/line-width.helper.mjs +0 -13
  220. package/esm2022/lib/editor/positioning/position.helper.mjs +0 -210
  221. package/esm2022/lib/editor/positioning/range.mjs +0 -94
  222. package/esm2022/lib/editor/positioning/selection.mjs +0 -351
  223. package/esm2022/lib/editor/revision.helper.mjs +0 -94
  224. package/esm2022/lib/models/generated/add-numbering.model.mjs +0 -8
  225. package/esm2022/lib/models/generated/apply-element-style.model.mjs +0 -8
  226. package/esm2022/lib/models/generated/apply-image-style.model.mjs +0 -8
  227. package/esm2022/lib/models/generated/apply-paragraph-style.model.mjs +0 -12
  228. package/esm2022/lib/models/generated/apply-text-style.model.mjs +0 -12
  229. package/esm2022/lib/models/generated/borders-style.model.mjs +0 -8
  230. package/esm2022/lib/models/generated/break.model.mjs +0 -8
  231. package/esm2022/lib/models/generated/cell.model.mjs +0 -12
  232. package/esm2022/lib/models/generated/column-section.model.mjs +0 -8
  233. package/esm2022/lib/models/generated/column.model.mjs +0 -8
  234. package/esm2022/lib/models/generated/command.model.mjs +0 -120
  235. package/esm2022/lib/models/generated/delete.model.mjs +0 -8
  236. package/esm2022/lib/models/generated/document-name.model.mjs +0 -8
  237. package/esm2022/lib/models/generated/document.model.mjs +0 -8
  238. package/esm2022/lib/models/generated/docx.model.mjs +0 -12
  239. package/esm2022/lib/models/generated/edge-target.model.mjs +0 -8
  240. package/esm2022/lib/models/generated/edge.model.mjs +0 -8
  241. package/esm2022/lib/models/generated/element.model.mjs +0 -8
  242. package/esm2022/lib/models/generated/file-source.model.mjs +0 -8
  243. package/esm2022/lib/models/generated/format.model.mjs +0 -12
  244. package/esm2022/lib/models/generated/heading.model.mjs +0 -16
  245. package/esm2022/lib/models/generated/image-data.model.mjs +0 -8
  246. package/esm2022/lib/models/generated/image.model.mjs +0 -12
  247. package/esm2022/lib/models/generated/insert-break.model.mjs +0 -8
  248. package/esm2022/lib/models/generated/insert-element.model.mjs +0 -12
  249. package/esm2022/lib/models/generated/insert-image.model.mjs +0 -12
  250. package/esm2022/lib/models/generated/insert-link.model.mjs +0 -12
  251. package/esm2022/lib/models/generated/insert-paragraph.model.mjs +0 -20
  252. package/esm2022/lib/models/generated/insert-styled-text.model.mjs +0 -12
  253. package/esm2022/lib/models/generated/insert-tab.model.mjs +0 -8
  254. package/esm2022/lib/models/generated/insert-table-columns.model.mjs +0 -8
  255. package/esm2022/lib/models/generated/insert-table-rows.model.mjs +0 -8
  256. package/esm2022/lib/models/generated/insert-table.model.mjs +0 -8
  257. package/esm2022/lib/models/generated/insert-text.model.mjs +0 -8
  258. package/esm2022/lib/models/generated/last-document-revision.model.mjs +0 -12
  259. package/esm2022/lib/models/generated/link-data.model.mjs +0 -8
  260. package/esm2022/lib/models/generated/link.model.mjs +0 -8
  261. package/esm2022/lib/models/generated/margins.model.mjs +0 -8
  262. package/esm2022/lib/models/generated/numbering-level.model.mjs +0 -12
  263. package/esm2022/lib/models/generated/numbering.model.mjs +0 -8
  264. package/esm2022/lib/models/generated/operation.model.mjs +0 -12
  265. package/esm2022/lib/models/generated/page-numbers.model.mjs +0 -8
  266. package/esm2022/lib/models/generated/paragraph-style.model.mjs +0 -8
  267. package/esm2022/lib/models/generated/paragraph.model.mjs +0 -12
  268. package/esm2022/lib/models/generated/remove-numberings.model.mjs +0 -8
  269. package/esm2022/lib/models/generated/remove-table-columns.model.mjs +0 -8
  270. package/esm2022/lib/models/generated/remove-table-rows.model.mjs +0 -8
  271. package/esm2022/lib/models/generated/replace-by-text.model.mjs +0 -8
  272. package/esm2022/lib/models/generated/replace.model.mjs +0 -44
  273. package/esm2022/lib/models/generated/resize-table-columns.model.mjs +0 -8
  274. package/esm2022/lib/models/generated/restore-numberings.model.mjs +0 -8
  275. package/esm2022/lib/models/generated/restore-paragraph-styles.model.mjs +0 -8
  276. package/esm2022/lib/models/generated/restore-table.model.mjs +0 -12
  277. package/esm2022/lib/models/generated/restore-text-styles.model.mjs +0 -8
  278. package/esm2022/lib/models/generated/restore.model.mjs +0 -8
  279. package/esm2022/lib/models/generated/revision.model.mjs +0 -12
  280. package/esm2022/lib/models/generated/row.model.mjs +0 -8
  281. package/esm2022/lib/models/generated/tab.model.mjs +0 -8
  282. package/esm2022/lib/models/generated/table-cell.model.mjs +0 -8
  283. package/esm2022/lib/models/generated/table.model.mjs +0 -12
  284. package/esm2022/lib/models/generated/target.model.mjs +0 -16
  285. package/esm2022/lib/models/generated/text-style.model.mjs +0 -8
  286. package/esm2022/lib/translate/noder-translate.loader.mjs +0 -22
  287. package/esm2022/public-api.mjs +0 -54
  288. package/esm2022/talrace-ngx-noder.mjs +0 -5
@@ -1,204 +0,0 @@
1
- import { CursorLayer } from './layers/cursor.layer';
2
- import { DistanceModel } from '../execution/distance.model';
3
- import { DomHelper } from '../execution/helpers/dom.helper';
4
- import { EventEmitting } from '../core/event-emitting';
5
- import { PositionHelper } from '../positioning/position.helper';
6
- import { RenderChangesModel } from './render-changes.model';
7
- import { RenderLoop } from './renderloop';
8
- import { SelectionLayer } from './layers/selection.layer';
9
- import { TextLayer } from './layers/text.layer';
10
- export class Renderer extends EventEmitting {
11
- constructor(parentContainer, session) {
12
- super();
13
- this.session = session;
14
- this.layerConfig = {
15
- width: 1,
16
- contentRange: new DistanceModel({ start: 0, end: 0 }),
17
- minHeight: 1,
18
- maxHeight: 1,
19
- offset: 0,
20
- height: 1,
21
- scrollTop: 0,
22
- pages: [],
23
- visibleRange: {
24
- startParagraph: 0,
25
- startLine: 0,
26
- startScreenLine: 0,
27
- startScreenFullLine: 0,
28
- endParagraph: 0,
29
- endLine: 0,
30
- endScreenLine: 0,
31
- endScreenFullLine: 0
32
- }
33
- };
34
- this.changes = new RenderChangesModel();
35
- this.textareaSize = {
36
- height: 1,
37
- width: 1
38
- };
39
- this.pagesCountChangedHandler = () => {
40
- this.loop.schedule({ lines: true, selection: true });
41
- };
42
- this.container = parentContainer;
43
- this.container.className += ' noder-editor';
44
- this.createContentContainer();
45
- this.textLayer = new TextLayer(this.content, this.session);
46
- this.selectionLayer = new SelectionLayer(this.content, 'text-selection', this.session);
47
- this.cursorLayer = new CursorLayer(this.content, this.session);
48
- this.loop = new RenderLoop(changes => this.renderChanges(changes));
49
- this.session.displayData.addEventListener('pagesCountChanged', this.pagesCountChangedHandler);
50
- }
51
- renderChanges(changes, force) {
52
- changes.apply(this.changes);
53
- this.changes = new RenderChangesModel();
54
- if (!changes.any && !force) {
55
- this.changes.apply(changes);
56
- return;
57
- }
58
- // text, scrolling and resize changes can cause the view port size to change
59
- if (changes.full || changes.size || changes.text || changes.lines || changes.scroll) {
60
- changes.apply(this.computeLayerConfig());
61
- DomHelper.translate(this.content, 0, -this.layerConfig.offset);
62
- DomHelper.setStyle(this.content.style, 'width', `${this.layerConfig.width}px`);
63
- DomHelper.setStyle(this.content.style, 'height', `${this.layerConfig.height}px`);
64
- }
65
- // full
66
- if (changes.full) {
67
- this.renderFull();
68
- return;
69
- }
70
- if (changes.text || changes.scroll) {
71
- this.renderText();
72
- }
73
- if (changes.cursor) {
74
- this.renderCursor();
75
- }
76
- if (changes.marker || changes.selection) {
77
- this.renderSelection();
78
- }
79
- this.session.onRendered();
80
- }
81
- /**
82
- * Triggers a partial update of the text, from the range given by the two parameters.
83
- **/
84
- updateLines(firstRow, lastRow) {
85
- // If the change happened offscreen above us then it's possible
86
- // that a new line wrap will affect the position of the lines on our
87
- // screen, so they need redrawn.
88
- if (lastRow < this.layerConfig.contentRange.start || firstRow > this.layerConfig.contentRange.end) {
89
- return;
90
- }
91
- this.loop.schedule({ lines: true });
92
- }
93
- moveTextAreaToCursor() {
94
- if (!this.textarea) {
95
- return;
96
- }
97
- let cursorPosition = this.cursorLayer.cursorPosition;
98
- if (!cursorPosition) {
99
- return;
100
- }
101
- const posTop = cursorPosition.pageY - this.layerConfig.offset;
102
- if (posTop < 0 || posTop > this.layerConfig.height - this.textareaSize.height) {
103
- DomHelper.translate(this.textarea, 0, 0);
104
- return;
105
- }
106
- DomHelper.setStyle(this.textarea.style, 'height', `${this.textareaSize.height}px`);
107
- DomHelper.setStyle(this.textarea.style, 'width', `${this.textareaSize.width}px`);
108
- DomHelper.translate(this.textarea, Math.min(cursorPosition.pageX, this.textareaSize.width), Math.min(posTop, this.textareaSize.height));
109
- }
110
- updateSelection(range) {
111
- if (range.isEmpty && this.selectionLayer.marker) {
112
- this.selectionLayer.marker = null;
113
- this.loop.schedule({ selection: true });
114
- }
115
- else if (!range.isEmpty && !this.selectionLayer.marker?.isEqual(range)) {
116
- this.selectionLayer.marker = range;
117
- this.loop.schedule({ selection: true });
118
- }
119
- }
120
- /**
121
- * Triggers a full update of the text, for all the rows.
122
- **/
123
- updateText() {
124
- this.loop.schedule({ text: true });
125
- }
126
- updateCursor() {
127
- this.loop.schedule({ cursor: true });
128
- }
129
- /**
130
- * Converts screen coordinates to text coordinates by mapping to the closest token midpoint.
131
- */
132
- screenToTextCoordinatesUsingMidpoint(x, y, rect) {
133
- const { left, top } = rect ?? this.container.getBoundingClientRect();
134
- const { paragraphIndex, lineIndex } = PositionHelper.getParagraphAndLineIndexFromYPosition(this.session, y, top);
135
- const { line, indexInLine } = PositionHelper.mapPixelToClosestTokenMidpoint(this.session, x, paragraphIndex, lineIndex, left);
136
- return PositionHelper.screenToDocument(this.session, line, indexInLine);
137
- }
138
- /**
139
- * Converts screen coordinates to text coordinates by mapping to the next token boundary.
140
- */
141
- screenToTextCoordinatesUsingBoundary(x, y, rect) {
142
- const { left, top } = rect ?? this.container.getBoundingClientRect();
143
- const { paragraphIndex, lineIndex } = PositionHelper.getParagraphAndLineIndexFromYPosition(this.session, y, top);
144
- const { line, indexInLine } = PositionHelper.mapPixelToNextTokenBoundary(this.session, x, paragraphIndex, lineIndex, left);
145
- return PositionHelper.screenToDocument(this.session, line, indexInLine);
146
- }
147
- showCursor() {
148
- this.cursorLayer.showCursor();
149
- }
150
- hideCursor() {
151
- this.cursorLayer.hideCursor();
152
- }
153
- destroy() {
154
- this.session.displayData.removeEventListener('pagesCountChanged', this.pagesCountChangedHandler);
155
- this.textLayer.destroy();
156
- DomHelper.removeChildren(this.container);
157
- }
158
- renderFull() {
159
- this.textLayer.updateLines(this.layerConfig);
160
- this.selectionLayer.update(this.layerConfig);
161
- this.cursorLayer.update(this.layerConfig);
162
- this.moveTextAreaToCursor();
163
- this.session.onRendered();
164
- }
165
- renderText() {
166
- this.textLayer.updateLines(this.layerConfig);
167
- this.cursorLayer.detectVisibility();
168
- }
169
- renderCursor() {
170
- this.cursorLayer.update(this.layerConfig);
171
- this.moveTextAreaToCursor();
172
- }
173
- renderSelection() {
174
- this.selectionLayer.update(this.layerConfig);
175
- this.cursorLayer.detectVisibility();
176
- }
177
- computeLayerConfig() {
178
- const displayData = this.session.displayData;
179
- const maxHeight = displayData.allPagesHeight;
180
- const minHeight = displayData.minHeight;
181
- const changes = new RenderChangesModel({ scroll: true });
182
- this.layerConfig = {
183
- width: this.session.displayData.contentWidth + displayData.pageMargin.left + displayData.pageMargin.right,
184
- height: displayData.defaultVerticalData.contentHeight,
185
- contentRange: new DistanceModel({ start: 0, end: displayData.paragraphs.filter(x => x.paragraphSettings).length - 1 }),
186
- minHeight,
187
- maxHeight,
188
- offset: 0,
189
- scrollTop: this.session.scrollTop
190
- };
191
- return changes;
192
- }
193
- createContentContainer() {
194
- this.content = document.createElement('div');
195
- this.content.className = 'noder-content';
196
- if (this.container.firstChild) {
197
- this.container.firstChild.appendChild(this.content);
198
- }
199
- else {
200
- this.container.appendChild(this.content);
201
- }
202
- }
203
- }
204
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbm9kZXIvc3JjL2xpYi9lZGl0b3IvZGlzcGxheS9yZW5kZXJlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFcEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU1RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRWhFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDMUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVoRCxNQUFNLE9BQU8sUUFBUyxTQUFRLGFBQWE7SUEyQ3ZDLFlBQVksZUFBNEIsRUFBUyxPQUFvQjtRQUNqRSxLQUFLLEVBQUUsQ0FBQztRQURxQyxZQUFPLEdBQVAsT0FBTyxDQUFhO1FBNUJyRSxnQkFBVyxHQUFpQjtZQUN4QixLQUFLLEVBQUUsQ0FBQztZQUNSLFlBQVksRUFBRSxJQUFJLGFBQWEsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3JELFNBQVMsRUFBRSxDQUFDO1lBQ1osU0FBUyxFQUFFLENBQUM7WUFDWixNQUFNLEVBQUUsQ0FBQztZQUNULE1BQU0sRUFBRSxDQUFDO1lBQ1QsU0FBUyxFQUFFLENBQUM7WUFDWixLQUFLLEVBQUUsRUFBRTtZQUNULFlB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QyxFQUFFLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3RILFNBQVM7WUFDVCxTQUFTO1lBQ1QsTUFBTSxFQUFFLENBQUM7WUFDVCxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTO1NBQ3BDLENBQUM7UUFFRixPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBTU8sc0JBQXNCO1FBQzFCLElBQUksQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxlQUFlLENBQUM7UUFFekMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRTtZQUMzQixJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3ZEO2FBQU07WUFDSCxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDNUM7SUFDTCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDdXJzb3JMYXllciB9IGZyb20gJy4vbGF5ZXJzL2N1cnNvci5sYXllcic7XG5pbXBvcnQgeyBDdXJzb3JQYXJhZ3JhcGggfSBmcm9tICcuLi9wb3NpdGlvbmluZy9jdXJzb3ItcGFyYWdyYXBoJztcbmltcG9ydCB7IERpc3RhbmNlTW9kZWwgfSBmcm9tICcuLi9leGVjdXRpb24vZGlzdGFuY2UubW9kZWwnO1xuaW1wb3J0IHsgRG9tSGVscGVyIH0gZnJvbSAnLi4vZXhlY3V0aW9uL2hlbHBlcnMvZG9tLmhlbHBlcic7XG5pbXBvcnQgeyBFZGl0U2Vzc2lvbiB9IGZyb20gJy4uL2V4ZWN1dGlvbi9lZGl0LnNlc3Npb24nO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGluZyB9IGZyb20gJy4uL2NvcmUvZXZlbnQtZW1pdHRpbmcnO1xuaW1wb3J0IHsgSUxheWVyQ29uZmlnIH0gZnJvbSAnLi9sYXllcnMvbGF5ZXIuY29uZmlnJztcbmltcG9ydCB7IFBvc2l0aW9uSGVscGVyIH0gZnJvbSAnLi4vcG9zaXRpb25pbmcvcG9zaXRpb24uaGVscGVyJztcbmltcG9ydCB7IFJhbmdlIH0gZnJvbSAnLi4vcG9zaXRpb25pbmcvcmFuZ2UnO1xuaW1wb3J0IHsgUmVuZGVyQ2hhbmdlc01vZGVsIH0gZnJvbSAnLi9yZW5kZXItY2hhbmdlcy5tb2RlbCc7XG5pbXBvcnQgeyBSZW5kZXJMb29wIH0gZnJvbSAnLi9yZW5kZXJsb29wJztcbmltcG9ydCB7IFNlbGVjdGlvbkxheWVyIH0gZnJvbSAnLi9sYXllcnMvc2VsZWN0aW9uLmxheWVyJztcbmltcG9ydCB7IFRleHRMYXllciB9IGZyb20gJy4vbGF5ZXJzL3RleHQubGF5ZXInO1xuXG5leHBvcnQgY2xhc3MgUmVuZGVyZXIgZXh0ZW5kcyBFdmVudEVtaXR0aW5nIHtcbiAgICBjb250YWluZXI6IEhUTUxFbGVtZW50O1xuXG4gICAgY29udGVudDogSFRNTEVsZW1lbnQ7XG5cbiAgICBjdXJzb3JMYXllcjogQ3Vyc29yTGF5ZXI7XG5cbiAgICB0ZXh0TGF5ZXI6IFRleHRMYXllcjtcblxuICAgIHNlbGVjdGlvbkxheWVyOiBTZWxlY3Rpb25MYXllcjtcblxuICAgIGxvb3A6IFJlbmRlckxvb3A7XG5cbiAgICB0ZXh0YXJlYTogSFRNTEVsZW1lbnQ7XG5cbiAgICBsYXllckNvbmZpZzogSUxheWVyQ29uZmlnID0ge1xuICAgICAgICB3aWR0aDogMSxcbiAgICAgICAgY29udGVudFJhbmdlOiBuZXcgRGlzdGFuY2VNb2RlbCh7IHN0YXJ0OiAwLCBlbmQ6IDAgfSksXG4gICAgICAgIG1pbkhlaWdodDogMSxcbiAgICAgICAgbWF4SGVpZ2h0OiAxLFxuICAgICAgICBvZmZzZXQ6IDAsXG4gICAgICAgIGhlaWdodDogMSxcbiAgICAgICAgc2Nyb2xsVG9wOiAwLFxuICAgICAgICBwYWdlczogW10sXG4gICAgICAgIHZpc2libGVSYW5nZToge1xuICAgICAgICAgICAgc3RhcnRQYXJhZ3JhcGg6IDAsXG4gICAgICAgICAgICBzdGFydExpbmU6IDAsXG4gICAgICAgICAgICBzdGFydFNjcmVlbkxpbmU6IDAsXG4gICAgICAgICAgICBzdGFydFNjcmVlbkZ1bGxMaW5lOiAwLFxuICAgICAgICAgICAgZW5kUGFyYWdyYXBoOiAwLFxuICAgICAgICAgICAgZW5kTGluZTogMCxcbiAgICAgICAgICAgIGVuZFNjcmVlbkxpbmU6IDAsXG4gICAgICAgICAgICBlbmRTY3JlZW5GdWxsTGluZTogMFxuICAgICAgICB9XG4gICAgfTtcblxuICAgIGNoYW5nZXMgPSBuZXcgUmVuZGVyQ2hhbmdlc01vZGVsKCk7XG5cbiAgICByZWFkb25seSB0ZXh0YXJlYVNpemUgPSB7XG4gICAgICAgIGhlaWdodDogMSxcbiAgICAgICAgd2lkdGg6IDFcbiAgICB9O1xuXG4gICAgY29uc3RydWN0b3IocGFyZW50Q29udGFpbmVyOiBIVE1MRWxlbWVudCwgcHVibGljIHNlc3Npb246IEVkaXRTZXNzaW9uKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuY29udGFpbmVyID0gcGFyZW50Q29udGFpbmVyO1xuICAgICAgICB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWUgKz0gJyBub2Rlci1lZGl0b3InO1xuICAgICAgICB0aGlzLmNyZWF0ZUNvbnRlbnRDb250YWluZXIoKTtcbiAgICAgICAgdGhpcy50ZXh0TGF5ZXIgPSBuZXcgVGV4dExheWVyKHRoaXMuY29udGVudCwgdGhpcy5zZXNzaW9uKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25MYXllciA9IG5ldyBTZWxlY3Rpb25MYXllcih0aGlzLmNvbnRlbnQsICd0ZXh0LXNlbGVjdGlvbicsIHRoaXMuc2Vzc2lvbik7XG4gICAgICAgIHRoaXMuY3Vyc29yTGF5ZXIgPSBuZXcgQ3Vyc29yTGF5ZXIodGhpcy5jb250ZW50LCB0aGlzLnNlc3Npb24pO1xuICAgICAgICB0aGlzLmxvb3AgPSBuZXcgUmVuZGVyTG9vcChjaGFuZ2VzID0+IHRoaXMucmVuZGVyQ2hhbmdlcyhjaGFuZ2VzKSk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5hZGRFdmVudExpc3RlbmVyKCdwYWdlc0NvdW50Q2hhbmdlZCcsIHRoaXMucGFnZXNDb3VudENoYW5nZWRIYW5kbGVyKTtcbiAgICB9XG5cbiAgICByZW5kZXJDaGFuZ2VzKGNoYW5nZXM6IFJlbmRlckNoYW5nZXNNb2RlbCwgZm9yY2U/OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGNoYW5nZXMuYXBwbHkodGhpcy5jaGFuZ2VzKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VzID0gbmV3IFJlbmRlckNoYW5nZXNNb2RlbCgpO1xuXG4gICAgICAgIGlmICghY2hhbmdlcy5hbnkgJiYgIWZvcmNlKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZXMuYXBwbHkoY2hhbmdlcyk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRleHQsIHNjcm9sbGluZyBhbmQgcmVzaXplIGNoYW5nZXMgY2FuIGNhdXNlIHRoZSB2aWV3IHBvcnQgc2l6ZSB0byBjaGFuZ2VcbiAgICAgICAgaWYgKGNoYW5nZXMuZnVsbCB8fCBjaGFuZ2VzLnNpemUgfHwgY2hhbmdlcy50ZXh0IHx8IGNoYW5nZXMubGluZXMgfHwgY2hhbmdlcy5zY3JvbGwpIHtcbiAgICAgICAgICAgIGNoYW5nZXMuYXBwbHkodGhpcy5jb21wdXRlTGF5ZXJDb25maWcoKSk7XG5cbiAgICAgICAgICAgIERvbUhlbHBlci50cmFuc2xhdGUodGhpcy5jb250ZW50LCAwLCAtdGhpcy5sYXllckNvbmZpZy5vZmZzZXQpO1xuXG4gICAgICAgICAgICBEb21IZWxwZXIuc2V0U3R5bGUodGhpcy5jb250ZW50LnN0eWxlLCAnd2lkdGgnLCBgJHt0aGlzLmxheWVyQ29uZmlnLndpZHRofXB4YCk7XG4gICAgICAgICAgICBEb21IZWxwZXIuc2V0U3R5bGUodGhpcy5jb250ZW50LnN0eWxlLCAnaGVpZ2h0JywgYCR7dGhpcy5sYXllckNvbmZpZy5oZWlnaHR9cHhgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGZ1bGxcbiAgICAgICAgaWYgKGNoYW5nZXMuZnVsbCkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJGdWxsKCk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzLnRleHQgfHwgY2hhbmdlcy5zY3JvbGwpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyVGV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXMuY3Vyc29yKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlckN1cnNvcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXMubWFya2VyIHx8IGNoYW5nZXMuc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlclNlbGVjdGlvbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXNzaW9uLm9uUmVuZGVyZWQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VycyBhIHBhcnRpYWwgdXBkYXRlIG9mIHRoZSB0ZXh0LCBmcm9tIHRoZSByYW5nZSBnaXZlbiBieSB0aGUgdHdvIHBhcmFtZXRlcnMuXG4gICAgICoqL1xuICAgIHVwZGF0ZUxpbmVzKGZpcnN0Um93OiBudW1iZXIsIGxhc3RSb3c6IG51bWJlcik6IHZvaWQge1xuICAgICAgICAvLyBJZiB0aGUgY2hhbmdlIGhhcHBlbmVkIG9mZnNjcmVlbiBhYm92ZSB1cyB0aGVuIGl0J3MgcG9zc2libGVcbiAgICAgICAgLy8gdGhhdCBhIG5ldyBsaW5lIHdyYXAgd2lsbCBhZmZlY3QgdGhlIHBvc2l0aW9uIG9mIHRoZSBsaW5lcyBvbiBvdXJcbiAgICAgICAgLy8gc2NyZWVuLCBzbyB0aGV5IG5lZWQgcmVkcmF3bi5cbiAgICAgICAgaWYgKGxhc3RSb3cgPCB0aGlzLmxheWVyQ29uZmlnLmNvbnRlbnRSYW5nZS5zdGFydCB8fCBmaXJzdFJvdyA+IHRoaXMubGF5ZXJDb25maWcuY29udGVudFJhbmdlLmVuZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sb29wLnNjaGVkdWxlKHsgbGluZXM6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgbW92ZVRleHRBcmVhVG9DdXJzb3IoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy50ZXh0YXJlYSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGN1cnNvclBvc2l0aW9uID0gdGhpcy5jdXJzb3JMYXllci5jdXJzb3JQb3NpdGlvbjtcbiAgICAgICAgaWYgKCFjdXJzb3JQb3NpdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcG9zVG9wID0gY3Vyc29yUG9zaXRpb24ucGFnZVkgLSB0aGlzLmxheWVyQ29uZmlnLm9mZnNldDtcbiAgICAgICAgaWYgKHBvc1RvcCA8IDAgfHwgcG9zVG9wID4gdGhpcy5sYXllckNvbmZpZy5oZWlnaHQgLSB0aGlzLnRleHRhcmVhU2l6ZS5oZWlnaHQpIHtcbiAgICAgICAgICAgIERvbUhlbHBlci50cmFuc2xhdGUodGhpcy50ZXh0YXJlYSwgMCwgMCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBEb21IZWxwZXIuc2V0U3R5bGUodGhpcy50ZXh0YXJlYS5zdHlsZSwgJ2hlaWdodCcsIGAke3RoaXMudGV4dGFyZWFTaXplLmhlaWdodH1weGApO1xuICAgICAgICBEb21IZWxwZXIuc2V0U3R5bGUodGhpcy50ZXh0YXJlYS5zdHlsZSwgJ3dpZHRoJywgYCR7dGhpcy50ZXh0YXJlYVNpemUud2lkdGh9cHhgKTtcbiAgICAgICAgRG9tSGVscGVyLnRyYW5zbGF0ZShcbiAgICAgICAgICAgIHRoaXMudGV4dGFyZWEsXG4gICAgICAgICAgICBNYXRoLm1pbihjdXJzb3JQb3NpdGlvbi5wYWdlWCwgdGhpcy50ZXh0YXJlYVNpemUud2lkdGgpLFxuICAgICAgICAgICAgTWF0aC5taW4ocG9zVG9wLCB0aGlzLnRleHRhcmVhU2l6ZS5oZWlnaHQpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdXBkYXRlU2VsZWN0aW9uKHJhbmdlOiBSYW5nZSk6IHZvaWQge1xuICAgICAgICBpZiAocmFuZ2UuaXNFbXB0eSAmJiB0aGlzLnNlbGVjdGlvbkxheWVyLm1hcmtlcikge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25MYXllci5tYXJrZXIgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5sb29wLnNjaGVkdWxlKHsgc2VsZWN0aW9uOiB0cnVlIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKCFyYW5nZS5pc0VtcHR5ICYmICF0aGlzLnNlbGVjdGlvbkxheWVyLm1hcmtlcj8uaXNFcXVhbChyYW5nZSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTGF5ZXIubWFya2VyID0gcmFuZ2U7XG4gICAgICAgICAgICB0aGlzLmxvb3Auc2NoZWR1bGUoeyBzZWxlY3Rpb246IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VycyBhIGZ1bGwgdXBkYXRlIG9mIHRoZSB0ZXh0LCBmb3IgYWxsIHRoZSByb3dzLlxuICAgICAqKi9cbiAgICB1cGRhdGVUZXh0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmxvb3Auc2NoZWR1bGUoeyB0ZXh0OiB0cnVlIH0pO1xuICAgIH1cblxuICAgIHVwZGF0ZUN1cnNvcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sb29wLnNjaGVkdWxlKHsgY3Vyc29yOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIHNjcmVlbiBjb29yZGluYXRlcyB0byB0ZXh0IGNvb3JkaW5hdGVzIGJ5IG1hcHBpbmcgdG8gdGhlIGNsb3Nlc3QgdG9rZW4gbWlkcG9pbnQuXG4gICAgICovXG4gICAgc2NyZWVuVG9UZXh0Q29vcmRpbmF0ZXNVc2luZ01pZHBvaW50KHg6IG51bWJlciwgeTogbnVtYmVyLCByZWN0PzogRE9NUmVjdCk6IEN1cnNvclBhcmFncmFwaCB7XG4gICAgICAgIGNvbnN0IHsgbGVmdCwgdG9wIH0gPSByZWN0ID8/IHRoaXMuY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCB7IHBhcmFncmFwaEluZGV4LCBsaW5lSW5kZXggfSA9IFBvc2l0aW9uSGVscGVyLmdldFBhcmFncmFwaEFuZExpbmVJbmRleEZyb21ZUG9zaXRpb24odGhpcy5zZXNzaW9uLCB5LCB0b3ApO1xuICAgICAgICBjb25zdCB7IGxpbmUsIGluZGV4SW5MaW5lIH0gPSBQb3NpdGlvbkhlbHBlci5tYXBQaXhlbFRvQ2xvc2VzdFRva2VuTWlkcG9pbnQodGhpcy5zZXNzaW9uLCB4LCBwYXJhZ3JhcGhJbmRleCwgbGluZUluZGV4LCBsZWZ0KTtcbiAgICAgICAgcmV0dXJuIFBvc2l0aW9uSGVscGVyLnNjcmVlblRvRG9jdW1lbnQodGhpcy5zZXNzaW9uLCBsaW5lLCBpbmRleEluTGluZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgc2NyZWVuIGNvb3JkaW5hdGVzIHRvIHRleHQgY29vcmRpbmF0ZXMgYnkgbWFwcGluZyB0byB0aGUgbmV4dCB0b2tlbiBib3VuZGFyeS5cbiAgICAgKi9cbiAgICBzY3JlZW5Ub1RleHRDb29yZGluYXRlc1VzaW5nQm91bmRhcnkoeDogbnVtYmVyLCB5OiBudW1iZXIsIHJlY3Q/OiBET01SZWN0KTogQ3Vyc29yUGFyYWdyYXBoIHtcbiAgICAgICAgY29uc3QgeyBsZWZ0LCB0b3AgfSA9IHJlY3QgPz8gdGhpcy5jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHsgcGFyYWdyYXBoSW5kZXgsIGxpbmVJbmRleCB9ID0gUG9zaXRpb25IZWxwZXIuZ2V0UGFyYWdyYXBoQW5kTGluZUluZGV4RnJvbVlQb3NpdGlvbih0aGlzLnNlc3Npb24sIHksIHRvcCk7XG4gICAgICAgIGNvbnN0IHsgbGluZSwgaW5kZXhJbkxpbmUgfSA9IFBvc2l0aW9uSGVscGVyLm1hcFBpeGVsVG9OZXh0VG9rZW5Cb3VuZGFyeSh0aGlzLnNlc3Npb24sIHgsIHBhcmFncmFwaEluZGV4LCBsaW5lSW5kZXgsIGxlZnQpO1xuICAgICAgICByZXR1cm4gUG9zaXRpb25IZWxwZXIuc2NyZWVuVG9Eb2N1bWVudCh0aGlzLnNlc3Npb24sIGxpbmUsIGluZGV4SW5MaW5lKTtcbiAgICB9XG5cbiAgICBzaG93Q3Vyc29yKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmN1cnNvckxheWVyLnNob3dDdXJzb3IoKTtcbiAgICB9XG5cbiAgICBoaWRlQ3Vyc29yKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmN1cnNvckxheWVyLmhpZGVDdXJzb3IoKTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlc3Npb24uZGlzcGxheURhdGEucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGFnZXNDb3VudENoYW5nZWQnLCB0aGlzLnBhZ2VzQ291bnRDaGFuZ2VkSGFuZGxlcik7XG4gICAgICAgIHRoaXMudGV4dExheWVyLmRlc3Ryb3koKTtcbiAgICAgICAgRG9tSGVscGVyLnJlbW92ZUNoaWxkcmVuKHRoaXMuY29udGFpbmVyKTtcbiAgICB9XG5cbiAgICByZW5kZXJGdWxsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRleHRMYXllci51cGRhdGVMaW5lcyh0aGlzLmxheWVyQ29uZmlnKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25MYXllci51cGRhdGUodGhpcy5sYXllckNvbmZpZyk7XG4gICAgICAgIHRoaXMuY3Vyc29yTGF5ZXIudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpO1xuICAgICAgICB0aGlzLm1vdmVUZXh0QXJlYVRvQ3Vyc29yKCk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5vblJlbmRlcmVkKCk7XG4gICAgfVxuXG4gICAgcmVuZGVyVGV4dCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50ZXh0TGF5ZXIudXBkYXRlTGluZXModGhpcy5sYXllckNvbmZpZyk7XG4gICAgICAgIHRoaXMuY3Vyc29yTGF5ZXIuZGV0ZWN0VmlzaWJpbGl0eSgpO1xuICAgIH1cblxuICAgIHJlbmRlckN1cnNvcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdXJzb3JMYXllci51cGRhdGUodGhpcy5sYXllckNvbmZpZyk7XG4gICAgICAgIHRoaXMubW92ZVRleHRBcmVhVG9DdXJzb3IoKTtcbiAgICB9XG5cbiAgICByZW5kZXJTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uTGF5ZXIudXBkYXRlKHRoaXMubGF5ZXJDb25maWcpO1xuICAgICAgICB0aGlzLmN1cnNvckxheWVyLmRldGVjdFZpc2liaWxpdHkoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbXB1dGVMYXllckNvbmZpZygpOiBSZW5kZXJDaGFuZ2VzTW9kZWwge1xuICAgICAgICBjb25zdCBkaXNwbGF5RGF0YSA9IHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YTtcbiAgICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gZGlzcGxheURhdGEuYWxsUGFnZXNIZWlnaHQ7XG4gICAgICAgIGNvbnN0IG1pbkhlaWdodCA9IGRpc3BsYXlEYXRhLm1pbkhlaWdodDtcblxuICAgICAgICBjb25zdCBjaGFuZ2VzID0gbmV3IFJlbmRlckNoYW5nZXNNb2RlbCh7IHNjcm9sbDogdHJ1ZSB9KTtcbiAgICAgICAgdGhpcy5sYXllckNvbmZpZyA9IHtcbiAgICAgICAgICAgIHdpZHRoOiB0aGlzLnNlc3Npb24uZGlzcGxheURhdGEuY29udGVudFdpZHRoICsgZGlzcGxheURhdGEucGFnZU1hcmdpbi5sZWZ0ICsgZGlzcGxheURhdGEucGFnZU1hcmdpbi5yaWdodCxcbiAgICAgICAgICAgIGhlaWdodDogZGlzcGxheURhdGEuZGVmYXVsdFZlcnRpY2FsRGF0YS5jb250ZW50SGVpZ2h0LFxuICAgICAgICAgICAgY29udGVudFJhbmdlOiBuZXcgRGlzdGFuY2VNb2RlbCh7IHN0YXJ0OiAwLCBlbmQ6IGRpc3BsYXlEYXRhLnBhcmFncmFwaHMuZmlsdGVyKHggPT4geC5wYXJhZ3JhcGhTZXR0aW5ncykubGVuZ3RoIC0gMSB9KSxcbiAgICAgICAgICAgIG1pbkhlaWdodCxcbiAgICAgICAgICAgIG1heEhlaWdodCxcbiAgICAgICAgICAgIG9mZnNldDogMCxcbiAgICAgICAgICAgIHNjcm9sbFRvcDogdGhpcy5zZXNzaW9uLnNjcm9sbFRvcFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBjaGFuZ2VzO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGFnZXNDb3VudENoYW5nZWRIYW5kbGVyID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLmxvb3Auc2NoZWR1bGUoeyBsaW5lczogdHJ1ZSwgc2VsZWN0aW9uOiB0cnVlIH0pO1xuICAgIH07XG5cbiAgICBwcml2YXRlIGNyZWF0ZUNvbnRlbnRDb250YWluZXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29udGVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB0aGlzLmNvbnRlbnQuY2xhc3NOYW1lID0gJ25vZGVyLWNvbnRlbnQnO1xuXG4gICAgICAgIGlmICh0aGlzLmNvbnRhaW5lci5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5maXJzdENoaWxkLmFwcGVuZENoaWxkKHRoaXMuY29udGVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmNvbnRlbnQpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
@@ -1,185 +0,0 @@
1
- import { BreakHelper } from '../gadgets/page-break/break.helper';
2
- import { ContentStyleHelper } from '../content/helpers/content-style.helper';
3
- import { DistanceModel } from '../execution/distance.model';
4
- import { DomHelper } from '../execution/helpers/dom.helper';
5
- import { FormatExtModel } from '../content/display-data/format-ext.model';
6
- import { HYPERLINK_HEADING_STYLE_ID, NEW_LINE_MARKUP } from '../content/constants/editor.const';
7
- import { ScalingHelper } from '../content/helpers/scaling.helper';
8
- import { TextStyleModel } from '../../models/generated/text-style.model';
9
- export class RenderingHelper {
10
- static createLineElement(lineInfo, numberingOffsetLeft, scalingRatio) {
11
- let lineEl = document.createElement('div');
12
- lineEl.className = 'noder-line';
13
- if (lineInfo) {
14
- const paddingLeft = ScalingHelper.scale(lineInfo.paddingLeft - numberingOffsetLeft, scalingRatio);
15
- const marginLeft = paddingLeft < 0 ? paddingLeft : 0;
16
- lineEl.setAttribute('style',
17
- // eslint-disable-next-line prettier/prettier
18
- `padding-left:${paddingLeft}px;height:${lineInfo.height + lineInfo.offsetAfter}px;margin-top:${lineInfo.offsetBefore}px;margin-bottom:${lineInfo.endPageOffset}px;margin-left:${marginLeft}px;background-color:${lineInfo.backgroundColor}`);
19
- lineEl.setAttribute('screen-index', `${lineInfo.screenLine}`);
20
- }
21
- return lineEl;
22
- }
23
- static renderContentSimpleLine(domContent, formatsExt, rowDistance, customContentService, customComponents, breaks = []) {
24
- const valueFragment = DomHelper.createFragment(domContent.currentElement);
25
- for (const formatExt of formatsExt) {
26
- const fragmentDocumentStartIndex = rowDistance.start > formatExt.startIndex ? rowDistance.start : formatExt.startIndex;
27
- const fragmentDocumentEndIndex = formatExt.endIndex > rowDistance.end ? rowDistance.end : formatExt.endIndex;
28
- const fragmentDocumentDistance = new DistanceModel({ start: fragmentDocumentStartIndex, end: fragmentDocumentEndIndex });
29
- const fragmentStartIndex = rowDistance.start > formatExt.startIndex ? rowDistance.start - formatExt.startIndex : 0;
30
- const fragmentEndIndex = formatExt.endIndex > rowDistance.end ? rowDistance.end - formatExt.startIndex : formatExt.endIndex - formatExt.startIndex;
31
- const fragmentDistance = new DistanceModel({ start: fragmentStartIndex, end: fragmentEndIndex });
32
- this.renderFormatContent(valueFragment, formatExt, fragmentDocumentDistance, fragmentDistance, customContentService, customComponents, breaks);
33
- }
34
- domContent.parentNode.appendChild(valueFragment);
35
- }
36
- static renderContentWrappedLine(domContent, splits, currentParagraph, formatsExt, distance, customContentService, customComponents, scalingRatio, breaks = []) {
37
- let splitIndex = 0;
38
- const numberingOffsetLeft = currentParagraph.numberingData.numberingId === null
39
- ? 0
40
- : currentParagraph.numberingData.width + currentParagraph.numberingData.paddingLeft;
41
- let lineEl = RenderingHelper.createLineElement(currentParagraph.textLinesInfo[splitIndex], numberingOffsetLeft, scalingRatio);
42
- domContent.parentNode.appendChild(lineEl);
43
- const valueFragment = DomHelper.createFragment(domContent.currentElement);
44
- let paragraphChars = 0;
45
- let split = splits[splitIndex];
46
- for (const formatExt of formatsExt) {
47
- const beforeSplitIndex = split ? split - 1 : distance.end - distance.start;
48
- const beforeSplitDocumentIndex = distance.start + beforeSplitIndex;
49
- const fragmentDocumentStartIndex = distance.start + paragraphChars;
50
- const fragmentDocumentEndIndex = formatExt.endIndex < beforeSplitDocumentIndex ? formatExt.endIndex : beforeSplitDocumentIndex;
51
- const fragmentDocumentDistance = new DistanceModel({ start: fragmentDocumentStartIndex, end: fragmentDocumentEndIndex });
52
- const fragmentStartIndex = distance.start > formatExt.startIndex ? distance.start - formatExt.startIndex : 0;
53
- const fragmentEndIndex = formatExt.endIndex < beforeSplitDocumentIndex
54
- ? fragmentStartIndex + formatExt.endIndex - formatExt.startIndex
55
- : distance.start + beforeSplitIndex - formatExt.startIndex;
56
- const fragmentDistance = new DistanceModel({ start: fragmentStartIndex, end: fragmentEndIndex });
57
- paragraphChars += this.renderFormatContent(valueFragment, formatExt, fragmentDocumentDistance, fragmentDistance, customContentService, customComponents, breaks);
58
- lineEl.appendChild(valueFragment);
59
- let nextFragmentStartIndex = fragmentEndIndex + 1;
60
- while (paragraphChars === split && nextFragmentStartIndex !== distance.end) {
61
- split = splits[++splitIndex];
62
- const nextFragmentDocumentStartIndex = fragmentDocumentStartIndex + nextFragmentStartIndex - fragmentStartIndex;
63
- lineEl = RenderingHelper.createLineElement(currentParagraph.textLinesInfo[splitIndex], numberingOffsetLeft, scalingRatio);
64
- if (split > formatExt.endIndex) {
65
- const nextFragmentEndIndex = formatExt.content.length - 1;
66
- const nextFragmentDistance = new DistanceModel({ start: nextFragmentStartIndex, end: nextFragmentEndIndex });
67
- const nextFragmentDocumentEndIndex = nextFragmentDocumentStartIndex + nextFragmentEndIndex - nextFragmentStartIndex;
68
- const nextFragmentDocumentDistance = new DistanceModel({
69
- start: nextFragmentDocumentStartIndex,
70
- end: nextFragmentDocumentEndIndex
71
- });
72
- paragraphChars += this.renderFormatContent(valueFragment, formatExt, nextFragmentDocumentDistance, nextFragmentDistance, customContentService, customComponents, breaks);
73
- lineEl.appendChild(valueFragment);
74
- domContent.parentNode.appendChild(lineEl);
75
- break;
76
- }
77
- const textIndexLength = RenderingHelper.getTextIndexLengthForInsert(formatExt, nextFragmentDocumentStartIndex, distance, split, paragraphChars);
78
- const nextFragmentDocumentEndIndex = nextFragmentDocumentStartIndex + textIndexLength;
79
- const nextFragmentEndIndex = nextFragmentStartIndex + textIndexLength;
80
- const nextFragmentDistance = new DistanceModel({ start: nextFragmentStartIndex, end: nextFragmentEndIndex });
81
- const nextFragmentDocumentDistance = new DistanceModel({
82
- start: nextFragmentDocumentStartIndex,
83
- end: nextFragmentDocumentEndIndex
84
- });
85
- const renderedChars = this.renderFormatContent(valueFragment, formatExt, nextFragmentDocumentDistance, nextFragmentDistance, customContentService, customComponents, breaks);
86
- lineEl.appendChild(valueFragment);
87
- domContent.parentNode.appendChild(lineEl);
88
- nextFragmentStartIndex += renderedChars;
89
- paragraphChars += renderedChars;
90
- }
91
- }
92
- }
93
- static renderNumberingMarker(paragraph, layerElement, scalingRatio) {
94
- const markerHeight = paragraph.numberingData.height;
95
- const markerLineInfo = {
96
- paddingLeft: paragraph.numberingData.paddingLeft,
97
- height: markerHeight,
98
- offsetBefore: 0,
99
- firstLinePageOffset: 0,
100
- endPageOffset: 0,
101
- offsetAfter: 0,
102
- screenLine: 0
103
- };
104
- const numberingLineEl = this.createLineElement(markerLineInfo, 0, scalingRatio);
105
- const markerFragment = DomHelper.createFragment(layerElement);
106
- const marker = paragraph.numberingData.marker;
107
- const markerExtModel = new FormatExtModel({
108
- textStyle: paragraph.numberingData.markerTextStyle,
109
- content: marker
110
- });
111
- this.renderText(markerFragment, markerExtModel, marker);
112
- numberingLineEl.appendChild(markerFragment);
113
- return numberingLineEl;
114
- }
115
- static createDivContainer(className) {
116
- const containerElement = document.createElement('div');
117
- containerElement.className = className;
118
- return containerElement;
119
- }
120
- static renderFormatContent(fragment, formatExt, fragmentDocumentDistance, fragmentDistance, customContentService, customComponents, breaks) {
121
- let textFragment = formatExt.content.substring(fragmentDistance.start, fragmentDistance.end + 1);
122
- if (!textFragment) {
123
- return 0;
124
- }
125
- const textFragmentWithoutBreaks = BreakHelper.removeBreakMarker(breaks, textFragment, fragmentDocumentDistance.start);
126
- if (customContentService.isFragmentContainComponent(customComponents, textFragment, fragmentDocumentDistance)) {
127
- this.renderTextWithCustomContent(fragment, formatExt, fragmentDocumentDistance, textFragmentWithoutBreaks, customContentService, customComponents);
128
- }
129
- else {
130
- RenderingHelper.renderText(fragment, formatExt, textFragmentWithoutBreaks);
131
- }
132
- return textFragment.length;
133
- }
134
- static renderTextWithCustomContent(fragment, formatExt, fragmentDocumentDistance, textFragment, customContentService, customComponents) {
135
- const components = customContentService.getComponents(customComponents, fragmentDocumentDistance);
136
- if (!components.length) {
137
- RenderingHelper.renderText(fragment, formatExt, textFragment);
138
- return;
139
- }
140
- let newTextFragmentStartIndex = fragmentDocumentDistance.start;
141
- let nextTextFragment = textFragment;
142
- for (const component of components) {
143
- const textBeforeElement = nextTextFragment.substring(0, component.instance.insertIndex - newTextFragmentStartIndex);
144
- nextTextFragment = nextTextFragment.substring(textBeforeElement.length + 1, nextTextFragment.length);
145
- newTextFragmentStartIndex = newTextFragmentStartIndex + (textBeforeElement.length ? textBeforeElement.length + 1 : 1);
146
- if (textBeforeElement.length) {
147
- RenderingHelper.renderText(fragment, formatExt, textBeforeElement);
148
- }
149
- this.attachComponent(fragment, component, customContentService);
150
- }
151
- if (nextTextFragment.length) {
152
- RenderingHelper.renderText(fragment, formatExt, nextTextFragment);
153
- }
154
- }
155
- static renderText(fragment, formatExt, textFragment) {
156
- const span = document.createElement('span');
157
- const textStyle = new TextStyleModel({ ...formatExt.textStyle });
158
- if (textFragment === NEW_LINE_MARKUP) {
159
- span.className = 'paragraph-symbol';
160
- }
161
- if (textStyle.headingStyleId === HYPERLINK_HEADING_STYLE_ID) {
162
- span.classList.add('hyperlink');
163
- span.onmousemove = event => {
164
- if (event.ctrlKey) {
165
- span.classList.add('hyperlink-hover');
166
- }
167
- else {
168
- span.classList.remove('hyperlink-hover');
169
- }
170
- };
171
- span.onmouseleave = () => span.classList.remove('hyperlink-hover');
172
- }
173
- span.textContent = textFragment;
174
- span.setAttribute('style', ContentStyleHelper.getTextStylesString(textStyle));
175
- fragment.appendChild(span);
176
- }
177
- static getTextIndexLengthForInsert(formatExt, fragmentDocumentStartIndex, paragraphDistance, split, paragraphChars) {
178
- const maxLength = Math.max(paragraphDistance.end - paragraphChars - paragraphDistance.start, 0);
179
- return (Math.min(split - paragraphChars || Number.MAX_VALUE, maxLength, formatExt.endIndex - fragmentDocumentStartIndex + 1, formatExt.content.length) - 1);
180
- }
181
- static attachComponent(fragment, component, customContentService) {
182
- customContentService.componentService.attachComponent(fragment, component);
183
- }
184
- }
185
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyaW5nLmhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1ub2Rlci9zcmMvbGliL2VkaXRvci9kaXNwbGF5L3JlbmRlcmluZy5oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRWpFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRTdFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDNUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUdoRyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRXpFLE1BQU0sT0FBTyxlQUFlO0lBQ3hCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxRQUFzQixFQUFFLG1CQUEyQixFQUFFLFlBQW9CO1FBQzlGLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0MsTUFBTSxDQUFDLFNBQVMsR0FBRyxZQUFZLENBQUM7UUFFaEMsSUFBSSxRQUFRLEVBQUU7WUFDVixNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEdBQUcsbUJBQW1CLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDbEcsTUFBTSxVQUFVLEdBQUcsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFckQsTUFB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LE1BQU0sQ0FBQywyQkFBMkIsQ0FDdEMsU0FBeUIsRUFDekIsMEJBQWtDLEVBQ2xDLGlCQUFnQyxFQUNoQyxLQUFhLEVBQ2IsY0FBc0I7UUFFdEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEdBQUcsY0FBYyxHQUFHLGlCQUFpQixDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNoRyxPQUFPLENBQ0gsSUFBSSxDQUFDLEdBQUcsQ0FDSixLQUFLLEdBQUcsY0FBYyxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQzFDLFNBQVMsRUFDVCxTQUFTLENBQUMsUUFBUSxHQUFHLDBCQUEwQixHQUFHLENBQUMsRUFDbkQsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQzNCLEdBQUcsQ0FBQyxDQUNSLENBQUM7SUFDTixDQUFDO0lBRVMsTUFBTSxDQUFDLGVBQWUsQ0FDNUIsUUFBMEIsRUFDMUIsU0FBZ0MsRUFDaEMsb0JBQTBDO1FBRTFDLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDL0UsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEJyZWFrSGVscGVyIH0gZnJvbSAnLi4vZ2FkZ2V0cy9wYWdlLWJyZWFrL2JyZWFrLmhlbHBlcic7XG5pbXBvcnQgeyBCcmVha01vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9icmVhay5tb2RlbCc7XG5pbXBvcnQgeyBDb250ZW50U3R5bGVIZWxwZXIgfSBmcm9tICcuLi9jb250ZW50L2hlbHBlcnMvY29udGVudC1zdHlsZS5oZWxwZXInO1xuaW1wb3J0IHsgQ3VzdG9tQ29udGVudFNlcnZpY2UgfSBmcm9tICcuLi9jb21wb25lbnRzL3NoYXJlZC9zZXJ2aWNlcy9jdXN0b20tY29udGVudC5zZXJ2aWNlJztcbmltcG9ydCB7IERpc3RhbmNlTW9kZWwgfSBmcm9tICcuLi9leGVjdXRpb24vZGlzdGFuY2UubW9kZWwnO1xuaW1wb3J0IHsgRG9tSGVscGVyIH0gZnJvbSAnLi4vZXhlY3V0aW9uL2hlbHBlcnMvZG9tLmhlbHBlcic7XG5pbXBvcnQgeyBGb3JtYXRFeHRNb2RlbCB9IGZyb20gJy4uL2NvbnRlbnQvZGlzcGxheS1kYXRhL2Zvcm1hdC1leHQubW9kZWwnO1xuaW1wb3J0IHsgSFlQRVJMSU5LX0hFQURJTkdfU1RZTEVfSUQsIE5FV19MSU5FX01BUktVUCB9IGZyb20gJy4uL2NvbnRlbnQvY29uc3RhbnRzL2VkaXRvci5jb25zdCc7XG5pbXBvcnQgeyBJQ3VzdG9tQ29tcG9uZW50cyB9IGZyb20gJy4uL2NvbXBvbmVudHMvc2hhcmVkL2N1c3RvbS1jb21wb25lbnRzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQYXJhZ3JhcGggfSBmcm9tICcuLi9jb250ZW50L2Rpc3BsYXktZGF0YS9wYXJhZ3JhcGgnO1xuaW1wb3J0IHsgU2NhbGluZ0hlbHBlciB9IGZyb20gJy4uL2NvbnRlbnQvaGVscGVycy9zY2FsaW5nLmhlbHBlcic7XG5pbXBvcnQgeyBUZXh0TGluZUluZm8gfSBmcm9tICcuLi9jb250ZW50L2Rpc3BsYXktZGF0YS90ZXh0LWxpbmUtaW5mbyc7XG5pbXBvcnQgeyBUZXh0U3R5bGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvdGV4dC1zdHlsZS5tb2RlbCc7XG5cbmV4cG9ydCBjbGFzcyBSZW5kZXJpbmdIZWxwZXIge1xuICAgIHN0YXRpYyBjcmVhdGVMaW5lRWxlbWVudChsaW5lSW5mbzogVGV4dExpbmVJbmZvLCBudW1iZXJpbmdPZmZzZXRMZWZ0OiBudW1iZXIsIHNjYWxpbmdSYXRpbzogbnVtYmVyKTogSFRNTEVsZW1lbnQge1xuICAgICAgICBsZXQgbGluZUVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGxpbmVFbC5jbGFzc05hbWUgPSAnbm9kZXItbGluZSc7XG5cbiAgICAgICAgaWYgKGxpbmVJbmZvKSB7XG4gICAgICAgICAgICBjb25zdCBwYWRkaW5nTGVmdCA9IFNjYWxpbmdIZWxwZXIuc2NhbGUobGluZUluZm8ucGFkZGluZ0xlZnQgLSBudW1iZXJpbmdPZmZzZXRMZWZ0LCBzY2FsaW5nUmF0aW8pO1xuICAgICAgICAgICAgY29uc3QgbWFyZ2luTGVmdCA9IHBhZGRpbmdMZWZ0IDwgMCA/IHBhZGRpbmdMZWZ0IDogMDtcblxuICAgICAgICAgICAgbGluZUVsLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAnc3R5bGUnLFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmV0dGllci9wcmV0dGllclxuICAgICAgICAgICAgICAgIGBwYWRkaW5nLWxlZnQ6JHtwYWRkaW5nTGVmdH1weDtoZWlnaHQ6JHtsaW5lSW5mby5oZWlnaHQgKyBsaW5lSW5mby5vZmZzZXRBZnRlcn1weDttYXJnaW4tdG9wOiR7XG4gICAgICAgICAgICAgICAgICAgIGxpbmVJbmZvLm9mZnNldEJlZm9yZVxuICAgICAgICAgICAgICAgIH1weDttYXJnaW4tYm90dG9tOiR7bGluZUluZm8uZW5kUGFnZU9mZnNldH1weDttYXJnaW4tbGVmdDoke21hcmdpbkxlZnR9cHg7YmFja2dyb3VuZC1jb2xvcjoke2xpbmVJbmZvLmJhY2tncm91bmRDb2xvcn1gXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbGluZUVsLnNldEF0dHJpYnV0ZSgnc2NyZWVuLWluZGV4JywgYCR7bGluZUluZm8uc2NyZWVuTGluZX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsaW5lRWw7XG4gICAgfVxuXG4gICAgc3RhdGljIHJlbmRlckNvbnRlbnRTaW1wbGVMaW5lKFxuICAgICAgICBkb21Db250ZW50OiB7IGN1cnJlbnRFbGVtZW50OiBIVE1MRWxlbWVudDsgcGFyZW50Tm9kZTogTm9kZSB9LFxuICAgICAgICBmb3JtYXRzRXh0OiBGb3JtYXRFeHRNb2RlbFtdLFxuICAgICAgICByb3dEaXN0YW5jZTogRGlzdGFuY2VNb2RlbCxcbiAgICAgICAgY3VzdG9tQ29udGVudFNlcnZpY2U6IEN1c3RvbUNvbnRlbnRTZXJ2aWNlLFxuICAgICAgICBjdXN0b21Db21wb25lbnRzOiBJQ3VzdG9tQ29tcG9uZW50cyxcbiAgICAgICAgYnJlYWtzOiBCcmVha01vZGVsW10gPSBbXVxuICAgICk6IHZvaWQge1xuICAgICAgICBjb25zdCB2YWx1ZUZyYWdtZW50ID0gRG9tSGVscGVyLmNyZWF0ZUZyYWdtZW50KGRvbUNvbnRlbnQuY3VycmVudEVsZW1lbnQpO1xuICAgICAgICBmb3IgKGNvbnN0IGZvcm1hdEV4dCBvZiBmb3JtYXRzRXh0KSB7XG4gICAgICAgICAgICBjb25zdCBmcmFnbWVudERvY3VtZW50U3RhcnRJbmRleCA9IHJvd0Rpc3RhbmNlLnN0YXJ0ID4gZm9ybWF0RXh0LnN0YXJ0SW5kZXggPyByb3dEaXN0YW5jZS5zdGFydCA6IGZvcm1hdEV4dC5zdGFydEluZGV4O1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnREb2N1bWVudEVuZEluZGV4ID0gZm9ybWF0RXh0LmVuZEluZGV4ID4gcm93RGlzdGFuY2UuZW5kID8gcm93RGlzdGFuY2UuZW5kIDogZm9ybWF0RXh0LmVuZEluZGV4O1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnREb2N1bWVudERpc3RhbmNlID0gbmV3IERpc3RhbmNlTW9kZWwoeyBzdGFydDogZnJhZ21lbnREb2N1bWVudFN0YXJ0SW5kZXgsIGVuZDogZnJhZ21lbnREb2N1bWVudEVuZEluZGV4IH0pO1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnRTdGFydEluZGV4ID0gcm93RGlzdGFuY2Uuc3RhcnQgPiBmb3JtYXRFeHQuc3RhcnRJbmRleCA/IHJvd0Rpc3RhbmNlLnN0YXJ0IC0gZm9ybWF0RXh0LnN0YXJ0SW5kZXggOiAwO1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnRFbmRJbmRleCA9XG4gICAgICAgICAgICAgICAgZm9ybWF0RXh0LmVuZEluZGV4ID4gcm93RGlzdGFuY2UuZW5kID8gcm93RGlzdGFuY2UuZW5kIC0gZm9ybWF0RXh0LnN0YXJ0SW5kZXggOiBmb3JtYXRFeHQuZW5kSW5kZXggLSBmb3JtYXRFeHQuc3RhcnRJbmRleDtcbiAgICAgICAgICAgIGNvbnN0IGZyYWdtZW50RGlzdGFuY2UgPSBuZXcgRGlzdGFuY2VNb2RlbCh7IHN0YXJ0OiBmcmFnbWVudFN0YXJ0SW5kZXgsIGVuZDogZnJhZ21lbnRFbmRJbmRleCB9KTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyRm9ybWF0Q29udGVudChcbiAgICAgICAgICAgICAgICB2YWx1ZUZyYWdtZW50LFxuICAgICAgICAgICAgICAgIGZvcm1hdEV4dCxcbiAgICAgICAgICAgICAgICBmcmFnbWVudERvY3VtZW50RGlzdGFuY2UsXG4gICAgICAgICAgICAgICAgZnJhZ21lbnREaXN0YW5jZSxcbiAgICAgICAgICAgICAgICBjdXN0b21Db250ZW50U2VydmljZSxcbiAgICAgICAgICAgICAgICBjdXN0b21Db21wb25lbnRzLFxuICAgICAgICAgICAgICAgIGJyZWFrc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRvbUNvbnRlbnQucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh2YWx1ZUZyYWdtZW50KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcmVuZGVyQ29udGVudFdyYXBwZWRMaW5lKFxuICAgICAgICBkb21Db250ZW50OiB7IGN1cnJlbnRFbGVtZW50OiBIVE1MRWxlbWVudDsgcGFyZW50Tm9kZTogTm9kZSB9LFxuICAgICAgICBzcGxpdHM6IG51bWJlcltdLFxuICAgICAgICBjdXJyZW50UGFyYWdyYXBoOiBQYXJhZ3JhcGgsXG4gICAgICAgIGZvcm1hdHNFeHQ6IEZvcm1hdEV4dE1vZGVsW10sXG4gICAgICAgIGRpc3RhbmNlOiBEaXN0YW5jZU1vZGVsLFxuICAgICAgICBjdXN0b21Db250ZW50U2VydmljZTogQ3VzdG9tQ29udGVudFNlcnZpY2UsXG4gICAgICAgIGN1c3RvbUNvbXBvbmVudHM6IElDdXN0b21Db21wb25lbnRzLFxuICAgICAgICBzY2FsaW5nUmF0aW86IG51bWJlcixcbiAgICAgICAgYnJlYWtzOiBCcmVha01vZGVsW10gPSBbXVxuICAgICk6IHZvaWQge1xuICAgICAgICBsZXQgc3BsaXRJbmRleCA9IDA7XG4gICAgICAgIGNvbnN0IG51bWJlcmluZ09mZnNldExlZnQgPVxuICAgICAgICAgICAgY3VycmVudFBhcmFncmFwaC5udW1iZXJpbmdEYXRhLm51bWJlcmluZ0lkID09PSBudWxsXG4gICAgICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICAgICAgOiBjdXJyZW50UGFyYWdyYXBoLm51bWJlcmluZ0RhdGEud2lkdGggKyBjdXJyZW50UGFyYWdyYXBoLm51bWJlcmluZ0RhdGEucGFkZGluZ0xlZnQ7XG4gICAgICAgIGxldCBsaW5lRWwgPSBSZW5kZXJpbmdIZWxwZXIuY3JlYXRlTGluZUVsZW1lbnQoY3VycmVudFBhcmFncmFwaC50ZXh0TGluZXNJbmZvW3NwbGl0SW5kZXhdLCBudW1iZXJpbmdPZmZzZXRMZWZ0LCBzY2FsaW5nUmF0aW8pO1xuICAgICAgICBkb21Db250ZW50LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQobGluZUVsKTtcblxuICAgICAgICBjb25zdCB2YWx1ZUZyYWdtZW50ID0gRG9tSGVscGVyLmNyZWF0ZUZyYWdtZW50KGRvbUNvbnRlbnQuY3VycmVudEVsZW1lbnQpO1xuICAgICAgICBsZXQgcGFyYWdyYXBoQ2hhcnMgPSAwO1xuICAgICAgICBsZXQgc3BsaXQgPSBzcGxpdHNbc3BsaXRJbmRleF07XG4gICAgICAgIGZvciAoY29uc3QgZm9ybWF0RXh0IG9mIGZvcm1hdHNFeHQpIHtcbiAgICAgICAgICAgIGNvbnN0IGJlZm9yZVNwbGl0SW5kZXggPSBzcGxpdCA/IHNwbGl0IC0gMSA6IGRpc3RhbmNlLmVuZCAtIGRpc3RhbmNlLnN0YXJ0O1xuICAgICAgICAgICAgY29uc3QgYmVmb3JlU3BsaXREb2N1bWVudEluZGV4ID0gZGlzdGFuY2Uuc3RhcnQgKyBiZWZvcmVTcGxpdEluZGV4O1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnREb2N1bWVudFN0YXJ0SW5kZXggPSBkaXN0YW5jZS5zdGFydCArIHBhcmFncmFwaENoYXJzO1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnREb2N1bWVudEVuZEluZGV4ID0gZm9ybWF0RXh0LmVuZEluZGV4IDwgYmVmb3JlU3BsaXREb2N1bWVudEluZGV4ID8gZm9ybWF0RXh0LmVuZEluZGV4IDogYmVmb3JlU3BsaXREb2N1bWVudEluZGV4O1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnREb2N1bWVudERpc3RhbmNlID0gbmV3IERpc3RhbmNlTW9kZWwoeyBzdGFydDogZnJhZ21lbnREb2N1bWVudFN0YXJ0SW5kZXgsIGVuZDogZnJhZ21lbnREb2N1bWVudEVuZEluZGV4IH0pO1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnRTdGFydEluZGV4ID0gZGlzdGFuY2Uuc3RhcnQgPiBmb3JtYXRFeHQuc3RhcnRJbmRleCA/IGRpc3RhbmNlLnN0YXJ0IC0gZm9ybWF0RXh0LnN0YXJ0SW5kZXggOiAwO1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnRFbmRJbmRleCA9XG4gICAgICAgICAgICAgICAgZm9ybWF0RXh0LmVuZEluZGV4IDwgYmVmb3JlU3BsaXREb2N1bWVudEluZGV4XG4gICAgICAgICAgICAgICAgICAgID8gZnJhZ21lbnRTdGFydEluZGV4ICsgZm9ybWF0RXh0LmVuZEluZGV4IC0gZm9ybWF0RXh0LnN0YXJ0SW5kZXhcbiAgICAgICAgICAgICAgICAgICAgOiBkaXN0YW5jZS5zdGFydCArIGJlZm9yZVNwbGl0SW5kZXggLSBmb3JtYXRFeHQuc3RhcnRJbmRleDtcbiAgICAgICAgICAgIGNvbnN0IGZyYWdtZW50RGlzdGFuY2UgPSBuZXcgRGlzdGFuY2VNb2RlbCh7IHN0YXJ0OiBmcmFnbWVudFN0YXJ0SW5kZXgsIGVuZDogZnJhZ21lbnRFbmRJbmRleCB9KTtcbiAgICAgICAgICAgIHBhcmFncmFwaENoYXJzICs9IHRoaXMucmVuZGVyRm9ybWF0Q29udGVudChcbiAgICAgICAgICAgICAgICB2YWx1ZUZyYWdtZW50LFxuICAgICAgICAgICAgICAgIGZvcm1hdEV4dCxcbiAgICAgICAgICAgICAgICBmcmFnbWVudERvY3VtZW50RGlzdGFuY2UsXG4gICAgICAgICAgICAgICAgZnJhZ21lbnREaXN0YW5jZSxcbiAgICAgICAgICAgICAgICBjdXN0b21Db250ZW50U2VydmljZSxcbiAgICAgICAgICAgICAgICBjdXN0b21Db21wb25lbnRzLFxuICAgICAgICAgICAgICAgIGJyZWFrc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGxpbmVFbC5hcHBlbmRDaGlsZCh2YWx1ZUZyYWdtZW50KTtcbiAgICAgICAgICAgIGxldCBuZXh0RnJhZ21lbnRTdGFydEluZGV4ID0gZnJhZ21lbnRFbmRJbmRleCArIDE7XG4gICAgICAgICAgICB3aGlsZSAocGFyYWdyYXBoQ2hhcnMgPT09IHNwbGl0ICYmIG5leHRGcmFnbWVudFN0YXJ0SW5kZXggIT09IGRpc3RhbmNlLmVuZCkge1xuICAgICAgICAgICAgICAgIHNwbGl0ID0gc3BsaXRzWysrc3BsaXRJbmRleF07XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dEZyYWdtZW50RG9jdW1lbnRTdGFydEluZGV4ID0gZnJhZ21lbnREb2N1bWVudFN0YXJ0SW5kZXggKyBuZXh0RnJhZ21lbnRTdGFydEluZGV4IC0gZnJhZ21lbnRTdGFydEluZGV4O1xuICAgICAgICAgICAgICAgIGxpbmVFbCA9IFJlbmRlcmluZ0hlbHBlci5jcmVhdGVMaW5lRWxlbWVudChjdXJyZW50UGFyYWdyYXBoLnRleHRMaW5lc0luZm9bc3BsaXRJbmRleF0sIG51bWJlcmluZ09mZnNldExlZnQsIHNjYWxpbmdSYXRpbyk7XG4gICAgICAgICAgICAgICAgaWYgKHNwbGl0ID4gZm9ybWF0RXh0LmVuZEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRGcmFnbWVudEVuZEluZGV4ID0gZm9ybWF0RXh0LmNvbnRlbnQubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dEZyYWdtZW50RGlzdGFuY2UgPSBuZXcgRGlzdGFuY2VNb2RlbCh7IHN0YXJ0OiBuZXh0RnJhZ21lbnRTdGFydEluZGV4LCBlbmQ6IG5leHRGcmFnbWVudEVuZEluZGV4IH0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0RnJhZ21lbnREb2N1bWVudEVuZEluZGV4ID0gbmV4dEZyYWdtZW50RG9jdW1lbnRTdGFydEluZGV4ICsgbmV4dEZyYWdtZW50RW5kSW5kZXggLSBuZXh0RnJhZ21lbnRTdGFydEluZGV4O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0RnJhZ21lbnREb2N1bWVudERpc3RhbmNlID0gbmV3IERpc3RhbmNlTW9kZWwoe1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IG5leHRGcmFnbWVudERvY3VtZW50U3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogbmV4dEZyYWdtZW50RG9jdW1lbnRFbmRJbmRleFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcGFyYWdyYXBoQ2hhcnMgKz0gdGhpcy5yZW5kZXJGb3JtYXRDb250ZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVGcmFnbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdEV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRGcmFnbWVudERvY3VtZW50RGlzdGFuY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0RnJhZ21lbnREaXN0YW5jZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbUNvbnRlbnRTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tQ29tcG9uZW50cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrc1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBsaW5lRWwuYXBwZW5kQ2hpbGQodmFsdWVGcmFnbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIGRvbUNvbnRlbnQucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChsaW5lRWwpO1xuXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHRleHRJbmRleExlbmd0aCA9IFJlbmRlcmluZ0hlbHBlci5nZXRUZXh0SW5kZXhMZW5ndGhGb3JJbnNlcnQoXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdEV4dCxcbiAgICAgICAgICAgICAgICAgICAgbmV4dEZyYWdtZW50RG9jdW1lbnRTdGFydEluZGV4LFxuICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZSxcbiAgICAgICAgICAgICAgICAgICAgc3BsaXQsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFncmFwaENoYXJzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0RnJhZ21lbnREb2N1bWVudEVuZEluZGV4ID0gbmV4dEZyYWdtZW50RG9jdW1lbnRTdGFydEluZGV4ICsgdGV4dEluZGV4TGVuZ3RoO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHRGcmFnbWVudEVuZEluZGV4ID0gbmV4dEZyYWdtZW50U3RhcnRJbmRleCArIHRleHRJbmRleExlbmd0aDtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0RnJhZ21lbnREaXN0YW5jZSA9IG5ldyBEaXN0YW5jZU1vZGVsKHsgc3RhcnQ6IG5leHRGcmFnbWVudFN0YXJ0SW5kZXgsIGVuZDogbmV4dEZyYWdtZW50RW5kSW5kZXggfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dEZyYWdtZW50RG9jdW1lbnREaXN0YW5jZSA9IG5ldyBEaXN0YW5jZU1vZGVsKHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IG5leHRGcmFnbWVudERvY3VtZW50U3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgZW5kOiBuZXh0RnJhZ21lbnREb2N1bWVudEVuZEluZGV4XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVuZGVyZWRDaGFycyA9IHRoaXMucmVuZGVyRm9ybWF0Q29udGVudChcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVGcmFnbWVudCxcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0RXh0LFxuICAgICAgICAgICAgICAgICAgICBuZXh0RnJhZ21lbnREb2N1bWVudERpc3RhbmNlLFxuICAgICAgICAgICAgICAgICAgICBuZXh0RnJhZ21lbnREaXN0YW5jZSxcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tQ29udGVudFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbUNvbXBvbmVudHMsXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgbGluZUVsLmFwcGVuZENoaWxkKHZhbHVlRnJhZ21lbnQpO1xuICAgICAgICAgICAgICAgIGRvbUNvbnRlbnQucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChsaW5lRWwpO1xuICAgICAgICAgICAgICAgIG5leHRGcmFnbWVudFN0YXJ0SW5kZXggKz0gcmVuZGVyZWRDaGFycztcbiAgICAgICAgICAgICAgICBwYXJhZ3JhcGhDaGFycyArPSByZW5kZXJlZENoYXJzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIHJlbmRlck51bWJlcmluZ01hcmtlcihwYXJhZ3JhcGg6IFBhcmFncmFwaCwgbGF5ZXJFbGVtZW50OiBIVE1MRWxlbWVudCwgc2NhbGluZ1JhdGlvOiBudW1iZXIpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IG1hcmtlckhlaWdodCA9IHBhcmFncmFwaC5udW1iZXJpbmdEYXRhLmhlaWdodDtcblxuICAgICAgICBjb25zdCBtYXJrZXJMaW5lSW5mbyA9IHtcbiAgICAgICAgICAgIHBhZGRpbmdMZWZ0OiBwYXJhZ3JhcGgubnVtYmVyaW5nRGF0YS5wYWRkaW5nTGVmdCxcbiAgICAgICAgICAgIGhlaWdodDogbWFya2VySGVpZ2h0LFxuICAgICAgICAgICAgb2Zmc2V0QmVmb3JlOiAwLFxuICAgICAgICAgICAgZmlyc3RMaW5lUGFnZU9mZnNldDogMCxcbiAgICAgICAgICAgIGVuZFBhZ2VPZmZzZXQ6IDAsXG4gICAgICAgICAgICBvZmZzZXRBZnRlcjogMCxcbiAgICAgICAgICAgIHNjcmVlbkxpbmU6IDBcbiAgICAgICAgfSBhcyBUZXh0TGluZUluZm87XG4gICAgICAgIGNvbnN0IG51bWJlcmluZ0xpbmVFbCA9IHRoaXMuY3JlYXRlTGluZUVsZW1lbnQobWFya2VyTGluZUluZm8sIDAsIHNjYWxpbmdSYXRpbyk7XG5cbiAgICAgICAgY29uc3QgbWFya2VyRnJhZ21lbnQgPSBEb21IZWxwZXIuY3JlYXRlRnJhZ21lbnQobGF5ZXJFbGVtZW50KTtcbiAgICAgICAgY29uc3QgbWFya2VyID0gcGFyYWdyYXBoLm51bWJlcmluZ0RhdGEubWFya2VyO1xuICAgICAgICBjb25zdCBtYXJrZXJFeHRNb2RlbCA9IG5ldyBGb3JtYXRFeHRNb2RlbCh7XG4gICAgICAgICAgICB0ZXh0U3R5bGU6IHBhcmFncmFwaC5udW1iZXJpbmdEYXRhLm1hcmtlclRleHRTdHlsZSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IG1hcmtlclxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZW5kZXJUZXh0KG1hcmtlckZyYWdtZW50LCBtYXJrZXJFeHRNb2RlbCwgbWFya2VyKTtcbiAgICAgICAgbnVtYmVyaW5nTGluZUVsLmFwcGVuZENoaWxkKG1hcmtlckZyYWdtZW50KTtcblxuICAgICAgICByZXR1cm4gbnVtYmVyaW5nTGluZUVsO1xuICAgIH1cblxuICAgIHN0YXRpYyBjcmVhdGVEaXZDb250YWluZXIoY2xhc3NOYW1lOiBzdHJpbmcpOiBIVE1MRGl2RWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgY29udGFpbmVyRWxlbWVudC5jbGFzc05hbWUgPSBjbGFzc05hbWU7XG5cbiAgICAgICAgcmV0dXJuIGNvbnRhaW5lckVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVuZGVyRm9ybWF0Q29udGVudChcbiAgICAgICAgZnJhZ21lbnQ6IERvY3VtZW50RnJhZ21lbnQsXG4gICAgICAgIGZvcm1hdEV4dDogRm9ybWF0RXh0TW9kZWwsXG4gICAgICAgIGZyYWdtZW50RG9jdW1lbnREaXN0YW5jZTogRGlzdGFuY2VNb2RlbCxcbiAgICAgICAgZnJhZ21lbnREaXN0YW5jZTogRGlzdGFuY2VNb2RlbCxcbiAgICAgICAgY3VzdG9tQ29udGVudFNlcnZpY2U6IEN1c3RvbUNvbnRlbnRTZXJ2aWNlLFxuICAgICAgICBjdXN0b21Db21wb25lbnRzOiBJQ3VzdG9tQ29tcG9uZW50cyxcbiAgICAgICAgYnJlYWtzOiBCcmVha01vZGVsW11cbiAgICApOiBudW1iZXIge1xuICAgICAgICBsZXQgdGV4dEZyYWdtZW50ID0gZm9ybWF0RXh0LmNvbnRlbnQuc3Vic3RyaW5nKGZyYWdtZW50RGlzdGFuY2Uuc3RhcnQsIGZyYWdtZW50RGlzdGFuY2UuZW5kICsgMSk7XG4gICAgICAgIGlmICghdGV4dEZyYWdtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRleHRGcmFnbWVudFdpdGhvdXRCcmVha3MgPSBCcmVha0hlbHBlci5yZW1vdmVCcmVha01hcmtlcihicmVha3MsIHRleHRGcmFnbWVudCwgZnJhZ21lbnREb2N1bWVudERpc3RhbmNlLnN0YXJ0KTtcblxuICAgICAgICBpZiAoY3VzdG9tQ29udGVudFNlcnZpY2UuaXNGcmFnbWVudENvbnRhaW5Db21wb25lbnQoY3VzdG9tQ29tcG9uZW50cywgdGV4dEZyYWdtZW50LCBmcmFnbWVudERvY3VtZW50RGlzdGFuY2UpKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlclRleHRXaXRoQ3VzdG9tQ29udGVudChcbiAgICAgICAgICAgICAgICBmcmFnbWVudCxcbiAgICAgICAgICAgICAgICBmb3JtYXRFeHQsXG4gICAgICAgICAgICAgICAgZnJhZ21lbnREb2N1bWVudERpc3RhbmNlLFxuICAgICAgICAgICAgICAgIHRleHRGcmFnbWVudFdpdGhvdXRCcmVha3MsXG4gICAgICAgICAgICAgICAgY3VzdG9tQ29udGVudFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgY3VzdG9tQ29tcG9uZW50c1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIFJlbmRlcmluZ0hlbHBlci5yZW5kZXJUZXh0KGZyYWdtZW50LCBmb3JtYXRFeHQsIHRleHRGcmFnbWVudFdpdGhvdXRCcmVha3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRleHRGcmFnbWVudC5sZW5ndGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVuZGVyVGV4dFdpdGhDdXN0b21Db250ZW50KFxuICAgICAgICBmcmFnbWVudDogRG9jdW1lbnRGcmFnbWVudCxcbiAgICAgICAgZm9ybWF0RXh0OiBGb3JtYXRFeHRNb2RlbCxcbiAgICAgICAgZnJhZ21lbnREb2N1bWVudERpc3RhbmNlOiBEaXN0YW5jZU1vZGVsLFxuICAgICAgICB0ZXh0RnJhZ21lbnQ6IHN0cmluZyxcbiAgICAgICAgY3VzdG9tQ29udGVudFNlcnZpY2U6IEN1c3RvbUNvbnRlbnRTZXJ2aWNlLFxuICAgICAgICBjdXN0b21Db21wb25lbnRzOiBJQ3VzdG9tQ29tcG9uZW50c1xuICAgICk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gY3VzdG9tQ29udGVudFNlcnZpY2UuZ2V0Q29tcG9uZW50cyhjdXN0b21Db21wb25lbnRzLCBmcmFnbWVudERvY3VtZW50RGlzdGFuY2UpO1xuXG4gICAgICAgIGlmICghY29tcG9uZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIFJlbmRlcmluZ0hlbHBlci5yZW5kZXJUZXh0KGZyYWdtZW50LCBmb3JtYXRFeHQsIHRleHRGcmFnbWVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbmV3VGV4dEZyYWdtZW50U3RhcnRJbmRleCA9IGZyYWdtZW50RG9jdW1lbnREaXN0YW5jZS5zdGFydDtcbiAgICAgICAgbGV0IG5leHRUZXh0RnJhZ21lbnQgPSB0ZXh0RnJhZ21lbnQ7XG5cbiAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgICAgY29uc3QgdGV4dEJlZm9yZUVsZW1lbnQgPSBuZXh0VGV4dEZyYWdtZW50LnN1YnN0cmluZygwLCBjb21wb25lbnQuaW5zdGFuY2UuaW5zZXJ0SW5kZXggLSBuZXdUZXh0RnJhZ21lbnRTdGFydEluZGV4KTtcbiAgICAgICAgICAgIG5leHRUZXh0RnJhZ21lbnQgPSBuZXh0VGV4dEZyYWdtZW50LnN1YnN0cmluZyh0ZXh0QmVmb3JlRWxlbWVudC5sZW5ndGggKyAxLCBuZXh0VGV4dEZyYWdtZW50Lmxlbmd0aCk7XG4gICAgICAgICAgICBuZXdUZXh0RnJhZ21lbnRTdGFydEluZGV4ID0gbmV3VGV4dEZyYWdtZW50U3RhcnRJbmRleCArICh0ZXh0QmVmb3JlRWxlbWVudC5sZW5ndGggPyB0ZXh0QmVmb3JlRWxlbWVudC5sZW5ndGggKyAxIDogMSk7XG5cbiAgICAgICAgICAgIGlmICh0ZXh0QmVmb3JlRWxlbWVudC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBSZW5kZXJpbmdIZWxwZXIucmVuZGVyVGV4dChmcmFnbWVudCwgZm9ybWF0RXh0LCB0ZXh0QmVmb3JlRWxlbWVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuYXR0YWNoQ29tcG9uZW50KGZyYWdtZW50LCBjb21wb25lbnQsIGN1c3RvbUNvbnRlbnRTZXJ2aWNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXh0VGV4dEZyYWdtZW50Lmxlbmd0aCkge1xuICAgICAgICAgICAgUmVuZGVyaW5nSGVscGVyLnJlbmRlclRleHQoZnJhZ21lbnQsIGZvcm1hdEV4dCwgbmV4dFRleHRGcmFnbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyByZW5kZXJUZXh0KGZyYWdtZW50OiBEb2N1bWVudEZyYWdtZW50LCBmb3JtYXRFeHQ6IEZvcm1hdEV4dE1vZGVsLCB0ZXh0RnJhZ21lbnQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICBjb25zdCB0ZXh0U3R5bGUgPSBuZXcgVGV4dFN0eWxlTW9kZWwoeyAuLi5mb3JtYXRFeHQudGV4dFN0eWxlIH0pO1xuXG4gICAgICAgIGlmICh0ZXh0RnJhZ21lbnQgPT09IE5FV19MSU5FX01BUktVUCkge1xuICAgICAgICAgICAgc3Bhbi5jbGFzc05hbWUgPSAncGFyYWdyYXBoLXN5bWJvbCc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGV4dFN0eWxlLmhlYWRpbmdTdHlsZUlkID09PSBIWVBFUkxJTktfSEVBRElOR19TVFlMRV9JRCkge1xuICAgICAgICAgICAgc3Bhbi5jbGFzc0xpc3QuYWRkKCdoeXBlcmxpbmsnKTtcbiAgICAgICAgICAgIHNwYW4ub25tb3VzZW1vdmUgPSBldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmN0cmxLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5jbGFzc0xpc3QuYWRkKCdoeXBlcmxpbmstaG92ZXInKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzcGFuLmNsYXNzTGlzdC5yZW1vdmUoJ2h5cGVybGluay1ob3ZlcicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBzcGFuLm9ubW91c2VsZWF2ZSA9ICgpID0+IHNwYW4uY2xhc3NMaXN0LnJlbW92ZSgnaHlwZXJsaW5rLWhvdmVyJyk7XG4gICAgICAgIH1cblxuICAgICAgICBzcGFuLnRleHRDb250ZW50ID0gdGV4dEZyYWdtZW50O1xuICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBDb250ZW50U3R5bGVIZWxwZXIuZ2V0VGV4dFN0eWxlc1N0cmluZyh0ZXh0U3R5bGUpKTtcbiAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoc3Bhbik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0VGV4dEluZGV4TGVuZ3RoRm9ySW5zZXJ0KFxuICAgICAgICBmb3JtYXRFeHQ6IEZvcm1hdEV4dE1vZGVsLFxuICAgICAgICBmcmFnbWVudERvY3VtZW50U3RhcnRJbmRleDogbnVtYmVyLFxuICAgICAgICBwYXJhZ3JhcGhEaXN0YW5jZTogRGlzdGFuY2VNb2RlbCxcbiAgICAgICAgc3BsaXQ6IG51bWJlcixcbiAgICAgICAgcGFyYWdyYXBoQ2hhcnM6IG51bWJlclxuICAgICk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IG1heExlbmd0aCA9IE1hdGgubWF4KHBhcmFncmFwaERpc3RhbmNlLmVuZCAtIHBhcmFncmFwaENoYXJzIC0gcGFyYWdyYXBoRGlzdGFuY2Uuc3RhcnQsIDApO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgTWF0aC5taW4oXG4gICAgICAgICAgICAgICAgc3BsaXQgLSBwYXJhZ3JhcGhDaGFycyB8fCBOdW1iZXIuTUFYX1ZBTFVFLFxuICAgICAgICAgICAgICAgIG1heExlbmd0aCxcbiAgICAgICAgICAgICAgICBmb3JtYXRFeHQuZW5kSW5kZXggLSBmcmFnbWVudERvY3VtZW50U3RhcnRJbmRleCArIDEsXG4gICAgICAgICAgICAgICAgZm9ybWF0RXh0LmNvbnRlbnQubGVuZ3RoXG4gICAgICAgICAgICApIC0gMVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBzdGF0aWMgYXR0YWNoQ29tcG9uZW50KFxuICAgICAgICBmcmFnbWVudDogRG9jdW1lbnRGcmFnbWVudCxcbiAgICAgICAgY29tcG9uZW50OiBDb21wb25lbnRSZWY8dW5rbm93bj4sXG4gICAgICAgIGN1c3RvbUNvbnRlbnRTZXJ2aWNlOiBDdXN0b21Db250ZW50U2VydmljZVxuICAgICk6IHZvaWQge1xuICAgICAgICBjdXN0b21Db250ZW50U2VydmljZS5jb21wb25lbnRTZXJ2aWNlLmF0dGFjaENvbXBvbmVudChmcmFnbWVudCwgY29tcG9uZW50KTtcbiAgICB9XG59XG4iXX0=
@@ -1,26 +0,0 @@
1
- import { EventHelper } from './event.helper';
2
- import { RenderChangesModel } from './render-changes.model';
3
- export class RenderLoop {
4
- constructor(onRender) {
5
- this.changes = new RenderChangesModel();
6
- this.flush = () => {
7
- const changes = this.changes;
8
- if (changes.any) {
9
- this.changes = new RenderChangesModel();
10
- onRender(changes);
11
- }
12
- if (this.changes.any) {
13
- this.schedule();
14
- }
15
- };
16
- }
17
- schedule(changes) {
18
- if (changes) {
19
- this.changes.apply(changes);
20
- }
21
- if (this.changes) {
22
- EventHelper.nextFrame(this.flush);
23
- }
24
- }
25
- }
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVybG9vcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1ub2Rlci9zcmMvbGliL2VkaXRvci9kaXNwbGF5L3JlbmRlcmxvb3AudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTVELE1BQU0sT0FBTyxVQUFVO0lBS25CLFlBQVksUUFBK0M7UUFGbkQsWUFBTyxHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUd2QyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRTtZQUNkLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7WUFFN0IsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFO2dCQUNiLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO2dCQUN4QyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDckI7WUFFRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFO2dCQUNsQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7YUFDbkI7UUFDTCxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQsUUFBUSxDQUFDLE9BQXdCO1FBQzdCLElBQUksT0FBTyxFQUFFO1lBQ1QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDL0I7UUFFRCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDZCxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNyQztJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50SGVscGVyIH0gZnJvbSAnLi9ldmVudC5oZWxwZXInO1xuaW1wb3J0IHsgSVJlbmRlckNoYW5nZXMgfSBmcm9tICcuL3JlbmRlci1jaGFuZ2VzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBSZW5kZXJDaGFuZ2VzTW9kZWwgfSBmcm9tICcuL3JlbmRlci1jaGFuZ2VzLm1vZGVsJztcblxuZXhwb3J0IGNsYXNzIFJlbmRlckxvb3Age1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZmx1c2g6ICgpID0+IHZvaWQ7XG5cbiAgICBwcml2YXRlIGNoYW5nZXMgPSBuZXcgUmVuZGVyQ2hhbmdlc01vZGVsKCk7XG5cbiAgICBjb25zdHJ1Y3RvcihvblJlbmRlcjogKGNoYW5nZXM6IFJlbmRlckNoYW5nZXNNb2RlbCkgPT4gdm9pZCkge1xuICAgICAgICB0aGlzLmZsdXNoID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2hhbmdlcyA9IHRoaXMuY2hhbmdlcztcblxuICAgICAgICAgICAgaWYgKGNoYW5nZXMuYW55KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VzID0gbmV3IFJlbmRlckNoYW5nZXNNb2RlbCgpO1xuICAgICAgICAgICAgICAgIG9uUmVuZGVyKGNoYW5nZXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5jaGFuZ2VzLmFueSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NoZWR1bGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBzY2hlZHVsZShjaGFuZ2VzPzogSVJlbmRlckNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlcy5hcHBseShjaGFuZ2VzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNoYW5nZXMpIHtcbiAgICAgICAgICAgIEV2ZW50SGVscGVyLm5leHRGcmFtZSh0aGlzLmZsdXNoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==