{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/components/navigation/Eula-modal.vue?2012","webpack:///./src/views/search/form.vue?272f","webpack:///./src/views/user/Activation.vue?e803","webpack:///./src/views/edition/components/confirm-invitation.vue?c096","webpack:///./src/components/comment/comment.vue?f8b1","webpack:///./src/components/navigation/Navbar.vue?4bd1","webpack:///./src/assets/images/logo_tlv.png","webpack:///./src/components/navigation/Faq-modal.vue?5c2e","webpack:///./src/views/scroll-editor/scroll-area.vue?fcfc","webpack:///./src/views/search/results.vue?3d3b","webpack:///./src/components/cues/edition-icons.vue?abba","webpack:///./src/components/text/add-line-modal.vue?dbf5","webpack:///./src/components/text/edit-line-modal.vue?b968","webpack:///./src/components/artefact/artefact-image.vue?ebd9","webpack:///./src/components/sign-attributes/sign-attribute-badge.vue?1e6d","webpack:///./src/components/toolbars/toolbar.vue?9167","webpack:///./src/assets/images/logo_gottingen.png","webpack:///./src/views/imaged-object-editor/image-layer.vue?0c40","webpack:///./src/views/home/Home.vue?6005","webpack:///./src/views/scroll-editor/artefact-image-group.vue?0132","webpack:///./src/components/sign-attributes/sign-attribute-pane.vue?c74d","webpack:///./src/components/text/edit-line-modal.vue?4413","webpack:///./src/assets/images/logo_dfg.svg","webpack:///./src/views/scroll-editor/add-artefact-modal.vue?a2cd","webpack:///./src/components/misc/Waiting.vue?15d6","webpack:///./src/views/edition/components/metadata.vue?c8c3","webpack:///./src/views/scroll-editor/artefact-sillhouette.vue?49c3","webpack:///./src/views/user/Registration.vue?5830","webpack:///./src/views/user/UpdateUser.vue?f456","webpack:///./src/views/search/imaged-object-results.vue?7cca","webpack:///./src/components/text/text-fragment.vue?63ad","webpack:///./src/views/artefact-editor/roi-layer.vue?8d6d","webpack:///./src/views/edition/components/permission-modal.vue?a584","webpack:///./src/components/text/add-line-modal.vue?408c","webpack:///./src/assets/images/adjust.svg","webpack:///./src/components/text/delete-line-modal.vue?7fb8","webpack:///./src/components/search-bar.vue?4166","webpack:///./src/App.vue?f446","webpack:///./src/assets/images/logo_adwg.svg","webpack:///./src/views/home/Home.vue?9223","webpack:///./src/views/scroll-editor/scroll-editor.vue?e3b0","webpack:///./src/views/artefact-editor/sign-wheel.vue?453f","webpack:///./src/views/scroll-editor/scroll-map.vue?9a4b","webpack:///./src/views/artefact-editor/image-layer.vue?366e","webpack:///./src/views/imaged-object-editor/imaged-object-editor.vue?621d","webpack:///./src/components/text/text-line.vue?d4d0","webpack:///./src/assets/images/rings.svg","webpack:///./src/views/home/components/public-editions.vue?4b35","webpack:///./src/assets/images/logo_haifa.png","webpack:///./src/views/artefact-editor/artefact-editor.vue?34b4","webpack:///./src/components/toolbars/toolbox.vue?3d90","webpack:///./src/components/navigation/report-problem-modal.vue?ac25","webpack:///./src/views/edition/components/sidebar.vue?8ed6","webpack:///./src/views/home/components/edition-public-row.vue?155c","webpack:///./src/views/search/text-fragment-results.vue?99ea","webpack:///./src/views/edition/components/imaged-objects.vue?afa6","webpack:///./src/views/home/components/screen-size-alert.vue?d2b5","webpack:///./src/views/user/ChangePassword.vue?0313","webpack:///./src/views/edition/Edition.vue?dcc4","webpack:///./src/components/toolbars/copy-edition-toolbox.vue?ec56","webpack:///./src/components/text/edit-sign-modal.vue?9d38","webpack:///./src/views/home/components/edition-public-card.vue?3467","webpack:///./src/components/navigation/Login.vue?2ba7","webpack:///./src/components/text/edit-virtual-artefact-text.vue?5d6f","webpack:///./src/components/toolbars/edition-toolbox.vue?a757","webpack:///./src/components/welcome/welcome.vue?cd4c","webpack:///./src/components/polygons/boundary-drawer.vue?e580","webpack:///./src/components/sign-attributes/sign-attribute-modal.vue?7ce1","webpack:///./src/components/sign-attributes/sign-attribute-pane.vue?e38c","webpack:///./src/components/artefact/artefact-svg.vue?b20d","webpack:///./src/views/home/components/edition-public-list.vue?b07c","webpack:///./src/components/toolbars/zoom-toolbox.vue?4012","webpack:///./src/views/scroll-editor/scroll-ruler.vue?97ac","webpack:///./src/components/misc/resizeBar.vue?6ce6","webpack:///./src/views/scroll-editor/scroll-top-toolbar.vue?d019","webpack:///./src/components/navigation/CitationModal.vue?26bf","webpack:///./src/views/artefact-editor/artefact-editor-toolbar.vue?1917","webpack:///./src/components/toolbars/font-size-button-toolbox.vue?9e1a","webpack:///./src/views/home/components/edition-list.vue?b076","webpack:///./src/assets/images/logo_antiquity.png","webpack:///./src/components/text/text-sign.vue?c21c","webpack:///./src/App.vue?7598","webpack:///./src/components/navigation/Navbar.vue?c731","webpack:///./src/i18n/en/misc.ts","webpack:///./src/i18n/en/navbar.ts","webpack:///./src/i18n/en/error.ts","webpack:///./src/i18n/en/home.ts","webpack:///./src/i18n/en/toasts.ts","webpack:///./src/i18n/en/index.ts","webpack:///./src/i18n/fr/misc.ts","webpack:///./src/i18n/fr/navbar.ts","webpack:///./src/i18n/fr/error.ts","webpack:///./src/i18n/fr/home.ts","webpack:///./src/i18n/fr/toasts.ts","webpack:///./src/i18n/fr/index.ts","webpack:///./src/i18n/index.ts","webpack:///./src/state/session.ts","webpack:///./src/state/utilities.ts","webpack:///./src/utils/VectorFactory.ts","webpack:///./src/utils/helpers.ts","webpack:///./src/utils/Polygons.ts","webpack:///./src/models/image.ts","webpack:///./src/services/api-routes.ts","webpack:///./src/models/edition.ts","webpack:///./src/services/edition.ts","webpack:///./src/utils/Placement.ts","webpack:///./src/models/artefact.ts","webpack:///./src/models/imaged-object.ts","webpack:///./src/services/imaged-object.ts","webpack:///./src/services/artefact.ts","webpack:///./src/services/image.ts","webpack:///./src/models/text.ts","webpack:///./src/models/misc.ts","webpack:///./src/services/text.ts","webpack:///./src/dtos/sqe-signalr.ts","webpack:///./src/state/signalr-connection.ts","webpack:///./src/utils/collection-utils.ts","webpack:///./src/state/notification-handler.ts","webpack:///./src/models/script.ts","webpack:///./src/views/home/Home.vue?fdf9","webpack:///./src/components/misc/Waiting.vue?9755","webpack:///./src/components/misc/Waiting.vue?75ea","webpack:///./src/components/misc/Waiting.vue?337a","webpack:///./src/components/misc/Waiting.vue","webpack:///./src/views/home/components/personal-editions.vue?e52b","webpack:///./src/components/search-bar.vue?d9ca","webpack:///./src/components/search-bar.vue?84d0","webpack:///./src/components/search-bar.vue?6f02","webpack:///./src/components/search-bar.vue","webpack:///./src/views/home/components/edition-list.vue?135e","webpack:///./src/views/home/components/edition-card.vue?56be","webpack:///./src/components/cues/edition-icons.vue?676a","webpack:///./src/components/cues/edition-icons.vue?f84d","webpack:///./src/components/cues/edition-icons.vue?38e6","webpack:///./src/components/cues/edition-icons.vue","webpack:///./src/views/home/components/edition-card.vue?28d8","webpack:///./src/views/home/components/edition-card.vue?a516","webpack:///./src/views/home/components/edition-card.vue","webpack:///./src/views/home/components/copy-edition-modal.vue?99e7","webpack:///./src/views/home/components/copy-edition-modal.vue?f678","webpack:///./src/views/home/components/copy-edition-modal.vue?fbf7","webpack:///./src/views/home/components/copy-edition-modal.vue","webpack:///./src/views/home/components/edition-list.vue?b819","webpack:///./src/views/home/components/edition-list.vue?d779","webpack:///./src/views/home/components/edition-list.vue","webpack:///./src/views/home/components/personal-editions.vue?367a","webpack:///./src/views/home/components/personal-editions.vue?54a1","webpack:///./src/views/home/components/personal-editions.vue","webpack:///./src/views/home/components/public-editions.vue?55d3","webpack:///./src/views/home/components/edition-public-list.vue?ef81","webpack:///./src/views/home/components/edition-public-row.vue?5be7","webpack:///./src/views/home/components/edition-public-card.vue?4407","webpack:///./src/views/home/components/edition-public-card.vue?c676","webpack:///./src/views/home/components/edition-public-card.vue?e270","webpack:///./src/views/home/components/edition-public-card.vue","webpack:///./src/views/home/components/edition-public-row.vue?15cf","webpack:///./src/views/home/components/edition-public-row.vue?1232","webpack:///./src/views/home/components/edition-public-row.vue","webpack:///./src/views/home/components/edition-public-list.vue?9edc","webpack:///./src/views/home/components/edition-public-list.vue?3012","webpack:///./src/views/home/components/edition-public-list.vue","webpack:///./src/views/home/components/public-editions.vue?8b33","webpack:///./src/views/home/components/public-editions.vue?ca35","webpack:///./src/views/home/components/public-editions.vue","webpack:///./src/views/home/Home.vue?a0f5","webpack:///./src/views/home/Home.vue?d089","webpack:///./src/views/home/Home.vue","webpack:///./src/views/search/main.vue?8ef0","webpack:///./src/services/search.ts","webpack:///./src/views/search/form.vue?39f8","webpack:///./src/views/search/types.ts","webpack:///./src/views/search/form.vue?2f33","webpack:///./src/views/search/form.vue?af8c","webpack:///./src/views/search/form.vue","webpack:///./src/views/search/results.vue?9349","webpack:///./src/views/search/artefact-results.vue?819b","webpack:///./src/components/artefact/artefact-image.vue?bf6f","webpack:///./src/components/artefact/async-mounted-mixin-base.ts","webpack:///./src/components/artefact/artefact-data-mixin.ts","webpack:///./src/components/artefact/artefact-svg.vue?4d55","webpack:///./src/components/artefact/artefact-svg.vue?8017","webpack:///./src/components/artefact/artefact-svg.vue?9c31","webpack:///./src/components/artefact/artefact-svg.vue","webpack:///./src/components/images/IIIFImage.vue?897e","webpack:///./src/components/images/IIIFImage.vue?d60b","webpack:///./src/components/images/IIIFImage.vue?f851","webpack:///./src/components/images/IIIFImage.vue","webpack:///./src/components/artefact/artefact-image.vue?5bc9","webpack:///./src/components/artefact/artefact-image.vue?ab3c","webpack:///./src/components/artefact/artefact-image.vue","webpack:///./src/views/search/artefact-results.vue?d817","webpack:///./src/views/search/artefact-results.vue?ccd6","webpack:///./src/views/search/artefact-results.vue","webpack:///./src/views/search/edition-results.vue?ac07","webpack:///./src/views/search/edition-results.vue?5321","webpack:///./src/views/search/edition-results.vue?55a3","webpack:///./src/views/search/edition-results.vue","webpack:///./src/views/search/imaged-object-results.vue?8fd1","webpack:///./src/views/search/imaged-object-results.vue?1f75","webpack:///./src/views/search/imaged-object-results.vue?abe5","webpack:///./src/views/search/imaged-object-results.vue","webpack:///./src/views/search/text-fragment-results.vue?4dcf","webpack:///./src/views/search/text-fragment-results.vue?8182","webpack:///./src/views/search/text-fragment-results.vue?a73d","webpack:///./src/views/search/text-fragment-results.vue","webpack:///./src/views/search/results.vue?5216","webpack:///./src/views/search/results.vue?561f","webpack:///./src/views/search/results.vue","webpack:///./src/views/search/main.vue?e4c5","webpack:///./src/views/search/main.vue?1585","webpack:///./src/views/search/main.vue","webpack:///./src/components/welcome/welcome.vue?1260","webpack:///./src/components/welcome/welcome.vue?ddd9","webpack:///./src/components/welcome/welcome.vue?efc8","webpack:///./src/components/welcome/welcome.vue","webpack:///./src/views/edition/Edition.vue?d7b2","webpack:///./src/views/edition/components/sidebar.vue?fb4b","webpack:///./src/views/edition/components/permission-modal.vue?8504","webpack:///./src/views/edition/components/permission-modal.vue?71f7","webpack:///./src/views/edition/components/permission-modal.vue?9620","webpack:///./src/views/edition/components/permission-modal.vue","webpack:///./src/views/edition/components/sidebar.vue?634c","webpack:///./src/views/edition/components/sidebar.vue?281c","webpack:///./src/views/edition/components/sidebar.vue","webpack:///./src/views/edition/components/metadata.vue?9653","webpack:///./src/views/edition/components/metadata.vue?20fd","webpack:///./src/views/edition/components/metadata.vue?b803","webpack:///./src/views/edition/components/metadata.vue","webpack:///./src/views/edition/components/delete-edition-modal.vue?dfeb","webpack:///./src/views/edition/components/delete-edition-modal.vue?6065","webpack:///./src/views/edition/components/delete-edition-modal.vue?4622","webpack:///./src/views/edition/components/delete-edition-modal.vue","webpack:///./src/views/edition/Edition.vue?9c45","webpack:///./src/views/edition/Edition.vue?21af","webpack:///./src/views/edition/Edition.vue","webpack:///./src/views/edition/components/imaged-objects.vue?00f6","webpack:///./src/views/edition/components/imaged-object-card.vue?bf7b","webpack:///./src/views/edition/components/imaged-object-card.vue?255b","webpack:///./src/views/edition/components/imaged-object-card.vue?aeaf","webpack:///./src/views/edition/components/imaged-object-card.vue","webpack:///./src/views/edition/components/imaged-objects.vue?6449","webpack:///./src/views/edition/components/imaged-objects.vue?8e96","webpack:///./src/views/edition/components/imaged-objects.vue","webpack:///./src/views/edition/components/artefacts.vue?b776","webpack:///./src/views/edition/components/artefact-card.vue?a352","webpack:///./src/views/edition/components/artefact-card.vue?1d4d","webpack:///./src/views/edition/components/artefact-card.vue?bed8","webpack:///./src/views/edition/components/artefact-card.vue","webpack:///./src/views/edition/components/artefacts.vue?a0f6","webpack:///./src/views/edition/components/artefacts.vue?3960","webpack:///./src/views/edition/components/artefacts.vue","webpack:///./src/views/scroll-editor/scroll-editor.vue?d90e","webpack:///./src/components/misc/resizeBar.vue?944b","webpack:///./src/components/misc/resizeBar.vue?4910","webpack:///./src/components/misc/resizeBar.vue?d08f","webpack:///./src/components/misc/resizeBar.vue","webpack:///./src/components/misc/zoomer.vue?0ac7","webpack:///./src/components/misc/zoomer.vue?5719","webpack:///./src/components/misc/zoomer.vue?a145","webpack:///./src/components/misc/zoomer.vue","webpack:///./src/views/artefact-editor/types.ts","webpack:///./src/state/scroll-editor.ts","webpack:///./src/utils/operations-manager.ts","webpack:///./src/views/scroll-editor/add-artefact-modal.vue?71c0","webpack:///./src/views/scroll-editor/add-artefact-modal.vue?ff48","webpack:///./src/views/scroll-editor/add-artefact-modal.vue?319f","webpack:///./src/views/scroll-editor/add-artefact-modal.vue","webpack:///./src/views/scroll-editor/artefact-toolbox.vue?2b88","webpack:///./src/views/scroll-editor/operations.ts","webpack:///./src/views/scroll-editor/artefact-toolbox.vue?4e7e","webpack:///./src/views/scroll-editor/artefact-toolbox.vue?c05f","webpack:///./src/views/scroll-editor/artefact-toolbox.vue","webpack:///./src/views/scroll-editor/manuscript-toolbar.vue?a055","webpack:///./src/views/scroll-editor/manuscript-toolbar.vue?319a","webpack:///./src/views/scroll-editor/manuscript-toolbar.vue?99ba","webpack:///./src/views/scroll-editor/manuscript-toolbar.vue","webpack:///./src/views/scroll-editor/scroll-area.vue?5e16","webpack:///./src/views/scroll-editor/artefact-image-group.vue?a207","webpack:///./src/views/artefact-editor/roi-layer.vue?aad4","webpack:///./src/views/artefact-editor/roi-layer.vue?51cf","webpack:///./src/views/artefact-editor/roi-layer.vue?59e8","webpack:///./src/views/artefact-editor/roi-layer.vue","webpack:///./src/views/scroll-editor/artefact-image-group.vue?8bd5","webpack:///./src/views/scroll-editor/artefact-image-group.vue?4091","webpack:///./src/views/scroll-editor/artefact-image-group.vue","webpack:///./src/views/scroll-editor/scroll-area.vue?6aea","webpack:///./src/views/scroll-editor/scroll-area.vue?f63c","webpack:///./src/views/scroll-editor/scroll-area.vue","webpack:///./src/views/scroll-editor/scroll-map.vue?d888","webpack:///./src/views/scroll-editor/artefact-sillhouette.vue?e2e8","webpack:///./src/utils/artefact-transformer.ts","webpack:///./src/views/scroll-editor/artefact-sillhouette.vue?45a0","webpack:///./src/views/scroll-editor/artefact-sillhouette.vue?de9b","webpack:///./src/views/scroll-editor/artefact-sillhouette.vue","webpack:///./src/views/scroll-editor/scroll-map.vue?f9a2","webpack:///./src/views/scroll-editor/scroll-map.vue?0e5a","webpack:///./src/views/scroll-editor/scroll-map.vue","webpack:///./src/views/scroll-editor/scroll-ruler.vue?edb1","webpack:///./src/views/scroll-editor/scroll-ruler.vue?60e7","webpack:///./src/views/scroll-editor/scroll-ruler.vue?12fd","webpack:///./src/views/scroll-editor/scroll-ruler.vue","webpack:///./src/views/scroll-editor/scroll-top-toolbar.vue?87f3","webpack:///./src/components/toolbars/zoom-toolbox.vue?6daf","webpack:///./src/components/toolbars/toolbar-icon-button.vue?c980","webpack:///./src/components/toolbars/toolbar-icon-button.vue?1c72","webpack:///./src/components/toolbars/toolbar-icon-button.vue?db3a","webpack:///./src/components/toolbars/toolbar-icon-button.vue","webpack:///./src/components/toolbars/toolbox.vue?3f86","webpack:///./src/components/toolbars/toolbox.vue?fc76","webpack:///./src/components/toolbars/toolbox.vue?ce34","webpack:///./src/components/toolbars/toolbox.vue","webpack:///./src/components/toolbars/zoom-toolbox.vue?cc3b","webpack:///./src/components/toolbars/zoom-toolbox.vue?df13","webpack:///./src/components/toolbars/zoom-toolbox.vue","webpack:///./src/components/toolbars/rotation-toolbox.vue?0c31","webpack:///./src/components/toolbars/rotate-button.vue?f11d","webpack:///./src/components/toolbars/rotate-button.vue?1deb","webpack:///./src/components/toolbars/rotate-button.vue?dccb","webpack:///./src/components/toolbars/rotate-button.vue","webpack:///./src/components/toolbars/rotation-toolbox.vue?f7b3","webpack:///./src/components/toolbars/rotation-toolbox.vue?5d46","webpack:///./src/components/toolbars/rotation-toolbox.vue","webpack:///./src/components/toolbars/toolbar.vue?ac6d","webpack:///./src/components/toolbars/toolbar.vue?b190","webpack:///./src/components/toolbars/toolbar.vue?7e8d","webpack:///./src/components/toolbars/toolbar.vue","webpack:///./src/components/toolbars/undo-redo-toolbox.vue?5a62","webpack:///./src/components/toolbars/undo-redo-toolbox.vue?4e79","webpack:///./src/components/toolbars/undo-redo-toolbox.vue?8266","webpack:///./src/components/toolbars/undo-redo-toolbox.vue","webpack:///./src/components/toolbars/copy-edition-toolbox.vue?3e80","webpack:///./src/components/toolbars/copy-edition-toolbox.vue?da4c","webpack:///./src/components/toolbars/copy-edition-toolbox.vue?1443","webpack:///./src/components/toolbars/copy-edition-toolbox.vue","webpack:///./src/views/scroll-editor/scroll-top-toolbar.vue?19e5","webpack:///./src/views/scroll-editor/scroll-top-toolbar.vue?488b","webpack:///./src/views/scroll-editor/scroll-top-toolbar.vue","webpack:///./src/views/scroll-editor/text-toolbar.vue?8e0f","webpack:///./src/components/text/text-fragment.vue?8946","webpack:///./src/components/text/text-line.vue?85d1","webpack:///./src/components/text/text-sign.vue?0b0a","webpack:///./src/services/qwb-proxy.ts","webpack:///./src/views/artefact-editor/operations.ts","webpack:///./src/components/text/text-sign.vue?c460","webpack:///./src/components/text/text-sign.vue?140e","webpack:///./src/components/text/text-sign.vue","webpack:///./src/components/text/text-line.vue?85ff","webpack:///./src/components/text/text-line.vue?c6fb","webpack:///./src/components/text/text-line.vue","webpack:///./src/components/text/text-fragment.vue?7ab1","webpack:///./src/components/text/text-fragment.vue?d579","webpack:///./src/components/text/text-fragment.vue","webpack:///./src/components/sign-attributes/sign-attribute-pane.vue?0e07","webpack:///./src/components/sign-attributes/sign-attribute.vue?fa72","webpack:///./src/components/sign-attributes/sign-attribute-badge.vue?769d","webpack:///./src/components/sign-attributes/sign-attribute-badge.vue?6d3f","webpack:///./src/components/sign-attributes/sign-attribute-badge.vue?6f47","webpack:///./src/components/sign-attributes/sign-attribute-badge.vue","webpack:///./src/components/sign-attributes/sign-attribute.vue?2d93","webpack:///./src/components/sign-attributes/sign-attribute.vue?20a8","webpack:///./src/components/sign-attributes/sign-attribute.vue","webpack:///./src/components/sign-attributes/sign-attribute-modal.vue?d836","webpack:///./src/components/comment/comment.vue?d349","webpack:///./src/components/comment/comment.vue?19d4","webpack:///./src/components/comment/comment.vue?120b","webpack:///./src/components/comment/comment.vue","webpack:///./src/components/sign-attributes/sign-attribute-modal.vue?3612","webpack:///./src/components/sign-attributes/sign-attribute-modal.vue?4282","webpack:///./src/components/sign-attributes/sign-attribute-modal.vue","webpack:///./src/components/sign-attributes/sign-attribute-pane.vue?a4a2","webpack:///./src/components/sign-attributes/sign-attribute-pane.vue?665b","webpack:///./src/components/sign-attributes/sign-attribute-pane.vue","webpack:///./src/components/text/edit-sign-modal.vue?909e","webpack:///./src/components/text/edit-sign-modal.vue?0cf7","webpack:///./src/components/text/edit-sign-modal.vue?bc20","webpack:///./src/components/text/edit-sign-modal.vue","webpack:///./src/components/text/edit-virtual-artefact-text.vue?ce75","webpack:///./src/services/virtual-artefact.ts","webpack:///./src/components/text/edit-virtual-artefact-text.vue?3595","webpack:///./src/components/text/edit-virtual-artefact-text.vue?f466","webpack:///./src/components/text/edit-virtual-artefact-text.vue","webpack:///./src/views/scroll-editor/text-toolbar.vue?a8d0","webpack:///./src/views/scroll-editor/text-toolbar.vue?cc82","webpack:///./src/views/scroll-editor/text-toolbar.vue","webpack:///./src/views/scroll-editor/scroll-editor.vue?09b4","webpack:///./src/views/scroll-editor/scroll-editor.vue?436c","webpack:///./src/views/scroll-editor/scroll-editor.vue","webpack:///./src/views/user/Registration.vue?852f","webpack:///./src/services/error.ts","webpack:///./src/views/user/Registration.vue?fbd4","webpack:///./src/views/user/Registration.vue?5ce9","webpack:///./src/views/user/Registration.vue","webpack:///./src/views/user/ChangePassword.vue?c916","webpack:///./src/views/user/ChangePassword.vue?e787","webpack:///./src/views/user/ChangePassword.vue?aeff","webpack:///./src/views/user/ChangePassword.vue","webpack:///./src/views/user/UpdateUser.vue?868f","webpack:///./src/views/user/UpdateUser.vue?da01","webpack:///./src/views/user/UpdateUser.vue?f8f0","webpack:///./src/views/user/UpdateUser.vue","webpack:///./src/views/user/ChangeForgottenPassword.vue?eb54","webpack:///./src/views/user/ChangeForgottenPassword.vue?c569","webpack:///./src/views/user/ChangeForgottenPassword.vue?5aef","webpack:///./src/views/user/ChangeForgottenPassword.vue","webpack:///./src/views/user/Activation.vue?94a1","webpack:///./src/views/user/Activation.vue?506a","webpack:///./src/views/user/Activation.vue?0506","webpack:///./src/views/user/Activation.vue","webpack:///./src/views/edition/components/confirm-invitation.vue?206b","webpack:///./src/views/edition/components/confirm-invitation.vue?f973","webpack:///./src/views/edition/components/confirm-invitation.vue?dc7a","webpack:///./src/views/edition/components/confirm-invitation.vue","webpack:///./src/views/artefact-editor/artefact-editor.vue?7702","webpack:///./src/services/sign-interpretation.ts","webpack:///./src/views/artefact-editor/text-side.vue?b8f0","webpack:///./src/components/text/edit-line-modal.vue?369d","webpack:///./src/components/text/edit-line-modal.vue?953c","webpack:///./src/components/text/edit-line-modal.vue?83dd","webpack:///./src/components/text/edit-line-modal.vue","webpack:///./src/components/text/add-line-modal.vue?639f","webpack:///./src/components/text/add-line-modal.vue?6045","webpack:///./src/components/text/add-line-modal.vue?1957","webpack:///./src/components/text/add-line-modal.vue","webpack:///./src/components/text/delete-line-modal.vue?86ae","webpack:///./src/components/text/delete-line-modal.vue?2936","webpack:///./src/components/text/delete-line-modal.vue?ec90","webpack:///./src/components/text/delete-line-modal.vue","webpack:///./src/views/artefact-editor/text-side.vue?e4f2","webpack:///./src/views/artefact-editor/text-side.vue?3189","webpack:///./src/views/artefact-editor/text-side.vue","webpack:///./src/components/image-settings/types.ts","webpack:///./src/views/artefact-editor/image-layer.vue?5f3c","webpack:///./src/views/artefact-editor/image-layer.vue?c29d","webpack:///./src/views/artefact-editor/image-layer.vue?b6db","webpack:///./src/views/artefact-editor/image-layer.vue","webpack:///./src/components/polygons/boundary-drawer.vue?7cc1","webpack:///./src/services/utils.ts","webpack:///./src/components/polygons/boundary-drawer.vue?2256","webpack:///./src/components/polygons/boundary-drawer.vue?c8cf","webpack:///./src/components/polygons/boundary-drawer.vue","webpack:///./src/views/artefact-editor/sign-wheel.vue?55e2","webpack:///./src/views/artefact-editor/sign-wheel.vue?6d6a","webpack:///./src/views/artefact-editor/sign-wheel.vue?afae","webpack:///./src/views/artefact-editor/sign-wheel.vue","webpack:///./src/views/artefact-editor/artefact-editor-toolbar.vue?a979","webpack:///./src/components/image-settings/ImageSettings.vue?1b57","webpack:///./src/components/image-settings/SingleImageSetting.vue?4a58","webpack:///./src/components/image-settings/SingleImageSetting.vue?3340","webpack:///./src/components/image-settings/SingleImageSetting.vue?fd41","webpack:///./src/components/image-settings/SingleImageSetting.vue","webpack:///./src/components/image-settings/ImageSettings.vue?59f0","webpack:///./src/components/image-settings/ImageSettings.vue?191d","webpack:///./src/components/image-settings/ImageSettings.vue","webpack:///./src/components/toolbars/adjust-image-toolbox.vue?2e81","webpack:///./src/components/toolbars/adjust-image-toolbox.vue?95f3","webpack:///./src/components/toolbars/adjust-image-toolbox.vue?085c","webpack:///./src/components/toolbars/adjust-image-toolbox.vue","webpack:///./src/components/toolbars/font-size-button-toolbox.vue?e8ca","webpack:///./src/components/toolbars/font-size-button-toolbox.vue?c0d0","webpack:///./src/components/toolbars/font-size-button-toolbox.vue?5917","webpack:///./src/components/toolbars/font-size-button-toolbox.vue","webpack:///./src/views/artefact-editor/artefact-editor-toolbar.vue?0bd9","webpack:///./src/views/artefact-editor/artefact-editor-toolbar.vue?ba4d","webpack:///./src/views/artefact-editor/artefact-editor-toolbar.vue","webpack:///./src/views/home/components/copy-to-edition-modal.vue?2120","webpack:///./src/views/home/components/copy-to-edition-modal.vue?dd06","webpack:///./src/views/home/components/copy-to-edition-modal.vue?76a7","webpack:///./src/views/home/components/copy-to-edition-modal.vue","webpack:///./src/views/artefact-editor/artefact-editor.vue?b58e","webpack:///./src/views/imaged-object-editor/types.ts","webpack:///./src/views/artefact-editor/artefact-editor.vue?5f8d","webpack:///./src/views/artefact-editor/artefact-editor.vue","webpack:///./src/views/imaged-object-editor/imaged-object-editor.vue?652c","webpack:///./src/views/imaged-object-editor/image-layer.vue?97d9","webpack:///./src/views/imaged-object-editor/image-layer.vue?f4d8","webpack:///./src/views/imaged-object-editor/image-layer.vue?f451","webpack:///./src/views/imaged-object-editor/image-layer.vue","webpack:///./src/views/imaged-object-editor/artefact-layer.vue?dfaf","webpack:///./src/views/imaged-object-editor/artefact-layer.vue?a44a","webpack:///./src/views/imaged-object-editor/artefact-layer.vue?b12c","webpack:///./src/views/imaged-object-editor/artefact-layer.vue","webpack:///./src/views/imaged-object-editor/operations.ts","webpack:///./src/views/imaged-object-editor/imaged-object-editor-toolbar.vue?0c7c","webpack:///./src/views/imaged-object-editor/imaged-object-editor-toolbar.vue?17b5","webpack:///./src/views/imaged-object-editor/imaged-object-editor-toolbar.vue?7487","webpack:///./src/views/imaged-object-editor/imaged-object-editor-toolbar.vue","webpack:///./src/views/imaged-object-editor/imaged-object-editor.vue?0418","webpack:///./src/views/imaged-object-editor/imaged-object-editor.vue?d0a4","webpack:///./src/views/imaged-object-editor/imaged-object-editor.vue","webpack:///./src/router.ts","webpack:///./src/state/state-service.ts","webpack:///./src/state/event-bus.ts","webpack:///./src/state/artefact-editor.ts","webpack:///./src/state/imaged-object.ts","webpack:///./src/state/text-fragment.ts","webpack:///./src/state/index.ts","webpack:///./src/services/comm-helper.ts","webpack:///./src/services/session.ts","webpack:///./src/components/navigation/Login.vue?c096","webpack:///./src/views/user/ForgotPassword.vue?f031","webpack:///./src/views/user/ForgotPassword.vue?1cad","webpack:///./src/views/user/ForgotPassword.vue?8b3b","webpack:///./src/views/user/ForgotPassword.vue","webpack:///./src/components/navigation/Login.vue?9968","webpack:///./src/components/navigation/Login.vue?6b2d","webpack:///./src/components/navigation/Login.vue","webpack:///./src/components/navigation/Faq-modal.vue?e6ee","webpack:///./src/components/navigation/Faq-modal.vue?26f1","webpack:///./src/components/navigation/Faq-modal.vue?6106","webpack:///./src/components/navigation/Faq-modal.vue","webpack:///./src/components/navigation/Eula-modal.vue?b777","webpack:///./src/components/navigation/Eula-modal.vue?63d7","webpack:///./src/components/navigation/Eula-modal.vue?4844","webpack:///./src/components/navigation/Eula-modal.vue","webpack:///./src/components/navigation/CitationModal.vue?a925","webpack:///./src/components/navigation/CitationModal.vue?5591","webpack:///./src/components/navigation/CitationModal.vue?5eaf","webpack:///./src/components/navigation/CitationModal.vue","webpack:///./src/components/toolbars/edition-toolbox.vue?7e13","webpack:///./src/components/toolbars/edition-toolbox.vue?a53c","webpack:///./src/components/toolbars/edition-toolbox.vue?008e","webpack:///./src/components/toolbars/edition-toolbox.vue","webpack:///./src/components/navigation/report-problem-modal.vue?a904","webpack:///./src/components/navigation/report-problem-modal.vue?6f8e","webpack:///./src/components/navigation/report-problem-modal.vue?4352","webpack:///./src/components/navigation/report-problem-modal.vue","webpack:///./src/components/navigation/Navbar.vue?1a03","webpack:///./src/components/navigation/Navbar.vue?04cd","webpack:///./src/components/navigation/Navbar.vue","webpack:///./src/components/misc/CorruptedStateDialog.vue?7ee0","webpack:///./src/components/misc/CorruptedStateDialog.vue?fdbc","webpack:///./src/components/misc/CorruptedStateDialog.vue?f486","webpack:///./src/components/misc/CorruptedStateDialog.vue","webpack:///./src/views/home/components/screen-size-alert.vue?d6af","webpack:///./src/views/home/components/screen-size-alert.vue?ae08","webpack:///./src/views/home/components/screen-size-alert.vue?8fae","webpack:///./src/views/home/components/screen-size-alert.vue","webpack:///./src/App.vue?ec60","webpack:///./src/App.vue?640d","webpack:///./src/App.vue","webpack:///./src/plugins/rendering-optimization.ts","webpack:///./src/main.ts","webpack:///./src/views/search/edition-results.vue?6787","webpack:///./src/views/imaged-object-editor/imaged-object-editor-toolbar.vue?79d3","webpack:///./src/views/user/ChangeForgottenPassword.vue?3a53","webpack:///./src/components/text/text-sign.vue?9d47","webpack:///./src/components/toolbars/rotation-toolbox.vue?458c","webpack:///./src/views/scroll-editor/manuscript-toolbar.vue?da69","webpack:///./src/views/home/components/personal-editions.vue?fe28","webpack:///./src/views/search/artefact-results.vue?9d6d","webpack:///./src/views/edition/components/artefact-card.vue?f3d4","webpack:///./src/views/edition/components/artefacts.vue?c788","webpack:///./src/components/text/delete-line-modal.vue?1323","webpack:///./src/assets/images/favicon-32x32.png","webpack:///./src/views/home/components/edition-card.vue?5f4f","webpack:///./src/views/scroll-editor/artefact-toolbox.vue?dae8","webpack:///./src/views/artefact-editor/text-side.vue?5fb9","webpack:///./src/views/edition/components/imaged-object-card.vue?8977","webpack:///./src/components/toolbars/toolbar-icon-button.vue?e6e5","webpack:///./src/views/imaged-object-editor/artefact-layer.vue?26ea","webpack:///./src/views/search/main.vue?7c4d","webpack:///./src/views/scroll-editor/text-toolbar.vue?6f96","webpack:///./src/components/text/text-line.vue?9e6c"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","_vm","this","_h","$createElement","_c","_self","attrs","$t","waiting","_e","staticClass","alertVisible","staticRenderFns","_v","_s","path","edition","class","editionBadgeClass","editionBadge","artefactLink","artefactLabel","imagedObjectLink","imagedObjectLabel","on","reportProblemModal","directives","rawName","expression","modifiers","staticStyle","slot","userName","isActive","$event","login","logout","changePassword","updateUserDetails","goHome","goPrivate","goPublic","goAbout","showFAQModal","showEulaModal","showCitation","goGuide","contactUs","cancel","new","current","copy","copyToEdition","anotherCopy","permission","draw","erase","box","rename","remove","undo","redo","up","down","actions","metrics","save","load","add","invite","auto","select","edit","view","side","collapsedsidebar","collapsedsidebarObject","collapsedsidebarArtefact","leftRotate","rightRotate","editSign","deleteSign","editLine","addLineBefore","addLineAfter","deleteLine","addToLeft","addToRight","showQwbVariants","showQwbParallels","noImages","report","home","about","faq","cite","eula","documentation","contactus","forename","surname","email","password","repassword","organization","enterYourPassword","registration","register","start","currentPassword","newPassword","change","update","forgotPassword","changeForgottenPassword","activateUser","activate","confirmInvitation","accept","server","server2","notFound","imagedObject","brand","filter","show","search","sort","publicEditionGroupCount","personalEditionGroupCount","publicEditionCount","personalVersionCount","personalEditions","publicEditions","userGuide","shares","artefacts","scroll","versions","columns","imagedObjects","copyTitle","newEditionName","newEditionDesc","copyingEdition","noVersions","newArtefactName","newArtefact","creatingNewArtefact","filterArtefacts","both","editionInfo","editionSize","viewPortSize","lock","shared","admin","editorParameters","reportProblem","repairPolygon","passwordChanged","reset","activationLink","detailsChanged","artefactInfo","artefactSuccess","artefactError","artefactsAutoModeError","editionSuccess","editionError","editionDeleteSuccess","editionDeleteError","invitationSent","permissionsUpdated","NoChangesDetected","imagedObjectFailed","imagedObjectSaved","artefactCreated","artefactCreatedFailed","artefactRenamed","artefactRenameFailed","artefactDeleted","deleteArtefactFailed","artefactCantOverlap","attributeDeletedBySomeoneElse","error","misc","navbar","toasts","display","dir","localizedTexts","en","fr","user","localStorage","getItem","lang","setItem","undefined","token","removeItem","_items","_current","items","item","existing","find","a","id","res","it","entity","failIfNotFound","idx","findIndex","Error","newItems","replaceItems","entityId","failIfExisting","oldCurrent","newCurrent","Map","considerServerIds","actualKey","_entries","has","_frontendToServerIdMap","_serverToFrontendIdMap","entry","set","size","keys","clear","put","delete","frontendId","serverId","instance","attachRoiToArtefact","detachRoiFromArtefact","status","console","warn","artefact","rois","artefactId","roiIndex","roi","deleteRois","attachSignInterpretationToArtefact","si","signInterpretations","detachSignInterprerationFromArtefact","index","wktPolygonToSvg","wkt","boundingRect","svg","replace","substring","polygonInitRegex","parenInitRegex","parenEndRegex","polygons","split","forEach","polygon","currentPolygonSVG","firstPoint","points","x","y","point","svgPolygonToWKT","trim","startsWith","lineSegmentRegex","zTerminatorRegex","poly","lines","svgPolygonToGeoJSON","json","type","coordinates","point1","point2","Number","svgPolygonToClipper","clipper","X","Y","clipperToSVGPolygon","paths","svgPath","constructor","Array","lengthI","lengthJ","geoJSONPolygonToWKT","geoJSON","JSON","parse","lastElement","width","height","boxes","minX","POSITIVE_INFINITY","maxX","NEGATIVE_INFINITY","minY","maxY","Math","min","max","BoundingBox","clipperLib","_svg","normalizeSvg","empty","source","match","Polygon","numberPairRe","exec","parseFloat","re","reader","WKTReader","read","isValid","b","cpr","Clipper","AddPaths","PolyType","ptSubject","ptClip","solutionPaths","Paths","Execute","ClipType","ctUnion","PolyFillType","pftNonZero","fromClipper","ctDifference","ctIntersection","factor","scaled","lastCopied","substr","num","factored","trunc","toString","lastIndex","offsetX","offsetY","moved","newX","newY","translated","includes","wkts","svgs","map","join","getJSON","fromWkt","x1","x2","y1","y2","ApiRoutes","url","manifestString","manifest","ppiAdjustmentFactor","append","getThumbnailUrl","getFullUrl","pct","extension","expectedWidth","expectedHeight","boundingBox","sizes","widthFactor","heightFactor","resolution","ceil","realScale","suffix","dto","imageManifest","waveLength","regionInMaster","regionInMasterImage","regionOfMaster","master","catalogNumber","ppi","masterIndex","images","imageMap","availableImageTypes","image","userId","mayWrite","isAdmin","mayRead","simplified","rights","mayLock","permissions","ShareInfo","attributes","attr","batchEditable","attributeId","valueId","getAttribute","values","val","copyright","owner","manuscriptId","thumbnailUrl","thumbnail","fromDTO","invitations","locked","isPublic","artefactGroups","updateLastEdit","lastEdit","other","Date","notSave","groupId","artefactIds","ArtefactGroup","artefactsIds","nextGroupId","baseUrl","editions","utils","textFragments","users","confirmRegistration","optionalArtefact","confirmAddEditionEditor","listInvitationEdition","allEditionsUrl","manuscriptEditions","editionUrl","editionId","archiveForAllEditors","params","withParams","editionArtefactUrl","editionMetadataUrl","editionFullTextUrl","editionRequestEditor","confirmAddEditionEditorUrl","editionUpdateEditor","listInvitationEditionUrl","allEditionArtefactsUrl","option","editionImagedObjectUrl","imagedObjectId","includeArtefacts","allEditionImagedObjectsUrl","loginUrl","usersUrl","forgotPasswordUrl","changePasswordUrl","changeForgottenPasswordUrl","confirmRegistartionUrl","allEditionTextFragmentsUrl","artefactTextFragmentsUrl","suggested","editionTextFragmentUrl","textFragmentId","batchCreateRoisUrl","createLine","lineId","batchEditRoisUrl","roiUrl","roiId","repairPolygonUrl","batchUpdateArtefactDTOs","artefactGroupUrl","editionAttributeMetadataUrl","attributeUrl","signInterpretationId","attributeValueId","signInterpretationCommentaryUrl","signInterpretationUrl","signInterpretationCharacterUrl","searchUrl","lineText","qwbWordVariantUrl","qwbWordId","qwbParallelTextUrl","qwbStartWordId","qwbEndWordId","qwbBibliographyUrl","qwbBibliographyId","editionScirbalFontUrl","diffReplaceTranscription","diffReplaceText","reportProblemUrl","stateManager","response","editionList","grp","obj","publicCopies","ed","session","mine","otherVersions","concat","prevEdition","post","newEdition","allEditions","extractPermission","invitationIdx","permissionsDTO","newInvitation","inviteEditor","share","sh","updateArtefacts","artefactPlacements","placement","isPlaced","touchEdition","artefactsGroup","artGroupDto","scale","rotate","translate","zIndex","mirrored","Placement","mask","artefactMaskEditorId","artefactPlacementEditorId","viewport","scrollEditor","theta","PI","center","getArtefactCenter","cornersX","cornersY","sinTeta","sin","cosTeta","cos","newWidth","newHeight","clone","getBoundingBox","round","recto","verso","names","unique","Set","artefactName","imageStack","masterImage","im","body","masterImageId","art","artefactImagedObject","getImageStack","maskEditorId","positionEditorId","statusMessage","changed","manifestUrl","editorId","certain","tf","atf","ArtefactTextFragmentData","textFragment","lineName","signs","sign","line","indexInLine","textFragmentName","TextEdition","copyFrom","editionName","licence","editors","character","nextSignInterpretations","commentary","signStreamSectionIds","qwbWordIds","attributeString","newAttrs","attributeValueString","interpretationAttributeId","creatorId","signType","pair","SignInterpretation","nextId","shape","position","rotation","stanceRotation","exceptional","valuesSet","interpretationRoiId","_status","internalId","InterpretationRoi","newStatus","interpretationRois","signInterpretation","internalIdCount","integrifyPosition","newROIs","deletedROIs","updateServerROIs","updateStateCreatedROIs","createRois","updateStateDeletedROIs","priorSignInterpretationId","followingSignInterpretationId","newText","previousLineId","subsequentLineId","newDTOs","deleted","updateRois","preSaveROIs","listDTO","preSave","postSave","deleteRoi","mapFrontendIdToServerId","connection","_connection","payload","invoke","optional","artefactGroupId","newMatch","iaaEditionCatalogToTextFragmentId","editorEmailId","request","published","personal","institutionName","newRoi","newRois","updateRoi","scriptData","scribalFontId","kernPair","firstCharacter","secondCharacter","glyph","glyphCharacter","searchParameters","newAttribute","updatedAttribute","newSignInterpretation","newSignInterpretationCharacter","nextSignInterpretationId","newSignInterpretationAttributes","alteredSignInterpretationAttribute","requestedEditions","createFragment","updatedTextFragment","lineData","handler","off","_subscribedEditionId","connect","unsubscribeEdition","_utils","subscribeToEdition","unsubscribeToEdition","subscribed","disconnect","subscribeEdition","unregisterNotificationHandler","_currentHandler","connectHandler","disconnectUpdatedEdition","handleUpdatedEdition","disconnectCreatedArtefact","handleCreatedArtefact","disconnectDeletedArtefact","handleDeletedArtefact","disconnectUpdatedArtefact","handleUpdatedArtefact","disconnectCreatedRoisBatch","handleCreatedRoisBatch","disconnectEditedRoisBatch","handleEditedRoisBatch","disconnectUpdatedRoisBatch","handleUpdatedRoisBatch","disconnectDeletedRoi","handleDeletedRoi","disconnectCreatedEditor","handleCreatedEditor","disconnectUpdatedSignInterpretation","handleUpdatedSignInterpretation","disconnectUpdatedSignInterpretations","handleUpdatedSignInterpretations","disconnectDeletedSignInterpretation","handleDeletedSignInterpretation","disconnectCreatedSignInterpretation","handleCreatedSignInterpretation","connectUpdatedEdition","connectCreatedArtefact","connectDeletedArtefact","connectUpdatedArtefact","connectCreatedRoisBatch","connectEditedRoisBatch","connectUpdatedRoisBatch","connectDeletedRoi","connectCreatedEditor","connectUpdatedSignInterpretation","connectUpdatedSignInterpretations","connectDeletedSignInterpretation","connectCreatedSignInterpretation","stop","withUrl","accessTokenFactory","configureLogging","withAutomaticReconnect","build","onclose","onConnectionClosed","SignalRWrapper","_instance","findInArray","array","e","addToArray","removeFromArray","storedEdition","ids","existingArtefact","debug","notifyRoiChanged","roiList","shareIndex","newShare","siDto","removeSign","reverse","existingSi","siNext","addSign","oldInterpretationRoiId","existingSI","newSI","selectedIndex","textFragmentEditor","selectedSignInterpretations","selectedAttribute","attrInNewSI","eventBus","emit","yOffset","glyphs","kerningPairs","getKey","kerning","lineSpace","wordSpace","char1","char2","onActivateTab","model","callback","$$v","activeTab","scopedSlots","_u","fn","editionsLoaded","$tc","personalEditionsCount","proxy","publicEditionsCount","component","searchBarParams","searchValue","onEditionsSearch","draftEditions","publishedEditions","preventDefault","onFilterChange","internalValue","$set","onViewChange","onSortChange","onSearch","inputEvent","viewEvent","selectEvent","newValueParam","default","components","title","_l","openCopyEditionModal","editionEditClick","lastEditText","stopPropagation","editionEditRightClick","editionCopyClick","showText","readOnly","$router","editionLink","resolve","open","href","date2str","dt","toISOString","today","yesterday","setDate","getDate","EditionIcons","ref","currentEdition","visible","canCopy","copyModalShown","copyEdition","onHide","newCopyName","arguments","onLogin","onRegister","indexOf","_k","keyCode","errorMessage","copyrightHolder","collaboators","$state","$refs","newCopyNameRef","focus","bvModalevt","evt","blur","hide","editionService","newEditionId","copyModalRef","go","$root","$emit","$bvModal","Waiting","EditionCard","CopyEditionModal","editionSearchBarValue","newVal","newSearch","onPersonalEditionsLoad","filteredEditions","getFilteredEditions","prepare","toLowerCase","aVal","bVal","localeCompare","numeric","sensitivity","deep","SearchBar","EditionList","indices","active","getWindowWidth","editionViewClick","toDateString","EditionPublicCard","outerWidth","EditionPublicRow","onPublicEditionsLoad","EditionsPublicList","$route","editionType","$nextTick","newTab","prevTab","to","from","PersonalEditions","PublicEditions","searching","searchResults","detailedSearchRequestDTO","artefactDesignation","textReference","searchData","textToArray","noSearch","input","field","list","disabled","textDesignation","imageDesignation","results","a_e","aspectRatio","isVirtual","imageSetting","normalizedOpacity","maxWidth","mountedDone","asyncMounted","masterImageManifest","elementWidth","elementHeight","_t","loaded","updateWidth","addEventListener","$el","clientWidth","serverScale","getOptimizedScaleFactor","groupTransform","backgroundImageUrl","backgroundImageTransform","opacity","onBackgroundLoadError","tile","transform","onLoadError","_url","loadError","retries","_inView","inView","TileInfo","RETRY_LIMIT","setTimeout","imageGroup","ownerSVGElement","div","closest","surroundingDiv","onSurroundingChanged","observer","ResizeObserver","observe","loadTiles","removeEventListener","refreshTimeoutId","clearTimeout","checkTilesInView","CHECK_IN_VIEW_TIMEOUT","oldValue","imageBoundingBox","tileWidth","floor","manifestTileInfo","optimizedImageScaleFactor","tileHeight","tiles","endX","endY","xTranslate","currentTileWidth","yTranslate","currentTileHeight","getScaledAndCroppedUrl","dynamic","bboxDiv","left","offsetLeft","top","offsetTop","right","bottom","clientHeight","entries","tileId","tileElement","document","getElementById","bbox","getBoundingClientRect","sqeBB","sqeBoundingBox","f","imageBB","scaleFactor","screenBB","scaleFactors","imageScaleFactor","screenBoundingBox","manifestScaleFactor","backgroundLoadError","backgroundImageScale","optimizedImageToSqe","scaleTransform","translateTransform","imageSettings","allImageSettings","visibleImages","setting","ready","rectoImageDTO","lightingType","lightingDirection","rectoImageStackDTO","versoImageDTO","versoImageStackDTO","imagedObjectDTO","createImagedObjectDTO","artefactsWithEditions","versionId","actualEditions","rectoThumbnail","versoThumbnail","expanded","editionIds","count","stringify","searchService","buildTime","router","sessionService","location","reload","documentElement","dataset","versionString","openMetadata","openPermissionModal","deleteEdition","isWaiting","artefactsLength","imagedObjectsLength","canRename","renaming","openRename","domProps","target","composing","onRename","bold","page","version","shown","invitationRow","disableRow","setRowShareStatus","disableButton","buttonText","invit","setRowInvitStatus","fillShareRows","fillInvitationRows","msg","updateInvitation","updateSharePermissions","$toasted","duration","row","oldPermission","newInvitations","newShares","invitationsRows","sharesRows","artLen","element","ver","newName","renameEdition","showMessage","PermissionModal","metadata","headers","_f","_headers","parseInt","isNaN","manuscript","composition","abbreviation","site","manuscriptType","compositionType","period","language","script","material","otherIdentifications","publication","filters","cleanString","confirmation","adminDelete","deleting","currentUser","confirm","deleteEditionModalRef","isLoading","virtualCount","reduce","getPage","next","endsWith","EditionSidebar","onImagedObjectsSearch","filteredImagedObjects","imageObjectId","encodeURIComponent","getFilteredImagedObjects","searchEvent","img","ImagedObjectCard","onArtefactsSearch","openLineMenu","observed","renameArtefact","closeLineMenu","intersectionObserver","IntersectionObserver","onObserved","root","rootMargin","threshold","card","artefactService","changeArtefact","prevLineMenuId","event","isIntersecting","ArtefactImage","filteredArtefacts","getFilteredArtefacts","container","ArtefactCard","onKeyDown","onKeyUp","onKeyPress","newOperation","onZoomChangedGlobal","onScroll","actualHeight","actualWidth","editionWidth","editionHeight","zoom","ppm","selectArtefact","saveGroupArtefacts","cancelGroup","editorGrid","navigateToPoint","style","secondaryToolbarHeight","onTextChanged","startDrag","gridElement","storedLeftPaneWidth","storageKey","setPanelWidths","onmousemove","onDrag","onmouseup","endDrag","isDragging","leftPaneWidth","grid","clientX","leftPanelWidth","rightPaneWidth","setProperty","arg","onWheel","ctrlKey","amount","deltaY","zoomTarget","mousePosition","scrollLeft","clientY","scrollTop","applyZoom","oldZoom","newZoom","degel","newPosition","scrollDelta","additionalEvent","parentElement","angleCalc","angle","newRotate","fontSize","pointerPosition","displayRois","displayReconstructedText","displayText","_mode","showEditReconTextBar","_selectedArtefact","_selectedGroup","selectedGroup","selectedArtefact","artefactGroup","_undone","internalUndo","needsSaving","initial","undone","internalRedo","savingAgent","autoSaveInterval","op","redoStack","undoStack","dirty","lastOps","lastOp","united","uniteWith","setDirty","ops","_isDirty","saveInProgress","isSaving","isDirty","pop","preSaveDirty","saveOk","saveEntities","oldId","newId","getId","replaceEntityId","oldOp","autoSaveTimer","scrollModalShown","checkedAllSide","chekedArtefacts","closeModal","uncheckAll","selected","isSelectedArtefact","isLoaded","nonPlacedArtefacts","artId","addArtefactModalRef","float","selectedArtefacts","setMode","statusMirror","dragArtefact","zoomArtefact","resetZoom","rotateGroupArtefact","saveGroup","setZIndex","category","prev","isPlacedPrev","isPlacedNext","sop","ArtefactPlacementOperation","operations","groupArtefacts","GroupPlacementOperation","prevIds","nextIds","areSameArrays","every","unitedOperations","artOp","removedGroup","generateGroup","group","EditionMetricOperation","lastId","keyboardInput","scrollEditorState","dirX","dirY","operation","jump","move","createOperation","direction","groupCenterPoint","getGroupCenter","deltaAngleDegrees","deltaAngleRadians","rotateArtefact","newPlacement","newTranslate","translateArtefactAfterGroupRotation","oldAngle","newAngle","normalizedAngle","artefactCenterPoint","xFromOrigin","yFromOrigin","newMidXArt","newMidYArt","deltaX","trans","zoomDelta","toFixed","zIndexDirection","placedArtefacts","artefactsZOrders","opType","newIsPlaced","code","shortcut","viewportSizeWidth","viewportSizeHeight","pointerPositionX","pointerPositionY","onDisplayROIs","onDisplayReconstructedText","onDisplayText","isDisplayText","openAddArtefactModal","removeArtefactOrGroup","artifactMaxWidth","artifactMaxHeight","sidesOptions","selectedSide","metricsInput","resizeScroll","selectedArtifactsSize","groupSize","sqrt","pow","screen","text","$on","$off","updateSelectedArtefactsSizes","getGroupSize","arts","artifactSize","getArtefactWidth","getArtefactHeight","artifact","deleteGroup","groupArtefact","pointsAttribute","Infinity","maxHeight","convertToMM","number","minimumsX","minimumsY","maximumsX","maximumsY","globalWidth","globalHeight","newMetrics","xOrigin","yOrigin","allowResizing","metricsOperation","zoomLevel","onNewZoom","actualXOrigin","actualYOrigin","onScrollClick","onMouseMove","scriptGlyphs","g","isArtefactDisabled","isArtefactSelected","onNewOperation","onPointerDown","onPointerMove","onPointerUp","onPointerCancel","onClick","onContextMenu","onSelect","visibleRois","reconstructedText","selectedSignInterpretationId","svgTransform","shine","shiny","withClass","isSelectedRoi","highlighted","highlightedComment","onPathClicked","artefactEditorState","highlightCommentMode","some","selectedInterpretationRoi","artefactEditor","singleSelectedSi","roiClicked","calculateBoundingBox","boundingBoxes","combine","midX","midY","translateToZero","scaleMirrored","translateX","translateY","translateToPlace","transformRootId","reconstructedOnly","displayedSigns","visibleSignInterpretations","isReconstructed","displayedSign","pt","createSVGPoint","svgPt","matrixTransform","transformRoot","getScreenCTM","inverse","materialMode","pointerId","previousPlacement","setPointerCapture","eventToPoint","mouseOrigin","diffPt","cancelOperation","targetElement","releasePointerCapture","selectSign","sid","Promise","all","getArtefactGroup","visibleArtefacts","inViewport","selectGroup","zoomer","transformer","artefactTransform","zOrder","entities","onResize","scrollMap","setScaleFactor","ev","units","horizontalTicks","verticalTicks","inMaterialMode","onTextMode","inTextMode","onZoomChanged","localZoom","isToolbarDisabled","isMirroredPressed","mirrorArtefact","subject","canZoomOut","zoomClick","delta","canZoomIn","onReset","_g","pressed","$listeners","icon","classes","button","textBreakPoint","hideBelow","noMargins","paramsZoom","percent","onRotateClick","enableText","rotationAngle","onMouseDown","onMouseUp","onMouseLeave","timer","setInterval","emitClick","repeatDelay","stopRepeat","clearInterval","paramsRotationAngle","degrees","localRotateAngle","onRotationAngleChanged","toolbox","noGutters","canUndo","onUndo","canRedo","onRedo","operationsManager","variantEditions","openCopyEdtion","getManuscriptEditions","variantEditionList","flatMap","newScale","toolbar","onVirtualTextClose","fragment","isEditMode","lineChange","checkEnter","onPaste","focusPopover","openEditLineModal","showVariants","showParallels","parallels","parallel","qwbTextReference","word","variants","variant","isSelected","notSelected","isHighlighted","cssStrings","htmlCharacter","onSignInterpretationClicked","openSignMenu","qwbVariants","variantReading","biblio","shortTitle","pageReference","comment","ArtefactRotateOperation","firstChar","lastChar","ArtefactEditLineOperation","checkText","replaceText","ArtefactAddLineOperation","ArtefactDeleteLineOperation","removeRoi","placeRoi","inState","getServerId","TextFragmentAttributeOperation","existingIndex","findAttributeIndex","attributeOperationType","nextComment","prevComment","SignInterpretationCommentOperation","signOpType","uniteWithRightOp","signInterperationId","signTypeId","signTypeString","getPrevSignData","UpdateSignInterperationOperation","signIntepretationId","corrupted","SI","prevSI","prevSign","addAfterSignInterpretationId","signId","isVariant","nextAvailableId","textEditingMode","isSiSelected","allQwbWordIds","delOps","delOp","metaKey","toggleSelectSign","modeSignModal","qps","getQwbWordVariants","signMenuId","previousMenuId","virtualArtefact","editedVirtualArtefact","signMenu","qwbStartId","qwbEndId","getQwbParallelText","textContent","currentTarget","log","paste","clipboardData","ClipboardItem","getData","selection","getSelection","rangeCount","deleteFromDocument","getRangeAt","insertNode","createTextNode","es","getSingleEditions","primary","ts","variantEdition","getLineText","lineMenuId","lineMenu","allSiAreReconstructed","onReconstructedCheckBoxChanged","onAttributesMenuHide","onAddAttributesMenuOpen","onValuesMenuShow","onValuesMenuHide","attributeName","attrValue","onAddAttribute","attribute","onAttributeClick","isMultiSelect","attributeClick","deleteAllowed","onDeleteAttribute","onAttributeValueChanged","attrVal","description","onViewComment","onEditComment","onDeleteComment","editor","onCommentUpdated","ClassicEditor","shortened","viewCommentModalRef","editCommentModalRef","newAttr","attributeMetadata","removable","editable","v","attrMetadata","valueMetadata","getAttributeValue","signAttributeModalRef","hidingStarted","info","editorState","allAttributes","attributeValues","first","siValues","keepOpen","attributesMenu","reconstructedAttrDTO","reconstructedAttrValueDTO","reconstructedAttrMeta","attributesMetadata","reconstructedAttrValueMeta","prepareAttributesMenu","filteredAttributes","attributesSet","attributesValuesSet","attributeMeta","attributeCopy","repeatable","attributeValue","isLetter","newCharacter","signTypes","valueField","newAttributeValueId","modeButtonApply","statusMode","editedSi","updateSignInterpretation","createSignInterpretation","valueID","originalArtefact","shadowArtefact","createShadowArtefact","shadowTextFragment","createShadowTextFragment","originSignROIs","getOriginalSignROIs","_text","extractOriginalText","getBaseMeasurements","anchor","anchorPoint","baseline","populateShadows","hidden","clearShadowModels","imageId","artefactDataEditorId","signROIs","associatedSi","ROItoSI","nextSI","breakAtEnd","signChar","sr","original","originalSI","origin","defaultBaseline","getAnchors","rightAnchor","leftAnchor","firstSign","lastSign","nextSign","getBaseline","firstSR","baseX","baseY","populateShadowSigns","populateShadowROIs","registerShadowModels","placeShadowArtefact","unregisterOnly","shadowSignROIs","char","typeId","createShadowSign","attachSign","trailingSpaces","getKerning","xKern","calcArtefactWidth","rightX","gd","roiPosition","roiBox","yKern","roiShape","fromBox","signRoi","roiDTO","textRois","virtualArtefactShape","virtualArtefactPlacement","onShown","originalText","hebTextOnly","stripNonHebChars","hebrewAlphabet","output","letter","selectedTextFragment","param","allMovedArtefactIds","allEditedGroupIds","allDeletedGroupIds","saveMetrics","allMovedArtefacts","prepareForBackend","updateArtefactDTOs","artGroup","newArtefactGroup","savedGroup","updateOperationId","updateArtefactGroup","deleteArtefactGroup","updateMetrics","onNewBulkOperations","editionFullText","bvEvent","modalId","trigger","onAddArtefactModalClose","artefactContainer","artefactSidebar","calculateViewport","addOperation","addBulkOperations","artIds","orderedArtefacts","maxZindex","placeOnScroll","paramName","paramValue","args","existingGroup","newGroup","isSelectedIndex","calculateSecondaryToolbarHeight","pixelRect","artefactsContainer","artefactsContainerHeight","scrollmap","scrollmapHeight","updateStackIds","editedArtefact","updateText","topToolbar","el","scrollTo","scrollWidth","scrollHeight","disabledReg","termsOfUse","showTermsOfUse","vue","errorService","getErrorMessage","registerModalRef","rePassword","identicalError","disableChange","oldPassword","emailChanged","updateUser","userInfo","isLogged","onParamsChanged","actionMode","isDrawingEnabled","onModeClick","isDeleteEnabled","onDeleteRoi","onHighlightComment","onAuto","openCopyToEdtion","openReportMask","selectedLine","onNewRotate","actualBoundingBox","imageWidth","imageHeight","onRoiClicked","onNewPolygon","artefactGrid","editorMode","oldValueId","deleteAllVariants","prevSignInterpretation","attributeDTOs","commentaryDTO","previousSignInterpretationIds","breakPreviousAndNextSignInterpretations","created","priority","loadFragment","changePosition","openedTextFragement","emptySelectedState","checkDifference","onLineChanged","selectedSignInterpretation","textLine","lineVue","lineA","querySelector","range","createRange","sel","setStart","childNodes","collapse","removeAllRanges","addRange","prevText","innerText","modal","saveNewLine","onLineNamed","parameter","notInTheRightComponent","before","parts","updateLineName","textService","displayedTfIds","displayedTextFragments","allTextFragmentsData","tfId","displayedTextFragmentsShow","createFromEditionTextFragment","textFragmentsArtefact","editionTf","artefactTf","textFragmentMode","displayedTextFragmentsData","tfd","getFragmentText","textFragmentData","tfIdsToDelete","tfData","selectRoi","indexToChange","isInBoudaries","temp","loading","normalizeOpacity","settings","filteredImageList","numVisible","fullOpacity","clippingMask","svgClass","pointerDown","pointerMove","pointerUp","pointerCancel","keyPress","polygonString","wktPolygon","pts","polygonPoints","color","onModeChanged","newMode","internalMode","activePointers","closedPolygon","corner1","corner2","diagonal2","pt0","pt1","dist2","ratio","checkPolygon","partials","isLegal","newPolygon","utilsService","fixedPolygon","signInfo","fillWheel","curSign","oldSign","findSignIndex","firstIndex","signsOnEachSide","diff","abs","siIndex","onImageSettingChanged","onFontSizeChanged","imageType","onSingleImageSettingChanged","onVisibleChange","onOpacityInput","SingleImageSetting","align","canFontSizePlus","fontSizeChanged","canFontSizeMinus","fontSizeLimits","notifyChange","editionTargetName","editionTargetId","copyArtefact","currentArtefact","artefactCopy","copyToEditionModalRef","textFragmentEditorState","saving","saveRotation","saveROIs","saveSignInterpretations","saveAttributes","saveCommentaries","reportIssueData","normalized","offset","statusTextFragment","autoMode","playSound","artefactMode","prepareArtefact","setFirstZoom","promises","fillImageSettings","visibleSIs","visiblesTf","anyRoiOfSelectedTf","tfToMove","removeTextFragementFromArtefact","addTextFragementToArtefact","infoBox","boundingBoxCenter","newIndex","sound","audio","Audio","play","checked","getImage","isMaster","bb","diag","updateArtefactROIs","updated","createOp","signInterpretationService","deleteSignInterpretation","deleteOp","actualOpType","createAttribute","updateAttribute","prevIndex","nextIndex","prevIsCurrent","toDeleteAttributeValueId","toCreateAttribute","deleteAttribute","updateCommentary","DrawingMode","EditMode","editList","sideArtefactChanged","canEdit","removeColor","getArtefactColor","isErasing","imagedObjectGrid","selectedRow","renameInputActive","backgroundColor","onArtefactChanged","inputRenameChanged","onDeleteArtefact","canCreate","newModalShown","DRAW","fullImageMask","background","highLight","sideFilter","displayName","sideFilterChanged","modeChosen","editingModeChanged","imagedObjectState","options","sideOptions","drawingMode","String","rectoStack","rectoImages","versoStack","versoImages","stack","initialMask","displayResizeBar","bandWidth","createArtefact","newArtRef","ERASE","nonSelectedMask","subtract","intersection","intersect","colors","deleteArtefact","use","base","routes","redirect","children","meta","activeUserRoute","promise","startTime","now","endTime","failed","done","then","catch","err","state","StateService","alreadyCreated","_state","imageManifestProcesses","_notificationHandler","registerNotificationHandler","wrapInternal","allEditionsInternal","editionInternal","postEditionInternal","editionScriptInternal","editionMetadataInternal","invitationsInternal","textFragmentsInternal","artefactGroupsInternal","imagedObjectsInternal","artefactsInternal","artefactInternal","postArtefactInternal","textFragmentInternal","editionFullTextInternal","attributeMetadataInternal","imageManifestInternal","processName","self","processTracking","internal","postInternal","getProcess","needsRefresh","setProcess","svc","getAllEditions","alert","editionScript","editionMetadata","imagedObjectsProcess","artefactsProcess","textFragmentsProcess","artefactGroupsProcess","attributeMetadataProcess","editionScriptProcess","getScribalFont","scripts","getEditionMetadata","getEditionTextFragments","fragments","getArtefactGroups","getEditionImagedObjects","getEditionArtefacts","getAllAttributeMetadata","getImageManifest","imPromise","tfPromise","getArtefactTextFragments","getTextFragment","textEdition","addTextFragmentToState","getEditionFullText","fullText","getAllInvitations","allInvitations","editionInvitations","editorRequests","editorEmail","artefactRoi","removeIfExist","oldSi","existingIdx","onSignInterpretationSelected","siTextFragment","tfIndex","StateManager","authHeader","Authorization","useCredentials","CommHelper","getRequestOptions","signalR","requestDto","userChanged","disabledLogin","disabledSubmit","submit","close","passwordModalRef","emailRef","loginModalRef","ForgotPassword","reported","readyToReport","loggedIn","username","actualUsername","titleWithUserName","ReportProblemModalRef","init","activated","$i18n","locale","currentLanguage","BIcon","BIconSearch","BIconPersonFill","BIconList","reloadPage","corruptedModalRef","initializeApp","openCorruptedStateDialog","showScreenSizeAlert","curOW","isTokenValid","Navbar","CorruptedStateDialog","canvas","RenderingOptimizationPlugin","$render","scalingFactors","CKEditor","config","productionTip","observerOptions","i18n","messages","prevent","beforeEach","matched","record","render","h","$mount"],"mappings":"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sFCAA,W,kCCAA,W,qBCAAC,EAAOD,QAAU,IAA0B,6B,oCCA3C,W,+GCAA,W,6DCAA,W,kCCAA,W,oCCAA,W,kCCAA,W,6DCAA,W,oCCAA,W,oCCAA,W,6DCAA,W,oCCAA,W,uBCAAC,EAAOD,QAAU,IAA0B,2B,kFCA3C,W,kFCAA,W,oCCAA,W,uBCAAC,EAAOD,QAAU,IAA0B,8B,sFCA3C,W,oCCAA,W,sFCAA,W,oCCAA,W,6DCAA,W,oCCAA,W,oCCAA,W,gDCAAC,EAAOD,QAAU,IAA0B,0B,oFCA3C,W,qBCAAC,EAAOD,QAAU,IAA0B,+B,6DCA3C,W,oCCAA,W,oCCAA,W,oCCAA,W,oCCAA,W,kCCAA,W,oCCAA,W,oCCAA,W,oCCAA,W,oCCAA,W,6DCAA,W,oCCAA,W,yGCAA,W,+GCAA,W,oFCAA,W,oCCAA,W,6DCAA,W,oCCAA,W,oCCAA,W,6DCAA,W,oFCAA,W,yDCAA,W,kCCAA,W,mMCAA,W,gFCAA,W,yDCAA,W,kCCAA,W,yDCAA,W,kCCAA,W,uGCAA,W,qBCAAC,EAAOD,QAAU,IAA0B,mC,kCCA3C,W,iGCAI,EAAS,WAAa,IAAI+B,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,MAAM,CAAC,GAAK,MAAM,IAAMN,EAAIO,GAAG,OAAO,SAAW,gCAAgC,CAAGP,EAAIQ,QAAsBR,EAAIS,KAAjBL,EAAG,UAAoBJ,EAAW,QAAEI,EAAG,MAAM,CAACA,EAAG,YAAY,GAAGJ,EAAIS,KAAOT,EAAIQ,QAAuGR,EAAIS,KAAlGL,EAAG,MAAM,CAACM,YAAY,kBAAkBJ,MAAM,CAAC,GAAK,mBAAmB,CAACF,EAAG,gBAAgB,GAAYA,EAAG,0BAA0BA,EAAG,oBAAoB,CAACE,MAAM,CAAC,QAAUN,EAAIW,iBAAiB,IACjeC,EAAkB,G,kICDlB,EAAS,WAAa,IAAIZ,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,WAAW,CAACE,MAAM,CAAC,WAAa,KAAK,GAAK,eAAe,OAAS,GA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","file":"js/app.e89a660a.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Eula-modal.vue?vue&type=style&index=0&id=2b1c2e53&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./form.vue?vue&type=style&index=0&id=9c224faa&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Activation.vue?vue&type=style&index=0&id=55cc8ece&scoped=true&lang=css&\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./confirm-invitation.vue?vue&type=style&index=0&id=485e69d5&scoped=true&lang=css&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./comment.vue?vue&type=style&index=0&id=70557539&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navbar.vue?vue&type=style&index=0&lang=scss&\"","module.exports = __webpack_public_path__ + \"img/logo_tlv.4c2b33c7.png\";","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Faq-modal.vue?vue&type=style&index=0&id=ddf01bbc&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./scroll-area.vue?vue&type=style&index=0&lang=scss&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./results.vue?vue&type=style&index=0&id=78dd3590&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edition-icons.vue?vue&type=style&index=0&id=4545ae1a&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./add-line-modal.vue?vue&type=style&index=1&lang=scss&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit-line-modal.vue?vue&type=style&index=1&lang=scss&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./artefact-image.vue?vue&type=style&index=0&id=921b6cfe&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./sign-attribute-badge.vue?vue&type=style&index=0&id=4eb20b2c&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./toolbar.vue?vue&type=style&index=0&id=6d1b5010&lang=scss&scoped=true&\"","module.exports = __webpack_public_path__ + \"img/logo_gottingen.9ed0d675.png\";","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./image-layer.vue?vue&type=style&index=0&id=8da349e4&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=style&index=0&lang=scss&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./artefact-image-group.vue?vue&type=style&index=0&id=e98bd81c&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./sign-attribute-pane.vue?vue&type=style&index=1&lang=scss&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit-line-modal.vue?vue&type=style&index=0&id=792ebd16&lang=scss&scoped=true&\"","module.exports = __webpack_public_path__ + \"img/logo_dfg.ab978c87.svg\";","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./add-artefact-modal.vue?vue&type=style&index=0&id=d03bcbf6&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Waiting.vue?vue&type=style&index=0&lang=css&\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./metadata.vue?vue&type=style&index=0&id=760bf5df&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./artefact-sillhouette.vue?vue&type=style&index=0&id=f7a4e088&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Registration.vue?vue&type=style&index=0&id=5193f144&scoped=true&lang=css&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UpdateUser.vue?vue&type=style&index=0&id=db99d010&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./imaged-object-results.vue?vue&type=style&index=0&id=566d55fb&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./text-fragment.vue?vue&type=style&index=0&id=0885ba72&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./roi-layer.vue?vue&type=style&index=0&id=15028152&lang=scss&scoped=true&\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./permission-modal.vue?vue&type=style&index=0&id=0dda8193&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./add-line-modal.vue?vue&type=style&index=0&id=68aadae7&lang=scss&scoped=true&\"","module.exports = __webpack_public_path__ + \"img/adjust.0efdf696.svg\";","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./delete-line-modal.vue?vue&type=style&index=0&id=6635515e&lang=scss&scoped=true&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./search-bar.vue?vue&type=style&index=0&id=e2db5464&lang=scss&scoped=true&\"","export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=scss&\"","module.exports = __webpack_public_path__ + \"img/logo_adwg.1f9868de.svg\";","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=style&index=1&id=b2cc663e&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./scroll-editor.vue?vue&type=style&index=0&id=63a9378a&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./sign-wheel.vue?vue&type=style&index=0&id=2111fdd1&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./scroll-map.vue?vue&type=style&index=0&id=0608109e&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./image-layer.vue?vue&type=style&index=0&id=c9c7e7f4&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./imaged-object-editor.vue?vue&type=style&index=0&id=c46ce834&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./text-line.vue?vue&type=style&index=1&lang=scss&\"","module.exports = __webpack_public_path__ + \"img/rings.25bc41a6.svg\";","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./public-editions.vue?vue&type=style&index=0&id=6eb178c3&lang=scss&scoped=true&\"","module.exports = __webpack_public_path__ + \"img/logo_haifa.130b966f.png\";","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./artefact-editor.vue?vue&type=style&index=0&id=3740f63a&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./toolbox.vue?vue&type=style&index=0&id=1fd19b48&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./report-problem-modal.vue?vue&type=style&index=0&id=c1d0d0ce&lang=scss&scoped=true&\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./sidebar.vue?vue&type=style&index=0&id=0ad580d8&lang=scss&scoped=true&\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edition-public-row.vue?vue&type=style&index=0&lang=scss&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./text-fragment-results.vue?vue&type=style&index=0&id=0551369f&lang=scss&scoped=true&\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./imaged-objects.vue?vue&type=style&index=0&id=1b84298e&scoped=true&lang=css&\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./screen-size-alert.vue?vue&type=style&index=0&id=d5a50b0e&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ChangePassword.vue?vue&type=style&index=0&id=20507d11&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Edition.vue?vue&type=style&index=0&id=00bb93ab&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./copy-edition-toolbox.vue?vue&type=style&index=0&id=7049599a&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit-sign-modal.vue?vue&type=style&index=0&id=0fd4e2bf&lang=scss&scoped=true&\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edition-public-card.vue?vue&type=style&index=0&id=394507ea&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Login.vue?vue&type=style&index=0&id=5279095e&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit-virtual-artefact-text.vue?vue&type=style&index=0&id=41396c12&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edition-toolbox.vue?vue&type=style&index=0&id=09d02227&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./welcome.vue?vue&type=style&index=0&id=e39f7304&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./boundary-drawer.vue?vue&type=style&index=0&id=78699bb4&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./sign-attribute-modal.vue?vue&type=style&index=0&id=07993ad8&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./sign-attribute-pane.vue?vue&type=style&index=0&id=89f89e26&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./artefact-svg.vue?vue&type=style&index=0&id=64b5f752&lang=scss&scoped=true&\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edition-public-list.vue?vue&type=style&index=0&id=4d78bc59&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./zoom-toolbox.vue?vue&type=style&index=0&id=7b81375e&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./scroll-ruler.vue?vue&type=style&index=0&id=32c9ef3c&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./resizeBar.vue?vue&type=style&index=0&lang=css&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./scroll-top-toolbar.vue?vue&type=style&index=0&id=62d09e64&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CitationModal.vue?vue&type=style&index=0&id=71b47a76&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./artefact-editor-toolbar.vue?vue&type=style&index=0&id=0275fdb4&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./font-size-button-toolbox.vue?vue&type=style&index=0&id=d5e4ee74&lang=scss&scoped=true&\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edition-list.vue?vue&type=style&index=0&id=08756da2&lang=scss&scoped=true&\"","module.exports = __webpack_public_path__ + \"img/logo_antiquity.4c8b8ea3.png\";","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./text-sign.vue?vue&type=style&index=1&id=2017e88b&lang=scss&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\",\"dir\":_vm.$t('dir'),\"onResize\":\"showScreenSizeAlert($event)\"}},[(!_vm.waiting)?_c('navbar'):_vm._e(),(_vm.waiting)?_c('div',[_c('Waiting')],1):_vm._e(),(!_vm.waiting)?_c('div',{staticClass:\"container-fluid\",attrs:{\"id\":\"main-container\"}},[_c('router-view')],1):_vm._e(),_c('corrupted-state-dialog'),_c('screen-size-alert',{attrs:{\"visible\":_vm.alertVisible}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('b-navbar',{attrs:{\"toggleable\":\"md\",\"id\":\"main-nav-bar\",\"active\":\"\",\"type\":\"dark\",\"variant\":\"light\"}},[_c('b-navbar-brand',{staticClass:\"brand-1 m-0 mt-mb-auto pt-0 pb-0 d-flex flex-row justify-content-between align-items-ceter\",attrs:{\"to\":\"/\",\"align\":\"left\",\"id\":\"brand-1\"}},[_c('img',{staticClass:\"logo pb-1\",attrs:{\"id\":\"brand-icon\",\"src\":require(\"../../assets/images/favicon-32x32.png\")}}),_c('span',{staticClass:\"m-0 p-0 pb-1 d-none d-xl-flex\",attrs:{\"id\":\"brand-text\"}},[(_vm.isActive)?_c('router-link',{attrs:{\"to\":\"/home\"}},[_vm._v(\" \"+_vm._s(_vm.$t('home.brand'))+\" \")]):_c('router-link',{attrs:{\"to\":\"/\"}},[_vm._v(\" \"+_vm._s(_vm.$t('home.brand'))+\" \")])],1)]),(_vm.edition)?_c('b-navbar-nav',{staticClass:\"m-0 mt-mb-auto ml-xl-5 ml-lg-5 ml-md-0 ml-sm-0 d-flex\"},[_c('edition-toolbox'),_c('b-nav-item',{attrs:{\"to\":{ path: (\"/editions/\" + (_vm.edition.id) + \"/artefacts\") },\"active-class\":\"\"}},[_c('span',[_vm._v(\" \"+_vm._s(_vm.edition.name)+\" \"),_c('b-badge',{class:_vm.editionBadgeClass},[_vm._v(\" \"+_vm._s(_vm.editionBadge))])],1)]),_c('b-nav-item',{attrs:{\"to\":(\"/editions/\" + (_vm.edition.id) + \"/scroll-editor/\")}},[_vm._v(\" Manuscript \")]),_c('b-nav-item',{attrs:{\"to\":_vm.artefactLink}},[_vm._v(_vm._s(_vm.artefactLabel))]),_c('b-nav-item',{attrs:{\"to\":_vm.imagedObjectLink}},[_vm._v(_vm._s(_vm.imagedObjectLabel))])],1):_vm._e(),_c('b-navbar-nav',{staticClass:\"ml-auto\"}),_c('b-navbar-nav',{staticClass:\"search-user-nav\",attrs:{\"toggleable\":\"\",\"align\":\"right\"}},[_c('b-nav-item',{attrs:{\"active\":\"\"}},[_c('b-button',{staticClass:\"navbar-button\",attrs:{\"size\":\"sm\",\"variant\":\"outline\"},on:{\"click\":_vm.reportProblemModal}},[_c('i',{directives:[{name:\"b-tooltip\",rawName:\"v-b-tooltip.hover.bottomleft\",value:('Report Problem'),expression:\"'Report Problem'\",modifiers:{\"hover\":true,\"bottomleft\":true}}],staticClass:\"fa fa-exclamation-triangle\",staticStyle:{\"font-size\":\"1.3rem\"},attrs:{\"aria-hidden\":\"true\"}})])],1),_c('b-nav-item',{attrs:{\"to\":\"/search\",\"active\":\"\"}},[_c('b-button',{staticClass:\"navbar-button\",attrs:{\"size\":\"sm\",\"variant\":\"outline\"}},[_c('i',{directives:[{name:\"b-tooltip\",rawName:\"v-b-tooltip.hover.bottomleft\",value:(_vm.$t('home.search')),expression:\"$t('home.search')\",modifiers:{\"hover\":true,\"bottomleft\":true}}],staticClass:\"fa fa-search fa-2x green-text\",staticStyle:{\"font-size\":\"1.3rem\"},attrs:{\"aria-hidden\":\"true\"}})])],1),_c('b-nav-item-dropdown',{directives:[{name:\"b-tooltip\",rawName:\"v-b-tooltip.hover.bottomleft\",value:('User Account'),expression:\"'User Account'\",modifiers:{\"hover\":true,\"bottomleft\":true}}],attrs:{\"id\":\"register\",\"right\":\"\"}},[_c('template',{attrs:{\"size\":\"xs\"},slot:\"button-content\"},[_c('b-button',{attrs:{\"variant\":\"outline\",\"size\":\"sm\"}},[_c('i',{staticClass:\"fa fa-user fa-2x green-text\",staticStyle:{\"font-size\":\"1.3rem\"},attrs:{\"aria-hidden\":\"true\"}})])],1),(_vm.userNameExists)?_c('b-dropdown-item',{staticClass:\"logout\"},[_c('b',[_vm._v(\" \"+_vm._s(_vm.userName)+\" \")])]):_vm._e(),(!_vm.isActive)?_c('b-dropdown-item',{staticClass:\"logout\",on:{\"click\":function($event){return _vm.login()}}},[_vm._v(\" \"+_vm._s(_vm.$t('navbar.login'))+\" \")]):_vm._e(),(_vm.isActive)?_c('b-dropdown-item',{staticClass:\"logout\",on:{\"click\":function($event){return _vm.logout()}}},[_vm._v(\" \"+_vm._s(_vm.$t('navbar.logout'))+\" \")]):_vm._e(),(_vm.isActive)?_c('b-dropdown-item',{on:{\"click\":function($event){return _vm.changePassword()}}},[_vm._v(\" \"+_vm._s(_vm.$t('navbar.changePassword'))+\" \")]):_vm._e(),(_vm.isActive)?_c('b-dropdown-item',{on:{\"click\":function($event){return _vm.updateUserDetails()}}},[_vm._v(\" \"+_vm._s(_vm.$t('navbar.updateUserDetails'))+\" \")]):_vm._e()],2),_c('b-nav-item-dropdown',{staticClass:\"bm-0 p-0 pl-1 pr-1\",attrs:{\"id\":\"hamburger\",\"right\":\"\",\"text-center\":\"\",\"no-caret\":\"\"}},[_c('template',{attrs:{\"size\":\"xs\"},slot:\"button-content\"},[_c('b-icon',{staticClass:\"border rounded\",attrs:{\"icon\":\"list\",\"font-scale\":\"1.6\"}})],1),_c('b-dropdown-item',{attrs:{\"id\":\"popover-target-home\",\"placement\":\"left\"},on:{\"click\":_vm.goHome}},[_vm._v(\" \"+_vm._s(_vm.$t('navbar.home'))+\" \")]),(_vm.isActive)?_c('b-dropdown-item',{attrs:{\"placement\":\"left\"},on:{\"click\":_vm.goPrivate}},[_vm._v(_vm._s(_vm.$t('home.personalEditions')))]):_vm._e(),_c('b-dropdown-item',{attrs:{\"placement\":\"left\"},on:{\"click\":_vm.goPublic}},[_vm._v(_vm._s(_vm.$t('home.publicEditions')))]),_c('b-dropdown-divider'),_c('b-dropdown-item',{attrs:{\"id\":\"popover-target-about\",\"placement\":\"left\"},on:{\"click\":_vm.goAbout}},[_vm._v(\" \"+_vm._s(_vm.$t('navbar.about'))+\" \")]),_c('b-dropdown-item',{attrs:{\"id\":\"popover-target-faq\",\"placement\":\"left\"},on:{\"click\":_vm.showFAQModal}},[_vm._v(\" \"+_vm._s(_vm.$t('navbar.faq'))+\" \")]),_c('faq-modal'),_c('b-dropdown-item',{attrs:{\"id\":\"popover-target-eula\",\"placement\":\"left\"},on:{\"click\":_vm.showEulaModal}},[_vm._v(\" \"+_vm._s(_vm.$t('navbar.eula'))+\" \")]),_c('eula-modal'),_c('b-dropdown-item',{on:{\"click\":_vm.showCitation}},[_vm._v(\" \"+_vm._s(_vm.$t('navbar.cite'))+\" \")]),_c('citation-modal'),_c('b-dropdown-divider'),_c('b-dropdown-item',{attrs:{\"placement\":\"left\"},on:{\"click\":_vm.goGuide}},[_vm._v(_vm._s(_vm.$t('home.userGuide')))]),_c('b-dropdown-divider'),_c('b-dropdown-item',{attrs:{\"placement\":\"left\"},on:{\"click\":_vm.reportProblemModal}},[_vm._v(_vm._s(_vm.$t('home.reportProblem')))]),_c('report-problem-modal'),_c('b-dropdown-item',{on:{\"click\":_vm.contactUs}},[_vm._v(\" \"+_vm._s(_vm.$t('navbar.contactus'))+\" \")])],2)],1)],1),_c('login'),_c('register')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export default {\r\n cancel: 'Delete ROI',\r\n new: 'New Artefact',\r\n current: 'Current',\r\n copy: 'Copy Edition',\r\n copyToEdition: 'Copy To Edition',\r\n anotherCopy: 'Create another copy',\r\n permission: 'Permission',\r\n draw: 'Draw',\r\n erase: 'Erase',\r\n box: 'Box',\r\n rename: 'Rename',\r\n remove: 'Remove',\r\n create: 'Create',\r\n undo: 'Undo',\r\n redo: 'Redo',\r\n up: 'Switch Up',\r\n down: 'Switch Down',\r\n actions: 'Actions',\r\n metrics: 'Metrics',\r\n save: 'Save',\r\n load: 'Load',\r\n add: 'Add',\r\n invite: 'Invite',\r\n auto: 'Auto',\r\n select: 'Select',\r\n edit: 'Edit',\r\n view: 'View',\r\n side: 'Side',\r\n collapsedsidebar: 'Menu TextFragment',\r\n collapsedsidebarObject: 'Menu ImageObject',\r\n collapsedsidebarArtefact: 'Menu Artefact',\r\n leftRotate: 'Left Rotate',\r\n rightRotate: 'Right Rotate',\r\n editSign: 'Edit sign',\r\n deleteSign: 'Delete sign',\r\n editLine: ' Edit line',\r\n addLineBefore: ' Add a line before',\r\n addLineAfter: ' Add a line after',\r\n deleteLine: 'Delete this line',\r\n addToLeft: 'Add to left',\r\n addToRight: 'Add to right',\r\n showQwbVariants: 'Show QD Variants',\r\n showQwbParallels: 'Show QD Parallels',\r\n noImages: 'No Images Available',\r\n report: 'Report'\r\n};\r\n","export default {\r\n home: 'Home',\r\n about: 'About',\r\n faq: 'FAQ',\r\n cite: 'Cite',\r\n eula: 'Terms of Use',\r\n documentation: 'Documentation',\r\n contactus: 'Contact Us',\r\n login: 'Log in',\r\n logout: 'Logout',\r\n\r\n forename: 'Forename',\r\n surname: 'Surname',\r\n email: 'Email',\r\n password: 'Password',\r\n repassword: 'Repeat Password',\r\n organization: 'Organization',\r\n enterYourPassword: 'Enter your Password',\r\n\r\n registration: 'Registration',\r\n register: 'Register',\r\n start: 'Start Working',\r\n\r\n changePassword: 'Change Password',\r\n currentPassword: 'Current Password',\r\n newPassword: 'New Password',\r\n change: 'Change',\r\n updateUserDetails: 'Update User Details',\r\n update: 'Update',\r\n\r\n forgotPassword: 'Forgot Password',\r\n changeForgottenPassword: 'Change Forgotten Password',\r\n\r\n activateUser: 'Activate User',\r\n activate: 'Activate',\r\n\r\n confirmInvitation: 'Confirm Invitation',\r\n accept: 'Accept'\r\n};\r\n","export default {\r\n server: 'Unspecified Server Error',\r\n server2: 'Invalid Username or Password',\r\n notFound: {\r\n imagedObject: 'Imaged Object {id} not found',\r\n edition: 'Edition {id} not found',\r\n }\r\n};\r\n","export default {\r\n brand: 'Scripta Qumranica Electronica',\r\n filter: 'Filter by',\r\n show: 'Show',\r\n search: 'Search',\r\n view: 'View',\r\n side: 'Side',\r\n sort: 'Sort by',\r\n publicEditionGroupCount: 'No public editions | One public edition | Public Editions ({count})',\r\n personalEditionGroupCount: 'No personal editions | One personal edition | Personal Editions ({count})',\r\n publicEditionCount: ' | public edition | public editions',\r\n personalVersionCount: ' | personal edition | personal editions',\r\n personalEditions: 'Personal Editions',\r\n publicEditions: 'Public Editions',\r\n userGuide: 'User Guide',\r\n shares: ' | share | shares',\r\n artefacts: 'Artefacts',\r\n scroll: 'Scroll',\r\n versions: 'Versions',\r\n columns: 'Columns',\r\n imagedObjects: 'Imaged Objects',\r\n copyTitle: 'Copy {name} by {owner}',\r\n newEditionName: 'New Edition Name',\r\n newEditionDesc: 'Please provide a name for the new edition',\r\n copyingEdition: 'Copying edition',\r\n noVersions: 'No other versions',\r\n\r\n newArtefactName: 'New Artefact Name',\r\n newArtefact: 'New Artefact',\r\n creatingNewArtefact: 'Creating New Artefact',\r\n undo: 'Undo',\r\n redo: 'Redo',\r\n filterArtefacts: 'Filter Artefacts',\r\n both: 'Both',\r\n editionInfo: 'Edition Info',\r\n editionSize: 'Edition Size',\r\n viewPortSize: 'Viewport Size',\r\n lock: 'Read Only',\r\n shared: 'Shared',\r\n admin: 'Your Admin rights have been revoked',\r\n editorParameters: 'Editor Parameters',\r\n reportProblem: 'Report Problem'\r\n};\r\n","export default {\r\n repairPolygon: 'Error trying to repair polygon..',\r\n passwordChanged: 'Your password changed',\r\n reset: 'A reset link has been sent to your email',\r\n activationLink: 'An activation link has been sent to your email',\r\n detailsChanged: 'Your details changed',\r\n\r\n artefactInfo: 'No changes to save',\r\n artefactSuccess: 'Artefact Saved',\r\n artefactError: 'Saving Artefact Failed',\r\n artefactsAutoModeError: 'Auto mode is not possible when more than one letter is selected',\r\n\r\n editionSuccess: 'Edition renamed',\r\n editionError: 'Edition rename failed',\r\n\r\n editionDeleteSuccess: 'Edition deleted',\r\n editionDeleteError: 'Edition delete failed',\r\n\r\n invitationSent: 'Invitation sent to {email}',\r\n permissionsUpdated: 'Permissions of {email} updated',\r\n\r\n NoChangesDetected: 'No changes detected',\r\n imagedObjectFailed: 'Imaged Object Save Failed',\r\n imagedObjectSaved: 'Imaged Object Saved',\r\n\r\n artefactCreated: 'Artefact Created',\r\n artefactCreatedFailed: 'Artefact creation failed',\r\n\r\n artefactRenamed: 'Artefact renamed',\r\n artefactRenameFailed: 'Artefact rename failed',\r\n\r\n artefactDeleted: 'Artefact deleted',\r\n deleteArtefactFailed: 'Delete artefact failed',\r\n artefactCantOverlap: \"Artefact can't overlap other artefacts\",\r\n\r\n attributeDeletedBySomeoneElse: 'Attribute was deleted by another user'\r\n};\r\n\r\n","import misc from './misc';\r\nimport navbar from './navbar';\r\nimport error from './error';\r\nimport home from './home';\r\nimport toasts from './toasts';\r\n\r\nexport default {\r\n error,\r\n misc,\r\n navbar,\r\n home,\r\n toasts,\r\n display: 'English',\r\n dir: 'ltr',\r\n};\r\n","export default {\r\n cancel: 'Annuler',\r\n new: 'Nouveau Artefact',\r\n current: 'Actuel',\r\n copy: 'Cree une copie',\r\n anotherCopy: 'Cree une autre copie',\r\n permission: 'Autorisation',\r\n draw: 'Dessiner',\r\n box: 'Box',\r\n rename: 'Renommer',\r\n remove: 'Retirer',\r\n create: 'Créer',\r\n undo: 'Annuler',\r\n redo: 'Refaire',\r\n up: 'Vers le haut',\r\n down: 'Vers le bas',\r\n actions: 'Actions',\r\n metrics: 'Métrique',\r\n save: 'Enregistrer',\r\n load: 'Charge',\r\n auto: 'Auto',\r\n select: 'Sélectionner',\r\n collapsedsidebar: 'Menu TextFragment',\r\n collapsedsidebarObject: 'Menu ImageObject',\r\n collapsedsidebarArtefact: 'Menu Artefact',\r\n leftRotate: 'Rotation à gauche',\r\n rightRotate: 'Rotation à droite',\r\n editSign: 'Modifier le signe',\r\n deleteSign: 'Supprimer le signe',\r\n addToLeft: 'Ajouter à gauche',\r\n addToRight: 'Ajouter à droite'\r\n};\r\n","export default {\r\n home: 'Acceuil',\r\n about: 'A Propos',\r\n login: 'Connection',\r\n logout: 'Déconnexion',\r\n\r\n forename: 'Prénom',\r\n surname: 'Nom de famille',\r\n email: 'Email',\r\n password: 'Mot de passe',\r\n repassword: 'Entre à nouveau le mot de passe ',\r\n organization: 'Organisation',\r\n enterYourPassword: 'Entrez votre mot de passe',\r\n\r\n registration: 'Inscription',\r\n register: \"S'inscrire\",\r\n\r\n changePassword: 'Changer de Mot de Passe',\r\n currentPassword: 'Mot de passe actuel',\r\n newPassword: 'Nouveau Mot de passe',\r\n change: 'Changer',\r\n updateUserDetails: \"Mise à jour des détails de l'utilisateur\",\r\n update: 'Mise à jour',\r\n\r\n forgotPassword: 'Mot de passe oublié?',\r\n changeForgottenPassword: 'Changer votre mot de passe oublié',\r\n\r\n activateUser: 'Utilisateur Activé',\r\n activate: 'Activer',\r\n\r\n confirmInvitation: 'Confirmation de l\\'invitation',\r\n accept: 'Accepter'\r\n};\r\n","export default {\r\n server: 'Erreur de Serveur non specifiée',\r\n server2: \"Nom d'utilisateur ou mot de passe non valides\",\r\n notFound: {\r\n imagedObject: \"L'Objet Image {id} est introuvable\",\r\n edition: \"L'Edition {id} est introuvable\",\r\n }\r\n};\r\n","export default {\r\n filter: \"Filtre d'éditions\",\r\n publicEditionGroupCount: \"Pas d'éditions publiques | Une édition publique | éditions publiques ({count})\",\r\n personalEditionGroupCount: 'Aucune édition personnelle | Une édition personnelle | éditions personnelles ({count}) ',\r\n publicEditionCount: ' | édition publique | éditions publiques',\r\n personalVersionCount: ' | édition personnelle | éditions personnelles',\r\n shares: ' | partage | partages',\r\n artefacts: 'Artefacts',\r\n versions: 'Versions',\r\n columns: 'Collones',\r\n imagedObjects: 'Objets',\r\n copyTitle: 'Copie {name} par {owner}',\r\n newEditionName: \"Nouveau nom d'édition\",\r\n newEditionDesc: 'Veillez nommer la nouvelle édition',\r\n copyingEdition: 'Edition Copiée',\r\n noVersions: 'Aucune autre version',\r\n\r\n newArtefactName: \"Nouveau nom de l'Artefact\",\r\n newArtefact: 'Nouveau Artefact',\r\n creatingNewArtefact: 'Création du nouvel Artefact',\r\n undo: 'Annuler',\r\n redo: 'Refaire',\r\n filterArtefacts: \"Filtre d'Artefacts\",\r\n both: 'Recto et Verso',\r\n editionInfo: 'Edition Info',\r\n editionSize: \"Taille de l'édition\",\r\n viewPortSize: \"Taille d'affichage\",\r\n lock: 'Lecture seulement',\r\n shared: 'Partagé',\r\n admin: \"Vos droits d'administrateur ont été révoqués\",\r\n search: 'Recherche'\r\n};\r\n","export default {\r\n repairPolygon: \"Une erreur s'est produite en tentant de réparer le polygone...\",\r\n passwordChanged: 'Votre mot de passe a changé',\r\n reset: 'Un lien de réinitialisation a été envoyé à votre adresse e-mail',\r\n activationLink: \"Un lien d'activation a été envoyé à votre email\",\r\n detailsChanged: 'Vos coordonnées ont changé',\r\n\r\n artefactInfo: 'Aucune modification à enregistrer',\r\n artefactSuccess: 'Artefact sauvegardé',\r\n artefactError: 'La sauvegarde de l\\'artefact a echoué',\r\n artefactsAutoModeError: 'Le mode automatique n\\'est pas possible lorsque plus d\\'une lettre est sélectionnée',\r\n\r\n editionSuccess: 'Edition renommée',\r\n editionError: 'Le renommage de l\\'édition a échoué',\r\n\r\n editionDeleteSuccess: 'edition supprimée',\r\n editionDeleteError: 'La suppression de l\\'édition a échoué',\r\n\r\n invitationSent: 'Invitation envoyée à {email}',\r\n permissionsUpdated: 'Autorisations de {email} mises à jour',\r\n\r\n NoChangesDetected: 'Aucun changement détecté',\r\n imagedObjectFailed: 'La sauvegarde de l\\'Imaged Object à echoué',\r\n imagedObjectSaved: 'Imaged Object sauvegardé',\r\n\r\n artefactCreated: 'Artefact créé',\r\n artefactCreatedFailed: 'La creation de l\\'artefact à echoué',\r\n\r\n artefactRenamed: 'Artefact renommé',\r\n artefactRenameFailed: 'Le renommage de l\\'artefact à échoué',\r\n\r\n artefactDeleted: 'Artefact supprimé',\r\n deleteArtefactFailed: \"Échec de la suppression de l'artefact\",\r\n artefactCantOverlap: \"L'artefact ne peut pas superposer d'autres artefacts\"\r\n\r\n // TODO: Translate attributeDeletedBySomeoneElse to French\r\n};\r\n\r\n","import misc from './misc';\r\nimport navbar from './navbar';\r\nimport error from './error';\r\nimport home from './home';\r\nimport toasts from './toasts';\r\n\r\nexport default {\r\n error,\r\n misc,\r\n navbar,\r\n home,\r\n toasts,\r\n display: 'Français',\r\n dir: 'ltr',\r\n};\r\n","import en from './en/index';\r\nimport fr from './fr/index';\r\n\r\nconst localizedTexts = { en , fr };\r\n\r\nexport {\r\n localizedTexts,\r\n};\r\n","import { DetailedUserDTO } from '@/dtos/sqe-dtos';\r\n\r\nexport class SessionState {\r\n public user: DetailedUserDTO | null;\r\n\r\n public constructor() {\r\n this.user = null;\r\n }\r\n\r\n public get language(): string {\r\n return localStorage.getItem('language') || 'en';\r\n }\r\n\r\n public set language(lang: string) {\r\n localStorage.setItem('language', lang);\r\n }\r\n\r\n public get token(): string | undefined {\r\n return localStorage.getItem('token') || undefined;\r\n }\r\n\r\n public set token(token: string | undefined) {\r\n if (!token) {\r\n localStorage.removeItem('token');\r\n } else {\r\n localStorage.setItem('token', token);\r\n }\r\n }\r\n}\r\n","import { EditionInfo, ArtefactGroup } from '@/models/edition';\r\nimport { ImagedObject } from '@/models/imaged-object';\r\nimport { Artefact } from '@/models/artefact';\r\nimport { Image } from '@/models/image';\r\nimport { TextFragment, InterpretationRoi, SignInterpretation, RoiStatus } from '@/models/text';\r\nimport { StateManager } from '.';\r\n\r\nexport interface ItemWithId {\r\n id: U;\r\n}\r\n\r\nabstract class StateCollection, U = number> {\r\n private _items: T[];\r\n private _current: T | null;\r\n\r\n constructor() {\r\n this._items = [];\r\n this._current = null;\r\n }\r\n\r\n public get items(): T[] {\r\n return this._items;\r\n }\r\n\r\n public set items(items: T[]) {\r\n this._items = items;\r\n this._current = null;\r\n }\r\n\r\n public get current(): T | null {\r\n return this._current;\r\n }\r\n\r\n public set current(item: T | null) {\r\n if (item) {\r\n if (this._items) {\r\n const existing = this._items.find((a) => a.id === item.id);\r\n if (!existing) {\r\n this._items = [];\r\n // reset items, so it will load the list from the server when the list will be needed\r\n }\r\n }\r\n this._current = item;\r\n } else {\r\n this._current = null;\r\n }\r\n }\r\n\r\n // public find(id: U): T | undefined {\r\n // if (!this._items) {\r\n // return undefined;\r\n // }\r\n // return this._items.find((it) => it.id === id);\r\n // }\r\n\r\n public find(id: U): T | null { // } | undefined {\r\n if (!this._items) {\r\n return null;\r\n }\r\n const res = this._items.find((it) => it.id === id);\r\n return (undefined === res ) ? null : res ;\r\n }\r\n\r\n public update(entity: T, failIfNotFound = true) {\r\n const idx = this._items.findIndex((it) => it.id === entity.id);\r\n if (idx === -1) {\r\n if (failIfNotFound) {\r\n throw new Error(`Can't update entity ${entity.id}, it is not in the collection`);\r\n }\r\n }\r\n const newItems = [...this._items]; // Create a new copy, for reactiveness\r\n newItems[idx] = entity;\r\n this.replaceItems(newItems);\r\n }\r\n\r\n public remove(entityId: U, failIfNotFound = true) {\r\n const idx = this._items.findIndex((it) => it.id === entityId);\r\n if (idx === -1) {\r\n if (failIfNotFound) {\r\n throw new Error(`Can't delete entity ${entityId}, it is not in the collection`);\r\n }\r\n }\r\n\r\n if (this._current && this._current.id === entityId) {\r\n this._current = null;\r\n }\r\n\r\n const newItems = [...this._items]; // Create a new copy, for reactiveness\r\n newItems.splice(idx, 1);\r\n this.replaceItems(newItems);\r\n }\r\n\r\n public add(entity: T, failIfExisting = true) {\r\n if (this.find(entity.id)) {\r\n if (failIfExisting) {\r\n throw new Error(`Can't add entity ${entity.id} ,it is already in the collection`);\r\n }\r\n return;\r\n }\r\n\r\n const newItems = [...this._items, entity];\r\n this.replaceItems(newItems);\r\n }\r\n\r\n protected replaceItems(newItems: T[]) {\r\n const oldCurrent = this._current;\r\n this.items = newItems;\r\n const newCurrent = oldCurrent && this.find(oldCurrent.id);\r\n this.current = (undefined === newCurrent) ? null : newCurrent;\r\n // this.current = newCurrent;\r\n }\r\n}\r\n\r\n// A cache of items, with a limit on the number of cached items.\r\n// Inspired by https://medium.com/sparkles-blog/a-simple-lru-cache-in-typescript-cba0d9807c40\r\nabstract class StateCache, U = number> {\r\n private _entries: Map = new Map();\r\n private _maxEntries: number = 200;\r\n\r\n constructor(maxEntries = 200) {\r\n this._maxEntries = maxEntries;\r\n }\r\n\r\n public get(key: U): T | undefined {\r\n const entry = this._entries.get(key);\r\n if (entry) {\r\n // Add entry again, pushing it to the back of the key list (last to be removed)\r\n this._entries.delete(key);\r\n this._entries.set(key, entry!);\r\n }\r\n\r\n return entry;\r\n }\r\n\r\n public put(key: U, value: T) {\r\n\r\n if (this._entries.size >= this._maxEntries) {\r\n // least-recently used cache eviction strategy\r\n // Map keeps keys in the order they were added\r\n const keyToDelete = this._entries.keys().next().value;\r\n this._entries.delete(keyToDelete);\r\n }\r\n this._entries.set(key, value);\r\n }\r\n}\r\n\r\n// A map of items, used for holding\r\nabstract class StateMap, U = number> {\r\n private _entries = new Map();\r\n private _frontendToServerIdMap = new Map();\r\n private _serverToFrontendIdMap = new Map();\r\n\r\n public get(key: U, considerServerIds = false): T | undefined {\r\n let actualKey: U | undefined = key;\r\n\r\n if (!this._entries.has(key) && considerServerIds) {\r\n if (this._frontendToServerIdMap.has(key)) {\r\n actualKey = this._frontendToServerIdMap.get(key);\r\n } else if (this._serverToFrontendIdMap.has(key)) {\r\n actualKey = this._serverToFrontendIdMap.get(key);\r\n }\r\n\r\n if (!actualKey) {\r\n return undefined;\r\n }\r\n }\r\n\r\n const entry = this._entries.get(actualKey);\r\n return entry;\r\n }\r\n\r\n public put(entry: T) {\r\n return this._entries.set(entry.id, entry);\r\n }\r\n\r\n public get size() {\r\n return this._entries.size;\r\n }\r\n\r\n public get keys() {\r\n return this._entries.keys();\r\n }\r\n\r\n public *getItems() {\r\n for (const key of this._entries.keys()) {\r\n yield this._entries.get(key)!;\r\n }\r\n }\r\n\r\n public setItems(items: Iterable) {\r\n this._entries.clear();\r\n for (const item of items) {\r\n this.put(item);\r\n }\r\n }\r\n\r\n public clear() {\r\n this._entries.clear();\r\n this._frontendToServerIdMap.clear();\r\n }\r\n\r\n public delete(id: U) {\r\n this._entries.delete(id);\r\n }\r\n\r\n // Sometimes we generate entity IDs in the frontend - when creating new entities. When the entities are saved\r\n // the server returns their new - final ID. We update the state, but the undo stack still contains the old frontend-only\r\n // IDs.\r\n //\r\n // We map these frontend IDs to server IDs here.\r\n // Note that we do not do anything with these IDs, all logic should be implemented by the different view and operation\r\n // classes.\r\n public mapFrontendIdToServerId(frontendId: U, serverId: U) {\r\n this._frontendToServerIdMap.set(frontendId, serverId);\r\n this._serverToFrontendIdMap.set(serverId, frontendId);\r\n }\r\n\r\n public getServerId(frontendId: U): U | undefined {\r\n return this._frontendToServerIdMap.get(frontendId);\r\n }\r\n}\r\n\r\n\r\n\r\nexport class EditionCollection extends StateCollection { }\r\n\r\nexport class ImagedObjectCollection extends StateCollection { }\r\n\r\nexport class ArtefactCollection extends StateCollection { }\r\n\r\nexport class ArtefactGroupsMap extends StateMap { }\r\n\r\nexport class TextFragmentMap extends StateMap { }\r\n\r\nexport class ImageCache extends StateCache { }\r\n\r\nfunction state() {\r\n return StateManager.instance;\r\n}\r\nexport class InterpretationRoiMap extends StateMap {\r\n public put(entry: InterpretationRoi) {\r\n this.attachRoiToArtefact(entry);\r\n return super.put(entry);\r\n }\r\n\r\n public delete(id: number) {\r\n const entry = this.get(id);\r\n if (!entry) {\r\n console.warn(`Can't remove ROI ${id} - it is not in the ROI state map`);\r\n return;\r\n }\r\n this.detachRoiFromArtefact(entry, entry.status);\r\n return super.delete(id);\r\n }\r\n\r\n public clear() {\r\n for (const artefact of state().artefacts.items) {\r\n artefact.rois = [];\r\n }\r\n super.clear();\r\n }\r\n\r\n // InterperationROIs are marked as deleted and not actually deleted (so undeleting is easy)\r\n // We do not want to track deleted ROIs in artefacts\r\n public attachRoiToArtefact(entry: InterpretationRoi) {\r\n const artefact = state().artefacts.find(entry.artefactId);\r\n if (!artefact) {\r\n console.warn(`Adding ROI for artefact ${entry.artefactId}, while artefact is not in state`);\r\n } else {\r\n const roiIndex = artefact.rois.findIndex(roi => roi.id === entry.id);\r\n if (roiIndex === -1) {\r\n artefact.rois.push(entry);\r\n }\r\n }\r\n }\r\n\r\n public detachRoiFromArtefact(entry: InterpretationRoi, status: RoiStatus) {\r\n const artefact = state().artefacts.find(entry.artefactId);\r\n if (!artefact) {\r\n console.warn(`Adding ROI for artefact ${entry.artefactId}, while artefact is not in state`);\r\n } else {\r\n const roiIndex = artefact.rois.findIndex(roi => roi.id === entry.id);\r\n if (roiIndex === -1) {\r\n console.warn(`Can't removing ROI ${entry.id} from artefact ${entry.artefactId}, it is not in its ROI list`);\r\n } else {\r\n const roi = artefact.rois[roiIndex];\r\n if (status === 'deleted') {\r\n artefact.deleteRois.push(roi);\r\n }\r\n artefact.rois.splice(roiIndex, 1);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport class SignInterpretationMap extends StateMap {\r\n public put(entry: SignInterpretation) {\r\n this.attachSignInterpretationToArtefact(entry);\r\n return super.put(entry);\r\n }\r\n\r\n public delete(id: number) {\r\n const si = state().signInterpretations.get(id);\r\n if (!si) {\r\n console.warn(`Can't delete sign interpretaetion ${id}, it is not in the state`);\r\n return;\r\n }\r\n\r\n this.detachSignInterprerationFromArtefact(si);\r\n }\r\n\r\n public attachSignInterpretationToArtefact(si: SignInterpretation) {\r\n for (const roi of si.rois) {\r\n const artefact = state().artefacts.find(roi.artefactId);\r\n if (!artefact) {\r\n console.warn(`Can't find artefact ${roi.artefactId} for ROI ${roi.id}`);\r\n continue;\r\n }\r\n\r\n const index = artefact.signInterpretations.findIndex(s => s.id === si.id);\r\n if (index === -1) {\r\n artefact.signInterpretations.push(si);\r\n }\r\n }\r\n }\r\n\r\n public detachSignInterprerationFromArtefact(si: SignInterpretation) {\r\n for (const roi of si.rois) {\r\n const artefact = state().artefacts.find(roi.artefactId);\r\n if (!artefact) {\r\n console.warn(`Can't find artefact ${roi.artefactId} for ROI ${roi.id}`);\r\n continue;\r\n }\r\n\r\n const index = artefact.signInterpretations.findIndex(s => s.id === si.id);\r\n if (index === -1) {\r\n console.warn(`Can't remove sign interpretation ${si.id} from artefact ${artefact.id} - it is not in its signInterpretations array`);\r\n } else {\r\n artefact.signInterpretations.splice(index, 1);\r\n }\r\n }\r\n }\r\n\r\n public clear() {\r\n for (const artefact of state().artefacts.items) {\r\n artefact.signInterpretations = [];\r\n }\r\n super.clear();\r\n }\r\n}\r\n\r\nexport interface SearchBarValue {\r\n filter?: string;\r\n side?: string;\r\n sort?: string;\r\n}\r\n\r\ninterface ReportIssueData {\r\n title: string;\r\n description: string;\r\n}\r\nexport class MiscState {\r\n public newEditionId!: number ;\r\n public editionSearchBarValue: SearchBarValue = { sort: 'lastEdit', side: 'recto and verso' };\r\n public reportIssueData?: ReportIssueData;\r\n}\r\n","/* File taken from the Scrollery Editor website\r\n *\r\n * File made Typescript friendly by setting all types to any and fixing minor issues\r\n * Svg objects where set to SVG type (which is a string for now)\r\n */\r\n\r\n// tslint:disable:no-conditional-assignment\r\n\r\n/*\r\n * This function transforms a well-known-text\r\n * polygon into an SVG path. When a boundingBox\r\n * is passed, then we translate every point based\r\n * on the x and y position of that bounding box.\r\n * Otherwise, we just add each point to the string\r\n * unaltered.\r\n */\r\nexport function wktPolygonToSvg(wkt: string , boundingRect?: any) {\r\n let svg = '';\r\n if (!wkt || wkt === '') {\r\n return '';\r\n }\r\n\r\n // Sometimes wkt polygons have some spaces in them, which we need to remove.\r\n // TODO: Switch to jsts for all polygon handling, instead of this code\r\n wkt = wkt.replace('POLYGON ((', 'POLYGON(('); // Trailing space after POLYGON\r\n wkt = wkt.replace(/,\\s/g, ','); // Space between numbers\r\n\r\n if (wkt.substring(0, 9) === 'POLYGON((') {\r\n const polygonInitRegex = /POLYGON/g;\r\n const parenInitRegex = /\\(/g;\r\n const parenEndRegex = /\\)/g;\r\n svg = '';\r\n const polygons = wkt.split('),(');\r\n /**\r\n * This can be sped up by multithreading the parsing of each polygon,\r\n * and also by building the string in a more modular fashion\r\n * so that we don't neet to check if (svg.slice(-1) !== 'M') for\r\n * every point in the polygon (i.e..\r\n */\r\n polygons.forEach((polygon: any) => {\r\n svg += 'M';\r\n let currentPolygonSVG = '';\r\n polygon = polygon.replace(polygonInitRegex, '');\r\n polygon = polygon.replace(parenInitRegex, '');\r\n polygon = polygon.replace(parenEndRegex, '');\r\n const points = polygon.split(',');\r\n const length = points.length;\r\n let firstPoint;\r\n\r\n if (boundingRect) {\r\n firstPoint = `${points[0].split(' ')[0] - boundingRect.x} ${points[0].split(' ')[1] -\r\n boundingRect.y}`;\r\n for (let i = 0, point; (point = points[i]); i++) {\r\n currentPolygonSVG += 'L';\r\n currentPolygonSVG += `${point.split(' ')[0] - boundingRect.x} ${point.split(' ')[1] -\r\n boundingRect.y}`;\r\n if (i === length - 1) {\r\n if (\r\n `${point.split(' ')[0] - boundingRect.x} ${point.split(' ')[1] - boundingRect.y}` !==\r\n firstPoint\r\n ) {\r\n currentPolygonSVG += `L${firstPoint}`;\r\n }\r\n }\r\n }\r\n } else {\r\n firstPoint = `${points[0].split(' ')[0]} ${points[0].split(' ')[1]}`;\r\n for (let i = 0, point; (point = points[i]); i++) {\r\n currentPolygonSVG += 'L';\r\n currentPolygonSVG += `${point.split(' ')[0]} ${point.split(' ')[1]}`;\r\n if (i === length - 1) {\r\n if (`${point.split(' ')[0]} ${point.split(' ')[1]}` !== firstPoint) {\r\n currentPolygonSVG += `L${firstPoint}`;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Delete the first L from the string and add it to the svg variable\r\n svg += currentPolygonSVG.substring(1);\r\n });\r\n }\r\n\r\n return svg;\r\n}\r\n\r\n/*\r\n * This function transforms a well-known-text\r\n * point into an SVG path.\r\n */\r\nexport function wktPointToSvg(geoJSON: any) {\r\n return geoJSON.substring(0, 6) === 'POINT('\r\n ? {\r\n x: parseFloat(geoJSON.split(' ')[0].replace('POINT(', '')),\r\n y: parseFloat(geoJSON.split(' ')[1]),\r\n }\r\n : undefined;\r\n}\r\n\r\n/*\r\n * This function receives a well-known-text\r\n * representation of a rectangle and parses\r\n * that to a JSON object with an x-origin,\r\n * y-origin, width, and hieght.\r\n */\r\nexport function wktParseRect(wkt: any) {\r\n let returnRect: any;\r\n if (wkt.substring(0, 9) === 'POLYGON((') {\r\n const rect = wkt.replace('POLYGON((', '');\r\n const coords = rect.split(',');\r\n const x = parseInt(coords[0].split(' ')[0]);\r\n const y = parseInt(coords[0].split(' ')[1]);\r\n const width = parseInt(coords[2].split(' ')[0]) - x;\r\n const height = parseInt(coords[2].split(' ')[1]) - y;\r\n returnRect = { x, y, width, height };\r\n }\r\n return returnRect;\r\n}\r\n\r\n/*\r\n * This function receives an SVG path and\r\n * converts it to a WKT Polygon.\r\n */\r\nexport function svgPolygonToWKT(svg: string) {\r\n if (!svg || svg === '') {\r\n return '';\r\n }\r\n let wkt: string = '';\r\n svg = svg.trim();\r\n if (svg.startsWith('M')) {\r\n const lineSegmentRegex = /\\sL\\s|L|L\\s|\\sL/g;\r\n const zTerminatorRegex = /Z/g;\r\n wkt = 'POLYGON(';\r\n const polygons = svg.split('M');\r\n polygons.forEach((poly: any) => {\r\n if (poly) {\r\n if (wkt === 'POLYGON(') {\r\n wkt += '(';\r\n } else {\r\n wkt += '),(';\r\n }\r\n let firstPoint;\r\n let points;\r\n const lines = poly\r\n .replace(lineSegmentRegex, ' ')\r\n .replace(zTerminatorRegex, '')\r\n .trim();\r\n points = lines.split(' ');\r\n firstPoint = points[0] + ' ' + points[1];\r\n for (let i = 0, length = points.length - 1; i <= length; i += 2) {\r\n wkt += points[i] + ' ' + points[i + 1];\r\n if (i + 2 > length) {\r\n if (points[i] + ' ' + points[i + 1] !== firstPoint) {\r\n wkt += ',' + firstPoint;\r\n }\r\n } else {\r\n wkt += ',';\r\n }\r\n }\r\n }\r\n });\r\n wkt += '))';\r\n }\r\n return wkt;\r\n}\r\n\r\n/*\r\n * This function receives an SVG path and\r\n * converts it to a GeoJSON Polygon.\r\n */\r\nexport function svgPolygonToGeoJSON(svg: string) {\r\n if (!svg || svg === '') {\r\n return '';\r\n }\r\n let json: any;\r\n svg = svg.trim();\r\n if (svg.startsWith('M')) {\r\n json = { type: 'Polygon', coordinates: [] };\r\n const lineSegmentRegex = /\\sL\\s|L|L\\s|\\sL/g;\r\n const zTerminatorRegex = /Z/g;\r\n const polygons = svg.split('M');\r\n polygons.forEach((poly: any, index: number) => {\r\n if (poly) {\r\n json.coordinates.push([]);\r\n const points = poly\r\n .replace(lineSegmentRegex, ' ')\r\n .replace(zTerminatorRegex, '')\r\n .trim()\r\n .split(' ');\r\n const length = points.length;\r\n const firstPoint = [Number(points[0]), Number(points[1])];\r\n for (let i = 0, point1, point2; (point1 = points[i]) && (point2 = points[i + 1]); i += 2) {\r\n json.coordinates[index - 1].push([Number(point1), Number(point2)]);\r\n if (i + 2 === length) {\r\n if (Number(point1) !== firstPoint[0] || Number(point2) !== firstPoint[1]) {\r\n json.coordinates[index - 1].push(firstPoint);\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n return json;\r\n}\r\n\r\n/*\r\n * This function receives an SVG path and\r\n * converts it to a Clipper Polygon.\r\n */\r\nexport function svgPolygonToClipper(svg: string) {\r\n if (!svg || svg === '') {\r\n return '';\r\n }\r\n let clipper: any;\r\n svg = svg.trim();\r\n if (svg.startsWith('M')) {\r\n clipper = [];\r\n const lineSegmentRegex = /\\sL\\s|L|L\\s|\\sL/g;\r\n const zTerminatorRegex = /Z/g;\r\n const polygons = svg.split('M');\r\n polygons.forEach((poly: any, index: number) => {\r\n if (poly) {\r\n clipper.push([]);\r\n let firstPoint;\r\n let points;\r\n const lines = poly\r\n .replace(lineSegmentRegex, ' ')\r\n .replace(zTerminatorRegex, '')\r\n .trim();\r\n points = lines.split(' ');\r\n firstPoint = { X: Number(points[0]), Y: Number(points[1]) };\r\n for (let i = 0, length = points.length - 1; i <= length; i += 2) {\r\n clipper[index - 1].push({ X: Number(points[i]), Y: Number(points[i + 1]) });\r\n if (i + 2 > length) {\r\n if (Number(points[i]) !== firstPoint.X || Number(points[i + 1]) !== firstPoint.Y) {\r\n clipper[index - 1].push(firstPoint);\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n return clipper;\r\n}\r\n\r\nexport function clipperToSVGPolygon(paths: any) {\r\n let svgPath: any;\r\n if (paths.constructor === Array && paths[0] && paths[0][0]) {\r\n svgPath = '';\r\n for (let i = 0, lengthI = paths.length; i < lengthI; i++) {\r\n const firstPoint = paths[i][0].X + ' ' + paths[i][0].Y;\r\n svgPath += 'M';\r\n let currentPolygonSVG = '';\r\n for (let j = 0, lengthJ = paths[i].length; j < lengthJ; j++) {\r\n currentPolygonSVG += 'L';\r\n currentPolygonSVG += paths[i][j].X + ' ' + paths[i][j].Y;\r\n if (j === lengthJ - 1) {\r\n if (paths[i][j].X + ' ' + paths[i][j].Y !== firstPoint) {\r\n currentPolygonSVG += 'L' + firstPoint;\r\n }\r\n }\r\n }\r\n svgPath += currentPolygonSVG.substring(1);\r\n }\r\n }\r\n\r\n return svgPath;\r\n}\r\n\r\n/*\r\n * This function receives an GeoJSON polygon and\r\n * converts it to a WKT Polygon.\r\n */\r\nexport function geoJSONPolygonToWKT(geoJSON: any) {\r\n let wkt: any;\r\n if (typeof geoJSON === 'string' && geoJSON.substring(0, 1) === '{') {\r\n geoJSON = JSON.parse(geoJSON.trim());\r\n }\r\n if (geoJSON.coordinates) {\r\n wkt = 'POLYGON(';\r\n for (let i = 0, poly; (poly = geoJSON.coordinates[i]); i++) {\r\n if (wkt === 'POLYGON(') {\r\n wkt += '(';\r\n } else {\r\n wkt += '),(';\r\n }\r\n const firstPoint = poly[0][0] + ' ' + poly[0][1];\r\n const lastElement = poly.length - 1;\r\n // tslint:disable-next-line:no-shadowed-variable\r\n for (let i = 0, point; (point = poly[i]); i++) {\r\n wkt += point[0] + ' ' + point[1];\r\n if (i === lastElement) {\r\n if (point[0] + ' ' + point[1] !== firstPoint) {\r\n wkt += ',' + firstPoint;\r\n }\r\n } else {\r\n wkt += ',';\r\n }\r\n }\r\n }\r\n wkt += '))';\r\n }\r\n return wkt;\r\n}\r\n\r\n/*\r\n * This function receives an HTML5 canvas\r\n * along with a svg path for the clipping mask\r\n * It then draws the svg path onto the canvas.\r\n */\r\nexport function clipCanvas(canvas: HTMLCanvasElement, svgClipPath: string, fillColor: string, scaleFactor: number) {\r\n const ctx = canvas.getContext('2d');\r\n if (!ctx) {\r\n throw new Error(`Can't get context from canvas ${canvas}`);\r\n }\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n ctx.globalCompositeOperation = 'source-over';\r\n ctx.fillStyle = fillColor;\r\n const polygons = svgClipPath.split('M').slice(1);\r\n ctx.beginPath();\r\n polygons.forEach((poly) => {\r\n const points = poly.split('L');\r\n for (let i = 0, length = points.length; i < length; i++) {\r\n const coordsStr = points[i].split(' ');\r\n const coords = coordsStr.map((s) => parseFloat(s) * scaleFactor);\r\n if (i === 0) {\r\n ctx.moveTo(coords[0], coords[1]);\r\n } else {\r\n ctx.lineTo(coords[0], coords[1]);\r\n }\r\n }\r\n });\r\n ctx.closePath();\r\n ctx.fill();\r\n}\r\n","// Return the count of elements in the array that fulfill some criteria\r\n// Originally we used array.filter(x=>criteria(x)).length\r\n// Bronson replaced it with a less readable but more efficient array.reduce((acc, x) => criteria(x) ? acc+1 : acc, 0)\r\n\r\n// So we just moved it to this handy function\r\nexport function countIf(array: T[], predicate: (element: T) => boolean) {\r\n // using array.filter creates a new array. array.reduce avoids this and just needs the accumulator\r\n return array.reduce((acc, element) => predicate(element) ? acc + 1 : acc, 0);\r\n}\r\n\r\nexport interface BoundingBoxInterface {\r\n x: number;\r\n y: number;\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport class BoundingBox implements BoundingBoxInterface {\r\n public x: number;\r\n public y: number;\r\n public width: number;\r\n public height: number;\r\n\r\n public static combine(boxes: BoundingBox[]): BoundingBox {\r\n if (!boxes.length) {\r\n throw new Error(\"Can't combine no bounding boxes\");\r\n }\r\n\r\n let minX = Number.POSITIVE_INFINITY;\r\n let maxX = Number.NEGATIVE_INFINITY;\r\n let minY = Number.POSITIVE_INFINITY;\r\n let maxY = Number.NEGATIVE_INFINITY;\r\n\r\n for ( const box of boxes) {\r\n minX = Math.min(minX, box.x);\r\n minY = Math.min(minY, box.y);\r\n maxX = Math.max(maxX, box.x + box.width);\r\n maxY = Math.max(maxY, box.y + box.height);\r\n }\r\n\r\n // return new BoundingBox(x1, y1, x2 - x1, y2 - y1);\r\n return new BoundingBox(minX, minY, maxX - minX, maxY - minY);\r\n }\r\n\r\n constructor(x: number = 0, y: number = 0, width: number = 0, height: number = 0) {\r\n this.x = x;\r\n this.y = y;\r\n this.width = width;\r\n this.height = height;\r\n }\r\n\r\n public toString() {\r\n return `(${this.x}, ${this.y}, ${this.width}, ${this.height})`;\r\n }\r\n}\r\n\r\n\r\nexport interface Point {\r\n x: number;\r\n y: number;\r\n}\r\n\r\nexport interface Rectangle {\r\n topLeft: Point;\r\n bottomRight: Point;\r\n}\r\n\r\nexport interface DropdownOption {\r\n displayName: string;\r\n name: string;\r\n}\r\n","// tslint:disable-next-line:no-var-requires\r\nconst clipperLib = require('js-clipper/clipper');\r\nimport * as jsts from 'jsts';\r\n\r\nimport { svgPolygonToWKT,\r\n svgPolygonToGeoJSON,\r\n svgPolygonToClipper,\r\n wktPolygonToSvg,\r\n geoJSONPolygonToWKT,\r\n clipperToSVGPolygon,\r\n} from './VectorFactory';\r\nimport { BoundingBox } from './helpers';\r\nimport { BCol } from 'bootstrap-vue';\r\n\r\n// A class representing a polygon. The internal representation is SVG.\r\n// We have methods that translate the polygon to other formats, and static factory methods that import\r\n// other formats into SVG.\r\n//\r\n// Please do not use the VectorFactory methods directly.\r\nexport class Polygon {\r\n public static add(a: Polygon, b: Polygon): Polygon {\r\n if (a.empty) {\r\n return b;\r\n }\r\n if (b.empty) {\r\n return a;\r\n }\r\n const cpr = new clipperLib.Clipper();\r\n cpr.AddPaths(a.clipper, clipperLib.PolyType.ptSubject, true);\r\n cpr.AddPaths(b.clipper, clipperLib.PolyType.ptClip, true);\r\n const solutionPaths = new clipperLib.Paths();\r\n\r\n cpr.Execute(\r\n clipperLib.ClipType.ctUnion,\r\n solutionPaths,\r\n clipperLib.PolyFillType.pftNonZero,\r\n clipperLib.PolyFillType.pftNonZero\r\n );\r\n\r\n const result = Polygon.fromClipper(solutionPaths);\r\n return result;\r\n }\r\n\r\n public static subtract(a: Polygon, b: Polygon): Polygon {\r\n if (a.empty || b.empty) {\r\n return a;\r\n }\r\n const cpr = new clipperLib.Clipper();\r\n cpr.AddPaths(a.clipper, clipperLib.PolyType.ptSubject, true);\r\n cpr.AddPaths(b.clipper, clipperLib.PolyType.ptClip, true);\r\n const solutionPaths = new clipperLib.Paths();\r\n\r\n cpr.Execute(\r\n clipperLib.ClipType.ctDifference,\r\n solutionPaths,\r\n clipperLib.PolyFillType.pftNonZero,\r\n clipperLib.PolyFillType.pftNonZero\r\n );\r\n\r\n const result = Polygon.fromClipper(solutionPaths);\r\n return result;\r\n }\r\n\r\n public static intersect(a: Polygon, b: Polygon): Polygon {\r\n if (a.empty || b.empty) {\r\n return new Polygon();\r\n }\r\n\r\n const cpr = new clipperLib.Clipper();\r\n cpr.AddPaths(a.clipper, clipperLib.PolyType.ptSubject, true);\r\n cpr.AddPaths(b.clipper, clipperLib.PolyType.ptClip, true);\r\n const solutionPaths = new clipperLib.Paths();\r\n\r\n cpr.Execute(\r\n clipperLib.ClipType.ctIntersection,\r\n solutionPaths,\r\n clipperLib.PolyFillType.pftNonZero,\r\n clipperLib.PolyFillType.pftNonZero\r\n );\r\n\r\n const result = Polygon.fromClipper(solutionPaths);\r\n return result;\r\n }\r\n\r\n // Scale the polygon by a factor\r\n public static scale(a: Polygon, factor: number): Polygon {\r\n if (a.empty) {\r\n return new Polygon();\r\n }\r\n if (factor === 1) {\r\n return a;\r\n }\r\n\r\n // Match all the numbers in the SVG using a regex, which is faster than scanning in Javascript\r\n const re = /\\d+(\\.\\d*)?/g; // Adapted from here: https://stackoverflow.com/a/18085/871910\r\n const source = a.svg;\r\n let scaled = '';\r\n let lastCopied = 0;\r\n\r\n while (true) {\r\n const match = re.exec(source);\r\n if (match === null) {\r\n break;\r\n }\r\n scaled += source.substr(lastCopied, match.index - lastCopied);\r\n const num = parseFloat(match[0]);\r\n const factored = Math.trunc(num * factor).toString();\r\n scaled += factored.toString();\r\n lastCopied = re.lastIndex;\r\n }\r\n scaled += source.substr(lastCopied);\r\n\r\n return new Polygon(scaled);\r\n }\r\n\r\n public static offset(a: Polygon, offsetX: number, offsetY: number): Polygon {\r\n if (a.empty) {\r\n return new Polygon();\r\n }\r\n\r\n const re = Polygon.numberPairRe;\r\n let moved = '';\r\n const source = a.svg;\r\n let lastCopied = 0;\r\n while (true) {\r\n const match = re.exec(source);\r\n if (match === null) {\r\n break;\r\n }\r\n moved += source.substr(lastCopied, match.index - lastCopied);\r\n const newX = parseFloat(match[1]) + offsetX;\r\n const newY = parseFloat(match[3]) + offsetY;\r\n moved += `${newX} ${newY}`;\r\n lastCopied = re.lastIndex;\r\n }\r\n moved += source.substr(lastCopied);\r\n\r\n return new Polygon(moved);\r\n }\r\n\r\n public static clip(a: Polygon, box: BoundingBox): Polygon {\r\n if (a.empty) {\r\n return new Polygon();\r\n }\r\n\r\n // Match all the numbers in the SVG using a regex, which is faster than scanning in Javascript\r\n const re = /(\\d+) (\\d+)/g; // Adapted from here: https://stackoverflow.com/a/18085/871910\r\n const source = a.svg;\r\n let translated = '';\r\n let lastCopied = 0;\r\n\r\n while (true) {\r\n const match = re.exec(source);\r\n if (match === null) {\r\n break;\r\n }\r\n translated += source.substr(lastCopied, match.index - lastCopied);\r\n const x = parseFloat(match[1]) - box.x;\r\n const y = parseFloat(match[2]) - box.y;\r\n const num = parseFloat(match[0]);\r\n translated += `${x.toString()} ${y.toString()}`;\r\n lastCopied = re.lastIndex;\r\n }\r\n translated += source.substr(lastCopied);\r\n\r\n return new Polygon(translated);\r\n }\r\n\r\n public static fromWkt(wkt: string, boundingRect?: any) {\r\n // Handle multipolygons by splitting them into polygons,\r\n // converting them to SVG, then concat the results.\r\n if (wkt.includes('MULTIPOLYGON')) {\r\n wkt = wkt.replace('MULTIPOLYGON(', '').replace(')))', '))');\r\n const wkts = wkt.split(')),');\r\n // Remove the trailing '))' (though it doesn't currently matter)\r\n wkts[wkts.length - 1] = wkts[wkts.length - 1].replace('))', '');\r\n const svgs = wkts.map(x => wktPolygonToSvg('POLYGON' + x + '))', boundingRect));\r\n return new Polygon(svgs.join(''));\r\n }\r\n\r\n const svg = wktPolygonToSvg(wkt, boundingRect);\r\n return new Polygon(svg);\r\n }\r\n\r\n public static fromGeoJSON(getJSON: any) {\r\n const wkt = geoJSONPolygonToWKT(getJSON);\r\n return Polygon.fromWkt(wkt);\r\n }\r\n\r\n public static fromClipper(clipper: any) {\r\n const svg = clipperToSVGPolygon(clipper);\r\n return new Polygon(svg);\r\n }\r\n\r\n public static fromSvg(svg: any) {\r\n return new Polygon(svg);\r\n }\r\n\r\n public static fromBox(box: BoundingBox) {\r\n const [x1, x2, y1, y2] = [box.x, box.x + box.width, box.y, box.y + box.height];\r\n const svg = `M${x1} ${y1}L${x2} ${y1} L${x2} ${y2} L${x1} ${y2} L${x1} ${y1}`;\r\n\r\n return new Polygon(svg);\r\n }\r\n\r\n private static numberPairRe = /(\\d+(\\.\\d*)?) (\\d+(\\.\\d*)?)/g;\r\n // tslint:disable-next-line:variable-name\r\n private _svg: string;\r\n\r\n public constructor(svg = '') {\r\n this._svg = this.normalizeSvg(svg);\r\n }\r\n\r\n public get svg() {\r\n return this._svg;\r\n }\r\n\r\n public get wkt(): string {\r\n if (this.empty) {\r\n return '';\r\n }\r\n return svgPolygonToWKT(this._svg);\r\n }\r\n\r\n public get geoJSON() {\r\n if (this.empty) {\r\n return null;\r\n }\r\n return svgPolygonToGeoJSON(this._svg);\r\n }\r\n\r\n public get clipper() {\r\n if (this.empty) {\r\n return null;\r\n }\r\n return svgPolygonToClipper(this._svg);\r\n }\r\n\r\n public get empty(): boolean {\r\n return this._svg === '';\r\n }\r\n\r\n // Returns the bounding box of a polygon\r\n // This is a function and not a getter because it's not a trivial calculation, and properties should be quick\r\n public getBoundingBox(): BoundingBox {\r\n if (this.empty) {\r\n return new BoundingBox();\r\n }\r\n\r\n // Match all the numbers in the SVG using a regex, which is faster than scanning in Javascript\r\n const source = this.svg;\r\n\r\n let match = Polygon.numberPairRe.exec(source);\r\n\r\n if (match === null) {\r\n return new BoundingBox();\r\n }\r\n // const firstX\r\n let minX = parseFloat(match[1]);\r\n let maxX = minX;\r\n // const firstY\r\n let minY = parseFloat(match[3]);\r\n let maxY = minY;\r\n // Set the starting values\r\n // let minX = firstX;\r\n // let minY = firstY;\r\n // let maxX = firstX;\r\n // let maxY = firstY;\r\n\r\n // Get the next match\r\n const re = Polygon.numberPairRe;\r\n match = re.exec(source);\r\n while (match !== null) {\r\n const x = parseFloat(match[1]);\r\n const y = parseFloat(match[3]);\r\n // if (x < minX) {\r\n // minX = x;\r\n // } else if (x > maxX) {\r\n // maxX = x;\r\n // }\r\n minX = Math.min(minX, x);\r\n maxX = Math.max(maxX, x);\r\n\r\n // if (y < minY) {\r\n // minY = y;\r\n // } else if (y > maxY) {\r\n // maxY = y;\r\n // }\r\n minY = Math.min(minY, y);\r\n maxY = Math.max(maxY, y);\r\n\r\n match = re.exec(source);\r\n }\r\n\r\n return new BoundingBox(minX, minY, maxX - minX, maxY - minY);\r\n }\r\n\r\n public isLegal() {\r\n const reader = new jsts.io.WKTReader();\r\n const poly = reader.read(this.wkt);\r\n return poly.isValid();\r\n }\r\n\r\n private normalizeSvg(svg: string): string {\r\n // Sometimes SVGs have spaces between commands and numbers, which breaks some canvases (on Chrome, at least)\r\n // So we normalize them. Our problem is with spaces around Ls, so that's the only thing we fix\r\n if (!svg) {\r\n return '';\r\n }\r\n return svg.replace(/ L /g, 'L');\r\n }\r\n}\r\n","import { ImageStackDTO } from '@/dtos/sqe-dtos';\r\nimport { ImageDTO } from '@/dtos/sqe-dtos';\r\nimport { Polygon } from '@/utils/Polygons';\r\nimport { BoundingBox } from '@/utils/helpers';\r\nimport { EditionInfo } from './edition';\r\n\r\n/* IIIF interfaces */\r\ninterface Size {\r\n width: number;\r\n height: number;\r\n}\r\n\r\ninterface Tile {\r\n width: number;\r\n scaleFactors: number[];\r\n height?: number;\r\n}\r\n\r\ninterface Service {\r\n id: string;\r\n type: string;\r\n profile: string;\r\n}\r\n\r\nexport interface IIIFManifest {\r\n '@context': string[];\r\n id: string | undefined;\r\n '@id': string | undefined;\r\n type: string;\r\n protocol: string;\r\n profile: string;\r\n width: number;\r\n height: number;\r\n maxWidth: number;\r\n maxHeight: number;\r\n maxArea: number;\r\n sizes: Size[];\r\n tiles: Tile[];\r\n rights: string;\r\n preferredFormats: string[];\r\n extraFormats: string[];\r\n extraQualities: string[];\r\n extraFeatures: string[];\r\n service: Service[];\r\n}\r\nexport class IIIFImage {\r\n public url: string;\r\n public manifest?: IIIFManifest;\r\n public ppiAdjustmentFactor: number;\r\n\r\n\r\n constructor(url: string, manifestString?: string) {\r\n if (manifestString) {\r\n try {\r\n const manifest = JSON.parse(manifestString);\r\n this.manifest = manifest;\r\n } catch {\r\n console.warn(`Invalid string passed as manifest for imge ${url}: ${manifestString}`);\r\n }\r\n }\r\n this.url = url;\r\n this.ppiAdjustmentFactor = 1; // Set by the Image class where applicable\r\n }\r\n\r\n get manifestUrl() {\r\n return this.append('info.json');\r\n }\r\n\r\n get thumbnailUrl() {\r\n return this.getThumbnailUrl(150);\r\n }\r\n\r\n public getThumbnailUrl(width: number) {\r\n return this.append(`full/${width},/0/default.jpg`);\r\n }\r\n\r\n public fullUrl() {\r\n return this.getFullUrl(100);\r\n }\r\n\r\n public getFullUrl(pct: number, extension = 'jpg') {\r\n return this.append(`full/pct:${pct}/0/default.${extension}`);\r\n }\r\n\r\n public getScaledAndCroppedUrl(pct: number, x: number, y: number, width: number, height: number, extension = 'jpg') {\r\n return this.append(`${x},${y},${width},${height}/${pct === 100 ? 'full' : 'pct:' + pct}/0/default.${extension}`);\r\n }\r\n\r\n // Returns a server-optimized scale factor for the image, based on the manifest.\r\n // Returns a percentage.\r\n //\r\n // We take the boundingBox into account - its width and height are the actual width and height we consult\r\n // (the default is the entire image's width and height)\r\n public getOptimizedScaleFactor(expectedWidth: number, expectedHeight: number, boundingBox?: BoundingBox): number {\r\n if (!this.manifest) {\r\n console.warn(\"Can't get the scale factor of an image without loading the manifest first\");\r\n return 100;\r\n }\r\n\r\n const width: number = boundingBox ? boundingBox.width : this.width;\r\n const height: number = boundingBox ? boundingBox.height : this.height;\r\n\r\n if (this.manifest.sizes) {\r\n const widthFactor = width / this.width;\r\n const heightFactor = height / this.height;\r\n\r\n for (const resolution of this.manifest.sizes) {\r\n\r\n if (resolution.width * widthFactor >= expectedWidth) {\r\n return Math.ceil(100 * resolution.width / this.width);\r\n }\r\n if (resolution.height * heightFactor >= expectedHeight) {\r\n return Math.ceil(100 * resolution.height / this.height);\r\n }\r\n }\r\n }\r\n\r\n // Fallback - round up to the nearest 5%\r\n const realScale = 100 * Math.min(expectedWidth / width, expectedHeight / height);\r\n return Math.ceil(realScale / 5) * 5;\r\n }\r\n\r\n public get width(): number {\r\n if (!this.manifest) {\r\n throw new Error(\"Can't get width of image with no manifest\");\r\n }\r\n\r\n return (this.manifest.width as number) * this.ppiAdjustmentFactor;\r\n }\r\n\r\n public get height(): number {\r\n if (!this.manifest) {\r\n throw new Error(\"Can't get height of image with no manifest\");\r\n }\r\n\r\n return (this.manifest.height as number) * this.ppiAdjustmentFactor;\r\n }\r\n\r\n private append(suffix: string) {\r\n return `${this.url}/${suffix}`;\r\n }\r\n}\r\n\r\nexport class Image extends IIIFImage {\r\n public type: string;\r\n public side: string;\r\n public waveLength: string[];\r\n public regionInMaster?: Polygon;\r\n public regionOfMaster?: Polygon;\r\n public master: boolean;\r\n public catalogNumber: number;\r\n public id: number;\r\n public ppi: number;\r\n\r\n constructor(dto: ImageDTO, edition: EditionInfo) {\r\n super(dto.url, dto.imageManifest); // If no manifest is provided, the IIIF server is going to be contacted\r\n this.type = dto.type;\r\n this.side = dto.side;\r\n this.waveLength = dto.waveLength;\r\n this.regionInMaster = dto.regionInMasterImage ? new Polygon(dto.regionInMasterImage) : undefined;\r\n this.regionOfMaster = dto.regionInMasterImage ? new Polygon(dto.regionInMasterImage) : undefined;\r\n this.master = dto.master;\r\n this.catalogNumber = dto.catalogNumber;\r\n this.id = dto.id;\r\n this.ppi = dto.ppi;\r\n\r\n // Calculate the PPI adjustment transform - which brings the image back to the units of the edition\r\n this.ppiAdjustmentFactor = edition.metrics.ppi / this.ppi;\r\n }\r\n}\r\n\r\nexport class ImageStack {\r\n public id: number;\r\n public masterIndex: number;\r\n public images: Image[];\r\n public availableImageTypes: string[];\r\n private imageMap: Map;\r\n\r\n constructor(dto: ImageStackDTO, edition: EditionInfo) {\r\n if (dto.id === undefined || dto.masterIndex === undefined) {\r\n // This is just a temporary measure, the DTO will change so that undefined is not allowed\r\n throw new Error('ImageStack expects id and masterIndex to be set in the dto');\r\n }\r\n this.id = dto.id;\r\n this.masterIndex = dto.masterIndex;\r\n this.images = dto.images.map((d) => new Image(d, edition));\r\n\r\n if (!this.images[this.masterIndex].master) {\r\n console.warn('ImageDTO conflict of master images: ', dto);\r\n }\r\n\r\n this.imageMap = new Map();\r\n this.availableImageTypes = [];\r\n for (const image of this.images) {\r\n if (this.imageMap.has(image.type)) {\r\n console.warn('ImageDTO has type ', image.type, ' multiple times', dto);\r\n }\r\n this.imageMap.set(image.type, image);\r\n this.availableImageTypes.push(image.type);\r\n }\r\n }\r\n\r\n public getImage(type: string) {\r\n return this.imageMap.get(type);\r\n }\r\n\r\n public get master(): Image {\r\n return this.images[this.masterIndex];\r\n }\r\n}\r\n","export namespace ApiRoutes {\r\n const baseUrl = 'v1';\r\n const editions = 'editions';\r\n const utils = 'utils';\r\n const artefacts = 'artefacts';\r\n const imagedObjects = 'imaged-objects';\r\n const textFragments = 'text-fragments';\r\n const users = 'users';\r\n const login = 'login';\r\n const forgotPassword = 'forgot-password';\r\n const changePassword = 'change-password';\r\n const changeForgottenPassword = 'change-forgotten-password';\r\n const confirmRegistration = 'confirm-registration';\r\n const optionalArtefact = 'optional=artefacts&optional=masks';\r\n const confirmAddEditionEditor = 'confirm-editorship';\r\n const listInvitationEdition = 'admin-share-requests';\r\n const reportProblem = 'report-github-issue';\r\n const lines = 'lines';\r\n\r\n export function allEditionsUrl() {\r\n return `${baseUrl}/${editions}`;\r\n }\r\n\r\n export function manuscriptEditions(manuscriptId: number) {\r\n return `${baseUrl}/manuscripts/${manuscriptId}/${editions}`;\r\n }\r\n\r\n export function editionUrl(\r\n editionId: number,\r\n archiveForAllEditors?: boolean,\r\n token?: string\r\n ) {\r\n const params: string[] = [];\r\n const withParams = archiveForAllEditors || token;\r\n if (archiveForAllEditors) {\r\n params.push('optional=archiveForAllEditors');\r\n }\r\n if (token) {\r\n params.push('token=' + token);\r\n }\r\n return `${baseUrl}/${editions}/${editionId}${\r\n withParams ? '?' + params.join('&') : ''\r\n }`;\r\n }\r\n\r\n export function editionArtefactUrl(editionId: number, artefactId: number) {\r\n return `${baseUrl}/${editions}/${editionId}/${artefacts}/${artefactId}`;\r\n }\r\n\r\n export function editionMetadataUrl(editionId: number) {\r\n return `${baseUrl}/${editions}/${editionId}/metadata`;\r\n }\r\n\r\n export function editionFullTextUrl(editionId: number) {\r\n return `${baseUrl}/${editions}/${editionId}/full-text`;\r\n }\r\n\r\n export function editionRequestEditor(editionId: number) {\r\n return `${baseUrl}/${editions}/${editionId}/add-editor-request`;\r\n }\r\n\r\n export function confirmAddEditionEditorUrl(token: string) {\r\n return `${baseUrl}/${editions}/${confirmAddEditionEditor}/${token}`;\r\n }\r\n\r\n export function editionUpdateEditor(editionId: number, email: string) {\r\n return `${baseUrl}/${editions}/${editionId}/editors/${email}`;\r\n }\r\n\r\n export function listInvitationEditionUrl() {\r\n return `${baseUrl}/${editions}/${listInvitationEdition}`;\r\n }\r\n\r\n export function allEditionArtefactsUrl(\r\n editionId: number,\r\n option: boolean = false\r\n ) {\r\n if (option) {\r\n return `/${baseUrl}/${editions}/${editionId}/${artefacts}?${optionalArtefact}`;\r\n }\r\n return `/${baseUrl}/${editions}/${editionId}/${artefacts}`;\r\n }\r\n\r\n export function editionImagedObjectUrl(\r\n editionId: number,\r\n imagedObjectId: string,\r\n includeArtefacts: boolean = false\r\n ) {\r\n if (includeArtefacts) {\r\n return `${baseUrl}/${editions}/${editionId}/${imagedObjects}/${imagedObjectId}?${optionalArtefact}`;\r\n }\r\n return `${baseUrl}/${editions}/${editionId}/${imagedObjects}/${imagedObjectId}`;\r\n }\r\n\r\n export function allEditionImagedObjectsUrl(\r\n editionId: number,\r\n includeArtefacts: boolean = false\r\n ) {\r\n if (includeArtefacts) {\r\n return `${baseUrl}/${editions}/${editionId}/${imagedObjects}?${optionalArtefact}`;\r\n }\r\n return `${baseUrl}/${editions}/${editionId}/${imagedObjects}`;\r\n }\r\n\r\n export function loginUrl() {\r\n return `/${baseUrl}/${users}/${login}`;\r\n }\r\n\r\n export function usersUrl() {\r\n return `/${baseUrl}/${users}`;\r\n }\r\n\r\n export function forgotPasswordUrl() {\r\n return `/${baseUrl}/${users}/${forgotPassword}`;\r\n }\r\n\r\n export function changePasswordUrl() {\r\n return `/${baseUrl}/${users}/${changePassword}`;\r\n }\r\n\r\n export function changeForgottenPasswordUrl() {\r\n return `/${baseUrl}/${users}/${changeForgottenPassword}`;\r\n }\r\n\r\n export function confirmRegistartionUrl() {\r\n return `/${baseUrl}/${users}/${confirmRegistration}`;\r\n }\r\n\r\n export function allEditionTextFragmentsUrl(editionId: number) {\r\n return `/${baseUrl}/${editions}/${editionId}/${textFragments}`;\r\n }\r\n\r\n export function artefactTextFragmentsUrl(\r\n editionId: number,\r\n artefactId: number,\r\n suggested: boolean\r\n ) {\r\n return `${baseUrl}/${editions}/${editionId}/${artefacts}/${artefactId}/text-fragments${\r\n suggested ? '?optional=suggested' : ''\r\n }`;\r\n }\r\n\r\n export function editionTextFragmentUrl(\r\n editionId: number,\r\n textFragmentId: number\r\n ) {\r\n return `/${baseUrl}/${editions}/${editionId}/${textFragments}/${textFragmentId}`;\r\n }\r\n\r\n export function batchCreateRoisUrl(editionId: number) {\r\n return `/${baseUrl}/${editions}/${editionId}/rois/batch`;\r\n }\r\n\r\n export function createLine(editionId: number, textFragmentId: number) {\r\n return `/${baseUrl}/${editions}/${editionId}/${textFragments}/${textFragmentId}/lines`;\r\n }\r\n export function deleteLine(editionId: number, lineId: number) {\r\n return `/${baseUrl}/${editions}/${editionId}/lines/${lineId}`;\r\n }\r\n\r\n export function batchEditRoisUrl(editionId: number) {\r\n return `/${baseUrl}/${editions}/${editionId}/rois/batch-edit`;\r\n }\r\n\r\n export function roiUrl(editionId: number, roiId: number) {\r\n return `/${baseUrl}/${editions}/${editionId}/rois/${roiId}`;\r\n }\r\n\r\n export function repairPolygonUrl() {\r\n return `/${baseUrl}/${utils}/repair-wkt-polygon`;\r\n }\r\n\r\n export function batchUpdateArtefactDTOs(editionId: number) {\r\n return `/${baseUrl}/${editions}/${editionId}/${artefacts}/batch-transformation`;\r\n }\r\n\r\n export function artefactGroupUrl(editionId: number, groupId?: number) {\r\n let url = `/${baseUrl}/${editions}/${editionId}/artefact-groups`; /* correct the api-route in the backend*/\r\n if (groupId) {\r\n url += `/${groupId}`;\r\n }\r\n\r\n return url;\r\n }\r\n\r\n export function editionAttributeMetadataUrl(editionId: number) {\r\n return `/${baseUrl}/${editions}/${editionId}/sign-interpretations-attributes`;\r\n }\r\n\r\n export function attributeUrl(\r\n editionId: number,\r\n signInterpretationId: number,\r\n attributeValueId?: number\r\n ) {\r\n let url = `/${baseUrl}/${editions}/${editionId}/sign-interpretations/${signInterpretationId}/attributes`;\r\n\r\n if (attributeValueId) {\r\n url += `/${attributeValueId}`;\r\n }\r\n\r\n return url;\r\n }\r\n\r\n export function signInterpretationCommentaryUrl(\r\n editionId: number,\r\n signInterpretationId: number\r\n ) {\r\n const url = `v1/editions/${editionId}/sign-interpretations/${signInterpretationId}/commentary`;\r\n\r\n return url;\r\n }\r\n\r\n export function signInterpretationUrl(\r\n editionId: number,\r\n signInterpretationId?: number\r\n ) {\r\n let url = `v1/editions/${editionId}/sign-interpretations`;\r\n if (signInterpretationId) {\r\n url += `/${signInterpretationId}`;\r\n }\r\n\r\n return url;\r\n }\r\n\r\n export function signInterpretationCharacterUrl(\r\n editionId: number,\r\n signInterpretationId: number\r\n ) {\r\n const url = `v1/editions/${editionId}/sign-interpretations/${signInterpretationId}`;\r\n\r\n return url;\r\n }\r\n\r\n export function searchUrl() {\r\n return 'v1/search';\r\n }\r\n\r\n export function lineText(editionId: number, lineId: number) {\r\n const url = `${baseUrl}/${editions}/${editionId}/lines/${lineId}`;\r\n\r\n return url;\r\n }\r\n\r\n export function qwbWordVariantUrl(qwbWordId: number) {\r\n const url = `${baseUrl}/qwb-proxy/words/${qwbWordId}/word-variants`;\r\n\r\n return url;\r\n }\r\n\r\n export function qwbParallelTextUrl(\r\n qwbStartWordId: number,\r\n qwbEndWordId: number\r\n ) {\r\n const url = `${baseUrl}/qwb-proxy/parallels/start-word/${qwbStartWordId}/end-word/${qwbEndWordId}`;\r\n\r\n return url;\r\n }\r\n\r\n export function qwbBibliographyUrl(qwbBibliographyId: number) {\r\n const url = `${baseUrl}/qwb-proxy/bibliography/${qwbBibliographyId}`;\r\n\r\n return url;\r\n }\r\n\r\n export function editionScirbalFontUrl(editionId: number) {\r\n const url = `v1/editions/${editionId}/scribalfonts`;\r\n\r\n return url;\r\n }\r\n\r\n export function diffReplaceTranscription(\r\n editionId: number,\r\n artefactId: number\r\n ) {\r\n const url = `v1/editions/${editionId}/artefacts/${artefactId}/diff-replace-transcription`;\r\n\r\n return url;\r\n }\r\n\r\n export function diffReplaceText(editionId: number) {\r\n const url = `v1/editions/${editionId}/diff-replace-text`;\r\n\r\n return url;\r\n }\r\n\r\n export function reportProblemUrl(): string {\r\n return `/${baseUrl}/${utils}/${reportProblem}`;\r\n }\r\n}\r\n","import { IIIFImage } from './image';\r\nimport {\r\n UserDTO,\r\n UpdateEditorRightsDTO,\r\n DetailedEditorRightsDTO,\r\n ArtefactGroupDTO,\r\n EditionManuscriptMetricsDTO,\r\n AttributeDTO,\r\n AttributeListDTO,\r\n AttributeValueDTO,\r\n EditionManuscriptMetadataDTO\r\n} from '@/dtos/sqe-dtos';\r\nimport { PermissionDTO, EditionDTO } from '@/dtos/sqe-dtos';\r\nimport { TextFragmentData } from './text';\r\nimport { ScriptData } from './script';\r\n\r\ntype SimplifiedPermission = 'none' | 'read' | 'write' | 'admin';\r\n\r\nclass UserInfo {\r\n public email: string;\r\n public userId: number;\r\n public forename: string;\r\n\r\n constructor(dto: UserDTO) {\r\n this.email = dto.email;\r\n this.userId = dto.userId;\r\n this.forename = '';\r\n }\r\n}\r\n\r\nclass Permissions {\r\n public static extractPermission(\r\n simplified: SimplifiedPermission\r\n ): UpdateEditorRightsDTO {\r\n const rights: UpdateEditorRightsDTO = {\r\n mayRead: false,\r\n mayWrite: false,\r\n isAdmin: false,\r\n mayLock: false\r\n };\r\n\r\n switch (simplified) {\r\n case 'admin':\r\n rights.mayLock = rights.isAdmin = true;\r\n case 'write':\r\n rights.mayWrite = true;\r\n case 'read':\r\n rights.mayRead = true;\r\n }\r\n\r\n return rights;\r\n }\r\n\r\n public mayWrite: boolean;\r\n public isAdmin: boolean;\r\n public mayRead: boolean;\r\n\r\n constructor(dto: PermissionDTO) {\r\n this.mayWrite = dto.mayWrite;\r\n this.isAdmin = dto.isAdmin;\r\n this.mayRead = dto.mayRead;\r\n }\r\n\r\n public get readOnly() {\r\n return !this.mayWrite;\r\n }\r\n\r\n public get simplified(): SimplifiedPermission {\r\n if (this.isAdmin) {\r\n return 'admin';\r\n }\r\n if (this.mayWrite) {\r\n return 'write';\r\n }\r\n if (this.mayRead) {\r\n return 'read';\r\n }\r\n return 'none';\r\n }\r\n}\r\n\r\nclass ShareInfo {\r\n public static fromDTO(dto: DetailedEditorRightsDTO) {\r\n return new ShareInfo(dto.email, new Permissions(dto));\r\n }\r\n\r\n public email: string;\r\n public permissions: Permissions;\r\n\r\n public constructor(email: string, permissions: Permissions) {\r\n this.email = email;\r\n this.permissions = permissions;\r\n }\r\n\r\n public get simplified(): SimplifiedPermission {\r\n return this.permissions.simplified;\r\n }\r\n}\r\n\r\nclass AttributeMetadata {\r\n private attributes: AttributeDTO[];\r\n\r\n constructor(dto: AttributeListDTO) {\r\n this.attributes = dto.attributes;\r\n }\r\n\r\n public get allAttributes() {\r\n return this.attributes;\r\n }\r\n\r\n public get multiSelectAttributes() {\r\n return this.attributes.filter(attr => attr.batchEditable);\r\n }\r\n\r\n public getAttribute(id: number) {\r\n return this.attributes.find(\r\n (attr: AttributeDTO) => attr.attributeId === id\r\n );\r\n }\r\n\r\n public getAttributeValue(attributeId: number, valueId: number) {\r\n const attr = this.getAttribute(attributeId);\r\n if (!attr) {\r\n return undefined;\r\n }\r\n const value = attr.values.find(\r\n (val: AttributeValueDTO) => val.id === valueId\r\n );\r\n return value;\r\n }\r\n}\r\n\r\nclass EditionInfo {\r\n public id: number;\r\n public name: string;\r\n public permission: Permissions;\r\n public owner: UserInfo;\r\n public thumbnail?: IIIFImage;\r\n public shares: ShareInfo[];\r\n public invitations: ShareInfo[];\r\n public locked: boolean;\r\n public copyright: string;\r\n public isPublic: boolean;\r\n public lastEdit?: Date;\r\n public metrics: EditionManuscriptMetricsDTO;\r\n public attributeMetadata?: AttributeMetadata;\r\n public manuscriptId: number;\r\n\r\n // The following properties are updated by the EditionService upon creation\r\n public publicCopies: number = 1;\r\n public mine: boolean = false;\r\n public otherVersions: EditionInfo[] = [];\r\n\r\n // The following are loaded when necessary\r\n public textFragments: TextFragmentData[] = [];\r\n public artefactGroups: ArtefactGroup[];\r\n public script: ScriptData | null = null;\r\n public metadata: EditionManuscriptMetadataDTO | null = null;\r\n\r\n public get ppm(): number {\r\n // Pixels per milimeter\r\n return this.metrics.ppi / 25.4;\r\n }\r\n\r\n constructor(dto: EditionDTO) {\r\n this.id = dto.id;\r\n this.copyright = dto.copyright;\r\n this.name = dto.name;\r\n this.permission = new Permissions(dto.permission); // isAdmin, mayWrite\r\n this.owner = new UserInfo(dto.owner);\r\n this.metrics = dto.metrics;\r\n this.manuscriptId = dto.manuscriptId;\r\n\r\n // Update metrics so we have no zero-sized scrolls\r\n if (!this.metrics.width) {\r\n this.metrics.width = 1000; // One meter wide\r\n }\r\n if (!this.metrics.height) {\r\n this.metrics.height = 500; // 50 centimiters high\r\n }\r\n\r\n if (dto.thumbnailUrl) {\r\n this.thumbnail = new IIIFImage(dto.thumbnailUrl);\r\n }\r\n this.shares = dto.shares\r\n ? dto.shares.map(s => ShareInfo.fromDTO(s))\r\n : [];\r\n this.invitations = []; // dto.invitations ? dto.shares.map((s) => new ShareInfo(s))\r\n this.locked = dto.locked;\r\n this.isPublic = dto.isPublic;\r\n this.artefactGroups = [];\r\n this.updateLastEdit(dto.lastEdit);\r\n }\r\n\r\n public copyFrom(other: EditionInfo) {\r\n this.name = other.name;\r\n this.permission = other.permission;\r\n this.owner = other.owner;\r\n this.metrics = other.metrics;\r\n this.thumbnail = other.thumbnail;\r\n this.shares = other.shares;\r\n this.invitations = other.invitations;\r\n this.locked = other.locked;\r\n this.isPublic = other.isPublic;\r\n this.lastEdit = other.lastEdit;\r\n }\r\n\r\n public updateLastEdit(lastEdit: string | undefined) {\r\n if (lastEdit) {\r\n this.lastEdit = new Date(Date.parse(lastEdit));\r\n } else {\r\n this.lastEdit = undefined;\r\n }\r\n }\r\n}\r\nclass ArtefactGroup {\r\n public static nextGroupId: number = -1;\r\n public static generateGroup(artefactsIds: number[], notSave?: boolean): ArtefactGroup {\r\n const dto: ArtefactGroupDTO = {\r\n id: ArtefactGroup.nextGroupId--,\r\n artefacts: [...artefactsIds],\r\n name: ''\r\n };\r\n return new ArtefactGroup(dto, notSave);\r\n }\r\n\r\n public groupId: number = 0;\r\n public name: string = '';\r\n public artefactIds: number[] = [];\r\n public notSave?: boolean = false;\r\n\r\n public get id() {\r\n // State collections require an id field (look for ItemWithId)\r\n return this.groupId;\r\n }\r\n\r\n constructor(dto: ArtefactGroupDTO, notSave?: boolean) {\r\n this.groupId = dto.id;\r\n this.name = dto.name;\r\n this.artefactIds = [...dto.artefacts];\r\n this.notSave = notSave;\r\n }\r\n\r\n public clone() {\r\n const dto: ArtefactGroupDTO = {\r\n id: this.groupId,\r\n artefacts: [...this.artefactIds],\r\n name: this.name\r\n };\r\n return new ArtefactGroup(dto);\r\n }\r\n}\r\n\r\nexport {\r\n Permissions,\r\n SimplifiedPermission,\r\n UserInfo,\r\n EditionInfo,\r\n ShareInfo,\r\n ArtefactGroup,\r\n AttributeMetadata\r\n};\r\n","import {\r\n EditionInfo,\r\n SimplifiedPermission,\r\n Permissions,\r\n ShareInfo,\r\n ArtefactGroup\r\n} from '@/models/edition';\r\nimport { CommHelper } from './comm-helper';\r\nimport {\r\n EditionListDTO,\r\n EditionGroupDTO,\r\n EditionUpdateRequestDTO,\r\n EditionDTO,\r\n InviteEditorDTO,\r\n PermissionDTO,\r\n AdminEditorRequestListDTO,\r\n DetailedEditorRightsDTO,\r\n UpdateArtefactPlacementDTO,\r\n BatchUpdateArtefactPlacementDTO,\r\n UpdateArtefactGroupDTO,\r\n CreateArtefactGroupDTO,\r\n ArtefactGroupDTO,\r\n ArtefactGroupListDTO,\r\n UpdateEditionManuscriptMetricsDTO,\r\n AttributeListDTO,\r\n ScriptDataDTO,\r\n ScriptDataListDTO,\r\n PlacementDTO,\r\n EditionManuscriptMetadataDTO\r\n} from '@/dtos/sqe-dtos';\r\nimport { StateManager } from '@/state';\r\nimport { ApiRoutes } from '@/services/api-routes';\r\nimport { Artefact } from '@/models/artefact';\r\n\r\nclass EditionService {\r\n public stateManager: StateManager;\r\n\r\n constructor() {\r\n this.stateManager = StateManager.instance;\r\n }\r\n\r\n public async getAllEditions(): Promise {\r\n const response = await CommHelper.get(\r\n ApiRoutes.allEditionsUrl()\r\n );\r\n let editionList = [] as EditionInfo[];\r\n\r\n response.data.editions.map(grp => {\r\n // grp is a group of editions - all versions of each other\r\n const editions = grp.map(obj => new EditionInfo(obj));\r\n\r\n // Set various edition flags that depend on other editions\r\n const publicCopies = editions.filter(ed => ed.isPublic).length;\r\n for (const edition of editions) {\r\n if (this.stateManager.session.user) {\r\n edition.mine =\r\n edition.owner.userId ===\r\n this.stateManager.session.user.userId;\r\n } else {\r\n edition.mine = false;\r\n }\r\n edition.otherVersions = editions.filter(ed => ed !== edition);\r\n edition.publicCopies = publicCopies;\r\n }\r\n\r\n editionList = editionList.concat(editions);\r\n });\r\n\r\n return editionList;\r\n }\r\n\r\n public async getSingleEditions(\r\n editionId: number\r\n ): Promise {\r\n const response = await CommHelper.get(\r\n ApiRoutes.editionUrl(editionId)\r\n );\r\n\r\n return response.data;\r\n }\r\n\r\n public async getManuscriptEditions(\r\n manuscriptId: number\r\n ): Promise {\r\n const response = await CommHelper.get(\r\n ApiRoutes.manuscriptEditions(manuscriptId)\r\n );\r\n\r\n return response.data;\r\n }\r\n\r\n public async getEditionMetadata(\r\n editionId: number\r\n ): Promise {\r\n const response = await CommHelper.get(\r\n ApiRoutes.editionMetadataUrl(editionId)\r\n );\r\n\r\n return response.data;\r\n }\r\n\r\n public async copyEdition(\r\n editionId: number,\r\n name: string\r\n ): Promise {\r\n const prevEdition = this.stateManager.editions.find(editionId);\r\n\r\n if (!prevEdition) {\r\n throw new Error(`Can't copy non existing edition ${editionId}`);\r\n }\r\n\r\n const dto = {\r\n name\r\n // collaborators: '',\r\n // copyrightHolder: this.stateManager.session.user!.forename + ' ' + this.stateManager.session.user!.surname\r\n } as EditionUpdateRequestDTO;\r\n const response = await CommHelper.post(\r\n ApiRoutes.editionUrl(editionId),\r\n dto\r\n );\r\n\r\n const newEdition = new EditionInfo(response.data);\r\n\r\n // Connect the new edition to other editions of its group\r\n newEdition.mine = true; // Cloned editions are always mine\r\n newEdition.otherVersions = [...prevEdition.otherVersions, prevEdition]; // Set new's other versions\r\n\r\n // Update otherVersions of all the previous versions\r\n for (const other of newEdition.otherVersions) {\r\n other.otherVersions.push(newEdition);\r\n }\r\n\r\n // Now update the state's edition collection\r\n const current = this.stateManager.editions.current;\r\n const allEditions = [...this.stateManager.editions.items, newEdition];\r\n this.stateManager.editions.items = allEditions;\r\n this.stateManager.editions.current = current;\r\n\r\n return newEdition;\r\n }\r\n\r\n public async renameEdition(\r\n editionId: number,\r\n name: string\r\n ): Promise {\r\n const edition = this.stateManager.editions.find(editionId);\r\n if (!edition) {\r\n throw new Error(`Can't find non-existing edition ${editionId}`);\r\n }\r\n\r\n const dto = {\r\n name\r\n } as EditionUpdateRequestDTO;\r\n const response = await CommHelper.put(\r\n ApiRoutes.editionUrl(editionId),\r\n dto\r\n );\r\n\r\n edition.name = response.data.name;\r\n edition.updateLastEdit(response.data.lastEdit);\r\n\r\n return edition;\r\n }\r\n\r\n public async deleteEdition(\r\n editionId: number,\r\n isAdmin?: boolean\r\n ): Promise {\r\n // If you are not an admin for the edition, DELETE /v1/editions/xxxx\r\n if (!isAdmin) {\r\n return (await CommHelper.delete(ApiRoutes.editionUrl(editionId)))\r\n .data;\r\n } else {\r\n const token = (\r\n await CommHelper.delete(ApiRoutes.editionUrl(editionId, true))\r\n ).data.token;\r\n return (\r\n await CommHelper.delete(\r\n ApiRoutes.editionUrl(editionId, true, token)\r\n )\r\n ).data;\r\n }\r\n }\r\n\r\n public async inviteEditor(\r\n editionId: number,\r\n email: string,\r\n permission: SimplifiedPermission\r\n ) {\r\n const edition = this.stateManager.editions.find(editionId);\r\n if (!edition) {\r\n throw new Error(`Can't find non-existing edition ${editionId}`);\r\n }\r\n\r\n const url = ApiRoutes.editionRequestEditor(editionId);\r\n\r\n const rights = Permissions.extractPermission(permission);\r\n const dto = {\r\n email,\r\n ...rights\r\n } as InviteEditorDTO;\r\n\r\n await CommHelper.post(url, dto);\r\n\r\n const invitationIdx = edition.invitations.findIndex(\r\n i => i.email === email\r\n );\r\n const permissionsDTO = new Permissions({\r\n mayWrite: rights.mayWrite,\r\n isAdmin: rights.isAdmin,\r\n mayRead: rights.mayRead\r\n } as PermissionDTO);\r\n if (invitationIdx > -1) {\r\n edition.invitations[invitationIdx].permissions = new Permissions(\r\n permissionsDTO\r\n );\r\n\r\n // If update to none (revoke) => remove from rows\r\n if (permission === 'none') {\r\n edition.invitations = [\r\n ...edition.invitations.slice(0, invitationIdx),\r\n ...edition.invitations.slice(invitationIdx + 1)\r\n ];\r\n }\r\n } else {\r\n const newInvitation = new ShareInfo(\r\n email,\r\n new Permissions(permissionsDTO)\r\n );\r\n edition.invitations = [...edition.invitations, newInvitation];\r\n }\r\n }\r\n\r\n public async updateInvitation(\r\n editionId: number,\r\n email: string,\r\n permission: SimplifiedPermission\r\n ) {\r\n await this.inviteEditor(editionId, email, permission);\r\n }\r\n\r\n public async confirmAddEditionEditor(token: string) {\r\n await CommHelper.post(\r\n ApiRoutes.confirmAddEditionEditorUrl(token),\r\n null\r\n );\r\n }\r\n\r\n public async updateSharePermissions(\r\n editionId: number,\r\n email: string,\r\n permission: SimplifiedPermission\r\n ) {\r\n const edition = this.stateManager.editions.find(editionId);\r\n if (!edition) {\r\n throw new Error(`Can't find non-existing edition ${editionId}`);\r\n }\r\n const share = edition.shares.find(sh => sh.email === email);\r\n if (!share) {\r\n throw new Error(\r\n `Can't find share for user ${email} in edition ${editionId}`\r\n );\r\n }\r\n\r\n const url = ApiRoutes.editionUpdateEditor(editionId, email);\r\n\r\n const dto = Permissions.extractPermission(permission);\r\n\r\n const response = await CommHelper.put(\r\n url,\r\n dto\r\n );\r\n\r\n share.permissions = new Permissions(response.data);\r\n edition.shares = [...edition.shares];\r\n }\r\n\r\n public async getAllInvitations(): Promise {\r\n const response = await CommHelper.get(\r\n ApiRoutes.listInvitationEditionUrl()\r\n );\r\n return response.data;\r\n }\r\n\r\n public async updateArtefactDTOs(\r\n editionId: number,\r\n updateArtefacts: Artefact[]\r\n ): Promise {\r\n // TODO: Fill BatchUpdateArtefactTransformDTO and access server\r\n const edition = this.stateManager.editions.find(editionId);\r\n if (!edition) {\r\n throw new Error(`Can't find non-existing edition ${editionId}`);\r\n }\r\n\r\n const artefactPlacements: UpdateArtefactPlacementDTO[] = updateArtefacts.map(\r\n (x: Artefact) => ({\r\n artefactId: x.id,\r\n placement: x.placement as PlacementDTO,\r\n isPlaced: x.isPlaced\r\n })\r\n );\r\n\r\n // Fill dto with data\r\n const dto = {\r\n artefactPlacements\r\n } as BatchUpdateArtefactPlacementDTO;\r\n\r\n const response = await CommHelper.post(\r\n ApiRoutes.batchUpdateArtefactDTOs(editionId),\r\n dto\r\n );\r\n\r\n this.stateManager.touchEdition(editionId);\r\n return response.data;\r\n }\r\n\r\n public async newArtefactGroup(\r\n editionId: number,\r\n artefactsGroup: ArtefactGroup\r\n ) {\r\n const dto: CreateArtefactGroupDTO = {\r\n name: artefactsGroup.groupId.toString() /*check ?*/,\r\n artefacts: artefactsGroup.artefactIds\r\n };\r\n\r\n const response = await CommHelper.post(\r\n ApiRoutes.artefactGroupUrl(editionId),\r\n dto\r\n );\r\n this.stateManager.touchEdition(editionId);\r\n\r\n return response.data;\r\n }\r\n\r\n public async updateArtefactGroup(\r\n editionId: number,\r\n artefactsGroup: ArtefactGroup\r\n ) {\r\n const dto: UpdateArtefactGroupDTO = {\r\n name: artefactsGroup.groupId.toString(),\r\n artefacts: artefactsGroup.artefactIds\r\n };\r\n\r\n const response = await CommHelper.put(\r\n ApiRoutes.artefactGroupUrl(editionId, artefactsGroup.groupId),\r\n dto\r\n );\r\n\r\n this.stateManager.touchEdition(editionId);\r\n return response.data;\r\n }\r\n\r\n public async deleteArtefactGroup(editionId: number, groupId: number) {\r\n await CommHelper.delete(ApiRoutes.artefactGroupUrl(editionId, groupId));\r\n }\r\n\r\n public async getArtefactGroups(\r\n editionId: number\r\n ): Promise {\r\n const response = await CommHelper.get(\r\n ApiRoutes.artefactGroupUrl(editionId)\r\n );\r\n\r\n return response.data.artefactGroups.map(\r\n artGroupDto => new ArtefactGroup(artGroupDto)\r\n );\r\n }\r\n\r\n public async updateMetrics(\r\n editionId: number,\r\n metrics: UpdateEditionManuscriptMetricsDTO\r\n ) {\r\n const edition = this.stateManager.editions.find(editionId);\r\n if (!edition) {\r\n throw new Error(`Can't find non-existing edition ${editionId}`);\r\n }\r\n\r\n const dto = {\r\n name: edition.name,\r\n metrics\r\n } as EditionUpdateRequestDTO;\r\n const response = await CommHelper.put(\r\n ApiRoutes.editionUrl(editionId),\r\n dto\r\n );\r\n\r\n edition.metrics = response.data.metrics;\r\n edition.updateLastEdit(response.data.lastEdit);\r\n return edition;\r\n }\r\n\r\n public async getAllAttributeMetadata(\r\n editionId: number\r\n ): Promise {\r\n const response = await CommHelper.get(\r\n ApiRoutes.editionAttributeMetadataUrl(editionId)\r\n );\r\n\r\n return response.data;\r\n }\r\n\r\n public async getScribalFont(editionId: number): Promise {\r\n const url = ApiRoutes.editionScirbalFontUrl(editionId);\r\n const response = await CommHelper.get(url);\r\n\r\n return response.data;\r\n }\r\n}\r\n\r\nexport default EditionService;\r\n","import { TranslateDTO, PlacementDTO } from '@/dtos/sqe-dtos';\r\n\r\nexport class Matrix {\r\n public transformMatrix: string;\r\n\r\n constructor(obj: any) {\r\n this.transformMatrix = obj.transformMatrix;\r\n }\r\n}\r\n\r\n\r\nexport class Placement implements PlacementDTO {\r\n public static get empty() {\r\n return new Placement({\r\n rotate: 0,\r\n scale: 1,\r\n translate: { x: 0, y: 0 },\r\n zIndex: 0\r\n } as PlacementDTO);\r\n }\r\n\r\n public scale: number;\r\n public rotate: number;\r\n public translate: TranslateDTO;\r\n public zIndex: number;\r\n public mirrored: boolean;\r\n\r\n public constructor(dto: PlacementDTO) {\r\n this.scale = dto.scale;\r\n this.rotate = dto.rotate;\r\n this.translate = dto.translate || { x: 0, y: 0 };\r\n this.zIndex = dto.zIndex;\r\n this.mirrored = dto.mirrored;\r\n }\r\n\r\n public clone(): Placement {\r\n return new Placement({\r\n scale: this.scale,\r\n rotate: this.rotate,\r\n translate: { ...this.translate },\r\n zIndex: this.zIndex,\r\n mirrored: this.mirrored\r\n });\r\n }\r\n}\r\n\r\n","import { Polygon } from '@/utils/Polygons';\r\nimport { ArtefactDTO } from '@/dtos/sqe-dtos';\r\nimport { Side } from './misc';\r\nimport { ArtefactTextFragmentData, InterpretationRoi, SignInterpretation } from './text';\r\nimport { BoundingBox } from '@/utils/helpers';\r\nimport { Placement } from '@/utils/Placement';\r\nimport { Point } from '@/utils/helpers';\r\nimport { StateManager } from '@/state';\r\nimport { TimeoutError } from '@microsoft/signalr';\r\n\r\nexport class Artefact {\r\n // Default values specified to remove an error - we initialize them in the constructor or in copyFrom.\r\n // Typescript does not approve of that and shows an error, because it doesn't analyze copyFrom.\r\n public id = 0;\r\n public editionId = 0;\r\n public imagedObjectId = '';\r\n public name = '';\r\n public mask: Polygon = new Polygon('');\r\n public artefactMaskEditorId = 0;\r\n public isPlaced: boolean = false;\r\n public placement: Placement = Placement.empty;\r\n public artefactPlacementEditorId: number | undefined;\r\n public side: Side = 'recto';\r\n\r\n public textFragments: ArtefactTextFragmentData[] = [];\r\n\r\n public rois: InterpretationRoi[] = []; // ROIs for this artefact\r\n public deleteRois: InterpretationRoi[] = []; // Any ROIs that should be deleted from artefact\r\n public signInterpretations: SignInterpretation[] = []; // Sign Interpretations for this artefact\r\n\r\n constructor(obj: ArtefactDTO) {\r\n this.id = obj.id;\r\n this.editionId = obj.editionId;\r\n this.imagedObjectId = obj.imagedObjectId || '';\r\n this.name = obj.name;\r\n this.mask = Polygon.fromWkt(obj.mask);\r\n this.artefactMaskEditorId = obj.artefactMaskEditorId;\r\n this.isPlaced = obj.isPlaced;\r\n this.placement = new Placement(obj.placement);\r\n this.artefactPlacementEditorId = obj.artefactPlacementEditorId;\r\n this.side = (obj.side === 'recto') ? 'recto' : 'verso';\r\n }\r\n\r\n public get isVirtual() {\r\n return !this.imagedObjectId;\r\n }\r\n\r\n public get inViewport(): boolean {\r\n\r\n if (!this.isPlaced) {\r\n return false;\r\n }\r\n\r\n const viewport = StateManager.instance.scrollEditor.viewport;\r\n if (!viewport) {\r\n return false;\r\n }\r\n // TODO: delete this\r\n return true;\r\n\r\n const actualPoints = this.calculateNewPoints();\r\n\r\n const x2 = viewport!.x + viewport!.width;\r\n const y2 = viewport!.y + viewport!.height;\r\n\r\n const inside = (x: number, y: number) => {\r\n return viewport!.x <= x && x <= x2\r\n && viewport!.y <= y && y <= y2;\r\n };\r\n\r\n // top lrft\r\n if (inside(actualPoints.x, actualPoints.y)) {\r\n return true;\r\n }\r\n\r\n // top right\r\n if (inside(actualPoints.x + actualPoints.width,\r\n actualPoints.y)) {\r\n return true;\r\n }\r\n\r\n // bottom left\r\n if (inside(actualPoints.x,\r\n actualPoints.y + actualPoints.height)) {\r\n return true;\r\n }\r\n\r\n // bottom right\r\n if (inside(actualPoints.x + actualPoints.width,\r\n actualPoints.y + actualPoints.height)) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n\r\n private getArtefactCenter(): Point {\r\n // The artefact's center is the translate (x,y) + the bounding box's center\r\n const x = this.placement.translate.x! +\r\n this.boundingBox.width / 2;\r\n const y = this.placement.translate.y! +\r\n this.boundingBox.height / 2;\r\n\r\n return { x, y };\r\n }\r\n\r\n\r\n public calculateNewPoints(): BoundingBox {\r\n\r\n const theta = this.placement.rotate * Math.PI / 180;\r\n\r\n // Find the middle rotating point\r\n const center = this.getArtefactCenter();\r\n\r\n // Find all the corners relative to the center\r\n const cornersX = [\r\n this.placement.translate.x! - center.x!,\r\n this.placement.translate.x! - center.x!,\r\n this.placement.translate.x! +\r\n this.boundingBox.width! - center.x!,\r\n this.placement.translate.x! +\r\n this.boundingBox.width! - center.x!\r\n ];\r\n\r\n const cornersY = [\r\n this.placement.translate.y! - center.y!,\r\n this.placement.translate.y! +\r\n this.boundingBox.height! - center.y!,\r\n center.y! - this.placement.translate.y!,\r\n this.placement.translate.y! +\r\n this.boundingBox.height! - center.y!\r\n ];\r\n\r\n // Find new the minimum corner X and Y by taking the minimum of the bounding box\r\n let newX = 1e10;\r\n let newY = 1e10;\r\n const sinTeta = Math.sin(theta);\r\n const cosTeta = Math.cos(theta);\r\n\r\n for (let i = 0; i < 4; i = i + 1 ) {\r\n newX = Math.min(\r\n newX,\r\n cornersX[i] * cosTeta -\r\n cornersY[i] * sinTeta + center.x!\r\n );\r\n newY = Math.min(\r\n newY,\r\n cornersX[i] * sinTeta +\r\n cornersY[i] * cosTeta + center.y!\r\n );\r\n\r\n }\r\n\r\n // new width and height\r\n const newWidth = (center.x! - newX) * 2;\r\n const newHeight = ( center.y! - newY) * 2;\r\n\r\n return new BoundingBox ( newX, newY, newWidth , newHeight);\r\n\r\n }\r\n\r\n // TBD: Perhaps rename to setTransformation, or maybe even drop this function entirely\r\n // and manipulate mask from the outside\r\n public placeOnScroll(placement: Placement) {\r\n this.placement = placement.clone();\r\n this.isPlaced = true;\r\n }\r\n\r\n public get boundingBox(): BoundingBox {\r\n return this.mask.getBoundingBox();\r\n }\r\n\r\n public clonePlacement(): Placement {\r\n return this.placement.clone();\r\n }\r\n\r\n public prepareForBackend() {\r\n // Gets the artefact ready for saving - round all numbers that are supposed to be integers\r\n if (this.placement.translate.x) {\r\n this.placement.translate.x = Math.round(this.placement.translate.x);\r\n }\r\n\r\n if (this.placement.translate.y) {\r\n this.placement.translate.y = Math.round(this.placement.translate.y);\r\n }\r\n }\r\n\r\n public copyFrom(other: Artefact) {\r\n this.id = other.id;\r\n this.editionId = other.editionId;\r\n this.imagedObjectId = other.imagedObjectId;\r\n this.name = other.name;\r\n this.mask = other.mask;\r\n this.artefactMaskEditorId = other.artefactMaskEditorId;\r\n this.isPlaced = other.isPlaced;\r\n this.placement = other.placement;\r\n this.artefactPlacementEditorId = other.artefactPlacementEditorId;\r\n this.side = other.side;\r\n\r\n this.textFragments = [...other.textFragments];\r\n }\r\n}\r\n","import { ImageStack } from './image';\r\nimport { Artefact } from './artefact';\r\nimport { ImagedObjectDTO } from '@/dtos/sqe-dtos';\r\nimport { Side } from './misc';\r\nimport { EditionInfo } from './edition';\r\n\r\nexport class ImagedObject {\r\n public id: string;\r\n public recto?: ImageStack;\r\n public verso?: ImageStack;\r\n\r\n public artefacts: Artefact[];\r\n\r\n constructor(obj: ImagedObjectDTO, edition: EditionInfo) {\r\n this.id = obj.id;\r\n\r\n if (obj.artefacts) {\r\n this.artefacts = obj.artefacts.map((dto) => new Artefact(dto));\r\n } else {\r\n this.artefacts = [];\r\n }\r\n\r\n if (obj.recto && obj.recto.id !== undefined) { // For now the backend returns id=null if the side is missing\r\n this.recto = new ImageStack(obj.recto, edition);\r\n }\r\n if (obj.verso && obj.verso.id) {\r\n this.verso = new ImageStack(obj.verso, edition);\r\n }\r\n }\r\n\r\n public getImageStack(side: Side) {\r\n if (side === 'recto') {\r\n return this.recto;\r\n }\r\n return this.verso;\r\n }\r\n\r\n public get name(): string {\r\n const names = this.artefacts.map((a) => a.name);\r\n const unique = [...new Set(names)];\r\n return unique.join(', ');\r\n }\r\n}\r\n","import { ImagedObject } from '@/models/imaged-object';\r\nimport { CommHelper } from './comm-helper';\r\nimport { ApiRoutes } from '@/services/api-routes';\r\nimport { ImagedObjectListDTO } from '@/dtos/sqe-dtos';\r\nimport { StateManager } from '@/state';\r\n\r\n\r\nclass ImagedObjectService {\r\n public stateManager: StateManager;\r\n\r\n constructor() {\r\n this.stateManager = StateManager.instance;\r\n }\r\n\r\n public async getEditionImagedObjects(editionId: number): Promise {\r\n const edition = this.stateManager.editions.find(editionId);\r\n if (!edition) {\r\n throw new Error(`Can't get imaged objects of non existing edition ${editionId}`);\r\n }\r\n\r\n const response = await CommHelper.get(\r\n ApiRoutes.allEditionImagedObjectsUrl(editionId, true)\r\n );\r\n\r\n return response.data.imagedObjects.map(d => new ImagedObject(d, edition));\r\n }\r\n}\r\n\r\nexport default ImagedObjectService;\r\n","import { CommHelper } from './comm-helper';\r\nimport { ImagedObject } from '@/models/imaged-object';\r\nimport {\r\n ArtefactListDTO,\r\n CreateArtefactDTO,\r\n ArtefactDTO,\r\n UpdateArtefactDTO\r\n} from '@/dtos/sqe-dtos';\r\nimport { Artefact } from '@/models/artefact';\r\nimport { ApiRoutes } from '@/services/api-routes';\r\nimport { Side } from '@/models/misc';\r\nimport { StateManager } from '@/state';\r\n\r\nclass ArtefactService {\r\n public async getEditionArtefacts(editionId: number): Promise {\r\n const response = await CommHelper.get(\r\n ApiRoutes.allEditionArtefactsUrl(editionId, true)\r\n );\r\n\r\n return response.data.artefacts.map((d: any) => new Artefact(d));\r\n }\r\n\r\n public async createArtefact(\r\n editionId: number,\r\n imagedObject: ImagedObject,\r\n artefactName: string,\r\n side: Side\r\n ): Promise {\r\n const imageStack =\r\n side === 'recto' ? imagedObject.recto : imagedObject.verso;\r\n\r\n if (!imageStack) {\r\n throw Error(\r\n `ImagedObject ${imagedObject.id} does not have the ${side} side`\r\n );\r\n }\r\n\r\n const masterImage = imageStack.images.find(im => im.master);\r\n if (!masterImage) {\r\n throw Error(\r\n `ImagedObject ${imagedObject.id}, side ${side} has no master image`\r\n );\r\n }\r\n const body = {\r\n masterImageId: masterImage.id,\r\n placement: {\r\n rotate: 0,\r\n scale: 1,\r\n translate: {\r\n x: 0,\r\n y: 0\r\n }\r\n },\r\n name: artefactName\r\n } as CreateArtefactDTO;\r\n const response = await CommHelper.post(\r\n ApiRoutes.allEditionArtefactsUrl(editionId),\r\n body\r\n );\r\n\r\n const artefact = new Artefact(response.data);\r\n this.stateManager.artefacts.add(artefact, false);\r\n this.stateManager.touchEdition(editionId);\r\n\r\n return artefact;\r\n }\r\n\r\n public async deleteArtefact(art: Artefact) {\r\n await CommHelper.delete(\r\n ApiRoutes.editionArtefactUrl(art.editionId, art.id)\r\n );\r\n this.stateManager.touchEdition(art.editionId);\r\n }\r\n\r\n public async copyArtefact(\r\n editionId: number,\r\n artefact: Artefact\r\n ): Promise {\r\n const artefactImagedObject = this.stateManager.imagedObjects.find(artefact.imagedObjectId);\r\n const masterImage = artefactImagedObject?.getImageStack(artefact.side)?.images.find(im => im.master);\r\n if (!masterImage) {\r\n throw Error(\r\n `ImagedObject ${artefactImagedObject?.id}, side ${artefact.side} has no master image`\r\n );\r\n }\r\n const body = {\r\n mask: artefact.mask.wkt,\r\n placement: artefact.placement,\r\n maskEditorId: 0,\r\n positionEditorId: 0,\r\n name: artefact.name,\r\n statusMessage: '',\r\n masterImageId : masterImage.id\r\n } as UpdateArtefactDTO;\r\n\r\n const response = await CommHelper.post(\r\n ApiRoutes.allEditionArtefactsUrl(editionId),\r\n body\r\n );\r\n\r\n const newArtefact = new Artefact(response.data);\r\n this.stateManager.artefacts.add(artefact, false);\r\n this.stateManager.touchEdition(editionId);\r\n\r\n return newArtefact;\r\n }\r\n\r\n public async changeArtefact(\r\n editionId: number,\r\n artefact: Artefact\r\n ): Promise {\r\n const body = {\r\n mask: artefact.mask.wkt,\r\n placement: artefact.placement,\r\n maskEditorId: 0,\r\n positionEditorId: 0,\r\n // zOrder: artefact.zOrder,\r\n name: artefact.name,\r\n statusMessage: ''\r\n } as UpdateArtefactDTO;\r\n\r\n const response = await CommHelper.put(\r\n ApiRoutes.editionArtefactUrl(editionId, artefact.id),\r\n body\r\n );\r\n\r\n // Update the state\r\n const changed = new Artefact(response.data);\r\n this.stateManager.artefacts.update(changed);\r\n this.stateManager.touchEdition(editionId);\r\n return response.data;\r\n }\r\n\r\n private get stateManager() {\r\n return StateManager.instance;\r\n }\r\n}\r\n\r\nexport default ArtefactService;\r\n","import { IIIFImage } from '@/models/image';\r\nimport axios from 'axios';\r\n\r\nexport default class ImageService {\r\n public async getImageManifest(image: IIIFImage): Promise {\r\n const response = await axios.get(image.manifestUrl);\r\n return response.data;\r\n }\r\n}\r\n","import {\n TextFragmentDataDTO,\n TextEditionDTO,\n TextFragmentDTO,\n LineDTO,\n SignDTO,\n SignInterpretationDTO,\n InterpretationAttributeDTO,\n InterpretationRoiDTO,\n NextSignInterpretationDTO,\n SetInterpretationRoiDTO,\n ArtefactTextFragmentMatchDTO,\n TranslateDTO,\n SignInterpretationCreateDTO\n} from '@/dtos/sqe-dtos';\nimport { Artefact } from './artefact';\nimport { Polygon } from '@/utils/Polygons';\nimport { Position } from '@/models/misc';\nimport { StateManager } from '@/state';\n\nclass TextFragmentData {\n public id: number;\n public name: string;\n public editorId: number;\n\n constructor(obj: TextFragmentDataDTO) {\n this.id = obj.id;\n this.name = obj.name;\n this.editorId = obj.editorId;\n }\n}\n\nclass ArtefactTextFragmentData extends TextFragmentData {\n public suggested: boolean;\n public certain: boolean;\n\n public static createFromEditionTextFragment(tf: TextFragmentData): ArtefactTextFragmentData {\n const atf = new ArtefactTextFragmentData({\n id: tf.id,\n name: tf.name,\n editorId: tf.editorId,\n suggested: false\n });\n atf.certain = false;\n return atf;\n }\n\n constructor(obj: ArtefactTextFragmentMatchDTO) {\n super(obj);\n this.certain = !obj.suggested;\n this.suggested = obj.suggested;\n }\n}\n\nclass Line {\n public lineId: number = 0;\n public lineName: string = '';\n public editorId: number = 0;\n public signs: Sign[] = [];\n\n public textFragment: TextFragment;\n\n constructor(obj: LineDTO, textFragment: TextFragment) {\n this.lineId = obj.lineId;\n this.lineName = obj.lineName;\n this.editorId = obj.editorId;\n if (obj.signs) {\n this.signs = obj.signs.map((s, index) => new Sign(s, this, index));\n } else {\n obj.signs = [];\n }\n\n this.textFragment = textFragment;\n }\n\n public addSign(sign: Sign) {\n if (sign.line !== this) {\n throw new Error(\"Can't add sign before it is attached to this line by the caller\");\n }\n const index = sign.indexInLine;\n if (this.signs.length < index - 1) {\n throw new Error(`Can't add sign at index ${index}, line only has ${this.signs.length} signs in it`);\n }\n if (index < 0) {\n throw new Error(`Can't add sign at negative index ${index}`);\n }\n\n this.signs.splice(index, 0, sign);\n for (let i = index + 1; i < this.signs.length; i++) {\n this.signs[i].indexInLine ++;\n }\n }\n\n public removeSign(sign: Sign) {\n if (sign.line !== this) {\n throw new Error(\"Can't delete sign, it belongs to a different line\");\n }\n\n const index = sign.indexInLine;\n if (index < 0 || index >= this.signs.length) {\n throw new Error(`Can't delete sign - index ${index} out of range`);\n }\n\n this.signs.splice(index, 1);\n for (let i = index; i < this.signs.length; i++) {\n this.signs[i].indexInLine --;\n }\n }\n}\n\nclass TextFragment {\n public textFragmentId: number = 0;\n public textFragmentName: string = '';\n public editorId: number = 0;\n public lines: Line[] = [];\n\n constructor(obj: TextFragmentDTO) {\n this.textFragmentId = obj.textFragmentId;\n this.textFragmentName = obj.textFragmentName;\n this.editorId = obj.editorId;\n if (obj.lines) {\n this.lines = obj.lines.map(l => new Line(l, this));\n } else {\n this.lines = [];\n }\n }\n\n public get id() {\n // State collections require an id field (look for ItemWithId)\n return this.textFragmentId;\n }\n}\n\nclass TextEdition {\n public manuscriptId: number = 0;\n public editionName: string = '';\n public editorId: number = 0;\n public licence: string = '';\n public editors = {}; // TODO editors: { [key: number] : EditorDTO };\n public textFragments: TextFragment[] = [];\n\n constructor(obj: TextEdition | TextEditionDTO) {\n if (obj instanceof TextEdition) {\n this.copyFrom(obj as TextEdition);\n return;\n }\n\n this.manuscriptId = obj.manuscriptId;\n this.editionName = obj.editionName;\n this.editorId = obj.editorId;\n this.licence = obj.licence;\n // this.editors = obj.editors;\n if (obj.textFragments) {\n this.textFragments = obj.textFragments.map(\n t => new TextFragment(t)\n );\n } else {\n this.textFragments = [];\n }\n }\n\n private copyFrom(other: TextEdition) {\n this.manuscriptId = other.manuscriptId;\n this.editionName = other.editionName;\n this.editorId = other.editorId;\n this.licence = other.licence;\n this.editors = other.editors;\n this.textFragments = other.textFragments;\n }\n}\n\nclass Sign {\n public signInterpretations: SignInterpretation[] = [];\n public line: Line;\n public indexInLine: number;\n\n constructor(obj: SignDTO, line: Line, index: number) {\n if (obj.signInterpretations) {\n this.signInterpretations = obj.signInterpretations.map(\n s => new SignInterpretation(s, this)\n );\n } else {\n this.signInterpretations = [];\n }\n this.line = line;\n this.indexInLine = index;\n }\n}\n\nclass SignInterpretation {\n private static nextId = 0;\n public static get nextAvailableId() {\n SignInterpretation.nextId --;\n return SignInterpretation.nextId;\n }\n\n public signInterpretationId: number;\n public character?: string;\n public attributes: InterpretationAttributeDTO[]; // InterpretationAttributeDTO[];\n public rois: InterpretationRoi[]; // InterpretationRoiDTO[];\n public nextSignInterpretations: NextSignInterpretationDTO[]; // NextSignInterpretationDTO[];\n public commentary: string | null;\n public signStreamSectionIds: number[];\n public qwbWordIds: number[];\n\n public sign: Sign;\n\n constructor(obj: SignInterpretationDTO, sign: Sign) {\n this.signInterpretationId = obj.signInterpretationId;\n this.character = obj.character;\n this.attributes = obj.attributes;\n this.nextSignInterpretations = obj.nextSignInterpretations;\n this.commentary = obj.commentary?.commentary || null;\n this.signStreamSectionIds = obj.signStreamSectionIds || [];\n this.qwbWordIds = obj.qwbWordIds || [];\n\n if (obj.rois) {\n this.rois = obj.rois.map(roi => new InterpretationRoi(roi));\n } else {\n this.rois = [];\n }\n\n this.sign = sign;\n }\n\n public artefactRoi(artefact: Artefact) {\n return this.rois.find(roi => roi.artefactId === artefact.id);\n }\n\n public get id() {\n return this.signInterpretationId;\n }\n\n public deleteRoi(roi: InterpretationRoi) {\n const index = this.rois.findIndex(r => r.id === roi.id);\n if (index > -1) {\n this.rois.splice(index, 1);\n }\n }\n\n public findAttributeIndex(attributeValueId: number) {\n return this.attributes.findIndex(attr => attr.attributeValueId === attributeValueId);\n }\n\n public get isReconstructed(): boolean {\n return this.attributes.find(attr => attr.attributeString === 'is_reconstructed') !== undefined;\n }\n\n // Setting the isReconstructed and signType attributes is done when editing or creating a sign.\n // We *hard-code* the attribute ids and strings, because they are very unlikely to change.\n public set isReconstructed(value: boolean) {\n // Remove the isReconstructed attributes\n const newAttrs = this.attributes.filter(attr => attr.attributeId !== 6); // 6 is 'is_reconstructed'\n if (value) {\n newAttrs.push({\n attributeId: 6, // is_reconstructed\n attributeValueId: 20, // TRUE\n attributeString: 'is_reconstructed',\n attributeValueString: 'TRUE',\n interpretationAttributeId: -171717, // Not used by us except as a vue key\n creatorId: 0,\n editorId: 0,\n } as InterpretationAttributeDTO);\n }\n this.attributes = newAttrs;\n }\n\n\n public get htmlCharacter() {\n if (!this.character || this.character === ' ' || this.signType[1] !== 'LETTER') {\n return ' ';\n }\n\n return this.character;\n }\n\n // Set the sign type\n public get signType(): [number, string] {\n const attr = this.attributes.find(a => a.attributeString === 'sign_type');\n if (!attr) {\n return this.character && this.character !== ' ' ? [1, 'LETTER'] : [2, 'SPACE'];\n }\n return [attr.attributeValueId, attr.attributeValueString];\n }\n\n public set signType(pair: [number, string]) {\n const attr = this.attributes.find(a => a.attributeString === 'sign_type');\n if (!attr) {\n this.attributes.push({\n attributeId: 1, // sign_type\n attributeValueId: pair[0], // TRUE\n attributeString: 'sign_type',\n attributeValueString: pair[1],\n interpretationAttributeId: -171718, // Not used by us except as a vue key\n creatorId: 0,\n editorId: 0,\n } as InterpretationAttributeDTO);\n } else {\n attr.attributeValueId = pair[0];\n attr.attributeValueString = pair[1];\n }\n }\n}\n\nexport type RoiStatus = 'original' | 'new' | 'deleted'; // We may support updating in the future\n\nclass InterpretationRoi {\n public static new(\n artefact: Artefact,\n signInterpretation: SignInterpretation,\n shape: Polygon,\n position: Position,\n rotation = 0,\n ) {\n const obj = new InterpretationRoi({\n artefactId: artefact.id,\n signInterpretationId: signInterpretation.id,\n shape: shape.wkt,\n translate: position,\n stanceRotation: rotation,\n exceptional: false,\n valuesSet: true\n });\n obj.status = 'new';\n obj.internalId = InterpretationRoi.internalIdCount;\n InterpretationRoi.internalIdCount -= 1;\n\n return obj;\n }\n\n private static internalIdCount = -1;\n\n public interpretationRoiId?: number;\n public artefactId: number;\n public signInterpretationId?: number;\n public shape: Polygon;\n public position: Position;\n public exceptional: boolean;\n public valuesSet: boolean;\n private _status: RoiStatus;\n public rotation: number;\n\n // UI related fields\n public shine = false; // Shine on display\n\n private internalId?: number; // ID generated by the frontend, for new ROIs\n\n public constructor(obj: InterpretationRoiDTO | SetInterpretationRoiDTO) {\n this.artefactId = obj.artefactId;\n this.signInterpretationId = obj.signInterpretationId;\n this.shape = Polygon.fromWkt(obj.shape);\n this.position = {...obj.translate} as Position;\n this.rotation = obj.stanceRotation;\n this.exceptional = obj.exceptional;\n this.valuesSet = obj.valuesSet;\n\n // Check if the object is an InterprettionRoiDTO\n // We can't use instanceof, since instanceof does not work at runtime with interfaces yet.\n // So we use the old school way\n if (obj.hasOwnProperty('interpretationRoiId')) {\n this.interpretationRoiId = (obj as InterpretationRoiDTO).interpretationRoiId;\n }\n\n this._status = 'original';\n }\n\n public get id() {\n return (this.interpretationRoiId || this.internalId)!;\n }\n\n public clone() {\n const copy = new InterpretationRoi(\n {\n artefactId: this.artefactId,\n signInterpretationId: this.signInterpretationId,\n shape: this.shape.wkt,\n translate: {...this.position} as TranslateDTO,\n stanceRotation: this.rotation,\n exceptional: this.exceptional,\n valuesSet: this.valuesSet,\n } as InterpretationRoiDTO\n );\n copy.internalId = this.internalId;\n copy.interpretationRoiId = this.interpretationRoiId;\n\n return copy;\n }\n\n public get status() {\n return this._status;\n }\n\n public set status(newStatus: RoiStatus) {\n if (newStatus === this._status) {\n return;\n }\n if (newStatus === 'deleted') {\n // Remove the ROI from the artefact controlling it\n StateManager.instance.interpretationRois.detachRoiFromArtefact(this, newStatus);\n } else if (this._status === 'deleted') {\n // Add the ROI to the artefact\n StateManager.instance.interpretationRois.attachRoiToArtefact(this);\n }\n\n this._status = newStatus;\n }\n}\n\ntype TextDirection = 'ltr' | 'rtl';\n\nexport {\n TextFragmentData,\n TextFragment,\n TextEdition,\n Line,\n Sign,\n SignInterpretation,\n InterpretationRoi,\n TextDirection,\n ArtefactTextFragmentData,\n};\n","// One common type for all sides in the system\r\n// We do not use a string enum, because converting a string to an enum value is painful (Side[s as keyof typeof Side])\r\nexport type Side = 'recto' | 'verso';\r\n\r\nexport interface Position {\r\n x: number;\r\n y: number;\r\n}\r\n\r\nexport function integrifyPosition(p: Position): Position {\r\n return {\r\n x: Math.round(p.x),\r\n y: Math.round(p.y),\r\n };\r\n}\r\n","import { CommHelper } from './comm-helper';\nimport { StateManager } from '@/state';\nimport {\n TextFragmentDataListDTO,\n TextEditionDTO,\n BatchEditRoiDTO,\n InterpretationRoiDTO,\n BatchEditRoiResponseDTO,\n ArtefactTextFragmentMatchListDTO,\n LineTextDTO,\n DiffReplaceResponseDTO,\n DiffReplaceRequestDTO,\n LineDTO,\n CreateLineDTO,\n LineDataDTO\n} from '@/dtos/sqe-dtos';\nimport {\n TextFragmentData,\n TextEdition,\n ArtefactTextFragmentData,\n Line\n} from '@/models/text';\nimport { ApiRoutes } from '@/services/api-routes';\nimport { Artefact } from '@/models/artefact';\nimport { InterpretationRoi } from '@/models/text';\nimport { integrifyPosition } from '@/models/misc';\n\nclass TextService {\n public stateManager: StateManager;\n constructor() {\n this.stateManager = StateManager.instance;\n }\n\n public async getEditionTextFragments(editionId: number) {\n const response = await CommHelper.get(\n ApiRoutes.allEditionTextFragmentsUrl(editionId)\n );\n\n return response.data.textFragments.map(\n obj => new TextFragmentData(obj)\n );\n }\n\n public async getArtefactTextFragments(editionId: number, artefactId: number) {\n const response = await CommHelper.get(\n ApiRoutes.artefactTextFragmentsUrl(editionId, artefactId, true)\n );\n\n return response.data.textFragments.map(obj => new ArtefactTextFragmentData(obj));\n }\n\n public async getTextFragment(editionId: number, textFragmentId: number) {\n const response = await CommHelper.get(\n ApiRoutes.editionTextFragmentUrl(editionId, textFragmentId)\n );\n\n return new TextEdition(response.data);\n }\n\n public async getEditionFullText(editionId: number) {\n const response = await CommHelper.get(ApiRoutes.editionFullTextUrl(editionId));\n\n return new TextEdition(response.data);\n }\n\n public async updateArtefactROIs(artefact: Artefact, mode: 'created' | 'deleted' | 'both' = 'both') {\n // Updates all the ROIs of the artefact.\n // This function scans the state and updates ROIs based on their status.\n // It also updates the state - deleted ROIs are removed, and the status of all other ROIs\n // is changed to 'original'\n const newROIs: InterpretationRoi[] = [];\n const deletedROIs: InterpretationRoi[] = artefact.deleteRois;\n\n for (const roi of artefact.rois) {\n if (roi.status === 'new' && mode !== 'deleted') {\n newROIs.push(roi);\n } else if (roi.status === 'deleted' && mode !== 'created') {\n deletedROIs.push(roi);\n }\n }\n\n const response = await this.updateServerROIs(artefact, newROIs, deletedROIs);\n this.updateStateCreatedROIs(artefact, newROIs, response.createRois);\n this.updateStateDeletedROIs(artefact, deletedROIs);\n artefact.deleteRois = [];\n this.stateManager.touchEdition(artefact.editionId);\n\n return deletedROIs.length + newROIs.length;\n }\n\n public async getLineText(editionId: number, lineId: number): Promise {\n const response = await CommHelper.get(ApiRoutes.lineText(editionId, lineId));\n return response.data;\n }\n\n public async replaceText(editionId: number, priorSignInterpretationId: number, followingSignInterpretationId: number, newText: string): Promise {\n const dto: DiffReplaceRequestDTO = {\n priorSignInterpretationId,\n followingSignInterpretationId,\n newText,\n };\n\n const url = ApiRoutes.diffReplaceText(editionId);\n const response = await CommHelper.put(url, dto);\n this.stateManager.touchEdition(editionId);\n return response.data;\n }\n public async createLine(editionId: number, textFragmentId: number,line: LineDTO, previousLineId?: number, subsequentLineId?: number) {\n const dto: CreateLineDTO = {previousLineId, subsequentLineId, lineName: line.lineName};\n const url = ApiRoutes.createLine(editionId, textFragmentId);\n // get the editionId and send it on first param\n const response = await CommHelper.post(url , dto);\n }\n public async deleteLine(editionId: number, lineId: number) {\n const url = ApiRoutes.deleteLine(editionId, lineId);\n const response = await CommHelper.delete(url);\n }\n\n private async updateServerROIs(artefact: Artefact, newROIs: InterpretationRoi[], deletedROIs: InterpretationRoi[]) {\n const newDTOs = newROIs.map(roi => {\n return {\n artefactId: artefact.id,\n signInterpretationId: roi.signInterpretationId,\n shape: roi.shape.wkt,\n translate: integrifyPosition(roi.position),\n stanceRotation: roi.rotation,\n exceptional: roi.exceptional,\n valuesSet: roi.valuesSet\n } as InterpretationRoiDTO;\n });\n const deleted = deletedROIs.map(roi => roi.interpretationRoiId).filter(id => !!id) as number[];\n const body: BatchEditRoiDTO = {\n createRois: newDTOs,\n updateRois: [],\n deleteRois: deleted,\n };\n\n const url = ApiRoutes.batchEditRoisUrl(artefact.editionId);\n const response = await CommHelper.post(url, body);\n this.stateManager.touchEdition(artefact.editionId);\n return response.data;\n }\n\n private updateStateCreatedROIs(artefact: Artefact,\n preSaveROIs: InterpretationRoi[],\n listDTO: InterpretationRoiDTO[]) {\n\n if (preSaveROIs.length !== listDTO.length) {\n console.error(`Server returned an ROI list with the wrong length - expected ${preSaveROIs.length} and got ${listDTO.length}`);\n return;\n }\n\n for (let i = 0; i < preSaveROIs.length; i++) {\n const preSave = preSaveROIs[i];\n const postSave = listDTO[i];\n\n // First, remove the preSave ROI\n if (preSave.signInterpretationId) {\n const si = this.stateManager.signInterpretations.get(preSave.signInterpretationId);\n if (si) {\n si.deleteRoi(preSave);\n }\n }\n this.stateManager.interpretationRois.delete(preSave.id);\n\n // Add the post save ROI\n const roi = new InterpretationRoi(postSave);\n if (postSave.signInterpretationId) {\n const si = this.stateManager.signInterpretations.get(postSave.signInterpretationId);\n if (!si) {\n console.error(\n `Can't locate sign-interpratation ${postSave.signInterpretationId} ` +\n `in artefact ${artefact.id}`);\n } else {\n si.rois.push(roi);\n }\n }\n\n this.stateManager.interpretationRois.put(roi);\n\n // Map the old ID to the new ID\n if (preSave.id !== roi.id) {\n this.stateManager.interpretationRois.mapFrontendIdToServerId(preSave.id, roi.id);\n }\n }\n this.stateManager.touchEdition(artefact.editionId);\n }\n\n private updateStateDeletedROIs(artefact: Artefact, rois: InterpretationRoi[]) {\n for (const roi of rois) {\n this.stateManager.interpretationRois.delete(roi.id);\n }\n this.stateManager.touchEdition(artefact.editionId);\n }\n}\n\nexport default TextService;\n","/* tslint:disable */\r\n\r\n/*\r\n * Do not edit this file directly!\r\n * This SignalRSQE class is autogenerated by the `GenerateTypescriptInterfaces`\r\n * in the project https://github.com/Scripta-Qumranica-Electronica/SQE_API.\r\n * Changes made there are used to automatically create this file at {ROOT}/ts-dtos\r\n * whenever the GenerateTypescriptInterfaces program is run.\r\n */\r\n\r\nimport { \r\n\tArtefactDataDTO,\r\n\tArtefactDTO,\r\n\tExtendedArtefactDTO,\r\n\tArtefactListDTO,\r\n\tExtendedArtefactListDTO,\r\n\tArtefactDataListDTO,\r\n\tArtefactGroupDTO,\r\n\tArtefactGroupListDTO,\r\n\tUpdateArtefactDTO,\r\n\tUpdateArtefactPlacementDTO,\r\n\tBatchUpdateArtefactPlacementDTO,\r\n\tUpdatedArtefactPlacementDTO,\r\n\tBatchUpdatedArtefactTransformDTO,\r\n\tCreateArtefactDTO,\r\n\tUpdateArtefactGroupDTO,\r\n\tCreateArtefactGroupDTO,\r\n\tCatalogueMatchInputDTO,\r\n\tCatalogueMatchDTO,\r\n\tCatalogueMatchListDTO,\r\n\tEditionDTO,\r\n\tEditionGroupDTO,\r\n\tEditionListDTO,\r\n\tFlatEditionListDTO,\r\n\tPermissionDTO,\r\n\tUpdateEditorRightsDTO,\r\n\tInviteEditorDTO,\r\n\tDetailedEditorRightsDTO,\r\n\tDetailedUpdateEditorRightsDTO,\r\n\tAdminEditorRequestDTO,\r\n\tEditorInvitationDTO,\r\n\tEditorInvitationListDTO,\r\n\tAdminEditorRequestListDTO,\r\n\tTextEditionDTO,\r\n\tArchiveTokenDTO,\r\n\tCommentaryCreateDTO,\r\n\tCommentaryDTO,\r\n\tDeleteDTO,\r\n\tDeleteIntIdDTO,\r\n\tDeleteStringIdDTO,\r\n\tEditionUpdateRequestDTO,\r\n\tEditionCopyDTO,\r\n\tUpdateEditionManuscriptMetricsDTO,\r\n\tEditionManuscriptMetricsDTO,\r\n\tSimpleImageDTO,\r\n\tImageDTO,\r\n\tSimpleImageListDTO,\r\n\tImageInstitutionDTO,\r\n\tImageInstitutionListDTO,\r\n\tInstitutionalImageDTO,\r\n\tInstitutionalImageListDTO,\r\n\tImageStackDTO,\r\n\tImagedObjectDTO,\r\n\tImagedObjectListDTO,\r\n\tWktPolygonDTO,\r\n\tQwbWordVariantListDTO,\r\n\tQwbWordVariantDTO,\r\n\tQwbBibliographyDTO,\r\n\tQwbParallelWordDTO,\r\n\tQwbParallelDTO,\r\n\tQwbParallelListDTO,\r\n\tQwbBibliographyEntryDTO,\r\n\tSetReconstructedInterpretationRoiDTO,\r\n\tSetInterpretationRoiDTO,\r\n\tUpdateInterpretationRoiDTO,\r\n\tInterpretationRoiDTO,\r\n\tUpdatedInterpretationRoiDTO,\r\n\tSetInterpretationRoiDTOList,\r\n\tInterpretationRoiDTOList,\r\n\tUpdateInterpretationRoiDTOList,\r\n\tUpdatedInterpretationRoiDTOList,\r\n\tBatchEditRoiDTO,\r\n\tBatchEditRoiResponseDTO,\r\n\tCreateScriptDataDTO,\r\n\tScriptDataDTO,\r\n\tScriptDataListDTO,\r\n\tCreateKernPairDTO,\r\n\tKernPairDTO,\r\n\tDeleteKernPairDTO,\r\n\tCreateGlyphDataDTO,\r\n\tGlyphDataDTO,\r\n\tDeleteGlyphDataDTO,\r\n\tDeleteScribalFontDTO,\r\n\tDetailedSearchRequestDTO,\r\n\tDetailedSearchResponseDTO,\r\n\tTextFragmentSearchResponseListDTO,\r\n\tTextFragmentSearchResponseDTO,\r\n\tImageSearchResponseListDTO,\r\n\tImageSearchResponseDTO,\r\n\tSignDTO,\r\n\tNextSignInterpretationDTO,\r\n\tSignInterpretationBaseDTO,\r\n\tSignInterpretationCreateDTO,\r\n\tSignInterpretationVariantDTO,\r\n\tSignInterpretationCharacterUpdateDTO,\r\n\tSignInterpretationDTO,\r\n\tSignInterpretationListDTO,\r\n\tSignInterpretationCreatedDTO,\r\n\tSignInterpretationDeleteDTO,\r\n\tInterpretationAttributeBaseDTO,\r\n\tInterpretationAttributeCreateDTO,\r\n\tInterpretationAttributeDTO,\r\n\tCreateAttributeValueDTO,\r\n\tUpdateAttributeValueDTO,\r\n\tAttributeValueDTO,\r\n\tAttributeBaseDTO,\r\n\tCreateAttributeDTO,\r\n\tUpdateAttributeDTO,\r\n\tAttributeDTO,\r\n\tAttributeListDTO,\r\n\tDiffReplaceRequestDTO,\r\n\tDiffReplaceReconstructionRequestDTO,\r\n\tIndexedReplacementTextRoi,\r\n\tDiffReplaceResponseDTO,\r\n\tDiffReconstructedResponseDTO,\r\n\tEditionScriptCollectionDTO,\r\n\tEditionScriptLinesDTO,\r\n\tCharacterShapeDTO,\r\n\tScriptTextFragmentDTO,\r\n\tScriptLineDTO,\r\n\tScriptArtefactCharactersDTO,\r\n\tTextFragmentDataDTO,\r\n\tArtefactTextFragmentMatchDTO,\r\n\tImagedObjectTextFragmentMatchDTO,\r\n\tImagedObjectTextFragmentMatchListDTO,\r\n\tTextFragmentDataListDTO,\r\n\tArtefactTextFragmentMatchListDTO,\r\n\tTextFragmentDTO,\r\n\tLineDataDTO,\r\n\tLineDataListDTO,\r\n\tLineDTO,\r\n\tLineTextDTO,\r\n\tUpdateTextFragmentDTO,\r\n\tCreateTextFragmentDTO,\r\n\tUpdateLineDTO,\r\n\tCreateLineDTO,\r\n\tRequestMaterializationDTO,\r\n\tPlacementDTO,\r\n\tTranslateDTO,\r\n\tLoginRequestDTO,\r\n\tUserUpdateRequestDTO,\r\n\tNewUserRequestDTO,\r\n\tAccountActivationRequestDTO,\r\n\tResendUserAccountActivationRequestDTO,\r\n\tUnactivatedEmailUpdateRequestDTO,\r\n\tResetUserPasswordRequestDTO,\r\n\tResetForgottenUserPasswordRequestDTO,\r\n\tResetLoggedInUserPasswordRequestDTO,\r\n\tUserDTO,\r\n\tDetailedUserDTO,\r\n\tDetailedUserTokenDTO,\r\n\tEditorDTO,\r\n\tUserDataStoreDTO,\r\n\tDatabaseVersionDTO,\r\n\tAPIVersionDTO,\r\n\tEditionManuscriptMetadataDTO,\r\n} from \"@/dtos/sqe-dtos\"\r\n\r\nimport { HubConnection } from '@microsoft/signalr'; \r\n\r\nexport class SignalRUtilities { \r\n private _connection: HubConnection;\r\n \r\n public constructor(connection: HubConnection) {\r\n this._connection = connection;\r\n }\r\n\r\n /*\r\n * Server methods.\r\n */\r\n\r\n /**\r\n\t * Creates a new artefact with the provided data.\r\n\t *\t\t If no mask is provided, a placeholder mask will be created with the values:\r\n\t *\t\t \"POLYGON((0 0,1 1,1 0,0 0))\" (the system requires a valid WKT polygon mask for\r\n\t *\t\t every artefact). It is not recommended to leave the mask, name, or work status\r\n\t *\t\t blank or null. It will often be advantageous to leave the transformation null\r\n\t *\t\t when first creating a new artefact.\r\n\t *\r\n\t * @param editionId - Unique Id of the desired edition\r\n\t * @param payload - A CreateArtefactDTO with the data for the new artefact\r\n\t *\r\n\t */\r\n public async postV1EditionsEditionIdArtefacts(editionId: number, payload: CreateArtefactDTO): Promise {\r\n return await this._connection.invoke('PostV1EditionsEditionIdArtefacts', editionId, payload);\r\n }\r\n\r\n /**\r\n\t * Deletes the specified artefact\r\n\t *\r\n\t * @param artefactId - Unique Id of the desired artefact\r\n\t * @param editionId - Unique Id of the desired edition\r\n\t *\r\n\t */\r\n public async deleteV1EditionsEditionIdArtefactsArtefactId(editionId: number, artefactId: number): Promise {\r\n return await this._connection.invoke('DeleteV1EditionsEditionIdArtefactsArtefactId', editionId, artefactId);\r\n }\r\n\r\n /**\r\n\t * Provides a listing of all artefacts that are part of the specified edition\r\n\t *\r\n\t * @param artefactId - Unique Id of the desired artefact\r\n\t * @param editionId - Unique Id of the desired edition\r\n\t * @param optional - Add \"masks\" to include artefact polygons and \"images\" to include image data\r\n\t *\r\n\t */\r\n public async getV1EditionsEditionIdArtefactsArtefactId(editionId: number, artefactId: number, optional: string[]): Promise {\r\n return await this._connection.invoke('GetV1EditionsEditionIdArtefactsArtefactId', editionId, artefactId, optional);\r\n }\r\n\r\n /**\r\n\t * Provides a listing of all rois belonging to an artefact in the specified edition\r\n\t *\r\n\t * @param artefactId - Unique Id of the desired artefact\r\n\t * @param editionId - Unique Id of the desired edition\r\n\t *\r\n\t */\r\n public async getV1EditionsEditionIdArtefactsArtefactIdRois(editionId: number, artefactId: number): Promise {\r\n return await this._connection.invoke('GetV1EditionsEditionIdArtefactsArtefactIdRois', editionId, artefactId);\r\n }\r\n\r\n /**\r\n\t * Provides a listing of all artefacts that are part of the specified edition\r\n\t *\r\n\t * @param editionId - Unique Id of the desired edition\r\n\t * @param optional - Add \"masks\" to include artefact polygons and \"images\" to include image data\r\n\t *\r\n\t */\r\n public async getV1EditionsEditionIdArtefacts(editionId: number, optional: string[]): Promise {\r\n return await this._connection.invoke('GetV1EditionsEditionIdArtefacts', editionId, optional);\r\n }\r\n\r\n /**\r\n\t * Provides a listing of text fragments that have text in the specified artefact.\r\n\t *\t\t With the optional query parameter \"suggested\", this endpoint will also return\r\n\t *\t\t any text fragment that the system suggests might have text in the artefact.\r\n\t *\r\n\t * @param editionId - Unique Id of the desired edition\r\n\t * @param artefactId - Unique Id of the desired artefact\r\n\t * @param optional - Add \"suggested\" to include possible matches suggested by the system\r\n\t *\r\n\t */\r\n public async getV1EditionsEditionIdArtefactsArtefactIdTextFragments(editionId: number, artefactId: number, optional: string[]): Promise {\r\n return await this._connection.invoke('GetV1EditionsEditionIdArtefactsArtefactIdTextFragments', editionId, artefactId, optional);\r\n }\r\n\r\n /**\r\n\t * Updates the specified artefact.\r\n\t *\t\t There are many possible attributes that can be changed for\r\n\t *\t\t an artefact. The caller should only input only those that\r\n\t *\t\t should be changed. Attributes with a null value will be ignored.\r\n\t *\t\t For instance, setting the mask to null or \"\" will result in\r\n\t *\t\t no changes to the current mask, and no value for the mask will\r\n\t *\t\t be returned (or broadcast). Likewise, the transformation, name,\r\n\t *\t\t or status message may be set to null and no change will be made\r\n\t *\t\t to those entities (though any unchanged values will be returned\r\n\t *\t\t along with the changed values and also broadcast to co-editors).\r\n\t *\r\n\t * @param artefactId - Unique Id of the desired artefact\r\n\t * @param editionId - Unique Id of the desired edition\r\n\t * @param payload - An UpdateArtefactDTO with the desired alterations to the artefact\r\n\t *\r\n\t */\r\n public async putV1EditionsEditionIdArtefactsArtefactId(editionId: number, artefactId: number, payload: UpdateArtefactDTO): Promise {\r\n return await this._connection.invoke('PutV1EditionsEditionIdArtefactsArtefactId', editionId, artefactId, payload);\r\n }\r\n\r\n /**\r\n\t * Updates the positional data for a batch of artefacts\r\n\t *\r\n\t * @param editionId - Unique Id of the desired edition\r\n\t * @param payload - A BatchUpdateArtefactTransformDTO with a list of the desired updates\r\n\t *\r\n\t */\r\n public async postV1EditionsEditionIdArtefactsBatchTransformation(editionId: number, payload: BatchUpdateArtefactPlacementDTO): Promise {\r\n return await this._connection.invoke('PostV1EditionsEditionIdArtefactsBatchTransformation', editionId, payload);\r\n }\r\n\r\n /**\r\n\t * Gets a listing of all artefact groups in the edition\r\n\t *\r\n\t * @param editionId - Unique Id of the desired edition\r\n\t *\r\n\t */\r\n public async getV1EditionsEditionIdArtefactGroups(editionId: number): Promise {\r\n return await this._connection.invoke('GetV1EditionsEditionIdArtefactGroups', editionId);\r\n }\r\n\r\n /**\r\n\t * Gets the details of a specific artefact group in the edition\r\n\t *\r\n\t * @param editionId - Unique Id of the desired edition\r\n\t * @param artefactGroupId - Id of the desired artefact group\r\n\t *\r\n\t */\r\n public async getV1EditionsEditionIdArtefactGroupsArtefactGroupId(editionId: number, artefactGroupId: number): Promise {\r\n return await this._connection.invoke('GetV1EditionsEditionIdArtefactGroupsArtefactGroupId', editionId, artefactGroupId);\r\n }\r\n\r\n /**\r\n\t * Creates a new artefact group with the submitted data.\r\n\t *\t\t The new artefact must have a list of artefacts that belong to the group.\r\n\t *\t\t It is not necessary to give the group a name.\r\n\t *\r\n\t * @param editionId - Unique Id of the desired edition\r\n\t * @param payload - Parameters of the new artefact group\r\n\t *\r\n\t */\r\n public async postV1EditionsEditionIdArtefactGroups(editionId: number, payload: CreateArtefactGroupDTO): Promise {\r\n return await this._connection.invoke('PostV1EditionsEditionIdArtefactGroups', editionId, payload);\r\n }\r\n\r\n /**\r\n\t * Updates the details of an artefact group.\r\n\t *\t\t The artefact group will now only contain the artefacts listed in the JSON payload.\r\n\t *\t\t If the name is null, no change will be made, otherwise the name will also be updated.\r\n\t *\r\n\t * @param editionId - Unique Id of the desired edition\r\n\t * @param artefactGroupId - Id of the artefact group to be updated\r\n\t * @param payload - Parameters that the artefact group should be changed to\r\n\t *\r\n\t */\r\n public async putV1EditionsEditionIdArtefactGroupsArtefactGroupId(editionId: number, artefactGroupId: number, payload: UpdateArtefactGroupDTO): Promise {\r\n return await this._connection.invoke('PutV1EditionsEditionIdArtefactGroupsArtefactGroupId', editionId, artefactGroupId, payload);\r\n }\r\n\r\n /**\r\n\t * Deletes the specified artefact group.\r\n\t *\r\n\t * @param editionId - Unique Id of the desired edition\r\n\t * @param artefactGroupId - Unique Id of the artefact group to be deleted\r\n\t *\r\n\t */\r\n public async deleteV1EditionsEditionIdArtefactGroupsArtefactGroupId(editionId: number, artefactGroupId: number): Promise {\r\n return await this._connection.invoke('DeleteV1EditionsEditionIdArtefactGroupsArtefactGroupId', editionId, artefactGroupId);\r\n }\r\n\r\n /**\r\n\t * Replace the current transcription in the virtual artefact with the submitted\r\n\t *\t\t transcription and the related ROIs. The dictionary in textRois should map the\r\n\t *\t\t index of each character in the new transcription string to its corresponding\r\n\t *\t\t ROI shape/positional data. Some characters, like a space, need not have a\r\n\t *\t\t corresponding ROI shape/position.\r\n\t *\r\n\t * @param editionId - Unique Id of the desired edition\r\n\t * @param artefactId - Unique Id of the desired artefact (must be a virtual artefact)\r\n\t * @param payload - Details of the replacement transcription\r\n\t * @returns - Details concerning all changed data in the edition\r\n\t */\r\n public async putV1EditionsEditionIdArtefactsArtefactIdDiffReplaceTranscription(editionId: number, artefactId: number, payload: DiffReplaceReconstructionRequestDTO): Promise {\r\n return await this._connection.invoke('PutV1EditionsEditionIdArtefactsArtefactIdDiffReplaceTranscription', editionId, artefactId, payload);\r\n }\r\n\r\n /**\r\n\t * Get a listing of all text fragments to imaged object matches\r\n\t *\r\n\t *\r\n\t *\r\n\t */\r\n public async getV1CatalogueAllMatches(): Promise {\r\n return await this._connection.invoke('GetV1CatalogueAllMatches');\r\n }\r\n\r\n /**\r\n\t * Get a listing of all text fragments matches that correspond to an imaged object\r\n\t *\r\n\t * @param imagedObjectId - Id of imaged object to search for transcription matches\r\n\t *\r\n\t */\r\n public async getV1CatalogueImagedObjectsImagedObjectIdTextFragments(imagedObjectId: string): Promise {\r\n return await this._connection.invoke('GetV1CatalogueImagedObjectsImagedObjectIdTextFragments', imagedObjectId);\r\n }\r\n\r\n /**\r\n\t * Get a listing of all imaged objects that matches that correspond to a transcribed text fragment\r\n\t *\r\n\t * @param textFragmentId - Unique Id of the text fragment to search for imaged object matches\r\n\t *\r\n\t */\r\n public async getV1CatalogueTextFragmentsTextFragmentIdImagedObjects(textFragmentId: number): Promise {\r\n return await this._connection.invoke('GetV1CatalogueTextFragmentsTextFragmentIdImagedObjects', textFragmentId);\r\n }\r\n\r\n /**\r\n\t * Get a listing of all corresponding imaged objects and transcribed text fragment in a specified edition\r\n\t *\r\n\t * @param editionId - Unique Id of the edition to search for imaged objects to text fragment matches\r\n\t *\r\n\t */\r\n public async getV1CatalogueEditionsEditionIdImagedObjectTextFragmentMatches(editionId: number): Promise {\r\n return await this._connection.invoke('GetV1CatalogueEditionsEditionIdImagedObjectTextFragmentMatches', editionId);\r\n }\r\n\r\n /**\r\n\t * Get a listing of all corresponding imaged objects and transcribed text fragment in a specified manuscript\r\n\t *\r\n\t * @param manuscriptId - Unique Id of the manuscript to search for imaged objects to text fragment matches\r\n\t *\r\n\t */\r\n public async getV1CatalogueManuscriptsManuscriptIdImagedObjectTextFragmentMatches(manuscriptId: number): Promise {\r\n return await this._connection.invoke('GetV1CatalogueManuscriptsManuscriptIdImagedObjectTextFragmentMatches', manuscriptId);\r\n }\r\n\r\n /**\r\n\t * Create a new matched pair for an imaged object and a text fragment along with the edition princeps information\r\n\t *\r\n\t * @param newMatch - The details of the new match\r\n\t *\r\n\t */\r\n public async postV1Catalogue(newMatch: CatalogueMatchInputDTO): Promise {\r\n return await this._connection.invoke('PostV1Catalogue', newMatch);\r\n }\r\n\r\n /**\r\n\t * Confirm the correctness of an existing imaged object and text fragment match\r\n\t *\r\n\t * @param iaaEditionCatalogToTextFragmentId - The unique id of the match to confirm\r\n\t *\r\n\t */\r\n public async postV1CatalogueConfirmMatchIaaEditionCatalogToTextFragmentId(iaaEditionCatalogToTextFragmentId: number): Promise {\r\n return await this._connection.invoke('PostV1CatalogueConfirmMatchIaaEditionCatalogToTextFragmentId', iaaEditionCatalogToTextFragmentId);\r\n }\r\n\r\n /**\r\n\t * Remove an existing imaged object and text fragment match, which is not correct\r\n\t *\r\n\t * @param iaaEditionCatalogToTextFragmentId - The unique id of the match to confirm\r\n\t *\r\n\t */\r\n public async deleteV1CatalogueConfirmMatchIaaEditionCatalogToTextFragmentId(iaaEditionCatalogToTextFragmentId: number): Promise {\r\n return await this._connection.invoke('DeleteV1CatalogueConfirmMatchIaaEditionCatalogToTextFragmentId', iaaEditionCatalogToTextFragmentId);\r\n }\r\n\r\n /**\r\n\t * Adds an editor to the specified edition\r\n\t *\r\n\t * @param editionId - Unique Id of the desired edition\r\n\t * @param payload - JSON object with the attributes of the new editor\r\n\t *\r\n\t */\r\n public async postV1EditionsEditionIdAddEditorRequest(editionId: number, payload: InviteEditorDTO): Promise {\r\n return await this._connection.invoke('PostV1EditionsEditionIdAddEditorRequest', editionId, payload);\r\n }\r\n\r\n /**\r\n\t * Get a list of requests issued by the current user for other users\r\n\t *\t\t to become editors of a shared edition\r\n\t *\r\n\t *\r\n\t *\r\n\t */\r\n public async getV1EditionsAdminShareRequests(): Promise {\r\n return await this._connection.invoke('GetV1EditionsAdminShareRequests');\r\n }\r\n\r\n /**\r\n\t * Get a list of invitations issued to the current user to become an editor of a shared edition\r\n\t *\r\n\t *\r\n\t *\r\n\t */\r\n public async getV1EditionsEditorInvitations(): Promise {\r\n return await this._connection.invoke('GetV1EditionsEditorInvitations');\r\n }\r\n\r\n /**\r\n\t * Confirm addition of an editor to the specified edition\r\n\t *\r\n\t * @param token - JWT for verifying the request confirmation\r\n\t *\r\n\t */\r\n public async postV1EditionsConfirmEditorshipToken(token: string): Promise {\r\n return await this._connection.invoke('PostV1EditionsConfirmEditorshipToken', token);\r\n }\r\n\r\n /**\r\n\t * Changes the rights for an editor of the specified edition\r\n\t *\r\n\t * @param editionId - Unique Id of the desired edition\r\n\t * @param editorEmailId - Email address of the editor whose permissions are being changed\r\n\t * @param payload - JSON object with the attributes of the new editor\r\n\t *\r\n\t */\r\n public async putV1EditionsEditionIdEditorsEditorEmailId(editionId: number, editorEmailId: string, payload: UpdateEditorRightsDTO): Promise {\r\n return await this._connection.invoke('PutV1EditionsEditionIdEditorsEditorEmailId', editionId, editorEmailId, payload);\r\n }\r\n\r\n /**\r\n\t * Creates a copy of the specified edition\r\n\t *\r\n\t * @param editionId - Unique Id of the desired edition\r\n\t * @param request - JSON object with the attributes to be changed in the copied edition\r\n\t *\r\n\t */\r\n public async postV1EditionsEditionId(editionId: number, request: EditionCopyDTO): Promise {\r\n return await this._connection.invoke('PostV1EditionsEditionId', editionId, request);\r\n }\r\n\r\n /**\r\n\t * Archives an edition so that in no longer appears in user data and searches. An admin\r\n\t *\t\t may use the archiveForAllEditors optional parameter in order to archive the edition\r\n\t *\t\t for all editors (must be confirmed with an archive token).\r\n\t *\r\n\t * @param editionId - Unique Id of the desired edition to be archived\r\n\t * @param optional - Optional parameters: 'archiveForAllEditors'\r\n\t * @param token - token required when using optional 'archiveForAllEditors'\r\n\t *\r\n\t */\r\n public async deleteV1EditionsEditionId(editionId: number, optional: string[], token: string): Promise {\r\n return await this._connection.invoke('DeleteV1EditionsEditionId', editionId, optional, token);\r\n }\r\n\r\n /**\r\n\t * Provides details about the specified edition and all accessible alternate editions\r\n\t *\r\n\t * @param editionId - Unique Id of the desired edition\r\n\t *\r\n\t */\r\n public async getV1EditionsEditionId(editionId: number): Promise {\r\n return await this._connection.invoke('GetV1EditionsEditionId', editionId);\r\n }\r\n\r\n /**\r\n\t * Provides a listing of all editions accessible to the current user\r\n\t *\r\n\t *\r\n\t *\r\n\t */\r\n public async getV1Editions(published?: boolean, personal?: boolean): Promise {\r\n return await this._connection.invoke('GetV1Editions', published, personal);\r\n }\r\n\r\n /**\r\n\t * Updates data for the specified edition\r\n\t *\r\n\t * @param editionId - Unique Id of the desired edition\r\n\t * @param request - JSON object with the attributes to be updated\r\n\t *\r\n\t */\r\n public async putV1EditionsEditionId(editionId: number, request: EditionUpdateRequestDTO): Promise {\r\n return await this._connection.invoke('PutV1EditionsEditionId', editionId, request);\r\n }\r\n\r\n /**\r\n\t * Provides spatial data for all letters in the edition\r\n\t *\r\n\t * @param editionId - Unique Id of the desired edition\r\n\t *\r\n\t */\r\n public async getV1EditionsEditionIdScriptCollection(editionId: number): Promise {\r\n return await this._connection.invoke('GetV1EditionsEditionIdScriptCollection', editionId);\r\n }\r\n\r\n /**\r\n\t * Provides spatial data for all letters in the edition organized and oriented\r\n\t *\t\t by lines.\r\n\t *\r\n\t * @param editionId - Unique Id of the desired edition\r\n\t *\r\n\t */\r\n public async getV1EditionsEditionIdScriptLines(editionId: number): Promise {\r\n return await this._connection.invoke('GetV1EditionsEditionIdScriptLines', editionId);\r\n }\r\n\r\n /**\r\n\t * Retrieve extra institutional metadata concerning the edition\r\n\t *\t\t manuscript if available.\r\n\t *\r\n\t * @param editionId - Unique Id of the desired edition\r\n\t *\r\n\t */\r\n public async getV1EditionsEditionIdMetadata(editionId: number): Promise {\r\n return await this._connection.invoke('GetV1EditionsEditionIdMetadata', editionId);\r\n }\r\n\r\n \r\n public async getV1ManuscriptsManuscriptIdEditions(manuscriptId: number): Promise {\r\n return await this._connection.invoke('GetV1ManuscriptsManuscriptIdEditions', manuscriptId);\r\n }\r\n\r\n /**\r\n\t * Provides information for the specified imaged object.\r\n\t *\r\n\t * @param imagedObjectId - Unique Id of the desired object from the imaging Institution\r\n\t *\r\n\t */\r\n public async getV1ImagedObjectsImagedObjectId(imagedObjectId: string): Promise {\r\n return await this._connection.invoke('GetV1ImagedObjectsImagedObjectId', imagedObjectId);\r\n }\r\n\r\n /**\r\n\t * Provides information for the specified imaged object related to the specified edition, can include images and also\r\n\t *\t\t their masks with optional.\r\n\t *\r\n\t * @param editionId - Unique Id of the desired edition\r\n\t * @param imagedObjectId - Unique Id of the desired object from the imaging Institution\r\n\t * @param optional - Set 'artefacts' to receive related artefact data and 'masks' to include the artefact masks\r\n\t *\r\n\t */\r\n public async getV1EditionsEditionIdImagedObjectsImagedObjectId(editionId: number, imagedObjectId: string, optional: string[]): Promise {\r\n return await this._connection.invoke('GetV1EditionsEditionIdImagedObjectsImagedObjectId', editionId, imagedObjectId, optional);\r\n }\r\n\r\n /**\r\n\t * Add an imaged object to an edition.\r\n\t *\r\n\t * @param editionId - Unique Id of the desired edition\r\n\t * @param imagedObjectId - Unique Id of the desired object from the imaging Institution\r\n\t *\r\n\t */\r\n public async postV1EditionsEditionIdImagedObjectsImagedObjectId(editionId: number, imagedObjectId: string): Promise {\r\n return await this._connection.invoke('PostV1EditionsEditionIdImagedObjectsImagedObjectId', editionId, imagedObjectId);\r\n }\r\n\r\n /**\r\n\t * Remove an imaged object from an edition. All artefacts must first be removed from the\r\n\t *\t\t imaged object.\r\n\t *\r\n\t * @param editionId - Unique Id of the desired edition\r\n\t * @param imagedObjectId - Unique Id of the desired object from the imaging Institution\r\n\t *\r\n\t */\r\n public async deleteV1EditionsEditionIdImagedObjectsImagedObjectId(editionId: number, imagedObjectId: string): Promise {\r\n return await this._connection.invoke('DeleteV1EditionsEditionIdImagedObjectsImagedObjectId', editionId, imagedObjectId);\r\n }\r\n\r\n /**\r\n\t * Provides a listing of imaged objects related to the specified edition, can include images and also their masks with\r\n\t *\t\t optional.\r\n\t *\r\n\t * @param editionId - Unique Id of the desired edition\r\n\t * @param optional - Set 'artefacts' to receive related artefact data and 'masks' to include the artefact masks\r\n\t *\r\n\t */\r\n public async getV1EditionsEditionIdImagedObjects(editionId: number, optional: string[]): Promise {\r\n return await this._connection.invoke('GetV1EditionsEditionIdImagedObjects', editionId, optional);\r\n }\r\n\r\n /**\r\n\t * Provides a list of all institutional image providers.\r\n\t *\r\n\t *\r\n\t *\r\n\t */\r\n public async getV1ImagedObjectsInstitutions(): Promise {\r\n return await this._connection.invoke('GetV1ImagedObjectsInstitutions');\r\n }\r\n\r\n /**\r\n\t * Provides a list of all institutional image providers.\r\n\t *\r\n\t *\r\n\t *\r\n\t */\r\n public async getV1ImagedObjectsInstitutionsInstitutionName(institutionName: string): Promise {\r\n return await this._connection.invoke('GetV1ImagedObjectsInstitutionsInstitutionName', institutionName);\r\n }\r\n\r\n /**\r\n\t * Provides a list of all text fragments that should correspond to the imaged object.\r\n\t *\r\n\t * @param imagedObjectId - Id of the imaged object\r\n\t *\r\n\t */\r\n public async getV1ImagedObjectsImagedObjectIdTextFragments(imagedObjectId: string): Promise {\r\n return await this._connection.invoke('GetV1ImagedObjectsImagedObjectIdTextFragments', imagedObjectId);\r\n }\r\n\r\n /**\r\n\t * Search QWB (via proxy) for any variant readings for the word that contains the submitted sign\r\n\t *\t\t interpretation id.\r\n\t *\r\n\t * @param editionId - Edition in which the sign interpretation id is found\r\n\t * @param signInterpretationId - Id of the sign interpretation to search\r\n\t *\r\n\t */\r\n public async getV1EditionsEditionIdSignInterpretationsSignInterpretationIdWordVariants(editionId: number, signInterpretationId: number): Promise {\r\n return await this._connection.invoke('GetV1EditionsEditionIdSignInterpretationsSignInterpretationIdWordVariants', editionId, signInterpretationId);\r\n }\r\n\r\n /**\r\n\t * Search QWB (via proxy) for any variant readings for the word that contains the submitted\r\n\t *\t\t QWB word id.\r\n\t *\r\n\t * @param qwbWordId - QWB word Id\r\n\t *\r\n\t */\r\n public async getV1QwbProxyWordsQwbWordIdWordVariants(qwbWordId: number): Promise {\r\n return await this._connection.invoke('GetV1QwbProxyWordsQwbWordIdWordVariants', qwbWordId);\r\n }\r\n\r\n /**\r\n\t * Search QWB (via proxy) for any parallel text.\r\n\t *\r\n\t * @param qwbStartWordId - QWB word Id for the beginning of the text selection\r\n\t * @param qwbEndWordId - QWB word Id for the end of the text selection\r\n\t *\r\n\t */\r\n public async getV1QwbProxyParallelsStartWordQwbStartWordIdEndWordQwbEndWordId(qwbStartWordId: number, qwbEndWordId: number): Promise {\r\n return await this._connection.invoke('GetV1QwbProxyParallelsStartWordQwbStartWordIdEndWordQwbEndWordId', qwbStartWordId, qwbEndWordId);\r\n }\r\n\r\n /**\r\n\t * Get full bibliographic entry from QWB (via proxy).\r\n\t *\r\n\t * @param qwbBibliographyId - ID of the qwb bibliographical item to be retrieved\r\n\t *\r\n\t */\r\n public async getV1QwbProxyBibliographyQwbBibliographyId(qwbBibliographyId: number): Promise {\r\n return await this._connection.invoke('GetV1QwbProxyBibliographyQwbBibliographyId', qwbBibliographyId);\r\n }\r\n\r\n /**\r\n\t * Get the details for a ROI in the given edition of a scroll\r\n\t *\r\n\t * @param editionId - Id of the edition\r\n\t * @param roiId - A JSON object with the new ROI to be created\r\n\t *\r\n\t */\r\n public async getV1EditionsEditionIdRoisRoiId(editionId: number, roiId: number): Promise {\r\n return await this._connection.invoke('GetV1EditionsEditionIdRoisRoiId', editionId, roiId);\r\n }\r\n\r\n /**\r\n\t * Creates new sign ROI in the given edition of a scroll\r\n\t *\r\n\t * @param editionId - Id of the edition\r\n\t * @param newRoi - A JSON object with the new ROI to be created\r\n\t *\r\n\t */\r\n public async postV1EditionsEditionIdRois(editionId: number, newRoi: SetInterpretationRoiDTO): Promise {\r\n return await this._connection.invoke('PostV1EditionsEditionIdRois', editionId, newRoi);\r\n }\r\n\r\n /**\r\n\t * Creates new sign ROI's in the given edition of a scroll\r\n\t *\r\n\t * @param editionId - Id of the edition\r\n\t * @param newRois - A JSON object with an array of the new ROI's to be created\r\n\t *\r\n\t */\r\n public async postV1EditionsEditionIdRoisBatch(editionId: number, newRois: SetInterpretationRoiDTOList): Promise {\r\n return await this._connection.invoke('PostV1EditionsEditionIdRoisBatch', editionId, newRois);\r\n }\r\n\r\n /**\r\n\t * Processes a series of create/update/delete ROI requests in the given edition of a scroll\r\n\t *\r\n\t * @param editionId - Id of the edition\r\n\t * @param rois - A JSON object with all the roi edits to be performed\r\n\t *\r\n\t */\r\n public async postV1EditionsEditionIdRoisBatchEdit(editionId: number, rois: BatchEditRoiDTO): Promise {\r\n return await this._connection.invoke('PostV1EditionsEditionIdRoisBatchEdit', editionId, rois);\r\n }\r\n\r\n /**\r\n\t * Update an existing sign ROI in the given edition of a scroll\r\n\t *\r\n\t * @param editionId - Id of the edition\r\n\t * @param roiId - Id of the ROI to be updated\r\n\t * @param updateRoi - A JSON object with the updated ROI details\r\n\t *\r\n\t */\r\n public async putV1EditionsEditionIdRoisRoiId(editionId: number, roiId: number, updateRoi: SetInterpretationRoiDTO): Promise {\r\n return await this._connection.invoke('PutV1EditionsEditionIdRoisRoiId', editionId, roiId, updateRoi);\r\n }\r\n\r\n /**\r\n\t * Update existing sign ROI's in the given edition of a scroll\r\n\t *\r\n\t * @param editionId - Id of the edition\r\n\t * @param updateRois - A JSON object with an array of the updated ROI details\r\n\t *\r\n\t */\r\n public async putV1EditionsEditionIdRoisBatch(editionId: number, updateRois: UpdateInterpretationRoiDTOList): Promise {\r\n return await this._connection.invoke('PutV1EditionsEditionIdRoisBatch', editionId, updateRois);\r\n }\r\n\r\n /**\r\n\t * Deletes a sign ROI from the given edition of a scroll\r\n\t *\r\n\t * @param roiId - Id of the ROI to be deleted\r\n\t * @param editionId - Id of the edition\r\n\t *\r\n\t */\r\n public async deleteV1EditionsEditionIdRoisRoiId(editionId: number, roiId: number): Promise {\r\n return await this._connection.invoke('DeleteV1EditionsEditionIdRoisRoiId', editionId, roiId);\r\n }\r\n\r\n /**\r\n\t * Get the details of the scribal font for an edition that\r\n\t *\t\t are needed to generate reconstructed text layout.\r\n\t *\r\n\t * @param editionId - Edition for which to get the scribal font information\r\n\t *\r\n\t */\r\n public async getV1EditionsEditionIdScribalFonts(editionId: number): Promise {\r\n return await this._connection.invoke('GetV1EditionsEditionIdScribalFonts', editionId);\r\n }\r\n\r\n /**\r\n\t * Creates a new scribal font for the edition\r\n\t *\r\n\t * @param editionId - Edition for which to create the new scribal font\r\n\t * @param scriptData - Basic information about the new scribal font\r\n\t *\r\n\t */\r\n public async postV1EditionsEditionIdScribalFonts(editionId: number, scriptData: CreateScriptDataDTO): Promise {\r\n return await this._connection.invoke('PostV1EditionsEditionIdScribalFonts', editionId, scriptData);\r\n }\r\n\r\n /**\r\n\t * Updates the basic information about a scribal font\r\n\t *\r\n\t * @param editionId - Edition for which to update the scribal font\r\n\t * @param scribalFontId - The scribal font to be updated\r\n\t * @param scriptData - The updated scribal font information\r\n\t *\r\n\t */\r\n public async putV1EditionsEditionIdScribalFontsScribalFontIdScribalFontData(editionId: number, scribalFontId: number, scriptData: CreateScriptDataDTO): Promise {\r\n return await this._connection.invoke('PutV1EditionsEditionIdScribalFontsScribalFontIdScribalFontData', editionId, scribalFontId, scriptData);\r\n }\r\n\r\n /**\r\n\t * Deletes a scribal font\r\n\t *\r\n\t * @param editionId - Edition from which to delete the scribal font\r\n\t * @param scribalFontId - The scribal font to be deleted\r\n\t *\r\n\t */\r\n public async deleteV1EditionsEditionIdScribalFontsScribalFontId(editionId: number, scribalFontId: number): Promise {\r\n return await this._connection.invoke('DeleteV1EditionsEditionIdScribalFontsScribalFontId', editionId, scribalFontId);\r\n }\r\n\r\n /**\r\n\t * Creates or updates a kerning pair for the scribal font.\r\n\t *\t\t If the kern pair does not yet exists, it is created.\r\n\t *\t\t If the kern pair already exists, it is updated.\r\n\t *\r\n\t * @param editionId - Edition for which to create or update the kerning pair\r\n\t * @param scribalFontId - The scribal font the kerning pair belongs to\r\n\t * @param kernPair - The kerning information\r\n\t *\r\n\t */\r\n public async postV1EditionsEditionIdScribalFontsScribalFontIdKerningPairs(editionId: number, scribalFontId: number, kernPair: CreateKernPairDTO): Promise {\r\n return await this._connection.invoke('PostV1EditionsEditionIdScribalFontsScribalFontIdKerningPairs', editionId, scribalFontId, kernPair);\r\n }\r\n\r\n /**\r\n\t * Deletes a kerning pair from a scribal font\r\n\t *\r\n\t * @param editionId - Edition from which to delete the kerning pair\r\n\t * @param scribalFontId - Scribal font from which to delete the kerning pair\r\n\t * @param firstCharacter - The first character of the kerning pair\r\n\t * @param secondCharacter - The second character of the kerning pair\r\n\t *\r\n\t */\r\n public async deleteV1EditionsEditionIdScribalFontsScribalFontIdKerningPairsFirstCharacterSecondCharacter(editionId: number, scribalFontId: number, firstCharacter: string, secondCharacter: string): Promise {\r\n return await this._connection.invoke('DeleteV1EditionsEditionIdScribalFontsScribalFontIdKerningPairsFirstCharacterSecondCharacter', editionId, scribalFontId, firstCharacter, secondCharacter);\r\n }\r\n\r\n /**\r\n\t * Creates or updates information about a scribal font glyph.\r\n\t *\t\t If information for the glyph does not yet exist, a new glyph is created.\r\n\t *\t\t If information for the glyph already exists, that glyph information is updated.\r\n\t *\r\n\t * @param editionId - Edition in which the glyph is created or updated\r\n\t * @param scribalFontId - Scribal font in which the glyph is created or updated\r\n\t * @param glyph - Information about the glyph\r\n\t *\r\n\t */\r\n public async postV1EditionsEditionIdScribalFontsScribalFontIdGlyphs(editionId: number, scribalFontId: number, glyph: CreateGlyphDataDTO): Promise {\r\n return await this._connection.invoke('PostV1EditionsEditionIdScribalFontsScribalFontIdGlyphs', editionId, scribalFontId, glyph);\r\n }\r\n\r\n /**\r\n\t * Deletes glyph information from a scribal font\r\n\t *\r\n\t * @param editionId - Edition from which the glyph is deleted\r\n\t * @param scribalFontId - Scribal font from which the glyph is deleted\r\n\t * @param glyphCharacter - The glyph to be deleted\r\n\t *\r\n\t */\r\n public async deleteV1EditionsEditionIdScribalFontsScribalFontIdGlyphsGlyphCharacter(editionId: number, scribalFontId: number, glyphCharacter: string): Promise {\r\n return await this._connection.invoke('DeleteV1EditionsEditionIdScribalFontsScribalFontIdGlyphsGlyphCharacter', editionId, scribalFontId, glyphCharacter);\r\n }\r\n\r\n /**\r\n\t * Basic searching of the Qumranica database. Results are truncated\r\n\t *\t\t to 100 results per search category.\r\n\t *\r\n\t * @param searchParameters - The parameters of the search\r\n\t *\r\n\t */\r\n public async postV1Search(searchParameters: DetailedSearchRequestDTO): Promise {\r\n return await this._connection.invoke('PostV1Search', searchParameters);\r\n }\r\n\r\n /**\r\n\t * Retrieve a list of all possible attributes for an edition\r\n\t *\r\n\t * @param editionId - The ID of the edition being searched\r\n\t * @returns - A list of and edition's attributes and their details\r\n\t */\r\n public async getV1EditionsEditionIdSignInterpretationsAttributes(editionId: number): Promise {\r\n return await this._connection.invoke('GetV1EditionsEditionIdSignInterpretationsAttributes', editionId);\r\n }\r\n\r\n /**\r\n\t * Retrieve the details of a sign interpretation in an edition\r\n\t *\r\n\t * @param editionId - The ID of the edition being searched\r\n\t * @param signInterpretationId - The desired sign interpretation id\r\n\t * @returns - The details of the desired sign interpretation\r\n\t */\r\n public async getV1EditionsEditionIdSignInterpretationsSignInterpretationId(editionId: number, signInterpretationId: number): Promise {\r\n return await this._connection.invoke('GetV1EditionsEditionIdSignInterpretationsSignInterpretationId', editionId, signInterpretationId);\r\n }\r\n\r\n /**\r\n\t * Create a new attribute for an edition\r\n\t *\r\n\t * @param editionId - The ID of the edition being edited\r\n\t * @param newAttribute - The details of the new attribute\r\n\t * @returns - The details of the newly created attribute\r\n\t */\r\n public async postV1EditionsEditionIdSignInterpretationsAttributes(editionId: number, newAttribute: CreateAttributeDTO): Promise {\r\n return await this._connection.invoke('PostV1EditionsEditionIdSignInterpretationsAttributes', editionId, newAttribute);\r\n }\r\n\r\n /**\r\n\t * Delete an attribute from an edition\r\n\t *\r\n\t * @param editionId - The ID of the edition being edited\r\n\t * @param attributeId - The ID of the attribute to delete\r\n\t *\r\n\t */\r\n public async deleteV1EditionsEditionIdSignInterpretationsAttributesAttributeId(editionId: number, attributeId: number): Promise {\r\n return await this._connection.invoke('DeleteV1EditionsEditionIdSignInterpretationsAttributesAttributeId', editionId, attributeId);\r\n }\r\n\r\n /**\r\n\t * Change the details of an attribute in an edition\r\n\t *\r\n\t * @param editionId - The ID of the edition being edited\r\n\t * @param attributeId - The ID of the attribute to update\r\n\t * @param updatedAttribute - The details of the updated attribute\r\n\t *\r\n\t */\r\n public async putV1EditionsEditionIdSignInterpretationsAttributesAttributeId(editionId: number, attributeId: number, updatedAttribute: UpdateAttributeDTO): Promise {\r\n return await this._connection.invoke('PutV1EditionsEditionIdSignInterpretationsAttributesAttributeId', editionId, attributeId, updatedAttribute);\r\n }\r\n\r\n /**\r\n\t * Creates a new sign interpretation. This creates a new sign entity for the submitted\r\n\t *\t\t interpretation. This also takes care of inserting the sign interpretation into the\r\n\t *\t\t sign stream following the specifications in the newSignInterpretation.\r\n\t *\r\n\t * @param editionId - ID of the edition being changed\r\n\t * @param newSignInterpretation - New sign interpretation data to be added\r\n\t * @returns - The new sign interpretation\r\n\t */\r\n public async postV1EditionsEditionIdSignInterpretations(editionId: number, newSignInterpretation: SignInterpretationCreateDTO): Promise {\r\n return await this._connection.invoke('PostV1EditionsEditionIdSignInterpretations', editionId, newSignInterpretation);\r\n }\r\n\r\n /**\r\n\t * Creates a variant sign interpretation to the submitted sign interpretation id using\r\n\t *\t\t the character and attribute settings of the newSignInterpretation payload. It will\r\n\t *\t\t copy the ROIs from the original sign interpretation to the new one, but it will not\r\n\t *\t\t copy the attributes (or any commentaries associated with the attributes).\r\n\t *\r\n\t * @param editionId - ID of the edition being changed\r\n\t * @param signInterpretationId - \r\n\t *\t\t Id of the sign interpretation for which this variant\r\n\t *\t\t will be created\r\n\t *\t\t \r\n\t * @param newSignInterpretation - New sign interpretation data to be added\r\n\t * @returns - The new sign interpretation\r\n\t */\r\n public async postV1EditionsEditionIdSignInterpretationsSignInterpretationId(editionId: number, signInterpretationId: number, newSignInterpretation: SignInterpretationVariantDTO): Promise {\r\n return await this._connection.invoke('PostV1EditionsEditionIdSignInterpretationsSignInterpretationId', editionId, signInterpretationId, newSignInterpretation);\r\n }\r\n\r\n /**\r\n\t * Creates a variant sign interpretation to the submitted sign interpretation id using\r\n\t *\t\t the character and attribute settings of the newSignInterpretation payload. It will\r\n\t *\t\t copy the ROIs from the original sign interpretation to the new one, but it will not\r\n\t *\t\t copy the attributes (or any commentaries associated with the attributes).\r\n\t *\r\n\t * @param editionId - ID of the edition being changed\r\n\t * @param signInterpretationId - \r\n\t *\t\t Id of the sign interpretation for which this variant\r\n\t *\t\t will be created\r\n\t *\t\t \r\n\t * @param newSignInterpretationCharacter - New sign interpretation data to be added\r\n\t * @returns - The new sign interpretation\r\n\t */\r\n public async putV1EditionsEditionIdSignInterpretationsSignInterpretationId(editionId: number, signInterpretationId: number, newSignInterpretationCharacter: SignInterpretationCharacterUpdateDTO): Promise {\r\n return await this._connection.invoke('PutV1EditionsEditionIdSignInterpretationsSignInterpretationId', editionId, signInterpretationId, newSignInterpretationCharacter);\r\n }\r\n\r\n /**\r\n\t * Deletes the sign interpretation in the route. The endpoint automatically manages the\r\n\t *\t\t sign stream by connecting all the deleted sign's next and previous nodes. Adding\r\n\t *\t\t \"delete-all-variants\" to the optional query parameter will cause all variant sign\r\n\t *\t\t interpretations to be deleted as well.\r\n\t *\r\n\t * @param editionId - ID of the edition being changed\r\n\t * @param signInterpretationId - ID of the sign interpretation being deleted\r\n\t * @param optional - \r\n\t *\t\t If the string \"delete-all-variants\" is submitted here, then\r\n\t *\t\t all variant readings to the submitted sign interpretation id will be deleted as well\r\n\t *\t\t \r\n\t * @returns - \r\n\t *\t\t A list of all the sign interpretations that were deleted and changed as a result of\r\n\t *\t\t the deletion operation\r\n\t *\t\t \r\n\t */\r\n public async deleteV1EditionsEditionIdSignInterpretationsSignInterpretationId(editionId: number, signInterpretationId: number, optional: string[]): Promise {\r\n return await this._connection.invoke('DeleteV1EditionsEditionIdSignInterpretationsSignInterpretationId', editionId, signInterpretationId, optional);\r\n }\r\n\r\n /**\r\n\t * Links two sign interpretations together in the edition's sign stream\r\n\t *\r\n\t * @param editionId - ID of the edition being changed\r\n\t * @param signInterpretationId - The sign interpretation to be linked to the nextSignInterpretationId\r\n\t * @param nextSignInterpretationId - The sign interpretation to become the new next sign interpretation\r\n\t * @returns - The updated sign interpretation\r\n\t */\r\n public async postV1EditionsEditionIdSignInterpretationsSignInterpretationIdLinkToNextSignInterpretationId(editionId: number, signInterpretationId: number, nextSignInterpretationId: number): Promise {\r\n return await this._connection.invoke('PostV1EditionsEditionIdSignInterpretationsSignInterpretationIdLinkToNextSignInterpretationId', editionId, signInterpretationId, nextSignInterpretationId);\r\n }\r\n\r\n /**\r\n\t * Links two sign interpretations in the edition's sign stream\r\n\t *\r\n\t * @param editionId - ID of the edition being changed\r\n\t * @param signInterpretationId - The sign interpretation to be unlinked from the nextSignInterpretationId\r\n\t * @param nextSignInterpretationId - The sign interpretation to removed as next sign interpretation\r\n\t * @returns - The updated sign interpretation\r\n\t */\r\n public async postV1EditionsEditionIdSignInterpretationsSignInterpretationIdUnlinkFromNextSignInterpretationId(editionId: number, signInterpretationId: number, nextSignInterpretationId: number): Promise {\r\n return await this._connection.invoke('PostV1EditionsEditionIdSignInterpretationsSignInterpretationIdUnlinkFromNextSignInterpretationId', editionId, signInterpretationId, nextSignInterpretationId);\r\n }\r\n\r\n /**\r\n\t * Updates the commentary of a sign interpretation\r\n\t *\r\n\t * @param editionId - ID of the edition being changed\r\n\t * @param signInterpretationId - ID of the sign interpretation whose commentary is being changed\r\n\t * @param commentary - The new commentary for the sign interpretation\r\n\t * @returns - Ok or Error\r\n\t */\r\n public async putV1EditionsEditionIdSignInterpretationsSignInterpretationIdCommentary(editionId: number, signInterpretationId: number, commentary: CommentaryCreateDTO): Promise {\r\n return await this._connection.invoke('PutV1EditionsEditionIdSignInterpretationsSignInterpretationIdCommentary', editionId, signInterpretationId, commentary);\r\n }\r\n\r\n /**\r\n\t * This adds a new attribute to the specified sign interpretation.\r\n\t *\r\n\t * @param editionId - ID of the edition being changed\r\n\t * @param signInterpretationId - ID of the sign interpretation for adding a new attribute\r\n\t * @param newSignInterpretationAttributes - Details of the attribute to be added\r\n\t * @returns - The updated sign interpretation\r\n\t */\r\n public async postV1EditionsEditionIdSignInterpretationsSignInterpretationIdAttributes(editionId: number, signInterpretationId: number, newSignInterpretationAttributes: InterpretationAttributeCreateDTO): Promise {\r\n return await this._connection.invoke('PostV1EditionsEditionIdSignInterpretationsSignInterpretationIdAttributes', editionId, signInterpretationId, newSignInterpretationAttributes);\r\n }\r\n\r\n /**\r\n\t * This changes the values of the specified sign interpretation attribute,\r\n\t *\t\t mainly used to change commentary.\r\n\t *\r\n\t * @param editionId - ID of the edition being changed\r\n\t * @param signInterpretationId - ID of the sign interpretation being altered\r\n\t * @param attributeValueId - Id of the attribute value to be altered\r\n\t * @param alteredSignInterpretationAttribute - New details of the attribute\r\n\t * @returns - The updated sign interpretation\r\n\t */\r\n public async putV1EditionsEditionIdSignInterpretationsSignInterpretationIdAttributesAttributeValueId(editionId: number, signInterpretationId: number, attributeValueId: number, alteredSignInterpretationAttribute: InterpretationAttributeCreateDTO): Promise {\r\n return await this._connection.invoke('PutV1EditionsEditionIdSignInterpretationsSignInterpretationIdAttributesAttributeValueId', editionId, signInterpretationId, attributeValueId, alteredSignInterpretationAttribute);\r\n }\r\n\r\n /**\r\n\t * This deletes the specified attribute value from the specified sign interpretation.\r\n\t *\r\n\t * @param editionId - ID of the edition being changed\r\n\t * @param signInterpretationId - ID of the sign interpretation being altered\r\n\t * @param attributeValueId - Id of the attribute being removed\r\n\t * @returns - Ok or Error\r\n\t */\r\n public async deleteV1EditionsEditionIdSignInterpretationsSignInterpretationIdAttributesAttributeValueId(editionId: number, signInterpretationId: number, attributeValueId: number): Promise {\r\n return await this._connection.invoke('DeleteV1EditionsEditionIdSignInterpretationsSignInterpretationIdAttributesAttributeValueId', editionId, signInterpretationId, attributeValueId);\r\n }\r\n\r\n /**\r\n\t * This is an admin endpoint used to trigger the generation of materialized sign streams.\r\n\t *\t\t These streams are generated on demand by the API, but it can happen that some do not\r\n\t *\t\t complete (a record in the database exists when a materialization was started but\r\n\t *\t\t never finished).\r\n\t *\r\n\t * @param requestedEditions - \r\n\t *\t\t A list of edition IDs for which to generate materialized\r\n\t *\t\t sign streams. If the list is empty, then the system will look for any unfinished\r\n\t *\t\t jobs and complete those.\r\n\t *\t\t \r\n\t *\r\n\t */\r\n public async postV1MaterializeSignStreams(requestedEditions: RequestMaterializationDTO): Promise {\r\n return await this._connection.invoke('PostV1MaterializeSignStreams', requestedEditions);\r\n }\r\n\r\n /**\r\n\t * Creates a new text fragment in the given edition of a scroll\r\n\t *\r\n\t * @param createFragment - A JSON object with the details of the new text fragment to be created\r\n\t * @param editionId - Id of the edition\r\n\t *\r\n\t */\r\n public async postV1EditionsEditionIdTextFragments(editionId: number, createFragment: CreateTextFragmentDTO): Promise {\r\n return await this._connection.invoke('PostV1EditionsEditionIdTextFragments', editionId, createFragment);\r\n }\r\n\r\n /**\r\n\t * Updates the specified text fragment with the submitted properties\r\n\t *\r\n\t * @param editionId - Edition of the text fragment being updates\r\n\t * @param textFragmentId - Id of the text fragment being updates\r\n\t * @param updatedTextFragment - Details of the updated text fragment\r\n\t * @returns - The details of the updated text fragment\r\n\t */\r\n public async putV1EditionsEditionIdTextFragmentsTextFragmentId(editionId: number, textFragmentId: number, updatedTextFragment: UpdateTextFragmentDTO): Promise {\r\n return await this._connection.invoke('PutV1EditionsEditionIdTextFragmentsTextFragmentId', editionId, textFragmentId, updatedTextFragment);\r\n }\r\n\r\n /**\r\n\t * Retrieves the ids of all Fragments of all fragments in the given edition of a scroll\r\n\t *\r\n\t * @param editionId - Id of the edition\r\n\t * @returns - An array of the text fragment ids in correct sequence\r\n\t */\r\n public async getV1EditionsEditionIdTextFragments(editionId: number): Promise {\r\n return await this._connection.invoke('GetV1EditionsEditionIdTextFragments', editionId);\r\n }\r\n\r\n /**\r\n\t * Retrieves the ids of all Artefacts in the given textFragmentName\r\n\t *\r\n\t * @param editionId - Id of the edition\r\n\t * @param textFragmentId - Id of the text fragment\r\n\t * @returns - An array of the line ids in the proper sequence\r\n\t */\r\n public async getV1EditionsEditionIdTextFragmentsTextFragmentIdArtefacts(editionId: number, textFragmentId: number): Promise {\r\n return await this._connection.invoke('GetV1EditionsEditionIdTextFragmentsTextFragmentIdArtefacts', editionId, textFragmentId);\r\n }\r\n\r\n /**\r\n\t * Retrieves the ids of all lines in the given textFragmentName\r\n\t *\r\n\t * @param editionId - Id of the edition\r\n\t * @param textFragmentId - Id of the text fragment\r\n\t * @returns - An array of the line ids in the proper sequence\r\n\t */\r\n public async getV1EditionsEditionIdTextFragmentsTextFragmentIdLines(editionId: number, textFragmentId: number): Promise {\r\n return await this._connection.invoke('GetV1EditionsEditionIdTextFragmentsTextFragmentIdLines', editionId, textFragmentId);\r\n }\r\n\r\n /**\r\n\t * Retrieves all signs and their data from the given textFragmentName\r\n\t *\r\n\t * @param editionId - Id of the edition\r\n\t * @param textFragmentId - Id of the text fragment\r\n\t * @returns - \r\n\t *\t\t A manuscript edition object including the fragments and their lines in a hierarchical order and in correct\r\n\t *\t\t sequence\r\n\t *\t\t \r\n\t */\r\n public async getV1EditionsEditionIdTextFragmentsTextFragmentId(editionId: number, textFragmentId: number): Promise {\r\n return await this._connection.invoke('GetV1EditionsEditionIdTextFragmentsTextFragmentId', editionId, textFragmentId);\r\n }\r\n\r\n /**\r\n\t * Retrieves all signs and their data from the entire edition\r\n\t *\r\n\t * @param editionId - Id of the edition\r\n\t * @returns - \r\n\t *\t\t A manuscript edition object including the fragments and their lines in a hierarchical order and in correct\r\n\t *\t\t sequence\r\n\t *\t\t \r\n\t */\r\n public async getV1EditionsEditionIdFullText(editionId: number): Promise {\r\n return await this._connection.invoke('GetV1EditionsEditionIdFullText', editionId);\r\n }\r\n\r\n /**\r\n\t * Retrieves all signs and their data from the given line\r\n\t *\r\n\t * @param editionId - Id of the edition\r\n\t * @param lineId - Id of the line\r\n\t * @returns - \r\n\t *\t\t A manuscript edition object including the fragments and their lines in a\r\n\t *\t\t hierarchical order and in correct sequence\r\n\t *\t\t \r\n\t */\r\n public async getV1EditionsEditionIdLinesLineId(editionId: number, lineId: number): Promise {\r\n return await this._connection.invoke('GetV1EditionsEditionIdLinesLineId', editionId, lineId);\r\n }\r\n\r\n /**\r\n\t * Changes the details of the line (currently the lines name)\r\n\t *\r\n\t * @param editionId - Id of the edition\r\n\t * @param lineId - Id of the line\r\n\t * @param lineData - The updated line data\r\n\t * @returns - \r\n\t *\t\t The updated details concerning the line sequence\r\n\t *\t\t \r\n\t */\r\n public async putV1EditionsEditionIdLinesLineId(editionId: number, lineId: number, lineData: UpdateLineDTO): Promise {\r\n return await this._connection.invoke('PutV1EditionsEditionIdLinesLineId', editionId, lineId, lineData);\r\n }\r\n\r\n /**\r\n\t * Delete a full line from a text fragment\r\n\t *\r\n\t * @param editionId - Id of the edition\r\n\t * @param lineId - Id of the line to be deleted\r\n\t * @returns - \r\n\t *\t\t The updated details concerning the line sequence\r\n\t *\t\t \r\n\t */\r\n public async deleteV1EditionsEditionIdLinesLineId(editionId: number, lineId: number): Promise {\r\n return await this._connection.invoke('DeleteV1EditionsEditionIdLinesLineId', editionId, lineId);\r\n }\r\n\r\n /**\r\n\t * Creates a new line before or after another line.\r\n\t *\r\n\t * @param editionId - Id of the edition\r\n\t * @param textFragmentId - \r\n\t *\t\t Id of the text fragment where the line will be\r\n\t *\t\t added\r\n\t *\t\t \r\n\t * @param lineData - The information about the line to be created\r\n\t * @returns - \r\n\t *\t\t The details concerning the newly created line\r\n\t *\t\t \r\n\t */\r\n public async postV1EditionsEditionIdTextFragmentsTextFragmentIdLines(editionId: number, textFragmentId: number, lineData: CreateLineDTO): Promise {\r\n return await this._connection.invoke('PostV1EditionsEditionIdTextFragmentsTextFragmentIdLines', editionId, textFragmentId, lineData);\r\n }\r\n\r\n /**\r\n\t * Alter the text between two sign interpretation ids.\r\n\t *\t\t The system will try as best it can to figure out\r\n\t *\t\t how the next text aligns with any text already\r\n\t *\t\t existing at that location in the edition.\r\n\t *\r\n\t * @param editionId - Id of the edition to be updated\r\n\t * @param payload - Details of the text replacement request\r\n\t * @returns - \r\n\t *\t\t Information about all sign interpretations that were\r\n\t *\t\t created, updated, and deleted as a result of the operation.\r\n\t *\t\t \r\n\t */\r\n public async putV1EditionsEditionIdDiffReplaceText(editionId: number, payload: DiffReplaceRequestDTO): Promise {\r\n return await this._connection.invoke('PutV1EditionsEditionIdDiffReplaceText', editionId, payload);\r\n }\r\n\r\n /**\r\n\t * Provides a JWT bearer token for valid email and password\r\n\t *\r\n\t * @param payload - JSON object with an email and password parameter\r\n\t * @returns - \r\n\t *\t\t A DetailedUserTokenDTO with a JWT for activated user accounts, or the email address of an unactivated user\r\n\t *\t\t account\r\n\t *\t\t \r\n\t */\r\n public async postV1UsersLogin(payload: LoginRequestDTO): Promise {\r\n return await this._connection.invoke('PostV1UsersLogin', payload);\r\n }\r\n\r\n /**\r\n\t * Allows a user who has not yet activated their account to change their email address. This will not work if the user\r\n\t *\t\t account associated with the email address has already been activated\r\n\t *\r\n\t * @param payload - JSON object with the current email address and the new desired email address\r\n\t *\r\n\t */\r\n public async postV1UsersChangeUnactivatedEmail(payload: UnactivatedEmailUpdateRequestDTO): Promise {\r\n return await this._connection.invoke('PostV1UsersChangeUnactivatedEmail', payload);\r\n }\r\n\r\n /**\r\n\t * Uses the secret token from /users/forgot-password to validate a reset of the user's password\r\n\t *\r\n\t * @param payload - A JSON object with the secret token and the new password\r\n\t *\r\n\t */\r\n public async postV1UsersChangeForgottenPassword(payload: ResetForgottenUserPasswordRequestDTO): Promise {\r\n return await this._connection.invoke('PostV1UsersChangeForgottenPassword', payload);\r\n }\r\n\r\n /**\r\n\t * Changes the password for the currently logged in user\r\n\t *\r\n\t * @param payload - A JSON object with the old password and the new password\r\n\t *\r\n\t */\r\n public async postV1UsersChangePassword(payload: ResetLoggedInUserPasswordRequestDTO): Promise {\r\n return await this._connection.invoke('PostV1UsersChangePassword', payload);\r\n }\r\n\r\n /**\r\n\t * Updates a user's registration details. Note that the if the email address has changed, the account will be set to\r\n\t *\t\t inactive until the account is activated with the secret token.\r\n\t *\r\n\t * @param payload - \r\n\t *\t\t A JSON object with all data necessary to update a user account. Null fields (but not empty\r\n\t *\t\t strings!) will be populated with existing user data\r\n\t *\t\t \r\n\t * @returns - Returns a DetailedUserDTO with the updated user account details\r\n\t */\r\n public async putV1Users(payload: UserUpdateRequestDTO): Promise {\r\n return await this._connection.invoke('PutV1Users', payload);\r\n }\r\n\r\n /**\r\n\t * Confirms registration of new user account.\r\n\t *\r\n\t * @param payload - JSON object with token from user registration email\r\n\t * @returns - Returns a DetailedUserDTO for the confirmed account\r\n\t */\r\n public async postV1UsersConfirmRegistration(payload: AccountActivationRequestDTO): Promise {\r\n return await this._connection.invoke('PostV1UsersConfirmRegistration', payload);\r\n }\r\n\r\n /**\r\n\t * Sends a secret token to the user's email to allow password reset.\r\n\t *\r\n\t * @param payload - JSON object with the email address for the user who wants to reset a lost password\r\n\t *\r\n\t */\r\n public async postV1UsersForgotPassword(payload: ResetUserPasswordRequestDTO): Promise {\r\n return await this._connection.invoke('PostV1UsersForgotPassword', payload);\r\n }\r\n\r\n /**\r\n\t * Provides the user details for a user with valid JWT in the Authorize header\r\n\t *\r\n\t *\r\n\t * @returns - A UserDTO for user account.\r\n\t */\r\n public async getV1Users(): Promise {\r\n return await this._connection.invoke('GetV1Users');\r\n }\r\n\r\n /**\r\n\t * Creates a new user with the submitted data.\r\n\t *\r\n\t * @param payload - A JSON object with all data necessary to create a new user account\r\n\t * @returns - Returns a UserDTO for the newly created account\r\n\t */\r\n public async postV1Users(payload: NewUserRequestDTO): Promise {\r\n return await this._connection.invoke('PostV1Users', payload);\r\n }\r\n\r\n /**\r\n\t * Sends a new activation email for the user's account. This will not work if the user account associated with the\r\n\t *\t\t email address has already been activated.\r\n\t *\r\n\t * @param payload - JSON object with the current email address and the new desired email address\r\n\t *\r\n\t */\r\n public async postV1UsersResendActivationEmail(payload: ResendUserAccountActivationRequestDTO): Promise {\r\n return await this._connection.invoke('PostV1UsersResendActivationEmail', payload);\r\n }\r\n\r\n /**\r\n\t * Retrieve the information in the user's personal data store\r\n\t *\r\n\t *\r\n\t *\r\n\t */\r\n public async getV1UsersDataStore(): Promise {\r\n return await this._connection.invoke('GetV1UsersDataStore');\r\n }\r\n\r\n /**\r\n\t * Update the information in the user's personal data store\r\n\t *\r\n\t * @param data - A JSON object with the data to store for the user\r\n\t *\r\n\t */\r\n public async putV1UsersDataStore(data: UserDataStoreDTO): Promise {\r\n return await this._connection.invoke('PutV1UsersDataStore', data);\r\n }\r\n\r\n /**\r\n\t * Checks a WKT polygon to ensure validity. If the polygon is invalid,\r\n\t *\t\t it attempts to construct a valid polygon that matches the original\r\n\t *\t\t as closely as possible.\r\n\t *\r\n\t * @param payload - JSON object with the WKT polygon to validate\r\n\t *\r\n\t */\r\n public async postV1UtilsRepairWktPolygon(payload: WktPolygonDTO): Promise {\r\n return await this._connection.invoke('PostV1UtilsRepairWktPolygon', payload);\r\n }\r\n\r\n /**\r\n\t * Provides the current version designation of the database along with\r\n\t *\t\t the date it was updated to that version.\r\n\t *\r\n\t *\r\n\t *\r\n\t */\r\n public async getV1UtilsDatabaseVersion(): Promise {\r\n return await this._connection.invoke('GetV1UtilsDatabaseVersion');\r\n }\r\n\r\n /**\r\n\t * Provides the current version designation of the API server along with\r\n\t *\t\t the date it was updated to that version.\r\n\t *\r\n\t *\r\n\t *\r\n\t */\r\n public async getV1UtilsApiVersion(): Promise {\r\n return await this._connection.invoke('GetV1UtilsApiVersion');\r\n }\r\n\r\n /**\r\n\t * Override the default OnConnectedAsync to add the connection to the user's user_id\r\n\t *\t\t group if the user is authenticated. The user_id group is used for messages that\r\n\t *\t\t are above the level of a single edition.\r\n\t *\r\n\t *\r\n\t *\r\n\t */\r\n public async onConnectedAsync(): Promise {\r\n return await this._connection.invoke('OnConnectedAsync');\r\n }\r\n\r\n /**\r\n\t * The client subscribes to all changes for the specified editionId.\r\n\t *\r\n\t * @param editionId - The ID of the edition to receive updates\r\n\t *\r\n\t */\r\n public async subscribeToEdition(editionId: number): Promise {\r\n return await this._connection.invoke('SubscribeToEdition', editionId);\r\n }\r\n\r\n /**\r\n\t * The client unsubscribes to all changes for the specified editionId.\r\n\t *\r\n\t * @param editionId - The ID of the edition to stop receiving updates\r\n\t *\r\n\t */\r\n public async unsubscribeToEdition(editionId: number): Promise {\r\n return await this._connection.invoke('UnsubscribeToEdition', editionId);\r\n }\r\n\r\n /**\r\n\t * Get a list of all editions the client is currently subscribed to.\r\n\t *\r\n\t *\r\n\t * @returns - A list of every editionId for which the client receives update\r\n\t */\r\n public async listEditionSubscriptions(): Promise {\r\n return await this._connection.invoke('ListEditionSubscriptions');\r\n }\r\n\r\n /*\r\n * Client methods.\r\n */\r\n\r\n /**\r\n\t * Add a listener for when the server broadcasts a new text fragment has been created\r\n\t *\r\n\t */\r\n public connectCreatedTextFragment(handler: (msg: TextFragmentDataDTO) => void): void {\r\n this._connection.on('CreatedTextFragment', handler)\r\n }\r\n\r\n /**\r\n\t * Remove an existing listener that triggers when the server broadcasts a new text fragment has been created\r\n\t *\r\n\t */\r\n public disconnectCreatedTextFragment(handler: (msg: TextFragmentDataDTO) => void): void {\r\n this._connection.off('CreatedTextFragment', handler)\r\n }\r\n\r\n\r\n /**\r\n\t * Add a listener for when the server broadcasts a text fragment has been updated\r\n\t *\r\n\t */\r\n public connectUpdatedTextFragment(handler: (msg: TextFragmentDataDTO) => void): void {\r\n this._connection.on('UpdatedTextFragment', handler)\r\n }\r\n\r\n /**\r\n\t * Remove an existing listener that triggers when the server broadcasts a text fragment has been updated\r\n\t *\r\n\t */\r\n public disconnectUpdatedTextFragment(handler: (msg: TextFragmentDataDTO) => void): void {\r\n this._connection.off('UpdatedTextFragment', handler)\r\n }\r\n\r\n\r\n /**\r\n\t * Add a listener for when the server broadcasts a new text fragment has been created\r\n\t *\r\n\t */\r\n public connectCreatedLine(handler: (msg: LineDataDTO) => void): void {\r\n this._connection.on('CreatedLine', handler)\r\n }\r\n\r\n /**\r\n\t * Remove an existing listener that triggers when the server broadcasts a new text fragment has been created\r\n\t *\r\n\t */\r\n public disconnectCreatedLine(handler: (msg: LineDataDTO) => void): void {\r\n this._connection.off('CreatedLine', handler)\r\n }\r\n\r\n\r\n /**\r\n\t * Add a listener for when the server broadcasts a text fragment has been updated\r\n\t *\r\n\t */\r\n public connectUpdatedLine(handler: (msg: LineDataDTO) => void): void {\r\n this._connection.on('UpdatedLine', handler)\r\n }\r\n\r\n /**\r\n\t * Remove an existing listener that triggers when the server broadcasts a text fragment has been updated\r\n\t *\r\n\t */\r\n public disconnectUpdatedLine(handler: (msg: LineDataDTO) => void): void {\r\n this._connection.off('UpdatedLine', handler)\r\n }\r\n\r\n\r\n /**\r\n\t * Add a listener for when the server broadcasts a text fragment has been updated\r\n\t *\r\n\t */\r\n public connectDeletedLine(handler: (msg: DeleteIntIdDTO) => void): void {\r\n this._connection.on('DeletedLine', handler)\r\n }\r\n\r\n /**\r\n\t * Remove an existing listener that triggers when the server broadcasts a text fragment has been updated\r\n\t *\r\n\t */\r\n public disconnectDeletedLine(handler: (msg: DeleteIntIdDTO) => void): void {\r\n this._connection.off('DeletedLine', handler)\r\n }\r\n\r\n\r\n /**\r\n\t * Add a listener for when the server broadcasts a editor has been requested for the edition\r\n\t *\r\n\t */\r\n public connectRequestedEditor(handler: (msg: EditorInvitationDTO) => void): void {\r\n this._connection.on('RequestedEditor', handler)\r\n }\r\n\r\n /**\r\n\t * Remove an existing listener that triggers when the server broadcasts a editor has been requested for the edition\r\n\t *\r\n\t */\r\n public disconnectRequestedEditor(handler: (msg: EditorInvitationDTO) => void): void {\r\n this._connection.off('RequestedEditor', handler)\r\n }\r\n\r\n\r\n /**\r\n\t * Add a listener for when the server broadcasts a editor has been added to the edition\r\n\t *\r\n\t */\r\n public connectCreatedEditor(handler: (msg: DetailedEditorRightsDTO) => void): void {\r\n this._connection.on('CreatedEditor', handler)\r\n }\r\n\r\n /**\r\n\t * Remove an existing listener that triggers when the server broadcasts a editor has been added to the edition\r\n\t *\r\n\t */\r\n public disconnectCreatedEditor(handler: (msg: DetailedEditorRightsDTO) => void): void {\r\n this._connection.off('CreatedEditor', handler)\r\n }\r\n\r\n\r\n /**\r\n\t * Add a listener for when the server broadcasts an editor's permissions have been updated\r\n\t *\r\n\t */\r\n public connectUpdatedEditorEmail(handler: (msg: DetailedEditorRightsDTO) => void): void {\r\n this._connection.on('UpdatedEditorEmail', handler)\r\n }\r\n\r\n /**\r\n\t * Remove an existing listener that triggers when the server broadcasts an editor's permissions have been updated\r\n\t *\r\n\t */\r\n public disconnectUpdatedEditorEmail(handler: (msg: DetailedEditorRightsDTO) => void): void {\r\n this._connection.off('UpdatedEditorEmail', handler)\r\n }\r\n\r\n\r\n /**\r\n\t * Add a listener for when the server broadcasts a new text edition has been created\r\n\t *\r\n\t */\r\n public connectCreatedEdition(handler: (msg: EditionDTO) => void): void {\r\n this._connection.on('CreatedEdition', handler)\r\n }\r\n\r\n /**\r\n\t * Remove an existing listener that triggers when the server broadcasts a new text edition has been created\r\n\t *\r\n\t */\r\n public disconnectCreatedEdition(handler: (msg: EditionDTO) => void): void {\r\n this._connection.off('CreatedEdition', handler)\r\n }\r\n\r\n\r\n /**\r\n\t * Add a listener for when the server broadcasts an edition has been deleted\r\n\t *\r\n\t */\r\n public connectDeletedEdition(handler: (msg: ArchiveTokenDTO) => void): void {\r\n this._connection.on('DeletedEdition', handler)\r\n }\r\n\r\n /**\r\n\t * Remove an existing listener that triggers when the server broadcasts an edition has been deleted\r\n\t *\r\n\t */\r\n public disconnectDeletedEdition(handler: (msg: ArchiveTokenDTO) => void): void {\r\n this._connection.off('DeletedEdition', handler)\r\n }\r\n\r\n\r\n /**\r\n\t * Add a listener for when the server broadcasts an edition's details have been updated\r\n\t *\r\n\t */\r\n public connectUpdatedEdition(handler: (msg: EditionDTO) => void): void {\r\n this._connection.on('UpdatedEdition', handler)\r\n }\r\n\r\n /**\r\n\t * Remove an existing listener that triggers when the server broadcasts an edition's details have been updated\r\n\t *\r\n\t */\r\n public disconnectUpdatedEdition(handler: (msg: EditionDTO) => void): void {\r\n this._connection.off('UpdatedEdition', handler)\r\n }\r\n\r\n\r\n /**\r\n\t * Add a listener for when the server broadcasts one or more new ROI's have been created\r\n\t *\r\n\t */\r\n public connectCreatedRoisBatch(handler: (msg: InterpretationRoiDTOList) => void): void {\r\n this._connection.on('CreatedRoisBatch', handler)\r\n }\r\n\r\n /**\r\n\t * Remove an existing listener that triggers when the server broadcasts one or more new ROI's have been created\r\n\t *\r\n\t */\r\n public disconnectCreatedRoisBatch(handler: (msg: InterpretationRoiDTOList) => void): void {\r\n this._connection.off('CreatedRoisBatch', handler)\r\n }\r\n\r\n\r\n /**\r\n\t * Add a listener for when the server broadcasts one or more new ROI's have been updated\r\n\t *\r\n\t */\r\n public connectEditedRoisBatch(handler: (msg: BatchEditRoiResponseDTO) => void): void {\r\n this._connection.on('EditedRoisBatch', handler)\r\n }\r\n\r\n /**\r\n\t * Remove an existing listener that triggers when the server broadcasts one or more new ROI's have been updated\r\n\t *\r\n\t */\r\n public disconnectEditedRoisBatch(handler: (msg: BatchEditRoiResponseDTO) => void): void {\r\n this._connection.off('EditedRoisBatch', handler)\r\n }\r\n\r\n\r\n /**\r\n\t * Add a listener for when the server broadcasts one or more new ROI's have been updated\r\n\t *\r\n\t */\r\n public connectUpdatedRoisBatch(handler: (msg: UpdatedInterpretationRoiDTOList) => void): void {\r\n this._connection.on('UpdatedRoisBatch', handler)\r\n }\r\n\r\n /**\r\n\t * Remove an existing listener that triggers when the server broadcasts one or more new ROI's have been updated\r\n\t *\r\n\t */\r\n public disconnectUpdatedRoisBatch(handler: (msg: UpdatedInterpretationRoiDTOList) => void): void {\r\n this._connection.off('UpdatedRoisBatch', handler)\r\n }\r\n\r\n\r\n /**\r\n\t * Add a listener for when the server broadcasts a ROI has been deleted\r\n\t *\r\n\t */\r\n public connectDeletedRoi(handler: (msg: DeleteIntIdDTO) => void): void {\r\n this._connection.on('DeletedRoi', handler)\r\n }\r\n\r\n /**\r\n\t * Remove an existing listener that triggers when the server broadcasts a ROI has been deleted\r\n\t *\r\n\t */\r\n public disconnectDeletedRoi(handler: (msg: DeleteIntIdDTO) => void): void {\r\n this._connection.off('DeletedRoi', handler)\r\n }\r\n\r\n\r\n /**\r\n\t * Add a listener for when the server broadcasts an artefact has been created\r\n\t *\r\n\t */\r\n public connectCreatedArtefact(handler: (msg: ArtefactDTO) => void): void {\r\n this._connection.on('CreatedArtefact', handler)\r\n }\r\n\r\n /**\r\n\t * Remove an existing listener that triggers when the server broadcasts an artefact has been created\r\n\t *\r\n\t */\r\n public disconnectCreatedArtefact(handler: (msg: ArtefactDTO) => void): void {\r\n this._connection.off('CreatedArtefact', handler)\r\n }\r\n\r\n\r\n /**\r\n\t * Add a listener for when the server broadcasts an artefact has been deleted\r\n\t *\r\n\t */\r\n public connectDeletedArtefact(handler: (msg: DeleteIntIdDTO) => void): void {\r\n this._connection.on('DeletedArtefact', handler)\r\n }\r\n\r\n /**\r\n\t * Remove an existing listener that triggers when the server broadcasts an artefact has been deleted\r\n\t *\r\n\t */\r\n public disconnectDeletedArtefact(handler: (msg: DeleteIntIdDTO) => void): void {\r\n this._connection.off('DeletedArtefact', handler)\r\n }\r\n\r\n\r\n /**\r\n\t * Add a listener for when the server broadcasts an artefact has been updated\r\n\t *\r\n\t */\r\n public connectUpdatedArtefact(handler: (msg: ArtefactDTO) => void): void {\r\n this._connection.on('UpdatedArtefact', handler)\r\n }\r\n\r\n /**\r\n\t * Remove an existing listener that triggers when the server broadcasts an artefact has been updated\r\n\t *\r\n\t */\r\n public disconnectUpdatedArtefact(handler: (msg: ArtefactDTO) => void): void {\r\n this._connection.off('UpdatedArtefact', handler)\r\n }\r\n\r\n\r\n /**\r\n\t * Add a listener for when the server broadcasts an artefact group has been created\r\n\t *\r\n\t */\r\n public connectCreatedArtefactGroup(handler: (msg: ArtefactGroupDTO) => void): void {\r\n this._connection.on('CreatedArtefactGroup', handler)\r\n }\r\n\r\n /**\r\n\t * Remove an existing listener that triggers when the server broadcasts an artefact group has been created\r\n\t *\r\n\t */\r\n public disconnectCreatedArtefactGroup(handler: (msg: ArtefactGroupDTO) => void): void {\r\n this._connection.off('CreatedArtefactGroup', handler)\r\n }\r\n\r\n\r\n /**\r\n\t * Add a listener for when the server broadcasts and artefact group has been updated\r\n\t *\r\n\t */\r\n public connectUpdatedArtefactGroup(handler: (msg: ArtefactGroupDTO) => void): void {\r\n this._connection.on('UpdatedArtefactGroup', handler)\r\n }\r\n\r\n /**\r\n\t * Remove an existing listener that triggers when the server broadcasts and artefact group has been updated\r\n\t *\r\n\t */\r\n public disconnectUpdatedArtefactGroup(handler: (msg: ArtefactGroupDTO) => void): void {\r\n this._connection.off('UpdatedArtefactGroup', handler)\r\n }\r\n\r\n\r\n /**\r\n\t * Add a listener for when the server broadcasts an artefact group has been deleted\r\n\t *\r\n\t */\r\n public connectDeletedArtefactGroup(handler: (msg: DeleteIntIdDTO) => void): void {\r\n this._connection.on('DeletedArtefactGroup', handler)\r\n }\r\n\r\n /**\r\n\t * Remove an existing listener that triggers when the server broadcasts an artefact group has been deleted\r\n\t *\r\n\t */\r\n public disconnectDeletedArtefactGroup(handler: (msg: DeleteIntIdDTO) => void): void {\r\n this._connection.off('DeletedArtefactGroup', handler)\r\n }\r\n\r\n\r\n /**\r\n\t * Add a listener for when the server broadcasts the transform details for a batch of artefacts has been updated\r\n\t *\r\n\t */\r\n public connectBatchUpdatedArtefactTransform(handler: (msg: BatchUpdatedArtefactTransformDTO) => void): void {\r\n this._connection.on('BatchUpdatedArtefactTransform', handler)\r\n }\r\n\r\n /**\r\n\t * Remove an existing listener that triggers when the server broadcasts the transform details for a batch of artefacts has been updated\r\n\t *\r\n\t */\r\n public disconnectBatchUpdatedArtefactTransform(handler: (msg: BatchUpdatedArtefactTransformDTO) => void): void {\r\n this._connection.off('BatchUpdatedArtefactTransform', handler)\r\n }\r\n\r\n\r\n /**\r\n\t * Add a listener for when the server broadcasts the create of a sign interpretation\r\n\t *\r\n\t */\r\n public connectCreatedSignInterpretation(handler: (msg: SignInterpretationListDTO) => void): void {\r\n this._connection.on('CreatedSignInterpretation', handler)\r\n }\r\n\r\n /**\r\n\t * Remove an existing listener that triggers when the server broadcasts the create of a sign interpretation\r\n\t *\r\n\t */\r\n public disconnectCreatedSignInterpretation(handler: (msg: SignInterpretationListDTO) => void): void {\r\n this._connection.off('CreatedSignInterpretation', handler)\r\n }\r\n\r\n\r\n /**\r\n\t * Add a listener for when the server broadcasts the update of a sign interpretation\r\n\t *\r\n\t */\r\n public connectUpdatedSignInterpretation(handler: (msg: SignInterpretationDTO) => void): void {\r\n this._connection.on('UpdatedSignInterpretation', handler)\r\n }\r\n\r\n /**\r\n\t * Remove an existing listener that triggers when the server broadcasts the update of a sign interpretation\r\n\t *\r\n\t */\r\n public disconnectUpdatedSignInterpretation(handler: (msg: SignInterpretationDTO) => void): void {\r\n this._connection.off('UpdatedSignInterpretation', handler)\r\n }\r\n\r\n\r\n /**\r\n\t * Add a listener for when the server broadcasts the update of a sign interpretation\r\n\t *\r\n\t */\r\n public connectUpdatedSignInterpretations(handler: (msg: SignInterpretationListDTO) => void): void {\r\n this._connection.on('UpdatedSignInterpretations', handler)\r\n }\r\n\r\n /**\r\n\t * Remove an existing listener that triggers when the server broadcasts the update of a sign interpretation\r\n\t *\r\n\t */\r\n public disconnectUpdatedSignInterpretations(handler: (msg: SignInterpretationListDTO) => void): void {\r\n this._connection.off('UpdatedSignInterpretations', handler)\r\n }\r\n\r\n\r\n /**\r\n\t * Add a listener for when the server broadcasts the delete of a sign interpretation\r\n\t *\r\n\t */\r\n public connectDeletedSignInterpretation(handler: (msg: DeleteIntIdDTO) => void): void {\r\n this._connection.on('DeletedSignInterpretation', handler)\r\n }\r\n\r\n /**\r\n\t * Remove an existing listener that triggers when the server broadcasts the delete of a sign interpretation\r\n\t *\r\n\t */\r\n public disconnectDeletedSignInterpretation(handler: (msg: DeleteIntIdDTO) => void): void {\r\n this._connection.off('DeletedSignInterpretation', handler)\r\n }\r\n\r\n\r\n /**\r\n\t * Add a listener for when the server broadcasts the creation of an attribute\r\n\t *\r\n\t */\r\n public connectCreatedAttribute(handler: (msg: AttributeDTO) => void): void {\r\n this._connection.on('CreatedAttribute', handler)\r\n }\r\n\r\n /**\r\n\t * Remove an existing listener that triggers when the server broadcasts the creation of an attribute\r\n\t *\r\n\t */\r\n public disconnectCreatedAttribute(handler: (msg: AttributeDTO) => void): void {\r\n this._connection.off('CreatedAttribute', handler)\r\n }\r\n\r\n\r\n /**\r\n\t * Add a listener for when the server broadcasts the update of an attribute\r\n\t *\r\n\t */\r\n public connectUpdatedAttribute(handler: (msg: AttributeDTO) => void): void {\r\n this._connection.on('UpdatedAttribute', handler)\r\n }\r\n\r\n /**\r\n\t * Remove an existing listener that triggers when the server broadcasts the update of an attribute\r\n\t *\r\n\t */\r\n public disconnectUpdatedAttribute(handler: (msg: AttributeDTO) => void): void {\r\n this._connection.off('UpdatedAttribute', handler)\r\n }\r\n\r\n\r\n /**\r\n\t * Add a listener for when the server broadcasts the delete of an attribute\r\n\t *\r\n\t */\r\n public connectDeletedAttribute(handler: (msg: DeleteIntIdDTO) => void): void {\r\n this._connection.on('DeletedAttribute', handler)\r\n }\r\n\r\n /**\r\n\t * Remove an existing listener that triggers when the server broadcasts the delete of an attribute\r\n\t *\r\n\t */\r\n public disconnectDeletedAttribute(handler: (msg: DeleteIntIdDTO) => void): void {\r\n this._connection.off('DeletedAttribute', handler)\r\n }\r\n\r\n\r\n /**\r\n\t * Add a listener for when the server broadcasts the creation of scribal font information\r\n\t *\r\n\t */\r\n public connectCreatedScribalFontInfo(handler: (msg: ScriptDataDTO) => void): void {\r\n this._connection.on('CreatedScribalFontInfo', handler)\r\n }\r\n\r\n /**\r\n\t * Remove an existing listener that triggers when the server broadcasts the creation of scribal font information\r\n\t *\r\n\t */\r\n public disconnectCreatedScribalFontInfo(handler: (msg: ScriptDataDTO) => void): void {\r\n this._connection.off('CreatedScribalFontInfo', handler)\r\n }\r\n\r\n\r\n /**\r\n\t * Add a listener for when the server broadcasts the update of scribal font information\r\n\t *\r\n\t */\r\n public connectUpdatedScribalFontInfo(handler: (msg: ScriptDataDTO) => void): void {\r\n this._connection.on('UpdatedScribalFontInfo', handler)\r\n }\r\n\r\n /**\r\n\t * Remove an existing listener that triggers when the server broadcasts the update of scribal font information\r\n\t *\r\n\t */\r\n public disconnectUpdatedScribalFontInfo(handler: (msg: ScriptDataDTO) => void): void {\r\n this._connection.off('UpdatedScribalFontInfo', handler)\r\n }\r\n\r\n\r\n /**\r\n\t * Add a listener for when the server broadcasts the creation of scribal font kerning pair\r\n\t *\r\n\t */\r\n public connectCreatedScribalFontKerningPair(handler: (msg: KernPairDTO) => void): void {\r\n this._connection.on('CreatedScribalFontKerningPair', handler)\r\n }\r\n\r\n /**\r\n\t * Remove an existing listener that triggers when the server broadcasts the creation of scribal font kerning pair\r\n\t *\r\n\t */\r\n public disconnectCreatedScribalFontKerningPair(handler: (msg: KernPairDTO) => void): void {\r\n this._connection.off('CreatedScribalFontKerningPair', handler)\r\n }\r\n\r\n\r\n /**\r\n\t * Add a listener for when the server broadcasts the update of scribal font kerning pair\r\n\t *\r\n\t */\r\n public connectUpdatedScribalFontKerningPair(handler: (msg: KernPairDTO) => void): void {\r\n this._connection.on('UpdatedScribalFontKerningPair', handler)\r\n }\r\n\r\n /**\r\n\t * Remove an existing listener that triggers when the server broadcasts the update of scribal font kerning pair\r\n\t *\r\n\t */\r\n public disconnectUpdatedScribalFontKerningPair(handler: (msg: KernPairDTO) => void): void {\r\n this._connection.off('UpdatedScribalFontKerningPair', handler)\r\n }\r\n\r\n\r\n /**\r\n\t * Add a listener for when the server broadcasts the deletion of scribal font kerning pair\r\n\t *\r\n\t */\r\n public connectDeletedScribalFontKerningPair(handler: (msg: DeleteKernPairDTO) => void): void {\r\n this._connection.on('DeletedScribalFontKerningPair', handler)\r\n }\r\n\r\n /**\r\n\t * Remove an existing listener that triggers when the server broadcasts the deletion of scribal font kerning pair\r\n\t *\r\n\t */\r\n public disconnectDeletedScribalFontKerningPair(handler: (msg: DeleteKernPairDTO) => void): void {\r\n this._connection.off('DeletedScribalFontKerningPair', handler)\r\n }\r\n\r\n\r\n /**\r\n\t * Add a listener for when the server broadcasts the creation of scribal font glyph\r\n\t *\r\n\t */\r\n public connectCreatedScribalFontGlyph(handler: (msg: GlyphDataDTO) => void): void {\r\n this._connection.on('CreatedScribalFontGlyph', handler)\r\n }\r\n\r\n /**\r\n\t * Remove an existing listener that triggers when the server broadcasts the creation of scribal font glyph\r\n\t *\r\n\t */\r\n public disconnectCreatedScribalFontGlyph(handler: (msg: GlyphDataDTO) => void): void {\r\n this._connection.off('CreatedScribalFontGlyph', handler)\r\n }\r\n\r\n\r\n /**\r\n\t * Add a listener for when the server broadcasts the update of scribal font glyph\r\n\t *\r\n\t */\r\n public connectUpdatedScribalFontGlyph(handler: (msg: GlyphDataDTO) => void): void {\r\n this._connection.on('UpdatedScribalFontGlyph', handler)\r\n }\r\n\r\n /**\r\n\t * Remove an existing listener that triggers when the server broadcasts the update of scribal font glyph\r\n\t *\r\n\t */\r\n public disconnectUpdatedScribalFontGlyph(handler: (msg: GlyphDataDTO) => void): void {\r\n this._connection.off('UpdatedScribalFontGlyph', handler)\r\n }\r\n\r\n\r\n /**\r\n\t * Add a listener for when the server broadcasts the deletion of scribal font glyph\r\n\t *\r\n\t */\r\n public connectDeletedScribalFontGlyph(handler: (msg: DeleteGlyphDataDTO) => void): void {\r\n this._connection.on('DeletedScribalFontGlyph', handler)\r\n }\r\n\r\n /**\r\n\t * Remove an existing listener that triggers when the server broadcasts the deletion of scribal font glyph\r\n\t *\r\n\t */\r\n public disconnectDeletedScribalFontGlyph(handler: (msg: DeleteGlyphDataDTO) => void): void {\r\n this._connection.off('DeletedScribalFontGlyph', handler)\r\n }\r\n\r\n\r\n /**\r\n\t * Add a listener for when the server broadcasts the deletion of a scribal font\r\n\t *\r\n\t */\r\n public connectDeletedScribalFont(handler: (msg: DeleteScribalFontDTO) => void): void {\r\n this._connection.on('DeletedScribalFont', handler)\r\n }\r\n\r\n /**\r\n\t * Remove an existing listener that triggers when the server broadcasts the deletion of a scribal font\r\n\t *\r\n\t */\r\n public disconnectDeletedScribalFont(handler: (msg: DeleteScribalFontDTO) => void): void {\r\n this._connection.off('DeletedScribalFont', handler)\r\n }\r\n\r\n\r\n /**\r\n\t * Add a listener for when the server broadcasts the addition of an imaged object to an edition\r\n\t *\r\n\t */\r\n public connectCreatedImagedObject(handler: (msg: ImagedObjectDTO) => void): void {\r\n this._connection.on('CreatedImagedObject', handler)\r\n }\r\n\r\n /**\r\n\t * Remove an existing listener that triggers when the server broadcasts the addition of an imaged object to an edition\r\n\t *\r\n\t */\r\n public disconnectCreatedImagedObject(handler: (msg: ImagedObjectDTO) => void): void {\r\n this._connection.off('CreatedImagedObject', handler)\r\n }\r\n\r\n\r\n /**\r\n\t * Add a listener for when the server broadcasts the removal of an imaged object from an edition\r\n\t *\r\n\t */\r\n public connectDeletedImagedObject(handler: (msg: DeleteStringIdDTO) => void): void {\r\n this._connection.on('DeletedImagedObject', handler)\r\n }\r\n\r\n /**\r\n\t * Remove an existing listener that triggers when the server broadcasts the removal of an imaged object from an edition\r\n\t *\r\n\t */\r\n public disconnectDeletedImagedObject(handler: (msg: DeleteStringIdDTO) => void): void {\r\n this._connection.off('DeletedImagedObject', handler)\r\n }\r\n\r\n} ","import _Vue from 'vue';\r\nimport signalR, { LogLevel, HubConnection, HubConnectionBuilder } from '@microsoft/signalr';\r\nimport { StateManager } from '@/state';\r\nimport { SignalRUtilities } from '@/dtos/sqe-signalr';\r\nimport { NotificationHandler } from './notification-handler';\r\n\r\ntype ConnectionStatus = 'closed' | 'connecting' | 'connected' | 'closing';\r\n\r\nexport class SignalRWrapper {\r\n // Manage the SignalR connection. This is a singleton class\r\n private static _instance: SignalRWrapper;\r\n\r\n private _connection?: HubConnection;\r\n private _utils?: SignalRUtilities;\r\n private _currentHandler?: NotificationHandler;\r\n private _status: ConnectionStatus = 'closed';\r\n private _subscribedEditionId?: number;\r\n\r\n public static get instance() {\r\n if (!SignalRWrapper._instance) {\r\n SignalRWrapper._instance = new SignalRWrapper();\r\n }\r\n\r\n return SignalRWrapper._instance;\r\n }\r\n\r\n private constructor() {\r\n if (!process.env.VUE_APP_SIGNALR_URL) {\r\n throw new Error('VUE_APP_SIGNALR_URL not defined, please add it to the environment');\r\n }\r\n }\r\n\r\n public async subscribeEdition(editionId: number) {\r\n if (this._subscribedEditionId === editionId) {\r\n return;\r\n }\r\n\r\n if (this._status !== 'connected') {\r\n await this.connect();\r\n }\r\n\r\n if (this._subscribedEditionId) {\r\n await this.unsubscribeEdition();\r\n }\r\n\r\n await this._utils!.subscribeToEdition(editionId);\r\n this._subscribedEditionId = editionId;\r\n }\r\n\r\n public async unsubscribeEdition() {\r\n if (this._status !== 'connected' || !this._subscribedEditionId) {\r\n return;\r\n }\r\n\r\n await this._utils!.unsubscribeToEdition(this._subscribedEditionId);\r\n this._subscribedEditionId = undefined;\r\n }\r\n\r\n public async userChanged() {\r\n const subscribed = this._subscribedEditionId;\r\n await this.disconnect();\r\n await this.connect();\r\n if (subscribed) {\r\n await this.subscribeEdition(subscribed);\r\n }\r\n }\r\n\r\n public registerNotificationHandler(handler: NotificationHandler) {\r\n this.unregisterNotificationHandler();\r\n this._currentHandler = handler;\r\n this.connectHandler();\r\n }\r\n\r\n public unregisterNotificationHandler() {\r\n if (this._currentHandler && this._utils) {\r\n this._utils.disconnectUpdatedEdition(this._currentHandler.handleUpdatedEdition);\r\n this._utils.disconnectCreatedArtefact(this._currentHandler.handleCreatedArtefact);\r\n this._utils.disconnectDeletedArtefact(this._currentHandler.handleDeletedArtefact);\r\n this._utils.disconnectUpdatedArtefact(this._currentHandler.handleUpdatedArtefact);\r\n this._utils.disconnectCreatedRoisBatch(this._currentHandler.handleCreatedRoisBatch);\r\n this._utils.disconnectEditedRoisBatch(this._currentHandler.handleEditedRoisBatch);\r\n this._utils.disconnectUpdatedRoisBatch(this._currentHandler.handleUpdatedRoisBatch);\r\n this._utils.disconnectDeletedRoi(this._currentHandler.handleDeletedRoi);\r\n this._utils.disconnectCreatedEditor(this._currentHandler.handleCreatedEditor);\r\n this._utils.disconnectUpdatedSignInterpretation(this._currentHandler.handleUpdatedSignInterpretation);\r\n this._utils.disconnectUpdatedSignInterpretations(this._currentHandler.handleUpdatedSignInterpretations);\r\n this._utils.disconnectDeletedSignInterpretation(this._currentHandler.handleDeletedSignInterpretation);\r\n this._utils.disconnectCreatedSignInterpretation(this._currentHandler.handleCreatedSignInterpretation);\r\n }\r\n this._currentHandler = undefined;\r\n }\r\n\r\n private connectHandler() {\r\n if (this._utils && this._currentHandler) {\r\n this._utils.connectUpdatedEdition(this._currentHandler.handleUpdatedEdition);\r\n this._utils.connectCreatedArtefact(this._currentHandler. handleCreatedArtefact);\r\n this._utils.connectDeletedArtefact(this._currentHandler.handleDeletedArtefact);\r\n this._utils.connectUpdatedArtefact(this._currentHandler.handleUpdatedArtefact);\r\n this._utils.connectCreatedRoisBatch(this._currentHandler.handleCreatedRoisBatch);\r\n this._utils.connectEditedRoisBatch(this._currentHandler.handleEditedRoisBatch);\r\n this._utils.connectUpdatedRoisBatch(this._currentHandler.handleUpdatedRoisBatch);\r\n this._utils.connectDeletedRoi(this._currentHandler.handleDeletedRoi);\r\n this._utils.connectCreatedEditor(this._currentHandler.handleCreatedEditor);\r\n this._utils.connectUpdatedSignInterpretation(this._currentHandler.handleUpdatedSignInterpretation);\r\n this._utils.connectUpdatedSignInterpretations(this._currentHandler.handleUpdatedSignInterpretations);\r\n this._utils.connectDeletedSignInterpretation(this._currentHandler.handleDeletedSignInterpretation);\r\n this._utils.connectCreatedSignInterpretation(this._currentHandler.handleCreatedSignInterpretation);\r\n }\r\n }\r\n\r\n private async connect() {\r\n if (this._connection) {\r\n this._connection.stop();\r\n }\r\n\r\n this._connection = new HubConnectionBuilder()\r\n .withUrl(process.env.VUE_APP_SIGNALR_URL!, {\r\n accessTokenFactory: () => StateManager.instance.session.token || '',\r\n // transport: 4 // signalR.HttpTransportType.LongPolling,\r\n }).configureLogging(process.env.NODE_ENV === 'development' ? LogLevel.Debug : LogLevel.Error)\r\n .withAutomaticReconnect()\r\n .build();\r\n this._utils = new SignalRUtilities(this._connection);\r\n\r\n this._status = 'connecting';\r\n try {\r\n await this._connection.start();\r\n this._status = 'connected';\r\n this._connection!.onclose(this.onConnectionClosed);\r\n\r\n if (this._currentHandler) {\r\n this.connectHandler();\r\n }\r\n } catch (error) {\r\n console.error(\"Can't connect to SignalR\", error);\r\n this._status = 'closed';\r\n }\r\n }\r\n\r\n private async disconnect() {\r\n // Note that when removing a listener you must pass a reference to the function\r\n // the listener was originally created with. You cannot use an anonymous function\r\n // that happens to do the ssame thing as the (anonymous) function passed in.\r\n\r\n if (this._status === 'connected') {\r\n this._status = 'closing';\r\n await this._connection!.stop();\r\n }\r\n\r\n this._status = 'closed';\r\n this._subscribedEditionId = undefined;\r\n }\r\n\r\n private onConnectionClosed(error?: Error) {\r\n if (this._status !== 'closing') {\r\n console.warn('SignalR connection closed unexpectedly', error);\r\n }\r\n this._status = 'closed';\r\n this._subscribedEditionId = undefined;\r\n }\r\n}\r\n","/*\r\n * This module contains utility functions for working with collections. Collections are assumed to be ID based\r\n */\r\n\r\nimport { ItemWithId } from '@/state/utilities';\r\nimport Vue from 'vue';\r\n\r\nfunction findInArray, U>(entityId: U, array: T[]): number {\r\n return array.findIndex(e => e.id === entityId);\r\n}\r\n\r\nexport function addToArray, U>(entity: T, array?: T[]) {\r\n if (!array) {\r\n return;\r\n }\r\n const idx = findInArray(entity.id, array);\r\n if (idx === -1) {\r\n array.push(entity);\r\n } else {\r\n array[idx] = entity;\r\n }\r\n}\r\n\r\nexport function updateInArray, U>(entity: T, array?: T[]) {\r\n if (!array) {\r\n return;\r\n }\r\n const idx = findInArray(entity.id, array);\r\n if (idx === -1) {\r\n return array;\r\n }\r\n Vue.set(array, idx, entity);\r\n}\r\n\r\nexport function removeFromArray, U>(entityId: U, array?: T[]) {\r\n if (!array) {\r\n return;\r\n }\r\n const idx = findInArray(entityId, array);\r\n if (idx >= 0) {\r\n array.splice(idx, 1);\r\n }\r\n}\r\n","\r\nimport {\r\n EditionDTO,\r\n InterpretationRoiDTO,\r\n ArtefactDTO,\r\n InterpretationRoiDTOList,\r\n BatchEditRoiResponseDTO,\r\n UpdatedInterpretationRoiDTO,\r\n UpdatedInterpretationRoiDTOList,\r\n DeleteDTO,\r\n DetailedEditorRightsDTO, SignInterpretationDTO, SignInterpretationListDTO, SignDTO, DeleteIntIdDTO\r\n} from '@/dtos/sqe-dtos';\r\nimport { EditionInfo, ShareInfo, Permissions } from '@/models/edition';\r\nimport { StateManager } from '.';\r\nimport { Artefact } from '@/models/artefact';\r\nimport { removeFromArray, addToArray } from '@/utils/collection-utils';\r\nimport { InterpretationRoi, Sign, SignInterpretation } from '@/models/text';\r\nimport Vue from 'vue';\r\n\r\n/* This file contains the implementation of all the incoming events from SignalR */\r\n\r\nfunction state() {\r\n return StateManager.instance;\r\n}\r\n\r\n/*\r\n * The notification handler for all notifications.\r\n *\r\n * CAREFUL! For some reason that has not been resolved yet, 'this' is not bound to the right object,\r\n * so do not use this in any of the handlers!\r\n */\r\nexport class NotificationHandler {\r\n public handleUpdatedEdition(edition: EditionDTO): void {\r\n const storedEdition = StateManager.instance.editions.find(edition.id);\r\n\r\n if (storedEdition) {\r\n const editionInfo = new EditionInfo(edition);\r\n storedEdition.copyFrom(editionInfo);\r\n state().editions.update(storedEdition);\r\n }\r\n }\r\n\r\n public handleCreatedArtefact(artefact: ArtefactDTO): void {\r\n const newArtefact = new Artefact(artefact);\r\n\r\n state().artefacts.add(newArtefact, false); // Safely ignore error if artefact is already there\r\n if (state().imagedObjects.current?.id === artefact.imagedObjectId) {\r\n addToArray(newArtefact, StateManager.instance.imagedObjects.current?.artefacts);\r\n }\r\n }\r\n\r\n public handleDeletedArtefact(dto: DeleteIntIdDTO): void {\r\n for (const artefactId of dto.ids) {\r\n state().artefacts.remove(artefactId, false);\r\n\r\n // There is no imaged object ID received from the server, so we just remove the artefact from the\r\n // current imaged object as well. If the artefact belongs to another imaged object, nothing is removed.\r\n removeFromArray(artefactId, state().imagedObjects.current?.artefacts);\r\n }\r\n }\r\n\r\n public handleUpdatedArtefact(dto: ArtefactDTO): void {\r\n const existingArtefact = state().artefacts.find(dto.id);\r\n if (!existingArtefact) {\r\n // We don't have this aretfact, no need to update it\r\n return;\r\n }\r\n if (!dto.mask) {\r\n dto.mask = existingArtefact.mask.wkt;\r\n }\r\n const newArtefact = new Artefact(dto);\r\n existingArtefact.copyFrom(newArtefact);\r\n }\r\n\r\n public handleCreatedRoi(roi: InterpretationRoiDTO): void {\r\n console.debug('handleCreatedRoi', roi);\r\n handleCreatedRoi(roi);\r\n notifyRoiChanged();\r\n }\r\n\r\n public handleCreatedRoisBatch(roiList: InterpretationRoiDTOList): void {\r\n console.debug('handleCreatedRoisBatch', roiList);\r\n roiList.rois.map(roi => handleCreatedRoi(roi));\r\n notifyRoiChanged();\r\n }\r\n\r\n public handleEditedRoisBatch(rois: BatchEditRoiResponseDTO): void {\r\n console.debug('handleEditedRoisBatch', rois);\r\n\r\n rois.createRois.map(roi => handleCreatedRoi(roi));\r\n rois.deleteRois.map(roiId => handleDeletedRoi(roiId));\r\n rois.updateRois.map(roi => handleUpdatedRoi(roi));\r\n notifyRoiChanged();\r\n }\r\n\r\n public handleUpdatedRoi(roi: UpdatedInterpretationRoiDTO): void {\r\n console.debug('handleUpdatedRoi', roi);\r\n handleUpdatedRoi(roi);\r\n notifyRoiChanged();\r\n }\r\n\r\n public handleUpdatedRoisBatch(roiList: UpdatedInterpretationRoiDTOList): void {\r\n console.debug('handleUpdatedRoiBatch', roiList);\r\n roiList.rois.map(roi => handleUpdatedRoi(roi));\r\n notifyRoiChanged();\r\n }\r\n\r\n public handleDeletedRoi(dto: DeleteIntIdDTO): void {\r\n console.debug('handleDeletedRoi', dto);\r\n\r\n for (const roiId of dto.ids) {\r\n handleDeletedRoi(roiId);\r\n notifyRoiChanged();\r\n }\r\n }\r\n\r\n public handleCreatedEditor(dto: DetailedEditorRightsDTO): void {\r\n const edition = state().editions.find(dto.editionId);\r\n if (edition) {\r\n const shareIndex = edition.shares.findIndex(s => s.email === dto.email);\r\n const newShare = ShareInfo.fromDTO(dto);\r\n\r\n if (shareIndex > -1) {\r\n Vue.set(edition.shares, shareIndex, newShare);\r\n } else {\r\n edition.shares.push(newShare);\r\n }\r\n\r\n // We also need to update our own permissions if the changed editor is the current logged in user\r\n if (dto.email === state().session?.user?.email) {\r\n edition.permission = new Permissions(dto);\r\n }\r\n }\r\n }\r\n\r\n public handleUpdatedSignInterpretations(dto: SignInterpretationListDTO): void {\r\n console.debug('handleCreatedSignInterpretaions', dto);\r\n\r\n for (const siDto of dto.signInterpretations || []) {\r\n handleUpdatedSignInterpretation(siDto);\r\n }\r\n }\r\n\r\n public handleUpdatedSignInterpretation(dto: SignInterpretationDTO): void {\r\n console.debug('handleCreatedSignInterpretaion', dto);\r\n\r\n handleUpdatedSignInterpretation(dto);\r\n }\r\n\r\n public handleDeletedSignInterpretation(dto: DeleteIntIdDTO): void {\r\n console.debug('handleDeletedSignInterpretaion', dto);\r\n\r\n if (dto.entity !== 'signInterpretation') {\r\n console.warn('Deleted Sign Interpretation notifcation arrived with the entity ', dto.entity);\r\n return;\r\n }\r\n\r\n for (const id of dto.ids) {\r\n const si = state().signInterpretations.get(id);\r\n if (!si) {\r\n // Sign Interpretation has already been deleted\r\n return;\r\n }\r\n\r\n // First, remove the sign interpretation from the sign\r\n const sign = si.sign;\r\n if (sign.signInterpretations.length !== 1) {\r\n // console.warn('Only signs with one sign interperation are supported');\r\n return;\r\n }\r\n\r\n const line = sign.line;\r\n if (line.signs[sign.indexInLine] === sign) {\r\n line.removeSign(sign);\r\n } else {\r\n // Do nothing, sign has already been deleted here\r\n }\r\n\r\n state().signInterpretations.delete(id);\r\n // We do not remove the sign interpretation from the map, as we may need it for undoing (if this browser originated the call),\r\n // and it's not going to hurt since it will no longer be displayed anyway.\r\n }\r\n }\r\n\r\n public handleCreatedSignInterpretation(dto: SignInterpretationListDTO): void {\r\n console.debug('handleCreatedSignInterpretaion', dto);\r\n\r\n if (!dto.signInterpretations) {\r\n return;\r\n }\r\n\r\n for (const siDto of dto.signInterpretations?.reverse()) {\r\n // Multiple added sign interpretations are specified from first to last, but we need to add them from last to first,\r\n // since each sign points to the next one. If we add sign A before sign B, we can't connect A to B sign B does not exist yet.\r\n const existingSi = state().signInterpretations.get(siDto.signInterpretationId);\r\n if (existingSi) {\r\n return;\r\n }\r\n\r\n if (!siDto.nextSignInterpretations) {\r\n console.warn(\"Can't add sign-interpretation without next-interpretation IDs\");\r\n return;\r\n }\r\n\r\n // Find a sign intepretation that goes after this sign\r\n let siNext: SignInterpretation | undefined;\r\n for (const nextId of siDto.nextSignInterpretations) {\r\n siNext = state().signInterpretations.get(nextId.nextSignInterpretationId);\r\n if (siNext) {\r\n break;\r\n }\r\n }\r\n\r\n if (!siNext) {\r\n console.warn(\"Can't find any sign-interpretation next to the newly created sign\");\r\n return;\r\n }\r\n\r\n // Now we can add the sign before the next sign, on the same line\r\n const indexInLine = siNext.sign.indexInLine;\r\n const sign = new Sign({ signInterpretations: []}, siNext.sign.line, indexInLine);\r\n const si = new SignInterpretation(siDto, sign);\r\n sign.signInterpretations.push(si);\r\n state().signInterpretations.put(si);\r\n sign.line.addSign(sign);\r\n }\r\n }\r\n}\r\n\r\n/*\r\n * Some updating functions are handled in external functions which are called from the NotificationHandler.\r\n *\r\n * We have to use these function, since `this` is not initialized properly in the notification handler's\r\n * methods, so we can't call one handler from another.\r\n *\r\n * After updating ROIs, components displaying ROIs should be notified (since not all properties are computed\r\n * from the state). We use the event bus to fire an roi-changed event, causing components to refresh.\r\n */\r\n\r\nfunction handleCreatedRoi(dto: InterpretationRoiDTO) {\r\n console.debug('handleCreatedRoi', dto);\r\n\r\n // Add roi to all the ROIs, as well as to the specific sign interpretation\r\n const roi = new InterpretationRoi(dto);\r\n state().interpretationRois.put(roi);\r\n\r\n if (roi.signInterpretationId) {\r\n const si = state().signInterpretations.get(roi.signInterpretationId);\r\n if (si) {\r\n addToArray(roi, si.rois);\r\n }\r\n }\r\n}\r\n\r\nfunction handleDeletedRoi(roiId: number) {\r\n console.debug('handleDeletedRoi', roiId);\r\n\r\n const roi = state().interpretationRois.get(roiId);\r\n if (!roi) {\r\n return;\r\n }\r\n state().interpretationRois.delete(roiId);\r\n\r\n if (roi.signInterpretationId) {\r\n const si = state().signInterpretations.get(roi.signInterpretationId);\r\n if (si) {\r\n si.deleteRoi(roi);\r\n }\r\n }\r\n}\r\n\r\nfunction handleUpdatedRoi(dto: UpdatedInterpretationRoiDTO) {\r\n console.debug('handleUpdatedRoi', dto);\r\n\r\n // Just delete the old one and add the new one. Order of ROIs inside\r\n // the lists is of no consqeuence.\r\n handleDeletedRoi(dto.oldInterpretationRoiId);\r\n handleCreatedRoi(dto);\r\n}\r\n\r\nfunction handleUpdatedSignInterpretation(dto: SignInterpretationDTO): void {\r\n console.debug('handleUpdatedSignInterpretaion', dto);\r\n const existingSI = state().signInterpretations.get(dto.signInterpretationId);\r\n\r\n if (!existingSI) {\r\n console.warn('Receive an updated for a non-existent sign interpretation ', dto.signInterpretationId);\r\n return;\r\n }\r\n\r\n // Update the sign interpretations map\r\n const newSI = new SignInterpretation(dto, existingSI.sign);\r\n state().signInterpretations.put(newSI);\r\n\r\n // Update the sign containing the sign interpretation\r\n const sign = newSI.sign;\r\n const index = sign.signInterpretations.findIndex(si => si.id === newSI.id);\r\n\r\n if (index < 0) {\r\n console.warn(\"Can't locate sign interpretation in sign!\");\r\n } else {\r\n Vue.set(sign.signInterpretations, index, newSI);\r\n }\r\n\r\n // Update the selected sign interpretations\r\n const selectedIndex = state().textFragmentEditor.selectedSignInterpretations.findIndex(si => si.id === newSI.id);\r\n if (selectedIndex !== -1) {\r\n Vue.set(state().textFragmentEditor.selectedSignInterpretations, selectedIndex, newSI);\r\n\r\n // Update the selected attribute, too\r\n const selectedAttribute = state().textFragmentEditor.selectedAttribute;\r\n if (selectedAttribute) {\r\n // Find the attribute in the new sign interpretation\r\n const attrInNewSI = newSI.attributes.filter(attr => attr.attributeValueId === selectedAttribute.attributeValueId);\r\n if (attrInNewSI.length === 1) {\r\n state().textFragmentEditor.selectedAttribute = attrInNewSI[0];\r\n } else {\r\n state().textFragmentEditor.selectedAttribute = null;\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction notifyRoiChanged() {\r\n state().eventBus.emit('roi-changed');\r\n}\r\n","/* This file contains types describing the manuscript's script */\r\n\r\nimport { GlyphDataDTO, KernPairDTO, ScriptDataDTO } from '@/dtos/sqe-dtos';\r\nimport { BoundingBox } from '@/utils/helpers';\r\nimport { Polygon } from '@/utils/Polygons';\r\n\r\n// Glyphs is a dictionary for how to display a letter\r\n// where shape can used in SVG tag\r\nexport class GlyphData {\r\n public character: string;\r\n public yOffset: number;\r\n public shape: Polygon;\r\n public boundingBox: BoundingBox;\r\n\r\n constructor(dto: GlyphDataDTO) {\r\n this.character = dto.character;\r\n this.yOffset = dto.yOffset;\r\n this.shape = Polygon.fromWkt(dto.shape);\r\n this.boundingBox = this.shape.getBoundingBox();\r\n }\r\n}\r\n\r\nexport class ScriptData {\r\n public glyphs: { [key: string]: GlyphData } = {};\r\n private kerning = new Map(); // Key is encoded - char1-char2, as tuples can't serve as keys\r\n public wordSpace: number;\r\n public lineSpace: number;\r\n\r\n private getKey(char1: string, char2: string) {\r\n return `${char1}-${char2}`;\r\n }\r\n\r\n public constructor(dto: ScriptDataDTO) {\r\n if (!dto.glyphs) {\r\n throw new Error(\"Can't create ScriptData with no glyph information\");\r\n }\r\n\r\n for (const glyph of dto.glyphs) {\r\n this.glyphs[glyph.character] = new GlyphData(glyph);\r\n }\r\n\r\n if (dto.kerningPairs) {\r\n for (const pair of dto.kerningPairs) {\r\n const key = this.getKey(pair.firstCharacter, pair.secondCharacter);\r\n this.kerning.set(key, pair);\r\n }\r\n }\r\n\r\n this.lineSpace = dto.lineSpace;\r\n this.wordSpace = dto.wordSpace;\r\n }\r\n\r\n public getKerning(char1: string, char2: string): KernPairDTO | undefined {\r\n const key = this.getKey(char1, char2);\r\n\r\n return this.kerning.get(key);\r\n }\r\n}\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('b-tabs',{attrs:{\"nav-wrapper-class\":\"tabs-wrapper\"},on:{\"activate-tab\":_vm.onActivateTab},model:{value:(_vm.activeTab),callback:function ($$v) {_vm.activeTab=$$v},expression:\"activeTab\"}},[_c('b-tab',{attrs:{\"disabled\":!_vm.user,\"title-item-class\":'tab-title-class',\"active\":\"\"},scopedSlots:_vm._u([{key:\"title\",fn:function(){return [(!_vm.editionsLoaded)?_c('span',[_vm._v(_vm._s(_vm.$t('home.personalEditions'))+\" \"),_c('b-spinner',{attrs:{\"type\":\"border\",\"small\":\"\"}})],1):_c('span',[_vm._v(_vm._s(_vm.$tc( 'home.personalEditionGroupCount', _vm.personalEditionsCount )))])]},proxy:true}])},[_c('personal-editions')],1),_c('b-tab',{attrs:{\"title-item-class\":'tab-title-class'},scopedSlots:_vm._u([{key:\"title\",fn:function(){return [(!_vm.editionsLoaded)?_c('span',[_vm._v(_vm._s(_vm.$t('home.publicEditions'))+\" \"),_c('b-spinner',{attrs:{\"type\":\"border\",\"small\":\"\"}})],1):_c('span',[_vm._v(_vm._s(_vm.$tc('home.publicEditionGroupCount', _vm.publicEditionsCount)))])]},proxy:true}])},[_c('public-editions')],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"row justifty-content-sm-center center\"},[_c('font-awesome-icon',{attrs:{\"icon\":\"spinner\",\"size\":\"6x\",\"spin\":\"\"}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\r\nimport { Component, Vue } from 'vue-property-decorator';\r\n\r\n@Component({\r\n// name: 'home',\r\n name: 'waiting',\r\n})\r\n\r\nexport default class Waiting extends Vue {}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Waiting.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Waiting.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Waiting.vue?vue&type=template&id=6511bdef&\"\nimport script from \"./Waiting.vue?vue&type=script&lang=ts&\"\nexport * from \"./Waiting.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Waiting.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:\"header\"},[_c('b-row',[_c('b-col',{staticClass:\"col-4 mt-4 mb-5\"},[_c('span',{staticClass:\"text-edition text-color\"},[_vm._v(\"Editions you are currently working on or have previously published\")])]),_c('b-col',{staticClass:\"mt-4 mb-5\"},[_c('search-bar',{staticClass:\"direction\",attrs:{\"params\":_vm.searchBarParams,\"value\":_vm.searchValue},on:{\"search\":_vm.onEditionsSearch}})],1)],1)],1),_c('div',{staticClass:\"scroll-bar\"},[_c('edition-list',{staticClass:\"text-edition\",attrs:{\"title\":\"Draft\",\"editions\":_vm.draftEditions}})],1),_c('div',{staticClass:\"edition-list\"},[_c('edition-list',{staticClass:\"text-edition\",attrs:{\"title\":\"Published\",\"editions\":_vm.publishedEditions}})],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('b-form',{attrs:{\"inline\":\"\"},on:{\"submit\":function($event){$event.preventDefault();}}},[(_vm.params.filter)?_c('b-form-group',[_c('label',{staticClass:\"search-bar mb-2\",attrs:{\"for\":\"filter\"}},[_vm._v(_vm._s(_vm.$t('home.filter')))]),_c('b-form-input',{attrs:{\"id\":\"filter\"},on:{\"input\":function($event){return _vm.onFilterChange($event)}},model:{value:(_vm.internalValue.filter),callback:function ($$v) {_vm.$set(_vm.internalValue, \"filter\", $$v)},expression:\"internalValue.filter\"}})],1):_vm._e(),(_vm.params.side)?_c('b-form-group',[_c('label',{staticClass:\"search-bar ml-2 mb-2\",attrs:{\"for\":\"side\"}},[_vm._v(_vm._s(_vm.$t('home.side')))]),_c('b-form-select',{staticClass:\"ml-2 size\",attrs:{\"name\":\"side\"},on:{\"change\":function($event){return _vm.onViewChange($event)}},model:{value:(_vm.internalValue.side),callback:function ($$v) {_vm.$set(_vm.internalValue, \"side\", $$v)},expression:\"internalValue.side\"}},[_c('b-form-select-option',{attrs:{\"value\":\"recto and verso\"}},[_vm._v(\"Both\")]),_c('b-form-select-option',{attrs:{\"value\":\"recto\"}},[_vm._v(\"Recto\")]),_c('b-form-select-option',{attrs:{\"value\":\"verso\"}},[_vm._v(\"Verso\")])],1)],1):_vm._e(),(_vm.params.sort)?_c('b-form-group',[_c('label',{staticClass:\"search-bar ml-2 mb-2\",attrs:{\"for\":\"sort\"}},[_vm._v(_vm._s(_vm.$t('home.sort')))]),_c('b-form-select',{staticClass:\"ml-2\",attrs:{\"name\":\"sort\"},on:{\"change\":function($event){return _vm.onSortChange($event)}},model:{value:(_vm.internalValue.sort),callback:function ($$v) {_vm.$set(_vm.internalValue, \"sort\", $$v)},expression:\"internalValue.sort\"}},[_c('b-form-select-option',{attrs:{\"value\":\"lastEdit\"}},[_vm._v(\"Date\")]),_c('b-form-select-option',{attrs:{\"value\":\"name\"}},[_vm._v(\"Name\")])],1)],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { SearchBarValue } from '@/state/utilities';\r\nimport { Component, Emit, Prop, Vue, Watch } from 'vue-property-decorator';\r\n\r\n// At some point we need to make those a little nicer\r\nexport interface SearchBarParams {\r\n filter?: boolean;\r\n side?: boolean;\r\n sort?: boolean;\r\n}\r\n\r\n@Component({\r\n name: 'search-bar',\r\n components: {},\r\n})\r\nexport default class SearchBar extends Vue {\r\n @Prop({\r\n default: () => ({\r\n filter: false,\r\n view: false,\r\n sort: false,\r\n }),\r\n })\r\n public params!: SearchBarParams;\r\n\r\n @Prop()\r\n public value!: SearchBarValue;\r\n\r\n public internalValue: SearchBarValue = {};\r\n\r\n public mounted() {\r\n this.internalValue = {...this.value};\r\n this.onSearch();\r\n }\r\n\r\n public onFilterChange(inputEvent: string | undefined) {\r\n this.onSearch();\r\n }\r\n\r\n public onViewChange(viewEvent: string | undefined) {\r\n this.onSearch();\r\n }\r\n\r\n public onSortChange(selectEvent: string | undefined) {\r\n this.onSearch();\r\n }\r\n\r\n @Watch('value')\r\n private onValueParamChange(newValueParam: SearchBarValue) {\r\n this.internalValue = {...this.value};\r\n }\r\n\r\n @Emit('search')\r\n private onSearch() {\r\n this.internalValue = {...this.internalValue};\r\n return this.internalValue;\r\n }\r\n}\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./search-bar.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./search-bar.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./search-bar.vue?vue&type=template&id=e2db5464&scoped=true&\"\nimport script from \"./search-bar.vue?vue&type=script&lang=ts&\"\nexport * from \"./search-bar.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./search-bar.vue?vue&type=style&index=0&id=e2db5464&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"e2db5464\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('p',{directives:[{name:\"b-toggle\",rawName:\"v-b-toggle\",value:(_vm.title),expression:\"title\"}]},[_c('i',{staticClass:\"toggle-icon fa fa-angle-down\"}),_vm._v(_vm._s(_vm.title)+\" \")]),_c('b-collapse',{staticClass:\"mt-2\",attrs:{\"visible\":\"\",\"id\":_vm.title}},[(_vm.editions.length)?_c('div',{class:{ 'after-login': this.editions.length > 0 }},_vm._l((_vm.editions),function(edition){return _c('b-card',{key:edition.id,staticClass:\"p-3\",attrs:{\"no-body\":\"\"}},[_c('edition-card',{attrs:{\"edition\":edition},on:{\"edition-copy-click\":function($event){return _vm.openCopyEditionModal(edition)}}})],1)}),1):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"edition-card-grid h-100\",on:{\"click\":function($event){return _vm.editionEditClick()}}},[_c('b-row',[_c('b-col',{staticClass:\"col col-4 col-lg-5 col-md-5 col-xs-6\"},[(_vm.thumbnailSource)?_c('img',{directives:[{name:\"lazy\",rawName:\"v-lazy\",value:(_vm.thumbnailSource),expression:\"thumbnailSource\"}],staticClass:\"card-img-top\",attrs:{\"alt\":_vm.edition.name}}):_c('span',{staticClass:\"no-images\"},[_vm._v(_vm._s(_vm.$t('misc.noImages')))])]),_c('b-col',{staticClass:\"col col-8 col-lg-7 col-md-6 col-xs-6\"},[_c('p',{staticClass:\"card-title\"},[_vm._v(\" \"+_vm._s(_vm.edition.name)+\" \"),_c('edition-icons',{attrs:{\"edition\":_vm.edition}})],1)])],1),_c('div',{staticClass:\"details-edition-personal-grid\"},[_c('div',{staticClass:\"status-edition-public-grid\"},[_c('span',{staticClass:\"card-label\"},[_vm._v(\"Edit: \")]),_c('span',{staticClass:\"card-label card-date mr-1\",staticStyle:{\"white-space\":\"nowrap\"}},[_vm._v(_vm._s(_vm.lastEditText)+\" \")]),_c('p',{staticClass:\"card-label ml-0 mr-9\"},[_vm._v(\" Status: \"),_c('b-badge',{class:_vm.edition.isPublic\n ? ['status-badge', 'status-badge-Published']\n : ['status-badge', 'status-badge-draft']},[_vm._v(\" \"+_vm._s(_vm.edition.isPublic ? 'Published' : 'Draft')+\" \")])],1)])]),_c('b-row',{staticStyle:{\"align-items\":\"end\"},attrs:{\"no-gutters\":\"\"}},[_c('b-col',{staticClass:\"col col-lg-12 col-xl-4 mb-md-1 mb-lg-1 mb-xl-0 mb-sm-1 mr-2\"},[_c('b-button',{directives:[{name:\"b-tooltip\",rawName:\"v-b-tooltip.hover\",modifiers:{\"hover\":true}}],staticClass:\"btn btn-secondary btn-sm w-100\",attrs:{\"size\":\"sm\",\"title\":\"Right-click to open in new tab\"},on:{\"click\":function($event){_vm.editionEditClick(); $event.stopPropagation();},\"contextmenu\":_vm.editionEditRightClick}},[_vm._v(_vm._s(_vm.$t('misc.edit')))])],1),_c('b-col',{staticClass:\"col-xl-7 col-lg-12\"},[_c('b-button',{staticClass:\"btn btn-secondary btn-sm w-100\",attrs:{\"size\":\"sm\"},on:{\"click\":function($event){_vm.editionCopyClick(); $event.stopPropagation();}}},[_vm._v(_vm._s(_vm.$t('misc.copy')))])],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"edition-icons\"},[(_vm.readOnly)?_c('label',[_c('i',{directives:[{name:\"b-tooltip\",rawName:\"v-b-tooltip.hover.bottom\",modifiers:{\"hover\":true,\"bottom\":true}}],staticClass:\"fa fa-lock ml-2\",attrs:{\"title\":_vm.$t('home.lock')}}),_vm._v(\" \"+_vm._s(_vm.showText ? _vm.$t('home.lock') : '')+\" \")]):_vm._e(),(_vm.shared)?_c('label',[_c('i',{directives:[{name:\"b-tooltip\",rawName:\"v-b-tooltip.hover.bottom\",modifiers:{\"hover\":true,\"bottom\":true}}],staticClass:\"fa fa-users ml-2\",attrs:{\"title\":_vm.$t('home.shared')}}),_vm._v(\" \"+_vm._s(_vm.showText ? _vm.$t('home.shared') : '')+\" \")]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Vue } from 'vue-property-decorator';\r\nimport { EditionInfo } from '@/models/edition';\r\n\r\n@Component({\r\n name: 'edition-icons',\r\n})\r\nexport default class EditionIcons extends Vue {\r\n @Prop() public edition!: EditionInfo;\r\n @Prop({ default: false }) public showText!: boolean;\r\n\r\n public get readOnly() {\r\n return this.edition.permission.readOnly;\r\n }\r\n\r\n public get shared() {\r\n // Some shares have no read permission, which means they have been revoked.\r\n return this.edition.shares.filter(share => share.permissions.mayRead).length > 1;\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edition-icons.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edition-icons.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./edition-icons.vue?vue&type=template&id=4545ae1a&scoped=true&\"\nimport script from \"./edition-icons.vue?vue&type=script&lang=ts&\"\nexport * from \"./edition-icons.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./edition-icons.vue?vue&type=style&index=0&id=4545ae1a&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4545ae1a\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Emit, Vue } from 'vue-property-decorator';\r\nimport { EditionInfo } from '@/models/edition';\r\nimport EditionIcons from '@/components/cues/edition-icons.vue';\r\n\r\n@Component({\r\n name: 'edition-card',\r\n components: { EditionIcons },\r\n})\r\nexport default class EditionCard extends Vue {\r\n @Prop() public edition!: EditionInfo;\r\n\r\n private get thumbnailSource(): string | undefined {\r\n return this.edition?.thumbnail?.thumbnailUrl;\r\n }\r\n\r\n private editionEditClick() {\r\n this.$router.push({ path: `/editions/${this.edition.id}` });\r\n }\r\n\r\n private editionEditRightClick() {\r\n const editionLink = this.$router.resolve({ path: `/editions/${this.edition.id}` });\r\n window.open(editionLink.href);\r\n }\r\n\r\n public get lastEditText() {\r\n function date2str(dt: Date) {\r\n return dt.toISOString().split('T')[0];\r\n }\r\n\r\n if (!this.edition.lastEdit) {\r\n return '';\r\n }\r\n\r\n const today = new Date();\r\n const yesterday = new Date();\r\n yesterday.setDate(today.getDate() - 1);\r\n\r\n if (today.getDate() === this.edition.lastEdit.getDate()) {\r\n return 'Today';\r\n } else if (yesterday.getDate() === this.edition.lastEdit.getDate()) {\r\n return 'Yesterday';\r\n }\r\n\r\n return date2str(this.edition.lastEdit);\r\n }\r\n\r\n @Emit()\r\n private editionCopyClick() {\r\n return true;\r\n }\r\n}\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--13-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edition-card.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--13-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edition-card.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./edition-card.vue?vue&type=template&id=64714736&scoped=true&\"\nimport script from \"./edition-card.vue?vue&type=script&lang=ts&\"\nexport * from \"./edition-card.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./edition-card.vue?vue&type=style&index=0&id=64714736&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"64714736\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.currentEdition)?_c('b-modal',{ref:\"copyModalRef\",attrs:{\"visible\":_vm.currentEdition !== null && _vm.visible === true,\"destroy-on-hide\":true,\"id\":\"copy-edition-modal\",\"header-class\":\"title-header\",\"footer-class\":\"title-footer\",\"ok-disabled\":_vm.waiting || !_vm.canCopy,\"cancel-disabled\":_vm.waiting,\"title-sr-only\":true,\"aria-label\":_vm.$t('home.copyTitle', {\n name: _vm.currentEdition.name,\n owner: _vm.currentEdition.owner.forename,\n }),\"aria-labelledby\":\"copy-edition-modal\"},on:{\"shown\":_vm.copyModalShown,\"ok\":_vm.copyEdition,\"hide\":_vm.onHide},scopedSlots:_vm._u([{key:\"modal-header\",fn:function(){return [_c('b-row',{staticClass:\"mt-3\"},[_c('b-col',{attrs:{\"cols\":\"12\"}},[_vm._v(\" \"+_vm._s(_vm.$t('home.copyTitle', { name: _vm.currentEdition.name, owner: _vm.currentEdition.owner.forename || 'N/A', })))])],1)]},proxy:true},{key:\"modal-footer\",fn:function(){return [_c('b-row',[_c('b-col',[(_vm.user)?_c('b-button',{attrs:{\"block\":\"\",\"disabled\":!_vm.newCopyName},on:{\"~click\":function($event){return _vm.copyEdition.apply(null, arguments)}}},[_vm._v(\" \"+_vm._s(_vm.$t('misc.copy'))+\" \"),(_vm.waiting)?_c('span',[_c('font-awesome-icon',{attrs:{\"icon\":\"spinner\",\"spin\":\"\"}})],1):_vm._e()]):_vm._e(),(!_vm.user)?_c('b-button',{staticClass:\"mr-2\",on:{\"click\":_vm.onLogin}},[_vm._v(\" \"+_vm._s(_vm.$t('navbar.login'))+\" \")]):_vm._e(),(!_vm.user)?_c('b-button',{on:{\"click\":_vm.onRegister}},[_vm._v(\" \"+_vm._s(_vm.$t('navbar.register'))+\" \")]):_vm._e()],1)],1)]},proxy:true}],null,false,1992008439)},[(_vm.user)?_c('form',{on:{\"submit\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.copyEdition.apply(null, arguments)}}},[_c('b-form-input',{ref:\"newCopyNameRef\",attrs:{\"id\":\"newCopyName\",\"type\":\"text\",\"required\":\"\",\"placeholder\":_vm.$t('home.newEditionName')},on:{\"keyup\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.copyEdition.apply(null, arguments)}},model:{value:(_vm.newCopyName),callback:function ($$v) {_vm.newCopyName=$$v},expression:\"newCopyName\"}}),(_vm.waiting)?_c('p',[_vm._v(\" \"+_vm._s(_vm.$t('home.copyingEdition'))+\"... \"),_c('font-awesome-icon',{attrs:{\"icon\":\"spinner\",\"spin\":\"\"}})],1):_vm._e(),(_vm.errorMessage)?_c('p',{staticClass:\"text-danger\"},[_vm._v(\" \"+_vm._s(_vm.errorMessage)+\" \")]):_vm._e(),(_vm.currentEdition.copyrightHolder)?_c('div',[_c('label',[_vm._v(\" Copy RightHolder \"+_vm._s(_vm.currentEdition.copyrightHolder)+\" \")])]):_vm._e(),(_vm.currentEdition.collaboators)?_c('div',[_c('label',[_vm._v(\"Collaborators \"+_vm._s(_vm.edition.collaboators))])]):_vm._e()],1):_c('div',[_vm._v(\" You must be registered and logged in before you can create a copy of an edition. \")])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Vue } from 'vue-property-decorator';\r\nimport { EditionInfo } from '@/models/edition';\r\n// import EditionIcons from '@/components/cues/edition-icons.vue';\r\nimport EditionService from '@/services/edition';\r\n\r\n@Component({\r\n name: 'copy-edition-modal',\r\n})\r\nexport default class CopyEditionModal extends Vue {\r\n @Prop() private visible!: boolean ;\r\n\r\n private editionService: EditionService = new EditionService();\r\n private newCopyName: string = '';\r\n private errorMessage: string = '';\r\n private waiting: boolean = false;\r\n\r\n private get user(): boolean {\r\n return this.$state.session.user ? true : false;\r\n }\r\n\r\n private get isWaiting(): boolean {\r\n return !this.currentEdition;\r\n }\r\n\r\n private get currentEdition(): EditionInfo | null {\r\n return this.$state.editions.current;\r\n }\r\n\r\n private get canCopy(): boolean {\r\n return this.newCopyName.trim().length > 0;\r\n }\r\n\r\n private copyModalShown() {\r\n this.newCopyName = this.currentEdition!.name;\r\n if (this.user) {\r\n (this.$refs.newCopyNameRef as any).focus();\r\n }\r\n }\r\n\r\n private onShow( bvModalevt: Event ) {\r\n bvModalevt.preventDefault();\r\n }\r\n\r\n private onHide(evt: Event) {\r\n if ( evt.type === 'backdrop') {\r\n // evt.preventDefault();\r\n (this.$refs.newCopyNameRef as any).blur();\r\n (this.$refs.newCopyNameRef as any).hide();\r\n }\r\n }\r\n\r\n private async copyEdition(evt: Event) {\r\n evt.preventDefault();\r\n\r\n if (!this.canCopy) {\r\n return; // ENTER key calls this handler even if the button is disabled\r\n }\r\n this.newCopyName = this.newCopyName.trim();\r\n\r\n this.waiting = true;\r\n this.errorMessage = '';\r\n\r\n try {\r\n const newEdition = await this.editionService.copyEdition(\r\n this.currentEdition!.id,\r\n this.newCopyName\r\n );\r\n\r\n this.$state.editions.current = newEdition;\r\n\r\n this.$state.misc.newEditionId = newEdition.id;\r\n\r\n (this.$refs.copyModalRef as any).hide();\r\n\r\n this.$router.push({\r\n path: `/editions/${this.$state.misc.newEditionId}`,\r\n });\r\n\r\n\r\n // force refresh of the new artefact page so that\r\n // \\components\\artefact\\artefact-image.vue\r\n // in artefact-card.vue\r\n // async mounted() will be successfully fullfiled\r\n this.$router.go(0);\r\n\r\n } catch (err) {\r\n this.errorMessage = err;\r\n console.error('Error copying an edition!', err);\r\n } finally {\r\n this.waiting = false;\r\n }\r\n }\r\n\r\n protected onLogin() {\r\n this.$root.$emit('bv::show::modal', 'loginModal');\r\n this.$bvModal.hide('copy-edition-modal');\r\n }\r\n\r\n protected onRegister() {\r\n this.$root.$emit('bv::show::modal', 'registerModal');\r\n this.$bvModal.hide('copy-edition-modal');\r\n }\r\n}\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--13-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./copy-edition-modal.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--13-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./copy-edition-modal.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./copy-edition-modal.vue?vue&type=template&id=7e403057&\"\nimport script from \"./copy-edition-modal.vue?vue&type=script&lang=ts&\"\nexport * from \"./copy-edition-modal.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Vue } from 'vue-property-decorator';\r\nimport { EditionInfo } from '@/models/edition';\r\nimport EditionIcons from '@/components/cues/edition-icons.vue';\r\nimport Waiting from '@/components/misc/Waiting.vue';\r\nimport EditionCard from './edition-card.vue';\r\nimport CopyEditionModal from './copy-edition-modal.vue';\r\n\r\n@Component({\r\n name: 'editions-list',\r\n components: {\r\n Waiting,\r\n EditionCard,\r\n // CopyPersonalEditionModal\r\n CopyEditionModal,\r\n },\r\n})\r\nexport default class EditionsList extends Vue {\r\n @Prop() public title!: string;\r\n @Prop() public editions!: EditionInfo[];\r\n\r\n private openCopyEditionModal(edition: EditionInfo) {\r\n this.$state.editions.current = edition;\r\n\r\n // this.$root.$emit('bv::show::modal', 'copy-edition-modal');\r\n\r\n // BootstrapVue recomends to use this method:\r\n // this.$bvModal.show('copy-edition-modal');\r\n this.$root.$bvModal.show('copy-edition-modal');\r\n }\r\n}\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--13-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edition-list.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--13-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edition-list.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./edition-list.vue?vue&type=template&id=08756da2&scoped=true&\"\nimport script from \"./edition-list.vue?vue&type=script&lang=ts&\"\nexport * from \"./edition-list.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./edition-list.vue?vue&type=style&index=0&id=08756da2&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"08756da2\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Emit, Prop, Vue, Watch } from 'vue-property-decorator';\r\nimport { EditionInfo } from '@/models/edition';\r\nimport { SearchBarParams } from '@/components/search-bar.vue';\r\n\r\nimport Waiting from '@/components/misc/Waiting.vue';\r\nimport SearchBar from '@/components/search-bar.vue';\r\nimport EditionList from './edition-list.vue';\r\nimport { SearchBarValue } from '@/state/utilities';\r\n\r\n@Component({\r\n name: 'personal-editions',\r\n components: {\r\n Waiting,\r\n SearchBar,\r\n EditionList,\r\n },\r\n})\r\nexport default class PersonalEditions extends Vue {\r\n private filteredEditions: EditionInfo[] = [];\r\n public searchBarParams: SearchBarParams = {\r\n filter: true,\r\n sort: true,\r\n side: false,\r\n };\r\n\r\n public get searchValue() {\r\n return this.$state.misc.editionSearchBarValue;\r\n }\r\n\r\n public set searchValue(newVal: SearchBarValue) {\r\n this.$state.misc.editionSearchBarValue = newVal;\r\n }\r\n\r\n public onEditionsSearch(newSearch: SearchBarValue) {\r\n this.searchValue = newSearch;\r\n this.onPersonalEditionsLoad();\r\n }\r\n\r\n @Watch('$state.misc.editionSearchBarValue', {deep: true})\r\n public onSearchValueChanged() {\r\n this.onPersonalEditionsLoad();\r\n }\r\n\r\n @Emit()\r\n public onPersonalEditionsLoad() {\r\n this.filteredEditions = this.getFilteredEditions();\r\n return this.filteredEditions.length;\r\n }\r\n\r\n protected async mounted() {\r\n await this.$state.prepare.allEditions();\r\n this.onPersonalEditionsLoad();\r\n }\r\n\r\n private getFilteredEditions(): EditionInfo[] {\r\n return this.$state.editions.items\r\n .filter((ed: EditionInfo) => {\r\n let filter: boolean = ed.mine === true;\r\n // if (this.searchValue.view) {\r\n // filter = filter && art.side === this.searchValue.view\r\n // }\r\n if (this.searchValue.filter) {\r\n filter =\r\n filter &&\r\n ed.name\r\n .toLowerCase()\r\n .includes(this.searchValue.filter.toLowerCase());\r\n }\r\n return filter;\r\n })\r\n .sort((a: EditionInfo, b: EditionInfo) => {\r\n\r\n if (this.searchValue.sort) {\r\n let aVal = (a as any)[this.searchValue.sort];\r\n let bVal = (b as any)[this.searchValue.sort];\r\n\r\n if ( 'name' === this.searchValue.sort ) {\r\n return aVal.localeCompare( bVal , undefined,\r\n { numeric: true, sensitivity: 'base' }\r\n );\r\n\r\n } else if ( 'lastEdit' === this.searchValue.sort ) {\r\n\r\n // for undefined dates, take 01/01/1970 as default\r\n if ( undefined === aVal ) {\r\n aVal = new Date(1970, 1, 1, 1, 1, 1);\r\n }\r\n if ( undefined === bVal ) {\r\n bVal = new Date(1970, 1, 1, 1, 1, 1);\r\n }\r\n return ((aVal > bVal) ? -1 : 1 );\r\n\r\n } else {\r\n return ((aVal > bVal) ? 1 : -1 );\r\n }\r\n\r\n } else {\r\n return 1;\r\n }\r\n });\r\n }\r\n\r\n public get draftEditions(): EditionInfo[] {\r\n return this.filteredEditions.filter((ed) => !ed.isPublic);\r\n }\r\n\r\n public get publishedEditions(): EditionInfo[] {\r\n return this.filteredEditions.filter((ed) => ed.isPublic);\r\n }\r\n}\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--13-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./personal-editions.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--13-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./personal-editions.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./personal-editions.vue?vue&type=template&id=0d76e254&scoped=true&\"\nimport script from \"./personal-editions.vue?vue&type=script&lang=ts&\"\nexport * from \"./personal-editions.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./personal-editions.vue?vue&type=style&index=0&id=0d76e254&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0d76e254\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:\"header\"},[_c('b-row',[_c('b-col',{staticClass:\"col-4 mt-4 mb-5\"},[_c('span',{staticClass:\"text-edition text-color\"},[_vm._v(\"Editions published in the scrollery\")])]),_c('b-col',{staticClass:\"mt-4 mb-5\"},[_c('search-bar',{staticClass:\"direction\",attrs:{\"params\":_vm.searchBarParams,\"value\":_vm.searchValue},on:{\"search\":_vm.onEditionsSearch}})],1)],1)],1),_c('editions-public-list',{staticClass:\"p-1\",attrs:{\"editions\":_vm.filteredEditions}}),_c('copy-edition-modal',{attrs:{\"visible\":true}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('DynamicScroller',{attrs:{\"id\":\"public-list\",\"items\":_vm.indices,\"min-item-size\":173},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar item = ref.item;\nvar index = ref.index;\nvar active = ref.active;\nreturn [_c('DynamicScrollerItem',{attrs:{\"item\":item,\"active\":active,\"size-dependencies\":[_vm.getWindowWidth(), item],\"index\":index}},[_c('edition-public-row',{key:item,staticStyle:{\"min-height\":\"173px\"},attrs:{\"editions\":_vm.editions,\"index\":item}})],1)]}}])})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('b-row',_vm._l((_vm.rowEditions),function(edition){return _c('b-col',{key:edition.id,staticClass:\"col-3\"},[_c('b-card',{staticClass:\"p-3\",attrs:{\"no-body\":\"\"}},[_c('edition-public-card',{attrs:{\"edition\":edition},on:{\"edition-copy-click\":function($event){return _vm.editionCopyClick(edition)}}})],1)],1)}),1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"edition-public-grid\",on:{\"click\":function($event){return _vm.editionViewClick()}}},[_c('div',{staticClass:\"details-edition-public-grid\"},[(_vm.thumbnailSource)?_c('img',{directives:[{name:\"lazy\",rawName:\"v-lazy\",value:(_vm.thumbnailSource),expression:\"thumbnailSource\"}],staticClass:\"card-img-top\",attrs:{\"alt\":_vm.edition.name}}):_c('p',{staticClass:\"no-images\"},[_vm._v(_vm._s(_vm.$t('misc.noImages')))]),_c('p',{staticClass:\"card-title\"},[_vm._v(\" \"+_vm._s(_vm.edition.name)+\" \"),_c('edition-icons',{attrs:{\"edition\":_vm.edition}})],1),_c('div',{staticClass:\"status-edition-public-grid\"},[_c('span',{staticClass:\"card-label\"},[_vm._v(\" Published: \")]),_c('span',{staticClass:\"card-label card-date mr-1\"},[_vm._v(_vm._s(_vm.edition.lastEdit ? _vm.edition.lastEdit.toDateString().substr(4) : '')+\" \")])])]),_c('b-row',{staticStyle:{\"align-items\":\"end\"},attrs:{\"no-gutters\":\"\"}},[_c('b-col',{staticClass:\"col col-lg-12 col-xl-4 mb-md-1 mb-lg-1 mb-xl-0 mb-sm-1 mr-2\"},[_c('b-button',{staticClass:\"btn btn-secondary btn-sm w-100\",attrs:{\"size\":\"sm\"},on:{\"click\":function($event){_vm.editionViewClick(); $event.stopPropagation()}}},[_vm._v(_vm._s(_vm.$t('misc.view')))])],1),_c('b-col',{staticClass:\"col-xl-7 col-lg-12\"},[_c('b-button',{staticClass:\"btn btn-secondary btn-sm w-100\",attrs:{\"size\":\"sm\"},on:{\"click\":function($event){_vm.editionCopyClick(); $event.stopPropagation()}}},[_vm._v(_vm._s(_vm.$t('misc.copy')))])],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Emit, Prop, Vue } from 'vue-property-decorator';\r\nimport { EditionInfo } from '@/models/edition';\r\nimport EditionIcons from '@/components/cues/edition-icons.vue';\r\n\r\n@Component({\r\n name: 'edition-public-card',\r\n components: { EditionIcons },\r\n})\r\nexport default class EditionPublicCard extends Vue {\r\n @Prop() public edition!: EditionInfo;\r\n\r\n private get thumbnailSource(): string | undefined {\r\n return this.edition?.thumbnail?.thumbnailUrl;\r\n }\r\n\r\n private editionViewClick() {\r\n this.$router.push({ path: `/editions/${this.edition.id}` });\r\n }\r\n\r\n @Emit()\r\n private editionCopyClick() {\r\n return true;\r\n }\r\n}\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--13-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edition-public-card.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--13-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edition-public-card.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./edition-public-card.vue?vue&type=template&id=394507ea&scoped=true&\"\nimport script from \"./edition-public-card.vue?vue&type=script&lang=ts&\"\nexport * from \"./edition-public-card.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./edition-public-card.vue?vue&type=style&index=0&id=394507ea&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"394507ea\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { EditionInfo } from '@/models/edition';\r\nimport { Component, Emit, Prop, Vue } from 'vue-property-decorator';\r\nimport EditionPublicCard from './edition-public-card.vue';\r\n\r\n@Component({\r\n name: 'edition-public-row',\r\n components: {\r\n EditionPublicCard,\r\n },\r\n})\r\nexport default class EditionPublicRow extends Vue {\r\n @Prop() public editions!: EditionInfo[];\r\n @Prop() public index!: number;\r\n\r\n protected get rowEditions() {\r\n return this.editions.slice(this.index, this.index + 4);\r\n }\r\n\r\n protected editionCopyClick(edition: EditionInfo) {\r\n this.$state.editions.current = edition;\r\n this.$root.$bvModal.show('copy-edition-modal');\r\n // this.$root.$emit('bv::show::modal', 'copy-edition-modal');\r\n }\r\n}\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--13-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edition-public-row.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--13-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edition-public-row.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./edition-public-row.vue?vue&type=template&id=362ab3e4&\"\nimport script from \"./edition-public-row.vue?vue&type=script&lang=ts&\"\nexport * from \"./edition-public-row.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./edition-public-row.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Vue } from 'vue-property-decorator';\r\nimport { EditionInfo } from '@/models/edition';\r\nimport EditionPublicRow from './edition-public-row.vue';\r\n\r\n@Component({\r\n name: 'editions-public-list',\r\n components: {\r\n EditionPublicRow,\r\n },\r\n})\r\nexport default class EditionsPublicList extends Vue {\r\n @Prop() public editions!: EditionInfo[];\r\n\r\n protected get indices() {\r\n const indices: number[] = [];\r\n for (let idx = 0; idx < this.editions.length; idx += 4) {\r\n indices.push(idx);\r\n }\r\n\r\n return indices;\r\n }\r\n\r\n protected getWindowWidth() {\r\n return window.outerWidth;\r\n }\r\n}\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--13-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edition-public-list.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--13-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edition-public-list.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./edition-public-list.vue?vue&type=template&id=4d78bc59&scoped=true&\"\nimport script from \"./edition-public-list.vue?vue&type=script&lang=ts&\"\nexport * from \"./edition-public-list.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./edition-public-list.vue?vue&type=style&index=0&id=4d78bc59&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4d78bc59\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Emit, Prop, Vue, Watch } from 'vue-property-decorator';\r\nimport { EditionInfo } from '@/models/edition';\r\nimport { SearchBarParams } from '@/components/search-bar.vue';\r\nimport CopyEditionModal from './copy-edition-modal.vue';\r\nimport Waiting from '@/components/misc/Waiting.vue';\r\nimport SearchBar from '@/components/search-bar.vue';\r\nimport EditionsPublicList from './edition-public-list.vue';\r\nimport { SearchBarValue } from '@/state/utilities';\r\n\r\n@Component({\r\n name: 'public-editions',\r\n components: {\r\n Waiting,\r\n SearchBar,\r\n EditionsPublicList,\r\n CopyEditionModal,\r\n },\r\n})\r\nexport default class PublicEditions extends Vue {\r\n public filteredEditions: EditionInfo[] = [];\r\n public searchBarParams: SearchBarParams = {\r\n filter: true,\r\n sort: true,\r\n side: false,\r\n };\r\n\r\n public get searchValue() {\r\n return this.$state.misc.editionSearchBarValue;\r\n }\r\n\r\n public set searchValue(newVal: SearchBarValue) {\r\n this.$state.misc.editionSearchBarValue = newVal;\r\n }\r\n\r\n @Watch('$state.misc.editionSearchBarValue', {deep: true})\r\n public onSearchValueChanged() {\r\n this.onPublicEditionsLoad();\r\n }\r\n\r\n public onEditionsSearch(newSearch: SearchBarValue) {\r\n this.searchValue = newSearch;\r\n }\r\n\r\n @Emit()\r\n public onPublicEditionsLoad() {\r\n this.filteredEditions = this.getFilteredEditions();\r\n return this.filteredEditions.length;\r\n }\r\n\r\n protected async mounted() {\r\n await this.$state.prepare.allEditions();\r\n this.onPublicEditionsLoad();\r\n }\r\n\r\n private getFilteredEditions(): EditionInfo[] {\r\n // This function is not really efficient, but it does work quickly enough for the editions we have.\r\n // No need in optimizing it.\r\n\r\n return this.$state.editions.items\r\n .filter((ed: EditionInfo) => {\r\n let filter: boolean = ed.isPublic === true;\r\n // if (this.searchValue.view) {\r\n // filter = filter && art.side === this.searchValue.view\r\n // }\r\n if (this.searchValue.filter) {\r\n filter =\r\n filter &&\r\n ed.name\r\n .toLowerCase()\r\n .includes(this.searchValue.filter.toLowerCase());\r\n }\r\n return filter;\r\n })\r\n .sort((a: EditionInfo, b: EditionInfo) => {\r\n\r\n if (this.searchValue.sort) {\r\n let aVal = (a as any)[this.searchValue.sort];\r\n let bVal = (b as any)[this.searchValue.sort];\r\n\r\n if ( 'name' === this.searchValue.sort ) {\r\n return aVal.localeCompare( bVal , undefined,\r\n { numeric: true, sensitivity: 'base' }\r\n );\r\n\r\n } else if ( 'lastEdit' === this.searchValue.sort ) {\r\n\r\n // for undefined dates, take 01/01/1970 as default\r\n if ( undefined === aVal ) {\r\n aVal = new Date(1970, 1, 1, 1, 1, 1);\r\n }\r\n if ( undefined === bVal ) {\r\n bVal = new Date(1970, 1, 1, 1, 1, 1);\r\n }\r\n return ((aVal > bVal) ? -1 : 1 );\r\n\r\n } else {\r\n return ((aVal > bVal) ? 1 : -1 );\r\n }\r\n\r\n } else {\r\n return 1;\r\n }\r\n });\r\n }\r\n}\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--13-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./public-editions.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--13-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./public-editions.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./public-editions.vue?vue&type=template&id=6eb178c3&scoped=true&\"\nimport script from \"./public-editions.vue?vue&type=script&lang=ts&\"\nexport * from \"./public-editions.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./public-editions.vue?vue&type=style&index=0&id=6eb178c3&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6eb178c3\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n// import Vue from 'vue';\r\nimport { Component, Prop, Emit, Vue, Watch } from 'vue-property-decorator';\r\nimport Waiting from '@/components/misc/Waiting.vue';\r\nimport { EditionInfo } from '@/models/edition';\r\nimport PersonalEditions from './components/personal-editions.vue';\r\nimport PublicEditions from './components/public-editions.vue';\r\nimport { Route } from 'vue-router';\r\n\r\n@Component({\r\n name: 'home',\r\n components: {\r\n Waiting,\r\n PersonalEditions,\r\n PublicEditions,\r\n },\r\n})\r\nexport default class Home extends Vue {\r\n // component data\r\n // =====================\r\n\r\n private filter: string = '';\r\n public editionsLoaded = false;\r\n public activeTab: number = 0;\r\n\r\n // hooks as constructor\r\n // ========================\r\n protected created() {\r\n this.$state.prepare.allEditions();\r\n this.$state.editions.current = null;\r\n }\r\n\r\n protected async mounted() {\r\n if (this.$route.params.editionType === 'public') {\r\n this.$nextTick(() => {\r\n this.activeTab = 1;\r\n });\r\n }\r\n\r\n if (this.$route.params.editionType === 'private' && !this.user) {\r\n this.$router.replace('/home/public');\r\n }\r\n\r\n await this.$state.prepare.allEditions(); // Already called in create, here we just wait for it to finish\r\n this.editionsLoaded = true;\r\n }\r\n\r\n public get user(): boolean {\r\n return this.$state.session.user ? true : false;\r\n }\r\n\r\n // methods & event handlers\r\n // ==================================\r\n\r\n public nameMatch(name: string): boolean {\r\n return name.toLowerCase().indexOf(this.filter.toLowerCase()) !== -1;\r\n }\r\n\r\n public get personalEditionsCount() {\r\n return this.$state.editions.items.filter((ed) => !ed.isPublic).length;\r\n }\r\n\r\n public get publicEditionsCount() {\r\n return this.$state.editions.items.filter((ed) => ed.isPublic).length;\r\n }\r\n\r\n public onActivateTab(newTab: number, prevTab: number) {\r\n if (prevTab === -1) {\r\n return;\r\n }\r\n if (newTab === 0 && this.$route.params.editionType !== 'private') {\r\n this.$router.push('/home/private');\r\n } else if (\r\n newTab === 1 &&\r\n this.$route.params.editionType !== 'public'\r\n ) {\r\n this.$router.push('/home/public');\r\n }\r\n }\r\n\r\n @Watch('$route')\r\n protected onRouteChanged(to: Route, from: Route) {\r\n if (to.name !== 'home') {\r\n return; // Changed to some other page, ignore it.\r\n }\r\n\r\n if (to.params.editionType === 'public') {\r\n this.activeTab = 1;\r\n } else {\r\n this.activeTab = 0;\r\n }\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Home.vue?vue&type=template&id=b2cc663e&scoped=true&\"\nimport script from \"./Home.vue?vue&type=script&lang=ts&\"\nexport * from \"./Home.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Home.vue?vue&type=style&index=0&lang=scss&\"\nimport style1 from \"./Home.vue?vue&type=style&index=1&id=b2cc663e&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"b2cc663e\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"scroll-bar main-div\"},[_c('search-form',{attrs:{\"disabled\":_vm.searching},on:{\"search\":function($event){return _vm.onSearch($event)}}}),_c('b-row',[_c('b-col',{attrs:{\"cols\":\"9\"}},[(_vm.searching)?_c('waiting',{staticStyle:{\"height\":\"100px\"}}):_vm._e()],1)],1),_c('search-results',{attrs:{\"results\":_vm.searchResults}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { DetailedSearchRequestDTO, DetailedSearchResponseDTO } from '@/dtos/sqe-dtos';\r\nimport { CommHelper } from './comm-helper';\r\nimport { ApiRoutes } from './api-routes';\r\n\r\nexport default class SearchService {\r\n public async search(detailedSearchRequestDTO: DetailedSearchRequestDTO): Promise {\r\n if (!detailedSearchRequestDTO.artefactDesignation) {\r\n detailedSearchRequestDTO.artefactDesignation = [];\r\n }\r\n\r\n if (!detailedSearchRequestDTO.textReference) {\r\n detailedSearchRequestDTO.textReference = [];\r\n }\r\n\r\n const response = await CommHelper.post(ApiRoutes.searchUrl(), detailedSearchRequestDTO);\r\n return response.data;\r\n }\r\n}\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('b-row',{staticClass:\"mt-5\",attrs:{\"align-v\":\"center\"}},[_c('b-col',{staticClass:\"col-2\"},[_c('label',[_vm._v(\"Edition\")])]),_c('b-col',{staticClass:\"col-5\"},[_c('b-form-input',{attrs:{\"placeholder\":\"Manuscript/text number, e.g., 3Q4\"},model:{value:(_vm.searchData.textDesignation),callback:function ($$v) {_vm.$set(_vm.searchData, \"textDesignation\", $$v)},expression:\"searchData.textDesignation\"}})],1),_c('b-col',{staticClass:\"col-1\"},[_c('b-form-checkbox',{directives:[{name:\"b-tooltip\",rawName:\"v-b-tooltip.hover.right\",value:('Exact search'),expression:\"'Exact search'\",modifiers:{\"hover\":true,\"right\":true}}],model:{value:(_vm.searchData.exactTextDesignation),callback:function ($$v) {_vm.$set(_vm.searchData, \"exactTextDesignation\", $$v)},expression:\"searchData.exactTextDesignation\"}})],1)],1),_c('b-row',{staticClass:\"mt-2\",attrs:{\"align-v\":\"center\"}},[_c('b-col',{staticClass:\"col-2\"},[_c('label',[_vm._v(\"Imaged Object\")])]),_c('b-col',{staticClass:\"col-5\"},[_c('b-form-input',{attrs:{\"placeholder\":\"IAA-Plate(-Fragment). e.g. IAA-1093-1\"},model:{value:(_vm.searchData.imageDesignation),callback:function ($$v) {_vm.$set(_vm.searchData, \"imageDesignation\", $$v)},expression:\"searchData.imageDesignation\"}})],1),_c('b-col',{staticClass:\"col-1\"},[_c('b-form-checkbox',{directives:[{name:\"b-tooltip\",rawName:\"v-b-tooltip.hover.right\",value:('Exact search'),expression:\"'Exact search'\",modifiers:{\"hover\":true,\"right\":true}}],model:{value:(_vm.searchData.exactImageDesignation),callback:function ($$v) {_vm.$set(_vm.searchData, \"exactImageDesignation\", $$v)},expression:\"searchData.exactImageDesignation\"}})],1)],1),_c('b-row',{staticClass:\"mt-2\",attrs:{\"align-v\":\"center\"}},[_c('b-col',{staticClass:\"col-2\"},[_c('label',[_vm._v(\"Text Fragment\")])]),_c('b-col',{staticClass:\"col-5\"},[_c('b-form-textarea',{attrs:{\"id\":\"textarea\",\"placeholder\":\"Designation for a portion of text, e.g., Frg. 134\",\"rows\":\"3\",\"max-rows\":\"6\"},on:{\"input\":function($event){return _vm.textToArray($event, 'textReference')}}})],1),_c('b-col',{staticClass:\"col-1\"},[_c('b-form-checkbox',{directives:[{name:\"b-tooltip\",rawName:\"v-b-tooltip.hover.right\",value:('Exact search'),expression:\"'Exact search'\",modifiers:{\"hover\":true,\"right\":true}}],model:{value:(_vm.searchData.exactTextReference),callback:function ($$v) {_vm.$set(_vm.searchData, \"exactTextReference\", $$v)},expression:\"searchData.exactTextReference\"}})],1)],1),_c('b-row',{staticClass:\"mt-2\",attrs:{\"align-v\":\"center\"}},[_c('b-col',{staticClass:\"col-2\"},[_c('label',[_vm._v(\"Artefact\")])]),_c('b-col',{staticClass:\"col-5\"},[_c('b-form-textarea',{attrs:{\"id\":\"textarea\",\"placeholder\":\"Designation for a manuscript fragment, e.g., Frg. 134\",\"rows\":\"3\",\"max-rows\":\"6\"},on:{\"input\":function($event){return _vm.textToArray($event, 'artefactDesignation')}}})],1),_c('b-col',{staticClass:\"col-1\"},[_c('b-form-checkbox',{directives:[{name:\"b-tooltip\",rawName:\"v-b-tooltip.hover.right\",value:('Exact search'),expression:\"'Exact search'\",modifiers:{\"hover\":true,\"right\":true}}],model:{value:(_vm.searchData.exactArtefactDesignation),callback:function ($$v) {_vm.$set(_vm.searchData, \"exactArtefactDesignation\", $$v)},expression:\"searchData.exactArtefactDesignation\"}})],1)],1),_c('b-row',[_c('b-col',{staticClass:\"col-2\"}),_c('b-col',{staticClass:\"col-5\"},[_c('b-button',{attrs:{\"disabled\":_vm.noSearch,\"variant\":\"primary\",\"block\":\"\"},on:{\"click\":function($event){return _vm.search()}}},[_vm._v(\" Search \")])],1),_c('b-col',{staticClass:\"col-2\"})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { DetailedSearchResponseDTO } from '@/dtos/sqe-dtos';\r\n\r\nexport class SearchFormData {\r\n public textDesignation?: string;\r\n public exactTextDesignation = false;\r\n\r\n public imageDesignation?: string;\r\n public exactImageDesignation = false;\r\n\r\n public textReference?: string[];\r\n public exactTextReference = false;\r\n\r\n public artefactDesignation?: string[];\r\n public exactArtefactDesignation = false;\r\n}\r\n\r\nexport type SearchResults = DetailedSearchResponseDTO;\r\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { DetailedSearchRequestDTO } from '@/dtos/sqe-dtos';\r\nimport SearchService from '@/services/search';\r\nimport { Component, Emit, Prop, Vue } from 'vue-property-decorator';\r\nimport { SearchFormData } from './types';\r\nimport Waiting from '@/components/misc/Waiting.vue';\r\n@Component({\r\n name: 'search',\r\n})\r\nexport default class SearchForm extends Vue {\r\n private searchService: SearchService = new SearchService();\r\n private searchData: SearchFormData = new SearchFormData();\r\n @Prop({ default: false })\r\n private disabled!: boolean;\r\n\r\n private mounted() {\r\n this.searchData = new SearchFormData();\r\n }\r\n\r\n private textToArray(\r\n input: string,\r\n field: 'textReference' | 'artefactDesignation'\r\n ) {\r\n const list = input.split('\\n').filter((s) => !!s); // Remove empty items from the list\r\n Vue.set(this.searchData, field, list);\r\n }\r\n\r\n private get noSearch() {\r\n return (\r\n this.disabled ||\r\n (!this.searchData.textDesignation &&\r\n !this.searchData.imageDesignation &&\r\n !this.searchData.textReference?.length &&\r\n !this.searchData.artefactDesignation?.length)\r\n );\r\n }\r\n\r\n @Emit()\r\n private search() {\r\n return this.searchData;\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./form.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./form.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./form.vue?vue&type=template&id=9c224faa&scoped=true&\"\nimport script from \"./form.vue?vue&type=script&lang=ts&\"\nexport * from \"./form.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./form.vue?vue&type=style&index=0&id=9c224faa&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"9c224faa\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.results)?_c('div',{staticClass:\"mt-4\"},[(_vm.empty)?_c('p',[_vm._v(\"Search returned no results\")]):_c('div',{staticClass:\"accordion\",attrs:{\"role\":\"tablist\"}},[_c('edition-results',{attrs:{\"editions\":_vm.results.editions.editions}}),_c('imaged-object-results',{attrs:{\"imaged-objects\":_vm.results.images.imagedObjects}}),_c('text-fragment-results',{attrs:{\"text-fragments\":_vm.results.textFragments.textFragments}}),_c('artefact-results',{attrs:{\"artefacts\":_vm.results.artefacts.artefacts}})],1)]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.artefacts)?_c('div',[_c('p',{directives:[{name:\"b-toggle\",rawName:\"v-b-toggle.artefact-results-main\",modifiers:{\"artefact-results-main\":true}}],attrs:{\"role\":\"tab\"}},[_c('i',{staticClass:\"toggle-icon fa fa-angle-down\"}),_vm._v(\" \"+_vm._s(_vm.title)+\" \")]),_c('b-collapse',{staticClass:\"mt-2\",attrs:{\"id\":\"artefact-results-main\",\"accordion\":\"search-accordion\",\"role\":\"tabpanel\"}},[_c('div',_vm._l((_vm.artefactsWithEditions),function(a_e){return _c('b-card',{key:a_e.artefact.id,staticClass:\"p-3\",attrs:{\"no-body\":\"\"}},[_c('router-link',{attrs:{\"to\":{path: (\"/editions/\" + (a_e.edition.id) + \"/artefacts/\" + (a_e.artefact.id))}}},[_c('artefact-image',{staticClass:\"card-img-top\",attrs:{\"artefact\":a_e.artefact,\"imaged-object\":a_e.imagedObject,\"maxWidth\":\"150\"}}),_c('label',{staticClass:\"side-edition\"},[_vm._v(\" \"+_vm._s(a_e.edition.name)+\" - \"+_vm._s(a_e.artefact.name)+\" - \"+_vm._s(a_e.artefact.side)+\" \")])],1)],1)}),1)])],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.loaded)?_c('artefact-svg',{attrs:{\"artefact\":_vm.artefact,\"imaged-object\":_vm.imagedObject,\"aspect-ratio\":_vm.aspectRatio}},[(!this.artefact.isVirtual)?_c('g',_vm._l((_vm.visibleImageSettings),function(imageSetting){return _c('iiif-image',{key:imageSetting.image.url,attrs:{\"image\":imageSetting.image,\"opacity\":imageSetting.normalizedOpacity,\"boundingBox\":_vm.boundingBox,\"maxWidth\":_vm.maxWidth,\"dynamic\":false}})}),1):_vm._e(),(_vm.artefact.isVirtual)?_c('path',{staticClass:\"virtual-path\",attrs:{\"d\":_vm.artefact.mask.svg,\"vector-effect\":\"non-scaling-stroke\"}}):_vm._e()]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/*\r\n * This class is a base class for a mixin that has an async mounted method.\r\n *\r\n * The problem with async mounted() methods is that while they are called in order (mixins before component), they\r\n * finish in an unexpected order. If your component's mounted() function depends on the mixin's mounted function to\r\n * finish, it needs some help.\r\n *\r\n * To use this, in your mixin implement asyncMounted instead of mounted, and in your component\r\n * await this.mountedDone in your mounted method.\r\n */\r\n\r\nimport { Component, Vue } from 'vue-property-decorator';\r\n\r\n@Component\r\nexport default class AsyncMountedMixinBase extends Vue {\r\n protected mountedDone!: Promise;\r\n\r\n protected mounted() {\r\n this.mountedDone = this.asyncMounted();\r\n }\r\n\r\n // tslint:disable-next-line:no-empty\r\n protected async asyncMounted(): Promise {\r\n }\r\n}\r\n","import { Component, Prop } from 'vue-property-decorator';\r\nimport { Artefact } from '@/models/artefact';\r\nimport { IIIFManifest, ImageStack } from '@/models/image';\r\nimport { BoundingBox } from '@/utils/helpers';\r\nimport AsyncMountedMixinBase from './async-mounted-mixin-base';\r\nimport { ImagedObject } from '@/models/imaged-object';\r\n\r\n@Component\r\nexport default class ArtefactDataMixin extends AsyncMountedMixinBase {\r\n @Prop() protected artefact!: Artefact;\r\n @Prop({ default: undefined }) protected imagedObject: ImagedObject | undefined;\r\n\r\n protected imageStack: ImageStack | undefined = undefined;\r\n protected masterImageManifest: IIIFManifest | null = null;\r\n protected boundingBox = new BoundingBox();\r\n\r\n protected async asyncMounted() {\r\n // await this.$state.prepare.edition(this.artefact.editionId);\r\n\r\n if (!this.artefact.isVirtual) {\r\n const imagedObject = this.imagedObject || this.$state.imagedObjects.find(this.artefact.imagedObjectId);\r\n if (!imagedObject) {\r\n throw new Error(\r\n `Can't find imaged object ${this.artefact.imagedObjectId} belonging to artefact ${this.artefact.id}`);\r\n }\r\n this.imageStack = this.artefact.side === 'recto' ? imagedObject.recto : imagedObject.verso;\r\n if (!this.imageStack) {\r\n throw new Error(`ImagedObject ${this.artefact.imagedObjectId} doesn't contain the ` +\r\n `${this.artefact.side} side even though artefact ${this.artefact.id} references it`);\r\n }\r\n await this.$state.prepare.imageManifest(this.imageStack.master);\r\n this.masterImageManifest = this.imageStack.master.manifest || null;\r\n }\r\n\r\n this.boundingBox = this.artefact.mask.getBoundingBox();\r\n }\r\n}\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.loaded)?_c('svg',{attrs:{\"viewBox\":((_vm.boundingBox.x) + \" \" + (_vm.boundingBox.y) + \" \" + (_vm.boundingBox.width) + \" \" + (_vm.boundingBox.height)),\"width\":_vm.elementWidth,\"height\":_vm.elementHeight,\"xmlns\":\"http://www.w3.org/2000/svg\",\"xmlns:xlink\":\"http://www.w3.org/1999/xlink\"}},[_c('defs',[_c('path',{attrs:{\"id\":(\"path-\" + (_vm.artefact.id)),\"d\":_vm.artefact.mask.svg}}),_c('clipPath',{attrs:{\"id\":(\"clip-path-\" + (_vm.artefact.id))}},[_c('use',{attrs:{\"stroke\":\"none\",\"fill\":\"none\",\"fill-rule\":\"evenodd\",\"xlink:href\":(\"#path-\" + (_vm.artefact.id))}})])]),_c('g',{attrs:{\"clip-path\":(\"url(#clip-path-\" + (_vm.artefact.id) + \")\")}},[_vm._t(\"default\")],2)]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Mixins } from 'vue-property-decorator';\r\nimport { IIIFImage } from '@/models/image';\r\nimport ArtefactDataMixin from './artefact-data-mixin';\r\n\r\n@Component({\r\n name: 'artefact-svg',\r\n})\r\nexport default class ArtefactSvg extends Mixins(ArtefactDataMixin) {\r\n @Prop({default: 1.3}) private aspectRatio!: number;\r\n\r\n private elementWidth = 0;\r\n private serverScale = 5;\r\n private loaded = false;\r\n\r\n get scale(): number {\r\n if (this.elementWidth && this.masterImageManifest) {\r\n return this.elementWidth / this.boundingBox.width;\r\n }\r\n\r\n return 0.05;\r\n }\r\n\r\n get elementHeight(): number {\r\n if (this.elementWidth) {\r\n return this.elementWidth / this.aspectRatio;\r\n }\r\n\r\n return 100;\r\n }\r\n\r\n protected async mounted() {\r\n await this.mountedDone;\r\n this.loaded = true;\r\n this.updateWidth();\r\n window.addEventListener('resize', () => {\r\n this.updateWidth();\r\n });\r\n }\r\n\r\n private updateWidth() {\r\n this.elementWidth = this.$el.clientWidth;\r\n if (!this.loaded) {\r\n // This should never happen\r\n console.warn('updateWidth called before data was loaded, which makes very little sense');\r\n this.serverScale = 5;\r\n return;\r\n }\r\n\r\n if (this.imageStack) {\r\n this.serverScale = this.imageStack!.master.getOptimizedScaleFactor(this.elementWidth,\r\n this.elementWidth / this.aspectRatio,\r\n this.boundingBox);\r\n }\r\n }\r\n}\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./artefact-svg.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./artefact-svg.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./artefact-svg.vue?vue&type=template&id=64b5f752&scoped=true&\"\nimport script from \"./artefact-svg.vue?vue&type=script&lang=ts&\"\nexport * from \"./artefact-svg.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./artefact-svg.vue?vue&type=style&index=0&id=64b5f752&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"64b5f752\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.image)?_c('g',{ref:\"imageGroup\",attrs:{\"transform\":_vm.groupTransform}},[_c('image',{attrs:{\"xlink:href\":_vm.backgroundImageUrl,\"transform\":_vm.backgroundImageTransform,\"opacity\":_vm.opacity},on:{\"error\":function($event){return _vm.onBackgroundLoadError()}}}),_vm._l((_vm.tiles),function(tile,idx){return _c('image',{key:(\"iiif-image-\" + (_vm.image.id) + \"-tile-\" + idx),attrs:{\"id\":(\"iiif-image-\" + (_vm.image.id) + \"-tile-\" + idx),\"width\":tile.width,\"height\":tile.height,\"xlink:href\":tile.url,\"opacity\":_vm.opacity,\"transform\":tile.transform},on:{\"error\":function($event){return tile.onLoadError()}}})})],2):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n/*\r\n * This component is responsible for displaying an IIIFImage on an SVG.\r\n *\r\n * It takes care of tiling and efficient zooming, but trying to get an optimal scale factor for the server.\r\n *\r\n * Understaning the code requires understanding the various coordinate systems we have - as we have a few.\r\n *\r\n * 1. SQE coordinate system\r\n * This is the coordinate system used by the SQE database. All coordinates and polygons in the database are\r\n * expressed in this coordinate system.\r\n * 2. The Screen coordinate system\r\n * This is the coordinate system on the screen - in pixels.\r\n * 3. The Image coodrinate system\r\n * This is the coordinate system of the IIIF Image with no scaling. Usually it is the same as the SQE coordinate\r\n * system, but in older images it might not be.\r\n *\r\n * Translating a coordinate from one system to another involves multiplying X and Y but a constant factor (identical for X and Y).\r\n *\r\n * * SQE Coordinate System to Screen Coordinate System\r\n * This is done by multiplying the SQE coordinates by the scaleFactor paramater, which is usually tied up to the Zoom slider on the UI.\r\n * Xscreen = Xsqe * scaleFactor; Yscreen = Ysqe * scaleFactor\r\n *\r\n * * SQE Coordinate System to Image Coordinate System\r\n * SQE assumes the DPI of all the images is 1215. Some images have a different DPI. Translating from one to another involves the image's ppiAdjustmentFactor, which\r\n * is sqeDPI / imageDPI. So:\r\n *\r\n * Ximage = Xsqe / image.ppiAdjustmantFactor; Yimage = Ysqe / image.ppiAdjustmentFactor\r\n */\r\n\r\nimport { Image } from '@/models/image';\r\nimport { BoundingBox, BoundingBoxInterface } from '@/utils/helpers';\r\nimport { Component, Prop, Vue, Watch } from 'vue-property-decorator';\r\n\r\ninterface ManifestTileInfo {\r\n width: number;\r\n height: number;\r\n scaleFactors: number[];\r\n}\r\n\r\nclass TileInfo {\r\n private static RETRY_LIMIT = 10;\r\n\r\n public transform: string;\r\n public loadError: boolean;\r\n private _inView: boolean;\r\n public retries: number;\r\n public width: number;\r\n public height: number;\r\n private _url: string;\r\n public get url() {\r\n return this.inView && !this.loadError ? this._url : null;\r\n }\r\n\r\n public get inView() {\r\n return this._inView;\r\n }\r\n\r\n public set inView(val: boolean) {\r\n // When an item has been in view, keep it displayed, so it will not need to be refreshed\r\n this._inView ||= val;\r\n }\r\n\r\n public constructor(\r\n url: string,\r\n transform: string,\r\n width: number,\r\n height: number\r\n ) {\r\n this.transform = transform;\r\n this._url = url;\r\n this.width = width;\r\n this.height = height;\r\n this.loadError = false;\r\n this.retries = 0;\r\n this._inView = false;\r\n }\r\n\r\n public onLoadError() {\r\n this.loadError = true;\r\n this.retries += 1;\r\n if (this.retries >= TileInfo.RETRY_LIMIT) {\r\n console.error(`Giving up loading ${this._url} after ${this.retries}`);\r\n }\r\n setTimeout(() => {\r\n this.loadError = false;\r\n }, 50 * this.retries); // Try again after a little while (wait longer after more retries)\r\n }\r\n}\r\n\r\n@Component({\r\n name: 'iiif-image',\r\n})\r\nexport default class IIIFImageComponent extends Vue {\r\n @Prop() public image!: Image;\r\n @Prop() public boundingBox?: BoundingBoxInterface; // In SQE coordinates\r\n @Prop({ default: 0.5 }) public scaleFactor!: number;\r\n @Prop() public maxWidth?: number; // In Screen Coordinates\r\n @Prop({ default: 1 }) public opacity!: number;\r\n @Prop({ default: true}) public dynamic!: boolean;\r\n\r\n public tiles: TileInfo[] = [];\r\n private observer?: ResizeObserver;\r\n private refreshTimeoutId: number | null = null;\r\n private backgroundLoadError = false;\r\n\r\n private static CHECK_IN_VIEW_TIMEOUT = 50; // Update tiles in view 50ms after scroll or resize\r\n\r\n protected get surroundingDiv() {\r\n const imageGroup = this.$refs.imageGroup as SVGGElement;\r\n const svg = imageGroup.ownerSVGElement!;\r\n const div = svg.closest('div')!;\r\n\r\n return div;\r\n }\r\n\r\n public mounted() {\r\n const div = this.surroundingDiv;\r\n div.addEventListener('scroll', () => {\r\n this.onSurroundingChanged();\r\n });\r\n this.observer = new ResizeObserver(() => this.onSurroundingChanged());\r\n this.observer!.observe(div);\r\n\r\n this.loadTiles();\r\n // this.scaleFactor = 0;\r\n // this.scaleFactor = this.scaleFactor;\r\n }\r\n\r\n public destroyed() {\r\n const div = this.surroundingDiv;\r\n div.removeEventListener('scroll', () => {\r\n this.onSurroundingChanged();\r\n });\r\n if (this.observer) {\r\n this.observer.disconnect();\r\n }\r\n }\r\n\r\n private onSurroundingChanged() {\r\n if (this.refreshTimeoutId) {\r\n window.clearTimeout(this.refreshTimeoutId);\r\n }\r\n this.refreshTimeoutId = window.setTimeout(() => {\r\n this.checkTilesInView();\r\n this.refreshTimeoutId = null;\r\n }, IIIFImageComponent.CHECK_IN_VIEW_TIMEOUT);\r\n }\r\n\r\n @Watch('scaleFactor')\r\n private onScalePropertyChanged(value: number, oldValue: number) {\r\n this.loadTiles();\r\n }\r\n\r\n @Watch('boundingBox')\r\n private onBoundingBoxPropertyChanged(value: number, oldValue: number) {\r\n // Sometimes loading of the bounding box lags behind reception of\r\n // other values, make sure to trigger a tile load when a new bounding\r\n // box appears.\r\n this.loadTiles();\r\n }\r\n\r\n private loadTiles() {\r\n // If the bounding box has no width or height, don't go any further; nothing to display\r\n if (\r\n !this.imageBoundingBox.width ||\r\n !this.imageBoundingBox.height ||\r\n !this.image\r\n ) {\r\n return;\r\n }\r\n\r\n // Get the tile size we can actually use (this is based on the optimizedImageScaleFactor)\r\n const tileWidth = Math.floor(\r\n this.manifestTileInfo.width / this.optimizedImageScaleFactor\r\n );\r\n const tileHeight = Math.floor(\r\n this.manifestTileInfo.height / this.optimizedImageScaleFactor\r\n );\r\n // console.debug(`tile size ${tileWidth}, ${tileHeight}`);\r\n\r\n this.tiles = [];\r\n const endX = this.imageBoundingBox.x + this.imageBoundingBox.width; // Bottom right corner of the bounding box\r\n const endY = this.imageBoundingBox.y + this.imageBoundingBox.height;\r\n // console.debug('imageBoundingBox: ', this.imageBoundingBox);\r\n\r\n let xTranslate = 0; // How much to translate the tile\r\n for (let x = this.imageBoundingBox.x; x < endX; x += tileWidth) {\r\n const currentTileWidth = Math.min(tileWidth, endX - x);\r\n\r\n let yTranslate = 0;\r\n for (let y = this.imageBoundingBox.y; y < endY; y += tileHeight) {\r\n const currentTileHeight = Math.min(tileHeight, endY - y);\r\n\r\n // Now we have a tile we can create\r\n const url = this.image.getScaledAndCroppedUrl(\r\n this.optimizedImageScaleFactor * 100,\r\n x,\r\n y,\r\n currentTileWidth + 1,\r\n currentTileHeight + 1\r\n );\r\n const tile = new TileInfo(\r\n url,\r\n `translate(${xTranslate}, ${yTranslate})`,\r\n currentTileWidth * this.optimizedImageScaleFactor,\r\n currentTileHeight * this.optimizedImageScaleFactor\r\n );\r\n if (!this.dynamic) {\r\n tile.inView = true;\r\n }\r\n\r\n this.tiles.push(tile);\r\n yTranslate +=\r\n currentTileHeight * this.optimizedImageScaleFactor - 1; // For some reason without the -1 we see thin lines between tiles\r\n }\r\n xTranslate += currentTileWidth * this.optimizedImageScaleFactor - 1;\r\n }\r\n\r\n this.$nextTick(() => {\r\n this.checkTilesInView();\r\n });\r\n }\r\n\r\n private checkTilesInView() {\r\n if (!this.dynamic) {\r\n return;\r\n }\r\n const div = this.surroundingDiv;\r\n const bboxDiv = { left: div.offsetLeft, top: div.offsetTop, right: div.offsetLeft + div.clientWidth, bottom: div.offsetTop + div.clientHeight };\r\n // console.debug('Div scrolled-area ', div, ' bounding box ', bboxDiv);\r\n\r\n for (const [idx, tile] of this.tiles.entries()) {\r\n const tileId = `iiif-image-${this.image.id}-tile-${idx}`;\r\n const tileElement = document.getElementById(tileId) as SVGImageElement | null;\r\n if (!tileElement) {\r\n // console.debug(`Can't locate element for tile ${tileId}`);\r\n continue;\r\n }\r\n const bbox = tileElement.getBoundingClientRect();\r\n\r\n const inView = bbox.left <= bboxDiv.right && bboxDiv.left <= bbox.right && bbox.top <= bboxDiv.bottom && bboxDiv.top <= bbox.bottom;\r\n tile.inView = inView;\r\n // console.debug(`Tile ${idx} bounding box:`, tileElement.getBoundingClientRect(), 'inView: ', inView);\r\n }\r\n }\r\n\r\n // The actual bounding box - either the supplied bounding box argument or the entire image\r\n // in SQE coordinates\r\n private get sqeBoundingBox(): BoundingBoxInterface {\r\n if (this.boundingBox) {\r\n return this.boundingBox;\r\n }\r\n\r\n const sqeBB = new BoundingBox(\r\n 0,\r\n 0,\r\n this.image.width,\r\n this.image.height\r\n );\r\n return sqeBB;\r\n }\r\n\r\n // Bounding box in Image Coordinates\r\n private get imageBoundingBox(): BoundingBoxInterface {\r\n const sqeBB = this.sqeBoundingBox;\r\n const f = this.image.ppiAdjustmentFactor;\r\n\r\n const imageBB = new BoundingBox(\r\n sqeBB.x / f,\r\n sqeBB.y / f,\r\n sqeBB.width / f,\r\n sqeBB.height / f\r\n );\r\n return imageBB;\r\n }\r\n\r\n // Screen bounding box - in Screen Coordinates\r\n private get screenBoundingBox(): BoundingBoxInterface {\r\n const sqeBB = this.sqeBoundingBox;\r\n let f;\r\n\r\n if (this.maxWidth) {\r\n f = sqeBB.width / this.maxWidth;\r\n } else {\r\n f = 1 / this.scaleFactor;\r\n }\r\n\r\n const screenBB = new BoundingBox(\r\n sqeBB.x / f,\r\n sqeBB.y / f,\r\n sqeBB.width / f,\r\n sqeBB.height / f\r\n );\r\n return screenBB;\r\n }\r\n\r\n // The IIIF manifest can contain tile information. If not, we have a default tile information we use.\r\n private get manifestTileInfo(): ManifestTileInfo {\r\n if (this.image.manifest?.tiles) {\r\n // Use the first tile - we haven't seen an example with more than one tile entry\r\n return this.image.manifest.tiles[0] as ManifestTileInfo;\r\n }\r\n\r\n // Default tile information\r\n return {\r\n width: 1024,\r\n height: 1024,\r\n scaleFactors: [1, 2, 4],\r\n };\r\n }\r\n\r\n // The amount of scale required for the image\r\n // imageCoordinate * imageScaleFactor = screenCoordinate\r\n //\r\n // This scale factor is the basis of what is sent to the server\r\n private get imageScaleFactor(): number {\r\n const imageScaleFactor = Math.min(\r\n this.screenBoundingBox.width / this.imageBoundingBox.width,\r\n 1\r\n );\r\n return imageScaleFactor;\r\n }\r\n\r\n // The imageScaleFactor rounded up to the nearest scale optimized in the server\r\n // (based on the tile info)\r\n private get optimizedImageScaleFactor() {\r\n for (\r\n let i = this.manifestTileInfo.scaleFactors.length - 1;\r\n i >= 0;\r\n i--\r\n ) {\r\n const manifestScaleFactor =\r\n 1 / this.manifestTileInfo.scaleFactors[i];\r\n if (manifestScaleFactor > this.imageScaleFactor) {\r\n return manifestScaleFactor;\r\n }\r\n }\r\n\r\n return 1; // If all fails, return 1\r\n }\r\n\r\n // // Returns the tiles necessary for the laying out the original image.\r\n // // We need to lay out tiles to cover the entire imageBoundingBox.\r\n // private get tiles(): TileInfo[] {\r\n // // Get the tile size we can actually use (this is based on the optimizedImageScaleFactor)\r\n // const tileWidth = Math.floor(this.manifestTileInfo.width / this.optimizedImageScaleFactor);\r\n // const tileHeight = Math.floor(this.manifestTileInfo.height / this.optimizedImageScaleFactor);\r\n // // console.debug(`tile size ${tileWidth}, ${tileHeight}`);\r\n\r\n // const tiles: TileInfo[] = [];\r\n // const endX = this.imageBoundingBox.x + this.imageBoundingBox.width; // Bottom right corner of the bounding box\r\n // const endY = this.imageBoundingBox.y + this.imageBoundingBox.height;\r\n // // console.debug('imageBoundingBox: ', this.imageBoundingBox);\r\n\r\n // let xTranslate = 0; // How much to translate the tile\r\n // for (let x = this.imageBoundingBox.x; x < endX; x += tileWidth) {\r\n // const currentTileWidth = Math.min(tileWidth, endX - x);\r\n\r\n // let yTranslate = 0;\r\n // for (let y = this.imageBoundingBox.y; y < endY; y += tileHeight) {\r\n // const currentTileHeight = Math.min(tileHeight, endY - y);\r\n\r\n // // Now we have a tile we can create\r\n // const url = this.image.getScaledAndCroppedUrl(this.optimizedImageScaleFactor * 100,\r\n // x, y, currentTileWidth, currentTileHeight);\r\n // const tile = {\r\n // url: url,\r\n // transform: `translate(${xTranslate}, ${yTranslate})`,\r\n // width: currentTileWidth * this.optimizedImageScaleFactor,\r\n // height: currentTileHeight * this.optimizedImageScaleFactor\r\n // };\r\n // // console.debug(`tile (${x}, ${y}, ${currentTileWidth}, ${currentTileHeight})`);\r\n // tiles.push(tile);\r\n // this.goodLinks[url] = true\r\n // yTranslate += currentTileHeight * this.optimizedImageScaleFactor; // For some reason without the -1 we see thin lines between tiles\r\n // }\r\n // xTranslate += currentTileWidth * this.optimizedImageScaleFactor;\r\n // }\r\n\r\n // return tiles;\r\n // }\r\n\r\n // A low-res background image placed behind the tiles, to fill out any rounding artefacts between tiles.\r\n // The IIA IIIF server has a hard limit of 1000x1000 tiles. We want the scaled down image to fit in just one\r\n // tile - it is enough for removing the rounding artefacts.\r\n private get backgroundImageScale(): number {\r\n // Return the scale in percentages\r\n const max = Math.max(this.imageBoundingBox.width, this.imageBoundingBox.height); // Max dimension of image\r\n let scale = 1000 / max * 100; // Scale down (in percents) of max dimension down to 1000\r\n scale = Math.floor(scale);\r\n scale = Math.min(5, scale); // No more than 5% of the original image - anyway\r\n\r\n return scale;\r\n }\r\n\r\n public get backgroundImageUrl(): string | null {\r\n if (this.backgroundLoadError) {\r\n return null;\r\n }\r\n return this.image.getScaledAndCroppedUrl(\r\n this.backgroundImageScale,\r\n this.imageBoundingBox.x,\r\n this.imageBoundingBox.y,\r\n this.imageBoundingBox.width,\r\n this.imageBoundingBox.height\r\n );\r\n }\r\n\r\n public get backgroundImageTransform(): string {\r\n return `scale(${100 / this.backgroundImageScale })`; // Scale the image back to 100%\r\n }\r\n\r\n public onBackgroundLoadError() {\r\n this.backgroundLoadError = true;\r\n setTimeout(() => {\r\n this.backgroundLoadError = false;\r\n }, 100); // Try again in 100ms. Never stop trying.\r\n }\r\n\r\n public get groupTransform(): string {\r\n // Scale the images back to sqe coordinates.\r\n // The images are in imageCoordinates * optimizedImageScaleFactor,\r\n const optimizedImageToSqe =\r\n this.image.ppiAdjustmentFactor / this.optimizedImageScaleFactor;\r\n const scaleTransform = `scale(${optimizedImageToSqe})`;\r\n\r\n // The image is now in sqe coordinates, but at (0, 0) and not the bounding box. We need to move it.\r\n const translateTransform = `translate(${this.sqeBoundingBox.x}, ${this.sqeBoundingBox.y})`;\r\n\r\n return translateTransform + ' ' + scaleTransform;\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./IIIFImage.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./IIIFImage.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./IIIFImage.vue?vue&type=template&id=245f4cc9&scoped=true&\"\nimport script from \"./IIIFImage.vue?vue&type=script&lang=ts&\"\nexport * from \"./IIIFImage.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"245f4cc9\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Mixins } from 'vue-property-decorator';\r\nimport { ImageSetting, SingleImageSetting } from '@/components/image-settings/types';\r\nimport ArtefactDataMixin from './artefact-data-mixin';\r\nimport ArtefactSvg from './artefact-svg.vue';\r\nimport IIIFImageComponent from '../images/IIIFImage.vue';\r\n\r\n@Component({\r\n name: 'artefact-image',\r\n components: {\r\n 'artefact-svg': ArtefactSvg,\r\n 'iiif-image': IIIFImageComponent,\r\n },\r\n})\r\nexport default class ArtefactImage extends Mixins(ArtefactDataMixin) {\r\n @Prop({default: 1.3}) private aspectRatio!: number;\r\n @Prop({\r\n default: () => {\r\n return {} as ImageSetting;\r\n }\r\n }) private imageSettings!: ImageSetting;\r\n @Prop({ default: 400 })\r\n private maxWidth!: number;\r\n\r\n private loaded = false;\r\n\r\n get visibleImageSettings(): SingleImageSetting[] {\r\n if (this.artefact.isVirtual) {\r\n return [];\r\n }\r\n\r\n if (!Object.keys(this.imageSettings).length) {\r\n // If no settings, just show the master image\r\n return [{\r\n image: this.imageStack!.master,\r\n type: 'master',\r\n visible: true,\r\n opacity: 1,\r\n normalizedOpacity: 1\r\n }];\r\n }\r\n\r\n const allImageSettings = Object.keys(this.imageSettings).map((key) => this.imageSettings[key]);\r\n const visibleImages = allImageSettings.filter((setting) => setting.visible);\r\n return visibleImages;\r\n }\r\n\r\n protected async mounted() {\r\n await this.mountedDone;\r\n this.loaded = true;\r\n }\r\n}\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./artefact-image.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./artefact-image.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./artefact-image.vue?vue&type=template&id=921b6cfe&scoped=true&\"\nimport script from \"./artefact-image.vue?vue&type=script&lang=ts&\"\nexport * from \"./artefact-image.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./artefact-image.vue?vue&type=style&index=0&id=921b6cfe&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"921b6cfe\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport ArtefactImage from '@/components/artefact/artefact-image.vue';\r\nimport { ArtefactDTO, DetailedSearchRequestDTO, ExtendedArtefactDTO, ImagedObjectDTO, ImageDTO, ImageStackDTO } from '@/dtos/sqe-dtos';\r\nimport { Artefact } from '@/models/artefact';\r\nimport { EditionInfo } from '@/models/edition';\r\nimport { ImagedObject } from '@/models/imaged-object';\r\nimport SearchService from '@/services/search';\r\nimport { Component, Emit, Prop, Vue } from 'vue-property-decorator';\r\nimport EditionList from '../home/components/edition-list.vue';\r\nimport { SearchFormData, SearchResults } from './types';\r\n\r\ninterface ArtefactWithEdition {\r\n artefact: Artefact;\r\n imagedObject?: ImagedObject;\r\n edition: EditionInfo;\r\n}\r\n\r\n@Component({\r\n name: 'artefact-results',\r\n components: {\r\n 'artefact-image': ArtefactImage,\r\n }\r\n})\r\nexport default class ArtefactResultComponent extends Vue {\r\n @Prop( { default: null })\r\n private artefacts!: ExtendedArtefactDTO[] | null;\r\n private ready = false;\r\n\r\n private async mounted() {\r\n this.ready = false;\r\n await this.$state.prepare.allEditions();\r\n this.ready = true;\r\n }\r\n\r\n private createImagedObjectDTO(dto: ExtendedArtefactDTO) {\r\n // Create a DTO for the imaged object.\r\n // This DTO has a lot of default fields, we only need the id, recto and verso urls and ppi\r\n\r\n if (!dto.url) {\r\n console.warn('Search result returned an artefact with no image url', dto);\r\n return undefined;\r\n }\r\n\r\n // The url from the server is either for recto or verso - depending on the artefact's side.\r\n // An ImagedObject must have both recto and verso image stacks, so we just replicate the same stack\r\n // twice.\r\n const rectoImageDTO: ImageDTO = {\r\n id: -1,\r\n url: dto.url,\r\n lightingType: 'direct',\r\n lightingDirection: 'top',\r\n waveLength: [],\r\n type: 'master',\r\n side: 'recto',\r\n ppi: dto.ppi,\r\n master: true,\r\n catalogNumber: 0,\r\n imageManifest: '',\r\n };\r\n const rectoImageStackDTO: ImageStackDTO = {\r\n id: -1,\r\n images: [rectoImageDTO],\r\n masterIndex: 0,\r\n };\r\n\r\n const versoImageDTO = { ...rectoImageDTO };\r\n versoImageDTO.side = 'verso';\r\n const versoImageStackDTO: ImageStackDTO = {\r\n id: -1,\r\n images: [versoImageDTO],\r\n masterIndex: 0,\r\n };\r\n\r\n const imagedObjectDTO: ImagedObjectDTO = {\r\n id: dto.imagedObjectId,\r\n recto: rectoImageStackDTO,\r\n verso: versoImageStackDTO,\r\n artefacts: [],\r\n };\r\n\r\n return imagedObjectDTO;\r\n }\r\n\r\n private get artefactsWithEditions() {\r\n const artefacts: ArtefactWithEdition[] = [];\r\n\r\n if (!this.artefacts) {\r\n return artefacts;\r\n }\r\n\r\n for (const dto of this.artefacts) {\r\n const edition = this.$state.editions.find(dto.editionId);\r\n if (edition) {\r\n const artefact = new Artefact(dto);\r\n const imagedObjectDTO = this.createImagedObjectDTO(dto);\r\n const imagedObject = imagedObjectDTO ? new ImagedObject(imagedObjectDTO, edition) : undefined;\r\n artefacts.push( { artefact, edition, imagedObject });\r\n }\r\n }\r\n\r\n return artefacts;\r\n }\r\n\r\n private get title() {\r\n return `Artefacts (${this.artefactsWithEditions.length || 0})`;\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./artefact-results.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./artefact-results.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./artefact-results.vue?vue&type=template&id=647389fb&scoped=true&\"\nimport script from \"./artefact-results.vue?vue&type=script&lang=ts&\"\nexport * from \"./artefact-results.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./artefact-results.vue?vue&type=style&index=0&id=647389fb&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"647389fb\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.editions && _vm.ready)?_c('div',[_c('p',{directives:[{name:\"b-toggle\",rawName:\"v-b-toggle.edition-results-main\",modifiers:{\"edition-results-main\":true}}],attrs:{\"role\":\"tab\"}},[_c('i',{staticClass:\"toggle-icon fa fa-angle-down\"}),_vm._v(\" \"+_vm._s(_vm.title))]),_c('b-collapse',{staticClass:\"mt-2\",attrs:{\"id\":\"edition-results-main\",\"accordion\":\"search-accordion\",\"role\":\"tabpanel\"}},[_c('div',_vm._l((_vm.actualEditions),function(edition){return _c('b-card',{key:edition.versionId,staticClass:\"p-3\",attrs:{\"no-body\":\"\"}},[_c('edition-card',{attrs:{\"edition\":edition}})],1)}),1)])],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { DetailedSearchRequestDTO, EditionDTO } from '@/dtos/sqe-dtos';\r\nimport { EditionInfo } from '@/models/edition';\r\nimport SearchService from '@/services/search';\r\nimport { Component, Emit, Prop, Vue } from 'vue-property-decorator';\r\nimport EditionCard from '../home/components/edition-card.vue';\r\nimport EditionList from '../home/components/edition-list.vue';\r\nimport { SearchFormData, SearchResults } from './types';\r\n\r\n@Component({\r\n name: 'edition-results',\r\n components: {\r\n 'edition-card': EditionCard\r\n }\r\n})\r\nexport default class EditionResultsComponent extends Vue {\r\n @Prop( { default: null })\r\n private editions!: EditionDTO[] | null;\r\n private ready = false;\r\n\r\n private async mounted() {\r\n this.ready = false;\r\n await this.$state.prepare.allEditions();\r\n this.ready = true;\r\n }\r\n\r\n private get actualEditions(): EditionInfo[] {\r\n // From EditionDTO to EditionInfo - we have the editions in our store\r\n if (!this.editions) {\r\n return [];\r\n }\r\n\r\n return this.editions.map(ed => this.$state.editions.find(ed.id)).filter(ed => !!ed) as EditionInfo[];\r\n }\r\n\r\n private get title() {\r\n return `Editions (${this.actualEditions.length || 0})`;\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edition-results.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edition-results.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./edition-results.vue?vue&type=template&id=d54b7722&scoped=true&\"\nimport script from \"./edition-results.vue?vue&type=script&lang=ts&\"\nexport * from \"./edition-results.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./edition-results.vue?vue&type=style&index=0&id=d54b7722&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"d54b7722\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.imagedObjects)?_c('div',[_c('p',{directives:[{name:\"b-toggle\",rawName:\"v-b-toggle.imaged-object-results-main\",modifiers:{\"imaged-object-results-main\":true}}],attrs:{\"role\":\"tab\"}},[_c('i',{staticClass:\"toggle-icon fa fa-angle-down\"}),_vm._v(\" \"+_vm._s(_vm.title)+\" \")]),_c('b-collapse',{staticClass:\"mt-2\",attrs:{\"id\":\"imaged-object-results-main\",\"accordion\":\"search-accordion\",\"role\":\"tabpanel\"}},[_c('div',_vm._l((_vm.expandedObjects),function(im){return _c('b-card',{key:im.id,staticClass:\"p-3\",attrs:{\"no-body\":\"\"}},[_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col-4\"},[_c('span',{staticClass:\"image-id\"},[_vm._v(_vm._s(im.id))]),(im.editions)?_c('span',{staticClass:\"in\"},[_vm._v(\"in\")]):_vm._e(),_vm._l((im.editions),function(edition){return _c('span',{key:edition.id,staticClass:\"edition\"},[_c('router-link',{attrs:{\"to\":{path: (\"/editions/\" + (edition.id) + \"/imaged-objects/\" + (im.id))}}},[_vm._v(\" \"+_vm._s(edition.name)+\" \")])],1)})],2),_c('div',{staticClass:\"col-8\"},[(im.rectoThumbnail || im.versoThumbnail)?_c('img',{directives:[{name:\"lazy\",rawName:\"v-lazy\",value:(im.rectoThumbnail || im.versoThumbnail),expression:\"im.rectoThumbnail || im.versoThumbnail\"}],staticClass:\"card-img\",attrs:{\"alt\":\"Imaged-Object\"}}):_vm._e()])])])}),1)])],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { ArtefactDTO, DetailedSearchRequestDTO, ImageSearchResponseDTO } from '@/dtos/sqe-dtos';\r\nimport { Artefact } from '@/models/artefact';\r\nimport { EditionInfo } from '@/models/edition';\r\nimport { ImagedObject } from '@/models/imaged-object';\r\nimport SearchService from '@/services/search';\r\nimport { Component, Emit, Prop, Vue } from 'vue-property-decorator';\r\nimport EditionList from '../home/components/edition-list.vue';\r\nimport { SearchFormData, SearchResults } from './types';\r\n\r\ninterface ExpandedImagedObjectResponse extends ImageSearchResponseDTO {\r\n editions: EditionInfo[] | null;\r\n}\r\n\r\n@Component({\r\n name: 'imaged-object-results',\r\n})\r\nexport default class ImagedObjectResultComponent extends Vue {\r\n @Prop( { default: null })\r\n private imagedObjects!: ImageSearchResponseDTO[] | null;\r\n private get expandedObjects() {\r\n const expanded = [] as ExpandedImagedObjectResponse[];\r\n\r\n for (const im of this.imagedObjects || []) {\r\n let editions: EditionInfo[] | null = null;\r\n if (im.editionIds) {\r\n for (const editionId of im.editionIds) {\r\n const edition = this.$state.editions.find(editionId);\r\n if (!edition) {\r\n console.warn(`Can't locate edition ${editionId} returned by search`);\r\n } else {\r\n if (!editions) {\r\n editions = [];\r\n }\r\n editions.push(edition);\r\n }\r\n }\r\n }\r\n expanded.push({ editions, ...im});\r\n }\r\n\r\n return expanded;\r\n }\r\n private ready = false;\r\n\r\n private async mounted() {\r\n this.ready = false;\r\n await this.$state.prepare.allEditions();\r\n this.ready = true;\r\n }\r\n\r\n private get title() {\r\n return `Imaged Objects (${this.imagedObjects?.length || 0})`;\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./imaged-object-results.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./imaged-object-results.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./imaged-object-results.vue?vue&type=template&id=566d55fb&scoped=true&\"\nimport script from \"./imaged-object-results.vue?vue&type=script&lang=ts&\"\nexport * from \"./imaged-object-results.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./imaged-object-results.vue?vue&type=style&index=0&id=566d55fb&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"566d55fb\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.textFragments)?_c('div',[_c('p',{directives:[{name:\"b-toggle\",rawName:\"v-b-toggle.text-fragment-results-main\",modifiers:{\"text-fragment-results-main\":true}}],attrs:{\"role\":\"tab\"}},[_c('i',{staticClass:\"toggle-icon fa fa-angle-down\"}),_vm._v(\" \"+_vm._s(_vm.title)+\" \")]),_c('b-collapse',{staticClass:\"mt-2\",attrs:{\"id\":\"text-fragment-results-main\",\"accordion\":\"search-accordion\",\"role\":\"tabpanel\"}},[_c('div',_vm._l((_vm.textFragments),function(tf){return _c('b-card',{key:tf.id,staticClass:\"p-3\",attrs:{\"no-body\":\"\"}},[_c('router-link',{attrs:{\"to\":{ path: (\"/editions/\" + (tf.editionId) + \"/text-fragments/\" + (tf.id))}}},[_vm._v(\" \"+_vm._s(tf.name)+\" in \"+_vm._s(tf.editionName)+\" \")])],1)}),1)])],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { ArtefactDTO, DetailedSearchRequestDTO, ImageSearchResponseDTO, TextFragmentSearchResponseDTO } from '@/dtos/sqe-dtos';\r\nimport { Artefact } from '@/models/artefact';\r\nimport { EditionInfo } from '@/models/edition';\r\nimport { ImagedObject } from '@/models/imaged-object';\r\nimport SearchService from '@/services/search';\r\nimport { Component, Emit, Prop, Vue } from 'vue-property-decorator';\r\nimport EditionList from '../home/components/edition-list.vue';\r\nimport { SearchFormData, SearchResults } from './types';\r\n\r\ninterface ExpandedImagedObjectResponse extends ImageSearchResponseDTO {\r\n editions: EditionInfo[] | null;\r\n}\r\n\r\n@Component({\r\n name: 'text-fragment-results',\r\n})\r\nexport default class TextFragmentResultComponent extends Vue {\r\n @Prop( { default: null })\r\n private textFragments!: TextFragmentSearchResponseDTO[] | null;\r\n\r\n private get title() {\r\n return `Text Fragments (${this.textFragments?.length || 0})`;\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./text-fragment-results.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./text-fragment-results.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./text-fragment-results.vue?vue&type=template&id=0551369f&scoped=true&\"\nimport script from \"./text-fragment-results.vue?vue&type=script&lang=ts&\"\nexport * from \"./text-fragment-results.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./text-fragment-results.vue?vue&type=style&index=0&id=0551369f&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0551369f\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { DetailedSearchRequestDTO } from '@/dtos/sqe-dtos';\r\nimport SearchService from '@/services/search';\r\nimport { Component, Emit, Prop, Vue } from 'vue-property-decorator';\r\nimport ArtefactResultComponent from './artefact-results.vue';\r\nimport EditionResultsComponent from './edition-results.vue';\r\nimport ImagedObjectResultComponent from './imaged-object-results.vue';\r\nimport TextFragmentResultComponent from './text-fragment-results.vue';\r\nimport { SearchFormData, SearchResults } from './types';\r\n\r\n@Component({\r\n name: 'search-results',\r\n components: {\r\n 'edition-results': EditionResultsComponent,\r\n 'artefact-results': ArtefactResultComponent,\r\n 'imaged-object-results': ImagedObjectResultComponent,\r\n 'text-fragment-results': TextFragmentResultComponent,\r\n },\r\n})\r\nexport default class SearchResultComponent extends Vue {\r\n @Prop({ default: null })\r\n private results!: SearchResults | null;\r\n\r\n private get empty() {\r\n function items(a?: T[]) {\r\n if (!a) {\r\n return 0;\r\n }\r\n\r\n return a.length;\r\n }\r\n\r\n if (!this.results) {\r\n return true;\r\n }\r\n\r\n const count =\r\n items(this.results.editions?.editions) +\r\n items(this.results.textFragments?.textFragments) +\r\n items(this.results.artefacts?.artefacts) +\r\n items(this.results.images?.imagedObjects);\r\n\r\n return count === 0;\r\n }\r\n\r\n private get prettyResults(): string {\r\n if (!this.results) {\r\n return '';\r\n }\r\n\r\n return JSON.stringify(this.results, null, 4);\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./results.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./results.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./results.vue?vue&type=template&id=78dd3590&scoped=true&\"\nimport script from \"./results.vue?vue&type=script&lang=ts&\"\nexport * from \"./results.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./results.vue?vue&type=style&index=0&id=78dd3590&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"78dd3590\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport {\r\n DetailedSearchRequestDTO,\r\n DetailedSearchResponseDTO,\r\n} from '@/dtos/sqe-dtos';\r\nimport SearchService from '@/services/search';\r\nimport { Component, Prop, Vue } from 'vue-property-decorator';\r\nimport SearchForm from './form.vue';\r\nimport { SearchFormData, SearchResults } from './types';\r\nimport Waiting from '@/components/misc/Waiting.vue';\r\nimport SearchResultComponent from './results.vue';\r\n\r\n@Component({\r\n name: 'search',\r\n components: {\r\n 'search-form': SearchForm,\r\n waiting: Waiting,\r\n 'search-results': SearchResultComponent,\r\n },\r\n})\r\nexport default class Search extends Vue {\r\n public searchService: SearchService = new SearchService();\r\n private searchData = new SearchFormData();\r\n private searchResults: SearchResults | null = null;\r\n private searching = false;\r\n\r\n private mounted() {\r\n this.searchResults = null;\r\n }\r\n\r\n private async onSearch(data: SearchFormData) {\r\n this.searching = true;\r\n this.searchData = data;\r\n this.searchResults = null;\r\n try {\r\n this.searchResults = await this.searchService.search(data);\r\n } finally {\r\n this.searching = false;\r\n }\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./main.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./main.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./main.vue?vue&type=template&id=773cdfb5&scoped=true&\"\nimport script from \"./main.vue?vue&type=script&lang=ts&\"\nexport * from \"./main.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./main.vue?vue&type=style&index=0&id=773cdfb5&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"773cdfb5\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"overflow-auto welcome-container\"},[_c('div',{staticClass:\"welcome\"},[_c('div',{staticClass:\"welcome-wrapper\"},[_c('p',{staticClass:\"title\"},[_vm._v(_vm._s(_vm.$t('home.brand')))]),_c('p',{staticClass:\"sub-title\"},[_vm._v(\" The next generation of Dead Sea Scrolls research \")]),_c('b-nav',{staticClass:\"btn-inscription\",attrs:{\"align\":\"center\"}},[(!_vm.userName)?_c('b-nav-item',[_c('b-btn',{staticClass:\"btn-login\",attrs:{\"size\":\"md\"},on:{\"click\":_vm.login}},[_vm._v(\" \"+_vm._s(_vm.$t('navbar.login')))])],1):_vm._e(),(!_vm.userName)?_c('b-nav-item',[_c('b-btn',{staticClass:\"btn-regis\",attrs:{\"size\":\"md\",\"variant\":\"primary\"},on:{\"click\":_vm.register}},[_vm._v(\" \"+_vm._s(_vm.$t('navbar.register'))+\" \")])],1):_vm._e()],1),_c('p',{staticClass:\"link\"},[(!_vm.userName)?_c('router-link',{attrs:{\"to\":{ path: \"/home\" }}},[_vm._v(\" Enter the scrollery as a guest \")]):_vm._e(),(_vm.userName)?_c('router-link',{attrs:{\"to\":{ path: \"/home\" }}},[_vm._v(\" Start Working \")]):_vm._e()],1)],1)]),_c('div',{staticClass:\"intro\"},[_c('section',{staticClass:\"row\"},[_c('div',{staticClass:\"col-6 border-right\"},[_c('h5',[_vm._v(\"OUR STORY\")]),_c('p',{staticClass:\"description\"},[_vm._v(\" The Scripta Qumranica Electronica (SQE) is a German-Israeli cooperation financed through the German-Israeli Project (DIP) of the German Research Foundation (DFG). \")]),_c('p',{staticClass:\"description\"},[_vm._v(\" It links together the Leon Levy Dead Sea Scrolls Digital Library of the IAA and the Qumran-Lexicon-project of the Gottingen Academy of Sciences and Humanities, together with computer aided tools developed by the Tel-Aviv University. The platform enables scholars around the world to work together simultaneousy. \")]),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col-4 border-right font\"},[_c('b-link',{attrs:{\"href\":\"https://qumranica.org\",\"target\":\"_blank\"}},[_vm._v(\"Learn more About the project\")])],1),_c('div',{staticClass:\"col-6 border-right font\"},[_c('b-link',{attrs:{\"href\":\"https://www.deadseascrolls.org.il/home\",\"target\":\"_blank\"}},[_vm._v(\" The Leon Levy Dead Sea Scrolls Digital Library \")])],1)])]),_c('div',{staticClass:\"col-6 align-self-center\"},[_c('div',{staticClass:\"container\"},[_c('div',{staticClass:\"row logos\"},[_c('div',{staticClass:\"col p-3 right\"},[_c('b-link',{attrs:{\"href\":\"http://www.antiquities.org.il/default_en.aspx\",\"target\":\"_blank\"}},[_c('img',{attrs:{\"src\":require(\"@/assets/images/logo_antiquity.png\"),\"alt\":\"Israel Antiquities Authority logo\"}})])],1),_c('div',{staticClass:\"col p-3\"},[_c('b-link',{attrs:{\"href\":\"https://www.uni-goettingen.de/\",\"target\":\"_blank\"}},[_c('img',{attrs:{\"src\":require(\"@/assets/images/logo_gottingen.png\"),\"alt\":\"University of Göttingen logo\"}})])],1),_c('div',{staticClass:\"col p-3\"},[_c('b-link',{attrs:{\"href\":\"https://adw-goe.de/startseite/\",\"target\":\"_blank\"}},[_c('img',{attrs:{\"src\":require(\"@/assets/images/logo_adwg.svg\"),\"alt\":\"Akademie der Wissenschaften zu Göttingen\"}})])],1)]),_c('div',{staticClass:\"row logos\"},[_c('div',{staticClass:\"col p-3 right\"},[_c('b-link',{attrs:{\"href\":\"https://english.tau.ac.il/\",\"target\":\"_blank\"}},[_c('img',{attrs:{\"src\":require(\"@/assets/images/logo_tlv.png\"),\"alt\":\"University of TLV logo\"}})])],1),_c('div',{staticClass:\"col p-3\"},[_c('b-link',{attrs:{\"href\":\"https://gepris.dfg.de/gepris/projekt/282601852?language=en\",\"target\":\"_blank\"}},[_c('img',{attrs:{\"src\":require(\"@/assets/images/logo_dfg.svg\"),\"alt\":\"DFG Project Details\"}})])],1),_c('div',{staticClass:\"col p-3\"},[_c('b-link',{attrs:{\"href\":\"https://www.haifa.ac.il/\",\"target\":\"_blank\"}},[_c('img',{attrs:{\"src\":require(\"@/assets/images/logo_haifa.png\"),\"alt\":\"University of Haifa logo\"}})])],1)]),_c('div',{staticClass:\"row footer\"},[_c('div',{staticClass:\"col p-3\"},[_vm._v(\" Built with the help of \"),_c('a',{attrs:{\"href\":\"https://www.researchsoftware.co.il\",\"target\":\"_blank\"}},[_vm._v(\"The Research Software Company\")]),_vm._v(\" at \"+_vm._s(_vm.buildTime)+\" \")])])])])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Vue, Watch } from 'vue-property-decorator';\r\nimport Login from '../navigation/Login.vue';\r\nimport Registration from '@/views/user/Registration.vue';\r\nimport SessionService from '@/services/session';\r\nimport router from '@/router';\r\n@Component({\r\n name: 'welcome',\r\n})\r\nexport default class Welcome extends Vue {\r\n private sessionService = new SessionService();\r\n public login() {\r\n this.$root.$emit('bv::show::modal', 'loginModal');\r\n }\r\n public register() {\r\n this.$root.$emit('bv::show::modal', 'registerModal');\r\n }\r\n public get userName(): string | undefined {\r\n if (this.$state.session.user) {\r\n return (\r\n this.$state.session.user.forename +\r\n ' ' +\r\n this.$state.session.user.surname\r\n );\r\n }\r\n return undefined;\r\n }\r\n\r\n private startWorking() {\r\n router.push('/home');\r\n }\r\n\r\n private logout() {\r\n this.sessionService.logout();\r\n router.push('/');\r\n location.reload();\r\n }\r\n\r\n public get buildTime(): string {\r\n const buildTime = document.documentElement.dataset.buildTime;\r\n if (!buildTime) {\r\n return 'N/A';\r\n }\r\n\r\n return buildTime.substring(0, 10);\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./welcome.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./welcome.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./welcome.vue?vue&type=template&id=e39f7304&scoped=true&\"\nimport script from \"./welcome.vue?vue&type=script&lang=ts&\"\nexport * from \"./welcome.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./welcome.vue?vue&type=style&index=0&id=e39f7304&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"e39f7304\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"container\"},[_c('div',{staticClass:\"mb-3 border-container\"},[_c('b-row',[_c('b-col',{staticClass:\"col-5 mt-4 mb-3\"},[_c('router-link',{attrs:{\"to\":{ path: (\"/editions/\" + _vm.editionId + \"/artefacts\") }}},[(_vm.currentEdition)?_c('span',{staticClass:\"name-edition\"},[_vm._v(\" \"+_vm._s(_vm.versionString(_vm.currentEdition))+\" \")]):_vm._e()])],1),_c('b-col',{staticClass:\"col-7 mt-4 mb-3\"},[(_vm.currentEdition)?_c('div',{staticClass:\"btns-permiss\"},[_c('b-button',{staticClass:\"mr-2\",on:{\"click\":_vm.openMetadata}},[_vm._v(\"Manuscript Information\")]),(_vm.isAdmin)?_c('b-button',{staticClass:\"mr-2\",on:{\"click\":_vm.openPermissionModal}},[_c('i',{staticClass:\"fa fa-lock mr-1\"}),_vm._v(\" Collaborators \")]):_vm._e(),(!_vm.currentEdition.isPublic)?_c('b-button',{attrs:{\"disabled\":\"\"}},[_c('i',{staticClass:\"fa fa-lock mr-1\"}),_vm._v(\"Publish \")]):_vm._e(),(!_vm.currentEdition.isPublic)?_c('b-button',{staticClass:\"ml-2\",on:{\"click\":_vm.deleteEdition}},[_vm._v(\"Delete Edition\")]):_vm._e()],1):_vm._e()])],1)],1),(_vm.isWaiting)?_c('div',[_c('Waiting')],1):_vm._e(),(!_vm.isWaiting)?_c('div',[_c('b-row',[_c('b-col',{staticClass:\"col-4\"},[_c('label',{staticClass:\"search-bar\",attrs:{\"for\":\"show\"}},[_vm._v(_vm._s(_vm.$t('home.show')))])])],1),_c('div',[_c('b-button-group',{staticClass:\"btns-groups\"},[_c('b-button',{attrs:{\"variant\":\"outline-primary\",\"to\":(\"/editions/\" + _vm.editionId + \"/artefacts\")}},[_vm._v(\"Artefacts \"+_vm._s(_vm.artefactsLength))]),_c('b-button',{attrs:{\"variant\":\"outline-primary\",\"to\":(\"/editions/\" + _vm.editionId + \"/imaged-objects\")}},[_vm._v(\"Imaged Objects \"+_vm._s(_vm.imagedObjectsLength))])],1)],1)],1):_vm._e(),(!_vm.isWaiting)?_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col\"},[_c('router-view')],1)]):_vm._e(),(_vm.currentEdition)?_c('permission-modal'):_vm._e(),_c('delete-edition-modal')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.currentEdition)?_c('div',[_c('div',{staticClass:\"sidebar-header\"},[_c('h5',[_vm._v(\" \"+_vm._s(_vm.versionString(_vm.currentEdition))+\" \"),(_vm.isNew)?_c('span',{staticClass:\"badge badge-success\"},[_vm._v(_vm._s(_vm.$t('misc.new')))]):_vm._e(),_c('edition-icons',{attrs:{\"edition\":_vm.currentEdition,\"show-text\":false}})],1),(_vm.canRename && !_vm.renaming)?_c('b-btn',{staticClass:\"btn btn-sm btn-rename\",on:{\"click\":function($event){return _vm.openRename()}}},[_vm._v(_vm._s(_vm.$t('misc.rename')))]):_vm._e(),(_vm.renaming)?_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newEditionName),expression:\"newEditionName\"}],staticClass:\"new-edition\",domProps:{\"value\":(_vm.newEditionName)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.newEditionName=$event.target.value}}}):_vm._e(),(_vm.renaming)?_c('b-btn',{staticClass:\"btn btn-sm btn-save\",on:{\"click\":function($event){return _vm.onRename(_vm.newEditionName)}}},[_vm._v(_vm._s(_vm.$t('misc.save')))]):_vm._e()],1),_c('b-nav',{attrs:{\"vertical\":\"\"}},[_c('b-nav-item',[_c('router-link',{class:{ bold: _vm.page === 'artefacts',artefacts: _vm.artefacts },attrs:{\"to\":(\"/editions/\" + (_vm.currentEdition.id) + \"/artefacts\"),\"replace\":\"\"}},[_vm._v(_vm._s(_vm.$t('home.artefacts'))+\": \"+_vm._s(_vm.artefacts))])],1),_c('b-nav-item',[_c('router-link',{class:{ bold: _vm.page === 'imaged-objects',imagedObjects: _vm.imagedObjects },attrs:{\"to\":(\"/editions/\" + (_vm.currentEdition.id) + \"/imaged-objects\"),\"replace\":\"\"}},[_vm._v(_vm._s(_vm.$t('home.imagedObjects'))+\": \"+_vm._s(_vm.imagedObjects))])],1),_c('b-nav-item',[_c('router-link',{staticClass:\"scroll\",class:{ bold: _vm.page === 'scroll' },attrs:{\"to\":(\"/editions/\" + (_vm.currentEdition.id) + \"/scroll-editor\"),\"replace\":\"\"}},[_vm._v(_vm._s(_vm.$t('home.scroll')))])],1),(_vm.currentEdition.otherVersions.length)?_c('b-nav-item-dropdown',{attrs:{\"text\":_vm.$t('home.versions')}},_vm._l((_vm.currentEdition.otherVersions),function(version){return _c('b-dropdown-item',{key:version.id,attrs:{\"to\":(\"/editions/\" + (version.id))}},[_vm._v(_vm._s(_vm.versionString(version)))])}),1):_vm._e(),(!_vm.currentEdition.otherVersions.length)?_c('b-nav-text',[_c('small',{staticClass:\"no-vers\"},[_vm._v(_vm._s(_vm.$t(\"home.noVersions\")))])]):_vm._e(),(_vm.user)?_c('b-btn',{directives:[{name:\"b-modal\",rawName:\"v-b-modal.modal\",value:('copyModal'),expression:\"'copyModal'\",modifiers:{\"modal\":true}}],staticClass:\"btn btn-sm btn-outline btn-copy\"},[_vm._v(_vm._s(_vm.$t('misc.copy')))]):_vm._e(),(_vm.isAdmin)?_c('b-btn',{staticClass:\"btn btn-sm btn-outline btn-permission\",on:{\"click\":function($event){return _vm.openPermissionModal()}}},[_vm._v(_vm._s(_vm.$t('misc.permission')))]):_vm._e()],1),_c('b-modal',{ref:\"copyModalRef\",attrs:{\"id\":\"copyModal\",\"title\":_vm.$t('home.copyTitle', { name: _vm.currentEdition.name, owner: _vm.currentEdition.owner.forename }),\"ok-title\":_vm.$t('misc.copy'),\"cancel-title\":_vm.$t('misc.cancel'),\"ok-disabled\":_vm.waiting || !_vm.canCopy,\"cancel-disabled\":_vm.waiting},on:{\"shown\":_vm.copyModalShown,\"ok\":_vm.copyEdition}},[_c('form',{on:{\"submit\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.copyEdition.apply(null, arguments)}}},[_c('b-form-group',{attrs:{\"label\":_vm.$t('home.newEditionName'),\"label-for\":\"newCopyName\",\"description\":_vm.$t('home.newEditionDesc')}},[_c('b-form-input',{ref:\"newCopyName\",attrs:{\"id\":\"newName\",\"type\":\"text\",\"required\":\"\",\"placeholder\":_vm.$t('home.newEditionName')},on:{\"keyup\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.copyEdition.apply(null, arguments)}},model:{value:(_vm.newCopyName),callback:function ($$v) {_vm.newCopyName=$$v},expression:\"newCopyName\"}})],1),(_vm.waiting)?_c('p',[_vm._v(\" \"+_vm._s(_vm.$t('home.copyingEdition'))+\"... \"),_c('font-awesome-icon',{attrs:{\"icon\":\"spinner\",\"spin\":\"\"}})],1):_vm._e(),(_vm.errorMessage)?_c('p',{staticClass:\"text-danger\"},[_vm._v(_vm._s(_vm.errorMessage))]):_vm._e()],1)]),_c('permission-modal')],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('b-modal',{attrs:{\"id\":\"permissionModal\",\"hide-footer\":\"\"},on:{\"shown\":_vm.shown}},[(_vm.isAdmin)?_c('div',[_c('form',[_c('b-list-group',{staticClass:\"mb-3\"},[_c('b-list-group-item',[_c('div',{staticClass:\"row\"},[_c('b-form-input',{staticClass:\"col-6\",attrs:{\"placeholder\":\"Enter user email\",\"size\":\"sm\",\"type\":\"email\"},on:{\"keydown\":function($event){_vm.errorMessage = ''}},model:{value:(_vm.invitationRow.email),callback:function ($$v) {_vm.$set(_vm.invitationRow, \"email\", $$v)},expression:\"invitationRow.email\"}}),_c('b-form-select',{staticClass:\"col-3 ml-2\",attrs:{\"size\":\"sm\",\"id\":\"inline-form-custom-select-pref\"},model:{value:(_vm.invitationRow.permission),callback:function ($$v) {_vm.$set(_vm.invitationRow, \"permission\", $$v)},expression:\"invitationRow.permission\"}},[_c('option',{attrs:{\"value\":\"read\"}},[_vm._v(\"Read\")]),_c('option',{attrs:{\"value\":\"write\"}},[_vm._v(\"Write\")]),_c('option',{attrs:{\"value\":\"admin\"}},[_vm._v(\"Admin\")])]),_c('b-button',{staticClass:\"flex-fill ml-2 btn-invite\",attrs:{\"variant\":\"primary\",\"size\":\"sm\",\"disabled\":_vm.invitationRow.email === '' || !_vm.invitationRow.permission},on:{\"click\":_vm.invite}},[_vm._v(\" \"+_vm._s(_vm.$t('misc.invite'))+\" \"),(_vm.waiting)?_c('span',[_c('font-awesome-icon',{attrs:{\"icon\":\"spinner\",\"spin\":\"\"}})],1):_vm._e()])],1),_c('div',{staticClass:\"row\"},[_c('span',{staticClass:\"col-12 text-danger\"},[_vm._v(_vm._s(_vm.errorMessage))])])])],1),_c('b-card',{staticClass:\"mb-3\",attrs:{\"no-body\":\"\",\"header\":\"Shares\"}},[_c('b-list-group',_vm._l((_vm.sharesRows),function(share){return _c('b-list-group-item',{key:share.email},[_c('div',{staticClass:\"row\"},[_c('span',{staticClass:\"col-6\"},[_vm._v(_vm._s(share.email))]),_c('b-form-select',{staticClass:\"col-4\",attrs:{\"disabled\":share.disableRow || _vm.waiting,\"size\":\"sm\",\"id\":\"inline-form-custom-select-pref\"},on:{\"change\":function($event){return _vm.setRowShareStatus(share)}},model:{value:(share.permission),callback:function ($$v) {_vm.$set(share, \"permission\", $$v)},expression:\"share.permission\"}},[_c('option',{attrs:{\"value\":\"none\"}},[_vm._v(\"None\")]),_c('option',{attrs:{\"value\":\"read\"}},[_vm._v(\"Read\")]),_c('option',{attrs:{\"value\":\"write\"}},[_vm._v(\"Write\")]),_c('option',{attrs:{\"value\":\"admin\"}},[_vm._v(\"Admin\")])]),_c('b-button',{staticClass:\"ml-2\",attrs:{\"size\":\"sm\",\"variant\":\"success\",\"disabled\":share.disableButton || share.disableRow|| _vm.waiting},on:{\"click\":function($event){return _vm.update(share)}}},[_vm._v(_vm._s(share.buttonText))])],1)])}),1)],1),_c('b-card',{attrs:{\"no-body\":\"\",\"header\":\"Invitations\"}},[_c('b-list-group',{attrs:{\"flush\":\"\",\"id\":\"invitations-list\"}},_vm._l((_vm.invitationsRows),function(invit){return _c('b-list-group-item',{key:invit.email},[_c('div',{staticClass:\"row\"},[_c('span',{staticClass:\"col-6\"},[_vm._v(_vm._s(invit.email))]),_c('b-form-select',{staticClass:\"col-4\",attrs:{\"disabled\":invit.disableRow || invit.disableButton || _vm.waiting,\"size\":\"sm\",\"id\":\"inline-form-custom-select-pref\"},on:{\"change\":function($event){return _vm.setRowInvitStatus(invit)}},model:{value:(invit.permission),callback:function ($$v) {_vm.$set(invit, \"permission\", $$v)},expression:\"invit.permission\"}},[_c('option',{attrs:{\"value\":\"none\"}},[_vm._v(\"None\")]),_c('option',{attrs:{\"value\":\"read\"}},[_vm._v(\"Read\")]),_c('option',{attrs:{\"value\":\"write\"}},[_vm._v(\"Write\")]),_c('option',{attrs:{\"value\":\"admin\"}},[_vm._v(\"Admin\")])]),_c('b-button',{staticClass:\"ml-2\",attrs:{\"size\":\"sm\",\"variant\":\"success\",\"disabled\":invit.disableButton || _vm.waiting},on:{\"click\":function($event){return _vm.update(invit)}}},[_vm._v(_vm._s(invit.buttonText))])],1)])}),1)],1)],1)]):_vm._e(),(!_vm.isAdmin)?_c('div',{staticClass:\"text-danger\"},[_vm._v(\"Ad\")]):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Vue, Watch } from 'vue-property-decorator';\r\nimport { EditionInfo, ShareInfo, SimplifiedPermission } from '@/models/edition';\r\nimport EditionService from '@/services/edition';\r\n\r\ninterface ShareRow {\r\n email: string;\r\n type: 'invitation' | 'share';\r\n oldPermission: SimplifiedPermission;\r\n permission: SimplifiedPermission;\r\n buttonText?: string;\r\n disableButton: boolean;\r\n disableRow: boolean;\r\n}\r\n@Component({\r\n name: 'permission-modal',\r\n components: {}\r\n})\r\nexport default class PermissionModal extends Vue {\r\n public invitationRow: ShareRow = { permission: 'read' } as ShareRow;\r\n public editionService: EditionService = new EditionService();\r\n\r\n // public errorService:ErrorService= new ErrorService(this)\r\n public sharesRows: ShareRow[] = [];\r\n public invitationsRows: ShareRow[] = [];\r\n private waiting = false;\r\n private errorMessage = '';\r\n\r\n public async shown() {\r\n await this.editionService.stateManager.prepare.invitations(this.current.id);\r\n\r\n this.fillShareRows(this.current!.shares);\r\n this.fillInvitationRows(this.current!.invitations);\r\n }\r\n\r\n public get current(): EditionInfo {\r\n return this.$state.editions.current!;\r\n }\r\n\r\n public get isAdmin(): boolean {\r\n return this.current.permission.isAdmin;\r\n }\r\n\r\n public async update(share: ShareRow) {\r\n let msg = '';\r\n if (share.type === 'invitation') {\r\n await this.editionService.updateInvitation(\r\n this.current!.id,\r\n share.email,\r\n share.permission\r\n );\r\n msg = 'toasts.invitationSent';\r\n } else if (share.type === 'share') {\r\n await this.editionService.updateSharePermissions(this.current!.id, share.email, share.permission);\r\n msg = 'toasts.permissionsUpdated';\r\n }\r\n\r\n this.$toasted.show(this.$tc(msg, undefined, {email: share.email}), {\r\n type: 'info',\r\n position: 'top-right',\r\n duration: 5000,\r\n });\r\n }\r\n public async invite() {\r\n try {\r\n this.waiting = true;\r\n await this.editionService.inviteEditor(\r\n this.current!.id,\r\n this.invitationRow.email,\r\n this.invitationRow.permission\r\n );\r\n } catch (e) {\r\n // this.errorMessage = this.errorService.getErrorMessage(e);\r\n this.errorMessage = 'An error occured';\r\n } finally {\r\n this.waiting = false;\r\n this.invitationRow.email = '';\r\n this.invitationRow.permission = 'read';\r\n }\r\n }\r\n\r\n public setRowShareStatus(row: ShareRow) {\r\n if (row.email === this.$state.session.user!.email) {\r\n row.disableRow = true;\r\n return;\r\n }\r\n row.disableRow = false;\r\n if (row.permission !== row.oldPermission) {\r\n row.buttonText = 'Update';\r\n row.disableButton = false;\r\n } else {\r\n row.disableButton = true;\r\n }\r\n if (row.permission === 'none') {\r\n row.buttonText = 'Revoke';\r\n }\r\n }\r\n\r\n public setRowInvitStatus(row: ShareRow) {\r\n row.disableRow = false;\r\n if (row.permission !== row.oldPermission) {\r\n row.buttonText = 'Update';\r\n } else {\r\n row.buttonText = 'Resend';\r\n }\r\n if (row.permission === 'none') {\r\n row.buttonText = 'Revoke';\r\n }\r\n }\r\n\r\n private get invitationList() {\r\n return this.current.invitations;\r\n }\r\n\r\n @Watch('invitationList')\r\n private onInvitationsChange(newInvitations: ShareInfo[]) {\r\n this.fillInvitationRows(newInvitations);\r\n }\r\n\r\n private get shareList() {\r\n return this.current.shares;\r\n }\r\n\r\n @Watch('shareList')\r\n private onSharesChange(newShares: ShareInfo[]) {\r\n this.fillShareRows(newShares);\r\n }\r\n\r\n private fillInvitationRows(invitations: ShareInfo[]) {\r\n this.invitationsRows = this.current!.invitations.map(x => ({\r\n email: x.email,\r\n oldPermission: x.simplified,\r\n permission: x.simplified,\r\n buttonText: 'Resend',\r\n type: 'invitation',\r\n disableRow: false,\r\n disableButton: false,\r\n }));\r\n\r\n for (const row of this.invitationsRows) {\r\n this.setRowInvitStatus(row);\r\n }\r\n }\r\n\r\n private fillShareRows(shares: ShareInfo[]) {\r\n this.sharesRows = this.current!.shares.map(x => ({\r\n email: x.email,\r\n oldPermission: x.simplified,\r\n permission: x.simplified,\r\n buttonText: 'Update',\r\n disableRow: false,\r\n disableButton: false,\r\n type: 'share',\r\n }));\r\n\r\n for (const row of this.sharesRows) {\r\n this.setRowShareStatus(row);\r\n }\r\n }\r\n}\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--13-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./permission-modal.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--13-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./permission-modal.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./permission-modal.vue?vue&type=template&id=0dda8193&scoped=true&\"\nimport script from \"./permission-modal.vue?vue&type=script&lang=ts&\"\nexport * from \"./permission-modal.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./permission-modal.vue?vue&type=style&index=0&id=0dda8193&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0dda8193\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Emit, Vue } from 'vue-property-decorator';\r\nimport { EditionInfo } from '@/models/edition';\r\nimport EditionService from '@/services/edition';\r\nimport { ImagedObject } from '@/models/imaged-object';\r\nimport PermissionModal from './permission-modal.vue';\r\nimport EditionIcons from '@/components/cues/edition-icons.vue';\r\n\r\n\r\n@Component({\r\n name: 'edition-ver-sidebar',\r\n components: {\r\n PermissionModal,\r\n EditionIcons\r\n }\r\n})\r\n\r\nexport default class SideBar extends Vue {\r\n\r\n @Prop() private page!: string;\r\n\r\n\r\n private editionId: number = 0;\r\n private editionService: EditionService = new EditionService() ;\r\n private newCopyName: string = '';\r\n private waiting: boolean = false;\r\n private errorMessage: string = '';\r\n private newEditionName: string = '';\r\n private renaming: boolean = false;\r\n\r\n public get currentEdition(): EditionInfo | null {\r\n return this.$state.editions.current ;\r\n }\r\n\r\n\r\n public get readOnly(): boolean {\r\n return this.currentEdition!.permission.readOnly;\r\n }\r\n\r\n public get isAdmin(): boolean {\r\n return this.currentEdition!.permission.isAdmin;\r\n }\r\n\r\n public get canRename(): boolean {\r\n return this.currentEdition!.permission.mayWrite;\r\n }\r\n\r\n public get user(): boolean {\r\n return this.$state.session.user ? true : false;\r\n }\r\n\r\n public get canCopy(): boolean {\r\n return this.newCopyName.trim().length > 0;\r\n }\r\n\r\n\r\n public get isNew(): boolean {\r\n if (this.currentEdition) {\r\n return this.currentEdition.id === this.$state.misc.newEditionId;\r\n }\r\n return false;\r\n }\r\n\r\n public get imagedObjects(): number {\r\n if (this.$state.imagedObjects.items) {\r\n return this.$state.imagedObjects.items.length;\r\n }\r\n return 0;\r\n }\r\n\r\n public get artefacts(): number {\r\n if (this.$state.imagedObjects.items) {\r\n let artLen = 0;\r\n this.$state.imagedObjects.items.forEach(\r\n (element: ImagedObject) => {\r\n artLen += element.artefacts.length;\r\n }\r\n );\r\n return artLen;\r\n }\r\n return 0;\r\n }\r\n\r\n\r\n private openPermissionModal() {\r\n this.$root.$emit('bv::show::modal', 'permissionModal');\r\n }\r\n\r\n private openRename() {\r\n this.renaming = true;\r\n this.newEditionName = this.currentEdition!.name;\r\n }\r\n\r\n private showMessage(msg: string, type: string = 'info') {\r\n this.$toasted.show(this.$tc(msg), {\r\n type,\r\n position: 'top-right',\r\n duration: 7000\r\n });\r\n }\r\n\r\n private versionString(ver: EditionInfo) {\r\n return ver.name;\r\n }\r\n\r\n private async copyEdition(evt: Event) {\r\n evt.preventDefault();\r\n\r\n if (!this.canCopy) {\r\n return; // ENTER key calls this handler even if the button is disabled\r\n }\r\n this.newCopyName = this.newCopyName.trim();\r\n\r\n this.waiting = true;\r\n this.errorMessage = '';\r\n try {\r\n const newEdition = await this.editionService.copyEdition(\r\n this.currentEdition!.id,\r\n this.newCopyName\r\n );\r\n\r\n this.$state.misc.newEditionId = newEdition.id;\r\n\r\n this.$router.push({\r\n path: `/editions/${newEdition.id}`\r\n });\r\n (this.$refs.copyModalRef as any).hide();\r\n } catch (err) {\r\n this.errorMessage = err;\r\n } finally {\r\n this.waiting = false;\r\n }\r\n }\r\n\r\n private copyModalShown() {\r\n this.newCopyName = this.currentEdition!.name;\r\n (this.$refs.newCopyName as any).focus();\r\n }\r\n\r\n private async onRename(newName: string) {\r\n if (!this.currentEdition) {\r\n throw new Error(\"Can't rename if there is no edition\");\r\n }\r\n this.renaming = true;\r\n try {\r\n await this.editionService.renameEdition(\r\n this.currentEdition!.id,\r\n newName\r\n );\r\n this.showMessage('toasts.editionSuccess', 'success');\r\n } catch (err) {\r\n this.showMessage('toasts.editionError', 'error');\r\n } finally {\r\n this.renaming = false;\r\n }\r\n }\r\n\r\n}\r\n\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--13-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./sidebar.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--13-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./sidebar.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./sidebar.vue?vue&type=template&id=0ad580d8&scoped=true&\"\nimport script from \"./sidebar.vue?vue&type=script&lang=ts&\"\nexport * from \"./sidebar.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./sidebar.vue?vue&type=style&index=0&id=0ad580d8&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0ad580d8\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.edition && _vm.metadata)?_c('b-modal',{ref:\"editionMetadataModalRef\",attrs:{\"id\":\"editionMetadataModal\",\"header-class\":\"header\",\"hide-footer\":\"\",\"title\":'Additional Information for Edition ' + _vm.edition.name,\"size\":\"lg\"}},[_c('div',{staticClass:\"background\"},[(!_vm.metadata)?_c('span',{staticClass:\"no-metadata\"},[_vm._v(\"No Additional Information\")]):_vm._e(),(_vm.metadata)?_c('ul',{staticClass:\"metadata\"},_vm._l((_vm.keys),function(key){return _c('li',{key:key,staticClass:\"row m-2\"},[_c('span',{staticClass:\"key col-2\"},[_vm._v(_vm._s(_vm.headers[key])+\":\")]),_c('span',{staticClass:\"value col\"},[_vm._v(_vm._s(_vm._f(\"cleanString\")((_vm.metadata[key] || '-'))))])])}),0):_vm._e()])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Vue } from 'vue-property-decorator';\r\nimport Waiting from '@/components/misc/Waiting.vue';\r\n@Component({\r\n name: 'edition-metadata-modal',\r\n components: {\r\n Waiting,\r\n },\r\n filters: {\r\n cleanString(value: string) {\r\n return value.replace(/\\$/g, '');\r\n },\r\n },\r\n})\r\nexport default class EditionMetadataModal extends Vue {\r\n public editionId: number = 0;\r\n\r\n public get edition() {\r\n return this.$state.editions.current!;\r\n }\r\n\r\n public keys = [\r\n 'manuscript',\r\n 'composition',\r\n 'copy',\r\n 'abbreviation',\r\n 'site',\r\n 'manuscriptType',\r\n 'compositionType',\r\n 'period',\r\n 'language',\r\n 'script',\r\n 'material',\r\n 'otherIdentifications',\r\n 'publication',\r\n ];\r\n private static _headers = {\r\n manuscript: 'Manuscript',\r\n composition: 'Composition',\r\n copy: 'Copy',\r\n abbreviation: 'Abbreviation',\r\n site: 'Site',\r\n manuscriptType: 'Manuscript Type',\r\n compositionType: 'Composition Type',\r\n period: 'Period',\r\n language: 'Language',\r\n script: 'Script',\r\n material: 'Material',\r\n otherIdentifications: 'Other Identifications',\r\n publication: 'Publication',\r\n };\r\n\r\n // Return the following as 'any' so that eslint doesn't complain about headers[key] above\r\n public get headers(): any {\r\n return EditionMetadataModal._headers;\r\n }\r\n public get metadata(): any {\r\n return this.edition.metadata;\r\n }\r\n\r\n protected async mounted() {\r\n this.editionId = parseInt(this.$route.params.editionId, 10);\r\n if (isNaN(this.editionId)) {\r\n return;\r\n }\r\n await this.$state.prepare.edition(this.editionId);\r\n }\r\n\r\n public cleanString(): any {\r\n // This is a placeholder to remove the error when calling the cleanString filter.\r\n // Without this, Typescript complains that cleanString is not defined, even though Vue\r\n // knows it should call the function defined as the filter.\r\n return 'WRONG FILTER'; // If you see this in the metadata, you know the function is called when it shouldn't.\r\n }\r\n}\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--13-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./metadata.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--13-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./metadata.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./metadata.vue?vue&type=template&id=760bf5df&scoped=true&\"\nimport script from \"./metadata.vue?vue&type=script&lang=ts&\"\nexport * from \"./metadata.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./metadata.vue?vue&type=style&index=0&id=760bf5df&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"760bf5df\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.currentEdition)?_c('b-modal',{ref:\"deleteEditionModalRef\",attrs:{\"id\":\"deleteEditionModal\",\"title\":'Delete edition: ' + _vm.currentEdition.name,\"header-class\":\"header\",\"footer-class\":\"footer\",\"size\":\"md\"},scopedSlots:_vm._u([{key:\"modal-footer\",fn:function(){return [_c('div',{staticClass:\"w-100\"},[_c('div',[_c('b-button',{staticClass:\"btn btn-primary mr-2\",attrs:{\"size\":\"sm\",\"disabled\":_vm.confirmation !== 'delete'},on:{\"click\":_vm.deleteEdition}},[_vm._v(\" Delete \")])],1)])]},proxy:true}],null,false,4096899798)},[_c('div',{staticClass:\"modal-body\"},[_c('p',[_vm._v(\"Are you sure you want to delete edition?\")]),_c('div',[_c('label',{attrs:{\"for\":\"input-confirmation\"}},[_vm._v(\"Type 'delete' to delete the edition\")]),_c('b-row',{attrs:{\"no-gutters\":\"\"}},[_c('b-form-input',{staticClass:\"col-6\",attrs:{\"size\":\"sm\",\"id\":\"input-confirmation\",\"trim\":\"\"},model:{value:(_vm.confirmation),callback:function ($$v) {_vm.confirmation=$$v},expression:\"confirmation\"}})],1)],1)])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Vue } from 'vue-property-decorator';\r\nimport Waiting from '@/components/misc/Waiting.vue';\r\nimport { boolean, re } from 'mathjs';\r\nimport EditionService from '@/services/edition';\r\nimport { DetailedUserDTO } from '@/dtos/sqe-dtos';\r\n@Component({\r\n name: 'delete-edtion-modal',\r\n components: {\r\n Waiting,\r\n },\r\n})\r\nexport default class DeleteEditionModal extends Vue {\r\n public confirmation: string = '';\r\n public deleting: boolean = false;\r\n private editionService = new EditionService();\r\n\r\n protected get currentEdition() {\r\n return this.$state.editions.current!;\r\n }\r\n\r\n protected get currentUser(): DetailedUserDTO {\r\n return this.$state.session.user!;\r\n }\r\n\r\n public async delete(adminDelete?: boolean) {\r\n this.deleting = true;\r\n try {\r\n await this.editionService.deleteEdition(\r\n this.currentEdition!.id,\r\n adminDelete\r\n );\r\n this.$state.editions.remove(this.currentEdition!.id);\r\n this.$router.push('/home');\r\n this.showMessage('toasts.editionDeleteSuccess', 'success');\r\n } catch (err) {\r\n this.showMessage('toasts.editionDeleteError', 'error');\r\n } finally {\r\n this.deleting = false;\r\n this.hide();\r\n }\r\n }\r\n\r\n public async deleteEdition() {\r\n if (!this.currentEdition) {\r\n throw new Error(\"Can't delete if there is no edition\");\r\n }\r\n const isAdmin = this.currentEdition.permission.isAdmin;\r\n\r\n const editors = this.currentEdition.shares.filter(\r\n (x) => x.email !== this.currentUser.email && x.permissions.mayWrite\r\n );\r\n\r\n if (!isAdmin) {\r\n this.delete();\r\n } else if (isAdmin && editors.length) {\r\n const confirm = window.confirm(\r\n 'Are you sure you wish to delete the edition for all users ?'\r\n );\r\n if (confirm) {\r\n this.delete(true);\r\n } else {\r\n // give first editor admin right ?\r\n await this.editionService.updateSharePermissions(\r\n this.currentEdition!.id,\r\n editors[0].email,\r\n 'admin'\r\n );\r\n // remove himself from admin\r\n await this.editionService.updateSharePermissions(\r\n this.currentEdition!.id,\r\n this.currentUser.email,\r\n 'write'\r\n );\r\n this.delete();\r\n }\r\n } else if (isAdmin && !editors.length) {\r\n this.delete(true);\r\n }\r\n }\r\n\r\n private showMessage(msg: string, type: string = 'info') {\r\n this.$toasted.show(this.$tc(msg), {\r\n type,\r\n position: 'top-right',\r\n duration: 7000,\r\n });\r\n }\r\n\r\n private hide() {\r\n (this.$refs.deleteEditionModalRef as any).hide();\r\n }\r\n}\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--13-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./delete-edition-modal.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--13-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./delete-edition-modal.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./delete-edition-modal.vue?vue&type=template&id=5deacfca&scoped=true&\"\nimport script from \"./delete-edition-modal.vue?vue&type=script&lang=ts&\"\nexport * from \"./delete-edition-modal.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5deacfca\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n// import Vue from 'vue';\r\nimport { Component, Prop, Emit, Vue } from 'vue-property-decorator';\r\n\r\nimport EditionSidebar from './components/sidebar.vue';\r\nimport { EditionInfo } from '@/models/edition.js';\r\nimport Waiting from '@/components/misc/Waiting.vue';\r\n\r\nimport { Artefact } from '@/models/artefact';\r\n\r\nimport PermissionModal from './components/permission-modal.vue';\r\nimport EditionMetadataModal from './components/metadata.vue';\r\nimport DeleteEditionModal from './components/delete-edition-modal.vue';\r\n\r\n@Component({\r\n name: 'edition',\r\n components: {\r\n EditionSidebar,\r\n Waiting,\r\n PermissionModal,\r\n 'delete-edition-modal': DeleteEditionModal,\r\n 'edition-metadata-modal': EditionMetadataModal,\r\n },\r\n})\r\nexport default class Edition extends Vue {\r\n // protected (not private) to allow future inheritance\r\n // =======================================================\r\n\r\n // protected waiting: boolean = true;\r\n\r\n public editionId: number = 0;\r\n protected page: string = '';\r\n protected isLoading: boolean = false;\r\n\r\n public get isWaiting(): boolean {\r\n return this.isLoading;\r\n }\r\n\r\n private get user(): boolean {\r\n return this.$state.session.user ? true : false;\r\n }\r\n\r\n public get currentEdition(): EditionInfo | null {\r\n return this.$state.editions.current!;\r\n }\r\n\r\n public get isAdmin(): boolean {\r\n return this.currentEdition!.permission.isAdmin;\r\n }\r\n\r\n private get copyTooltip(): string {\r\n const publicStr = this.currentEdition!.isPublic\r\n ? 'This is a public Edition. '\r\n : '';\r\n\r\n return (\r\n (this.currentEdition!.isPublic\r\n ? 'This is a public Edition. Create a copy in order to'\r\n : 'Create a copy and') + ' Edit this Edition'\r\n );\r\n }\r\n\r\n public openMetadata() {\r\n this.$root.$emit('bv::show::modal', 'editionMetadataModal');\r\n }\r\n public deleteEdition() {\r\n this.$root.$emit('bv::show::modal', 'deleteEditionModal');\r\n }\r\n public get artefactsLength(): number {\r\n const virtualCount = this.$state.artefacts.items.reduce(\r\n (count, art: Artefact) => {\r\n if (art.isVirtual) {\r\n count++;\r\n }\r\n return count;\r\n },\r\n 0\r\n );\r\n\r\n return this.$state.artefacts.items.length - virtualCount;\r\n }\r\n\r\n public get imagedObjectsLength(): number {\r\n return this.$state.imagedObjects.items.length;\r\n }\r\n\r\n // This code is not in the created method since it's asynchronous,\r\n // and Vue doesn't wait for an asynchornous created to finish\r\n // before calling mounted.\r\n // Instead of adding synchronization between created and mounted,\r\n // we just moved it to mounted.\r\n // ( same mechanism as in scroll-editor.vue )\r\n\r\n protected async mounted() {\r\n this.isLoading = true;\r\n this.editionId = parseInt(this.$route.params.editionId, 10);\r\n\r\n // Wait for editionInfo object to be valid\r\n // (in order not to get run-time undefined errors)\r\n // $state.prepare.edition is an async edition(editionId: number): Promise\r\n // returning an editionInternal(id)); }\r\n\r\n await this.$state.prepare.edition(this.editionId);\r\n\r\n // Added as in scroll-editor.vue\r\n const currentEdition = this.$state.editions.find(this.editionId);\r\n\r\n // This is done also in scroll-editor\r\n if (currentEdition) {\r\n this.$state.editions.current = currentEdition;\r\n this.$state.artefacts.current = null;\r\n this.$state.imagedObjects.current = null;\r\n }\r\n\r\n this.isLoading = false;\r\n this.getPage(window.location.href);\r\n }\r\n\r\n // Navigation Guards:\r\n // Fetching data Before Navigation to new route,\r\n // when route changes and this component is already rendered.\r\n // We're still in prev view\r\n // while resource is being fetched for the incoming view\r\n // ==========================================================\r\n\r\n protected async beforeRouteUpdate(to: any, from: any, next: () => void) {\r\n this.editionId = parseInt(to.params.editionId, 10);\r\n\r\n // Wait for editionInfo object to be valid\r\n await this.$state.prepare.edition(this.editionId);\r\n\r\n this.getPage(to.path);\r\n\r\n // call next() when fetch complete\r\n next();\r\n }\r\n\r\n // methods => member functions of the class\r\n // ============================================================\r\n\r\n public openPermissionModal() {\r\n this.$root.$emit('bv::show::modal', 'permissionModal');\r\n // event, new_value\r\n }\r\n\r\n public versionString(ver: EditionInfo): string {\r\n return ver.name;\r\n }\r\n\r\n protected getPage(url: string) {\r\n if (url.endsWith('artefacts')) {\r\n this.page = 'artefacts';\r\n } else {\r\n this.page = 'imaged-objects';\r\n }\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Edition.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Edition.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Edition.vue?vue&type=template&id=00bb93ab&scoped=true&\"\nimport script from \"./Edition.vue?vue&type=script&lang=ts&\"\nexport * from \"./Edition.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Edition.vue?vue&type=style&index=0&id=00bb93ab&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"00bb93ab\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:\"header\"},[_c('b-row',[_c('b-col',{staticClass:\"mb-3\"},[_c('search-bar',{staticClass:\"direction\",attrs:{\"params\":_vm.searchBarParams,\"value\":_vm.searchValue},on:{\"search\":function($event){return _vm.onImagedObjectsSearch($event)}}})],1)],1)],1),_c('div',{staticClass:\"scroll-bar\"},[(_vm.filteredImagedObjects.length)?_c('ul',{staticClass:\"list-unstyled row mt-2\"},_vm._l((_vm.filteredImagedObjects),function(imagedObject){return _c('li',{key:imagedObject.id,staticClass:\"col-sm-12 col-md-6 col-xl-4 list-item\"},[_c('imaged-object-card',{attrs:{\"imaged-object\":imagedObject}})],1)}),0):_vm._e()])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"card\"},[_c('router-link',{attrs:{\"to\":{ path: (\"/editions/\" + _vm.editionId + \"/imaged-objects/\" + _vm.imageObjectId) }}},[(_vm.imageUrl)?_c('img',{directives:[{name:\"lazy\",rawName:\"v-lazy\",value:(_vm.imageUrl),expression:\"imageUrl\"}],staticClass:\"card-img-top\",attrs:{\"alt\":\"Imaged-Object\"}}):_vm._e()]),_c('label',[_vm._v(_vm._s(_vm.imagedObject.name))])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Emit, Vue } from 'vue-property-decorator';\r\n\r\nimport { ImagedObject } from '@/models/imaged-object';\r\n\r\n@Component({\r\n name: 'imaged-object-card',\r\n})\r\n\r\nexport default class ImagedObjectCard extends Vue {\r\n\r\n @Prop() private imagedObject!: ImagedObject;\r\n\r\n private get imageUrl(): string | undefined {\r\n // TS 3.7 and up , optional chaining returns undefined\r\n // if any chain member is null or undefined\r\n return this.imagedObject?.recto?.master?.getThumbnailUrl(600);\r\n }\r\n\r\n private get imageObjectId(): string {\r\n // encodes characters such as ?,=,/,&,:\r\n return encodeURIComponent( this.imagedObject?.id) ;\r\n }\r\n\r\n private get editionId(): number | undefined {\r\n return this.$state?.editions?.current?.id;\r\n }\r\n\r\n}\r\n\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--13-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./imaged-object-card.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--13-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./imaged-object-card.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./imaged-object-card.vue?vue&type=template&id=60f3216f&scoped=true&\"\nimport script from \"./imaged-object-card.vue?vue&type=script&lang=ts&\"\nexport * from \"./imaged-object-card.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./imaged-object-card.vue?vue&type=style&index=0&id=60f3216f&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"60f3216f\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Emit, Vue } from 'vue-property-decorator';\r\n\r\nimport Waiting from '@/components/misc/Waiting.vue';\r\nimport ImagedObjectCard from './imaged-object-card.vue';\r\nimport { ImagedObject } from '@/models/imaged-object';\r\nimport SearchBar from '@/components/search-bar.vue';\r\nimport { SearchBarParams } from '@/components/search-bar.vue';\r\nimport { SearchBarValue } from '@/state/utilities';\r\n\r\n@Component({\r\n name: 'imaged-objects',\r\n components: {\r\n ImagedObjectCard,\r\n Waiting,\r\n SearchBar,\r\n },\r\n})\r\nexport default class ImagedObjects extends Vue {\r\n public filteredImagedObjects: ImagedObject[] = [];\r\n public searchValue: SearchBarValue = {};\r\n public searchBarParams: SearchBarParams = {\r\n filter: true,\r\n sort: false,\r\n side: false,\r\n };\r\n public get imagedObjects(): ImagedObject[] {\r\n return this.$state.imagedObjects!.items!;\r\n }\r\n\r\n protected async mounted() {\r\n this.filteredImagedObjects = this.getFilteredImagedObjects();\r\n }\r\n\r\n protected async created() {\r\n const editionId = this.$state.editions.current!.id;\r\n await this.$state.prepare.edition(editionId);\r\n // await this.$state.prepare.edition(this.$state.editions.current!.id);\r\n }\r\n\r\n public onImagedObjectsSearch(searchEvent: SearchBarValue) {\r\n this.searchValue = searchEvent;\r\n this.filteredImagedObjects = this.getFilteredImagedObjects();\r\n }\r\n\r\n public getFilteredImagedObjects(): ImagedObject[] {\r\n return this.imagedObjects\r\n .filter((img: ImagedObject) => {\r\n let filter = true;\r\n\r\n // if (\r\n // this.searchValue.view &&\r\n // this.searchValue.view !== 'recto and verso'\r\n // ) {\r\n // filter = filter && (this.searchValue.view === 'recto' && !!img.recto) || (this.searchValue.view === 'verso' && !!img.verso);\r\n // }\r\n if (\r\n this.searchValue.filter\r\n ) {\r\n filter =\r\n filter &&\r\n img.name\r\n .toLowerCase()\r\n .includes(this.searchValue.filter.toLowerCase());\r\n }\r\n\r\n return filter;\r\n })\r\n .sort((a: ImagedObject, b: ImagedObject) => {\r\n if (this.searchValue.sort) {\r\n return (a as any)[this.searchValue.sort] >\r\n (b as any)[this.searchValue.sort]\r\n ? 1\r\n : -1;\r\n } else {\r\n return 1;\r\n }\r\n });\r\n }\r\n\r\n\r\n}\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--13-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./imaged-objects.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--13-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./imaged-objects.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./imaged-objects.vue?vue&type=template&id=1b84298e&scoped=true&\"\nimport script from \"./imaged-objects.vue?vue&type=script&lang=ts&\"\nexport * from \"./imaged-objects.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./imaged-objects.vue?vue&type=style&index=0&id=1b84298e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1b84298e\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:\"header\"},[_c('b-row',[_c('b-col',{staticClass:\"mb-3\"},[_c('search-bar',{staticClass:\"direction\",attrs:{\"params\":_vm.searchBarParams,\"value\":_vm.searchValue},on:{\"search\":function($event){return _vm.onArtefactsSearch($event)}}})],1)],1)],1),_c('div',{ref:\"container\",staticClass:\"scroll-bar\"},_vm._l((_vm.sortedFragments),function(artefact){return _c('div',{key:artefact.id,staticClass:\"card\"},[_c('artefact-card',{attrs:{\"artefact\":artefact}})],1)}),0)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"b-tooltip\",rawName:\"v-b-tooltip.hover.right\",modifiers:{\"hover\":true,\"right\":true}}],ref:\"card\",attrs:{\"id\":\"card\",\"title\":\"Rename this artefact\"}},[_c('router-link',{attrs:{\"to\":{ path: (\"/editions/\" + _vm.editionId + \"/artefacts/\" + (_vm.artefact.id)) }}},[_c('span',{staticClass:\"line-name\",attrs:{\"id\":'popover-line-' + _vm.artefact.id},on:{\"contextmenu\":function($event){return _vm.openLineMenu($event, 'popover-line-' + _vm.artefact.id)}}},[(_vm.artefact && _vm.observed)?_c('artefact-image',{staticClass:\"card-img-top\",attrs:{\"artefact\":_vm.artefact,\"maxWidth\":\"150\"}}):_vm._e()],1),(_vm.artefact && !_vm.observed)?_c('img',{staticClass:\"place-holder\",attrs:{\"src\":require(\"@/assets/images/rings.svg\")}}):_vm._e(),_c('label',{staticClass:\"side-edition\"},[_vm._v(_vm._s(_vm.artefact.name)+\" - \"+_vm._s(_vm.artefact.side))]),_c('b-popover',{attrs:{\"custom-class\":\"popover-sign-body\",\"target\":'popover-line-' + _vm.artefact.id}},[_c('div',{ref:\"lineMenu\",staticClass:\"character-popover\"},[_c('b',[_vm._v(\" Rename this artefact \")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newArtefactName),expression:\"newArtefactName\"}],ref:\"newArtefactName\",attrs:{\"id\":\"newName\",\"type\":\"text\",\"required\":\"\",\"placeholder\":_vm.$t('home.newArtefactName')},domProps:{\"value\":(_vm.newArtefactName)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.newArtefactName=$event.target.value}}}),_c('div',[_c('b-button',{attrs:{\"size\":\"sm\"},on:{\"click\":function($event){return _vm.renameArtefact()}}},[_vm._v(\" Rename \")]),_c('b-button',{attrs:{\"size\":\"sm\"},on:{\"click\":function($event){return _vm.closeLineMenu()}}},[_vm._v(\"Close\")])],1)])])],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Emit, Prop, Vue } from 'vue-property-decorator';\nimport ArtefactService from '@/services/artefact';\nimport { Artefact } from '@/models/artefact';\nimport ArtefactImage from '@/components/artefact/artefact-image.vue';\n\n@Component({\n name: 'artefact-card',\n components: {\n ArtefactImage,\n }\n})\nexport default class ArtefactCard extends Vue {\n @Prop() public readonly artefact!: Artefact;\n public newArtefactName: string = '';\n public observed = false;\n private prevLineMenuId: string = '';\n private intersectionObserver?: IntersectionObserver;\n private artefactService = new ArtefactService();\n\n public mounted() {\n this.intersectionObserver = new IntersectionObserver((entries) => this.onObserved(entries), {\n root: undefined,\n rootMargin: '0px',\n threshold: 0.1,\n });\n this.intersectionObserver.observe(this.$refs.card as Element);\n this.newArtefactName = this.artefact.name;\n }\n\n public async renameArtefact() {\n this.artefact.name = this.newArtefactName;\n await this.artefactService.changeArtefact(\n this.editionId,\n this.artefact\n );\n this.$root.$emit('bv::hide::popover', this.prevLineMenuId);\n\n }\n public closeLineMenu() {\n this.$root.$emit('bv::hide::popover', this.prevLineMenuId);\n }\n\n public openLineMenu(event: MouseEvent, artefactId: any) {\n event.preventDefault();\n this.$root.$emit('bv::show::popover', artefactId);\n this.prevLineMenuId = artefactId;\n }\n\n private onObserved(entries: IntersectionObserverEntry[]) {\n if (entries.length !== 1) {\n console.warn('Intersection handler received numerous entries, 1 expected', entries);\n }\n\n const entry = entries[0];\n if (!entry.isIntersecting) {\n return;\n }\n\n // We get here whether there is an intersection, or we've received the wrong number of entries. Either way,\n // we can load the image and stop observing.\n this.observed = true;\n\n this.intersectionObserver!.disconnect();\n this.intersectionObserver = undefined;\n }\n\n public get editionId(): number {\n return parseInt(this.$route.params.editionId);\n }\n\n public destroyed() {\n if (this.intersectionObserver) {\n this.intersectionObserver.disconnect();\n this.intersectionObserver = undefined;\n }\n }\n\n}\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--13-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./artefact-card.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--13-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./artefact-card.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./artefact-card.vue?vue&type=template&id=1c20661c&scoped=true&\"\nimport script from \"./artefact-card.vue?vue&type=script&lang=ts&\"\nexport * from \"./artefact-card.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./artefact-card.vue?vue&type=style&index=0&id=1c20661c&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1c20661c\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Vue } from 'vue-property-decorator';\r\nimport Waiting from '@/components/misc/Waiting.vue';\r\nimport ArtefactCard from './artefact-card.vue';\r\nimport { Artefact } from '@/models/artefact';\r\nimport SearchBar from '@/components/search-bar.vue';\r\nimport { SearchBarParams } from '@/components/search-bar.vue';\r\nimport { SearchBarValue } from '@/state/utilities';\r\n\r\n@Component({\r\n name: 'edition-artefacts',\r\n components: {\r\n Waiting,\r\n ArtefactCard,\r\n SearchBar,\r\n },\r\n})\r\nexport default class EditionArtefacts extends Vue {\r\n public filteredArtefacts: Artefact[] = [];\r\n public searchValue: SearchBarValue = { side: 'recto and verso'};\r\n public editionId: number = 0;\r\n public searchBarParams: SearchBarParams = {\r\n filter: true,\r\n sort: false,\r\n side: true,\r\n };\r\n\r\n public get sortedFragments(): Artefact[] {\r\n return this.filteredArtefacts.sort( (a: Artefact, b: Artefact) => {\r\n return (a as any).name.localeCompare( (b as any).name, undefined,\r\n {\r\n numeric: true,\r\n sensitivity: 'base'\r\n });\r\n });\r\n }\r\n\r\n public getFilteredArtefacts(): Artefact[] {\r\n return this.$state.artefacts.items\r\n .filter((art: Artefact) => {\r\n let filter = true;\r\n\r\n if (art.isVirtual) {\r\n return false;\r\n }\r\n\r\n if (\r\n this.searchValue.side &&\r\n this.searchValue.side !== 'recto and verso'\r\n ) {\r\n filter = filter && art.side === this.searchValue.side;\r\n }\r\n if (\r\n this.searchValue.filter\r\n ) {\r\n filter =\r\n filter &&\r\n `${art.name} - ${art.side}`\r\n .toLowerCase()\r\n .includes(this.searchValue.filter.toLowerCase());\r\n }\r\n\r\n return filter;\r\n })\r\n .sort((a: Artefact, b: Artefact) => {\r\n if (this.searchValue.sort) {\r\n return (a as any)[this.searchValue.sort] >\r\n (b as any)[this.searchValue.sort]\r\n ? 1\r\n : -1;\r\n } else {\r\n return 1;\r\n }\r\n });\r\n }\r\n\r\n public onArtefactsSearch(searchEvent: SearchBarValue) {\r\n this.searchValue = searchEvent;\r\n this.filteredArtefacts = this.getFilteredArtefacts();\r\n }\r\n\r\n protected async mounted() {\r\n this.editionId = parseInt(this.$route.params.editionId, 10);\r\n await this.$state.prepare.edition(this.editionId);\r\n await this.$state.prepare.artefacts(this.editionId);\r\n this.filteredArtefacts = this.getFilteredArtefacts();\r\n }\r\n\r\n private get containerRef() {\r\n return this.$refs.container as Element;\r\n }\r\n}\r\n\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--13-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./artefacts.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--13-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./artefacts.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./artefacts.vue?vue&type=template&id=2cda6dbd&scoped=true&\"\nimport script from \"./artefacts.vue?vue&type=script&lang=ts&\"\nexport * from \"./artefacts.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./artefacts.vue?vue&type=style&index=0&id=2cda6dbd&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2cda6dbd\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.waiting)?_c('div',{staticClass:\"col\"},[_c('Waiting')],1):_vm._e(),(!_vm.waiting)?_c('div',{attrs:{\"tabindex\":\"0\"},on:{\"keydown\":_vm.onKeyDown,\"keyup\":_vm.onKeyUp,\"keypress\":_vm.onKeyPress}},[_c('div',{ref:\"editorGrid\",staticClass:\"mb-1 border-bottom\",attrs:{\"id\":\"editor-grid\"}},[_c('scroll-top-toolbar',{ref:\"topToolbar\",attrs:{\"id\":\"toolbar\"},on:{\"new-operation\":function($event){return _vm.newOperation($event)},\"zoomChangedGlobal\":function($event){return _vm.onZoomChangedGlobal($event)}},model:{value:(_vm.params.zoom),callback:function ($$v) {_vm.$set(_vm.params, \"zoom\", $$v)},expression:\"params.zoom\"}}),_c('div',{attrs:{\"id\":\"artefact-row\",\"no-gutters\":\"\"}},[_c('div',{ref:\"artefactContainer\",attrs:{\"id\":\"artefact-container\"},on:{\"scroll\":_vm.onScroll}},[_c('scroll-ruler',{attrs:{\"height\":_vm.actualHeight,\"width\":_vm.actualWidth,\"horizontalTicks\":_vm.editionWidth,\"verticalTicks\":_vm.editionHeight,\"zoom\":_vm.params.zoom,\"ppm\":_vm.edition.ppm}}),_c('scroll-area',{ref:\"scrollArea\",on:{\"onSelectArtefact\":function($event){return _vm.selectArtefact($event)},\"onSaveGroupArtefacts\":function($event){return _vm.saveGroupArtefacts()},\"new-operation\":function($event){return _vm.newOperation($event)},\"onCancelGroup\":function($event){return _vm.cancelGroup()}}})],1)]),(_vm.$refs.editorGrid)?_c('resize-bar',{attrs:{\"gridElement\":_vm.$refs.editorGrid,\"storageKey\":\"scroll-editor-left-pane-width\"}}):_vm._e(),_c('div',{ref:\"artefactSidebar\",staticClass:\"border-right\",attrs:{\"id\":\"scroll-map-container\"}},[_c('div',{ref:\"scrollMap\"},[_c('scroll-map',{on:{\"navigate-to-point\":_vm.navigateToPoint}})],1),_c('div',{staticClass:\"pt-3\",style:({ height: _vm.secondaryToolbarHeight + 'px' }),attrs:{\"id\":\"secondary-toolbar\"}},[(_vm.isTextMode)?_c('text-toolbar',{attrs:{\"d-flex\":\"\",\"m-auto\":\"\",\"p-auto\":\"\",\"adjust-content-center\":\"\",\"align-items-center\":\"\"},on:{\"text-changed\":function($event){return _vm.onTextChanged($event)}}}):_c('manuscript-toolbar',{on:{\"new-operation\":function($event){return _vm.newOperation($event)},\"save-group\":function($event){return _vm.saveGroupArtefacts()},\"cancel-group\":function($event){return _vm.cancelGroup()}}})],1)]),_c('add-artefact-modal')],1)]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"resize-bar\"},on:{\"mousedown\":function($event){return _vm.startDrag()}}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\r\nimport { Component, Prop, Vue } from 'vue-property-decorator';\r\n\r\n@Component({\r\n name: 'resizeBar',\r\n})\r\nexport default class ResizeBar extends Vue {\r\n @Prop({\r\n default: null,\r\n })\r\n protected gridElement!: HTMLDivElement;\r\n\r\n @Prop() private storageKey!: string;\r\n private isDragging = false;\r\n private leftPaneWidth!: number;\r\n public mounted() {\r\n if (this.gridElement) {\r\n const storedLeftPaneWidth = parseFloat(\r\n localStorage.getItem(this.storageKey) || '70'\r\n );\r\n this.setPanelWidths(this.gridElement, storedLeftPaneWidth);\r\n this.gridElement.onmousemove = (event) => this.onDrag(event);\r\n this.gridElement.onmouseup = () => this.endDrag();\r\n }\r\n }\r\n\r\n public startDrag() {\r\n this.isDragging = true;\r\n }\r\n\r\n public endDrag() {\r\n if (this.isDragging) {\r\n this.isDragging = false;\r\n if (this.storageKey) {\r\n localStorage.setItem(\r\n this.storageKey,\r\n this.leftPaneWidth.toString()\r\n );\r\n }\r\n }\r\n }\r\n\r\n public onDrag(event: MouseEvent) {\r\n if (!this.isDragging) {\r\n return;\r\n }\r\n const grid = this.gridElement as HTMLDivElement;\r\n this.leftPaneWidth = (event.clientX / grid.clientWidth) * 100;\r\n\r\n this.setPanelWidths(grid, this.leftPaneWidth);\r\n }\r\n\r\n public setPanelWidths(grid: HTMLDivElement, leftPanelWidth: number) {\r\n const rightPaneWidth = 100 - leftPanelWidth;\r\n if (grid) {\r\n grid.style.setProperty(\r\n 'grid-template-columns',\r\n `minmax(200px, ${leftPanelWidth}%) 5px minmax(200px, ${rightPaneWidth}%)`\r\n );\r\n }\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./resizeBar.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./resizeBar.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./resizeBar.vue?vue&type=template&id=34974d8a&\"\nimport script from \"./resizeBar.vue?vue&type=script&lang=ts&\"\nexport * from \"./resizeBar.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./resizeBar.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"hammer\",rawName:\"v-hammer:pinch\",value:(_vm.onPinch),expression:\"onPinch\",arg:\"pinch\"},{name:\"hammer\",rawName:\"v-hammer:rotate\",value:(_vm.onRotate),expression:\"onRotate\",arg:\"rotate\"}],on:{\"wheel\":function($event){return _vm.onWheel($event)}}},[_vm._t(\"default\")],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\r\n/*\r\n * This component handles zooming requests (ctrl-mousewheel and hopefully pinching in the future) properly,\r\n * by, keeping the mouse (and hopefully pinch center) in place while changing the zoom.\r\n *\r\n * Communications with the outside is done with a zoom property and a newZoom event, which should be used by\r\n * the surrounding components to change the actual zoom.\r\n *\r\n * The zoomer component should be placed right inside the div with the scrollbars. Zooming occurs on the zoomer's\r\n * parent element.\r\n */\r\nimport { Component, Prop, Vue, Emit } from 'vue-property-decorator';\r\nimport { Point } from '@/utils/helpers';\r\n\r\nexport interface ZoomEventArgs {\r\n zoom: number;\r\n}\r\n\r\nexport interface RotateEventArgs {\r\n rotate: number;\r\n}\r\n\r\n@Component({\r\n name: 'zoomer'\r\n})\r\nexport default class Zoomer extends Vue {\r\n @Prop() private zoom!: number;\r\n @Prop({ default: 0 }) private angle!: number;\r\n private degel = false;\r\n\r\n @Emit()\r\n private newZoom(zoom: number): ZoomEventArgs {\r\n return { zoom };\r\n }\r\n\r\n @Emit()\r\n private newRotate(rotate: number): RotateEventArgs {\r\n return { rotate };\r\n }\r\n private onWheel(event: WheelEvent) {\r\n if (!event.ctrlKey) {\r\n return;\r\n }\r\n event.preventDefault(); // Don't use the browser's zoom mechanism here, just ours\r\n const amount = event.deltaY < 0 ? +0.01 : -0.01; // wheel up - zoom in.\r\n\r\n // After changing the zoom, we want to change the scrollbars to that the mouse cursor stays\r\n // on the same place in the image. First we need to know the exact coordinates before the zoom\r\n // We get screen cordinates, we need to translate them to client coordinates\r\n const viewport = this.zoomTarget.getBoundingClientRect();\r\n const mousePosition: Point = {\r\n x: event.clientX - viewport.left + this.zoomTarget.scrollLeft,\r\n y: event.clientY - viewport.top + this.zoomTarget.scrollTop\r\n };\r\n\r\n this.applyZoom(amount, mousePosition);\r\n }\r\n\r\n private applyZoom(amount: number, position: Point) {\r\n const oldZoom = this.zoom;\r\n const newZoom = Math.min(Math.max(oldZoom + amount, 0.05), 1);\r\n\r\n if (this.degel) {\r\n return;\r\n }\r\n\r\n if (newZoom === oldZoom) {\r\n return;\r\n }\r\n\r\n const newPosition: Point = {\r\n x: (position.x * newZoom) / oldZoom,\r\n y: (position.y * newZoom) / oldZoom\r\n };\r\n const scrollDelta: Point = {\r\n x: newPosition.x - position.x,\r\n y: newPosition.y - position.y\r\n };\r\n\r\n this.newZoom(newZoom);\r\n\r\n this.zoomTarget.scrollLeft += scrollDelta.x;\r\n this.zoomTarget.scrollTop += scrollDelta.y;\r\n }\r\n private onPinch(event: any) {\r\n // Determine the amount based on additionalEvent: pinchin for zooming out, pinchout for zooming in\r\n const amount = event.additionalEvent === 'pinchin' ? -0.01 : 0.01;\r\n\r\n // We get the center in screen coordinates, we need to convert them to the right position\r\n const viewport = this.zoomTarget.getBoundingClientRect();\r\n const position: Point = {\r\n x: event.center.x - viewport.left + this.zoomTarget.scrollLeft,\r\n y: event.center.y - viewport.top + this.zoomTarget.scrollTop\r\n };\r\n\r\n this.applyZoom(amount, position);\r\n }\r\n\r\n private get zoomTarget(): Element {\r\n return this.$el.parentElement!;\r\n }\r\n\r\n private onRotate(event: any) {\r\n const angleCalc = event.angle;\r\n this.newRotate(angleCalc);\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./zoomer.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./zoomer.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./zoomer.vue?vue&type=template&id=1359d18a&scoped=true&\"\nimport script from \"./zoomer.vue?vue&type=script&lang=ts&\"\nexport * from \"./zoomer.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1359d18a\",\n null\n \n)\n\nexport default component.exports","import { ImageSetting } from '@/components/image-settings/types';\r\nimport { BaseEditorParams } from '@/models/editor-params';\r\n\r\n// export type ScrollEditorMode = '' | 'move'| 'scale' |'rotate' | 'manageGroup';\r\nexport type ScrollEditorOpMode =\r\n | ''\r\n | 'mirror'\r\n | 'move'\r\n | 'scale'\r\n | 'rotate'\r\n | 'manageGroup'\r\n | 'multipleSelect';\r\nexport type ArtefactEditorMode = 'artefact' | 'text-fragment';\r\nexport class ArtefactEditorParams implements BaseEditorParams {\r\n public imageSettings = {} as ImageSetting;\r\n public zoom: number = 0.15; // Zoom between 0 and 1\r\n public rotationAngle = 0;\r\n public fontSize: number;\r\n\r\n constructor() {\r\n this.fontSize = parseInt((localStorage.getItem('font-size') || '12'), 10);\r\n }\r\n\r\n}\r\n\r\nexport class ScrollEditorParams extends ArtefactEditorParams {\r\n public mode: ScrollEditorOpMode = '';\r\n public move = 5;\r\n public scale = 5;\r\n public rotate = 45;\r\n public zoom: number = 0.1;\r\n}\r\n\r\nexport interface ArtefactEditorParamsChangedArgs {\r\n property: string;\r\n value: any;\r\n params: ArtefactEditorParams | ScrollEditorParams;\r\n}\r\n","import { Artefact } from '@/models/artefact';\r\nimport { ArtefactGroup } from '@/models/edition';\r\nimport { SignInterpretation } from '@/models/text';\r\nimport { StateManager } from '@/state';\r\nimport { BoundingBox, Point } from '@/utils/helpers';\r\nimport { ScrollEditorParams } from '@/views/artefact-editor/types';\r\nimport { faGrinTongueSquint } from '@fortawesome/free-solid-svg-icons';\r\n\r\n\r\nfunction state() {\r\n return StateManager.instance;\r\n}\r\n\r\nexport type ScrollEditorMode = 'text' | 'material';\r\nexport class ScrollEditorState {\r\n private _selectedArtefact: Artefact | null = null;\r\n private _selectedGroup: ArtefactGroup | null = null;\r\n public viewport: BoundingBox | null = null; // The viewport in edition coordinates\r\n public params: ScrollEditorParams| null = null;\r\n public pointerPosition: Point;\r\n public displayRois: boolean;\r\n public displayReconstructedText: boolean;\r\n public displayText: boolean;\r\n private _mode: ScrollEditorMode;\r\n\r\n public showEditReconTextBar: boolean = false;\r\n\r\n public constructor() {\r\n this.params = new ScrollEditorParams();\r\n this.pointerPosition = {x: 0, y: 0};\r\n this.displayRois = false;\r\n this.displayReconstructedText = false;\r\n this.displayText = false;\r\n this._mode = 'material';\r\n\r\n this.showEditReconTextBar = false;\r\n }\r\n\r\n public get selectedArtefact() {\r\n return this._selectedArtefact;\r\n }\r\n\r\n public get selectedGroup() {\r\n return this._selectedGroup;\r\n }\r\n\r\n // Returns all selected artefacts - either as part of a group or not\r\n public get selectedArtefacts(): Artefact[] {\r\n let artefactIds: number[] = [];\r\n if (this.selectedGroup) {\r\n artefactIds = this.selectedGroup.artefactIds;\r\n } else if (this.selectedArtefact) {\r\n artefactIds = [this.selectedArtefact.id];\r\n }\r\n\r\n const artefacts: Artefact[] = [];\r\n for (const id of artefactIds) {\r\n const artefact = state().artefacts.find(id);\r\n if (artefact) {\r\n artefacts.push(artefact);\r\n }\r\n }\r\n return artefacts;\r\n }\r\n\r\n public selectArtefact(artefact: Artefact) {\r\n this._selectedArtefact = artefact;\r\n this._selectedGroup = null;\r\n }\r\n\r\n public selectGroup(artefactGroup: ArtefactGroup | undefined) {\r\n if (artefactGroup) {\r\n this._selectedGroup = artefactGroup.clone();\r\n } else {\r\n this._selectedGroup = null;\r\n }\r\n this._selectedArtefact = null;\r\n }\r\n\r\n public get mode() {\r\n return this._mode;\r\n }\r\n\r\n public set mode(val: ScrollEditorMode) {\r\n if (val === this._mode) {\r\n return;\r\n }\r\n\r\n // Undo all selections when switching modes\r\n this._selectedArtefact = null;\r\n this._selectedGroup = null;\r\n state().textFragmentEditor.selectedSignInterpretations = [];\r\n\r\n if (val === 'text') {\r\n this.displayReconstructedText = this.displayText = true;\r\n this.displayRois = false;\r\n }\r\n\r\n this._mode = val;\r\n }\r\n}\r\n","// This file contains handy utilities for managing operations.\n// It handles undo/redo, as well as dirty tracking and auto-saving.\n//\n// Since it is generic, specifics are provided by by implementation of the operations classes, as well as\n// the save helper interface\n\nexport abstract class Operation, K = number> {\n // True if the operation has been undone, false otherwise\n public get undone() {\n return this._undone;\n }\n\n public needsSaving = true; // True when the outcome of this operation needs saving\n protected _undone = false;\n\n // Unite with a previous operation - returns undefined if the operations can't be united\n public abstract uniteWith(prev: T): T | undefined;\n\n public undo(): void {\n if (this._undone) {\n // Don't undo twice without redoing\n console.warn('Operation has already been undone');\n return;\n }\n this.internalUndo();\n this._undone = true;\n this.needsSaving = !this.needsSaving;\n }\n\n public redo(initial = false): void {\n // Some operations are responsible for updating the state. Those operations' redo method is called right after they are created.\n // When you do so, pass initial=true, so that the check whether the operation is being redone without being undone is bypassed.\n\n if (!initial && !this.undone) {\n console.warn('Operation has already been redone');\n return;\n }\n\n this.internalRedo();\n if (initial) {\n this.needsSaving = true;\n } else {\n this.needsSaving = !this.needsSaving;\n }\n this._undone = false;\n }\n\n public abstract getId(): K; // Gets the ID of the affected entity\n public abstract replaceEntityId(newId: K): void; // Update the id of the entity\n\n protected abstract internalUndo(): void; // Actually undo the operation\n protected abstract internalRedo(): void; // Actually redo the operation\n}\n\n// Pass this interface to components that implement the undo/redo/save buttons, so they can\n// disable the buttons without being exposed to the entire UndoRedoManager interface\nexport interface OperationsManagerBase {\n canUndo: boolean;\n canRedo: boolean;\n saveMessage: string;\n\n undo(): void;\n redo(): void;\n}\n\nexport interface SavingAgent, K = number> {\n saveEntities(ids: OP[]): Promise; // Saves elements, returns false if saving failed, true if succeeded\n}\n\nexport class OperationsManager, K = number> implements OperationsManagerBase {\n private undoStack: OP[][] = [];\n private redoStack: OP[][] = [];\n private dirty: Set = new Set();\n private _isDirty: boolean = false;\n private saveInProgress: boolean = false;\n private autoSaveTimer?: number;\n\n // Set autoSaveInterval to 0 to disable autoSave\n constructor(private savingAgent: SavingAgent, public autoSaveInterval = 3000) { }\n\n // Add operation to the undo stack, uniting operations if applicable\n public addOperation(op: OP) {\n this.redoStack = [];\n // Check if two operations can be united. Two operations can be united if:\n // 1. They are of the same type.\n // 2. op1.uniteWith(op2) returns an operation\n // 3. The dirty flag is set. If the dirty flag is clear, we must have a new operation, otherwise\n // undoing can cause issues with saving.\n if (this.undoStack.length > 0 && this.dirty.size) {\n const lastIndex = this.undoStack.length - 1;\n const lastOps = this.undoStack[lastIndex];\n if (lastOps.length === 1) {\n const lastOp = lastOps[0];\n\n if (typeof op === typeof lastOp) {\n const united = op.uniteWith(lastOp);\n if (united) {\n this.undoStack[lastIndex] = [united];\n this.setDirty(united, lastOp);\n return;\n }\n }\n }\n }\n\n this.setDirty(op);\n this.undoStack.push([op]);\n }\n\n public addBulkOperations(ops: OP[]) {\n this.redoStack = [];\n for (const op of ops) {\n this.setDirty(op);\n }\n this.undoStack.push(ops);\n }\n\n public get canUndo(): boolean {\n return this.undoStack.length !== 0;\n }\n\n public get canRedo(): boolean {\n return this.redoStack.length !== 0;\n }\n\n public get isDirty(): boolean {\n // We do not use `this.dirty.size > 0` since Vue does not bind property to set sizes, and does not\n // refresh when the dirty flag changes\n return this._isDirty;\n }\n\n public get isSaving(): boolean {\n return this.saveInProgress;\n }\n\n public get saveMessage(): string {\n if (this.isSaving) {\n return 'Saving...';\n }\n\n if (this.isDirty) {\n return 'Save pending';\n }\n\n return 'No changes';\n }\n\n public undo() {\n const ops = this.undoStack.pop();\n if (!ops || !ops.length) {\n console.warn('UndoRedoManager.undo called with an empty undo stack');\n return;\n }\n\n for (const op of ops) {\n op.undo();\n this.setDirty(op);\n }\n this.redoStack.push(ops);\n }\n\n public redo() {\n const ops = this.redoStack.pop();\n if (!ops || !ops.length) {\n console.warn('UndoRedoManager.redo called with an empty redo stack');\n return;\n }\n\n for (const op of ops) {\n op.redo();\n this.setDirty(op);\n }\n this.undoStack.push(ops);\n }\n\n public async save() {\n // Saving is an asynchronous operation that can take a while. We need to take precautions so\n // that saving does not run twice concurrently\n if (this.isSaving) {\n console.error('Saving already in progress');\n throw new Error('Saving already in progress');\n }\n\n // Now we're saving. Store the dirty set so we remark as dirty of saving fails\n const preSaveDirty = Array.from(this.dirty).filter(op => op.needsSaving);\n this.dirty.clear();\n this._isDirty = false;\n let saveOk = false;\n try {\n saveOk = await this.savingAgent.saveEntities(preSaveDirty);\n } catch (error) {\n console.error('Saving throw an exception: ', error);\n saveOk = false;\n }\n\n if (!saveOk) {\n // Saving failed, add all dirty elements back\n for (const op of preSaveDirty) {\n this.dirty.add(op);\n this._isDirty = true;\n }\n console.warn('Saving failed');\n } else {\n for (const ops of this.undoStack) {\n for (const op of ops) {\n op.needsSaving = false;\n }\n }\n\n for (const ops of this.redoStack) {\n for (const op of ops) {\n op.needsSaving = false;\n }\n }\n }\n }\n\n public updateStackIds(oldId: K, newId: K) {\n // Fix the ids in the undo-stack\n for (const ops of this.undoStack) {\n for (const op of ops) {\n if (op.getId() === oldId) {\n op.replaceEntityId(newId);\n }\n }\n }\n\n // The redo-stack\n for (const ops of this.redoStack) {\n for (const op of ops) {\n if (op.getId() === oldId) {\n op.replaceEntityId(newId);\n }\n }\n }\n\n // Don't go over the dirty set, as it contains objects that are in the undo or redo stacks\n }\n\n private setDirty(op: OP, oldOp?: OP) {\n if (oldOp) {\n this.dirty.delete(oldOp);\n }\n\n this.dirty.add(op);\n this._isDirty = true;\n\n if (this.autoSaveInterval) {\n if (this.autoSaveTimer) {\n window.clearTimeout(this.autoSaveTimer);\n }\n this.autoSaveTimer = window.setTimeout(() => this.save(), this.autoSaveInterval);\n }\n }\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('b-modal',{ref:\"addArtefactModalRef\",attrs:{\"scrollable\":\"\",\"id\":\"addArtefactModal\",\"footer-class\":\"footer\",\"header-class\":\"header\",\"title\":'Choose Artefacts'},on:{\"shown\":_vm.scrollModalShown},scopedSlots:_vm._u([{key:\"modal-footer\",fn:function(){return [_c('div',{staticClass:\"w-100\"},[_c('div',{staticStyle:{\"display\":\"flex\",\"flex-direction\":\"row\",\"justify-content\":\"space-between\"}},[_c('div',[_c('b-button',{staticClass:\"btn btn-primary mr-2\",attrs:{\"size\":\"sm\"},on:{\"click\":function($event){return _vm.checkedAllSide('recto')}}},[_vm._v(\" Recto \")]),_c('b-button',{staticClass:\"btn btn-primary\",attrs:{\"size\":\"sm\"},on:{\"click\":function($event){return _vm.checkedAllSide('verso')}}},[_vm._v(\" Verso \")])],1),_c('div',[_c('b-button',{staticClass:\"btn btn-primary mr-2\",attrs:{\"size\":\"sm\",\"disabled\":!_vm.chekedArtefacts.length},on:{\"click\":function($event){return _vm.closeModal()}}},[_vm._v(\" Add \")]),_c('b-button',{staticClass:\"btn btn-primary\",attrs:{\"size\":\"sm\"},on:{\"click\":function($event){return _vm.uncheckAll()}}},[_vm._v(\" Clear \")])],1)])])]},proxy:true}])},[_c('div',{staticClass:\"row modal-body\"},[_c('div',{staticClass:\"col-6\"},[_c('div',[_c('b-form-group',[_c('b-form-input',{attrs:{\"id\":\"searchValue\",\"size\":\"sm\",\"placeholder\":\"Search...\"},model:{value:(_vm.searchValue),callback:function ($$v) {_vm.searchValue=$$v},expression:\"searchValue\"}})],1)],1),_c('div',[_c('b-form-checkbox-group',{attrs:{\"id\":\"cheked-artefact\",\"name\":\"cheked-artefacts\"},model:{value:(_vm.chekedArtefacts),callback:function ($$v) {_vm.chekedArtefacts=$$v},expression:\"chekedArtefacts\"}},_vm._l((_vm.filteredArtefacts),function(art){return _c('div',{key:art.id,class:{\n selected: _vm.isSelectedArtefact(art.id),\n },on:{\"click\":function($event){return _vm.selectArtefact(art.id)}}},[_c('b-form-checkbox',{attrs:{\"type\":\"checkbox\",\"value\":art.id}},[_c('span',[_vm._v(_vm._s(art.name)+\" - \"+_vm._s(art.side))])])],1)}),0)],1)]),_c('div',{staticClass:\"col-6\"},[(_vm.isLoaded)?_c('div',[_c('artefact-image',{attrs:{\"artefact\":_vm.artefact}})],1):_vm._e()])])])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Vue } from 'vue-property-decorator';\r\nimport ArtefactImage from '@/components/artefact/artefact-image.vue';\r\nimport { Artefact } from '@/models/artefact';\r\nimport { Side } from '@/models/misc';\r\n\r\n@Component({\r\n name: 'add-artefact-modal',\r\n components: {\r\n 'artefact-image': ArtefactImage,\r\n },\r\n})\r\nexport default class AddArtefactModal extends Vue {\r\n private artefact: Artefact | undefined = {} as Artefact;\r\n public chekedArtefacts: number[] = [];\r\n public searchValue: string = '';\r\n private isLoaded = false;\r\n\r\n private async scrollModalShown() {\r\n this.isLoaded = false;\r\n await this.$state.prepare.artefacts(this.$state.editions.current!.id);\r\n }\r\n\r\n private checkedAllSide(side: Side) {\r\n this.chekedArtefacts = this.nonPlacedArtefacts\r\n .filter(\r\n (x: Artefact) =>\r\n x.name\r\n .toLowerCase()\r\n .includes(this.searchValue.toLowerCase()) &&\r\n x.side === side\r\n )\r\n .map((x) => x.id);\r\n }\r\n\r\n private get artefacts() {\r\n return this.$state.artefacts.items || [];\r\n }\r\n\r\n private get nonPlacedArtefacts() {\r\n return this.artefacts.filter((x) => !x.isPlaced);\r\n }\r\n\r\n public get filteredArtefacts() {\r\n this.chekedArtefacts = [];\r\n return this.nonPlacedArtefacts.filter(\r\n (x: Artefact) =>\r\n x.name.toLowerCase().includes(this.searchValue.toLowerCase()) &&\r\n x.side === x.side\r\n );\r\n }\r\n\r\n public isSelectedArtefact(artId: number): boolean {\r\n return this.artefact!.id === artId;\r\n }\r\n\r\n private selectArtefact(id: number) {\r\n this.isLoaded = false;\r\n\r\n setTimeout(() => {\r\n this.artefact = this.artefacts.find((a) => a.id === id);\r\n this.isLoaded = true;\r\n }, 0);\r\n }\r\n\r\n private closeModal() {\r\n (this.$refs.addArtefactModalRef as any).hide(this.chekedArtefacts);\r\n this.uncheckAll();\r\n }\r\n\r\n private uncheckAll() {\r\n this.searchValue = '';\r\n this.chekedArtefacts = [];\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./add-artefact-modal.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./add-artefact-modal.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./add-artefact-modal.vue?vue&type=template&id=d03bcbf6&scoped=true&\"\nimport script from \"./add-artefact-modal.vue?vue&type=script&lang=ts&\"\nexport * from \"./add-artefact-modal.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./add-artefact-modal.vue?vue&type=style&index=0&id=d03bcbf6&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"d03bcbf6\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('b-row',{staticClass:\"row\",class:{ 'mt-2': !_vm.float }},[(_vm.float)?_c('b-col',{staticClass:\"col-10\"},[_c('section',[_c('b-card',{attrs:{\"no-body\":\"\"}},[_c('b-card-header',{staticClass:\"p-1\",attrs:{\"header-tag\":\"header\",\"role\":\"tab\"}},[_c('b-button-group',{staticClass:\"m-1\",attrs:{\"size\":\"sm\"}},[_c('b-button',{staticClass:\"btn-move\",attrs:{\"pill\":_vm.float,\"disabled\":!(\n _vm.selectedArtefacts &&\n _vm.selectedArtefacts.length\n ),\"pressed\":_vm.mode === 'move'},on:{\"click\":function($event){return _vm.setMode('move')}}},[(!_vm.float)?_c('span',[_c('u',[_vm._v(\"M\")]),_vm._v(\"ove \")]):_vm._e(),(_vm.float)?_c('font-awesome-icon',{attrs:{\"icon\":\"arrows-alt\",\"size\":\"xs\"}}):_vm._e()],1),_c('b-button',{staticClass:\"btn-scale\",attrs:{\"pill\":_vm.float,\"disabled\":!(\n _vm.selectedArtefacts &&\n _vm.selectedArtefacts.length\n ),\"pressed\":_vm.mode === 'scale'},on:{\"click\":function($event){return _vm.setMode('scale')}}},[(!_vm.float)?_c('span',[_c('u',[_vm._v(\"S\")]),_vm._v(\"cale \")]):_vm._e(),(_vm.float)?_c('font-awesome-icon',{attrs:{\"icon\":\"search\",\"size\":\"xs\"}}):_vm._e()],1),_c('b-button',{staticClass:\"btn-rotate\",attrs:{\"pill\":_vm.float,\"disabled\":!(\n _vm.selectedArtefacts &&\n _vm.selectedArtefacts.length\n ),\"pressed\":_vm.mode === 'rotate'},on:{\"click\":function($event){return _vm.setMode('rotate')}}},[(!_vm.float)?_c('span',[_c('u',[_vm._v(\"R\")]),_vm._v(\"otate \")]):_vm._e(),(_vm.float)?_c('font-awesome-icon',{attrs:{\"icon\":\"sync\",\"size\":\"xs\"}}):_vm._e()],1),_c('b-button',{attrs:{\"pill\":_vm.float},on:{\"click\":function($event){return _vm.statusMirror()}}},[_vm._v(\" mirror \")])],1)],1),_c('b-collapse',{staticStyle:{\"display\":\"block\"},attrs:{\"id\":\"accordion-actions\",\"accordion\":\"my-accordion-side-actions\",\"role\":\"tabpanel\"}},[_c('b-card-body',{staticClass:\"card-body-cancel\"},[_c('section',{staticClass:\"center-btn\"},[(_vm.mode === 'move')?_c('b-row',{attrs:{\"no-gutters\":\"\",\"align-v\":\"end\"}},[_c('div',[_c('table',[_c('tr',[_c('td'),_c('td',[_c('b-button',{class:[\n _vm.float\n ? 'btn-xs'\n : 'btn-xs',\n 'mt-1' ],attrs:{\"size\":\"sm\",\"disabled\":!(\n _vm.selectedArtefacts &&\n _vm.selectedArtefacts.length\n )},on:{\"click\":function($event){return _vm.dragArtefact(0, -1)}}},[_c('i',{staticClass:\"fa fa-arrow-up\"})])],1),_c('td')]),_c('tr',[_c('td',[_c('b-button',{class:[\n _vm.float\n ? 'btn-xs'\n : 'btn-xs',\n ' ml-2 mb-2' ],attrs:{\"size\":\"sm\",\"disabled\":!(\n _vm.selectedArtefacts &&\n _vm.selectedArtefacts.length\n )},on:{\"click\":function($event){return _vm.dragArtefact(-1, 0)}}},[_c('i',{staticClass:\"fa fa-arrow-left\"})])],1),_c('td',[_c('b-button',{class:[\n _vm.float\n ? 'btn-xs'\n : 'btn-xs',\n 'mb-2' ],attrs:{\"size\":\"sm\",\"disabled\":!(\n _vm.selectedArtefacts &&\n _vm.selectedArtefacts.length\n )},on:{\"click\":function($event){return _vm.dragArtefact(0, 1)}}},[_c('i',{staticClass:\"fa fa-arrow-down\"})])],1),_c('td',[_c('b-button',{class:[\n _vm.float\n ? 'btn-xs'\n : 'btn-xs',\n 'mb-2' ],attrs:{\"size\":\"sm\",\"disabled\":!(\n _vm.selectedArtefacts &&\n _vm.selectedArtefacts.length\n )},on:{\"click\":function($event){return _vm.dragArtefact(1, 0)}}},[_c('i',{staticClass:\"fa fa-arrow-right\"})])],1)])])]),_c('b-col',{staticClass:\"m-1\",attrs:{\"cols\":\"4\"}},[_c('b-form-input',{attrs:{\"id\":\"input-small\",\"size\":\"sm\",\"type\":\"number\"},model:{value:(_vm.params.move),callback:function ($$v) {_vm.$set(_vm.params, \"move\", $$v)},expression:\"params.move\"}})],1),_vm._v(\"mm \")],1):_vm._e(),(_vm.mode === 'scale')?_c('b-row',{attrs:{\"no-gutters\":\"\",\"align-v\":\"end\"}},[_c('b-button-group',[_c('b-button',{class:[\n _vm.float ? 'btn-xs' : 'btn-xs',\n 'ml-1 mb-2' ],attrs:{\"size\":\"sm\"},on:{\"click\":function($event){return _vm.zoomArtefact(1)}}},[_c('i',{staticClass:\"fa fa-plus\"})]),_c('b-button',{class:[\n _vm.float ? 'btn-xs' : 'btn-xs',\n 'ml-1 mb-2' ],attrs:{\"size\":\"sm\"},on:{\"click\":function($event){return _vm.zoomArtefact(-1)}}},[_c('i',{staticClass:\"fa fa-minus\"})]),_c('b-button',{class:[\n _vm.float ? 'btn-xs' : 'btn-xs',\n 'ml-1 mb-2' ],attrs:{\"size\":\"sm\"},on:{\"click\":function($event){return _vm.resetZoom()}}},[_vm._v(\"reset\")])],1),_c('b-col',{staticClass:\"mb-1 mt-3 ml-1\",attrs:{\"cols\":\"4\"}},[_c('b-form-input',{attrs:{\"id\":\"input-small\",\"size\":\"sm\",\"type\":\"number\"},model:{value:(_vm.params.scale),callback:function ($$v) {_vm.$set(_vm.params, \"scale\", $$v)},expression:\"params.scale\"}})],1),_vm._v(\"% \")],1):_vm._e(),(_vm.mode === 'rotate')?_c('b-row',{attrs:{\"no-gutters\":\"\",\"align-v\":\"end\"}},[_c('b-button-group',[_c('b-button',{class:[\n _vm.float ? 'btn-xs' : 'btn-xs',\n 'ml-2 mb-2' ],attrs:{\"size\":\"sm\"},on:{\"click\":function($event){return _vm.rotateGroupArtefact(-1)}}},[_c('font-awesome-icon',{attrs:{\"icon\":\"undo\"}})],1),_c('b-button',{class:[\n _vm.float ? 'btn-xs' : 'btn-xs',\n 'ml-2 mb-2' ],attrs:{\"size\":\"sm\"},on:{\"click\":function($event){return _vm.rotateGroupArtefact(1)}}},[_c('font-awesome-icon',{attrs:{\"icon\":\"redo\"}})],1)],1),_c('b-col',{staticClass:\"mb-1 mt-3 ml-2 mr-1\",attrs:{\"cols\":\"4\"}},[_c('b-form-input',{attrs:{\"id\":\"input-small\",\"size\":\"sm\",\"type\":\"number\"},model:{value:(_vm.params.rotate),callback:function ($$v) {_vm.$set(_vm.params, \"rotate\", $$v)},expression:\"params.rotate\"}})],1),_vm._v(\"degree \")],1):_vm._e()],1)])],1)],1)],1)]):_vm._e(),_c('b-col',{staticClass:\"col-11\"},[(!_vm.float)?_c('section',{staticClass:\"center-btn ml-4\",staticStyle:{\"border\":\"1px solid #dee2e6\"}},[_c('b-row',{staticClass:\"row ml-2\"},[_c('b-button-group',{staticClass:\"ml-4\"},[_c('b-button',{staticClass:\"m-1\",attrs:{\"size\":\"sm\",\"pill\":_vm.float,\"pressed\":_vm.mode === 'manageGroup',\"disabled\":!(\n _vm.selectedArtefacts &&\n _vm.selectedArtefacts.length\n )},on:{\"click\":function($event){return _vm.setMode('manageGroup')}}},[_c('span',[_vm._v(\"Manage group\")])])],1),_c('b-collapse',{staticClass:\"ml-0 mr-4\",staticStyle:{\"display\":\"block\"},attrs:{\"id\":\"accordion-actions-group\",\"accordion\":\"my-accordion-side-actions\",\"role\":\"tabpanel\"}},[_c('b-row',{attrs:{\"no-gutters\":\"\"}},[_c('b-button-group',[(!_vm.float)?_c('b-button',{staticClass:\"m-1\",attrs:{\"disabled\":_vm.params.mode !== 'manageGroup',\"size\":\"sm\"},on:{\"click\":function($event){return _vm.saveGroup()}}},[_vm._v(\"save Group\")]):_vm._e(),(!_vm.float)?_c('b-button',{staticClass:\"m-1\",attrs:{\"size\":\"sm\",\"disabled\":_vm.params.mode !== 'manageGroup'},on:{\"click\":function($event){return _vm.cancelGroup()}}},[_vm._v(\"cancel\")]):_vm._e()],1)],1)],1)],1)],1):_vm._e()]),_c('b-col',{staticClass:\"ml-5 pl-5 center-btn\"},[(!_vm.float)?_c('section',{staticClass:\"mt-1\"},[_c('b-button-group',{class:[_vm.float ? 'btn-menu' : '', 'mb-1'],attrs:{\"size\":\"sm\"}},[_c('b-button',{staticClass:\"mr-2\",attrs:{\"disabled\":!(_vm.selectedArtefacts && _vm.selectedArtefacts.length)},on:{\"click\":function($event){return _vm.setZIndex(1)}}},[_c('span',[_vm._v(\"top\")])]),_c('b-button',{attrs:{\"disabled\":!(_vm.selectedArtefacts && _vm.selectedArtefacts.length)},on:{\"click\":function($event){return _vm.setZIndex(-1)}}},[_c('span',[_vm._v(\"down\")])])],1)],1):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { Operation } from '@/utils/operations-manager';\nimport { Artefact } from '@/models/artefact';\nimport { Placement } from '@/utils/Placement';\nimport { StateManager } from '@/state';\nimport { ArtefactGroup, EditionInfo } from '@/models/edition';\nimport { UpdateEditionManuscriptMetricsDTO } from '@/dtos/sqe-dtos';\n\nfunction state() {\n return StateManager.instance;\n}\n\nexport type ScrollEditorOperationCategory = 'artefact' | 'group' | 'edit-group' | 'edition-metrics';\n\nexport abstract class ScrollEditorOperation extends Operation {\n public constructor(public category: ScrollEditorOperationCategory) {\n super();\n }\n\n public abstract uniteWith(op: ScrollEditorOperation): ScrollEditorOperation | undefined;\n public abstract getId(): number;\n public abstract replaceEntityId(newId: number): void;\n}\n\nexport type ArtefactPlacementOperationType = 'translate' | 'scale' | 'rotate' | 'add' | 'delete' | 'z-index' | 'mirror';\nexport class ArtefactPlacementOperation extends ScrollEditorOperation {\n public prev: Placement;\n public next: Placement;\n public isPlacedPrev: boolean;\n public isPlacedNext: boolean;\n\n public constructor(\n public artefactId: number,\n public type: ArtefactPlacementOperationType,\n prev: Placement,\n next: Placement,\n isPlacedPrev: boolean,\n isPlacedNext: boolean\n\n ) {\n super('artefact');\n this.prev = prev.clone();\n this.next = next.clone();\n this.isPlacedPrev = isPlacedPrev;\n this.isPlacedNext = isPlacedNext;\n }\n\n public uniteWith(sop: ScrollEditorOperation): ArtefactPlacementOperation | undefined {\n if (!(sop instanceof ArtefactPlacementOperation)) {\n return undefined;\n }\n const op = sop as ArtefactPlacementOperation;\n\n // Unite operations of the same type\n if (op.type !== 'translate' && op.type !== 'rotate' && op.type !== 'scale') {\n return undefined;\n }\n\n if (op.artefactId !== this.artefactId || op.type !== this.type) {\n return undefined;\n }\n\n // Operations are of the same type on the same artefact, we can unite them\n return new ArtefactPlacementOperation(\n this.artefactId,\n this.type,\n (op as ArtefactPlacementOperation).prev,\n this.next,\n (op as ArtefactPlacementOperation).isPlacedPrev,\n this.isPlacedNext);\n }\n\n public getId(): number {\n return this.artefactId;\n }\n\n public replaceEntityId(newId: number) {\n this.artefactId = newId;\n }\n\n protected internalUndo(): void {\n this.artefact.placement = this.prev.clone();\n this.artefact.isPlaced = this.isPlacedPrev;\n if (this.artefact.isPlaced) {\n state().eventBus.emit('select-artefact', this.artefact);\n } else {\n state().eventBus.emit('select-artefact', undefined);\n }\n }\n\n protected internalRedo(): void {\n this.artefact.placement = this.next.clone();\n this.artefact.isPlaced = this.isPlacedNext;\n if (this.artefact.isPlaced) {\n state().eventBus.emit('select-artefact', this.artefact);\n } else {\n state().eventBus.emit('select-artefact', undefined);\n }\n }\n\n protected get artefact(): Artefact {\n const artefact = state().artefacts.find(this.artefactId);\n if (!artefact) {\n console.error('Couldn\\'t find artefact with id: ' + this.artefactId);\n throw new Error('Couldn\\'t find artefact with id: ' + this.artefactId);\n }\n return artefact;\n }\n}\n\nexport type GroupPlacementOperationType = 'delete' | 'placement' | 'edit';\n\nexport class GroupPlacementOperation extends ScrollEditorOperation {\n private get group(): ArtefactGroup {\n const groupArtefacts = state().editions.current!.artefactGroups.find(x => x.groupId === this.groupId);\n if (!groupArtefacts) {\n throw new Error('Couldn\\'t find group with id:' + this.groupId);\n }\n return groupArtefacts;\n }\n\n public constructor(\n public groupId: number,\n public operations: ScrollEditorOperation[],\n public type: GroupPlacementOperationType = 'placement'\n\n ) {\n super('group');\n this.operations = operations;\n this.type = type;\n }\n\n public uniteWith(sop: ScrollEditorOperation): GroupPlacementOperation | undefined {\n if (!(sop instanceof GroupPlacementOperation)) {\n return undefined;\n }\n const op = sop as GroupPlacementOperation;\n if (op.type === 'placement') {\n // We need to compare the items (artefacts) in current operations to the ones in the previous operations\n // If the artefacts being edited are exactly the same as previous, unit them\n\n // First: sort the 2 arrays of operations by items id\n (op as GroupPlacementOperation).operations.sort((a, b) => a.getId() > b.getId() ? 1 : -1);\n this.operations.sort((a, b) => a.getId() > b.getId() ? 1 : -1);\n\n const prevIds = (op as GroupPlacementOperation).operations.map(o => o.getId());\n const nextIds = this.operations.map(o => o.getId());\n\n const areSameArrays = prevIds.length === nextIds.length\n && prevIds.every((value, index) => value === nextIds[index]);\n\n // If the items are the same in the current GroupOperations and the prev one\n // Try to unit each current operation with the previous one of the same item\n if (areSameArrays) {\n const unitedOperations: ScrollEditorOperation[] = [];\n for (let i = 0; i < this.operations.length; i++) {\n const united = this.operations[i].uniteWith((op as GroupPlacementOperation).operations[i]);\n if (!united) {\n return undefined;\n }\n unitedOperations.push(united);\n }\n\n // if succeed to unit the operations, create a new GroupOperations with all united operations inside\n return new GroupPlacementOperation(this.getId(), unitedOperations);\n }\n\n return undefined;\n }\n }\n\n public getId() {\n return this.groupId;\n }\n\n public replaceEntityId(newId: number) {\n this.groupId = newId;\n }\n\n protected internalUndo(): void {\n this.operations.forEach(\n op => op.undo()\n );\n if (this.type === 'delete') {\n this.type = 'placement';\n // recreate the group with id 'this.groupId'\n const artefactIds = this.operations.map(artOp => artOp.getId());\n const removedGroup = ArtefactGroup.generateGroup(artefactIds);\n state().editions.current!.artefactGroups.push(removedGroup);\n state().eventBus.emit('update-operation-id', this.groupId, removedGroup.id);\n this.groupId = removedGroup.id;\n\n state().eventBus.emit('select-group', removedGroup);\n state().eventBus.emit('save-group');\n\n }\n }\n\n protected internalRedo(): void {\n this.operations.forEach(\n op => op.redo()\n );\n\n if (this.type === 'placement' || this.type === 'delete') {\n this.type = 'delete';\n // Shaindel: Is there a place that documents all these events? There should be a list of\n // all the events, their parameters and what they are used for.\n state().eventBus.emit('delete-group', this.groupId);\n state().eventBus.emit('cancel-group');\n }\n\n const artefactIds = this.operations.map(artOp => artOp.getId());\n // if the edit was on an artefact, select the artefact\n if (artefactIds.length < 2) {\n const grp = ArtefactGroup.generateGroup(artefactIds);\n state().eventBus.emit('select-group', grp);\n }\n }\n}\n\n// This type of operation allow to change items inside the group\n// Undo a newly created group will result of removing all the artefacts in this group\nexport class EditGroupOperation extends ScrollEditorOperation {\n\n private get group(): ArtefactGroup {\n const groupArtefacts = state().editions.current!.artefactGroups.find(x => x.groupId === this.groupId);\n if (!groupArtefacts) {\n throw new Error('Couldn\\'t find group with id:' + this.groupId);\n }\n return groupArtefacts;\n }\n public prev: number[];\n public next: number[];\n\n public constructor(\n public groupId: number,\n prev: number[],\n next: number[]\n\n ) {\n super('edit-group');\n this.prev = prev;\n this.next = next;\n }\n\n public uniteWith(op: ScrollEditorOperation): EditGroupOperation | undefined {\n return undefined;\n }\n\n public getId() {\n return this.groupId;\n }\n\n public replaceEntityId(newId: number) {\n this.groupId = newId;\n }\n\n protected internalUndo(): void {\n this.group!.artefactIds = [...this.prev];\n state().eventBus.emit('select-group',\n {\n groupId: this.groupId,\n artefactIds: [...this.prev]\n } as ArtefactGroup);\n }\n\n protected internalRedo(): void {\n this.group!.artefactIds = [...this.next];\n state().eventBus.emit('select-group',\n {\n groupId: this.groupId,\n artefactIds: [...this.next]\n } as ArtefactGroup);\n }\n}\n\nexport class EditionMetricOperation extends ScrollEditorOperation {\n private static lastId: number = 1;\n\n private get edition(): EditionInfo {\n\n const edition = state().editions!.current;\n if (!edition) {\n throw new Error('Couldn\\'t find editon with id:' + this.editionId);\n }\n return edition;\n }\n\n public prev: UpdateEditionManuscriptMetricsDTO;\n public next: UpdateEditionManuscriptMetricsDTO;\n private id: number;\n\n public constructor(\n public editionId: number,\n prev: UpdateEditionManuscriptMetricsDTO,\n next: UpdateEditionManuscriptMetricsDTO\n\n ) {\n super('edition-metrics');\n this.prev = prev;\n this.next = next;\n this.id = EditionMetricOperation.lastId++;\n }\n public uniteWith(op: ScrollEditorOperation): EditionMetricOperation | undefined {\n return undefined;\n }\n public getId() {\n return this.id;\n }\n\n public replaceEntityId(newId: number) {\n // The IDs are internal only and never get saved to the server. Since they mean nothing,\n // we never replace them.\n }\n\n protected internalUndo(): void {\n this.edition.metrics = { ...this.edition.metrics, ...this.prev };\n }\n\n protected internalRedo(): void {\n this.edition.metrics = { ...this.edition.metrics, ...this.next };\n }\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Prop, Vue, Emit } from 'vue-property-decorator';\nimport { Artefact } from '@/models/artefact';\nimport { ScrollEditorParams, ScrollEditorOpMode } from '../artefact-editor/types';\nimport {\n ScrollEditorOperation,\n ArtefactPlacementOperationType,\n ArtefactPlacementOperation,\n GroupPlacementOperation,\n} from './operations';\nimport { Placement } from '@/utils/Placement';\nimport { Point } from '../../utils/helpers';\nimport { ScrollEditorState } from '../../state/scroll-editor';\n\n@Component({\n name: 'artefact-toolbox',\n components: {},\n})\nexport default class ArtefactToolbox extends Vue {\n @Prop({ default: -1 }) public artefactId!: number;\n\n @Prop({ default: false }) public float!: boolean;\n\n @Prop({ default: true }) public keyboardInput!: boolean;\n\n private reset!: number;\n private zoomDelta!: number;\n\n protected mounted() {\n if (this.keyboardInput) {\n window.addEventListener('keydown', this.onKeyPress);\n }\n }\n\n private get scrollEditorState(): ScrollEditorState {\n return this.$state.scrollEditor;\n }\n\n private get params(): ScrollEditorParams {\n return this.scrollEditorState.params || new ScrollEditorParams();\n }\n private get edition() {\n return this.$state.editions.current! || {};\n }\n\n private get mode(): ScrollEditorOpMode {\n return this.params!.mode;\n }\n\n private get artefact() {\n return this.$state.artefacts.find(this.artefactId);\n }\n\n public get selectedArtefact() {\n return this.scrollEditorState.selectedArtefact;\n }\n\n public get selectedGroup() {\n return this.scrollEditorState.selectedGroup;\n }\n\n private get selectedArtefacts() {\n return this.scrollEditorState.selectedArtefacts;\n }\n\n public destroyed() {\n if (this.keyboardInput) {\n window.removeEventListener('keydown', this.onKeyPress);\n }\n }\n\n public dragArtefact(dirX: number, dirY: number) {\n const operations: ScrollEditorOperation[] = [];\n let operation: ScrollEditorOperation = {} as ScrollEditorOperation;\n if (this.selectedArtefact) {\n const placement = this.selectedArtefact.placement.clone();\n const jump =\n parseInt(this.params.move.toString()) * this.edition.ppm;\n placement!.translate.x! += jump * dirX;\n placement!.translate.y! += jump * dirY;\n operation = this.createOperation(\n 'translate',\n placement,\n this.selectedArtefact\n );\n }\n if (this.selectedGroup) {\n this.selectedArtefacts.forEach((art) => {\n const placement = art.placement.clone();\n const jump =\n parseInt(this.params.move.toString()) * this.edition.ppm;\n placement!.translate.x! += jump * dirX;\n placement!.translate.y! += jump * dirY;\n operations.push(\n this.createOperation('translate', placement, art)\n );\n });\n operation = new GroupPlacementOperation(\n this.selectedGroup.groupId,\n operations\n );\n }\n this.newOperation(operation);\n }\n\n public getGroupCenter(): Point {\n const minX = Math.min(\n ...this.selectedArtefacts.map((art) => art.placement.translate.x!)\n );\n const minY = Math.min(\n ...this.selectedArtefacts.map((art) => art.placement.translate.y!)\n );\n const maxX = Math.max(\n ...this.selectedArtefacts.map(\n (art) => art.placement.translate.x! + art.boundingBox.width\n )\n );\n const maxY = Math.max(\n ...this.selectedArtefacts.map(\n (art) => art.placement.translate.y! + art.boundingBox.height\n )\n );\n\n const x = (maxX - minX) / 2 + minX;\n const y = (maxY - minY) / 2 + minY;\n\n return { x, y };\n }\n\n public getArtefactCenter(art: Artefact): Point {\n // The artefact's center is the translate (x,y) + the bounding box's center\n const x = art.placement.translate.x! + art.boundingBox.width / 2;\n const y = art.placement.translate.y! + art.boundingBox.height / 2;\n\n return { x, y };\n }\n\n public rotateGroupArtefact(direction: number) {\n const operations: ScrollEditorOperation[] = [];\n let operation: ScrollEditorOperation = {} as ScrollEditorOperation;\n const groupCenterPoint = this.getGroupCenter();\n\n const deltaAngleDegrees = direction * this.params.rotate;\n const deltaAngleRadians = deltaAngleDegrees * (Math.PI / 180);\n if (this.selectedArtefact) {\n const newRotate = this.rotateArtefact(\n this.selectedArtefact,\n deltaAngleDegrees\n );\n const newPlacement = this.selectedArtefact.placement.clone();\n newPlacement.rotate = newRotate;\n operation = this.createOperation(\n 'rotate',\n newPlacement,\n this.selectedArtefact\n );\n }\n if (this.selectedGroup) {\n this.selectedArtefacts.forEach((art) => {\n // Rotate each artefact by deltaAngleDegrees\n const newRotate = this.rotateArtefact(art, deltaAngleDegrees);\n\n // Translate each artefact\n const newTranslate = this.translateArtefactAfterGroupRotation(\n art,\n groupCenterPoint,\n deltaAngleRadians\n );\n\n const newPlacement = art.placement.clone();\n newPlacement.rotate = newRotate;\n newPlacement.translate = newTranslate;\n\n operations.push(\n this.createOperation('rotate', newPlacement, art)\n );\n });\n operation = new GroupPlacementOperation(\n this.selectedGroup.groupId,\n operations\n );\n }\n this.newOperation(operation);\n }\n\n public rotateArtefact(\n artefact: Artefact,\n deltaAngleDegrees: number\n ): number {\n const oldAngle = artefact.placement.rotate!;\n\n const newAngle = oldAngle + deltaAngleDegrees;\n const normalizedAngle = ((newAngle % 360) + 360) % 360;\n return normalizedAngle;\n }\n\n public translateArtefactAfterGroupRotation(\n art: Artefact,\n groupCenterPoint: Point,\n deltaAngleRadians: number\n ): Point {\n const sin = Math.sin(deltaAngleRadians);\n const cos = Math.cos(deltaAngleRadians);\n const artefactCenterPoint = this.getArtefactCenter(art);\n\n const xFromOrigin = artefactCenterPoint.x - groupCenterPoint.x;\n const yFromOrigin = artefactCenterPoint.y - groupCenterPoint.y;\n\n const newMidXArt = cos * xFromOrigin - sin * yFromOrigin;\n const newMidYArt = cos * yFromOrigin + sin * xFromOrigin;\n\n const deltaX = newMidXArt - xFromOrigin;\n const deltaY = newMidYArt - yFromOrigin;\n\n return {\n x: art.placement.translate.x! + deltaX,\n y: art.placement.translate.y! + deltaY,\n } as Point;\n }\n\n public zoomArtefact(direction: number) {\n const operations: ScrollEditorOperation[] = [];\n let operation: ScrollEditorOperation = {} as ScrollEditorOperation;\n if (this.selectedArtefact) {\n const trans = this.selectedArtefact.placement.clone();\n if (direction === 1) {\n this.zoomDelta = trans.scale + this.params.scale / 100;\n } else {\n this.zoomDelta = trans.scale - this.params.scale / 100;\n }\n if (!trans.scale) {\n trans.scale = 1;\n }\n trans.scale = this.zoomDelta;\n trans.scale = +trans.scale.toFixed(4);\n operation = this.createOperation(\n 'scale',\n trans,\n this.selectedArtefact\n );\n }\n if (this.selectedGroup) {\n this.selectedArtefacts.forEach((art) => {\n const trans = art.placement.clone();\n if (direction === 1) {\n this.zoomDelta = trans.scale + this.params.scale / 100;\n } else {\n this.zoomDelta = trans.scale - this.params.scale / 100;\n }\n if (!trans.scale) {\n trans.scale = 1;\n }\n trans.scale = this.zoomDelta;\n trans.scale = +trans.scale.toFixed(4);\n operations.push(this.createOperation('scale', trans, art));\n });\n\n operation = new GroupPlacementOperation(\n this.selectedGroup.groupId,\n operations\n );\n }\n this.newOperation(operation);\n }\n public statusMirror() {\n const operations: ArtefactPlacementOperation[] = [];\n let operation: ScrollEditorOperation = {} as ScrollEditorOperation;\n if (this.selectedArtefact) {\n const placement = this.selectedArtefact.placement.clone();\n placement.mirrored = !placement.mirrored;\n operation = this.createOperation(\n 'mirror',\n placement,\n this.selectedArtefact\n );\n }\n if (this.selectedGroup) {\n this.selectedArtefacts.forEach((art) => {\n const placement = art.placement.clone();\n placement.mirrored = !placement.mirrored;\n operations.push(\n this.createOperation('mirror', placement, art)\n );\n });\n operation = new GroupPlacementOperation(\n this.selectedGroup.groupId,\n operations,\n 'placement'\n );\n }\n this.newOperation(operation);\n\n }\n\n public resetZoom() {\n const operations: ScrollEditorOperation[] = [];\n let operation: ScrollEditorOperation = {} as ScrollEditorOperation;\n if (this.selectedArtefact) {\n const trans = this.selectedArtefact.placement.clone();\n trans.scale = 1;\n operation = this.createOperation(\n 'scale',\n trans,\n this.selectedArtefact\n );\n }\n if (this.selectedGroup) {\n this.selectedArtefacts.forEach((art) => {\n const trans = art.placement.clone();\n trans.scale = 1;\n operations.push(this.createOperation('scale', trans, art));\n });\n operation = new GroupPlacementOperation(\n this.selectedGroup.groupId,\n operations\n );\n }\n this.newOperation(operation);\n }\n\n private setZIndex(zIndexDirection: number) {\n const operations: ScrollEditorOperation[] = [];\n let operation: ScrollEditorOperation = {} as ScrollEditorOperation;\n const placedArtefacts = this.$state.artefacts.items.filter(\n (x) => x.isPlaced\n );\n const artefactsZOrders = placedArtefacts.map((x) => x.placement.zIndex);\n const zIndex =\n zIndexDirection < 0\n ? Math.min(...artefactsZOrders) - 1\n : Math.max(...artefactsZOrders) + 1;\n if (this.selectedArtefact) {\n const trans = this.selectedArtefact.placement.clone();\n trans.zIndex = zIndex;\n operation = this.createOperation(\n 'z-index',\n trans,\n this.selectedArtefact\n );\n }\n if (this.selectedGroup) {\n this.selectedArtefacts.forEach((art) => {\n const trans = art.placement.clone();\n trans.zIndex = zIndex;\n operations.push(this.createOperation('z-index', trans, art));\n });\n operation = new GroupPlacementOperation(\n this.selectedGroup.groupId,\n operations\n );\n }\n this.newOperation(operation);\n }\n\n private createOperation(\n opType: ArtefactPlacementOperationType,\n newPlacement: Placement,\n artefact: Artefact,\n newIsPlaced: boolean = true\n ): ArtefactPlacementOperation {\n const op = new ArtefactPlacementOperation(\n artefact.id,\n opType,\n artefact.placement,\n newPlacement,\n artefact.isPlaced,\n newIsPlaced\n );\n artefact.placement = newPlacement;\n return op;\n }\n private setMode(mode: ScrollEditorOpMode) {\n this.params.mode = mode;\n }\n\n private onKeyPress(event: KeyboardEvent) {\n if (this.artefact) {\n return;\n }\n\n switch (event.code) {\n case 'KeyM':\n this.setMode('move');\n break;\n case 'KeyR':\n this.setMode('rotate');\n break;\n case 'KeyS':\n this.setMode('scale');\n break;\n case 'ArrowLeft':\n if (this.mode === 'move') {\n this.dragArtefact(-1, 0);\n event.preventDefault();\n } else if (this.mode === 'rotate') {\n this.rotateGroupArtefact(-1);\n event.preventDefault();\n }\n break;\n case 'ArrowRight':\n if (this.mode === 'move') {\n this.dragArtefact(1, 0);\n event.preventDefault();\n } else if (this.mode === 'rotate') {\n this.rotateGroupArtefact(1);\n event.preventDefault();\n }\n break;\n case 'ArrowUp':\n if (this.mode === 'move') {\n this.dragArtefact(0, -1);\n event.preventDefault();\n } else if (this.mode === 'scale') {\n this.zoomArtefact(1);\n event.preventDefault();\n }\n break;\n case 'ArrowDown':\n if (this.mode === 'move') {\n this.dragArtefact(0, 1);\n event.preventDefault();\n } else if (this.mode === 'scale') {\n this.zoomArtefact(-1);\n event.preventDefault();\n }\n break;\n }\n }\n @Emit()\n private saveGroup() {\n return true;\n }\n @Emit()\n private manageGroup() {\n return true;\n }\n @Emit()\n private newOperation(op: ScrollEditorOperation) {\n return op;\n }\n @Emit()\n private cancelGroup() {\n return true;\n }\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./artefact-toolbox.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./artefact-toolbox.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./artefact-toolbox.vue?vue&type=template&id=234511ed&scoped=true&\"\nimport script from \"./artefact-toolbox.vue?vue&type=script&lang=ts&\"\nexport * from \"./artefact-toolbox.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./artefact-toolbox.vue?vue&type=style&index=0&id=234511ed&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"234511ed\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('b-container',{staticClass:\"ml-0 mr-0 pl-0 pr-0\",attrs:{\"no-gutters\":\"\"},on:{\"keypress\":function($event){return _vm.shortcut($event)}}},[(_vm.edition.metrics)?_c('b-row',{staticClass:\"m-0 mb-2 ml-1 pl-0 pr-0\"},[_c('b-col',{staticClass:\"col-lg-6 no-gutters\",attrs:{\"cols\":\"12\",\"md\":\"auto\"}},[_c('span',[_c('b',[_vm._v(_vm._s(_vm.$t('home.editionSize'))+\":\")])])]),_c('b-col',{staticClass:\"no-gutters\",attrs:{\"cols\":\"12\",\"md\":\"auto\",\"lg\":\"auto\"}},[_vm._v(\" \"+_vm._s(_vm.edition.metrics.width)+\" mm X \"+_vm._s(_vm.edition.metrics.height)+\" mm \")])],1):_vm._e(),(_vm.scrollEditorState.viewport)?_c('b-row',{staticClass:\"m-0 mb-2 ml-1 pl-0 pr-0\"},[_c('b-col',{staticClass:\"col-xl-6 col-lg-7 no-gutters\",attrs:{\"cols\":\"12\",\"md\":\"auto\"}},[_c('span',[_c('b',[_vm._v(_vm._s(_vm.$t('home.viewPortSize'))+\":\")])])]),_c('b-col',{staticClass:\"no-gutters\",attrs:{\"cols\":\"12\",\"md\":\"auto\",\"lg\":\"auto\"}},[_vm._v(\" \"+_vm._s(_vm.viewportSizeWidth)+\" mm X \"+_vm._s(_vm.viewportSizeHeight)+\" mm \")])],1):_vm._e(),_c('b-row',{staticClass:\"m-0 mb-0 ml-1 pl-0 pr-0\"},[_c('b-col',{staticClass:\"col-lg-6 no-gutters\",attrs:{\"cols\":\"12\",\"md\":\"auto\"}},[_c('span',[_c('b',[_vm._v(\"Position:\")])])]),_c('b-col',{staticClass:\"no-gutters\",attrs:{\"cols\":\"12\",\"md\":\"auto\",\"lg\":\"auto\"}},[_vm._v(\" X: \"+_vm._s(_vm.pointerPositionX)+\", Y: \"+_vm._s(_vm.pointerPositionY)+\" \")])],1),_c('b-container',{staticClass:\"operations-bar mt-3 mb-3 pb-2\",attrs:{\"fluid\":\"\"}},[_c('b-row',{staticClass:\"btn-tf m-1 ml-3 mt-0 mb-0 p-1 col-12\",attrs:{\"no-gutters\":\"\"}},[_c('b-col',{staticClass:\"col-12 \"},[_c('b-form-checkbox',{attrs:{\"switch\":\"\",\"size\":\"sm\"},on:{\"input\":function($event){return _vm.onDisplayROIs($event)}}},[_vm._v(\"Display ROIs \")])],1)],1),_c('b-row',{staticClass:\"btn-tf m-1 ml-3 mt-0 mb-0 p-1 col-12 \",attrs:{\"no-gutters\":\"\"}},[_c('b-col',{staticClass:\"col-12 \"},[_c('b-form-checkbox',{attrs:{\"switch\":\"\",\"size\":\"sm\",\"disabled\":\"disabled\"},on:{\"input\":function($event){return _vm.onDisplayReconstructedText($event)}}},[_vm._v(\"Display Reconstructed Text \")])],1)],1),_c('b-row',{staticClass:\"btn-tf m-1 ml-3 mt-0 mb-0 p-1 col-12 \",attrs:{\"no-gutters\":\"\"}},[_c('b-col',{staticClass:\"col-12 \"},[_c('b-form-checkbox',{attrs:{\"switch\":\"\",\"size\":\"sm\",\"disabled\":\"disabled\"},on:{\"input\":function($event){return _vm.onDisplayText($event)}},model:{value:(_vm.isDisplayText),callback:function ($$v) {_vm.isDisplayText=$$v},expression:\"isDisplayText\"}},[_vm._v(\"Display Text \")])],1)],1),_c('hr',{staticClass:\"solid\"}),_c('b-row',{staticClass:\"btn-tf m-1 mt-0 mb-0 p-1 col-12 \",attrs:{\"no-gutters\":\"\"}},[_c('b-col',{staticClass:\"m-0 mt-1 p-2\",attrs:{\"sm\":\"\",\"md\":\"auto\",\"lg\":\"auto\"}},[_c('b-button',{staticClass:\"btn-add m-0 mr-1 p-1\",attrs:{\"size\":\"sm\"},on:{\"click\":function($event){return _vm.openAddArtefactModal()}}},[_vm._v(_vm._s(_vm.$t('misc.add'))+\" artefact\")])],1),_c('b-col',{staticClass:\"m-0 mt-md-1 p-2 col-sm-12\",attrs:{\"cols\":\"12\",\"md\":\"auto\",\"lg\":\"auto\"}},[_c('b-button',{staticClass:\"btn-remove m-0 p-1\",attrs:{\"size\":\"sm\"},on:{\"click\":function($event){return _vm.removeArtefactOrGroup()}}},[_vm._v(_vm._s(_vm.$t('misc.remove')))])],1)],1),_c('b-row',{staticClass:\"btn-tf m-1 mt-0 mb-0 p-1 col-12 \",attrs:{\"no-gutters\":\"\"}},[(_vm.selectedArtefact)?_c('b-col',{staticClass:\"m-0 mt-1 p-2\",attrs:{\"sm\":\"\",\"md\":\"auto\",\"lg\":\"auto\"}},[_c('p',[_vm._v(\"Selected Artefact Max Width : \"+_vm._s(_vm.artifactMaxWidth)+\" mm\")]),_c('p',[_vm._v(\"Selected Artefact Max Height : \"+_vm._s(_vm.artifactMaxHeight)+\" mm\")])]):_vm._e()],1),_c('hr',{staticClass:\"solid\"}),_c('b-row',{staticClass:\"m-0 p-0 border-right add-cut-side \",attrs:{\"no-gutters\":\"\"}},[_c('b-col',{staticClass:\"col-xl-8 col-lg-10 col-md-12 col-sm-12 m-0 mb-2 \",attrs:{\"no-gutters\":\"\",\"cols\":\"12\",\"md\":\"auto\",\"lg\":\"auto\"}},[_c('b-form-row',{attrs:{\"align-v\":\"end\",\"align-h\":\"center\"}},[_c('b-col',{staticClass:\"col-xl-5 col-lg-5 col-md-5 col-sm-8 m-0 \",attrs:{\"no-gutters\":\"\",\"cols\":\"12\",\"md\":\"auto\",\"lg\":\"auto\"}},[_c('b-form-select',{staticClass:\"ml-2 mt-2\",attrs:{\"options\":_vm.sidesOptions,\"size\":\"sm\"},model:{value:(_vm.selectedSide),callback:function ($$v) {_vm.selectedSide=$$v},expression:\"selectedSide\"}})],1),_c('b-col',{staticClass:\"col-xl-4 col-lg-4 col-md-4 col-sm-8 m-0\",attrs:{\"no-gutters\":\"\",\"cols\":\"9\",\"md\":\"auto\",\"lg\":\"auto\"}},[_c('b-form-input',{staticClass:\"ml-2 mt-2\",attrs:{\"size\":\"sm\",\"min\":\"1\",\"type\":\"number\"},model:{value:(_vm.metricsInput),callback:function ($$v) {_vm.metricsInput=$$v},expression:\"metricsInput\"}})],1),_c('span',{staticClass:\"ml-2 mt-3\",attrs:{\"align-v\":\"end\"}},[_vm._v(\"mm\")])],1)],1),_c('b-col',{staticClass:\"col-xl-3 col-lg-4 m-0\",attrs:{\"no-gutters\":\"\",\"cols\":\"6\",\"md\":\"auto\",\"lg\":\"auto\"}},[_c('b-row',{attrs:{\"no-gutters\":\"\"}},[_c('b-col',[_c('b-button-group',[_c('b-button',{staticClass:\"m-1 ml-2\",attrs:{\"size\":\"sm\"},on:{\"click\":function($event){return _vm.resizeScroll(1)}}},[_vm._v(\"Add\")]),_c('b-button',{staticClass:\"m-1 ml-6\",attrs:{\"size\":\"sm\"},on:{\"click\":function($event){return _vm.resizeScroll(-1)}}},[_vm._v(\"Cut\")])],1)],1)],1)],1)],1),_c('hr',{staticClass:\"solid\"}),_c('b-row',[_c('b-col',{staticClass:\"col-12 ml-0\"},[_c('b-row',{staticClass:\"ml-0\"},[_c('b-col',{staticClass:\"col-xl-8 col-lg-8 col-md-10 col-sm-12 col-xs-12 ml-0\"},[_c('p',{directives:[{name:\"b-toggle\",rawName:\"v-b-toggle.accordion-manage-group\",modifiers:{\"accordion-manage-group\":true}}],attrs:{\"role\":\"tab\"}},[_c('i',{staticClass:\"toggle-icon fa fa-angle-down\"}),_c('span',{staticClass:\"toggle-icon\"},[_vm._v(\"Group Actions\")])])]),_c('b-col',{attrs:{\"cols\":\"12\"}},[_c('b-collapse',{staticClass:\"mt-2\",attrs:{\"id\":\"accordion-manage-group\",\"accordion\":\"group-accordion\",\"role\":\"tabpanel\"}},[_c('b-row',[_c('b-col',{staticClass:\"m-0\",attrs:{\"lg\":\"auto\",\"md\":\"auto\",\"sm\":\"auto\"}},[_c('b-button',{staticClass:\"m-1\",attrs:{\"size\":\"sm\",\"pressed\":_vm.mode === 'manageGroup',\"disabled\":!(\n _vm.selectedArtefacts &&\n _vm.selectedArtefacts.length\n )},on:{\"click\":function($event){return _vm.setMode('manageGroup')}}},[_c('span',[_vm._v(\"Manage group\")])])],1),_c('b-col',{staticClass:\"no-gutters \",attrs:{\"lg\":\"auto\",\"md\":\"auto\",\"sm\":\"auto\"}},[_c('b-row',{attrs:{\"no-gutters\":\"\"}},[_c('b-button-group',[_c('b-button',{staticClass:\"m-1\",attrs:{\"disabled\":_vm.params.mode !== 'manageGroup',\"size\":\"sm\"},on:{\"click\":function($event){return _vm.saveGroup()}}},[_vm._v(\"save Group\")]),_c('b-button',{staticClass:\"m-1\",attrs:{\"size\":\"sm\",\"disabled\":_vm.params.mode !== 'manageGroup'},on:{\"click\":function($event){return _vm.cancelGroup()}}},[_vm._v(\"cancel\")])],1)],1)],1)],1)],1)],1)],1),(_vm.selectedGroup && _vm.selectedGroup.artefactIds.length>1)?_c('b-table-simple',{staticClass:\"manuscript-artefacts-table\",attrs:{\"responsive\":\"\"}},[_c('b-thead',[_c('b-tr',[_c('b-th',[_vm._v(\"Name\")]),_c('b-th',[_vm._v(\"Width\")]),_c('b-th',[_vm._v(\"Height\")])],1)],1),_c('b-tbody',_vm._l((_vm.selectedArtefacts),function(item,index){return _c('b-tr',{key:index},[_c('b-td',[_vm._v(_vm._s(item.name))]),_c('b-td',[_vm._v(_vm._s(_vm.selectedArtifactsSize[index].width)+\" mm\")]),_c('b-td',[_vm._v(_vm._s(_vm.selectedArtifactsSize[index].height)+\" mm\")])],1)}),1)],1):_vm._e(),(_vm.selectedGroup && _vm.selectedGroup.artefactIds.length>1)?_c('b-row',{staticClass:\"btn-tf m-1 mt-0 mb-0 p-1 col-12 \",attrs:{\"no-gutters\":\"\"}},[_c('b-col',{staticClass:\"m-0 mt-1 p-2\",attrs:{\"sm\":\"\",\"md\":\"auto\",\"lg\":\"auto\"}},[_c('p',[_vm._v(\"Group Max Width : \"+_vm._s(_vm.groupSize.width)+\" mm\")]),_c('p',[_vm._v(\"Group Max Height : \"+_vm._s(_vm.groupSize.height)+\" mm\")])])],1):_vm._e()],1)],1),_c('hr',{staticClass:\"solid\"}),_c('b-row',[_c('b-col',{staticClass:\"m-0 ml-4 p-0 pl-2 center-btn\"},[_c('b-button-group',{staticClass:\"m-0\",attrs:{\"size\":\"sm\"}},[_c('b-button',{staticClass:\"mr-2\",attrs:{\"disabled\":!(_vm.selectedArtefacts && _vm.selectedArtefacts.length)},on:{\"click\":function($event){return _vm.setZIndex(1)}}},[_c('span',[_vm._v(\"top\")])]),_c('b-button',{attrs:{\"disabled\":!(_vm.selectedArtefacts && _vm.selectedArtefacts.length)},on:{\"click\":function($event){return _vm.setZIndex(-1)}}},[_c('span',[_vm._v(\"down\")])])],1)],1)],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Prop, Emit, Model, Vue } from 'vue-property-decorator';\nimport { ScrollEditorState } from '@/state/scroll-editor';\nimport { ArtefactDTO, EditionManuscriptMetricsDTO } from '@/dtos/sqe-dtos';\nimport { ScrollEditorParams, ScrollEditorOpMode } from '../artefact-editor/types';\nimport { Placement } from '@/utils/Placement';\nimport { Artefact } from '@/models/artefact';\nimport { Point } from '../../utils/helpers';\nimport {\n ArtefactPlacementOperation,\n ArtefactPlacementOperationType,\n // EditGroupOperation,\n EditionMetricOperation,\n GroupPlacementOperation,\n ScrollEditorOperation,\n} from './operations';\n\n@Component({\n name: 'manuscript-toolbar',\n components: {\n },\n})\n\nexport default class ManuscriptToolbar extends Vue {\n\n private created() {\n // Corrupted state event listener\n this.$root.$on('delete-key-pressed', () => this.removeArtefactOrGroup());\n }\n\n protected beforeDestroy() {\n this.$root.$off('delete-key-pressed', () => this.removeArtefactOrGroup());\n }\n\n // @Prop() private params!: ScrollEditorParams;\n @Prop({ default: -1 }) public artefactId!: number;\n private selectedSide: string = 'left';\n private metricsInput: number = 1;\n private artifactMaxWidth: number = 0;\n private artifactMaxHeight: number = 0;\n public selectedArtifactsSize: {width: number ,height: number }[] = [];\n private groupSize: {width: number , height: number} = {width: 0, height: 0};\n\n\n // Calculates the pixels per inch (PPI) of the device screen\n // It uses the Pythagorean theorem to find the diagonal length of the screen, and then divides it by 15 to get the PPI.\n // The diagonal length is calculated by finding the square root of the sum of the squares of the width and height of the screen (in pixels).\n private ppi = Math.sqrt((Math.pow(window.screen.width, 2)) + (Math.pow(window.screen.height, 2)) ) / 15;\n\n private sidesOptions: Array<{ text: string; value: string }> = [\n { text: 'Left', value: 'left' },\n { text: 'Right', value: 'right' },\n { text: 'Top', value: 'top' },\n { text: 'Down', value: 'down' },\n ];\n\n private keyboardInput: boolean = true;\n private zoomDelta!: number;\n\n @Emit()\n private saveGroup() {\n return true;\n }\n @Emit()\n private manageGroup() {\n return true;\n }\n @Emit()\n private newOperation(op: ScrollEditorOperation) {\n return op;\n }\n @Emit()\n private cancelGroup() {\n return true;\n }\n\n private get edition() {\n return this.$state.editions.current! || {};\n }\n\n private get scrollEditorState(): ScrollEditorState {\n return this.$state.scrollEditor;\n }\n\n private get params(): ScrollEditorParams {\n return this.scrollEditorState.params || new ScrollEditorParams();\n }\n\n private get pointerPositionX() {\n return (\n this.scrollEditorState.pointerPosition.x /\n this.params.zoom /\n this.edition.ppm\n ).toFixed(2);\n }\n\n private get pointerPositionY() {\n return (\n this.scrollEditorState.pointerPosition.y /\n this.params.zoom /\n this.edition.ppm\n ).toFixed(2);\n }\n\n private get viewportSizeWidth() {\n return Math.round(\n this.scrollEditorState.viewport!.width / this.edition.ppm\n );\n }\n private get viewportSizeHeight() {\n return Math.round(\n this.scrollEditorState.viewport!.height / this.edition.ppm\n );\n }\n\n private get artefacts() {\n return this.$state.artefacts.items || [];\n }\n\n public get selectedArtefacts() {\n this.updateSelectedArtefactsSizes();\n this.getGroupSize(this.scrollEditorState.selectedArtefacts);\n return this.scrollEditorState.selectedArtefacts;\n }\n public updateSelectedArtefactsSizes(): void {\n // when we update the selectedArtifacts ,we update the selectedArtifactsSize (to display each artifact width and heigth)\n this.selectedArtifactsSize = [];\n const arts = this.scrollEditorState.selectedArtefacts;\n for (let i = 0; i < arts.length; i++) {\n const artifactSize = {\n width: this.getArtefactWidth(arts[i]),\n height: this.getArtefactHeight(arts[i])\n };\n if (this.selectedArtifactsSize.indexOf(artifactSize) === -1) {\n this.selectedArtifactsSize.push(artifactSize);\n }\n }\n }\n private get placedArtefacts() {\n return this.artefacts.filter((x) => x.isPlaced);\n }\n\n private get artefact() {\n return this.$state.artefacts.find(this.artefactId);\n }\n\n public get selectedArtefact() {\n const artifact = this.scrollEditorState.selectedArtefact;\n if (artifact) {\n this.artifactMaxWidth = this.getArtefactWidth(artifact);\n this.artifactMaxHeight = this.getArtefactHeight(artifact);\n }\n return this.scrollEditorState.selectedArtefact;\n }\n\n private onDisplayROIs(value: boolean) {\n this.scrollEditorState.displayRois = value;\n }\n private onDisplayReconstructedText(value: boolean) {\n this.scrollEditorState.displayReconstructedText = value;\n }\n\n private get isDisplayText(): boolean {\n return this.scrollEditorState.displayText;\n }\n private onDisplayText(value: boolean) {\n this.scrollEditorState.displayText = value;\n }\n\n\n public get selectedGroup() {\n return this.scrollEditorState.selectedGroup;\n }\n private openAddArtefactModal() {\n this.$root.$emit('bv::show::modal', 'addArtefactModal');\n }\n\n\n private removeArtefactOrGroup() {\n if (this.selectedArtefact) {\n const operation = this.createOperation(\n 'delete',\n Placement.empty,\n this.selectedArtefact,\n false\n );\n\n console.debug('removeArtefactOrGroup creating new operation ', operation);\n this.newOperation(operation);\n }\n\n if (this.selectedGroup) {\n const operations: ScrollEditorOperation[] = [];\n\n this.selectedArtefacts.forEach((art: Artefact) => {\n operations.push(\n this.createOperation('delete', Placement.empty, art, false)\n );\n });\n\n const operation = new GroupPlacementOperation(\n this.selectedGroup.groupId,\n operations,\n 'delete'\n );\n\n this.newOperation(operation);\n this.deleteGroup(this.selectedGroup.groupId);\n }\n }\n\n\n private deleteGroup(groupId: number) {\n const groupArtefact = this.edition.artefactGroups.find(\n (x) => x.groupId === groupId\n );\n if (groupArtefact) {\n groupArtefact.artefactIds = [];\n }\n if (this.selectedGroup) { // making the artefactsIds empty make sure we get rid of the artefacts group we removed\n this.selectedGroup.artefactIds = [];\n }\n }\n\n\n\n private get mode(): ScrollEditorOpMode {\n return this.params!.mode;\n }\n\n private setMode(mode: ScrollEditorOpMode) {\n this.params.mode = mode;\n }\n\n private getArtefactHeight(artefact: Artefact): number {\n // Artifact svg property contains the string representation of the SVG polygon.\n // It looks like this \"M3349.131736526946 9179.191616766468L3349.131736526946 9193.74251497006L3353.982035928143\"\n const pointsAttribute = artefact.mask.svg;\n // The result of splitting the string by \"L\" is an array of strings in the format \"x y\".(each string is a polygon vertex)\n const points = pointsAttribute.split('L');\n let maxY = -Infinity;\n let minY = Infinity;\n for (const point of points) {\n // The [x, y] assignment syntax is used to assign the first and second elements of the resulting array to the variables\n // x and y respectively which were converting to number first.\n const [x, y] = point.split(' ').map(n => parseFloat(n));\n maxY = Math.max(maxY, y);\n minY = Math.min(minY, y);\n }\n const maxHeight = maxY - minY;\n return this.convertToMM(maxHeight);\n }\n private getArtefactWidth(artifact: Artefact): number {\n // Artifact svg property contains the string representation of the SVG polygon.\n // It looks like this \"M3349.131736526946 9179.191616766468L3349.131736526946 9193.74251497006L3353.982035928143\"\n const pointsAttribute = artifact.mask.svg;\n // The result of splitting the string by \"L\" is an array of strings in the format \"x y\".(each string is a polygon vertex)\n const points = pointsAttribute.split('L');\n let maxX = -Infinity;\n let minX = Infinity;\n for (let point of points) {\n if (point[0] === 'M') { // we remove the M from the first string (which messes with the calculation).\n point = point.substring(1);\n }\n // The [x, y] assignment syntax is used to assign the first and second elements of the resulting array to the variables\n // x and y respectively which were converting to number first.\n const [x, y] = point.split(' ').map(n => parseFloat(n));\n maxX = Math.max(maxX, x);\n minX = Math.min(minX, x);\n }\n const maxWidth = maxX - minX;\n return this.convertToMM(maxWidth);\n }\n private convertToMM(number: number): number {\n return Math.round((number / this.ppi * 2.54) * 100) / 100;\n }\n private getGroupSize(arts: Artefact[]): void {\n let minimumsX: number[] = [];\n let minimumsY: number[] = [];\n\n let maximumsX: number[] = [];\n let maximumsY: number[] = [];\n // We go over all the artifacts and get the \"extreme left one\" and the \"extreme right one\", then get the width between them .(Same for height)\n for (let i = 0; i < arts.length; i++) {\n minimumsX.push(this.convertToMM(arts[i].placement.translate.x));\n maximumsX.push(this.convertToMM(arts[i].placement.translate.x) + this.convertToMM(arts[i].boundingBox.width));\n minimumsY.push(this.convertToMM(arts[i].placement.translate.y));\n maximumsY.push(this.convertToMM(arts[i].placement.translate.y) + this.convertToMM(arts[i].boundingBox.height));\n }\n const globalWidth = Math.max.apply(Math, maximumsX) - Math.min.apply(Math, minimumsX);\n const globalHeight = Math.max.apply(Math, maximumsY) - Math.min.apply(Math, minimumsY);\n this.groupSize = {width: Math.round( globalWidth * 100) / 100,\n height: Math.round( globalHeight * 100) / 100\n };\n }\n private resizeScroll(direction: number) {\n const newMetrics: EditionManuscriptMetricsDTO = {\n ...this.edition.metrics,\n };\n\n switch (this.selectedSide) {\n case 'left':\n case 'right':\n newMetrics.width += +this.metricsInput * direction;\n if (this.selectedSide === 'left') {\n newMetrics.xOrigin += +this.metricsInput * direction * -1;\n }\n break;\n\n case 'top':\n case 'down':\n newMetrics.height += +this.metricsInput * direction;\n if (this.selectedSide === 'top') {\n newMetrics.yOrigin += +this.metricsInput * direction * -1;\n }\n break;\n }\n if (\n direction === -1 &&\n !this.allowResizing(this.selectedSide, newMetrics)\n ) {\n this.$toasted.error(\n 'Cannot resize scroll because artefacts will be cropped',\n { duration: 3000 }\n );\n } else {\n const metricsOperation = new EditionMetricOperation(\n this.edition.id,\n this.edition.metrics,\n newMetrics\n );\n this.edition.metrics = { ...newMetrics };\n this.newOperation(metricsOperation);\n this.$emit('onMetricsChange');\n }\n }\n\n private allowResizing(\n side: string,\n newMetrics: EditionManuscriptMetricsDTO\n ): boolean {\n // left : XOrigin <= Xmin\n if (side === 'left') {\n const minX =\n Math.min(\n ...this.placedArtefacts.map(\n (art) => art.placement.translate.x!\n )\n ) / this.edition.ppm;\n return newMetrics.xOrigin <= minX;\n }\n\n // right : Xmax <= width\n if (side === 'right') {\n const maxX =\n Math.max(\n ...this.placedArtefacts.map(\n (art) =>\n art.placement.translate.x! + art.boundingBox.width\n )\n ) / this.edition.ppm;\n return maxX - newMetrics.xOrigin <= newMetrics.width;\n }\n\n // top : YOrigin <= Ymin\n if (side === 'top') {\n const minY =\n Math.min(\n ...this.placedArtefacts.map(\n (art) => art.placement.translate.y!\n )\n ) / this.edition.ppm;\n return newMetrics.yOrigin <= minY;\n }\n\n // down : Ymax <= height\n if (side === 'down') {\n const maxY =\n Math.max(\n ...this.placedArtefacts.map(\n (art) =>\n art.placement.translate.y! + art.boundingBox.height\n )\n ) / this.edition.ppm;\n return maxY - newMetrics.yOrigin <= newMetrics.height;\n }\n\n return true;\n }\n\n\n private setZIndex(zIndexDirection: number) {\n const operations: ScrollEditorOperation[] = [];\n let operation: ScrollEditorOperation = {} as ScrollEditorOperation;\n const placedArtefacts = this.$state.artefacts.items.filter(\n (x) => x.isPlaced\n );\n const artefactsZOrders = placedArtefacts.map((x) => x.placement.zIndex);\n const zIndex =\n zIndexDirection < 0\n ? Math.min(...artefactsZOrders) - 1\n : Math.max(...artefactsZOrders) + 1;\n if (this.selectedArtefact) {\n const trans = this.selectedArtefact.placement.clone();\n trans.zIndex = zIndex;\n operation = this.createOperation(\n 'z-index',\n trans,\n this.selectedArtefact\n );\n }\n if (this.selectedGroup) {\n this.selectedArtefacts.forEach((art) => {\n const trans = art.placement.clone();\n trans.zIndex = zIndex;\n operations.push(this.createOperation('z-index', trans, art));\n });\n operation = new GroupPlacementOperation(\n this.selectedGroup.groupId,\n operations\n );\n }\n this.newOperation(operation);\n }\n\n\n private createOperation(\n opType: ArtefactPlacementOperationType,\n newPlacement: Placement,\n artefact: Artefact,\n newIsPlaced: boolean = true\n ): ArtefactPlacementOperation {\n const op = new ArtefactPlacementOperation(\n artefact.id,\n opType,\n artefact.placement,\n newPlacement,\n artefact.isPlaced,\n newIsPlaced\n );\n artefact.placement = newPlacement;\n artefact.isPlaced = newIsPlaced;\n return op;\n }\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./manuscript-toolbar.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./manuscript-toolbar.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./manuscript-toolbar.vue?vue&type=template&id=e32f306a&scoped=true&\"\nimport script from \"./manuscript-toolbar.vue?vue&type=script&lang=ts&\"\nexport * from \"./manuscript-toolbar.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./manuscript-toolbar.vue?vue&type=style&index=0&id=e32f306a&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"e32f306a\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"scrollArea\",attrs:{\"id\":\"outer\"}},[_c('zoomer',{attrs:{\"zoom\":_vm.zoomLevel},on:{\"new-zoom\":function($event){return _vm.onNewZoom($event)}}},[_c('svg',{attrs:{\"id\":\"the-scroll\",\"width\":_vm.actualWidth,\"height\":_vm.actualHeight,\"viewBox\":(_vm.actualXOrigin + \" \" + _vm.actualYOrigin + \" \" + _vm.actualWidth + \" \" + _vm.actualHeight)},on:{\"click\":_vm.onScrollClick,\"mousemove\":_vm.onMouseMove}},[_c('g',{attrs:{\"id\":\"root\",\"transform\":_vm.transform}},[(_vm.currentScript)?_c('defs',{attrs:{\"id\":\"before-root\"}},_vm._l((Object.values(_vm.scriptGlyphs)),function(g){return _c('path',{key:g.character,staticClass:\"sign\",attrs:{\"d\":g.shape.svg,\"id\":(\"path-\" + (g.character))}})}),0):_vm._e(),_vm._l((_vm.placedArtefacts),function(artefact){return _c('artefact-image-group',{key:artefact.id,attrs:{\"transformRootId\":\"root\",\"artefact\":artefact,\"imagedObject\":_vm.$state.imagedObjects.find(artefact.imagedObjectId),\"disabled\":_vm.isArtefactDisabled(artefact),\"selected\":_vm.isArtefactSelected(artefact),\"scaleFactor\":_vm.zoomLevel,\"withRois\":_vm.displayRois,\"displayText\":_vm.displayText,\"reconstructedText\":_vm.displayReconstructedText},on:{\"on-select\":function($event){return _vm.selectArtefact(artefact)},\"new-operation\":function($event){return _vm.onNewOperation($event)}}})})],2)])])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.loaded)?_c('g',{key:_vm.artefact.id,class:{ disabled: _vm.disabled },attrs:{\"transform\":_vm.groupTransform,\"data\":_vm.artefact.placement.zIndex,\"pointer-events\":\"all\"},on:{\"pointerdown\":function($event){return _vm.onPointerDown($event)},\"pointermove\":function($event){return _vm.onPointerMove($event)},\"pointerup\":function($event){return _vm.onPointerUp($event)},\"pointercancel\":function($event){return _vm.onPointerCancel($event)},\"click\":function($event){return _vm.onClick($event)},\"contextmenu\":function($event){$event.preventDefault();return _vm.onContextMenu($event)}}},[_c('defs',[_c('path',{attrs:{\"id\":(\"path-\" + (_vm.artefact.id)),\"d\":_vm.artefact.mask.svg}}),_c('clipPath',{attrs:{\"id\":(\"clip-path-\" + (_vm.artefact.id))}},[_c('use',{attrs:{\"stroke\":\"none\",\"fill\":\"black\",\"fill-rule\":\"evenodd\",\"href\":(\"#path-\" + (_vm.artefact.id))}})])]),_c('g',{on:{\"click\":_vm.onSelect}},[(!_vm.artefact.isVirtual)?_c('g',{attrs:{\"clip-path\":(\"url(#clip-path-\" + (_vm.artefact.id) + \")\")}},[_c('iiif-image',{attrs:{\"image\":_vm.masterImage,\"boundingBox\":_vm.boundingBox,\"scaleFactor\":_vm.scaleFactor}})],1):_vm._e(),(_vm.artefact.isVirtual)?_c('path',{staticClass:\"virtual-artefact\",attrs:{\"d\":_vm.artefact.mask.svg,\"vector-effect\":\"non-scaling-stroke\"}}):_vm._e(),(_vm.selected)?_c('path',{staticClass:\"selected\",attrs:{\"d\":_vm.artefact.mask.svg,\"vector-effect\":\"non-scaling-stroke\"}}):_vm._e()]),(_vm.withRois)?_c('roi-layer',{attrs:{\"withClass\":false,\"rois\":_vm.visibleRois}}):_vm._e(),(_vm.displayText || _vm.reconstructedText)?_vm._l((_vm.displayedSigns),function(d){return _c('use',{key:d.id,staticClass:\"sign\",class:{ selected: d.id === _vm.selectedSignInterpretationId },attrs:{\"data-sign-id\":d.id,\"href\":(\"#path-\" + (d.character)),\"transform\":d.svgTransform}})}):_vm._e()],2):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('g',[_vm._l((_vm.rois),function(roi){return [_c('g',{key:roi.id,attrs:{\"transform\":(\"translate(\" + (roi.position.x) + \" \" + (roi.position.y) + \")\")}},[_c('path',{class:{\n shine: roi.shiny && _vm.withClass,\n selected: _vm.isSelectedRoi(roi) && _vm.withClass,\n highlighted: _vm.highlighted(roi) && _vm.withClass,\n highlightedComment:\n _vm.highlightedComment(roi) && _vm.withClass,\n },attrs:{\"d\":roi.shape.svg,\"vector-effect\":\"non-scaling-stroke\"},on:{\"click\":function($event){return _vm.onPathClicked(roi)}}})])]})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Vue, Emit } from 'vue-property-decorator';\r\nimport { InterpretationRoi } from '@/models/text';\r\n\r\n@Component({\r\n name: 'roi-layer',\r\n components: {},\r\n})\r\nexport default class RoiLayer extends Vue {\r\n @Prop() public rois!: Iterator;\r\n @Prop({\r\n default: true,\r\n })\r\n public withClass!: boolean;\r\n\r\n public highlighted(roi: InterpretationRoi) {\r\n if (this.si) {\r\n return roi.signInterpretationId === this.si.signInterpretationId;\r\n }\r\n }\r\n public highlightedComment(roi: InterpretationRoi) {\r\n if (roi.signInterpretationId) {\r\n const si = this.$state.signInterpretations.get(\r\n roi.signInterpretationId\r\n );\r\n return (\r\n this.artefactEditorState.highlightCommentMode &&\r\n si &&\r\n (si.commentary || si.attributes.some((attr) => attr.commentary))\r\n );\r\n }\r\n }\r\n\r\n public isSelectedRoi(roi: InterpretationRoi) {\r\n return (\r\n this.selectedInterpretationRoi &&\r\n this.selectedInterpretationRoi.interpretationRoiId ===\r\n roi.interpretationRoiId\r\n );\r\n }\r\n\r\n public get selectedInterpretationRoi(): InterpretationRoi | null {\r\n return this.$state.artefactEditor.selectedInterpretationRoi;\r\n }\r\n\r\n private get si() {\r\n return this.$state.textFragmentEditor.singleSelectedSi;\r\n }\r\n\r\n public get artefactEditorState() {\r\n return this.$state.artefactEditor;\r\n }\r\n\r\n private onPathClicked(roi: InterpretationRoi) {\r\n this.roiClicked(roi);\r\n }\r\n\r\n @Emit()\r\n private roiClicked(roi: InterpretationRoi) {\r\n return roi;\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./roi-layer.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./roi-layer.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./roi-layer.vue?vue&type=template&id=15028152&scoped=true&\"\nimport script from \"./roi-layer.vue?vue&type=script&lang=ts&\"\nexport * from \"./roi-layer.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./roi-layer.vue?vue&type=style&index=0&id=15028152&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"15028152\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Prop, Mixins, Emit } from 'vue-property-decorator';\nimport { Artefact } from '@/models/artefact';\nimport ArtefactDataMixin from '@/components/artefact/artefact-data-mixin';\nimport { BoundingBox, Point } from '@/utils/helpers';\nimport {\n ScrollEditorOperation,\n ArtefactPlacementOperation,\n ArtefactPlacementOperationType,\n GroupPlacementOperation,\n} from './operations';\nimport { Placement } from '../../utils/Placement';\nimport IIIFImageComponent from '@/components/images/IIIFImage.vue';\nimport { InterpretationRoi, SignInterpretation } from '@/models/text';\nimport RoiLayer from '../artefact-editor/roi-layer.vue';\n\nclass DisplayableSign {\n public id: number;\n public character: string;\n public boundingBox: BoundingBox;\n public yOffset: number = 0;\n\n public constructor(\n si: SignInterpretation,\n rois: InterpretationRoi[],\n yOffset: number\n ) {\n if (!si.character) {\n throw new Error('DisplayedSign with no character');\n }\n\n if (!rois || !rois.length) {\n throw new Error('DIsplayedSign with no rois');\n }\n\n this.id = si.id;\n this.character = si.character;\n this.yOffset = yOffset;\n\n this.boundingBox = this.calculateBoundingBox(rois);\n }\n\n private calculateBoundingBox(rois: InterpretationRoi[]): BoundingBox {\n const boundingBoxes: BoundingBox[] = [];\n\n for (const roi of rois) {\n const bbox = roi.shape.getBoundingBox();\n bbox.x = roi.position.x;\n bbox.y = roi.position.y;\n\n boundingBoxes.push(bbox);\n }\n\n return BoundingBox.combine(boundingBoxes);\n }\n\n public get svgTransform() {\n const x = this.boundingBox.x;\n const y = this.boundingBox.y; // - this.yOffset;\n\n return `translate(${x} ${y})`;\n }\n}\n\n@Component({\n name: 'artefact-image-group',\n components: {\n 'iiif-image': IIIFImageComponent,\n 'roi-layer': RoiLayer,\n },\n})\nexport default class ArtefactImageGroup extends Mixins(ArtefactDataMixin) {\n @Prop({\n default: false,\n })\n public selected!: boolean;\n @Prop({\n default: false,\n })\n public disabled!: boolean;\n @Prop({\n default: false,\n })\n public withRois!: boolean;\n\n @Prop({\n default: false,\n })\n public displayText!: boolean;\n\n @Prop({\n default: false,\n })\n public reconstructedText!: boolean;\n\n @Prop({\n default: undefined,\n })\n public readonly transformRootId!: string;\n\n private mouseOrigin?: Point;\n private loaded = false;\n private pointerId: number = -1;\n private element!: SVGGElement | null;\n private previousPlacement!: any[];\n @Prop({\n default: 10,\n })\n private scaleFactor!: number;\n\n get masterImage() {\n return this.imageStack!.master;\n }\n\n public get groupTransform(): string {\n const placement = this.artefact.placement;\n if (!placement.scale) {\n return ''; // No transform at all, do nothing\n }\n\n // First, move bounding box's center to (0, 0)\n const midX = this.boundingBox.x + this.boundingBox.width / 2;\n const midY = this.boundingBox.y + this.boundingBox.height / 2;\n const translateToZero = `translate(-${midX}, -${midY})`;\n\n // Now, scale and rotate around (0 ,0)\n const scale = `scale(${placement.scale})`; // Scale by scale of transform\n const rotate = `rotate(${placement.rotate})`;\n const scaleMirrored = placement.mirrored ? 'scale(-1, 1)' : '';\n\n // Finally, move to correct place. Remember that at this point the artefact's top left is (-midX, -midY)\n const translateX = this.boundingBox.width / 2 + placement.translate.x!;\n const translateY = this.boundingBox.height / 2 + placement.translate.y!;\n const translateToPlace = `translate(${translateX}, ${translateY})`;\n\n // Transformations are performed by SVG from right to left\n return `${translateToPlace} ${rotate} ${scale} ${scaleMirrored} ${translateToZero}`;\n }\n\n private get svg(): SVGSVGElement {\n return this.$el.closest('svg') as SVGSVGElement;\n }\n\n private get transformRoot(): SVGGraphicsElement {\n return this.svg.getElementById(\n this.transformRootId\n ) as SVGGraphicsElement;\n }\n\n private get visibleRois(): InterpretationRoi[] {\n return this.artefact.rois;\n }\n\n private get visibleSignInterpretations(): SignInterpretation[] {\n return this.artefact.signInterpretations;\n }\n\n public get selectedSignInterpretationId() {\n if (\n this.$state.textFragmentEditor.selectedSignInterpretations\n .length !== 1\n ) {\n return null;\n }\n\n return this.$state.textFragmentEditor.selectedSignInterpretations[0]\n .signInterpretationId;\n }\n\n public get displayedSigns(): DisplayableSign[] {\n const reconstructedOnly = this.reconstructedText && !this.displayText;\n const displayedSigns: DisplayableSign[] = [];\n\n for (const si of this.visibleSignInterpretations) {\n if (reconstructedOnly && !si.isReconstructed) {\n continue;\n }\n\n if (!si.character) {\n continue;\n }\n\n const yOffset =\n this.$state.editions.current?.script?.glyphs[si.character]\n ?.yOffset || 0;\n const displayedSign = new DisplayableSign(si, si.rois, yOffset);\n displayedSigns.push(displayedSign);\n }\n\n return displayedSigns;\n }\n\n protected async mounted() {\n // await this.mountedDone;\n this.loaded = true;\n }\n\n @Emit()\n private onSelect(event: MouseEvent): Artefact {\n event.stopPropagation();\n return this.artefact;\n }\n\n private eventToPoint($event: PointerEvent): Point {\n // Changing coordinate systems taken from:\n // https://www.sitepoint.com/how-to-translate-from-dom-to-svg-coordinates-and-back-again/\n const pt = this.svg.createSVGPoint();\n pt.x = $event.clientX;\n pt.y = $event.clientY;\n const svgPt = pt.matrixTransform(\n this.transformRoot.getScreenCTM()!.inverse()\n );\n\n return svgPt;\n }\n\n public get selectedGroup() {\n return this.$state.scrollEditor.selectedGroup;\n }\n\n public get selectedArtefact() {\n return this.$state.scrollEditor.selectedArtefact;\n }\n\n private get selectedArtefacts() {\n return this.$state.scrollEditor.selectedArtefacts;\n }\n\n // Implement dragging artefacts - but only in material mode.\n private onPointerDown($event: PointerEvent) {\n if (!this.materialMode) {\n return;\n }\n\n if (this.pointerId > 0) {\n return;\n }\n this.previousPlacement = this.selectedArtefacts.map((art) => ({\n placement: art!.placement.clone(),\n artefactId: art!.id,\n }));\n\n this.pointerId = $event.pointerId;\n this.element = ($event.target! as HTMLBaseElement)!.closest('g');\n\n (($event.target as HTMLBaseElement) || this.element).setPointerCapture(\n this.pointerId\n );\n\n const pt = this.eventToPoint($event);\n this.mouseOrigin = { x: pt.x, y: pt.y };\n }\n\n private onPointerMove($event: PointerEvent) {\n if (!this.materialMode) {\n return;\n }\n\n if (\n !this.mouseOrigin ||\n !this.selected ||\n this.pointerId !== $event.pointerId\n ) {\n return;\n }\n\n const pt = this.eventToPoint($event);\n\n const diffPt = {\n x: pt.x - this.mouseOrigin!.x,\n y: pt.y - this.mouseOrigin!.y,\n };\n\n this.selectedArtefacts.forEach((art) => {\n art!.placement.translate.x! += diffPt.x;\n art!.placement.translate.y! += diffPt.y;\n });\n\n this.mouseOrigin.x = pt.x;\n this.mouseOrigin.y = pt.y;\n }\n\n private onPointerUp($event: PointerEvent) {\n if (!this.materialMode) {\n return;\n }\n\n const operations: ScrollEditorOperation[] = [];\n if (this.pointerId !== $event.pointerId || !this.selected) {\n this.cancelOperation($event.target as HTMLBaseElement);\n return;\n }\n\n let operation: ScrollEditorOperation = {} as ScrollEditorOperation;\n if (this.selectedArtefact) {\n operation = this.createOperation(\n 'translate',\n this.selectedArtefact.placement.clone(),\n this.selectedArtefact\n );\n }\n if (this.selectedGroup) {\n this.selectedArtefacts.forEach((art) => {\n const trans = art!.placement.clone();\n operations.push(this.createOperation('translate', trans, art));\n });\n\n operation = new GroupPlacementOperation(\n this.selectedGroup.groupId,\n operations\n );\n }\n\n this.newOperation(operation);\n\n this.cancelOperation($event.target as HTMLBaseElement);\n }\n\n private onPointerCancel() {\n if (!this.materialMode) {\n return;\n }\n\n this.cancelOperation();\n }\n\n private createOperation(\n opType: ArtefactPlacementOperationType,\n newPlacement: Placement,\n artefact: Artefact | undefined,\n newIsPlaced: boolean = true\n ): ArtefactPlacementOperation {\n const op = new ArtefactPlacementOperation(\n artefact!.id,\n opType,\n this.previousPlacement.find(\n (x) => x.artefactId === artefact!.id\n ).placement,\n newPlacement,\n artefact!.isPlaced,\n newIsPlaced\n );\n return op;\n }\n\n private cancelOperation(targetElement?: HTMLBaseElement) {\n this.mouseOrigin = undefined;\n (targetElement || this.element)!.releasePointerCapture(this.pointerId);\n this.element = null;\n this.pointerId = -1;\n }\n\n private get materialMode() {\n return this.$state.scrollEditor.mode === 'material';\n }\n\n @Emit()\n private newOperation(op: ScrollEditorOperation) {\n return op;\n }\n\n public onClick(event: MouseEvent) {\n if (this.materialMode) {\n return;\n }\n this.$state.textFragmentEditor.selectSign(null);\n\n // Find the letter this this event applies to, if any\n const element = (event.target! as HTMLBaseElement)!.closest('use');\n if (!element) {\n return;\n }\n\n const sid = element.getAttribute('data-sign-id');\n if (!sid) {\n return;\n }\n\n const id = parseInt(sid);\n const si = this.$state.signInterpretations.get(id, true) || null;\n this.$state.textFragmentEditor.selectSign(si);\n }\n\n @Emit()\n private onContextMenu(event: MouseEvent): Artefact {\n event.stopPropagation();\n return this.artefact;\n }\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./artefact-image-group.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./artefact-image-group.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./artefact-image-group.vue?vue&type=template&id=e98bd81c&scoped=true&\"\nimport script from \"./artefact-image-group.vue?vue&type=script&lang=ts&\"\nexport * from \"./artefact-image-group.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./artefact-image-group.vue?vue&type=style&index=0&id=e98bd81c&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"e98bd81c\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Vue, Emit } from 'vue-property-decorator';\r\nimport Waiting from '@/components/misc/Waiting.vue';\r\nimport Zoomer, { ZoomEventArgs } from '@/components/misc/zoomer.vue';\r\nimport { ScrollEditorParams } from '../artefact-editor/types';\r\nimport { BoundingBox } from '@/utils/helpers';\r\nimport { ImageSetting } from '@/components/image-settings/types';\r\nimport { Artefact } from '@/models/artefact';\r\nimport ArtefactImageGroup from './artefact-image-group.vue';\r\nimport ArtefactToolbox from './artefact-toolbox.vue';\r\nimport { ScrollEditorOperation } from './operations';\r\nimport { ScrollEditorState } from '@/state/scroll-editor';\r\nimport { ArtefactTextFragmentData } from '@/models/text';\r\nimport { ScriptData, GlyphData } from '@/models/script';\r\n\r\n@Component({\r\n name: 'scroll-area',\r\n components: {\r\n Waiting,\r\n zoomer: Zoomer,\r\n 'artefact-image-group': ArtefactImageGroup,\r\n 'artefact-toolbox': ArtefactToolbox,\r\n },\r\n})\r\nexport default class ScrollArea extends Vue {\r\n private imageSettings!: ImageSetting;\r\n private boundingBox = new BoundingBox(1, 1);\r\n\r\n public selectArtefact(artefact: Artefact | undefined) {\r\n this.$emit('onSelectArtefact', artefact);\r\n }\r\n\r\n private created() {\r\n this.$state.eventBus.on('select-artefact', (art: Artefact) =>\r\n this.selectArtefact(art)\r\n );\r\n }\r\n\r\n private destroyed() {\r\n this.$state.eventBus.off('select-artefact');\r\n }\r\n\r\n private async mounted() {\r\n // Prepare ROIs of placed artefacts\r\n await this.placedArtefacts.forEach(async (artefact: Artefact) => {\r\n await this.$state.prepare.artefact(artefact.editionId, artefact.id);\r\n await Promise.all(\r\n artefact.textFragments.map((tf: ArtefactTextFragmentData) =>\r\n this.$state.prepare.textFragment(artefact.editionId, tf.id)\r\n )\r\n );\r\n });\r\n }\r\n\r\n private get scrollEditorState(): ScrollEditorState {\r\n return this.$state.scrollEditor;\r\n }\r\n\r\n private get displayRois(): boolean {\r\n return this.scrollEditorState.displayRois;\r\n }\r\n private get displayText(): boolean {\r\n return this.scrollEditorState.displayText;\r\n }\r\n\r\n private get displayReconstructedText(): boolean {\r\n return this.scrollEditorState.displayReconstructedText;\r\n }\r\n private get params() {\r\n return this.scrollEditorState.params || new ScrollEditorParams();\r\n }\r\n\r\n public get selectedGroup() {\r\n return this.scrollEditorState.selectedGroup;\r\n }\r\n\r\n public get selectedArtefact() {\r\n return this.scrollEditorState.selectedArtefact;\r\n }\r\n\r\n private isArtefactSelected(artefact: Artefact): boolean {\r\n if (this.selectedArtefact) {\r\n return this.selectedArtefact === artefact;\r\n }\r\n if (this.selectedGroup) {\r\n return this.selectedGroup.artefactIds.includes(artefact.id);\r\n }\r\n return false;\r\n }\r\n\r\n private isArtefactDisabled(artefact: Artefact): boolean {\r\n const artefactGroup = this.getArtefactGroup(artefact);\r\n if (this.selectedGroup) {\r\n return (\r\n this.params.mode === 'manageGroup' &&\r\n !!artefactGroup &&\r\n artefactGroup.groupId !== this.selectedGroup.groupId\r\n );\r\n }\r\n return false;\r\n }\r\n\r\n private get edition() {\r\n return this.$state.editions.current!;\r\n }\r\n\r\n private get artefacts() {\r\n return this.$state.artefacts.items || [];\r\n }\r\n\r\n private getArtefactGroup(artefact: Artefact) {\r\n return this.edition!.artefactGroups.find(\r\n (x) =>\r\n artefact &&\r\n x.artefactIds.includes(artefact!.id) &&\r\n x.artefactIds.length > 1\r\n );\r\n }\r\n\r\n private get actualWidth(): number {\r\n return this.edition.metrics.width * this.edition.ppm * this.zoomLevel;\r\n }\r\n\r\n private get actualHeight(): number {\r\n return this.edition.metrics.height * this.edition.ppm * this.zoomLevel;\r\n }\r\n\r\n private get actualXOrigin(): number {\r\n return this.edition.metrics.xOrigin * this.edition.ppm * this.zoomLevel;\r\n }\r\n\r\n private get actualYOrigin(): number {\r\n return this.edition.metrics.yOrigin * this.edition.ppm * this.zoomLevel;\r\n }\r\n\r\n private get positionX(): number {\r\n return this.actualWidth / 2;\r\n }\r\n\r\n private get positionY(): number {\r\n return this.actualHeight / 2;\r\n }\r\n\r\n private get imgWidth(): number {\r\n return 200;\r\n }\r\n\r\n private get zoomLevel() {\r\n return (this.params && this.params.zoom) || 1;\r\n }\r\n\r\n private onNewZoom(event: ZoomEventArgs) {\r\n this.params.zoom = parseFloat(event.zoom.toString());\r\n }\r\n\r\n private get transform(): string {\r\n const zoom = `scale(${this.zoomLevel})`;\r\n return zoom;\r\n }\r\n\r\n private get currentScript(): ScriptData | null {\r\n return this.$state.editions.current!.script;\r\n }\r\n\r\n private get scriptGlyphs(): { [key: string]: GlyphData } | null {\r\n return this.$state.editions.current!.script?.glyphs || null;\r\n }\r\n\r\n private get placedArtefacts() {\r\n const visibleArtefacts = this.artefacts\r\n .filter((x) => x.isPlaced && x.inViewport)\r\n .sort((a, b) => (a.placement.zIndex > b.placement.zIndex ? 1 : -1));\r\n return visibleArtefacts;\r\n }\r\n\r\n private onNewOperation(op: ScrollEditorOperation) {\r\n this.newOperation(op);\r\n }\r\n\r\n private onSaveGroup() {\r\n this.$emit('onSaveGroupArtefacts');\r\n }\r\n private cancelGroup() {\r\n this.$emit('onCancelGroup');\r\n }\r\n private manageGroup() {\r\n this.$emit('onManageGroup');\r\n }\r\n\r\n private onScrollClick(event: MouseEvent) {\r\n this.scrollEditorState.selectGroup(undefined);\r\n }\r\n\r\n private onMouseMove(event: MouseEvent) {\r\n this.scrollEditorState.pointerPosition.x = event.offsetX;\r\n this.scrollEditorState.pointerPosition.y = event.offsetY;\r\n }\r\n\r\n @Emit()\r\n private newOperation(op: ScrollEditorOperation) {\r\n return op;\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./scroll-area.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./scroll-area.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./scroll-area.vue?vue&type=template&id=ef25591a&\"\nimport script from \"./scroll-area.vue?vue&type=script&lang=ts&\"\nexport * from \"./scroll-area.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./scroll-area.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"scrollMap\",attrs:{\"id\":\"scroll-map\"}},[(_vm.ready)?_c('svg',{ref:\"svg\",attrs:{\"width\":_vm.actualWidth,\"height\":_vm.actualHeight,\"viewBox\":(_vm.actualXOrigin + \" \" + _vm.actualYOrigin + \" \" + _vm.actualWidth + \" \" + _vm.actualHeight)},on:{\"click\":_vm.onClick}},[_c('g',{ref:\"group\",attrs:{\"transform\":_vm.transform}},[(_vm.viewport)?_c('rect',{attrs:{\"x\":_vm.viewport.x,\"y\":_vm.viewport.y,\"width\":_vm.viewport.width,\"height\":_vm.viewport.height,\"vector-effect\":\"non-scaling-stroke\"}}):_vm._e(),_vm._l((_vm.placedArtefacts),function(artefact){return _c('artefact-sillhouette',{key:artefact.id,attrs:{\"artefact\":artefact}})})],2)]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('g',{staticStyle:{\"background-color\":\"green\"},attrs:{\"transform\":_vm.transformer.artefactTransform,\"data\":_vm.artefact.zOrder}},[_c('defs',[_c('path',{attrs:{\"id\":(\"path-\" + (_vm.artefact.id)),\"d\":_vm.artefact.mask.svg}}),_c('clipPath',{attrs:{\"id\":(\"clip-path-\" + (_vm.artefact.id))}},[_c('use',{staticStyle:{\"background-color\":\"green\"},attrs:{\"fill\":\"black\",\"stroke\":\"none\",\"fill-rule\":\"evenodd\",\"href\":(\"#path-\" + (_vm.artefact.id))}})])]),_c('path',{staticClass:\"sillhouette\",style:(_vm.inViewport ? 'fill:pink;fill-opacity:1;': 'fill:blue;fill-opacity:0'),attrs:{\"d\":_vm.artefact.mask.svg,\"vector-effect\":\"non-scaling-stroke\"}})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/*\r\n * This file contains various SVG transforms for artefacts. It can be used by components that show artefacts in SVGs\r\n *\r\n * Transforms are implemented as getters, to simplify bindings to templates.\r\n *\r\n * All transforms assume they're placed on an SVG the size of the edition's metrics, with the edition's ppm.\r\n */\r\n\r\nimport { Artefact } from '@/models/artefact';\r\nimport { BoundingBox } from './helpers';\r\n\r\nclass ArtefactTransformer {\r\n protected boundingBox: BoundingBox;\r\n\r\n public constructor(public artefact: Artefact) {\r\n this.boundingBox = artefact.mask.getBoundingBox();\r\n }\r\n\r\n public get croppedImageTransform(): string {\r\n // Note that we do not zoom the image at all, even though its original resolution depends on imageScale\r\n // That's because we specify the width and height of the image element, and the browser makes sure the image\r\n // is scaled to those\r\n const translate = `translate(${this.boundingBox.x} ${this.boundingBox.y})`;\r\n return translate;\r\n }\r\n\r\n public get artefactTransform(): string {\r\n // Transforming the artefact on the SVG - placing it in the correct place, correct zoom and correct orientation\r\n const placement = this.artefact.placement;\r\n if (!placement.scale) {\r\n return ''; // No transform at all, do nothing\r\n }\r\n\r\n // First, move bounding box's center to (0, 0)\r\n const midX = this.boundingBox.x + this.boundingBox.width / 2;\r\n const midY = this.boundingBox.y + this.boundingBox.height / 2;\r\n const translateToZero = `translate(-${midX}, -${midY})`;\r\n\r\n // Now, scale and rotate around (0 ,0)\r\n const scale = `scale(${placement.scale})`; // Scale by scale of transform\r\n const rotate = `rotate(${placement.rotate})`;\r\n\r\n // Finally, move to correct place. Remember that at this point the artefact's top left is (-midX, -midY)\r\n const translateX = this.boundingBox.width / 2 + placement.translate.x!;\r\n const translateY = this.boundingBox.height / 2 + placement.translate.y!;\r\n const translateToPlace = `translate(${translateX}, ${translateY})`;\r\n\r\n // Transformations are performed by SVG from right to left\r\n const transform = `${translateToPlace} ${rotate} ${scale} ${translateToZero}`;\r\n\r\n return transform;\r\n }\r\n}\r\n\r\nexport { ArtefactTransformer };\r\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Vue, } from 'vue-property-decorator';\r\nimport { Artefact } from '@/models/artefact';\r\nimport { ArtefactTransformer } from '@/utils/artefact-transformer';\r\n\r\n@Component({\r\n name: 'artefact-sillhouette'\r\n})\r\nexport default class ArtefactSillouhette extends Vue {\r\n @Prop()\r\n public artefact!: Artefact;\r\n\r\n private transformer: ArtefactTransformer | null = null;\r\n\r\n public created() {\r\n this.transformer = new ArtefactTransformer(this.artefact);\r\n }\r\n\r\n private get inViewport(): boolean {\r\n return this.artefact.inViewport ;\r\n\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./artefact-sillhouette.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./artefact-sillhouette.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./artefact-sillhouette.vue?vue&type=template&id=f7a4e088&scoped=true&\"\nimport script from \"./artefact-sillhouette.vue?vue&type=script&lang=ts&\"\nexport * from \"./artefact-sillhouette.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./artefact-sillhouette.vue?vue&type=style&index=0&id=f7a4e088&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"f7a4e088\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Vue, Emit, Watch } from 'vue-property-decorator';\r\nimport { Point } from '@/utils/helpers';\r\nimport ArtefactSillhouette from './artefact-sillhouette.vue';\r\n\r\n@Component({\r\n name: 'scroll-map',\r\n components: {\r\n 'artefact-sillhouette': ArtefactSillhouette\r\n }\r\n})\r\nexport default class ScrollMap extends Vue {\r\n private width: number = 0;\r\n private ready = false;\r\n private observer?: ResizeObserver;\r\n private scaleFactor = 1;\r\n\r\n public created() {\r\n this.observer = new ResizeObserver(entities => this.onResize());\r\n this.ready = false;\r\n }\r\n\r\n public mounted() {\r\n this.observer!.observe(this.$refs.scrollMap as Element);\r\n this.onResize();\r\n this.ready = true;\r\n }\r\n\r\n public destroyed() {\r\n this.observer!.disconnect();\r\n }\r\n\r\n private get transform() {\r\n return `scale(${this.scaleFactor})`;\r\n }\r\n\r\n private get edition() {\r\n return this.$state.editions.current!;\r\n }\r\n\r\n @Watch('actualWidth')\r\n private setScaleFactor() {\r\n const div = this.$refs.scrollMap as Element;\r\n const width = div.clientWidth;\r\n\r\n this.scaleFactor = width / (this.edition.metrics.width * this.edition.ppm);\r\n }\r\n\r\n private onResize() {\r\n this.setScaleFactor();\r\n }\r\n\r\n private get viewport() {\r\n return this.$state.scrollEditor.viewport;\r\n }\r\n\r\n // Add a watch on `this.edition.metrics.width` - when it changes call setScaleFactor\r\n private get actualWidth() {\r\n return this.edition.metrics.width * this.edition.ppm * this.scaleFactor;\r\n }\r\n\r\n private get actualHeight() {\r\n return (\r\n this.edition.metrics.height * this.edition.ppm * this.scaleFactor\r\n );\r\n }\r\n\r\n private get totalWidth() {\r\n return this.edition.metrics.width * this.edition.ppm;\r\n }\r\n\r\n private get totalHeight() {\r\n return this.edition.metrics.height * this.edition.ppm;\r\n }\r\n\r\n private get actualXOrigin() {\r\n return (\r\n this.edition.metrics.xOrigin * this.edition.ppm * this.scaleFactor\r\n );\r\n }\r\n\r\n private get actualYOrigin() {\r\n return (\r\n this.edition.metrics.yOrigin * this.edition.ppm * this.scaleFactor\r\n );\r\n }\r\n\r\n private get placedArtefacts() {\r\n const artefacts = this.$state.artefacts.items;\r\n return artefacts\r\n .filter(x => x.isPlaced)\r\n .sort((a, b) => (a.placement.zIndex > b.placement.zIndex ? 1 : -1));\r\n }\r\n\r\n private onClick(ev: MouseEvent) {\r\n const pt = this.eventToPoint(ev);\r\n this.navigateToPoint(pt);\r\n }\r\n\r\n private eventToPoint($event: MouseEvent): Point {\r\n // Changing coordinate systems taken from:\r\n // https://www.sitepoint.com/how-to-translate-from-dom-to-svg-coordinates-and-back-again/\r\n const svg = this.$refs.svg as SVGSVGElement;\r\n const group = this.$refs.group as SVGSVGElement;\r\n const pt = svg.createSVGPoint();\r\n pt.x = $event.clientX;\r\n pt.y = $event.clientY;\r\n const svgPt = pt.matrixTransform(group.getScreenCTM()!.inverse());\r\n\r\n return svgPt;\r\n }\r\n\r\n @Emit()\r\n private navigateToPoint(pt: Point): Point {\r\n return pt;\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./scroll-map.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./scroll-map.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./scroll-map.vue?vue&type=template&id=0608109e&scoped=true&\"\nimport script from \"./scroll-map.vue?vue&type=script&lang=ts&\"\nexport * from \"./scroll-map.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./scroll-map.vue?vue&type=style&index=0&id=0608109e&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0608109e\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"ruler\",style:({ height: _vm.height + 'px', width: _vm.width + 'px' })},[_c('div',{staticClass:\"rule-horizontal\"},[_c('ul',{staticClass:\"ruler-bar-horizontal\"},_vm._l((_vm.horizontalTicksArray),function(a,index){return _c('li',{key:index,class:{ units: index % 10 !== 0 },style:({ left: _vm.ppm * _vm.zoom * index + 'px' })},[(index % 10 === 0)?_c('span',[_vm._v(_vm._s(index))]):_vm._e()])}),0)]),_c('div',{staticClass:\"rule-vertical\"},[_c('ul',{staticClass:\"ruler-bar-vertical\"},_vm._l((_vm.verticalTicksArray),function(a,index){return _c('li',{key:index,class:{ units: index % 10 !== 0 },style:({ top: _vm.ppm * _vm.zoom * index + 'px' })},[(index % 10 === 0)?_c('span',[_vm._v(_vm._s(index))]):_vm._e()])}),0)])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Vue } from 'vue-property-decorator';\r\n\r\n@Component({\r\n name: 'scroll-ruler',\r\n})\r\nexport default class ScrollRuler extends Vue {\r\n @Prop({\r\n default: 0,\r\n })\r\n public horizontalTicks!: number;\r\n\r\n @Prop({\r\n default: 0,\r\n }) public verticalTicks!: number;\r\n @Prop({\r\n default: 1,\r\n }) public ppm!: number;\r\n @Prop({\r\n default: 1,\r\n })public zoom!: number;\r\n @Prop({\r\n default: 1,\r\n })public width!: number;\r\n @Prop({\r\n default: 1,\r\n }) public height!: number;\r\n\r\n public get horizontalTicksArray() {\r\n return Array.from(Array(this.horizontalTicks).keys());\r\n }\r\n\r\n public get verticalTicksArray() {\r\n return Array.from(Array(this.verticalTicks).keys());\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./scroll-ruler.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./scroll-ruler.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./scroll-ruler.vue?vue&type=template&id=32c9ef3c&scoped=true&\"\nimport script from \"./scroll-ruler.vue?vue&type=script&lang=ts&\"\nexport * from \"./scroll-ruler.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./scroll-ruler.vue?vue&type=style&index=0&id=32c9ef3c&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"32c9ef3c\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('toolbar',{attrs:{\"no-gutters\":\"\",\"id\":\"scroll-top-toolbar\",\"tabindex\":\"0\"}},[_c('toolbox',{attrs:{\"subject\":\"Mode\"}},[_c('b-button-group',[_c('toolbar-icon-button',{attrs:{\"pressed\":_vm.inMaterialMode,\"text-center\":\"\",\"title\":\"Material\",\"show-text\":true},on:{\"update:pressed\":function($event){_vm.inMaterialMode=$event},\"click\":function($event){return _vm.onTextMode('material')}}}),_c('toolbar-icon-button',{attrs:{\"pressed\":_vm.inTextMode,\"title\":\"Text\",\"disabled\":\"disabled\",\"show-text\":true},on:{\"update:pressed\":function($event){_vm.inTextMode=$event},\"click\":function($event){return _vm.onTextMode('text')}}})],1)],1),_c('zoom-toolbox',{attrs:{\"delta\":\"0.05\",\"subject\":\"Zoom Manuscript\"},on:{\"zoomChanged\":function($event){return _vm.onZoomChanged($event)}},model:{value:(_vm.localZoom),callback:function ($$v) {_vm.localZoom=$$v},expression:\"localZoom\"}}),_c('toolbox',{attrs:{\"subject\":\"Resize Artefact\"}},[_c('b-button-group',[_c('toolbar-icon-button',{attrs:{\"title\":\"Zoom Out\",\"icon\":\"minus\",\"disabled\":_vm.isToolbarDisabled},on:{\"click\":function($event){return _vm.zoomArtefact(-1)}}}),_c('toolbar-icon-button',{attrs:{\"title\":\"Zoom In\",\"icon\":\"plus\",\"disabled\":_vm.isToolbarDisabled},on:{\"click\":function($event){return _vm.zoomArtefact(1)}}}),_c('toolbar-icon-button',{attrs:{\"title\":\"Reset\",\"show-text\":true,\"disabled\":_vm.isToolbarDisabled},on:{\"click\":_vm.resetZoom}}),_c('b-input-group',{attrs:{\"prepend\":\"By\",\"append\":\"%\"}},[_c('b-form-input',{staticClass:\"by-input\",attrs:{\"type\":\"number\",\"disabled\":_vm.isToolbarDisabled},model:{value:(_vm.params.scale),callback:function ($$v) {_vm.$set(_vm.params, \"scale\", $$v)},expression:\"params.scale\"}})],1)],1)],1),_c('toolbox',{attrs:{\"subject\":\"Rotate Artefact\"}},[_c('b-button-group',[_c('toolbar-icon-button',{attrs:{\"title\":\"Rotate Left\",\"icon\":\"undo\",\"disabled\":_vm.isToolbarDisabled},on:{\"click\":function($event){return _vm.rotateGroupArtefact(-1)}}}),_c('toolbar-icon-button',{attrs:{\"title\":\"Rotate Right\",\"icon\":\"redo\",\"disabled\":_vm.isToolbarDisabled},on:{\"click\":function($event){return _vm.rotateGroupArtefact(+1)}}}),_c('b-input-group',{attrs:{\"prepend\":\"By\",\"append\":\"degrees\"}},[_c('b-form-input',{staticClass:\"by-input\",attrs:{\"type\":\"number\",\"disabled\":_vm.isToolbarDisabled},model:{value:(_vm.params.rotate),callback:function ($$v) {_vm.$set(_vm.params, \"rotate\", $$v)},expression:\"params.rotate\"}})],1),_c('toolbar-icon-button',{attrs:{\"title\":\"Mirror\",\"show-text\":true,\"pressed\":_vm.isMirroredPressed,\"disabled\":_vm.isToolbarDisabled},on:{\"click\":_vm.mirrorArtefact}})],1)],1),_c('toolbox',{attrs:{\"subject\":\"Move Artefact\"}},[_c('b-button-group',[_c('toolbar-icon-button',{attrs:{\"title\":\"Up\",\"icon\":\"arrow-up\",\"disabled\":_vm.isToolbarDisabled},on:{\"click\":function($event){return _vm.dragArtefact(0, -1)}}}),_c('toolbar-icon-button',{attrs:{\"title\":\"Down\",\"icon\":\"arrow-down\",\"disabled\":_vm.isToolbarDisabled},on:{\"click\":function($event){return _vm.dragArtefact(0, 1)}}}),_c('toolbar-icon-button',{attrs:{\"title\":\"Left\",\"icon\":\"arrow-left\",\"disabled\":_vm.isToolbarDisabled},on:{\"click\":function($event){return _vm.dragArtefact(-1, 0)}}}),_c('toolbar-icon-button',{attrs:{\"title\":\"Right\",\"icon\":\"arrow-right\",\"disabled\":_vm.isToolbarDisabled},on:{\"click\":function($event){return _vm.dragArtefact(1, 0)}}}),_c('b-input-group',{attrs:{\"prepend\":\"By\",\"append\":\"mm\"}},[_c('b-form-input',{staticClass:\"by-input\",attrs:{\"type\":\"number\",\"disabled\":_vm.isToolbarDisabled},model:{value:(_vm.params.move),callback:function ($$v) {_vm.$set(_vm.params, \"move\", $$v)},expression:\"params.move\"}})],1)],1)],1),_c('undo-redo-toolbox'),_c('copy-edition-toolbox')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('toolbox',{attrs:{\"subject\":_vm.subject}},[_c('b-button-group',[_c('toolbar-icon-button',{attrs:{\"title\":\"Zoom Out\",\"icon\":\"minus\",\"disabled\":!_vm.canZoomOut || _vm.disabled},on:{\"click\":function($event){return _vm.zoomClick(-_vm.delta)}}}),_c('b-input',{staticClass:\"zoom-input no-arrows\",attrs:{\"type\":\"number\",\"min\":\"1\",\"max\":\"100\",\"disabled\":_vm.disabled},model:{value:(_vm.zoom),callback:function ($$v) {_vm.zoom=$$v},expression:\"zoom\"}}),_c('toolbar-icon-button',{attrs:{\"title\":\"Zoom In\",\"icon\":\"plus\",\"disabled\":!_vm.canZoomIn || _vm.disabled},on:{\"click\":function($event){return _vm.zoomClick(+_vm.delta)}}}),(_vm.reset)?_c('b-button',{attrs:{\"variant\":\"outline-secondary\",\"disabled\":_vm.disabled},on:{\"click\":_vm.onReset}},[_vm._v(\"Reset\")]):_vm._e()],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('b-button',_vm._g({attrs:{\"variant\":\"outline-secondary\",\"title\":_vm.title,\"disabled\":_vm.disabled,\"pressed\":_vm.pressed}},_vm.$listeners),[(_vm.icon)?_c('font-awesome-icon',{attrs:{\"icon\":_vm.icon}}):_vm._e(),_c('span',{class:_vm.classes},[_vm._v(_vm._s(_vm.title))])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Vue } from 'vue-property-decorator';\r\n\r\n@Component({\r\n name: 'toolbar-icon-button'\r\n})\r\nexport default class ToolbarIconButton extends Vue {\r\n @Prop() public title!: string;\r\n @Prop() public icon!: string;\r\n @Prop( { default: false }) public disabled!: boolean;\r\n @Prop( { default: false} ) public showText!: boolean;\r\n @Prop( { default: undefined} ) public pressed?: boolean;\r\n @Prop( { default: 'xl' }) public textBreakPoint!: string;\r\n\r\n protected get button() {\r\n return this.$refs.button;\r\n }\r\n\r\n protected get classes() {\r\n const classes = ['button-text'];\r\n if (!this.showText) {\r\n classes.push('d-none');\r\n } else {\r\n if (this.textBreakPoint !== 'xs') {\r\n classes.push('d-none');\r\n classes.push(`d-${this.textBreakPoint}-inline`);\r\n }\r\n }\r\n\r\n return classes;\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./toolbar-icon-button.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./toolbar-icon-button.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./toolbar-icon-button.vue?vue&type=template&id=76744e82&scoped=true&\"\nimport script from \"./toolbar-icon-button.vue?vue&type=script&lang=ts&\"\nexport * from \"./toolbar-icon-button.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./toolbar-icon-button.vue?vue&type=style&index=0&id=76744e82&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"76744e82\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"toolbox\",class:_vm.classes},[_c('div',{staticClass:\"main-content\"},[_vm._t(\"default\")],2),_c('div',{staticClass:\"description\"},[_vm._v(\" \"+_vm._s(_vm.subject || '')+\" \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Vue } from 'vue-property-decorator';\r\n\r\nexport type breakpoints = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\n@Component({\r\n name: 'toolbox'\r\n})\r\nexport default class Toolbox extends Vue {\r\n @Prop({ default: 'xs' }) public hideBelow!: string;\r\n @Prop({ default: '' }) public subject!: string;\r\n @Prop({ default: false }) public noMargins!: boolean;\r\n @Prop({ default: false}) public disabled!: boolean;\r\n\r\n public get classes() {\r\n let classes: string[] = [];\r\n if (this.hideBelow === 'xs') {\r\n classes = ['d-block'];\r\n } else {\r\n classes = ['d-none', `d-${this.hideBelow}-block`];\r\n }\r\n\r\n if (this.noMargins) {\r\n classes.push('no-margins');\r\n }\r\n\r\n return classes;\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./toolbox.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./toolbox.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./toolbox.vue?vue&type=template&id=1fd19b48&scoped=true&\"\nimport script from \"./toolbox.vue?vue&type=script&lang=ts&\"\nexport * from \"./toolbox.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./toolbox.vue?vue&type=style&index=0&id=1fd19b48&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1fd19b48\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Model, Vue } from 'vue-property-decorator';\r\nimport ToolbarIconButton from './toolbar-icon-button.vue';\r\nimport Toolbox from './toolbox.vue';\r\n\r\n@Component({\r\n name: 'zoom-toolbox',\r\n components: {\r\n 'toolbar-icon-button': ToolbarIconButton,\r\n 'toolbox': Toolbox,\r\n }\r\n})\r\nexport default class ZoomToolbox extends Vue {\r\n @Model('zoomChanged', { type: Number }) private paramsZoom!: number;\r\n\r\n @Prop({ default: 0.05 }) public delta!: number;\r\n @Prop({ default: false }) public reset!: boolean;\r\n @Prop({ default: false}) public disabled!: boolean;\r\n\r\n @Prop({ default: 'Zoom'}) public subject!: string;\r\n\r\n private localZoom: number = this.paramsZoom || 0.1;\r\n\r\n // TODO: delete this\r\n // public mounted() {\r\n // setTimeout(() => {\r\n // this.$emit('zoomChanged', 0.1);\r\n // }, 100);\r\n // setTimeout(() => {\r\n // this.$emit('zoomChanged', 0.11);\r\n // }, 150);\r\n // setTimeout(() => {\r\n // this.$emit('zoomChanged', 0.1);\r\n // }, 200);\r\n // }\r\n\r\n private get zoom(): number {\r\n return Math.round(this.paramsZoom * 100);\r\n }\r\n\r\n private set zoom(val: number) {\r\n if (!val) {\r\n val = 10;\r\n }\r\n\r\n this.localZoom = parseFloat(val.toString()) / 100;\r\n\r\n this.onZoomChanged(this.localZoom);\r\n }\r\n\r\n private zoomClick(percent: number) {\r\n if (this.paramsZoom + percent > 1) {\r\n this.localZoom = 1;\r\n } else if (this.paramsZoom + percent < 0) {\r\n this.localZoom = 0.01;\r\n } else {\r\n this.localZoom = this.paramsZoom + percent;\r\n }\r\n\r\n this.onZoomChanged(this.localZoom);\r\n }\r\n\r\n private onZoomChanged(val: number) {\r\n this.$emit('zoomChanged', val);\r\n }\r\n\r\n private get canZoomIn(): boolean {\r\n return this.paramsZoom < 1;\r\n // return this.paramsZoom < 1 && Math.round(this.paramsZoom * 100) + this.delta <= 100;\r\n }\r\n\r\n private get canZoomOut(): boolean {\r\n return this.paramsZoom > 0;\r\n // return this.paramsZoom > 0 && Math.round(this.paramsZoom * 100) - this.delta > 0;\r\n }\r\n\r\n protected onReset() {\r\n this.zoom = 100;\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./zoom-toolbox.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./zoom-toolbox.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./zoom-toolbox.vue?vue&type=template&id=7b81375e&scoped=true&\"\nimport script from \"./zoom-toolbox.vue?vue&type=script&lang=ts&\"\nexport * from \"./zoom-toolbox.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./zoom-toolbox.vue?vue&type=style&index=0&id=7b81375e&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7b81375e\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('toolbox',{attrs:{\"subject\":_vm.subject}},[_c('b-button-group',[_c('rotate-button',{staticClass:\"mr-0\",attrs:{\"direction\":\"left\"},on:{\"click\":function($event){return _vm.onRotateClick(-_vm.delta)}}}),_c('b-form-input',{staticClass:\"input-lg no-arrows\",attrs:{\"disabled\":!_vm.enableText,\"type\":\"number\"},model:{value:(_vm.rotationAngle),callback:function ($$v) {_vm.rotationAngle=$$v},expression:\"rotationAngle\"}}),_c('rotate-button',{attrs:{\"direction\":\"right\"},on:{\"click\":function($event){return _vm.onRotateClick(+_vm.delta)}}})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('toolbar-icon-button',{attrs:{\"title\":_vm.title,\"icon\":_vm.icon},on:{\"mousedown\":_vm.onMouseDown,\"mouseup\":_vm.onMouseUp,\"mouseleave\":_vm.onMouseLeave}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Model, Vue, Emit } from 'vue-property-decorator';\r\nimport ToolbarIconButton from './toolbar-icon-button.vue';\r\n\r\nexport type Direction = 'left' | 'right';\r\n\r\n@Component({\r\n name: 'repeat-button',\r\n components: { 'toolbar-icon-button': ToolbarIconButton }\r\n})\r\nexport default class RepeatButton extends Vue {\r\n @Prop() private direction!: Direction;\r\n @Prop({ default: 300 }) private repeatDelay!: number;\r\n private pressed = false;\r\n private timer?: number;\r\n\r\n protected mounted() {\r\n this.pressed = false;\r\n this.timer = undefined;\r\n }\r\n\r\n get title(): string {\r\n if (this.direction === 'left') {\r\n return this.$t('misc.leftRotate').toString();\r\n } else {\r\n return this.$t('misc.rightRotate').toString();\r\n }\r\n }\r\n\r\n get icon(): string {\r\n if (this.direction === 'left') {\r\n return 'undo';\r\n } else {\r\n return 'redo';\r\n }\r\n }\r\n\r\n protected onMouseDown() {\r\n if (this.pressed) {\r\n console.warn('Ignoring handle mouse-down while pressed');\r\n return;\r\n }\r\n\r\n this.pressed = true;\r\n this.timer = window.setInterval(() => this.emitClick(), this.repeatDelay);\r\n this.emitClick();\r\n }\r\n\r\n protected onMouseUp() {\r\n this.stopRepeat();\r\n }\r\n\r\n protected onMouseLeave() {\r\n this.stopRepeat();\r\n }\r\n\r\n protected stopRepeat() {\r\n if (!this.pressed) {\r\n // This sometimes happens when the browser window is brought to focus - the mouse up event is fired\r\n // without a mouse down. No need to do anything here.\r\n return;\r\n }\r\n\r\n this.pressed = false;\r\n window.clearInterval(this.timer);\r\n this.timer = undefined;\r\n }\r\n\r\n @Emit('click')\r\n private emitClick() {\r\n // Emits the click event, with no arguments at all\r\n }\r\n\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./rotate-button.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./rotate-button.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./rotate-button.vue?vue&type=template&id=5f7a71ee&\"\nimport script from \"./rotate-button.vue?vue&type=script&lang=ts&\"\nexport * from \"./rotate-button.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Prop, Model, Vue } from 'vue-property-decorator';\nimport RotateButton from './rotate-button.vue';\nimport Toolbox from './toolbox.vue';\n\n@Component({\n name: 'rotation-toolbox',\n components: {'rotate-button': RotateButton, toolbox: Toolbox},\n})\nexport default class RotationToolbox extends Vue {\n @Model('rotationAngleChanged', { type: Number })\n private paramsRotationAngle!: number;\n @Prop({ default: 1 }) private delta!: number;\n @Prop() private enableText!: number;\n @Prop({ default: 'Rotate Artefact'}) public subject!: string;\n\n private localRotateAngle: number = this.paramsRotationAngle || 0;\n\n // angle = ((angle % 360) + 360) % 360;\n\n public onRotateClick(degrees: number) {\n this.localRotateAngle =\n (((this.paramsRotationAngle + degrees) % 360) + 360) % 360;\n this.onRotationAngleChanged(this.localRotateAngle);\n }\n\n private onRotationAngleChanged(val: number) {\n this.$emit('rotationAngleChanged', val);\n }\n\n public get rotationAngle(): number {\n return ((this.paramsRotationAngle % 360) + 360) % 360;\n }\n\n public set rotationAngle(val: number) {\n if (!val) {\n val = 0;\n }\n this.localRotateAngle = ((+val % 360) + 360) % 360;\n this.onRotationAngleChanged(this.localRotateAngle);\n }\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./rotation-toolbox.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./rotation-toolbox.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./rotation-toolbox.vue?vue&type=template&id=c2e1679e&scoped=true&\"\nimport script from \"./rotation-toolbox.vue?vue&type=script&lang=ts&\"\nexport * from \"./rotation-toolbox.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./rotation-toolbox.vue?vue&type=style&index=0&id=c2e1679e&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"c2e1679e\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('b-row',{staticClass:\"toolbar border-bottom\",attrs:{\"no-gutters\":_vm.noGutters}},[_vm._t(\"default\")],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\r\nimport { Component, Prop, Vue } from 'vue-property-decorator';\r\n\r\n@Component({\r\n name: 'toolbar',\r\n})\r\nexport default class Toolbar extends Vue {\r\n @Prop({default: false}) public noGutters!: boolean;\r\n\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./toolbar.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./toolbar.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./toolbar.vue?vue&type=template&id=6d1b5010&scoped=true&\"\nimport script from \"./toolbar.vue?vue&type=script&lang=ts&\"\nexport * from \"./toolbar.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./toolbar.vue?vue&type=style&index=0&id=6d1b5010&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6d1b5010\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('toolbox',{attrs:{\"subject\":_vm.subject}},[_c('toolbar-icon-button',{attrs:{\"title\":_vm.$t('home.undo'),\"icon\":\"undo\",\"disabled\":!_vm.canUndo},on:{\"click\":_vm.onUndo}}),_c('toolbar-icon-button',{attrs:{\"title\":_vm.$t('home.redo'),\"icon\":\"redo\",\"disabled\":!_vm.canRedo},on:{\"click\":_vm.onRedo}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\nimport Vue from 'vue';\nimport { Component, Prop } from 'vue-property-decorator';\nimport ToolbarIconButton from './toolbar-icon-button.vue';\nimport Toolbox from './toolbox.vue';\n\n@Component({\n name: 'undo-redo-toolbox',\n components: {\n toolbox: Toolbox,\n 'toolbar-icon-button': ToolbarIconButton\n }\n})\nexport default class UndoRedoToolbox extends Vue {\n @Prop({ default: 'Undo/redo'}) public subject!: string;\n\n protected get canUndo() {\n return this.$state.operationsManager?.canUndo || false;\n }\n\n protected get canRedo() {\n return this.$state.operationsManager?.canRedo || false;\n }\n\n protected onUndo() {\n this.$state.operationsManager!.undo();\n }\n\n protected onRedo() {\n this.$state.operationsManager!.redo();\n }\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./undo-redo-toolbox.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./undo-redo-toolbox.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./undo-redo-toolbox.vue?vue&type=template&id=138566b5&\"\nimport script from \"./undo-redo-toolbox.vue?vue&type=script&lang=ts&\"\nexport * from \"./undo-redo-toolbox.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('toolbox',[(!_vm.variantEditions.length)?_c('b-button',{attrs:{\"variant\":\"outline-secondary\"},on:{\"click\":function($event){return _vm.openCopyEdtion()}}},[_vm._v(\" \"+_vm._s(_vm.$t('misc.copy'))+\" \")]):_vm._e(),(_vm.variantEditions.length)?_c('b-dropdown',{attrs:{\"text\":_vm.$t('misc.copy')}},[_vm._l((_vm.variantEditions),function(edition){return _c('b-dropdown-item-button',{key:edition.id},[_c('router-link',{attrs:{\"to\":{ path: (\"/editions/\" + (edition.id) + \"/artefacts\") }}},[_vm._v(\" \"+_vm._s(edition.name)+\" \")])],1)}),_c('b-dropdown-divider'),_c('b-dropdown-item-button',{on:{\"click\":function($event){return _vm.openCopyEdtion()}}},[_vm._v(_vm._s(_vm.$t('misc.anotherCopy')))])],2):_vm._e(),_c('copy-edition-modal')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { EditionInfo } from '@/models/edition';\r\nimport EditionService from '@/services/edition';\r\nimport CopyEditionModal from '@/views/home/components/copy-edition-modal.vue';\r\nimport { Component, Prop, Vue } from 'vue-property-decorator';\r\nimport Toolbox from './toolbox.vue';\r\n\r\n@Component({\r\n name: 'copy-edition-toolbox',\r\n components: {\r\n 'copy-edition-modal': CopyEditionModal,\r\n toolbox: Toolbox,\r\n },\r\n})\r\nexport default class CopyEditionToolbox extends Vue {\r\n public editionService: EditionService = new EditionService();\r\n public variantEditions: EditionInfo[] = [];\r\n\r\n private get currentEdition(): EditionInfo | null {\r\n return this.$state.editions.current;\r\n }\r\n\r\n private openCopyEdtion() {\r\n // this.$root.$emit('bv::show::modal', 'copy-edition-modal');\r\n this.$root.$bvModal.show('copy-edition-modal');\r\n }\r\n\r\n private async mounted() {\r\n if (this.currentEdition) {\r\n const variantEditionList =\r\n await this.editionService.getManuscriptEditions(\r\n this.currentEdition.manuscriptId\r\n );\r\n this.variantEditions = variantEditionList.editions\r\n .flatMap((x) => x[0])\r\n .filter((e) => e && !e.isPublic && e.id !== this.currentEdition?.id)\r\n .map((e) => new EditionInfo(e));\r\n }\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./copy-edition-toolbox.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./copy-edition-toolbox.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./copy-edition-toolbox.vue?vue&type=template&id=7049599a&scoped=true&\"\nimport script from \"./copy-edition-toolbox.vue?vue&type=script&lang=ts&\"\nexport * from \"./copy-edition-toolbox.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./copy-edition-toolbox.vue?vue&type=style&index=0&id=7049599a&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7049599a\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Emit, Model, Prop, Vue } from 'vue-property-decorator';\n\nimport { ScrollEditorState } from '@/state/scroll-editor';\nimport ZoomToolbox from '@/components/toolbars/zoom-toolbox.vue';\n\nimport { EditionManuscriptMetricsDTO } from '@/dtos/sqe-dtos';\nimport {\n ScrollEditorParams,\n ScrollEditorOpMode,\n} from '../artefact-editor/types';\nimport { Placement } from '@/utils/Placement';\nimport { Artefact } from '@/models/artefact';\nimport { Point } from '../../utils/helpers';\nimport { ScrollEditorMode } from '@/state/scroll-editor';\nimport {\n ArtefactPlacementOperation,\n ArtefactPlacementOperationType,\n GroupPlacementOperation,\n ScrollEditorOperation,\n} from './operations';\nimport RotationToolbox from '@/components/toolbars/rotation-toolbox.vue';\nimport Toolbox from '@/components/toolbars/toolbox.vue';\nimport Toolbar from '@/components/toolbars/toolbar.vue';\nimport ToolbarIconButton from '@/components/toolbars/toolbar-icon-button.vue';\nimport UndoRedoToolbox from '@/components/toolbars/undo-redo-toolbox.vue';\nimport CopyEditionToolbox from '@/components/toolbars/copy-edition-toolbox.vue';\n\n@Component({\n name: 'scroll-top-toolbar',\n components: {\n 'zoom-toolbox': ZoomToolbox,\n 'rotation-toolbox': RotationToolbox,\n toolbox: Toolbox,\n toolbar: Toolbar,\n 'toolbar-icon-button': ToolbarIconButton,\n 'undo-redo-toolbox': UndoRedoToolbox,\n 'copy-edition-toolbox' : CopyEditionToolbox\n },\n})\nexport default class ScrollTopToolbar extends Vue {\n @Model('zoomChangedGlobal', { type: Number }) private paramsZoom!: number;\n\n @Emit()\n private newOperation(op: ScrollEditorOperation) {\n return op;\n }\n\n protected localZoom: number = this.paramsZoom || 0.1;\n\n protected onZoomChanged(val: number) {\n this.localZoom = val;\n this.$emit('zoomChangedGlobal', val);\n }\n\n protected get inTextMode(): boolean {\n return 'text' === this.scrollEditorState.mode;\n }\n\n // Computed properties are by default getter-only,\n // but we also provide a dummy setter to avoid this warning:\n // Computed property \"inTextMode\" was assigned to but it has no setter\n protected set inTextMode(val: boolean) {\n const param = 1;\n }\n\n protected get inMaterialMode(): boolean {\n return 'material' === this.scrollEditorState.mode;\n }\n\n // Computed properties are by default getter-only,\n // but we also provide a dummy setter to avoid this warning:\n // Computed property \"inMaterialMode\" was assigned to but it has no setter\n protected set inMaterialMode(val: boolean) {\n const param = 1;\n }\n\n protected get textVariant(): string {\n return 'text' === this.scrollEditorState.mode\n ? 'info'\n : 'outline-secondary';\n }\n\n protected get materialVariant(): string {\n return 'material' === this.scrollEditorState.mode\n ? 'info'\n : 'outline-secondary';\n }\n\n protected get mode(): ScrollEditorOpMode {\n return this.params!.mode;\n }\n\n public onKeyDown(event: KeyboardEvent) {\n switch (event.key) {\n case 'ArrowLeft':\n this.dragArtefact(-1, 0);\n break;\n case 'ArrowRight':\n this.dragArtefact(1, 0);\n break;\n case 'ArrowUp':\n this.dragArtefact(0, -1);\n break;\n case 'ArrowDown':\n this.dragArtefact(0, 1);\n break;\n case '<':\n case ',':\n this.rotateGroupArtefact(-1);\n break;\n case '>':\n case '.':\n this.rotateGroupArtefact(1);\n break;\n case '+':\n case '=':\n this.zoomArtefact(1);\n break;\n case '-':\n this.zoomArtefact(-1);\n break;\n }\n }\n\n private get edition() {\n return this.$state.editions.current! || {};\n }\n\n private get scrollEditorState(): ScrollEditorState {\n return this.$state.scrollEditor;\n }\n\n private get params(): ScrollEditorParams {\n return this.scrollEditorState.params || new ScrollEditorParams();\n }\n\n protected onTextMode(value: ScrollEditorMode) {\n this.scrollEditorState.mode = value;\n }\n\n private get artefacts() {\n return this.$state.artefacts.items || [];\n }\n\n private get selectedArtefacts() {\n return this.scrollEditorState.selectedArtefacts;\n }\n\n protected get isMirroredPressed() {\n return this.selectedArtefacts.every((a) => a.placement.mirrored);\n }\n\n protected get isToolbarDisabled() {\n return !this.selectedArtefacts || !this.selectedArtefacts.length;\n }\n\n protected get selectedArtefact() {\n return this.scrollEditorState.selectedArtefact;\n }\n\n protected get selectedGroup() {\n return this.scrollEditorState.selectedGroup;\n }\n\n public mirrorArtefact() {\n const operations: ArtefactPlacementOperation[] = [];\n let operation: ScrollEditorOperation;\n\n if (this.selectedArtefact) {\n const newPlacement = this.selectedArtefact.placement.clone();\n\n newPlacement.mirrored = !newPlacement.mirrored;\n operation = this.createOperation(\n // 'mirror',\n 'mirror',\n newPlacement,\n this.selectedArtefact\n );\n operation.needsSaving = true;\n }\n\n if (this.selectedGroup) {\n this.selectedArtefacts.forEach((art) => {\n const newPlacement = art.placement.clone();\n newPlacement.mirrored = !newPlacement.mirrored;\n operations.push(\n this.createOperation('mirror', newPlacement, art)\n );\n });\n operation = new GroupPlacementOperation(\n this.selectedGroup.groupId,\n operations,\n 'placement'\n );\n }\n\n this.newOperation(operation!); // We know that there is a selection - otherwise the handler is not called\n }\n\n public getGroupCenter(): Point {\n const minX = Math.min(\n ...this.selectedArtefacts.map((art) => art.placement.translate.x!)\n );\n const minY = Math.min(\n ...this.selectedArtefacts.map((art) => art.placement.translate.y!)\n );\n const maxX = Math.max(\n ...this.selectedArtefacts.map(\n (art) => art.placement.translate.x! + art.boundingBox.width\n )\n );\n const maxY = Math.max(\n ...this.selectedArtefacts.map(\n (art) => art.placement.translate.y! + art.boundingBox.height\n )\n );\n\n const x = (maxX - minX) / 2 + minX;\n const y = (maxY - minY) / 2 + minY;\n\n return { x, y };\n }\n\n public getArtefactCenter(art: Artefact): Point {\n // The artefact's center is the translate (x,y) + the bounding box's center\n const x = art.placement.translate.x + art.boundingBox.width / 2;\n const y = art.placement.translate.y + art.boundingBox.height / 2;\n\n return { x, y };\n }\n\n public dragArtefact(dirX: number, dirY: number) {\n const operations: ScrollEditorOperation[] = [];\n let operation: ScrollEditorOperation = {} as ScrollEditorOperation;\n if (this.selectedArtefact) {\n const placement = this.selectedArtefact.placement.clone();\n const jump =\n parseInt(this.params.move.toString()) * this.edition.ppm;\n placement.translate.x += jump * dirX;\n placement.translate.y += jump * dirY;\n operation = this.createOperation(\n 'translate',\n placement,\n this.selectedArtefact\n );\n }\n if (this.selectedGroup) {\n this.selectedArtefacts.forEach((art) => {\n const placement = art.placement.clone();\n const jump =\n parseInt(this.params.move.toString()) * this.edition.ppm;\n placement.translate.x += jump * dirX;\n placement.translate.y += jump * dirY;\n operations.push(\n this.createOperation('translate', placement, art)\n );\n });\n operation = new GroupPlacementOperation(\n this.selectedGroup.groupId,\n operations\n );\n }\n this.newOperation(operation);\n }\n\n public translateArtefactAfterGroupRotation(\n art: Artefact,\n groupCenterPoint: Point,\n deltaAngleRadians: number\n ): Point {\n const sin = Math.sin(deltaAngleRadians);\n const cos = Math.cos(deltaAngleRadians);\n const artefactCenterPoint = this.getArtefactCenter(art);\n\n const xFromOrigin = artefactCenterPoint.x - groupCenterPoint.x;\n const yFromOrigin = artefactCenterPoint.y - groupCenterPoint.y;\n\n const newMidXArt = cos * xFromOrigin - sin * yFromOrigin;\n const newMidYArt = cos * yFromOrigin + sin * xFromOrigin;\n\n const deltaX = newMidXArt - xFromOrigin;\n const deltaY = newMidYArt - yFromOrigin;\n\n return {\n x: art.placement.translate.x! + deltaX,\n y: art.placement.translate.y! + deltaY,\n } as Point;\n }\n\n public zoomArtefact(direction: number) {\n let newScale: number;\n const operations: ScrollEditorOperation[] = [];\n let operation: ScrollEditorOperation = {} as ScrollEditorOperation;\n if (this.selectedArtefact) {\n const trans = this.selectedArtefact.placement.clone();\n if (direction === 1) {\n newScale = trans.scale + this.params.scale / 100;\n } else {\n newScale = trans.scale - this.params.scale / 100;\n }\n if (!trans.scale) {\n trans.scale = 1;\n }\n trans.scale = newScale;\n trans.scale = +trans.scale.toFixed(4);\n operation = this.createOperation(\n 'scale',\n trans,\n this.selectedArtefact\n );\n }\n if (this.selectedGroup) {\n this.selectedArtefacts.forEach((art) => {\n const trans = art.placement.clone();\n if (direction === 1) {\n newScale = trans.scale + this.params.scale / 100;\n } else {\n newScale = trans.scale - this.params.scale / 100;\n }\n if (!trans.scale) {\n trans.scale = 1;\n }\n trans.scale = newScale;\n trans.scale = +trans.scale.toFixed(4);\n operations.push(this.createOperation('scale', trans, art));\n });\n\n operation = new GroupPlacementOperation(\n this.selectedGroup.groupId,\n operations\n );\n }\n this.newOperation(operation);\n }\n\n public rotateGroupArtefact(direction: number) {\n const operations: ScrollEditorOperation[] = [];\n let operation: ScrollEditorOperation = {} as ScrollEditorOperation;\n const groupCenterPoint = this.getGroupCenter();\n\n const deltaAngleDegrees = direction * this.params.rotate;\n const deltaAngleRadians = deltaAngleDegrees * (Math.PI / 180);\n if (this.selectedArtefact) {\n const newRotate = this.rotateArtefact(\n this.selectedArtefact,\n deltaAngleDegrees\n );\n const newPlacement = this.selectedArtefact.placement.clone();\n newPlacement.rotate = newRotate;\n operation = this.createOperation(\n 'rotate',\n newPlacement,\n this.selectedArtefact\n );\n }\n if (this.selectedGroup) {\n this.selectedArtefacts.forEach((art) => {\n // Rotate each artefact by deltaAngleDegrees\n const newRotate = this.rotateArtefact(art, deltaAngleDegrees);\n\n // Translate each artefact\n const newTranslate = this.translateArtefactAfterGroupRotation(\n art,\n groupCenterPoint,\n deltaAngleRadians\n );\n\n const newPlacement = art.placement.clone();\n newPlacement.rotate = newRotate;\n newPlacement.translate = newTranslate;\n\n operations.push(\n this.createOperation('rotate', newPlacement, art)\n );\n });\n operation = new GroupPlacementOperation(\n this.selectedGroup.groupId,\n operations\n );\n }\n this.newOperation(operation);\n }\n\n public rotateArtefact(\n artefact: Artefact,\n deltaAngleDegrees: number\n ): number {\n const oldAngle = artefact.placement.rotate!;\n\n const newAngle = oldAngle + deltaAngleDegrees;\n const normalizedAngle = ((newAngle % 360) + 360) % 360;\n return normalizedAngle;\n }\n\n private createOperation(\n opType: ArtefactPlacementOperationType,\n newPlacement: Placement,\n artefact: Artefact,\n newIsPlaced: boolean = true\n ): ArtefactPlacementOperation {\n const op = new ArtefactPlacementOperation(\n artefact.id,\n opType,\n artefact.placement,\n newPlacement,\n artefact.isPlaced,\n newIsPlaced\n );\n artefact.placement = newPlacement;\n\n return op;\n }\n\n public resetZoom() {\n const operations: ScrollEditorOperation[] = [];\n let operation: ScrollEditorOperation = {} as ScrollEditorOperation;\n if (this.selectedArtefact) {\n const trans = this.selectedArtefact.placement.clone();\n trans.scale = 1;\n operation = this.createOperation(\n 'scale',\n trans,\n this.selectedArtefact\n );\n }\n if (this.selectedGroup) {\n this.selectedArtefacts.forEach((art) => {\n const trans = art.placement.clone();\n trans.scale = 1;\n operations.push(this.createOperation('scale', trans, art));\n });\n operation = new GroupPlacementOperation(\n this.selectedGroup.groupId,\n operations\n );\n }\n this.newOperation(operation);\n }\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./scroll-top-toolbar.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./scroll-top-toolbar.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./scroll-top-toolbar.vue?vue&type=template&id=62d09e64&scoped=true&\"\nimport script from \"./scroll-top-toolbar.vue?vue&type=script&lang=ts&\"\nexport * from \"./scroll-top-toolbar.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./scroll-top-toolbar.vue?vue&type=style&index=0&id=62d09e64&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"62d09e64\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('b-container',{staticClass:\"side-toolbar ml-0 mr-0 pl-1 pr-1\",attrs:{\"no-gutters\":\"\"}},[(_vm.textFragment)?_c('text-fragment',{staticClass:\"mb-3\",attrs:{\"fragment\":_vm.textFragment,\"id\":\"text-box\",\"direction\":\"rtl\"}}):_vm._e(),(!_vm.showEditReconTextBar)?_c('sign-attribute-pane'):_vm._e(),_c('edit-sign-modal'),(_vm.showEditReconTextBar)?_c('edit-virtual-artefact-text-pane',{on:{\"close\":function($event){return _vm.onVirtualTextClose($event)}}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"text-fragment\",attrs:{\"direction\":\"rtl\"}},[_c('div',{staticClass:\"inner-box\"},_vm._l((_vm.fragment.lines),function(line){return _c('text-line',{key:line.lineId,staticClass:\"d-flex w-100\",style:({fontSize: _vm.fontSize + 'px'}),attrs:{\"line\":line,\"direction\":\"rtl\"}})}),1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"text-line\",attrs:{\"dir\":_vm.direction}},[_c('span',{staticClass:\"line-name\",attrs:{\"id\":'popover-line-' + _vm.line.lineId},on:{\"contextmenu\":function($event){return _vm.openLineMenu($event, 'popover-line-' + _vm.line.lineId)}}},[_vm._v(_vm._s(_vm.line.lineName))]),_c('div',{staticClass:\"line-container\",attrs:{\"contenteditable\":_vm.isEditMode,\"tabindex\":\"-1\"},on:{\"input\":function($event){return _vm.lineChange($event)},\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.checkEnter($event)},\"paste\":function($event){return _vm.onPaste($event)}}},[_vm._l((_vm.line.signs),function(sign){return [_c('text-sign',{key:sign.signInterpretations[0].signInterpretationId,attrs:{\"tabindex\":+sign.signInterpretations[0].signInterpretationId,\"withMenu\":true,\"id\":'popover-si-' +\n sign.signInterpretations[0].signInterpretationId,\"sign\":sign}}),_c('span',{key:'edited-' +\n sign.signInterpretations[0].signInterpretationId,staticClass:\"edited\",attrs:{\"tabindex\":+sign.signInterpretations[0].signInterpretationId}})]})],2),_c('b-popover',{attrs:{\"custom-class\":\"popover-sign-body\",\"target\":'popover-line-' + _vm.line.lineId,\"triggers\":\"\"},on:{\"shown\":function($event){return _vm.focusPopover()}}},[_c('div',{ref:\"lineMenu\",staticClass:\"character-popover\",attrs:{\"tabindex\":\"-1\"},on:{\"blur\":function($event){return _vm.closeLineMenu()}}},[_c('ul',[_c('li',[_c('p',{on:{\"click\":function($event){return _vm.openEditLineModal(_vm.line)}}},[_vm._v(\" \"+_vm._s(_vm.$t('misc.editLine'))+\" \")])]),_c('li',[_c('p',{on:{\"click\":function($event){return _vm.addLineBefore(_vm.line)}}},[_vm._v(\" \"+_vm._s(_vm.$t('misc.addLineBefore'))+\" \")])]),_c('li',[_c('p',{on:{\"click\":function($event){return _vm.addLineAfter(_vm.line)}}},[_vm._v(\" \"+_vm._s(_vm.$t('misc.addLineAfter'))+\" \")])]),_c('li',[_c('p',{on:{\"click\":function($event){return _vm.deleteLine(_vm.line)}}},[_vm._v(\" \"+_vm._s(_vm.$t('misc.deleteLine'))+\" \")])]),_c('li',[_c('p',{on:{\"click\":function($event){return _vm.showVariants()}}},[_vm._v(\"Show Variant Editions\")])]),_c('li',[_c('p',{on:{\"click\":function($event){return _vm.showParallels()}}},[_vm._v(\"Show QD Parallels\")])])])])]),_c('b-modal',{attrs:{\"id\":(\"parallel-line-\" + (_vm.line.lineId)),\"hide-footer\":\"\",\"title\":\"Parallel Texts from QD\"}},[_c('b',{staticClass:\"line-name\"},[_vm._v(\"Line \"+_vm._s(_vm.line.lineName))]),_c('div',{staticClass:\"text-line\",attrs:{\"dir\":_vm.direction}},_vm._l((_vm.line.signs),function(sign){return _c('text-sign',{key:sign.signInterpretations[0].signInterpretationId,attrs:{\"withMenu\":true,\"id\":'popover-si-' +\n sign.signInterpretations[0].signInterpretationId,\"sign\":sign}})}),1),_c('hr'),(_vm.parallels !== null && _vm.parallels.parallels.length > 0)?_c('div',_vm._l((_vm.parallels.parallels),function(parallel){return _c('div',[_c('b',[_vm._v(_vm._s(parallel.qwbTextReference))]),_c('p',_vm._l((parallel.parallelWords),function(word){return _c('span',{staticClass:\"qwb-parallel-word\"},[_vm._v(_vm._s(word.word))])}),0)])}),0):_vm._e(),(_vm.parallels === null || _vm.parallels.parallels.length === 0)?_c('div',[_c('p',[_vm._v(\"No parallel text found in the QD database.\")])]):_vm._e()]),_c('b-modal',{attrs:{\"id\":(\"variant-line-\" + (_vm.line.lineId)),\"hide-footer\":\"\",\"title\":\"Variant Edition Transcriptions\"}},[_c('b',{staticClass:\"line-name\"},[_vm._v(\"Line \"+_vm._s(_vm.line.lineName))]),_c('div',{staticClass:\"text-line\",attrs:{\"dir\":_vm.direction}},_vm._l((_vm.line.signs),function(sign){return _c('text-sign',{key:sign.signInterpretations[0].signInterpretationId,attrs:{\"withMenu\":true,\"id\":'popover-si-' +\n sign.signInterpretations[0].signInterpretationId,\"sign\":sign}})}),1),_c('hr'),(_vm.variants.length > 0)?_c('div',_vm._l((_vm.variants),function(variant){return _c('div',[_c('b',[_vm._v(_vm._s(variant.name)+\", Line \"+_vm._s(variant.lineName))]),_c('div',{attrs:{\"dir\":_vm.direction}},_vm._l((variant.signs),function(sign){return _c('text-sign',{key:(\"ed-\" + (variant.editionId) + \"-line-\" + (sign.signInterpretations[0].signInterpretationId)),attrs:{\"withMenu\":false,\"sign\":sign}},[_vm._v(\" >\")])}),1)])}),0):_vm._e(),(_vm.variants.length === 0)?_c('div',[_c('p',[_vm._v(\"There are no other editions of this manuscript.\")])]):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{attrs:{\"contenteditable\":\"true\"}},[_c('span',{staticClass:\"text-sign\",class:[\n { selected: _vm.isSelected,notSelected:!_vm.isSelected, highlighted: _vm.isHighlighted },\n _vm.cssStrings ],domProps:{\"innerHTML\":_vm._s(_vm.si.htmlCharacter)},on:{\"click\":function($event){return _vm.onSignInterpretationClicked($event)},\"contextmenu\":function($event){return _vm.openSignMenu($event, 'popover-si-' + _vm.si.signInterpretationId)}}}),_c('b-modal',{attrs:{\"id\":(\"qwb-word-\" + (_vm.si.signInterpretationId)),\"hide-footer\":\"\",\"title\":\"Variant Readings from QD\"}},[(_vm.qwbVariants === null || _vm.qwbVariants.variants.length === 0)?_c('div',[_c('p',[_vm._v(\"No variants found in the QD database.\")])]):_c('div',_vm._l((_vm.qwbVariants.variants),function(variant){return _c('div',[_c('b',[_vm._v(_vm._s(variant.variantReading))]),_c('hr'),_vm._l((variant.bibliography),function(biblio){return _c('div',[_c('p',[_vm._v(\" \"+_vm._s(biblio.shortTitle)+\", \"+_vm._s(biblio.pageReference)+\" \")]),(biblio.comment !== undefined)?_c('p',[_vm._v(\" \"+_vm._s(biblio.comment)+\" \")]):_vm._e()])})],2)}),0),_c('b-button',{attrs:{\"block\":\"\"},on:{\"click\":function($event){return _vm.$bvModal.hide((\"qwb-word-\" + (_vm.si.signInterpretationId)))}}},[_vm._v(\"Close\")])],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { QwbWordVariantListDTO, QwbParallelListDTO, QwbBibliographyEntryDTO } from '@/dtos/sqe-dtos';\r\nimport { CommHelper } from './comm-helper';\r\nimport axios from 'axios';\r\nimport { ApiRoutes } from './api-routes';\r\n\r\nexport default class QwbProxyService {\r\n public async getQwbWordVariants(qwbWordId: number): Promise {\r\n const response = await CommHelper.get(ApiRoutes.qwbWordVariantUrl(qwbWordId));\r\n return response.data;\r\n }\r\n\r\n public async getQwbParallelText(qwbStartWordId: number, qwbEndWordId: number): Promise {\r\n const response = await CommHelper.get(ApiRoutes.qwbParallelTextUrl(qwbStartWordId, qwbEndWordId));\r\n return response.data;\r\n }\r\n\r\n public async getQwbBibliography(qwbBibliographyId: number): Promise {\r\n const response = await CommHelper.get(ApiRoutes.qwbBibliographyUrl(qwbBibliographyId));\r\n return response.data;\r\n }\r\n}\r\n","import { Operation } from '@/utils/operations-manager';\nimport { Artefact } from '@/models/artefact';\nimport { StateManager } from '@/state';\nimport { InterpretationRoi, Sign, SignInterpretation } from '@/models/text';\nimport { InterpretationAttributeDTO, SignDTO, LineDTO } from '@/dtos/sqe-dtos';\nimport Vue from 'vue';\nimport TextService from '@/services/text';\nimport { NumberFormatResult } from 'vue-i18n';\n\nfunction state() {\n return StateManager.instance;\n}\n\nexport type ArtefactEditorOperationType = 'rotate' | 'draw' | 'erase' | 'attr' | 'commentary' | 'sign' | 'editLine' | 'addLine' | 'deleteLine';\n\n\nexport abstract class ArtefactEditorOperation extends Operation {\n public constructor(\n public type: ArtefactEditorOperationType\n ) {\n super();\n }\n\n public abstract uniteWith(op: ArtefactEditorOperation): ArtefactEditorOperation | undefined;\n\n public getId(): number {\n return this.artefact.id;\n }\n public replaceEntityId(newId: number) {\n this.artefact.id = newId;\n }\n\n protected get artefact(): Artefact {\n const artefact = state().artefacts.current;\n if (!artefact) {\n console.error(\"There is no current artefact - can't perform artefact operation!\");\n throw new Error(\"There is no current artefact - can't perform artefact operation!\");\n }\n return artefact;\n }\n}\n\nexport class ArtefactRotateOperation extends ArtefactEditorOperation {\n public prev: number;\n public next: number;\n\n public constructor(\n prev: number,\n next: number\n ) {\n super('rotate');\n this.prev = prev;\n this.next = next;\n }\n\n public uniteWith(op: ArtefactEditorOperation): ArtefactEditorOperation | undefined {\n // Unite operations of the same type\n if (op.type !== 'rotate') {\n return undefined;\n }\n\n if (op.type !== this.type) {\n return undefined;\n }\n\n // Operations are of the same type on the same artefact, we can unite them\n return new ArtefactRotateOperation(\n (op as ArtefactRotateOperation).prev,\n this.next\n );\n }\n\n protected internalUndo(): void {\n state().eventBus.emit('change-artefact-rotation', this.prev);\n // this.artefactEditorInstance.params.rotationAngle = this.prev;\n }\n\n protected internalRedo(): void {\n state().eventBus.emit('change-artefact-rotation', this.next);\n\n // this.artefactEditorInstance.params.rotationAngle = this.next;\n }\n}\nexport class ArtefactEditLineOperation extends ArtefactEditorOperation {\n public checkText: TextService = new TextService();\n public editionId: number;\n public firstChar: number;\n public lastChar: number;\n public next: string;\n public prev: string;\n\n\n public constructor(\n editionId: number,\n firstChar: number,\n lastChar: number,\n next: string,\n prev: string\n\n ) {\n super('editLine');\n this.editionId = editionId;\n this.firstChar = firstChar;\n this.lastChar = lastChar;\n this.prev = prev;\n this.next = next;\n }\n\n public uniteWith(op: ArtefactEditorOperation): ArtefactEditorOperation | undefined {\n // Unite operations of the same type\n if (op.type !== 'editLine') {\n return undefined;\n }\n\n if (op.type !== this.type) {\n return undefined;\n }\n\n // Operations are of the same type on the same artefact, we can unite them\n return new ArtefactEditLineOperation(this.editionId, this.firstChar, this.lastChar,\n this.next,\n (op as ArtefactEditLineOperation).prev\n\n );\n }\n\n protected internalUndo(): void {\n state().eventBus.emit('change-artefact-edit-line', this.prev);\n this.checkText.replaceText(this.editionId, this.firstChar, this.lastChar, this.prev);\n }\n\n protected internalRedo(): void {\n this.checkText.replaceText(this.editionId, this.firstChar, this.lastChar, this.next);\n state().eventBus.emit('change-artefact-edit-line', this.next);\n }\n}\nexport class ArtefactAddLineOperation extends ArtefactEditorOperation {\n public checkText: TextService = new TextService();\n public line: LineDTO;\n public editionId: number;\n public textFragmentId: number;\n public previousLineId: number | undefined;\n public subsequentLineId: number |undefined;\n\n\n public constructor(\n editionId: number,\n line: LineDTO,\n textFragmentId: number,\n previousLineId: number | undefined,\n subsequentLineId: number | undefined\n\n ) {\n super('addLine');\n this.editionId = editionId;\n this.line = line;\n this.textFragmentId = textFragmentId;\n this.previousLineId = previousLineId;\n this.subsequentLineId = subsequentLineId;\n }\n\n public uniteWith(op: ArtefactEditorOperation): ArtefactEditorOperation | undefined {\n // Unite operations of the same type\n if (op.type !== 'addLine') {\n return undefined;\n }\n\n if (op.type !== this.type) {\n return undefined;\n }\n\n // Operations are of the same type on the same artefact, we can unite them\n return new ArtefactAddLineOperation(this.editionId,this.line, this.textFragmentId, this.previousLineId,\n this.subsequentLineId,\n );\n }\n protected internalUndo(): void {\n // state().eventBus.emit('change-artefact-add-line', this.prev);\n this.checkText.deleteLine(this.line.editorId, this.line.lineId);\n }\n\n protected internalRedo(): void {\n this.checkText.createLine(this.editionId ,this.textFragmentId,this.line, this.previousLineId, this.subsequentLineId);\n // state().eventBus.emit('change-artefact-add-line', this.next);\n }\n}\nexport class ArtefactDeleteLineOperation extends ArtefactEditorOperation {\n public checkText: TextService = new TextService();\n public line: LineDTO;\n public textFragmentId: number;\n public editionId: number;\n public previousLineId: number ;\n public subsequentLineId: number;\n\n\n public constructor(\n editionId: number,\n line: LineDTO,\n textFragmentId: number,\n previousLineId: number ,\n subsequentLineId: number\n\n ) {\n super('deleteLine');\n this.line = line;\n this.editionId = editionId;\n this.textFragmentId = textFragmentId;\n this.previousLineId = previousLineId;\n this.subsequentLineId = subsequentLineId;\n }\n\n public uniteWith(op: ArtefactEditorOperation): ArtefactEditorOperation | undefined {\n // Unite operations of the same type\n if (op.type !== 'deleteLine') {\n return undefined;\n }\n\n if (op.type !== this.type) {\n return undefined;\n }\n\n // Operations are of the same type on the same artefact, we can unite them\n return new ArtefactDeleteLineOperation(this.editionId,this.line, this.textFragmentId, this.previousLineId,\n this.subsequentLineId,\n );\n }\n\n protected internalUndo(): void {\n // state().eventBus.emit('change-artefact-add-line', this.prev);\n this.checkText.createLine(this.editionId, this.textFragmentId,this.line, this.previousLineId, this.subsequentLineId);\n }\n\n protected internalRedo(): void {\n this.checkText.deleteLine(this.line.editorId, this.line.lineId);\n // state().eventBus.emit('change-artefact-add-line', this.next);\n }\n}\n// export class ArtefactAddLineOperation extends ArtefactEditorOperation {\n// public checkText: TextService = new TextService();\n// //new line inside sign \n// public editionId: number;\n// public next: string;\n// public prev: string;\n// public constructor(\n// editionId: number,\n// next: string,\n// prev: string\n// )\n// {\n// super('addLine');\n// this.editionId = editionId;\n// this.prev = prev;\n// this.next = next;\n// }\n// public uniteWith(op: ArtefactEditorOperation): ArtefactEditorOperation | undefined {\n// // Unite operations of the same type\n// if (op.type !== 'addLine') {\n// return undefined;\n// }\n\n// if (op.type !== this.type) {\n// return undefined;\n// }\n\n// // Operations are of the same type on the same artefact, we can unite them\n// return new ArtefactAddLineOperation(this.editionId,\n// this.next,\n// (op as ArtefactAddLineOperation).prev\n\n// );\n// }\n// // take care of before and after\n// // we need prev and next\n// // send to backend new line with ngative id\n// // get the new line from backend along with artefact (the line will be positive and updated )\n// // we need here a internal undo and internal redo that delete the line just added\n// protected internalUndo(): void {\n// // \n// // state().eventBus.emit('change-artefact-edit-line', this.prev);\n// // this.checkText.replaceText(this.editionId, this.firstChar, this.lastChar, this.prev);\n// }\n\n// protected internalRedo(): void {\n// // this.checkText.replaceText(this.editionId, this.firstChar, this.lastChar, this.next);\n// // state().eventBus.emit('change-artefact-edit-line', this.next);\n// }\n\n// }\n\nexport class ArtefactROIOperation extends ArtefactEditorOperation {\n\n public constructor(\n type: ArtefactEditorOperationType,\n public roi: InterpretationRoi,\n ) {\n super(type);\n this.roi = roi.clone();\n }\n\n public uniteWith(op: ArtefactEditorOperation): ArtefactEditorOperation | undefined {\n return undefined;\n }\n\n protected internalUndo(): void {\n if (this.type === 'draw') {\n this.removeRoi();\n } else {\n this.placeRoi();\n }\n }\n\n protected internalRedo(): void {\n if (this.type === 'draw') {\n this.placeRoi();\n } else {\n this.removeRoi();\n }\n }\n\n private placeRoi() {\n state().interpretationRois.put(this.roi);\n this.roi.status = 'new';\n const si = state().signInterpretations.get(\n this.roi.signInterpretationId!\n );\n if (si) {\n si.rois.push(this.roi);\n }\n state().eventBus.emit('roi-changed', this.roi);\n }\n\n private removeRoi() {\n let inState = state().interpretationRois.get(this.roi.id);\n if (!inState) {\n const newId = state().interpretationRois.getServerId(this.roi.id);\n\n if (newId) {\n inState = state().interpretationRois.get(newId);\n }\n }\n\n if (!inState) {\n console.error(\"Can't remove ROI which isn't in the state!\");\n return;\n }\n\n inState.status = 'deleted';\n const si = state().signInterpretations.get(this.roi.signInterpretationId!);\n if (si) {\n si.deleteRoi(this.roi);\n }\n state().eventBus.emit('roi-changed', inState);\n state().eventBus.emit('remove-roi', inState);\n }\n}\n\nexport type TextFragmentAttributeOperationType = 'create' | 'update' | 'delete';\n\nexport class TextFragmentAttributeOperation extends ArtefactEditorOperation {\n public prev?: InterpretationAttributeDTO;\n\n public constructor(\n public signInterpretationId: number,\n public attributeValueId: number, // In case of an update of the valueId, this holds the valueId before the change\n public next?: InterpretationAttributeDTO\n ) {\n super('attr');\n this.prev = this.signInterpretation.attributes.find(attr => attr.attributeValueId === attributeValueId);\n }\n\n private get signInterpretation() {\n return state().signInterpretations.get(this.signInterpretationId)!;\n }\n\n public get attributeOperationType(): TextFragmentAttributeOperationType {\n if (this.prev && this.next) {\n return 'update';\n } else if (this.prev) {\n return 'delete';\n } else {\n return 'create';\n }\n }\n public uniteWith(op: ArtefactEditorOperation): ArtefactEditorOperation | undefined {\n if (op.type !== 'attr') {\n return undefined;\n }\n\n const other = op as TextFragmentAttributeOperation;\n if (other.signInterpretation.id !== this.signInterpretation.id || other.attributeValueId !== this.attributeValueId) {\n return undefined;\n }\n\n const united = new TextFragmentAttributeOperation(this.signInterpretation.id, this.attributeValueId, this.next);\n united.prev = other.prev;\n\n return united;\n }\n\n protected internalUndo() {\n // In an update, the attributeValueId might change. In that case, we get the *next* attributeValueId, which is the new ID.\n // In other cases, there is only one attributeValueId, so we can take it from `this`.\n const existingIndex = this.signInterpretation.findAttributeIndex(this.attributeOperationType === 'update' ? this.next!.attributeValueId : this.attributeValueId);\n\n if (!this.prev) {\n if (existingIndex !== -1) {\n this.signInterpretation.attributes.splice(existingIndex, 1);\n } else {\n console.warn(\"Can't undo operation with no prev and no existing index\");\n }\n } else {\n if (existingIndex !== -1) {\n Vue.set(this.signInterpretation.attributes, existingIndex, this.prev);\n } else {\n this.signInterpretation.attributes.push(this.prev);\n }\n }\n }\n\n protected internalRedo() {\n const existingIndex = this.signInterpretation.findAttributeIndex(this.attributeValueId); // In case of an update, this finds the previous attribute\n\n if (this.next) {\n if (existingIndex !== -1) {\n Vue.set(this.signInterpretation.attributes, existingIndex, this.next);\n } else {\n this.signInterpretation.attributes.push(this.next);\n }\n } else {\n if (existingIndex !== -1) {\n this.signInterpretation.attributes.splice(existingIndex, 1);\n } else {\n console.warn(\"Can't redo operation with no next and no existingIndex\");\n }\n }\n }\n}\n\nexport class SignInterpretationCommentOperation extends ArtefactEditorOperation {\n public signInterpretationId: number;\n public prevComment: string | null;\n public nextComment: string | null;\n\n public constructor(signInterpretationId: number, comment: string | null) {\n super('commentary');\n this.signInterpretationId = signInterpretationId;\n this.nextComment = comment;\n this.prevComment = this.signInterpretation.commentary;\n }\n\n private get signInterpretation() {\n return state().signInterpretations.get(this.signInterpretationId)!;\n }\n\n public uniteWith(op: ArtefactEditorOperation): ArtefactEditorOperation | undefined {\n if (op.type !== 'commentary') {\n return undefined;\n }\n\n const other = op as SignInterpretationCommentOperation;\n if (other.signInterpretationId !== this.signInterpretationId) {\n return undefined;\n }\n\n const united = new SignInterpretationCommentOperation(this.signInterpretationId, this.nextComment);\n united.prevComment = other.prevComment;\n\n return united;\n }\n\n protected internalUndo() {\n this.signInterpretation.commentary = this.prevComment;\n }\n\n protected internalRedo() {\n this.signInterpretation.commentary = this.nextComment;\n }\n}\n\nexport type SignInterpretationEditOperationType = 'create' | 'update' | 'delete';\n\nexport abstract class SignInterpretationEditOperation extends ArtefactEditorOperation {\n constructor(public signOpType: SignInterpretationEditOperationType) {\n super('sign');\n }\n\n public uniteWith(op: ArtefactEditorOperation): ArtefactEditorOperation | undefined {\n if (op.type !== 'sign') {\n return undefined;\n }\n\n const other = op as SignInterpretationEditOperation;\n if (this.type !== op.type) {\n return undefined;\n }\n\n return this.uniteWithRightOp(other);\n }\n\n public abstract get signInterpretation(): SignInterpretation;\n protected abstract uniteWithRightOp(op: SignInterpretationEditOperation): SignInterpretationEditOperation | undefined;\n}\n\ninterface SignData {\n character: string;\n signType: [number, string];\n}\n\nexport class UpdateSignInterperationOperation extends SignInterpretationEditOperation {\n // Update a sign interepration - updates affect the character and the attributes.\n public signInterpretationId: number;\n public prev: SignData;\n public next: SignData;\n\n constructor(signInterperationId: number, character: string, signTypeId: number, signTypeString: string) {\n super('update');\n\n this.signInterpretationId = signInterperationId;\n\n this.next = {\n character,\n signType: [signTypeId, signTypeString],\n };\n this.prev = this.getPrevSignData();\n }\n\n public get signInterpretation() {\n return state().signInterpretations.get(this.signInterpretationId)!;\n }\n\n protected internalRedo() {\n const si = this.signInterpretation;\n si.character = this.next.character;\n si.signType = this.next.signType;\n }\n\n protected internalUndo() {\n const si = this.signInterpretation;\n si.character = this.prev.character;\n si.signType = this.prev.signType;\n }\n\n protected uniteWithRightOp(op: SignInterpretationEditOperation): SignInterpretationEditOperation | undefined {\n const other = op as UpdateSignInterperationOperation; // We are sure this is the right type\n if (this.signInterpretationId !== other.signInterpretationId) {\n return undefined;\n }\n\n const united = new UpdateSignInterperationOperation(this.signInterpretationId,\n this.next.character,\n this.next.signType[0],\n this.next.signType[1]);\n united.prev = other.prev;\n\n return united;\n }\n\n private getPrevSignData() {\n const si = this.signInterpretation;\n return {\n character: si.character || '',\n signType: si.signType,\n isReconstructed: si.isReconstructed,\n };\n }\n}\n\nexport class DeleteSignInterpretationOperation extends SignInterpretationEditOperation {\n public signInterpretationId: number;\n public sign: Sign;\n\n constructor(signIntepretationId: number) {\n super('delete');\n this.signInterpretationId = signIntepretationId;\n const si = state().signInterpretations.get(this.signInterpretationId, true);\n if (!si) {\n state().corrupted(`Can't find sign interpretation ${this.signInterpretationId}`);\n }\n this.sign = si!.sign;\n }\n\n public get signInterpretation() {\n return state().signInterpretations.get(this.signInterpretationId)!;\n }\n\n public uniteWithRightOp(op: SignInterpretationEditOperation): SignInterpretationEditOperation | undefined {\n return undefined;\n }\n\n protected get prevSign() {\n return this.sign.line.signs[this.sign.indexInLine - 1];\n }\n\n protected internalRedo() {\n // Delete the sign from the line\n this.sign.line.removeSign(this.sign);\n\n // Fix the linked list of signs\n const SI = this.sign.signInterpretations[0];\n const prevSI = this.prevSign.signInterpretations[0];\n prevSI.nextSignInterpretations = SI.nextSignInterpretations;\n\n state().signInterpretations.detachSignInterprerationFromArtefact(SI);\n }\n\n protected internalUndo() {\n // Add the sign back into the line\n this.sign.line.addSign(this.sign);\n\n // Fix the linked list of signs\n const SI = this.sign.signInterpretations[0];\n const prevSI = this.prevSign.signInterpretations[0];\n SI.nextSignInterpretations = prevSI.nextSignInterpretations;\n prevSI.nextSignInterpretations[0].nextSignInterpretationId = SI.signInterpretationId;\n state().signInterpretations.attachSignInterpretationToArtefact(SI);\n }\n}\n\nexport class CreateSignInterpretationOperation extends SignInterpretationEditOperation {\n public sign: Sign;\n\n constructor(addAfterSignInterpretationId: number, character: string, signTypeId: number, signTypeString: string) {\n super('create');\n\n // We need to construct a brand new Sign object\n const prevSI = state().signInterpretations.get(addAfterSignInterpretationId, true);\n if (!prevSI) {\n state().corrupted(`Can't locate sign interpretation ${addAfterSignInterpretationId}`);\n }\n const prevSign = prevSI!.sign;\n\n // First, create a sign with no interpretations\n this.sign = new Sign({ signInterpretations: [] }, prevSign.line, prevSign.indexInLine + 1);\n\n // Now the new sign interpretation\n const si = new SignInterpretation({\n signId: -1, // Patch, we don't really need the signID, but the DTO requires it\n character,\n isVariant: false,\n signInterpretationId: SignInterpretation.nextAvailableId,\n nextSignInterpretations: [],\n attributes: [],\n rois: [],\n }, this.sign);\n\n // And the attributes\n si.signType = [signTypeId, signTypeString];\n\n this.sign.signInterpretations.push(si);\n state().signInterpretations.put(si);\n }\n\n public get signInterpretation() {\n return this.sign.signInterpretations[0];\n }\n\n protected get prevSign() {\n return this.sign.line.signs[this.sign.indexInLine - 1];\n }\n\n protected internalRedo() {\n // Add the sign into the line\n this.sign.line.addSign(this.sign);\n\n // Fix the linked list of signs\n const SI = this.sign.signInterpretations[0];\n const prevSI = this.prevSign.signInterpretations[0];\n SI.nextSignInterpretations = prevSI.nextSignInterpretations;\n prevSI.nextSignInterpretations[0].nextSignInterpretationId = SI.signInterpretationId;\n }\n\n protected internalUndo() {\n // Delete the sign from the line\n this.sign.line.removeSign(this.sign);\n\n // Fix the linked list of signs\n const SI = this.sign.signInterpretations[0];\n const prevSI = this.prevSign.signInterpretations[0];\n prevSI.nextSignInterpretations = SI.nextSignInterpretations;\n }\n\n protected uniteWithRightOp(op: SignInterpretationEditOperation): SignInterpretationEditOperation | undefined {\n return undefined;\n }\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Prop, Emit, Vue } from 'vue-property-decorator';\nimport { SignInterpretation, Sign, Line } from '@/models/text';\nimport QwbProxyService from '@/services/qwb-proxy';\nimport EditSignModal from './edit-sign-modal.vue';\nimport { OperationsManager, SavingAgent } from '@/utils/operations-manager';\nimport {\n ArtefactROIOperation,\n DeleteSignInterpretationOperation,\n} from '../../views/artefact-editor/operations';\nimport { Artefact } from '@/models/artefact';\nimport { QwbWordVariantListDTO } from '@/dtos/sqe-dtos';\n\n@Component({\n name: 'text-sign',\n})\nexport default class TextSign extends Vue {\n @Prop() public sign!: Sign;\n @Prop() public withMenu!: boolean;\n private previousMenuId: string = '';\n private qwbVariants: QwbWordVariantListDTO | null = null;\n private contenteditable: boolean = false;\n private get readOnly(): boolean {\n return this.$state.editions.current!.permission.readOnly;\n }\n\n private get editingMode() {\n return this.$state.textFragmentEditor.textEditingMode;\n }\n\n // Each sign offers alternative readings. For now we always show the first suggestion\n private get si() {\n return this.sign.signInterpretations[0];\n }\n\n private get isSelected() {\n return this.$state.textFragmentEditor.isSiSelected(this.si);\n }\n\n private get isHighlighted() {\n return (\n this.$state.artefactEditor.highlightCommentMode &&\n (this.si.commentary ||\n this.si.attributes.some((attr) => attr.commentary))\n );\n }\n\n private get cssStrings(): string {\n return this.si.attributes\n .map((x) =>\n `${x.attributeString}-${x.attributeValueString}`\n .toLowerCase()\n .replace('_', '-')\n )\n .join(' ');\n }\n\n private get virtualArtefact(): Artefact | null {\n if (this.si.rois.length !== 1) {\n return null;\n }\n\n const artefact = this.$state.artefacts.find(this.si.rois[0].artefactId);\n if (!artefact) {\n return null;\n }\n\n return artefact.isVirtual ? artefact : null;\n }\n\n private get qwbWordId(): number | undefined {\n const allQwbWordIds = this.sign.signInterpretations.flatMap(\n (x) => x.qwbWordIds\n );\n return allQwbWordIds.length > 0 ? allQwbWordIds[0] : undefined;\n }\n public get textFragmentEditorState() {\n return this.$state.textFragmentEditor;\n }\n\n private deleteSignInterpretation(si: SignInterpretation) {\n const delOps = this.si.rois.map(\n (roi) => new ArtefactROIOperation('erase', roi)\n );\n const op = new DeleteSignInterpretationOperation(this.si.id);\n\n op.redo(true); // First delete the sign, which uses the ROIs to update the artefacts SI caches\n for (const delOp of delOps) {\n // Now delete the ROIs\n delOp.redo(true);\n }\n this.$state.eventBus.emit('new-bulk-operations', [...delOps, op]);\n }\n\n private onSignInterpretationClicked(event: MouseEvent) {\n if (event.ctrlKey || event.metaKey) {\n this.$state.textFragmentEditor.toggleSelectSign(this.si);\n } else {\n this.$state.textFragmentEditor.selectSign(this.si);\n }\n }\n\n // @Emit()\n // private editLine() {\n // return true;\n // }\n // private openEditLineModal() {\n // this.$root.$emit('bv::show::modal', 'editLineModal');\n // }\n\n private openEditSignModal() {\n this.$state.textFragmentEditor.modeSignModal = 'edit';\n this.$root.$emit('bv::show::modal', 'editSignModal');\n }\n\n private openAddLeftSignModal() {\n this.$state.textFragmentEditor.modeSignModal = 'create';\n this.$root.$emit('bv::show::modal', 'editSignModal');\n }\n\n private openAddRightSignModal() {\n this.$state.textFragmentEditor.modeSignModal = 'create';\n const si =\n this.si.sign.line.signs[this.si.sign.indexInLine - 1]\n .signInterpretations[0];\n this.$state.textFragmentEditor.selectSign(si);\n this.$root.$emit('bv::show::modal', 'editSignModal');\n }\n\n private async openQwbVariantsModal() {\n if (this.qwbWordId !== undefined) {\n if (this.qwbVariants === null && this.qwbWordId !== undefined) {\n const qps = new QwbProxyService();\n this.qwbVariants = await qps.getQwbWordVariants(this.qwbWordId);\n }\n this.$bvModal.show(`qwb-word-${this.si.signInterpretationId}`);\n }\n }\n\n private openSignMenu(event: MouseEvent, signMenuId: string) {\n // prevent usual menu to display\n event.preventDefault();\n this.$state.textFragmentEditor.selectSign(this.si);\n\n this.$root.$emit('bv::show::popover', signMenuId);\n this.previousMenuId = signMenuId;\n }\n\n private openEditVirtualArtefact() {\n if (!this.virtualArtefact) {\n console.warn(\n \"Can't edit virtual artefact when no virtual artefact is set\"\n );\n return;\n }\n this.$state.textFragmentEditor.editedVirtualArtefact =\n this.virtualArtefact;\n\n this.$state.showEditReconTextBar = true;\n // this.showReconTextEditor();\n // this.$emit('showReconTextEditor');\n\n // this.$root.$emit('bv::show::modal', 'editVirtualArtefactText');\n }\n\n @Emit()\n private showReconTextEditor() {\n return true;\n }\n\n private closeSignMenu() {\n this.$root.$emit('bv::hide::popover', this.previousMenuId);\n }\n\n private focusPopover() {\n (this.$refs.signMenu as any).focus();\n }\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./text-sign.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./text-sign.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./text-sign.vue?vue&type=template&id=2017e88b&scoped=true&\"\nimport script from \"./text-sign.vue?vue&type=script&lang=ts&\"\nexport * from \"./text-sign.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./text-sign.vue?vue&type=style&index=0&id=2017e88b&lang=scss&scoped=true&\"\nimport style1 from \"./text-sign.vue?vue&type=style&index=1&id=2017e88b&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2017e88b\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Emit, Prop, Vue } from 'vue-property-decorator';\nimport { Line, TextDirection, TextFragment } from '@/models/text';\nimport TextSign from '@/components/text/text-sign.vue';\nimport {\n EditorDTO,\n LineDTO,\n QwbParallelListDTO,\n LineTextDTO,\n SignDTO\n} from '@/dtos/sqe-dtos';\nimport QwbProxyService from '@/services/qwb-proxy';\nimport EditionService from '@/services/edition';\nimport TextService from '@/services/text';\n\n@Component({\n name: 'text-line',\n components: {\n 'text-sign': TextSign\n }\n})\nexport default class TextLineComponent extends Vue {\n // public text_service: TextService = new TextService();\n @Prop() public isEditMode!: boolean;\n @Prop() public line!: Line;\n @Prop({\n default: 'rtl'\n })\n public direction!: TextDirection;\n private parallels: QwbParallelListDTO | null = null;\n private variants: DetailedLineTextDTO[] = [];\n private prevLineMenuId: string = '';\n private get editionId() {\n return parseInt(this.$route.params.editionId);\n }\n private async showParallels() {\n this.closeLineMenu();\n this.$bvModal.show(`parallel-line-${this.line.lineId}`);\n if (this.parallels === null) {\n const qwbWordIds = this.line.signs.flatMap(x =>\n x.signInterpretations.flatMap(y => y.qwbWordIds)\n );\n if (qwbWordIds.length > 0) {\n const qwbStartId = qwbWordIds[0];\n const qwbEndId = qwbWordIds[qwbWordIds.length - 1];\n if (\n qwbStartId !== qwbEndId &&\n qwbStartId !== 0 &&\n qwbEndId !== 0\n ) {\n const qps = new QwbProxyService();\n this.parallels = await qps.getQwbParallelText(\n qwbStartId,\n qwbEndId\n );\n }\n }\n }\n }\n\n @Emit()\n private lineChange(event: any) {\n return event.target.textContent;\n }\n\n private checkEnter(event: any) {\n event.preventDefault();\n event.currentTarget.blur();\n }\n private openEditLineModal(line: Line) {\n this.$state.textFragmentEditor.selectSign(\n line.signs[0].signInterpretations[0]\n );\n this.$root.$emit('bv::show::modal', 'editLineModal');\n }\n private addLineBefore(line: Line) {\n console.log(this.$state.textFragmentEditor.selectedSignInterpretations)\n this.$state.textFragmentEditor.selectSign(\n line.signs[0].signInterpretations[0]\n );\n this.$root.$emit('bv::show::modal', 'addLineModal', 'before');\n }\n public deleteLine(line: Line) {\n this.$state.textFragmentEditor.selectSign(\n line.signs[0].signInterpretations[0]\n );\n this.$root.$emit('bv::show::modal', 'deleteLineModal');\n // const ts = new TextService();\n // // add operation on delete \n // ts.deleteLine(line.editorId, line.lineId);\n }\n private addLineAfter(line: Line) {\n console.log(this.$state.textFragmentEditor.selectedSignInterpretations)\n this.$state.textFragmentEditor.selectSign(\n line.signs[0].signInterpretations[0]\n );\n this.$root.$emit('bv::show::modal', 'addLineModal', 'after');\n }\n\n private onPaste(event: any) {\n const paste = (\n event.clipboardData || (window as any).ClipboardItem\n ).getData('text');\n const selection = window.getSelection();\n if (selection) {\n if (!selection.rangeCount) {\n return false;\n }\n selection.deleteFromDocument();\n selection.getRangeAt(0).insertNode(document.createTextNode(paste));\n }\n\n event.preventDefault();\n }\n\n private async showVariants() {\n this.closeLineMenu();\n this.$bvModal.show(`variant-line-${this.line.lineId}`);\n if (this.variants.length === 0) {\n const es = new EditionService();\n const currentEdition = await es.getSingleEditions(this.editionId);\n const variantEditionList = await es.getManuscriptEditions(\n currentEdition.primary.manuscriptId\n );\n const variantEditions = variantEditionList.editions.flatMap(\n x => x[0]\n );\n const ts = new TextService();\n for (const variantEdition of variantEditions) {\n if (variantEdition.id !== this.editionId) {\n try {\n const line = (await ts.getLineText(\n variantEdition.id,\n this.line.lineId\n )) as DetailedLineTextDTO;\n line.editionId = variantEdition.id;\n line.name = variantEdition.name;\n this.variants.push(line);\n } catch {\n this.variants.push({\n editionId: variantEdition.id,\n name: variantEdition.name,\n licence: variantEdition.copyright,\n editors: {} as { [key: string]: EditorDTO },\n lineId: this.line.lineId,\n lineName: 'NA',\n editorId: 0,\n signs: []\n } as DetailedLineTextDTO);\n }\n }\n }\n }\n }\n private openLineMenu(event: MouseEvent, lineMenuId: string) {\n if (this.isEditMode) {\n return;\n }\n // prevent usual menu to display\n event.preventDefault();\n this.$root.$emit('bv::show::popover', lineMenuId);\n this.prevLineMenuId = lineMenuId;\n }\n private closeLineMenu() {\n this.$root.$emit('bv::hide::popover', this.prevLineMenuId);\n }\n private focusPopover() {\n (this.$refs.lineMenu as any).focus();\n }\n}\ninterface DetailedLineTextDTO extends LineTextDTO {\n name: string;\n editionId: number;\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./text-line.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./text-line.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./text-line.vue?vue&type=template&id=1dfa1c62&scoped=true&\"\nimport script from \"./text-line.vue?vue&type=script&lang=ts&\"\nexport * from \"./text-line.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./text-line.vue?vue&type=style&index=0&id=1dfa1c62&lang=scss&scoped=true&\"\nimport style1 from \"./text-line.vue?vue&type=style&index=1&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1dfa1c62\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Prop, Vue } from 'vue-property-decorator';\nimport { TextFragment } from '@/models/text';\nimport TextLine from '@/components/text/text-line.vue';\n\n@Component({\n name: 'text-fragment',\n components: {\n 'text-line': TextLine\n },\n})\nexport default class TextFragmentComponent extends Vue {\n @Prop() public fragment!: TextFragment;\n @Prop() public fontSize!: number;\n}\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./text-fragment.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./text-fragment.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./text-fragment.vue?vue&type=template&id=0885ba72&scoped=true&\"\nimport script from \"./text-fragment.vue?vue&type=script&lang=ts&\"\nexport * from \"./text-fragment.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./text-fragment.vue?vue&type=style&index=0&id=0885ba72&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0885ba72\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"attributes border-top\"},[_c('div',[_c('b-form-checkbox',{attrs:{\"name\":\"allSiAreReconstructed-checkbox\",\"checked\":_vm.allSiAreReconstructed},on:{\"change\":_vm.onReconstructedCheckBoxChanged}},[_vm._v(\"Reconstructed\")])],1),(_vm.currentEdition.copyright)?_c('div',[_vm._v(\" Copyright : \"+_vm._s(_vm.currentEdition.copyright)+\" \")]):_vm._e(),_c('ul',{staticClass:\"attribute-list\"},[(!_vm.readOnly)?_c('li',{staticClass:\"attribute-pane-add-attribute\"},[_c('b-dropdown',{ref:\"attributesMenu\",attrs:{\"menu-class\":\"attribute-pane-dropdown\",\"disabled\":!_vm.selectedSignInterpretations.length,\"size\":\"sm\",\"boundary\":\"viewport\",\"no-caret\":\"\"},on:{\"hide\":function($event){return _vm.onAttributesMenuHide($event)}},scopedSlots:_vm._u([{key:\"button-content\",fn:function(){return [_c('i',{staticClass:\"fa fa-plus\",on:{\"click\":function($event){return _vm.onAddAttributesMenuOpen()}}})]},proxy:true}],null,false,431622825)},_vm._l((_vm.attributesMenu),function(attr){return _c('b-dropdown',{key:attr.attributeId,staticClass:\"attribute-pane-dropdown-attr\",attrs:{\"variant\":\"link\",\"boundary\":\"viewport\",\"dropright\":\"\"},on:{\"show\":function($event){return _vm.onValuesMenuShow()},\"hide\":function($event){return _vm.onValuesMenuHide()}},scopedSlots:_vm._u([{key:\"button-content\",fn:function(){return [_c('span',{staticClass:\"attr-name\"},[_vm._v(_vm._s(attr.attributeName))])]},proxy:true}],null,true)},_vm._l((attr.values),function(attrValue){return _c('b-dropdown-item',{key:attrValue.id,on:{\"click\":function($event){return _vm.onAddAttribute(attr, attrValue)}}},[_vm._v(_vm._s(attrValue.value))])}),1)}),1)],1):_vm._e(),_vm._l((_vm.attributes),function(attribute){return _c('li',{key:attribute.interpretationAttributeId},[_c('sign-attribute',{staticClass:\"attribute-pane-sign-pill\",attrs:{\"attribute\":attribute},on:{\"attribute-click\":function($event){return _vm.onAttributeClick(attribute)}}})],1)})],2),(!_vm.isMultiSelect)?_c('comment',{staticClass:\"row mt-1\",model:{value:(_vm.comment),callback:function ($$v) {_vm.comment=$$v},expression:\"comment\"}}):_vm._e(),_c('sign-attribute-modal')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"attribute\",on:{\"click\":_vm.onClick}},[_c('sign-attribute-badge',{attrs:{\"attribute\":_vm.attribute}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"sign-attribute\"},[_c('span',{class:{ highlighted: _vm.isHighlighted }},[_c('b-badge',{attrs:{\"variant\":\"secondary\"}},[_vm._v(_vm._s(_vm.attribute.attributeString)+\": \"+_vm._s(_vm.attribute.attributeValueString))])],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Vue } from 'vue-property-decorator';\r\nimport { InterpretationAttributeDTO } from '@/dtos/sqe-dtos';\r\n\r\n@Component({\r\n name: 'sign-attribute-badge',\r\n})\r\nexport default class SignAttributeBadge extends Vue {\r\n @Prop()\r\n public attribute!: InterpretationAttributeDTO;\r\n\r\n public get artefactEditorState() {\r\n return this.$state.artefactEditor;\r\n }\r\n\r\n public get isHighlighted(): boolean {\r\n return (\r\n this.artefactEditorState.highlightCommentMode &&\r\n this.attribute &&\r\n !!this.attribute.commentary\r\n );\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./sign-attribute-badge.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./sign-attribute-badge.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./sign-attribute-badge.vue?vue&type=template&id=4eb20b2c&scoped=true&\"\nimport script from \"./sign-attribute-badge.vue?vue&type=script&lang=ts&\"\nexport * from \"./sign-attribute-badge.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./sign-attribute-badge.vue?vue&type=style&index=0&id=4eb20b2c&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4eb20b2c\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\r\nimport { Component, Prop, Vue, Emit } from 'vue-property-decorator';\r\nimport { InterpretationAttributeDTO } from '@/dtos/sqe-dtos';\r\nimport SignAttributeBadge from './sign-attribute-badge.vue';\r\n\r\n@Component({\r\n name: 'sign-attribute',\r\n components: {\r\n 'sign-attribute-badge': SignAttributeBadge,\r\n }\r\n})\r\nexport default class SignAttribute extends Vue {\r\n @Prop()\r\n public attribute!: InterpretationAttributeDTO;\r\n @Prop({ default: false })\r\n public multipleSigns!: boolean;\r\n\r\n private onClick() {\r\n this.attributeClick();\r\n }\r\n\r\n @Emit()\r\n private attributeClick() {\r\n return this.attribute;\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./sign-attribute.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./sign-attribute.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./sign-attribute.vue?vue&type=template&id=5d6bdfe0&scoped=true&\"\nimport script from \"./sign-attribute.vue?vue&type=script&lang=ts&\"\nexport * from \"./sign-attribute.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5d6bdfe0\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('b-modal',{ref:\"signAttributeModalRef\",attrs:{\"id\":\"sign-attribute-modal\",\"title\":\"Attribute Information\"},on:{\"hide\":_vm.onHide},scopedSlots:_vm._u([{key:\"modal-footer\",fn:function(){return [_c('b-button',{attrs:{\"disabled\":!_vm.deleteAllowed || _vm.readOnly},on:{\"click\":_vm.onDeleteAttribute}},[_c('i',{staticClass:\"fa fa-trash\"})])]},proxy:true}])},[(_vm.attribute)?_c('div',[_c('b-row',[_c('b-col',{attrs:{\"cols\":\"3\"}},[_c('label',{attrs:{\"for\":\"selectAttr\"}},[_vm._v(_vm._s(_vm.attribute.attributeString))])]),_c('b-col',{attrs:{\"cols\":\"9\"}},[_c('b-form-select',{attrs:{\"id\":\"selectAttr\",\"disabled\":_vm.readOnly},on:{\"change\":function($event){return _vm.onAttributeValueChanged($event)}},model:{value:(_vm.selected),callback:function ($$v) {_vm.selected=$$v},expression:\"selected\"}},[_c('option',{attrs:{\"disabled\":true},domProps:{\"value\":null}},[_vm._v(_vm._s(_vm.attribute.attributeValueString))]),_vm._l((_vm.possibleAttributeValues),function(attrVal){return _c('option',{key:attrVal.attributeValueId,domProps:{\"value\":attrVal}},[_vm._v(_vm._s(attrVal.value))])})],2),_c('div',{staticClass:\"mb-2\"},[_c('span',{staticClass:\"description small\"},[_vm._v(_vm._s(_vm.description))])])],1)],1),(!_vm.isMultiSelect)?_c('comment',{staticClass:\"mt-3\",model:{value:(_vm.comment),callback:function ($$v) {_vm.comment=$$v},expression:\"comment\"}}):_vm._e()],1):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"comment-area\"}},[(_vm.comment)?_c('p',{staticClass:\"comment\",domProps:{\"innerHTML\":_vm._s(_vm.comment)},on:{\"click\":_vm.onViewComment}}):_c('p',{staticClass:\"no comment\"},[_vm._v(\"No Comment\")]),_c('div',{staticClass:\"buttons\"},[_c('b-button',{attrs:{\"title\":\"View Comment\",\"disabled\":!_vm.comment,\"size\":\"sm\"},on:{\"click\":function($event){return _vm.onViewComment()}}},[_c('i',{staticClass:\"fa fa-eye\"})]),_c('b-button',{attrs:{\"title\":\"Edit Comment\",\"disabled\":_vm.readOnly,\"size\":\"sm\"},on:{\"click\":function($event){return _vm.onEditComment()}}},[_c('i',{staticClass:\"fa fa-edit\"})]),_c('b-button',{attrs:{\"title\":\"Delete Comment\",\"disabled\":!_vm.comment || _vm.readOnly,\"size\":\"sm\"},on:{\"click\":function($event){return _vm.onDeleteComment()}}},[_c('i',{staticClass:\"fa fa-trash larger-btn\"})])],1),_c('b-modal',{ref:\"viewCommentModalRef\",attrs:{\"id\":\"viewCommentModal\",\"title\":\"Comment\",\"hide-footer\":\"\",\"hide-header\":\"\"}},[_c('div',{attrs:{\"id\":\"comment-view\"},domProps:{\"innerHTML\":_vm._s(_vm.comment)}})]),_c('b-modal',{ref:\"editCommentModalRef\",attrs:{\"id\":\"editCommentModal\",\"title\":\"Comment\",\"hide-footer\":\"\",\"hide-header\":\"\"}},[_c('div',{attrs:{\"id\":\"comment-edit\"}},[_c('ckeditor',{attrs:{\"editor\":_vm.editor},on:{\"input\":_vm.onCommentUpdated},model:{value:(_vm.comment),callback:function ($$v) {_vm.comment=$$v},expression:\"comment\"}})],1)])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Vue, Watch } from 'vue-property-decorator';\r\n\r\n// We use require because with imports webpack complains a lot.\r\n// tslint:disable-next-line\r\nconst ClassicEditor = require('@ckeditor/ckeditor5-build-classic');\r\n\r\n@Component({\r\n name: 'comment',\r\n components: {\r\n },\r\n})\r\nexport default class CommentComponent extends Vue {\r\n // Follow the v-model pattern as described here: https://www.digitalocean.com/community/tutorials/vuejs-add-v-model-support\r\n @Prop()\r\n public value!: string;\r\n\r\n private comment: string = ''; // Use v-model to bind here, we can't use v-model to bind to the value property\r\n private editor = ClassicEditor;\r\n\r\n private get readOnly(): boolean {\r\n return this.$state.editions.current!.permission.readOnly;\r\n }\r\n\r\n private get commentDisplay() {\r\n if (!this.comment) {\r\n return 'None';\r\n }\r\n\r\n let shortened = this.comment.substring(0, 10);\r\n if (this.comment.length > 10) {\r\n shortened += '...';\r\n }\r\n return shortened;\r\n }\r\n\r\n private mounted() {\r\n this.comment = this.value || '';\r\n }\r\n\r\n private onCommentUpdated() {\r\n this.$emit('input', this.comment);\r\n }\r\n\r\n @Watch('value')\r\n private onValueChanged() {\r\n this.comment = this.value || '';\r\n }\r\n\r\n private onDeleteComment() {\r\n this.comment = '';\r\n this.onCommentUpdated();\r\n }\r\n\r\n private onViewComment() {\r\n (this.$refs.viewCommentModalRef as any).show();\r\n // this.$bvModal.show('viewCommentModal');\r\n }\r\n\r\n private onEditComment() {\r\n (this.$refs.editCommentModalRef as any).show();\r\n // this.$bvModal.show('editCommentModal');\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./comment.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./comment.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./comment.vue?vue&type=template&id=70557539&scoped=true&\"\nimport script from \"./comment.vue?vue&type=script&lang=ts&\"\nexport * from \"./comment.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./comment.vue?vue&type=style&index=0&id=70557539&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"70557539\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport {\r\n AttributeValueDTO,\r\n CommentaryDTO,\r\n InterpretationAttributeDTO,\r\n} from '@/dtos/sqe-dtos';\r\nimport { TextFragmentAttributeOperation } from '@/views/artefact-editor/operations';\r\nimport { BvModalEvent } from 'bootstrap-vue';\r\nimport { Component, Vue, Watch } from 'vue-property-decorator';\r\nimport CommentComponent from '../comment/comment.vue';\r\nimport SignAttributeBadge from './sign-attribute-badge.vue';\r\n// import ErrorService from '@/services/error';\r\n\r\n@Component({\r\n name: 'sign-attribute-modal',\r\n components: {\r\n 'sign-attribute-badge': SignAttributeBadge,\r\n 'comment': CommentComponent,\r\n },\r\n})\r\nexport default class SignAttributeModal extends Vue {\r\n private selected: string | null = null;\r\n private hidingStarted = false;\r\n\r\n private get readOnly(): boolean {\r\n return this.$state.editions.current!.permission.readOnly;\r\n }\r\n\r\n private get attribute() {\r\n return this.$state.textFragmentEditor.selectedAttribute;\r\n }\r\n\r\n private get comment() {\r\n if (this.isMultiSelect) {\r\n return '';\r\n }\r\n return this.attribute?.commentary?.commentary || '';\r\n }\r\n\r\n private set comment(val: string) {\r\n if (!this.attribute || this.isMultiSelect) {\r\n console.warn(\"Can't set comment without an attribute or with multi selection\");\r\n return;\r\n }\r\n\r\n const si = this.$state.textFragmentEditor.selectedSignInterpretations[0]; // Only one element, since !isMultiSelect\r\n const newAttr: InterpretationAttributeDTO = { ...this.attribute! };\r\n\r\n newAttr.commentary = val\r\n ? ({ commentary: val } as CommentaryDTO)\r\n : undefined;\r\n\r\n // Create an operation that will be added to the undo/redo management of the artefact editor\r\n const op = new TextFragmentAttributeOperation(\r\n si.id,\r\n this.attribute!.attributeValueId,\r\n newAttr\r\n );\r\n\r\n op.redo(true); // Apply change\r\n this.$state.eventBus.emit('new-operation', op);\r\n }\r\n\r\n private get deleteAllowed() {\r\n return this.attributeMetadata?.removable || false;\r\n }\r\n\r\n private get editAllowed() {\r\n if (this.isMultiSelect) {\r\n return this.attributeMetadata?.batchEditable || false;\r\n } else {\r\n return this.attributeMetadata?.editable || false;\r\n }\r\n }\r\n\r\n private get attributeMetadata() {\r\n if (!this.attribute) {\r\n return undefined;\r\n }\r\n return this.$state.editions.current?.attributeMetadata?.getAttribute(\r\n this.attribute.attributeId\r\n );\r\n }\r\n\r\n private get possibleAttributeValues() {\r\n if (!this.attribute || !this.attributeMetadata) {\r\n console.warn(\r\n \"Can't return possible values if there is no attribute or metedata\"\r\n );\r\n return [];\r\n }\r\n let values = this.attributeMetadata.values;\r\n\r\n // Remove the values that are selected by other attributes of the same id\r\n for (const si of this.$state.textFragmentEditor.selectedSignInterpretations) {\r\n for (const attr of si.attributes.filter(\r\n (a) => a.attributeId === this.attribute!.attributeId\r\n )) {\r\n values = values.filter((v) => v.id !== attr.attributeValueId);\r\n }\r\n }\r\n\r\n return values;\r\n }\r\n\r\n private get isMultiSelect() {\r\n return (\r\n this.$state.textFragmentEditor.selectedSignInterpretations.length !== 1\r\n );\r\n }\r\n\r\n private get description(): string {\r\n const metadata = this.$state.editions.current!.attributeMetadata!;\r\n const attrMetadata = metadata.getAttribute(this.attribute!.attributeId);\r\n\r\n if (!attrMetadata) {\r\n return '';\r\n }\r\n\r\n let description = attrMetadata.description || '';\r\n\r\n if (this.attribute!.attributeValueString !== 'TRUE') {\r\n // A non-boolean attribute\r\n const valueMetadata = metadata.getAttributeValue(\r\n this.attribute!.attributeId,\r\n this.attribute!.attributeValueId\r\n );\r\n if (valueMetadata && valueMetadata.description) {\r\n description += valueMetadata.description;\r\n }\r\n }\r\n\r\n return description;\r\n }\r\n\r\n private onDeleteAttribute() {\r\n const ops: TextFragmentAttributeOperation[] = [];\r\n for (const si of this.$state.textFragmentEditor.selectedSignInterpretations) {\r\n const op = new TextFragmentAttributeOperation(\r\n si.id,\r\n this.attribute!.attributeValueId,\r\n undefined\r\n );\r\n op.redo(true);\r\n ops.push(op);\r\n }\r\n this.$state.eventBus.emit('new-bulk-operations', ops);\r\n this.hide();\r\n }\r\n\r\n private onAttributeValueChanged(attrVal: AttributeValueDTO) {\r\n const ops: TextFragmentAttributeOperation[] = [];\r\n for (const si of this.$state.textFragmentEditor.selectedSignInterpretations) {\r\n for (const attr of si.attributes.filter(\r\n (a) => a.attributeValueId === this.attribute!.attributeValueId\r\n )) {\r\n const newAttr: InterpretationAttributeDTO = { ...attr };\r\n newAttr.attributeValueId = attrVal.id;\r\n newAttr.attributeValueString = attrVal.value;\r\n this.$state.textFragmentEditor.selectedAttribute = newAttr;\r\n const op = new TextFragmentAttributeOperation(\r\n si.id,\r\n attr.attributeValueId, // This is the old ID of the attribute\r\n newAttr\r\n );\r\n op.redo(true);\r\n ops.push(op);\r\n }\r\n }\r\n this.$state.eventBus.emit('new-bulk-operations', ops);\r\n this.selected = null;\r\n }\r\n\r\n private hide() {\r\n (this.$refs.signAttributeModalRef as any).hide();\r\n }\r\n\r\n private onHide() {\r\n this.hidingStarted = true;\r\n this.$state.textFragmentEditor.selectedAttribute = null;\r\n }\r\n\r\n @Watch('attribute')\r\n private onAttributeChanged() {\r\n // The attribute can be deleted by another user\r\n if (!this.attribute && !this.hidingStarted) {\r\n this.hide();\r\n this.$toasted.info(this.$tc('toasts.attributeDeletedBySomeoneElse'));\r\n }\r\n this.hidingStarted = false;\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./sign-attribute-modal.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./sign-attribute-modal.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./sign-attribute-modal.vue?vue&type=template&id=07993ad8&scoped=true&\"\nimport script from \"./sign-attribute-modal.vue?vue&type=script&lang=ts&\"\nexport * from \"./sign-attribute-modal.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./sign-attribute-modal.vue?vue&type=style&index=0&id=07993ad8&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"07993ad8\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Vue, Watch } from 'vue-property-decorator';\nimport { SignInterpretation } from '@/models/text';\nimport {\n AttributeDTO,\n AttributeValueDTO,\n InterpretationAttributeDTO,\n} from '@/dtos/sqe-dtos';\nimport SignAttribute from './sign-attribute.vue';\nimport SignAttributeModal from './sign-attribute-modal.vue';\nimport { EditionInfo } from '@/models/edition';\nimport {\n SignInterpretationCommentOperation,\n TextFragmentAttributeOperation,\n} from '@/views/artefact-editor/operations';\nimport { BDropdown, BvEvent } from 'bootstrap-vue';\nimport CommentComponent from '../comment/comment.vue';\n\n@Component({\n name: 'sign-attribute-pane',\n components: {\n 'sign-attribute-modal': SignAttributeModal,\n 'sign-attribute': SignAttribute,\n comment: CommentComponent,\n },\n})\nexport default class SignAttributePane extends Vue {\n private status: boolean = false;\n private keepOpen = false;\n private attributesMenu: AttributeDTO[] = [];\n\n private get readOnly(): boolean {\n return this.$state.editions.current!.permission.readOnly;\n }\n private get currentEdition(): EditionInfo | null {\n return this.$state.editions.current;\n }\n\n public get editorState() {\n return this.$state.textFragmentEditor;\n }\n\n public get selectedSignInterpretations(): SignInterpretation[] {\n return this.editorState.selectedSignInterpretations;\n }\n\n public get allSiAreReconstructed(): boolean {\n if ((this.editorState.selectedSignInterpretations.length === 0)) {\n return false;\n }\n return this.selectedSignInterpretations.every((si) =>\n si.attributes.some(\n (attr) =>\n attr.attributeString === 'is_reconstructed' &&\n attr.attributeValueString === 'TRUE'\n )\n );\n }\n\n // The comment in the state.\n private get comment(): string {\n if (this.selectedSignInterpretations.length !== 1) {\n return '';\n }\n\n return this.selectedSignInterpretations[0].commentary || '';\n }\n\n private set comment(val: string) {\n if (this.selectedSignInterpretations.length !== 1) {\n console.warn(\n \"Can't change ta comment without one selected sign interperation\"\n );\n return;\n }\n\n const op = new SignInterpretationCommentOperation(\n this.selectedSignInterpretations[0].id,\n val\n );\n op.redo(true);\n this.$state.eventBus.emit('new-operation', op);\n }\n\n private get attributesMetadata() {\n return (\n this.$state.editions.current?.attributeMetadata?.allAttributes || []\n );\n }\n\n public get attributes(): InterpretationAttributeDTO[] {\n // Get the common attributes from all the selected sign interpretations -\n // only attributes that appear in all sign interpretations are shown.\n let attributeValues: number[] = [];\n let first = true;\n\n if (!this.selectedSignInterpretations.length) {\n return [];\n }\n\n // Calculate the intersection of the attributes of all the sign interpretations\n for (const si of this.selectedSignInterpretations) {\n const siValues = si.attributes.map((attr) => attr.attributeValueId);\n if (first) {\n first = false;\n attributeValues = siValues;\n } else {\n attributeValues = attributeValues.filter((val) =>\n siValues.includes(val)\n );\n }\n }\n\n // selectedSignInterpretations has at least one element\n const attributes =\n this.selectedSignInterpretations[0].attributes.filter((attr) =>\n attributeValues.includes(attr.attributeValueId)\n );\n return attributes;\n }\n\n private get isMultiSelect() {\n return (\n this.$state.textFragmentEditor.selectedSignInterpretations\n .length !== 1\n );\n }\n\n private onAttributeClick(attribute: InterpretationAttributeDTO) {\n this.$state.textFragmentEditor.selectedAttribute = attribute;\n this.$root.$emit('bv::show::modal', 'sign-attribute-modal');\n }\n\n private onAddAttribute(attr: AttributeDTO, attrVal: AttributeValueDTO) {\n const ops: TextFragmentAttributeOperation[] = [];\n for (const si of this.$state.textFragmentEditor\n .selectedSignInterpretations) {\n const op = new TextFragmentAttributeOperation(si.id, attrVal.id, {\n attributeId: attr.attributeId,\n attributeString: attr.attributeName,\n attributeValueId: attrVal.id,\n attributeValueString: attrVal.value,\n } as InterpretationAttributeDTO);\n op.redo(true);\n ops.push(op);\n }\n this.$state.eventBus.emit('new-bulk-operations', ops);\n this.keepOpen = false;\n (this.$refs.attributesMenu as BDropdown).hide();\n }\n\n private onDeleteAttribute(attrVal: AttributeValueDTO) {\n const ops: TextFragmentAttributeOperation[] = [];\n for (const si of this.$state.textFragmentEditor\n .selectedSignInterpretations) {\n const op = new TextFragmentAttributeOperation(\n si.id,\n attrVal.id,\n undefined\n );\n op.redo(true);\n ops.push(op);\n }\n this.$state.eventBus.emit('new-bulk-operations', ops);\n }\n\n private onReconstructedCheckBoxChanged(event: boolean) {\n let reconstructedAttrDTO: AttributeDTO;\n let reconstructedAttrValueDTO: AttributeValueDTO;\n const reconstructedAttrMeta = this.attributesMetadata.find(\n (a) => a.attributeName === 'is_reconstructed'\n );\n if (reconstructedAttrMeta) {\n reconstructedAttrDTO = { ...reconstructedAttrMeta };\n const reconstructedAttrValueMeta =\n reconstructedAttrDTO?.values.find((a) => a.value === 'TRUE');\n if (reconstructedAttrValueMeta) {\n reconstructedAttrValueDTO = { ...reconstructedAttrValueMeta };\n }\n if (event) {\n this.onAddAttribute(\n reconstructedAttrDTO!,\n reconstructedAttrValueDTO!\n );\n } else {\n this.onDeleteAttribute(reconstructedAttrValueDTO!);\n }\n }\n }\n\n private onAddAttributesMenuOpen() {\n this.attributesMenu = this.prepareAttributesMenu();\n }\n\n private prepareAttributesMenu(): AttributeDTO[] {\n if (!this.selectedSignInterpretations.length) {\n return [];\n }\n\n const filteredAttributes: AttributeDTO[] = [];\n const attributesSet: Set = new Set();\n const attributesValuesSet: Set = new Set();\n\n for (const si of this.selectedSignInterpretations) {\n for (const attribute of si.attributes) {\n attributesSet.add(attribute.attributeId);\n attributesValuesSet.add(attribute.attributeValueId);\n }\n }\n for (const attributeMeta of this.attributesMetadata) {\n const attributeCopy = { ...attributeMeta };\n // check repeatable\n if (\n attributesSet.has(attributeMeta.attributeId) &&\n !attributeMeta.repeatable\n ) {\n continue;\n }\n\n // multiple: only batchEditable\n if (\n this.selectedSignInterpretations.length > 1 &&\n !attributeMeta.batchEditable\n ) {\n continue;\n }\n\n // single: only editable\n if (\n this.selectedSignInterpretations.length === 1 &&\n !attributeMeta.editable\n ) {\n continue;\n }\n\n // repeatable: remove existing values\n if (\n attributesSet.has(attributeMeta.attributeId) &&\n attributeMeta.repeatable\n ) {\n for (const attributeValue of attributeMeta.values) {\n if (attributesValuesSet.has(attributeValue.id)) {\n attributeCopy.values = attributeCopy.values.filter(\n (x) => x.id !== attributeValue.id\n );\n }\n }\n }\n\n filteredAttributes.push(attributeCopy);\n }\n\n return filteredAttributes;\n }\n\n private onValuesMenuShow() {\n this.keepOpen = true;\n }\n\n private onValuesMenuHide() {\n this.keepOpen = false;\n // (this.$refs.attributesMenu as BDropdown).hide();\n }\n\n private onAttributesMenuHide(event: BvEvent) {\n if (this.keepOpen) {\n event.preventDefault();\n }\n }\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./sign-attribute-pane.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./sign-attribute-pane.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./sign-attribute-pane.vue?vue&type=template&id=89f89e26&scoped=true&\"\nimport script from \"./sign-attribute-pane.vue?vue&type=script&lang=ts&\"\nexport * from \"./sign-attribute-pane.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./sign-attribute-pane.vue?vue&type=style&index=0&id=89f89e26&lang=scss&scoped=true&\"\nimport style1 from \"./sign-attribute-pane.vue?vue&type=style&index=1&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"89f89e26\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('b-modal',{ref:\"my-modal\",attrs:{\"id\":\"editSignModal\",\"title\":_vm.isEditMode ? 'Edit' : 'Add',\"hide-footer\":\"\"},on:{\"shown\":_vm.shown}},[(_vm.editedSi)?_c('b-row',[_c('b-col',[_c('div',{staticClass:\"modal\"},[_c('b-input',{staticClass:\"w-input\",attrs:{\"type\":\"text\",\"autofocus\":\"\"},on:{\"keydown\":function($event){return _vm.isLetter($event)}},model:{value:(_vm.newCharacter),callback:function ($$v) {_vm.newCharacter=$$v},expression:\"newCharacter\"}})],1)]),_c('b-col',[_c('div',[_c('b-form-select',{attrs:{\"options\":_vm.signTypes,\"value-field\":\"id\",\"text-field\":\"value\"},on:{\"input\":function($event){return _vm.valueField($event)}},model:{value:(_vm.newAttributeValueId),callback:function ($$v) {_vm.newAttributeValueId=$$v},expression:\"newAttributeValueId\"}})],1)])],1):_vm._e(),(_vm.editedSi)?_c('b-row',[_c('b-col',[_c('b-form-checkbox',{staticClass:\"mt-3\",attrs:{\"checked\":_vm.isReconstructed,\"disabled\":_vm.isEditMode},model:{value:(_vm.isReconstructed),callback:function ($$v) {_vm.isReconstructed=$$v},expression:\"isReconstructed\"}},[_vm._v(\" Reconstructed \")])],1),_c('b-col',[_c('b-button',{staticClass:\"mt-3\",attrs:{\"variant\":\"primary\",\"disabled\":!_vm.modeButtonApply},on:{\"click\":function($event){return _vm.statusMode()}}},[_vm._v(\"Apply\")])],1)],1):_vm._e()],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport {\n AttributeDTO,\n AttributeValueDTO,\n InterpretationAttributeDTO,\n} from '@/dtos/sqe-dtos';\nimport { SignInterpretation } from '@/models/text';\nimport { OperationsManager, SavingAgent } from '@/utils/operations-manager';\nimport {\n SignInterpretationEditOperation,\n UpdateSignInterperationOperation,\n ArtefactEditorOperation,\n CreateSignInterpretationOperation,\n} from '@/views/artefact-editor/operations';\nimport { Attributes } from '@fortawesome/fontawesome-svg-core';\nimport { Component, Vue, Watch } from 'vue-property-decorator';\n\n@Component({\n name: 'edit-sign-modal',\n})\nexport default class EditSignModal extends Vue {\n private editedSi: SignInterpretation | null = null;\n private newAttributeValueId: number = 0;\n private newCharacter: string = '';\n private isReconstructed: boolean = false;\n\n public get isEditMode(): boolean {\n return this.$state.textFragmentEditor.modeSignModal === 'edit';\n }\n\n public shown(): void {\n this.editedSi = this.$state.textFragmentEditor.singleSelectedSi!;\n\n this.newCharacter = this.editedSi.character || '';\n this.newAttributeValueId = this.editedSi.signType[0];\n this.isReconstructed = this.editedSi.isReconstructed;\n if (!this.isEditMode) {\n this.newCharacter = '';\n this.newAttributeValueId = 2;\n this.isReconstructed = false;\n\n }\n }\n\n public get editedSiSignType(): InterpretationAttributeDTO | undefined {\n return this.editedSi?.attributes.find(\n (attr) => attr.attributeString === 'sign_type'\n );\n }\n\n public isLetter(e: any) {\n this.newCharacter = '';\n if (![32, 8, 46].includes(e.keyCode)) {\n this.newAttributeValueId = this.signTypes.find(\n (attr) => attr.value === 'LETTER'\n )!.id;\n } else {\n this.newAttributeValueId = this.signTypes.find(\n (attr) => attr.value === 'SPACE'\n )!.id;\n e.preventDefault();\n }\n }\n\n public updateSignInterpretation() {\n const op = new UpdateSignInterperationOperation(\n this.editedSi!.id,\n this.newCharacter,\n this.newAttributeValueId,\n this.signTypes.find(\n (signType) => signType.id === this.newAttributeValueId\n )!.value\n );\n op.redo(true);\n this.$state.eventBus.emit('new-operation', op);\n }\n\n public createSignInterpretation() {\n const op = new CreateSignInterpretationOperation(\n this.editedSi!.id,\n this.newCharacter,\n this.newAttributeValueId,\n this.signTypes.find(\n (signType) => signType.id === this.newAttributeValueId\n )!.value\n );\n\n op.redo(true);\n this.$state.eventBus.emit('new-operation', op);\n }\n\n public statusMode() {\n if (!this.isEditMode) {\n this.createSignInterpretation();\n (this.$refs['my-modal'] as any).hide();\n } else {\n this.updateSignInterpretation();\n (this.$refs['my-modal'] as any).hide();\n }\n }\n\n private valueField(valueID: number) {\n const attributeValue = this.signTypes.find(\n (attrValue: AttributeValueDTO) => attrValue.id === valueID\n );\n if (attributeValue && attributeValue.value !== 'LETTER') {\n this.newCharacter = '';\n }\n }\n\n private get signTypes() {\n return (\n this.$state.editions.current?.attributeMetadata?.allAttributes || []\n )\n .find((attr) => attr.attributeName === 'sign_type')!\n .values.sort((a: AttributeValueDTO, b: AttributeValueDTO) => {\n return a.id > b.id ? 1 : -1;\n });\n }\n private get modeButtonApply(): boolean | undefined {\n const attributeValue = this.signTypes.find(\n (attrValue: AttributeValueDTO) =>\n attrValue.id === this.newAttributeValueId\n );\n if (\n attributeValue &&\n attributeValue.value === 'LETTER' &&\n this.newCharacter === ''\n ) {\n return false;\n } else {\n return true;\n }\n }\n\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit-sign-modal.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit-sign-modal.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./edit-sign-modal.vue?vue&type=template&id=0fd4e2bf&scoped=true&\"\nimport script from \"./edit-sign-modal.vue?vue&type=script&lang=ts&\"\nexport * from \"./edit-sign-modal.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./edit-sign-modal.vue?vue&type=style&index=0&id=0fd4e2bf&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0fd4e2bf\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"border-around\"},[_c('b-row',[_c('b-col',{staticClass:\"col-10\"},[_c('label',{staticClass:\"text-bar m-2 ml-3\",attrs:{\"for\":\"w-text-input\"}},[_vm._v(\" Edit Reconstructed Text \")])]),_c('b-col',{staticClass:\"col-2\"},[_c('b-button',{staticClass:\"close m-0 mr-1\",attrs:{\"size\":\"sm\",\"title\":\"Close\",\"aria-label\":\"Close\",\"variant\":\"secondary\"},on:{\"click\":function($event){return _vm.onHide()}}},[_c('span',{attrs:{\"aria-hidden\":\"true\"}},[_vm._v(\"×\")])])],1)],1),_c('b-row',[_c('b-col',[_c('div',{staticClass:\"bottom-scroll-bar m-2 ml-1 mr-1\"},[_c('b-input',{staticClass:\"w-input\",attrs:{\"id\":\"w-text-input\",\"type\":\"text\",\"dir\":\"rtl\",\"autofocus\":\"\",\"rows\":\"1\",\"cols\":\"100\",\"max-rows\":\"0\"},on:{\"input\":_vm.onTextChanged},model:{value:(_vm.text),callback:function ($$v) {_vm.text=$$v},expression:\"text\"}})],1)])],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/*\r\n * This module contains the logic for editing virtual artefacts.\r\n *\r\n * Virtual artefacts are rectangular artefacts that contains signs and ROIs. The signs belong\r\n * to a single text-fragment (which may contain text of other virtual artefacts as well).\r\n *\r\n * Editing the text of a virtual artefact is done by creating a front-end only shadow artefact and shadow text fragment.\r\n * These shadow models contain a copy of the original virtual artefact. The original virtual artefact is hidden, and the\r\n * shadow artefact is displayed.\r\n *\r\n * Editing happens on the shadow artefact and text fragment. After editing is done, the shadow artefact and text fragment are\r\n * removed, and the original artefact and text fragment are updated by the server.\r\n */\r\n\r\nimport { DiffReconstructedResponseDTO, DiffReplaceReconstructionRequestDTO, DiffReplaceRequestDTO, DiffReplaceResponseDTO, IndexedReplacementTextRoi, KernPairDTO, SetReconstructedInterpretationRoiDTO, TranslateDTO } from '@/dtos/sqe-dtos';\r\nimport { Artefact } from '@/models/artefact';\r\nimport { EditionInfo } from '@/models/edition';\r\nimport { InterpretationRoi, Line, Sign, SignInterpretation, TextFragment } from '@/models/text';\r\nimport { StateManager } from '@/state';\r\nimport { NotificationHandler } from '@/state/notification-handler';\r\nimport { BoundingBox, Point } from '@/utils/helpers';\r\nimport { Placement } from '@/utils/Placement';\r\nimport { Polygon } from '@/utils/Polygons';\r\nimport { ApiRoutes } from './api-routes';\r\nimport { CommHelper } from './comm-helper';\r\n\r\ntype SignROI = [Sign, InterpretationRoi | undefined];\r\ntype Anchor = 'left' | 'right';\r\nexport class VirtualArtefactEditor {\r\n private originalArtefact: Artefact;\r\n private shadowArtefact: Artefact;\r\n private shadowTextFragment: TextFragment;\r\n private originSignROIs: SignROI[];\r\n private shadowSignROIs: SignROI[] = [];\r\n private breakAtEnd = false; // When true, a BREAK sign needs to be added to the end\r\n private _text = '';\r\n private hidden = false;\r\n\r\n // Measurements for building ROIs\r\n private anchor: Anchor; // Anchor artefact text to Left, Right or Both\r\n private maxWidth?: number; // Maximum width of artefact - undefined if there isn't any\r\n private anchorPoint: Point; // Anchor point nn the manuscript, the artefact will always start there - top left or top right, depending on anchor\r\n private baseline: number; // Baseline height inside the artefact\r\n\r\n private get script() {\r\n return this.$state.editions.current!.script!;\r\n }\r\n\r\n private get $state() {\r\n return StateManager.instance;\r\n }\r\n\r\n public constructor(originalArtefact: Artefact) {\r\n if (!this.$state.editions.current?.script) {\r\n throw new Error(`Can't edit a virtual artefact with no script - in edition ${this.$state.editions.current?.id}`);\r\n }\r\n\r\n this.originalArtefact = originalArtefact;\r\n this.shadowArtefact = this.createShadowArtefact();\r\n this.$state.artefacts.add(this.shadowArtefact);\r\n this.shadowTextFragment = this.createShadowTextFragment();\r\n this.$state.textFragments.put(this.shadowTextFragment);\r\n this.originSignROIs = this.getOriginalSignROIs();\r\n this._text = this.extractOriginalText();\r\n // this.shadowSignROIs = this.populateShadowSigns();\r\n\r\n [this.anchor, this.anchorPoint, this.baseline, this.maxWidth] = this.getBaseMeasurements();\r\n\r\n this.populateShadows();\r\n\r\n // this.reportROIs();\r\n }\r\n\r\n public hide() {\r\n if (this.hidden) {\r\n console.warn(\"Can't hide a VirtualArtefactEditor twice\");\r\n return;\r\n }\r\n\r\n this.clearShadowModels(true); // Keep the ROI arrays intact\r\n\r\n // Remove the shadow models\r\n this.$state.artefacts.remove(this.shadowArtefact.id);\r\n this.$state.textFragments.delete(this.shadowTextFragment.id);\r\n this.hidden = true;\r\n }\r\n\r\n public get text() {\r\n return this._text;\r\n }\r\n\r\n public set text(newText: string) {\r\n this._text = newText;\r\n this.populateShadows();\r\n }\r\n\r\n private createShadowArtefact() {\r\n const artefact = new Artefact({\r\n id: -1717171717,\r\n editionId: this.originalArtefact.editionId,\r\n imagedObjectId: '',\r\n imageId: -1,\r\n artefactDataEditorId: -1,\r\n name: 'shadow artefact',\r\n mask: this.originalArtefact.mask.wkt,\r\n artefactMaskEditorId: -1,\r\n isPlaced: true,\r\n placement: this.originalArtefact.placement,\r\n side: this.originalArtefact.side,\r\n });\r\n\r\n return artefact;\r\n }\r\n\r\n private createShadowTextFragment() {\r\n const textFragment = new TextFragment({\r\n textFragmentId: -1717171717,\r\n textFragmentName: 'shadow text fragment',\r\n editorId: -1,\r\n lines: [{\r\n lineId: 1,\r\n lineName: 'shadow line',\r\n editorId: -1,\r\n signs: []\r\n }]\r\n });\r\n\r\n return textFragment;\r\n }\r\n\r\n private getOriginalSignROIs(): SignROI[] {\r\n const signROIs: SignROI[] = [];\r\n\r\n if (this.originalArtefact.rois.length !== this.originalArtefact.signInterpretations.length) {\r\n throw new Error('Virtual artefact mismatch - number of ROIs is not the same as number of SIs');\r\n }\r\n\r\n for (let i = 0; i < this.originalArtefact.rois.length; i++) {\r\n const roi = this.originalArtefact.rois[i];\r\n const si = this.originalArtefact.signInterpretations[i];\r\n\r\n const associatedSi = this.ROItoSI(roi); // Sanity check\r\n if (si !== associatedSi) {\r\n throw new Error('Out of sync scanning ROIs and SIs');\r\n }\r\n signROIs.push([si.sign, roi]);\r\n\r\n // Now, scan the next SIs in the text fragment, to find all SPACE signs, which are\r\n // not part of the virtual artefact, but should be part of the text\r\n let nextSI = this.nextSI(si);\r\n while (nextSI && (nextSI.signType[1] === 'SPACE')) {\r\n signROIs.push([nextSI.sign, undefined]);\r\n nextSI = this.nextSI(nextSI);\r\n }\r\n\r\n if (!nextSI && i !== this.originalArtefact.rois.length - 1) {\r\n throw new Error('Ran out of sign interpretations even though we are not at the end of the artefact');\r\n }\r\n\r\n if (nextSI && nextSI.signType[1] === 'BREAK') {\r\n this.breakAtEnd = true; // Need to add a break sign at the end of the artefact\r\n }\r\n }\r\n\r\n return signROIs;\r\n }\r\n\r\n private extractOriginalText(): string {\r\n function signChar(si: SignInterpretation) {\r\n if (si.signType[1] === 'SPACE') {\r\n return ' ';\r\n }\r\n return si.character || '';\r\n }\r\n return this.originSignROIs.map(sr => signChar(sr[0].signInterpretations[0])).join('');\r\n }\r\n\r\n private ROItoSI(roi: InterpretationRoi) {\r\n // Returns the first ROI and SI of the original artefact\r\n if (!roi.signInterpretationId) {\r\n console.error(`Can't locate sign interpretations in roi ${roi.id}`);\r\n this.$state.corrupted('Virtual Artefact has been corrupted');\r\n }\r\n\r\n const si = this.$state.signInterpretations.get(roi.signInterpretationId!);\r\n return si;\r\n }\r\n\r\n private nextSI(si: SignInterpretation) {\r\n if (si.nextSignInterpretations.length !== 1) {\r\n throw Error('Expected exactly 1 nextSignInterpretation');\r\n }\r\n const nextId = si.nextSignInterpretations[0].nextSignInterpretationId;\r\n const nextSI = this.$state.signInterpretations.get(nextId);\r\n return nextSI;\r\n }\r\n\r\n private shadowSign(original: Sign, indexInLine: number) {\r\n if (original.signInterpretations.length !== 1) {\r\n throw new Error('Expected a sign with only one SignInterpretaetion');\r\n }\r\n\r\n const originalSI = original.signInterpretations[0];\r\n const sign = new Sign({ signInterpretations: [] }, this.shadowTextFragment.lines[0], indexInLine);\r\n const si = new SignInterpretation({\r\n signId: -1, // Patch, we don't really need the signID, but the DTO requires it\r\n character: originalSI.character,\r\n isVariant: false,\r\n signInterpretationId: SignInterpretation.nextAvailableId,\r\n nextSignInterpretations: [],\r\n attributes: [...originalSI.attributes],\r\n rois: [],\r\n }, sign);\r\n\r\n sign.signInterpretations = [si];\r\n\r\n return sign;\r\n }\r\n\r\n private getBaseMeasurements(): [Anchor, Point, number, number?] {\r\n // Getting the base measurements is delicate.\r\n const origin = this.originSignROIs;\r\n const defaultBaseline = this.originalArtefact.boundingBox.height - 5;\r\n\r\n // If the artefact has no signs at all, keep it the same size, anchor to the right - by default\r\n if (!origin.length) {\r\n return ['right', {\r\n x: this.originalArtefact.boundingBox.width,\r\n y: defaultBaseline,\r\n }, this.originalArtefact.boundingBox.width];\r\n }\r\n\r\n // An anchor is a sign to the left or right of the virtual artefact, that fixes the\r\n // position of the virtual artefact.\r\n function getAnchors(): [Anchor, Sign?, Sign?] {\r\n const line = origin[0][0].line;\r\n let rightAnchor: Sign | undefined; // tslint:disable-line\r\n\r\n const firstSign = origin[0][0];\r\n if (firstSign.indexInLine !== 0) {\r\n // The artefact has a right anchor if it is first in line, or the only\r\n // sign before it is a break;\r\n const prevSign = line.signs[firstSign.indexInLine - 1];\r\n if (prevSign.signInterpretations[0].signType[1] !== 'BREAK') {\r\n rightAnchor = line.signs[firstSign.indexInLine - 1];\r\n }\r\n }\r\n\r\n let leftAnchor: Sign | undefined; // tslint:disable-line\r\n const lastSign = origin[origin.length - 1][0];\r\n if (lastSign.indexInLine !== line.signs.length - 1) {\r\n // The artefact has a left anchor if the last sign is not the last in line\r\n // There may be another sign past the last sign, signifying a line break, which still means\r\n // the last sign is the last in line, and the artefact is not anchored.\r\n\r\n const nextSign = line.signs[lastSign.indexInLine + 1];\r\n if (nextSign.signInterpretations[0].signType[1] !== 'BREAK') {\r\n leftAnchor = nextSign;\r\n }\r\n }\r\n\r\n return [rightAnchor ? 'right' : 'left', leftAnchor, rightAnchor];\r\n }\r\n const [anchor, leftAnchor, rightAnchor] = getAnchors();\r\n\r\n const maxWidth = rightAnchor && leftAnchor ? this.originalArtefact.boundingBox.width : undefined;\r\n\r\n // We need the baseline of the artefact, which is the baseline of any of the existing signs on the\r\n // artefact (or the default if there is none)\r\n const script = this.script; // Used for the closure of the inner function\r\n function getBaseline() {\r\n const firstSR = origin.find(sr => !!sr[1]);\r\n if (!firstSR) { // No ROI at all\r\n return defaultBaseline;\r\n }\r\n return firstSR[1]!.position.y;\r\n }\r\n // The base X point is the artefact's left corner if we anchor to the left, or its right\r\n // corner if we anchor to the right\r\n\r\n const baseX = this.originalArtefact.placement!.translate.x + (anchor === 'right' ? this.originalArtefact.boundingBox.width : 0);\r\n const baseY = this.originalArtefact.placement!.translate.y;\r\n return [anchor, { x: baseX, y: baseY }, getBaseline(), maxWidth];\r\n }\r\n\r\n private populateShadows() {\r\n this.clearShadowModels();\r\n this.populateShadowSigns();\r\n this.populateShadowROIs();\r\n this.registerShadowModels();\r\n this.placeShadowArtefact();\r\n }\r\n\r\n private clearShadowModels(unregisterOnly = false) {\r\n for (const sr of this.shadowSignROIs) {\r\n this.$state.signInterpretations.delete(sr[0].signInterpretations[0].id);\r\n if (sr[1]) {\r\n this.$state.interpretationRois.delete(sr[1].id);\r\n }\r\n }\r\n\r\n if (!unregisterOnly) {\r\n this.shadowSignROIs = [];\r\n this.shadowTextFragment.lines[0].signs = [];\r\n }\r\n }\r\n\r\n private attachSign(prev: Sign | undefined, next: Sign) {\r\n if (!prev) {\r\n return;\r\n }\r\n\r\n prev.signInterpretations[0].nextSignInterpretations = [{\r\n creatorId: -1,\r\n editorId: -1,\r\n nextSignInterpretationId: next.signInterpretations[0].id\r\n }];\r\n }\r\n\r\n private createShadowSign(char: string, idx: number, type?: string) {\r\n const sign = new Sign({ signInterpretations: [] }, this.shadowTextFragment.lines[0], idx);\r\n\r\n const si = new SignInterpretation({\r\n signId: -1, // Patch, we don't really need the signID, but the DTO requires it\r\n character: char,\r\n isVariant: false,\r\n signInterpretationId: SignInterpretation.nextAvailableId,\r\n nextSignInterpretations: [],\r\n attributes: [],\r\n rois: [],\r\n }, sign);\r\n sign.signInterpretations = [si];\r\n\r\n if (!type) {\r\n type = char === ' ' ? 'SPACE' : 'LETTER';\r\n }\r\n const typeId = type === 'LETTER' ? 1 : type === 'BREAK' ? 4 : 2;\r\n si.signType = [typeId, type];\r\n\r\n return sign;\r\n }\r\n\r\n private populateShadowSigns() {\r\n if (this.shadowSignROIs.length) {\r\n throw new Error('popualteShadowSign must be called with an empty shadowSignROIs list');\r\n }\r\n\r\n let prevSign: Sign | undefined;\r\n\r\n for (let idx = 0; idx < this.text.length; idx++) {\r\n const char = this.text[idx];\r\n const sign = this.createShadowSign(char, idx);\r\n this.attachSign(prevSign, sign);\r\n prevSign = sign;\r\n\r\n this.shadowSignROIs.push([sign, undefined]);\r\n }\r\n }\r\n\r\n private calcArtefactWidth() {\r\n let width = 0;\r\n let trailingSpaces = 0;\r\n\r\n let prevSI: SignInterpretation | undefined;\r\n for (const sr of this.shadowSignROIs) {\r\n const si = sr[0].signInterpretations[0];\r\n if (si.signType[1] === 'SPACE') {\r\n width += this.script.wordSpace;\r\n trailingSpaces += this.script.wordSpace;\r\n prevSI = undefined;\r\n continue;\r\n }\r\n\r\n if (prevSI) {\r\n const kerning = this.script.getKerning(prevSI.character!, si.character!);\r\n width += kerning?.xKern || 0;\r\n }\r\n\r\n width += this.script.glyphs[si.character!]!.boundingBox.width;\r\n trailingSpaces = 0;\r\n prevSI = si;\r\n }\r\n\r\n width -= trailingSpaces; // There is an issue in the backend, it doesn't take trailing spaces into account\r\n\r\n return width;\r\n }\r\n\r\n private populateShadowROIs() {\r\n // Fill the ROIs based on the sign stream, using the base measurements\r\n\r\n // First thing, clear the existing ROIs\r\n for (const sr of this.shadowSignROIs) {\r\n if (sr[1]) {\r\n this.$state.interpretationRois.delete(sr[1].id);\r\n sr[1] = undefined;\r\n }\r\n }\r\n\r\n // Now create all the ROIs\r\n const width = this.calcArtefactWidth();\r\n let rightX = width; // rightX of next ROI\r\n let prevSI: SignInterpretation | undefined;\r\n for (const sr of this.shadowSignROIs) {\r\n const si = sr[0].signInterpretations[0];\r\n if (si.signType[1] === 'SPACE') {\r\n // In case of space, add no ROI, just push the X coordinate\r\n rightX -= this.script.wordSpace;\r\n prevSI = undefined;\r\n continue;\r\n }\r\n\r\n const gd = this.script.glyphs[si.character || 'א']; // Glyph data of sign\r\n\r\n let kerning: KernPairDTO | undefined; // Kerning between this sign and the previous sign\r\n if (prevSI) {\r\n kerning = this.script.getKerning(prevSI.character!, si.character!);\r\n }\r\n\r\n rightX -= kerning?.xKern || 0;\r\n\r\n // Now we can create the ROI\r\n // We basically replicate the same calculation done in the backend\r\n const roiPosition = { x: rightX - gd.boundingBox.width, y: this.baseline };\r\n const roiBox: BoundingBox = {\r\n x: 0,\r\n y: -gd.yOffset - (kerning?.yKern || 0),\r\n width: gd.boundingBox.width,\r\n height: gd.boundingBox.height,\r\n };\r\n const roiShape = Polygon.fromBox(roiBox);\r\n\r\n const roi = InterpretationRoi.new(this.shadowArtefact, si, roiShape, roiPosition, 0);\r\n si.rois = [roi];\r\n sr[1] = roi;\r\n\r\n rightX = roiPosition.x;\r\n prevSI = si;\r\n }\r\n }\r\n\r\n private registerShadowModels() {\r\n for (const sr of this.shadowSignROIs) {\r\n if (sr[1]) {\r\n this.$state.interpretationRois.put(sr[1]);\r\n }\r\n this.$state.signInterpretations.put(sr[0].signInterpretations[0]);\r\n }\r\n }\r\n\r\n private placeShadowArtefact() {\r\n const width = this.calcArtefactWidth();\r\n const top = this.anchorPoint.y;\r\n const left = this.anchorPoint.x - (this.anchor === 'right' ? width : 0);\r\n const height = this.originalArtefact.boundingBox.height;\r\n\r\n // Now we place the artefact at (top, left) and set its shape to the box\r\n this.shadowArtefact.placement.translate = { x: left, y: top };\r\n this.shadowArtefact.mask = Polygon.fromBox( { x: 0, y: 0, width, height });\r\n }\r\n\r\n public async updateText() {\r\n const url = ApiRoutes.diffReplaceTranscription(this.originalArtefact.editionId, this.originalArtefact.id);\r\n const rois: IndexedReplacementTextRoi[] = [];\r\n\r\n // Gather the ROIs of non-space characters\r\n for (const [index, signRoi] of this.shadowSignROIs.entries()) {\r\n const roi = signRoi[1];\r\n if (!roi) {\r\n continue;\r\n }\r\n\r\n const roiDTO: IndexedReplacementTextRoi = {\r\n index,\r\n roi: {\r\n shape: roi.shape.wkt,\r\n translate: roi.position,\r\n } as SetReconstructedInterpretationRoiDTO,\r\n };\r\n\r\n rois.push(roiDTO);\r\n }\r\n\r\n const dto: DiffReplaceReconstructionRequestDTO = {\r\n textRois: rois,\r\n newText: this.text,\r\n virtualArtefactShape: this.shadowArtefact.mask.wkt,\r\n virtualArtefactPlacement: this.shadowArtefact.placement,\r\n };\r\n\r\n const response = await CommHelper.put(url, dto);\r\n\r\n const handler = new NotificationHandler(); // This class is stateless, we can just use it.\r\n\r\n // First, deletions\r\n/* if (response.data.deleted) {\r\n handler.handleDeletedSignInterpretation(response.data.deleted);\r\n }\r\n\r\n // Then creations\r\n if (response.data.created && response.data.created.signInterpretations) {\r\n handler.handleCreatedSignInterpretation(response.data.created);\r\n }\r\n\r\n // And finally, updates\r\n if (response.data.updated && response.data.updated.signInterpretations) {\r\n handler.handleUpdatedSignInterpretations(response.data.updated);\r\n } */\r\n }\r\n}\r\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Vue, Watch } from 'vue-property-decorator';\r\nimport { VirtualArtefactEditor } from '@/services/virtual-artefact';\r\nimport { Artefact } from '@/models/artefact';\r\n\r\n@Component({\r\n name: 'edit-virtual-artefact-text-pane',\r\n})\r\n// export default class EditVirtualArtefactTextModal extends Vue {\r\nexport default class EditVirtualArtefactTextPane extends Vue {\r\n private text = '';\r\n private originalText = '';\r\n private editor?: VirtualArtefactEditor;\r\n private originalArtefact?: Artefact;\r\n\r\n private mounted() {\r\n this.onShown();\r\n }\r\n\r\n private onShown() {\r\n\r\n if (!this.$state.textFragmentEditor.editedVirtualArtefact) {\r\n this.$state.corrupted('EditorVirtualArtefact modal is shown with no edited virtual artefact');\r\n }\r\n this.originalArtefact = this.$state.textFragmentEditor.editedVirtualArtefact;\r\n\r\n this.editor = new VirtualArtefactEditor(this.$state.textFragmentEditor.editedVirtualArtefact);\r\n\r\n // Hide our artefact, and show the shadow artefact\r\n this.originalArtefact.isPlaced = false;\r\n this.text = this.originalText = this.editor.text;\r\n }\r\n\r\n private onHide() {\r\n\r\n if (!this.editor) {\r\n return;\r\n }\r\n\r\n this.editor.hide();\r\n\r\n this.originalArtefact!.isPlaced = true;\r\n this.$emit('close', { text: this.text, originalText: this.originalText, editor: this.editor });\r\n\r\n this.editor = undefined;\r\n }\r\n\r\n private destroyed() {\r\n this.onHide();\r\n }\r\n\r\n private onTextChanged() {\r\n // Tsvia: If the new text contains illegal characters (non Hebrew and not space), remove the illegal\r\n // characters\r\n if (!this.editor) {\r\n throw new Error('Editor object disappeared');\r\n }\r\n\r\n const hebTextOnly = this.stripNonHebChars(this.text);\r\n this.editor.text = hebTextOnly;\r\n\r\n this.$nextTick(() => {\r\n this.text = hebTextOnly;\r\n });\r\n }\r\n\r\n private stripNonHebChars(input: string): string {\r\n const hebrewAlphabet = 'אבגדהוזחטיכךלמנסעפצקרשתםןףץ ';\r\n let output = '';\r\n\r\n for ( const letter of input ) {\r\n if ( hebrewAlphabet.indexOf( letter ) !== -1) {\r\n output += letter;\r\n }\r\n }\r\n\r\n return output;\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit-virtual-artefact-text.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit-virtual-artefact-text.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./edit-virtual-artefact-text.vue?vue&type=template&id=41396c12&scoped=true&\"\nimport script from \"./edit-virtual-artefact-text.vue?vue&type=script&lang=ts&\"\nexport * from \"./edit-virtual-artefact-text.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./edit-virtual-artefact-text.vue?vue&type=style&index=0&id=41396c12&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"41396c12\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Emit, Model, Vue } from 'vue-property-decorator';\r\nimport TextFragmentComponent from '@/components/text/text-fragment.vue';\r\nimport SignAttributePane from '@/components/sign-attributes/sign-attribute-pane.vue';\r\nimport EditSignModal from '@/components/text/edit-sign-modal.vue';\r\nimport EditVirtualArtefactTextPane from '@/components/text/edit-virtual-artefact-text.vue';\r\nimport { VirtualArtefactEditor } from '@/services/virtual-artefact';\r\n\r\n@Component({\r\n name: 'text-toolbar',\r\n components: {\r\n 'text-fragment': TextFragmentComponent,\r\n 'sign-attribute-pane': SignAttributePane,\r\n 'edit-sign-modal': EditSignModal,\r\n 'edit-virtual-artefact-text-pane': EditVirtualArtefactTextPane,\r\n\r\n },\r\n})\r\n\r\nexport default class TextToolbar extends Vue {\r\n\r\n public get textFragment() {\r\n return this.$state.textFragmentEditor.selectedTextFragment;\r\n }\r\n\r\n private get showEditReconTextBar(): boolean {\r\n return this.$state.showEditReconTextBar;\r\n }\r\n\r\n protected onVirtualTextClose(param: { text: string, originalText: string, editor: VirtualArtefactEditor }) {\r\n this.$state.showEditReconTextBar = false;\r\n\r\n if (param.text !== param.originalText) {\r\n this.$emit('text-changed', { text: param.text, editor: param.editor });\r\n }\r\n }\r\n\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./text-toolbar.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./text-toolbar.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./text-toolbar.vue?vue&type=template&id=c2ccd37e&scoped=true&\"\nimport script from \"./text-toolbar.vue?vue&type=script&lang=ts&\"\nexport * from \"./text-toolbar.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./text-toolbar.vue?vue&type=style&index=0&id=c2ccd37e&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"c2ccd37e\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport EditionIcons from '@/components/cues/edition-icons.vue';\nimport ResizeBar from '@/components/misc/resizeBar.vue';\nimport Waiting from '@/components/misc/Waiting.vue';\nimport Zoomer from '@/components/misc/zoomer.vue';\nimport { EditionManuscriptMetricsDTO } from '@/dtos/sqe-dtos';\nimport { Artefact } from '@/models/artefact';\nimport ArtefactService from '@/services/artefact';\nimport EditionService from '@/services/edition';\nimport { VirtualArtefactEditor } from '@/services/virtual-artefact';\nimport { ScrollEditorState } from '@/state/scroll-editor';\nimport { BoundingBox, Point } from '@/utils/helpers';\nimport { OperationsManager, SavingAgent } from '@/utils/operations-manager';\nimport { Placement } from '@/utils/Placement';\nimport { Component, Vue } from 'vue-property-decorator';\nimport { ArtefactGroup } from '../../models/edition';\nimport { ArtefactEditorOperation } from '../artefact-editor/operations';\nimport { ScrollEditorParams } from '../artefact-editor/types';\nimport { EditorParamsChangedArgs } from '../imaged-object-editor/types';\nimport AddArtefactModal from './add-artefact-modal.vue';\nimport ArtefactToolbox from './artefact-toolbox.vue'; // TBD\nimport ManuscriptToolbar from './manuscript-toolbar.vue';\nimport {\n ArtefactPlacementOperation,\n ArtefactPlacementOperationType,\n EditGroupOperation,\n EditionMetricOperation,\n GroupPlacementOperation,\n ScrollEditorOperation,\n} from './operations';\nimport ScrollArea from './scroll-area.vue';\nimport ScrollMap from './scroll-map.vue';\nimport ScrollRuler from './scroll-ruler.vue';\nimport ScrollTopToolbar from './scroll-top-toolbar.vue';\nimport TextToolbar from './text-toolbar.vue';\n\n@Component({\n name: 'scroll-editor',\n components: {\n Waiting,\n zoomer: Zoomer,\n 'add-artefact-modal': AddArtefactModal,\n 'edition-icons': EditionIcons,\n 'artefact-toolbox': ArtefactToolbox, // TBD\n 'scroll-area': ScrollArea,\n 'scroll-ruler': ScrollRuler,\n 'scroll-map': ScrollMap,\n 'scroll-top-toolbar': ScrollTopToolbar,\n 'manuscript-toolbar': ManuscriptToolbar,\n 'text-toolbar': TextToolbar,\n 'resize-bar': ResizeBar,\n },\n})\nexport default class ScrollEditor\n extends Vue\n implements SavingAgent {\n private operationsManager = new OperationsManager<\n ScrollEditorOperation | ArtefactEditorOperation\n >(this);\n public waiting: boolean = true;\n private editionId: number = 0;\n private observer?: ResizeObserver;\n private editionService = new EditionService();\n\n private selectedSide: string = 'left';\n private metricsInput: number = 1;\n public secondaryToolbarHeight: number = 100;\n //\n\n private get scrollEditorState(): ScrollEditorState {\n return this.$state.scrollEditor;\n }\n private get selectedArtefacts() {\n return this.scrollEditorState.selectedArtefacts;\n }\n public get selectedArtefact() {\n return this.scrollEditorState.selectedArtefact;\n }\n public get selectedGroup() {\n return this.scrollEditorState.selectedGroup;\n }\n public get params(): ScrollEditorParams {\n return this.scrollEditorState.params || new ScrollEditorParams();\n }\n public get edition() {\n return this.$state.editions.current! || {};\n }\n public get editionWidth(): number {\n return this.edition.metrics.width;\n }\n public get editionHeight(): number {\n return this.edition.metrics.height;\n }\n\n public get isTextMode(): boolean {\n return this.scrollEditorState.mode === 'text';\n }\n\n private get viewportSizeWidth() {\n return Math.round(\n this.scrollEditorState.viewport!.width / this.edition.ppm\n );\n }\n private get viewportSizeHeight() {\n return Math.round(\n this.scrollEditorState.viewport!.height / this.edition.ppm\n );\n }\n public get actualWidth(): number {\n return this.edition.metrics.width * this.edition.ppm * this.zoomLevel;\n }\n public get actualHeight(): number {\n return this.edition.metrics.height * this.edition.ppm * this.zoomLevel;\n }\n\n private get zoomLevel() {\n return (this.params && this.params.zoom) || 1;\n }\n\n private get pointerPositionX() {\n return (\n this.scrollEditorState.pointerPosition.x /\n this.params.zoom /\n this.edition.ppm\n ).toFixed(2);\n }\n private get pointerPositionY() {\n return (\n this.scrollEditorState.pointerPosition.y /\n this.params.zoom /\n this.edition.ppm\n ).toFixed(2);\n }\n\n public async saveEntities(ops: ScrollEditorOperation[]): Promise {\n const allMovedArtefactIds = new Set();\n const allEditedGroupIds = new Set();\n const allDeletedGroupIds = new Set();\n let saveMetrics = false;\n\n ops.forEach((op) => {\n // Take artefact placements operations\n if (op instanceof ArtefactPlacementOperation) {\n allMovedArtefactIds.add(op.artefactId);\n } else if (op instanceof GroupPlacementOperation) {\n op.operations.forEach((artOp) =>\n allMovedArtefactIds.add(artOp.getId())\n );\n if (op.type === 'delete' && op.groupId >= 0) {\n allDeletedGroupIds.add(op.groupId);\n }\n // Take EditGroup operations\n } else if (op instanceof EditGroupOperation) {\n allEditedGroupIds.add(op.groupId);\n } else if (op instanceof EditionMetricOperation) {\n saveMetrics = true;\n }\n });\n\n try {\n // save artefacts in bulk\n const allMovedArtefacts = Array.from(allMovedArtefactIds).map(\n (artId) => this.$state.artefacts.find(artId)!\n );\n allMovedArtefacts.forEach((art) => art.prepareForBackend());\n // console.debug('Artefacts after preparing for backend ', allMovedArtefacts.map(art => JSON.stringify(art.placement)));\n\n if (allMovedArtefacts) {\n await this.editionService.updateArtefactDTOs(\n this.editionId,\n allMovedArtefacts\n );\n }\n\n // save groups\n if (allEditedGroupIds.size) {\n allEditedGroupIds.forEach(async (groupId) => {\n const group = this.edition.artefactGroups.find(\n (artGroup) => artGroup.id === groupId\n );\n if (!group) {\n console.error(\n 'Cannot find group in edition with id: ' + groupId\n );\n return;\n }\n // Save new group with id < 0\n if (group.id < 0) {\n if (group.artefactIds.length >= 2) {\n const savedGroup =\n await this.editionService.newArtefactGroup(\n this.editionId,\n group\n );\n group.groupId = savedGroup.id;\n this.updateOperationId(groupId, savedGroup.id);\n this.selectGroup(group);\n }\n // Save edited group with length > 1\n } else if (group.id > 0) {\n if (group.artefactIds.length >= 2) {\n const savedGroup =\n await this.editionService.updateArtefactGroup(\n this.editionId,\n group\n );\n } else {\n await this.editionService.deleteArtefactGroup(\n this.editionId,\n groupId\n );\n }\n }\n });\n }\n\n // delete groups\n allDeletedGroupIds.forEach(async (groupId) => {\n await this.editionService.deleteArtefactGroup(\n this.editionId,\n groupId\n );\n });\n\n // save metrics\n if (saveMetrics) {\n await this.editionService.updateMetrics(\n this.editionId,\n this.edition.metrics\n );\n }\n\n return true;\n } catch (error: any) {\n console.error(error);\n this.$toasted.error(error, { duration: 3000 });\n return false;\n }\n }\n\n private get artefacts() {\n return this.$state.artefacts.items || [];\n }\n private get placedArtefacts() {\n return this.artefacts.filter((x) => x.isPlaced);\n }\n\n protected created() {\n this.$state.eventBus.on('select-group', this.selectGroup);\n this.$state.eventBus.on('save-group', this.saveGroupArtefacts);\n this.$state.eventBus.on('delete-group', this.deleteGroup);\n this.$state.eventBus.on('update-operation-id', this.updateOperationId);\n this.$state.eventBus.on('new-operation', this.onNewOperation);\n this.$state.eventBus.on(\n 'new-bulk-operations',\n this.onNewBulkOperations\n );\n this.observer = new ResizeObserver((entries) => this.onResize(entries));\n\n // Moved to created() to avoid unclear material or text mode\n this.$state.scrollEditor = new ScrollEditorState();\n }\n\n protected destroyed() {\n this.$state.eventBus.off('select-group', this.selectGroup);\n this.$state.eventBus.off('save-group', this.saveGroupArtefacts);\n this.$state.eventBus.off('delete-group', this.deleteGroup);\n this.$state.eventBus.off('update-operation-id', this.updateOperationId);\n this.$state.eventBus.off('new-operation', this.onNewOperation);\n this.$state.eventBus.off(\n 'new-bulk-operations',\n this.onNewBulkOperations\n );\n\n if (this.observer) {\n this.observer.disconnect();\n }\n\n this.$state.operationsManager = null;\n }\n\n private async mounted() {\n this.waiting = true;\n // This code is not in the created method since it's asynchronous, and Vue doesn't wait for\n // an asynchornous created to finish before calling mounted. Instead of adding a synchronization\n // between created and mounted, we just moved it to mounted.\n this.editionId = parseInt(this.$route.params.editionId, 10);\n await this.$state.prepare.edition(this.editionId);\n await this.$state.prepare.editionFullText(this.editionId);\n\n const edition = this.$state.editions.find(this.editionId); // Set the current scroll\n if (!edition) {\n this.$router.push({ path: '/' });\n }\n this.$state.editions.current = edition;\n this.$state.artefacts.current = null;\n this.$state.imagedObjects.current = null;\n this.waiting = false;\n await this.$nextTick();\n this.$root.$on('bv::modal::hide', (bvEvent: any, modalId: any) => {\n if (modalId === 'addArtefactModal') {\n const artefactIds = bvEvent.trigger;\n this.onAddArtefactModalClose(artefactIds);\n }\n });\n\n this.observer!.observe(this.$refs.artefactContainer as Element);\n this.observer!.observe(this.$refs.artefactSidebar as Element);\n this.onResize([]);\n this.$state.operationsManager = this.operationsManager;\n this.$state.textFragmentEditor.textEditingMode = 'manuscript';\n }\n\n private async beforeRouteUpdate(to: any, from: any, next: () => void) {\n this.editionId = parseInt(to.params.editionId, 10);\n await this.$state.prepare.edition(this.editionId);\n await this.$state.prepare.editionFullText(this.editionId);\n next();\n }\n\n private onMetricsChange() {\n this.calculateViewport();\n }\n\n public onNewOperation(op: ArtefactEditorOperation) {\n this.operationsManager.addOperation(op);\n }\n\n private onNewBulkOperations(ops: ArtefactEditorOperation[]) {\n this.operationsManager.addBulkOperations(ops);\n }\n\n private async onAddArtefactModalClose(artIds: number[]) {\n const artefacts = this.$state.artefacts.items.filter((art: Artefact) =>\n artIds.includes(art.id)\n );\n if (artefacts) {\n const orderedArtefacts = this.artefacts\n .filter((x) => x.isPlaced)\n .map((x) => x.placement.zIndex);\n const maxZindex = orderedArtefacts.length\n ? Math.max(...orderedArtefacts)\n : 0;\n\n // Place close to topleft corner of viewport\n // const placement = new Placement({\n // translate: {\n // x: (this.$state.scrollEditor.viewport?.x || 0) + 50,\n // y: (this.$state.scrollEditor.viewport?.y || 0) + 50,\n // },\n // scale: 1,\n // rotate: 0,\n // zIndex: maxZindex + 1,\n // mirrored: false,\n // });\n\n artefacts.forEach((art: Artefact, index: number) => {\n const placement = new Placement({\n translate: {\n x:\n (this.$state.scrollEditor.viewport?.x || 0) +\n 50 +\n index * 500,\n y: (this.$state.scrollEditor.viewport?.y || 0) + 50,\n },\n scale: 1,\n rotate: 0,\n zIndex: maxZindex + 1 + index,\n mirrored: false,\n });\n\n const operation = new ArtefactPlacementOperation(\n art.id,\n 'add',\n Placement.empty,\n placement,\n art.isPlaced,\n true\n );\n art.placeOnScroll(placement);\n\n // load artefact Rois\n /*\n No need, ROIs were already loaded\n await Promise.all(\n artefact.textFragments.map((tf: ArtefactTextFragmentData) => {\n this.$state.prepare.textFragment(artefact.editionId, tf.id);\n })\n ); */\n\n this.newOperation(operation);\n });\n\n this.selectArtefact(artefacts[0]);\n }\n }\n\n private notifyChange(paramName: string, paramValue: any) {\n const args = {\n property: paramName,\n value: paramValue,\n params: this.params,\n } as unknown as EditorParamsChangedArgs; // TODO: Change this to the right type\n this.$emit('paramsChanged', args);\n }\n\n public onZoomChangedGlobal(val: number) {\n this.params.zoom = val; //\n this.calculateViewport();\n }\n\n public selectArtefact(artefact: Artefact | undefined) {\n if (!artefact) {\n this.selectGroup(undefined);\n }\n\n const existingGroup = this.edition!.artefactGroups.find(\n (x) => artefact && x.artefactIds.includes(artefact.id)\n );\n\n if (this.params.mode === 'manageGroup' || this.params.mode === 'multipleSelect') {\n if (!this.selectedGroup) {\n const newGroup = ArtefactGroup.generateGroup(\n this.selectedArtefact ? [this.selectedArtefact!.id] : [],\n this.params.mode === 'multipleSelect' ? true : false\n );\n this.scrollEditorState.selectGroup(newGroup);\n }\n\n const isSelectedIndex = this.selectedGroup!.artefactIds.findIndex(\n (a) => a === artefact!.id\n );\n\n if (isSelectedIndex > -1) {\n // remove artefact from current group\n this.selectedGroup!.artefactIds.splice(isSelectedIndex, 1);\n } else if (!existingGroup) {\n // if artefact not in any group or in this group but was unselected\n this.selectedGroup!.artefactIds.push(artefact!.id);\n }\n } else {\n if (existingGroup) {\n // if artefact already in group\n this.scrollEditorState.selectGroup(existingGroup);\n } else {\n this.scrollEditorState.selectArtefact(artefact!);\n }\n }\n }\n\n private onResize(entries: ResizeObserverEntry[]) {\n this.calculateViewport();\n this.calculateSecondaryToolbarHeight();\n }\n\n public onScroll() {\n this.calculateViewport();\n }\n\n private calculateViewport() {\n const div = this.$refs.artefactContainer as Element;\n const zoom = this.params?.zoom || 1;\n\n // Get the client width and height in edition coordinates from the client rect\n const pixelRect = div.getBoundingClientRect();\n const width = pixelRect.width / zoom;\n const height = pixelRect.height / zoom;\n\n // Get the scroll offset in edition coordinates from the element itself\n let top = div.scrollTop / zoom;\n let left = div.scrollLeft / zoom;\n\n // Take into account the edition's origin\n left += this.edition.metrics.xOrigin * this.edition.ppm;\n top += this.edition.metrics.yOrigin * this.edition.ppm;\n\n const viewport = new BoundingBox(left, top, width, height);\n // Vue.set(this.$state.scrollEditor, 'viewport', viewport);\n this.$state.scrollEditor.viewport = viewport;\n }\n\n private calculateSecondaryToolbarHeight() {\n // Set the height of the secondary toolbar to the artefactSidebar height, minus the scrollmap's height.\n // We must set the height explicitly, otherwise the vertical scrollbar on the secondary toolbar misbehaves\n const artefactsContainer = this.$refs.artefactContainer as Element;\n const artefactsContainerHeight =\n artefactsContainer.getBoundingClientRect().height;\n const scrollmap = this.$refs.scrollMap as Element;\n const scrollmapHeight = scrollmap.getBoundingClientRect().height;\n\n const height = artefactsContainerHeight - scrollmapHeight;\n\n this.secondaryToolbarHeight = height;\n }\n\n private updateOperationId(oldId: number, newId: number) {\n this.operationsManager.updateStackIds(oldId, newId);\n }\n\n private createOperation(\n opType: ArtefactPlacementOperationType,\n newPlacement: Placement,\n artefact: Artefact | undefined,\n newIsPlaced: boolean\n ): ArtefactPlacementOperation {\n const op = new ArtefactPlacementOperation(\n artefact!.id,\n opType,\n artefact!.placement,\n newPlacement,\n artefact!.isPlaced,\n newIsPlaced\n );\n artefact!.placement = newPlacement;\n artefact!.isPlaced = newIsPlaced;\n\n return op;\n }\n\n public navigateToPoint(pt: Point) {\n const div = this.$refs.artefactContainer as Element;\n const viewport = this.$state.scrollEditor.viewport;\n const zoom = this.params?.zoom || 1;\n\n if (!viewport) {\n console.warn(\"Can't navigate with a null viewport\");\n return;\n }\n\n // First, find the new top-left of the viewport, in edition coordinates\n let left = pt.x - viewport.width / 2;\n let top = pt.y - viewport.height / 2;\n\n // Now adjust the xOrigin, yOrigin offset\n left -= this.edition.metrics.xOrigin * this.edition.ppm;\n top -= this.edition.metrics.yOrigin * this.edition.ppm;\n\n // Take the coom into account\n left *= zoom;\n top *= zoom;\n\n // Finally we can scroll\n div.scroll(left, top);\n }\n\n private resizeScroll(direction: number) {\n const newMetrics: EditionManuscriptMetricsDTO = {\n ...this.edition.metrics,\n };\n\n switch (this.selectedSide) {\n case 'left':\n case 'right':\n newMetrics.width += +this.metricsInput * direction;\n if (this.selectedSide === 'left') {\n newMetrics.xOrigin += +this.metricsInput * direction * -1;\n }\n break;\n\n case 'top':\n case 'down':\n newMetrics.height += +this.metricsInput * direction;\n if (this.selectedSide === 'top') {\n newMetrics.yOrigin += +this.metricsInput * direction * -1;\n }\n break;\n }\n if (\n direction === -1 &&\n !this.allowResizing(this.selectedSide, newMetrics)\n ) {\n this.$toasted.error(\n 'Cannot resize scroll because artefacts will be cropped',\n { duration: 3000 }\n );\n } else {\n const metricsOperation = new EditionMetricOperation(\n this.edition.id,\n this.edition.metrics,\n newMetrics\n );\n this.edition.metrics = { ...newMetrics };\n this.newOperation(metricsOperation);\n this.$emit('onMetricsChange');\n }\n }\n private allowResizing(\n side: string,\n newMetrics: EditionManuscriptMetricsDTO\n ): boolean {\n // left : XOrigin <= Xmin\n if (side === 'left') {\n const minX =\n Math.min(\n ...this.placedArtefacts.map(\n (art) => art.placement.translate.x!\n )\n ) / this.edition.ppm;\n return newMetrics.xOrigin <= minX;\n }\n\n // right : Xmax <= width\n if (side === 'right') {\n const maxX =\n Math.max(\n ...this.placedArtefacts.map(\n (art) =>\n art.placement.translate.x! + art.boundingBox.width\n )\n ) / this.edition.ppm;\n return maxX - newMetrics.xOrigin <= newMetrics.width;\n }\n\n // top : YOrigin <= Ymin\n if (side === 'top') {\n const minY =\n Math.min(\n ...this.placedArtefacts.map(\n (art) => art.placement.translate.y!\n )\n ) / this.edition.ppm;\n return newMetrics.yOrigin <= minY;\n }\n\n // down : Ymax <= height\n if (side === 'down') {\n const maxY =\n Math.max(\n ...this.placedArtefacts.map(\n (art) =>\n art.placement.translate.y! + art.boundingBox.height\n )\n ) / this.edition.ppm;\n return maxY - newMetrics.yOrigin <= newMetrics.height;\n }\n\n return true;\n }\n\n //\n\n private selectGroup(group: ArtefactGroup | undefined) {\n this.scrollEditorState.selectGroup(group);\n }\n\n public saveGroupArtefacts() {\n if (this.selectedGroup === null) {\n console.warn('Cannot save null group');\n return;\n }\n\n const group = this.edition.artefactGroups.find(\n (x) => x.groupId === this.selectedGroup!.groupId\n );\n this.operationsManager.addOperation(\n new EditGroupOperation(\n this.selectedGroup!.groupId,\n group ? group.artefactIds : [],\n this.selectedGroup!.artefactIds\n )\n );\n if (group) {\n if (\n !this.selectedGroup!.artefactIds ||\n this.selectedGroup!.artefactIds.length < 2\n ) {\n this.deleteGroup(group.groupId);\n this.cancelGroup();\n } else {\n group.artefactIds = [...this.selectedGroup!.artefactIds];\n this.params.mode = '';\n }\n } else if (!this.selectedGroup.notSave) {\n this.edition!.artefactGroups.push(this.selectedGroup!.clone());\n this.params.mode = '';\n }\n }\n\n public deleteGroup(groupId: number) {\n const groupArtefact = this.edition.artefactGroups.find(\n (x) => x.groupId === groupId\n );\n if (groupArtefact) {\n groupArtefact.artefactIds = [];\n }\n }\n\n public cancelGroup() {\n this.selectGroup(undefined);\n this.params.mode = '';\n }\n\n private openAddArtefactModal() {\n this.$root.$emit('bv::show::modal', 'addArtefactModal');\n }\n\n public newOperation(operation: ScrollEditorOperation) {\n this.operationsManager.addOperation(operation);\n }\n\n public async onTextChanged(params: {\n text: string;\n editor: VirtualArtefactEditor;\n }) {\n const editedArtefact =\n this.$state.textFragmentEditor.editedVirtualArtefact;\n\n if (!editedArtefact) {\n console.error(\n \"Can't save text changed, $state.textFragmentEditor.editedVirtualArtefact is not set\"\n );\n return;\n }\n\n if (!editedArtefact?.isVirtual) {\n console.error(\"Can't save text change of a non-virtual artefact\");\n return;\n }\n\n if (!editedArtefact.signInterpretations.length) {\n console.error(\n \"Can't save text of a virtual artefact with no sign interpretations\"\n );\n }\n const line = editedArtefact.signInterpretations[0].sign.line;\n\n params.editor.updateText();\n }\n\n public onKeyDown(event: KeyboardEvent) {\n if (this.scrollEditorState.selectedArtefacts.length) {\n (this.$refs.topToolbar as ScrollTopToolbar).onKeyDown(event);\n } else {\n const el = this.$refs.artefactContainer as Element;\n const amount = 30;\n switch (event.key) {\n case 'ArrowDown':\n el.scrollTop += amount;\n break;\n case 'PageDown':\n el.scrollTop += amount * 3;\n break;\n case 'ArrowUp':\n el.scrollTop -= amount;\n break;\n case 'PageUp':\n el.scrollTop -= amount * 3;\n break;\n case 'ArrowLeft':\n el.scrollLeft -= amount;\n break;\n case 'ArrowRight':\n el.scrollLeft += amount;\n break;\n case 'Home':\n el.scrollTo(0, 0);\n break;\n case 'End':\n el.scrollTo(el.scrollWidth, el.scrollHeight);\n break;\n default:\n break;\n }\n }\n if (event.key === 'Delete') {\n this.$root.$emit('delete-key-pressed');\n }\n }\n\n public onKeyPress(event: KeyboardEvent) {\n if (event.key === 'g') {\n console.log('ctrl');\n this.params.mode = 'multipleSelect';\n }\n }\n public onKeyUp(event: KeyboardEvent) {\n if (event.key === 'g') {\n this.params.mode = '';\n }\n }\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./scroll-editor.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./scroll-editor.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./scroll-editor.vue?vue&type=template&id=63a9378a&scoped=true&\"\nimport script from \"./scroll-editor.vue?vue&type=script&lang=ts&\"\nexport * from \"./scroll-editor.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./scroll-editor.vue?vue&type=style&index=0&id=63a9378a&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"63a9378a\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('b-modal',{ref:\"registerModalRef\",attrs:{\"header-class\":\"title-header\",\"footer-class\":\"title-footer\",\"id\":\"registerModal\"},scopedSlots:_vm._u([{key:\"modal-header\",fn:function(){return [_c('b-row',{staticClass:\"mt-3\"},[_c('b-col',{attrs:{\"cols\":\"12\"}},[_vm._v(\"Create a researcher account\")])],1)]},proxy:true},{key:\"modal-footer\",fn:function(){return [_c('div',{staticClass:\"w-100\"},[_c('b-button',{staticClass:\"btn-login-modal\",attrs:{\"block\":\"\",\"variant\":\"primary\",\"disabled\":_vm.disabledReg},on:{\"click\":_vm.register}},[_vm._v(\" \"+_vm._s(_vm.$t('navbar.register'))+\" \"),(_vm.waiting)?_c('span',[_c('font-awesome-icon',{attrs:{\"icon\":\"spinner\",\"spin\":\"\"}})],1):_vm._e()])],1)]},proxy:true}])},[_c('b-container',{attrs:{\"fluid\":\"\"},on:{\"keyup\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.register.apply(null, arguments)}}},[_c('b-row',{staticClass:\"mb-3\"},[_c('b-col',[_c('b-form-input',{attrs:{\"name\":\"forename\",\"placeholder\":\"Forename\"},model:{value:(_vm.forename),callback:function ($$v) {_vm.forename=$$v},expression:\"forename\"}})],1)],1),_c('b-row',{staticClass:\"mb-3\"},[_c('b-col',[_c('b-form-input',{attrs:{\"name\":\"surname\",\"placeholder\":\"Surname\"},model:{value:(_vm.surname),callback:function ($$v) {_vm.surname=$$v},expression:\"surname\"}})],1)],1),_c('b-row',{staticClass:\"mb-3\"},[_c('b-col',[_c('b-form-input',{attrs:{\"type\":\"email\",\"placeholder\":\"Email for verification\"},model:{value:(_vm.email),callback:function ($$v) {_vm.email=$$v},expression:\"email\"}})],1)],1),_c('b-row',{staticClass:\"mb-3\"},[_c('b-col',[_c('b-form-input',{attrs:{\"type\":\"password\",\"name\":\"password\",\"placeholder\":\"Password\"},model:{value:(_vm.password),callback:function ($$v) {_vm.password=$$v},expression:\"password\"}})],1)],1),_c('b-row',{staticClass:\"mb-3\"},[_c('b-col',[_c('b-form-input',{attrs:{\"type\":\"password\",\"name\":\"repassword\",\"placeholder\":\"Repeat password\"},model:{value:(_vm.repassword),callback:function ($$v) {_vm.repassword=$$v},expression:\"repassword\"}})],1)],1),_c('b-row',{staticClass:\"mb-3\"},[_c('b-col',[_c('b-form-input',{attrs:{\"placeholder\":\"Organization\"},model:{value:(_vm.organization),callback:function ($$v) {_vm.organization=$$v},expression:\"organization\"}})],1)],1),_c('b-row',{staticClass:\"mb-3\"},[_c('b-col',[_c('b-checkbox',{model:{value:(_vm.termsOfUse),callback:function ($$v) {_vm.termsOfUse=$$v},expression:\"termsOfUse\"}},[_vm._v(\"I have read and accept the \"),_c('b-link',{attrs:{\"href\":\"#\"},on:{\"click\":_vm.showTermsOfUse}},[_vm._v(\"Terms of Use\")]),_vm._v(\".\")],1)],1)],1)],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import Vue from 'vue';\r\n\r\ninterface ErrorDTO {\r\n msg: string;\r\n}\r\n\r\nclass ErrorService {\r\n\r\n constructor(private vue: Vue) {\r\n }\r\n\r\n public getErrorMessage(error: ErrorDTO): string {\r\n return 'Error: ' + error.msg;\r\n }\r\n}\r\n\r\nexport default ErrorService;\r\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Prop, Emit, Vue } from 'vue-property-decorator';\n\nimport SessionService from '@/services/session';\nimport ErrorService from '@/services/error';\nimport { NewUserRequestDTO } from '@/dtos/sqe-dtos';\nimport router from '@/router';\n\n\n\n@Component({\n name: 'registration',\n})\n\nexport default class Registration extends Vue {\n\n // data\n\n protected forename: string = '';\n protected surname: string = '';\n protected email: string = '';\n protected password: string = '';\n protected repassword: string = '';\n protected organization: string = '';\n protected errorMessage: string = '';\n protected sessionService: SessionService = new SessionService();\n protected errorService: ErrorService = new ErrorService(this);\n protected waiting: boolean = false;\n protected termsOfUse: boolean = false;\n\n\n // computed\n\n public get disabledReg(): boolean {\n return (\n this.password !== this.repassword ||\n !this.forename ||\n !this.surname ||\n !this.email ||\n !this.password ||\n !this.repassword ||\n !this.termsOfUse ||\n this.waiting\n );\n }\n\n public get identicalError(): string {\n if (\n this.password &&\n this.repassword &&\n this.password !== this.repassword\n ) {\n return 'Passwords must be identical';\n }\n return '';\n }\n\n protected showTermsOfUse() {\n this.$root.$emit('bv::show::modal', 'EulaModal');\n }\n\n // methods\n protected async register() {\n const data = {\n forename: this.forename,\n surname: this.surname,\n email: this.email,\n organization: this.organization,\n password: this.password,\n } as NewUserRequestDTO;\n this.waiting = true;\n\n try {\n const userInfo = await this.sessionService.register(data);\n\n // this causes\n // vue-router.esm.js?8c4f:2008 Uncaught (in promise)\n // NavigationDuplicated: Avoided redundant navigation to current\n // location: \"/\".\n // Also no need, since login will be done from adtivation page.\n\n // router.push('/');\n // this.$router.push('/');\n\n this.$toasted.show(this.$tc('toasts.activationLink'), {\n type: 'info',\n position: 'top-right',\n duration: 9000, // was 7000\n });\n } catch (err) {\n this.errorMessage = this.errorService.getErrorMessage(\n err.response.data\n );\n } finally {\n this.waiting = false;\n\n // Close modal window,\n // But the login will be done from the activation page.\n (this.$refs.registerModalRef as any).hide();\n }\n }\n\n}\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Registration.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Registration.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Registration.vue?vue&type=template&id=5193f144&scoped=true&\"\nimport script from \"./Registration.vue?vue&type=script&lang=ts&\"\nexport * from \"./Registration.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Registration.vue?vue&type=style&index=0&id=5193f144&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5193f144\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('form',[_c('b-row',{staticClass:\"mb-3 no-gutters\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('navbar.changePassword')))])]),_c('b-row',{staticClass:\"mb-3\"},[_c('b-col',{attrs:{\"cols\":\"2\"}},[_vm._v(_vm._s(_vm.$t('navbar.currentPassword')))]),_c('b-col',{staticClass:\"col col-lg-4 col-md-3\"},[_c('b-form-input',{attrs:{\"type\":\"password\"},model:{value:(_vm.currentPassword),callback:function ($$v) {_vm.currentPassword=$$v},expression:\"currentPassword\"}})],1)],1),_c('b-row',{staticClass:\"mb-3\"},[_c('b-col',{attrs:{\"cols\":\"2\"}},[_vm._v(_vm._s(_vm.$t('navbar.newPassword')))]),_c('b-col',{staticClass:\"col col-lg-4 col-md-3\"},[_c('b-form-input',{attrs:{\"type\":\"password\"},model:{value:(_vm.newPassword),callback:function ($$v) {_vm.newPassword=$$v},expression:\"newPassword\"}})],1)],1),_c('b-row',{staticClass:\"mb-3\"},[_c('b-col',{attrs:{\"cols\":\"2\"}},[_vm._v(_vm._s(_vm.$t('navbar.repassword')))]),_c('b-col',{staticClass:\"col col-lg-4 col-md-3\"},[_c('b-form-input',{attrs:{\"type\":\"password\"},model:{value:(_vm.rePassword),callback:function ($$v) {_vm.rePassword=$$v},expression:\"rePassword\"}})],1)],1),_c('b-row',[_c('b-col',{staticClass:\"text-danger\"},[_vm._v(_vm._s(_vm.identicalError))])],1),_c('b-button',{attrs:{\"variant\":\"primary\",\"disabled\":_vm.disableChange},on:{\"click\":_vm.change}},[_vm._v(\" \"+_vm._s(_vm.$t('navbar.change'))+\" \"),(_vm.waiting)?_c('span',[_c('font-awesome-icon',{attrs:{\"icon\":\"spinner\",\"spin\":\"\"}})],1):_vm._e()]),_c('b-row',[_c('b-col',{staticClass:\"text-danger\"},[_vm._v(_vm._s(_vm.errorMessage))])],1)],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Emit, Vue } from 'vue-property-decorator';\r\n\r\nimport SessionService from '@/services/session';\r\nimport ErrorService from '@/services/error';\r\nimport { ResetLoggedInUserPasswordRequestDTO } from '@/dtos/sqe-dtos';\r\nimport router from '@/router';\r\n\r\n@Component({\r\n name: 'change-password',\r\n})\r\nexport default class ChangePassword extends Vue {\r\n // data\r\n\r\n protected currentPassword: string = '';\r\n protected newPassword: string = '';\r\n protected rePassword: string = '';\r\n protected errorMessage: string = '';\r\n protected sessionService: SessionService = new SessionService();\r\n protected errorService: ErrorService = new ErrorService(this);\r\n protected waiting: boolean = false;\r\n\r\n // computed\r\n public get disableChange(): boolean {\r\n return (\r\n this.newPassword !== this.rePassword ||\r\n !this.currentPassword ||\r\n !this.newPassword ||\r\n !this.rePassword ||\r\n this.waiting\r\n );\r\n }\r\n\r\n public get identicalError(): string {\r\n if (\r\n this.newPassword &&\r\n this.rePassword &&\r\n this.newPassword !== this.rePassword\r\n ) {\r\n return 'Passwords must be identical';\r\n }\r\n return '';\r\n }\r\n\r\n // methods\r\n protected async change() {\r\n const data = {\r\n oldPassword: this.currentPassword,\r\n newPassword: this.newPassword,\r\n } as ResetLoggedInUserPasswordRequestDTO;\r\n this.waiting = true;\r\n\r\n try {\r\n await this.sessionService.changePassword(data);\r\n router.push('/');\r\n this.$toasted.show(this.$tc('toasts.passwordChanged'), {\r\n type: 'info',\r\n position: 'top-right',\r\n duration: 7000,\r\n });\r\n } catch (err) {\r\n this.errorMessage = this.errorService.getErrorMessage(\r\n err.response.data\r\n );\r\n } finally {\r\n this.waiting = false;\r\n }\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ChangePassword.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ChangePassword.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ChangePassword.vue?vue&type=template&id=20507d11&scoped=true&\"\nimport script from \"./ChangePassword.vue?vue&type=script&lang=ts&\"\nexport * from \"./ChangePassword.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./ChangePassword.vue?vue&type=style&index=0&id=20507d11&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"20507d11\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('form',[_c('b-row',{staticClass:\"mb-3 no-gutters\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('navbar.updateUserDetails')))])]),_c('b-row',{staticClass:\"mb-3\"},[_c('b-col',{attrs:{\"cols\":\"3\"}},[_vm._v(_vm._s(_vm.$t('navbar.enterYourPassword')))]),_c('b-col',{staticClass:\"col col-lg-4 col-md-3\"},[_c('b-form-input',{attrs:{\"type\":\"password\"},model:{value:(_vm.password),callback:function ($$v) {_vm.password=$$v},expression:\"password\"}})],1)],1),_c('b-row',{staticClass:\"mb-3\"},[_c('b-col',{attrs:{\"cols\":\"3\"}},[_vm._v(_vm._s(_vm.$t('navbar.forename')))]),_c('b-col',{staticClass:\"col col-lg-4 col-md-3\"},[_c('b-form-input',{model:{value:(_vm.forename),callback:function ($$v) {_vm.forename=$$v},expression:\"forename\"}})],1)],1),_c('b-row',{staticClass:\"mb-3\"},[_c('b-col',{attrs:{\"cols\":\"3\"}},[_vm._v(_vm._s(_vm.$t('navbar.surname')))]),_c('b-col',{staticClass:\"col col-lg-4 col-md-3\"},[_c('b-form-input',{model:{value:(_vm.surname),callback:function ($$v) {_vm.surname=$$v},expression:\"surname\"}})],1)],1),_c('b-row',{staticClass:\"mb-3\"},[_c('b-col',{attrs:{\"cols\":\"3\"}},[_vm._v(_vm._s(_vm.$t('navbar.email')))]),_c('b-col',{staticClass:\"col col-lg-4 col-md-3\"},[_c('b-form-input',{attrs:{\"type\":\"email\"},model:{value:(_vm.email),callback:function ($$v) {_vm.email=$$v},expression:\"email\"}})],1)],1),_c('b-row',{staticClass:\"mb-3\"},[_c('b-col',{attrs:{\"cols\":\"3\"}},[_vm._v(_vm._s(_vm.$t('navbar.organization')))]),_c('b-col',{staticClass:\"col col-lg-4 col-md-3\"},[_c('b-form-input',{model:{value:(_vm.organization),callback:function ($$v) {_vm.organization=$$v},expression:\"organization\"}})],1)],1),_c('b-button',{attrs:{\"variant\":\"primary\",\"disabled\":_vm.disableChange},on:{\"click\":_vm.change}},[_vm._v(\" \"+_vm._s(_vm.$t('navbar.update'))+\" \"),(_vm.waiting)?_c('span',[_c('font-awesome-icon',{attrs:{\"icon\":\"spinner\",\"spin\":\"\"}})],1):_vm._e()]),_c('b-row',[_c('b-col',{staticClass:\"text-danger\"},[_vm._v(_vm._s(_vm.errorMessage))])],1)],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Emit, Vue } from 'vue-property-decorator';\r\n\r\nimport SessionService from '@/services/session';\r\nimport ErrorService from '@/services/error';\r\nimport { UserUpdateRequestDTO } from '@/dtos/sqe-dtos';\r\nimport router from '@/router';\r\n\r\n@Component({\r\n name: 'update-user',\r\n})\r\nexport default class UpdateUser extends Vue {\r\n // data\r\n protected password: string = '';\r\n protected surname: string | undefined = this.$state.session.user!.surname;\r\n protected forename: string | undefined = this.$state.session.user!.forename;\r\n protected email: string = this.$state.session.user!.email;\r\n protected organization: string | undefined =\r\n this.$state.session.user!.organization;\r\n protected errorMessage: string = '';\r\n protected sessionService: SessionService = new SessionService();\r\n protected errorService: ErrorService = new ErrorService(this);\r\n protected waiting: boolean = false;\r\n\r\n // computed\r\n\r\n public get disableChange(): boolean {\r\n return (\r\n this.password === '' ||\r\n (this.surname === this.$state.session.user!.surname &&\r\n this.forename === this.$state.session.user!.forename &&\r\n this.email === this.$state.session.user!.email &&\r\n this.organization === this.$state.session.user!.organization)\r\n );\r\n }\r\n\r\n // methods\r\n\r\n protected async change() {\r\n let emailChanged = false;\r\n if (this.email !== this.$state.session.user!.email) {\r\n emailChanged = true;\r\n }\r\n const data = {\r\n password: this.password,\r\n surname: this.surname,\r\n forename: this.forename,\r\n email: this.email,\r\n organization: this.organization,\r\n } as UserUpdateRequestDTO;\r\n\r\n this.waiting = true;\r\n\r\n try {\r\n const userInfo = await this.sessionService.updateUser(data);\r\n router.push('/');\r\n\r\n this.$toasted.show(this.$tc('toasts.detailsChanged'), {\r\n type: 'info',\r\n position: 'top-right',\r\n duration: 7000,\r\n });\r\n if (emailChanged) {\r\n this.$toasted.show(this.$tc('toasts.activationLink'), {\r\n type: 'info',\r\n position: 'top-right',\r\n duration: 7000,\r\n });\r\n }\r\n // todo: update details in $state, the name in the navbar have to update\r\n this.$state.session.user = userInfo;\r\n } catch (err) {\r\n this.errorMessage = this.errorService.getErrorMessage(\r\n err.response.data\r\n );\r\n } finally {\r\n this.waiting = false;\r\n }\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UpdateUser.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UpdateUser.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./UpdateUser.vue?vue&type=template&id=db99d010&scoped=true&\"\nimport script from \"./UpdateUser.vue?vue&type=script&lang=ts&\"\nexport * from \"./UpdateUser.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./UpdateUser.vue?vue&type=style&index=0&id=db99d010&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"db99d010\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('form',[_c('b-row',{staticClass:\"mb-3\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('navbar.changeForgottenPassword')))])]),_c('b-row',{staticClass:\"mb-3\"},[_c('b-col',{attrs:{\"cols\":\"2\"}},[_vm._v(_vm._s(_vm.$t('navbar.newPassword')))]),_c('b-col',{attrs:{\"cols\":\"2\"}},[_c('b-form-input',{attrs:{\"type\":\"password\"},model:{value:(_vm.newPassword),callback:function ($$v) {_vm.newPassword=$$v},expression:\"newPassword\"}})],1)],1),_c('b-row',{staticClass:\"mb-3\"},[_c('b-col',{attrs:{\"cols\":\"2\"}},[_vm._v(_vm._s(_vm.$t('navbar.repassword')))]),_c('b-col',{attrs:{\"cols\":\"2\"}},[_c('b-form-input',{attrs:{\"type\":\"password\"},model:{value:(_vm.rePassword),callback:function ($$v) {_vm.rePassword=$$v},expression:\"rePassword\"}})],1)],1),_c('b-row',[_c('b-col',{staticClass:\"text-danger\"},[_vm._v(_vm._s(_vm.identicalError))])],1),_c('b-button',{attrs:{\"variant\":\"primary\",\"disabled\":_vm.disableChange},on:{\"click\":_vm.change}},[_vm._v(\" \"+_vm._s(_vm.$t('navbar.change'))+\" \"),(_vm.waiting)?_c('span',[_c('font-awesome-icon',{attrs:{\"icon\":\"spinner\",\"spin\":\"\"}})],1):_vm._e()]),_c('b-row',[_c('b-col',{staticClass:\"text-danger\"},[_vm._v(_vm._s(_vm.errorMessage))])],1)],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Emit, Vue } from 'vue-property-decorator';\r\n\r\nimport SessionService from '@/services/session';\r\nimport ErrorService from '@/services/error';\r\nimport router from '@/router';\r\nimport { ResetForgottenUserPasswordRequestDTO } from '@/dtos/sqe-dtos';\r\n\r\n@Component({\r\n name: 'change-forgotten-password'\r\n})\r\n\r\nexport default class ChangeForgottenPassword extends Vue {\r\n\r\n // data\r\n protected newPassword: string = '';\r\n protected rePassword: string = '';\r\n protected token: string = '';\r\n protected errorMessage: string = '';\r\n protected sessionService: SessionService = new SessionService();\r\n protected errorService: ErrorService = new ErrorService(this);\r\n protected waiting: boolean = false;\r\n\r\n // computed\r\n public get disableChange(): boolean {\r\n return this.newPassword !== this.rePassword\r\n || !this.newPassword || !this.rePassword || this.waiting;\r\n }\r\n\r\n public get identicalError(): string {\r\n if (this.newPassword && this.rePassword && this.newPassword !== this.rePassword) {\r\n return 'Passwords must be identical';\r\n }\r\n return '';\r\n }\r\n\r\n protected mounted() {\r\n const url = window.location.href;\r\n this.token = url.split('token/')[1];\r\n if (this.token === '') {\r\n this.errorMessage = 'There is no token in url';\r\n console.error(this.errorMessage);\r\n }\r\n }\r\n\r\n // methods:\r\n public async change() {\r\n const data = {\r\n token: this.token,\r\n password: this.newPassword,\r\n } as ResetForgottenUserPasswordRequestDTO;\r\n this.waiting = true;\r\n try {\r\n await this.sessionService.changeForgottenPassword(data);\r\n router.push('/');\r\n this.$root.$emit('bv::show::modal', 'loginModal');\r\n } catch (e) {\r\n this.errorMessage = this.errorService.getErrorMessage(e.response.data);\r\n } finally {\r\n this.waiting = false;\r\n }\r\n }\r\n}\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ChangeForgottenPassword.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ChangeForgottenPassword.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ChangeForgottenPassword.vue?vue&type=template&id=f24807b8&scoped=true&\"\nimport script from \"./ChangeForgottenPassword.vue?vue&type=script&lang=ts&\"\nexport * from \"./ChangeForgottenPassword.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./ChangeForgottenPassword.vue?vue&type=style&index=0&id=f24807b8&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"f24807b8\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('form',[_c('b-row',{staticClass:\"mb-3\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('navbar.activateUser')))])]),_c('b-button',{staticClass:\"btn-activate\",attrs:{\"variant\":\"primary\"},on:{\"click\":_vm.change}},[_vm._v(\" \"+_vm._s(_vm.$t('navbar.activate'))+\" \"),(_vm.waiting)?_c('span',[_c('font-awesome-icon',{attrs:{\"icon\":\"spinner\",\"spin\":\"\"}})],1):_vm._e()]),_c('b-row',[_c('b-col',{staticClass:\"text-danger\"},[_vm._v(_vm._s(_vm.errorMessage))])],1)],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n\r\nimport { Component, Prop, Emit, Vue } from 'vue-property-decorator';\r\n\r\nimport SessionService from '@/services/session';\r\nimport ErrorService from '@/services/error';\r\nimport router from '@/router';\r\nimport { ResetForgottenUserPasswordRequestDTO } from '@/dtos/sqe-dtos';\r\n\r\n\r\n\r\n@Component({\r\n name: 'activation'\r\n})\r\n\r\nexport default class Activation extends Vue {\r\n\r\n // data\r\n\r\n protected token: string = '';\r\n protected errorMessage: string = '';\r\n protected sessionService: SessionService = new SessionService();\r\n protected errorService: ErrorService = new ErrorService(this);\r\n protected waiting: boolean = false;\r\n\r\n protected mounted() {\r\n const url = window.location.href;\r\n this.token = url.split('token/')[1];\r\n if (this.token === '') {\r\n console.error('There is no token in url');\r\n }\r\n }\r\n\r\n // methods\r\n\r\n public async change() {\r\n const data = {\r\n token: this.token\r\n } as ResetForgottenUserPasswordRequestDTO;\r\n this.waiting = true;\r\n try {\r\n await this.sessionService.activateUser(data);\r\n router.push('/');\r\n this.$root.$emit('bv::show::modal', 'loginModal');\r\n } catch (e) {\r\n this.errorMessage = this.errorService.getErrorMessage(e.response.data);\r\n } finally {\r\n this.waiting = false;\r\n }\r\n }\r\n\r\n}\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Activation.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Activation.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Activation.vue?vue&type=template&id=55cc8ece&scoped=true&\"\nimport script from \"./Activation.vue?vue&type=script&lang=ts&\"\nexport * from \"./Activation.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Activation.vue?vue&type=style&index=0&id=55cc8ece&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"55cc8ece\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('form',[_c('b-row',{staticClass:\"mb-3\"},[_c('h4',[_vm._v(_vm._s(_vm.$t('navbar.confirmInvitation')))])]),_c('b-row',[_c('b-col',{attrs:{\"cols\":\"2\"}},[_c('b-button',{staticClass:\"btn-confirm\",attrs:{\"variant\":\"primary\",\"disabled\":!_vm.isLogged},on:{\"click\":_vm.change}},[_vm._v(\" \"+_vm._s(_vm.$t('navbar.accept'))+\" \"),(_vm.waiting)?_c('span',[_c('font-awesome-icon',{attrs:{\"icon\":\"spinner\",\"spin\":\"\"}})],1):_vm._e()])],1),_c('b-col',{attrs:{\"cols\":\"10\"}},[(!_vm.isLogged)?_c('b-col',{staticClass:\"text-danger\"},[_vm._v(\"Please log in to accept invitation.\")]):_vm._e()],1)],1),_c('b-row',[_c('b-col',{staticClass:\"text-danger\"},[_vm._v(_vm._s(_vm.errorMessage))])],1)],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Emit, Vue } from 'vue-property-decorator';\r\nimport ErrorService from '@/services/error';\r\nimport router from '@/router';\r\nimport {\r\n DetailedUserDTO\r\n} from '@/dtos/sqe-dtos';\r\nimport EditionService from '@/services/edition';\r\n\r\n\r\n@Component({\r\n name: 'confirm-invitation',\r\n // components: {\r\n\r\n // },\r\n})\r\nexport default class ConfirmInvitation extends Vue {\r\n // data\r\n\r\n protected token: string = '';\r\n protected errorMessage: string = '';\r\n protected editionService: EditionService = new EditionService();\r\n protected errorService: ErrorService = new ErrorService(this);\r\n protected waiting: boolean = false;\r\n\r\n protected mounted() {\r\n if (!this.isLogged) {\r\n this.$root.$emit('bv::show::modal', 'loginModal');\r\n }\r\n\r\n const url = window.location.href;\r\n this.token = url.split('token/')[1];\r\n if (this.token === '') {\r\n console.error('There is no token in url');\r\n }\r\n }\r\n\r\n // computed: {\r\n protected get currentUser(): DetailedUserDTO {\r\n return this.$state.session.user!;\r\n }\r\n\r\n protected get isLogged(): boolean {\r\n return this.currentUser !== null && this.currentUser !== undefined;\r\n }\r\n\r\n // methods: {\r\n protected async change() {\r\n this.waiting = true;\r\n try {\r\n await this.editionService.confirmAddEditionEditor(this.token);\r\n router.push('/');\r\n } catch (e) {\r\n this.errorMessage = this.errorService.getErrorMessage(\r\n e.response.data\r\n );\r\n } finally {\r\n this.waiting = false;\r\n }\r\n }\r\n\r\n}\r\n\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--13-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./confirm-invitation.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--13-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./confirm-invitation.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./confirm-invitation.vue?vue&type=template&id=485e69d5&scoped=true&\"\nimport script from \"./confirm-invitation.vue?vue&type=script&lang=ts&\"\nexport * from \"./confirm-invitation.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./confirm-invitation.vue?vue&type=style&index=0&id=485e69d5&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"485e69d5\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.waiting)?_c('div',{staticClass:\"col\"},[_c('waiting')],1):_vm._e(),(!_vm.waiting)?_c('div',[_c('div',{ref:\"artefactGrid\",attrs:{\"id\":\"artefact-grid\"}},[_c('toolbar',{attrs:{\"id\":\"toolbar\",\"no-gutters\":\"\"}},[_c('artefact-editor-toolbar',{attrs:{\"artefact\":_vm.artefact},on:{\"paramsChanged\":function($event){return _vm.onParamsChanged($event)}}},[_c('toolbox',{attrs:{\"subject\":\"Edit Modes\"}},[_c('toolbar-icon-button',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.readOnly),expression:\"!readOnly\"}],attrs:{\"pressed\":_vm.actionMode === 'polygon',\"disabled\":!_vm.isDrawingEnabled,\"title\":_vm.$t('misc.draw'),\"icon\":\"pen\"},on:{\"click\":function($event){return _vm.onModeClick('polygon')}}}),_c('toolbar-icon-button',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.readOnly),expression:\"!readOnly\"}],attrs:{\"pressed\":_vm.actionMode === 'box',\"disabled\":!_vm.isDrawingEnabled,\"title\":_vm.$t('misc.box'),\"icon\":\"square\"},on:{\"click\":function($event){return _vm.onModeClick('box')}}}),_c('toolbar-icon-button',{attrs:{\"title\":_vm.$t('misc.select'),\"pressed\":_vm.actionMode === 'select',\"icon\":\"mouse-pointer\"},on:{\"click\":function($event){return _vm.onModeClick('select')}}})],1),(!_vm.readOnly)?_c('toolbox',{attrs:{\"subject\":\"\"}},[_c('toolbar-icon-button',{attrs:{\"title\":_vm.$t('misc.cancel'),\"disabled\":!_vm.isDeleteEnabled,\"icon\":\"trash\",\"show-text\":true},on:{\"click\":_vm.onDeleteRoi}})],1):_vm._e(),_c('toolbox',{attrs:{\"subject\":\"\"}},[_c('b-form-checkbox',{attrs:{\"switch\":\"\",\"size\":\"sm\"},on:{\"input\":function($event){return _vm.onHighlightComment($event)}}},[_vm._v(\"Comments\")]),(!_vm.readOnly)?_c('b-form-checkbox',{attrs:{\"switch\":\"\",\"size\":\"sm\",\"id\":\"auto-character\"},on:{\"input\":function($event){return _vm.onAuto()}}},[_vm._v(\"Auto character select\")]):_vm._e()],1),_c('toolbox',{attrs:{\"subject\":\"\"}},[_c('toolbar-icon-button',{attrs:{\"title\":_vm.$t('misc.copyToEdition'),\"show-text\":true},on:{\"click\":function($event){return _vm.openCopyToEdtion()}}}),_c('copy-to-edition-modal')],1),_c('toolbox',{attrs:{\"subject\":\"\"}},[(_vm.edition.isPublic)?_c('toolbar-icon-button',{attrs:{\"title\":\"Report Mask\",\"show-text\":true},on:{\"click\":function($event){return _vm.openReportMask()}}}):_vm._e()],1),_c('copy-edition-toolbox')],1)],1),_c('div',{attrs:{\"id\":\"artefact-info\"}},[(_vm.artefactMode)?_c('span',[_vm._v(_vm._s(_vm.artefact.name))]):_vm._e(),(_vm.textFragmentMode)?_c('b-form-select',{staticClass:\"mt-4 col-3\",attrs:{\"options\":_vm.artefacts,\"value-field\":\"id\",\"text-field\":\"name\",\"size\":\"sm\"},on:{\"input\":function($event){return _vm.selectArtefact($event)}}}):_vm._e(),_c('edition-icons',{attrs:{\"edition\":_vm.edition,\"show-text\":true}}),(_vm.selectedSignInterpretations.length === 1)?_c('sign-wheel',{attrs:{\"line\":_vm.selectedLine}}):_vm._e()],1),_c('div',{ref:\"infoBox\",staticClass:\"border-right\",attrs:{\"id\":\"artefact-image\"}},[_c('zoomer',{attrs:{\"zoom\":_vm.zoomLevel,\"angle\":_vm.rotationAngle},on:{\"new-zoom\":function($event){return _vm.onNewZoom($event)},\"new-rotate\":function($event){return _vm.onNewRotate($event)}}},[_c('svg',{staticClass:\"overlay\",attrs:{\"width\":_vm.actualWidth,\"height\":_vm.actualHeight,\"viewBox\":_vm.actualBoundingBox}},[_c('g',{attrs:{\"transform\":_vm.transform,\"id\":\"transform-root\"}},[_c('image-layer',{attrs:{\"width\":_vm.imageWidth,\"height\":_vm.imageHeight,\"params\":_vm.params,\"clipping-mask\":_vm.artefact.mask,\"boundingBox\":_vm.artefact.mask.getBoundingBox(),\"artefact\":_vm.artefact}}),_c('roi-layer',{attrs:{\"rois\":_vm.visibleRois},on:{\"roi-clicked\":function($event){return _vm.onRoiClicked($event)}}}),_c('boundary-drawer',{directives:[{name:\"show\",rawName:\"v-show\",value:(\n _vm.isDrawingEnabled &&\n _vm.actionMode !== 'select'\n ),expression:\"\\n isDrawingEnabled &&\\n actionMode !== 'select'\\n \"}],attrs:{\"mode\":_vm.actionMode,\"transformRootId\":\"transform-root\"},on:{\"new-polygon\":function($event){return _vm.onNewPolygon($event)}}})],1)])])],1),(!!_vm.$refs.artefactGrid)?_c('resize-bar',{attrs:{\"gridElement\":_vm.$refs.artefactGrid,\"storageKey\":\"artefact-left-pane-width\"}}):_vm._e(),_c('text-side',{attrs:{\"id\":\"text-side\",\"editor-mode\":_vm.editorMode,\"artefact\":_vm.artefact,\"text-fragment\":_vm.textFragment,\"font-size\":_vm.params.fontSize}}),_c('sign-attribute-pane',{attrs:{\"id\":\"attribute-pane\"}})],1)]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { CommHelper } from './comm-helper';\r\nimport { StateManager } from '@/state';\r\nimport { ApiRoutes } from '@/services/api-routes';\r\nimport { EditionInfo } from '@/models/edition';\r\nimport { SignInterpretation } from '@/models/text';\r\nimport { CommentaryCreateDTO, InterpretationAttributeCreateDTO, InterpretationAttributeDTO, SignInterpretationCharacterUpdateDTO, SignInterpretationCreatedDTO, SignInterpretationCreateDTO, SignInterpretationDTO, SignInterpretationListDTO, SignInterpretationVariantDTO } from '@/dtos/sqe-dtos';\r\n\r\nexport default class SignInterpretationService {\r\n public stateManager: StateManager;\r\n\r\n /*\r\n * Note - the service does not update the state manager, it is assumed that the state is already updated before\r\n * the service methods are called.\r\n */\r\n\r\n constructor() {\r\n this.stateManager = StateManager.instance;\r\n }\r\n\r\n public async updateAttribute(edition: EditionInfo, signInterpretation: SignInterpretation, oldValueId: number, attribute: InterpretationAttributeDTO) {\r\n const url = ApiRoutes.attributeUrl(edition.id, signInterpretation.id, oldValueId);\r\n const dto: InterpretationAttributeCreateDTO = {\r\n attributeId: attribute.attributeId,\r\n attributeValueId: attribute.attributeValueId,\r\n commentary: attribute.commentary?.commentary\r\n };\r\n\r\n const siDto = await CommHelper.put(url, dto);\r\n this.stateManager.touchEdition(edition.id);\r\n return siDto;\r\n }\r\n\r\n public async deleteAttribute(edition: EditionInfo, signInterpretation: SignInterpretation, attributeValueId: number) {\r\n const url = ApiRoutes.attributeUrl(edition.id, signInterpretation.id, attributeValueId);\r\n\r\n await CommHelper.delete(url);\r\n this.stateManager.touchEdition(edition.id);\r\n }\r\n\r\n public async createAttribute(edition: EditionInfo, signInterpretation: SignInterpretation, attribute: InterpretationAttributeDTO) {\r\n const url = ApiRoutes.attributeUrl(edition.id, signInterpretation.id);\r\n const dto: InterpretationAttributeCreateDTO = {\r\n attributeId: attribute.attributeId,\r\n attributeValueId: attribute.attributeValueId,\r\n commentary: attribute.commentary?.commentary\r\n };\r\n\r\n const response = await CommHelper.post(url, dto);\r\n this.stateManager.touchEdition(edition.id);\r\n return response.data;\r\n }\r\n\r\n public async updateCommentary(edition: EditionInfo, signInterpretation: SignInterpretation) {\r\n const url = ApiRoutes.signInterpretationCommentaryUrl(edition.id, signInterpretation.id);\r\n const dto: CommentaryCreateDTO = { commentary: signInterpretation.commentary || undefined };\r\n\r\n const response = await CommHelper.put(url, dto);\r\n this.stateManager.touchEdition(edition.id);\r\n return response.data;\r\n }\r\n\r\n public async deleteSignInterpretation(edition: EditionInfo, signInterpretation: SignInterpretation, deleteAllVariants = true) {\r\n let url = ApiRoutes.signInterpretationUrl(edition.id, signInterpretation.id);\r\n if (deleteAllVariants) {\r\n url += '?optional=delete-all-variants';\r\n }\r\n\r\n await CommHelper.delete(url);\r\n this.stateManager.touchEdition(edition.id);\r\n\r\n signInterpretation.signInterpretationId = SignInterpretation.nextAvailableId; // Give the sign interpretation a negative ID, so it can still remain in the undo/redo system\r\n }\r\n\r\n public async createSignInterpretation(edition: EditionInfo, signInterpretation: SignInterpretation) {\r\n const url = ApiRoutes.signInterpretationUrl(edition.id);\r\n\r\n // Find the previous signInterpretationId\r\n const prevSign = signInterpretation.sign.line.signs[signInterpretation.sign.indexInLine - 1];\r\n const prevSignInterpretation = prevSign.signInterpretations[0];\r\n\r\n // Now we can build the DTO\r\n const attributeDTOs = signInterpretation.attributes.map(attr => {\r\n return {\r\n attributeId: attr.attributeId,\r\n attributeValueId: attr.attributeValueId,\r\n commentary: attr.commentary,\r\n } as InterpretationAttributeCreateDTO;\r\n });\r\n\r\n const commentaryDTO = signInterpretation.commentary ? { commentary: signInterpretation.commentary } : undefined;\r\n const dto: SignInterpretationCreateDTO = {\r\n character: signInterpretation.character,\r\n previousSignInterpretationIds: [prevSignInterpretation.id],\r\n attributes: attributeDTOs,\r\n rois: [],\r\n commentary: commentaryDTO,\r\n isVariant: false,\r\n breakPreviousAndNextSignInterpretations: true,\r\n };\r\n\r\n const response = await CommHelper.post(url, dto);\r\n\r\n if (response.data.created?.length !== 1) {\r\n this.stateManager.corrupted('Received a bad response from the server - expected exactly one sign to be created');\r\n }\r\n\r\n const siDto = response.data.created![0];\r\n const newId = siDto.signInterpretationId;\r\n\r\n const existingSi = this.stateManager.signInterpretations.get(newId);\r\n if (existingSi) {\r\n // This sign interpretation has already been added by the SignalR notification, but we already have\r\n // the sign we've created, with the old frontend-only ID. So we have twp sign interpretations.\r\n //\r\n // Easiest way to handle this is to delete the sign interpretation added by the Signal R notification handler,\r\n // and update the ID of the sign interpretation we do have\r\n existingSi.sign.line.removeSign(existingSi.sign);\r\n this.stateManager.signInterpretations.delete(existingSi.signInterpretationId);\r\n }\r\n\r\n // Update the sign intepretation from the old ID to the new one, and update the sign interpretation map as well\r\n this.stateManager.signInterpretations.mapFrontendIdToServerId(signInterpretation.id, newId);\r\n signInterpretation.signInterpretationId = newId;\r\n this.stateManager.touchEdition(edition.id);\r\n }\r\n\r\n public async updateSignInterpretation(edition: EditionInfo, signInterpretation: SignInterpretation) {\r\n const url = ApiRoutes.signInterpretationCharacterUrl(edition.id, signInterpretation.id);\r\n const dto: SignInterpretationCharacterUpdateDTO = {\r\n character: signInterpretation.character || ' ',\r\n attributeValueId: signInterpretation.signType[0], // The DTO should be updated shortly to support this\r\n priority: 1,\r\n };\r\n\r\n await CommHelper.put(url, dto);\r\n this.stateManager.touchEdition(edition.id);\r\n }\r\n}\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"text-side-container\"},[(_vm.artefactMode)?_c('div',{staticClass:\"border-bottom\",attrs:{\"id\":\"load-fragment\"}},[_c('input',{staticClass:\"select-text\",attrs:{\"placeholder\":\"Enter a name e.g, col.1\",\"list\":\"my-list-id\",\"type\":\"text\",\"onfocus\":\"this.value=''\",\"onchange\":\"this.blur();\"},on:{\"input\":function($event){return _vm.loadFragment($event)}}}),_c('datalist',{attrs:{\"id\":\"my-list-id\"}},_vm._l((_vm.dropdownTextFragmentsData),function(tf){return _c('option',{key:tf.textFragmentId},[_vm._v(\" \"+_vm._s(tf.name)+\" \")])}),0),_c('span',{staticClass:\"isa_error\"},[_vm._v(_vm._s(_vm.errorMessage))])]):_vm._e(),_c('div',{attrs:{\"id\":\"text-fragments\"}},_vm._l((_vm.displayedTextFragments),function(textFragment,index){return _c('div',{key:textFragment.id,staticClass:\"text-side-border\",attrs:{\"role\":\"tablist\",\"direction\":\"rtl\"}},[_c('b-card-header',{staticClass:\"card-header\",attrs:{\"header-tag\":\"header\"}},[_c('b-row',{attrs:{\"no-gutters\":\"\"}},[(_vm.artefactMode)?_c('div',{staticStyle:{\"width\":\"80px\"}},[_c('b-button-group',{attrs:{\"block\":\"\"}},[_c('b-button',{directives:[{name:\"b-tooltip\",rawName:\"v-b-tooltip.hover.bottom\",modifiers:{\"hover\":true,\"bottom\":true}}],attrs:{\"href\":\"#\",\"title\":_vm.$t('misc.up')},on:{\"click\":function($event){return _vm.changePosition(index, true)}}},[_c('i',{staticClass:\"fa fa-arrow-up\"})]),_c('b-button',{directives:[{name:\"b-tooltip\",rawName:\"v-b-tooltip.hover.bottom\",modifiers:{\"hover\":true,\"bottom\":true}}],attrs:{\"href\":\"#\",\"title\":_vm.$t('misc.down')},on:{\"click\":function($event){return _vm.changePosition(index, false)}}},[_c('i',{staticClass:\"fa fa-arrow-down\"})])],1)],1):_vm._e(),_c('div',{staticClass:\"col\",attrs:{\"role\":\"tab\"}},[_c('b-button',{directives:[{name:\"b-toggle\",rawName:\"v-b-toggle\",value:('accordion-' + index),expression:\"'accordion-' + index\"}],attrs:{\"block\":\"\",\"href\":\"#\"}},[_vm._v(_vm._s(textFragment.textFragmentName))])],1)])],1),_c('b-collapse',{attrs:{\"id\":'accordion-' + index,\"visible\":index === _vm.openedTextFragement,\"accordion\":\"my-accordion\",\"role\":\"tabpanel\",\"direction\":\"rtl\"},on:{\"show\":function($event){return _vm.emptySelectedState(textFragment.textFragmentId)}}},[_c('text-fragment',{attrs:{\"fragment\":textFragment,\"font-size\":_vm.fontSize,\"id\":\"text-box\"}})],1)],1)}),0),_c('edit-sign-modal'),_c('edit-line-modal'),_c('add-line-modal'),_c('delete-line-modal')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('b-modal',{ref:\"editLineModal\",attrs:{\"id\":\"editLineModal\",\"title\":\"Edit Line\"},on:{\"shown\":_vm.shown},scopedSlots:_vm._u([{key:\"modal-footer\",fn:function(){return [_c('div',{staticClass:\"w-100-flex\"},[_c('b-button',{attrs:{\"variant\":\"outline-primary\"},on:{\"click\":function($event){return _vm.checkDifference()}}},[_vm._v(\"Save\")]),_c('b-form-checkbox',{staticClass:\"recontructedCheckbox\",attrs:{\"name\":\"allSiAreReconstructed-checkbox\",\"checked\":_vm.allSiAreReconstructed},on:{\"change\":_vm.onReconstructedCheckBoxChanged}},[_vm._v(\"Reconstructed\")])],1)]},proxy:true}])},[_c('div',{ref:\"editLineModalRef\"},[_c('text-line',{ref:'line-' + (_vm.line && _vm.line.lineId),staticClass:\"d-flex w-100\",attrs:{\"line\":_vm.line,\"direction\":\"rtl\",\"isEditMode\":true},on:{\"line-change\":function($event){return _vm.onLineChanged($event)}}})],1)])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Line, SignInterpretation } from '@/models/text';\nimport { Component, Prop, Vue, Watch } from 'vue-property-decorator';\nimport TextLine from '@/components/text/text-line.vue';\nimport TextService from '@/services/text';\nimport {\n ArtefactEditLineOperation,\n ArtefactEditorOperation,\n} from '@/views/artefact-editor/operations';\nimport { SavingAgent, OperationsManager } from '@/utils/operations-manager';\nimport {\n AttributeDTO,\n AttributeValueDTO,\n} from '@/dtos/sqe-dtos';\n\n@Component({\n name: 'edit-line-modal',\n components: {\n 'text-line': TextLine\n }\n})\nexport default class EditLineModal extends Vue {\n public checkText: TextService = new TextService();\n private operationsManager = new OperationsManager(\n this\n );\n public prevText: string = '';\n public arrayDiff: any[] = [];\n public textLine: string = '';\n public get editorState() {\n return this.$state.textFragmentEditor;\n }\n public async saveEntities(\n ops: ArtefactEditorOperation[]\n ): Promise {\n return true;\n }\n\n public get selectedSignInterpretation(): SignInterpretation {\n return this.editorState.selectedSignInterpretations[0];\n }\n public get allSiAreReconstructed(): boolean {\n if (this.editorState.selectedSignInterpretations.length === 0) {\n return false;\n }\n return this.editorState.selectedSignInterpretations.every(si =>\n si.attributes.some(\n attr =>\n attr.attributeString === 'is_reconstructed' &&\n attr.attributeValueString === 'TRUE'\n )\n );\n }\n\n public get line(): Line {\n return (\n this.selectedSignInterpretation &&\n this.selectedSignInterpretation.sign.line\n );\n }\n public get editionId() {\n return parseInt(this.$route.params.editionId);\n }\n\n public onLineChanged(event: string) {\n this.textLine = event;\n }\n public shown(): void {\n // this.isEditMode = true;\n this.$nextTick(() => {\n const lineVue = this.$refs['line-' + this.line.lineId] as any;\n const lineA = (lineVue && lineVue.$el) as HTMLElement;\n const line = lineA.querySelector('.line-container') as HTMLElement;\n if (line) {\n // set initial cursor position on first letter of line\n const range = document.createRange();\n const sel = document.getSelection();\n range.setStart(line.childNodes[1], 0);\n range.collapse(true);\n\n sel?.removeAllRanges();\n sel?.addRange(range);\n line.focus();\n }\n this.prevText = line.innerText;\n });\n }\n private get attributesMetadata() {\n return (\n this.$state.editions.current?.attributeMetadata?.allAttributes || []\n );\n }\n private onAddAttribute(attr: AttributeDTO, attrVal: AttributeValueDTO) {\n // const ops: TextFragmentAttributeOperation[] = [];\n for (const si of this.$state.textFragmentEditor\n .selectedSignInterpretations) {\n si.attributes[0].attributeString = 'is_reconstructed';\n si.attributes[0].attributeValueString = 'TRUE';\n // si.attributes.some(\n // attr =>\n // attr.attributeString === 'is_reconstructed' &&\n // attr.attributeValueString === 'TRUE'\n // )\n // const op = new TextFragmentAttributeOperation(si.id, attrVal.id, {\n // attributeId: attr.attributeId,\n // attributeString: attr.attributeName,\n // attributeValueId: attrVal.id,\n // attributeValueString: attrVal.value\n // } as InterpretationAttributeDTO);\n // op.redo(true);\n // ops.push(op);\n }\n // this.$state.eventBus.emit('new-bulk-operations', ops);\n }\n\n private onDeleteAttribute(attrVal: AttributeValueDTO) {\n // const ops: TextFragmentAttributeOperation[] = [];\n for (const si of this.$state.textFragmentEditor\n .selectedSignInterpretations) {\n console.log(si);\n si.attributes[1].attributeString = \"sign_type\";\n si.attributes[1].attributeValueString = 'LETTER';\n // const op = new TextFragmentAttributeOperation(\n // si.id,\n // attrVal.id,\n // undefined\n // );\n // op.redo(true);\n // ops.push(op);\n }\n // this.$state.eventBus.emit('new-bulk-operations', ops);\n }\n private onReconstructedCheckBoxChanged(event: boolean) {\n let reconstructedAttrDTO: AttributeDTO;\n let reconstructedAttrValueDTO: AttributeValueDTO;\n const reconstructedAttrMeta = this.attributesMetadata.find(\n a => a.attributeName === 'is_reconstructed'\n );\n if (reconstructedAttrMeta) {\n reconstructedAttrDTO = { ...reconstructedAttrMeta };\n const reconstructedAttrValueMeta = reconstructedAttrDTO?.values.find(\n a => a.value === 'TRUE'\n );\n if (reconstructedAttrValueMeta) {\n reconstructedAttrValueDTO = { ...reconstructedAttrValueMeta };\n }\n if (event) {\n this.onAddAttribute(\n reconstructedAttrDTO!,\n reconstructedAttrValueDTO!\n );\n } else {\n this.onDeleteAttribute(reconstructedAttrValueDTO!);\n }\n }\n }\n protected async mounted() {\n this.$state.operationsManager = this.operationsManager;\n }\n protected async created() {\n this.$state.eventBus.on(\n 'change-artefact-edit-line',\n (prevText: Line) => {\n console.log(this.line, prevText);\n }\n );\n }\n\n // public checkDifference() {\n // const editDiffLib = require('@/utils/edit-diff');\n // console.log(editDiffLib);\n\n // // Get the from object\n // const arrayFrom = this.line.signs.map((s) => ({\n // id: s.signInterpretations[0].id,\n // character: s.signInterpretations[0].character,\n // }));\n // console.log(arrayFrom);\n\n // const modalRef = this.$refs.editLineModalRef as HTMLElement;\n // const lineContainer = modalRef.querySelector(\n // '.line-container'\n // ) as HTMLDivElement;\n // const to = Array.from(\n // lineContainer.querySelectorAll(':scope > span[tabindex]')\n // ).map((s: Element) => ({\n // id: s.getAttribute('tabindex'),\n // character: s.textContent,\n // }));\n\n // const arrayToObject = to.reduce((obj: any, item: any) => {\n // obj[item.id]\n // ? (obj[item.id].character =\n // obj[item.id].character + item.character)\n // : (obj[item.id] = { ...item });\n // return obj;\n // }, {});\n\n // const arrayTo = Object.values(arrayToObject);\n // console.log(arrayTo);\n\n // const changes: Array<{id: number, character: string | undefined, change: '+'|'-'|'='}> = [];\n\n // arrayFrom.forEach((signFrom) => {\n // const id = signFrom.id;\n\n // // check if sign still exist in arrayTo\n // const signTo = arrayTo.find(\n // (editedSign: any) => editedSign.id.toString() === id.toString()\n // );\n // if (!signTo) {\n // changes.push({\n // id: signFrom.id,\n // character: signFrom.character,\n // change: '-',\n // });\n // } else {\n // const leveinsteinDetails = editDiffLib.iqwerty.diff.diff(\n // signFrom.character,\n // signTo.character\n // );\n // const diffChanges = leveinsteinDetails.changes;\n // diffChanges.forEach((diffChange: any) => {\n // changes.push({\n // id: signFrom.id,\n // character: diffChange.char,\n // change: diffChange.diff,\n // });\n // });\n // }\n // });\n\n // console.log(changes);\n // }\n public checkDifference() {\n const firstChar = this.line.signs[0].signInterpretations[0].id;\n const lastChar = this.line.signs[this.line.signs.length - 1]\n .signInterpretations[0].id;\n // const newText = this.textLine;\n const lineVue = this.$refs['line-' + this.line.lineId] as any;\n const lineA = (lineVue && lineVue.$el) as HTMLElement;\n const line = lineA.querySelector('.line-container') as HTMLElement;\n let newText = line.innerText;\n newText = newText.trim();\n newText = newText.replace(/(\\r\\n|\\n|\\r)/gm, \"\");\n const op: ArtefactEditLineOperation = new ArtefactEditLineOperation(\n this.editionId,\n firstChar,\n lastChar,\n newText,\n this.prevText\n );\n this.operationsManager.addOperation(op);\n this.checkText.replaceText(\n this.editionId,\n firstChar,\n lastChar,\n newText\n );\n const modal = this.$refs['editLineModal'] as any & { hide: () => void };\n modal.hide();\n }\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit-line-modal.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edit-line-modal.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./edit-line-modal.vue?vue&type=template&id=792ebd16&scoped=true&\"\nimport script from \"./edit-line-modal.vue?vue&type=script&lang=ts&\"\nexport * from \"./edit-line-modal.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./edit-line-modal.vue?vue&type=style&index=0&id=792ebd16&lang=scss&scoped=true&\"\nimport style1 from \"./edit-line-modal.vue?vue&type=style&index=1&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"792ebd16\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('b-modal',{ref:\"addLineModal\",attrs:{\"id\":\"addLineModal\",\"title\":\"Add Line\"},scopedSlots:_vm._u([{key:\"modal-footer\",fn:function(){return [_c('div',{staticClass:\"w-100-flex\"},[_c('b-button',{attrs:{\"variant\":\"outline-primary\"},on:{\"click\":function($event){return _vm.saveNewLine()}}},[_vm._v(\"Save\")])],1)]},proxy:true}])},[(_vm.line && _vm.line.lineName)?_c('div',[_vm._v(\" Do you want to add line # \"),_c('input',{domProps:{\"value\":_vm.line.lineName},on:{\"input\":function (event) { return _vm.onLineNamed(event.target.value); }}})]):_c('div',[_vm._v(\" Please name the line you want to add \"),_c('input',{on:{\"input\":function (event) { return _vm.onLineNamed(event.target.value); }}})])])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Line, SignInterpretation, TextFragment } from '@/models/text';\r\nimport { Component, Prop, Vue, Watch } from 'vue-property-decorator';\r\nimport TextLine from '@/components/text/text-line.vue';\r\nimport TextService from '@/services/text';\r\nimport {\r\n ArtefactAddLineOperation,\r\n ArtefactEditorOperation\r\n} from '@/views/artefact-editor/operations';\r\nimport { LineDTO, TextFragmentDTO } from '@/dtos/sqe-dtos';\r\nimport { OperationsManager } from '@/utils/operations-manager';\r\n\r\n@Component({\r\n name: 'add-line-modal',\r\n components: {\r\n 'text-line': TextLine\r\n }\r\n})\r\nexport default class AddLineModal extends Vue {\r\n public position: string = '';\r\n public notInTheRightComponent: boolean = false;\r\n public tempLine: LineDTO = {\r\n lineId: 0,\r\n lineName: '',\r\n signs: [],\r\n editorId: 0\r\n };\r\n public textService: TextService = new TextService();\r\n public previousLineId: number | undefined = 0;\r\n public subsequentLineId: number | undefined = 0;\r\n public textFragmentId: number = 0;\r\n private operationsManager = new OperationsManager(\r\n this\r\n );\r\n public get editionId() {\r\n return parseInt(this.$route.params.editionId);\r\n }\r\n public textLine: string = '';\r\n public get editorState() {\r\n return this.$state.textFragmentEditor;\r\n }\r\n public get selectedSignInterpretation(): SignInterpretation {\r\n return this.editorState.selectedSignInterpretations[0];\r\n }\r\n public onModalShow(parameter: any) {\r\n console.log(parameter);\r\n }\r\n protected async mounted() {\r\n this.$root.$on(\r\n 'bv::show::modal',\r\n (modalId: string, parameter: string) => {\r\n if (modalId === 'addLineModal') {\r\n this.position = parameter;\r\n } else {\r\n this.notInTheRightComponent = true;\r\n }\r\n }\r\n );\r\n this.$state.operationsManager = this.operationsManager;\r\n }\r\n public async saveEntities(\r\n ops: ArtefactEditorOperation[]\r\n ): Promise {\r\n return true;\r\n }\r\n public onLineNamed(name: string) {\r\n this.line.lineName = name;\r\n }\r\n protected async created() {\r\n this.$state.eventBus.on(\r\n 'change-artefact-add-line',\r\n (prevText: Line) => {\r\n console.log(this.line, prevText);\r\n }\r\n );\r\n }\r\n public updateLineName(index: string, textFragment: TextFragment) {\r\n if (textFragment) {\r\n let name: string = '';\r\n for (let i = 0; i < textFragment?.lines.length; i++) {\r\n if (textFragment?.lines[i].lineName === index) {\r\n if ((index.match(/_/g) || []).length == 0) {\r\n if (this.position === 'before') {\r\n const before = Number(index) - 1;\r\n name = before.toString() + '_' + 1;\r\n } else {\r\n name = index + '_' + '1';\r\n }\r\n } else if ((index.match(/_/g) || []).length == 1){\r\n if (this.position === 'before') {\r\n const parts = index.split(\"_\");\r\n const a = parts[0];\r\n const b = parts[1];\r\n const c = Number(b)-1;\r\n const d = a + \"_\" + c\r\n if (textFragment?.lines[i-1].lineName == d){\r\n name = d + \"_0\"\r\n }\r\n else{\r\n name = d;\r\n }\r\n }\r\n else{\r\n const parts = index.split(\"_\");\r\n const a = parts[0];\r\n const b = parts[1];\r\n const c = Number(b)+1; \r\n const d = a + \"_\" + c\r\n if (textFragment?.lines[i+1].lineName == d){\r\n name = a + \"_\" + b + \"_0\" \r\n }\r\n else{\r\n name = d;\r\n }\r\n }\r\n }\r\n else{\r\n name = \"\";\r\n }\r\n }\r\n }\r\n return name;\r\n }\r\n }\r\n public get line(): LineDTO {\r\n // when it enters addline without reason\r\n if (this.notInTheRightComponent) {\r\n const line: any = {\r\n editorId: this.selectedSignInterpretation?.sign.line.editorId,\r\n lineName: this.selectedSignInterpretation?.sign.line.lineName,\r\n lineId: this.selectedSignInterpretation?.sign.line.lineId,\r\n signs: this.selectedSignInterpretation?.sign.line.signs\r\n };\r\n return this.selectedSignInterpretation && line;\r\n } else {\r\n // creating new line with negativ id + name updated\r\n const index: string = this.selectedSignInterpretation?.sign.line\r\n .lineName;\r\n const textFragment: TextFragment = this.selectedSignInterpretation\r\n ?.sign.line.textFragment;\r\n const line: any = {\r\n editorId: this.selectedSignInterpretation?.sign.line.editorId,\r\n lineName: this.updateLineName(index, textFragment),\r\n lineId: -1,\r\n signs: []\r\n };\r\n this.textFragmentId = textFragment?.textFragmentId;\r\n for (\r\n let i = 0;\r\n i <\r\n this.selectedSignInterpretation?.sign.line.textFragment.lines\r\n .length;\r\n i++\r\n ) {\r\n if (\r\n this.selectedSignInterpretation?.sign.line.textFragment\r\n .lines[i].lineName === index\r\n ) {\r\n if (this.position == 'after') {\r\n if (index !== this.selectedSignInterpretation?.sign.line.textFragment.lines[this.selectedSignInterpretation?.sign.line.textFragment.lines.length - 1].lineName) {\r\n this.previousLineId = this.selectedSignInterpretation?.sign.line.textFragment.lines[\r\n i\r\n ].lineId;\r\n this.subsequentLineId = this.selectedSignInterpretation?.sign.line.textFragment.lines[\r\n i + 1\r\n ].lineId;\r\n }\r\n else {\r\n this.previousLineId = this.selectedSignInterpretation?.sign.line.textFragment.lines[\r\n i\r\n ].lineId;\r\n this.subsequentLineId = undefined; // chqnge this to null\r\n }\r\n }\r\n else if (this.position == 'before') {\r\n if (index !== this.selectedSignInterpretation?.sign.line.textFragment.lines[0].lineName) {\r\n this.previousLineId = this.selectedSignInterpretation?.sign.line.textFragment.lines[\r\n i - 1\r\n ].lineId;\r\n this.subsequentLineId = this.selectedSignInterpretation?.sign.line.textFragment.lines[\r\n i\r\n ].lineId;\r\n }\r\n else {\r\n this.previousLineId = undefined\r\n this.subsequentLineId = this.selectedSignInterpretation?.sign.line.textFragment.lines[\r\n i\r\n ].lineId;\r\n }\r\n\r\n }\r\n }\r\n }\r\n return this.selectedSignInterpretation && line;\r\n }\r\n }\r\n\r\n public saveNewLine() {\r\n // call the operation\r\n\r\n this.textService.createLine(\r\n this.editionId,\r\n this.textFragmentId,\r\n this.line,\r\n this.previousLineId,\r\n this.subsequentLineId\r\n );\r\n const op: ArtefactAddLineOperation = new ArtefactAddLineOperation(\r\n this.editionId,\r\n this.line,\r\n this.textFragmentId,\r\n this.previousLineId,\r\n this.subsequentLineId\r\n );\r\n this.operationsManager.addOperation(op);\r\n const modal = this.$refs['addLineModal'] as any & { hide: () => void };\r\n modal.hide();\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./add-line-modal.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./add-line-modal.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./add-line-modal.vue?vue&type=template&id=68aadae7&scoped=true&%40modal-show=onModalShow&\"\nimport script from \"./add-line-modal.vue?vue&type=script&lang=ts&\"\nexport * from \"./add-line-modal.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./add-line-modal.vue?vue&type=style&index=0&id=68aadae7&lang=scss&scoped=true&\"\nimport style1 from \"./add-line-modal.vue?vue&type=style&index=1&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"68aadae7\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('b-modal',{ref:\"deleteLineModal\",attrs:{\"id\":\"deleteLineModal\",\"title\":\"Delete Line\"},scopedSlots:_vm._u([{key:\"modal-footer\",fn:function(){return [_c('div',{staticClass:\"w-100-flex\"},[_c('b-button',{attrs:{\"variant\":\"outline-primary\"},on:{\"click\":function($event){return _vm.deleteLine()}}},[_vm._v(\"Confirm\")])],1)]},proxy:true}])},[(_vm.line)?_c('div',[_vm._v(\" Are you sure you want to delete line \"+_vm._s(_vm.line.lineName)+\" \")]):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Line, SignInterpretation, TextFragment } from '@/models/text';\r\nimport { Component, Prop, Vue, Watch } from 'vue-property-decorator';\r\nimport TextLine from '@/components/text/text-line.vue';\r\nimport TextService from '@/services/text';\r\nimport {\r\n ArtefactDeleteLineOperation,\r\n ArtefactEditorOperation\r\n} from '@/views/artefact-editor/operations';\r\nimport { LineDTO, TextFragmentDTO } from '@/dtos/sqe-dtos';\r\nimport { OperationsManager } from '@/utils/operations-manager';\r\n\r\n@Component({\r\n name: 'delete-line-modal',\r\n components: {\r\n 'text-line': TextLine\r\n }\r\n})\r\nexport default class DeleteLineModal extends Vue {\r\n // if line.lineId is undefined the linelineName will be bad\r\n public position: string = '';\r\n public tempLine: LineDTO = {\r\n lineId: 0,\r\n lineName: '',\r\n signs: [],\r\n editorId: 0\r\n };\r\n public get editionId() {\r\n return parseInt(this.$route.params.editionId);\r\n }\r\n public notInTheRightComponent: boolean = false;\r\n public textService: TextService = new TextService();\r\n public previousLineId: number = 0;\r\n public subsequentLineId: number = 0;\r\n public textFragmentId: number = 0;\r\n private operationsManager = new OperationsManager(\r\n this\r\n );\r\n public textLine: string = '';\r\n public get editorState() {\r\n return this.$state.textFragmentEditor;\r\n }\r\n public get selectedSignInterpretation(): SignInterpretation {\r\n return this.editorState.selectedSignInterpretations[0];\r\n }\r\n protected async mounted() {\r\n this.$root.$on(\r\n 'bv::show::modal',\r\n (modalId: string, parameter: string) => {\r\n if (modalId === 'deleteLineModal') {\r\n } else {\r\n this.notInTheRightComponent = true;\r\n }\r\n }\r\n );\r\n this.$state.operationsManager = this.operationsManager;\r\n }\r\n public async saveEntities(\r\n ops: ArtefactEditorOperation[]\r\n ): Promise {\r\n return true;\r\n }\r\n protected async created() {\r\n // check what with line.lineId\r\n this.$state.eventBus.on(\r\n 'change-artefact-delete-line',\r\n (prevText: Line) => {\r\n console.log(this.line, prevText);\r\n }\r\n );\r\n }\r\n public get line(): LineDTO {\r\n //tqke cqre if it is before or after here \r\n if (this.notInTheRightComponent) {\r\n const line: any = {\r\n editorId: this.selectedSignInterpretation?.sign.line.editorId,\r\n lineName: this.selectedSignInterpretation?.sign.line.lineName,\r\n lineId: this.selectedSignInterpretation?.sign.line.lineId,\r\n signs: this.selectedSignInterpretation?.sign.line.signs\r\n };\r\n return this.selectedSignInterpretation && line;\r\n } else {\r\n const index: string = this.selectedSignInterpretation?.sign.line\r\n .lineName; // line we clicked on\r\n const textFragment: TextFragment = this.selectedSignInterpretation\r\n ?.sign.line.textFragment;\r\n const line: any = {\r\n editorId: this.selectedSignInterpretation?.sign.line.editorId,\r\n lineName: this.selectedSignInterpretation?.sign.line.lineName,\r\n lineId: this.selectedSignInterpretation?.sign.line.lineId,\r\n signs: []\r\n };\r\n this.textFragmentId = textFragment?.textFragmentId;\r\n for (\r\n let i = 0;\r\n i <\r\n this.selectedSignInterpretation?.sign.line.textFragment.lines\r\n .length;\r\n i++\r\n ) {\r\n if (\r\n this.selectedSignInterpretation?.sign.line.textFragment\r\n .lines[i].lineName === index\r\n ) {\r\n // in case we clicked on after \r\n // get the previous and the subsequent \r\n this.previousLineId = this.selectedSignInterpretation?.sign.line.textFragment.lines[\r\n i\r\n ].lineId;\r\n this.subsequentLineId = this.selectedSignInterpretation?.sign.line.textFragment.lines[\r\n i + 1\r\n ].lineId;\r\n }\r\n }\r\n return this.selectedSignInterpretation && line;\r\n }\r\n }\r\n public deleteLine() {\r\n\r\n this.textService.deleteLine(this.editionId, this.line.lineId);\r\n const op: ArtefactDeleteLineOperation = new ArtefactDeleteLineOperation(\r\n this.editionId,\r\n this.line,\r\n this.textFragmentId,\r\n this.previousLineId,\r\n this.subsequentLineId\r\n );\r\n this.operationsManager.addOperation(op);\r\n const modal = this.$refs['deleteLineModal'] as any & {\r\n hide: () => void;\r\n };\r\n modal.hide();\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./delete-line-modal.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./delete-line-modal.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./delete-line-modal.vue?vue&type=template&id=6635515e&scoped=true&\"\nimport script from \"./delete-line-modal.vue?vue&type=script&lang=ts&\"\nexport * from \"./delete-line-modal.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./delete-line-modal.vue?vue&type=style&index=0&id=6635515e&lang=scss&scoped=true&\"\nimport style1 from \"./delete-line-modal.vue?vue&type=style&index=1&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6635515e\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Vue, Emit } from 'vue-property-decorator';\r\nimport { Artefact } from '@/models/artefact';\r\nimport { TextFragment, ArtefactTextFragmentData } from '@/models/text';\r\nimport TextFragmentComponent from '@/components/text/text-fragment.vue';\r\nimport EditSignModal from '@/components/text/edit-sign-modal.vue';\r\nimport EditLineModal from '@/components/text/edit-line-modal.vue';\r\nimport AddLineModal from '@/components/text/add-line-modal.vue';\r\nimport DeleteLineModal from '@/components/text/delete-line-modal.vue';\r\nimport { ArtefactEditorMode } from './types';\r\n\r\n@Component({\r\n name: 'text-side',\r\n components: {\r\n 'text-fragment': TextFragmentComponent,\r\n 'edit-sign-modal': EditSignModal,\r\n 'edit-line-modal': EditLineModal,\r\n 'add-line-modal': AddLineModal,\r\n 'delete-line-modal': DeleteLineModal,\r\n },\r\n})\r\nexport default class TextSide extends Vue {\r\n @Prop() public artefact!: Artefact;\r\n @Prop({ default: 'artefact'})\r\n public editorMode!: ArtefactEditorMode;\r\n @Prop() public textFragment!: TextFragment;\r\n @Prop() public fontSize!: number;\r\n\r\n private get artefactMode() {\r\n return this.editorMode === 'artefact';\r\n }\r\n\r\n private get textFragmentMode() {\r\n return this.editorMode === 'text-fragment';\r\n }\r\n\r\n // @Prop() public selectedSignInterpretation!: SignInterpretation | null;\r\n private errorMessage = '';\r\n private loading = false;\r\n private textFragmentId = 0;\r\n\r\n private displayedTextFragments: TextFragment[] = []; // Text fragments that are going to be displayed\r\n private displayedTextFragmentsShow: { [key: number]: boolean } = {}; // Map - form text fragment id to boolean\r\n private get editionId(): number {\r\n return parseInt(this.$route.params.editionId);\r\n }\r\n\r\n private get readOnly(): boolean {\r\n return this.$state.editions.current!.permission.readOnly;\r\n }\r\n\r\n private get dropdownTextFragmentsData() {\r\n const displayedTfIds = this.displayedTextFragments.map((tf) => tf.id);\r\n return this.allTextFragmentsData.filter(\r\n (x) => (!x.certain || !x.suggested) && !displayedTfIds.includes(x.id)\r\n );\r\n }\r\n\r\n private get displayedTextFragmentsData() {\r\n // Try first to get 'certain' matches,\r\n // if there are none, then fall back to 'suggested' (which might also be none)\r\n const certain = this.allTextFragmentsData.filter((x) => x.certain);\r\n console.info(this.allTextFragmentsData.filter((x) => x.suggested));\r\n return certain.length > 0 ? certain : this.allTextFragmentsData.filter((x) => x.suggested);\r\n }\r\n\r\n private get openedTextFragement() {\r\n if (this.$state.textFragmentEditor.singleSelectedSi) {\r\n const tfId = this.$state.textFragmentEditor.singleSelectedSi.sign.line\r\n .textFragment.textFragmentId;\r\n return this.displayedTextFragments.findIndex(\r\n (tf) => tf.id === tfId\r\n );\r\n }\r\n return 0;\r\n }\r\n\r\n private isTfShown(tfId: number) {\r\n return this.displayedTextFragmentsShow[tfId];\r\n }\r\n\r\n private get allTextFragmentsData() {\r\n let textFragments = this.$state.editions.current!.textFragments.map(\r\n (tf) => ArtefactTextFragmentData.createFromEditionTextFragment(tf)\r\n );\r\n const textFragmentsArtefact =\r\n this.$state.artefacts.current!.textFragments || [];\r\n\r\n textFragments = textFragments.map((editionTf) => {\r\n for (const artefactTf of textFragmentsArtefact) {\r\n if (artefactTf.id === editionTf.id) {\r\n editionTf.suggested = editionTf.suggested || artefactTf.suggested;\r\n editionTf.certain = editionTf.certain || artefactTf.certain;\r\n }\r\n }\r\n return editionTf;\r\n });\r\n // textFragments = textFragments.map((editionTf) => {\r\n // // Copy the suggested and certain attributes for TFs matching the artefactId\r\n // textFragmentsArtefact.forEach((artefactTf) => {\r\n // if (artefactTf.id === editionTf.id) {\r\n // editionTf.suggested = artefactTf.suggested;\r\n // editionTf.certain = artefactTf.certain;\r\n // }\r\n // });\r\n\r\n // return editionTf;\r\n // });\r\n\r\n return textFragments;\r\n }\r\n\r\n private async mounted() {\r\n await this.$state.prepare.artefact(this.editionId, this.artefact.id);\r\n if (this.textFragmentMode) {\r\n this.displayedTextFragments = [this.textFragment];\r\n this.displayedTextFragmentsShow[this.textFragment.id] = true;\r\n } else {\r\n this.displayedTextFragmentsData.forEach(async (tfd, idx) => {\r\n await this.getFragmentText(tfd.id);\r\n const tf = this.$state.textFragments.get(tfd.id);\r\n if (tf) {\r\n this.displayedTextFragments.push(tf);\r\n this.displayedTextFragmentsShow[tfd.id] =\r\n idx === 0 ? true : false;\r\n }\r\n });\r\n }\r\n }\r\n\r\n private async loadFragment(event: Event) {\r\n const target = event.target as HTMLInputElement;\r\n this.errorMessage = '';\r\n const textFragmentData = this.allTextFragmentsData.find(\r\n (obj) => obj.name === target.value\r\n );\r\n if (target.value) {\r\n if (!textFragmentData) {\r\n this.errorMessage = 'This fragment does not exist';\r\n return;\r\n }\r\n\r\n const tfIdsToDelete = this.allTextFragmentsData\r\n .filter((tfData) => !tfData.certain)\r\n .map((t) => t.id);\r\n\r\n this.displayedTextFragments = this.displayedTextFragments.filter((x, index) => {\r\n return !tfIdsToDelete.includes(x.id);\r\n });\r\n\r\n await this.getFragmentText(textFragmentData.id);\r\n const tf = this.$state.textFragments.get(textFragmentData.id);\r\n\r\n if (tf) {\r\n this.displayedTextFragments = [\r\n tf,\r\n ...this.displayedTextFragments,\r\n ];\r\n }\r\n this.emptySelectedState();\r\n }\r\n }\r\n private emptySelectedState(id?: number) {\r\n if (\r\n id &&\r\n this.$state.textFragmentEditor.singleSelectedSi &&\r\n this.$state.textFragmentEditor.singleSelectedSi.sign.line.textFragment\r\n .textFragmentId === id\r\n ) {\r\n return;\r\n }\r\n this.$state.textFragmentEditor.selectedSignInterpretations = [];\r\n this.$state.artefactEditor.selectRoi(null);\r\n }\r\n private changePosition(index: number, up: boolean) {\r\n const indexToChange = up ? index - 1 : index + 1;\r\n const isInBoudaries = up\r\n ? indexToChange >= 0\r\n : indexToChange < this.displayedTextFragments.length;\r\n if (isInBoudaries) {\r\n const temp = this.displayedTextFragments[index];\r\n this.displayedTextFragments[index] = this.displayedTextFragments[\r\n indexToChange\r\n ];\r\n this.displayedTextFragments[indexToChange] = temp;\r\n this.displayedTextFragments = [...this.displayedTextFragments];\r\n }\r\n }\r\n\r\n private async getFragmentText(textFragmentId: number) {\r\n this.loading = true;\r\n await this.$state.prepare.textFragment(this.editionId, textFragmentId);\r\n this.loading = false;\r\n // this.textFragmentSelected(this.textFragmentId);\r\n }\r\n\r\n @Emit()\r\n private textFragmentSelected(textFragmentId: number) {\r\n return textFragmentId;\r\n }\r\n\r\n @Emit()\r\n private textFragmentsLoaded() {\r\n // Let the artefact editor know we've loaded all the initial ROIs\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./text-side.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./text-side.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./text-side.vue?vue&type=template&id=4601da89&scoped=true&\"\nimport script from \"./text-side.vue?vue&type=script&lang=ts&\"\nexport * from \"./text-side.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./text-side.vue?vue&type=style&index=0&id=4601da89&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4601da89\",\n null\n \n)\n\nexport default component.exports","import { IIIFImage } from '@/models/image';\r\n\r\nexport interface SingleImageSetting {\r\n // Keep information about the image itself, to make rendering based on the setting simpler\r\n image: IIIFImage;\r\n type: string;\r\n visible: boolean;\r\n opacity: number; // Between 0 and 1\r\n normalizedOpacity: number;\r\n}\r\n\r\nexport interface ImageSetting {\r\n [image: string]: SingleImageSetting;\r\n}\r\n\r\nexport function normalizeOpacity(settings: ImageSetting) {\r\n let filteredImageList = Object.values(settings).filter(x => x.visible);\r\n\r\n if (filteredImageList.length === 0) {\r\n // No visible images, make the first one visiblesTf\r\n Object.values(settings)[0].visible = true;\r\n filteredImageList = Object.values(settings).filter(x => x.visible);\r\n }\r\n const firstOpacity = filteredImageList[0].opacity;\r\n const numVisible = filteredImageList.length;\r\n\r\n let fullOpacity = numVisible;\r\n for (const [i, val] of filteredImageList.entries()) {\r\n if (i === 0) {\r\n val.normalizedOpacity = 1;\r\n fullOpacity -= val.opacity + numVisible - 1;\r\n } else {\r\n val.normalizedOpacity =\r\n val.opacity * ((numVisible - i) / numVisible) + ((fullOpacity * val.opacity) / numVisible);\r\n fullOpacity += 1 - val.opacity;\r\n }\r\n }\r\n}\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('g',{attrs:{\"pointer-events\":\"none\"}},[_c('defs',[_c('path',{attrs:{\"id\":\"path\",\"d\":_vm.clippingMask.svg}}),_c('clipPath',{attrs:{\"id\":\"clip-path\"}},[_c('use',{attrs:{\"stroke\":\"none\",\"fill\":\"none\",\"fill-rule\":\"evenodd\",\"xlink:href\":\"#path\"}})])]),(!_vm.artefact.isVirtual)?_c('g',{attrs:{\"clip-path\":\"url(#clip-path)\",\"draggable\":\"false\"}},_vm._l((_vm.visibleImageSettings),function(imageSetting){return _c('iiif-image',{key:'svg-image-' + imageSetting.image.url,attrs:{\"image\":imageSetting.image,\"boundingBox\":_vm.boundingBox,\"scaleFactor\":_vm.params.zoom,\"opacity\":imageSetting.normalizedOpacity}})}),1):_vm._e(),(_vm.artefact.isVirtual)?_c('path',{staticClass:\"virtual-path\",attrs:{\"d\":_vm.artefact.mask.svg,\"vector-effect\":\"non-scaling-stroke\"}}):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Vue } from 'vue-property-decorator';\r\nimport { IIIFImage } from '@/models/image';\r\nimport { Polygon } from '@/utils/Polygons';\r\nimport { SingleImageSetting } from '../../components/image-settings/types';\r\nimport { BaseEditorParams } from '@/models/editor-params';\r\nimport { BoundingBox } from '@/utils/helpers';\r\nimport IIIFImageComponent from '@/components/images/IIIFImage.vue';\r\nimport { Artefact } from '@/models/artefact';\r\n\r\n@Component({\r\n name: 'image-layer',\r\n components: {\r\n 'iiif-image': IIIFImageComponent,\r\n }\r\n})\r\nexport default class ImageLayer extends Vue {\r\n @Prop() public width!: number;\r\n @Prop() public height!: number;\r\n @Prop() public params!: BaseEditorParams;\r\n // @Prop() public editable!: boolean;\r\n @Prop() public clippingMask!: Polygon;\r\n @Prop() public boundingBox!: BoundingBox;\r\n @Prop() public artefact!: Artefact;\r\n\r\n public get imageSettings(): SingleImageSetting[] {\r\n const values = Object.keys(this.params.imageSettings).map(\r\n key => this.params.imageSettings[key]\r\n );\r\n return values;\r\n }\r\n public get visibleImageSettings(): SingleImageSetting[] {\r\n return this.imageSettings.filter(image => image.visible);\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./image-layer.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./image-layer.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./image-layer.vue?vue&type=template&id=c9c7e7f4&scoped=true&\"\nimport script from \"./image-layer.vue?vue&type=script&lang=ts&\"\nexport * from \"./image-layer.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./image-layer.vue?vue&type=style&index=0&id=c9c7e7f4&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"c9c7e7f4\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('g',{class:[_vm.waiting ? 'disabled' : '', _vm.svgClass],attrs:{\"pointer-events\":\"all\"},on:{\"pointerdown\":function($event){return _vm.pointerDown($event)},\"pointermove\":function($event){return _vm.pointerMove($event)},\"pointerup\":function($event){return _vm.pointerUp($event)},\"pointercancel\":function($event){return _vm.pointerCancel($event)},\"keypress\":function($event){return _vm.keyPress($event)}}},[_c('rect',{staticStyle:{\"stroke\":\"none\",\"fill\":\"none\"},attrs:{\"width\":\"30000\",\"height\":\"30000\"}}),(_vm.closedPolygon)?_c('polygon',{style:(_vm.polygonStyle),attrs:{\"points\":_vm.polygonString}}):_c('polyline',{style:(_vm.polylineStyle),attrs:{\"points\":_vm.polygonString}})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { CommHelper } from './comm-helper';\r\nimport { Polygon } from '@/utils/Polygons';\r\nimport { WktPolygonDTO } from '@/dtos/sqe-dtos';\r\nimport { ApiRoutes } from './api-routes';\r\n\r\nexport default class UtilsService {\r\n public async repairPolygon(p: Polygon): Promise {\r\n const url = ApiRoutes.repairPolygonUrl();\r\n const dto: WktPolygonDTO = {\r\n wktPolygon: p.wkt,\r\n };\r\n\r\n const response = await CommHelper.post(url, dto);\r\n return Polygon.fromWkt(response.data.wktPolygon);\r\n }\r\n}\r\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Vue, Watch, Emit } from 'vue-property-decorator';\r\nimport { Point } from '@/utils/helpers';\r\nimport { Polygon } from '@/utils/Polygons';\r\nimport UtilsService from '@/services/utils';\r\nexport type ActionMode = 'select' | 'polygon' | 'box';\r\ntype InternalMode =\r\n | 'before-polygon'\r\n | 'polygon'\r\n | 'before-corner1'\r\n | 'before-corner2';\r\n\r\n@Component({\r\n name: 'boundary-drawer'\r\n})\r\nexport default class BoundaryDrawer extends Vue {\r\n @Prop({\r\n default: 'polygon'\r\n })\r\n public readonly mode!: ActionMode;\r\n @Prop({\r\n default: 'purple'\r\n })\r\n public readonly color!: string;\r\n @Prop() public readonly transformRootId!: string;\r\n\r\n private internalMode: InternalMode = 'before-polygon';\r\n private utilsService: UtilsService = new UtilsService();\r\n private waiting = false;\r\n // corner1 and corner2 are the two corners of the box in box mode,\r\n // or of the polygon's bounding box in polygon mode\r\n private corner1?: Point;\r\n private corner2?: Point;\r\n\r\n // The list of points of the polygon\r\n private polygonPoints: Point[] = [];\r\n\r\n // We only support single touch events. When a second pointer is used,\r\n // we cancel everything\r\n private activePointers: Set = new Set();\r\n private get polygonString(): string {\r\n const pts = this.polygonPoints.map(pt => `${pt.x}, ${pt.y}`);\r\n return pts.join(' ');\r\n }\r\n\r\n private get polygonStyle(): string {\r\n return `stroke: ${this.color};`;\r\n }\r\n\r\n private get polylineStyle(): string {\r\n return `stroke: ${this.color};`;\r\n }\r\n\r\n // True when the polygon is closed\r\n private closedPolygon: boolean = false;\r\n\r\n private created() {\r\n this.onModeChanged(this.mode);\r\n }\r\n\r\n @Watch('mode')\r\n private onModeChanged(newMode: ActionMode) {\r\n if (this.mode === 'polygon') {\r\n this.internalMode = 'before-polygon';\r\n } else if (this.mode === 'box') {\r\n this.internalMode = 'before-corner1';\r\n }\r\n this.pointerCancel();\r\n }\r\n\r\n private get svgClass() {\r\n if (\r\n this.internalMode === 'before-polygon' ||\r\n this.internalMode === 'polygon'\r\n ) {\r\n return ['draw-boundary'];\r\n }\r\n if (this.internalMode === 'before-corner1') {\r\n return ['draw-first-corner'];\r\n }\r\n\r\n if (this.internalMode === 'before-corner2') {\r\n return ['draw-second-corner'];\r\n }\r\n\r\n return [];\r\n }\r\n\r\n private pointerDown($event: PointerEvent) {\r\n this.activePointers.add($event.pointerId);\r\n if (this.activePointers.size > 1) {\r\n this.cancelOperation();\r\n return;\r\n }\r\n\r\n const pt = this.eventToPoint($event);\r\n this.closedPolygon = false;\r\n if (this.internalMode === 'before-corner1') {\r\n this.internalMode = 'before-corner2';\r\n } else if (this.internalMode === 'before-polygon') {\r\n this.corner1 = this.corner2 = pt;\r\n this.internalMode = 'polygon';\r\n }\r\n\r\n this.corner1 = { x: pt.x, y: pt.y };\r\n this.corner2 = { x: pt.x, y: pt.y };\r\n this.polygonPoints = [pt];\r\n }\r\n\r\n private pointerMove($event: PointerEvent) {\r\n if (this.activePointers.size > 1 || this.waiting) {\r\n return;\r\n }\r\n\r\n const pt = this.eventToPoint($event);\r\n if (this.internalMode === 'before-corner2') {\r\n this.corner2 = pt;\r\n this.polygonPoints = [\r\n this.corner1!,\r\n { x: this.corner1!.x, y: this.corner2!.y },\r\n this.corner2!,\r\n { x: this.corner2!.x, y: this.corner1!.y }\r\n ];\r\n this.closedPolygon = true;\r\n } else if (this.internalMode === 'polygon') {\r\n this.polygonPoints!.push(this.eventToPoint($event));\r\n\r\n // Update the polygon's bounding box\r\n if (pt.x < this.corner1!.x) {\r\n this.corner1!.x = pt.x;\r\n }\r\n if (pt.y < this.corner1!.y) {\r\n this.corner1!.y = pt.y;\r\n }\r\n if (pt.x > this.corner2!.x) {\r\n this.corner2!.x = pt.x;\r\n }\r\n if (pt.y > this.corner2!.y) {\r\n this.corner2!.y = pt.y;\r\n }\r\n\r\n this.closedPolygon = false;\r\n }\r\n }\r\n\r\n // Check if a polygon is closed.\r\n // This is done by looking at the distance between the last point and the first point. If they\r\n // are close enough (less than 5% of the diagonal of the polygon's bounding box),\r\n // the polygon is considered closed.\r\n private checkPolygonCloseness(): boolean {\r\n const threshold = 0.25;\r\n\r\n const width = this.corner1!.x - this.corner2!.x; // No Math.abs since we square these\r\n const height = this.corner1!.y - this.corner2!.y;\r\n const diagonal2 = width * width + height * height;\r\n\r\n const pt0 = this.polygonPoints[0];\r\n const pt1 = this.polygonPoints[this.polygonPoints.length - 1];\r\n const dist2 =\r\n (pt0.x - pt1.x) * (pt0.x - pt1.x) +\r\n (pt0.y - pt1.y) * (pt0.y - pt1.y);\r\n\r\n const ratio = dist2 / diagonal2;\r\n\r\n return ratio < threshold * threshold;\r\n }\r\n\r\n private pointerCancel() {\r\n this.cancelOperation();\r\n this.activePointers = new Set();\r\n }\r\n\r\n private cancelOperation() {\r\n this.corner1 = this.corner2 = undefined;\r\n this.polygonPoints = [];\r\n if (this.mode === 'polygon') {\r\n this.internalMode = 'before-polygon';\r\n } else if (this.mode === 'box') {\r\n this.internalMode = 'before-corner1';\r\n }\r\n this.closedPolygon = false;\r\n }\r\n\r\n private keyPress($event: KeyboardEvent) {\r\n if ($event.key === 'Escape') {\r\n this.cancelOperation();\r\n $event.preventDefault();\r\n }\r\n }\r\n\r\n private pointerUp($event: PointerEvent) {\r\n this.activePointers.delete($event.pointerId);\r\n\r\n // TODO: Make sure the polygon is closed\r\n if (this.mode === 'box' || !this.closedPolygon) {\r\n this.checkPolygon();\r\n }\r\n this.cancelOperation();\r\n }\r\n\r\n private eventToPoint($event: PointerEvent): Point {\r\n // Changing coordinate systems taken from:\r\n // https://www.sitepoint.com/how-to-translate-from-dom-to-svg-coordinates-and-back-again/\r\n const pt = this.svg.createSVGPoint();\r\n pt.x = $event.clientX;\r\n pt.y = $event.clientY;\r\n const svgPt = pt.matrixTransform(\r\n this.transformRoot.getScreenCTM()!.inverse()\r\n );\r\n\r\n return svgPt;\r\n }\r\n\r\n private get svg(): SVGSVGElement {\r\n return this.$el.closest('svg') as SVGSVGElement;\r\n }\r\n\r\n private get transformRoot(): SVGGraphicsElement {\r\n return this.svg.getElementById(\r\n this.transformRootId\r\n ) as SVGGraphicsElement;\r\n }\r\n\r\n @Emit()\r\n private newPolygon(polygon: Polygon) {\r\n return polygon;\r\n }\r\n\r\n private async checkPolygon() {\r\n if (this.polygonPoints.length < 3) {\r\n // This is not really a polygon\r\n return;\r\n }\r\n // Turn the polygon into an svg string, due it bit by bit\r\n const partials = [\r\n `M${this.polygonPoints[0].x} ${this.polygonPoints[0].y}`\r\n ];\r\n for (let i = 1; i < this.polygonPoints.length; i++) {\r\n partials.push(\r\n `L${this.polygonPoints[i].x} ${this.polygonPoints[i].y}`\r\n );\r\n }\r\n partials.push(`L${this.polygonPoints[0].x} ${this.polygonPoints[0].y}`);\r\n\r\n const svg = partials.join(' ');\r\n const polygon = new Polygon(svg);\r\n\r\n if (polygon.isLegal()) {\r\n this.newPolygon(polygon);\r\n } else {\r\n try {\r\n this.waiting = true;\r\n const fixedPolygon = await this.utilsService.repairPolygon(\r\n polygon\r\n );\r\n this.newPolygon(fixedPolygon);\r\n } catch (e) {\r\n this.$toasted.show(this.$tc('toasts.repairPolygon'), {\r\n type: 'error',\r\n position: 'top-right',\r\n duration: 3000\r\n });\r\n } finally {\r\n this.waiting = false;\r\n }\r\n }\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./boundary-drawer.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./boundary-drawer.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./boundary-drawer.vue?vue&type=template&id=78699bb4&scoped=true&\"\nimport script from \"./boundary-drawer.vue?vue&type=script&lang=ts&\"\nexport * from \"./boundary-drawer.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./boundary-drawer.vue?vue&type=style&index=0&id=78699bb4&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"78699bb4\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"sign-wheel\",attrs:{\"dir\":_vm.direction}},_vm._l((_vm.signs),function(signInfo){return _c('text-sign',{key:signInfo.sign.signId,class:signInfo.class,attrs:{\"sign\":signInfo.sign}})}),1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Vue, Watch } from 'vue-property-decorator';\r\nimport { Line, SignInterpretation, TextDirection, Sign } from '@/models/text';\r\nimport TextSign from '@/components/text/text-sign.vue';\r\n\r\ninterface SignInfo {\r\n sign: Sign;\r\n index: number;\r\n class: string;\r\n}\r\n\r\n@Component({\r\n name: 'sign-wheel',\r\n components: {\r\n 'text-sign': TextSign\r\n }\r\n})\r\nexport default class SignWheel extends Vue {\r\n @Prop() public line!: Line;\r\n @Prop({\r\n default: 'rtl'\r\n })\r\n public direction!: TextDirection;\r\n @Prop({\r\n default: 5\r\n })\r\n public signsOnEachSide!: number;\r\n\r\n private signs: SignInfo[] = [];\r\n private selectedIndex = 0;\r\n\r\n public mounted() {\r\n this.fillWheel();\r\n }\r\n\r\n\r\n\r\n public get textFragmentEditor() {\r\n return this.$state.textFragmentEditor;\r\n }\r\n public get selectedSignInterpretations(): SignInterpretation[] {\r\n return this.textFragmentEditor.selectedSignInterpretations;\r\n }\r\n\r\n @Watch('selectedSignInterpretations')\r\n private onSelectedSignInterpretationChanged(\r\n curSign: SignInterpretation,\r\n oldSign: SignInterpretation\r\n ) {\r\n this.fillWheel();\r\n }\r\n\r\n private fillWheel() {\r\n this.selectedIndex = this.findSignIndex();\r\n if (this.selectedIndex === -1) {\r\n return;\r\n }\r\n let firstIndex = 0;\r\n let lastIndex = 0;\r\n\r\n firstIndex = Math.max(this.selectedIndex - this.signsOnEachSide, 0);\r\n lastIndex = Math.min(\r\n this.selectedIndex + this.signsOnEachSide,\r\n this.line.signs.length - 1\r\n );\r\n\r\n this.signs = [];\r\n for (let i = firstIndex; i <= lastIndex; i++) {\r\n const diff = Math.abs(i - this.selectedIndex);\r\n const si = {\r\n sign: this.line.signs[i],\r\n index: i,\r\n class: `sign-dist-${diff} `\r\n };\r\n this.signs.push(si);\r\n }\r\n }\r\n\r\n private findSignIndex() {\r\n if (!this.textFragmentEditor.singleSelectedSi) {\r\n return -1;\r\n }\r\n\r\n // Returns the index of the currently selected sign in the line\r\n for (let i = 0; i < this.line.signs.length; i++) {\r\n const sign = this.line.signs[i];\r\n const siIndex = sign.signInterpretations.findIndex(\r\n si => si.id === this.textFragmentEditor.singleSelectedSi!.id\r\n );\r\n if (siIndex !== -1) {\r\n return i;\r\n }\r\n }\r\n\r\n return -1;\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./sign-wheel.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./sign-wheel.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./sign-wheel.vue?vue&type=template&id=2111fdd1&scoped=true&\"\nimport script from \"./sign-wheel.vue?vue&type=script&lang=ts&\"\nexport * from \"./sign-wheel.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./sign-wheel.vue?vue&type=style&index=0&id=2111fdd1&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2111fdd1\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"artefact-toolbar\"}},[_c('zoom-toolbox',{attrs:{\"delta\":\"0.05\"},on:{\"zoomChanged\":function($event){return _vm.onZoomChanged($event)}},model:{value:(_vm.params.zoom),callback:function ($$v) {_vm.$set(_vm.params, \"zoom\", $$v)},expression:\"params.zoom\"}}),_c('rotation-toolbox',{attrs:{\"delta\":\"1\",\"enable-text\":true},on:{\"rotationAngleChanged\":function($event){return _vm.onRotationAngleChanged($event)}},model:{value:(_vm.params.rotationAngle),callback:function ($$v) {_vm.$set(_vm.params, \"rotationAngle\", $$v)},expression:\"params.rotationAngle\"}}),_c('adjust-image-toolbox',{attrs:{\"imageStack\":_vm.imageStack,\"params\":_vm.params},on:{\"image-setting-changed\":_vm.onImageSettingChanged}}),_c('undo-redo-toolbox'),_vm._t(\"default\"),_c('font-size-button-toolbox',{attrs:{\"align\":\"right\",\"subject\":\"Font size\"},on:{\"fontSizeChanged\":function($event){return _vm.onFontSizeChanged($event)}},model:{value:(_vm.params.fontSize),callback:function ($$v) {_vm.$set(_vm.params, \"fontSize\", $$v)},expression:\"params.fontSize\"}})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',_vm._l((_vm.imageStack.availableImageTypes),function(imageType){return _c('single-image-setting',{key:imageType,attrs:{\"type\":imageType,\"settings\":_vm.params.imageSettings[imageType]},on:{\"change\":function($event){return _vm.onSingleImageSettingChanged($event)}}})}),1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col-5\"},[_c('b-form-checkbox',{on:{\"change\":_vm.onVisibleChange},model:{value:(_vm.settings.visible),callback:function ($$v) {_vm.$set(_vm.settings, \"visible\", $$v)},expression:\"settings.visible\"}},[_vm._v(_vm._s(_vm.type))])],1),_c('div',{staticClass:\"col\"},[_c('b-form-input',{attrs:{\"type\":\"range\",\"min\":\"0\",\"max\":\"1\",\"step\":\"0.05\"},on:{\"input\":_vm.onOpacityInput},model:{value:(_vm.opacity),callback:function ($$v) {_vm.opacity=$$v},expression:\"opacity\"}})],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n// TODO:\r\n// 1. Add event handlers when data changes.\r\n// 2. Raise an event (call changed, parameter is settings) when data changes\r\n// 3. Use i18n for the type\r\n// 4. Add tooltip to the slider (with the current number)\r\n// 5. Disable slider when checkbox is false\r\nimport { Component, Prop, Vue, Emit, Watch } from 'vue-property-decorator';\r\nimport { SingleImageSetting } from '../image-settings/types';\r\n\r\n@Component({\r\n name: 'single-image-setting',\r\n})\r\nexport default class SingleImageSettingComponent extends Vue {\r\n @Prop() private type!: string;\r\n @Prop() private settings!: SingleImageSetting;\r\n\r\n private opacity = '1';\r\n // private visible = true;\r\n\r\n private mounted() {\r\n this.opacity = this.settings.opacity.toString(); // Binding works with strings\r\n // this.visible = this.settings.visible;\r\n }\r\n\r\n private onVisibleChange() {\r\n // Use setTimeout since the binding occurs after the input event\r\n setTimeout(() => {\r\n // this.settings.visible = this.visible;\r\n this.change();\r\n }, 0);\r\n }\r\n\r\n private onOpacityInput() {\r\n // We use @input because we want to update the images as the slider slides.\r\n // @change only occurs once the slider stops sliding.\r\n\r\n if (!this.settings.visible) {\r\n // Set the visibility checkbox when moving a slider\r\n this.settings.visible = true;\r\n this.onVisibleChange();\r\n }\r\n\r\n // use setTimeout because checkbox models update *after* the change event is fired\r\n setTimeout(() => {\r\n this.settings.opacity = parseFloat(this.opacity);\r\n this.change();\r\n }, 0);\r\n }\r\n\r\n @Emit()\r\n private change() {\r\n return this.settings;\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SingleImageSetting.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SingleImageSetting.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./SingleImageSetting.vue?vue&type=template&id=0b05c59a&scoped=true&\"\nimport script from \"./SingleImageSetting.vue?vue&type=script&lang=ts&\"\nexport * from \"./SingleImageSetting.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0b05c59a\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Emit, Vue } from 'vue-property-decorator';\r\n\r\nimport SingleImageSettingComponent from '@/components/image-settings/SingleImageSetting.vue';\r\nimport { ImageStack } from '@/models/image';\r\nimport { SingleImageSetting, normalizeOpacity } from './types';\r\nimport { BaseEditorParams } from '@/models/editor-params';\r\n\r\n\r\n\r\nimport EditionSidebar from './components/sidebar.vue';\r\nimport { EditionInfo } from '@/models/edition.js';\r\nimport Waiting from '@/components/misc/Waiting.vue';\r\n\r\nimport PermissionModal from './components/permission-modal.vue';\r\n\r\n\r\n@Component({\r\n name: 'image-settings',\r\n components: {\r\n 'single-image-setting': SingleImageSettingComponent,\r\n },\r\n})\r\n\r\nexport default class ImageSettings extends Vue {\r\n\r\n // props\r\n @Prop() protected imageStack!: ImageStack;\r\n\r\n @Prop() protected params!: BaseEditorParams;\r\n\r\n // methods\r\n public onSingleImageSettingChanged($event: SingleImageSetting) {\r\n normalizeOpacity(this.params!.imageSettings!);\r\n this.$emit('image-setting-changed', this.params.imageSettings);\r\n }\r\n\r\n}\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ImageSettings.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ImageSettings.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ImageSettings.vue?vue&type=template&id=5a83c49b&scoped=true&\"\nimport script from \"./ImageSettings.vue?vue&type=script&lang=ts&\"\nexport * from \"./ImageSettings.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5a83c49b\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('toolbox',{attrs:{\"subject\":_vm.subject}},[_c('b-button',{attrs:{\"id\":\"popover-adjust\",\"variant\":\"outline-secondary\"}},[_c('img',{staticClass:\"mr-1\",attrs:{\"src\":require(\"@/assets/images/adjust.svg\")}}),_c('span',{staticClass:\"d-none d-xl-inline\"},[_vm._v(\"Adjust image\")])]),_c('b-popover',{staticClass:\"popover-body\",attrs:{\"target\":\"popover-adjust\",\"triggers\":\"focus\",\"placement\":\"bottom\"}},[_c('div',[_c('image-settings',{attrs:{\"imageStack\":_vm.imageStack,\"id\":\"popover-input-1\",\"params\":_vm.params},on:{\"image-setting-changed\":_vm.onImageSettingChanged}})],1)])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { ImageStack } from '@/models/image';\r\nimport { ArtefactEditorParams } from '@/views/artefact-editor/types';\r\nimport Vue from 'vue';\r\nimport { Component, Prop } from 'vue-property-decorator';\r\nimport ImageSettingsComponent from '../image-settings/ImageSettings.vue';\r\nimport { SingleImageSetting } from '../image-settings/types';\r\nimport Toolbox from './toolbox.vue';\r\n\r\n@Component({\r\n name: 'adjust-image-toolbox',\r\n components: {\r\n 'image-settings': ImageSettingsComponent,\r\n toolbox: Toolbox,\r\n },\r\n})\r\nexport default class AdjustImageToolbox extends Vue {\r\n @Prop({ default: '' }) public subject!: string;\r\n @Prop() public imageStack!: ImageStack;\r\n @Prop() public params!: ArtefactEditorParams;\r\n\r\n protected onImageSettingChanged(event: SingleImageSetting) {\r\n this.$emit('image-settings-changed', event);\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./adjust-image-toolbox.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./adjust-image-toolbox.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./adjust-image-toolbox.vue?vue&type=template&id=70923682&\"\nimport script from \"./adjust-image-toolbox.vue?vue&type=script&lang=ts&\"\nexport * from \"./adjust-image-toolbox.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('toolbox',{class:'align-' + _vm.align,attrs:{\"subject\":_vm.subject}},[_c('toolbar-icon-button',{staticClass:\"fa fa-font\",attrs:{\"disabled\":!_vm.canFontSizePlus},on:{\"click\":function($event){return _vm.fontSizeChanged(+_vm.delta)}}}),_c('toolbar-icon-button',{staticClass:\"fa fa-font minus\",attrs:{\"disabled\":!_vm.canFontSizeMinus},on:{\"click\":function($event){return _vm.fontSizeChanged(-_vm.delta)}}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport Vue from 'vue';\r\nimport { Component, Prop, Model } from 'vue-property-decorator';\r\nimport ToolbarIconButton from './toolbar-icon-button.vue';\r\nimport Toolbox from './toolbox.vue';\r\n\r\n@Component({\r\n name: 'font-size-button-toolbox',\r\n components: {\r\n toolbox: Toolbox,\r\n 'toolbar-icon-button': ToolbarIconButton,\r\n },\r\n})\r\nexport default class FontSizeButtonToolbox extends Vue {\r\n @Prop({ default: '' }) public subject!: string;\r\n @Model('fontSizeChanged', { type: Number }) private fontSize!: number;\r\n @Prop({ default: 2 }) public delta!: number;\r\n @Prop({ default: 'left' }) public align!: 'left' | 'right';\r\n\r\n private fontSizeLimits: { min: number; max: number } = { min: 10, max: 40 };\r\n\r\n public get canFontSizePlus(): boolean {\r\n return (\r\n this.fontSize < this.fontSizeLimits.max &&\r\n this.fontSize + this.delta < this.fontSizeLimits.max\r\n );\r\n }\r\n\r\n public get canFontSizeMinus(): boolean {\r\n return (\r\n this.fontSize > this.fontSizeLimits.min &&\r\n this.fontSize - +this.delta > this.fontSizeLimits.min\r\n );\r\n // return this.paramsZoom > 0 && Math.round(this.paramsZoom * 100) - this.delta > 0;\r\n }\r\n\r\n public fontSizeChanged(delta: number) {\r\n this.onFontSizeChanged(this.fontSize + delta);\r\n }\r\n\r\n public onFontSizeChanged(val: number) {\r\n localStorage.setItem('font-size', val.toString());\r\n this.$emit('fontSizeChanged', val);\r\n }\r\n}\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./font-size-button-toolbox.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./font-size-button-toolbox.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./font-size-button-toolbox.vue?vue&type=template&id=d5e4ee74&scoped=true&\"\nimport script from \"./font-size-button-toolbox.vue?vue&type=script&lang=ts&\"\nexport * from \"./font-size-button-toolbox.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./font-size-button-toolbox.vue?vue&type=style&index=0&id=d5e4ee74&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"d5e4ee74\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Prop, Vue } from 'vue-property-decorator';\nimport Waiting from '@/components/misc/Waiting.vue';\nimport ArtefactService from '@/services/artefact';\nimport SignInterpretationService from '@/services/sign-interpretation';\nimport ArtefactSideMenu from '@/views/artefact-editor/artefact-side-menu.vue';\nimport TextSide from '@/views/artefact-editor/text-side.vue';\nimport {\n ArtefactEditorParams,\n ArtefactEditorParamsChangedArgs,\n} from '@/views/artefact-editor/types';\nimport { IIIFImage, ImageStack } from '@/models/image';\n\nimport { ImageSetting } from '@/components/image-settings/types';\nimport ImageSettingsComponent from '@/components/image-settings/ImageSettings.vue';\nimport ImagedObjectService from '@/services/imaged-object';\nimport { Artefact } from '@/models/artefact';\nimport { ArtefactEditorState } from '@/state/artefact-editor';\nimport ZoomToolbox from '@/components/toolbars/zoom-toolbox.vue';\nimport RotationToolbox from '@/components/toolbars/rotation-toolbox.vue';\nimport AdjustImageToolbox from '@/components/toolbars/adjust-image-toolbox.vue';\nimport UndoRedoToolbox from '@/components/toolbars/undo-redo-toolbox.vue';\nimport FontSizeButtonToolbox from '@/components/toolbars/font-size-button-toolbox.vue';\nimport CopyEditionToolbox from '@/components/toolbars/copy-edition-toolbox.vue';\nimport CopyToEditionModal from '../home/components/copy-to-edition-modal.vue';\n\n@Component({\n name: 'artefcat-editor-toolbar',\n components: {\n 'image-settings': ImageSettingsComponent,\n 'zoom-toolbox': ZoomToolbox,\n 'rotation-toolbox': RotationToolbox,\n 'adjust-image-toolbox': AdjustImageToolbox,\n 'undo-redo-toolbox': UndoRedoToolbox,\n 'font-size-button-toolbox': FontSizeButtonToolbox,\n 'copy-edition-toolbox': CopyEditionToolbox\n },\n})\nexport default class ArtefactEditorToolbar extends Vue {\n private errorMessage: string = '';\n private imagedObjectService: ImagedObjectService =\n new ImagedObjectService();\n private imageStack: ImageStack = {} as ImageStack;\n\n @Prop() private artefact!: Artefact;\n // @Prop() private params: ArtefactEditorParams = {} as ArtefactEditorParams;\n\n public get editionId(): number {\n return parseInt(this.$route.params.editionId);\n }\n public get artefactEditorState(): ArtefactEditorState {\n return this.$state.artefactEditor;\n }\n private get params(): ArtefactEditorParams {\n return this.artefactEditorState.params || new ArtefactEditorParams();\n }\n\n public get scrolled(): boolean {\n return true;\n }\n\n public get zoomArtefact(): number {\n return this.params.zoom;\n }\n public set zoomArtefact(val: number) {\n this.params.zoom = parseFloat(val.toString());\n this.notifyChange('zoomArtefact', val);\n }\n\n public get readOnly(): boolean {\n return this.$state.editions.current!.permission.readOnly;\n }\n\n public async mounted() {\n await this.$state.prepare.edition(this.artefact.editionId);\n\n if (!this.artefact.isVirtual) {\n const imagedObject = this.$state.imagedObjects.find(\n this.artefact.imagedObjectId\n );\n if (!imagedObject) {\n throw new Error(\n `Can't find ImagedObject ${this.artefact.imagedObjectId} for artefact ${this.artefact.id}`\n );\n }\n this.imageStack = imagedObject.getImageStack(this.artefact.side)!;\n }\n }\n\n public notifyChange(paramName: string, paramValue: any) {\n const args = {\n property: paramName,\n value: paramValue,\n params: this.params,\n } as ArtefactEditorParamsChangedArgs;\n this.$emit('paramsChanged', args);\n }\n public onImageSettingChanged(settings: ImageSetting) {\n this.notifyChange('imageSettings', this.params.imageSettings);\n }\n\n public onRotationAngleChanged(val: number) {\n this.params.rotationAngle = val;\n this.notifyChange('rotationAngle', this.params.rotationAngle);\n }\n\n private onZoomChanged(val: number) {\n this.params.zoom = val; //\n this.notifyChange('zoomArtefact', this.params.zoom);\n }\n public onFontSizeChanged(val: number) {\n this.params.fontSize = val;\n this.notifyChange('fontSize', this.params.fontSize);\n }\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./artefact-editor-toolbar.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./artefact-editor-toolbar.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./artefact-editor-toolbar.vue?vue&type=template&id=0275fdb4&scoped=true&\"\nimport script from \"./artefact-editor-toolbar.vue?vue&type=script&lang=ts&\"\nexport * from \"./artefact-editor-toolbar.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./artefact-editor-toolbar.vue?vue&type=style&index=0&id=0275fdb4&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0275fdb4\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('b-modal',{ref:\"copyToEditionModalRef\",attrs:{\"title\":'Copy artefact to edition ' + _vm.editionTargetName,\"id\":\"copy-to-edition-modal\",\"footer-class\":\"title-footer\"},on:{\"show\":function($event){_vm.editionTargetName = ''; _vm.editionTargetId = 0},\"ok\":_vm.copyToEdition,\"hide\":_vm.onHide},scopedSlots:_vm._u([{key:\"modal-footer\",fn:function(){return [_c('b-row',[_c('b-col',[_c('b-button',{attrs:{\"disabled\":!_vm.editionTargetId},on:{\"~click\":function($event){return _vm.copyToEdition.apply(null, arguments)}}},[_vm._v(\" \"+_vm._s(_vm.$t('misc.copyToEdition'))+\" \")])],1)],1)]},proxy:true}])},[_c('form',[_c('b-row',[_c('b-col',{attrs:{\"cols\":\"12\"}},[_c('b-dropdown',{staticClass:\"w-100\",attrs:{\"text\":_vm.editionTargetName || 'Select edition'}},[_c('b-dropdown-form',[_c('b-form-input',{attrs:{\"id\":\"dropdown-form-email\",\"size\":\"sm\"},model:{value:(_vm.searchValue),callback:function ($$v) {_vm.searchValue=$$v},expression:\"searchValue\"}}),_vm._l((_vm.editions),function(edition){return _c('b-dropdown-item',{key:edition.id,on:{\"click\":function($event){_vm.editionTargetName = edition.name; _vm.editionTargetId = edition.id}}},[_vm._v(_vm._s(edition.name))])})],2)],1)],1)],1)],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Artefact } from '@/models/artefact';\r\nimport { EditionInfo } from '@/models/edition';\r\nimport { ImagedObject } from '@/models/imaged-object';\r\nimport ArtefactService from '@/services/artefact';\r\nimport { Component, Prop, Vue } from 'vue-property-decorator';\r\n\r\n@Component({\r\n name: 'copy-to-edition-modal',\r\n})\r\nexport default class CopyToEditionModal extends Vue {\r\n public searchValue = '';\r\n public editionTargetId: number = 0;\r\n public editionTargetName: string = '';\r\n private errorMessage: string = '';\r\n private waiting: boolean = false;\r\n private filteredEditions: EditionInfo[] = [];\r\n private artefactService: ArtefactService = new ArtefactService();\r\n public get editions() {\r\n this.filteredEditions = this.$state.editions.items;\r\n return this.filteredEditions\r\n .filter((ed) => !ed.isPublic)\r\n .filter((x: EditionInfo) =>\r\n x.name.toLowerCase().includes(this.searchValue.toLowerCase())\r\n );\r\n }\r\n\r\n private get currentArtefact(): Artefact {\r\n return this.$state.artefacts.current!;\r\n }\r\n\r\n private get imagedObject(): ImagedObject | null {\r\n return this.$state.imagedObjects.current;\r\n }\r\n\r\n private async copyToEdition() {\r\n this.waiting = true;\r\n this.errorMessage = '';\r\n\r\n try {\r\n const artefactCopy = await this.artefactService.copyArtefact(\r\n this.editionTargetId,\r\n this.currentArtefact\r\n );\r\n\r\n (this.$refs.copyToEditionModalRef as any).hide();\r\n\r\n this.$router.push({\r\n path: `/editions/${this.editionTargetId}/artefacts/${artefactCopy.id}`,\r\n });\r\n\r\n this.$router.go(0);\r\n } catch (err: any) {\r\n this.errorMessage = err.toString();\r\n console.error('Error copying artefact', err);\r\n } finally {\r\n this.waiting = false;\r\n }\r\n }\r\n private onHide(evt: Event) {\r\n // (this.$refs.copyToEditionModalRef as any).blur();\r\n (this.$refs.copyToEditionModalRef as any).hide();\r\n }\r\n}\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--13-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./copy-to-edition-modal.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--13-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./copy-to-edition-modal.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./copy-to-edition-modal.vue?vue&type=template&id=504f3e61&\"\nimport script from \"./copy-to-edition-modal.vue?vue&type=script&lang=ts&\"\nexport * from \"./copy-to-edition-modal.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Vue } from 'vue-property-decorator';\nimport Waiting from '@/components/misc/Waiting.vue';\nimport ArtefactService from '@/services/artefact';\nimport SignInterpretationService from '@/services/sign-interpretation';\nimport ArtefactSideMenu from '@/views/artefact-editor/artefact-side-menu.vue';\nimport TextSide from '@/views/artefact-editor/text-side.vue';\nimport {\n ArtefactEditorMode,\n ArtefactEditorParams,\n ArtefactEditorParamsChangedArgs,\n} from '@/views/artefact-editor/types';\nimport { IIIFImage, ImageStack } from '@/models/image';\nimport { Position } from '@/models/misc';\nimport { ArtefactTextFragmentData, TextFragment } from '@/models/text';\n\nimport { normalizeOpacity } from '@/components/image-settings/types';\nimport { SignInterpretation, InterpretationRoi, Line } from '@/models/text';\nimport { Polygon } from '@/utils/Polygons';\nimport { ImagedObject } from '@/models/imaged-object';\nimport { BoundingBox } from '@/utils/helpers';\nimport ImageLayer from '@/views/artefact-editor/image-layer.vue';\nimport RoiLayer from '@/views/artefact-editor/roi-layer.vue';\nimport BoundaryDrawer, {\n ActionMode,\n} from '@/components/polygons/boundary-drawer.vue';\nimport Zoomer, {\n ZoomEventArgs,\n RotateEventArgs,\n} from '@/components/misc/zoomer.vue';\nimport TextService from '@/services/text';\nimport SignWheel from '@/views/artefact-editor/sign-wheel.vue';\nimport EditionIcons from '@/components/cues/edition-icons.vue';\nimport { EditionInfo } from '../../models/edition';\nimport {\n ArtefactEditorOperation,\n ArtefactROIOperation,\n ArtefactRotateOperation,\n SignInterpretationEditOperation,\n SignInterpretationCommentOperation,\n TextFragmentAttributeOperation,\n CreateSignInterpretationOperation,\n DeleteSignInterpretationOperation,\n UpdateSignInterperationOperation,\n} from './operations';\nimport { SavingAgent, OperationsManager } from '@/utils/operations-manager';\nimport SignAttributePane from '@/components/sign-attributes/sign-attribute-pane.vue';\nimport ArtefactEditorToolbar from './artefact-editor-toolbar.vue';\nimport { ArtefactEditorState } from '@/state/artefact-editor';\nimport { Artefact } from '@/models/artefact';\nimport { TextFragmentState } from '@/state/text-fragment';\nimport Toolbar from '@/components/toolbars/toolbar.vue';\nimport Toolbox from '@/components/toolbars/toolbox.vue';\nimport ToolbarIconButton from '@/components/toolbars/toolbar-icon-button.vue';\nimport ResizeBar from '@/components/misc/resizeBar.vue';\nimport CopyToEditionModal from '../home/components/copy-to-edition-modal.vue';\nimport CopyEditionToolbox from '@/components/toolbars/copy-edition-toolbox.vue';\n\n@Component({\n name: 'artefact-editor',\n components: {\n waiting: Waiting,\n 'artefact-editor-toolbar': ArtefactEditorToolbar,\n 'text-side': TextSide,\n 'image-layer': ImageLayer,\n 'roi-layer': RoiLayer,\n 'boundary-drawer': BoundaryDrawer,\n zoomer: Zoomer,\n toolbar: Toolbar,\n toolbox: Toolbox,\n 'sign-wheel': SignWheel,\n 'edition-icons': EditionIcons,\n 'sign-attribute-pane': SignAttributePane,\n 'toolbar-icon-button': ToolbarIconButton,\n 'resize-bar': ResizeBar,\n 'copy-to-edition-modal': CopyToEditionModal,\n 'copy-edition-toolbox': CopyEditionToolbox\n },\n})\nexport default class ArtefactEditor\n extends Vue\n implements SavingAgent {\n // public params: ArtefactEditorParams = new ArtefactEditorParams();\n public actionMode: ActionMode = 'box';\n // Two modes of operation. In artefact mode, the artefact is chosen, and text fragments can be added to it.\n // In text-fragment mode, the text fragment is constant, and artefacts can be changed.\n public editorMode: ArtefactEditorMode = 'artefact';\n public get artefactMode() {\n return this.editorMode === 'artefact';\n }\n public get textFragmentMode() {\n return this.editorMode === 'text-fragment';\n }\n\n private autoMode = false;\n\n private errorMessage = '';\n public waiting = true;\n private saving = false;\n private imageStack: ImageStack | undefined = undefined;\n private boundingBox = new BoundingBox();\n private boundingBoxCenter = { x: 0, y: 0 } as Position;\n\n private artefactService = new ArtefactService();\n private textService = new TextService();\n private signInterpretationService = new SignInterpretationService();\n private operationsManager = new OperationsManager(\n this\n );\n\n // Arguments retrieved from the URL\n private editionId: number = 0;\n private artefactId: number = 0; // Only relevent in artefact mode\n private textFragmentId: number = 0; // Only relevent in text-fragment mode\n public textFragment: TextFragment | null = null; // The single Text Fragment in text-fragment mode\n\n public get artefact() {\n return this.$state.artefacts.current!;\n }\n public get params(): ArtefactEditorParams {\n return this.$state.artefactEditor.params || new ArtefactEditorParams();\n }\n\n public get visibleRois() {\n return this.artefact.rois;\n }\n\n public get artefactEditorState() {\n return this.$state.artefactEditor;\n }\n public get textFragmentEditorState() {\n return this.$state.textFragmentEditor;\n }\n\n public get selectedSignInterpretations(): SignInterpretation[] {\n return this.textFragmentEditorState.selectedSignInterpretations;\n }\n\n public get selectedInterpretationRoi(): InterpretationRoi | null {\n return this.artefactEditorState.selectedInterpretationRoi;\n }\n\n public async saveEntities(\n ops: ArtefactEditorOperation[]\n ): Promise {\n const as = new ArtefactService();\n\n this.saving = true;\n try {\n await this.saveRotation();\n await this.saveROIs('deleted');\n await this.saveSignInterpretations(\n ops.filter(\n (op) => op.type === 'sign'\n ) as SignInterpretationEditOperation[]\n );\n await this.saveROIs('created');\n\n await this.saveAttributes(\n ops.filter(\n (op) => op.type === 'attr'\n ) as TextFragmentAttributeOperation[]\n );\n await this.saveCommentaries(\n ops.filter(\n (op) => op.type === 'commentary'\n ) as SignInterpretationCommentOperation[]\n );\n } catch (e) {\n console.error(\"Can't save arterfacts to server\", e);\n return false;\n }\n this.saving = false;\n\n return true;\n }\n public openCopyToEdtion() {\n this.$root.$bvModal.show('copy-to-edition-modal');\n }\n\n public openReportMask() {\n this.$state.misc.reportIssueData = {\n 'title': `Problem with mask of artefact ${this.artefactId} in edition ${this.edition.name} (${this.edition.id})`,\n 'description': '',\n };\n this.$root.$emit('bv::show::modal', 'ReportProblemModal');\n }\n\n public onNewPolygon(poly: Polygon) {\n if (!this.selectedSignInterpretations.length) {\n console.error(\"Can't add ROI with no selected sign\");\n return;\n }\n\n const bbox = poly.getBoundingBox();\n const normalized = Polygon.offset(poly, -bbox.x, -bbox.y);\n const roi = InterpretationRoi.new(\n this.artefact,\n this.textFragmentEditorState.singleSelectedSi!,\n normalized,\n bbox\n );\n\n const op: ArtefactROIOperation = new ArtefactROIOperation('draw', roi);\n op.redo(true);\n this.$state.artefactEditor.selectRoi(roi);\n this.statusTextFragment(roi);\n\n this.onNewOperation(op);\n if (this.autoMode) {\n // Find the next sign interpretation with a character - that can be mapped.\n this.playSound('/qumran_hum.mp3');\n setTimeout(this.nextSign, 1500);\n }\n }\n\n public placeRoi(roi: InterpretationRoi) {\n let newRoi = this.$state.interpretationRois.get(roi.id);\n if (!newRoi) {\n newRoi = roi;\n this.$state.interpretationRois.put(newRoi);\n // const roiDTO: SetInterpretationRoiDTO = {\n // artefactId: roi.artefactId,\n // shape: roi.shape.wkt,\n // translate: roi.position,\n // stanceRotation: roi.rotation,\n // exceptional: roi.exceptional,\n // valuesSet: roi.valuesSet,\n // signInterpretationId: roi.signInterpretationId\n // }\n // newRoi = new InterpretationRoi(roiDTO);\n }\n // For now the status 'update' doesn't do the save, we put 'new' to save it\n newRoi.status = 'new';\n const si = this.$state.signInterpretations.get(\n roi.signInterpretationId!\n );\n if (si) {\n si.rois.push(newRoi);\n }\n this.visibleRois.push(newRoi);\n this.$state.artefactEditor.selectRoi(newRoi);\n this.statusTextFragment(newRoi);\n\n return newRoi;\n }\n\n public removeRoi(roi: InterpretationRoi) {\n this.statusTextFragment(roi);\n\n this.artefactEditorState.selectRoi(null);\n this.textFragmentEditorState.selectedSignInterpretations = [];\n }\n\n protected async created() {\n await this.$state.prepare.edition(\n parseInt(this.$route.params.editionId)\n );\n this.$state.eventBus.on(\n 'change-artefact-rotation',\n (angle: number) => (this.params.rotationAngle = angle)\n );\n this.$state.eventBus.on('remove-roi', this.removeRoi);\n this.$state.eventBus.on('new-operation', this.onNewOperation);\n this.$state.eventBus.on(\n 'new-bulk-operations',\n this.onNewBulkOperations\n );\n }\n\n protected destroyed() {\n this.$state.eventBus.off('change-artefact-rotation');\n this.$state.eventBus.off('remove-roi', this.removeRoi);\n this.$state.eventBus.off('new-operation', this.onNewOperation);\n this.$state.eventBus.off(\n 'new-bulk-operations',\n this.onNewBulkOperations\n );\n\n this.$state.operationsManager = null;\n }\n\n protected async mounted() {\n this.waiting = true;\n // verifier url\n this.editionId = parseInt(this.$route.params.editionId);\n if (this.$route.params.artefactId) {\n this.artefactId = parseInt(this.$route.params.artefactId);\n this.editorMode = 'artefact';\n }\n if (this.$route.params.textFragmentId) {\n this.textFragmentId = parseInt(this.$route.params.textFragmentId);\n this.editorMode = 'text-fragment';\n\n // Note that artefactId and textFragmentId can't be both specified, because there is no Route that has both.\n // In case the routes change and suddenly allow this, text-fragment takes precedence.\n }\n\n if (this.artefactMode) {\n await this.prepareArtefact(this.artefactId);\n await Promise.all(\n this.artefact.textFragments.map(\n (tf: ArtefactTextFragmentData) =>\n this.$state.prepare.textFragment(\n this.artefact.editionId,\n tf.id\n )\n )\n );\n } else if (this.textFragmentMode) {\n await this.$state.prepare.textFragment(\n this.editionId,\n this.textFragmentId\n );\n this.textFragment =\n this.$state.textFragments.get(this.textFragmentId) || null;\n\n await this.selectArtefact(this.artefacts[0].id);\n }\n\n this.waiting = false;\n this.$nextTick(() => {\n this.$nextTick(() => {\n this.setFirstZoom();\n });\n });\n this.$state.operationsManager = this.operationsManager;\n this.$state.textFragmentEditor.textEditingMode = 'artefact';\n }\n\n public get edition(): EditionInfo {\n return this.$state.editions.current!;\n }\n\n public get artefacts(): Artefact[] {\n return this.$state.artefacts.items || [];\n }\n\n private get masterImage(): IIIFImage {\n return this.imageStack!.master;\n }\n public get zoomLevel(): number {\n return this.params.zoom;\n }\n public get readOnly(): boolean {\n return this.edition.permission.readOnly;\n }\n // On computer screen - Active means closed, for example sidebar active means the sidebar is closed.\n // On tablet screen - Active means opened.\n\n public get imageWidth(): number {\n if (this.artefact?.isVirtual) {\n return this.boundingBox.width * 1.5;\n }\n return this.masterImage.width;\n }\n\n public get imageHeight(): number {\n if (this.artefact?.isVirtual) {\n return this.boundingBox.height * 1.5;\n }\n return this.masterImage.height;\n }\n\n public get actualWidth(): number {\n return this.boundingBox.width * this.zoomLevel;\n }\n\n public get actualHeight(): number {\n return this.boundingBox.height * this.zoomLevel;\n }\n\n public get actualBoundingBox(): string {\n return (\n `${this.boundingBox.x * this.zoomLevel} ${\n this.boundingBox.y * this.zoomLevel\n } ` + `${this.actualWidth} ${this.actualHeight}`\n );\n }\n\n public get isDrawingEnabled() {\n return (\n !!this.textFragmentEditorState.singleSelectedSi &&\n !this.textFragmentEditorState.singleSelectedSi.isReconstructed\n );\n }\n\n public get isDeleteEnabled() {\n return !!this.selectedInterpretationRoi;\n }\n\n public get rotationAngle(): number {\n return this.params.rotationAngle;\n }\n\n public async selectArtefact(artefactId: number) {\n await this.prepareArtefact(artefactId);\n }\n\n private async prepareArtefact(artefactId: number) {\n await this.$state.prepare.artefact(this.editionId, artefactId);\n\n if (!this.artefact?.isVirtual) {\n const imagedObject = this.$state.imagedObjects.find(\n this.artefact.imagedObjectId\n );\n if (!imagedObject) {\n throw new Error(\n `Can't find imaged object ${this.artefact.imagedObjectId} belonging to artefact ${this.artefact.id}`\n );\n }\n this.imageStack =\n this.artefact.side === 'recto'\n ? imagedObject.recto\n : imagedObject.verso;\n if (!this.imageStack) {\n throw new Error(\n `ImagedObject ${this.artefact.imagedObjectId} doesn't contain the ` +\n `${this.artefact.side} side even though artefact ${this.artefact.id} references it`\n );\n }\n\n // Prepare the image manifests of all images\n const promises = this.imageStack.images.map((img) =>\n this.$state.prepare.imageManifest(img)\n );\n await Promise.all(promises);\n }\n\n this.params.rotationAngle = this.artefact.placement.rotate || 0;\n this.fillImageSettings();\n this.calculateBoundingBox();\n }\n\n private statusTextFragment(roi: InterpretationRoi) {\n const si = this.$state.signInterpretations.get(\n roi.signInterpretationId!\n );\n if (si) {\n const tfId = si.sign.line.textFragment.textFragmentId;\n const visibleSIs = this.visibleRois.map((r) =>\n this.$state.signInterpretations.get(r.signInterpretationId!)\n );\n const visiblesTf = visibleSIs.map(\n (s) => s!.sign.line.textFragment.textFragmentId\n );\n\n const anyRoiOfSelectedTf = visiblesTf.some((tf) => tf === tfId);\n const tfToMove = this.artefact.textFragments.find(\n (tf) => tf.id === tfId\n );\n // if any ROI found in current text fragment, put tf.certain = false\n if (!anyRoiOfSelectedTf && tfToMove) {\n this.textFragmentEditorState.removeTextFragementFromArtefact(\n si\n );\n // if new ROI and new text fragment, add text fragment to artefact\n } else if (!tfToMove && anyRoiOfSelectedTf) {\n this.textFragmentEditorState.addTextFragementToArtefact(si);\n }\n }\n }\n private setFirstZoom() {\n const infoBox = this.$refs.infoBox as HTMLDivElement;\n const height = infoBox.clientHeight;\n const width = infoBox.clientWidth;\n this.params.zoom = Math.min(\n height / this.boundingBox.height,\n width / this.boundingBox.width\n );\n }\n\n public onDeleteRoi() {\n const roi = this.selectedInterpretationRoi;\n const si = this.selectedSignInterpretations;\n if (!roi || !si) {\n console.error(\"Can't delete an ROI if nothing is selected\");\n return;\n }\n const op: ArtefactROIOperation = new ArtefactROIOperation(\n 'erase',\n roi.clone()\n );\n op.redo(true);\n this.onNewOperation(op);\n }\n\n public onNewZoom(event: ZoomEventArgs) {\n this.params.zoom = event.zoom;\n }\n public onNewRotate(event: RotateEventArgs) {\n this.params.rotationAngle = event.rotate;\n }\n\n public get transform(): string {\n const zoom = `scale(${this.zoomLevel})`;\n const rotate = `rotate(${this.rotationAngle} ${this.boundingBoxCenter.x} ${this.boundingBoxCenter.y})`;\n\n return `${zoom} ${rotate}`;\n }\n\n public get selectedLine(): Line | null {\n if (!this.textFragmentEditorState.singleSelectedSi) {\n return null;\n }\n\n return this.textFragmentEditorState.singleSelectedSi!.sign.line;\n }\n\n private nextSign() {\n if (this.textFragmentEditorState.singleSelectedSi) {\n let newIndex =\n this.textFragmentEditorState.singleSelectedSi!.sign\n .indexInLine + 1;\n while (newIndex < this.selectedLine!.signs.length) {\n const newSI =\n this.selectedLine!.signs[newIndex].signInterpretations[0];\n if (newSI.character && !newSI.isReconstructed) {\n this.textFragmentEditorState.selectSign(newSI);\n break;\n }\n newIndex++;\n }\n }\n }\n\n private playSound(sound: string) {\n if (sound) {\n const audio = new Audio(sound);\n audio.play();\n }\n }\n\n public onParamsChanged(evt: ArtefactEditorParamsChangedArgs) {\n if (evt.property === 'rotationAngle') {\n const op: ArtefactRotateOperation = new ArtefactRotateOperation(\n this.artefact.placement.rotate,\n evt.value\n );\n this.onNewOperation(op);\n }\n }\n\n public onAuto() {\n if (\n this.textFragmentEditorState.selectedSignInterpretations.length >\n 1 &&\n this.autoMode\n ) {\n this.$toasted.show(this.$tc('toasts.artefactsAutoModeError'), {\n type: 'info',\n position: 'top-right',\n duration: 7000,\n });\n this.autoMode = false;\n } else {\n this.autoMode = !this.autoMode;\n }\n }\n\n public onHighlightComment(checked: boolean) {\n this.$state.artefactEditor.highlightCommentMode = checked;\n }\n\n private fillImageSettings() {\n this.params.imageSettings = {};\n if (this.artefact?.isVirtual) {\n return;\n }\n\n if (!this.imageStack) {\n throw new Error(\n `No image stack for artefact ${this.artefact.id} in artefact-editor`\n );\n }\n for (const imageType of this.imageStack.availableImageTypes) {\n const image = this.imageStack.getImage(imageType);\n if (image) {\n const isMaster = this.imageStack.master.type === imageType;\n const imageSetting = {\n image,\n type: imageType,\n visible: isMaster,\n opacity: 1,\n normalizedOpacity: 1,\n };\n // Make sure this object is tracked by Vue\n this.$set(this.params.imageSettings, imageType, imageSetting);\n }\n }\n normalizeOpacity(this.params.imageSettings);\n }\n\n private calculateBoundingBox() {\n // We want to support rotation without moving or scroll the artefact. This requires a little\n // math. We start with the artefact's actual bounding box, which is a rectangle. We need to calculate the\n // bounding box that will contain all the possible rotations of the artefact's original bounding box.\n // This is pretty easy to do - take the diagonal of the original bounding box, and build a square with a\n // side of that size. The square's center should be the center of the original bounding box.\n //\n // We ask the server to cut the image at the square, and treat everything as square. That way when we\n // rotate everything is still visible.\n const bb = this.artefact.mask.getBoundingBox();\n const diag = Math.sqrt(bb.height * bb.height + bb.width * bb.width);\n const center = (this.boundingBoxCenter = {\n x: bb.x + bb.width / 2,\n y: bb.y + bb.height / 2,\n } as Position);\n\n this.boundingBox = {\n x: center.x - diag / 2,\n y: center.y - diag / 2,\n width: diag,\n height: diag,\n };\n }\n\n public onRoiClicked(roi: InterpretationRoi) {\n this.artefactEditorState.selectRoi(roi);\n this.textFragmentEditorState.selectedSignInterpretations = [];\n\n if (!roi.signInterpretationId) {\n this.textFragmentEditorState.selectedSignInterpretations = [];\n } else {\n const si =\n this.$state.signInterpretations.get(roi.signInterpretationId) ||\n null;\n this.textFragmentEditorState.selectSign(si);\n }\n }\n\n public onModeClick(newMode: ActionMode) {\n this.actionMode = newMode;\n }\n\n private async saveRotation() {\n const rotation = (this.rotationAngle % 360) + (360 % 360);\n if (rotation === this.artefact.placement.rotate) {\n return false;\n }\n\n this.artefact.placement.rotate =\n (this.rotationAngle % 360) + (360 % 360);\n await this.artefactService.changeArtefact(\n this.artefact.editionId,\n this.artefact\n );\n return true;\n }\n\n private async saveROIs(mode: 'created' | 'deleted') {\n const selected = this.textFragmentEditorState.singleSelectedSi;\n\n const updated = await this.textService.updateArtefactROIs(\n this.artefact,\n mode\n );\n // if (selected) {\n // // Make sure we select again, as the ROIs might have changed\n // this.artefactEditorState.onSignInterpretationClicked(selected, false);\n // }\n\n return updated > 0;\n }\n\n private async saveSignInterpretations(\n ops: SignInterpretationEditOperation[]\n ) {\n for (const op of ops) {\n switch (op.signOpType) {\n case 'create':\n const createOp = op as CreateSignInterpretationOperation;\n if (op.undone) {\n await this.signInterpretationService.deleteSignInterpretation(\n this.$state.editions.current!,\n createOp.signInterpretation,\n true\n );\n } else {\n await this.signInterpretationService.createSignInterpretation(\n this.$state.editions.current!,\n createOp.signInterpretation\n );\n }\n break;\n\n case 'delete':\n const deleteOp = op as DeleteSignInterpretationOperation;\n if (op.undone) {\n const si = deleteOp.signInterpretation;\n await this.signInterpretationService.createSignInterpretation(\n this.$state.editions.current!,\n si\n );\n deleteOp.signInterpretationId = si.signInterpretationId; // The id has changed to a negative number after the deletion\n } else {\n await this.signInterpretationService.deleteSignInterpretation(\n this.$state.editions.current!,\n deleteOp.signInterpretation\n );\n }\n break;\n\n case 'update':\n const updateOp = op as UpdateSignInterperationOperation;\n await this.signInterpretationService.updateSignInterpretation(\n this.$state.editions.current!,\n op.signInterpretation\n );\n break;\n }\n }\n }\n\n private async saveAttributes(ops: TextFragmentAttributeOperation[]) {\n for (const op of ops) {\n const opType = op.attributeOperationType;\n const si = this.$state.signInterpretations.get(\n op.signInterpretationId\n );\n if (!si) {\n console.warn(\n \"Can't save attributes of non existing sign interpretation\"\n );\n continue;\n }\n const existingIndex = si.findAttributeIndex(op.attributeValueId);\n\n // Determine the actual operation that needs to be performed on the server.\n // If the original operation is an update, this is also an update.\n // However, if the original operation is create/delete, which can be undone or redone, we delete\n // the attribute if it is not in the state, or recreate it if it is in the state\n let actualOpType = 'update';\n\n switch (opType) {\n case 'create':\n actualOpType = existingIndex === -1 ? 'delete' : 'create';\n break;\n case 'delete':\n actualOpType = existingIndex === -1 ? 'delete' : 'create';\n break;\n case 'update':\n actualOpType = 'update';\n break;\n }\n\n switch (actualOpType) {\n case 'create':\n await this.signInterpretationService.createAttribute(\n this.edition!,\n si,\n si.attributes[existingIndex]\n );\n break;\n case 'update':\n if (!op.prev || !op.next) {\n console.error(\n 'Found an update operation without both next and prev',\n op\n );\n throw new Error(\n 'Found an update operation without both next and prev'\n );\n }\n\n if (op.prev.attributeValueId === op.next.attributeValueId) {\n // This is an update operation of a comment, we can use the update API\n await this.signInterpretationService.updateAttribute(\n this.edition!,\n si,\n op.next.attributeValueId,\n si.attributes[existingIndex]\n );\n return;\n }\n\n const prevIndex = si.findAttributeIndex(\n op.prev.attributeValueId\n );\n const nextIndex = si.findAttributeIndex(\n op.next.attributeValueId\n );\n\n if (prevIndex !== -1 && nextIndex !== -1) {\n console.error(\n 'In an attribute value update, we have both prev and next in the current attributes',\n op\n );\n throw new Error(\n 'In an attribute value update, we have both prev and next in the current attributes'\n );\n }\n\n // See if we delete prev and create next or vice versa\n const prevIsCurrent = prevIndex !== -1;\n const toDeleteAttributeValueId = prevIsCurrent\n ? op.next.attributeValueId\n : op.prev.attributeValueId;\n const toCreateAttribute = prevIsCurrent ? op.prev : op.next;\n\n await this.signInterpretationService.deleteAttribute(\n this.edition!,\n si,\n toDeleteAttributeValueId\n );\n await this.signInterpretationService.createAttribute(\n this.edition!,\n si,\n toCreateAttribute\n );\n break;\n case 'delete':\n await this.signInterpretationService.deleteAttribute(\n this.edition!,\n si,\n op.attributeValueId\n );\n break;\n }\n }\n }\n\n private async saveCommentaries(ops: SignInterpretationCommentOperation[]) {\n for (const op of ops) {\n const si = this.$state.signInterpretations.get(\n op.signInterpretationId\n );\n if (!si) {\n console.warn(\n \"Can't save commentary for non existing sign interpretation id \",\n op.signInterpretationId\n );\n continue;\n }\n await this.signInterpretationService.updateCommentary(\n this.$state.editions.current!,\n si\n );\n }\n }\n\n private showMessage(msg: string, type: string = 'info') {\n this.$toasted.show(this.$tc(msg), {\n type,\n position: 'top-right',\n duration: 7000,\n });\n }\n\n private onNewOperation(op: ArtefactEditorOperation) {\n this.operationsManager.addOperation(op);\n }\n\n private onNewBulkOperations(ops: ArtefactEditorOperation[]) {\n this.operationsManager.addBulkOperations(ops);\n }\n}\n","import { Polygon } from '@/utils/Polygons';\r\nimport { ImageSetting } from '@/components/image-settings/types';\r\nimport { BaseEditorParams } from '@/models/editor-params';\r\nimport { TranslateResult } from 'vue-i18n';\r\n\r\nexport enum DrawingMode {\r\n DRAW, ERASE\r\n}\r\n\r\nexport enum EditMode {\r\n DRAWING, ADJUSTING, NONE\r\n}\r\n\r\nexport interface ModeButtonInfo {\r\n icon: string;\r\n val: string;\r\n title: TranslateResult;\r\n}\r\n\r\nexport class ImagedObjectEditorParams implements BaseEditorParams {\r\n public imageSettings = {} as ImageSetting;\r\n public zoom: number = 0.1; // Zoom between 0 and 1\r\n public background = true;\r\n public highLight = true;\r\n public drawingMode = DrawingMode.DRAW;\r\n public rotationAngle = 0;\r\n}\r\n\r\nexport interface EditorParamsChangedArgs {\r\n property: string;\r\n value: any;\r\n params: ImagedObjectEditorParams;\r\n}\r\n\r\nexport interface MaskChangedEventArgs {\r\n mask: Polygon;\r\n drawingMode: DrawingMode;\r\n}\r\n\r\nexport interface MaskChangeOperation {\r\n // Previous values for the undo\r\n prevMask: Polygon;\r\n\r\n // New values for the redo\r\n newMask: Polygon;\r\n}\r\n\r\nexport class ArtefactEditingData {\r\n public undoList = [] as MaskChangeOperation[];\r\n public redoList = [] as MaskChangeOperation[];\r\n public dirty = false;\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./artefact-editor.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./artefact-editor.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./artefact-editor.vue?vue&type=template&id=3740f63a&scoped=true&\"\nimport script from \"./artefact-editor.vue?vue&type=script&lang=ts&\"\nexport * from \"./artefact-editor.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./artefact-editor.vue?vue&type=style&index=0&id=3740f63a&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3740f63a\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.waiting)?_c('div',{staticClass:\"col\"},[_c('Waiting')],1):_vm._e(),(!_vm.waiting && _vm.imagedObject)?_c('div',{ref:\"imagedObjectGrid\",attrs:{\"id\":\"imaged-object-grid\"}},[_c('imaged-object-editor-toolbar',{attrs:{\"id\":\"imaged-object-toolbar\",\"imagedObject\":_vm.imagedObject,\"artefacts\":_vm.visibleArtefacts,\"artefact\":_vm.artefact,\"artefactId\":_vm.artefactId,\"side\":_vm.side,\"status-indicator\":_vm.operationsManager,\"modes\":_vm.editList},on:{\"onSideArtefactChanged\":function($event){return _vm.sideArtefactChanged($event)}}},[_c('toolbox',[(_vm.canEdit)?_c('b-btn',{directives:[{name:\"b-modal\",rawName:\"v-b-modal.modal\",value:('newModal'),expression:\"'newModal'\",modifiers:{\"modal\":true}}],staticClass:\"btn\",attrs:{\"variant\":\"outline-secondary\"}},[_vm._v(_vm._s(_vm.$t('misc.new')))]):_vm._e()],1)],1),(_vm.imagedObject)?_c('div',{attrs:{\"id\":\"imaged-object-title\"}},[_vm._v(\" \"+_vm._s(_vm.imagedObject.id)+\" \"),_c('edition-icons',{attrs:{\"edition\":_vm.edition,\"show-text\":true}})],1):_vm._e(),_c('div',{attrs:{\"id\":\"imaged-object-container\"}},[(_vm.masterImage)?_c('zoomer',{staticClass:\"img-obj-container\",attrs:{\"zoom\":_vm.zoomLevel},on:{\"new-zoom\":function($event){return _vm.onNewZoom($event)}}},[_c('svg',{staticClass:\"overlay\",attrs:{\"height\":_vm.actualHeight,\"width\":_vm.actualWidth,\"viewBox\":(\"0 0 \" + _vm.actualWidth + \" \" + _vm.actualHeight)}},[(_vm.artefact)?_c('g',{attrs:{\"transform\":_vm.transform,\"id\":\"transform-root\"}},[_c('image-layer',{attrs:{\"width\":_vm.imageWidth,\"height\":_vm.imageHeight,\"params\":_vm.params,\"editable\":_vm.canEdit,\"clipping-mask\":_vm.artefact.mask}}),_vm._l((_vm.visibleArtefacts),function(art){return _c('artefact-layer',{key:art.id,attrs:{\"selected\":art.id === _vm.artefact.id,\"artefact\":art,\"color\":_vm.removeColor ? 'none' : _vm.getArtefactColor(art)}})}),(_vm.canEdit && _vm.artefact)?_c('boundary-drawer',{attrs:{\"color\":_vm.isErasing\n ? 'black'\n : _vm.getArtefactColor(_vm.artefact),\"transform-root-id\":\"transform-root\"},on:{\"new-polygon\":function($event){return _vm.onNewPolygon($event)}}}):_vm._e()],2):_vm._e()])]):_vm._e()],1),(_vm.displayResizeBar)?_c('resize-bar',{attrs:{\"gridElement\":_vm.$refs.imagedObjectGrid,\"storageKey\":\"image-object-left-pane-width\"}}):_vm._e(),_c('div',{attrs:{\"id\":\"imaged-object-artefacts\"}},_vm._l((_vm.visibleArtefacts),function(art){return _c('div',{key:art.id,class:{\n selectedRow: art.id === _vm.artefact.id,\n }},[_c('b-row',{staticClass:\"py-2\"},[_c('b-col',{staticClass:\"col-2 col-xl-3 col-lg-2 pl-4 pt-1\"},[(_vm.renameInputActive !== art)?_c('span',{staticClass:\"rename-art\",class:{\n selected: art.id === _vm.artefact.id,\n },style:({\n color: _vm.getArtefactColor(art),\n backgroundColor: _vm.getArtefactColor(art),\n }),on:{\"click\":function($event){return _vm.onArtefactChanged(art)}}},[_vm._v(\"   \")]):_vm._e()]),_c('b-col',{staticClass:\"col-5 col-xl-4 col-lg-4 col-md-6\"},[(_vm.renameInputActive !== art)?_c('span',{staticClass:\"select-art-name\",class:{\n selected: art.id === _vm.artefact.id,\n },on:{\"click\":function($event){return _vm.onArtefactChanged(art)}}},[_vm._v(_vm._s(art.name))]):_vm._e()]),_c('b-col',{staticClass:\"col-4 col-xl-5 col-lg-5 col-md-4 mr-0 px-0\"},[(_vm.canEdit)?_c('div',[(_vm.renameInputActive !== art)?_c('b-button',{staticClass:\"btn btn-sm mb-1\",attrs:{\"id\":\"rename\"},on:{\"click\":function($event){return _vm.inputRenameChanged(art)}}},[_vm._v(\"Rename\")]):_vm._e(),(_vm.renameInputActive === art)?_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(art.name),expression:\"art.name\"}],domProps:{\"value\":(art.name)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(art, \"name\", $event.target.value)}}}):_vm._e(),(\n !_vm.renaming && _vm.renameInputActive === art\n )?_c('b-button',{staticClass:\"btn btn-sm\",attrs:{\"disabled\":!art.name},on:{\"click\":_vm.onRename}},[_vm._v(\"Rename\")]):_vm._e(),(_vm.renameInputActive === art && _vm.renaming)?_c('b-button',{staticClass:\"disable btn btn-sm\",attrs:{\"disabled\":\"\"}},[_vm._v(\" Renaming... \"),_c('font-awesome-icon',{attrs:{\"icon\":\"spinner\",\"spin\":\"\"}})],1):_vm._e(),_c('b-button',{staticClass:\"btn btn-sm ml-2 mb-1\",on:{\"click\":function($event){return _vm.onDeleteArtefact(art)}}},[_vm._v(\"Delete\")])],1):_vm._e()])],1)],1)}),0)],1):_vm._e(),_c('b-modal',{ref:\"newArtRef\",attrs:{\"id\":\"newModal\",\"title\":_vm.$t('home.newArtefact'),\"ok-title\":_vm.$t('misc.create'),\"cancel-title\":_vm.$t('misc.cancel'),\"ok-disabled\":_vm.waiting || !_vm.canCreate,\"cancel-disabled\":_vm.waiting},on:{\"shown\":_vm.newModalShown,\"ok\":_vm.newArtefact}},[_c('form',{on:{\"submit\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.newArtefact.apply(null, arguments)}}},[_c('b-form-group',{attrs:{\"label\":_vm.$t('home.newArtefactName'),\"label-for\":\"newArtefactName\"}},[_c('b-form-input',{ref:\"newArtefactName\",attrs:{\"id\":\"newName\",\"type\":\"text\",\"required\":\"\",\"placeholder\":_vm.$t('home.newArtefactName')},on:{\"keyup\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.newArtefact.apply(null, arguments)}},model:{value:(_vm.newArtefactName),callback:function ($$v) {_vm.newArtefactName=$$v},expression:\"newArtefactName\"}})],1),(_vm.waiting)?_c('p',[_vm._v(\" \"+_vm._s(_vm.$t('home.creatingNewArtefact'))+\"... \"),_c('font-awesome-icon',{attrs:{\"icon\":\"spinner\",\"spin\":\"\"}})],1):_vm._e(),(_vm.errorMessage)?_c('p',{staticClass:\"text-danger\"},[_vm._v(\" \"+_vm._s(_vm.errorMessage)+\" \")]):_vm._e()],1)])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('g',[_c('defs',[_c('path',{attrs:{\"id\":\"Full-clip-path\",\"d\":_vm.fullImageMask}}),_vm._v(\" \"),_c('clipPath',{attrs:{\"id\":\"Full-clipping-outline\"}},[_c('use',{attrs:{\"stroke\":\"none\",\"fill\":\"black\",\"fill-rule\":\"evenodd\",\"xlink:href\":\"#Full-clip-path\"}})]),(_vm.clippingMask)?_c('path',{attrs:{\"id\":\"Clip-path\",\"d\":this.clippingMask.svg}}):_vm._e(),_c('clipPath',{attrs:{\"id\":\"Clipping-outline\"}},[_c('use',{attrs:{\"stroke\":\"none\",\"fill\":\"black\",\"fill-rule\":\"evenodd\",\"xlink:href\":\"#Clip-path\"}})])]),_c('g',{attrs:{\"pointer-events\":\"none\",\"clip-path\":_vm.params.background ? 'url(#Full-clipping-outline)' : 'url(#Clipping-outline)'}},_vm._l((_vm.visibleImageSettings),function(imageSetting){return _c('iiif-image',{key:'svg-image-' + imageSetting.image.url,staticClass:\"clippedImg\",attrs:{\"draggable\":\"false\",\"image\":imageSetting.image,\"scaleFactor\":_vm.params.zoom,\"opacity\":imageSetting.normalizedOpacity}})}),1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Emit, Vue } from 'vue-property-decorator';\r\n\r\nimport { ImagedObjectEditorParams } from './types';\r\nimport { Polygon } from '@/utils/Polygons';\r\nimport { SingleImageSetting } from '../../components/image-settings/types';\r\nimport IIIFImageComponent from '@/components/images/IIIFImage.vue';\r\n\r\n@Component({\r\nname: 'image-layer',\r\n components: {\r\n 'iiif-image': IIIFImageComponent,\r\n }\r\n})\r\n\r\nexport default class ImageLayer extends Vue {\r\n\r\n // props\r\n @Prop() protected width!: number;\r\n @Prop() protected height!: number;\r\n @Prop() protected params!: ImagedObjectEditorParams;\r\n // Object as () => ImagedObjectEditorParams;\r\n @Prop() protected editable!: boolean;\r\n @Prop() protected clippingMask!: Polygon;\r\n // Object as () => Polygon;\r\n\r\n // computed\r\n\r\n protected get fullImageMask(): string {\r\n return `M0 0L${this.width} 0L${this.width} ${this.height}L0 ${this.height}`;\r\n }\r\n\r\n protected get imageSettings(): SingleImageSetting[] {\r\n const values = Object.keys(this.params.imageSettings).map((key) => this.params.imageSettings[key]);\r\n return values;\r\n }\r\n\r\n protected get visibleImageSettings(): SingleImageSetting[] {\r\n return this.imageSettings.filter((image) => image.visible);\r\n }\r\n\r\n}\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./image-layer.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./image-layer.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./image-layer.vue?vue&type=template&id=8da349e4&scoped=true&\"\nimport script from \"./image-layer.vue?vue&type=script&lang=ts&\"\nexport * from \"./image-layer.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./image-layer.vue?vue&type=style&index=0&id=8da349e4&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"8da349e4\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('g',{staticClass:\"drawer\"},[_c('path',{class:{ selected: _vm.selected, editable: _vm.editable },style:(_vm.additionalStyle),attrs:{\"d\":_vm.polygon.svg,\"vector-effect\":\"non-scaling-stroke\"}})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Vue } from 'vue-property-decorator';\r\nimport { Artefact } from '@/models/artefact';\r\n\r\n@Component({\r\n name: 'artefact-layer',\r\n})\r\nexport default class ArtefactLayer extends Vue {\r\n @Prop() public readonly artefact!: Artefact;\r\n @Prop() public readonly color!: string;\r\n @Prop() public readonly editable!: boolean;\r\n @Prop() public readonly selected!: boolean;\r\n\r\n private get additionalStyle() {\r\n return `stroke: ${this.color}; fill: ${this.color}`;\r\n }\r\n\r\n private get polygon() {\r\n return this.artefact.mask;\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./artefact-layer.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./artefact-layer.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./artefact-layer.vue?vue&type=template&id=f8e8fa58&scoped=true&\"\nimport script from \"./artefact-layer.vue?vue&type=script&lang=ts&\"\nexport * from \"./artefact-layer.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./artefact-layer.vue?vue&type=style&index=0&id=f8e8fa58&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"f8e8fa58\",\n null\n \n)\n\nexport default component.exports","import { Operation } from '@/utils/operations-manager';\r\nimport { Artefact } from '@/models/artefact';\r\nimport { StateManager } from '@/state';\r\nimport { Polygon } from '@/utils/Polygons';\r\n\r\nfunction state() {\r\n return StateManager.instance;\r\n}\r\n\r\nexport type ImagedObjectEditorOperationType = 'draw' | 'erase';\r\n\r\nexport class ImagedObjectEditorOperation extends Operation {\r\n\r\n public prev: Polygon;\r\n public next: Polygon;\r\n\r\n public constructor(\r\n public artefactId: number,\r\n public type: ImagedObjectEditorOperationType,\r\n prev: Polygon,\r\n next: Polygon\r\n ) {\r\n super();\r\n this.prev = new Polygon(prev.svg);\r\n this.next = new Polygon(next.svg);\r\n }\r\n\r\n protected get artefact(): Artefact {\r\n const artefact = state().imagedObjects.current!.artefacts.find((art: Artefact) => art.id === this.artefactId);\r\n if (!artefact) {\r\n console.error('Couldn\\'t find artefact with id: ' + this.artefactId);\r\n throw new Error('Couldn\\'t find artefact with id: ' + this.artefactId);\r\n }\r\n return artefact;\r\n }\r\n public getId(): number {\r\n return this.artefact.id;\r\n }\r\n public replaceEntityId(newId: number) {\r\n this.artefact.id = newId;\r\n }\r\n\r\n public uniteWith(op: ImagedObjectEditorOperation): ImagedObjectEditorOperation | undefined {\r\n return undefined;\r\n }\r\n\r\n protected internalUndo(): void {\r\n this.artefact.mask = new Polygon(this.prev.svg);\r\n }\r\n\r\n protected internalRedo(): void {\r\n this.artefact.mask = new Polygon(this.next.svg);\r\n }\r\n}\r\n\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"artefact-toolbar\"}},[_c('toolbar',{attrs:{\"no-gutters\":\"\"}},[_c('zoom-toolbox',{attrs:{\"delta\":\"0.05\"},on:{\"zoomChanged\":function($event){return _vm.onZoomChanged($event)}},model:{value:(_vm.params.zoom),callback:function ($$v) {_vm.$set(_vm.params, \"zoom\", $$v)},expression:\"params.zoom\"}}),_c('adjust-image-toolbox',{attrs:{\"imageStack\":_vm.imageStack,\"params\":_vm.params},on:{\"image-setting-changed\":function($event){return _vm.onImageSettingChanged($event)}}}),_c('rotation-toolbox',{attrs:{\"delta\":\"90\",\"enable-text\":false},on:{\"rotationAngleChanged\":function($event){return _vm.onRotationAngleChanged($event)}},model:{value:(_vm.params.rotationAngle),callback:function ($$v) {_vm.$set(_vm.params, \"rotationAngle\", $$v)},expression:\"params.rotationAngle\"}}),_c('toolbox',[_c('b-form-checkbox',{model:{value:(_vm.background),callback:function ($$v) {_vm.background=$$v},expression:\"background\"}},[_vm._v(\"Background\")]),_c('b-form-checkbox',{model:{value:(_vm.highLight),callback:function ($$v) {_vm.highLight=$$v},expression:\"highLight\"}},[_vm._v(\"HighLight\")])],1),_c('toolbox',{attrs:{\"subject\":\"Side\"}},[_c('b-dropdown',{attrs:{\"text\":_vm.sideFilter.displayName,\"variant\":\"outline-secondary\"}},_vm._l((_vm.sideOptions),function(filter){return _c('b-dropdown-item',{key:filter.displayName,on:{\"click\":function($event){return _vm.sideFilterChanged(filter)}}},[_vm._v(_vm._s(filter.displayName))])}),1)],1),_c('toolbox',{attrs:{\"subject\":\"Mode\"}},_vm._l((_vm.modes),function(mode){return _c('toolbar-icon-button',{key:mode.val,attrs:{\"pressed\":_vm.modeChosen(mode.val),\"title\":mode.title,\"show-text\":true,\"icon\":mode.icon},on:{\"click\":function($event){return _vm.editingModeChanged(mode.val)}}})}),1),_c('undo-redo-toolbox'),_vm._t(\"default\"),_c('copy-edition-toolbox')],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Vue } from 'vue-property-decorator';\r\nimport Waiting from '@/components/misc/Waiting.vue';\r\nimport ArtefactService from '@/services/artefact';\r\nimport SignInterpretationService from '@/services/sign-interpretation';\r\nimport ArtefactSideMenu from '@/views/artefact-editor/artefact-side-menu.vue';\r\nimport TextSide from '@/views/artefact-editor/text-side.vue';\r\nimport {\r\n ArtefactEditorParams,\r\n ArtefactEditorParamsChangedArgs,\r\n} from '@/views/artefact-editor/types';\r\nimport { IIIFImage, ImageStack } from '@/models/image';\r\nimport { Position, Side } from '@/models/misc';\r\nimport { ArtefactTextFragmentData } from '@/models/text';\r\n\r\nimport {\r\n ImageSetting,\r\n normalizeOpacity,\r\n} from '@/components/image-settings/types';\r\nimport { SignInterpretation, InterpretationRoi, Line } from '@/models/text';\r\nimport { Polygon } from '@/utils/Polygons';\r\nimport { ImagedObject } from '@/models/imaged-object';\r\nimport { BoundingBox, DropdownOption } from '@/utils/helpers';\r\nimport ImageSettingsComponent from '@/components/image-settings/ImageSettings.vue';\r\nimport ImagedObjectService from '@/services/imaged-object';\r\nimport { Artefact } from '@/models/artefact';\r\nimport { DrawingMode, EditorParamsChangedArgs, ModeButtonInfo } from './types';\r\nimport { ImagedObjectEditorParams } from '@/views/imaged-object-editor/types';\r\nimport { PropOptions } from 'vue';\r\nimport { ImagedObjectState } from '../../state/imaged-object';\r\nimport ZoomToolbox from '@/components/toolbars/zoom-toolbox.vue';\r\nimport RotationToolbox from '@/components/toolbars/rotation-toolbox.vue';\r\nimport Toolbar from '@/components/toolbars/toolbar.vue';\r\nimport Toolbox from '@/components/toolbars/toolbox.vue';\r\nimport ToolbarIconButton from '@/components/toolbars/toolbar-icon-button.vue';\r\nimport UndoRedoToolbox from '@/components/toolbars/undo-redo-toolbox.vue';\r\nimport AdjustImageToolbox from '@/components/toolbars/adjust-image-toolbox.vue';\r\nimport CopyEditionToolbox from '@/components/toolbars/copy-edition-toolbox.vue';\r\n\r\n\r\n\r\n@Component({\r\n name: 'artefcat-editor-toolbar',\r\n components: {\r\n 'image-settings': ImageSettingsComponent,\r\n 'zoom-toolbox': ZoomToolbox,\r\n 'rotation-toolbox': RotationToolbox,\r\n toolbar: Toolbar,\r\n toolbox: Toolbox,\r\n 'toolbar-icon-button': ToolbarIconButton,\r\n 'undo-redo-toolbox': UndoRedoToolbox,\r\n 'adjust-image-toolbox': AdjustImageToolbox,\r\n 'copy-edition-toolbox': CopyEditionToolbox\r\n },\r\n})\r\nexport default class ImagedObjectEditorToolbar extends Vue {\r\n private sideFilter: DropdownOption = {} as DropdownOption;\r\n\r\n private errorMessage: string = '';\r\n private imagedObjectService: ImagedObjectService =\r\n new ImagedObjectService();\r\n private artefactService: ArtefactService = new ArtefactService();\r\n private newArtefactName: string = '';\r\n private waiting: boolean = false;\r\n\r\n @Prop() private artefact!: Artefact;\r\n @Prop() private imagedObject!: ImagedObject;\r\n @Prop() private modes!: ModeButtonInfo[];\r\n\r\n @Prop({ type: Array, default: () => [] })\r\n private artefacts!: PropOptions;\r\n\r\n @Prop({\r\n type: String as () => Side,\r\n })\r\n private side!: Side;\r\n\r\n private get imageStack() {\r\n return this.imagedObject.getImageStack(\r\n (this.artefact && this.artefact.side) || this.side\r\n );\r\n }\r\n private get params(): ImagedObjectEditorParams {\r\n return this.imagedObjectState.params!;\r\n }\r\n public get imagedObjectState(): ImagedObjectState {\r\n return this.$state.imagedObject!;\r\n }\r\n public get editionId(): number {\r\n return parseInt(this.$route.params.editionId);\r\n }\r\n\r\n public get scrolled(): boolean {\r\n return true;\r\n }\r\n\r\n public get zoomImagedObject(): number {\r\n return this.params.zoom;\r\n }\r\n\r\n public set zoomImagedObject(val: number) {\r\n this.imagedObjectState.params!.zoom = parseFloat(val.toString());\r\n // this.notifyChange('zoomImagedObject', val);\r\n }\r\n\r\n private onZoomChanged(val: number) {\r\n this.params.zoom = val; //\r\n // this.imagedObjectState.params!.zoom = val ;\r\n }\r\n\r\n public onRotationAngleChanged(val: number) {\r\n this.params.rotationAngle = val;\r\n this.notifyChange('rotationAngle', this.params.rotationAngle);\r\n }\r\n\r\n public get readOnly(): boolean {\r\n return this.$state.editions.current!.permission.readOnly;\r\n }\r\n public get background(): boolean {\r\n return this.params.background;\r\n }\r\n public set background(val: boolean) {\r\n this.imagedObjectState.params!.background = val;\r\n // this.notifyChange('background', val);\r\n }\r\n\r\n public get highLight(): boolean {\r\n return this.params.highLight;\r\n }\r\n public set highLight(val: boolean) {\r\n this.imagedObjectState.params!.highLight = val;\r\n // this.notifyChange('highLight', val);\r\n }\r\n\r\n public get sideOptions(): DropdownOption[] {\r\n const options = [] as DropdownOption[];\r\n\r\n if (!this.imagedObject) {\r\n return [];\r\n }\r\n\r\n if (this.imagedObject.recto) {\r\n options.push({ displayName: 'Recto', name: 'recto' });\r\n }\r\n\r\n if (this.imagedObject.verso) {\r\n options.push({ displayName: 'Verso', name: 'verso' });\r\n }\r\n\r\n return options;\r\n }\r\n\r\n public sideFilterChanged(filter: DropdownOption) {\r\n this.sideFilter = filter;\r\n this.$emit('onSideArtefactChanged', filter);\r\n }\r\n\r\n public async mounted() {\r\n const index = this.sideOptions.findIndex((a) => a.name === this.side);\r\n if (index < 0) {\r\n throw new Error(\"Side has to be either 'recto' or 'verso'\");\r\n }\r\n this.sideFilter = this.sideOptions[index];\r\n }\r\n\r\n public notifyChange(paramName: string, paramValue: any) {\r\n const args = {\r\n property: paramName,\r\n value: paramValue,\r\n params: this.params,\r\n } as EditorParamsChangedArgs;\r\n this.$emit('paramsChanged', args);\r\n }\r\n\r\n public onImageSettingChanged(settings: ImageSetting) {\r\n this.notifyChange('imageSettings', this.params.imageSettings);\r\n }\r\n\r\n private editingModeChanged(val: any) {\r\n (this as any).params.drawingMode = DrawingMode[val];\r\n }\r\n\r\n private modeChosen(val: DrawingMode): boolean {\r\n return (\r\n DrawingMode[val].toString() === this.params.drawingMode.toString()\r\n );\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./imaged-object-editor-toolbar.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./imaged-object-editor-toolbar.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./imaged-object-editor-toolbar.vue?vue&type=template&id=37521224&scoped=true&\"\nimport script from \"./imaged-object-editor-toolbar.vue?vue&type=script&lang=ts&\"\nexport * from \"./imaged-object-editor-toolbar.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./imaged-object-editor-toolbar.vue?vue&type=style&index=0&id=37521224&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"37521224\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Vue } from 'vue-property-decorator';\r\nimport Waiting from '@/components/misc/Waiting.vue';\r\nimport ArtefactService from '@/services/artefact';\r\nimport {\r\n DrawingMode,\r\n EditorParamsChangedArgs,\r\n ImagedObjectEditorParams,\r\n ModeButtonInfo,\r\n} from './types';\r\nimport Zoomer, { ZoomEventArgs } from '@/components/misc/zoomer.vue';\r\nimport BoundaryDrawer from '@/components/polygons/boundary-drawer.vue';\r\nimport { IIIFImage } from '@/models/image';\r\nimport ImageLayer from '@/views/imaged-object-editor/image-layer.vue';\r\nimport ArtefactLayer from '@/views/imaged-object-editor/artefact-layer.vue';\r\nimport { EditionInfo } from '@/models/edition';\r\nimport { Artefact } from '@/models/artefact';\r\nimport { ImagedObject } from '@/models/imaged-object';\r\nimport { OperationsManager, SavingAgent } from '@/utils/operations-manager';\r\nimport { ArtefactEditorOperation } from '../artefact-editor/operations';\r\nimport { Side } from '@/models/misc';\r\nimport { ImagedObjectEditorOperation } from './operations';\r\nimport { Polygon } from '@/utils/Polygons';\r\nimport { normalizeOpacity } from '@/components/image-settings/types';\r\nimport ImagedObjectEditorToolbar from './imaged-object-editor-toolbar.vue';\r\nimport { DropdownOption } from '@/utils/helpers';\r\nimport EditionIcons from '@/components/cues/edition-icons.vue';\r\nimport { ImagedObjectState } from '../../state/imaged-object';\r\nimport Toolbox from '@/components/toolbars/toolbox.vue';\r\nimport ResizeBar from '@/components/misc/resizeBar.vue';\r\n\r\n@Component({\r\n name: 'imaged-object-editor',\r\n components: {\r\n Waiting,\r\n 'image-layer': ImageLayer,\r\n 'artefact-layer': ArtefactLayer,\r\n 'boundary-drawer': BoundaryDrawer,\r\n 'imaged-object-editor-toolbar': ImagedObjectEditorToolbar,\r\n zoomer: Zoomer,\r\n 'edition-icons': EditionIcons,\r\n toolbox: Toolbox,\r\n 'resize-bar': ResizeBar,\r\n },\r\n})\r\nexport default class ImagedObjectEditor\r\n extends Vue\r\n implements SavingAgent {\r\n private static colors = [\r\n 'purple',\r\n 'blue',\r\n 'orange',\r\n 'red',\r\n 'green',\r\n 'gray',\r\n 'magenta',\r\n 'olive',\r\n 'brown',\r\n 'cadetBlue',\r\n ];\r\n\r\n public errorMessage: string = '';\r\n public newArtefactName: string = '';\r\n private artefactService = new ArtefactService();\r\n // private params = new ImagedObjectEditorParams();\r\n public artefactId: number = -1;\r\n public renaming = false;\r\n public operationsManager =\r\n new OperationsManager(this);\r\n public side: Side = 'recto';\r\n public renameInputActive: Artefact | null = null;\r\n public waiting: boolean = true;\r\n public displayResizeBar: boolean = false;\r\n public masterImage?: IIIFImage | null = null;\r\n private initialMask = new Polygon();\r\n private nonSelectedMask = new Polygon();\r\n\r\n public async saveEntities(\r\n ops: ImagedObjectEditorOperation[]\r\n ): Promise {\r\n for (const op of ops) {\r\n const id = op.getId();\r\n const artefact = this.artefacts.find((x) => x.id === id);\r\n if (!artefact) {\r\n console.warn(`Can't find artefact ${id} for saving`);\r\n continue;\r\n }\r\n try {\r\n await this.artefactService.changeArtefact(\r\n this.editionId,\r\n artefact\r\n );\r\n\r\n this.showMessage('toasts.imagedObjectSaved', 'success');\r\n } catch (error) {\r\n console.error(\"Can't save arterfact to server\", error);\r\n this.showMessage('toasts.imagedObjectFailed', 'error');\r\n continue;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n public get imagedObjectState(): ImagedObjectState {\r\n return this.$state.imagedObject;\r\n }\r\n public get params(): ImagedObjectEditorParams {\r\n return this.imagedObjectState.params || new ImagedObjectEditorParams();\r\n }\r\n public get canCreate(): boolean {\r\n return this.newArtefactName.trim().length > 0;\r\n }\r\n public newModalShown() {\r\n // this.waiting = true;\r\n (this.$refs.newArtefactName as any).focus();\r\n }\r\n\r\n // moved code to created() from mounted() {\r\n // in order to have the masterImage and other items\r\n // (i.e this.artefactId ) ready before mounted\r\n // for the ... part\r\n // and prevent errors of undefined parts\r\n // occuring during render befor mounted,\r\n // e.g. selectedRow: art.id === artefact.id returns undefined\r\n\r\n private async created() {\r\n try {\r\n this.waiting = true;\r\n\r\n await this.$state.prepare.edition(this.editionId);\r\n\r\n this.$state.imagedObjects.current = this.$state.imagedObjects.find(\r\n this.$route.params.imagedObjectId\r\n );\r\n\r\n if (!this.imagedObject) {\r\n console.error(\r\n `Can't located imaged object ${this.$route.params.imagedObjectId} in edition ${this.editionId}`\r\n );\r\n throw new Error(\r\n `Can't located imaged object ${this.$route.params.imagedObjectId} in edition ${this.editionId}`\r\n );\r\n }\r\n\r\n // Set default side\r\n if (this.imagedObject.recto) {\r\n this.side = 'recto';\r\n } else if (this.imagedObject.verso) {\r\n this.side = 'verso';\r\n } else {\r\n throw new Error(\r\n `Imaged Object ${this.$route.params.imagedObjectId} has no side!`\r\n );\r\n }\r\n\r\n // Load manifests of all images of both sides\r\n const rectoStack = this.imagedObject.getImageStack('recto');\r\n const rectoImages = rectoStack?.images || [];\r\n\r\n const versoStack = this.imagedObject.getImageStack('verso');\r\n const versoImages = versoStack?.images || [];\r\n\r\n const images = [...rectoImages, ...versoImages];\r\n const promises = images.map((img) =>\r\n this.$state.prepare.imageManifest(img)\r\n );\r\n await Promise.all(promises);\r\n\r\n // Get the current master image\r\n const stack = this.imagedObject.getImageStack(this.side)!;\r\n this.masterImage = stack?.master;\r\n\r\n if (this.visibleArtefacts.length) {\r\n this.onArtefactChanged(this.visibleArtefacts[0]);\r\n\r\n // Remove this because it will happen in onArtefactChanged function.\r\n this.initialMask = this.artefact!.mask;\r\n } else {\r\n this.artefactId = -1;\r\n this.initialMask = new Polygon();\r\n }\r\n } finally {\r\n this.waiting = false;\r\n this.$nextTick(() => {\r\n this.displayResizeBar = true;\r\n });\r\n }\r\n\r\n this.fillImageSettings();\r\n }\r\n\r\n public mounted() {\r\n this.$state.operationsManager = this.operationsManager;\r\n }\r\n\r\n public destroyed() {\r\n this.$state.operationsManager = null;\r\n }\r\n\r\n public get artefact(): Artefact | undefined {\r\n const artefact = this.artefacts.find((x) => x.id === this.artefactId);\r\n return artefact;\r\n }\r\n\r\n private get artefacts(): Artefact[] {\r\n return this.imagedObject!.artefacts || [];\r\n }\r\n\r\n public get imagedObject(): ImagedObject | null {\r\n return this.$state.imagedObjects.current;\r\n }\r\n\r\n private get editionId(): number {\r\n return parseInt(this.$route.params.editionId);\r\n }\r\n\r\n public get edition(): EditionInfo | null {\r\n return this.$state.editions.current;\r\n }\r\n\r\n public get removeColor() {\r\n return this.params.highLight === false;\r\n }\r\n\r\n public get canEdit(): boolean {\r\n return this.$state.editions.current?.permission?.mayWrite || false;\r\n }\r\n\r\n public get visibleArtefacts(): Artefact[] {\r\n return this.artefacts.filter((item) => item.side === this.side);\r\n }\r\n\r\n public get imageWidth(): number {\r\n return this.masterImage!.width;\r\n }\r\n\r\n public get imageHeight(): number {\r\n return this.masterImage!.height;\r\n }\r\n\r\n public get actualWidth(): number {\r\n return (\r\n (this.rotationAngle % 180 ? this.imageHeight : this.imageWidth) *\r\n this.zoomLevel\r\n );\r\n }\r\n\r\n public get actualHeight(): number {\r\n return (\r\n (this.rotationAngle % 180 ? this.imageWidth : this.imageHeight) *\r\n this.zoomLevel\r\n );\r\n }\r\n\r\n private get rotationAngle(): number {\r\n return ((this.params.rotationAngle % 360) + 360) % 360;\r\n }\r\n\r\n public get zoomLevel(): number {\r\n return this.params.zoom;\r\n }\r\n\r\n public get transform(): string {\r\n // Rotation\r\n const rotate = `rotate(${this.rotationAngle}, ${this.imageWidth / 2}, ${\r\n this.imageHeight / 2\r\n })`;\r\n\r\n // If the rotation is by 90 or 270 degrees, the image need to be moved a little bit.\r\n // Since the image's width is larger than its height, rotation by 90 degrees (or 270) results in a\r\n // white band to the left of the rotated image. The top of the image is cut-off by exactly the\r\n // width of the white band.\r\n let translate = '';\r\n if (this.rotationAngle % 180) {\r\n // 90 or 270\r\n // The band is caused by the new width (old height) being smaller than the old width.\r\n // There actually two bands, one to the left and one to the right. The right one can't be seen.\r\n const bandWidth = (this.imageWidth - this.imageHeight) / 2;\r\n translate = `translate(${-bandWidth}, ${bandWidth})`;\r\n }\r\n\r\n const scale = `scale(${this.zoomLevel})`;\r\n\r\n return `${scale} ${translate} ${rotate}`;\r\n }\r\n\r\n public get editList(): ModeButtonInfo[] {\r\n if (this.canEdit) {\r\n return [\r\n {\r\n icon: 'pen',\r\n val: 'DRAW',\r\n title: this.$t('misc.draw'),\r\n },\r\n {\r\n icon: 'eraser',\r\n val: 'ERASE',\r\n title: this.$t('misc.erase'),\r\n },\r\n ];\r\n }\r\n return [];\r\n }\r\n\r\n public async newArtefact() {\r\n this.newArtefactName = this.newArtefactName.trim();\r\n\r\n let newArtefact = {} as Artefact;\r\n this.waiting = true;\r\n this.errorMessage = '';\r\n try {\r\n newArtefact = await this.artefactService.createArtefact(\r\n this.editionId,\r\n this.imagedObject!,\r\n this.newArtefactName,\r\n this.side as Side\r\n );\r\n\r\n (this.$refs.newArtRef as any).hide();\r\n this.onArtefactChanged(newArtefact);\r\n\r\n this.editingModeChanged('DRAW');\r\n this.$emit('create', newArtefact);\r\n } catch (err: any) {\r\n this.errorMessage = err;\r\n } finally {\r\n this.newArtefactName = '';\r\n this.waiting = false;\r\n }\r\n }\r\n\r\n public get isErasing() {\r\n return this.params.drawingMode === DrawingMode.ERASE;\r\n }\r\n\r\n public onNewZoom(event: ZoomEventArgs) {\r\n this.params.zoom = event.zoom;\r\n }\r\n\r\n private editingModeChanged(val: any) {\r\n (this as any).params.drawingMode = DrawingMode[val];\r\n }\r\n\r\n public inputRenameChanged(art: Artefact | undefined) {\r\n this.renameInputActive = art ? art : null;\r\n }\r\n\r\n public onArtefactChanged(art: Artefact) {\r\n this.artefactId = art.id;\r\n\r\n // const index = this.artefacts.indexOf(art); // index artefact in artefact list.\r\n // this.artefactEditingData = this.getArtefactEditingData(index);\r\n\r\n this.nonSelectedMask = new Polygon();\r\n for (const artefact of this.visibleArtefacts) {\r\n if (artefact.id !== art.id) {\r\n this.nonSelectedMask = Polygon.add(\r\n this.nonSelectedMask,\r\n artefact.mask\r\n );\r\n }\r\n }\r\n }\r\n\r\n public async onRename() {\r\n if (!this.artefact) {\r\n throw new Error(\"Can't rename if there is no artefact\");\r\n }\r\n this.renaming = true;\r\n try {\r\n await this.artefactService.changeArtefact(\r\n this.editionId,\r\n this.artefact\r\n );\r\n this.showMessage('toasts.artefactRenamed', 'success');\r\n // this.renameInputActive = {};\r\n this.inputRenameChanged(undefined);\r\n } catch (err) {\r\n this.showMessage('toasts.artefactRenameFailed', 'error');\r\n } finally {\r\n this.renaming = false;\r\n }\r\n }\r\n // private onParamsChanged(evt: EditorParamsChangedArgs) {\r\n // this.params = evt.params; // This makes sure a change is triggered in child components\r\n // }\r\n public onNewPolygon(poly: Polygon) {\r\n let newPolygon: Polygon;\r\n\r\n if (this.isErasing) {\r\n newPolygon = Polygon.subtract(this.artefact!.mask, poly);\r\n } else {\r\n newPolygon = Polygon.add(this.artefact!.mask, poly);\r\n }\r\n\r\n // Check if the new mask intersects with a non selected artefact mask\r\n const intersection = Polygon.intersect(\r\n newPolygon,\r\n this.nonSelectedMask\r\n );\r\n if (!intersection.empty) {\r\n this.$toasted.show(this.$tc('toasts.artefactCantOverlap'), {\r\n type: 'info',\r\n position: 'top-center',\r\n duration: 5000,\r\n });\r\n return;\r\n }\r\n\r\n this.operationsManager.addOperation(\r\n new ImagedObjectEditorOperation(\r\n this.artefact!.id,\r\n this.isErasing ? 'erase' : 'draw',\r\n this.artefact!.mask,\r\n newPolygon\r\n )\r\n );\r\n this.artefact!.mask = newPolygon;\r\n }\r\n\r\n public sideArtefactChanged(side: DropdownOption) {\r\n this.side = side.name as Side;\r\n if (this.artefact!.side !== side.name && this.visibleArtefacts.length) {\r\n this.onArtefactChanged(this.visibleArtefacts[0]);\r\n }\r\n this.fillImageSettings();\r\n }\r\n\r\n private fillImageSettings() {\r\n this.params.imageSettings = {};\r\n if (this.imagedObject) {\r\n if (\r\n this.imagedObject &&\r\n this.imagedObject.getImageStack(this.side)\r\n ) {\r\n for (const imageType of this.imagedObject.getImageStack(\r\n this.side\r\n )!.availableImageTypes) {\r\n const image = this.imagedObject\r\n .getImageStack(this.side)!\r\n .getImage(imageType);\r\n if (image) {\r\n const master =\r\n this.imagedObject.getImageStack(this.side)!.master\r\n .type === imageType;\r\n const imageSetting = {\r\n image,\r\n type: imageType,\r\n visible: master,\r\n opacity: 1,\r\n normalizedOpacity: 1,\r\n };\r\n this.$set(\r\n this.params.imageSettings,\r\n imageType,\r\n imageSetting\r\n ); // Make sure this object is tracked by Vue\r\n }\r\n }\r\n normalizeOpacity(this.params.imageSettings);\r\n }\r\n }\r\n }\r\n\r\n private showMessage(msg: string, type: string = 'info') {\r\n this.$toasted.show(this.$tc(msg), {\r\n type,\r\n position: 'top-right',\r\n duration: 7000,\r\n });\r\n }\r\n\r\n public getArtefactColor(art: Artefact) {\r\n const idx = this.visibleArtefacts.indexOf(art);\r\n if (idx === -1) {\r\n console.error(\"Can't locate artefact in this.artefacts\");\r\n // throw new Error(\"Can't locate artefact in this.artefacts\");\r\n }\r\n\r\n return ImagedObjectEditor.colors[\r\n idx % ImagedObjectEditor.colors.length\r\n ];\r\n }\r\n\r\n public async onDeleteArtefact(art: Artefact) {\r\n try {\r\n await this.artefactService.deleteArtefact(art);\r\n this.showMessage('toasts.artefactDeleted', 'success');\r\n const index = this.artefacts.indexOf(art);\r\n\r\n if (this.artefacts[0]) {\r\n this.artefactId = this.artefacts[0].id;\r\n } else {\r\n this.artefactId = 0;\r\n this.initialMask = new Polygon();\r\n }\r\n } catch (err) {\r\n console.error(err);\r\n this.showMessage('toasts.deleteArtefactFailed', 'error');\r\n }\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./imaged-object-editor.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./imaged-object-editor.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./imaged-object-editor.vue?vue&type=template&id=c46ce834&scoped=true&\"\nimport script from \"./imaged-object-editor.vue?vue&type=script&lang=ts&\"\nexport * from \"./imaged-object-editor.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./imaged-object-editor.vue?vue&type=style&index=0&id=c46ce834&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"c46ce834\",\n null\n \n)\n\nexport default component.exports","import Vue from 'vue';\nimport Router from 'vue-router';\nimport Home from './views/home/Home.vue';\nimport Search from './views/search/main.vue';\nimport Welcome from './components/welcome/welcome.vue';\nimport Edition from './views/edition/Edition.vue';\nimport EditionImagedObjects from './views/edition/components/imaged-objects.vue';\nimport EditionArtefacts from './views/edition/components/artefacts.vue';\nimport ScrollEditor from './views/scroll-editor/scroll-editor.vue';\nimport Registration from './views/user/Registration.vue';\nimport ChangePassword from './views/user/ChangePassword.vue';\nimport UpdateUser from './views/user/UpdateUser.vue';\nimport ChangeForgottenPassword from './views/user/ChangeForgottenPassword.vue';\nimport Activation from './views/user/Activation.vue';\nimport ConfirmInvitation from './views/edition/components/confirm-invitation.vue';\nimport ArtefactEditor from './views/artefact-editor/artefact-editor.vue';\nimport ImagedObjectEditor from './views/imaged-object-editor/imaged-object-editor.vue';\nimport EditionMetadata from './views/edition/components/metadata.vue';\n\nVue.use(Router);\n\nexport default new Router({\n mode: 'history',\n base: process.env.BASE_URL,\n routes: [\n {\n path: '/',\n name: 'welcome',\n component: Welcome\n },\n {\n path: '/home/:editionType',\n name: 'home',\n component: Home\n },\n {\n path: '/home',\n redirect: '/home/private',\n },\n {\n path: '/search',\n name: 'search',\n component: Search\n },\n {\n path: '/editions/:editionId',\n component: Edition,\n children: [\n {\n path: 'artefacts',\n component: EditionArtefacts\n },\n {\n path: 'imaged-objects',\n component: EditionImagedObjects\n },\n {\n path: 'metadata',\n component: EditionMetadata,\n },\n {\n path: '',\n redirect: '/editions/:editionId/artefacts'\n }\n ]\n },\n {\n path: '/editions/:editionId/scroll-editor',\n component: ScrollEditor\n },\n {\n path: '/editions/:editionId/artefacts/:artefactId',\n component: ArtefactEditor\n },\n {\n path: '/editions/:editionId/text-fragments/:textFragmentId',\n component: ArtefactEditor\n },\n {\n path: '/editions/:editionId/imaged-objects/:imagedObjectId',\n component: ImagedObjectEditor\n },\n {\n path: '/accept-invitation/token/:token',\n component: ConfirmInvitation\n },\n {\n path: '/registration',\n component: Registration\n },\n {\n path: '/changePassword',\n component: ChangePassword,\n meta: { activeUserRoute: true }\n },\n {\n path: '/updateUserDetails',\n component: UpdateUser,\n meta: { activeUserRoute: true }\n },\n {\n path: '/changeForgottenPassword/token/:token',\n component: ChangeForgottenPassword\n },\n {\n path: '/activateUser/token/:token',\n component: Activation\n }\n ]\n});\n","import { StateManager } from '@/state';\r\nimport EditionService from '@/services/edition';\r\nimport ImagedObjectService from '@/services/imaged-object';\r\nimport ArtefactService from '@/services/artefact';\r\nimport { IIIFImage } from '@/models/image';\r\nimport ImageService from '@/services/image';\r\nimport TextService from '@/services/text';\r\nimport { SignalRWrapper } from './signalr-connection';\r\nimport { NotificationHandler } from './notification-handler';\r\nimport { ShareInfo, Permissions, AttributeMetadata } from '@/models/edition';\r\nimport { AdminEditorRequestDTO } from '@/dtos/sqe-dtos';\r\nimport { ImagedObject } from '@/models/imaged-object';\r\nimport { svgPolygonToClipper } from '@/utils/VectorFactory';\r\nimport { ScriptData } from '@/models/script';\r\nimport { TextFragment } from '@/models/text';\r\nimport router from '@/router';\r\n\r\n/*\r\n * This service handles all the state data.\r\n *\r\n * It is responsible for preparing the state data, updating it (through SignalR notifications),\r\n * and taking care of multiple concurrent requests for the same piece of data.\r\n *\r\n * Althought this class is not written as a singleton, it really is. StateManager.instance.prepare holds\r\n * the single reference to this class. Trying to instantiate this class twice will result in an exception\r\n */\r\n\r\nclass ProcessTracking {\r\n public promise: Promise;\r\n public id: number;\r\n public startTime: number;\r\n public endTime: number | undefined;\r\n public failed: boolean;\r\n public done: boolean;\r\n\r\n public constructor(promise: Promise, id: number) {\r\n this.promise = promise;\r\n this.startTime = Date.now();\r\n this.endTime = undefined;\r\n this.id = id;\r\n this.failed = false;\r\n this.done = false;\r\n\r\n promise\r\n .then(() => {\r\n this.endTime = Date.now();\r\n this.failed = false;\r\n this.done = true;\r\n })\r\n .catch(err => {\r\n console.error('ProcessTracking encountered an error ', err);\r\n this.failed = true;\r\n });\r\n }\r\n\r\n public needsRefresh(): boolean {\r\n return this.failed;\r\n }\r\n}\r\n\r\ntype ProcessProperties =\r\n | 'allEditionsProcess'\r\n | 'editionProcess'\r\n | 'invitationsProcess'\r\n | 'imagedObjectsProcess'\r\n | 'artefactsProcess'\r\n | 'artefactProcess'\r\n | 'textFragmentsProcess'\r\n | 'textFragmentProcess'\r\n | 'artefactGroupsProcess'\r\n | 'attributeMetadataProcess'\r\n | 'editionScriptProcess'\r\n | 'editionFullTextProcess'\r\n | 'editionMetadataProcess';\r\n\r\nexport default class StateService {\r\n private static alreadyCreated = false;\r\n private _state: StateManager;\r\n private _notificationHandler: NotificationHandler;\r\n\r\n private allEditionsProcess: ProcessTracking | undefined;\r\n private editionProcess: ProcessTracking | undefined;\r\n private invitationProcess: ProcessTracking | undefined;\r\n private imagedObjectsProcess: ProcessTracking | undefined;\r\n private artefactsProcess: ProcessTracking | undefined;\r\n private artefactProcess: ProcessTracking | undefined;\r\n private textFragmentsProcess: ProcessTracking | undefined;\r\n private textFragmentProcess: ProcessTracking | undefined;\r\n private imageManifestProcesses: Map; // Map from url to ProcessTracking\r\n private artefactGroupsProcess: ProcessTracking | undefined;\r\n private attributeMetadataProcess: ProcessTracking | undefined;\r\n private editionScriptProcess: ProcessTracking | undefined;\r\n private editionFullTextProcess: ProcessTracking | undefined;\r\n private editionMetadataProcess: ProcessTracking | undefined;\r\n // TODO: Add process for artefactGroups\r\n\r\n public constructor(state: StateManager) {\r\n if (StateService.alreadyCreated) {\r\n console.error(\"Can't initialize StateService more than once\");\r\n throw new Error(\"Can't initialize StateService more than once\");\r\n }\r\n this._state = state;\r\n this.imageManifestProcesses = new Map();\r\n this._notificationHandler = new NotificationHandler();\r\n SignalRWrapper.instance.registerNotificationHandler(\r\n this._notificationHandler\r\n );\r\n StateService.alreadyCreated = true;\r\n }\r\n\r\n public async allEditions(): Promise {\r\n return this.wrapInternal('allEditionsProcess', -1, (id: number) =>\r\n this.allEditionsInternal()\r\n );\r\n }\r\n\r\n public async edition(editionId: number): Promise {\r\n return this.wrapInternal(\r\n 'editionProcess',\r\n editionId,\r\n (id: number) => this.editionInternal(id),\r\n (id: number) => this.postEditionInternal(id)\r\n );\r\n }\r\n\r\n public async editionScript(editionId: number): Promise {\r\n return this.wrapInternal(\r\n 'editionScriptProcess',\r\n editionId,\r\n (id: number) => this.editionScriptInternal(id)\r\n );\r\n }\r\n\r\n public async editionMetadata(editionId: number): Promise {\r\n return this.wrapInternal(\r\n 'editionMetadataProcess',\r\n editionId,\r\n (id: number) => this.editionMetadataInternal(id)\r\n );\r\n }\r\n\r\n public async invitations(editionId: number): Promise {\r\n return this.wrapInternal(\r\n 'invitationsProcess',\r\n editionId,\r\n (id: number) => this.invitationsInternal(id)\r\n );\r\n }\r\n\r\n public async textFragments(editionId: number): Promise {\r\n return this.wrapInternal(\r\n 'textFragmentsProcess',\r\n editionId,\r\n (id: number) => this.textFragmentsInternal(id)\r\n );\r\n }\r\n\r\n public async artefactGroups(editionId: number): Promise {\r\n return this.wrapInternal(\r\n 'artefactGroupsProcess',\r\n editionId,\r\n (id: number) => this.artefactGroupsInternal(id)\r\n );\r\n }\r\n\r\n public imagedObjects(editionId: number) {\r\n return this.wrapInternal(\r\n 'imagedObjectsProcess',\r\n editionId,\r\n (id: number) => this.imagedObjectsInternal(id)\r\n );\r\n }\r\n\r\n public async artefacts(editionId: number): Promise {\r\n return this.wrapInternal('artefactsProcess', editionId, (id: number) =>\r\n this.artefactsInternal(id)\r\n );\r\n }\r\n\r\n public artefact(editionId: number, artefactId: number): Promise {\r\n return this.wrapInternal(\r\n 'artefactProcess',\r\n artefactId,\r\n id => this.artefactInternal(editionId, id),\r\n id => this.postArtefactInternal(id)\r\n );\r\n }\r\n\r\n public textFragment(\r\n editionId: number,\r\n textFragmentId: number\r\n ): Promise {\r\n return this.wrapInternal('textFragmentProcess', textFragmentId, id =>\r\n this.textFragmentInternal(editionId, id)\r\n );\r\n }\r\n\r\n public editionFullText(editionId: number): Promise {\r\n return this.wrapInternal(\r\n 'editionFullTextProcess',\r\n editionId,\r\n (id: number) => this.editionFullTextInternal(id)\r\n );\r\n }\r\n\r\n public async attributeMetadata(editionId: number): Promise {\r\n return this.wrapInternal(\r\n 'attributeMetadataProcess',\r\n editionId,\r\n (id: number) => this.attributeMetadataInternal(id)\r\n );\r\n }\r\n\r\n public async imageManifest(image: IIIFImage): Promise {\r\n let pt = this.imageManifestProcesses.get(image.manifestUrl);\r\n if (pt && image.manifest) {\r\n return pt.promise;\r\n }\r\n\r\n const promise = this.imageManifestInternal(image);\r\n pt = new ProcessTracking(promise, -1);\r\n this.imageManifestProcesses.set(image.manifestUrl, pt);\r\n return pt.promise;\r\n }\r\n\r\n private getProcess(\r\n processName: ProcessProperties\r\n ): ProcessTracking | undefined {\r\n const self = this as any;\r\n const pt = self[processName];\r\n\r\n if (pt === undefined) {\r\n return undefined;\r\n }\r\n\r\n if (!(pt instanceof ProcessTracking)) {\r\n console.error(\r\n `${processName} does not resolve to a ProcessTracking instance`\r\n );\r\n throw Error(\r\n `${processName} does not resolve to a ProcessTracking instance`\r\n );\r\n }\r\n\r\n return pt;\r\n }\r\n\r\n private setProcess(\r\n processName: ProcessProperties,\r\n processTracking: ProcessTracking | undefined\r\n ) {\r\n const self = this as any;\r\n self[processName] = processTracking;\r\n }\r\n\r\n private async wrapInternal(\r\n processName: ProcessProperties,\r\n id: number,\r\n internal: (id: number) => Promise,\r\n postInternal?: (id: number) => void\r\n ) {\r\n // wrapInternal calls `internal` if it hasn't been run yet. It calls `postInternal` anyway. Use `postInternal` to set current\r\n // entities in the state.\r\n let pt = this.getProcess(processName);\r\n if (pt && pt.id === id && !pt.needsRefresh()) {\r\n if (pt.done && postInternal) {\r\n postInternal(id);\r\n }\r\n return pt.promise;\r\n }\r\n\r\n const promise = internal(id);\r\n if (postInternal) {\r\n promise.then(() => {\r\n postInternal(id);\r\n });\r\n }\r\n\r\n pt = new ProcessTracking(promise, id);\r\n this.setProcess(processName, pt);\r\n\r\n return pt.promise;\r\n }\r\n\r\n private async allEditionsInternal() {\r\n const svc = new EditionService();\r\n const editions = await svc.getAllEditions();\r\n this._state.editions.items = editions;\r\n }\r\n\r\n private async editionInternal(editionId: number) {\r\n // First, make sure we have all editions\r\n await this.allEditions();\r\n try {\r\n const edition = this._state.editions.find(editionId);\r\n if (!edition) {\r\n console.error(\r\n `Can't find edition ${editionId} in all editions`\r\n );\r\n throw new Error(\r\n `Can't find edition ${editionId} in all editions`\r\n );\r\n }\r\n\r\n this._state.editions.current = edition;\r\n } catch (error) {\r\n alert(error);\r\n router.push('/');\r\n return;\r\n }\r\n\r\n // Clear data from the previous edition\r\n // TODO: process the artefactGroups, too (clear, prepare, wait in Promise.all)\r\n this._state.textFragments.clear();\r\n this._state.interpretationRois.clear();\r\n this._state.signInterpretations.clear();\r\n this._state.artefactGroups.clear();\r\n\r\n // Load the new data\r\n this.imagedObjects(editionId);\r\n this.artefacts(editionId);\r\n this.textFragments(editionId);\r\n this.artefactGroups(editionId);\r\n this.attributeMetadata(editionId);\r\n this.editionScript(editionId);\r\n this.editionMetadata(editionId);\r\n await Promise.all([\r\n this.imagedObjectsProcess!.promise,\r\n this.artefactsProcess!.promise,\r\n this.textFragmentsProcess!.promise,\r\n this.artefactGroupsProcess!.promise,\r\n this.attributeMetadataProcess!.promise,\r\n this.editionScriptProcess!.promise\r\n ]);\r\n SignalRWrapper.instance.subscribeEdition(editionId);\r\n }\r\n\r\n private postEditionInternal(editionId: number) {\r\n const edition = this._state.editions.find(editionId);\r\n if (!edition) {\r\n console.error(\r\n `Can't find edition ${editionId} in postEditionInternal`\r\n );\r\n return;\r\n }\r\n this._state.editions.current = edition;\r\n }\r\n\r\n private async editionScriptInternal(editionId: number) {\r\n if (this._state.editions.current?.id !== editionId) {\r\n throw new Error(\r\n `Can't fetch script for non-current edition ${editionId}`\r\n );\r\n }\r\n this._state.editions.current!.script = null;\r\n\r\n const svc = new EditionService();\r\n const dto = await svc.getScribalFont(editionId);\r\n if (!dto.scripts || !dto.scripts.length) {\r\n // This should be fixed in the backend at some point.\r\n console.warn(`Edition ${editionId} has no script data`);\r\n } else {\r\n this._state.editions.current!.script = new ScriptData(\r\n dto.scripts[0]\r\n );\r\n }\r\n }\r\n\r\n private async editionMetadataInternal(editionId: number) {\r\n if (this._state.editions.current?.id !== editionId) {\r\n throw new Error(\r\n `Can't fetch metadata for non-current edition ${editionId}`\r\n );\r\n }\r\n\r\n this._state.editions.current!.metadata = null;\r\n const svc = new EditionService();\r\n const dto = await svc.getEditionMetadata(editionId);\r\n this._state.editions.current!.metadata = dto;\r\n }\r\n\r\n private async textFragmentsInternal(editionId: number) {\r\n if (this._state.editions.current?.id !== editionId) {\r\n throw new Error(\r\n `Can't fetch text fragments for non-current edition ${editionId}`\r\n );\r\n }\r\n this._state.editions.current!.textFragments = [];\r\n const svc = new TextService();\r\n const fragments = await svc.getEditionTextFragments(editionId);\r\n this._state.editions.current!.textFragments = fragments;\r\n }\r\n\r\n private async artefactGroupsInternal(editionId: number) {\r\n if (this._state.editions.current?.id !== editionId) {\r\n throw new Error(\r\n `Can't fetch artefact Groups for non-current edition ${editionId}`\r\n );\r\n }\r\n this._state.editions.current!.artefactGroups = [];\r\n\r\n const svc = new EditionService();\r\n const artefactGroups = await svc.getArtefactGroups(editionId);\r\n this._state.editions.current!.artefactGroups = artefactGroups;\r\n }\r\n\r\n private async imagedObjectsInternal(editionId: number) {\r\n this._state.imagedObjects.items = [];\r\n const svc = new ImagedObjectService();\r\n const imagedObjects = await svc.getEditionImagedObjects(editionId);\r\n this._state.imagedObjects.items = imagedObjects;\r\n }\r\n\r\n private async artefactsInternal(editionId: number) {\r\n this._state.artefacts.items = [];\r\n const svc = new ArtefactService();\r\n const artefacts = await svc.getEditionArtefacts(editionId);\r\n this._state.artefacts.items = artefacts;\r\n }\r\n\r\n private async attributeMetadataInternal(editionId: number) {\r\n if (\r\n !this._state.editions.current ||\r\n this._state.editions.current.id !== editionId\r\n ) {\r\n console.error(\r\n \"Can't load atribute metadata without the right edition being in the store\"\r\n );\r\n throw Error(\r\n \"Can't load atribute metadata without the right edition being in the store\"\r\n );\r\n }\r\n\r\n const svc = new EditionService();\r\n const dto = await svc.getAllAttributeMetadata(editionId);\r\n this._state.editions.current.attributeMetadata = new AttributeMetadata(\r\n dto\r\n );\r\n }\r\n\r\n private async imageManifestInternal(image: IIIFImage) {\r\n if (image.manifest) {\r\n return; // Most images get the manifests straight from the backend\r\n }\r\n\r\n const svc = new ImageService();\r\n const manifest = await svc.getImageManifest(image);\r\n\r\n image.manifest = manifest;\r\n }\r\n\r\n private async artefactInternal(editionId: number, artefactId: number) {\r\n await this.edition(editionId);\r\n const artefact = this._state.artefacts.find(artefactId);\r\n if (!artefact) {\r\n console.error(\r\n `Can't located artefact ${artefactId} in edition ${editionId}`\r\n );\r\n throw new Error(\r\n `Can't located artefact ${artefactId} in edition ${editionId}`\r\n );\r\n }\r\n\r\n const promises: Array> = [];\r\n let imagedObject: ImagedObject | null = null; // undefined;\r\n if (!artefact.isVirtual) {\r\n imagedObject = this._state.imagedObjects.find(\r\n artefact.imagedObjectId\r\n );\r\n if (!imagedObject) {\r\n console.error(\r\n `Can't locate imaged object ${artefact.imagedObjectId} for artefact ${artefact.id}`\r\n );\r\n throw new Error(\r\n `Can't locate imaged object ${artefact.imagedObjectId} for artefact ${artefact.id}`\r\n );\r\n }\r\n\r\n const stack =\r\n artefact.side === 'recto'\r\n ? imagedObject.recto\r\n : imagedObject.verso;\r\n if (!stack) {\r\n console.error(\r\n `Can't locate ${artefact.side} in imaged object ${artefact.imagedObjectId}`\r\n );\r\n throw new Error(\r\n `Can't locate ${artefact.side} in imaged object ${artefact.imagedObjectId}`\r\n );\r\n }\r\n\r\n // Load the image's manifest\r\n const imPromise = this.imageManifest(stack.master);\r\n\r\n promises.push(imPromise);\r\n }\r\n\r\n // Load the artefact's text fragments\r\n const textService = new TextService();\r\n const tfPromise = textService.getArtefactTextFragments(\r\n editionId,\r\n artefactId\r\n );\r\n promises.push(tfPromise);\r\n\r\n await Promise.all(promises); // Let both requests happen concurrently\r\n artefact.textFragments = await tfPromise;\r\n\r\n this._state.artefacts.current = artefact;\r\n this._state.imagedObjects.current = imagedObject; // will be undefined if the artefact is virtual\r\n }\r\n\r\n private postArtefactInternal(id: number) {\r\n const artefact = this._state.artefacts.find(id);\r\n if (!artefact) {\r\n console.error(\r\n `Can't locate artefact ${id} in postArtefactInternal`\r\n );\r\n return;\r\n }\r\n this._state.artefacts.current = artefact;\r\n\r\n if (!artefact.isVirtual) {\r\n const imagedObject = this._state.imagedObjects.find(\r\n artefact.imagedObjectId\r\n );\r\n if (!imagedObject) {\r\n console.warn(\r\n `Can't located imaged object ${artefact.imagedObjectId} for artefact ${id} in postAretfactInternal`\r\n );\r\n } else {\r\n this._state.imagedObjects.current = imagedObject;\r\n }\r\n } else {\r\n this._state.imagedObjects.current = null;\r\n }\r\n }\r\n\r\n private async textFragmentInternal(\r\n editionId: number,\r\n textFragmentId: number\r\n ) {\r\n await this.edition(editionId);\r\n\r\n // See if the text fragment has already been loaded into the store\r\n const textFragment = this._state.textFragments.get(textFragmentId);\r\n if (textFragment) {\r\n return;\r\n }\r\n\r\n // Make sure the fragment really exists with the edition\r\n const textFragmentData = this._state.editions.current!.textFragments!.find(\r\n tf => tf.id === textFragmentId\r\n );\r\n if (!textFragmentData) {\r\n console.error(\r\n `Can't located text fragment ID ${textFragmentId} in edition ${editionId}`\r\n );\r\n throw new Error(\r\n `Can't located text fragment ID ${textFragmentId} in edition ${editionId}`\r\n );\r\n }\r\n\r\n // Load the text fragment from the server\r\n const svc = new TextService();\r\n const textEdition = await svc.getTextFragment(\r\n editionId,\r\n textFragmentId\r\n );\r\n\r\n // For now, this is what the backend returns\r\n if (\r\n textEdition.textFragments.length !== 1 ||\r\n textEdition.textFragments[0].id !== textFragmentId\r\n ) {\r\n console.error(\r\n `Backend did not return the one expected text fragment ${textFragmentId}`\r\n );\r\n throw new Error(\r\n `Backend did not return the one expected text fragment ${textFragmentId}`\r\n );\r\n }\r\n\r\n const current = textEdition.textFragments[0];\r\n this.addTextFragmentToState(current);\r\n }\r\n\r\n private async editionFullTextInternal(editionId: number) {\r\n this._state.signInterpretations.clear();\r\n this._state.interpretationRois.clear();\r\n this._state.textFragments.clear();\r\n\r\n await this.edition(editionId);\r\n\r\n const svc = new TextService();\r\n const fullText = await svc.getEditionFullText(editionId);\r\n\r\n for (const tf of fullText.textFragments) {\r\n this.addTextFragmentToState(tf);\r\n }\r\n }\r\n\r\n private addTextFragmentToState(tf: TextFragment) {\r\n this._state.textFragments.put(tf);\r\n\r\n // Add all the sign interpretations and ROIs\r\n\r\n for (const line of tf.lines) {\r\n for (const sign of line.signs) {\r\n for (const si of sign.signInterpretations) {\r\n this._state.signInterpretations.put(si);\r\n for (const roi of si.rois) {\r\n this._state.interpretationRois.put(roi);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n private async invitationsInternal(editionId: number) {\r\n await this.edition(editionId);\r\n\r\n const svc = new EditionService();\r\n const allInvitations = await svc.getAllInvitations();\r\n\r\n const edition = this._state.editions.find(editionId);\r\n\r\n if (!edition) {\r\n return;\r\n }\r\n\r\n const editionInvitations = allInvitations.editorRequests.filter(\r\n (i: AdminEditorRequestDTO) => i.editionId === edition.id\r\n );\r\n edition.invitations = editionInvitations.map(\r\n x => new ShareInfo(x.editorEmail, new Permissions(x))\r\n );\r\n }\r\n}\r\n","import Vue from 'vue';\n\nexport type EventBusEvents =\n| 'corrupted-state'\n| 'remove-roi'\n| 'roi-changed'\n| 'change-artefact-rotation'\n| 'select-artefact'\n| 'select-group'\n| 'save-group'\n| 'cancel-group'\n| 'delete-group'\n| 'update-operation-id'\n| 'new-operation' // New operaton for the active operations manager\n| 'new-bulk-operations' // New bulk operations for the active operations manager\n| 'change-artefact-edit-line'\n| 'change-artefact-add-line'\n| 'change-artefact-delete-line';\n\n\n\nexport class EventBus {\n private eventBus: Vue;\n\n public constructor() {\n this.eventBus = new Vue();\n }\n\n public on(event: EventBusEvents, callback: (...args: T[]) => void) {\n this.eventBus.$on(event, callback);\n }\n\n public off(event: EventBusEvents, callback?: (...args: T[]) => void) {\n this.eventBus.$off(event, callback);\n }\n\n public emit(event: EventBusEvents, ...args: T[]) {\n this.eventBus.$emit(event, ...args);\n }\n}\n","import { InterpretationAttributeDTO } from '@/dtos/sqe-dtos';\r\nimport { Artefact } from '@/models/artefact';\r\nimport { SignInterpretation, InterpretationRoi, ArtefactTextFragmentData } from '@/models/text';\r\nimport { StateManager } from '.';\r\nimport { ArtefactEditorParams } from '../views/artefact-editor/types';\r\n\r\n\r\nfunction state() {\r\n return StateManager.instance;\r\n}\r\nexport class ArtefactEditorState {\r\n public selectedInterpretationRoi: InterpretationRoi | null = null;\r\n public highlightCommentMode: boolean = false;\r\n public params: ArtefactEditorParams | null = null;\r\n\r\n constructor() {\r\n this.params = new ArtefactEditorParams();\r\n }\r\n\r\n protected get artefact() {\r\n return state().artefacts.current!;\r\n }\r\n\r\n public selectRoi(roi: InterpretationRoi | null) {\r\n this.selectedInterpretationRoi = roi;\r\n\r\n }\r\n\r\n public onSignInterpretationSelected() {\r\n if (!state().textFragmentEditor.singleSelectedSi) {\r\n this.selectRoi(null);\r\n } else if (this.selectedInterpretationRoi === null) {\r\n this.selectRoi(state().textFragmentEditor.singleSelectedSi?.artefactRoi(this.artefact) || null);\r\n }\r\n }\r\n}\r\n","import { ImagedObjectEditorParams } from '@/views/imaged-object-editor/types';\r\nimport { StateManager } from '.';\r\n\r\nfunction state() {\r\n return StateManager.instance;\r\n}\r\n\r\nexport class ImagedObjectState {\r\n public params: ImagedObjectEditorParams | null = null;\r\n\r\n constructor() {\r\n this.params = new ImagedObjectEditorParams();\r\n }\r\n}\r\n","import { InterpretationAttributeDTO } from '@/dtos/sqe-dtos';\nimport { Artefact } from '@/models/artefact';\nimport { SignInterpretation, InterpretationRoi, ArtefactTextFragmentData, TextFragment, Sign, Line } from '@/models/text';\nimport { StateManager } from '.';\n\n\nfunction state() {\n return StateManager.instance;\n}\nexport type editSignInterpretationModeType = 'edit' | 'create';\nexport type TextEditingMode = 'manuscript' | 'artefact';\nexport class TextFragmentState {\n public selectedSignInterpretations: SignInterpretation[];\n public selectedAttribute: InterpretationAttributeDTO | null = null;\n public highlightCommentMode: boolean = false;\n public modeSignModal: editSignInterpretationModeType = 'edit';\n public textEditingMode: TextEditingMode = 'artefact'; // Provides an indication which module edits the text now\n\n // Editing the text of a virtual artefact\n public editedVirtualArtefact: Artefact | null = null;\n\n constructor() {\n this.selectedSignInterpretations = [];\n }\n\n public get singleSelectedSi(): SignInterpretation | null {\n if (this.selectedSignInterpretations.length === 1) {\n return this.selectedSignInterpretations[0];\n }\n return null;\n }\n\n public get selectedTextFragment(): TextFragment | null {\n if (!this.selectedSignInterpretations.length) {\n return null;\n }\n\n return this.selectedSignInterpretations[0].sign.line.textFragment;\n }\n\n public toggleSelectSign(si: SignInterpretation | undefined, removeIfExist: boolean = true) {\n if (!si || !si.character) {\n return;\n }\n\n // Make sure only signs from one text fragment are selected\n if (si.sign.line.textFragment !== this.selectedTextFragment) {\n for (const oldSi of this.selectedSignInterpretations) {\n // Remove all the old signs\n this.removeTextFragementFromArtefact(oldSi);\n }\n\n this.selectedSignInterpretations = [si];\n this.addTextFragementToArtefact(si);\n } else {\n if (si && si.character) {\n const existingIdx = this.selectedSignInterpretations.findIndex((x: SignInterpretation) => x.id === si.id);\n if (existingIdx === -1) {\n this.selectedSignInterpretations.push(si);\n this.addTextFragementToArtefact(si);\n } else if (removeIfExist) {\n this.selectedSignInterpretations.splice(existingIdx, 1);\n this.removeTextFragementFromArtefact(si);\n }\n state().artefactEditor.onSignInterpretationSelected();\n }\n }\n }\n\n public selectSign(si: SignInterpretation | null) {\n this.selectedSignInterpretations = si ? [si] : [];\n }\n\n public isSiSelected(si: SignInterpretation): boolean {\n return this.selectedSignInterpretations.some(x => x.id === si.id);\n }\n\n public addTextFragementToArtefact(si: SignInterpretation) {\n const siTextFragment = si.sign.line.textFragment;\n const tf = state().artefacts.current!.textFragments.find(\n (x: ArtefactTextFragmentData) => x.id === siTextFragment.textFragmentId\n );\n if (!tf) {\n state().artefacts.current!.textFragments.push(new ArtefactTextFragmentData({\n id: siTextFragment.textFragmentId,\n name: siTextFragment.textFragmentName,\n editorId: siTextFragment.editorId,\n suggested: false,\n }));\n } else {\n tf.certain = true;\n }\n }\n\n public removeTextFragementFromArtefact(si: SignInterpretation) {\n const siTextFragment = si.sign.line.textFragment;\n const tfIndex = state().artefacts.current!.textFragments.findIndex(\n (x: ArtefactTextFragmentData) => x.id === siTextFragment.textFragmentId\n );\n if (tfIndex > -1) {\n state().artefacts.current!.textFragments[tfIndex].certain = false;\n state().artefacts.current!.textFragments.splice(tfIndex, 1);\n }\n }}\n","import { SessionState } from './session';\nimport { EditionCollection,\n ImagedObjectCollection,\n MiscState,\n ArtefactCollection,\n InterpretationRoiMap,\n SignInterpretationMap,\n TextFragmentMap,\n ArtefactGroupsMap} from './utilities';\nimport StateService from './state-service';\nimport { ScrollEditorState } from './scroll-editor';\nimport { EventBus } from './event-bus';\nimport { ArtefactEditorState } from './artefact-editor';\nimport { ImagedObjectState } from './imaged-object';\nimport { OperationsManagerBase } from '@/utils/operations-manager';\nimport { TextFragmentState } from './text-fragment';\n\nexport class StateManager {\n private static _instance: StateManager;\n\n public session: SessionState;\n public editions: EditionCollection;\n public imagedObjects: ImagedObjectCollection; // Imaged objects for the current edition\n public artefacts: ArtefactCollection; // Artefacts for the current edition or imaged object\n public artefactGroups: ArtefactGroupsMap;\n public textFragments: TextFragmentMap;\n public interpretationRois: InterpretationRoiMap;\n public signInterpretations: SignInterpretationMap;\n public misc: MiscState;\n public scrollEditor: ScrollEditorState;\n public artefactEditor: ArtefactEditorState;\n public textFragmentEditor: TextFragmentState;\n public imagedObject: ImagedObjectState;\n public eventBus: EventBus;\n public operationsManager: OperationsManagerBase | null;\n\n public prepare: StateService;\n\n public showEditReconTextBar: boolean = false;\n\n private constructor() {\n this.session = new SessionState();\n this.editions = new EditionCollection();\n this.imagedObjects = new ImagedObjectCollection();\n this.artefacts = new ArtefactCollection();\n this.artefactGroups = new ArtefactGroupsMap();\n this.textFragments = new TextFragmentMap();\n this.misc = new MiscState();\n this.scrollEditor = new ScrollEditorState();\n this.artefactEditor = new ArtefactEditorState();\n this.textFragmentEditor = new TextFragmentState();\n this.imagedObject = new ImagedObjectState();\n this.interpretationRois = new InterpretationRoiMap();\n this.signInterpretations = new SignInterpretationMap();\n this.eventBus = new EventBus();\n this.prepare = new StateService(this);\n this.operationsManager = null;\n this.showEditReconTextBar = false;\n }\n\n public corrupted(msg: string): never {\n console.error('State is corrupt: ', msg);\n this.eventBus.emit('corrupted-state');\n throw new Error('State is corrupt: ' + msg);\n }\n\n public touchEdition(editionId: number) {\n // Update the lastEdit of an edition\n\n const edition = this.editions.find(editionId);\n if (edition) {\n edition.lastEdit = new Date();\n }\n }\n\n public static get instance() {\n if (!StateManager._instance) {\n StateManager._instance = new StateManager();\n }\n return StateManager._instance;\n }\n}\n","// import { authHeader } from '@/store/session';\r\nimport axios from 'axios';\r\nimport { StateManager } from '@/state';\r\n/*\r\n * This file provides handy utility functions for Axios transactions.\r\n */\r\n\r\nfunction authHeader() {\r\n if (StateManager.instance.session.token) {\r\n return {Authorization: 'Bearer ' + StateManager.instance.session.token };\r\n } else {\r\n return {};\r\n }\r\n}\r\n\r\nexport class CommHelper {\r\n public static get(url: string, useCredentials: boolean = true) {\r\n return axios.get(CommHelper.getFullUrl(url),\r\n CommHelper.getRequestOptions(useCredentials));\r\n }\r\n\r\n public static put(url: string, body?: any, useCredentials: boolean = true) {\r\n return axios.put(CommHelper.getFullUrl(url),\r\n body, CommHelper.getRequestOptions(useCredentials));\r\n }\r\n\r\n public static post(url: string, body?: any, useCredentials: boolean = true) {\r\n return axios.post(CommHelper.getFullUrl(url),\r\n body, CommHelper.getRequestOptions(useCredentials));\r\n }\r\n\r\n public static delete(url: string, useCredentials: boolean = true) {\r\n return axios.delete(CommHelper.getFullUrl(url),\r\n CommHelper.getRequestOptions(useCredentials));\r\n }\r\n\r\n private static getRequestOptions(useCredentials: boolean) {\r\n if (useCredentials) {\r\n return {\r\n headers: authHeader()\r\n };\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n\r\n private static getFullUrl(url: string) {\r\n if (url[0] !== '/') {\r\n url = '/' + url;\r\n }\r\n return process.env.VUE_APP_BACKEND_PREFIX + url;\r\n }\r\n}\r\n","import { LoginRequestDTO, DetailedUserDTO, UserDTO, ResetLoggedInUserPasswordRequestDTO,\r\n ResendUserAccountActivationRequestDTO,\r\n NewUserRequestDTO,\r\n ResetForgottenUserPasswordRequestDTO,\r\n AccountActivationRequestDTO,\r\n UserUpdateRequestDTO,\r\n DetailedUserTokenDTO,\r\n GithubIssueReportDTO} from '@/dtos/sqe-dtos';\r\nimport { CommHelper } from './comm-helper';\r\nimport { UserInfo } from '@/models/edition';\r\nimport { StateManager } from '@/state';\r\nimport { ApiRoutes } from '@/services/api-routes';\r\nimport { SignalRWrapper } from '@/state/signalr-connection';\r\n\r\n\r\nclass SessionService {\r\n private stateManager: StateManager;\r\n private signalR: SignalRWrapper;\r\n\r\n constructor() {\r\n this.stateManager = StateManager.instance;\r\n this.signalR = SignalRWrapper.instance;\r\n }\r\n\r\n public async login(email: string, password: string) {\r\n const requestDto = {\r\n email,\r\n password\r\n } as LoginRequestDTO;\r\n const response = await CommHelper.post\r\n (ApiRoutes.loginUrl(), requestDto, false);\r\n\r\n this.stateManager.session.user = response.data;\r\n this.stateManager.session.token = response.data.token;\r\n\r\n this.signalR.userChanged();\r\n }\r\n\r\n public logout() {\r\n // No need to contact the server, we just forget the session\r\n this.stateManager.session.user = null;\r\n this.stateManager.session.token = undefined;\r\n\r\n this.signalR.userChanged();\r\n }\r\n\r\n public async isTokenValid() {\r\n if (!this.stateManager.session.token) {\r\n return false;\r\n }\r\n\r\n try {\r\n const response = await CommHelper.get(ApiRoutes.usersUrl());\r\n // The server returns a 401 error if the user is not logged in\r\n this.stateManager.session.user = response.data;\r\n return true;\r\n } catch (error) {\r\n this.stateManager.session.user = null;\r\n this.stateManager.session.token = undefined;\r\n localStorage.removeItem('token');\r\n return false;\r\n }\r\n }\r\n\r\n public async forgotPassword(email: string) {\r\n const body = {email} as ResendUserAccountActivationRequestDTO;\r\n try {\r\n await CommHelper.post(ApiRoutes.forgotPasswordUrl(), body);\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n }\r\n\r\n public async register(data: NewUserRequestDTO): Promise {\r\n const response = await CommHelper.post(ApiRoutes.usersUrl(), data, false);\r\n return new UserInfo(response.data);\r\n }\r\n\r\n public async changePassword(data: ResetLoggedInUserPasswordRequestDTO) {\r\n await CommHelper.post(ApiRoutes.changePasswordUrl(), data);\r\n }\r\n\r\n public async changeForgottenPassword(data: ResetForgottenUserPasswordRequestDTO) {\r\n await CommHelper.post(ApiRoutes.changeForgottenPasswordUrl(), data, false);\r\n\r\n // TODO: Figure out if we catch an exception are rethrow a different exception, or leave\r\n // the Axios exception as is\r\n }\r\n\r\n public async activateUser(data: AccountActivationRequestDTO) {\r\n await CommHelper.post(ApiRoutes.confirmRegistartionUrl(), data, false);\r\n }\r\n\r\n\r\n public async updateUser(data: UserUpdateRequestDTO): Promise {\r\n const response = await CommHelper.put(ApiRoutes.usersUrl(), data);\r\n return response.data;\r\n }\r\n\r\n public async reportProblem(data: GithubIssueReportDTO): Promise {\r\n const response = await CommHelper.post(ApiRoutes.reportProblemUrl(), data);\r\n return response.data;\r\n }\r\n}\r\n\r\nexport default SessionService;\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('b-modal',{ref:\"loginModalRef\",attrs:{\"header-class\":\"title-header\",\"footer-class\":\"title-footer\",\"id\":\"loginModal\"},on:{\"shown\":_vm.shown},scopedSlots:_vm._u([{key:\"modal-header\",fn:function(){return [_c('b-row',[_c('b-col',{attrs:{\"cols\":\"12\"}},[_vm._v(\"Log in to your account\")])],1)]},proxy:true},{key:\"modal-footer\",fn:function(){return [_c('div',{staticClass:\"w-100\"},[_c('b-button',{staticClass:\"btn-login-modal\",attrs:{\"block\":\"\",\"variant\":\"primary\",\"disabled\":_vm.disabledLogin},on:{\"click\":_vm.login}},[_vm._v(\" \"+_vm._s(_vm.$t('navbar.login'))+\" \"),(_vm.waiting)?_c('span',[_c('font-awesome-icon',{attrs:{\"icon\":\"spinner\",\"spin\":\"\"}})],1):_vm._e()]),_c('p',{staticClass:\"sign-link\"},[_vm._v(\"Can’t login? \"),_c('b-link',{on:{\"click\":_vm.register}},[_vm._v(\"Sign up\")]),_vm._v(\" for an account here\")],1)],1)]},proxy:true}])},[_c('b-container',{attrs:{\"fluid\":\"\"},on:{\"keyup\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.login.apply(null, arguments)}}},[_c('b-row',{staticClass:\"mb-2\"},[_c('b-col',[_c('b-form-input',{ref:\"email\",attrs:{\"type\":\"email\",\"placeholder\":\"Username or email\"},model:{value:(_vm.email),callback:function ($$v) {_vm.email=$$v},expression:\"email\"}})],1)],1),_c('b-row',{staticClass:\"mb-2\"},[_c('b-col',[_c('b-form-input',{attrs:{\"type\":\"password\",\"placeholder\":\"Password\"},model:{value:(_vm.password),callback:function ($$v) {_vm.password=$$v},expression:\"password\"}})],1)],1),_c('b-row',{staticClass:\"justify-content-end\"},[_c('b-link',{staticClass:\"sign-link\",on:{\"click\":_vm.forgotPassword}},[_vm._v(\" \"+_vm._s(_vm.$t('navbar.forgotPassword'))+\"? \")])],1),_c('b-row',[_c('b-col',{staticClass:\"text-danger\"},[_vm._v(_vm._s(_vm.errorMessage))])],1)],1)],1),_c('forgot-password')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('b-modal',{ref:\"passwordModalRef\",attrs:{\"id\":\"passwordModal\",\"header-class\":\"title-header\",\"footer-class\":\"title-footer\"},on:{\"shown\":_vm.shown},scopedSlots:_vm._u([{key:\"modal-header\",fn:function(){return [_c('b-row',{staticClass:\"mt-3\"},[_c('b-col',{attrs:{\"cols\":\"12\"}},[_vm._v(\"Forgot Password\")])],1)]},proxy:true},{key:\"modal-footer\",fn:function(){return [_c('div',{staticClass:\"w-100\"},[_c('b-button',{staticClass:\"btn-login-modal\",attrs:{\"block\":\"\",\"variant\":\"primary\",\"disabled\":_vm.disabledSubmit},on:{\"click\":_vm.submit}},[_vm._v(\" \"+_vm._s(_vm.$t('navbar.forgotPassword'))+\" \"),(_vm.waiting)?_c('span',[_c('font-awesome-icon',{attrs:{\"icon\":\"spinner\",\"spin\":\"\"}})],1):_vm._e()])],1)]},proxy:true}])},[_c('b-container',{attrs:{\"fluid\":\"\"},on:{\"keyup\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.submit.apply(null, arguments)}}},[_c('b-row',{staticClass:\"mb-2\"},[_c('b-col',[_c('b-form-input',{ref:\"emailRef\",attrs:{\"type\":\"email\",\"id\":\"forgetPass\",\"placeholder\":\"Email\"},model:{value:(_vm.email),callback:function ($$v) {_vm.email=$$v},expression:\"email\"}})],1)],1),_c('b-row',[_c('b-col',{staticClass:\"text-danger\"},[_vm._v(_vm._s(_vm.errorMessage))])],1)],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Emit, Vue } from 'vue-property-decorator';\r\n\r\nimport SessionService from '@/services/session';\r\nimport ErrorService from '@/services/error';\r\n// import ForgotPassword from '@/views/user/ForgotPassword.vue';\r\n\r\n@Component({\r\n name: 'forgot-password',\r\n})\r\n\r\nexport default class ForgotPassword extends Vue {\r\n\r\n // data\r\n\r\n protected email: string = '';\r\n protected errorMessage: string = '';\r\n protected sessionService: SessionService = new SessionService();\r\n protected errorService: ErrorService = new ErrorService(this);\r\n protected waiting: boolean = false;\r\n\r\n\r\n // computed\r\n public get disabledSubmit(): boolean {\r\n return !this.email || this.waiting;\r\n }\r\n\r\n // methods\r\n\r\n protected async submit() {\r\n if (this.disabledSubmit) {\r\n // Can be called due to ENTER key\r\n return;\r\n }\r\n\r\n try {\r\n this.waiting = true;\r\n await this.sessionService.forgotPassword(this.email);\r\n this.close();\r\n\r\n this.$toasted.show(this.$tc('toasts.reset'), {\r\n type: 'info',\r\n position: 'top-right',\r\n duration: 7000,\r\n });\r\n } catch (err) {\r\n this.errorMessage = this.errorService.getErrorMessage(\r\n err.response.data\r\n );\r\n } finally {\r\n this.waiting = false;\r\n }\r\n }\r\n\r\n protected close() {\r\n (this.$refs.passwordModalRef as any).hide();\r\n }\r\n\r\n protected shown() {\r\n this.errorMessage = '';\r\n this.waiting = false;\r\n (this.$refs.emailRef as any).focus();\r\n }\r\n\r\n}\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ForgotPassword.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ForgotPassword.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ForgotPassword.vue?vue&type=template&id=6c057ecd&scoped=true&\"\nimport script from \"./ForgotPassword.vue?vue&type=script&lang=ts&\"\nexport * from \"./ForgotPassword.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6c057ecd\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Emit, Vue } from 'vue-property-decorator';\r\n\r\nimport SessionService from '@/services/session';\r\nimport ErrorService from '@/services/error';\r\nimport ForgotPassword from '@/views/user/ForgotPassword.vue';\r\nimport router from '@/router';\r\n\r\n@Component({\r\n name: 'login',\r\n components: {\r\n ForgotPassword,\r\n }\r\n})\r\n\r\nexport default class Login extends Vue {\r\n\r\n public email: string = '';\r\n // email: this.$state.session ? this.$state.session.user!.email : '',\r\n public password: string = '';\r\n public errorMessage: string = '';\r\n private sessionService: SessionService = new SessionService();\r\n private errorService: ErrorService = new ErrorService(this);\r\n public waiting: boolean = false;\r\n\r\n\r\n public get disabledLogin(): boolean {\r\n return !this.email || !this.password || this.waiting;\r\n }\r\n\r\n public async login() {\r\n if (this.disabledLogin) {\r\n // Can be called due to ENTER key\r\n return;\r\n }\r\n\r\n try {\r\n this.waiting = true;\r\n await this.sessionService.login(this.email, this.password);\r\n this.close();\r\n router.push('/home');\r\n // Reload the personal editions\r\n location.reload();\r\n } catch (err: any) {\r\n this.errorMessage = this.errorService.getErrorMessage(\r\n err.response.data\r\n );\r\n } finally {\r\n this.waiting = false;\r\n }\r\n }\r\n\r\n private close() {\r\n (this.$refs.loginModalRef as any).hide();\r\n }\r\n\r\n public shown(): void {\r\n this.errorMessage = '';\r\n this.waiting = false;\r\n (this.$refs.email! as any).focus();\r\n }\r\n\r\n public forgotPassword() {\r\n this.$root.$emit('bv::show::modal', 'passwordModal');\r\n this.$bvModal.hide('loginModal');\r\n }\r\n\r\n public register() {\r\n this.$root.$emit('bv::show::modal', 'registerModal');\r\n this.$bvModal.hide('loginModal');\r\n }\r\n\r\n}\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Login.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Login.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Login.vue?vue&type=template&id=5279095e&scoped=true&\"\nimport script from \"./Login.vue?vue&type=script&lang=ts&\"\nexport * from \"./Login.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Login.vue?vue&type=style&index=0&id=5279095e&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5279095e\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('b-modal',{ref:\"FaqModalRef\",attrs:{\"header-class\":\"title-header\",\"footer-class\":\"title-footer\",\"id\":\"FaqModal\",\"aria-role\":\"dialog\",\"aria-label\":\"FAQ Modal\",\"scroll\":\"keep\",\"ok-only\":\"\",\"trap-focus\":\"\",\"destroy-on-hide\":true,\"size\":\"lg\"},scopedSlots:_vm._u([{key:\"modal-header\",fn:function(){return [_c('b-row',[_c('b-col',{attrs:{\"cols\":\"12\"}},[_c('b',[_vm._v(_vm._s(((_vm.$t('home.brand')) + \" - \" + (_vm.$t('navbar.faq'))))+\" \")])])],1)]},proxy:true}])},[_c('b-container',{attrs:{\"fluid\":\"\"}},[_c('h2',{attrs:{\"id\":\"where-can-i-find-out-about-the-scripta-qumranica-electronica-project-\"}},[_vm._v(\"Where can I find out about the Scripta Qumranica Electronica project?\")]),_c('p',[_vm._v(\"You can find detailed information about the SQE project at \"),_c('a',{attrs:{\"target\":\"_blank\",\"href\":\"https://qumranica.org\"}},[_vm._v(\"https://qumranica.org\")]),_vm._v(\".\")]),_c('h2',{attrs:{\"id\":\"do-you-have-any-instructional-materials-\"}},[_vm._v(\"Do you have any instructional materials?\")]),_c('p',[_vm._v(\"Yes, you can access the instructional materials HERE.\")]),_c('h2',{attrs:{\"id\":\"why-can-t-i-find-my-favorite-scroll-\"}},[_vm._v(\"Why can't I find my favorite scroll?\")]),_c('p',[_vm._v(\"Currently the SQE platform only contains material images by the IAA. So, you won't yet find scrolls from other places here, for instance: \")]),_c('ul',[_c('li',[_vm._v(\"the great Isaiah scroll is housed at the Shrine of the Book\")]),_c('li',[_vm._v(\"the Copper Scroll is at the Jordan Museum in Amman\")]),_c('li',[_vm._v(\"several of the Cave 1 scrolls are at the BNF\")]),_c('li',[_vm._v(\"there are still others scattered in collections around the world\")])]),_c('p',[_vm._v(\"You will find, however, that we have included a few scrolls/manuscripts from outside the IAA in order to prove that our technology can work with outside data. We include images of 1Q7 from the Bibliothèque nationale de France and also images of the Cairo Geniza Damascus Document (T-S 10K6 and T-S 16.311) from the University of Cambridge Digital Library.\")]),_c('h2',{attrs:{\"id\":\"i-am-looking-for-a-manuscript-that-is-part-of-the-iaa-collection-why-can-t-i-find-it-\"}},[_vm._v(\"I am looking for a manuscript that is part of the IAA collection, why can't I find it?\")]),_c('p',[_vm._v(\"We are still working on organizing some of the IAA images, they will come available as soon as we are able to fix the cataloging issues and any problems with the state of the images.\")]),_c('h2',{attrs:{\"id\":\"how-were-the-fragments-masked-in-the-images-and-why-don-t-they-always-look-right-\"}},[_vm._v(\"How were the fragments masked in the images, and why don't they always look right?\")]),_c('p',[_vm._v(\"The computer science team of the SQE project, led by Nachum Dershowitz, developed a process to automatically find the region of the fragment in an image. Sometimes, this process works great, other times it fails.\")]),_c('p',[_vm._v(\"The good news is that as a registered user you can change the mask yourself and label the fragments however you wish.\")]),_c('h2',{attrs:{\"id\":\"how-come-i-see-the-wrong-text-next-to-a-fragment-\"}},[_vm._v(\"How come I see the wrong text next to a fragment?\")]),_c('p',[_vm._v(\"At first our matching of fragments in an image to the transcribed text is based upon cataloging data, which was not always complete or consistent. The usage of one referencing system for the images and a different one for the texts caused many difficulties, and we have not manually fixed all the errors and lacunae yet.\")]),_c('p',[_vm._v(\"You can always choose proper text reference yourself, and once you link a letter in the transcription to a letter on the fragment, the proper connection between image and transcription will be made for you.\")])])],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Emit, Vue } from 'vue-property-decorator';\r\n\r\n@Component({\r\n name: 'Faq',\r\n components: {\r\n }\r\n})\r\n\r\nexport default class FaqModal extends Vue {\r\n}\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Faq-modal.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Faq-modal.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Faq-modal.vue?vue&type=template&id=ddf01bbc&scoped=true&\"\nimport script from \"./Faq-modal.vue?vue&type=script&lang=ts&\"\nexport * from \"./Faq-modal.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Faq-modal.vue?vue&type=style&index=0&id=ddf01bbc&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"ddf01bbc\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('b-modal',{ref:\"EulaModalRef\",attrs:{\"header-class\":\"title-header\",\"footer-class\":\"title-footer\",\"id\":\"EulaModal\",\"aria-role\":\"dialog\",\"aria-label\":\"EULA Modal\",\"scroll\":\"keep\",\"size\":\"lg\",\"ok-only\":\"\",\"trap-focus\":\"\",\"destroy-on-hide\":true},scopedSlots:_vm._u([{key:\"modal-header\",fn:function(){return [_c('b-row',[_c('b-col',{attrs:{\"cols\":\"12\"}},[_c('b',[_vm._v(_vm._s(_vm.$t('home.brand'))+\" - \"+_vm._s(_vm.$t('navbar.eula'))+\" \")])])],1)]},proxy:true}])},[_c('b-container',{attrs:{\"fluid\":\"\"}},[_c('p',[_vm._v(\"By accessing the Scripta Qumranica Electronica Platform, I hereby declare and agree to the following terms of use as agreed upon by the participating institutions (Göttingen Academy of Sciences and Humanities; Israel Antiquities Authority; Tel Aviv University; University of Göttingen):\")]),_c('ol',[_c('li',[_vm._v(\"I understand that the following personal data will be collected by the API: name, email and organizational affiliation. This information will not be shared with other third parties.\")]),_c('li',[_vm._v(\"I confirm that the information that I submitted is correct and will be used for copyright purposes on the platform.\")]),_c('li',[_vm._v(\"I understand that I may be denied access to the site if I am found in breach of any of the clauses mentioned in these “Terms of Use.”\")]),_c('li',[_vm._v(\"I understand that despite the efforts made to ensure that the images, text and the accompanying metadata are correct, precise and comprehensive, some errors or omissions may have occurred, and I will not hold any of the participating institutions or personnel liable for these errors or omissions or for any ensuing damage of any kind.\")]),_c('li',[_vm._v(\"I confirm that any use of the data on the site will be according to the copyright and license information accompanying the source. I will respect the license accompanying the data and will not use it in a way which is not in concord with the given license.\")]),_c('li',[_vm._v(\"I understand that all scholarly data that I input will be automatically shared within the system once the \\\"Publish\\\" button is pressed. This data will be copyrighted to the name provided by me when I registered and automatically licensed by Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) terms. For details: \"),_c('a',{attrs:{\"target\":\"_blank\",\"href\":\"https://creativecommons.org/licenses/by-sa/4.0/\"}},[_vm._v(\"https://creativecommons.org/licenses/by-sa/4.0/\")]),_vm._v(\".\")]),_c('li',[_vm._v(\"I agree that after I publish material on this platform, my name and email address will be disclosed on this platform.\")]),_c('li',[_vm._v(\"I agree that by publishing my data or work on this platform, I agree that others will use my data and work for free in their studies or publications, in conjunction with the copyright terms of use in the Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) terms. For details: \"),_c('a',{attrs:{\"target\":\"_blank\",\"href\":\"https://creativecommons.org/licenses/by-sa/4.0/\"}},[_vm._v(\"https://creativecommons.org/licenses/by-sa/4.0/\")]),_vm._v(\".\")]),_c('li',[_vm._v(\"All digital images that are provided by the Israel Antiquities Authority are available for use under a Creative Commons Attribution-Non Commercial 4.0 International (CC BY-NC 4.0) terms. For details: \"),_c('a',{attrs:{\"target\":\"_blank\",\"href\":\"https://creativecommons.org/licenses/by-nc/4.0/\"}},[_vm._v(\"https://creativecommons.org/licenses/by-nc/4.0/\")]),_vm._v(\". Use of these images for non-commercial uses such as lectures, public presentations and other educational uses is permitted, with the proper credit as noted in the images and according to the terms of use. For other uses, please contact the IAA visual archive at \"),_c('a',{attrs:{\"href\":\"mailto:visualarchive@israntique.org.il\"}},[_vm._v(\"visualarchive@israntique.org.il\")]),_vm._v(\".\")]),_c('li',[_vm._v(\"Textual reconstructions are the property of the Göttingen Academy of Sciences and Humanities unless otherwise stated. All textual reconstructions are licensed under Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) terms. For details: \"),_c('a',{attrs:{\"target\":\"_blank\",\"href\":\"https://creativecommons.org/licenses/by-sa/4.0/\"}},[_vm._v(\"https://creativecommons.org/licenses/by-sa/4.0/\")]),_vm._v(\".\")]),_c('li',[_vm._v(\"I hereby agree and confirm that the copyright to all data appearing in this website, including identifications annotated transcriptions and joins belong to the respective authors. I declare that I shall respect these rights whenever quoting them, to the authors and the Scripta Qumranica Electronica Platform.\")]),_c('li',[_vm._v(\"I agree to only publish materials on the platform of which I am their sole proprietor and creator which do not infringe upon any proprietary right at common law or any statutory copyright of any other person. The published material will not contain libelous or unlawful matter and will not make improper invasion of privacy of any other person.\")]),_c('li',[_vm._v(\"I agree that the managers of the site will have full discretion to delete or deny access to any content that they deem as inappropriate or in violation of the terms of use. I will not have any claim regarding such actions.\")]),_c('li',[_vm._v(\"I am aware that the participating institutions are not responsible for any demands, losses, costs, legal expenses, proceedings, and claims of any nature that may be taken or brought against them on grounds that the material published by me infringes any rights of any other person.\")]),_c('li',[_vm._v(\"I understand that the Platform is for research purposes, I am aware that the participating institutions are not responsible for any demands, losses, costs, legal expenses, proceedings, and claims of any nature that may occur to me regarding the use of the platform by me or by others, and regarding to claims resulting from my use of the platform or the use of others of the platform.\")]),_c('li',[_vm._v(\"The Scripta Qumranica Electronica Platform shall not be obligated to publish material that they believe breach any of these terms of use.\")]),_c('li',[_vm._v(\"The Scripta Qumranica Electronica Platform shall not be held responsible for data loss.\")]),_c('li',[_vm._v(\"The Scripta Qumranica Electronica Platform shall not be held responsible for any misuse of the platform by the public.\")]),_c('li',[_vm._v(\"The Scripta Qumranica Electronica Platform reserves the right to terminate accounts.\")]),_c('li',[_vm._v(\"The Scripta Qumranica Electronica Platform does not give any warranties.\")]),_c('li',[_vm._v(\"The Scripta Qumranica Electronica Platform is not liable for any mistakes on the platform. If you note any mistakes or misuse, please contact us at \"),_c('a',{attrs:{\"href\":\"mailto:sqe@deadseascrolls.org.il\"}},[_vm._v(\"sqe@deadseascrolls.org.il\")]),_vm._v(\".\")]),_c('li',[_vm._v(\"Any user of the platform must give appropriate credit and may not do so in a way that suggests that the Platform endorses the use.\")])])])],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Emit, Vue } from 'vue-property-decorator';\r\n\r\n@Component({\r\n name: 'EulaModal',\r\n components: {\r\n }\r\n})\r\n\r\nexport default class EulaModal extends Vue {\r\n}\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Eula-modal.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Eula-modal.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Eula-modal.vue?vue&type=template&id=2b1c2e53&scoped=true&\"\nimport script from \"./Eula-modal.vue?vue&type=script&lang=ts&\"\nexport * from \"./Eula-modal.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Eula-modal.vue?vue&type=style&index=0&id=2b1c2e53&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2b1c2e53\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('b-modal',{ref:\"CitationModalRef\",attrs:{\"header-class\":\"title-header\",\"footer-class\":\"title-footer\",\"id\":\"CitationModal\",\"aria-role\":\"dialog\",\"aria-label\":\"Citation Modal\",\"size\":\"lg\",\"scroll\":\"keep\",\"ok-only\":\"\",\"trap-focus\":\"\",\"destroy-on-hide\":true},scopedSlots:_vm._u([{key:\"modal-header\",fn:function(){return [_c('b-row',[_c('b-col',{attrs:{\"cols\":\"12\"}},[_c('b',[_vm._v(_vm._s(((_vm.$t('home.brand')) + \" - Citation\"))+\" \")])])],1)]},proxy:true}])},[_c('b-container',{attrs:{\"fluid\":\"\"}},[_c('p',[_vm._v(\"The images are licensed under a Creative Commons Attribution-Non Commercial 4.0 International (CC BY-NC 4.0). https://creativecommons.org/licenses/by-nc/4.0/ \"),_c('break'),_vm._v(\" You are permitted to use images for non-commercial uses such as lectures, public presentations and other educational uses. To license images for commercial uses such as reproduction, publications, displays, etc., please contact the Israel Antiquities Authority Visual Archive at VisualArchive@israntique.org.il. \"),_c('break'),_vm._v(\" For more information on licensing please contact us at contact@deadseascrolls.org.il\")],1),_c('p',[_vm._v(\" Text © Reinhard G. Kratz \")]),_c('p',[_vm._v(\" Provided by Reinhard G. Kratz, Ingo Kottsieper, and Annette Steudel on the basis of a text provided by the Qumran-Wörterbuch of the Göttingen Academy of Sciences, which is based upon a preliminary text provided by Martin Abegg. \")]),_c('p',[_vm._v(\"This work is licensed under the Creative Commons Attribution-ShareAlike 4.0 International License. To view a copy of this license, visit \"),_c('a',{attrs:{\"href\":\"https://creativecommons.org/licenses/by-sa/4.0/legalcode\"}},[_vm._v(\"https://creativecommons.org/licenses/by-sa/4.0/legalcode\")]),_vm._v(\" or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. \")])])],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Emit, Vue } from 'vue-property-decorator';\r\n\r\n@Component({\r\n name: 'Citation',\r\n components: {\r\n }\r\n})\r\n\r\nexport default class CitationModal extends Vue {\r\n}\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CitationModal.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CitationModal.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./CitationModal.vue?vue&type=template&id=71b47a76&scoped=true&\"\nimport script from \"./CitationModal.vue?vue&type=script&lang=ts&\"\nexport * from \"./CitationModal.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./CitationModal.vue?vue&type=style&index=0&id=71b47a76&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"71b47a76\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('toolbox',[_c('b-button',{staticClass:\"style-button\",attrs:{\"variant\":\"outline-secondary\"},on:{\"click\":function($event){return _vm.openMetadata()}}},[_c('i',{staticClass:\"fa fa-info\"})]),_c('edition-metadata-modal')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\r\nimport EditionMetadataModal from '@/views/edition/components/metadata.vue';\r\nimport { Component, Prop, Vue } from 'vue-property-decorator';\r\nimport Toolbox from './toolbox.vue';\r\n\r\n@Component({\r\n name: 'edition-toolbox',\r\n components: {\r\n 'edition-metadata-modal': EditionMetadataModal,\r\n toolbox: Toolbox\r\n },\r\n})\r\nexport default class EditionToolbox extends Vue {\r\n private openMetadata() {\r\n console.debug('openMetadata called');\r\n this.$root.$emit('bv::show::modal', 'editionMetadataModal');\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edition-toolbox.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edition-toolbox.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./edition-toolbox.vue?vue&type=template&id=09d02227&scoped=true&\"\nimport script from \"./edition-toolbox.vue?vue&type=script&lang=ts&\"\nexport * from \"./edition-toolbox.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./edition-toolbox.vue?vue&type=style&index=0&id=09d02227&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"09d02227\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('b-modal',{ref:\"ReportProblemModalRef\",attrs:{\"title\":\"Report Problem\",\"footer-class\":\"title-footer\",\"id\":\"ReportProblemModal\",\"aria-role\":\"dialog\",\"size\":\"lg\"},scopedSlots:_vm._u([{key:\"modal-footer\",fn:function(){return [(!_vm.reported)?_c('b-button',{attrs:{\"disabled\":!_vm.readyToReport},on:{\"click\":_vm.reportProblem}},[_vm._v(\" \"+_vm._s(_vm.$t('misc.report'))+\" \")]):_vm._e(),(_vm.reported)?_c('span',[_vm._v(\"Issue Reported\")]):_vm._e(),(_vm.reported)?_c('b-button',{on:{\"click\":_vm.close}},[_vm._v(\"Close\")]):_vm._e()]},proxy:true}])},[_c('form',[_c('b-row',[_c('b-col',{attrs:{\"cols\":\"12\"}},[(!_vm.loggedIn)?_c('b-row',{staticClass:\"mb-2\"},[_c('b-col',[_c('b-form-input',{attrs:{\"type\":\"text\",\"placeholder\":\"User Name\",\"disabled\":_vm.reported},model:{value:(_vm.username),callback:function ($$v) {_vm.username=$$v},expression:\"username\"}})],1)],1):_vm._e(),_c('b-row',{staticClass:\"mb-2\"},[_c('b-col',[_c('b-form-input',{attrs:{\"type\":\"text\",\"placeholder\":\"Title\",\"disabled\":_vm.reported},model:{value:(_vm.title),callback:function ($$v) {_vm.title=$$v},expression:\"title\"}})],1)],1),_c('b-row',[_c('b-col',[_c('b-form-textarea',{attrs:{\"id\":\"textarea\",\"placeholder\":\"Description Problem\",\"rows\":\"3\",\"max-rows\":\"6\",\"disabled\":_vm.reported},model:{value:(_vm.description),callback:function ($$v) {_vm.description=$$v},expression:\"description\"}})],1)],1)],1)],1)],1)])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport SessionService from '@/services/session';\nimport { Component, Prop, Emit, Vue } from 'vue-property-decorator';\n\n@Component({\n name: 'ReportProblemModal',\n components: {},\n})\nexport default class ReportProblemModal extends Vue {\n public username: string = '';\n public description: string = '';\n public title = '';\n public reported = false;\n protected sessionService: SessionService = new SessionService();\n\n public get readyToReport() {\n return (this.loggedIn || this.username.trim() !== '') && this.title.trim() !== '' && this.description.trim() !== '';\n }\n\n public get loggedIn() {\n return !!this.$state.session.user;\n }\n\n public async reportProblem() {\n let actualUsername = this.username;\n if (this.loggedIn) {\n actualUsername = this.$state.session.user?.email || '';\n }\n if (!actualUsername) {\n actualUsername = 'Not Specified';\n }\n const titleWithUserName = this.title + ' (' + actualUsername + ')';\n await this.sessionService.reportProblem({\n username: actualUsername,\n title: titleWithUserName,\n comment: this.description,\n url: window.location.toString(),\n });\n this.reported = true;\n }\n\n public close() {\n (this.$refs.ReportProblemModalRef as any).hide();\n }\n\n public mounted() {\n this.$root.$on('bv::modal::show', (bvEvent: any, modalId: string) => {\n if (modalId === 'ReportProblemModal') {\n this.init();\n }\n });\n }\n\n private init() {\n this.reported = false;\n this.username = '';\n this.title = this.$state.misc.reportIssueData?.title || '';\n this.description = this.$state.misc.reportIssueData?.description || '';\n this.$state.misc.reportIssueData = undefined;\n }\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./report-problem-modal.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./report-problem-modal.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./report-problem-modal.vue?vue&type=template&id=c1d0d0ce&scoped=true&\"\nimport script from \"./report-problem-modal.vue?vue&type=script&lang=ts&\"\nexport * from \"./report-problem-modal.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./report-problem-modal.vue?vue&type=style&index=0&id=c1d0d0ce&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"c1d0d0ce\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Vue } from 'vue-property-decorator';\nimport { localizedTexts } from '@/i18n';\nimport SessionService from '@/services/session';\nimport Login from './Login.vue';\nimport FaqModal from './Faq-modal.vue';\nimport EulaModal from './Eula-modal.vue';\nimport CitationModal from './CitationModal.vue';\n// import ScreenSizeAlert from '../../views/home/components/ScreenSizeAlert.vue';\nimport router from '@/router';\nimport { EditionInfo } from '../../models/edition';\nimport { BIcon, BIconSearch, BIconPersonFill, BIconList } from 'bootstrap-vue';\nimport Registration from '@/views/user/Registration.vue';\nimport ToolbarIconButton from '../toolbars/toolbar-icon-button.vue';\nimport EditionToolbox from '../toolbars/edition-toolbox.vue';\nimport ReportProblemModal from './report-problem-modal.vue';\n\n@Component({\n name: 'navbar',\n components: {\n login: Login,\n 'faq-modal': FaqModal,\n 'eula-modal': EulaModal,\n 'citation-modal': CitationModal,\n 'edition-toolbox': EditionToolbox,\n 'report-problem-modal': ReportProblemModal,\n register: Registration,\n // 'screen-size-alert': ScreenSizeAlert,\n BIcon,\n BIconSearch,\n BIconPersonFill,\n BIconList,\n },\n})\nexport default class Navbar extends Vue {\n private sessionService = new SessionService();\n private currentLanguage = 'en';\n private allTexts = localizedTexts;\n\n public get edition() {\n return this.$state.editions.current;\n }\n\n protected get operationsManager() {\n return this.$state.operationsManager;\n }\n\n protected get showOperationsManager() {\n return (\n !!this.operationsManager &&\n !!this.edition &&\n !this.edition.permission.readOnly\n );\n }\n\n protected onUndo() {\n this.operationsManager!.undo();\n }\n\n protected onRedo() {\n this.operationsManager!.redo();\n }\n\n public goHome() {\n this.$router.push({ path: '/' });\n }\n\n public goGuide() {\n window.open(\n 'https://sway.office.com/oiGhObqnG1IODSgZ?ref=Link',\n '_blank'\n );\n }\n\n public goPrivate() {\n this.$router.push({ path: '/home/private' });\n }\n public goPublic() {\n this.$router.push({ path: '/home/public' });\n }\n\n public goAbout() {\n window.open(' https://www.qumranica.org/', '_blank');\n }\n\n public showFAQModal() {\n this.$root.$emit('bv::show::modal', 'FaqModal');\n }\n\n public reportProblemModal() {\n this.$root.$emit('bv::show::modal', 'ReportProblemModal');\n }\n\n public showEulaModal() {\n this.$root.$emit('bv::show::modal', 'EulaModal');\n }\n\n public showCitation() {\n this.$root.$emit('bv::show::modal', 'CitationModal');\n }\n\n public contactUs() {\n location.href = 'mailto:sqe@deadseascrolls.org.il';\n }\n\n public get editionBadgeClass() {\n if (!this.edition) {\n return '';\n }\n return this.edition.isPublic\n ? 'status-badge-published'\n : 'status-badge-draft';\n }\n\n public get editionBadge() {\n if (!this.edition) {\n return '';\n }\n\n return this.edition.isPublic ? 'Published' : 'Draft';\n }\n\n public get artefactLink() {\n if (this.$state.artefacts.current) {\n return `/editions/${this.edition!.id}/artefacts/${\n this.$state.artefacts.current.id\n }`;\n }\n return `/editions/${this.edition!.id}/artefacts/`;\n }\n\n public get artefactLabel() {\n return this.$state.artefacts.current ? 'Artefact' : 'Artefacts';\n }\n\n public get imagedObjectLink() {\n if (this.$state.imagedObjects.current) {\n return `/editions/${\n this.edition!.id\n }/imaged-objects/${encodeURIComponent(\n this.$state.imagedObjects.current.id\n )}`;\n }\n return `/editions/${this.edition!.id}/imaged-objects/`;\n }\n\n public get imagedObjectLabel() {\n return this.$state.imagedObjects.current\n ? 'Imaged Object'\n : 'Imaged Objects';\n }\n\n public get userNameExists(): boolean {\n return undefined !== this.userName;\n }\n\n public get userName(): string | undefined {\n if (this.$state.session.user) {\n return (\n this.$state.session.user.forename +\n ' ' +\n this.$state.session.user.surname\n );\n }\n return undefined;\n }\n\n public get isActive(): boolean {\n return this.$state.session.user\n ? this.$state.session.user.activated\n : false;\n }\n\n private get currentEdition(): EditionInfo | null {\n return this.$state.editions.current;\n }\n\n private changeLanguage(language: string) {\n this.$i18n.locale = language;\n this.$state.session.language = language;\n this.currentLanguage = language;\n\n // We can't implement currentLanguage as a computed property, because $state.session.language is a getter, and\n // Vue doesn't handle getter changes very well.\n }\n\n private mounted() {\n this.currentLanguage = this.$state.session.language;\n }\n\n public logout() {\n this.sessionService.logout();\n router.push('/');\n location.reload();\n }\n\n public login() {\n this.$root.$emit('bv::show::modal', 'loginModal');\n }\n\n public changePassword() {\n router.push('/changePassword');\n }\n\n public updateUserDetails() {\n router.push('/updateUserDetails');\n }\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navbar.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navbar.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Navbar.vue?vue&type=template&id=6e3f8904&\"\nimport script from \"./Navbar.vue?vue&type=script&lang=ts&\"\nexport * from \"./Navbar.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Navbar.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('b-modal',{ref:\"corruptedModalRef\",attrs:{\"id\":\"corrupted-state-dialog\",\"header-class\":\"title-header\",\"footer-class\":\"title-footer\"},scopedSlots:_vm._u([{key:\"modal-footer\",fn:function(){return [_c('div',{staticClass:\"w-100\"},[_c('b-button',{attrs:{\"variant\":\"outline-primary\"},on:{\"click\":function($event){return _vm.reloadPage()}}},[_vm._v(\"Reload\")])],1)]},proxy:true}])},[_c('div',[_c('label',[_vm._v(\" We are facing some issues, please reload this page\")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Vue } from 'vue-property-decorator';\r\n\r\n@Component({\r\n name: 'corrupted-state-dialog',\r\n})\r\nexport default class CorruptedStateDialog extends Vue {\r\n public reloadPage() {\r\n this.$router.go(0);\r\n (this.$refs.corruptedModalRef as any).hide();\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CorruptedStateDialog.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--13-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CorruptedStateDialog.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./CorruptedStateDialog.vue?vue&type=template&id=5dd22b8c&\"\nimport script from \"./CorruptedStateDialog.vue?vue&type=script&lang=ts&\"\nexport * from \"./CorruptedStateDialog.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('b-modal',{ref:\"ScreenSizeAlertRef\",attrs:{\"id\":\"ScreenSizeAlertModal\",\"header-class\":\"title-header\",\"footer-class\":\"title-footer\",\"aria-role\":\"dialog\",\"aria-label\":\"Screen Size Alert Modal\",\"header-bg-variant\":\"dark\",\"header-text-variant\":\"light\",\"bg-variant\":\"dark\",\"text-variant\":\"light\",\"size\":\"lg\",\"width\":2000,\"height\":2000,\"ok-only\":\"\",\"destroy-on-hide\":false,\"clickToClose\":false,\"no-close-on-backdrop\":true,\"visible\":_vm.visible},scopedSlots:_vm._u([{key:\"modal-header\",fn:function(){return [_c('div',{attrs:{\"w-100\":\"\",\"m-3\":\"\",\"p-3\":\"\"}},[_c('h1',{attrs:{\"text-center\":\"\"}},[_c('b',[_vm._v(\"This screen size is not supported yet. \")])])])]},proxy:true}])},[_c('div',{attrs:{\"w-100\":\"\",\"m-3\":\"\",\"p-3\":\"\"}},[_c('span',[_vm._v(\"Please switch to your desktop or laptop or resize your screen. \")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Component, Prop, Vue } from 'vue-property-decorator';\r\n\r\n@Component({\r\n name: 'ScreenSizeAlert',\r\n components: {\r\n }\r\n})\r\n\r\nexport default class ScreenSizeAlert extends Vue {\r\n\r\n @Prop({default: false}) private visible!: boolean ;\r\n\r\n}\r\n\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--13-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./screen-size-alert.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--13-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./screen-size-alert.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./screen-size-alert.vue?vue&type=template&id=d5a50b0e&scoped=true&\"\nimport script from \"./screen-size-alert.vue?vue&type=script&lang=ts&\"\nexport * from \"./screen-size-alert.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./screen-size-alert.vue?vue&type=style&index=0&id=d5a50b0e&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"d5a50b0e\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\n\r\nimport { Component, Prop, Emit, Vue } from 'vue-property-decorator';\r\n\r\nimport Navbar from '@/components/navigation/Navbar.vue';\r\nimport Waiting from '@/components/misc/Waiting.vue';\r\nimport SessionService from '@/services/session';\r\nimport { StateManager } from './state';\r\nimport CorruptedStateDialog from '@/components/misc/CorruptedStateDialog.vue';\r\n\r\nimport ScreenSizeAlert from './views/home/components/screen-size-alert.vue';\r\n\r\n\r\n@Component({\r\n name: 'app',\r\n components: {\r\n Navbar,\r\n Waiting,\r\n CorruptedStateDialog,\r\n 'screen-size-alert': ScreenSizeAlert,\r\n }\r\n})\r\n\r\nexport default class App extends Vue {\r\n\r\n private waiting: boolean = true;\r\n private alertVisible: boolean = false;\r\n\r\n private created() {\r\n // Set the language\r\n this.$i18n.locale = this.$state.session.language;\r\n this.initializeApp();\r\n // Corrupted state event listener\r\n this.$state.eventBus.on(\r\n 'corrupted-state',\r\n this.openCorruptedStateDialog\r\n );\r\n\r\n\r\n this.$nextTick( () =>\r\n window.addEventListener('resize', this.showScreenSizeAlert)\r\n );\r\n }\r\n\r\n private destroyed() {\r\n this.$state.eventBus.off(\r\n 'corrupted-state',\r\n this.openCorruptedStateDialog\r\n );\r\n\r\n this.$nextTick( () =>\r\n window.removeEventListener('resize', this.showScreenSizeAlert)\r\n );\r\n }\r\n\r\n\r\n\r\n private showScreenSizeAlert(e: Event ) {\r\n e.preventDefault();\r\n\r\n const curOW = window.outerWidth;\r\n\r\n if ( curOW < 1000 ) {\r\n this.alertVisible = true;\r\n\r\n this.$nextTick( () => {\r\n this.alertVisible = true;\r\n this.$root.$bvModal.show('screen-size-alert');\r\n\r\n });\r\n\r\n } else {\r\n this.alertVisible = false;\r\n\r\n this.$nextTick( () => {\r\n this.alertVisible = false;\r\n this.$root.$bvModal.hide('screen-size-alert');\r\n });\r\n }\r\n\r\n\r\n }\r\n private async initializeApp() {\r\n const session = new SessionService();\r\n await session.isTokenValid();\r\n this.waiting = false;\r\n }\r\n\r\n private openCorruptedStateDialog() {\r\n this.$root.$emit('bv::show::modal', 'corrupted-state-dialog');\r\n }\r\n\r\n}\r\n\r\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--13-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/ts-loader/index.js??ref--13-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--13-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/ts-loader/index.js??ref--13-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=c8c65226&\"\nimport script from \"./App.vue?vue&type=script&lang=ts&\"\nexport * from \"./App.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./App.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import _Vue from 'vue';\r\n\r\nexport class RenderScalingData {\r\n public constructor(public image: number, public canvas: number) {\r\n\r\n }\r\n\r\n public get combined() {\r\n return this.canvas * this.image;\r\n }\r\n}\r\n\r\nexport interface RenderingOptimizationData {\r\n scalingFactors: RenderScalingData;\r\n}\r\n\r\nexport default function RenderingOptimizationPlugin(vue: typeof _Vue, options?: any): void {\r\n // TODO: Let a function calculate this based on the current browser abilities\r\n vue.prototype.$render = {\r\n scalingFactors: new RenderScalingData(2, 4),\r\n } as RenderingOptimizationData;\r\n}\r\n","import Vue from 'vue';\r\nimport App from './App.vue';\r\nimport router from './router';\r\n// TODO can we add or find a .d.ts file for this?\r\nimport VueLazyload from 'vue-lazyload';\r\n\r\n// Bootstrap\r\nimport BootstrapVue from 'bootstrap-vue';\r\nimport 'bootstrap/dist/css/bootstrap.css';\r\nimport 'bootstrap-vue/dist/bootstrap-vue.css';\r\n\r\n// Font awesome\r\nimport { library } from '@fortawesome/fontawesome-svg-core';\r\nimport { faLanguage, faSpinner, faSearch, faRedo, faUndo, faArrowsAlt, faSync, faTrashAlt, faMinus, faPlus, faSquare, faPen,\r\n faMousePointer, faTrash, faEraser, faArrowDown, faArrowUp, faArrowLeft, faArrowRight, faSortAlphaDown, faSortAlphaUp, faInfo, faFont} from '@fortawesome/free-solid-svg-icons';\r\nimport { FontAwesomeIcon } from '@fortawesome/vue-fontawesome';\r\n\r\n// Other plugins\r\nimport Toasted from 'vue-toasted';\r\nimport VueShortcuts from 'vue-shortcuts';\r\nimport RenderingOptimizationPlugin from './plugins/rendering-optimization';\r\n\r\n// i18n\r\nimport VueI18n from 'vue-i18n';\r\nimport { localizedTexts } from './i18n';\r\nimport { StateManager } from './state';\r\n\r\n// vue2-hammer\r\nimport { VueHammer } from 'vue2-hammer';\r\nimport VueVirtualScroller from 'vue-virtual-scroller';\r\nimport 'vue-virtual-scroller/dist/vue-virtual-scroller.css';\r\n\r\n// tslint:disable-next-line\r\nconst CKEditor = require('@ckeditor/ckeditor5-vue');\r\n\r\n\r\n// import AsyncComputed from 'vue-async-computed';\r\n\r\nVue.config.productionTip = false;\r\n\r\n// TODO use a real loading image and add an error image\r\n// TODO do we need a polyfill for Intersection Observer?\r\nVue.use(VueLazyload, {\r\n /*error: 'dist/error.png',*/\r\n loading: require('@/assets/images/rings.svg'),\r\n observer: true,\r\n observerOptions: {\r\n rootMargin: '0px',\r\n threshold: 0.5\r\n }\r\n});\r\n\r\nVue.prototype.$state = StateManager.instance;\r\nVue.use(BootstrapVue);\r\n\r\nlibrary.add(faLanguage, faSpinner, faSearch, faUndo, faRedo, faArrowsAlt, faSync, faTrashAlt, faMinus, faPlus, faInfo, faFont,\r\n faSquare, faPen, faMousePointer, faEraser, faTrash, faArrowUp, faArrowDown, faArrowLeft, faArrowRight, faSortAlphaUp, faSortAlphaDown );\r\nVue.component('font-awesome-icon', FontAwesomeIcon);\r\n\r\nVue.use(VueI18n);\r\nconst i18n = new VueI18n({\r\n locale: 'en',\r\n messages: localizedTexts,\r\n});\r\n\r\nVue.use(Toasted);\r\nVue.use(VueShortcuts, { prevent: ['input'] });\r\nVue.use(RenderingOptimizationPlugin);\r\n\r\nVue.use(VueHammer);\r\nVue.use(CKEditor);\r\n\r\nVue.use(VueVirtualScroller);\r\n\r\nrouter.beforeEach((to, from, next) => {\r\n if (to.matched.some((record) => record.meta.activeUserRoute)) {\r\n // this route requires activated user\r\n // if not, redirect to home page.\r\n if (StateManager.instance.session.user ? StateManager.instance.session.user.activated : false) {\r\n // We know it's ugly but we do not have a vue instance, and that's how we can know what the value is.\r\n next();\r\n } else {\r\n next({ path: '/' });\r\n }\r\n } else {\r\n next(); // make sure to always call next()!\r\n }\r\n});\r\n\r\nnew Vue({\r\n router,\r\n i18n,\r\n render: (h) => h(App),\r\n}).$mount('#app');\r\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edition-results.vue?vue&type=style&index=0&id=d54b7722&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./imaged-object-editor-toolbar.vue?vue&type=style&index=0&id=37521224&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ChangeForgottenPassword.vue?vue&type=style&index=0&id=f24807b8&scoped=true&lang=css&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./text-sign.vue?vue&type=style&index=0&id=2017e88b&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./rotation-toolbox.vue?vue&type=style&index=0&id=c2e1679e&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./manuscript-toolbar.vue?vue&type=style&index=0&id=e32f306a&lang=scss&scoped=true&\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./personal-editions.vue?vue&type=style&index=0&id=0d76e254&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./artefact-results.vue?vue&type=style&index=0&id=647389fb&lang=scss&scoped=true&\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./artefact-card.vue?vue&type=style&index=0&id=1c20661c&lang=scss&scoped=true&\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./artefacts.vue?vue&type=style&index=0&id=2cda6dbd&scoped=true&lang=css&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./delete-line-modal.vue?vue&type=style&index=1&lang=scss&\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAB/lBMVEUAAAAAAAAAAAAAAAADAwMICAgAAAAcGxoAAAACAgIBAQEAAAAcGxoAAAACAgIGBgZrZ2Sln5q0rag2NDPIwLv99e7/+PHHwLv+9O3/9e7/9/D+9e7o3NTNvrP78eqkn5r88+zKuq9wVUNVOCPPwLWzraj/9u+/rqJUNiFGJhBFJg+JcWH57+f/9vD98+z78enp3dRnTDhIKRNHKBJQMhyBaFech3ijjoCjj4CkkIKnk4Wql4mdiHmKc2KAZ1aOd2efinvOv7T98+usmYxFJhBGJxBGJxFEJQ5dQCzi1Mvy5t5vVEJsUj/s4NhcPytFJQ9NLxpgRDBnSzhmSjdaPSlRNB5ZPCdJKhXSxLn57ufMvLGUfm+IcWB+ZVRTNiF+ZlTq3dXw5Nzv49vh08rTxbrbzcNEJA7Jua6QempTNSDXyb//+vP/9e//+fLn29JlSjZ0WkjWyL3x5t52XUtiRjLr4Nft4tl6YU9jRzPh1MvGtqpKLBZuVEH06eH68emZhHRNLhm6qZzVxrxkSTVxV0X26+P57+iijn+WgHH68OmzoZR9ZVP67+jLu7BPMRyEbFvw5d21o5aPeWmzoZNMLRiAaFf78OlsUT7z6OBlSTZtUj+Ca1n88uuLdGOMdWX06OGchndpTjvy5995YE6knpqPeGjSw7nl2dBrZ2X///+k0z0NAAAAD3RSTlMAEW3L9h+p+R4QqxD4yvWPz5MjAAAAAWJLR0SpJw8GBAAAAAlwSFlzAAAuIwAALiMBeKU/dgAAAAd0SU1FB+IHCws1A8UUN9UAAAHRSURBVDjLY2BgYGRiZuHHAliYmRgZgICVjV1AUAgLEBRgZ+NgYODkEhYRFcMKREWE2bgZmHjExSTAQFJKAg2IifMwMfAKSEN4UjKycugqpAV4GfjkIQYoKCopq6CbISbIx8CvClagpq6hqaWtoysFBmp6+hK6ukAFqvwM/EIgBWoGhppGxiamZuYWllbWVja2dvYOjk4SYkJwBc5GQGDsAgSarm6uLlpaWu4enmpwBZJe3ppGEODm5mZsbAxkuPj4SsIVqHn6ufu7AIXdAgKDgkNCw8KNNAMj1JCsiIyKjomNMzaKV0xITEpOSTVM80gHORKuQEJKWk8uwz8zKztHUlItNy+/oBAUPEgKgO4oKnYvKZUEubisvKISLIqiQKqq2qWmFqhAsq6+oVFNAkOBWlOzf0srUEFbe0NHpzSmAgmpLv/uHiDV29c/QVICiwKxie6TgBrVVCZPUJPApkBKdsrUaRAfSWBXkNU3fYYkamyiKFDLmzmrFp8CCb3Z/XMk8CronyuBV4HEPJ/5eK1QW7BwERYFqnAFUlaLe9CsACY5viUIK5Z2oLtBng+R7IFg2fIczGSPyDhAR0ijGQDKONxsBLIeAwcb+wp8mZdQ9gcAekeMIpKmWnEAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTgtMDctMTFUMTE6NTM6MDMrMDI6MDDh0lXyAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE4LTA3LTExVDExOjUzOjAzKzAyOjAwkI/tTgAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAABJRU5ErkJggg==\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./edition-card.vue?vue&type=style&index=0&id=64714736&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./artefact-toolbox.vue?vue&type=style&index=0&id=234511ed&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./text-side.vue?vue&type=style&index=0&id=4601da89&lang=scss&scoped=true&\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./imaged-object-card.vue?vue&type=style&index=0&id=60f3216f&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./toolbar-icon-button.vue?vue&type=style&index=0&id=76744e82&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./artefact-layer.vue?vue&type=style&index=0&id=f8e8fa58&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./main.vue?vue&type=style&index=0&id=773cdfb5&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./text-toolbar.vue?vue&type=style&index=0&id=c2ccd37e&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./text-line.vue?vue&type=style&index=0&id=1dfa1c62&lang=scss&scoped=true&\""],"sourceRoot":""}