@hmcts/media-viewer 4.0.0 → 4.0.2

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 (235) hide show
  1. package/esm2020/lib/annotations/annotation-set/annotation-create/box-highlight-create/box-highlight-create.component.mjs +116 -0
  2. package/esm2020/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.directive.mjs +109 -0
  3. package/{esm2022 → esm2020}/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.service.mjs +5 -5
  4. package/esm2020/lib/annotations/annotation-set/annotation-set.component.mjs +50 -0
  5. package/esm2020/lib/annotations/annotation-set/annotation-view/annotation-view.component.mjs +94 -0
  6. package/esm2020/lib/annotations/annotation-set/annotation-view/rectangle/rectangle.component.mjs +116 -0
  7. package/esm2020/lib/annotations/annotation-set/ctx-toolbar/ctx-toolbar.component.mjs +118 -0
  8. package/esm2020/lib/annotations/annotation-set/metadata-layer/metadata-layer.component.mjs +86 -0
  9. package/{esm2022 → esm2020}/lib/annotations/annotations.module.mjs +61 -61
  10. package/esm2020/lib/annotations/comment-set/comment/comment.component.mjs +177 -0
  11. package/esm2020/lib/annotations/comment-set/comment/comment.service.mjs +50 -0
  12. package/esm2020/lib/annotations/comment-set/comment/text-highlight/text-highlight.directive.mjs +47 -0
  13. package/{esm2022 → esm2020}/lib/annotations/comment-set/comment/textarea-auto-expand/textarea-auto-expand.directive.mjs +5 -5
  14. package/esm2020/lib/annotations/comment-set/comment-navigate/comments-navigate.component.mjs +91 -0
  15. package/{esm2022 → esm2020}/lib/annotations/comment-set/comment-set-header/comment-filter/comment-filter.component.mjs +5 -5
  16. package/esm2020/lib/annotations/comment-set/comment-set-header/comment-search/comment-search.component.mjs +54 -0
  17. package/esm2020/lib/annotations/comment-set/comment-set-header/comment-set-header.component.mjs +68 -0
  18. package/esm2020/lib/annotations/comment-set/comment-set-render.service.mjs +54 -0
  19. package/esm2020/lib/annotations/comment-set/comment-set.component.mjs +123 -0
  20. package/esm2020/lib/annotations/comments-summary/comments-summary.component.mjs +120 -0
  21. package/{esm2022 → esm2020}/lib/annotations/pipes/date/date.pipe.mjs +4 -4
  22. package/esm2020/lib/annotations/pipes/filter/filter.pipe.mjs +32 -0
  23. package/{esm2022 → esm2020}/lib/annotations/pipes/unsnake/unsnake.pipe.mjs +4 -4
  24. package/{esm2022 → esm2020}/lib/annotations/services/annotation-api/annotation-api.service.mjs +5 -5
  25. package/{esm2022 → esm2020}/lib/annotations/services/bookmarks-api/bookmarks-api.service.mjs +5 -5
  26. package/{esm2022 → esm2020}/lib/annotations/services/tags/tags.services.mjs +5 -5
  27. package/esm2020/lib/annotations/tags/tags.component.mjs +53 -0
  28. package/{esm2022 → esm2020}/lib/bookmark/components/bookmark-icons.component.mjs +5 -5
  29. package/{esm2022 → esm2020}/lib/icp/confirm-exit/confirm-action-dialog.component.mjs +5 -5
  30. package/esm2020/lib/icp/icp-follower.service.mjs +60 -0
  31. package/esm2020/lib/icp/icp-presenter.service.mjs +55 -0
  32. package/esm2020/lib/icp/icp-session-api.service.mjs +21 -0
  33. package/esm2020/lib/icp/icp-update.service.mjs +65 -0
  34. package/{esm2022 → esm2020}/lib/icp/icp.interfaces.mjs +1 -1
  35. package/esm2020/lib/icp/icp.service.mjs +95 -0
  36. package/{esm2022 → esm2020}/lib/icp/participants-list/participants-list.component.mjs +5 -5
  37. package/esm2020/lib/icp/socket.service.mjs +118 -0
  38. package/esm2020/lib/media-viewer.component.mjs +245 -0
  39. package/{esm2022 → esm2020}/lib/media-viewer.module.mjs +55 -55
  40. package/{esm2022 → esm2020}/lib/print.service.mjs +4 -4
  41. package/esm2020/lib/redaction/components/redaction.component.mjs +91 -0
  42. package/{esm2022 → esm2020}/lib/redaction/services/redaction-api.service.mjs +5 -5
  43. package/{esm2022 → esm2020}/lib/shared/gov-uk-date/gov-uk-date.component.mjs +4 -4
  44. package/{esm2022 → esm2020}/lib/shared/gov-uk-error-message/gov-uk-error-message.component.mjs +7 -7
  45. package/{esm2022 → esm2020}/lib/shared/gov-uk-fieldset/gov-uk-fieldset.component.mjs +6 -6
  46. package/{esm2022 → esm2020}/lib/shared/gov-uk-label/gov-uk-label.component.mjs +7 -7
  47. package/{esm2022 → esm2020}/lib/shared/shared.module.mjs +19 -19
  48. package/esm2020/lib/shared/util/helpers/html-templates.helper.mjs +18 -0
  49. package/{esm2022 → esm2020}/lib/shared/util/services/number.helper.service.mjs +5 -5
  50. package/esm2020/lib/store/actions/icp.actions.mjs +56 -0
  51. package/esm2020/lib/store/bookmarks-store-utils.mjs +49 -0
  52. package/esm2020/lib/store/effects/annotation.effects.mjs +51 -0
  53. package/{esm2022 → esm2020}/lib/store/effects/bookmarks.effects.mjs +5 -5
  54. package/{esm2022 → esm2020}/lib/store/effects/document.effects.mjs +5 -5
  55. package/esm2020/lib/store/effects/icp.effects.mjs +26 -0
  56. package/{esm2022 → esm2020}/lib/store/effects/redaction.effects.mjs +5 -5
  57. package/esm2020/lib/store/reducers/annotations.reducer.mjs +208 -0
  58. package/esm2020/lib/store/reducers/bookmarks.reducer.mjs +116 -0
  59. package/esm2020/lib/store/reducers/document.reducer.mjs +135 -0
  60. package/esm2020/lib/store/reducers/icp.reducer.mjs +56 -0
  61. package/esm2020/lib/store/reducers/redaction.reducer.mjs +116 -0
  62. package/esm2020/lib/store/reducers/tags.reducer.mjs +93 -0
  63. package/esm2020/lib/store/selectors/annotation.selectors.mjs +81 -0
  64. package/{esm2022 → esm2020}/lib/store/selectors/bookmark.selectors.mjs +1 -1
  65. package/{esm2022 → esm2020}/lib/store/selectors/redaction.selectors.mjs +1 -1
  66. package/esm2020/lib/store/store-utils.mjs +131 -0
  67. package/esm2020/lib/toolbar/highlight-toolbar/highlight-toolbar.component.mjs +44 -0
  68. package/{esm2022 → esm2020}/lib/toolbar/icp-event.service.mjs +1 -1
  69. package/{esm2022 → esm2020}/lib/toolbar/icp-toolbar/icp-toolbar.component.mjs +5 -5
  70. package/esm2020/lib/toolbar/main-toolbar/main-toolbar.component.mjs +189 -0
  71. package/esm2020/lib/toolbar/redaction-search-bar/redaction-search-bar.component.mjs +236 -0
  72. package/esm2020/lib/toolbar/redaction-toolbar/redaction-toolbar.component.mjs +68 -0
  73. package/esm2020/lib/toolbar/search-bar/search-bar.component.mjs +109 -0
  74. package/esm2020/lib/toolbar/toolbar-button-visibility.service.mjs +94 -0
  75. package/esm2020/lib/toolbar/toolbar-event.service.mjs +178 -0
  76. package/{esm2022 → esm2020}/lib/toolbar/toolbar.module.mjs +25 -25
  77. package/esm2020/lib/viewers/convertible-content-viewer/convertible-content-viewer.component.mjs +82 -0
  78. package/{esm2022 → esm2020}/lib/viewers/convertible-content-viewer/document-conversion-api.service.mjs +5 -5
  79. package/esm2020/lib/viewers/grab-n-drag.directive.mjs +57 -0
  80. package/esm2020/lib/viewers/image-viewer/image-viewer.component.mjs +166 -0
  81. package/esm2020/lib/viewers/multimedia-player/multimedia-player.component.mjs +59 -0
  82. package/esm2020/lib/viewers/pdf-viewer/pdf-js/pdf-js-wrapper.mjs +209 -0
  83. package/{esm2022 → esm2020}/lib/viewers/pdf-viewer/pdf-js/pdf-js-wrapper.provider.mjs +5 -5
  84. package/esm2020/lib/viewers/pdf-viewer/pdf-viewer.component.mjs +236 -0
  85. package/esm2020/lib/viewers/pdf-viewer/side-bar/bookmarks/bookmarks.component.mjs +352 -0
  86. package/esm2020/lib/viewers/pdf-viewer/side-bar/outline-item/outline-item.component.mjs +49 -0
  87. package/{esm2022 → esm2020}/lib/viewers/pdf-viewer/side-bar/side-bar.component.mjs +5 -5
  88. package/{esm2022 → esm2020}/lib/viewers/rotation-persist/rotation-api.service.mjs +5 -5
  89. package/esm2020/lib/viewers/rotation-persist/rotation-persist.directive.mjs +61 -0
  90. package/esm2020/lib/viewers/unsupported-viewer/unsupported-viewer.component.mjs +49 -0
  91. package/{esm2022 → esm2020}/lib/viewers/viewer-event.service.mjs +5 -5
  92. package/{esm2022 → esm2020}/lib/viewers/viewer-util.service.mjs +5 -5
  93. package/fesm2015/hmcts-media-viewer.mjs +6953 -0
  94. package/fesm2015/hmcts-media-viewer.mjs.map +1 -0
  95. package/{fesm2022 → fesm2020}/hmcts-media-viewer.mjs +461 -451
  96. package/fesm2020/hmcts-media-viewer.mjs.map +1 -0
  97. package/lib/annotations/annotation-set/annotation-create/box-highlight-create/box-highlight-create.component.d.ts +1 -1
  98. package/lib/annotations/annotation-set/annotation-set.component.d.ts +1 -1
  99. package/lib/annotations/annotation-set/annotation-view/annotation-view.component.d.ts +1 -1
  100. package/lib/annotations/annotation-set/annotation-view/rectangle/rectangle.component.d.ts +1 -1
  101. package/lib/annotations/annotation-set/ctx-toolbar/ctx-toolbar.component.d.ts +1 -1
  102. package/lib/annotations/annotation-set/metadata-layer/metadata-layer.component.d.ts +1 -1
  103. package/lib/annotations/comment-set/comment/comment.component.d.ts +1 -1
  104. package/lib/annotations/comment-set/comment/text-highlight/text-highlight.directive.d.ts +1 -1
  105. package/lib/annotations/comment-set/comment-navigate/comments-navigate.component.d.ts +1 -1
  106. package/lib/annotations/comment-set/comment-set-header/comment-search/comment-search.component.d.ts +1 -1
  107. package/lib/annotations/comment-set/comment-set-header/comment-set-header.component.d.ts +1 -1
  108. package/lib/annotations/comment-set/comment-set.component.d.ts +1 -1
  109. package/lib/annotations/comments-summary/comments-summary.component.d.ts +1 -1
  110. package/lib/annotations/tags/tags.component.d.ts +1 -1
  111. package/lib/bookmark/components/bookmark-icons.component.d.ts +1 -1
  112. package/lib/icp/icp-session-api.service.d.ts +4 -1
  113. package/lib/icp/icp-session-api.service.d.ts.map +1 -1
  114. package/lib/icp/icp-update.service.d.ts.map +1 -1
  115. package/lib/icp/icp.interfaces.d.ts +1 -0
  116. package/lib/icp/icp.interfaces.d.ts.map +1 -1
  117. package/lib/icp/icp.service.d.ts +1 -0
  118. package/lib/icp/icp.service.d.ts.map +1 -1
  119. package/lib/icp/socket.service.d.ts +6 -6
  120. package/lib/icp/socket.service.d.ts.map +1 -1
  121. package/lib/media-viewer.component.d.ts +2 -1
  122. package/lib/media-viewer.component.d.ts.map +1 -1
  123. package/lib/redaction/components/redaction.component.d.ts +1 -1
  124. package/lib/shared/gov-uk-date/gov-uk-date.component.d.ts +1 -1
  125. package/lib/shared/gov-uk-error-message/gov-uk-error-message.component.d.ts +1 -1
  126. package/lib/shared/gov-uk-fieldset/gov-uk-fieldset.component.d.ts +1 -1
  127. package/lib/shared/gov-uk-label/gov-uk-label.component.d.ts +1 -1
  128. package/lib/store/actions/icp.actions.d.ts +8 -2
  129. package/lib/store/actions/icp.actions.d.ts.map +1 -1
  130. package/lib/store/bookmarks-store-utils.d.ts.map +1 -1
  131. package/lib/store/effects/icp.effects.d.ts.map +1 -1
  132. package/lib/toolbar/icp-event.service.d.ts +4 -4
  133. package/lib/toolbar/icp-event.service.d.ts.map +1 -1
  134. package/lib/toolbar/main-toolbar/main-toolbar.component.d.ts +1 -1
  135. package/lib/toolbar/redaction-toolbar/redaction-toolbar.component.d.ts +1 -1
  136. package/lib/toolbar/toolbar-event.service.d.ts +6 -6
  137. package/lib/toolbar/toolbar-event.service.d.ts.map +1 -1
  138. package/lib/viewers/convertible-content-viewer/convertible-content-viewer.component.d.ts +1 -1
  139. package/lib/viewers/grab-n-drag.directive.d.ts +1 -1
  140. package/lib/viewers/image-viewer/image-viewer.component.d.ts +1 -1
  141. package/lib/viewers/multimedia-player/multimedia-player.component.d.ts +1 -1
  142. package/lib/viewers/pdf-viewer/pdf-viewer.component.d.ts +1 -1
  143. package/lib/viewers/pdf-viewer/side-bar/bookmarks/bookmarks.component.d.ts +1 -1
  144. package/lib/viewers/pdf-viewer/side-bar/outline-item/outline-item.component.d.ts +1 -1
  145. package/lib/viewers/pdf-viewer/side-bar/side-bar.component.d.ts +1 -1
  146. package/lib/viewers/unsupported-viewer/unsupported-viewer.component.d.ts +1 -1
  147. package/lib/viewers/viewer-event.service.d.ts +1 -1
  148. package/lib/viewers/viewer-event.service.d.ts.map +1 -1
  149. package/package.json +23 -16
  150. package/esm2022/lib/annotations/annotation-set/annotation-create/box-highlight-create/box-highlight-create.component.mjs +0 -116
  151. package/esm2022/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.directive.mjs +0 -109
  152. package/esm2022/lib/annotations/annotation-set/annotation-set.component.mjs +0 -50
  153. package/esm2022/lib/annotations/annotation-set/annotation-view/annotation-view.component.mjs +0 -94
  154. package/esm2022/lib/annotations/annotation-set/annotation-view/rectangle/rectangle.component.mjs +0 -116
  155. package/esm2022/lib/annotations/annotation-set/ctx-toolbar/ctx-toolbar.component.mjs +0 -118
  156. package/esm2022/lib/annotations/annotation-set/metadata-layer/metadata-layer.component.mjs +0 -86
  157. package/esm2022/lib/annotations/comment-set/comment/comment.component.mjs +0 -177
  158. package/esm2022/lib/annotations/comment-set/comment/comment.service.mjs +0 -50
  159. package/esm2022/lib/annotations/comment-set/comment/text-highlight/text-highlight.directive.mjs +0 -47
  160. package/esm2022/lib/annotations/comment-set/comment-navigate/comments-navigate.component.mjs +0 -91
  161. package/esm2022/lib/annotations/comment-set/comment-set-header/comment-search/comment-search.component.mjs +0 -54
  162. package/esm2022/lib/annotations/comment-set/comment-set-header/comment-set-header.component.mjs +0 -68
  163. package/esm2022/lib/annotations/comment-set/comment-set-render.service.mjs +0 -54
  164. package/esm2022/lib/annotations/comment-set/comment-set.component.mjs +0 -123
  165. package/esm2022/lib/annotations/comments-summary/comments-summary.component.mjs +0 -120
  166. package/esm2022/lib/annotations/pipes/filter/filter.pipe.mjs +0 -32
  167. package/esm2022/lib/annotations/tags/tags.component.mjs +0 -53
  168. package/esm2022/lib/icp/icp-follower.service.mjs +0 -60
  169. package/esm2022/lib/icp/icp-presenter.service.mjs +0 -55
  170. package/esm2022/lib/icp/icp-session-api.service.mjs +0 -21
  171. package/esm2022/lib/icp/icp-update.service.mjs +0 -57
  172. package/esm2022/lib/icp/icp.service.mjs +0 -93
  173. package/esm2022/lib/icp/socket.service.mjs +0 -118
  174. package/esm2022/lib/media-viewer.component.mjs +0 -244
  175. package/esm2022/lib/redaction/components/redaction.component.mjs +0 -91
  176. package/esm2022/lib/shared/util/helpers/html-templates.helper.mjs +0 -18
  177. package/esm2022/lib/store/actions/icp.actions.mjs +0 -56
  178. package/esm2022/lib/store/bookmarks-store-utils.mjs +0 -49
  179. package/esm2022/lib/store/effects/annotation.effects.mjs +0 -51
  180. package/esm2022/lib/store/effects/icp.effects.mjs +0 -26
  181. package/esm2022/lib/store/reducers/annotations.reducer.mjs +0 -208
  182. package/esm2022/lib/store/reducers/bookmarks.reducer.mjs +0 -116
  183. package/esm2022/lib/store/reducers/document.reducer.mjs +0 -135
  184. package/esm2022/lib/store/reducers/icp.reducer.mjs +0 -56
  185. package/esm2022/lib/store/reducers/redaction.reducer.mjs +0 -116
  186. package/esm2022/lib/store/reducers/tags.reducer.mjs +0 -93
  187. package/esm2022/lib/store/selectors/annotation.selectors.mjs +0 -81
  188. package/esm2022/lib/store/store-utils.mjs +0 -131
  189. package/esm2022/lib/toolbar/highlight-toolbar/highlight-toolbar.component.mjs +0 -44
  190. package/esm2022/lib/toolbar/main-toolbar/main-toolbar.component.mjs +0 -189
  191. package/esm2022/lib/toolbar/redaction-search-bar/redaction-search-bar.component.mjs +0 -236
  192. package/esm2022/lib/toolbar/redaction-toolbar/redaction-toolbar.component.mjs +0 -68
  193. package/esm2022/lib/toolbar/search-bar/search-bar.component.mjs +0 -109
  194. package/esm2022/lib/toolbar/toolbar-button-visibility.service.mjs +0 -94
  195. package/esm2022/lib/toolbar/toolbar-event.service.mjs +0 -178
  196. package/esm2022/lib/viewers/convertible-content-viewer/convertible-content-viewer.component.mjs +0 -82
  197. package/esm2022/lib/viewers/grab-n-drag.directive.mjs +0 -57
  198. package/esm2022/lib/viewers/image-viewer/image-viewer.component.mjs +0 -166
  199. package/esm2022/lib/viewers/multimedia-player/multimedia-player.component.mjs +0 -59
  200. package/esm2022/lib/viewers/pdf-viewer/pdf-js/pdf-js-wrapper.mjs +0 -209
  201. package/esm2022/lib/viewers/pdf-viewer/pdf-viewer.component.mjs +0 -236
  202. package/esm2022/lib/viewers/pdf-viewer/side-bar/bookmarks/bookmarks.component.mjs +0 -352
  203. package/esm2022/lib/viewers/pdf-viewer/side-bar/outline-item/outline-item.component.mjs +0 -49
  204. package/esm2022/lib/viewers/rotation-persist/rotation-persist.directive.mjs +0 -61
  205. package/esm2022/lib/viewers/unsupported-viewer/unsupported-viewer.component.mjs +0 -49
  206. package/fesm2022/hmcts-media-viewer.mjs.map +0 -1
  207. /package/{esm2022 → esm2020}/hmcts-media-viewer.mjs +0 -0
  208. /package/{esm2022 → esm2020}/lib/annotations/annotation-set/annotation-set.model.mjs +0 -0
  209. /package/{esm2022 → esm2020}/lib/annotations/annotation-set/annotation-view/annotation.model.mjs +0 -0
  210. /package/{esm2022 → esm2020}/lib/annotations/annotation-set/annotation-view/rectangle/rectangle.model.mjs +0 -0
  211. /package/{esm2022 → esm2020}/lib/annotations/comment-set/comment/comment.model.mjs +0 -0
  212. /package/{esm2022 → esm2020}/lib/annotations/models/api-persisted.model.mjs +0 -0
  213. /package/{esm2022 → esm2020}/lib/annotations/models/event-select.model.mjs +0 -0
  214. /package/{esm2022 → esm2020}/lib/annotations/models/tags.model.mjs +0 -0
  215. /package/{esm2022 → esm2020}/lib/annotations/models/user.model.mjs +0 -0
  216. /package/{esm2022 → esm2020}/lib/icp/icp.events.mjs +0 -0
  217. /package/{esm2022 → esm2020}/lib/redaction/services/redaction.model.mjs +0 -0
  218. /package/{esm2022 → esm2020}/lib/store/actions/annotation.actions.mjs +0 -0
  219. /package/{esm2022 → esm2020}/lib/store/actions/bookmark.actions.mjs +0 -0
  220. /package/{esm2022 → esm2020}/lib/store/actions/document.actions.mjs +0 -0
  221. /package/{esm2022 → esm2020}/lib/store/actions/redaction.actions.mjs +0 -0
  222. /package/{esm2022 → esm2020}/lib/store/actions/tag.actions.mjs +0 -0
  223. /package/{esm2022 → esm2020}/lib/store/effects/index.mjs +0 -0
  224. /package/{esm2022 → esm2020}/lib/store/models/bookmarks.interface.mjs +0 -0
  225. /package/{esm2022 → esm2020}/lib/store/models/filters.interface.mjs +0 -0
  226. /package/{esm2022 → esm2020}/lib/store/reducers/reducers.mjs +0 -0
  227. /package/{esm2022 → esm2020}/lib/store/selectors/document.selectors.mjs +0 -0
  228. /package/{esm2022 → esm2020}/lib/store/selectors/icp.selectors.mjs +0 -0
  229. /package/{esm2022 → esm2020}/lib/store/selectors/tag.selectors.mjs +0 -0
  230. /package/{esm2022 → esm2020}/lib/toolbar/redaction-search-bar/redaction-search.model.mjs +0 -0
  231. /package/{esm2022 → esm2020}/lib/viewers/pdf-viewer/side-bar/bookmarks/bookmarks.interfaces.mjs +0 -0
  232. /package/{esm2022 → esm2020}/lib/viewers/pdf-viewer/side-bar/outline-item/outline.model.mjs +0 -0
  233. /package/{esm2022 → esm2020}/lib/viewers/rotation-persist/rotation.model.mjs +0 -0
  234. /package/{esm2022 → esm2020}/lib/viewers/viewer-exception.model.mjs +0 -0
  235. /package/{esm2022 → esm2020}/public_api.mjs +0 -0
