ngx-edu-sharing-ui 0.7.0 → 9.0.1

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 (367) hide show
  1. package/assets/scss/mixins.scss +4 -1
  2. package/assets/scss/variables.scss +3 -0
  3. package/esm2022/lib/actionbar/actionbar.component.mjs +188 -0
  4. package/esm2022/lib/common/edu-sharing-ui-common.module.mjs +134 -0
  5. package/esm2022/lib/directives/border-box-observer.directive.mjs +71 -0
  6. package/esm2022/lib/directives/check-text-overflow.directive.mjs +65 -0
  7. package/esm2022/lib/directives/drag-nodes/drag-nodes.mjs +14 -0
  8. package/esm2022/lib/directives/drag-nodes/nodes-drag-source.directive.mjs +79 -0
  9. package/esm2022/lib/directives/drag-nodes/nodes-drag.directive.mjs +49 -0
  10. package/esm2022/lib/directives/drag-nodes/nodes-drop-target.directive.mjs +105 -0
  11. package/esm2022/lib/directives/focus-state.directive.mjs +44 -0
  12. package/esm2022/lib/directives/icon.directive.mjs +139 -0
  13. package/esm2022/lib/dropdown/dropdown.component.mjs +70 -0
  14. package/esm2022/lib/edu-sharing-ui-configuration.mjs +41 -0
  15. package/esm2022/lib/edu-sharing-ui.module.mjs +78 -0
  16. package/esm2022/lib/list-items/available-widgets.mjs +27 -0
  17. package/esm2022/lib/list-items/format-duration.pipe.mjs +20 -0
  18. package/esm2022/lib/list-items/list-base/list-base.component.mjs +46 -0
  19. package/esm2022/lib/list-items/list-collection-info/list-collection-info.component.mjs +29 -0
  20. package/esm2022/lib/list-items/list-counts/list-counts.component.mjs +54 -0
  21. package/esm2022/lib/list-items/list-items.module.mjs +50 -0
  22. package/esm2022/lib/list-items/list-node-license/list-node-license.component.mjs +41 -0
  23. package/esm2022/lib/list-items/list-node-replication-source/list-node-replication-source.component.mjs +47 -0
  24. package/esm2022/lib/list-items/list-node-workflow/list-node-workflow.component.mjs +24 -0
  25. package/esm2022/lib/list-items/list-text/list-text.component.mjs +106 -0
  26. package/esm2022/lib/list-items/list-widget.mjs +49 -0
  27. package/esm2022/lib/list-items/node-row/node-row.component.mjs +24 -0
  28. package/esm2022/lib/list-items/node-source.pipe.mjs +49 -0
  29. package/esm2022/lib/node-entries/combined-data-source.mjs +41 -0
  30. package/esm2022/lib/node-entries/custom-templates-data-source.mjs +7 -0
  31. package/esm2022/lib/node-entries/drag-preview/drag-preview.component.mjs +21 -0
  32. package/esm2022/lib/node-entries/entries-model.mjs +23 -0
  33. package/esm2022/lib/node-entries/items-cap.mjs +47 -0
  34. package/esm2022/lib/node-entries/list-item-label.pipe.mjs +34 -0
  35. package/esm2022/lib/node-entries/node-cache.mjs +65 -0
  36. package/esm2022/lib/node-entries/node-data-source-remote.mjs +4 -0
  37. package/esm2022/lib/node-entries/node-data-source.mjs +115 -0
  38. package/esm2022/lib/node-entries/node-entries-card/node-entries-card.component.mjs +131 -0
  39. package/esm2022/lib/node-entries/node-entries-card-grid/node-entries-card-grid.component.mjs +307 -0
  40. package/esm2022/lib/node-entries/node-entries-card-small/node-entries-card-small.component.mjs +45 -0
  41. package/esm2022/lib/node-entries/node-entries-global-options/node-entries-global-options.component.mjs +23 -0
  42. package/esm2022/lib/node-entries/node-entries-global.service.mjs +58 -0
  43. package/esm2022/lib/node-entries/node-entries-table/column-chooser/column-chooser.component.mjs +42 -0
  44. package/esm2022/lib/node-entries/node-entries-table/node-entries-table.component.mjs +290 -0
  45. package/esm2022/lib/node-entries/node-entries-templates.service.mjs +11 -0
  46. package/esm2022/lib/node-entries/node-entries-wrapper.component.mjs +324 -0
  47. package/esm2022/lib/node-entries/node-entries.component.mjs +131 -0
  48. package/esm2022/lib/node-entries/node-entries.module.mjs +161 -0
  49. package/esm2022/lib/node-entries/node-rating/node-rating.component.mjs +102 -0
  50. package/esm2022/lib/node-entries/node-stats-badges/node-stats-badges.component.mjs +48 -0
  51. package/esm2022/lib/node-entries/node-type-badge/node-type-badge.component.mjs +36 -0
  52. package/esm2022/lib/node-entries/option-button/option-button.component.mjs +62 -0
  53. package/esm2022/lib/node-entries/preview-image/preview-image.component.mjs +53 -0
  54. package/esm2022/lib/node-entries/sort-select-panel/sort-select-panel.component.mjs +41 -0
  55. package/esm2022/lib/node-url/node-url.component.mjs +128 -0
  56. package/esm2022/lib/pipes/file-size.pipe.mjs +31 -0
  57. package/esm2022/lib/pipes/format-date.pipe.mjs +38 -0
  58. package/esm2022/lib/pipes/node-icon.pipe.mjs +18 -0
  59. package/esm2022/lib/pipes/node-image-size.pipe.mjs +24 -0
  60. package/esm2022/lib/pipes/node-image.pipe.mjs +55 -0
  61. package/esm2022/lib/pipes/node-person-name.pipe.mjs +50 -0
  62. package/esm2022/lib/pipes/node-title.pipe.mjs +19 -0
  63. package/esm2022/lib/pipes/option-tooltip.pipe.mjs +33 -0
  64. package/esm2022/lib/pipes/replace-chars.pipe.mjs +29 -0
  65. package/esm2022/lib/pipes/vcard-name.pipe.mjs +19 -0
  66. package/esm2022/lib/services/abstract/app.service.mjs +3 -0
  67. package/esm2022/lib/services/abstract/keyboard-shortcuts.service.mjs +10 -0
  68. package/esm2022/lib/services/abstract/options-helper.service.mjs +3 -0
  69. package/esm2022/lib/services/abstract/toast.service.mjs +3 -0
  70. package/esm2022/lib/services/accessibility.service.mjs +73 -0
  71. package/esm2022/lib/services/local-events.service.mjs +36 -0
  72. package/esm2022/lib/services/node-entries.service.mjs +137 -0
  73. package/esm2022/lib/services/node-helper.service.mjs +234 -0
  74. package/esm2022/lib/services/nodes-drag-drop.service.mjs +155 -0
  75. package/esm2022/lib/services/options-helper-data.service.mjs +134 -0
  76. package/esm2022/lib/services/repo-url.service.mjs +49 -0
  77. package/esm2022/lib/services/temporary-storage.service.mjs +48 -0
  78. package/esm2022/lib/services/ui.service.mjs +162 -0
  79. package/esm2022/lib/sort-dropdown/sort-dropdown.component.mjs +50 -0
  80. package/esm2022/lib/spinner/spinner.component.mjs +18 -0
  81. package/esm2022/lib/translations/fallback-translation-handler.mjs +6 -0
  82. package/esm2022/lib/translations/languages.mjs +5 -0
  83. package/esm2022/lib/translations/translation-loader.mjs +149 -0
  84. package/esm2022/lib/translations/translation-source.mjs +11 -0
  85. package/esm2022/lib/translations/translations.module.mjs +67 -0
  86. package/esm2022/lib/translations/translations.service.mjs +171 -0
  87. package/esm2022/lib/types/accessibillity.mjs +19 -0
  88. package/esm2022/lib/types/api-models.mjs +2 -0
  89. package/esm2022/lib/types/drag-drop.mjs +2 -0
  90. package/esm2022/lib/types/keyboard-shortcuts.mjs +11 -0
  91. package/esm2022/lib/types/list-item.mjs +41 -0
  92. package/esm2022/lib/types/option-item.mjs +174 -0
  93. package/esm2022/lib/types/workflow.mjs +25 -0
  94. package/esm2022/lib/util/DateHelper.mjs +200 -0
  95. package/esm2022/lib/util/VCard.mjs +278 -0
  96. package/esm2022/lib/util/color-helper.mjs +124 -0
  97. package/esm2022/lib/util/duration-helper.mjs +102 -0
  98. package/esm2022/lib/util/functions.mjs +13 -0
  99. package/esm2022/lib/util/helper.mjs +64 -0
  100. package/esm2022/lib/util/isNumeric.mjs +11 -0
  101. package/esm2022/lib/util/rest-helper.mjs +33 -0
  102. package/esm2022/lib/util/ui-animation.mjs +146 -0
  103. package/esm2022/lib/util/ui-constants.mjs +21 -0
  104. package/esm2022/module.mjs +76 -0
  105. package/esm2022/ngx-edu-sharing-ui.mjs +5 -0
  106. package/fesm2022/ngx-edu-sharing-ui.mjs +6509 -0
  107. package/fesm2022/ngx-edu-sharing-ui.mjs.map +1 -0
  108. package/index.d.ts +5 -0
  109. package/lib/actionbar/actionbar.component.d.ts +74 -0
  110. package/lib/common/edu-sharing-ui-common.module.d.ts +32 -0
  111. package/lib/directives/border-box-observer.directive.d.ts +31 -0
  112. package/lib/directives/check-text-overflow.directive.d.ts +20 -0
  113. package/lib/directives/drag-nodes/drag-nodes.d.ts +16 -0
  114. package/lib/directives/drag-nodes/nodes-drag-source.directive.d.ts +37 -0
  115. package/lib/directives/drag-nodes/nodes-drag.directive.d.ts +17 -0
  116. package/lib/directives/drag-nodes/nodes-drop-target.directive.d.ts +22 -0
  117. package/lib/directives/focus-state.directive.d.ts +14 -0
  118. package/lib/directives/icon.directive.d.ts +46 -0
  119. package/lib/dropdown/dropdown.component.d.ts +40 -0
  120. package/lib/edu-sharing-ui-configuration.d.ts +11 -0
  121. package/lib/edu-sharing-ui.module.d.ts +19 -0
  122. package/lib/list-items/available-widgets.d.ts +13 -0
  123. package/lib/list-items/format-duration.pipe.d.ts +10 -0
  124. package/lib/list-items/list-base/list-base.component.d.ts +18 -0
  125. package/lib/list-items/list-collection-info/list-collection-info.component.d.ts +14 -0
  126. package/lib/list-items/list-counts/list-counts.component.d.ts +13 -0
  127. package/lib/list-items/list-items.module.d.ts +20 -0
  128. package/lib/list-items/list-node-license/list-node-license.component.d.ts +20 -0
  129. package/lib/list-items/list-node-replication-source/list-node-replication-source.component.d.ts +22 -0
  130. package/lib/list-items/list-node-workflow/list-node-workflow.component.d.ts +12 -0
  131. package/lib/list-items/list-text/list-text.component.d.ts +28 -0
  132. package/lib/list-items/list-widget.d.ts +32 -0
  133. package/lib/list-items/node-row/node-row.component.d.ts +12 -0
  134. package/lib/list-items/node-source.pipe.d.ts +16 -0
  135. package/lib/node-entries/combined-data-source.d.ts +19 -0
  136. package/{src/lib/node-entries/custom-templates-data-source.ts → lib/node-entries/custom-templates-data-source.d.ts} +2 -2
  137. package/lib/node-entries/drag-preview/drag-preview.component.d.ts +11 -0
  138. package/{src/lib/node-entries/entries-model.ts → lib/node-entries/entries-model.d.ts} +19 -47
  139. package/lib/node-entries/items-cap.d.ts +17 -0
  140. package/lib/node-entries/list-item-label.pipe.d.ts +14 -0
  141. package/lib/node-entries/node-cache.d.ts +17 -0
  142. package/{src/lib/node-entries/node-data-source-remote.ts → lib/node-entries/node-data-source-remote.d.ts} +2 -12
  143. package/lib/node-entries/node-data-source.d.ts +42 -0
  144. package/lib/node-entries/node-entries-card/node-entries-card.component.d.ts +45 -0
  145. package/lib/node-entries/node-entries-card-grid/node-entries-card-grid.component.d.ts +92 -0
  146. package/lib/node-entries/node-entries-card-small/node-entries-card-small.component.d.ts +23 -0
  147. package/lib/node-entries/node-entries-global-options/node-entries-global-options.component.d.ts +12 -0
  148. package/lib/node-entries/node-entries-global.service.d.ts +50 -0
  149. package/lib/node-entries/node-entries-table/column-chooser/column-chooser.component.d.ts +17 -0
  150. package/lib/node-entries/node-entries-table/node-entries-table.component.d.ts +76 -0
  151. package/{src/lib/node-entries/node-entries-templates.service.ts → lib/node-entries/node-entries-templates.service.d.ts} +6 -9
  152. package/lib/node-entries/node-entries-wrapper.component.d.ts +129 -0
  153. package/lib/node-entries/node-entries.component.d.ts +32 -0
  154. package/lib/node-entries/node-entries.module.d.ts +43 -0
  155. package/lib/node-entries/node-rating/node-rating.component.d.ts +26 -0
  156. package/lib/node-entries/node-stats-badges/node-stats-badges.component.d.ts +17 -0
  157. package/lib/node-entries/node-type-badge/node-type-badge.component.d.ts +21 -0
  158. package/lib/node-entries/option-button/option-button.component.d.ts +11 -0
  159. package/lib/node-entries/preview-image/preview-image.component.d.ts +22 -0
  160. package/lib/node-entries/sort-select-panel/sort-select-panel.component.d.ts +16 -0
  161. package/lib/node-url/node-url.component.d.ts +51 -0
  162. package/lib/pipes/file-size.pipe.d.ts +10 -0
  163. package/lib/pipes/format-date.pipe.d.ts +21 -0
  164. package/lib/pipes/node-icon.pipe.d.ts +11 -0
  165. package/lib/pipes/node-image-size.pipe.d.ts +8 -0
  166. package/lib/pipes/node-image.pipe.d.ts +28 -0
  167. package/lib/pipes/node-person-name.pipe.d.ts +10 -0
  168. package/lib/pipes/node-title.pipe.d.ts +11 -0
  169. package/lib/pipes/option-tooltip.pipe.d.ts +12 -0
  170. package/lib/pipes/replace-chars.pipe.d.ts +10 -0
  171. package/lib/pipes/vcard-name.pipe.d.ts +10 -0
  172. package/{src/lib/services/abstract/app.service.ts → lib/services/abstract/app.service.d.ts} +1 -1
  173. package/lib/services/abstract/keyboard-shortcuts.service.d.ts +11 -0
  174. package/lib/services/abstract/options-helper.service.d.ts +10 -0
  175. package/{src/lib/services/abstract/toast.service.ts → lib/services/abstract/toast.service.d.ts} +1 -2
  176. package/lib/services/accessibility.service.d.ts +18 -0
  177. package/{src/lib/services/local-events.service.ts → lib/services/local-events.service.d.ts} +7 -10
  178. package/lib/services/node-entries.service.d.ts +69 -0
  179. package/lib/services/node-helper.service.d.ts +56 -0
  180. package/lib/services/nodes-drag-drop.service.d.ts +41 -0
  181. package/lib/services/options-helper-data.service.d.ts +75 -0
  182. package/lib/services/repo-url.service.d.ts +25 -0
  183. package/lib/services/temporary-storage.service.d.ts +35 -0
  184. package/lib/services/ui.service.d.ts +41 -0
  185. package/lib/sort-dropdown/sort-dropdown.component.d.ts +15 -0
  186. package/lib/spinner/spinner.component.d.ts +7 -0
  187. package/lib/translations/fallback-translation-handler.d.ts +4 -0
  188. package/lib/translations/languages.d.ts +4 -0
  189. package/lib/translations/translation-loader.d.ts +51 -0
  190. package/{src/lib/translations/translation-source.ts → lib/translations/translation-source.d.ts} +4 -4
  191. package/lib/translations/translations.module.d.ts +15 -0
  192. package/lib/translations/translations.service.d.ts +30 -0
  193. package/lib/types/accessibillity.d.ts +15 -0
  194. package/{src/lib/types/drag-drop.ts → lib/types/drag-drop.d.ts} +0 -3
  195. package/lib/types/keyboard-shortcuts.d.ts +10 -0
  196. package/lib/types/list-item.d.ts +55 -0
  197. package/lib/types/option-item.d.ts +236 -0
  198. package/lib/types/workflow.d.ts +14 -0
  199. package/lib/util/DateHelper.d.ts +44 -0
  200. package/lib/util/VCard.d.ts +66 -0
  201. package/lib/util/color-helper.d.ts +25 -0
  202. package/lib/util/duration-helper.d.ts +14 -0
  203. package/lib/util/functions.d.ts +4 -0
  204. package/lib/util/helper.d.ts +20 -0
  205. package/lib/util/isNumeric.d.ts +5 -0
  206. package/lib/util/rest-helper.d.ts +10 -0
  207. package/lib/util/ui-animation.d.ts +39 -0
  208. package/lib/util/ui-constants.d.ts +18 -0
  209. package/{src/module.ts → module.d.ts} +0 -4
  210. package/package.json +23 -9
  211. package/.browserslistrc +0 -16
  212. package/.eslintrc.json +0 -44
  213. package/karma.conf.js +0 -42
  214. package/ng-package.json +0 -10
  215. package/src/lib/actionbar/actionbar.component.html +0 -59
  216. package/src/lib/actionbar/actionbar.component.scss +0 -123
  217. package/src/lib/actionbar/actionbar.component.ts +0 -174
  218. package/src/lib/common/edu-sharing-ui-common.module.ts +0 -80
  219. package/src/lib/directives/border-box-observer.directive.ts +0 -75
  220. package/src/lib/directives/check-text-overflow.directive.ts +0 -61
  221. package/src/lib/directives/drag-nodes/drag-nodes.ts +0 -32
  222. package/src/lib/directives/drag-nodes/nodes-drag-source.directive.ts +0 -79
  223. package/src/lib/directives/drag-nodes/nodes-drag.directive.ts +0 -43
  224. package/src/lib/directives/drag-nodes/nodes-drop-target.directive.ts +0 -116
  225. package/src/lib/directives/focus-state.directive.ts +0 -34
  226. package/src/lib/directives/icon.directive.ts +0 -142
  227. package/src/lib/directives/nodes-drop-target-legacy.directive.ts +0 -155
  228. package/src/lib/dropdown/dropdown.component.html +0 -32
  229. package/src/lib/dropdown/dropdown.component.scss +0 -67
  230. package/src/lib/dropdown/dropdown.component.ts +0 -71
  231. package/src/lib/edu-sharing-ui-configuration.ts +0 -47
  232. package/src/lib/edu-sharing-ui.module.ts +0 -49
  233. package/src/lib/list-items/available-widgets.ts +0 -30
  234. package/src/lib/list-items/format-duration.pipe.ts +0 -17
  235. package/src/lib/list-items/list-base/list-base.component.html +0 -52
  236. package/src/lib/list-items/list-base/list-base.component.ts +0 -44
  237. package/src/lib/list-items/list-collection-info/list-collection-info.component.html +0 -48
  238. package/src/lib/list-items/list-collection-info/list-collection-info.component.scss +0 -8
  239. package/src/lib/list-items/list-collection-info/list-collection-info.component.ts +0 -24
  240. package/src/lib/list-items/list-counts/list-counts.component.html +0 -1
  241. package/src/lib/list-items/list-counts/list-counts.component.scss +0 -3
  242. package/src/lib/list-items/list-counts/list-counts.component.ts +0 -59
  243. package/src/lib/list-items/list-items.module.ts +0 -33
  244. package/src/lib/list-items/list-node-license/list-node-license.component.html +0 -8
  245. package/src/lib/list-items/list-node-license/list-node-license.component.ts +0 -47
  246. package/src/lib/list-items/list-node-replication-source/list-node-replication-source.component.html +0 -11
  247. package/src/lib/list-items/list-node-replication-source/list-node-replication-source.component.ts +0 -60
  248. package/src/lib/list-items/list-node-workflow/list-node-workflow.component.html +0 -3
  249. package/src/lib/list-items/list-node-workflow/list-node-workflow.component.ts +0 -21
  250. package/src/lib/list-items/list-text/list-text.component.html +0 -176
  251. package/src/lib/list-items/list-text/list-text.component.scss +0 -3
  252. package/src/lib/list-items/list-text/list-text.component.ts +0 -107
  253. package/src/lib/list-items/list-widget.ts +0 -52
  254. package/src/lib/list-items/node-row/node-row.component.html +0 -31
  255. package/src/lib/list-items/node-row/node-row.component.scss +0 -50
  256. package/src/lib/list-items/node-row/node-row.component.ts +0 -16
  257. package/src/lib/list-items/node-source.pipe.ts +0 -48
  258. package/src/lib/node-entries/combined-data-source.ts +0 -51
  259. package/src/lib/node-entries/drag-preview/drag-preview.component.html +0 -6
  260. package/src/lib/node-entries/drag-preview/drag-preview.component.scss +0 -35
  261. package/src/lib/node-entries/drag-preview/drag-preview.component.ts +0 -15
  262. package/src/lib/node-entries/items-cap.ts +0 -54
  263. package/src/lib/node-entries/list-item-label.pipe.ts +0 -28
  264. package/src/lib/node-entries/mixins.scss +0 -23
  265. package/src/lib/node-entries/node-cache.spec.ts +0 -199
  266. package/src/lib/node-entries/node-cache.ts +0 -81
  267. package/src/lib/node-entries/node-data-source.ts +0 -148
  268. package/src/lib/node-entries/node-entries-card/node-entries-card.component.html +0 -167
  269. package/src/lib/node-entries/node-entries-card/node-entries-card.component.scss +0 -28
  270. package/src/lib/node-entries/node-entries-card/node-entries-card.component.ts +0 -132
  271. package/src/lib/node-entries/node-entries-card/node-entries-card.main.scss +0 -261
  272. package/src/lib/node-entries/node-entries-card-grid/node-entries-card-grid.component.html +0 -205
  273. package/src/lib/node-entries/node-entries-card-grid/node-entries-card-grid.component.scss +0 -181
  274. package/src/lib/node-entries/node-entries-card-grid/node-entries-card-grid.component.ts +0 -361
  275. package/src/lib/node-entries/node-entries-card-small/node-entries-card-small.component.html +0 -100
  276. package/src/lib/node-entries/node-entries-card-small/node-entries-card-small.component.scss +0 -46
  277. package/src/lib/node-entries/node-entries-card-small/node-entries-card-small.component.ts +0 -40
  278. package/src/lib/node-entries/node-entries-global-options/node-entries-global-options.component.html +0 -23
  279. package/src/lib/node-entries/node-entries-global-options/node-entries-global-options.component.scss +0 -58
  280. package/src/lib/node-entries/node-entries-global-options/node-entries-global-options.component.ts +0 -16
  281. package/src/lib/node-entries/node-entries-global.service.ts +0 -79
  282. package/src/lib/node-entries/node-entries-table/column-chooser/column-chooser.component.html +0 -25
  283. package/src/lib/node-entries/node-entries-table/column-chooser/column-chooser.component.scss +0 -32
  284. package/src/lib/node-entries/node-entries-table/column-chooser/column-chooser.component.ts +0 -31
  285. package/src/lib/node-entries/node-entries-table/node-entries-table.component.html +0 -270
  286. package/src/lib/node-entries/node-entries-table/node-entries-table.component.scss +0 -169
  287. package/src/lib/node-entries/node-entries-table/node-entries-table.component.ts +0 -333
  288. package/src/lib/node-entries/node-entries-wrapper.component.ts +0 -363
  289. package/src/lib/node-entries/node-entries.component.html +0 -33
  290. package/src/lib/node-entries/node-entries.component.scss +0 -13
  291. package/src/lib/node-entries/node-entries.component.ts +0 -151
  292. package/src/lib/node-entries/node-entries.module.ts +0 -93
  293. package/src/lib/node-entries/node-rating/node-rating.component.html +0 -53
  294. package/src/lib/node-entries/node-rating/node-rating.component.scss +0 -31
  295. package/src/lib/node-entries/node-rating/node-rating.component.ts +0 -105
  296. package/src/lib/node-entries/node-stats-badges/node-stats-badges.component.html +0 -39
  297. package/src/lib/node-entries/node-stats-badges/node-stats-badges.component.scss +0 -44
  298. package/src/lib/node-entries/node-stats-badges/node-stats-badges.component.ts +0 -43
  299. package/src/lib/node-entries/node-type-badge/node-type-badge.component.html +0 -31
  300. package/src/lib/node-entries/node-type-badge/node-type-badge.component.scss +0 -5
  301. package/src/lib/node-entries/node-type-badge/node-type-badge.component.ts +0 -36
  302. package/src/lib/node-entries/option-button/option-button.component.ts +0 -42
  303. package/src/lib/node-entries/preview-image/preview-image.component.html +0 -19
  304. package/src/lib/node-entries/preview-image/preview-image.component.scss +0 -31
  305. package/src/lib/node-entries/preview-image/preview-image.component.ts +0 -47
  306. package/src/lib/node-entries/sort-select-panel/sort-select-panel.component.html +0 -27
  307. package/src/lib/node-entries/sort-select-panel/sort-select-panel.component.scss +0 -9
  308. package/src/lib/node-entries/sort-select-panel/sort-select-panel.component.ts +0 -26
  309. package/src/lib/node-url/node-url.component.html +0 -66
  310. package/src/lib/node-url/node-url.component.scss +0 -32
  311. package/src/lib/node-url/node-url.component.ts +0 -136
  312. package/src/lib/pipes/file-size.pipe.ts +0 -24
  313. package/src/lib/pipes/format-date.pipe.ts +0 -39
  314. package/src/lib/pipes/node-icon.pipe.ts +0 -11
  315. package/src/lib/pipes/node-image-size.pipe.ts +0 -18
  316. package/src/lib/pipes/node-image.pipe.ts +0 -71
  317. package/src/lib/pipes/node-person-name.pipe.ts +0 -41
  318. package/src/lib/pipes/node-title.pipe.ts +0 -12
  319. package/src/lib/pipes/option-tooltip.pipe.ts +0 -32
  320. package/src/lib/pipes/replace-chars.pipe.ts +0 -21
  321. package/src/lib/pipes/vcard-name.pipe.ts +0 -11
  322. package/src/lib/services/abstract/keyboard-shortcuts.service.ts +0 -10
  323. package/src/lib/services/abstract/options-helper.service.ts +0 -29
  324. package/src/lib/services/accessibility.service.ts +0 -101
  325. package/src/lib/services/node-entries.service.ts +0 -172
  326. package/src/lib/services/node-helper.service.ts +0 -239
  327. package/src/lib/services/nodes-drag-drop.service.ts +0 -165
  328. package/src/lib/services/options-helper-data.service.ts +0 -186
  329. package/src/lib/services/repo-url.service.ts +0 -46
  330. package/src/lib/services/temporary-storage.service.ts +0 -58
  331. package/src/lib/services/ui.service.ts +0 -182
  332. package/src/lib/sort-dropdown/sort-dropdown.component.html +0 -22
  333. package/src/lib/sort-dropdown/sort-dropdown.component.scss +0 -47
  334. package/src/lib/sort-dropdown/sort-dropdown.component.ts +0 -42
  335. package/src/lib/spinner/spinner.component.html +0 -14
  336. package/src/lib/spinner/spinner.component.scss +0 -141
  337. package/src/lib/spinner/spinner.component.ts +0 -12
  338. package/src/lib/translations/README.md +0 -44
  339. package/src/lib/translations/fallback-translation-handler.ts +0 -7
  340. package/src/lib/translations/languages.ts +0 -6
  341. package/src/lib/translations/translation-loader.spec.ts +0 -352
  342. package/src/lib/translations/translation-loader.ts +0 -189
  343. package/src/lib/translations/translations.module.ts +0 -49
  344. package/src/lib/translations/translations.service.spec.ts +0 -152
  345. package/src/lib/translations/translations.service.ts +0 -188
  346. package/src/lib/types/accessibillity.ts +0 -15
  347. package/src/lib/types/keyboard-shortcuts.ts +0 -29
  348. package/src/lib/types/list-item.ts +0 -67
  349. package/src/lib/types/option-item.ts +0 -247
  350. package/src/lib/types/workflow.ts +0 -35
  351. package/src/lib/util/DateHelper.spec.ts +0 -112
  352. package/src/lib/util/DateHelper.ts +0 -197
  353. package/src/lib/util/VCard.ts +0 -277
  354. package/src/lib/util/color-helper.ts +0 -125
  355. package/src/lib/util/duration-helper.spec.ts +0 -35
  356. package/src/lib/util/duration-helper.ts +0 -98
  357. package/src/lib/util/functions.ts +0 -15
  358. package/src/lib/util/helper.ts +0 -60
  359. package/src/lib/util/isNumeric.ts +0 -13
  360. package/src/lib/util/rest-helper.ts +0 -28
  361. package/src/lib/util/ui-animation.ts +0 -154
  362. package/src/lib/util/ui-constants.ts +0 -20
  363. package/src/test.ts +0 -28
  364. package/tsconfig.lib.json +0 -15
  365. package/tsconfig.lib.prod.json +0 -10
  366. package/tsconfig.spec.json +0 -17
  367. /package/{src/lib/types/api-models.ts → lib/types/api-models.d.ts} +0 -0
