@hmcts/media-viewer 4.1.9-cme-776-angular-20 → 4.1.9-exui-1580-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.
- package/assets/all.scss +1 -0
- package/assets/sass/pdf-viewer.scss +78 -0
- package/assets/sass/tooltip.scss +50 -0
- package/esm2022/hmcts-media-viewer.mjs +5 -0
- package/esm2022/lib/annotations/annotation-set/annotation-create/box-highlight-create/box-highlight-create.component.mjs +122 -0
- package/esm2022/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.directive.mjs +179 -0
- package/esm2022/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.service.mjs +101 -0
- package/esm2022/lib/annotations/annotation-set/annotation-create/highlight-create/keyboard-text-highlight.directive.mjs +345 -0
- package/esm2022/lib/annotations/annotation-set/annotation-set.component.mjs +50 -0
- package/esm2022/lib/annotations/annotation-set/annotation-set.model.mjs +2 -0
- package/esm2022/lib/annotations/annotation-set/annotation-view/annotation-view.component.mjs +94 -0
- package/esm2022/lib/annotations/annotation-set/annotation-view/annotation.model.mjs +2 -0
- package/esm2022/lib/annotations/annotation-set/annotation-view/rectangle/rectangle.component.mjs +116 -0
- package/esm2022/lib/annotations/annotation-set/annotation-view/rectangle/rectangle.model.mjs +2 -0
- package/esm2022/lib/annotations/annotation-set/ctx-toolbar/ctx-toolbar.component.mjs +145 -0
- package/esm2022/lib/annotations/annotation-set/metadata-layer/metadata-layer.component.mjs +99 -0
- package/esm2022/lib/annotations/annotations.module.mjs +162 -0
- package/esm2022/lib/annotations/comment-set/comment/comment.component.mjs +178 -0
- package/esm2022/lib/annotations/comment-set/comment/comment.model.mjs +2 -0
- package/esm2022/lib/annotations/comment-set/comment/comment.service.mjs +50 -0
- package/esm2022/lib/annotations/comment-set/comment/text-highlight/text-highlight.directive.mjs +47 -0
- package/esm2022/lib/annotations/comment-set/comment/textarea-auto-expand/textarea-auto-expand.directive.mjs +31 -0
- package/esm2022/lib/annotations/comment-set/comment-navigate/comments-navigate.component.mjs +91 -0
- package/esm2022/lib/annotations/comment-set/comment-set-header/comment-filter/comment-filter.component.mjs +62 -0
- package/esm2022/lib/annotations/comment-set/comment-set-header/comment-search/comment-search.component.mjs +54 -0
- package/esm2022/lib/annotations/comment-set/comment-set-header/comment-set-header.component.mjs +72 -0
- package/esm2022/lib/annotations/comment-set/comment-set-render.service.mjs +55 -0
- package/esm2022/lib/annotations/comment-set/comment-set.component.mjs +123 -0
- package/esm2022/lib/annotations/comments-summary/comments-summary.component.mjs +120 -0
- package/esm2022/lib/annotations/models/api-persisted.model.mjs +2 -0
- package/esm2022/lib/annotations/models/event-select.model.mjs +2 -0
- package/esm2022/lib/annotations/models/tags.model.mjs +2 -0
- package/esm2022/lib/annotations/models/user.model.mjs +2 -0
- package/esm2022/lib/annotations/pipes/date/date.pipe.mjs +26 -0
- package/esm2022/lib/annotations/pipes/filter/filter.pipe.mjs +32 -0
- package/esm2022/lib/annotations/pipes/unsnake/unsnake.pipe.mjs +16 -0
- package/esm2022/lib/annotations/services/annotation-api/annotation-api.service.mjs +58 -0
- package/esm2022/lib/annotations/services/bookmarks-api/bookmarks-api.service.mjs +45 -0
- package/esm2022/lib/annotations/services/tags/tags.services.mjs +41 -0
- package/esm2022/lib/annotations/tags/tags.component.mjs +53 -0
- package/esm2022/lib/bookmark/components/bookmark-icons.component.mjs +25 -0
- package/esm2022/lib/icp/confirm-exit/confirm-action-dialog.component.mjs +22 -0
- package/esm2022/lib/icp/icp-follower.service.mjs +65 -0
- package/esm2022/lib/icp/icp-presenter.service.mjs +56 -0
- package/esm2022/lib/icp/icp-session-api.service.mjs +28 -0
- package/esm2022/lib/icp/icp-update.service.mjs +73 -0
- package/esm2022/lib/icp/icp.events.mjs +15 -0
- package/esm2022/lib/icp/icp.interfaces.mjs +2 -0
- package/esm2022/lib/icp/icp.service.mjs +98 -0
- package/esm2022/lib/icp/participants-list/participants-list.component.mjs +32 -0
- package/esm2022/lib/icp/socket.service.mjs +128 -0
- package/esm2022/lib/media-viewer.component.mjs +247 -0
- package/esm2022/lib/media-viewer.module.mjs +142 -0
- package/esm2022/lib/print.service.mjs +32 -0
- package/esm2022/lib/redaction/components/redaction.component.mjs +91 -0
- package/esm2022/lib/redaction/services/redaction-api.service.mjs +50 -0
- package/esm2022/lib/redaction/services/redaction.model.mjs +2 -0
- package/esm2022/lib/shared/directives/tooltip-dismiss.directive.mjs +36 -0
- package/esm2022/lib/shared/gov-uk-date/gov-uk-date.component.mjs +28 -0
- package/esm2022/lib/shared/gov-uk-error-message/gov-uk-error-message.component.mjs +34 -0
- package/esm2022/lib/shared/gov-uk-fieldset/gov-uk-fieldset.component.mjs +63 -0
- package/esm2022/lib/shared/gov-uk-label/gov-uk-label.component.mjs +44 -0
- package/esm2022/lib/shared/shared.module.mjs +53 -0
- package/esm2022/lib/shared/util/helpers/html-templates.helper.mjs +29 -0
- package/esm2022/lib/shared/util/services/number.helper.service.mjs +23 -0
- package/esm2022/lib/store/actions/annotation.actions.mjs +119 -0
- package/esm2022/lib/store/actions/bookmark.actions.mjs +112 -0
- package/esm2022/lib/store/actions/document.actions.mjs +91 -0
- package/esm2022/lib/store/actions/icp.actions.mjs +56 -0
- package/esm2022/lib/store/actions/redaction.actions.mjs +132 -0
- package/esm2022/lib/store/actions/tag.actions.mjs +21 -0
- package/esm2022/lib/store/bookmarks-store-utils.mjs +49 -0
- package/esm2022/lib/store/effects/annotation.effects.mjs +51 -0
- package/esm2022/lib/store/effects/bookmarks.effects.mjs +44 -0
- package/esm2022/lib/store/effects/document.effects.mjs +44 -0
- package/esm2022/lib/store/effects/icp.effects.mjs +26 -0
- package/esm2022/lib/store/effects/index.mjs +7 -0
- package/esm2022/lib/store/effects/redaction.effects.mjs +67 -0
- package/esm2022/lib/store/models/bookmarks.interface.mjs +2 -0
- package/esm2022/lib/store/models/filters.interface.mjs +2 -0
- package/esm2022/lib/store/reducers/annotations.reducer.mjs +208 -0
- package/esm2022/lib/store/reducers/bookmarks.reducer.mjs +125 -0
- package/esm2022/lib/store/reducers/document.reducer.mjs +158 -0
- package/esm2022/lib/store/reducers/icp.reducer.mjs +56 -0
- package/esm2022/lib/store/reducers/redaction.reducer.mjs +116 -0
- package/esm2022/lib/store/reducers/reducers.mjs +23 -0
- package/esm2022/lib/store/reducers/tags.reducer.mjs +93 -0
- package/esm2022/lib/store/selectors/annotation.selectors.mjs +81 -0
- package/esm2022/lib/store/selectors/bookmark.selectors.mjs +37 -0
- package/esm2022/lib/store/selectors/document.selectors.mjs +13 -0
- package/esm2022/lib/store/selectors/icp.selectors.mjs +13 -0
- package/esm2022/lib/store/selectors/redaction.selectors.mjs +26 -0
- package/esm2022/lib/store/selectors/tag.selectors.mjs +15 -0
- package/esm2022/lib/store/store-utils.mjs +131 -0
- package/esm2022/lib/toolbar/highlight-toolbar/highlight-toolbar.component.mjs +46 -0
- package/esm2022/lib/toolbar/icp-event.service.mjs +44 -0
- package/esm2022/lib/toolbar/icp-toolbar/icp-toolbar.component.mjs +43 -0
- package/esm2022/lib/toolbar/main-toolbar/main-toolbar.component.mjs +207 -0
- package/esm2022/lib/toolbar/redaction-search-bar/redaction-search-bar.component.mjs +237 -0
- package/esm2022/lib/toolbar/redaction-search-bar/redaction-search.model.mjs +2 -0
- package/esm2022/lib/toolbar/redaction-toolbar/redaction-toolbar.component.mjs +69 -0
- package/esm2022/lib/toolbar/search-bar/search-bar.component.mjs +109 -0
- package/esm2022/lib/toolbar/toolbar-button-visibility.service.mjs +94 -0
- package/esm2022/lib/toolbar/toolbar-event.service.mjs +178 -0
- package/esm2022/lib/toolbar/toolbar.module.mjs +75 -0
- package/esm2022/lib/viewers/convertible-content-viewer/convertible-content-viewer.component.mjs +82 -0
- package/esm2022/lib/viewers/convertible-content-viewer/document-conversion-api.service.mjs +22 -0
- package/esm2022/lib/viewers/grab-n-drag.directive.mjs +57 -0
- package/esm2022/lib/viewers/image-viewer/image-viewer.component.mjs +166 -0
- package/esm2022/lib/viewers/multimedia-player/multimedia-player.component.mjs +59 -0
- package/esm2022/lib/viewers/pdf-viewer/pdf-js/pdf-js-wrapper.mjs +266 -0
- package/esm2022/lib/viewers/pdf-viewer/pdf-js/pdf-js-wrapper.provider.mjs +40 -0
- package/esm2022/lib/viewers/pdf-viewer/pdf-viewer.component.mjs +280 -0
- package/esm2022/lib/viewers/pdf-viewer/side-bar/bookmarks/bookmarks.component.mjs +379 -0
- package/esm2022/lib/viewers/pdf-viewer/side-bar/bookmarks/bookmarks.interfaces.mjs +2 -0
- package/esm2022/lib/viewers/pdf-viewer/side-bar/outline-item/outline-item.component.mjs +49 -0
- package/esm2022/lib/viewers/pdf-viewer/side-bar/outline-item/outline.model.mjs +2 -0
- package/esm2022/lib/viewers/pdf-viewer/side-bar/side-bar.component.mjs +99 -0
- package/esm2022/lib/viewers/rotation-persist/rotation-api.service.mjs +27 -0
- package/esm2022/lib/viewers/rotation-persist/rotation-persist.directive.mjs +61 -0
- package/esm2022/lib/viewers/rotation-persist/rotation.model.mjs +2 -0
- package/esm2022/lib/viewers/unsupported-viewer/unsupported-viewer.component.mjs +49 -0
- package/esm2022/lib/viewers/viewer-event.service.mjs +34 -0
- package/esm2022/lib/viewers/viewer-exception.model.mjs +13 -0
- package/esm2022/lib/viewers/viewer-util.service.mjs +20 -0
- package/esm2022/public_api.mjs +33 -0
- package/fesm2022/hmcts-media-viewer.mjs +1515 -1013
- package/fesm2022/hmcts-media-viewer.mjs.map +1 -1
- package/hmcts-media-viewer.d.ts.map +1 -0
- package/index.d.ts +4 -2305
- package/lib/annotations/annotation-set/annotation-create/box-highlight-create/box-highlight-create.component.d.ts +48 -0
- package/lib/annotations/annotation-set/annotation-create/box-highlight-create/box-highlight-create.component.d.ts.map +1 -0
- package/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.directive.d.ts +36 -0
- package/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.directive.d.ts.map +1 -0
- package/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.service.d.ts +18 -0
- package/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.service.d.ts.map +1 -0
- package/lib/annotations/annotation-set/annotation-create/highlight-create/keyboard-text-highlight.directive.d.ts +63 -0
- package/lib/annotations/annotation-set/annotation-create/highlight-create/keyboard-text-highlight.directive.d.ts.map +1 -0
- package/lib/annotations/annotation-set/annotation-set.component.d.ts +27 -0
- package/lib/annotations/annotation-set/annotation-set.component.d.ts.map +1 -0
- package/lib/annotations/annotation-set/annotation-set.model.d.ts +7 -0
- package/lib/annotations/annotation-set/annotation-set.model.d.ts.map +1 -0
- package/lib/annotations/annotation-set/annotation-view/annotation-view.component.d.ts +34 -0
- package/lib/annotations/annotation-set/annotation-view/annotation-view.component.d.ts.map +1 -0
- package/lib/annotations/annotation-set/annotation-view/annotation.model.d.ts +16 -0
- package/lib/annotations/annotation-set/annotation-view/annotation.model.d.ts.map +1 -0
- package/lib/annotations/annotation-set/annotation-view/rectangle/rectangle.component.d.ts +41 -0
- package/lib/annotations/annotation-set/annotation-view/rectangle/rectangle.component.d.ts.map +1 -0
- package/lib/annotations/annotation-set/annotation-view/rectangle/rectangle.model.d.ts +9 -0
- package/lib/annotations/annotation-set/annotation-view/rectangle/rectangle.model.d.ts.map +1 -0
- package/lib/annotations/annotation-set/ctx-toolbar/ctx-toolbar.component.d.ts +41 -0
- package/lib/annotations/annotation-set/ctx-toolbar/ctx-toolbar.component.d.ts.map +1 -0
- package/lib/annotations/annotation-set/metadata-layer/metadata-layer.component.d.ts +40 -0
- package/lib/annotations/annotation-set/metadata-layer/metadata-layer.component.d.ts.map +1 -0
- package/lib/annotations/annotations.module.d.ts +36 -0
- package/lib/annotations/annotations.module.d.ts.map +1 -0
- package/lib/annotations/comment-set/comment/comment.component.d.ts +69 -0
- package/lib/annotations/comment-set/comment/comment.component.d.ts.map +1 -0
- package/lib/annotations/comment-set/comment/comment.model.d.ts +13 -0
- package/lib/annotations/comment-set/comment/comment.model.d.ts.map +1 -0
- package/lib/annotations/comment-set/comment/comment.service.d.ts +22 -0
- package/lib/annotations/comment-set/comment/comment.service.d.ts.map +1 -0
- package/lib/annotations/comment-set/comment/text-highlight/text-highlight.directive.d.ts +14 -0
- package/lib/annotations/comment-set/comment/text-highlight/text-highlight.directive.d.ts.map +1 -0
- package/lib/annotations/comment-set/comment/textarea-auto-expand/textarea-auto-expand.directive.d.ts +12 -0
- package/lib/annotations/comment-set/comment/textarea-auto-expand/textarea-auto-expand.directive.d.ts.map +1 -0
- package/lib/annotations/comment-set/comment-navigate/comments-navigate.component.d.ts +28 -0
- package/lib/annotations/comment-set/comment-navigate/comments-navigate.component.d.ts.map +1 -0
- package/lib/annotations/comment-set/comment-set-header/comment-filter/comment-filter.component.d.ts +26 -0
- package/lib/annotations/comment-set/comment-set-header/comment-filter/comment-filter.component.d.ts.map +1 -0
- package/lib/annotations/comment-set/comment-set-header/comment-search/comment-search.component.d.ts +21 -0
- package/lib/annotations/comment-set/comment-set-header/comment-search/comment-search.component.d.ts.map +1 -0
- package/lib/annotations/comment-set/comment-set-header/comment-set-header.component.d.ts +36 -0
- package/lib/annotations/comment-set/comment-set-header/comment-set-header.component.d.ts.map +1 -0
- package/lib/annotations/comment-set/comment-set-render.service.d.ts +15 -0
- package/lib/annotations/comment-set/comment-set-render.service.d.ts.map +1 -0
- package/lib/annotations/comment-set/comment-set.component.d.ts +56 -0
- package/lib/annotations/comment-set/comment-set.component.d.ts.map +1 -0
- package/lib/annotations/comments-summary/comments-summary.component.d.ts +42 -0
- package/lib/annotations/comments-summary/comments-summary.component.d.ts.map +1 -0
- package/lib/annotations/models/api-persisted.model.d.ts +11 -0
- package/lib/annotations/models/api-persisted.model.d.ts.map +1 -0
- package/lib/annotations/models/event-select.model.d.ts +6 -0
- package/lib/annotations/models/event-select.model.d.ts.map +1 -0
- package/lib/annotations/models/tags.model.d.ts +7 -0
- package/lib/annotations/models/tags.model.d.ts.map +1 -0
- package/lib/annotations/models/user.model.d.ts +6 -0
- package/lib/annotations/models/user.model.d.ts.map +1 -0
- package/lib/annotations/pipes/date/date.pipe.d.ts +16 -0
- package/lib/annotations/pipes/date/date.pipe.d.ts.map +1 -0
- package/lib/annotations/pipes/filter/filter.pipe.d.ts +8 -0
- package/lib/annotations/pipes/filter/filter.pipe.d.ts.map +1 -0
- package/lib/annotations/pipes/unsnake/unsnake.pipe.d.ts +8 -0
- package/lib/annotations/pipes/unsnake/unsnake.pipe.d.ts.map +1 -0
- package/lib/annotations/services/annotation-api/annotation-api.service.d.ts +28 -0
- package/lib/annotations/services/annotation-api/annotation-api.service.d.ts.map +1 -0
- package/lib/annotations/services/bookmarks-api/bookmarks-api.service.d.ts +21 -0
- package/lib/annotations/services/bookmarks-api/bookmarks-api.service.d.ts.map +1 -0
- package/lib/annotations/services/tags/tags.services.d.ts +18 -0
- package/lib/annotations/services/tags/tags.services.d.ts.map +1 -0
- package/lib/annotations/tags/tags.component.d.ts +28 -0
- package/lib/annotations/tags/tags.component.d.ts.map +1 -0
- package/lib/bookmark/components/bookmark-icons.component.d.ts +19 -0
- package/lib/bookmark/components/bookmark-icons.component.d.ts.map +1 -0
- package/lib/icp/confirm-exit/confirm-action-dialog.component.d.ts +11 -0
- package/lib/icp/confirm-exit/confirm-action-dialog.component.d.ts.map +1 -0
- package/lib/icp/icp-follower.service.d.ts +26 -0
- package/lib/icp/icp-follower.service.d.ts.map +1 -0
- package/lib/icp/icp-presenter.service.d.ts +25 -0
- package/lib/icp/icp-presenter.service.d.ts.map +1 -0
- package/lib/icp/icp-session-api.service.d.ts +15 -0
- package/lib/icp/icp-session-api.service.d.ts.map +1 -0
- package/lib/icp/icp-update.service.d.ts +22 -0
- package/lib/icp/icp-update.service.d.ts.map +1 -0
- package/lib/icp/icp.events.d.ts +14 -0
- package/lib/icp/icp.events.d.ts.map +1 -0
- package/lib/icp/icp.interfaces.d.ts +23 -0
- package/lib/icp/icp.interfaces.d.ts.map +1 -0
- package/lib/icp/icp.service.d.ts +40 -0
- package/lib/icp/icp.service.d.ts.map +1 -0
- package/lib/icp/participants-list/participants-list.component.d.ts +23 -0
- package/lib/icp/participants-list/participants-list.component.d.ts.map +1 -0
- package/lib/icp/socket.service.d.ts +29 -0
- package/lib/icp/socket.service.d.ts.map +1 -0
- package/lib/media-viewer.component.d.ts +72 -0
- package/lib/media-viewer.component.d.ts.map +1 -0
- package/lib/media-viewer.module.d.ts +37 -0
- package/lib/media-viewer.module.d.ts.map +1 -0
- package/lib/print.service.d.ts +8 -0
- package/lib/print.service.d.ts.map +1 -0
- package/lib/redaction/components/redaction.component.d.ts +42 -0
- package/lib/redaction/components/redaction.component.d.ts.map +1 -0
- package/lib/redaction/services/redaction-api.service.d.ts +20 -0
- package/lib/redaction/services/redaction-api.service.d.ts.map +1 -0
- package/lib/redaction/services/redaction.model.d.ts +11 -0
- package/lib/redaction/services/redaction.model.d.ts.map +1 -0
- package/lib/shared/directives/tooltip-dismiss.directive.d.ts +11 -0
- package/lib/shared/directives/tooltip-dismiss.directive.d.ts.map +1 -0
- package/lib/shared/gov-uk-date/gov-uk-date.component.d.ts +15 -0
- package/lib/shared/gov-uk-date/gov-uk-date.component.d.ts.map +1 -0
- package/lib/shared/gov-uk-error-message/gov-uk-error-message.component.d.ts +11 -0
- package/lib/shared/gov-uk-error-message/gov-uk-error-message.component.d.ts.map +1 -0
- package/lib/shared/gov-uk-fieldset/gov-uk-fieldset.component.d.ts +16 -0
- package/lib/shared/gov-uk-fieldset/gov-uk-fieldset.component.d.ts.map +1 -0
- package/lib/shared/gov-uk-label/gov-uk-label.component.d.ts +14 -0
- package/lib/shared/gov-uk-label/gov-uk-label.component.d.ts.map +1 -0
- package/lib/shared/shared.module.d.ts +14 -0
- package/lib/shared/shared.module.d.ts.map +1 -0
- package/lib/shared/util/helpers/html-templates.helper.d.ts +9 -0
- package/lib/shared/util/helpers/html-templates.helper.d.ts.map +1 -0
- package/lib/shared/util/services/number.helper.service.d.ts +11 -0
- package/lib/shared/util/services/number.helper.service.d.ts.map +1 -0
- package/lib/store/actions/annotation.actions.d.ts +126 -0
- package/lib/store/actions/annotation.actions.d.ts.map +1 -0
- package/lib/store/actions/bookmark.actions.d.ts +117 -0
- package/lib/store/actions/bookmark.actions.d.ts.map +1 -0
- package/lib/store/actions/document.actions.d.ts +90 -0
- package/lib/store/actions/document.actions.d.ts.map +1 -0
- package/lib/store/actions/icp.actions.d.ts +75 -0
- package/lib/store/actions/icp.actions.d.ts.map +1 -0
- package/lib/store/actions/redaction.actions.d.ts +127 -0
- package/lib/store/actions/redaction.actions.d.ts.map +1 -0
- package/lib/store/actions/tag.actions.d.ts +30 -0
- package/lib/store/actions/tag.actions.d.ts.map +1 -0
- package/lib/store/bookmarks-store-utils.d.ts +9 -0
- package/lib/store/bookmarks-store-utils.d.ts.map +1 -0
- package/lib/store/effects/annotation.effects.d.ts +16 -0
- package/lib/store/effects/annotation.effects.d.ts.map +1 -0
- package/lib/store/effects/bookmarks.effects.d.ts +21 -0
- package/lib/store/effects/bookmarks.effects.d.ts.map +1 -0
- package/lib/store/effects/document.effects.d.ts +17 -0
- package/lib/store/effects/document.effects.d.ts.map +1 -0
- package/lib/store/effects/icp.effects.d.ts +16 -0
- package/lib/store/effects/icp.effects.d.ts.map +1 -0
- package/lib/store/effects/index.d.ts +2 -0
- package/lib/store/effects/index.d.ts.map +1 -0
- package/lib/store/effects/redaction.effects.d.ts +20 -0
- package/lib/store/effects/redaction.effects.d.ts.map +1 -0
- package/lib/store/models/bookmarks.interface.d.ts +31 -0
- package/lib/store/models/bookmarks.interface.d.ts.map +1 -0
- package/lib/store/models/filters.interface.d.ts +8 -0
- package/lib/store/models/filters.interface.d.ts.map +1 -0
- package/lib/store/reducers/annotations.reducer.d.ts +48 -0
- package/lib/store/reducers/annotations.reducer.d.ts.map +1 -0
- package/lib/store/reducers/bookmarks.reducer.d.ts +27 -0
- package/lib/store/reducers/bookmarks.reducer.d.ts.map +1 -0
- package/lib/store/reducers/document.reducer.d.ts +52 -0
- package/lib/store/reducers/document.reducer.d.ts.map +1 -0
- package/lib/store/reducers/icp.reducer.d.ts +9 -0
- package/lib/store/reducers/icp.reducer.d.ts.map +1 -0
- package/lib/store/reducers/redaction.reducer.d.ts +32 -0
- package/lib/store/reducers/redaction.reducer.d.ts.map +1 -0
- package/lib/store/reducers/reducers.d.ts +24 -0
- package/lib/store/reducers/reducers.d.ts.map +1 -0
- package/lib/store/reducers/tags.reducer.d.ts +32 -0
- package/lib/store/reducers/tags.reducer.d.ts.map +1 -0
- package/lib/store/selectors/annotation.selectors.d.ts +136 -0
- package/lib/store/selectors/annotation.selectors.d.ts.map +1 -0
- package/lib/store/selectors/bookmark.selectors.d.ts +38 -0
- package/lib/store/selectors/bookmark.selectors.d.ts.map +1 -0
- package/lib/store/selectors/document.selectors.d.ts +23 -0
- package/lib/store/selectors/document.selectors.d.ts.map +1 -0
- package/lib/store/selectors/icp.selectors.d.ts +10 -0
- package/lib/store/selectors/icp.selectors.d.ts.map +1 -0
- package/lib/store/selectors/redaction.selectors.d.ts +35 -0
- package/lib/store/selectors/redaction.selectors.d.ts.map +1 -0
- package/lib/store/selectors/tag.selectors.d.ts +28 -0
- package/lib/store/selectors/tag.selectors.d.ts.map +1 -0
- package/lib/store/store-utils.d.ts +25 -0
- package/lib/store/store-utils.d.ts.map +1 -0
- package/lib/toolbar/highlight-toolbar/highlight-toolbar.component.d.ts +20 -0
- package/lib/toolbar/highlight-toolbar/highlight-toolbar.component.d.ts.map +1 -0
- package/lib/toolbar/icp-event.service.d.ts +21 -0
- package/lib/toolbar/icp-event.service.d.ts.map +1 -0
- package/lib/toolbar/icp-toolbar/icp-toolbar.component.d.ts +24 -0
- package/lib/toolbar/icp-toolbar/icp-toolbar.component.d.ts.map +1 -0
- package/lib/toolbar/main-toolbar/main-toolbar.component.d.ts +69 -0
- package/lib/toolbar/main-toolbar/main-toolbar.component.d.ts.map +1 -0
- package/lib/toolbar/redaction-search-bar/redaction-search-bar.component.d.ts +60 -0
- package/lib/toolbar/redaction-search-bar/redaction-search-bar.component.d.ts.map +1 -0
- package/lib/toolbar/redaction-search-bar/redaction-search.model.d.ts +12 -0
- package/lib/toolbar/redaction-search-bar/redaction-search.model.d.ts.map +1 -0
- package/lib/toolbar/redaction-toolbar/redaction-toolbar.component.d.ts +30 -0
- package/lib/toolbar/redaction-toolbar/redaction-toolbar.component.d.ts.map +1 -0
- package/lib/toolbar/search-bar/search-bar.component.d.ts +34 -0
- package/lib/toolbar/search-bar/search-bar.component.d.ts.map +1 -0
- package/lib/toolbar/toolbar-button-visibility.service.d.ts +67 -0
- package/lib/toolbar/toolbar-button-visibility.service.d.ts.map +1 -0
- package/lib/toolbar/toolbar-event.service.d.ts +96 -0
- package/lib/toolbar/toolbar-event.service.d.ts.map +1 -0
- package/lib/toolbar/toolbar.module.d.ts +20 -0
- package/lib/toolbar/toolbar.module.d.ts.map +1 -0
- package/lib/viewers/convertible-content-viewer/convertible-content-viewer.component.d.ts +31 -0
- package/lib/viewers/convertible-content-viewer/convertible-content-viewer.component.d.ts.map +1 -0
- package/lib/viewers/convertible-content-viewer/document-conversion-api.service.d.ts +12 -0
- package/lib/viewers/convertible-content-viewer/document-conversion-api.service.d.ts.map +1 -0
- package/lib/viewers/grab-n-drag.directive.d.ts +19 -0
- package/lib/viewers/grab-n-drag.directive.d.ts.map +1 -0
- package/lib/viewers/image-viewer/image-viewer.component.d.ts +57 -0
- package/lib/viewers/image-viewer/image-viewer.component.d.ts.map +1 -0
- package/lib/viewers/multimedia-player/multimedia-player.component.d.ts +25 -0
- package/lib/viewers/multimedia-player/multimedia-player.component.d.ts.map +1 -0
- package/lib/viewers/pdf-viewer/pdf-js/pdf-js-wrapper.d.ts +69 -0
- package/lib/viewers/pdf-viewer/pdf-js/pdf-js-wrapper.d.ts.map +1 -0
- package/lib/viewers/pdf-viewer/pdf-js/pdf-js-wrapper.provider.d.ts +17 -0
- package/lib/viewers/pdf-viewer/pdf-js/pdf-js-wrapper.provider.d.ts.map +1 -0
- package/lib/viewers/pdf-viewer/pdf-viewer.component.d.ts +102 -0
- package/lib/viewers/pdf-viewer/pdf-viewer.component.d.ts.map +1 -0
- package/lib/viewers/pdf-viewer/side-bar/bookmarks/bookmarks.component.d.ts +82 -0
- package/lib/viewers/pdf-viewer/side-bar/bookmarks/bookmarks.component.d.ts.map +1 -0
- package/lib/viewers/pdf-viewer/side-bar/bookmarks/bookmarks.interfaces.d.ts +22 -0
- package/lib/viewers/pdf-viewer/side-bar/bookmarks/bookmarks.interfaces.d.ts.map +1 -0
- package/lib/viewers/pdf-viewer/side-bar/outline-item/outline-item.component.d.ts +20 -0
- package/lib/viewers/pdf-viewer/side-bar/outline-item/outline-item.component.d.ts.map +1 -0
- package/lib/viewers/pdf-viewer/side-bar/outline-item/outline.model.d.ts +14 -0
- package/lib/viewers/pdf-viewer/side-bar/outline-item/outline.model.d.ts.map +1 -0
- package/lib/viewers/pdf-viewer/side-bar/side-bar.component.d.ts +42 -0
- package/lib/viewers/pdf-viewer/side-bar/side-bar.component.d.ts.map +1 -0
- package/lib/viewers/rotation-persist/rotation-api.service.d.ts +14 -0
- package/lib/viewers/rotation-persist/rotation-api.service.d.ts.map +1 -0
- package/lib/viewers/rotation-persist/rotation-persist.directive.d.ts +27 -0
- package/lib/viewers/rotation-persist/rotation-persist.directive.d.ts.map +1 -0
- package/lib/viewers/rotation-persist/rotation.model.d.ts +5 -0
- package/lib/viewers/rotation-persist/rotation.model.d.ts.map +1 -0
- package/lib/viewers/unsupported-viewer/unsupported-viewer.component.d.ts +23 -0
- package/lib/viewers/unsupported-viewer/unsupported-viewer.component.d.ts.map +1 -0
- package/lib/viewers/viewer-event.service.d.ts +23 -0
- package/lib/viewers/viewer-event.service.d.ts.map +1 -0
- package/lib/viewers/viewer-exception.model.d.ts +15 -0
- package/lib/viewers/viewer-exception.model.d.ts.map +1 -0
- package/lib/viewers/viewer-util.service.d.ts +10 -0
- package/lib/viewers/viewer-util.service.d.ts.map +1 -0
- package/package.json +12 -10
- package/public_api.d.ts +30 -0
- package/public_api.d.ts.map +1 -0
- package/index.d.ts.map +0 -1
package/assets/all.scss
CHANGED
|
@@ -101,6 +101,84 @@ mv-pdf-viewer {
|
|
|
101
101
|
width: 100%;
|
|
102
102
|
transition-duration: 600ms;
|
|
103
103
|
transition-timing-function: ease;
|
|
104
|
+
|
|
105
|
+
&.highlightMode {
|
|
106
|
+
position: relative;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// keyboard cursor for text highlighting (before selection)
|
|
111
|
+
.selection-start-cursor {
|
|
112
|
+
width: 14px;
|
|
113
|
+
height: 14px;
|
|
114
|
+
margin-left: -7px;
|
|
115
|
+
margin-top: -7px;
|
|
116
|
+
pointer-events: none;
|
|
117
|
+
background-color: #ffdd00;
|
|
118
|
+
border-radius: 50%;
|
|
119
|
+
border: 1px solid #ffdd00;
|
|
120
|
+
|
|
121
|
+
// vertical line
|
|
122
|
+
&::before {
|
|
123
|
+
content: '';
|
|
124
|
+
position: absolute;
|
|
125
|
+
top: 0;
|
|
126
|
+
left: 50%;
|
|
127
|
+
width: 1px;
|
|
128
|
+
height: 100%;
|
|
129
|
+
background-color: #0b0c0c;
|
|
130
|
+
transform: translateX(-0.5px);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// horizontal line
|
|
134
|
+
&::after {
|
|
135
|
+
content: '';
|
|
136
|
+
position: absolute;
|
|
137
|
+
top: 50%;
|
|
138
|
+
left: 0;
|
|
139
|
+
width: 100%;
|
|
140
|
+
height: 1px;
|
|
141
|
+
background-color: #0b0c0c;
|
|
142
|
+
transform: translateY(-0.5px);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// keyboard cursor for text highlighting (during selection)
|
|
147
|
+
.selection-end-cursor {
|
|
148
|
+
width: 1px;
|
|
149
|
+
height: 12px;
|
|
150
|
+
margin-left: -1px;
|
|
151
|
+
margin-top: -10px;
|
|
152
|
+
pointer-events: none;
|
|
153
|
+
background-color: #0b0c0c;
|
|
154
|
+
border-radius: 0;
|
|
155
|
+
box-shadow: -1px 0 0 #ffffff, 1px 0 0 #ffffff;
|
|
156
|
+
|
|
157
|
+
// I-beam top
|
|
158
|
+
&::before {
|
|
159
|
+
content: '';
|
|
160
|
+
position: absolute;
|
|
161
|
+
top: -1px;
|
|
162
|
+
left: 50%;
|
|
163
|
+
width: 5px;
|
|
164
|
+
height: 1px;
|
|
165
|
+
background-color: #0b0c0c;
|
|
166
|
+
transform: translateX(-50%);
|
|
167
|
+
box-shadow: 0 -1px 0 #ffffff, 0 1px 0 #ffffff;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// I-beam bottom
|
|
171
|
+
&::after {
|
|
172
|
+
content: '';
|
|
173
|
+
position: absolute;
|
|
174
|
+
bottom: -1px;
|
|
175
|
+
left: 50%;
|
|
176
|
+
width: 5px;
|
|
177
|
+
height: 1px;
|
|
178
|
+
background-color: #0b0c0c;
|
|
179
|
+
transform: translateX(-50%);
|
|
180
|
+
box-shadow: 0 -1px 0 #ffffff, 0 1px 0 #ffffff;
|
|
181
|
+
}
|
|
104
182
|
}
|
|
105
183
|
|
|
106
184
|
.show-comments-panel {
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
.mv-tooltip {
|
|
2
|
+
/* default: place below */
|
|
3
|
+
--tooltip-offset-y: 100%;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
.mv-tooltip::before {
|
|
7
|
+
content: attr(data-tooltip); /* Tooltip text comes from attribute */
|
|
8
|
+
position: absolute;
|
|
9
|
+
top: var(--tooltip-offset-y);
|
|
10
|
+
left: 50%;
|
|
11
|
+
transform: translateX(-50%);
|
|
12
|
+
background: #e3e2e1;
|
|
13
|
+
color: #444444;
|
|
14
|
+
border: 1px solid #d1d1d1;
|
|
15
|
+
font-size: 11px;
|
|
16
|
+
font-family: system-ui, sans-serif;
|
|
17
|
+
padding: 3px 6px;
|
|
18
|
+
border-radius: 2px;
|
|
19
|
+
/* Dynamic sizing */
|
|
20
|
+
white-space: nowrap;
|
|
21
|
+
width: max-content;
|
|
22
|
+
max-width: 300px;
|
|
23
|
+
z-index: 999;
|
|
24
|
+
opacity: 0;
|
|
25
|
+
visibility: hidden;
|
|
26
|
+
transition: opacity 0.2s ease-in-out;
|
|
27
|
+
box-shadow: 0px 2px 4px rgba(0,0,0,0.3);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/* Show tooltip on hover and focus */
|
|
31
|
+
.mv-tooltip:hover::after,
|
|
32
|
+
.mv-tooltip:focus::after,
|
|
33
|
+
.mv-tooltip:hover::before,
|
|
34
|
+
/* Show tooltip on hover or keyboard focus */
|
|
35
|
+
.mv-tooltip:focus::before,
|
|
36
|
+
.mv-tooltip:focus-within::before {
|
|
37
|
+
opacity: 1;
|
|
38
|
+
visibility: visible;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/* Hide tooltip when dismissed, even if focussed */
|
|
42
|
+
.mv-tooltip[data-tooltip-dismissed]::before {
|
|
43
|
+
opacity: 0;
|
|
44
|
+
visibility: hidden;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/* place above */
|
|
48
|
+
.mv-tooltip[data-placement="above"] {
|
|
49
|
+
--tooltip-offset-y: -50%;
|
|
50
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public_api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG1jdHMtbWVkaWEtdmlld2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvbWVkaWEtdmlld2VyL3NyYy9obWN0cy1tZWRpYS12aWV3ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWNfYXBpJztcbiJdfQ==
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
+
import { v4 as uuid } from 'uuid';
|
|
3
|
+
import { HtmlTemplatesHelper } from '../../../../shared/util/helpers/html-templates.helper';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "../../../../toolbar/toolbar-event.service";
|
|
6
|
+
import * as i2 from "../highlight-create/highlight-create.service";
|
|
7
|
+
export class BoxHighlightCreateComponent {
|
|
8
|
+
constructor(toolbarEvents, highlightService) {
|
|
9
|
+
this.toolbarEvents = toolbarEvents;
|
|
10
|
+
this.highlightService = highlightService;
|
|
11
|
+
this.saveSelection = new EventEmitter();
|
|
12
|
+
this.drawStartX = -1;
|
|
13
|
+
this.drawStartY = -1;
|
|
14
|
+
this.backgroundColor = 'none';
|
|
15
|
+
this.subscriptions = [];
|
|
16
|
+
}
|
|
17
|
+
ngOnInit() {
|
|
18
|
+
this.subscriptions = [
|
|
19
|
+
this.toolbarEvents.drawModeSubject.subscribe(drawMode => {
|
|
20
|
+
this.defaultHeight = drawMode ? '100%' : '0px';
|
|
21
|
+
this.defaultWidth = drawMode ? '100%' : '0px';
|
|
22
|
+
}),
|
|
23
|
+
this.toolbarEvents.redactWholePage.subscribe(() => {
|
|
24
|
+
this.wholePage = true;
|
|
25
|
+
})
|
|
26
|
+
];
|
|
27
|
+
}
|
|
28
|
+
ngOnDestroy() {
|
|
29
|
+
this.subscriptions.forEach(subscription => {
|
|
30
|
+
subscription.unsubscribe();
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
initHighlight(event) {
|
|
34
|
+
if (this.wholePage) {
|
|
35
|
+
this.highlightPage();
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
const rect = HtmlTemplatesHelper.getAdjustedBoundingRect(event.target), offsetX = event.clientX - rect.left, offsetY = event.clientY - rect.top;
|
|
39
|
+
console.log(`initHighlight: rect=${JSON.stringify(rect)}, clientX=${event.clientX}, clientY=${event.clientY}, offsetX=${offsetX}, offsetY=${offsetY}`);
|
|
40
|
+
this.position = 'absolute';
|
|
41
|
+
this.backgroundColor = 'yellow';
|
|
42
|
+
this.drawStartX = offsetX;
|
|
43
|
+
this.drawStartY = offsetY;
|
|
44
|
+
this.display = 'block';
|
|
45
|
+
this.height = 50;
|
|
46
|
+
this.width = 50;
|
|
47
|
+
this.top = this.drawStartY;
|
|
48
|
+
this.left = this.drawStartX;
|
|
49
|
+
switch (this.rotate) {
|
|
50
|
+
case 90:
|
|
51
|
+
this.top = this.drawStartY - this.height;
|
|
52
|
+
break;
|
|
53
|
+
case 180:
|
|
54
|
+
this.top = this.drawStartY - this.height;
|
|
55
|
+
this.left = this.drawStartX - this.width;
|
|
56
|
+
break;
|
|
57
|
+
case 270:
|
|
58
|
+
this.left = this.drawStartX - this.width;
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
updateHighlight(event) {
|
|
63
|
+
const rect = HtmlTemplatesHelper.getAdjustedBoundingRect(event.target, false), offsetX = event.clientX - rect.left, offsetY = event.clientY - rect.top;
|
|
64
|
+
if (this.drawStartX > 0 && this.drawStartY > 0) {
|
|
65
|
+
this.height = Math.abs(offsetY - this.drawStartY);
|
|
66
|
+
this.width = Math.abs(offsetX - this.drawStartX);
|
|
67
|
+
this.top = Math.min(offsetY, this.drawStartY);
|
|
68
|
+
this.left = Math.min(offsetX, this.drawStartX);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
createHighlight() {
|
|
72
|
+
if (this.height / this.zoom > 5 || this.width / this.zoom > 5) {
|
|
73
|
+
let rectangle = this.highlightService
|
|
74
|
+
.applyRotation(this.pageHeight, this.pageWidth, this.height, this.width, this.top, this.left, this.rotate, this.zoom);
|
|
75
|
+
rectangle = { id: uuid(), ...rectangle };
|
|
76
|
+
console.log(`createHighlight: rectangle=${JSON.stringify(rectangle)}`);
|
|
77
|
+
this.saveSelection.emit({ rectangles: [rectangle], page: this.page });
|
|
78
|
+
this.resetHighlight();
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
resetHighlight() {
|
|
82
|
+
this.drawStartX = -1;
|
|
83
|
+
this.drawStartY = -1;
|
|
84
|
+
this.display = 'none';
|
|
85
|
+
this.width = 0;
|
|
86
|
+
this.height = 0;
|
|
87
|
+
this.backgroundColor = 'none';
|
|
88
|
+
this.position = 'initial';
|
|
89
|
+
this.wholePage = false;
|
|
90
|
+
}
|
|
91
|
+
highlightPage() {
|
|
92
|
+
this.height = this.pageHeight;
|
|
93
|
+
this.width = this.pageWidth;
|
|
94
|
+
this.top = 0;
|
|
95
|
+
this.left = 0;
|
|
96
|
+
this.createHighlight();
|
|
97
|
+
}
|
|
98
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BoxHighlightCreateComponent, deps: [{ token: i1.ToolbarEventService }, { token: i2.HighlightCreateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
99
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: BoxHighlightCreateComponent, selector: "mv-box-highlight-create", inputs: { page: "page", pageHeight: "pageHeight", pageWidth: "pageWidth", rotate: "rotate", zoom: "zoom", container: "container" }, outputs: { saveSelection: "saveSelection" }, viewQueries: [{ propertyName: "highlight", first: true, predicate: ["boxHighlight"], descendants: true }], ngImport: i0, template: "<div [style.height]=\"defaultHeight\"\n [style.width]=\"defaultWidth\"\n (mousedown)=\"initHighlight($event)\"\n (mousemove)=\"updateHighlight($event)\"\n (mouseup)=\"createHighlight()\">\n <div #boxHighlight\n class=\"box-highlight\"\n [style.display]=\"display\"\n [style.position]=\"position\"\n [style.background-color]=\"backgroundColor\"\n [style.height]=\"height ? height + 'px' : '100%'\"\n [style.width]=\"width ? width + 'px' : '100%'\"\n [style.top]=\"top + 'px'\"\n [style.left]=\"left + 'px'\">\n </div>\n</div>\n" }); }
|
|
100
|
+
}
|
|
101
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BoxHighlightCreateComponent, decorators: [{
|
|
102
|
+
type: Component,
|
|
103
|
+
args: [{ selector: 'mv-box-highlight-create', template: "<div [style.height]=\"defaultHeight\"\n [style.width]=\"defaultWidth\"\n (mousedown)=\"initHighlight($event)\"\n (mousemove)=\"updateHighlight($event)\"\n (mouseup)=\"createHighlight()\">\n <div #boxHighlight\n class=\"box-highlight\"\n [style.display]=\"display\"\n [style.position]=\"position\"\n [style.background-color]=\"backgroundColor\"\n [style.height]=\"height ? height + 'px' : '100%'\"\n [style.width]=\"width ? width + 'px' : '100%'\"\n [style.top]=\"top + 'px'\"\n [style.left]=\"left + 'px'\">\n </div>\n</div>\n" }]
|
|
104
|
+
}], ctorParameters: () => [{ type: i1.ToolbarEventService }, { type: i2.HighlightCreateService }], propDecorators: { page: [{
|
|
105
|
+
type: Input
|
|
106
|
+
}], pageHeight: [{
|
|
107
|
+
type: Input
|
|
108
|
+
}], pageWidth: [{
|
|
109
|
+
type: Input
|
|
110
|
+
}], rotate: [{
|
|
111
|
+
type: Input
|
|
112
|
+
}], zoom: [{
|
|
113
|
+
type: Input
|
|
114
|
+
}], container: [{
|
|
115
|
+
type: Input
|
|
116
|
+
}], saveSelection: [{
|
|
117
|
+
type: Output
|
|
118
|
+
}], highlight: [{
|
|
119
|
+
type: ViewChild,
|
|
120
|
+
args: ['boxHighlight', { static: false }]
|
|
121
|
+
}] } });
|
|
122
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm94LWhpZ2hsaWdodC1jcmVhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVkaWEtdmlld2VyL3NyYy9saWIvYW5ub3RhdGlvbnMvYW5ub3RhdGlvbi1zZXQvYW5ub3RhdGlvbi1jcmVhdGUvYm94LWhpZ2hsaWdodC1jcmVhdGUvYm94LWhpZ2hsaWdodC1jcmVhdGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVkaWEtdmlld2VyL3NyYy9saWIvYW5ub3RhdGlvbnMvYW5ub3RhdGlvbi1zZXQvYW5ub3RhdGlvbi1jcmVhdGUvYm94LWhpZ2hsaWdodC1jcmVhdGUvYm94LWhpZ2hsaWdodC1jcmVhdGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pILE9BQU8sRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBS2xDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVEQUF1RCxDQUFDOzs7O0FBSzVGLE1BQU0sT0FBTywyQkFBMkI7SUE2QnRDLFlBQTZCLGFBQWtDLEVBQzVDLGdCQUF3QztRQUQ5QixrQkFBYSxHQUFiLGFBQWEsQ0FBcUI7UUFDNUMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUF3QjtRQXJCakQsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBNkMsQ0FBQztRQUl4RixlQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDaEIsZUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBVWhCLG9CQUFlLEdBQUcsTUFBTSxDQUFDO1FBR2pCLGtCQUFhLEdBQW1CLEVBQUUsQ0FBQztJQUdvQixDQUFDO0lBRWhFLFFBQVE7UUFDTixJ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QUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUksYUFBYTtzQkFBdEIsTUFBTTtnQkFFdUMsU0FBUztzQkFBdEQsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUmVjdGFuZ2xlIH0gZnJvbSAnLi4vLi4vYW5ub3RhdGlvbi12aWV3L3JlY3RhbmdsZS9yZWN0YW5nbGUubW9kZWwnO1xuaW1wb3J0IHsgSGlnaGxpZ2h0Q3JlYXRlU2VydmljZSB9IGZyb20gJy4uL2hpZ2hsaWdodC1jcmVhdGUvaGlnaGxpZ2h0LWNyZWF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IFRvb2xiYXJFdmVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi90b29sYmFyL3Rvb2xiYXItZXZlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBIdG1sVGVtcGxhdGVzSGVscGVyIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL3V0aWwvaGVscGVycy9odG1sLXRlbXBsYXRlcy5oZWxwZXInO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbXYtYm94LWhpZ2hsaWdodC1jcmVhdGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vYm94LWhpZ2hsaWdodC1jcmVhdGUuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBCb3hIaWdobGlnaHRDcmVhdGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgQElucHV0KCkgcGFnZTogbnVtYmVyO1xuICBASW5wdXQoKSBwYWdlSGVpZ2h0OiBudW1iZXI7XG4gIEBJbnB1dCgpIHBhZ2VXaWR0aDogbnVtYmVyO1xuICBASW5wdXQoKSByb3RhdGU6IG51bWJlcjtcbiAgQElucHV0KCkgem9vbTogbnVtYmVyO1xuICBASW5wdXQoKSBjb250YWluZXI6IHsgdG9wOiBudW1iZXIsIGxlZnQ6IG51bWJlciB9O1xuXG4gIEBPdXRwdXQoKSBzYXZlU2VsZWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjx7IHJlY3RhbmdsZXM6IFJlY3RhbmdsZVtdLCBwYWdlOiBudW1iZXIgfT4oKTtcblxuICBAVmlld0NoaWxkKCdib3hIaWdobGlnaHQnLCB7IHN0YXRpYzogZmFsc2UgfSkgaGlnaGxpZ2h0OiBFbGVtZW50UmVmO1xuXG4gIGRyYXdTdGFydFggPSAtMTtcbiAgZHJhd1N0YXJ0WSA9IC0xO1xuICB0b3A6IG51bWJlcjtcbiAgbGVmdDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgd2lkdGg6IG51bWJlcjtcbiAgZGlzcGxheTogc3RyaW5nO1xuICBkcmF3TW9kZTogYm9vbGVhbjtcbiAgZGVmYXVsdEhlaWdodDogc3RyaW5nO1xuICBkZWZhdWx0V2lkdGg6IHN0cmluZztcbiAgcG9zaXRpb246IHN0cmluZztcbiAgYmFja2dyb3VuZENvbG9yID0gJ25vbmUnO1xuICB3aG9sZVBhZ2U6IGJvb2xlYW47XG5cbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgdG9vbGJhckV2ZW50czogVG9vbGJhckV2ZW50U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGhpZ2hsaWdodFNlcnZpY2U6IEhpZ2hsaWdodENyZWF0ZVNlcnZpY2UpIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IFtcbiAgICAgIHRoaXMudG9vbGJhckV2ZW50cy5kcmF3TW9kZVN1YmplY3Quc3Vic2NyaWJlKGRyYXdNb2RlID0+IHtcbiAgICAgICAgdGhpcy5kZWZhdWx0SGVpZ2h0ID0gZHJhd01vZGUgPyAnMTAwJScgOiAnMHB4JztcbiAgICAgICAgdGhpcy5kZWZhdWx0V2lkdGggPSBkcmF3TW9kZSA/ICcxMDAlJyA6ICcwcHgnO1xuICAgICAgfSksXG4gICAgICB0aGlzLnRvb2xiYXJFdmVudHMucmVkYWN0V2hvbGVQYWdlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMud2hvbGVQYWdlID0gdHJ1ZTtcbiAgICAgIH0pXG4gICAgXTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YnNjcmlwdGlvbiA9PiB7XG4gICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGluaXRIaWdobGlnaHQoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAodGhpcy53aG9sZVBhZ2UpIHtcbiAgICAgIHRoaXMuaGlnaGxpZ2h0UGFnZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlY3QgPSBIdG1sVGVtcGxhdGVzSGVscGVyLmdldEFkanVzdGVkQm91bmRpbmdSZWN0KChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpKSxcbiAgICBvZmZzZXRYID0gZXZlbnQuY2xpZW50WCAtIHJlY3QubGVmdCxcbiAgICBvZmZzZXRZID0gZXZlbnQuY2xpZW50WSAtIHJlY3QudG9wO1xuICAgIGNvbnNvbGUubG9nKGBpbml0SGlnaGxpZ2h0OiByZWN0PSR7SlNPTi5zdHJpbmdpZnkocmVjdCl9LCBjbGllbnRYPSR7ZXZlbnQuY2xpZW50WH0sIGNsaWVudFk9JHtldmVudC5jbGllbnRZfSwgb2Zmc2V0WD0ke29mZnNldFh9LCBvZmZzZXRZPSR7b2Zmc2V0WX1gKTtcblxuICAgIHRoaXMucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIHRoaXMuYmFja2dyb3VuZENvbG9yID0gJ3llbGxvdyc7XG4gICAgdGhpcy5kcmF3U3RhcnRYID0gb2Zmc2V0WDtcbiAgICB0aGlzLmRyYXdTdGFydFkgPSBvZmZzZXRZO1xuXG4gICAgdGhpcy5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICB0aGlzLmhlaWdodCA9IDUwO1xuICAgIHRoaXMud2lkdGggPSA1MDtcbiAgICB0aGlzLnRvcCA9IHRoaXMuZHJhd1N0YXJ0WTtcbiAgICB0aGlzLmxlZnQgPSB0aGlzLmRyYXdTdGFydFg7XG5cbiAgICBzd2l0Y2ggKHRoaXMucm90YXRlKSB7XG4gICAgICBjYXNlIDkwOlxuICAgICAgICB0aGlzLnRvcCA9IHRoaXMuZHJhd1N0YXJ0WSAtIHRoaXMuaGVpZ2h0O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTgwOlxuICAgICAgICB0aGlzLnRvcCA9IHRoaXMuZHJhd1N0YXJ0WSAtIHRoaXMuaGVpZ2h0O1xuICAgICAgICB0aGlzLmxlZnQgPSB0aGlzLmRyYXdTdGFydFggLSB0aGlzLndpZHRoO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjcwOlxuICAgICAgICB0aGlzLmxlZnQgPSB0aGlzLmRyYXdTdGFydFggLSB0aGlzLndpZHRoO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB1cGRhdGVIaWdobGlnaHQoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBjb25zdCByZWN0ID0gSHRtbFRlbXBsYXRlc0hlbHBlci5nZXRBZGp1c3RlZEJvdW5kaW5nUmVjdChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQsIGZhbHNlKSxcbiAgICAgIG9mZnNldFggPSBldmVudC5jbGllbnRYIC0gcmVjdC5sZWZ0LFxuICAgICAgb2Zmc2V0WSA9IGV2ZW50LmNsaWVudFkgLSByZWN0LnRvcDtcbiAgICBpZiAodGhpcy5kcmF3U3RhcnRYID4gMCAmJiB0aGlzLmRyYXdTdGFydFkgPiAwKSB7XG4gICAgICB0aGlzLmhlaWdodCA9IE1hdGguYWJzKG9mZnNldFkgLSB0aGlzLmRyYXdTdGFydFkpO1xuICAgICAgdGhpcy53aWR0aCA9IE1hdGguYWJzKG9mZnNldFggLSB0aGlzLmRyYXdTdGFydFgpO1xuICAgICAgdGhpcy50b3AgPSBNYXRoLm1pbihvZmZzZXRZLCB0aGlzLmRyYXdTdGFydFkpO1xuICAgICAgdGhpcy5sZWZ0ID0gTWF0aC5taW4ob2Zmc2V0WCwgdGhpcy5kcmF3U3RhcnRYKTtcbiAgICB9XG4gIH1cblxuICBjcmVhdGVIaWdobGlnaHQoKSB7XG4gICAgaWYgKHRoaXMuaGVpZ2h0IC8gdGhpcy56b29tID4gNSB8fCB0aGlzLndpZHRoIC8gdGhpcy56b29tID4gNSkge1xuICAgICAgbGV0IHJlY3RhbmdsZSA9IHRoaXMuaGlnaGxpZ2h0U2VydmljZVxuICAgICAgICAuYXBwbHlSb3RhdGlvbih0aGlzLnBhZ2VIZWlnaHQsIHRoaXMucGFnZVdpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy53aWR0aCwgdGhpcy50b3AsIHRoaXMubGVmdCwgdGhpcy5yb3RhdGUsIHRoaXMuem9vbSk7XG4gICAgICByZWN0YW5nbGUgPSB7IGlkOiB1dWlkKCksIC4uLnJlY3RhbmdsZSB9IGFzIGFueTtcbiAgICAgIGNvbnNvbGUubG9nKGBjcmVhdGVIaWdobGlnaHQ6IHJlY3RhbmdsZT0ke0pTT04uc3RyaW5naWZ5KHJlY3RhbmdsZSl9YCk7XG4gICAgICB0aGlzLnNhdmVTZWxlY3Rpb24uZW1pdCh7IHJlY3RhbmdsZXM6IFtyZWN0YW5nbGVdLCBwYWdlOiB0aGlzLnBhZ2UgfSk7XG4gICAgICB0aGlzLnJlc2V0SGlnaGxpZ2h0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXNldEhpZ2hsaWdodCgpIHtcbiAgICB0aGlzLmRyYXdTdGFydFggPSAtMTtcbiAgICB0aGlzLmRyYXdTdGFydFkgPSAtMTtcbiAgICB0aGlzLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgdGhpcy53aWR0aCA9IDA7XG4gICAgdGhpcy5oZWlnaHQgPSAwO1xuICAgIHRoaXMuYmFja2dyb3VuZENvbG9yID0gJ25vbmUnO1xuICAgIHRoaXMucG9zaXRpb24gPSAnaW5pdGlhbCc7XG4gICAgdGhpcy53aG9sZVBhZ2UgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgaGlnaGxpZ2h0UGFnZSgpIHtcbiAgICB0aGlzLmhlaWdodCA9IHRoaXMucGFnZUhlaWdodDtcbiAgICB0aGlzLndpZHRoID0gdGhpcy5wYWdlV2lkdGg7XG4gICAgdGhpcy50b3AgPSAwO1xuICAgIHRoaXMubGVmdCA9IDA7XG4gICAgdGhpcy5jcmVhdGVIaWdobGlnaHQoKTtcbiAgfVxufVxuIiwiPGRpdiBbc3R5bGUuaGVpZ2h0XT1cImRlZmF1bHRIZWlnaHRcIlxuICAgICBbc3R5bGUud2lkdGhdPVwiZGVmYXVsdFdpZHRoXCJcbiAgICAgKG1vdXNlZG93bik9XCJpbml0SGlnaGxpZ2h0KCRldmVudClcIlxuICAgICAobW91c2Vtb3ZlKT1cInVwZGF0ZUhpZ2hsaWdodCgkZXZlbnQpXCJcbiAgICAgKG1vdXNldXApPVwiY3JlYXRlSGlnaGxpZ2h0KClcIj5cbiAgPGRpdiAjYm94SGlnaGxpZ2h0XG4gICAgIGNsYXNzPVwiYm94LWhpZ2hsaWdodFwiXG4gICAgIFtzdHlsZS5kaXNwbGF5XT1cImRpc3BsYXlcIlxuICAgICBbc3R5bGUucG9zaXRpb25dPVwicG9zaXRpb25cIlxuICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJiYWNrZ3JvdW5kQ29sb3JcIlxuICAgICBbc3R5bGUuaGVpZ2h0XT1cImhlaWdodCA/IGhlaWdodCArICdweCcgOiAnMTAwJSdcIlxuICAgICBbc3R5bGUud2lkdGhdPVwid2lkdGggPyB3aWR0aCArICdweCcgOiAnMTAwJSdcIlxuICAgICBbc3R5bGUudG9wXT1cInRvcCArICdweCdcIlxuICAgICBbc3R5bGUubGVmdF09XCJsZWZ0ICsgJ3B4J1wiPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { Directive, HostListener } from '@angular/core';
|
|
2
|
+
import { v4 as uuid } from 'uuid';
|
|
3
|
+
import { debounceTime, filter } from 'rxjs';
|
|
4
|
+
import * as fromDocument from '../../../../store/selectors/document.selectors';
|
|
5
|
+
import * as fromAnnotationActions from '../../../../store/actions/annotation.actions';
|
|
6
|
+
import { HtmlTemplatesHelper } from '../../../../shared/util/helpers/html-templates.helper';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "../../../../toolbar/toolbar-event.service";
|
|
9
|
+
import * as i2 from "../../../../viewers/viewer-event.service";
|
|
10
|
+
import * as i3 from "./highlight-create.service";
|
|
11
|
+
import * as i4 from "@ngrx/store";
|
|
12
|
+
export class HighlightCreateDirective {
|
|
13
|
+
constructor(element, toolbarEvents, viewerEvents, highlightService, store) {
|
|
14
|
+
this.element = element;
|
|
15
|
+
this.toolbarEvents = toolbarEvents;
|
|
16
|
+
this.viewerEvents = viewerEvents;
|
|
17
|
+
this.highlightService = highlightService;
|
|
18
|
+
this.store = store;
|
|
19
|
+
this.$subscriptions = [];
|
|
20
|
+
}
|
|
21
|
+
ngOnInit() {
|
|
22
|
+
this.$subscriptions.push(this.store.select(fromDocument.getPages).subscribe((pages) => {
|
|
23
|
+
if (pages[1]) {
|
|
24
|
+
this.allPages = pages;
|
|
25
|
+
}
|
|
26
|
+
}));
|
|
27
|
+
this.$subscriptions.push(this.toolbarEvents.highlightModeSubject.pipe(filter(enabled => enabled && !!this.element.nativeElement), debounceTime(100)).subscribe(() => {
|
|
28
|
+
this.element.nativeElement.focus();
|
|
29
|
+
}));
|
|
30
|
+
}
|
|
31
|
+
ngOnDestroy() {
|
|
32
|
+
this.$subscriptions.forEach(sub => sub.unsubscribe());
|
|
33
|
+
}
|
|
34
|
+
onMouseUp(mouseEvent) {
|
|
35
|
+
let page;
|
|
36
|
+
let currentElement = mouseEvent.target;
|
|
37
|
+
while (currentElement.offsetParent) {
|
|
38
|
+
currentElement = currentElement.offsetParent;
|
|
39
|
+
if (currentElement.getAttribute) {
|
|
40
|
+
page = parseInt(currentElement.getAttribute('data-page-number'), 10);
|
|
41
|
+
if (page) {
|
|
42
|
+
break;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
if (this.toolbarEvents.highlightModeSubject.getValue()) {
|
|
47
|
+
const rectangles = this.getRectangles(mouseEvent, page);
|
|
48
|
+
this.viewerEvents.textSelected({ page, rectangles });
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
onKeyboardSelectionConfirmed() {
|
|
52
|
+
if (this.toolbarEvents.highlightModeSubject.getValue()) {
|
|
53
|
+
const selection = window.getSelection();
|
|
54
|
+
if (selection && selection.rangeCount && !selection.isCollapsed) {
|
|
55
|
+
const page = this.getCurrentPageFromSelection(selection);
|
|
56
|
+
const rectangles = this.getRectanglesFromSelection(selection, page);
|
|
57
|
+
if (rectangles && rectangles.length > 0) {
|
|
58
|
+
this.viewerEvents.textSelected({ page, rectangles });
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
getCurrentPageFromSelection(selection) {
|
|
64
|
+
const range = selection.getRangeAt(0);
|
|
65
|
+
let currentElement = range.startContainer;
|
|
66
|
+
if (currentElement.nodeType === Node.TEXT_NODE) {
|
|
67
|
+
currentElement = currentElement.parentElement;
|
|
68
|
+
}
|
|
69
|
+
while (currentElement && currentElement.offsetParent) {
|
|
70
|
+
currentElement = currentElement.offsetParent;
|
|
71
|
+
if (currentElement.getAttribute) {
|
|
72
|
+
const page = parseInt(currentElement.getAttribute('data-page-number'), 10);
|
|
73
|
+
if (page) {
|
|
74
|
+
return page;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return 1;
|
|
79
|
+
}
|
|
80
|
+
getRectanglesFromSelection(selection, page) {
|
|
81
|
+
if (!this.allPages || !this.allPages[page]) {
|
|
82
|
+
return [];
|
|
83
|
+
}
|
|
84
|
+
this.setPageProperties(page);
|
|
85
|
+
const range = selection.getRangeAt(0).cloneRange();
|
|
86
|
+
const clientRects = range.getClientRects();
|
|
87
|
+
if (!clientRects || clientRects.length === 0) {
|
|
88
|
+
return [];
|
|
89
|
+
}
|
|
90
|
+
let textLayerElement = range.startContainer;
|
|
91
|
+
if (textLayerElement.nodeType === Node.TEXT_NODE) {
|
|
92
|
+
textLayerElement = textLayerElement.parentElement;
|
|
93
|
+
}
|
|
94
|
+
const textLayer = textLayerElement.closest('.textLayer');
|
|
95
|
+
if (!textLayer) {
|
|
96
|
+
return [];
|
|
97
|
+
}
|
|
98
|
+
this.removeEnhancedTextModeStyling(textLayerElement);
|
|
99
|
+
return this.processClientRects(clientRects, textLayer);
|
|
100
|
+
}
|
|
101
|
+
onPdfViewerClick(event) {
|
|
102
|
+
this.store.dispatch(new fromAnnotationActions.SelectedAnnotation({
|
|
103
|
+
annotationId: '',
|
|
104
|
+
selected: false,
|
|
105
|
+
editable: false,
|
|
106
|
+
}));
|
|
107
|
+
this.viewerEvents.clearCtxToolbar();
|
|
108
|
+
}
|
|
109
|
+
getRectangles(event, page) {
|
|
110
|
+
this.setPageProperties(page);
|
|
111
|
+
const selection = window.getSelection();
|
|
112
|
+
if (selection) {
|
|
113
|
+
const localElement = event.target;
|
|
114
|
+
this.removeEnhancedTextModeStyling(localElement);
|
|
115
|
+
if (selection.rangeCount && !selection.isCollapsed) {
|
|
116
|
+
const range = selection.getRangeAt(0).cloneRange();
|
|
117
|
+
const clientRects = range.getClientRects();
|
|
118
|
+
if (clientRects) {
|
|
119
|
+
const textLayer = localElement.closest(".textLayer");
|
|
120
|
+
return this.processClientRects(clientRects, textLayer);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
createTextRectangle(rect, parentRect) {
|
|
126
|
+
const height = rect.bottom - rect.top;
|
|
127
|
+
const width = rect.right - rect.left;
|
|
128
|
+
const top = rect.top - parentRect.top;
|
|
129
|
+
const left = rect.left - parentRect.left;
|
|
130
|
+
let rectangle = this.highlightService.applyRotation(this.pageHeight, this.pageWidth, height, width, top, left, this.rotate, this.zoom);
|
|
131
|
+
rectangle = { id: uuid(), ...rectangle };
|
|
132
|
+
return rectangle;
|
|
133
|
+
}
|
|
134
|
+
removeEnhancedTextModeStyling(element) {
|
|
135
|
+
if (element.parentElement.children) {
|
|
136
|
+
for (let i = 0; i < element.parentElement.children.length; i++) {
|
|
137
|
+
const child = element.parentElement.children[i];
|
|
138
|
+
child.style.padding = '0';
|
|
139
|
+
// regex will be targeting the translate style in string
|
|
140
|
+
// e.g. scaleX(0.969918) translateX(-110.684px) translateY(-105.274px) will become scaleX(0.969918)
|
|
141
|
+
const translateCSSRegex = /translate[XYZ]\(-?\d*(\.\d+)?(px)?\)/g;
|
|
142
|
+
child.style.transform = child.style.transform.replace(translateCSSRegex, '').trim();
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
setPageProperties(page) {
|
|
147
|
+
this.pageHeight = this.allPages[page].styles.height;
|
|
148
|
+
this.pageWidth = this.allPages[page].styles.width;
|
|
149
|
+
this.zoom = parseFloat(this.allPages[page].scaleRotation.scale);
|
|
150
|
+
this.rotate = parseInt(this.allPages[page].scaleRotation.rotation, 10);
|
|
151
|
+
}
|
|
152
|
+
processClientRects(clientRects, textLayer) {
|
|
153
|
+
const parentRect = HtmlTemplatesHelper.getAdjustedBoundingRect(textLayer);
|
|
154
|
+
const selectionRectangles = [];
|
|
155
|
+
for (let i = 0; i < clientRects.length; i++) {
|
|
156
|
+
const selectionRectangle = this.createTextRectangle(clientRects[i], parentRect);
|
|
157
|
+
const findSelectionRectangle = selectionRectangles.find((rect) => rect.width === selectionRectangle.width && rect.x === selectionRectangle.x);
|
|
158
|
+
if (!findSelectionRectangle) {
|
|
159
|
+
selectionRectangles.push(selectionRectangle);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return selectionRectangles;
|
|
163
|
+
}
|
|
164
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HighlightCreateDirective, deps: [{ token: i0.ElementRef }, { token: i1.ToolbarEventService }, { token: i2.ViewerEventService }, { token: i3.HighlightCreateService }, { token: i4.Store }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
165
|
+
/** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: HighlightCreateDirective, selector: "[mvCreateTextHighlight]", host: { listeners: { "mouseup": "onMouseUp($event)", "mousedown": "onPdfViewerClick($event)" } }, ngImport: i0 }); }
|
|
166
|
+
}
|
|
167
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HighlightCreateDirective, decorators: [{
|
|
168
|
+
type: Directive,
|
|
169
|
+
args: [{
|
|
170
|
+
selector: '[mvCreateTextHighlight]'
|
|
171
|
+
}]
|
|
172
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.ToolbarEventService }, { type: i2.ViewerEventService }, { type: i3.HighlightCreateService }, { type: i4.Store }], propDecorators: { onMouseUp: [{
|
|
173
|
+
type: HostListener,
|
|
174
|
+
args: ['mouseup', ['$event']]
|
|
175
|
+
}], onPdfViewerClick: [{
|
|
176
|
+
type: HostListener,
|
|
177
|
+
args: ['mousedown', ['$event']]
|
|
178
|
+
}] } });
|
|
179
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlnaGxpZ2h0LWNyZWF0ZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZWRpYS12aWV3ZXIvc3JjL2xpYi9hbm5vdGF0aW9ucy9hbm5vdGF0aW9uLXNldC9hbm5vdGF0aW9uLWNyZWF0ZS9oaWdobGlnaHQtY3JlYXRlL2hpZ2hsaWdodC1jcmVhdGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUN2RixPQUFPLEVBQUUsRUFBRSxJQUFJLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVsQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFJMUQsT0FBTyxLQUFLLFlBQVksTUFBTSxnREFBZ0QsQ0FBQztBQUUvRSxPQUFPLEtBQUsscUJBQXFCLE1BQU0sOENBQThDLENBQUM7QUFHdEYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdURBQXVELENBQUM7Ozs7OztBQUs1RixNQUFNLE9BQU8sd0JBQXdCO0lBU25DLFlBQ1UsT0FBZ0MsRUFDaEMsYUFBa0MsRUFDbEMsWUFBZ0MsRUFDaEMsZ0JBQXdDLEVBQ3hDLEtBQTBDO1FBSjFDLFlBQU8sR0FBUCxPQUFPLENBQXlCO1FBQ2hDLGtCQUFhLEdBQWIsYUFBYSxDQUFxQjtRQUNsQyxpQkFBWSxHQUFaLFlBQVksQ0FBb0I7UUFDaEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUF3QjtRQUN4QyxVQUFLLEdBQUwsS0FBSyxDQUFxQztRQVA1QyxtQkFBYyxHQUFtQixFQUFFLENBQUM7SUFReEMsQ0FBQztJQUVMLFFBQVE7UUFDTixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENB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QUUsQ0FBQztZQUM1QyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDaEYsTUFBTSxzQkFBc0IsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQ3JELENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLGtCQUFrQixDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxLQUFLLGtCQUFrQixDQUFDLENBQUMsQ0FDckYsQ0FBQztZQUNGLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2dCQUM1QixtQkFBbUIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUMvQyxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sbUJBQW1CLENBQUM7SUFDN0IsQ0FBQztrSUFoTlUsd0JBQXdCO3NIQUF4Qix3QkFBd0I7OzRGQUF4Qix3QkFBd0I7a0JBSHBDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHlCQUF5QjtpQkFDcEM7Mk1Bd0NDLFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBa0ZuQyxnQkFBZ0I7c0JBRGYsWUFBWTt1QkFBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBSZWN0YW5nbGUgfSBmcm9tICcuLi8uLi9hbm5vdGF0aW9uLXZpZXcvcmVjdGFuZ2xlL3JlY3RhbmdsZS5tb2RlbCc7XG5pbXBvcnQgKiBhcyBmcm9tU3RvcmUgZnJvbSAnLi4vLi4vLi4vLi4vc3RvcmUvcmVkdWNlcnMvcmVkdWNlcnMnO1xuaW1wb3J0ICogYXMgZnJvbURvY3VtZW50IGZyb20gJy4uLy4uLy4uLy4uL3N0b3JlL3NlbGVjdG9ycy9kb2N1bWVudC5zZWxlY3RvcnMnO1xuaW1wb3J0IHsgVmlld2VyRXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vdmlld2Vycy92aWV3ZXItZXZlbnQuc2VydmljZSc7XG5pbXBvcnQgKiBhcyBmcm9tQW5ub3RhdGlvbkFjdGlvbnMgZnJvbSAnLi4vLi4vLi4vLi4vc3RvcmUvYWN0aW9ucy9hbm5vdGF0aW9uLmFjdGlvbnMnO1xuaW1wb3J0IHsgSGlnaGxpZ2h0Q3JlYXRlU2VydmljZSB9IGZyb20gJy4vaGlnaGxpZ2h0LWNyZWF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IFRvb2xiYXJFdmVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi90b29sYmFyL3Rvb2xiYXItZXZlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBIdG1sVGVtcGxhdGVzSGVscGVyIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL3V0aWwvaGVscGVycy9odG1sLXRlbXBsYXRlcy5oZWxwZXInO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbbXZDcmVhdGVUZXh0SGlnaGxpZ2h0XSdcbn0pXG5leHBvcnQgY2xhc3MgSGlnaGxpZ2h0Q3JlYXRlRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwYWdlSGVpZ2h0OiBudW1iZXI7XG4gIHBhZ2VXaWR0aDogbnVtYmVyO1xuICB6b29tOiBudW1iZXI7XG4gIHJvdGF0ZTogbnVtYmVyO1xuICBhbGxQYWdlczogb2JqZWN0O1xuXG4gIHByaXZhdGUgJHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBwcml2YXRlIHRvb2xiYXJFdmVudHM6IFRvb2xiYXJFdmVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB2aWV3ZXJFdmVudHM6IFZpZXdlckV2ZW50U2VydmljZSxcbiAgICBwcml2YXRlIGhpZ2hsaWdodFNlcnZpY2U6IEhpZ2hsaWdodENyZWF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdG9yZTogU3RvcmU8ZnJvbVN0b3JlLkFubm90YXRpb25TZXRTdGF0ZT5cbiAgKSB7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLiRzdWJzY3JpcHRpb25zLnB1c2godGhpcy5zdG9yZS5zZWxlY3QoZnJvbURvY3VtZW50LmdldFBhZ2VzKS5zdWJzY3JpYmUoKHBhZ2VzKSA9PiB7XG4gICAgICBpZiAocGFnZXNbMV0pIHtcbiAgICAgICAgdGhpcy5hbGxQYWdlcyA9IHBhZ2VzO1xuICAgICAgfVxuICAgIH0pKTtcblxuICAgIHRoaXMuJHN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMudG9vbGJhckV2ZW50cy5oaWdobGlnaHRNb2RlU3ViamVjdC5waXBlKFxuICAgICAgICBmaWx0ZXIoZW5hYmxlZCA9PiBlbmFibGVkICYmICEhdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpLFxuICAgICAgICBkZWJvdW5jZVRpbWUoMTAwKVxuICAgICAgKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy4kc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YiA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdtb3VzZXVwJywgWyckZXZlbnQnXSlcbiAgb25Nb3VzZVVwKG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBsZXQgcGFnZTogbnVtYmVyO1xuICAgIGxldCBjdXJyZW50RWxlbWVudCA9IG1vdXNlRXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIHdoaWxlIChjdXJyZW50RWxlbWVudC5vZmZzZXRQYXJlbnQpIHtcbiAgICAgIGN1cnJlbnRFbGVtZW50ID0gY3VycmVudEVsZW1lbnQub2Zmc2V0UGFyZW50IGFzIEhUTUxFbGVtZW50O1xuICAgICAgaWYgKGN1cnJlbnRFbGVtZW50LmdldEF0dHJpYnV0ZSkge1xuICAgICAgICBwYWdlID0gcGFyc2VJbnQoY3VycmVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXBhZ2UtbnVtYmVyJyksIDEwKTtcbiAgICAgICAgaWYgKHBhZ2UpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy50b29sYmFyRXZlbnRzLmhpZ2hsaWdodE1vZGVTdWJqZWN0LmdldFZhbHVlKCkpIHtcbiAgICAgIGNvbnN0IHJlY3RhbmdsZXMgPSB0aGlzLmdldFJlY3RhbmdsZXMobW91c2VFdmVudCwgcGFnZSk7XG4gICAgICB0aGlzLnZpZXdlckV2ZW50cy50ZXh0U2VsZWN0ZWQoeyBwYWdlLCByZWN0YW5nbGVzIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbktleWJvYXJkU2VsZWN0aW9uQ29uZmlybWVkKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnRvb2xiYXJFdmVudHMuaGlnaGxpZ2h0TW9kZVN1YmplY3QuZ2V0VmFsdWUoKSkge1xuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgaWYgKHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24ucmFuZ2VDb3VudCAmJiAhc2VsZWN0aW9uLmlzQ29sbGFwc2VkKSB7XG4gICAgICAgIGNvbnN0IHBhZ2UgPSB0aGlzLmdldEN1cnJlbnRQYWdlRnJvbVNlbGVjdGlvbihzZWxlY3Rpb24pO1xuICAgICAgICBjb25zdCByZWN0YW5nbGVzID0gdGhpcy5nZXRSZWN0YW5nbGVzRnJvbVNlbGVjdGlvbihzZWxlY3Rpb24sIHBhZ2UpO1xuICAgICAgICBpZiAocmVjdGFuZ2xlcyAmJiByZWN0YW5nbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLnZpZXdlckV2ZW50cy50ZXh0U2VsZWN0ZWQoeyBwYWdlLCByZWN0YW5nbGVzIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRDdXJyZW50UGFnZUZyb21TZWxlY3Rpb24oc2VsZWN0aW9uOiBTZWxlY3Rpb24pOiBudW1iZXIge1xuICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XG4gICAgbGV0IGN1cnJlbnRFbGVtZW50ID0gcmFuZ2Uuc3RhcnRDb250YWluZXIgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICBpZiAoY3VycmVudEVsZW1lbnQubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgfVxuXG4gICAgd2hpbGUgKGN1cnJlbnRFbGVtZW50ICYmIGN1cnJlbnRFbGVtZW50Lm9mZnNldFBhcmVudCkge1xuICAgICAgY3VycmVudEVsZW1lbnQgPSBjdXJyZW50RWxlbWVudC5vZmZzZXRQYXJlbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBpZiAoY3VycmVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKSB7XG4gICAgICAgIGNvbnN0IHBhZ2UgPSBwYXJzZUludChjdXJyZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcGFnZS1udW1iZXInKSwgMTApO1xuICAgICAgICBpZiAocGFnZSkge1xuICAgICAgICAgIHJldHVybiBwYWdlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAxO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZWN0YW5nbGVzRnJvbVNlbGVjdGlvbihzZWxlY3Rpb246IFNlbGVjdGlvbiwgcGFnZTogbnVtYmVyKTogUmVjdGFuZ2xlW10ge1xuICAgIGlmICghdGhpcy5hbGxQYWdlcyB8fCAhdGhpcy5hbGxQYWdlc1twYWdlXSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHRoaXMuc2V0UGFnZVByb3BlcnRpZXMocGFnZSk7XG5cbiAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApLmNsb25lUmFuZ2UoKTtcbiAgICBjb25zdCBjbGllbnRSZWN0cyA9IHJhbmdlLmdldENsaWVudFJlY3RzKCk7XG5cbiAgICBpZiAoIWNsaWVudFJlY3RzIHx8IGNsaWVudFJlY3RzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGxldCB0ZXh0TGF5ZXJFbGVtZW50ID0gcmFuZ2Uuc3RhcnRDb250YWluZXIgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWYgKHRleHRMYXllckVsZW1lbnQubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICB0ZXh0TGF5ZXJFbGVtZW50ID0gdGV4dExheWVyRWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICAgIH1cbiAgICBjb25zdCB0ZXh0TGF5ZXIgPSB0ZXh0TGF5ZXJFbGVtZW50LmNsb3Nlc3QoJy50ZXh0TGF5ZXInKSBhcyBIVE1MRWxlbWVudDtcblxuICAgIGlmICghdGV4dExheWVyKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgdGhpcy5yZW1vdmVFbmhhbmNlZFRleHRNb2RlU3R5bGluZyh0ZXh0TGF5ZXJFbGVtZW50KTtcblxuICAgIHJldHVybiB0aGlzLnByb2Nlc3NDbGllbnRSZWN0cyhjbGllbnRSZWN0cywgdGV4dExheWVyKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlZG93bicsIFsnJGV2ZW50J10pXG4gIG9uUGRmVmlld2VyQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgbmV3IGZyb21Bbm5vdGF0aW9uQWN0aW9ucy5TZWxlY3RlZEFubm90YXRpb24oe1xuICAgICAgICBhbm5vdGF0aW9uSWQ6ICcnLFxuICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgIGVkaXRhYmxlOiBmYWxzZSxcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnZpZXdlckV2ZW50cy5jbGVhckN0eFRvb2xiYXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmVjdGFuZ2xlcyhldmVudDogTW91c2VFdmVudCwgcGFnZSkge1xuICAgIHRoaXMuc2V0UGFnZVByb3BlcnRpZXMocGFnZSk7XG5cbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgY29uc3QgbG9jYWxFbGVtZW50ID0gPEhUTUxFbGVtZW50PmV2ZW50LnRhcmdldDtcblxuICAgICAgdGhpcy5yZW1vdmVFbmhhbmNlZFRleHRNb2RlU3R5bGluZyhsb2NhbEVsZW1lbnQpO1xuXG4gICAgICBpZiAoc2VsZWN0aW9uLnJhbmdlQ291bnQgJiYgIXNlbGVjdGlvbi5pc0NvbGxhcHNlZCkge1xuICAgICAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApLmNsb25lUmFuZ2UoKTtcbiAgICAgICAgY29uc3QgY2xpZW50UmVjdHMgPSByYW5nZS5nZXRDbGllbnRSZWN0cygpO1xuXG4gICAgICAgIGlmIChjbGllbnRSZWN0cykge1xuICAgICAgICAgIGNvbnN0IHRleHRMYXllciA9IGxvY2FsRWxlbWVudC5jbG9zZXN0KFwiLnRleHRMYXllclwiKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzQ2xpZW50UmVjdHMoY2xpZW50UmVjdHMsIHRleHRMYXllcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVRleHRSZWN0YW5nbGUocmVjdDogYW55LCBwYXJlbnRSZWN0OiBhbnkpOiBSZWN0YW5nbGUge1xuICAgIGNvbnN0IGhlaWdodCA9IHJlY3QuYm90dG9tIC0gcmVjdC50b3A7XG4gICAgY29uc3Qgd2lkdGggPSByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0O1xuICAgIGNvbnN0IHRvcCA9IHJlY3QudG9wIC0gcGFyZW50UmVjdC50b3A7XG4gICAgY29uc3QgbGVmdCA9IHJlY3QubGVmdCAtIHBhcmVudFJlY3QubGVmdDtcbiAgICBsZXQgcmVjdGFuZ2xlID0gdGhpcy5oaWdobGlnaHRTZXJ2aWNlLmFwcGx5Um90YXRpb24oXG4gICAgICB0aGlzLnBhZ2VIZWlnaHQsXG4gICAgICB0aGlzLnBhZ2VXaWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICAgIHdpZHRoLFxuICAgICAgdG9wLFxuICAgICAgbGVmdCxcbiAgICAgIHRoaXMucm90YXRlLFxuICAgICAgdGhpcy56b29tXG4gICAgKTtcbiAgICByZWN0YW5nbGUgPSB7IGlkOiB1dWlkKCksIC4uLnJlY3RhbmdsZSB9O1xuXG4gICAgcmV0dXJuIHJlY3RhbmdsZSBhcyBSZWN0YW5nbGU7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUVuaGFuY2VkVGV4dE1vZGVTdHlsaW5nKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgaWYgKGVsZW1lbnQucGFyZW50RWxlbWVudC5jaGlsZHJlbikge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50LnBhcmVudEVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSA8SFRNTEVsZW1lbnQ+ZWxlbWVudC5wYXJlbnRFbGVtZW50LmNoaWxkcmVuW2ldO1xuXG4gICAgICAgIGNoaWxkLnN0eWxlLnBhZGRpbmcgPSAnMCc7XG4gICAgICAgIC8vIHJlZ2V4IHdpbGwgYmUgdGFyZ2V0aW5nIHRoZSB0cmFuc2xhdGUgc3R5bGUgaW4gc3RyaW5nXG4gICAgICAgIC8vIGUuZy4gc2NhbGVYKDAuOTY5OTE4KSB0cmFuc2xhdGVYKC0xMTAuNjg0cHgpIHRyYW5zbGF0ZVkoLTEwNS4yNzRweCkgd2lsbCBiZWNvbWUgc2NhbGVYKDAuOTY5OTE4KVxuICAgICAgICBjb25zdCB0cmFuc2xhdGVDU1NSZWdleCA9IC90cmFuc2xhdGVbWFlaXVxcKC0/XFxkKihcXC5cXGQrKT8ocHgpP1xcKS9nO1xuICAgICAgICBjaGlsZC5zdHlsZS50cmFuc2Zvcm0gPSBjaGlsZC5zdHlsZS50cmFuc2Zvcm0ucmVwbGFjZSh0cmFuc2xhdGVDU1NSZWdleCwgJycpLnRyaW0oKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFBhZ2VQcm9wZXJ0aWVzKHBhZ2U6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMucGFnZUhlaWdodCA9IHRoaXMuYWxsUGFnZXNbcGFnZV0uc3R5bGVzLmhlaWdodDtcbiAgICB0aGlzLnBhZ2VXaWR0aCA9IHRoaXMuYWxsUGFnZXNbcGFnZV0uc3R5bGVzLndpZHRoO1xuICAgIHRoaXMuem9vbSA9IHBhcnNlRmxvYXQodGhpcy5hbGxQYWdlc1twYWdlXS5zY2FsZVJvdGF0aW9uLnNjYWxlKTtcbiAgICB0aGlzLnJvdGF0ZSA9IHBhcnNlSW50KHRoaXMuYWxsUGFnZXNbcGFnZV0uc2NhbGVSb3RhdGlvbi5yb3RhdGlvbiwgMTApO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzQ2xpZW50UmVjdHMoY2xpZW50UmVjdHM6IERPTVJlY3RMaXN0LCB0ZXh0TGF5ZXI6IEhUTUxFbGVtZW50KTogUmVjdGFuZ2xlW10ge1xuICAgIGNvbnN0IHBhcmVudFJlY3QgPSBIdG1sVGVtcGxhdGVzSGVscGVyLmdldEFkanVzdGVkQm91bmRpbmdSZWN0KHRleHRMYXllcik7XG4gICAgY29uc3Qgc2VsZWN0aW9uUmVjdGFuZ2xlczogUmVjdGFuZ2xlW10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2xpZW50UmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHNlbGVjdGlvblJlY3RhbmdsZSA9IHRoaXMuY3JlYXRlVGV4dFJlY3RhbmdsZShjbGllbnRSZWN0c1tpXSwgcGFyZW50UmVjdCk7XG4gICAgICBjb25zdCBmaW5kU2VsZWN0aW9uUmVjdGFuZ2xlID0gc2VsZWN0aW9uUmVjdGFuZ2xlcy5maW5kKFxuICAgICAgICAocmVjdCkgPT4gcmVjdC53aWR0aCA9PT0gc2VsZWN0aW9uUmVjdGFuZ2xlLndpZHRoICYmIHJlY3QueCA9PT0gc2VsZWN0aW9uUmVjdGFuZ2xlLnhcbiAgICAgICk7XG4gICAgICBpZiAoIWZpbmRTZWxlY3Rpb25SZWN0YW5nbGUpIHtcbiAgICAgICAgc2VsZWN0aW9uUmVjdGFuZ2xlcy5wdXNoKHNlbGVjdGlvblJlY3RhbmdsZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlbGVjdGlvblJlY3RhbmdsZXM7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { take } from 'rxjs/operators';
|
|
3
|
+
import { select } from '@ngrx/store';
|
|
4
|
+
import { v4 as uuid } from 'uuid';
|
|
5
|
+
import moment from 'moment-timezone';
|
|
6
|
+
import * as fromSelectors from '../../../../store/selectors/annotation.selectors';
|
|
7
|
+
import * as fromActions from '../../../../store/actions/annotation.actions';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "./../../../../toolbar/toolbar-event.service";
|
|
10
|
+
import * as i2 from "@ngrx/store";
|
|
11
|
+
export class HighlightCreateService {
|
|
12
|
+
constructor(toolBarEvents, store) {
|
|
13
|
+
this.toolBarEvents = toolBarEvents;
|
|
14
|
+
this.store = store;
|
|
15
|
+
}
|
|
16
|
+
saveAnnotation(rectangles, page) {
|
|
17
|
+
this.store.pipe(select(fromSelectors.getDocumentIdSetId), take(1)).subscribe(anoSetDocId => {
|
|
18
|
+
const anno = {
|
|
19
|
+
id: uuid(),
|
|
20
|
+
color: 'FFFF00',
|
|
21
|
+
comments: [],
|
|
22
|
+
page: page,
|
|
23
|
+
rectangles: rectangles,
|
|
24
|
+
type: 'highlight',
|
|
25
|
+
...anoSetDocId,
|
|
26
|
+
createdBy: '',
|
|
27
|
+
createdByDetails: undefined,
|
|
28
|
+
createdDate: moment.utc().tz('Europe/London').toISOString(),
|
|
29
|
+
lastModifiedBy: '',
|
|
30
|
+
lastModifiedByDetails: undefined,
|
|
31
|
+
lastModifiedDate: '',
|
|
32
|
+
tags: [],
|
|
33
|
+
};
|
|
34
|
+
this.store.dispatch(new fromActions.SaveAnnotation(anno));
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
saveAnnotationSet(searchRectangles) {
|
|
38
|
+
this.store.pipe(select(fromSelectors.getDocumentIdSetId), take(1)).subscribe(anoSetDocId => {
|
|
39
|
+
const annoSet = searchRectangles.map(x => {
|
|
40
|
+
return {
|
|
41
|
+
id: uuid(),
|
|
42
|
+
color: 'FFFF00',
|
|
43
|
+
comments: [],
|
|
44
|
+
page: x.page,
|
|
45
|
+
rectangles: x.rectangles,
|
|
46
|
+
type: 'highlight',
|
|
47
|
+
...anoSetDocId,
|
|
48
|
+
createdBy: '',
|
|
49
|
+
createdByDetails: undefined,
|
|
50
|
+
createdDate: moment.utc().tz('Europe/London').toISOString(),
|
|
51
|
+
lastModifiedBy: '',
|
|
52
|
+
lastModifiedByDetails: undefined,
|
|
53
|
+
lastModifiedDate: '',
|
|
54
|
+
tags: [],
|
|
55
|
+
};
|
|
56
|
+
});
|
|
57
|
+
this.store.dispatch(new fromActions.SaveAnnotationSet({
|
|
58
|
+
id: anoSetDocId.annotationSetId, annotations: annoSet, documentId: anoSetDocId.documentId
|
|
59
|
+
}));
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
applyRotation(pageHeight, pageWidth, offsetHeight, offsetWidth, offsetTop, offsetLeft, rotate, zoom) {
|
|
63
|
+
const { x, y, width, height } = {
|
|
64
|
+
x: +(offsetLeft / zoom).toFixed(2),
|
|
65
|
+
y: +(offsetTop / zoom).toFixed(2),
|
|
66
|
+
width: +(offsetWidth / zoom).toFixed(2),
|
|
67
|
+
height: +(offsetHeight / zoom).toFixed(2)
|
|
68
|
+
};
|
|
69
|
+
const rectangle = { x, y, width, height };
|
|
70
|
+
switch (rotate) {
|
|
71
|
+
case 90:
|
|
72
|
+
rectangle.width = height;
|
|
73
|
+
rectangle.height = width;
|
|
74
|
+
rectangle.x = y;
|
|
75
|
+
rectangle.y = +(pageWidth / zoom - x - width).toFixed(2);
|
|
76
|
+
break;
|
|
77
|
+
case 180:
|
|
78
|
+
rectangle.x = +(pageWidth / zoom - x - width).toFixed(2);
|
|
79
|
+
rectangle.y = +(pageHeight / zoom - y - height).toFixed(2);
|
|
80
|
+
break;
|
|
81
|
+
case 270:
|
|
82
|
+
rectangle.width = height;
|
|
83
|
+
rectangle.height = width;
|
|
84
|
+
rectangle.x = +(pageHeight / zoom - y - height).toFixed(2);
|
|
85
|
+
rectangle.y = x;
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
return rectangle;
|
|
89
|
+
}
|
|
90
|
+
resetHighlight() {
|
|
91
|
+
window.getSelection().removeAllRanges();
|
|
92
|
+
this.toolBarEvents.highlightModeSubject.next(false);
|
|
93
|
+
}
|
|
94
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HighlightCreateService, deps: [{ token: i1.ToolbarEventService }, { token: i2.Store }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
95
|
+
/** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HighlightCreateService, providedIn: 'root' }); }
|
|
96
|
+
}
|
|
97
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HighlightCreateService, decorators: [{
|
|
98
|
+
type: Injectable,
|
|
99
|
+
args: [{ providedIn: 'root' }]
|
|
100
|
+
}], ctorParameters: () => [{ type: i1.ToolbarEventService }, { type: i2.Store }] });
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlnaGxpZ2h0LWNyZWF0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVkaWEtdmlld2VyL3NyYy9saWIvYW5ub3RhdGlvbnMvYW5ub3RhdGlvbi1zZXQvYW5ub3RhdGlvbi1jcmVhdGUvaGlnaGxpZ2h0LWNyZWF0ZS9oaWdobGlnaHQtY3JlYXRlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsSUFBSSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLE1BQU0sRUFBUyxNQUFNLGFBQWEsQ0FBQztBQUM1QyxPQUFPLEVBQUUsRUFBRSxJQUFJLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsQyxPQUFPLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUtyQyxPQUFPLEtBQUssYUFBYSxNQUFNLGtEQUFrRCxDQUFDO0FBQ2xGLE9BQU8sS0FBSyxXQUFXLE1BQU0sOENBQThDLENBQUM7Ozs7QUFNNUUsTUFBTSxPQUFPLHNCQUFzQjtJQUVqQyxZQUFvQixhQUFrQyxFQUM1QyxLQUEwQztRQURoQyxrQkFBYSxHQUFiLGFBQWEsQ0FBcUI7UUFDNUMsVUFBSyxHQUFMLEtBQUssQ0FBcUM7SUFBSSxDQUFDO0lBRXpELGNBQWMsQ0FBQyxVQUF1QixFQUFFLElBQVk7UUFDbEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUN6RixNQUFNLElBQUksR0FBZTtnQkFDdkIsRUFBRSxFQUFFLElBQUksRUFBRTtnQkFDVixLQUFLLEVBQUUsUUFBUTtnQkFDZixRQUFRLEVBQUUsRUFB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QXNCO3NJQUF0QixzQkFBc0IsY0FEVCxNQUFNOzs0RkFDbkIsc0JBQXNCO2tCQURsQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRvb2xiYXJFdmVudFNlcnZpY2UgfSBmcm9tICcuLy4uLy4uLy4uLy4uL3Rvb2xiYXIvdG9vbGJhci1ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2V9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IHNlbGVjdCwgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudC10aW1lem9uZSc7XG5cblxuaW1wb3J0IHsgUmVjdGFuZ2xlIH0gZnJvbSAnLi4vLi4vYW5ub3RhdGlvbi12aWV3L3JlY3RhbmdsZS9yZWN0YW5nbGUubW9kZWwnO1xuaW1wb3J0ICogYXMgZnJvbVN0b3JlIGZyb20gJy4uLy4uLy4uLy4uL3N0b3JlL3JlZHVjZXJzL3JlZHVjZXJzJztcbmltcG9ydCAqIGFzIGZyb21TZWxlY3RvcnMgZnJvbSAnLi4vLi4vLi4vLi4vc3RvcmUvc2VsZWN0b3JzL2Fubm90YXRpb24uc2VsZWN0b3JzJztcbmltcG9ydCAqIGFzIGZyb21BY3Rpb25zIGZyb20gJy4uLy4uLy4uLy4uL3N0b3JlL2FjdGlvbnMvYW5ub3RhdGlvbi5hY3Rpb25zJztcbmltcG9ydCB7IEFubm90YXRpb24gfSBmcm9tICcuLi8uLi9hbm5vdGF0aW9uLXZpZXcvYW5ub3RhdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBSZWRhY3RSZWN0YW5nbGUgfSBmcm9tICcuLi8uLi8uLi8uLi90b29sYmFyL3JlZGFjdGlvbi1zZWFyY2gtYmFyL3JlZGFjdGlvbi1zZWFyY2gubW9kZWwnO1xuaW1wb3J0IHsgQW5ub3RhdGlvblNldCB9IGZyb20gJy4uLy4uL2Fubm90YXRpb24tc2V0Lm1vZGVsJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBIaWdobGlnaHRDcmVhdGVTZXJ2aWNlIHtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRvb2xCYXJFdmVudHM6IFRvb2xiYXJFdmVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdG9yZTogU3RvcmU8ZnJvbVN0b3JlLkFubm90YXRpb25TZXRTdGF0ZT4pIHsgfVxuXG4gIHNhdmVBbm5vdGF0aW9uKHJlY3RhbmdsZXM6IFJlY3RhbmdsZVtdLCBwYWdlOiBudW1iZXIpIHtcbiAgICB0aGlzLnN0b3JlLnBpcGUoc2VsZWN0KGZyb21TZWxlY3RvcnMuZ2V0RG9jdW1lbnRJZFNldElkKSwgdGFrZSgxKSkuc3Vic2NyaWJlKGFub1NldERvY0lkID0+IHtcbiAgICAgIGNvbnN0IGFubm86IEFubm90YXRpb24gPSB7XG4gICAgICAgIGlkOiB1dWlkKCksXG4gICAgICAgIGNvbG9yOiAnRkZGRjAwJyxcbiAgICAgICAgY29tbWVudHM6IFtdLFxuICAgICAgICBwYWdlOiBwYWdlLFxuICAgICAgICByZWN0YW5nbGVzOiByZWN0YW5nbGVzLFxuICAgICAgICB0eXBlOiAnaGlnaGxpZ2h0JyxcbiAgICAgICAgLi4uYW5vU2V0RG9jSWQsXG4gICAgICAgIGNyZWF0ZWRCeTogJycsXG4gICAgICAgIGNyZWF0ZWRCeURldGFpbHM6IHVuZGVmaW5lZCxcbiAgICAgICAgY3JlYXRlZERhdGU6IG1vbWVudC51dGMoKS50eignRXVyb3BlL0xvbmRvbicpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIGxhc3RNb2RpZmllZEJ5OiAnJyxcbiAgICAgICAgbGFzdE1vZGlmaWVkQnlEZXRhaWxzOiB1bmRlZmluZWQsXG4gICAgICAgIGxhc3RNb2RpZmllZERhdGU6ICcnLFxuICAgICAgICB0YWdzOiBbXSxcbiAgICAgIH07XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBmcm9tQWN0aW9ucy5TYXZlQW5ub3RhdGlvbihhbm5vKSk7XG4gICAgfSk7XG4gIH1cblxuICBzYXZlQW5ub3RhdGlvblNldChzZWFyY2hSZWN0YW5nbGVzOiBSZWRhY3RSZWN0YW5nbGVbXSkge1xuICAgIHRoaXMuc3RvcmUucGlwZShzZWxlY3QoZnJvbVNlbGVjdG9ycy5nZXREb2N1bWVudElkU2V0SWQpLCB0YWtlKDEpKS5zdWJzY3JpYmUoYW5vU2V0RG9jSWQgPT4ge1xuICAgICAgY29uc3QgYW5ub1NldCA9IHNlYXJjaFJlY3RhbmdsZXMubWFwKHggPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlkOiB1dWlkKCksXG4gICAgICAgICAgY29sb3I6ICdGRkZGMDAnLFxuICAgICAgICAgIGNvbW1lbnRzOiBbXSxcbiAgICAgICAgICBwYWdlOiB4LnBhZ2UsXG4gICAgICAgICAgcmVjdGFuZ2xlczogeC5yZWN0YW5nbGVzLFxuICAgICAgICAgIHR5cGU6ICdoaWdobGlnaHQnLFxuICAgICAgICAgIC4uLmFub1NldERvY0lkLFxuICAgICAgICAgIGNyZWF0ZWRCeTogJycsXG4gICAgICAgICAgY3JlYXRlZEJ5RGV0YWlsczogdW5kZWZpbmVkLFxuICAgICAgICAgIGNyZWF0ZWREYXRlOiBtb21lbnQudXRjKCkudHooJ0V1cm9wZS9Mb25kb24nKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgIGxhc3RNb2RpZmllZEJ5OiAnJyxcbiAgICAgICAgICBsYXN0TW9kaWZpZWRCeURldGFpbHM6IHVuZGVmaW5lZCxcbiAgICAgICAgICBsYXN0TW9kaWZpZWREYXRlOiAnJyxcbiAgICAgICAgICB0YWdzOiBbXSxcbiAgICAgICAgfSBhcyBBbm5vdGF0aW9uO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBmcm9tQWN0aW9ucy5TYXZlQW5ub3RhdGlvblNldCh7XG4gICAgICAgIGlkOiBhbm9TZXREb2NJZC5hbm5vdGF0aW9uU2V0SWQsIGFubm90YXRpb25zOiBhbm5vU2V0LCBkb2N1bWVudElkOiBhbm9TZXREb2NJZC5kb2N1bWVudElkIH0gYXMgQW5ub3RhdGlvblNldCkpO1xuICAgIH0pO1xuICB9XG5cblxuICBhcHBseVJvdGF0aW9uKHBhZ2VIZWlnaHQsIHBhZ2VXaWR0aCwgb2Zmc2V0SGVpZ2h0LCBvZmZzZXRXaWR0aCwgb2Zmc2V0VG9wLCBvZmZzZXRMZWZ0LCByb3RhdGUsIHpvb20pIHtcbiAgICBjb25zdCB7IHgsIHksIHdpZHRoLCBoZWlnaHQgfSA9IHtcbiAgICAgIHg6ICsob2Zmc2V0TGVmdCAvIHpvb20pLnRvRml4ZWQoMiksXG4gICAgICB5OiArKG9mZnNldFRvcCAvIHpvb20pLnRvRml4ZWQoMiksXG4gICAgICB3aWR0aDogKyhvZmZzZXRXaWR0aCAvIHpvb20pLnRvRml4ZWQoMiksXG4gICAgICBoZWlnaHQ6ICsob2Zmc2V0SGVpZ2h0IC8gem9vbSkudG9GaXhlZCgyKVxuICAgIH07XG4gICAgY29uc3QgcmVjdGFuZ2xlID0geyB4LCB5LCB3aWR0aCwgaGVpZ2h0IH07XG4gICAgc3dpdGNoIChyb3RhdGUpIHtcbiAgICAgIGNhc2UgOTA6XG4gICAgICAgIHJlY3RhbmdsZS53aWR0aCA9IGhlaWdodDtcbiAgICAgICAgcmVjdGFuZ2xlLmhlaWdodCA9IHdpZHRoO1xuICAgICAgICByZWN0YW5nbGUueCA9IHk7XG4gICAgICAgIHJlY3RhbmdsZS55ID0gKyhwYWdlV2lkdGggLyB6b29tIC0geCAtIHdpZHRoKS50b0ZpeGVkKDIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTgwOlxuICAgICAgICByZWN0YW5nbGUueCA9ICsocGFnZVdpZHRoIC8gem9vbSAtIHggLSB3aWR0aCkudG9GaXhlZCgyKTtcbiAgICAgICAgcmVjdGFuZ2xlLnkgPSArKHBhZ2VIZWlnaHQgLyB6b29tIC0geSAtIGhlaWdodCkudG9GaXhlZCgyKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI3MDpcbiAgICAgICAgcmVjdGFuZ2xlLndpZHRoID0gaGVpZ2h0O1xuICAgICAgICByZWN0YW5nbGUuaGVpZ2h0ID0gd2lkdGg7XG4gICAgICAgIHJlY3RhbmdsZS54ID0gKyhwYWdlSGVpZ2h0IC8gem9vbSAtIHkgLSBoZWlnaHQpLnRvRml4ZWQoMik7XG4gICAgICAgIHJlY3RhbmdsZS55ID0geDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiByZWN0YW5nbGUgYXMgYW55O1xuICB9XG5cbiAgcmVzZXRIaWdobGlnaHQoKSB7XG4gICAgd2luZG93LmdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgIHRoaXMudG9vbEJhckV2ZW50cy5oaWdobGlnaHRNb2RlU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgfVxufVxuIl19
|