@@ -1,177 +0,0 @@
1
- import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
2
- import { distinctUntilChanged } from 'rxjs/operators';
3
- import * as fromSelector from '../../../store/selectors/annotation.selectors';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@ngrx/store";
6
- import * as i2 from "./comment.service";
7
- import * as i3 from "../../services/tags/tags.services";
8
- import * as i4 from "@angular/common";
9
- import * as i5 from "@angular/forms";
10
- import * as i6 from "./text-highlight/text-highlight.directive";
11
- import * as i7 from "./textarea-auto-expand/textarea-auto-expand.directive";
12
- import * as i8 from "../../tags/tags.component";
13
- import * as i9 from "rpx-xui-translation";
14
- import * as i10 from "../../pipes/date/date.pipe";
15
- export class CommentComponent {
16
- constructor(store, commentService, tagsServices) {
17
- this.store = store;
18
- this.commentService = commentService;
19
- this.tagsServices = tagsServices;
20
- this.CHAR_LIMIT = 5000;
21
- this.totalPrevPagesHeight = 0;
22
- this.hasUnsavedChanges = false;
23
- this.commentClick = new EventEmitter();
24
- this.renderComments = new EventEmitter();
25
- this.delete = new EventEmitter();
26
- this.updated = new EventEmitter();
27
- this.changes = new EventEmitter();
28
- this.rotate = 0;
29
- this.zoom = 1;
30
- }
31
- ngOnInit() {
32
- this.subscriptions = this.store.select(fromSelector.getComponentSearchText)
33
- .pipe(distinctUntilChanged()).subscribe(searchString => this.searchString = searchString);
34
- this.reRenderComments();
35
- this.marginToComment$ = this.commentService.marginToCommentEmitter.asObservable();
36
- }
37
- ngAfterContentInit() {
38
- if (this.tagItems && this.tagItems.length) {
39
- this.tagsServices.updateTagItems(this.tagItems, this._comment.annotationId);
40
- }
41
- }
42
- ngOnDestroy() {
43
- this.subscriptions.unsubscribe();
44
- }
45
- set comment(comment) {
46
- this._comment = { ...comment };
47
- this.page = this._comment.page;
48
- this.lastUpdate = comment.lastModifiedDate ? comment.lastModifiedDate : comment.createdDate;
49
- this.author = comment.createdByDetails;
50
- this.createdBy = comment.createdBy;
51
- this.editor = comment.lastModifiedByDetails;
52
- this.originalComment = comment.content;
53
- this.fullComment = this.originalComment;
54
- this.selected = this._comment.selected;
55
- this._editable = this._comment.editable;
56
- this.tagItems = this._comment.tags;
57
- const pageMarginBottom = 10;
58
- this.totalPrevPagesHeight = 0;
59
- for (let i = 0; i < this.page - 1; i++) {
60
- const height = this._comment.pages[i + 1] ? this._comment.pages[i + 1].styles.height : undefined;
61
- if (height) {
62
- this.totalPrevPagesHeight += height + pageMarginBottom;
63
- }
64
- }
65
- }
66
- get comment() {
67
- return this._comment;
68
- }
69
- set annotation(annotation) {
70
- this._rectangle = annotation.rectangles
71
- .reduce((prev, current) => prev.y < current.y ? prev : current);
72
- const actualHeight = this._comment.pages[this.page].styles.height / this.zoom;
73
- switch (this.rotate) {
74
- case 90:
75
- this.rectTop = this._rectangle.x;
76
- break;
77
- case 180:
78
- this.rectTop = actualHeight - (this._rectangle.y + this._rectangle.height);
79
- break;
80
- case 270:
81
- this.rectTop = actualHeight - (this._rectangle.x + this._rectangle.width);
82
- break;
83
- default: this.rectTop = this._rectangle.y;
84
- }
85
- this.rectLeft = this._rectangle.x;
86
- }
87
- get editable() {
88
- return this._editable;
89
- }
90
- onCommentChange(updatedComment) {
91
- this.hasUnsavedChanges =
92
- this.originalComment.substring(0, this.CHAR_LIMIT) !== updatedComment.substring(0, this.CHAR_LIMIT);
93
- this.commentService.onCommentChange(this.hasUnsavedChanges);
94
- }
95
- deleteOrCancel() {
96
- if (!this.editable) {
97
- this.delete.emit(this._comment);
98
- }
99
- else {
100
- this.hasUnsavedChanges = false;
101
- this._editable = false;
102
- this.fullComment = this.originalComment;
103
- this.changes.emit(false);
104
- if (!this.author && !this.fullComment) {
105
- this.delete.emit(this._comment);
106
- }
107
- }
108
- }
109
- editOrSave() {
110
- if (!this.editable) {
111
- this._editable = true;
112
- }
113
- else {
114
- this._comment.content = this.fullComment.substring(0, this.CHAR_LIMIT);
115
- const tags = this.tagsServices.getNewTags(this._comment.annotationId);
116
- const payload = {
117
- comment: this._comment,
118
- tags
119
- };
120
- this.updated.emit(payload);
121
- this.hasUnsavedChanges = false;
122
- this._editable = false;
123
- this.changes.emit(false);
124
- }
125
- }
126
- onCommentClick() {
127
- if (!this.selected) {
128
- this.selected = true;
129
- this._editable = false;
130
- this.commentClick.emit({ annotationId: this._comment.annotationId, editable: this._editable, selected: true });
131
- }
132
- }
133
- reRenderComments() {
134
- this.renderComments.emit(this._comment);
135
- }
136
- get commentTop() {
137
- return this.totalPrevPagesHeight + (this.rectTop * this.zoom);
138
- }
139
- get height() {
140
- return this.form.nativeElement.getBoundingClientRect().height / this.zoom;
141
- }
142
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: CommentComponent, deps: [{ token: i1.Store }, { token: i2.CommentService }, { token: i3.TagsServices }], target: i0.ɵɵFactoryTarget.Component }); }
143
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.8", type: CommentComponent, selector: "mv-anno-comment", inputs: { rotate: "rotate", zoom: "zoom", index: "index", page: "page", comment: "comment", annotation: "annotation" }, outputs: { commentClick: "commentClick", renderComments: "renderComments", delete: "delete", updated: "updated", changes: "changes" }, viewQueries: [{ propertyName: "form", first: true, predicate: ["form"], descendants: true }, { propertyName: "editableComment", first: true, predicate: ["editableComment"], descendants: true }], ngImport: i0, template: "<div\n #form\n (click)=\"onCommentClick()\"\n class=\"aui-comment\"\n [ngClass]=\"{ stylestoggle: (marginToComment$ | async) }\"\n [style.top.px]=\"commentTop\"\n [style.zIndex]=\"selected ? 100 : 0\"\n>\n <div id=\"detailsWrapper {{ index }}\" class=\"aui-comment__header\">\n <span *ngIf=\"author && !editor\" class=\"aui-comment__author\">\n {{ author.forename }} {{ author.surname }}\n </span>\n <span *ngIf=\"editor\" class=\"aui-comment__author\">\n {{ editor.forename }} {{ editor.surname }}\n </span>\n <time [hidden]=\"!selected && !this.editable\" class=\"aui-comment__meta\">\n {{ lastUpdate | momentDate : \"d MMMM y h:mm a\" }}\n </time>\n </div>\n <mv-tags\n [tagItems]=\"tagItems\"\n [userId]=\"createdBy\"\n [editable]=\"editable\"\n [annoId]=\"_comment.annotationId\"\n >\n </mv-tags>\n <textarea\n *ngIf=\"selected && editable\"\n #editableComment\n mvTextAreaAutoExpand\n type=\"text\"\n required\n name=\"content\"\n [maxlength]=\"CHAR_LIMIT\"\n class=\"aui-comment__content form-control mimic-focus edit-mode expanded\"\n [(ngModel)]=\"fullComment\"\n (ngModelChange)=\"reRenderComments(); onCommentChange($event)\"\n aria-label=\"comment\"\n >\n </textarea>\n <p\n *ngIf=\"!editable\"\n mvTextHighlight\n class=\"commentText\"\n [textToHighlight]=\"searchString\"\n >\n {{ fullComment }}\n </p>\n <div\n *ngIf=\"\n selected ||\n this.editable ||\n (!fullComment.length && tagItems && !tagItems.length)\n \"\n class=\"aui-comment__footer commentBtns\"\n >\n <button\n class=\"govuk-button\"\n type=\"button\"\n role=\"button\"\n (click)=\"editOrSave()\"\n >\n {{ !editable ? (\"Edit\" | rpxTranslate) : (\"Save\" | rpxTranslate) }}\n </button>\n <button\n type=\"button\"\n role=\"button\"\n class=\"govuk-button govuk-button--secondary\"\n (click)=\"deleteOrCancel()\"\n >\n {{ !editable ? (\"Delete\" | rpxTranslate) : (\"Cancel\" | rpxTranslate) }}\n </button>\n </div>\n <span class=\"aui-comment__private\">{{ \"private\" | rpxTranslate }}</span>\n</div>\n", dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i5.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.TextHighlightDirective, selector: "[mvTextHighlight]", inputs: ["textToHighlight"] }, { kind: "directive", type: i7.TextareaAutoExpandDirective, selector: "[mvTextAreaAutoExpand]" }, { kind: "component", type: i8.TagsComponent, selector: "mv-tags", inputs: ["tagItems", "userId", "editable", "annoId"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i9.RpxTranslatePipe, name: "rpxTranslate" }, { kind: "pipe", type: i10.MomentDatePipe, name: "momentDate" }] }); }
144
- }
145
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: CommentComponent, decorators: [{
146
- type: Component,
147
- args: [{ selector: 'mv-anno-comment', template: "<div\n #form\n (click)=\"onCommentClick()\"\n class=\"aui-comment\"\n [ngClass]=\"{ stylestoggle: (marginToComment$ | async) }\"\n [style.top.px]=\"commentTop\"\n [style.zIndex]=\"selected ? 100 : 0\"\n>\n <div id=\"detailsWrapper {{ index }}\" class=\"aui-comment__header\">\n <span *ngIf=\"author && !editor\" class=\"aui-comment__author\">\n {{ author.forename }} {{ author.surname }}\n </span>\n <span *ngIf=\"editor\" class=\"aui-comment__author\">\n {{ editor.forename }} {{ editor.surname }}\n </span>\n <time [hidden]=\"!selected && !this.editable\" class=\"aui-comment__meta\">\n {{ lastUpdate | momentDate : \"d MMMM y h:mm a\" }}\n </time>\n </div>\n <mv-tags\n [tagItems]=\"tagItems\"\n [userId]=\"createdBy\"\n [editable]=\"editable\"\n [annoId]=\"_comment.annotationId\"\n >\n </mv-tags>\n <textarea\n *ngIf=\"selected && editable\"\n #editableComment\n mvTextAreaAutoExpand\n type=\"text\"\n required\n name=\"content\"\n [maxlength]=\"CHAR_LIMIT\"\n class=\"aui-comment__content form-control mimic-focus edit-mode expanded\"\n [(ngModel)]=\"fullComment\"\n (ngModelChange)=\"reRenderComments(); onCommentChange($event)\"\n aria-label=\"comment\"\n >\n </textarea>\n <p\n *ngIf=\"!editable\"\n mvTextHighlight\n class=\"commentText\"\n [textToHighlight]=\"searchString\"\n >\n {{ fullComment }}\n </p>\n <div\n *ngIf=\"\n selected ||\n this.editable ||\n (!fullComment.length && tagItems && !tagItems.length)\n \"\n class=\"aui-comment__footer commentBtns\"\n >\n <button\n class=\"govuk-button\"\n type=\"button\"\n role=\"button\"\n (click)=\"editOrSave()\"\n >\n {{ !editable ? (\"Edit\" | rpxTranslate) : (\"Save\" | rpxTranslate) }}\n </button>\n <button\n type=\"button\"\n role=\"button\"\n class=\"govuk-button govuk-button--secondary\"\n (click)=\"deleteOrCancel()\"\n >\n {{ !editable ? (\"Delete\" | rpxTranslate) : (\"Cancel\" | rpxTranslate) }}\n </button>\n </div>\n <span class=\"aui-comment__private\">{{ \"private\" | rpxTranslate }}</span>\n</div>\n" }]
148
- }], ctorParameters: () => [{ type: i1.Store }, { type: i2.CommentService }, { type: i3.TagsServices }], propDecorators: { commentClick: [{
149
- type: Output
150
- }], renderComments: [{
151
- type: Output
152
- }], delete: [{
153
- type: Output
154
- }], updated: [{
155
- type: Output
156
- }], changes: [{
157
- type: Output
158
- }], rotate: [{
159
- type: Input
160
- }], zoom: [{
161
- type: Input
162
- }], index: [{
163
- type: Input
164
- }], page: [{
165
- type: Input
166
- }], form: [{
167
- type: ViewChild,
168
- args: ['form', { static: false }]
169
- }], editableComment: [{
170
- type: ViewChild,
171
- args: ['editableComment', { static: false }]
172
- }], comment: [{
173
- type: Input
174
- }], annotation: [{
175
- type: Input
176
- }] } });
177
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZWRpYS12aWV3ZXIvc3JjL2xpYi9hbm5vdGF0aW9ucy9jb21tZW50LXNldC9jb21tZW50L2NvbW1lbnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVkaWEtdmlld2VyL3NyYy9saWIvYW5ub3RhdGlvbnMvY29tbWVudC1zZXQvY29tbWVudC9jb21tZW50LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBU3ZCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3RELE9BQU8sS0FBSyxZQUFZLE1BQU0sK0NBQStDLENBQUM7Ozs7Ozs7Ozs7OztBQVE5RSxNQUFNLE9BQU8sZ0JBQWdCO0lBdUMzQixZQUNVLEtBQTBDLEVBQ2pDLGNBQThCLEVBQ3ZDLFlBQTBCO1FBRjFCLFVBQUssR0FBTCxLQUFLLENBQXFDO1FBQ2pDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUN2QyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQXhDcEMsZUFBVSxHQUFHLElBQUksQ0FBQztRQVVsQix5QkFBb0IsR0FBRyxDQUFDLENBQUM7UUFJekIsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBUWhCLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQXVCLENBQUM7UUFDdkQsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBQzdDLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBQ3JDLFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBeUMsQ0FBQztRQUNwRSxZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUN2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R0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQzVFLENBQUM7aUlBeEtVLGdCQUFnQjtxSEFBaEIsZ0JBQWdCLHlmQzlCN0IsOG9FQTJFQTs7MkZEN0NhLGdCQUFnQjtrQkFKNUIsU0FBUzsrQkFDRSxpQkFBaUI7a0lBMkJqQixZQUFZO3NCQUFyQixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csT0FBTztzQkFBaEIsTUFBTTtnQkFDRSxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRThCLElBQUk7c0JBQXZDLFNBQVM7dUJBQUMsTUFBTSxFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQztnQkFDYSxlQUFlO3NCQUE3RCxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQztnQkE2QnpDLE9BQU87c0JBRFYsS0FBSztnQkE2QkYsVUFBVTtzQkFEYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbW1lbnR9IGZyb20gJy4vY29tbWVudC5tb2RlbCc7XG5pbXBvcnQge1VzZXJ9IGZyb20gJy4uLy4uL21vZGVscy91c2VyLm1vZGVsJztcbmltcG9ydCB7UmVjdGFuZ2xlfSBmcm9tICcuLi8uLi9hbm5vdGF0aW9uLXNldC9hbm5vdGF0aW9uLXZpZXcvcmVjdGFuZ2xlL3JlY3RhbmdsZS5tb2RlbCc7XG5pbXBvcnQge1NlbGVjdGlvbkFubm90YXRpb259IGZyb20gJy4uLy4uL21vZGVscy9ldmVudC1zZWxlY3QubW9kZWwnO1xuaW1wb3J0IHtDb21tZW50U2VydmljZX0gZnJvbSAnLi9jb21tZW50LnNlcnZpY2UnO1xuaW1wb3J0IHtUYWdzTW9kZWx9IGZyb20gJy4uLy4uL21vZGVscy90YWdzLm1vZGVsJztcbmltcG9ydCB7VGFnc1NlcnZpY2VzfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90YWdzL3RhZ3Muc2VydmljZXMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7U3RvcmV9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCAqIGFzIGZyb21TdG9yZSBmcm9tICcuLi8uLi8uLi9zdG9yZS9yZWR1Y2Vycy9yZWR1Y2Vycyc7XG5pbXBvcnQgKiBhcyBmcm9tU2VsZWN0b3IgZnJvbSAnLi4vLi4vLi4vc3RvcmUvc2VsZWN0b3JzL2Fubm90YXRpb24uc2VsZWN0b3JzJztcbmltcG9ydCB7IEFubm90YXRpb25TZXQgfSBmcm9tICcuLi8uLi9hbm5vdGF0aW9uLXNldC9hbm5vdGF0aW9uLXNldC5tb2RlbCc7XG5pbXBvcnQgeyBBbm5vdGF0aW9uIH0gZnJvbSAnLi4vLi4vYW5ub3RhdGlvbi1zZXQvYW5ub3RhdGlvbi12aWV3L2Fubm90YXRpb24ubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtdi1hbm5vLWNvbW1lbnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vY29tbWVudC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgQ29tbWVudENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlckNvbnRlbnRJbml0IHtcblxuICBDSEFSX0xJTUlUID0gNTAwMDtcbiAgbGFzdFVwZGF0ZTogc3RyaW5nO1xuICBvcmlnaW5hbENvbW1lbnQ6IHN0cmluZztcbiAgZnVsbENvbW1lbnQ6IHN0cmluZztcbiAgYXV0aG9yOiBVc2VyO1xuICBjcmVhdGVkQnk6IHN0cmluZztcbiAgZWRpdG9yOiBVc2VyO1xuICBfY29tbWVudDogQ29tbWVudDtcbiAgX2VkaXRhYmxlOiBib29sZWFuO1xuICBfcmVjdGFuZ2xlO1xuICB0b3RhbFByZXZQYWdlc0hlaWdodCA9IDA7XG4gIHJlY3RUb3A7XG4gIHJlY3RMZWZ0O1xuICBwYWdlSGVpZ2h0OiBudW1iZXI7XG4gIGhhc1Vuc2F2ZWRDaGFuZ2VzID0gZmFsc2U7XG4gIHNlbGVjdGVkOiBib29sZWFuO1xuICBzZWFyY2hTdHJpbmc6IHN0cmluZztcbiAgcHVibGljIHRhZ0l0ZW1zOiBUYWdzTW9kZWxbXTtcbiAgbWFyZ2luVG9Db21tZW50JDogT2JzZXJ2YWJsZTxib29sZWFuPiA7XG5cblxuXG4gIEBPdXRwdXQoKSBjb21tZW50Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPFNlbGVjdGlvbkFubm90YXRpb24+KCk7XG4gIEBPdXRwdXQoKSByZW5kZXJDb21tZW50cyA9IG5ldyBFdmVudEVtaXR0ZXI8Q29tbWVudD4oKTtcbiAgQE91dHB1dCgpIGRlbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8Q29tbWVudD4oKTtcbiAgQE91dHB1dCgpIHVwZGF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHtjb21tZW50OiBDb21tZW50LCB0YWdzOiBUYWdzTW9kZWxbXX0+KCk7XG4gIEBPdXRwdXQoKSBjaGFuZ2VzID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBASW5wdXQoKSByb3RhdGUgPSAwO1xuICBASW5wdXQoKSB6b29tID0gMTtcbiAgQElucHV0KCkgaW5kZXg6IG51bWJlcjtcbiAgQElucHV0KCkgcGFnZTogbnVtYmVyO1xuXG4gIEBWaWV3Q2hpbGQoJ2Zvcm0nLCB7c3RhdGljOiBmYWxzZX0pIGZvcm06IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2VkaXRhYmxlQ29tbWVudCcsIHtzdGF0aWM6IGZhbHNlfSkgZWRpdGFibGVDb21tZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHN0b3JlOiBTdG9yZTxmcm9tU3RvcmUuQW5ub3RhdGlvblNldFN0YXRlPixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbW1lbnRTZXJ2aWNlOiBDb21tZW50U2VydmljZSxcbiAgICBwcml2YXRlIHRhZ3NTZXJ2aWNlczogVGFnc1NlcnZpY2VzXG4gICkge31cblxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IHRoaXMuc3RvcmUuc2VsZWN0KGZyb21TZWxlY3Rvci5nZXRDb21wb25lbnRTZWFyY2hUZXh0KVxuICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSkuc3Vic2NyaWJlKHNlYXJjaFN0cmluZyA9PiB0aGlzLnNlYXJjaFN0cmluZyA9IHNlYXJjaFN0cmluZyk7XG4gICAgdGhpcy5yZVJlbmRlckNvbW1lbnRzKCk7XG4gICAgdGhpcy5tYXJnaW5Ub0NvbW1lbnQkID0gdGhpcy5jb21tZW50U2VydmljZS5tYXJnaW5Ub0NvbW1lbnRFbWl0dGVyLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnRhZ0l0ZW1zICYmIHRoaXMudGFnSXRlbXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnRhZ3NTZXJ2aWNlcy51cGRhdGVUYWdJdGVtcyh0aGlzLnRhZ0l0ZW1zLCB0aGlzLl9jb21tZW50LmFubm90YXRpb25JZCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgY29tbWVudChjb21tZW50OiBDb21tZW50KSB7XG4gICAgdGhpcy5fY29tbWVudCA9IHsuLi5jb21tZW50fTtcbiAgICB0aGlzLnBhZ2UgPSB0aGlzLl9jb21tZW50LnBhZ2U7XG4gICAgdGhpcy5sYXN0VXBkYXRlID0gY29tbWVudC5sYXN0TW9kaWZpZWREYXRlID8gY29tbWVudC5sYXN0TW9kaWZpZWREYXRlIDogY29tbWVudC5jcmVhdGVkRGF0ZTtcbiAgICB0aGlzLmF1dGhvciA9IGNvbW1lbnQuY3JlYXRlZEJ5RGV0YWlscztcbiAgICB0aGlzLmNyZWF0ZWRCeSA9IGNvbW1lbnQuY3JlYXRlZEJ5O1xuICAgIHRoaXMuZWRpdG9yID0gY29tbWVudC5sYXN0TW9kaWZpZWRCeURldGFpbHM7XG4gICAgdGhpcy5vcmlnaW5hbENvbW1lbnQgPSBjb21tZW50LmNvbnRlbnQ7XG4gICAgdGhpcy5mdWxsQ29tbWVudCA9IHRoaXMub3JpZ2luYWxDb21tZW50O1xuICAgIHRoaXMuc2VsZWN0ZWQgPSB0aGlzLl9jb21tZW50LnNlbGVjdGVkO1xuICAgIHRoaXMuX2VkaXRhYmxlID0gdGhpcy5fY29tbWVudC5lZGl0YWJsZTtcbiAgICB0aGlzLnRhZ0l0ZW1zID0gdGhpcy5fY29tbWVudC50YWdzO1xuICAgIGNvbnN0IHBhZ2VNYXJnaW5Cb3R0b20gPSAxMDtcbiAgICB0aGlzLnRvdGFsUHJldlBhZ2VzSGVpZ2h0ID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucGFnZSAtIDE7IGkrKykge1xuICAgICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5fY29tbWVudC5wYWdlc1tpICsgMV0gPyB0aGlzLl9jb21tZW50LnBhZ2VzW2kgKyAxXS5zdHlsZXMuaGVpZ2h0IDogdW5kZWZpbmVkO1xuICAgICAgaWYgKGhlaWdodCkge1xuICAgICAgICB0aGlzLnRvdGFsUHJldlBhZ2VzSGVpZ2h0ICs9IGhlaWdodCArIHBhZ2VNYXJnaW5Cb3R0b207XG4gICAgICB9XG4gICAgfVxuXG4gIH1cblxuICBnZXQgY29tbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY29tbWVudDtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBhbm5vdGF0aW9uKGFubm90YXRpb246IEFubm90YXRpb24pIHtcbiAgICB0aGlzLl9yZWN0YW5nbGUgPSBhbm5vdGF0aW9uLnJlY3RhbmdsZXNcbiAgICAgIC5yZWR1Y2UoKHByZXYsIGN1cnJlbnQpID0+IHByZXYueSA8IGN1cnJlbnQueSA/IHByZXYgOiBjdXJyZW50KTtcbiAgICBjb25zdCBhY3R1YWxIZWlnaHQgPSB0aGlzLl9jb21tZW50LnBhZ2VzW3RoaXMucGFnZV0uc3R5bGVzLmhlaWdodCAvIHRoaXMuem9vbTtcbiAgICBzd2l0Y2ggKHRoaXMucm90YXRlKSB7XG4gICAgICBjYXNlIDkwOiB0aGlzLnJlY3RUb3AgPSB0aGlzLl9yZWN0YW5nbGUueDtcbiAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxODA6IHRoaXMucmVjdFRvcCA9IGFjdHVhbEhlaWdodCAtICh0aGlzLl9yZWN0YW5nbGUueSArIHRoaXMuX3JlY3RhbmdsZS5oZWlnaHQpO1xuICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI3MDogdGhpcy5yZWN0VG9wID0gYWN0dWFsSGVpZ2h0IC0gKHRoaXMuX3JlY3RhbmdsZS54ICsgdGhpcy5fcmVjdGFuZ2xlLndpZHRoKTtcbiAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDogdGhpcy5yZWN0VG9wID0gdGhpcy5fcmVjdGFuZ2xlLnk7XG4gICAgfVxuICAgIHRoaXMucmVjdExlZnQgPSB0aGlzLl9yZWN0YW5nbGUueDtcbiAgfVxuXG4gIGdldCBlZGl0YWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZWRpdGFibGU7XG4gIH1cblxuICBvbkNvbW1lbnRDaGFuZ2UodXBkYXRlZENvbW1lbnQpIHtcbiAgICB0aGlzLmhhc1Vuc2F2ZWRDaGFuZ2VzID1cbiAgICAgIHRoaXMub3JpZ2luYWxDb21tZW50LnN1YnN0cmluZygwLCB0aGlzLkNIQVJfTElNSVQpICE9PSB1cGRhdGVkQ29tbWVudC5zdWJzdHJpbmcoMCwgdGhpcy5DSEFSX0xJTUlUKTtcbiAgICB0aGlzLmNvbW1lbnRTZXJ2aWNlLm9uQ29tbWVudENoYW5nZSh0aGlzLmhhc1Vuc2F2ZWRDaGFuZ2VzKTtcbiAgfVxuXG4gIGRlbGV0ZU9yQ2FuY2VsKCkge1xuICAgIGlmICghdGhpcy5lZGl0YWJsZSkge1xuICAgICAgdGhpcy5kZWxldGUuZW1pdCh0aGlzLl9jb21tZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oYXNVbnNhdmVkQ2hhbmdlcyA9IGZhbHNlO1xuICAgICAgdGhpcy5fZWRpdGFibGUgPSBmYWxzZTtcbiAgICAgIHRoaXMuZnVsbENvbW1lbnQgPSB0aGlzLm9yaWdpbmFsQ29tbWVudDtcbiAgICAgIHRoaXMuY2hhbmdlcy5lbWl0KGZhbHNlKTtcbiAgICAgIGlmICghdGhpcy5hdXRob3IgJiYgIXRoaXMuZnVsbENvbW1lbnQpIHtcbiAgICAgICAgdGhpcy5kZWxldGUuZW1pdCh0aGlzLl9jb21tZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZWRpdE9yU2F2ZSgpIHtcbiAgICBpZiAoIXRoaXMuZWRpdGFibGUpIHtcbiAgICAgIHRoaXMuX2VkaXRhYmxlID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fY29tbWVudC5jb250ZW50ID0gdGhpcy5mdWxsQ29tbWVudC5zdWJzdHJpbmcoMCwgdGhpcy5DSEFSX0xJTUlUKTtcbiAgICAgIGNvbnN0IHRhZ3MgPSB0aGlzLnRhZ3NTZXJ2aWNlcy5nZXROZXdUYWdzKHRoaXMuX2NvbW1lbnQuYW5ub3RhdGlvbklkKTtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgIGNvbW1lbnQ6IHRoaXMuX2NvbW1lbnQsXG4gICAgICAgIHRhZ3NcbiAgICAgIH07XG4gICAgICB0aGlzLnVwZGF0ZWQuZW1pdChwYXlsb2FkKTtcbiAgICAgIHRoaXMuaGFzVW5zYXZlZENoYW5nZXMgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2VkaXRhYmxlID0gZmFsc2U7XG4gICAgICB0aGlzLmNoYW5nZXMuZW1pdChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgb25Db21tZW50Q2xpY2soKSB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2VkaXRhYmxlID0gZmFsc2U7XG4gICAgICB0aGlzLmNvbW1lbnRDbGljay5lbWl0KHsgYW5ub3RhdGlvbklkOiB0aGlzLl9jb21tZW50LmFubm90YXRpb25JZCwgZWRpdGFibGU6IHRoaXMuX2VkaXRhYmxlLCBzZWxlY3RlZDogdHJ1ZSB9KTtcbiAgICB9XG4gIH1cblxuICByZVJlbmRlckNvbW1lbnRzKCkge1xuICAgIHRoaXMucmVuZGVyQ29tbWVudHMuZW1pdCh0aGlzLl9jb21tZW50KTtcbiAgfVxuXG4gIGdldCBjb21tZW50VG9wKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudG90YWxQcmV2UGFnZXNIZWlnaHQgKyAodGhpcy5yZWN0VG9wICogdGhpcy56b29tKTtcbiAgfVxuXG5cbiAgZ2V0IGhlaWdodCgpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0IC8gdGhpcy56b29tO1xuICB9XG59XG4iLCI8ZGl2XG4gICNmb3JtXG4gIChjbGljayk9XCJvbkNvbW1lbnRDbGljaygpXCJcbiAgY2xhc3M9XCJhdWktY29tbWVudFwiXG4gIFtuZ0NsYXNzXT1cInsgc3R5bGVzdG9nZ2xlOiAobWFyZ2luVG9Db21tZW50JCB8IGFzeW5jKSB9XCJcbiAgW3N0eWxlLnRvcC5weF09XCJjb21tZW50VG9wXCJcbiAgW3N0eWxlLnpJbmRleF09XCJzZWxlY3RlZCA/IDEwMCA6IDBcIlxuPlxuICA8ZGl2IGlkPVwiZGV0YWlsc1dyYXBwZXIge3sgaW5kZXggfX1cIiBjbGFzcz1cImF1aS1jb21tZW50X19oZWFkZXJcIj5cbiAgICA8c3BhbiAqbmdJZj1cImF1dGhvciAmJiAhZWRpdG9yXCIgY2xhc3M9XCJhdWktY29tbWVudF9fYXV0aG9yXCI+XG4gICAgICB7eyBhdXRob3IuZm9yZW5hbWUgfX0ge3sgYXV0aG9yLnN1cm5hbWUgfX1cbiAgICA8L3NwYW4+XG4gICAgPHNwYW4gKm5nSWY9XCJlZGl0b3JcIiBjbGFzcz1cImF1aS1jb21tZW50X19hdXRob3JcIj5cbiAgICAgIHt7IGVkaXRvci5mb3JlbmFtZSB9fSB7eyBlZGl0b3Iuc3VybmFtZSB9fVxuICAgIDwvc3Bhbj5cbiAgICA8dGltZSBbaGlkZGVuXT1cIiFzZWxlY3RlZCAmJiAhdGhpcy5lZGl0YWJsZVwiIGNsYXNzPVwiYXVpLWNvbW1lbnRfX21ldGFcIj5cbiAgICAgIHt7IGxhc3RVcGRhdGUgfCBtb21lbnREYXRlIDogXCJkIE1NTU0geSBoOm1tIGFcIiB9fVxuICAgIDwvdGltZT5cbiAgPC9kaXY+XG4gIDxtdi10YWdzXG4gICAgW3RhZ0l0ZW1zXT1cInRhZ0l0ZW1zXCJcbiAgICBbdXNlcklkXT1cImNyZWF0ZWRCeVwiXG4gICAgW2VkaXRhYmxlXT1cImVkaXRhYmxlXCJcbiAgICBbYW5ub0lkXT1cIl9jb21tZW50LmFubm90YXRpb25JZFwiXG4gID5cbiAgPC9tdi10YWdzPlxuICA8dGV4dGFyZWFcbiAgICAqbmdJZj1cInNlbGVjdGVkICYmIGVkaXRhYmxlXCJcbiAgICAjZWRpdGFibGVDb21tZW50XG4gICAgbXZUZXh0QXJlYUF1dG9FeHBhbmRcbiAgICB0eXBlPVwidGV4dFwiXG4gICAgcmVxdWlyZWRcbiAgICBuYW1lPVwiY29udGVudFwiXG4gICAgW21heGxlbmd0aF09XCJDSEFSX0xJTUlUXCJcbiAgICBjbGFzcz1cImF1aS1jb21tZW50X19jb250ZW50IGZvcm0tY29udHJvbCBtaW1pYy1mb2N1cyBlZGl0LW1vZGUgZXhwYW5kZWRcIlxuICAgIFsobmdNb2RlbCldPVwiZnVsbENvbW1lbnRcIlxuICAgIChuZ01vZGVsQ2hhbmdlKT1cInJlUmVuZGVyQ29tbWVudHMoKTsgb25Db21tZW50Q2hhbmdlKCRldmVudClcIlxuICAgIGFyaWEtbGFiZWw9XCJjb21tZW50XCJcbiAgPlxuICA8L3RleHRhcmVhPlxuICA8cFxuICAgICpuZ0lmPVwiIWVkaXRhYmxlXCJcbiAgICBtdlRleHRIaWdobGlnaHRcbiAgICBjbGFzcz1cImNvbW1lbnRUZXh0XCJcbiAgICBbdGV4dFRvSGlnaGxpZ2h0XT1cInNlYXJjaFN0cmluZ1wiXG4gID5cbiAgICB7eyBmdWxsQ29tbWVudCB9fVxuICA8L3A+XG4gIDxkaXZcbiAgICAqbmdJZj1cIlxuICAgICAgc2VsZWN0ZWQgfHxcbiAgICAgIHRoaXMuZWRpdGFibGUgfHxcbiAgICAgICghZnVsbENvbW1lbnQubGVuZ3RoICYmIHRhZ0l0ZW1zICYmICF0YWdJdGVtcy5sZW5ndGgpXG4gICAgXCJcbiAgICBjbGFzcz1cImF1aS1jb21tZW50X19mb290ZXIgY29tbWVudEJ0bnNcIlxuICA+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJnb3Z1ay1idXR0b25cIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgIChjbGljayk9XCJlZGl0T3JTYXZlKClcIlxuICAgID5cbiAgICAgIHt7ICFlZGl0YWJsZSA/IChcIkVkaXRcIiB8IHJweFRyYW5zbGF0ZSkgOiAoXCJTYXZlXCIgfCBycHhUcmFuc2xhdGUpIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwiZ292dWstYnV0dG9uIGdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5XCJcbiAgICAgIChjbGljayk9XCJkZWxldGVPckNhbmNlbCgpXCJcbiAgICA+XG4gICAgICB7eyAhZWRpdGFibGUgPyAoXCJEZWxldGVcIiB8IHJweFRyYW5zbGF0ZSkgOiAoXCJDYW5jZWxcIiB8IHJweFRyYW5zbGF0ZSkgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG4gIDxzcGFuIGNsYXNzPVwiYXVpLWNvbW1lbnRfX3ByaXZhdGVcIj57eyBcInByaXZhdGVcIiB8IHJweFRyYW5zbGF0ZSB9fTwvc3Bhbj5cbjwvZGl2PlxuIl19
@@ -1,50 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { BehaviorSubject, Subject } from 'rxjs';
3
- import * as i0 from "@angular/core";
4
- // TODO: replace by NgRx
5
- export class CommentService {
6
- constructor() {
7
- this.unsavedChanges = new Subject();
8
- this.marginToCommentEmitter = new BehaviorSubject(false);
9
- }
10
- setCommentSet(commentSetComponent) {
11
- this.commentSetComponent = commentSetComponent;
12
- }
13
- onCommentChange(changes) {
14
- this.unsavedChanges.next(changes);
15
- }
16
- getUnsavedChanges() {
17
- return this.unsavedChanges.asObservable();
18
- }
19
- hasUnsavedComments(annotation) {
20
- if (annotation.comments.length > 0) {
21
- const comment = this.getComment(annotation);
22
- return comment.hasUnsavedChanges;
23
- }
24
- return false;
25
- }
26
- updateUnsavedCommentsStatus(annotation, hasUnsavedChanges) {
27
- const comment = this.getComment(annotation);
28
- comment.hasUnsavedChanges = hasUnsavedChanges;
29
- this.allCommentsSaved();
30
- }
31
- getComment(annotation) {
32
- return this.commentSetComponent.commentComponents
33
- .find(c => c.comment.annotationId === annotation.comments[0].annotationId);
34
- }
35
- resetCommentSet() {
36
- this.commentSetComponent = null;
37
- }
38
- allCommentsSaved() {
39
- this.onCommentChange(this.commentSetComponent.commentComponents.some(comment => comment.hasUnsavedChanges === true));
40
- }
41
- createMarginToCommentEvent(margin) {
42
- this.marginToCommentEmitter.next(margin);
43
- }
44
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: CommentService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
45
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: CommentService }); }
46
- }
47
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: CommentService, decorators: [{
48
- type: Injectable
49
- }] });
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVkaWEtdmlld2VyL3NyYy9saWIvYW5ub3RhdGlvbnMvY29tbWVudC1zZXQvY29tbWVudC9jb21tZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFLNUQsd0JBQXdCO0FBRXhCLE1BQU0sT0FBTyxjQUFjO0lBRDNCO1FBR2tCLG1CQUFjLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQUN4QywyQkFBc0IsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztLQTZDOUU7SUExQ0MsYUFBYSxDQUFDLG1CQUFtQjtRQUMvQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsbUJBQW1CLENBQUM7SUFDakQsQ0FBQztJQUVELGVBQWUsQ0FBQyxPQUFnQjtRQUM5QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxVQUFzQjtRQUN2QyxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ25DLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDNUMsT0FBTyxPQUFPLENBQUMsaUJBQWlCLENBQUM7UUFDbkMsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELDJCQUEyQixDQUFDLFVBQXNCLEVBQUUsaUJBQTBCO1FBQzVFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDNUMsT0FBTyxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDO1FBQzlDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxVQUFVLENBQUMsVUFBc0I7UUFDL0IsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCO2FBQzlDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsWUFBWSxLQUFLLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN2SCxDQUFDO0lBRUQsMEJBQTBCLENBQUMsTUFBZTtRQUN4QyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNDLENBQUM7aUlBL0NVLGNBQWM7cUlBQWQsY0FBYzs7MkZBQWQsY0FBYztrQkFEMUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHR5cGUgeyBDb21tZW50U2V0Q29tcG9uZW50IH0gZnJvbSAnLi4vY29tbWVudC1zZXQuY29tcG9uZW50JztcbmltcG9ydCB7IEFubm90YXRpb24gfSBmcm9tICcuLi8uLi9hbm5vdGF0aW9uLXNldC9hbm5vdGF0aW9uLXZpZXcvYW5ub3RhdGlvbi5tb2RlbCc7XG5pbXBvcnQgdHlwZSB7IENvbW1lbnRDb21wb25lbnQgfSBmcm9tICcuL2NvbW1lbnQuY29tcG9uZW50JztcblxuLy8gVE9ETzogcmVwbGFjZSBieSBOZ1J4XG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29tbWVudFNlcnZpY2Uge1xuXG4gIHB1YmxpYyByZWFkb25seSB1bnNhdmVkQ2hhbmdlcyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gIHB1YmxpYyByZWFkb25seSBtYXJnaW5Ub0NvbW1lbnRFbWl0dGVyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGNvbW1lbnRTZXRDb21wb25lbnQ6IENvbW1lbnRTZXRDb21wb25lbnQ7XG5cbiAgc2V0Q29tbWVudFNldChjb21tZW50U2V0Q29tcG9uZW50KSB7XG4gICAgdGhpcy5jb21tZW50U2V0Q29tcG9uZW50ID0gY29tbWVudFNldENvbXBvbmVudDtcbiAgfVxuXG4gIG9uQ29tbWVudENoYW5nZShjaGFuZ2VzOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy51bnNhdmVkQ2hhbmdlcy5uZXh0KGNoYW5nZXMpO1xuICB9XG5cbiAgZ2V0VW5zYXZlZENoYW5nZXMoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMudW5zYXZlZENoYW5nZXMuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBoYXNVbnNhdmVkQ29tbWVudHMoYW5ub3RhdGlvbjogQW5ub3RhdGlvbik6IGJvb2xlYW4ge1xuICAgIGlmIChhbm5vdGF0aW9uLmNvbW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGNvbW1lbnQgPSB0aGlzLmdldENvbW1lbnQoYW5ub3RhdGlvbik7XG4gICAgICByZXR1cm4gY29tbWVudC5oYXNVbnNhdmVkQ2hhbmdlcztcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdXBkYXRlVW5zYXZlZENvbW1lbnRzU3RhdHVzKGFubm90YXRpb246IEFubm90YXRpb24sIGhhc1Vuc2F2ZWRDaGFuZ2VzOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgY29tbWVudCA9IHRoaXMuZ2V0Q29tbWVudChhbm5vdGF0aW9uKTtcbiAgICBjb21tZW50Lmhhc1Vuc2F2ZWRDaGFuZ2VzID0gaGFzVW5zYXZlZENoYW5nZXM7XG4gICAgdGhpcy5hbGxDb21tZW50c1NhdmVkKCk7XG4gIH1cblxuICBnZXRDb21tZW50KGFubm90YXRpb246IEFubm90YXRpb24pOiBDb21tZW50Q29tcG9uZW50IHtcbiAgICByZXR1cm4gdGhpcy5jb21tZW50U2V0Q29tcG9uZW50LmNvbW1lbnRDb21wb25lbnRzXG4gICAgICAuZmluZChjID0+IGMuY29tbWVudC5hbm5vdGF0aW9uSWQgPT09IGFubm90YXRpb24uY29tbWVudHNbMF0uYW5ub3RhdGlvbklkKTtcbiAgfVxuXG4gIHJlc2V0Q29tbWVudFNldCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbW1lbnRTZXRDb21wb25lbnQgPSBudWxsO1xuICB9XG5cbiAgYWxsQ29tbWVudHNTYXZlZCgpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ29tbWVudENoYW5nZSh0aGlzLmNvbW1lbnRTZXRDb21wb25lbnQuY29tbWVudENvbXBvbmVudHMuc29tZShjb21tZW50ID0+IGNvbW1lbnQuaGFzVW5zYXZlZENoYW5nZXMgPT09IHRydWUpKTtcbiAgfVxuXG4gIGNyZWF0ZU1hcmdpblRvQ29tbWVudEV2ZW50KG1hcmdpbjogYm9vbGVhbikge1xuICAgIHRoaXMubWFyZ2luVG9Db21tZW50RW1pdHRlci5uZXh0KG1hcmdpbik7XG4gIH1cbn1cbiJdfQ==
@@ -1,47 +0,0 @@
1
- import { Directive, Input } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class TextHighlightDirective {
4
- constructor(element) {
5
- this.element = element;
6
- }
7
- ngAfterViewChecked() {
8
- if (this.textToHighlight) {
9
- this.highlightInputText(this.textToHighlight);
10
- }
11
- }
12
- highlightInputText(textToHighlight) {
13
- this.resetHighlight();
14
- this.textToHighlight = textToHighlight;
15
- const searchPattern = new RegExp(textToHighlight, 'gi');
16
- const hostElement = this.element.nativeElement;
17
- if (hostElement.innerHTML.match(searchPattern)) {
18
- hostElement.innerHTML = hostElement.innerHTML
19
- .replace(searchPattern, this.highlightPattern('$&'));
20
- }
21
- this.textToHighlight = undefined;
22
- }
23
- resetHighlight() {
24
- const hostElement = this.element.nativeElement;
25
- const searchPattern = new RegExp(this.highlightPattern('(.*?)'), 'gi');
26
- while (hostElement.innerHTML.match(searchPattern)) {
27
- const matchGroups = searchPattern.exec(hostElement.innerHTML);
28
- if (matchGroups) {
29
- hostElement.innerHTML = hostElement.innerHTML.replace(matchGroups[0], matchGroups[1]);
30
- }
31
- }
32
- }
33
- highlightPattern(dynamicText) {
34
- return '<span class="mvTextHighlight">' + dynamicText + '</span>';
35
- }
36
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: TextHighlightDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
37
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.8", type: TextHighlightDirective, selector: "[mvTextHighlight]", inputs: { textToHighlight: "textToHighlight" }, ngImport: i0 }); }
38
- }
39
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: TextHighlightDirective, decorators: [{
40
- type: Directive,
41
- args: [{
42
- selector: '[mvTextHighlight]'
43
- }]
44
- }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { textToHighlight: [{
45
- type: Input
46
- }] } });
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1oaWdobGlnaHQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVkaWEtdmlld2VyL3NyYy9saWIvYW5ub3RhdGlvbnMvY29tbWVudC1zZXQvY29tbWVudC90ZXh0LWhpZ2hsaWdodC90ZXh0LWhpZ2hsaWdodC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFvQixTQUFTLEVBQWMsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUsvRSxNQUFNLE9BQU8sc0JBQXNCO0lBSWpDLFlBQW9CLE9BQWdDO1FBQWhDLFlBQU8sR0FBUCxPQUFPLENBQXlCO0lBQUcsQ0FBQztJQUV4RCxrQkFBa0I7UUFDaEIsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNoRCxDQUFDO0lBQ0gsQ0FBQztJQUVELGtCQUFrQixDQUFDLGVBQXVCO1FBQ3hDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztRQUN2QyxNQUFNLGFBQWEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDeEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUM7UUFDL0MsSUFBSSxXQUFXLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQy9DLFdBQVcsQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDLFNBQVM7aUJBQzFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDekQsQ0FBQztRQUNELElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDO0lBQ25DLENBQUM7SUFFRCxjQUFjO1FBQ1osTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUM7UUFDL0MsTUFBTSxhQUFhLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3ZFLE9BQU8sV0FBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztZQUNsRCxNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM5RCxJQUFJLFdBQVcsRUFBRSxDQUFDO2dCQUNoQixXQUFXLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4RixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxXQUFtQjtRQUMxQyxPQUFPLGdDQUFnQyxHQUFHLFdBQVcsR0FBRyxTQUFTLENBQUM7SUFDcEUsQ0FBQztpSUFyQ1Usc0JBQXNCO3FIQUF0QixzQkFBc0I7OzJGQUF0QixzQkFBc0I7a0JBSGxDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG1CQUFtQjtpQkFDOUI7K0VBR1UsZUFBZTtzQkFBdkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0NoZWNrZWQsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW212VGV4dEhpZ2hsaWdodF0nXG59KVxuZXhwb3J0IGNsYXNzIFRleHRIaWdobGlnaHREaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlclZpZXdDaGVja2VkIHtcblxuICBASW5wdXQoKSB0ZXh0VG9IaWdobGlnaHQ6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KSB7fVxuXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50ZXh0VG9IaWdobGlnaHQpIHtcbiAgICAgIHRoaXMuaGlnaGxpZ2h0SW5wdXRUZXh0KHRoaXMudGV4dFRvSGlnaGxpZ2h0KTtcbiAgICB9XG4gIH1cblxuICBoaWdobGlnaHRJbnB1dFRleHQodGV4dFRvSGlnaGxpZ2h0OiBzdHJpbmcpIHtcbiAgICB0aGlzLnJlc2V0SGlnaGxpZ2h0KCk7XG4gICAgdGhpcy50ZXh0VG9IaWdobGlnaHQgPSB0ZXh0VG9IaWdobGlnaHQ7XG4gICAgY29uc3Qgc2VhcmNoUGF0dGVybiA9IG5ldyBSZWdFeHAodGV4dFRvSGlnaGxpZ2h0LCAnZ2knKTtcbiAgICBjb25zdCBob3N0RWxlbWVudCA9IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgIGlmIChob3N0RWxlbWVudC5pbm5lckhUTUwubWF0Y2goc2VhcmNoUGF0dGVybikpIHtcbiAgICAgIGhvc3RFbGVtZW50LmlubmVySFRNTCA9IGhvc3RFbGVtZW50LmlubmVySFRNTFxuICAgICAgICAucmVwbGFjZShzZWFyY2hQYXR0ZXJuLCB0aGlzLmhpZ2hsaWdodFBhdHRlcm4oJyQmJykpO1xuICAgIH1cbiAgICB0aGlzLnRleHRUb0hpZ2hsaWdodCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJlc2V0SGlnaGxpZ2h0KCkge1xuICAgIGNvbnN0IGhvc3RFbGVtZW50ID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3Qgc2VhcmNoUGF0dGVybiA9IG5ldyBSZWdFeHAodGhpcy5oaWdobGlnaHRQYXR0ZXJuKCcoLio/KScpLCAnZ2knKTtcbiAgICB3aGlsZSAoaG9zdEVsZW1lbnQuaW5uZXJIVE1MLm1hdGNoKHNlYXJjaFBhdHRlcm4pKSB7XG4gICAgICBjb25zdCBtYXRjaEdyb3VwcyA9IHNlYXJjaFBhdHRlcm4uZXhlYyhob3N0RWxlbWVudC5pbm5lckhUTUwpO1xuICAgICAgaWYgKG1hdGNoR3JvdXBzKSB7XG4gICAgICAgIGhvc3RFbGVtZW50LmlubmVySFRNTCA9IGhvc3RFbGVtZW50LmlubmVySFRNTC5yZXBsYWNlKG1hdGNoR3JvdXBzWzBdLCBtYXRjaEdyb3Vwc1sxXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoaWdobGlnaHRQYXR0ZXJuKGR5bmFtaWNUZXh0OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibXZUZXh0SGlnaGxpZ2h0XCI+JyArIGR5bmFtaWNUZXh0ICsgJzwvc3Bhbj4nO1xuICB9XG59XG4iXX0=
@@ -1,91 +0,0 @@
1
- import { Component, Input, ViewEncapsulation } from '@angular/core';
2
- import * as fromActions from '../../../store/actions/annotation.actions';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@ngrx/store";
5
- import * as i2 from "../../../toolbar/toolbar-event.service";
6
- import * as i3 from "@angular/router";
7
- export class CommentsNavigateComponent {
8
- constructor(store, toolbarEvents) {
9
- this.store = store;
10
- this.toolbarEvents = toolbarEvents;
11
- this.autoSelect = false;
12
- this.navigationList = [];
13
- this.index = 0;
14
- }
15
- ngOnChanges(changes) {
16
- if (changes.annotationList) {
17
- this.initNavigationList();
18
- }
19
- }
20
- initNavigationList() {
21
- this.index = 0;
22
- this.navigationList = [...this.annotationList || []]
23
- .map(annotation => ({
24
- content: annotation.comments[0].content,
25
- annotationId: annotation.id,
26
- page: annotation.page,
27
- rectangle: this.upperRectangle(annotation.rectangles),
28
- }))
29
- .sort(this.sortComments);
30
- if (this.autoSelect) {
31
- this.toolbarEvents.setPage(Number.parseInt(this.navigationList[0].page, 0));
32
- this.store.dispatch(new fromActions.SelectedAnnotation({
33
- annotationId: this.navigationList[0].annotationId,
34
- editable: false,
35
- selected: true
36
- }));
37
- }
38
- }
39
- sortComments(mappedCommentA, mappedCommentB) {
40
- if (mappedCommentA.page !== mappedCommentB.page) {
41
- return mappedCommentA.page - mappedCommentB.page;
42
- }
43
- else {
44
- const rectA = mappedCommentA.rectangle;
45
- const rectB = mappedCommentB.rectangle;
46
- if (rectA.y !== rectB.y) {
47
- return rectA.y - rectB.y;
48
- }
49
- else {
50
- return rectA.x - rectB.x;
51
- }
52
- }
53
- }
54
- nextItem() {
55
- this.index += 1;
56
- if (this.index === this.annotationList.length) {
57
- this.index = 0;
58
- }
59
- this.toolbarEvents.setPage(Number.parseInt(this.navigationList[this.index].page, 0));
60
- this.store.dispatch(new fromActions.SelectedAnnotation({
61
- annotationId: this.navigationList[this.index].annotationId, editable: false, selected: true
62
- }));
63
- }
64
- prevItem() {
65
- this.index -= 1;
66
- if (this.index < 0) {
67
- this.index = this.navigationList.length - 1;
68
- }
69
- this.toolbarEvents.setPage(Number.parseInt(this.navigationList[this.index].page, 0));
70
- this.store.dispatch(new fromActions.SelectedAnnotation({
71
- annotationId: this.navigationList[this.index].annotationId,
72
- editable: false,
73
- selected: true
74
- }));
75
- }
76
- upperRectangle(rectangles) {
77
- [...rectangles].sort((rect1, rect2) => rect1.y - rect2.y);
78
- return { x: rectangles[0].x, y: rectangles[0].y };
79
- }
80
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: CommentsNavigateComponent, deps: [{ token: i1.Store }, { token: i2.ToolbarEventService }], target: i0.ɵɵFactoryTarget.Component }); }
81
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.8", type: CommentsNavigateComponent, selector: "mv-comments-navigate", inputs: { annotationList: "annotationList", autoSelect: "autoSelect" }, usesOnChanges: true, ngImport: i0, template: "<p class=\"comment-search\">\n <span class=\"comment-search__item\">\n Showing {{ index + 1 }} of {{ navigationList.length }}\n </span>\n <a [routerLink]=\"[]\"\n class=\"comment-search__item\"\n title=\"Previous comment\"\n (click)=\"prevItem()\">Prev</a>\n <a [routerLink]=\"[]\"\n class=\"comment-search__item\"\n title=\"Next comment'\"\n (click)=\"nextItem()\">Next</a>\n</p>\n", dependencies: [{ kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }], encapsulation: i0.ViewEncapsulation.None }); }
82
- }
83
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: CommentsNavigateComponent, decorators: [{
84
- type: Component,
85
- args: [{ selector: 'mv-comments-navigate', encapsulation: ViewEncapsulation.None, template: "<p class=\"comment-search\">\n <span class=\"comment-search__item\">\n Showing {{ index + 1 }} of {{ navigationList.length }}\n </span>\n <a [routerLink]=\"[]\"\n class=\"comment-search__item\"\n title=\"Previous comment\"\n (click)=\"prevItem()\">Prev</a>\n <a [routerLink]=\"[]\"\n class=\"comment-search__item\"\n title=\"Next comment'\"\n (click)=\"nextItem()\">Next</a>\n</p>\n" }]
86
- }], ctorParameters: () => [{ type: i1.Store }, { type: i2.ToolbarEventService }], propDecorators: { annotationList: [{
87
- type: Input
88
- }], autoSelect: [{
89
- type: Input
90
- }] } });
91
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudHMtbmF2aWdhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVkaWEtdmlld2VyL3NyYy9saWIvYW5ub3RhdGlvbnMvY29tbWVudC1zZXQvY29tbWVudC1uYXZpZ2F0ZS9jb21tZW50cy1uYXZpZ2F0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZWRpYS12aWV3ZXIvc3JjL2xpYi9hbm5vdGF0aW9ucy9jb21tZW50LXNldC9jb21tZW50LW5hdmlnYXRlL2NvbW1lbnRzLW5hdmlnYXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUE0QixpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUs5RixPQUFPLEtBQUssV0FBVyxNQUFNLDJDQUEyQyxDQUFDOzs7OztBQVF6RSxNQUFNLE9BQU8seUJBQXlCO0lBUXBDLFlBQW9CLEtBQTBDLEVBQWtCLGFBQWtDO1FBQTlGLFVBQUssR0FBTCxLQUFLLENBQXFDO1FBQWtCLGtCQUFhLEdBQWIsYUFBYSxDQUFxQjtRQUx6RyxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBRTVCLG1CQUFjLEdBQVUsRUFBRSxDQUFDO1FBQzNCLFVBQUssR0FBRyxDQUFDLENBQUM7SUFFMkcsQ0FBQztJQUV0SCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQzthQUNqRCxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xCLE9BQU8sRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU87WUFDdkMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxFQUFFO1lBQzNCLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSTtZQUNyQixTQUFTLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO1NBQ3RELENBQUMsQ0FBQzthQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFM0IsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksV0FBVyxDQUFDLGtCQUFrQixDQUFDO2dCQUNyRCxZQUFZLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZO2dCQUNqRCxRQUFRLEVBQUUsS0FBSztnQkFDZixRQUFRLEVBQUUsSUFBSTthQUNmLENBQUMsQ0FBQyxDQUFDO1FBQ04sQ0FBQztJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsY0FBYyxFQUFFLGNBQWM7UUFDekMsSUFBSSxjQUFjLENBQUMsSUFBSSxLQUFLLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNoRCxPQUFPLGNBQWMsQ0FBQyxJQUFJLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQztRQUNuRCxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxTQUFTLENBQUM7WUFDdkMsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLFNBQVMsQ0FBQztZQUN2QyxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN4QixPQUFPLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUMzQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxLQUFLLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDM0IsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ2hCLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzlDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLENBQUM7UUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JGLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksV0FBVyxDQUFDLGtCQUFrQixDQUFDO1lBQ3JELFlBQVksRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSTtTQUM1RixDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFHRCxRQUFRO1FBQ04sSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDaEIsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JGLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksV0FBVyxDQUFDLGtCQUFrQixDQUFDO1lBQ3JELFlBQVksRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxZQUFZO1lBQzFELFFBQVEsRUFBRSxLQUFLO1lBQ2YsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFRCxjQUFjLENBQUMsVUFBdUI7UUFDcEMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFELE9BQU8sRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3BELENBQUM7aUlBaEZVLHlCQUF5QjtxSEFBekIseUJBQXlCLHlKQ2J0QywrWkFhQTs7MkZEQWEseUJBQXlCO2tCQUxyQyxTQUFTOytCQUNFLHNCQUFzQixpQkFFakIsaUJBQWlCLENBQUMsSUFBSTs0R0FJckIsY0FBYztzQkFBN0IsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVjdGFuZ2xlIH0gZnJvbSAnLi4vLi4vYW5ub3RhdGlvbi1zZXQvYW5ub3RhdGlvbi12aWV3L3JlY3RhbmdsZS9yZWN0YW5nbGUubW9kZWwnO1xuaW1wb3J0IHsgQW5ub3RhdGlvbiB9IGZyb20gJy4uLy4uL2Fubm90YXRpb24tc2V0L2Fubm90YXRpb24tdmlldy9hbm5vdGF0aW9uLm1vZGVsJztcbmltcG9ydCB7U3RvcmV9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCAqIGFzIGZyb21TdG9yZSBmcm9tICcuLi8uLi8uLi9zdG9yZS9yZWR1Y2Vycy9yZWR1Y2Vycyc7XG5pbXBvcnQgKiBhcyBmcm9tQWN0aW9ucyBmcm9tICcuLi8uLi8uLi9zdG9yZS9hY3Rpb25zL2Fubm90YXRpb24uYWN0aW9ucyc7XG5pbXBvcnQge1Rvb2xiYXJFdmVudFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3Rvb2xiYXIvdG9vbGJhci1ldmVudC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbXYtY29tbWVudHMtbmF2aWdhdGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vY29tbWVudHMtbmF2aWdhdGUuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIENvbW1lbnRzTmF2aWdhdGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBhbm5vdGF0aW9uTGlzdDogQW5ub3RhdGlvbltdO1xuICBASW5wdXQoKSBhdXRvU2VsZWN0ID0gZmFsc2U7XG5cbiAgbmF2aWdhdGlvbkxpc3Q6IGFueVtdID0gW107XG4gIGluZGV4ID0gMDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN0b3JlOiBTdG9yZTxmcm9tU3RvcmUuQW5ub3RhdGlvblNldFN0YXRlPiwgcHVibGljIHJlYWRvbmx5IHRvb2xiYXJFdmVudHM6IFRvb2xiYXJFdmVudFNlcnZpY2UpIHt9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLmFubm90YXRpb25MaXN0KSB7XG4gICAgICB0aGlzLmluaXROYXZpZ2F0aW9uTGlzdCgpO1xuICAgIH1cbiAgfVxuXG4gIGluaXROYXZpZ2F0aW9uTGlzdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluZGV4ID0gMDtcbiAgICB0aGlzLm5hdmlnYXRpb25MaXN0ID0gWy4uLnRoaXMuYW5ub3RhdGlvbkxpc3QgfHwgW11dXG4gICAgICAubWFwKGFubm90YXRpb24gPT4gKHtcbiAgICAgICAgY29udGVudDogYW5ub3RhdGlvbi5jb21tZW50c1swXS5jb250ZW50LFxuICAgICAgICBhbm5vdGF0aW9uSWQ6IGFubm90YXRpb24uaWQsXG4gICAgICAgIHBhZ2U6IGFubm90YXRpb24ucGFnZSxcbiAgICAgICAgcmVjdGFuZ2xlOiB0aGlzLnVwcGVyUmVjdGFuZ2xlKGFubm90YXRpb24ucmVjdGFuZ2xlcyksXG4gICAgICB9KSlcbiAgICAgIC5zb3J0KHRoaXMuc29ydENvbW1lbnRzKTtcblxuICAgIGlmICh0aGlzLmF1dG9TZWxlY3QpIHtcbiAgICAgIHRoaXMudG9vbGJhckV2ZW50cy5zZXRQYWdlKE51bWJlci5wYXJzZUludCh0aGlzLm5hdmlnYXRpb25MaXN0WzBdLnBhZ2UsIDApKTtcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IGZyb21BY3Rpb25zLlNlbGVjdGVkQW5ub3RhdGlvbih7XG4gICAgICAgIGFubm90YXRpb25JZDogdGhpcy5uYXZpZ2F0aW9uTGlzdFswXS5hbm5vdGF0aW9uSWQsXG4gICAgICAgIGVkaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgc2VsZWN0ZWQ6IHRydWVcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1cblxuICBzb3J0Q29tbWVudHMobWFwcGVkQ29tbWVudEEsIG1hcHBlZENvbW1lbnRCKSB7XG4gICAgaWYgKG1hcHBlZENvbW1lbnRBLnBhZ2UgIT09IG1hcHBlZENvbW1lbnRCLnBhZ2UpIHtcbiAgICAgIHJldHVybiBtYXBwZWRDb21tZW50QS5wYWdlIC0gbWFwcGVkQ29tbWVudEIucGFnZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcmVjdEEgPSBtYXBwZWRDb21tZW50QS5yZWN0YW5nbGU7XG4gICAgICBjb25zdCByZWN0QiA9IG1hcHBlZENvbW1lbnRCLnJlY3RhbmdsZTtcbiAgICAgIGlmIChyZWN0QS55ICE9PSByZWN0Qi55KSB7XG4gICAgICAgIHJldHVybiByZWN0QS55IC0gcmVjdEIueTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZWN0QS54IC0gcmVjdEIueDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZXh0SXRlbSgpIHtcbiAgICB0aGlzLmluZGV4ICs9IDE7XG4gICAgaWYgKHRoaXMuaW5kZXggPT09IHRoaXMuYW5ub3RhdGlvbkxpc3QubGVuZ3RoKSB7XG4gICAgICB0aGlzLmluZGV4ID0gMDtcbiAgICB9XG5cbiAgICB0aGlzLnRvb2xiYXJFdmVudHMuc2V0UGFnZShOdW1iZXIucGFyc2VJbnQodGhpcy5uYXZpZ2F0aW9uTGlzdFt0aGlzLmluZGV4XS5wYWdlLCAwKSk7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgZnJvbUFjdGlvbnMuU2VsZWN0ZWRBbm5vdGF0aW9uKHtcbiAgICAgIGFubm90YXRpb25JZDogdGhpcy5uYXZpZ2F0aW9uTGlzdFt0aGlzLmluZGV4XS5hbm5vdGF0aW9uSWQsIGVkaXRhYmxlOiBmYWxzZSwgc2VsZWN0ZWQ6IHRydWVcbiAgICB9KSk7XG4gIH1cblxuXG4gIHByZXZJdGVtKCkge1xuICAgIHRoaXMuaW5kZXggLT0gMTtcbiAgICBpZiAodGhpcy5pbmRleCA8IDApIHtcbiAgICAgIHRoaXMuaW5kZXggPSB0aGlzLm5hdmlnYXRpb25MaXN0Lmxlbmd0aCAtIDE7XG4gICAgfVxuICAgIHRoaXMudG9vbGJhckV2ZW50cy5zZXRQYWdlKE51bWJlci5wYXJzZUludCh0aGlzLm5hdmlnYXRpb25MaXN0W3RoaXMuaW5kZXhdLnBhZ2UsIDApKTtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBmcm9tQWN0aW9ucy5TZWxlY3RlZEFubm90YXRpb24oe1xuICAgICAgYW5ub3RhdGlvbklkOiB0aGlzLm5hdmlnYXRpb25MaXN0W3RoaXMuaW5kZXhdLmFubm90YXRpb25JZCxcbiAgICAgIGVkaXRhYmxlOiBmYWxzZSxcbiAgICAgIHNlbGVjdGVkOiB0cnVlXG4gICAgfSkpO1xuICB9XG5cbiAgdXBwZXJSZWN0YW5nbGUocmVjdGFuZ2xlczogUmVjdGFuZ2xlW10pIHtcbiAgICBbLi4ucmVjdGFuZ2xlc10uc29ydCgocmVjdDEsIHJlY3QyKSA9PiByZWN0MS55IC0gcmVjdDIueSk7XG4gICAgcmV0dXJuIHsgeDogcmVjdGFuZ2xlc1swXS54LCB5OiByZWN0YW5nbGVzWzBdLnkgfTtcbiAgfVxufVxuIiwiPHAgY2xhc3M9XCJjb21tZW50LXNlYXJjaFwiPlxuICA8c3BhbiBjbGFzcz1cImNvbW1lbnQtc2VhcmNoX19pdGVtXCI+XG4gICAgU2hvd2luZyB7eyBpbmRleCArIDEgfX0gb2Yge3sgbmF2aWdhdGlvbkxpc3QubGVuZ3RoIH19XG4gIDwvc3Bhbj5cbiAgPGEgW3JvdXRlckxpbmtdPVwiW11cIlxuICAgICBjbGFzcz1cImNvbW1lbnQtc2VhcmNoX19pdGVtXCJcbiAgICAgdGl0bGU9XCJQcmV2aW91cyBjb21tZW50XCJcbiAgICAgKGNsaWNrKT1cInByZXZJdGVtKClcIj5QcmV2PC9hPlxuICA8YSBbcm91dGVyTGlua109XCJbXVwiXG4gICAgIGNsYXNzPVwiY29tbWVudC1zZWFyY2hfX2l0ZW1cIlxuICAgICB0aXRsZT1cIk5leHQgY29tbWVudCdcIlxuICAgICAoY2xpY2spPVwibmV4dEl0ZW0oKVwiPk5leHQ8L2E+XG48L3A+XG4iXX0=
@@ -1,54 +0,0 @@
1
- import { Component, Input, ViewChild, ViewEncapsulation } from '@angular/core';
2
- import * as fromActions from '../../../../store/actions/annotation.actions';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@ngrx/store";
5
- import * as i2 from "@angular/common";
6
- import * as i3 from "@angular/forms";
7
- import * as i4 from "../../comment-navigate/comments-navigate.component";
8
- import * as i5 from "rpx-xui-translation";
9
- export class CommentSearchComponent {
10
- constructor(store) {
11
- this.store = store;
12
- this.searchResults = [];
13
- this.searchIndex = 0;
14
- }
15
- ngAfterViewInit() {
16
- if (this.searchInput) {
17
- this.searchInput.nativeElement.focus();
18
- }
19
- }
20
- ngOnDestroy() {
21
- // TODO workaround for tab error
22
- setTimeout(() => { this.store.dispatch(new fromActions.SearchComment('')); }, 250);
23
- }
24
- searchComments(searchText) {
25
- this.clearSearch();
26
- if (searchText.length > 2) {
27
- this.searchString = searchText;
28
- this.searchResults = this.annotations
29
- .filter(annotation => annotation.comments.length > 0)
30
- .filter(annotation => annotation.comments[0].content.toLowerCase().includes(this.searchString.toLowerCase()));
31
- if (this.searchResults.length > 0) {
32
- this.store.dispatch(new fromActions.SearchComment(searchText));
33
- }
34
- }
35
- }
36
- clearSearch() {
37
- this.searchString = undefined;
38
- this.searchResults = [];
39
- this.searchIndex = 0;
40
- this.store.dispatch(new fromActions.SearchComment(''));
41
- }
42
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: CommentSearchComponent, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Component }); }
43
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.8", type: CommentSearchComponent, selector: "mv-comment-search", inputs: { annotations: "annotations" }, viewQueries: [{ propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true }], ngImport: i0, template: "<input\n #searchInput\n type=\"text\"\n class=\"govuk-input comment-search__item\"\n id=\"search-comments-input\"\n name=\"searchString\"\n aria-label=\"search comments input\"\n [ngModel]=\"searchString\"\n/>\n<button\n type=\"button\"\n [class.govuk-button--disabled]=\"searchInput?.value.length <= 2\"\n class=\"govuk-button comment-search__item\"\n (click)=\"searchComments(searchInput.value.trim())\"\n>\n {{ \"Search\" | rpxTranslate }}\n</button>\n<ng-container *ngIf=\"searchResults.length > 0\">\n <mv-comments-navigate [annotationList]=\"searchResults\"></mv-comments-navigate>\n</ng-container>\n<ng-container *ngIf=\"searchString && searchResults?.length === 0\">\n <p class=\"comment-search__item\">\n {{ \"No matches have been found\" | rpxTranslate }}\n </p>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.CommentsNavigateComponent, selector: "mv-comments-navigate", inputs: ["annotationList", "autoSelect"] }, { kind: "pipe", type: i5.RpxTranslatePipe, name: "rpxTranslate" }], encapsulation: i0.ViewEncapsulation.None }); }
44
- }
45
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: CommentSearchComponent, decorators: [{
46
- type: Component,
47
- args: [{ selector: 'mv-comment-search', encapsulation: ViewEncapsulation.None, template: "<input\n #searchInput\n type=\"text\"\n class=\"govuk-input comment-search__item\"\n id=\"search-comments-input\"\n name=\"searchString\"\n aria-label=\"search comments input\"\n [ngModel]=\"searchString\"\n/>\n<button\n type=\"button\"\n [class.govuk-button--disabled]=\"searchInput?.value.length <= 2\"\n class=\"govuk-button comment-search__item\"\n (click)=\"searchComments(searchInput.value.trim())\"\n>\n {{ \"Search\" | rpxTranslate }}\n</button>\n<ng-container *ngIf=\"searchResults.length > 0\">\n <mv-comments-navigate [annotationList]=\"searchResults\"></mv-comments-navigate>\n</ng-container>\n<ng-container *ngIf=\"searchString && searchResults?.length === 0\">\n <p class=\"comment-search__item\">\n {{ \"No matches have been found\" | rpxTranslate }}\n </p>\n</ng-container>\n" }]
48
- }], ctorParameters: () => [{ type: i1.Store }], propDecorators: { annotations: [{
49
- type: Input
50
- }], searchInput: [{
51
- type: ViewChild,
52
- args: ['searchInput', { static: false }]
53
- }] } });
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC1zZWFyY2guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVkaWEtdmlld2VyL3NyYy9saWIvYW5ub3RhdGlvbnMvY29tbWVudC1zZXQvY29tbWVudC1zZXQtaGVhZGVyL2NvbW1lbnQtc2VhcmNoL2NvbW1lbnQtc2VhcmNoLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21lZGlhLXZpZXdlci9zcmMvbGliL2Fubm90YXRpb25zL2NvbW1lbnQtc2V0L2NvbW1lbnQtc2V0LWhlYWRlci9jb21tZW50LXNlYXJjaC9jb21tZW50LXNlYXJjaC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBYyxLQUFLLEVBQWEsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSXJILE9BQU8sS0FBSyxXQUFXLE1BQU0sOENBQThDLENBQUM7Ozs7Ozs7QUFPNUUsTUFBTSxPQUFPLHNCQUFzQjtJQVVqQyxZQUFvQixLQUEwQztRQUExQyxVQUFLLEdBQUwsS0FBSyxDQUFxQztRQUg5RCxrQkFBYSxHQUFpQixFQUFFLENBQUM7UUFDakMsZ0JBQVcsR0FBRyxDQUFDLENBQUM7SUFFaUQsQ0FBQztJQUVsRSxlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDekMsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsZ0NBQWdDO1FBQ2hDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBRUQsY0FBYyxDQUFDLFVBQWtCO1FBQy9CLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQixJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUM7WUFDL0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsV0FBVztpQkFDbEMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2lCQUNwRCxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FDbkIsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzVGLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksV0FBVyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQ2pFLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQztRQUM5QixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDO2lJQTFDVSxzQkFBc0I7cUhBQXRCLHNCQUFzQiw2TUNYbkMsMnlCQXlCQTs7MkZEZGEsc0JBQXNCO2tCQUxsQyxTQUFTOytCQUNFLG1CQUFtQixpQkFFZCxpQkFBaUIsQ0FBQyxJQUFJOzBFQUlaLFdBQVc7c0JBQW5DLEtBQUs7Z0JBRXFDLFdBQVc7c0JBQXJELFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uRGVzdHJveSwgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQW5ub3RhdGlvbiB9IGZyb20gJy4uLy4uLy4uL2Fubm90YXRpb24tc2V0L2Fubm90YXRpb24tdmlldy9hbm5vdGF0aW9uLm1vZGVsJztcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0ICogYXMgZnJvbVN0b3JlIGZyb20gJy4uLy4uLy4uLy4uL3N0b3JlL3JlZHVjZXJzL3JlZHVjZXJzJztcbmltcG9ydCAqIGFzIGZyb21BY3Rpb25zIGZyb20gJy4uLy4uLy4uLy4uL3N0b3JlL2FjdGlvbnMvYW5ub3RhdGlvbi5hY3Rpb25zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbXYtY29tbWVudC1zZWFyY2gnLFxuICB0ZW1wbGF0ZVVybDogJy4vY29tbWVudC1zZWFyY2guY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIENvbW1lbnRTZWFyY2hDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXG4gIEBJbnB1dCgpIHB1YmxpYyByZWFkb25seSBhbm5vdGF0aW9uczogQW5ub3RhdGlvbltdO1xuXG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaElucHV0Jywge3N0YXRpYzogZmFsc2V9KSBzZWFyY2hJbnB1dDogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuICBzZWFyY2hTdHJpbmc6IHN0cmluZztcbiAgc2VhcmNoUmVzdWx0czogQW5ub3RhdGlvbltdID0gW107XG4gIHNlYXJjaEluZGV4ID0gMDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN0b3JlOiBTdG9yZTxmcm9tU3RvcmUuQW5ub3RhdGlvblNldFN0YXRlPikge31cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VhcmNoSW5wdXQpIHtcbiAgICAgIHRoaXMuc2VhcmNoSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIC8vIFRPRE8gd29ya2Fyb3VuZCBmb3IgdGFiIGVycm9yXG4gICAgc2V0VGltZW91dCgoKSA9PiB7dGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgZnJvbUFjdGlvbnMuU2VhcmNoQ29tbWVudCgnJykpOyB9LCAyNTApO1xuICB9XG5cbiAgc2VhcmNoQ29tbWVudHMoc2VhcmNoVGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhclNlYXJjaCgpO1xuICAgIGlmIChzZWFyY2hUZXh0Lmxlbmd0aCA+IDIpIHtcbiAgICAgIHRoaXMuc2VhcmNoU3RyaW5nID0gc2VhcmNoVGV4dDtcbiAgICAgIHRoaXMuc2VhcmNoUmVzdWx0cyA9IHRoaXMuYW5ub3RhdGlvbnNcbiAgICAgICAgLmZpbHRlcihhbm5vdGF0aW9uID0+IGFubm90YXRpb24uY29tbWVudHMubGVuZ3RoID4gMClcbiAgICAgICAgLmZpbHRlcihhbm5vdGF0aW9uID0+XG4gICAgICAgICAgYW5ub3RhdGlvbi5jb21tZW50c1swXS5jb250ZW50LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zZWFyY2hTdHJpbmcudG9Mb3dlckNhc2UoKSkpO1xuICAgICAgaWYgKHRoaXMuc2VhcmNoUmVzdWx0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IGZyb21BY3Rpb25zLlNlYXJjaENvbW1lbnQoc2VhcmNoVGV4dCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNsZWFyU2VhcmNoKCkge1xuICAgIHRoaXMuc2VhcmNoU3RyaW5nID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuc2VhcmNoUmVzdWx0cyA9IFtdO1xuICAgIHRoaXMuc2VhcmNoSW5kZXggPSAwO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IGZyb21BY3Rpb25zLlNlYXJjaENvbW1lbnQoJycpKTtcbiAgfVxufVxuIiwiPGlucHV0XG4gICNzZWFyY2hJbnB1dFxuICB0eXBlPVwidGV4dFwiXG4gIGNsYXNzPVwiZ292dWstaW5wdXQgY29tbWVudC1zZWFyY2hfX2l0ZW1cIlxuICBpZD1cInNlYXJjaC1jb21tZW50cy1pbnB1dFwiXG4gIG5hbWU9XCJzZWFyY2hTdHJpbmdcIlxuICBhcmlhLWxhYmVsPVwic2VhcmNoIGNvbW1lbnRzIGlucHV0XCJcbiAgW25nTW9kZWxdPVwic2VhcmNoU3RyaW5nXCJcbi8+XG48YnV0dG9uXG4gIHR5cGU9XCJidXR0b25cIlxuICBbY2xhc3MuZ292dWstYnV0dG9uLS1kaXNhYmxlZF09XCJzZWFyY2hJbnB1dD8udmFsdWUubGVuZ3RoIDw9IDJcIlxuICBjbGFzcz1cImdvdnVrLWJ1dHRvbiBjb21tZW50LXNlYXJjaF9faXRlbVwiXG4gIChjbGljayk9XCJzZWFyY2hDb21tZW50cyhzZWFyY2hJbnB1dC52YWx1ZS50cmltKCkpXCJcbj5cbiAge3sgXCJTZWFyY2hcIiB8IHJweFRyYW5zbGF0ZSB9fVxuPC9idXR0b24+XG48bmctY29udGFpbmVyICpuZ0lmPVwic2VhcmNoUmVzdWx0cy5sZW5ndGggPiAwXCI+XG4gIDxtdi1jb21tZW50cy1uYXZpZ2F0ZSBbYW5ub3RhdGlvbkxpc3RdPVwic2VhcmNoUmVzdWx0c1wiPjwvbXYtY29tbWVudHMtbmF2aWdhdGU+XG48L25nLWNvbnRhaW5lcj5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJzZWFyY2hTdHJpbmcgJiYgc2VhcmNoUmVzdWx0cz8ubGVuZ3RoID09PSAwXCI+XG4gIDxwIGNsYXNzPVwiY29tbWVudC1zZWFyY2hfX2l0ZW1cIj5cbiAgICB7eyBcIk5vIG1hdGNoZXMgaGF2ZSBiZWVuIGZvdW5kXCIgfCBycHhUcmFuc2xhdGUgfX1cbiAgPC9wPlxuPC9uZy1jb250YWluZXI+XG4iXX0=