@@ -0,0 +1,324 @@
1
+ import { Component, ContentChild, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
2
+ import { Subject } from 'rxjs';
3
+ import { NodeEntriesTemplatesService } from './node-entries-templates.service';
4
+ import { InteractionType, NodeEntriesDisplayType, } from './entries-model';
5
+ import { NodeDataSource } from './node-data-source';
6
+ import { Helper } from '../util/helper';
7
+ import { NodeEntriesService } from '../services/node-entries.service';
8
+ import { TemporaryStorageService } from '../services/temporary-storage.service';
9
+ import { OptionsHelperDataService } from '../services/options-helper-data.service';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "../services/temporary-storage.service";
12
+ import * as i2 from "../services/node-entries.service";
13
+ import * as i3 from "../services/options-helper-data.service";
14
+ import * as i4 from "../services/node-helper.service";
15
+ import * as i5 from "../services/ui.service";
16
+ import * as i6 from "./node-entries-templates.service";
17
+ import * as i7 from "@angular/common";
18
+ import * as i8 from "./node-entries.component";
19
+ export class NodeEntriesWrapperComponent {
20
+ constructor(viewContainerRef, temporaryStorageService, ngZone, entriesService, optionsHelper, nodeHelperService, uiService,
21
+ // @TODO
22
+ // private mainNav: MainNavService,
23
+ templatesService, changeDetectorRef, elementRef) {
24
+ this.viewContainerRef = viewContainerRef;
25
+ this.temporaryStorageService = temporaryStorageService;
26
+ this.ngZone = ngZone;
27
+ this.entriesService = entriesService;
28
+ this.optionsHelper = optionsHelper;
29
+ this.nodeHelperService = nodeHelperService;
30
+ this.uiService = uiService;
31
+ this.templatesService = templatesService;
32
+ this.changeDetectorRef = changeDetectorRef;
33
+ this.elementRef = elementRef;
34
+ this.checkbox = true;
35
+ this.columnsChange = new EventEmitter();
36
+ this.displayType = NodeEntriesDisplayType.Grid;
37
+ this.displayTypeChange = new EventEmitter();
38
+ this.elementInteractionType = InteractionType.DefaultActionLink;
39
+ /**
40
+ * UI hints for whether a single click will cause a dynamic action.
41
+ *
42
+ * This does not configure the actual behavior but only UI hints to the user. Hints include
43
+ * hover effects and a changed cursor.
44
+ *
45
+ * - When choosing 'static', the `clickItem` event should trigger some stationary action like
46
+ * selecting the element or displaying information in a complementary page area. The
47
+ * `dblClickItem` event can be used for a more disruptive action.
48
+ * - When choosing 'dynamic', the `clickItem` event should trigger a major action like
49
+ * navigating to a new page or closing a dialog.
50
+ */
51
+ // TODO: Consider controlling the ui hints and the actual behavior with a single option.
52
+ this.singleClickHint = 'dynamic';
53
+ /**
54
+ * Do not load more data on scroll.
55
+ */
56
+ this.disableInfiniteScroll = false;
57
+ this.fetchData = new EventEmitter();
58
+ this.clickItem = new EventEmitter();
59
+ this.dblClickItem = new EventEmitter();
60
+ this.sortChange = new EventEmitter();
61
+ this.destroyed = new Subject();
62
+ // regulary re-bind template since it might have updated without ngChanges trigger
63
+ /*
64
+ ngZone.runOutsideAngular(() =>
65
+ setInterval(() => this.componentRef.instance.emptyRef = this.emptyRef)
66
+ );
67
+ */
68
+ this.virtualNodesAdded = this.optionsHelper.virtualNodesAdded;
69
+ this.displayTypeChanged = this.optionsHelper.displayTypeChanged;
70
+ this.entriesService.selection.changed.subscribe(() => {
71
+ if (this.optionsHelper.getData()) {
72
+ this.optionsHelper.getData().selectedObjects =
73
+ this.entriesService.selection.selected;
74
+ this.optionsHelper.getData().activeObjects = this.entriesService.selection.selected;
75
+ }
76
+ else {
77
+ console.warn('optionsHelper is not initalized correctly; data is empty');
78
+ }
79
+ this.optionsHelper.refreshComponents();
80
+ });
81
+ }
82
+ ngOnInit() {
83
+ if (this.primaryInstance) {
84
+ this.optionsHelper.registerGlobalKeyboardShortcuts();
85
+ }
86
+ }
87
+ ngOnChanges(changes = {}) {
88
+ if (!this.componentRef) {
89
+ this.init();
90
+ }
91
+ this.entriesService.list = this;
92
+ this.entriesService.dataSource = this.dataSource;
93
+ this.entriesService.scope = this.scope;
94
+ this.entriesService.columns = this.columns;
95
+ this.entriesService.configureColumns = this.configureColumns;
96
+ this.entriesService.checkbox = this.checkbox;
97
+ this.entriesService.columnsChange = this.columnsChange;
98
+ this.entriesService.displayType = this.displayType;
99
+ this.entriesService.elementInteractionType = this.elementInteractionType;
100
+ this.entriesService.gridConfig = this.gridConfig;
101
+ this.entriesService.options = this.options;
102
+ this.entriesService.globalOptions = this.globalOptions;
103
+ this.entriesService.sort = this.sort;
104
+ this.entriesService.sortChange = this.sortChange;
105
+ this.entriesService.dragDrop = this.dragDrop;
106
+ this.entriesService.clickItem = this.clickItem;
107
+ this.entriesService.dblClickItem = this.dblClickItem;
108
+ this.entriesService.fetchData = this.fetchData;
109
+ this.entriesService.primaryInstance = this.primaryInstance;
110
+ this.entriesService.singleClickHint = this.singleClickHint;
111
+ this.entriesService.disableInfiniteScroll = this.disableInfiniteScroll;
112
+ if (changes['initConfig']) {
113
+ this.initOptionsGenerator(this.initConfig);
114
+ }
115
+ if (this.componentRef) {
116
+ this.componentRef.instance.changeDetectorRef?.detectChanges();
117
+ }
118
+ // This might need wrapping with `setTimeout`.
119
+ this.updateTemplates();
120
+ }
121
+ ngOnDestroy() {
122
+ this.destroyed.next();
123
+ this.destroyed.complete();
124
+ }
125
+ /**
126
+ * Replaces this wrapper with the configured custom-node-list component.
127
+ */
128
+ init() {
129
+ this.customNodeListComponent = this.temporaryStorageService.get(TemporaryStorageService.CUSTOM_NODE_ENTRIES_COMPONENT, null);
130
+ if (this.customNodeListComponent == null) {
131
+ return;
132
+ }
133
+ this.componentRef = this.uiService.injectAngularComponent(this.viewContainerRef, this.customNodeListComponent, this.elementRef.nativeElement,
134
+ // Input bindings are initialized in `ngOnChanges`.
135
+ this.getOutputBindings());
136
+ }
137
+ /**
138
+ * Creates a simple map of the output bindings defined in this component.
139
+ */
140
+ getOutputBindings() {
141
+ const outputBindings = {};
142
+ for (const key of Object.keys(this)) {
143
+ const value = this[key];
144
+ if (value instanceof EventEmitter) {
145
+ outputBindings[key] = value;
146
+ }
147
+ }
148
+ return outputBindings;
149
+ }
150
+ getDisplayType() {
151
+ return this.displayType;
152
+ }
153
+ setDisplayType(displayType) {
154
+ this.displayType = displayType;
155
+ this.entriesService.displayType = displayType;
156
+ this.ngOnChanges();
157
+ this.displayTypeChange.emit(displayType);
158
+ }
159
+ updateNodes(nodes) {
160
+ if (!nodes) {
161
+ return;
162
+ }
163
+ this.dataSource.getData().forEach((d) => {
164
+ let hits = nodes.filter((n) => n.ref.id === d.ref.id);
165
+ if (hits.length === 0) {
166
+ // handle if the original has changed (for collection refs)
167
+ hits = nodes.filter((n) => n.ref.id === d.originalId);
168
+ }
169
+ if (hits.length === 1) {
170
+ this.nodeHelperService.copyDataToNode(d, hits[0]);
171
+ }
172
+ });
173
+ // trigger rebuild
174
+ if (this.dataSource instanceof NodeDataSource) {
175
+ this.dataSource.refresh();
176
+ }
177
+ const oldSelection = this.entriesService.selection.selected;
178
+ this.entriesService.selection.clear();
179
+ this.entriesService.selection.select(...oldSelection.map((o) => this.dataSource.getData().filter((d) => Helper.objectEquals(o, d))?.[0]));
180
+ this.changeDetectorRef.detectChanges();
181
+ }
182
+ showReorderColumnsDialog() { }
183
+ addVirtualNodes(virtual) {
184
+ virtual = virtual.map((o) => {
185
+ o.virtual = true;
186
+ return o;
187
+ });
188
+ virtual.forEach((v) => {
189
+ const contains = this.dataSource
190
+ .getData()
191
+ .some((d) => d.ref
192
+ ? d.ref?.id === v.ref?.id
193
+ : d.authorityName === v.authorityName);
194
+ if (contains) {
195
+ this.updateNodes([v]);
196
+ }
197
+ else {
198
+ this.dataSource.appendData([v], 'before');
199
+ }
200
+ });
201
+ this.entriesService.selection.clear();
202
+ this.entriesService.selection.select(...virtual);
203
+ this.virtualNodesAdded.emit(virtual);
204
+ this.changeDetectorRef.detectChanges();
205
+ }
206
+ setOptions(options) {
207
+ this.options = options;
208
+ this.ngOnChanges();
209
+ }
210
+ getSelection() {
211
+ return this.entriesService.selection;
212
+ }
213
+ async initOptionsGenerator(config) {
214
+ await this.optionsHelper.initComponents(config.actionbar, this);
215
+ this.optionsHelper.setData({
216
+ scope: this.entriesService.scope,
217
+ activeObjects: this.entriesService.selection.selected,
218
+ selectedObjects: this.entriesService.selection.selected,
219
+ allObjects: this.dataSource.getData(),
220
+ parent: config.parent,
221
+ customOptions: config.customOptions,
222
+ });
223
+ this.optionsHelper.refreshComponents();
224
+ }
225
+ ngAfterViewInit() {
226
+ // Prevent changed-after-checked error
227
+ Promise.resolve().then(() => this.updateTemplates());
228
+ }
229
+ updateTemplates() {
230
+ this.templatesService.title = this.titleRef;
231
+ this.templatesService.empty = this.emptyRef;
232
+ this.templatesService.actionArea = this.actionAreaRef;
233
+ this.templatesService.overlay = this.overlayRef;
234
+ }
235
+ /**
236
+ * reset the pagination to the first page
237
+ * hint: this will do nothing in case the paginationStrategy !== Pagination
238
+ */
239
+ resetPagination() {
240
+ this.nodeEntriesComponentRef?.paginator?.firstPage();
241
+ }
242
+ deleteNodes(objects) {
243
+ this.dataSource.removeData(objects);
244
+ this.getSelection().clear();
245
+ }
246
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: NodeEntriesWrapperComponent, deps: [{ token: i0.ViewContainerRef }, { token: i1.TemporaryStorageService }, { token: i0.NgZone }, { token: i2.NodeEntriesService }, { token: i3.OptionsHelperDataService }, { token: i4.NodeHelperService }, { token: i5.UIService }, { token: i6.NodeEntriesTemplatesService }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
247
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", type: NodeEntriesWrapperComponent, selector: "es-node-entries-wrapper", inputs: { dataSource: "dataSource", scope: "scope", columns: "columns", configureColumns: "configureColumns", checkbox: "checkbox", globalOptions: "globalOptions", displayType: "displayType", elementInteractionType: "elementInteractionType", sort: "sort", dragDrop: "dragDrop", gridConfig: "gridConfig", initConfig: "initConfig", primaryInstance: "primaryInstance", singleClickHint: "singleClickHint", disableInfiniteScroll: "disableInfiniteScroll" }, outputs: { columnsChange: "columnsChange", displayTypeChange: "displayTypeChange", fetchData: "fetchData", clickItem: "clickItem", dblClickItem: "dblClickItem", sortChange: "sortChange", virtualNodesAdded: "virtualNodesAdded", displayTypeChanged: "displayTypeChanged" }, providers: [NodeEntriesService, OptionsHelperDataService, NodeEntriesTemplatesService], queries: [{ propertyName: "titleRef", first: true, predicate: ["title"], descendants: true }, { propertyName: "emptyRef", first: true, predicate: ["empty"], descendants: true }, { propertyName: "actionAreaRef", first: true, predicate: ["actionArea"], descendants: true }, { propertyName: "overlayRef", first: true, predicate: ["overlay"], descendants: true }], viewQueries: [{ propertyName: "nodeEntriesComponentRef", first: true, predicate: ["nodeEntriesComponent"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `<es-node-entries
248
+ #nodeEntriesComponent
249
+ *ngIf="!customNodeListComponent"
250
+ ></es-node-entries>`, isInline: true, dependencies: [{ kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i8.NodeEntriesComponent, selector: "es-node-entries" }] }); }
251
+ }
252
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: NodeEntriesWrapperComponent, decorators: [{
253
+ type: Component,
254
+ args: [{
255
+ selector: 'es-node-entries-wrapper',
256
+ template: `<es-node-entries
257
+ #nodeEntriesComponent
258
+ *ngIf="!customNodeListComponent"
259
+ ></es-node-entries>`,
260
+ providers: [NodeEntriesService, OptionsHelperDataService, NodeEntriesTemplatesService],
261
+ }]
262
+ }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i1.TemporaryStorageService }, { type: i0.NgZone }, { type: i2.NodeEntriesService }, { type: i3.OptionsHelperDataService }, { type: i4.NodeHelperService }, { type: i5.UIService }, { type: i6.NodeEntriesTemplatesService }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { titleRef: [{
263
+ type: ContentChild,
264
+ args: ['title']
265
+ }], emptyRef: [{
266
+ type: ContentChild,
267
+ args: ['empty']
268
+ }], actionAreaRef: [{
269
+ type: ContentChild,
270
+ args: ['actionArea']
271
+ }], overlayRef: [{
272
+ type: ContentChild,
273
+ args: ['overlay']
274
+ }], nodeEntriesComponentRef: [{
275
+ type: ViewChild,
276
+ args: ['nodeEntriesComponent']
277
+ }], dataSource: [{
278
+ type: Input
279
+ }], scope: [{
280
+ type: Input
281
+ }], columns: [{
282
+ type: Input
283
+ }], configureColumns: [{
284
+ type: Input
285
+ }], checkbox: [{
286
+ type: Input
287
+ }], columnsChange: [{
288
+ type: Output
289
+ }], globalOptions: [{
290
+ type: Input
291
+ }], displayType: [{
292
+ type: Input
293
+ }], displayTypeChange: [{
294
+ type: Output
295
+ }], elementInteractionType: [{
296
+ type: Input
297
+ }], sort: [{
298
+ type: Input
299
+ }], dragDrop: [{
300
+ type: Input
301
+ }], gridConfig: [{
302
+ type: Input
303
+ }], initConfig: [{
304
+ type: Input
305
+ }], primaryInstance: [{
306
+ type: Input
307
+ }], singleClickHint: [{
308
+ type: Input
309
+ }], disableInfiniteScroll: [{
310
+ type: Input
311
+ }], fetchData: [{
312
+ type: Output
313
+ }], clickItem: [{
314
+ type: Output
315
+ }], dblClickItem: [{
316
+ type: Output
317
+ }], sortChange: [{
318
+ type: Output
319
+ }], virtualNodesAdded: [{
320
+ type: Output
321
+ }], displayTypeChanged: [{
322
+ type: Output
323
+ }] } });
324
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1lbnRyaWVzLXdyYXBwZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi9ub2RlLWVudHJpZXMvbm9kZS1lbnRyaWVzLXdyYXBwZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHSCxTQUFTLEVBRVQsWUFBWSxFQUVaLFlBQVksRUFDWixLQUFLLEVBS0wsTUFBTSxFQUlOLFNBQVMsR0FFWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRS9FLE9BQU8sRUFHSCxlQUFlLEVBUWYsc0JBQXNCLEdBQ3pCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUl0RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUdoRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQzs7Ozs7Ozs7OztBQVduRixNQUFNLE9BQU8sMkJBQTJCO0lBOEVwQyxZQUNZLGdCQUFrQyxFQUNsQyx1QkFBZ0QsRUFDaEQsTUFBYyxFQUNkLGNBQXFDLEVBQ3RDLGFBQXVDLEVBQ3RDLGlCQUFvQyxFQUNwQyxTQUFvQjtJQUM1QixRQUFRO0lBQ1IsbUNBQW1DO0lBQzNCLGdCQUE2QyxFQUM3QyxpQkFBb0MsRUFDcEMsVUFBc0I7UUFYdEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyw0QkFBdUIsR0FBdkIsdUJBQXVCLENB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ZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29tcG9uZW50UmVmLFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbnB1dCxcbiAgICBOZ1pvbmUsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZSxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBUeXBlLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE5vZGVFbnRyaWVzVGVtcGxhdGVzU2VydmljZSB9IGZyb20gJy4vbm9kZS1lbnRyaWVzLXRlbXBsYXRlcy5zZXJ2aWNlJztcbmltcG9ydCB7IE5vZGVFbnRyaWVzQ29tcG9uZW50IH0gZnJvbSAnLi9ub2RlLWVudHJpZXMuY29tcG9uZW50JztcbmltcG9ydCB7XG4gICAgRmV0Y2hFdmVudCxcbiAgICBHcmlkQ29uZmlnLFxuICAgIEludGVyYWN0aW9uVHlwZSxcbiAgICBMaXN0RHJhZ0dyb3BDb25maWcsXG4gICAgTGlzdEV2ZW50SW50ZXJmYWNlLFxuICAgIExpc3RPcHRpb25zLFxuICAgIExpc3RPcHRpb25zQ29uZmlnLFxuICAgIExpc3RTb3J0Q29uZmlnLFxuICAgIE5vZGVDbGlja0V2ZW50LFxuICAgIE5vZGVFbnRyaWVzRGF0YVR5cGUsXG4gICAgTm9kZUVudHJpZXNEaXNwbGF5VHlwZSxcbn0gZnJvbSAnLi9lbnRyaWVzLW1vZGVsJztcbmltcG9ydCB7IE5vZGVEYXRhU291cmNlIH0gZnJvbSAnLi9ub2RlLWRhdGEtc291cmNlJztcbmltcG9ydCB7IEhlbHBlciB9IGZyb20gJy4uL3V0aWwvaGVscGVyJztcbmltcG9ydCB7IE5vZGVFbnRyaWVzU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL25vZGUtZW50cmllcy5zZXJ2aWNlJztcbmltcG9ydCB7IE9wdGlvbkl0ZW0sIFNjb3BlIH0gZnJvbSAnLi4vdHlwZXMvb3B0aW9uLWl0ZW0nO1xuaW1wb3J0IHsgTm9kZUhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9ub2RlLWhlbHBlci5zZXJ2aWNlJztcbmltcG9ydCB7IExpc3RJdGVtIH0gZnJvbSAnLi4vdHlwZXMvbGlzdC1pdGVtJztcbmltcG9ydCB7IFRlbXBvcmFyeVN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdGVtcG9yYXJ5LXN0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uUmVmZXJlbmNlLCBOb2RlLCBVc2VyIH0gZnJvbSAnbmd4LWVkdS1zaGFyaW5nLWFwaSc7XG5pbXBvcnQgeyBWaXJ0dWFsTm9kZSB9IGZyb20gJy4uL3R5cGVzL2FwaS1tb2RlbHMnO1xuaW1wb3J0IHsgT3B0aW9uc0hlbHBlckRhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvb3B0aW9ucy1oZWxwZXItZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IFVJU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3VpLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2VzLW5vZGUtZW50cmllcy13cmFwcGVyJyxcbiAgICB0ZW1wbGF0ZTogYDxlcy1ub2RlLWVudHJpZXNcbiAgICAgICAgI25vZGVFbnRyaWVzQ29tcG9uZW50XG4gICAgICAgICpuZ0lmPVwiIWN1c3RvbU5vZGVMaXN0Q29tcG9uZW50XCJcbiAgICA+PC9lcy1ub2RlLWVudHJpZXM+YCxcbiAgICBwcm92aWRlcnM6IFtOb2RlRW50cmllc1NlcnZpY2UsIE9wdGlvbnNIZWxwZXJEYXRhU2VydmljZSwgTm9kZUVudHJpZXNUZW1wbGF0ZXNTZXJ2aWNlXSxcbn0pXG5leHBvcnQgY2xhc3MgTm9kZUVudHJpZXNXcmFwcGVyQ29tcG9uZW50PFQgZXh0ZW5kcyBOb2RlRW50cmllc0RhdGFUeXBlPlxuICAgIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgTGlzdEV2ZW50SW50ZXJmYWNlPFQ+XG57XG4gICAgLyoqXG4gICAgICogdGl0bGUgKGFib3ZlKSB0aGUgdGFibGUvZ3JpZFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoJ3RpdGxlJykgdGl0bGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgLyoqXG4gICAgICogZGF0YSBzaG93biB3aGVuIGRhdGEgc291cmNlIGlzIGVtcHR5XG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZCgnZW1wdHknKSBlbXB0eVJlZjogVGVtcGxhdGVSZWY8YW55PjtcbiAgICAvKipcbiAgICAgKiBjdXN0b20gYXJlYSBmb3IgYWN0aW9ucyBvbmx5IGZvciBOb2RlRW50cmllc0Rpc3BsYXlUeXBlLlNtYWxsR3JpZCAocGVyIGNhcmQgYXQgdGhlIGJvdHRvbSlcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKCdhY3Rpb25BcmVhJykgYWN0aW9uQXJlYVJlZjogVGVtcGxhdGVSZWY8YW55PjtcbiAgICAvKipcbiAgICAgKiBjdXN0b20gYXJlYSBmb3IgYW4gb3ZlcmxheSBcImFib3ZlXCIgZWFjaCBjYXJkIChpLmUuIHRvIHNob3cgZGlzYWJsZWQgaW5mb3MpLCBvbmx5IGZvciBOb2RlRW50cmllc0Rpc3BsYXlUeXBlLlNtYWxsR3JpZCAmIG9kZUVudHJpZXNEaXNwbGF5VHlwZS5HcmlkXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZCgnb3ZlcmxheScpIG92ZXJsYXlSZWY6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQFZpZXdDaGlsZCgnbm9kZUVudHJpZXNDb21wb25lbnQnKSBub2RlRW50cmllc0NvbXBvbmVudFJlZjogTm9kZUVudHJpZXNDb21wb25lbnQ8VD47XG4gICAgQElucHV0KCkgZGF0YVNvdXJjZTogTm9kZURhdGFTb3VyY2U8VD47XG4gICAgQElucHV0KCkgc2NvcGU6IFNjb3BlO1xuICAgIEBJbnB1dCgpIGNvbHVtbnM6IExpc3RJdGVtW107XG4gICAgQElucHV0KCkgY29uZmlndXJlQ29sdW1uczogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBjaGVja2JveCA9IHRydWU7XG4gICAgQE91dHB1dCgpIGNvbHVtbnNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPExpc3RJdGVtW10+KCk7XG4gICAgQElucHV0KCkgZ2xvYmFsT3B0aW9uczogT3B0aW9uSXRlbVtdO1xuICAgIEBJbnB1dCgpIGRpc3BsYXlUeXBlID0gTm9kZUVudHJpZXNEaXNwbGF5VHlwZS5HcmlkO1xuICAgIEBPdXRwdXQoKSBkaXNwbGF5VHlwZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Tm9kZUVudHJpZXNEaXNwbGF5VHlwZT4oKTtcbiAgICBASW5wdXQoKSBlbGVtZW50SW50ZXJhY3Rpb25UeXBlID0gSW50ZXJhY3Rpb25UeXBlLkRlZmF1bHRBY3Rpb25MaW5rO1xuICAgIEBJbnB1dCgpIHNvcnQ6IExpc3RTb3J0Q29uZmlnO1xuICAgIEBJbnB1dCgpIGRyYWdEcm9wOiBMaXN0RHJhZ0dyb3BDb25maWc8VD47XG4gICAgQElucHV0KCkgZ3JpZENvbmZpZzogR3JpZENvbmZpZztcbiAgICAvKipcbiAgICAgKiB0aGlzIGNhbiBiZSBzZXQgaW5zdGVhZCBvZiBjYWxsaW5nIGluaXRPcHRpb25zR2VuZXJhdG9yKClcbiAgICAgKi9cbiAgICBASW5wdXQoKSBpbml0Q29uZmlnOiBMaXN0T3B0aW9uc0NvbmZpZztcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoaXMgbm9kZS1lbnRyaWVzIGluc3RhbmNlIHJlcHJlc2VudHMgdGhlIHBhZ2UncyBtYWluIGNvbnRlbnQuXG4gICAgICpcbiAgICAgKiBPbmx5IHNldCB0byB0cnVlIGZvciBvbmUgaW5zdGFuY2UgcGVyIHBhZ2UuXG4gICAgICpcbiAgICAgKiBJZiB0cnVlLCB0aGlzIGluc3RhbmNlIHdpbGxcbiAgICAgKiAtIGhhbmRsZSBwYWdlLXdpZGUga2V5Ym9hcmQgc2hvcnRjdXRzXG4gICAgICogLSB0YWtlIGNvbnRyb2wgb2YgdGhlIGBwYWdlYCBhbmQgYHBhZ2VTaXplYCBxdWVyeSBwYXJhbWV0ZXJzIGZvciBwYWdpbmF0aW9uXG4gICAgICovXG4gICAgQElucHV0KCkgcHJpbWFyeUluc3RhbmNlOiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFVJIGhpbnRzIGZvciB3aGV0aGVyIGEgc2luZ2xlIGNsaWNrIHdpbGwgY2F1c2UgYSBkeW5hbWljIGFjdGlvbi5cbiAgICAgKlxuICAgICAqIFRoaXMgZG9lcyBub3QgY29uZmlndXJlIHRoZSBhY3R1YWwgYmVoYXZpb3IgYnV0IG9ubHkgVUkgaGludHMgdG8gdGhlIHVzZXIuIEhpbnRzIGluY2x1ZGVcbiAgICAgKiBob3ZlciBlZmZlY3RzIGFuZCBhIGNoYW5nZWQgY3Vyc29yLlxuICAgICAqXG4gICAgICogLSBXaGVuIGNob29zaW5nICdzdGF0aWMnLCB0aGUgYGNsaWNrSXRlbWAgZXZlbnQgc2hvdWxkIHRyaWdnZXIgc29tZSBzdGF0aW9uYXJ5IGFjdGlvbiBsaWtlXG4gICAgICogICBzZWxlY3RpbmcgdGhlIGVsZW1lbnQgb3IgZGlzcGxheWluZyBpbmZvcm1hdGlvbiBpbiBhIGNvbXBsZW1lbnRhcnkgcGFnZSBhcmVhLiBUaGVcbiAgICAgKiAgIGBkYmxDbGlja0l0ZW1gIGV2ZW50IGNhbiBiZSB1c2VkIGZvciBhIG1vcmUgZGlzcnVwdGl2ZSBhY3Rpb24uXG4gICAgICogLSBXaGVuIGNob29zaW5nICdkeW5hbWljJywgdGhlIGBjbGlja0l0ZW1gIGV2ZW50IHNob3VsZCB0cmlnZ2VyIGEgbWFqb3IgYWN0aW9uIGxpa2VcbiAgICAgKiAgIG5hdmlnYXRpbmcgdG8gYSBuZXcgcGFnZSBvciBjbG9zaW5nIGEgZGlhbG9nLlxuICAgICAqL1xuICAgIC8vIFRPRE86IENvbnNpZGVyIGNvbnRyb2xsaW5nIHRoZSB1aSBoaW50cyBhbmQgdGhlIGFjdHVhbCBiZWhhdmlvciB3aXRoIGEgc2luZ2xlIG9wdGlvbi5cbiAgICBASW5wdXQoKSBzaW5nbGVDbGlja0hpbnQ6ICdkeW5hbWljJyB8ICdzdGF0aWMnID0gJ2R5bmFtaWMnO1xuICAgIC8qKlxuICAgICAqIERvIG5vdCBsb2FkIG1vcmUgZGF0YSBvbiBzY3JvbGwuXG4gICAgICovXG4gICAgQElucHV0KCkgZGlzYWJsZUluZmluaXRlU2Nyb2xsID0gZmFsc2U7XG5cbiAgICBAT3V0cHV0KCkgZmV0Y2hEYXRhID0gbmV3IEV2ZW50RW1pdHRlcjxGZXRjaEV2ZW50PigpO1xuICAgIEBPdXRwdXQoKSBjbGlja0l0ZW0gPSBuZXcgRXZlbnRFbWl0dGVyPE5vZGVDbGlja0V2ZW50PFQ+PigpO1xuICAgIEBPdXRwdXQoKSBkYmxDbGlja0l0ZW0gPSBuZXcgRXZlbnRFbWl0dGVyPE5vZGVDbGlja0V2ZW50PFQ+PigpO1xuICAgIEBPdXRwdXQoKSBzb3J0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxMaXN0U29ydENvbmZpZz4oKTtcbiAgICBAT3V0cHV0KCkgdmlydHVhbE5vZGVzQWRkZWQ7XG4gICAgQE91dHB1dCgpIGRpc3BsYXlUeXBlQ2hhbmdlZDtcblxuICAgIGN1c3RvbU5vZGVMaXN0Q29tcG9uZW50OiBUeXBlPE5vZGVFbnRyaWVzQ29tcG9uZW50PFQ+PjtcbiAgICBwcml2YXRlIGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPE5vZGVFbnRyaWVzQ29tcG9uZW50PFQ+PjtcbiAgICBwcml2YXRlIG9wdGlvbnM6IExpc3RPcHRpb25zO1xuICAgIHByaXZhdGUgZGVzdHJveWVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgICAgIHByaXZhdGUgdGVtcG9yYXJ5U3RvcmFnZVNlcnZpY2U6IFRlbXBvcmFyeVN0b3JhZ2VTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgICAgICBwcml2YXRlIGVudHJpZXNTZXJ2aWNlOiBOb2RlRW50cmllc1NlcnZpY2U8VD4sXG4gICAgICAgIHB1YmxpYyBvcHRpb25zSGVscGVyOiBPcHRpb25zSGVscGVyRGF0YVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbm9kZUhlbHBlclNlcnZpY2U6IE5vZGVIZWxwZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHVpU2VydmljZTogVUlTZXJ2aWNlLFxuICAgICAgICAvLyBAVE9ET1xuICAgICAgICAvLyBwcml2YXRlIG1haW5OYXY6IE1haW5OYXZTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHRlbXBsYXRlc1NlcnZpY2U6IE5vZGVFbnRyaWVzVGVtcGxhdGVzU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICApIHtcbiAgICAgICAgLy8gcmVndWxhcnkgcmUtYmluZCB0ZW1wbGF0ZSBzaW5jZSBpdCBtaWdodCBoYXZlIHVwZGF0ZWQgd2l0aG91dCBuZ0NoYW5nZXMgdHJpZ2dlclxuICAgICAgICAvKlxuICAgICAgICBuZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT5cbiAgICAgICAgICAgIHNldEludGVydmFsKCgpID0+IHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLmVtcHR5UmVmID0gdGhpcy5lbXB0eVJlZilcbiAgICAgICAgKTtcbiAgICAgICAgKi9cbiAgICAgICAgdGhpcy52aXJ0dWFsTm9kZXNBZGRlZCA9IHRoaXMub3B0aW9uc0hlbHBlci52aXJ0dWFsTm9kZXNBZGRlZDtcbiAgICAgICAgdGhpcy5kaXNwbGF5VHlwZUNoYW5nZWQgPSB0aGlzLm9wdGlvbnNIZWxwZXIuZGlzcGxheVR5cGVDaGFuZ2VkO1xuICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLnNlbGVjdGlvbi5jaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zSGVscGVyLmdldERhdGEoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9uc0hlbHBlci5nZXREYXRhKCkuc2VsZWN0ZWRPYmplY3RzID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uc2VsZWN0ZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zSGVscGVyLmdldERhdGEoKS5hY3RpdmVPYmplY3RzID0gdGhpcy5lbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uc2VsZWN0ZWQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fybignb3B0aW9uc0hlbHBlciBpcyBub3QgaW5pdGFsaXplZCBjb3JyZWN0bHk7IGRhdGEgaXMgZW1wdHknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMub3B0aW9uc0hlbHBlci5yZWZyZXNoQ29tcG9uZW50cygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucHJpbWFyeUluc3RhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnNIZWxwZXIucmVnaXN0ZXJHbG9iYWxLZXlib2FyZFNob3J0Y3V0cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogeyBba2V5OiBzdHJpbmddOiBTaW1wbGVDaGFuZ2UgfSA9IHt9KSB7XG4gICAgICAgIGlmICghdGhpcy5jb21wb25lbnRSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2UubGlzdCA9IHRoaXM7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2UuZGF0YVNvdXJjZSA9IHRoaXMuZGF0YVNvdXJjZTtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5zY29wZSA9IHRoaXMuc2NvcGU7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2UuY29sdW1ucyA9IHRoaXMuY29sdW1ucztcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5jb25maWd1cmVDb2x1bW5zID0gdGhpcy5jb25maWd1cmVDb2x1bW5zO1xuICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLmNoZWNrYm94ID0gdGhpcy5jaGVja2JveDtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5jb2x1bW5zQ2hhbmdlID0gdGhpcy5jb2x1bW5zQ2hhbmdlO1xuICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLmRpc3BsYXlUeXBlID0gdGhpcy5kaXNwbGF5VHlwZTtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5lbGVtZW50SW50ZXJhY3Rpb25UeXBlID0gdGhpcy5lbGVtZW50SW50ZXJhY3Rpb25UeXBlO1xuICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLmdyaWRDb25maWcgPSB0aGlzLmdyaWRDb25maWc7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2Uub3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5nbG9iYWxPcHRpb25zID0gdGhpcy5nbG9iYWxPcHRpb25zO1xuICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLnNvcnQgPSB0aGlzLnNvcnQ7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2Uuc29ydENoYW5nZSA9IHRoaXMuc29ydENoYW5nZTtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5kcmFnRHJvcCA9IHRoaXMuZHJhZ0Ryb3A7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2UuY2xpY2tJdGVtID0gdGhpcy5jbGlja0l0ZW07XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2UuZGJsQ2xpY2tJdGVtID0gdGhpcy5kYmxDbGlja0l0ZW07XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2UuZmV0Y2hEYXRhID0gdGhpcy5mZXRjaERhdGE7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2UucHJpbWFyeUluc3RhbmNlID0gdGhpcy5wcmltYXJ5SW5zdGFuY2U7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2Uuc2luZ2xlQ2xpY2tIaW50ID0gdGhpcy5zaW5nbGVDbGlja0hpbnQ7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2UuZGlzYWJsZUluZmluaXRlU2Nyb2xsID0gdGhpcy5kaXNhYmxlSW5maW5pdGVTY3JvbGw7XG5cbiAgICAgICAgaWYgKGNoYW5nZXNbJ2luaXRDb25maWcnXSkge1xuICAgICAgICAgICAgdGhpcy5pbml0T3B0aW9uc0dlbmVyYXRvcih0aGlzLmluaXRDb25maWcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbXBvbmVudFJlZikge1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UuY2hhbmdlRGV0ZWN0b3JSZWY/LmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUaGlzIG1pZ2h0IG5lZWQgd3JhcHBpbmcgd2l0aCBgc2V0VGltZW91dGAuXG4gICAgICAgIHRoaXMudXBkYXRlVGVtcGxhdGVzKCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveWVkLm5leHQoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95ZWQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXBsYWNlcyB0aGlzIHdyYXBwZXIgd2l0aCB0aGUgY29uZmlndXJlZCBjdXN0b20tbm9kZS1saXN0IGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBwcml2YXRlIGluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3VzdG9tTm9kZUxpc3RDb21wb25lbnQgPSB0aGlzLnRlbXBvcmFyeVN0b3JhZ2VTZXJ2aWNlLmdldChcbiAgICAgICAgICAgIFRlbXBvcmFyeVN0b3JhZ2VTZXJ2aWNlLkNVU1RPTV9OT0RFX0VOVFJJRVNfQ09NUE9ORU5ULFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tTm9kZUxpc3RDb21wb25lbnQgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmID0gdGhpcy51aVNlcnZpY2UuaW5qZWN0QW5ndWxhckNvbXBvbmVudChcbiAgICAgICAgICAgIHRoaXMudmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tTm9kZUxpc3RDb21wb25lbnQsXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgIC8vIElucHV0IGJpbmRpbmdzIGFyZSBpbml0aWFsaXplZCBpbiBgbmdPbkNoYW5nZXNgLlxuICAgICAgICAgICAgdGhpcy5nZXRPdXRwdXRCaW5kaW5ncygpLFxuICAgICAgICApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2ltcGxlIG1hcCBvZiB0aGUgb3V0cHV0IGJpbmRpbmdzIGRlZmluZWQgaW4gdGhpcyBjb21wb25lbnQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRPdXRwdXRCaW5kaW5ncygpOiB7IFtrZXk6IHN0cmluZ106IEV2ZW50RW1pdHRlcjxhbnk+IH0ge1xuICAgICAgICBjb25zdCBvdXRwdXRCaW5kaW5nczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0aGlzKSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSAodGhpcyBhcyBhbnkpW2tleV07XG4gICAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBFdmVudEVtaXR0ZXIpIHtcbiAgICAgICAgICAgICAgICBvdXRwdXRCaW5kaW5nc1trZXldID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dHB1dEJpbmRpbmdzO1xuICAgIH1cblxuICAgIGdldERpc3BsYXlUeXBlKCk6IE5vZGVFbnRyaWVzRGlzcGxheVR5cGUge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXNwbGF5VHlwZTtcbiAgICB9XG5cbiAgICBzZXREaXNwbGF5VHlwZShkaXNwbGF5VHlwZTogTm9kZUVudHJpZXNEaXNwbGF5VHlwZSk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc3BsYXlUeXBlID0gZGlzcGxheVR5cGU7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2UuZGlzcGxheVR5cGUgPSBkaXNwbGF5VHlwZTtcbiAgICAgICAgdGhpcy5uZ09uQ2hhbmdlcygpO1xuICAgICAgICB0aGlzLmRpc3BsYXlUeXBlQ2hhbmdlLmVtaXQoZGlzcGxheVR5cGUpO1xuICAgIH1cblxuICAgIHVwZGF0ZU5vZGVzKG5vZGVzOiB2b2lkIHwgVFtdKSB7XG4gICAgICAgIGlmICghbm9kZXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZ2V0RGF0YSgpLmZvckVhY2goKGQpID0+IHtcbiAgICAgICAgICAgIGxldCBoaXRzID0gKG5vZGVzIGFzIFRbXSkuZmlsdGVyKChuKSA9PiAobiBhcyBOb2RlKS5yZWYuaWQgPT09IChkIGFzIE5vZGUpLnJlZi5pZCk7XG4gICAgICAgICAgICBpZiAoaGl0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBoYW5kbGUgaWYgdGhlIG9yaWdpbmFsIGhhcyBjaGFuZ2VkIChmb3IgY29sbGVjdGlvbiByZWZzKVxuICAgICAgICAgICAgICAgIGhpdHMgPSAobm9kZXMgYXMgVFtdKS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgIChuKSA9PiAobiBhcyBOb2RlKS5yZWYuaWQgPT09IChkIGFzIHVua25vd24gYXMgQ29sbGVjdGlvblJlZmVyZW5jZSkub3JpZ2luYWxJZCxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGhpdHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlSGVscGVyU2VydmljZS5jb3B5RGF0YVRvTm9kZShkIGFzIE5vZGUsIGhpdHNbMF0gYXMgTm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyB0cmlnZ2VyIHJlYnVpbGRcbiAgICAgICAgaWYgKHRoaXMuZGF0YVNvdXJjZSBpbnN0YW5jZW9mIE5vZGVEYXRhU291cmNlKSB7XG4gICAgICAgICAgICAodGhpcy5kYXRhU291cmNlIGFzIE5vZGVEYXRhU291cmNlPFQ+KS5yZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb2xkU2VsZWN0aW9uID0gdGhpcy5lbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uc2VsZWN0ZWQ7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uLnNlbGVjdChcbiAgICAgICAgICAgIC4uLm9sZFNlbGVjdGlvbi5tYXAoXG4gICAgICAgICAgICAgICAgKG8pID0+IHRoaXMuZGF0YVNvdXJjZS5nZXREYXRhKCkuZmlsdGVyKChkKSA9PiBIZWxwZXIub2JqZWN0RXF1YWxzKG8sIGQpKT8uWzBdLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgc2hvd1Jlb3JkZXJDb2x1bW5zRGlhbG9nKCk6IHZvaWQge31cblxuICAgIGFkZFZpcnR1YWxOb2Rlcyh2aXJ0dWFsOiBUW10pOiB2b2lkIHtcbiAgICAgICAgdmlydHVhbCA9IHZpcnR1YWwubWFwKChvKSA9PiB7XG4gICAgICAgICAgICAobyBhcyBWaXJ0dWFsTm9kZSkudmlydHVhbCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gbztcbiAgICAgICAgfSk7XG4gICAgICAgIHZpcnR1YWwuZm9yRWFjaCgodikgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbnMgPSB0aGlzLmRhdGFTb3VyY2VcbiAgICAgICAgICAgICAgICAuZ2V0RGF0YSgpXG4gICAgICAgICAgICAgICAgLnNvbWUoKGQpID0+XG4gICAgICAgICAgICAgICAgICAgIChkIGFzIE5vZGUpLnJlZlxuICAgICAgICAgICAgICAgICAgICAgICAgPyAoZCBhcyBOb2RlKS5yZWY/LmlkID09PSAodiBhcyBOb2RlKS5yZWY/LmlkXG4gICAgICAgICAgICAgICAgICAgICAgICA6IChkIGFzIFVzZXIpLmF1dGhvcml0eU5hbWUgPT09ICh2IGFzIFVzZXIpLmF1dGhvcml0eU5hbWUsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChjb250YWlucykge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTm9kZXMoW3ZdKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlLmFwcGVuZERhdGEoW3ZdLCAnYmVmb3JlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLnNlbGVjdGlvbi5zZWxlY3QoLi4udmlydHVhbCk7XG4gICAgICAgIHRoaXMudmlydHVhbE5vZGVzQWRkZWQuZW1pdCh2aXJ0dWFsIGFzIE5vZGVbXSk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHNldE9wdGlvbnMob3B0aW9uczogTGlzdE9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgdGhpcy5uZ09uQ2hhbmdlcygpO1xuICAgIH1cblxuICAgIGdldFNlbGVjdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uO1xuICAgIH1cblxuICAgIGFzeW5jIGluaXRPcHRpb25zR2VuZXJhdG9yKGNvbmZpZzogTGlzdE9wdGlvbnNDb25maWcpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5vcHRpb25zSGVscGVyLmluaXRDb21wb25lbnRzKGNvbmZpZy5hY3Rpb25iYXIsIHRoaXMpO1xuICAgICAgICB0aGlzLm9wdGlvbnNIZWxwZXIuc2V0RGF0YSh7XG4gICAgICAgICAgICBzY29wZTogdGhpcy5lbnRyaWVzU2VydmljZS5zY29wZSxcbiAgICAgICAgICAgIGFjdGl2ZU9iamVjdHM6IHRoaXMuZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uLnNlbGVjdGVkLFxuICAgICAgICAgICAgc2VsZWN0ZWRPYmplY3RzOiB0aGlzLmVudHJpZXNTZXJ2aWNlLnNlbGVjdGlvbi5zZWxlY3RlZCxcbiAgICAgICAgICAgIGFsbE9iamVjdHM6IHRoaXMuZGF0YVNvdXJjZS5nZXREYXRhKCksXG4gICAgICAgICAgICBwYXJlbnQ6IGNvbmZpZy5wYXJlbnQsXG4gICAgICAgICAgICBjdXN0b21PcHRpb25zOiBjb25maWcuY3VzdG9tT3B0aW9ucyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMub3B0aW9uc0hlbHBlci5yZWZyZXNoQ29tcG9uZW50cygpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgLy8gUHJldmVudCBjaGFuZ2VkLWFmdGVyLWNoZWNrZWQgZXJyb3JcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB0aGlzLnVwZGF0ZVRlbXBsYXRlcygpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVRlbXBsYXRlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZXNTZXJ2aWNlLnRpdGxlID0gdGhpcy50aXRsZVJlZjtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZXNTZXJ2aWNlLmVtcHR5ID0gdGhpcy5lbXB0eVJlZjtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZXNTZXJ2aWNlLmFjdGlvbkFyZWEgPSB0aGlzLmFjdGlvbkFyZWFSZWY7XG4gICAgICAgIHRoaXMudGVtcGxhdGVzU2VydmljZS5vdmVybGF5ID0gdGhpcy5vdmVybGF5UmVmO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJlc2V0IHRoZSBwYWdpbmF0aW9uIHRvIHRoZSBmaXJzdCBwYWdlXG4gICAgICogaGludDogdGhpcyB3aWxsIGRvIG5vdGhpbmcgaW4gY2FzZSB0aGUgcGFnaW5hdGlvblN0cmF0ZWd5ICE9PSBQYWdpbmF0aW9uXG4gICAgICovXG4gICAgcmVzZXRQYWdpbmF0aW9uKCkge1xuICAgICAgICB0aGlzLm5vZGVFbnRyaWVzQ29tcG9uZW50UmVmPy5wYWdpbmF0b3I/LmZpcnN0UGFnZSgpO1xuICAgIH1cblxuICAgIGRlbGV0ZU5vZGVzKG9iamVjdHM6IFRbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UucmVtb3ZlRGF0YShvYmplY3RzKTtcbiAgICAgICAgdGhpcy5nZXRTZWxlY3Rpb24oKS5jbGVhcigpO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,131 @@
1
+ import { Component, Optional, ViewChild, } from '@angular/core';
2
+ import { MatPaginator } from '@angular/material/paginator';
3
+ import { Subject } from 'rxjs';
4
+ import { first, takeUntil } from 'rxjs/operators';
5
+ import { NodeEntriesDisplayType } from './entries-model';
6
+ import { NodeDataSourceRemote } from './node-data-source-remote';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "./node-entries-global.service";
9
+ import * as i2 from "../services/node-entries.service";
10
+ import * as i3 from "./node-entries-templates.service";
11
+ import * as i4 from "../services/abstract/keyboard-shortcuts.service";
12
+ import * as i5 from "@angular/router";
13
+ import * as i6 from "@ngx-translate/core";
14
+ import * as i7 from "@angular/common";
15
+ import * as i8 from "@angular/material/paginator";
16
+ import * as i9 from "./node-entries-card-grid/node-entries-card-grid.component";
17
+ import * as i10 from "./node-entries-table/node-entries-table.component";
18
+ export class NodeEntriesComponent {
19
+ constructor(changeDetectorRef, entriesGlobalService, entriesService, templatesService, globalKeyboardShortcuts, route, translate) {
20
+ this.changeDetectorRef = changeDetectorRef;
21
+ this.entriesGlobalService = entriesGlobalService;
22
+ this.entriesService = entriesService;
23
+ this.templatesService = templatesService;
24
+ this.globalKeyboardShortcuts = globalKeyboardShortcuts;
25
+ this.route = route;
26
+ this.translate = translate;
27
+ this.NodeEntriesDisplayType = NodeEntriesDisplayType;
28
+ this.destroyed = new Subject();
29
+ }
30
+ ngOnInit() {
31
+ if (this.entriesService.primaryInstance) {
32
+ this.registerGlobalKeyboardShortcuts();
33
+ }
34
+ if (this.entriesService.dataSource instanceof NodeDataSourceRemote) {
35
+ // We don't require `sort` to be defined, but if it is set but not yet ready (`null`),
36
+ // we wait for its value before initializing the data source, so the first request is
37
+ // sent with the correct sort configuration. That is why we explicitly do not drop
38
+ // `undefined` with the `first` operator below.
39
+ this.entriesService.sortSubject
40
+ .pipe(first((sort) => sort !== null))
41
+ .subscribe(() => this.initRemoteDataSource(this.entriesService.dataSource));
42
+ }
43
+ }
44
+ ngAfterViewInit() {
45
+ if (this.paginator) {
46
+ this.initPaginator(this.paginator);
47
+ this.changeDetectorRef.detectChanges();
48
+ }
49
+ }
50
+ ngOnDestroy() {
51
+ this.destroyed.next();
52
+ this.destroyed.complete();
53
+ }
54
+ registerGlobalKeyboardShortcuts() {
55
+ this.globalKeyboardShortcuts.register([
56
+ {
57
+ modifiers: ['Ctrl/Cmd'],
58
+ keyCode: 'KeyA',
59
+ ignoreWhen: (event) =>
60
+ // SmallGrid doesn't support selection
61
+ this.entriesService.displayType === NodeEntriesDisplayType.SmallGrid,
62
+ callback: () => this.entriesService.toggleSelectAll(),
63
+ },
64
+ ], { until: this.destroyed });
65
+ }
66
+ initRemoteDataSource(dataSource) {
67
+ const pageSize = this.entriesGlobalService.getPaginatorSizeOptions(this.entriesService.scope)[0];
68
+ dataSource.init({
69
+ paginationConfig: {
70
+ defaultPageSize: pageSize,
71
+ strategy: this.entriesService.paginationStrategy,
72
+ },
73
+ defaultSort: this.entriesService.sort,
74
+ });
75
+ if (this.entriesService.primaryInstance) {
76
+ // Automatic query-params handling is only supported by node-data-source-remote.
77
+ dataSource.registerQueryParameters(this.route);
78
+ }
79
+ }
80
+ async initPaginator(paginator) {
81
+ paginator._intl.itemsPerPageLabel = await this.translate
82
+ .get('PAGINATOR.itemsPerPageLabel')
83
+ .toPromise();
84
+ paginator._intl.nextPageLabel = await this.translate
85
+ .get('PAGINATOR.nextPageLabel')
86
+ .toPromise();
87
+ paginator._intl.previousPageLabel = await this.translate
88
+ .get('PAGINATOR.previousPageLabel')
89
+ .toPromise();
90
+ paginator._intl.getRangeLabel = (page, pageSize, length) => this.translate.instant('PAGINATOR.getRangeLabel', {
91
+ page: page + 1,
92
+ pageSize,
93
+ length,
94
+ pageCount: Math.ceil(length / pageSize),
95
+ });
96
+ // Connect data source.
97
+ this.entriesService.dataSource$.pipe(takeUntil(this.destroyed)).subscribe((dataSource) => {
98
+ if (dataSource instanceof NodeDataSourceRemote) {
99
+ dataSource.paginator = paginator;
100
+ }
101
+ else {
102
+ paginator.length = dataSource?.getTotal();
103
+ dataSource
104
+ ?.connectPagination()
105
+ .pipe(takeUntil(this.destroyed))
106
+ .subscribe(() => {
107
+ paginator.length = dataSource.getTotal();
108
+ });
109
+ }
110
+ });
111
+ }
112
+ openPage(page) {
113
+ this.entriesService.fetchData.emit({
114
+ offset: page.pageIndex * page.pageSize,
115
+ amount: page.pageSize,
116
+ reset: true,
117
+ });
118
+ }
119
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: NodeEntriesComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.NodeEntriesGlobalService }, { token: i2.NodeEntriesService }, { token: i3.NodeEntriesTemplatesService }, { token: i4.KeyboardShortcutsService, optional: true }, { token: i5.ActivatedRoute }, { token: i6.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
120
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", type: NodeEntriesComponent, selector: "es-node-entries", viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }], ngImport: i0, template: "<div class=\"top-matter\">\n <div class=\"title\">\n <ng-container *ngTemplateOutlet=\"templatesService.title\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"templatesService.entriesTopMatter\"></ng-container>\n</div>\n<ng-container *ngIf=\"entriesService.dataSource\">\n <ng-container *ngIf=\"entriesService.displayType === NodeEntriesDisplayType.Table\">\n <es-node-entries-table></es-node-entries-table>\n </ng-container>\n <ng-container\n *ngIf=\"\n entriesService.displayType === NodeEntriesDisplayType.SmallGrid ||\n entriesService.displayType === NodeEntriesDisplayType.Grid\n \"\n >\n <es-node-entries-card-grid [displayType]=\"entriesService.displayType\">\n </es-node-entries-card-grid>\n </ng-container>\n <ng-container *ngIf=\"entriesService.dataSource.isEmpty() && !entriesService.dataSource.isLoading\">\n <ng-container *ngTemplateOutlet=\"templatesService.empty\"></ng-container>\n </ng-container>\n</ng-container>\n<mat-paginator\n #paginator\n [pageSizeOptions]=\"entriesGlobalService.getPaginatorSizeOptions(entriesService.scope)\"\n *ngIf=\"entriesService.paginationStrategy === 'paginator'\"\n [class.display-none]=\"\n (entriesService.dataSource.isLoading && entriesService.dataSource.isLoading !== 'page') ||\n entriesService.dataSource.isEmpty()\n \"\n (page)=\"openPage($event)\"\n></mat-paginator>\n", styles: [".top-matter{display:flex;align-items:center;flex-wrap:wrap;gap:12px 0;position:relative;z-index:1}.top-matter .title{display:flex;flex-grow:1}\n"], dependencies: [{ kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i8.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "component", type: i9.NodeEntriesCardGridComponent, selector: "es-node-entries-card-grid", inputs: ["displayType"] }, { kind: "component", type: i10.NodeEntriesTableComponent, selector: "es-node-entries-table" }] }); }
121
+ }
122
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: NodeEntriesComponent, decorators: [{
123
+ type: Component,
124
+ args: [{ selector: 'es-node-entries', template: "<div class=\"top-matter\">\n <div class=\"title\">\n <ng-container *ngTemplateOutlet=\"templatesService.title\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"templatesService.entriesTopMatter\"></ng-container>\n</div>\n<ng-container *ngIf=\"entriesService.dataSource\">\n <ng-container *ngIf=\"entriesService.displayType === NodeEntriesDisplayType.Table\">\n <es-node-entries-table></es-node-entries-table>\n </ng-container>\n <ng-container\n *ngIf=\"\n entriesService.displayType === NodeEntriesDisplayType.SmallGrid ||\n entriesService.displayType === NodeEntriesDisplayType.Grid\n \"\n >\n <es-node-entries-card-grid [displayType]=\"entriesService.displayType\">\n </es-node-entries-card-grid>\n </ng-container>\n <ng-container *ngIf=\"entriesService.dataSource.isEmpty() && !entriesService.dataSource.isLoading\">\n <ng-container *ngTemplateOutlet=\"templatesService.empty\"></ng-container>\n </ng-container>\n</ng-container>\n<mat-paginator\n #paginator\n [pageSizeOptions]=\"entriesGlobalService.getPaginatorSizeOptions(entriesService.scope)\"\n *ngIf=\"entriesService.paginationStrategy === 'paginator'\"\n [class.display-none]=\"\n (entriesService.dataSource.isLoading && entriesService.dataSource.isLoading !== 'page') ||\n entriesService.dataSource.isEmpty()\n \"\n (page)=\"openPage($event)\"\n></mat-paginator>\n", styles: [".top-matter{display:flex;align-items:center;flex-wrap:wrap;gap:12px 0;position:relative;z-index:1}.top-matter .title{display:flex;flex-grow:1}\n"] }]
125
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.NodeEntriesGlobalService }, { type: i2.NodeEntriesService }, { type: i3.NodeEntriesTemplatesService }, { type: i4.KeyboardShortcutsService, decorators: [{
126
+ type: Optional
127
+ }] }, { type: i5.ActivatedRoute }, { type: i6.TranslateService }]; }, propDecorators: { paginator: [{
128
+ type: ViewChild,
129
+ args: [MatPaginator]
130
+ }] } });
131
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1lbnRyaWVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VkdS1zaGFyaW5nLXVpL3NyYy9saWIvbm9kZS1lbnRyaWVzL25vZGUtZW50cmllcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lZHUtc2hhcmluZy11aS9zcmMvbGliL25vZGUtZW50cmllcy9ub2RlLWVudHJpZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdILFNBQVMsRUFHVCxRQUFRLEVBQ1IsU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQWEsTUFBTSw2QkFBNkIsQ0FBQztBQUd0RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEQsT0FBTyxFQUF1QixzQkFBc0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBTTlFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7Ozs7QUFPakUsTUFBTSxPQUFPLG9CQUFvQjtJQVM3QixZQUNXLGlCQUFvQyxFQUNwQyxvQkFBOEMsRUFDOUMsY0FBcUMsRUFDckMsZ0JBQTZDLEVBQ2hDLHVCQUFpRCxFQUM3RCxLQUFxQixFQUNyQixTQUEyQjtRQU41QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBMEI7UUFDOUMsbUJBQWMsR0FBZCxjQUFjLENBQXVCO1FBQ3JDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBNkI7UUFDaEMsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUEwQjtRQUM3RCxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixjQUFTLEdBQVQsU0FBUyxDQUFr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QUFDLFFBQVE7WUFDdEMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3JCLEtBQUssRUFBRSxJQUFJO1NBQ2QsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs4R0ExSFEsb0JBQW9CO2tHQUFwQixvQkFBb0Isa0dBS2xCLFlBQVksZ0RDaEMzQixrM0NBaUNBOzsyRkROYSxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0ksaUJBQWlCOzswQkFrQnRCLFFBQVE7d0dBVFksU0FBUztzQkFBakMsU0FBUzt1QkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IsIFBhZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaXJzdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTm9kZUVudHJpZXNEYXRhVHlwZSwgTm9kZUVudHJpZXNEaXNwbGF5VHlwZSB9IGZyb20gJy4vZW50cmllcy1tb2RlbCc7XG5pbXBvcnQgeyBOb2RlRW50cmllc0dsb2JhbFNlcnZpY2UgfSBmcm9tICcuL25vZGUtZW50cmllcy1nbG9iYWwuc2VydmljZSc7XG5pbXBvcnQgeyBOb2RlRW50cmllc1RlbXBsYXRlc1NlcnZpY2UgfSBmcm9tICcuL25vZGUtZW50cmllcy10ZW1wbGF0ZXMuc2VydmljZSc7XG5pbXBvcnQgeyBOb2RlRW50cmllc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9ub2RlLWVudHJpZXMuc2VydmljZSc7XG5pbXBvcnQgeyBOb2RlLCBHZW5lcmljQXV0aG9yaXR5IH0gZnJvbSAnbmd4LWVkdS1zaGFyaW5nLWFwaSc7XG5pbXBvcnQgeyBLZXlib2FyZFNob3J0Y3V0c1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hYnN0cmFjdC9rZXlib2FyZC1zaG9ydGN1dHMuc2VydmljZSc7XG5pbXBvcnQgeyBOb2RlRGF0YVNvdXJjZVJlbW90ZSB9IGZyb20gJy4vbm9kZS1kYXRhLXNvdXJjZS1yZW1vdGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2VzLW5vZGUtZW50cmllcycsXG4gICAgdGVtcGxhdGVVcmw6ICdub2RlLWVudHJpZXMuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWydub2RlLWVudHJpZXMuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgTm9kZUVudHJpZXNDb21wb25lbnQ8VCBleHRlbmRzIE5vZGVFbnRyaWVzRGF0YVR5cGU+XG4gICAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveVxue1xuICAgIHJlYWRvbmx5IE5vZGVFbnRyaWVzRGlzcGxheVR5cGUgPSBOb2RlRW50cmllc0Rpc3BsYXlUeXBlO1xuXG4gICAgQFZpZXdDaGlsZChNYXRQYWdpbmF0b3IpIHBhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95ZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHB1YmxpYyBlbnRyaWVzR2xvYmFsU2VydmljZTogTm9kZUVudHJpZXNHbG9iYWxTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgZW50cmllc1NlcnZpY2U6IE5vZGVFbnRyaWVzU2VydmljZTxUPixcbiAgICAgICAgcHVibGljIHRlbXBsYXRlc1NlcnZpY2U6IE5vZGVFbnRyaWVzVGVtcGxhdGVzU2VydmljZSxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBnbG9iYWxLZXlib2FyZFNob3J0Y3V0czogS2V5Ym9hcmRTaG9ydGN1dHNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgKSB7fVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmVudHJpZXNTZXJ2aWNlLnByaW1hcnlJbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhpcy5yZWdpc3Rlckdsb2JhbEtleWJvYXJkU2hvcnRjdXRzKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZW50cmllc1NlcnZpY2UuZGF0YVNvdXJjZSBpbnN0YW5jZW9mIE5vZGVEYXRhU291cmNlUmVtb3RlKSB7XG4gICAgICAgICAgICAvLyBXZSBkb24ndCByZXF1aXJlIGBzb3J0YCB0byBiZSBkZWZpbmVkLCBidXQgaWYgaXQgaXMgc2V0IGJ1dCBub3QgeWV0IHJlYWR5IChgbnVsbGApLFxuICAgICAgICAgICAgLy8gd2Ugd2FpdCBmb3IgaXRzIHZhbHVlIGJlZm9yZSBpbml0aWFsaXppbmcgdGhlIGRhdGEgc291cmNlLCBzbyB0aGUgZmlyc3QgcmVxdWVzdCBpc1xuICAgICAgICAgICAgLy8gc2VudCB3aXRoIHRoZSBjb3JyZWN0IHNvcnQgY29uZmlndXJhdGlvbi4gVGhhdCBpcyB3aHkgd2UgZXhwbGljaXRseSBkbyBub3QgZHJvcFxuICAgICAgICAgICAgLy8gYHVuZGVmaW5lZGAgd2l0aCB0aGUgYGZpcnN0YCBvcGVyYXRvciBiZWxvdy5cbiAgICAgICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2Uuc29ydFN1YmplY3RcbiAgICAgICAgICAgICAgICAucGlwZShmaXJzdCgoc29ydCkgPT4gc29ydCAhPT0gbnVsbCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRSZW1vdGVEYXRhU291cmNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5kYXRhU291cmNlIGFzIE5vZGVEYXRhU291cmNlUmVtb3RlPFQ+LFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLnBhZ2luYXRvcikge1xuICAgICAgICAgICAgdGhpcy5pbml0UGFnaW5hdG9yKHRoaXMucGFnaW5hdG9yKTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveWVkLm5leHQoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95ZWQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZ2lzdGVyR2xvYmFsS2V5Ym9hcmRTaG9ydGN1dHMoKSB7XG4gICAgICAgIHRoaXMuZ2xvYmFsS2V5Ym9hcmRTaG9ydGN1dHMucmVnaXN0ZXIoXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBtb2RpZmllcnM6IFsnQ3RybC9DbWQnXSxcbiAgICAgICAgICAgICAgICAgICAga2V5Q29kZTogJ0tleUEnLFxuICAgICAgICAgICAgICAgICAgICBpZ25vcmVXaGVuOiAoZXZlbnQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBTbWFsbEdyaWQgZG9lc24ndCBzdXBwb3J0IHNlbGVjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5kaXNwbGF5VHlwZSA9PT0gTm9kZUVudHJpZXNEaXNwbGF5VHlwZS5TbWFsbEdyaWQsXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiAoKSA9PiB0aGlzLmVudHJpZXNTZXJ2aWNlLnRvZ2dsZVNlbGVjdEFsbCgpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgeyB1bnRpbDogdGhpcy5kZXN0cm95ZWQgfSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRSZW1vdGVEYXRhU291cmNlKGRhdGFTb3VyY2U6IE5vZGVEYXRhU291cmNlUmVtb3RlPFQ+KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBhZ2VTaXplID0gdGhpcy5lbnRyaWVzR2xvYmFsU2VydmljZS5nZXRQYWdpbmF0b3JTaXplT3B0aW9ucyhcbiAgICAgICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2Uuc2NvcGUsXG4gICAgICAgIClbMF07XG4gICAgICAgIGRhdGFTb3VyY2UuaW5pdCh7XG4gICAgICAgICAgICBwYWdpbmF0aW9uQ29uZmlnOiB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdFBhZ2VTaXplOiBwYWdlU2l6ZSxcbiAgICAgICAgICAgICAgICBzdHJhdGVneTogdGhpcy5lbnRyaWVzU2VydmljZS5wYWdpbmF0aW9uU3RyYXRlZ3ksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVmYXVsdFNvcnQ6IHRoaXMuZW50cmllc1NlcnZpY2Uuc29ydCxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGlzLmVudHJpZXNTZXJ2aWNlLnByaW1hcnlJbnN0YW5jZSkge1xuICAgICAgICAgICAgLy8gQXV0b21hdGljIHF1ZXJ5LXBhcmFtcyBoYW5kbGluZyBpcyBvbmx5IHN1cHBvcnRlZCBieSBub2RlLWRhdGEtc291cmNlLXJlbW90ZS5cbiAgICAgICAgICAgIGRhdGFTb3VyY2UucmVnaXN0ZXJRdWVyeVBhcmFtZXRlcnModGhpcy5yb3V0ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGluaXRQYWdpbmF0b3IocGFnaW5hdG9yOiBNYXRQYWdpbmF0b3IpIHtcbiAgICAgICAgcGFnaW5hdG9yLl9pbnRsLml0ZW1zUGVyUGFnZUxhYmVsID0gYXdhaXQgdGhpcy50cmFuc2xhdGVcbiAgICAgICAgICAgIC5nZXQoJ1BBR0lOQVRPUi5pdGVtc1BlclBhZ2VMYWJlbCcpXG4gICAgICAgICAgICAudG9Qcm9taXNlKCk7XG4gICAgICAgIHBhZ2luYXRvci5faW50bC5uZXh0UGFnZUxhYmVsID0gYXdhaXQgdGhpcy50cmFuc2xhdGVcbiAgICAgICAgICAgIC5nZXQoJ1BBR0lOQVRPUi5uZXh0UGFnZUxhYmVsJylcbiAgICAgICAgICAgIC50b1Byb21pc2UoKTtcbiAgICAgICAgcGFnaW5hdG9yLl9pbnRsLnByZXZpb3VzUGFnZUxhYmVsID0gYXdhaXQgdGhpcy50cmFuc2xhdGVcbiAgICAgICAgICAgIC5nZXQoJ1BBR0lOQVRPUi5wcmV2aW91c1BhZ2VMYWJlbCcpXG4gICAgICAgICAgICAudG9Qcm9taXNlKCk7XG4gICAgICAgIHBhZ2luYXRvci5faW50bC5nZXRSYW5nZUxhYmVsID0gKHBhZ2UsIHBhZ2VTaXplLCBsZW5ndGgpID0+XG4gICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdQQUdJTkFUT1IuZ2V0UmFuZ2VMYWJlbCcsIHtcbiAgICAgICAgICAgICAgICBwYWdlOiBwYWdlICsgMSxcbiAgICAgICAgICAgICAgICBwYWdlU2l6ZSxcbiAgICAgICAgICAgICAgICBsZW5ndGgsXG4gICAgICAgICAgICAgICAgcGFnZUNvdW50OiBNYXRoLmNlaWwobGVuZ3RoIC8gcGFnZVNpemUpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIC8vIENvbm5lY3QgZGF0YSBzb3VyY2UuXG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2UuZGF0YVNvdXJjZSQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKGRhdGFTb3VyY2UpID0+IHtcbiAgICAgICAgICAgIGlmIChkYXRhU291cmNlIGluc3RhbmNlb2YgTm9kZURhdGFTb3VyY2VSZW1vdGUpIHtcbiAgICAgICAgICAgICAgICAoZGF0YVNvdXJjZSBhcyBOb2RlRGF0YVNvdXJjZVJlbW90ZSkucGFnaW5hdG9yID0gcGFnaW5hdG9yO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYWdpbmF0b3IubGVuZ3RoID0gZGF0YVNvdXJjZT8uZ2V0VG90YWwoKTtcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlXG4gICAgICAgICAgICAgICAgICAgID8uY29ubmVjdFBhZ2luYXRpb24oKVxuICAgICAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQpKVxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2luYXRvci5sZW5ndGggPSBkYXRhU291cmNlLmdldFRvdGFsKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvcGVuUGFnZShwYWdlOiBQYWdlRXZlbnQpIHtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5mZXRjaERhdGEuZW1pdCh7XG4gICAgICAgICAgICBvZmZzZXQ6IHBhZ2UucGFnZUluZGV4ICogcGFnZS5wYWdlU2l6ZSxcbiAgICAgICAgICAgIGFtb3VudDogcGFnZS5wYWdlU2l6ZSxcbiAgICAgICAgICAgIHJlc2V0OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidG9wLW1hdHRlclwiPlxuICA8ZGl2IGNsYXNzPVwidGl0bGVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVzU2VydmljZS50aXRsZVwiPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlc1NlcnZpY2UuZW50cmllc1RvcE1hdHRlclwiPjwvbmctY29udGFpbmVyPlxuPC9kaXY+XG48bmctY29udGFpbmVyICpuZ0lmPVwiZW50cmllc1NlcnZpY2UuZGF0YVNvdXJjZVwiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiZW50cmllc1NlcnZpY2UuZGlzcGxheVR5cGUgPT09IE5vZGVFbnRyaWVzRGlzcGxheVR5cGUuVGFibGVcIj5cbiAgICA8ZXMtbm9kZS1lbnRyaWVzLXRhYmxlPjwvZXMtbm9kZS1lbnRyaWVzLXRhYmxlPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiXG4gICAgICBlbnRyaWVzU2VydmljZS5kaXNwbGF5VHlwZSA9PT0gTm9kZUVudHJpZXNEaXNwbGF5VHlwZS5TbWFsbEdyaWQgfHxcbiAgICAgIGVudHJpZXNTZXJ2aWNlLmRpc3BsYXlUeXBlID09PSBOb2RlRW50cmllc0Rpc3BsYXlUeXBlLkdyaWRcbiAgICBcIlxuICA+XG4gICAgPGVzLW5vZGUtZW50cmllcy1jYXJkLWdyaWQgW2Rpc3BsYXlUeXBlXT1cImVudHJpZXNTZXJ2aWNlLmRpc3BsYXlUeXBlXCI+XG4gICAgPC9lcy1ub2RlLWVudHJpZXMtY2FyZC1ncmlkPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVudHJpZXNTZXJ2aWNlLmRhdGFTb3VyY2UuaXNFbXB0eSgpICYmICFlbnRyaWVzU2VydmljZS5kYXRhU291cmNlLmlzTG9hZGluZ1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZXNTZXJ2aWNlLmVtcHR5XCI+PC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG48bWF0LXBhZ2luYXRvclxuICAjcGFnaW5hdG9yXG4gIFtwYWdlU2l6ZU9wdGlvbnNdPVwiZW50cmllc0dsb2JhbFNlcnZpY2UuZ2V0UGFnaW5hdG9yU2l6ZU9wdGlvbnMoZW50cmllc1NlcnZpY2Uuc2NvcGUpXCJcbiAgKm5nSWY9XCJlbnRyaWVzU2VydmljZS5wYWdpbmF0aW9uU3RyYXRlZ3kgPT09ICdwYWdpbmF0b3InXCJcbiAgW2NsYXNzLmRpc3BsYXktbm9uZV09XCJcbiAgICAoZW50cmllc1NlcnZpY2UuZGF0YVNvdXJjZS5pc0xvYWRpbmcgJiYgZW50cmllc1NlcnZpY2UuZGF0YVNvdXJjZS5pc0xvYWRpbmcgIT09ICdwYWdlJykgfHxcbiAgICBlbnRyaWVzU2VydmljZS5kYXRhU291cmNlLmlzRW1wdHkoKVxuICBcIlxuICAocGFnZSk9XCJvcGVuUGFnZSgkZXZlbnQpXCJcbj48L21hdC1wYWdpbmF0b3I+XG4iXX0=