nuxeo-development-framework 3.1.2 → 3.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/nuxeo-development-framework.umd.js +29365 -0
- package/bundles/nuxeo-development-framework.umd.js.map +1 -0
- package/esm2015/lib/Core/adapters/adapter.service.js +50 -0
- package/esm2015/lib/Core/core.module.js +107 -0
- package/esm2015/lib/Core/enums/language.enum.js +6 -0
- package/esm2015/lib/Core/models/component.model.js +8 -0
- package/esm2015/lib/Core/services/callApi/call-api.service.js +33 -0
- package/esm2015/lib/Core/services/extension/action.extensions.js +9 -0
- package/esm2015/lib/Core/services/extension/component-register.service.js +25 -0
- package/esm2015/lib/Core/services/extension/extenion-utils.js +115 -0
- package/esm2015/lib/Core/services/extension/extension-element.js +2 -0
- package/esm2015/lib/Core/services/extension/extension-loader.service.js +127 -0
- package/esm2015/lib/Core/services/extension/extension.service.js +120 -0
- package/esm2015/lib/Core/services/initialization/initialization.service.js +57 -0
- package/esm2015/lib/Core/services/localStorag/local-storag.service.js +123 -0
- package/esm2015/lib/Core/services/nuxeo/nuxeo-override.js +82 -0
- package/esm2015/lib/Core/services/nuxeo/nuxeo.service.js +120 -0
- package/esm2015/lib/Core/services/roles/roles.service.js +119 -0
- package/esm2015/lib/Core/services/translation/translate-loader.service.js +150 -0
- package/esm2015/lib/Core/services/translation/translation.service.js +174 -0
- package/esm2015/lib/Core/services/user/user-preferences.service.js +153 -0
- package/esm2015/lib/Core/utilities/moment-date-adapter.js +178 -0
- package/esm2015/lib/Core/utilities/utility.service.js +81 -0
- package/esm2015/lib/components/activities-log/activities-log/activities-log.component.js +115 -0
- package/esm2015/lib/components/activities-log/activities-log/activities-log.service.js +35 -0
- package/esm2015/lib/components/activities-log/activities-log.module.js +30 -0
- package/esm2015/lib/components/activity/activity/activity.component.js +28 -0
- package/esm2015/lib/components/activity/activity.module.js +37 -0
- package/esm2015/lib/components/attachment-item/attachment-item/attachment-item.component.js +54 -0
- package/esm2015/lib/components/attachment-item/attachment-item.module.js +44 -0
- package/esm2015/lib/components/attachment-modal/attachment-modal.module.js +40 -0
- package/esm2015/lib/components/attachment-modal/attachments/attachments.component.js +157 -0
- package/esm2015/lib/components/avatar/avatar/avatar.component.js +55 -0
- package/esm2015/lib/components/avatar/avatar.module.js +32 -0
- package/esm2015/lib/components/card/card.component.js +48 -0
- package/esm2015/lib/components/card/card.module.js +23 -0
- package/esm2015/lib/components/comments/comments.module.js +82 -0
- package/esm2015/lib/components/comments/components/comment-item/comment-item.component.js +86 -0
- package/esm2015/lib/components/comments/components/comments-dashlet/comments-dashlet.component.js +81 -0
- package/esm2015/lib/components/comments/components/comments-list/comments-list.component.js +73 -0
- package/esm2015/lib/components/comments/components/edit-delete-modal/edit-delete-modal.component.js +63 -0
- package/esm2015/lib/components/comments/constants/comment.js +25 -0
- package/esm2015/lib/components/comments/services/comment-api.service.js +71 -0
- package/esm2015/lib/components/confirm-caller/confirm-caller.dialog.js +75 -0
- package/esm2015/lib/components/confirm-caller/confirm-caller.module.js +27 -0
- package/esm2015/lib/components/confirm-caller/confirm-dialog/confirm-dialog.component.js +29 -0
- package/esm2015/lib/components/confirmation-dialog/confirmation-dialog/confirmation-dialog.component.js +30 -0
- package/esm2015/lib/components/confirmation-dialog/confirmation-dialog.module.js +30 -0
- package/esm2015/lib/components/correspondence-relation/components/correspondence-relation/correspondence-relation.component.js +137 -0
- package/esm2015/lib/components/correspondence-relation/components/correspondence-relation-create-form/correspondence-relation-create-form.component.js +133 -0
- package/esm2015/lib/components/correspondence-relation/components/correspondence-relation-list/correspondence-relation-list.component.js +110 -0
- package/esm2015/lib/components/correspondence-relation/components/correspondence-relation-reply/correspondence-relation-reply.component.js +68 -0
- package/esm2015/lib/components/correspondence-relation/components/versions/versions.component.js +75 -0
- package/esm2015/lib/components/correspondence-relation/correspondence-relation.module.js +111 -0
- package/esm2015/lib/components/correspondence-relation/services/correspondence-realation.service.js +153 -0
- package/esm2015/lib/components/correspondence-relation/services/viewer-files.service.js +50 -0
- package/esm2015/lib/components/create-entity/create-entity/create-entity.component.js +69 -0
- package/esm2015/lib/components/create-entity/create-entity.module.js +36 -0
- package/esm2015/lib/components/cts-tags/components/correspondence-tags/correspondence-tags.component.js +140 -0
- package/esm2015/lib/components/cts-tags/cts-tags.module.js +65 -0
- package/esm2015/lib/components/cts-tags/services/tags-api.service.js +90 -0
- package/esm2015/lib/components/custom-toastr/components/custom-toastr/custom-toastr.component.js +82 -0
- package/esm2015/lib/components/custom-toastr/custom-toastr.module.js +36 -0
- package/esm2015/lib/components/custom-toastr/interfaces/toast-type.interface.js +2 -0
- package/esm2015/lib/components/custom-toastr/services/custom-toastr.service.js +41 -0
- package/esm2015/lib/components/display-suitable-icon/display-suitable-icon/display-suitable-icon.component.js +44 -0
- package/esm2015/lib/components/display-suitable-icon/display-suitable-icon/icon.service.js +140 -0
- package/esm2015/lib/components/display-suitable-icon/display-suitable-icon.module.js +24 -0
- package/esm2015/lib/components/documents/components/attachments-list/attachments-list.component.js +156 -0
- package/esm2015/lib/components/documents/components/attachments-page-provider/attachments-page-provider.component.js +75 -0
- package/esm2015/lib/components/documents/components/document-list/documents-list.component.js +252 -0
- package/esm2015/lib/components/documents/components/document-scan/document-scan.component.js +974 -0
- package/esm2015/lib/components/documents/components/document-scan/document-scan.service.js +30 -0
- package/esm2015/lib/components/documents/components/document-upload/document-upload.component.js +159 -0
- package/esm2015/lib/components/documents/components/documents/documents.component.js +63 -0
- package/esm2015/lib/components/documents/constants/document-templates.js +32 -0
- package/esm2015/lib/components/documents/constants/documents.js +86 -0
- package/esm2015/lib/components/documents/documents.module.js +123 -0
- package/esm2015/lib/components/documents/services/document-templates.service.js +115 -0
- package/esm2015/lib/components/documents/services/documents.service.js +223 -0
- package/esm2015/lib/components/dynamic-chart/dynamic-chart/dynamic-chart.component.js +391 -0
- package/esm2015/lib/components/dynamic-chart/dynamic-chart.module.js +34 -0
- package/esm2015/lib/components/dynamic-chart/dynamic-single-chart/dynamic-single-chart.component.js +164 -0
- package/esm2015/lib/components/dynamic-chart/services/chart-data.service.js +552 -0
- package/esm2015/lib/components/dynamic-fields-renderer/dynamic-fields-renderer/dynamic-fields-renderer.component.js +177 -0
- package/esm2015/lib/components/dynamic-fields-renderer/dynamic-fields-renderer.module.js +43 -0
- package/esm2015/lib/components/dynamic-filter/dynamic-filter/dynamic-filter.component.js +137 -0
- package/esm2015/lib/components/dynamic-filter/dynamic-filter.module.js +27 -0
- package/esm2015/lib/components/dynamic-form/components/department-form/department-form.component.js +130 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form/dynamic-form.component.js +105 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form/fields.adapter.js +127 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form/form-builder.service.js +107 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-boolitem/dynamic-form-boolitem.component.js +35 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-builder/dynamic-form-builder.component.js +165 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-checkbox-item/dynamic-form-checkbox-item.component.js +71 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-dateitem/dynamic-form-dateitem.component.js +202 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-dateitem/owlDateTimeIntl.js +78 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-department/constants/department.js +13 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-department/dynamic-form-department.component.js +204 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-department/services/department-api.service.js +203 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-department/services/department-management.service.js +95 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-field/dynamic-form-field.component.js +85 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-hijri-dateitem/dynamic-form-hijri-dateitem.component.js +139 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-item-dispatcher/dynamic-form-item-dispatcher.component.js +81 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-mapitem/dynamic-form-mapitem.component.js +36 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-options/dynamic-form-options.component.js +106 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-select-tag/dynamic-form-select-tag.component.js +93 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-select-user-filter/dynamic-form-select-user-filter.component.js +207 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-select-users/dynamic-form-select-users.component.js +311 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-select-users/services/user-api.service.js +44 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-selectitem/dynamic-form-selectitem.component.js +191 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-slide-toggleitem/dynamic-form-slide-toggleitem.component.js +81 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-textarea/dynamic-form-textarea.component.js +180 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-textitem/dynamic-form-textitem.component.js +279 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-treeview-select/dropdown-treeview-select-i18n.js +68 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-treeview-select/dropdown-treeview-select.component.js +314 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-viewer/dynamic-form-viewer.component.js +47 -0
- package/esm2015/lib/components/dynamic-form/components/dynamic-form-vocabulary-item/dynamic-form-vocabulary-item.component.js +178 -0
- package/esm2015/lib/components/dynamic-form/components/form-wrappers/base-edit-form/base-edit-form.js +768 -0
- package/esm2015/lib/components/dynamic-form/components/form-wrappers/date-wrapper/date-wrapper.component.js +35 -0
- package/esm2015/lib/components/dynamic-form/components/form-wrappers/date-wrapper/date-wrapper.formio.js +17 -0
- package/esm2015/lib/components/dynamic-form/components/form-wrappers/toggle-wrapper/toggle-wrapper.component.js +34 -0
- package/esm2015/lib/components/dynamic-form/components/form-wrappers/toggle-wrapper/toggle-wrapper.formio.js +17 -0
- package/esm2015/lib/components/dynamic-form/components/form-wrappers/user-selector-wrapper/user-selector-wrapper.component.js +74 -0
- package/esm2015/lib/components/dynamic-form/components/form-wrappers/user-selector-wrapper/user-selector-wrapper.formio.js +30 -0
- package/esm2015/lib/components/dynamic-form/components/form-wrappers/vocabulary-wrapper/vocabulary-wrapper.component.js +32 -0
- package/esm2015/lib/components/dynamic-form/components/form-wrappers/vocabulary-wrapper/vocabulary-wrapper.formio.js +30 -0
- package/esm2015/lib/components/dynamic-form/directives/dynamic-form-content-proxy.directive.js +17 -0
- package/esm2015/lib/components/dynamic-form/dynamic-form.module.js +299 -0
- package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form-boolitem-properties.interface.js +2 -0
- package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form-dateitem-properties.interface.js +2 -0
- package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form-item-properties.interface.js +2 -0
- package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form-item-validator.interface.js +2 -0
- package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form-item.interface.js +2 -0
- package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form-keyvaluepairsitem-properties.interface.js +2 -0
- package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form-selectitem-properties.interface.js +2 -0
- package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form-textitem-pipe-property.interface.js +2 -0
- package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form-textitem-properties.interface.js +2 -0
- package/esm2015/lib/components/dynamic-form/interfaces/dynamic-form.interfaces.js +10 -0
- package/esm2015/lib/components/dynamic-form/models/dynamic-form-baseitem.model.js +63 -0
- package/esm2015/lib/components/dynamic-form/models/dynamic-form-boolitem.model.js +20 -0
- package/esm2015/lib/components/dynamic-form/models/dynamic-form-dateitem.model.js +24 -0
- package/esm2015/lib/components/dynamic-form/models/dynamic-form-datetimeitem.model.js +12 -0
- package/esm2015/lib/components/dynamic-form/models/dynamic-form-mapitem.model.js +16 -0
- package/esm2015/lib/components/dynamic-form/models/dynamic-form-selectitem.model.js +17 -0
- package/esm2015/lib/components/dynamic-form/models/dynamic-form-textitem.model.js +32 -0
- package/esm2015/lib/components/dynamic-form/models/dynamic-form.models.js +8 -0
- package/esm2015/lib/components/dynamic-form/services/card-item-types.service.js +46 -0
- package/esm2015/lib/components/dynamic-form/services/dynamic-component-mapper.service.js +60 -0
- package/esm2015/lib/components/dynamic-form/services/dynamic-form-update.service.js +83 -0
- package/esm2015/lib/components/dynamic-form/validators/length-validator.js +15 -0
- package/esm2015/lib/components/dynamic-form/validators/regex-validator.js +15 -0
- package/esm2015/lib/components/dynamic-form/validators/required-validator.js +9 -0
- package/esm2015/lib/components/dynamic-form/validators/value-validator.js +15 -0
- package/esm2015/lib/components/dynamic-search/dynamic-search/dynamic-search.component.js +323 -0
- package/esm2015/lib/components/dynamic-search/dynamic-search.module.js +61 -0
- package/esm2015/lib/components/dynamic-table/dynamic-table/dynamic-table.component.js +238 -0
- package/esm2015/lib/components/dynamic-table/dynamic-table.module.js +44 -0
- package/esm2015/lib/components/dynamic-table/services/dynamic-table.service.js +16 -0
- package/esm2015/lib/components/dynamic-tabs/dynamic-tabs/dynamic-tabs.component.js +39 -0
- package/esm2015/lib/components/dynamic-tabs/dynamic-tabs.module.js +34 -0
- package/esm2015/lib/components/dynamic-view/boolean-viewer/boolean-viewer.component.js +36 -0
- package/esm2015/lib/components/dynamic-view/custom-document-viewer/custom-document-viewer.component.js +59 -0
- package/esm2015/lib/components/dynamic-view/custom-pp-viewer/custom-pp-viewer.component.js +68 -0
- package/esm2015/lib/components/dynamic-view/cutome-voc-viewer/cutome-voc-viewer.component.js +33 -0
- package/esm2015/lib/components/dynamic-view/data-viewer/data-viewer.component.js +33 -0
- package/esm2015/lib/components/dynamic-view/date-viewer/date-viewer.component.js +55 -0
- package/esm2015/lib/components/dynamic-view/department-viewer/department-viewer.component.js +89 -0
- package/esm2015/lib/components/dynamic-view/dropdown-viewer/dropdown-viewer.component.js +61 -0
- package/esm2015/lib/components/dynamic-view/dynamic-view.module.js +69 -0
- package/esm2015/lib/components/dynamic-view/dynamic-viewe.service.js +62 -0
- package/esm2015/lib/components/dynamic-view/list-viewer/list-viewer.component.js +40 -0
- package/esm2015/lib/components/file-manger/components/add-to-collection/add-to-collection.component.js +132 -0
- package/esm2015/lib/components/file-manger/components/clipboard/clipboard.component.js +264 -0
- package/esm2015/lib/components/file-manger/components/copy/copy.component.js +121 -0
- package/esm2015/lib/components/file-manger/components/create-directory/create-directory.component.js +91 -0
- package/esm2015/lib/components/file-manger/components/create-modal/create-modal.component.js +455 -0
- package/esm2015/lib/components/file-manger/components/creation-type/creation-type.component.js +26 -0
- package/esm2015/lib/components/file-manger/components/delete/delete.component.js +74 -0
- package/esm2015/lib/components/file-manger/components/folder-modal/folder-modal.component.js +114 -0
- package/esm2015/lib/components/file-manger/components/loan-request/loan-request.component.js +80 -0
- package/esm2015/lib/components/file-manger/components/move/move.component.js +110 -0
- package/esm2015/lib/components/file-manger/components/publish-dialog/publish-dialog.component.js +111 -0
- package/esm2015/lib/components/file-manger/components/rename/rename.component.js +86 -0
- package/esm2015/lib/components/file-manger/components/scan-modal/scan-modal.component.js +314 -0
- package/esm2015/lib/components/file-manger/components/share-dialog/share-dialog.component.js +294 -0
- package/esm2015/lib/components/file-manger/components/sidepanel/sidepanel.component.js +257 -0
- package/esm2015/lib/components/file-manger/components/template-modal/template-modal.component.js +64 -0
- package/esm2015/lib/components/file-manger/components/transfer-doc/transfer-doc.component.js +71 -0
- package/esm2015/lib/components/file-manger/components/update-modal/update-modal.component.js +358 -0
- package/esm2015/lib/components/file-manger/file-manager.abstract.js +1035 -0
- package/esm2015/lib/components/file-manger/file-manger.module.js +295 -0
- package/esm2015/lib/components/filter/filter/filter.component.js +94 -0
- package/esm2015/lib/components/filter/filter.module.js +45 -0
- package/esm2015/lib/components/hijri-gregorian-datepicker/hijri-gregorian-datepicker/gregorian-datepicker/gregorian-datepicker.component.js +123 -0
- package/esm2015/lib/components/hijri-gregorian-datepicker/hijri-gregorian-datepicker/hijri-datepicker/hijri-datepicker.component.js +126 -0
- package/esm2015/lib/components/hijri-gregorian-datepicker/hijri-gregorian-datepicker/hijri-gregorian-datepicker.component.js +165 -0
- package/esm2015/lib/components/hijri-gregorian-datepicker/hijri-gregorian-datepicker/provide-parent-form.directive.js +32 -0
- package/esm2015/lib/components/hijri-gregorian-datepicker/ngx-hijri-gregorian-datepicker.module.js +58 -0
- package/esm2015/lib/components/hijri-gregorian-datepicker/services/date-formatter.service.js +71 -0
- package/esm2015/lib/components/hijri-gregorian-datepicker/services/date-helper.service.js +30 -0
- package/esm2015/lib/components/hijri-gregorian-datepicker/utils/CustomNgbDateParserFormatter.js +43 -0
- package/esm2015/lib/components/hijri-gregorian-datepicker/utils/IslamicI18n.js +26 -0
- package/esm2015/lib/components/hijri-gregorian-datepicker/utils/consts.js +5 -0
- package/esm2015/lib/components/latest-activity/components/activity-line/activity-line.component.js +75 -0
- package/esm2015/lib/components/latest-activity/components/latest-activity/latest-activity.component.js +70 -0
- package/esm2015/lib/components/latest-activity/components/single-activity/single-activity.component.js +27 -0
- package/esm2015/lib/components/latest-activity/constants/activitylog.js +80 -0
- package/esm2015/lib/components/latest-activity/latest-activity.module.js +57 -0
- package/esm2015/lib/components/latest-activity/services/activity-log.service.js +33 -0
- package/esm2015/lib/components/mutiple-dynamic-form-viewer/multiple-dynamic-form-viewer/multiple-dynamic-form-viewer.component.js +51 -0
- package/esm2015/lib/components/mutiple-dynamic-form-viewer/mutiple-dynamic-form-viewer.module.js +30 -0
- package/esm2015/lib/components/notifications/components/notification-item/notification-item.component.js +137 -0
- package/esm2015/lib/components/notifications/components/notification-options/notification-options.component.js +22 -0
- package/esm2015/lib/components/notifications/components/notification-toast/notification-toast.component.js +57 -0
- package/esm2015/lib/components/notifications/components/notifications-button/notifications-button.component.js +172 -0
- package/esm2015/lib/components/notifications/components/notifications-list/notifications-list.component.js +164 -0
- package/esm2015/lib/components/notifications/notifications.module.js +109 -0
- package/esm2015/lib/components/notifications/notifications.service.js +280 -0
- package/esm2015/lib/components/pagination/pagination/pagination.component.js +124 -0
- package/esm2015/lib/components/pagination/pagination.module.js +32 -0
- package/esm2015/lib/components/pdf-tron/pdf-tron.module.js +24 -0
- package/esm2015/lib/components/pdf-tron/pdftron/pdftron.component.js +745 -0
- package/esm2015/lib/components/pdf-tron/pdftron/pdftron.service.js +239 -0
- package/esm2015/lib/components/permissions/add-permissions-dialog/add-permissions-dialog.component.js +177 -0
- package/esm2015/lib/components/permissions/permission.service.js +118 -0
- package/esm2015/lib/components/permissions/permissions/permissions.component.js +232 -0
- package/esm2015/lib/components/permissions/permissions-template/permissions-template.component.js +117 -0
- package/esm2015/lib/components/permissions/permissions.module.js +71 -0
- package/esm2015/lib/components/select/select/select.component.js +130 -0
- package/esm2015/lib/components/select/select.module.js +37 -0
- package/esm2015/lib/components/select-users-by-department/select-users-by-department.module.js +47 -0
- package/esm2015/lib/components/select-users-by-department/select-users-by-departments/department-management.service.js +27 -0
- package/esm2015/lib/components/select-users-by-department/select-users-by-departments/select-users-by-departments.component.js +116 -0
- package/esm2015/lib/components/table/dynamic-column/dynamic-column.component.js +64 -0
- package/esm2015/lib/components/table/table/table.component.js +227 -0
- package/esm2015/lib/components/table/table.module.js +61 -0
- package/esm2015/lib/components/user/user/user.component.js +31 -0
- package/esm2015/lib/components/user/user.module.js +30 -0
- package/esm2015/lib/components/users-card/users-card.component.js +43 -0
- package/esm2015/lib/components/users-card/users-card.module.js +28 -0
- package/esm2015/lib/components/viewer-log/components/viewer-log/viewer-log.component.js +33 -0
- package/esm2015/lib/components/viewer-log/viewer-log.module.js +20 -0
- package/esm2015/lib/components/vocabulary/interfaces/op-type.interface.js +2 -0
- package/esm2015/lib/components/vocabulary/services/vocabulary-api.service.js +49 -0
- package/esm2015/lib/components/vocabulary/vocabulary/vocabulary.component.js +106 -0
- package/esm2015/lib/components/vocabulary/vocabulary.module.js +34 -0
- package/esm2015/lib/configuration/app-config.service.js +30 -0
- package/esm2015/lib/configuration/helpers/app-initializer.js +4 -0
- package/esm2015/lib/directive/app-has-role/app-has-role.directive.js +61 -0
- package/esm2015/lib/directive/clickOutSide/click-outside.directive.js +29 -0
- package/esm2015/lib/directive/directive.module.js +52 -0
- package/esm2015/lib/directive/drag-and-drop/drag-and-drop.directive.js +46 -0
- package/esm2015/lib/directive/permissions/evaluators.service.js +152 -0
- package/esm2015/lib/directive/permissions/permissions.directive.js +69 -0
- package/esm2015/lib/directive/rtl/set-dir-rtl.directive.js +28 -0
- package/esm2015/lib/directive/rtl/set-rtl.directive.js +29 -0
- package/esm2015/lib/nuxeo-development-framework.component.js +26 -0
- package/esm2015/lib/nuxeo-development-framework.module.js +50 -0
- package/esm2015/lib/nuxeo-development-framework.service.js +14 -0
- package/esm2015/lib/pipes/file-size.pipe.js +57 -0
- package/esm2015/lib/pipes/hijri-date.pipe.js +46 -0
- package/esm2015/lib/pipes/localized-date.pipe.js +81 -0
- package/esm2015/lib/pipes/multi-value.pipe.js +42 -0
- package/esm2015/lib/pipes/pipes.module.js +29 -0
- package/esm2015/lib/pipes/secure-html.pipe.js +34 -0
- package/esm2015/lib/pipes/secure.pipe.js +40 -0
- package/esm2015/lib/pipes/time-ago.pipe.js +68 -0
- package/esm2015/lib/shared/components/button/button.component.js +87 -0
- package/esm2015/lib/shared/components/item-list/item-list.component.js +77 -0
- package/esm2015/lib/shared/components/no-data/no-data.component.js +37 -0
- package/esm2015/lib/shared/components/read-more/read-more.component.js +108 -0
- package/esm2015/lib/shared/components/search-autocomplete/search-autocomplete.component.js +146 -0
- package/esm2015/lib/shared/components/spinner/spinner.component.js +29 -0
- package/esm2015/lib/shared/components/user-card/user-card.component.js +49 -0
- package/esm2015/lib/shared/libraryShared.module.js +81 -0
- package/esm2015/lib/shared-services/dialog-mangment.service.js +61 -0
- package/esm2015/lib/shared-services/dynamic-form.service.js +241 -0
- package/esm2015/lib/shared-services/file-manager.adapter.js +74 -0
- package/esm2015/lib/shared-services/file-manager.service.js +792 -0
- package/esm2015/lib/shared-services/global-pdftron.service.js +46 -0
- package/esm2015/lib/shared-services/mainfolder.service.js +162 -0
- package/esm2015/lib/shared-services/publishing-document.service.js +202 -0
- package/esm2015/lib/shared-services/recently-viewed.service.js +57 -0
- package/esm2015/lib/shared-services/shared-docs.service.js +135 -0
- package/esm2015/lib/shared-services/shared-services.module.js +20 -0
- package/esm2015/lib/shared-services/upload-file.service.js +29 -0
- package/esm2015/lib/shared-services/upload-managment.service.js +151 -0
- package/esm2015/lib/shared-services/user.service.js +54 -0
- package/esm2015/nuxeo-development-framework.js +5 -0
- package/esm2015/public-api.js +237 -0
- package/fesm2015/nuxeo-development-framework.js +27352 -0
- package/fesm2015/nuxeo-development-framework.js.map +1 -0
- package/lib/Core/adapters/adapter.service.d.ts +11 -0
- package/lib/Core/core.module.d.ts +14 -0
- package/lib/Core/enums/language.enum.d.ts +4 -0
- package/lib/Core/models/component.model.d.ts +6 -0
- package/lib/Core/services/callApi/call-api.service.d.ts +11 -0
- package/lib/Core/services/extension/action.extensions.d.ts +31 -0
- package/lib/Core/services/extension/component-register.service.d.ts +17 -0
- package/lib/Core/services/extension/extenion-utils.d.ts +14 -0
- package/lib/Core/services/extension/extension-element.d.ts +5 -0
- package/lib/Core/services/extension/extension-loader.service.d.ts +28 -0
- package/lib/Core/services/extension/extension.service.d.ts +70 -0
- package/lib/Core/services/initialization/initialization.service.d.ts +14 -0
- package/lib/Core/services/localStorag/local-storag.service.d.ts +41 -0
- package/lib/Core/services/nuxeo/nuxeo-override.d.ts +8 -0
- package/lib/Core/services/nuxeo/nuxeo.service.d.ts +33 -0
- package/lib/Core/services/roles/roles.service.d.ts +12 -0
- package/lib/Core/services/translation/translate-loader.service.d.ts +26 -0
- package/lib/Core/services/translation/translation.service.d.ts +74 -0
- package/lib/Core/services/user/user-preferences.service.d.ts +80 -0
- package/lib/Core/utilities/moment-date-adapter.d.ts +37 -0
- package/lib/Core/utilities/utility.service.d.ts +11 -0
- package/lib/components/activities-log/activities-log/activities-log.component.d.ts +23 -0
- package/lib/components/activities-log/activities-log/activities-log.service.d.ts +9 -0
- package/lib/components/activities-log/activities-log.module.d.ts +10 -0
- package/lib/components/activity/activity/activity.component.d.ts +13 -0
- package/lib/components/activity/activity.module.d.ts +13 -0
- package/lib/components/attachment-item/attachment-item/attachment-item.component.d.ts +21 -0
- package/lib/components/attachment-item/attachment-item.module.d.ts +13 -0
- package/lib/components/attachment-modal/attachment-modal.module.d.ts +12 -0
- package/lib/components/attachment-modal/attachments/attachments.component.d.ts +50 -0
- package/lib/components/avatar/avatar/avatar.component.d.ts +23 -0
- package/lib/components/avatar/avatar.module.d.ts +13 -0
- package/lib/components/card/card.component.d.ts +32 -0
- package/lib/components/card/card.module.d.ts +12 -0
- package/lib/components/comments/comments.module.d.ts +26 -0
- package/lib/components/comments/components/comment-item/comment-item.component.d.ts +24 -0
- package/lib/components/comments/components/comments-dashlet/comments-dashlet.component.d.ts +46 -0
- package/lib/components/comments/components/comments-list/comments-list.component.d.ts +28 -0
- package/lib/components/comments/components/edit-delete-modal/edit-delete-modal.component.d.ts +22 -0
- package/lib/components/comments/constants/comment.d.ts +25 -0
- package/lib/components/comments/services/comment-api.service.d.ts +16 -0
- package/lib/components/confirm-caller/confirm-caller.dialog.d.ts +46 -0
- package/lib/components/confirm-caller/confirm-caller.module.d.ts +16 -0
- package/lib/components/confirm-caller/confirm-dialog/confirm-dialog.component.d.ts +12 -0
- package/lib/components/confirmation-dialog/confirmation-dialog/confirmation-dialog.component.d.ts +12 -0
- package/lib/components/confirmation-dialog/confirmation-dialog.module.d.ts +10 -0
- package/lib/components/correspondence-relation/components/correspondence-relation/correspondence-relation.component.d.ts +34 -0
- package/lib/components/correspondence-relation/components/correspondence-relation-create-form/correspondence-relation-create-form.component.d.ts +42 -0
- package/lib/components/correspondence-relation/components/correspondence-relation-list/correspondence-relation-list.component.d.ts +31 -0
- package/lib/components/correspondence-relation/components/correspondence-relation-reply/correspondence-relation-reply.component.d.ts +18 -0
- package/lib/components/correspondence-relation/components/versions/versions.component.d.ts +38 -0
- package/lib/components/correspondence-relation/correspondence-relation.module.d.ts +30 -0
- package/lib/components/correspondence-relation/services/correspondence-realation.service.d.ts +26 -0
- package/lib/components/correspondence-relation/services/viewer-files.service.d.ts +18 -0
- package/lib/components/create-entity/create-entity/create-entity.component.d.ts +17 -0
- package/lib/components/create-entity/create-entity.module.d.ts +11 -0
- package/lib/components/cts-tags/components/correspondence-tags/correspondence-tags.component.d.ts +38 -0
- package/lib/components/cts-tags/cts-tags.module.d.ts +21 -0
- package/lib/components/cts-tags/services/tags-api.service.d.ts +17 -0
- package/lib/components/custom-toastr/components/custom-toastr/custom-toastr.component.d.ts +30 -0
- package/lib/components/custom-toastr/custom-toastr.module.d.ts +12 -0
- package/lib/components/custom-toastr/interfaces/toast-type.interface.d.ts +1 -0
- package/lib/components/custom-toastr/services/custom-toastr.service.d.ts +18 -0
- package/lib/components/display-suitable-icon/display-suitable-icon/display-suitable-icon.component.d.ts +17 -0
- package/lib/components/display-suitable-icon/display-suitable-icon/icon.service.d.ts +8 -0
- package/lib/components/display-suitable-icon/display-suitable-icon.module.d.ts +8 -0
- package/lib/components/documents/components/attachments-list/attachments-list.component.d.ts +54 -0
- package/lib/components/documents/components/attachments-page-provider/attachments-page-provider.component.d.ts +38 -0
- package/lib/components/documents/components/document-list/documents-list.component.d.ts +81 -0
- package/lib/components/documents/components/document-scan/document-scan.component.d.ts +112 -0
- package/lib/components/documents/components/document-scan/document-scan.service.d.ts +14 -0
- package/lib/components/documents/components/document-upload/document-upload.component.d.ts +58 -0
- package/lib/components/documents/components/documents/documents.component.d.ts +27 -0
- package/lib/components/documents/constants/document-templates.d.ts +33 -0
- package/lib/components/documents/constants/documents.d.ts +95 -0
- package/lib/components/documents/documents.module.d.ts +33 -0
- package/lib/components/documents/services/document-templates.service.d.ts +24 -0
- package/lib/components/documents/services/documents.service.d.ts +36 -0
- package/lib/components/dynamic-chart/dynamic-chart/dynamic-chart.component.d.ts +66 -0
- package/lib/components/dynamic-chart/dynamic-chart.module.d.ts +16 -0
- package/lib/components/dynamic-chart/dynamic-single-chart/dynamic-single-chart.component.d.ts +33 -0
- package/lib/components/dynamic-chart/services/chart-data.service.d.ts +37 -0
- package/lib/components/dynamic-fields-renderer/dynamic-fields-renderer/dynamic-fields-renderer.component.d.ts +137 -0
- package/lib/components/dynamic-fields-renderer/dynamic-fields-renderer.module.d.ts +12 -0
- package/lib/components/dynamic-filter/dynamic-filter/dynamic-filter.component.d.ts +55 -0
- package/lib/components/dynamic-filter/dynamic-filter.module.d.ts +17 -0
- package/lib/components/dynamic-form/components/department-form/department-form.component.d.ts +28 -0
- package/lib/components/dynamic-form/components/dynamic-form/dynamic-form.component.d.ts +27 -0
- package/lib/components/dynamic-form/components/dynamic-form/fields.adapter.d.ts +6 -0
- package/lib/components/dynamic-form/components/dynamic-form/form-builder.service.d.ts +21 -0
- package/lib/components/dynamic-form/components/dynamic-form-boolitem/dynamic-form-boolitem.component.d.ts +17 -0
- package/lib/components/dynamic-form/components/dynamic-form-builder/dynamic-form-builder.component.d.ts +57 -0
- package/lib/components/dynamic-form/components/dynamic-form-checkbox-item/dynamic-form-checkbox-item.component.d.ts +35 -0
- package/lib/components/dynamic-form/components/dynamic-form-dateitem/dynamic-form-dateitem.component.d.ts +70 -0
- package/lib/components/dynamic-form/components/dynamic-form-dateitem/owlDateTimeIntl.d.ts +52 -0
- package/lib/components/dynamic-form/components/dynamic-form-department/constants/department.d.ts +12 -0
- package/lib/components/dynamic-form/components/dynamic-form-department/dynamic-form-department.component.d.ts +76 -0
- package/lib/components/dynamic-form/components/dynamic-form-department/services/department-api.service.d.ts +29 -0
- package/lib/components/dynamic-form/components/dynamic-form-department/services/department-management.service.d.ts +21 -0
- package/lib/components/dynamic-form/components/dynamic-form-field/dynamic-form-field.component.d.ts +30 -0
- package/lib/components/dynamic-form/components/dynamic-form-hijri-dateitem/dynamic-form-hijri-dateitem.component.d.ts +64 -0
- package/lib/components/dynamic-form/components/dynamic-form-item-dispatcher/dynamic-form-item-dispatcher.component.d.ts +25 -0
- package/lib/components/dynamic-form/components/dynamic-form-mapitem/dynamic-form-mapitem.component.d.ts +15 -0
- package/lib/components/dynamic-form/components/dynamic-form-options/dynamic-form-options.component.d.ts +45 -0
- package/lib/components/dynamic-form/components/dynamic-form-select-tag/dynamic-form-select-tag.component.d.ts +41 -0
- package/lib/components/dynamic-form/components/dynamic-form-select-user-filter/dynamic-form-select-user-filter.component.d.ts +65 -0
- package/lib/components/dynamic-form/components/dynamic-form-select-users/dynamic-form-select-users.component.d.ts +85 -0
- package/lib/components/dynamic-form/components/dynamic-form-select-users/services/user-api.service.d.ts +13 -0
- package/lib/components/dynamic-form/components/dynamic-form-selectitem/dynamic-form-selectitem.component.d.ts +80 -0
- package/lib/components/dynamic-form/components/dynamic-form-slide-toggleitem/dynamic-form-slide-toggleitem.component.d.ts +40 -0
- package/lib/components/dynamic-form/components/dynamic-form-textarea/dynamic-form-textarea.component.d.ts +71 -0
- package/lib/components/dynamic-form/components/dynamic-form-textitem/dynamic-form-textitem.component.d.ts +89 -0
- package/lib/components/dynamic-form/components/dynamic-form-treeview-select/dropdown-treeview-select-i18n.d.ts +19 -0
- package/lib/components/dynamic-form/components/dynamic-form-treeview-select/dropdown-treeview-select.component.d.ts +104 -0
- package/lib/components/dynamic-form/components/dynamic-form-viewer/dynamic-form-viewer.component.d.ts +16 -0
- package/lib/components/dynamic-form/components/dynamic-form-vocabulary-item/dynamic-form-vocabulary-item.component.d.ts +79 -0
- package/lib/components/dynamic-form/components/form-wrappers/base-edit-form/base-edit-form.d.ts +599 -0
- package/lib/components/dynamic-form/components/form-wrappers/date-wrapper/date-wrapper.component.d.ts +13 -0
- package/lib/components/dynamic-form/components/form-wrappers/date-wrapper/date-wrapper.formio.d.ts +2 -0
- package/lib/components/dynamic-form/components/form-wrappers/toggle-wrapper/toggle-wrapper.component.d.ts +13 -0
- package/lib/components/dynamic-form/components/form-wrappers/toggle-wrapper/toggle-wrapper.formio.d.ts +2 -0
- package/lib/components/dynamic-form/components/form-wrappers/user-selector-wrapper/user-selector-wrapper.component.d.ts +16 -0
- package/lib/components/dynamic-form/components/form-wrappers/user-selector-wrapper/user-selector-wrapper.formio.d.ts +2 -0
- package/lib/components/dynamic-form/components/form-wrappers/vocabulary-wrapper/vocabulary-wrapper.component.d.ts +13 -0
- package/lib/components/dynamic-form/components/form-wrappers/vocabulary-wrapper/vocabulary-wrapper.formio.d.ts +2 -0
- package/lib/components/dynamic-form/directives/dynamic-form-content-proxy.directive.d.ts +9 -0
- package/lib/components/dynamic-form/dynamic-form.module.d.ts +66 -0
- package/lib/components/dynamic-form/interfaces/dynamic-form-boolitem-properties.interface.d.ts +5 -0
- package/lib/components/dynamic-form/interfaces/dynamic-form-dateitem-properties.interface.d.ts +5 -0
- package/lib/components/dynamic-form/interfaces/dynamic-form-item-properties.interface.d.ts +15 -0
- package/lib/components/dynamic-form/interfaces/dynamic-form-item-validator.interface.d.ts +4 -0
- package/lib/components/dynamic-form/interfaces/dynamic-form-item.interface.d.ts +12 -0
- package/lib/components/dynamic-form/interfaces/dynamic-form-keyvaluepairsitem-properties.interface.d.ts +8 -0
- package/lib/components/dynamic-form/interfaces/dynamic-form-selectitem-properties.interface.d.ts +10 -0
- package/lib/components/dynamic-form/interfaces/dynamic-form-textitem-pipe-property.interface.d.ts +5 -0
- package/lib/components/dynamic-form/interfaces/dynamic-form-textitem-properties.interface.d.ts +8 -0
- package/lib/components/dynamic-form/models/dynamic-form-baseitem.model.d.ts +21 -0
- package/lib/components/dynamic-form/models/dynamic-form-boolitem.model.d.ts +11 -0
- package/lib/components/dynamic-form/models/dynamic-form-dateitem.model.d.ts +13 -0
- package/lib/components/dynamic-form/models/dynamic-form-datetimeitem.model.d.ts +9 -0
- package/lib/components/dynamic-form/models/dynamic-form-mapitem.model.d.ts +8 -0
- package/lib/components/dynamic-form/models/dynamic-form-selectitem.model.d.ts +11 -0
- package/lib/components/dynamic-form/models/dynamic-form-textitem.model.d.ts +15 -0
- package/lib/components/dynamic-form/services/card-item-types.service.d.ts +13 -0
- package/lib/components/dynamic-form/services/dynamic-component-mapper.service.d.ts +36 -0
- package/lib/components/dynamic-form/services/dynamic-form-update.service.d.ts +25 -0
- package/lib/components/dynamic-form/validators/length-validator.d.ts +7 -0
- package/lib/components/dynamic-form/validators/regex-validator.d.ts +7 -0
- package/lib/components/dynamic-form/validators/required-validator.d.ts +5 -0
- package/lib/components/dynamic-form/validators/value-validator.d.ts +7 -0
- package/lib/components/dynamic-search/dynamic-search/dynamic-search.component.d.ts +98 -0
- package/lib/components/dynamic-search/dynamic-search.module.d.ts +20 -0
- package/lib/components/dynamic-table/dynamic-table/dynamic-table.component.d.ts +108 -0
- package/lib/components/dynamic-table/dynamic-table.module.d.ts +16 -0
- package/lib/components/dynamic-table/services/dynamic-table.service.d.ts +8 -0
- package/lib/components/dynamic-tabs/dynamic-tabs/dynamic-tabs.component.d.ts +13 -0
- package/lib/components/dynamic-tabs/dynamic-tabs.module.d.ts +11 -0
- package/lib/components/dynamic-view/boolean-viewer/boolean-viewer.component.d.ts +13 -0
- package/lib/components/dynamic-view/custom-document-viewer/custom-document-viewer.component.d.ts +22 -0
- package/lib/components/dynamic-view/custom-pp-viewer/custom-pp-viewer.component.d.ts +28 -0
- package/lib/components/dynamic-view/cutome-voc-viewer/cutome-voc-viewer.component.d.ts +16 -0
- package/lib/components/dynamic-view/data-viewer/data-viewer.component.d.ts +12 -0
- package/lib/components/dynamic-view/date-viewer/date-viewer.component.d.ts +22 -0
- package/lib/components/dynamic-view/department-viewer/department-viewer.component.d.ts +30 -0
- package/lib/components/dynamic-view/dropdown-viewer/dropdown-viewer.component.d.ts +37 -0
- package/lib/components/dynamic-view/dynamic-view.module.d.ts +23 -0
- package/lib/components/dynamic-view/dynamic-viewe.service.d.ts +15 -0
- package/lib/components/dynamic-view/list-viewer/list-viewer.component.d.ts +20 -0
- package/lib/components/file-manger/components/add-to-collection/add-to-collection.component.d.ts +31 -0
- package/lib/components/file-manger/components/clipboard/clipboard.component.d.ts +41 -0
- package/lib/components/file-manger/components/copy/copy.component.d.ts +33 -0
- package/lib/components/file-manger/components/create-directory/create-directory.component.d.ts +24 -0
- package/lib/components/file-manger/components/create-modal/create-modal.component.d.ts +108 -0
- package/lib/components/file-manger/components/creation-type/creation-type.component.d.ts +11 -0
- package/lib/components/file-manger/components/delete/delete.component.d.ts +24 -0
- package/lib/components/file-manger/components/folder-modal/folder-modal.component.d.ts +56 -0
- package/lib/components/file-manger/components/loan-request/loan-request.component.d.ts +23 -0
- package/lib/components/file-manger/components/move/move.component.d.ts +33 -0
- package/lib/components/file-manger/components/publish-dialog/publish-dialog.component.d.ts +32 -0
- package/lib/components/file-manger/components/rename/rename.component.d.ts +24 -0
- package/lib/components/file-manger/components/scan-modal/scan-modal.component.d.ts +95 -0
- package/lib/components/file-manger/components/share-dialog/share-dialog.component.d.ts +58 -0
- package/lib/components/file-manger/components/sidepanel/sidepanel.component.d.ts +62 -0
- package/lib/components/file-manger/components/template-modal/template-modal.component.d.ts +34 -0
- package/lib/components/file-manger/components/transfer-doc/transfer-doc.component.d.ts +23 -0
- package/lib/components/file-manger/components/update-modal/update-modal.component.d.ts +194 -0
- package/lib/components/file-manger/file-manager.abstract.d.ts +173 -0
- package/lib/components/file-manger/file-manger.module.d.ts +59 -0
- package/lib/components/filter/filter/filter.component.d.ts +31 -0
- package/lib/components/filter/filter.module.d.ts +15 -0
- package/lib/components/hijri-gregorian-datepicker/hijri-gregorian-datepicker/gregorian-datepicker/gregorian-datepicker.component.d.ts +35 -0
- package/lib/components/hijri-gregorian-datepicker/hijri-gregorian-datepicker/hijri-datepicker/hijri-datepicker.component.d.ts +35 -0
- package/lib/components/hijri-gregorian-datepicker/hijri-gregorian-datepicker/hijri-gregorian-datepicker.component.d.ts +39 -0
- package/lib/components/hijri-gregorian-datepicker/hijri-gregorian-datepicker/provide-parent-form.directive.d.ts +9 -0
- package/lib/components/hijri-gregorian-datepicker/ngx-hijri-gregorian-datepicker.module.d.ts +15 -0
- package/lib/components/hijri-gregorian-datepicker/services/date-formatter.service.d.ts +15 -0
- package/lib/components/hijri-gregorian-datepicker/services/date-helper.service.d.ts +9 -0
- package/lib/components/hijri-gregorian-datepicker/utils/CustomNgbDateParserFormatter.d.ts +11 -0
- package/lib/components/hijri-gregorian-datepicker/utils/IslamicI18n.d.ts +10 -0
- package/lib/components/hijri-gregorian-datepicker/utils/consts.d.ts +4 -0
- package/lib/components/latest-activity/components/activity-line/activity-line.component.d.ts +19 -0
- package/lib/components/latest-activity/components/latest-activity/latest-activity.component.d.ts +22 -0
- package/lib/components/latest-activity/components/single-activity/single-activity.component.d.ts +10 -0
- package/lib/components/latest-activity/constants/activitylog.d.ts +82 -0
- package/lib/components/latest-activity/latest-activity.module.d.ts +19 -0
- package/lib/components/latest-activity/services/activity-log.service.d.ts +12 -0
- package/lib/components/mutiple-dynamic-form-viewer/multiple-dynamic-form-viewer/multiple-dynamic-form-viewer.component.d.ts +17 -0
- package/lib/components/mutiple-dynamic-form-viewer/mutiple-dynamic-form-viewer.module.d.ts +10 -0
- package/lib/components/notifications/components/notification-item/notification-item.component.d.ts +25 -0
- package/lib/components/notifications/components/notification-options/notification-options.component.d.ts +10 -0
- package/lib/components/notifications/components/notification-toast/notification-toast.component.d.ts +19 -0
- package/lib/components/notifications/components/notifications-button/notifications-button.component.d.ts +30 -0
- package/lib/components/notifications/components/notifications-list/notifications-list.component.d.ts +51 -0
- package/lib/components/notifications/notifications.module.d.ts +24 -0
- package/lib/components/notifications/notifications.service.d.ts +64 -0
- package/lib/components/pagination/pagination/pagination.component.d.ts +46 -0
- package/lib/components/pagination/pagination.module.d.ts +13 -0
- package/lib/components/pdf-tron/pdf-tron.module.d.ts +8 -0
- package/lib/components/pdf-tron/pdftron/pdftron.component.d.ts +102 -0
- package/lib/components/pdf-tron/pdftron/pdftron.service.d.ts +33 -0
- package/lib/components/permissions/add-permissions-dialog/add-permissions-dialog.component.d.ts +44 -0
- package/lib/components/permissions/permission.service.d.ts +21 -0
- package/lib/components/permissions/permissions/permissions.component.d.ts +48 -0
- package/lib/components/permissions/permissions-template/permissions-template.component.d.ts +22 -0
- package/lib/components/permissions/permissions.module.d.ts +21 -0
- package/lib/components/select/select/select.component.d.ts +43 -0
- package/lib/components/select/select.module.d.ts +12 -0
- package/lib/components/select-users-by-department/select-users-by-department.module.d.ts +13 -0
- package/lib/components/select-users-by-department/select-users-by-departments/department-management.service.d.ts +10 -0
- package/lib/components/select-users-by-department/select-users-by-departments/select-users-by-departments.component.d.ts +33 -0
- package/lib/components/table/dynamic-column/dynamic-column.component.d.ts +19 -0
- package/lib/components/table/table/table.component.d.ts +108 -0
- package/lib/components/table/table.module.d.ts +20 -0
- package/lib/components/user/user/user.component.d.ts +13 -0
- package/lib/components/user/user.module.d.ts +10 -0
- package/lib/components/users-card/users-card.component.d.ts +22 -0
- package/lib/components/users-card/users-card.module.d.ts +17 -0
- package/lib/components/viewer-log/components/viewer-log/viewer-log.component.d.ts +12 -0
- package/lib/components/viewer-log/viewer-log.module.d.ts +10 -0
- package/lib/components/vocabulary/interfaces/op-type.interface.d.ts +1 -0
- package/lib/components/vocabulary/services/vocabulary-api.service.d.ts +16 -0
- package/lib/components/vocabulary/vocabulary/vocabulary.component.d.ts +37 -0
- package/lib/components/vocabulary/vocabulary.module.d.ts +11 -0
- package/lib/configuration/app-config.service.d.ts +14 -0
- package/lib/configuration/helpers/app-initializer.d.ts +2 -0
- package/lib/directive/app-has-role/app-has-role.directive.d.ts +18 -0
- package/lib/directive/clickOutSide/click-outside.directive.d.ts +11 -0
- package/lib/directive/directive.module.d.ts +17 -0
- package/lib/directive/drag-and-drop/drag-and-drop.directive.d.ts +11 -0
- package/lib/directive/permissions/evaluators.service.d.ts +37 -0
- package/lib/directive/permissions/permissions.directive.d.ts +42 -0
- package/lib/directive/rtl/set-dir-rtl.directive.d.ts +13 -0
- package/lib/directive/rtl/set-rtl.directive.d.ts +13 -0
- package/lib/nuxeo-development-framework.component.d.ts +8 -0
- package/lib/nuxeo-development-framework.module.d.ts +13 -0
- package/lib/nuxeo-development-framework.service.d.ts +6 -0
- package/lib/pipes/file-size.pipe.d.ts +34 -0
- package/lib/pipes/hijri-date.pipe.d.ts +32 -0
- package/lib/pipes/localized-date.pipe.d.ts +44 -0
- package/lib/pipes/multi-value.pipe.d.ts +32 -0
- package/lib/pipes/pipes.module.d.ts +18 -0
- package/lib/pipes/secure-html.pipe.d.ts +26 -0
- package/lib/pipes/secure.pipe.d.ts +29 -0
- package/lib/pipes/time-ago.pipe.d.ts +34 -0
- package/lib/shared/components/button/button.component.d.ts +38 -0
- package/lib/shared/components/item-list/item-list.component.d.ts +45 -0
- package/lib/shared/components/no-data/no-data.component.d.ts +21 -0
- package/lib/shared/components/read-more/read-more.component.d.ts +37 -0
- package/lib/shared/components/search-autocomplete/search-autocomplete.component.d.ts +51 -0
- package/lib/shared/components/spinner/spinner.component.d.ts +18 -0
- package/lib/shared/components/user-card/user-card.component.d.ts +30 -0
- package/lib/shared/libraryShared.module.d.ts +26 -0
- package/lib/shared-services/dialog-mangment.service.d.ts +15 -0
- package/lib/shared-services/dynamic-form.service.d.ts +24 -0
- package/lib/shared-services/file-manager.adapter.d.ts +48 -0
- package/lib/shared-services/file-manager.service.d.ts +93 -0
- package/lib/shared-services/global-pdftron.service.d.ts +10 -0
- package/lib/shared-services/mainfolder.service.d.ts +32 -0
- package/lib/shared-services/publishing-document.service.d.ts +25 -0
- package/lib/shared-services/recently-viewed.service.d.ts +17 -0
- package/lib/shared-services/shared-docs.service.d.ts +21 -0
- package/lib/shared-services/shared-services.module.d.ts +7 -0
- package/lib/shared-services/upload-file.service.d.ts +10 -0
- package/lib/shared-services/upload-managment.service.d.ts +72 -0
- package/lib/shared-services/user.service.d.ts +12 -0
- package/nuxeo-development-framework.d.ts +5 -0
- package/package.json +70 -63
- package/public-api.d.ts +224 -0
- package/karma.conf.js +0 -44
- package/ng-package.json +0 -7
- package/src/lib/Core/adapters/adapter.service.ts +0 -46
- package/src/lib/Core/core.module.ts +0 -65
- package/src/lib/Core/enums/language.enum.ts +0 -4
- package/src/lib/Core/models/component.model.ts +0 -11
- package/src/lib/Core/services/callApi/call-api.service.ts +0 -31
- package/src/lib/Core/services/extension/action.extensions.ts +0 -35
- package/src/lib/Core/services/extension/component-register.service.ts +0 -25
- package/src/lib/Core/services/extension/extenion-utils.ts +0 -142
- package/src/lib/Core/services/extension/extension-element.ts +0 -6
- package/src/lib/Core/services/extension/extension-loader.service.ts +0 -160
- package/src/lib/Core/services/extension/extension.service.ts +0 -137
- package/src/lib/Core/services/initialization/initialization.service.ts +0 -50
- package/src/lib/Core/services/localStorag/local-storag.service.ts +0 -125
- package/src/lib/Core/services/nuxeo/nuxeo-override.ts +0 -86
- package/src/lib/Core/services/nuxeo/nuxeo.service.ts +0 -123
- package/src/lib/Core/services/roles/roles.service.spec.ts +0 -16
- package/src/lib/Core/services/roles/roles.service.ts +0 -122
- package/src/lib/Core/services/translation/translate-loader.service.ts +0 -173
- package/src/lib/Core/services/translation/translation.service.ts +0 -221
- package/src/lib/Core/services/user/user-preferences.service.ts +0 -172
- package/src/lib/Core/utilities/moment-date-adapter.ts +0 -203
- package/src/lib/Core/utilities/moment-dates-format.ts +0 -18
- package/src/lib/Core/utilities/utility.service.ts +0 -83
- package/src/lib/assets/scss/ej2/material.css +0 -1
- package/src/lib/assets/scss/mixins.scss +0 -38
- package/src/lib/assets/scss/myApp.scss +0 -487
- package/src/lib/assets/scss/variables.scss +0 -62
- package/src/lib/components/activities-log/activities-log/activities-log.component.html +0 -11
- package/src/lib/components/activities-log/activities-log/activities-log.component.scss +0 -12
- package/src/lib/components/activities-log/activities-log/activities-log.component.spec.ts +0 -25
- package/src/lib/components/activities-log/activities-log/activities-log.component.ts +0 -107
- package/src/lib/components/activities-log/activities-log/activities-log.service.ts +0 -30
- package/src/lib/components/activities-log/activities-log.module.ts +0 -18
- package/src/lib/components/activity/activity/activity.component.html +0 -28
- package/src/lib/components/activity/activity/activity.component.scss +0 -33
- package/src/lib/components/activity/activity/activity.component.spec.ts +0 -25
- package/src/lib/components/activity/activity/activity.component.ts +0 -23
- package/src/lib/components/activity/activity.module.ts +0 -24
- package/src/lib/components/attachment-item/attachment-item/attachment-item.component.html +0 -36
- package/src/lib/components/attachment-item/attachment-item/attachment-item.component.scss +0 -21
- package/src/lib/components/attachment-item/attachment-item/attachment-item.component.spec.ts +0 -25
- package/src/lib/components/attachment-item/attachment-item/attachment-item.component.ts +0 -35
- package/src/lib/components/attachment-item/attachment-item.module.ts +0 -26
- package/src/lib/components/attachment-modal/attachment-modal.module.ts +0 -24
- package/src/lib/components/attachment-modal/attachments/attachments.component.html +0 -41
- package/src/lib/components/attachment-modal/attachments/attachments.component.scss +0 -5
- package/src/lib/components/attachment-modal/attachments/attachments.component.spec.ts +0 -25
- package/src/lib/components/attachment-modal/attachments/attachments.component.ts +0 -161
- package/src/lib/components/avatar/avatar/avatar.component.html +0 -13
- package/src/lib/components/avatar/avatar/avatar.component.scss +0 -32
- package/src/lib/components/avatar/avatar/avatar.component.spec.ts +0 -25
- package/src/lib/components/avatar/avatar/avatar.component.ts +0 -50
- package/src/lib/components/avatar/avatar.module.ts +0 -21
- package/src/lib/components/card/card.component.html +0 -35
- package/src/lib/components/card/card.component.scss +0 -81
- package/src/lib/components/card/card.component.spec.ts +0 -25
- package/src/lib/components/card/card.component.ts +0 -38
- package/src/lib/components/card/card.module.ts +0 -15
- package/src/lib/components/comments/comments.module.ts +0 -48
- package/src/lib/components/comments/components/comment-item/comment-item.component.html +0 -32
- package/src/lib/components/comments/components/comment-item/comment-item.component.scss +0 -41
- package/src/lib/components/comments/components/comment-item/comment-item.component.ts +0 -70
- package/src/lib/components/comments/components/comments-dashlet/comments-dashlet.component.html +0 -58
- package/src/lib/components/comments/components/comments-dashlet/comments-dashlet.component.scss +0 -69
- package/src/lib/components/comments/components/comments-dashlet/comments-dashlet.component.ts +0 -80
- package/src/lib/components/comments/components/comments-list/comments-list.component.html +0 -43
- package/src/lib/components/comments/components/comments-list/comments-list.component.scss +0 -103
- package/src/lib/components/comments/components/comments-list/comments-list.component.ts +0 -61
- package/src/lib/components/comments/components/edit-delete-modal/edit-delete-modal.component.html +0 -22
- package/src/lib/components/comments/components/edit-delete-modal/edit-delete-modal.component.scss +0 -48
- package/src/lib/components/comments/components/edit-delete-modal/edit-delete-modal.component.spec.ts +0 -25
- package/src/lib/components/comments/components/edit-delete-modal/edit-delete-modal.component.ts +0 -56
- package/src/lib/components/comments/constants/comment.ts +0 -25
- package/src/lib/components/comments/services/comment-api.service.ts +0 -85
- package/src/lib/components/confirm-caller/confirm-caller.dialog.html +0 -26
- package/src/lib/components/confirm-caller/confirm-caller.dialog.scss +0 -34
- package/src/lib/components/confirm-caller/confirm-caller.dialog.ts +0 -68
- package/src/lib/components/confirm-caller/confirm-caller.module.ts +0 -19
- package/src/lib/components/confirm-caller/confirm-dialog/confirm-dialog.component.html +0 -13
- package/src/lib/components/confirm-caller/confirm-dialog/confirm-dialog.component.scss +0 -0
- package/src/lib/components/confirm-caller/confirm-dialog/confirm-dialog.component.spec.ts +0 -25
- package/src/lib/components/confirm-caller/confirm-dialog/confirm-dialog.component.ts +0 -18
- package/src/lib/components/confirmation-dialog/confirmation-dialog/confirmation-dialog.component.html +0 -24
- package/src/lib/components/confirmation-dialog/confirmation-dialog/confirmation-dialog.component.scss +0 -0
- package/src/lib/components/confirmation-dialog/confirmation-dialog/confirmation-dialog.component.spec.ts +0 -25
- package/src/lib/components/confirmation-dialog/confirmation-dialog/confirmation-dialog.component.ts +0 -19
- package/src/lib/components/confirmation-dialog/confirmation-dialog.module.ts +0 -18
- package/src/lib/components/correspondence-relation/components/correspondence-relation/correspondence-relation.component.html +0 -27
- package/src/lib/components/correspondence-relation/components/correspondence-relation/correspondence-relation.component.scss +0 -34
- package/src/lib/components/correspondence-relation/components/correspondence-relation/correspondence-relation.component.spec.ts +0 -25
- package/src/lib/components/correspondence-relation/components/correspondence-relation/correspondence-relation.component.ts +0 -149
- package/src/lib/components/correspondence-relation/components/correspondence-relation-create-form/correspondence-relation-create-form.component.html +0 -92
- package/src/lib/components/correspondence-relation/components/correspondence-relation-create-form/correspondence-relation-create-form.component.scss +0 -124
- package/src/lib/components/correspondence-relation/components/correspondence-relation-create-form/correspondence-relation-create-form.component.spec.ts +0 -25
- package/src/lib/components/correspondence-relation/components/correspondence-relation-create-form/correspondence-relation-create-form.component.ts +0 -132
- package/src/lib/components/correspondence-relation/components/correspondence-relation-list/correspondence-relation-list.component.html +0 -33
- package/src/lib/components/correspondence-relation/components/correspondence-relation-list/correspondence-relation-list.component.scss +0 -42
- package/src/lib/components/correspondence-relation/components/correspondence-relation-list/correspondence-relation-list.component.spec.ts +0 -25
- package/src/lib/components/correspondence-relation/components/correspondence-relation-list/correspondence-relation-list.component.ts +0 -111
- package/src/lib/components/correspondence-relation/components/correspondence-relation-reply/correspondence-relation-reply.component.html +0 -20
- package/src/lib/components/correspondence-relation/components/correspondence-relation-reply/correspondence-relation-reply.component.scss +0 -9
- package/src/lib/components/correspondence-relation/components/correspondence-relation-reply/correspondence-relation-reply.component.spec.ts +0 -25
- package/src/lib/components/correspondence-relation/components/correspondence-relation-reply/correspondence-relation-reply.component.ts +0 -64
- package/src/lib/components/correspondence-relation/components/versions/versions.component.html +0 -80
- package/src/lib/components/correspondence-relation/components/versions/versions.component.scss +0 -0
- package/src/lib/components/correspondence-relation/components/versions/versions.component.ts +0 -71
- package/src/lib/components/correspondence-relation/correspondence-relation.module.ts +0 -59
- package/src/lib/components/correspondence-relation/services/correspondence-realation.service.ts +0 -192
- package/src/lib/components/correspondence-relation/services/viewer-files.service.ts +0 -51
- package/src/lib/components/create-entity/create-entity/create-entity.component.html +0 -18
- package/src/lib/components/create-entity/create-entity/create-entity.component.scss +0 -90
- package/src/lib/components/create-entity/create-entity/create-entity.component.spec.ts +0 -25
- package/src/lib/components/create-entity/create-entity/create-entity.component.ts +0 -57
- package/src/lib/components/create-entity/create-entity.module.ts +0 -22
- package/src/lib/components/cts-tags/components/correspondence-tags/correspondence-tags.component.html +0 -57
- package/src/lib/components/cts-tags/components/correspondence-tags/correspondence-tags.component.scss +0 -43
- package/src/lib/components/cts-tags/components/correspondence-tags/correspondence-tags.component.spec.ts +0 -25
- package/src/lib/components/cts-tags/components/correspondence-tags/correspondence-tags.component.ts +0 -133
- package/src/lib/components/cts-tags/cts-tags.module.ts +0 -35
- package/src/lib/components/cts-tags/services/tags-api.service.ts +0 -106
- package/src/lib/components/custom-toastr/components/custom-toastr/custom-toastr.component.html +0 -44
- package/src/lib/components/custom-toastr/components/custom-toastr/custom-toastr.component.scss +0 -91
- package/src/lib/components/custom-toastr/components/custom-toastr/custom-toastr.component.spec.ts +0 -25
- package/src/lib/components/custom-toastr/components/custom-toastr/custom-toastr.component.ts +0 -79
- package/src/lib/components/custom-toastr/custom-toastr.module.ts +0 -19
- package/src/lib/components/custom-toastr/interfaces/toast-type.interface.ts +0 -1
- package/src/lib/components/custom-toastr/services/custom-toastr.service.ts +0 -56
- package/src/lib/components/display-suitable-icon/display-suitable-icon/display-suitable-icon.component.html +0 -37
- package/src/lib/components/display-suitable-icon/display-suitable-icon/display-suitable-icon.component.scss +0 -73
- package/src/lib/components/display-suitable-icon/display-suitable-icon/display-suitable-icon.component.spec.ts +0 -25
- package/src/lib/components/display-suitable-icon/display-suitable-icon/display-suitable-icon.component.ts +0 -34
- package/src/lib/components/display-suitable-icon/display-suitable-icon/icon.service.ts +0 -107
- package/src/lib/components/display-suitable-icon/display-suitable-icon.module.ts +0 -16
- package/src/lib/components/documents/components/attachments-list/attachments-list.component.html +0 -92
- package/src/lib/components/documents/components/attachments-list/attachments-list.component.scss +0 -65
- package/src/lib/components/documents/components/attachments-list/attachments-list.component.spec.ts +0 -25
- package/src/lib/components/documents/components/attachments-list/attachments-list.component.ts +0 -162
- package/src/lib/components/documents/components/attachments-page-provider/attachments-page-provider.component.html +0 -36
- package/src/lib/components/documents/components/attachments-page-provider/attachments-page-provider.component.scss +0 -44
- package/src/lib/components/documents/components/attachments-page-provider/attachments-page-provider.component.spec.ts +0 -25
- package/src/lib/components/documents/components/attachments-page-provider/attachments-page-provider.component.ts +0 -77
- package/src/lib/components/documents/components/document-list/documents-list.component.html +0 -34
- package/src/lib/components/documents/components/document-list/documents-list.component.scss +0 -41
- package/src/lib/components/documents/components/document-list/documents-list.component.ts +0 -244
- package/src/lib/components/documents/components/document-scan/document-scan.component.html +0 -176
- package/src/lib/components/documents/components/document-scan/document-scan.component.scss +0 -725
- package/src/lib/components/documents/components/document-scan/document-scan.component.ts +0 -1156
- package/src/lib/components/documents/components/document-scan/document-scan.service.ts +0 -26
- package/src/lib/components/documents/components/document-upload/document-upload.component.html +0 -19
- package/src/lib/components/documents/components/document-upload/document-upload.component.scss +0 -49
- package/src/lib/components/documents/components/document-upload/document-upload.component.ts +0 -168
- package/src/lib/components/documents/components/documents/documents.component.html +0 -16
- package/src/lib/components/documents/components/documents/documents.component.scss +0 -0
- package/src/lib/components/documents/components/documents/documents.component.ts +0 -49
- package/src/lib/components/documents/constants/document-templates.ts +0 -32
- package/src/lib/components/documents/constants/documents.ts +0 -85
- package/src/lib/components/documents/documents.module.ts +0 -69
- package/src/lib/components/documents/services/document-templates.service.ts +0 -155
- package/src/lib/components/documents/services/documents.service.ts +0 -354
- package/src/lib/components/dynamic-chart/dynamic-chart/dynamic-chart.component.html +0 -26
- package/src/lib/components/dynamic-chart/dynamic-chart/dynamic-chart.component.scss +0 -35
- package/src/lib/components/dynamic-chart/dynamic-chart/dynamic-chart.component.spec.ts +0 -25
- package/src/lib/components/dynamic-chart/dynamic-chart/dynamic-chart.component.ts +0 -423
- package/src/lib/components/dynamic-chart/dynamic-chart.module.ts +0 -22
- package/src/lib/components/dynamic-chart/dynamic-single-chart/dynamic-single-chart.component.html +0 -4
- package/src/lib/components/dynamic-chart/dynamic-single-chart/dynamic-single-chart.component.scss +0 -14
- package/src/lib/components/dynamic-chart/dynamic-single-chart/dynamic-single-chart.component.spec.ts +0 -25
- package/src/lib/components/dynamic-chart/dynamic-single-chart/dynamic-single-chart.component.ts +0 -178
- package/src/lib/components/dynamic-chart/new-chart-box.ts +0 -0
- package/src/lib/components/dynamic-chart/services/chart-data.service.ts +0 -613
- package/src/lib/components/dynamic-fields-renderer/dynamic-fields-renderer/dynamic-fields-renderer.component.html +0 -58
- package/src/lib/components/dynamic-fields-renderer/dynamic-fields-renderer/dynamic-fields-renderer.component.scss +0 -0
- package/src/lib/components/dynamic-fields-renderer/dynamic-fields-renderer/dynamic-fields-renderer.component.spec.ts +0 -25
- package/src/lib/components/dynamic-fields-renderer/dynamic-fields-renderer/dynamic-fields-renderer.component.ts +0 -162
- package/src/lib/components/dynamic-fields-renderer/dynamic-fields-renderer.module.ts +0 -25
- package/src/lib/components/dynamic-filter/dynamic-filter/dynamic-filter.component.html +0 -122
- package/src/lib/components/dynamic-filter/dynamic-filter/dynamic-filter.component.scss +0 -103
- package/src/lib/components/dynamic-filter/dynamic-filter/dynamic-filter.component.spec.ts +0 -25
- package/src/lib/components/dynamic-filter/dynamic-filter/dynamic-filter.component.ts +0 -124
- package/src/lib/components/dynamic-filter/dynamic-filter.module.ts +0 -19
- package/src/lib/components/dynamic-filter/services/dynamic-filter.service.ts +0 -14
- package/src/lib/components/dynamic-form/components/department-form/department-form.component.html +0 -100
- package/src/lib/components/dynamic-form/components/department-form/department-form.component.scss +0 -38
- package/src/lib/components/dynamic-form/components/department-form/department-form.component.spec.ts +0 -25
- package/src/lib/components/dynamic-form/components/department-form/department-form.component.ts +0 -132
- package/src/lib/components/dynamic-form/components/dynamic-form/dynamic-form.component.html +0 -3
- package/src/lib/components/dynamic-form/components/dynamic-form/dynamic-form.component.scss +0 -51
- package/src/lib/components/dynamic-form/components/dynamic-form/dynamic-form.component.ts +0 -109
- package/src/lib/components/dynamic-form/components/dynamic-form/fields.adapter.ts +0 -123
- package/src/lib/components/dynamic-form/components/dynamic-form/form-builder.service.ts +0 -120
- package/src/lib/components/dynamic-form/components/dynamic-form-boolitem/dynamic-form-boolitem.component.html +0 -14
- package/src/lib/components/dynamic-form/components/dynamic-form-boolitem/dynamic-form-boolitem.component.scss +0 -2
- package/src/lib/components/dynamic-form/components/dynamic-form-boolitem/dynamic-form-boolitem.component.ts +0 -34
- package/src/lib/components/dynamic-form/components/dynamic-form-builder/dynamic-form-builder.component.html +0 -15
- package/src/lib/components/dynamic-form/components/dynamic-form-builder/dynamic-form-builder.component.scss +0 -73
- package/src/lib/components/dynamic-form/components/dynamic-form-builder/dynamic-form-builder.component.ts +0 -161
- package/src/lib/components/dynamic-form/components/dynamic-form-checkbox-item/dynamic-form-checkbox-item.component.html +0 -10
- package/src/lib/components/dynamic-form/components/dynamic-form-checkbox-item/dynamic-form-checkbox-item.component.scss +0 -13
- package/src/lib/components/dynamic-form/components/dynamic-form-checkbox-item/dynamic-form-checkbox-item.component.spec.ts +0 -25
- package/src/lib/components/dynamic-form/components/dynamic-form-checkbox-item/dynamic-form-checkbox-item.component.ts +0 -72
- package/src/lib/components/dynamic-form/components/dynamic-form-dateitem/dynamic-form-dateitem.component.html +0 -56
- package/src/lib/components/dynamic-form/components/dynamic-form-dateitem/dynamic-form-dateitem.component.scss +0 -99
- package/src/lib/components/dynamic-form/components/dynamic-form-dateitem/dynamic-form-dateitem.component.ts +0 -210
- package/src/lib/components/dynamic-form/components/dynamic-form-dateitem/owlDateTimeIntl.ts +0 -94
- package/src/lib/components/dynamic-form/components/dynamic-form-department/constants/department.ts +0 -12
- package/src/lib/components/dynamic-form/components/dynamic-form-department/dynamic-form-department.component.html +0 -36
- package/src/lib/components/dynamic-form/components/dynamic-form-department/dynamic-form-department.component.scss +0 -11
- package/src/lib/components/dynamic-form/components/dynamic-form-department/dynamic-form-department.component.ts +0 -230
- package/src/lib/components/dynamic-form/components/dynamic-form-department/services/department-api.service.ts +0 -251
- package/src/lib/components/dynamic-form/components/dynamic-form-department/services/department-management.service.ts +0 -126
- package/src/lib/components/dynamic-form/components/dynamic-form-field/dynamic-form-field.component.html +0 -1
- package/src/lib/components/dynamic-form/components/dynamic-form-field/dynamic-form-field.component.scss +0 -0
- package/src/lib/components/dynamic-form/components/dynamic-form-field/dynamic-form-field.component.ts +0 -92
- package/src/lib/components/dynamic-form/components/dynamic-form-hijri-dateitem/dynamic-form-hijri-dateitem.component.html +0 -29
- package/src/lib/components/dynamic-form/components/dynamic-form-hijri-dateitem/dynamic-form-hijri-dateitem.component.scss +0 -54
- package/src/lib/components/dynamic-form/components/dynamic-form-hijri-dateitem/dynamic-form-hijri-dateitem.component.spec.ts +0 -25
- package/src/lib/components/dynamic-form/components/dynamic-form-hijri-dateitem/dynamic-form-hijri-dateitem.component.ts +0 -152
- package/src/lib/components/dynamic-form/components/dynamic-form-item-dispatcher/dynamic-form-item-dispatcher.component.ts +0 -105
- package/src/lib/components/dynamic-form/components/dynamic-form-mapitem/dynamic-form-mapitem.component.html +0 -31
- package/src/lib/components/dynamic-form/components/dynamic-form-mapitem/dynamic-form-mapitem.component.scss +0 -5
- package/src/lib/components/dynamic-form/components/dynamic-form-mapitem/dynamic-form-mapitem.component.ts +0 -32
- package/src/lib/components/dynamic-form/components/dynamic-form-options/dynamic-form-options.component.html +0 -56
- package/src/lib/components/dynamic-form/components/dynamic-form-options/dynamic-form-options.component.scss +0 -24
- package/src/lib/components/dynamic-form/components/dynamic-form-options/dynamic-form-options.component.spec.ts +0 -25
- package/src/lib/components/dynamic-form/components/dynamic-form-options/dynamic-form-options.component.ts +0 -110
- package/src/lib/components/dynamic-form/components/dynamic-form-select-tag/dynamic-form-select-tag.component.html +0 -27
- package/src/lib/components/dynamic-form/components/dynamic-form-select-tag/dynamic-form-select-tag.component.scss +0 -100
- package/src/lib/components/dynamic-form/components/dynamic-form-select-tag/dynamic-form-select-tag.component.spec.ts +0 -25
- package/src/lib/components/dynamic-form/components/dynamic-form-select-tag/dynamic-form-select-tag.component.ts +0 -117
- package/src/lib/components/dynamic-form/components/dynamic-form-select-user-filter/dynamic-form-select-user-filter.component.html +0 -83
- package/src/lib/components/dynamic-form/components/dynamic-form-select-user-filter/dynamic-form-select-user-filter.component.scss +0 -136
- package/src/lib/components/dynamic-form/components/dynamic-form-select-user-filter/dynamic-form-select-user-filter.component.spec.ts +0 -25
- package/src/lib/components/dynamic-form/components/dynamic-form-select-user-filter/dynamic-form-select-user-filter.component.ts +0 -199
- package/src/lib/components/dynamic-form/components/dynamic-form-select-users/dynamic-form-select-users.component.html +0 -99
- package/src/lib/components/dynamic-form/components/dynamic-form-select-users/dynamic-form-select-users.component.scss +0 -177
- package/src/lib/components/dynamic-form/components/dynamic-form-select-users/dynamic-form-select-users.component.spec.ts +0 -25
- package/src/lib/components/dynamic-form/components/dynamic-form-select-users/dynamic-form-select-users.component.ts +0 -335
- package/src/lib/components/dynamic-form/components/dynamic-form-select-users/services/user-api.service.ts +0 -50
- package/src/lib/components/dynamic-form/components/dynamic-form-selectitem/dynamic-form-selectitem.component.html +0 -92
- package/src/lib/components/dynamic-form/components/dynamic-form-selectitem/dynamic-form-selectitem.component.scss +0 -132
- package/src/lib/components/dynamic-form/components/dynamic-form-selectitem/dynamic-form-selectitem.component.ts +0 -194
- package/src/lib/components/dynamic-form/components/dynamic-form-slide-toggleitem/dynamic-form-slide-toggleitem.component.html +0 -13
- package/src/lib/components/dynamic-form/components/dynamic-form-slide-toggleitem/dynamic-form-slide-toggleitem.component.scss +0 -19
- package/src/lib/components/dynamic-form/components/dynamic-form-slide-toggleitem/dynamic-form-slide-toggleitem.component.spec.ts +0 -25
- package/src/lib/components/dynamic-form/components/dynamic-form-slide-toggleitem/dynamic-form-slide-toggleitem.component.ts +0 -85
- package/src/lib/components/dynamic-form/components/dynamic-form-textarea/dynamic-form-textarea.component.html +0 -27
- package/src/lib/components/dynamic-form/components/dynamic-form-textarea/dynamic-form-textarea.component.scss +0 -147
- package/src/lib/components/dynamic-form/components/dynamic-form-textarea/dynamic-form-textarea.component.ts +0 -213
- package/src/lib/components/dynamic-form/components/dynamic-form-textitem/dynamic-form-textitem.component.html +0 -68
- package/src/lib/components/dynamic-form/components/dynamic-form-textitem/dynamic-form-textitem.component.scss +0 -208
- package/src/lib/components/dynamic-form/components/dynamic-form-textitem/dynamic-form-textitem.component.ts +0 -308
- package/src/lib/components/dynamic-form/components/dynamic-form-treeview-select/dropdown-treeview-select-i18n.ts +0 -73
- package/src/lib/components/dynamic-form/components/dynamic-form-treeview-select/dropdown-treeview-select.component.ts +0 -350
- package/src/lib/components/dynamic-form/components/dynamic-form-treeview-select/dynamic-form-treeview-select.component.html +0 -235
- package/src/lib/components/dynamic-form/components/dynamic-form-treeview-select/dynamic-form-treeview-select.component.scss +0 -246
- package/src/lib/components/dynamic-form/components/dynamic-form-viewer/dynamic-form-viewer.component.html +0 -23
- package/src/lib/components/dynamic-form/components/dynamic-form-viewer/dynamic-form-viewer.component.scss +0 -29
- package/src/lib/components/dynamic-form/components/dynamic-form-viewer/dynamic-form-viewer.component.spec.ts +0 -25
- package/src/lib/components/dynamic-form/components/dynamic-form-viewer/dynamic-form-viewer.component.ts +0 -39
- package/src/lib/components/dynamic-form/components/dynamic-form-vocabulary-item/dynamic-form-vocabulary-item.component.html +0 -35
- package/src/lib/components/dynamic-form/components/dynamic-form-vocabulary-item/dynamic-form-vocabulary-item.component.scss +0 -0
- package/src/lib/components/dynamic-form/components/dynamic-form-vocabulary-item/dynamic-form-vocabulary-item.component.spec.ts +0 -25
- package/src/lib/components/dynamic-form/components/dynamic-form-vocabulary-item/dynamic-form-vocabulary-item.component.ts +0 -175
- package/src/lib/components/dynamic-form/components/form-wrappers/base-edit-form/base-edit-form.ts +0 -780
- package/src/lib/components/dynamic-form/components/form-wrappers/date-wrapper/date-wrapper.component.html +0 -2
- package/src/lib/components/dynamic-form/components/form-wrappers/date-wrapper/date-wrapper.component.scss +0 -0
- package/src/lib/components/dynamic-form/components/form-wrappers/date-wrapper/date-wrapper.component.ts +0 -33
- package/src/lib/components/dynamic-form/components/form-wrappers/date-wrapper/date-wrapper.formio.ts +0 -22
- package/src/lib/components/dynamic-form/components/form-wrappers/toggle-wrapper/toggle-wrapper.component.html +0 -1
- package/src/lib/components/dynamic-form/components/form-wrappers/toggle-wrapper/toggle-wrapper.component.scss +0 -0
- package/src/lib/components/dynamic-form/components/form-wrappers/toggle-wrapper/toggle-wrapper.component.ts +0 -32
- package/src/lib/components/dynamic-form/components/form-wrappers/toggle-wrapper/toggle-wrapper.formio.ts +0 -20
- package/src/lib/components/dynamic-form/components/form-wrappers/user-selector-wrapper/user-selector-wrapper.component.css +0 -0
- package/src/lib/components/dynamic-form/components/form-wrappers/user-selector-wrapper/user-selector-wrapper.component.html +0 -17
- package/src/lib/components/dynamic-form/components/form-wrappers/user-selector-wrapper/user-selector-wrapper.component.ts +0 -65
- package/src/lib/components/dynamic-form/components/form-wrappers/user-selector-wrapper/user-selector-wrapper.formio.ts +0 -34
- package/src/lib/components/dynamic-form/components/form-wrappers/vocabulary-wrapper/vocabulary-wrapper.component.html +0 -10
- package/src/lib/components/dynamic-form/components/form-wrappers/vocabulary-wrapper/vocabulary-wrapper.component.scss +0 -0
- package/src/lib/components/dynamic-form/components/form-wrappers/vocabulary-wrapper/vocabulary-wrapper.component.ts +0 -28
- package/src/lib/components/dynamic-form/components/form-wrappers/vocabulary-wrapper/vocabulary-wrapper.formio.ts +0 -34
- package/src/lib/components/dynamic-form/directives/dynamic-form-content-proxy.directive.ts +0 -10
- package/src/lib/components/dynamic-form/dynamic-form.module.scss +0 -13
- package/src/lib/components/dynamic-form/dynamic-form.module.ts +0 -193
- package/src/lib/components/dynamic-form/interfaces/aspect-oriented-config.interface.ts +0 -3
- package/src/lib/components/dynamic-form/interfaces/content-metadata-config.interface.ts +0 -16
- package/src/lib/components/dynamic-form/interfaces/content-metadata.interfaces.ts +0 -26
- package/src/lib/components/dynamic-form/interfaces/dynamic-form-arrayitem-properties.interface.ts +0 -5
- package/src/lib/components/dynamic-form/interfaces/dynamic-form-boolitem-properties.interface.ts +0 -6
- package/src/lib/components/dynamic-form/interfaces/dynamic-form-dateitem-properties.interface.ts +0 -6
- package/src/lib/components/dynamic-form/interfaces/dynamic-form-group.interface.ts +0 -6
- package/src/lib/components/dynamic-form/interfaces/dynamic-form-item-properties.interface.ts +0 -16
- package/src/lib/components/dynamic-form/interfaces/dynamic-form-item-validator.interface.ts +0 -4
- package/src/lib/components/dynamic-form/interfaces/dynamic-form-item.interface.ts +0 -12
- package/src/lib/components/dynamic-form/interfaces/dynamic-form-keyvaluepairsitem-properties.interface.ts +0 -11
- package/src/lib/components/dynamic-form/interfaces/dynamic-form-selectitem-properties.interface.ts +0 -13
- package/src/lib/components/dynamic-form/interfaces/dynamic-form-textitem-pipe-property.interface.ts +0 -6
- package/src/lib/components/dynamic-form/interfaces/dynamic-form-textitem-properties.interface.ts +0 -9
- package/src/lib/components/dynamic-form/interfaces/indifferent-config.interface.ts +0 -1
- package/src/lib/components/dynamic-form/interfaces/layout-oriented-config.interface.ts +0 -17
- package/src/lib/components/dynamic-form/interfaces/organised-property-group.interface.ts +0 -7
- package/src/lib/components/dynamic-form/interfaces/preset-config.interface.ts +0 -8
- package/src/lib/components/dynamic-form/interfaces/property-group.interface.ts +0 -14
- package/src/lib/components/dynamic-form/interfaces/property.interface.ts +0 -12
- package/src/lib/components/dynamic-form/models/dynamic-form-arrayitem.model.ts +0 -26
- package/src/lib/components/dynamic-form/models/dynamic-form-baseitem.model.ts +0 -96
- package/src/lib/components/dynamic-form/models/dynamic-form-boolitem.model.ts +0 -27
- package/src/lib/components/dynamic-form/models/dynamic-form-dateitem.model.ts +0 -39
- package/src/lib/components/dynamic-form/models/dynamic-form-datetimeitem.model.ts +0 -18
- package/src/lib/components/dynamic-form/models/dynamic-form-keyvaluepairs.model.ts +0 -19
- package/src/lib/components/dynamic-form/models/dynamic-form-mapitem.model.ts +0 -17
- package/src/lib/components/dynamic-form/models/dynamic-form-selectitem.model.ts +0 -30
- package/src/lib/components/dynamic-form/models/dynamic-form-textitem.model.ts +0 -47
- package/src/lib/components/dynamic-form/services/card-item-types.service.ts +0 -55
- package/src/lib/components/dynamic-form/services/dynamic-component-mapper.service.ts +0 -86
- package/src/lib/components/dynamic-form/services/dynamic-form-update.service.ts +0 -105
- package/src/lib/components/dynamic-form/services/property-groups-translator.service.ts +0 -159
- package/src/lib/components/dynamic-form/services/vocabulary-api.service.ts +0 -32
- package/src/lib/components/dynamic-form/validators/date-validator.ts +0 -18
- package/src/lib/components/dynamic-form/validators/length-validator.ts +0 -18
- package/src/lib/components/dynamic-form/validators/regex-validator.ts +0 -16
- package/src/lib/components/dynamic-form/validators/required-validator.ts +0 -7
- package/src/lib/components/dynamic-form/validators/value-validator.ts +0 -18
- package/src/lib/components/dynamic-search/dynamic-search/dynamic-search.component.html +0 -219
- package/src/lib/components/dynamic-search/dynamic-search/dynamic-search.component.scss +0 -195
- package/src/lib/components/dynamic-search/dynamic-search/dynamic-search.component.spec.ts +0 -25
- package/src/lib/components/dynamic-search/dynamic-search/dynamic-search.component.ts +0 -316
- package/src/lib/components/dynamic-search/dynamic-search.module.ts +0 -33
- package/src/lib/components/dynamic-table/constants/documents.ts +0 -72
- package/src/lib/components/dynamic-table/dynamic-table/dynamic-table.component.html +0 -46
- package/src/lib/components/dynamic-table/dynamic-table/dynamic-table.component.scss +0 -33
- package/src/lib/components/dynamic-table/dynamic-table/dynamic-table.component.spec.ts +0 -25
- package/src/lib/components/dynamic-table/dynamic-table/dynamic-table.component.ts +0 -239
- package/src/lib/components/dynamic-table/dynamic-table.module.ts +0 -27
- package/src/lib/components/dynamic-table/services/dynamic-table.service.spec.ts +0 -16
- package/src/lib/components/dynamic-table/services/dynamic-table.service.ts +0 -10
- package/src/lib/components/dynamic-tabs/dynamic-tabs/dynamic-tabs.component.html +0 -11
- package/src/lib/components/dynamic-tabs/dynamic-tabs/dynamic-tabs.component.scss +0 -63
- package/src/lib/components/dynamic-tabs/dynamic-tabs/dynamic-tabs.component.spec.ts +0 -25
- package/src/lib/components/dynamic-tabs/dynamic-tabs/dynamic-tabs.component.ts +0 -25
- package/src/lib/components/dynamic-tabs/dynamic-tabs.module.ts +0 -20
- package/src/lib/components/dynamic-view/boolean-viewer/boolean-viewer.component.html +0 -4
- package/src/lib/components/dynamic-view/boolean-viewer/boolean-viewer.component.scss +0 -0
- package/src/lib/components/dynamic-view/boolean-viewer/boolean-viewer.component.spec.ts +0 -25
- package/src/lib/components/dynamic-view/boolean-viewer/boolean-viewer.component.ts +0 -19
- package/src/lib/components/dynamic-view/custom-document-viewer/custom-document-viewer.component.html +0 -3
- package/src/lib/components/dynamic-view/custom-document-viewer/custom-document-viewer.component.scss +0 -0
- package/src/lib/components/dynamic-view/custom-document-viewer/custom-document-viewer.component.spec.ts +0 -25
- package/src/lib/components/dynamic-view/custom-document-viewer/custom-document-viewer.component.ts +0 -55
- package/src/lib/components/dynamic-view/custom-pp-viewer/custom-pp-viewer.component.html +0 -3
- package/src/lib/components/dynamic-view/custom-pp-viewer/custom-pp-viewer.component.scss +0 -0
- package/src/lib/components/dynamic-view/custom-pp-viewer/custom-pp-viewer.component.spec.ts +0 -25
- package/src/lib/components/dynamic-view/custom-pp-viewer/custom-pp-viewer.component.ts +0 -65
- package/src/lib/components/dynamic-view/cutome-voc-viewer/cutome-voc-viewer.component.html +0 -14
- package/src/lib/components/dynamic-view/cutome-voc-viewer/cutome-voc-viewer.component.scss +0 -0
- package/src/lib/components/dynamic-view/cutome-voc-viewer/cutome-voc-viewer.component.spec.ts +0 -25
- package/src/lib/components/dynamic-view/cutome-voc-viewer/cutome-voc-viewer.component.ts +0 -28
- package/src/lib/components/dynamic-view/data-viewer/data-viewer.component.html +0 -15
- package/src/lib/components/dynamic-view/data-viewer/data-viewer.component.scss +0 -0
- package/src/lib/components/dynamic-view/data-viewer/data-viewer.component.spec.ts +0 -25
- package/src/lib/components/dynamic-view/data-viewer/data-viewer.component.ts +0 -19
- package/src/lib/components/dynamic-view/date-viewer/date-viewer.component.html +0 -5
- package/src/lib/components/dynamic-view/date-viewer/date-viewer.component.scss +0 -0
- package/src/lib/components/dynamic-view/date-viewer/date-viewer.component.spec.ts +0 -25
- package/src/lib/components/dynamic-view/date-viewer/date-viewer.component.ts +0 -38
- package/src/lib/components/dynamic-view/department-viewer/department-viewer.component.html +0 -14
- package/src/lib/components/dynamic-view/department-viewer/department-viewer.component.scss +0 -0
- package/src/lib/components/dynamic-view/department-viewer/department-viewer.component.spec.ts +0 -25
- package/src/lib/components/dynamic-view/department-viewer/department-viewer.component.ts +0 -84
- package/src/lib/components/dynamic-view/dropdown-viewer/dropdown-viewer.component.html +0 -4
- package/src/lib/components/dynamic-view/dropdown-viewer/dropdown-viewer.component.scss +0 -0
- package/src/lib/components/dynamic-view/dropdown-viewer/dropdown-viewer.component.spec.ts +0 -25
- package/src/lib/components/dynamic-view/dropdown-viewer/dropdown-viewer.component.ts +0 -44
- package/src/lib/components/dynamic-view/dynamic-view.module.ts +0 -44
- package/src/lib/components/dynamic-view/dynamic-viewe.service.ts +0 -58
- package/src/lib/components/dynamic-view/list-viewer/list-viewer.component.html +0 -24
- package/src/lib/components/dynamic-view/list-viewer/list-viewer.component.scss +0 -55
- package/src/lib/components/dynamic-view/list-viewer/list-viewer.component.spec.ts +0 -25
- package/src/lib/components/dynamic-view/list-viewer/list-viewer.component.ts +0 -27
- package/src/lib/components/file-manger/components/add-to-collection/add-to-collection.component.html +0 -34
- package/src/lib/components/file-manger/components/add-to-collection/add-to-collection.component.scss +0 -0
- package/src/lib/components/file-manger/components/add-to-collection/add-to-collection.component.spec.ts +0 -25
- package/src/lib/components/file-manger/components/add-to-collection/add-to-collection.component.ts +0 -139
- package/src/lib/components/file-manger/components/clipboard/clipboard.component.html +0 -88
- package/src/lib/components/file-manger/components/clipboard/clipboard.component.scss +0 -17
- package/src/lib/components/file-manger/components/clipboard/clipboard.component.spec.ts +0 -25
- package/src/lib/components/file-manger/components/clipboard/clipboard.component.ts +0 -279
- package/src/lib/components/file-manger/components/copy/copy.component.html +0 -24
- package/src/lib/components/file-manger/components/copy/copy.component.scss +0 -0
- package/src/lib/components/file-manger/components/copy/copy.component.spec.ts +0 -25
- package/src/lib/components/file-manger/components/copy/copy.component.ts +0 -129
- package/src/lib/components/file-manger/components/create-directory/create-directory.component.html +0 -32
- package/src/lib/components/file-manger/components/create-directory/create-directory.component.scss +0 -0
- package/src/lib/components/file-manger/components/create-directory/create-directory.component.spec.ts +0 -25
- package/src/lib/components/file-manger/components/create-directory/create-directory.component.ts +0 -85
- package/src/lib/components/file-manger/components/create-modal/create-modal.component.html +0 -244
- package/src/lib/components/file-manger/components/create-modal/create-modal.component.scss +0 -20
- package/src/lib/components/file-manger/components/create-modal/create-modal.component.spec.ts +0 -25
- package/src/lib/components/file-manger/components/create-modal/create-modal.component.ts +0 -475
- package/src/lib/components/file-manger/components/creation-type/creation-type.component.html +0 -39
- package/src/lib/components/file-manger/components/creation-type/creation-type.component.scss +0 -0
- package/src/lib/components/file-manger/components/creation-type/creation-type.component.spec.ts +0 -25
- package/src/lib/components/file-manger/components/creation-type/creation-type.component.ts +0 -19
- package/src/lib/components/file-manger/components/delete/delete.component.html +0 -25
- package/src/lib/components/file-manger/components/delete/delete.component.scss +0 -0
- package/src/lib/components/file-manger/components/delete/delete.component.spec.ts +0 -25
- package/src/lib/components/file-manger/components/delete/delete.component.ts +0 -80
- package/src/lib/components/file-manger/components/folder-modal/folder-modal.component.html +0 -88
- package/src/lib/components/file-manger/components/folder-modal/folder-modal.component.scss +0 -7
- package/src/lib/components/file-manger/components/folder-modal/folder-modal.component.spec.ts +0 -25
- package/src/lib/components/file-manger/components/folder-modal/folder-modal.component.ts +0 -113
- package/src/lib/components/file-manger/components/loan-request/loan-request.component.html +0 -31
- package/src/lib/components/file-manger/components/loan-request/loan-request.component.scss +0 -0
- package/src/lib/components/file-manger/components/loan-request/loan-request.component.spec.ts +0 -25
- package/src/lib/components/file-manger/components/loan-request/loan-request.component.ts +0 -72
- package/src/lib/components/file-manger/components/move/move.component.html +0 -24
- package/src/lib/components/file-manger/components/move/move.component.scss +0 -0
- package/src/lib/components/file-manger/components/move/move.component.spec.ts +0 -25
- package/src/lib/components/file-manger/components/move/move.component.ts +0 -114
- package/src/lib/components/file-manger/components/publish-dialog/publish-dialog.component.html +0 -45
- package/src/lib/components/file-manger/components/publish-dialog/publish-dialog.component.scss +0 -0
- package/src/lib/components/file-manger/components/publish-dialog/publish-dialog.component.spec.ts +0 -25
- package/src/lib/components/file-manger/components/publish-dialog/publish-dialog.component.ts +0 -98
- package/src/lib/components/file-manger/components/rename/rename.component.html +0 -28
- package/src/lib/components/file-manger/components/rename/rename.component.scss +0 -0
- package/src/lib/components/file-manger/components/rename/rename.component.spec.ts +0 -25
- package/src/lib/components/file-manger/components/rename/rename.component.ts +0 -82
- package/src/lib/components/file-manger/components/scan-modal/scan-modal.component.html +0 -336
- package/src/lib/components/file-manger/components/scan-modal/scan-modal.component.scss +0 -9
- package/src/lib/components/file-manger/components/scan-modal/scan-modal.component.spec.ts +0 -25
- package/src/lib/components/file-manger/components/scan-modal/scan-modal.component.ts +0 -337
- package/src/lib/components/file-manger/components/share-dialog/share-dialog.component.html +0 -159
- package/src/lib/components/file-manger/components/share-dialog/share-dialog.component.scss +0 -38
- package/src/lib/components/file-manger/components/share-dialog/share-dialog.component.spec.ts +0 -25
- package/src/lib/components/file-manger/components/share-dialog/share-dialog.component.ts +0 -288
- package/src/lib/components/file-manger/components/sidepanel/sidepanel.component.html +0 -350
- package/src/lib/components/file-manger/components/sidepanel/sidepanel.component.scss +0 -0
- package/src/lib/components/file-manger/components/sidepanel/sidepanel.component.spec.ts +0 -25
- package/src/lib/components/file-manger/components/sidepanel/sidepanel.component.ts +0 -247
- package/src/lib/components/file-manger/components/template-modal/template-modal.component.html +0 -213
- package/src/lib/components/file-manger/components/template-modal/template-modal.component.scss +0 -3
- package/src/lib/components/file-manger/components/template-modal/template-modal.component.spec.ts +0 -25
- package/src/lib/components/file-manger/components/template-modal/template-modal.component.ts +0 -55
- package/src/lib/components/file-manger/components/transfer-doc/transfer-doc.component.html +0 -26
- package/src/lib/components/file-manger/components/transfer-doc/transfer-doc.component.scss +0 -0
- package/src/lib/components/file-manger/components/transfer-doc/transfer-doc.component.spec.ts +0 -25
- package/src/lib/components/file-manger/components/transfer-doc/transfer-doc.component.ts +0 -74
- package/src/lib/components/file-manger/components/update-modal/update-modal.component.html +0 -97
- package/src/lib/components/file-manger/components/update-modal/update-modal.component.scss +0 -7
- package/src/lib/components/file-manger/components/update-modal/update-modal.component.spec.ts +0 -25
- package/src/lib/components/file-manger/components/update-modal/update-modal.component.ts +0 -365
- package/src/lib/components/file-manger/file-manager.abstract.ts +0 -1347
- package/src/lib/components/file-manger/file-manger.module.ts +0 -154
- package/src/lib/components/filter/filter/filter.component.html +0 -79
- package/src/lib/components/filter/filter/filter.component.md +0 -68
- package/src/lib/components/filter/filter/filter.component.scss +0 -50
- package/src/lib/components/filter/filter/filter.component.spec.ts +0 -25
- package/src/lib/components/filter/filter/filter.component.ts +0 -81
- package/src/lib/components/filter/filter.module.ts +0 -27
- package/src/lib/components/hijri-gregorian-datepicker/hijri-gregorian-datepicker/gregorian-datepicker/gregorian-date-picker.component.scss +0 -67
- package/src/lib/components/hijri-gregorian-datepicker/hijri-gregorian-datepicker/gregorian-datepicker/gregorian-datepicker.component.html +0 -47
- package/src/lib/components/hijri-gregorian-datepicker/hijri-gregorian-datepicker/gregorian-datepicker/gregorian-datepicker.component.ts +0 -99
- package/src/lib/components/hijri-gregorian-datepicker/hijri-gregorian-datepicker/hijri-datepicker/hijri-date-picker.component.scss +0 -67
- package/src/lib/components/hijri-gregorian-datepicker/hijri-gregorian-datepicker/hijri-datepicker/hijri-datepicker.component.html +0 -47
- package/src/lib/components/hijri-gregorian-datepicker/hijri-gregorian-datepicker/hijri-datepicker/hijri-datepicker.component.ts +0 -102
- package/src/lib/components/hijri-gregorian-datepicker/hijri-gregorian-datepicker/hijri-gregorian-datepicker.component.html +0 -29
- package/src/lib/components/hijri-gregorian-datepicker/hijri-gregorian-datepicker/hijri-gregorian-datepicker.component.ts +0 -152
- package/src/lib/components/hijri-gregorian-datepicker/hijri-gregorian-datepicker/provide-parent-form.directive.ts +0 -23
- package/src/lib/components/hijri-gregorian-datepicker/ngx-hijri-gregorian-datepicker.module.ts +0 -35
- package/src/lib/components/hijri-gregorian-datepicker/services/date-formatter.service.ts +0 -94
- package/src/lib/components/hijri-gregorian-datepicker/services/date-helper.service.ts +0 -28
- package/src/lib/components/hijri-gregorian-datepicker/services/ngx-hijri-gregorian-datepicker.service.ts +0 -9
- package/src/lib/components/hijri-gregorian-datepicker/utils/CustomNgbDateParserFormatter.ts +0 -35
- package/src/lib/components/hijri-gregorian-datepicker/utils/IslamicI18n.ts +0 -26
- package/src/lib/components/hijri-gregorian-datepicker/utils/consts.ts +0 -4
- package/src/lib/components/latest-activity/components/activity-line/activity-line.component.html +0 -27
- package/src/lib/components/latest-activity/components/activity-line/activity-line.component.scss +0 -13
- package/src/lib/components/latest-activity/components/activity-line/activity-line.component.spec.ts +0 -25
- package/src/lib/components/latest-activity/components/activity-line/activity-line.component.ts +0 -73
- package/src/lib/components/latest-activity/components/latest-activity/latest-activity.component.html +0 -36
- package/src/lib/components/latest-activity/components/latest-activity/latest-activity.component.scss +0 -12
- package/src/lib/components/latest-activity/components/latest-activity/latest-activity.component.spec.ts +0 -25
- package/src/lib/components/latest-activity/components/latest-activity/latest-activity.component.ts +0 -78
- package/src/lib/components/latest-activity/components/single-activity/single-activity.component.html +0 -38
- package/src/lib/components/latest-activity/components/single-activity/single-activity.component.scss +0 -157
- package/src/lib/components/latest-activity/components/single-activity/single-activity.component.spec.ts +0 -25
- package/src/lib/components/latest-activity/components/single-activity/single-activity.component.ts +0 -19
- package/src/lib/components/latest-activity/constants/activitylog.ts +0 -80
- package/src/lib/components/latest-activity/latest-activity.module.ts +0 -33
- package/src/lib/components/latest-activity/services/activity-log.service.ts +0 -41
- package/src/lib/components/mutiple-dynamic-form-viewer/multiple-dynamic-form-viewer/multiple-dynamic-form-viewer.component.html +0 -36
- package/src/lib/components/mutiple-dynamic-form-viewer/multiple-dynamic-form-viewer/multiple-dynamic-form-viewer.component.scss +0 -32
- package/src/lib/components/mutiple-dynamic-form-viewer/multiple-dynamic-form-viewer/multiple-dynamic-form-viewer.component.spec.ts +0 -25
- package/src/lib/components/mutiple-dynamic-form-viewer/multiple-dynamic-form-viewer/multiple-dynamic-form-viewer.component.ts +0 -45
- package/src/lib/components/mutiple-dynamic-form-viewer/mutiple-dynamic-form-viewer.module.ts +0 -18
- package/src/lib/components/notifications/components/notification-item/notification-item.component.html +0 -45
- package/src/lib/components/notifications/components/notification-item/notification-item.component.scss +0 -60
- package/src/lib/components/notifications/components/notification-item/notification-item.component.ts +0 -136
- package/src/lib/components/notifications/components/notification-options/notification-options.component.html +0 -7
- package/src/lib/components/notifications/components/notification-options/notification-options.component.scss +0 -7
- package/src/lib/components/notifications/components/notification-options/notification-options.component.ts +0 -16
- package/src/lib/components/notifications/components/notification-toast/notification-toast.component.html +0 -66
- package/src/lib/components/notifications/components/notification-toast/notification-toast.component.scss +0 -62
- package/src/lib/components/notifications/components/notification-toast/notification-toast.component.spec.ts +0 -25
- package/src/lib/components/notifications/components/notification-toast/notification-toast.component.ts +0 -55
- package/src/lib/components/notifications/components/notifications-button/notifications-button.component.html +0 -7
- package/src/lib/components/notifications/components/notifications-button/notifications-button.component.scss +0 -90
- package/src/lib/components/notifications/components/notifications-button/notifications-button.component.ts +0 -190
- package/src/lib/components/notifications/components/notifications-list/notifications-list.component.html +0 -55
- package/src/lib/components/notifications/components/notifications-list/notifications-list.component.scss +0 -108
- package/src/lib/components/notifications/components/notifications-list/notifications-list.component.ts +0 -161
- package/src/lib/components/notifications/interceptors/token.interceptor.ts +0 -37
- package/src/lib/components/notifications/notifications.module.ts +0 -67
- package/src/lib/components/notifications/notifications.service.ts +0 -300
- package/src/lib/components/pagination/pagination/pagination.component.html +0 -33
- package/src/lib/components/pagination/pagination/pagination.component.scss +0 -46
- package/src/lib/components/pagination/pagination/pagination.component.spec.ts +0 -25
- package/src/lib/components/pagination/pagination/pagination.component.ts +0 -132
- package/src/lib/components/pagination/pagination.module.ts +0 -21
- package/src/lib/components/pdf-tron/pdf-tron.module.ts +0 -16
- package/src/lib/components/pdf-tron/pdftron/pdftron.component.html +0 -1
- package/src/lib/components/pdf-tron/pdftron/pdftron.component.scss +0 -0
- package/src/lib/components/pdf-tron/pdftron/pdftron.component.spec.ts +0 -25
- package/src/lib/components/pdf-tron/pdftron/pdftron.component.ts +0 -782
- package/src/lib/components/pdf-tron/pdftron/pdftron.service.ts +0 -236
- package/src/lib/components/permissions/add-permissions-dialog/add-permissions-dialog.component.html +0 -149
- package/src/lib/components/permissions/add-permissions-dialog/add-permissions-dialog.component.scss +0 -159
- package/src/lib/components/permissions/add-permissions-dialog/add-permissions-dialog.component.spec.ts +0 -25
- package/src/lib/components/permissions/add-permissions-dialog/add-permissions-dialog.component.ts +0 -198
- package/src/lib/components/permissions/permission.service.ts +0 -151
- package/src/lib/components/permissions/permissions/permissions.component.html +0 -129
- package/src/lib/components/permissions/permissions/permissions.component.scss +0 -0
- package/src/lib/components/permissions/permissions/permissions.component.spec.ts +0 -25
- package/src/lib/components/permissions/permissions/permissions.component.ts +0 -227
- package/src/lib/components/permissions/permissions-template/permissions-template.component.html +0 -47
- package/src/lib/components/permissions/permissions-template/permissions-template.component.scss +0 -7
- package/src/lib/components/permissions/permissions-template/permissions-template.component.spec.ts +0 -25
- package/src/lib/components/permissions/permissions-template/permissions-template.component.ts +0 -104
- package/src/lib/components/permissions/permissions.module.ts +0 -39
- package/src/lib/components/select/select/select.component.html +0 -64
- package/src/lib/components/select/select/select.component.scss +0 -144
- package/src/lib/components/select/select/select.component.spec.ts +0 -25
- package/src/lib/components/select/select/select.component.ts +0 -116
- package/src/lib/components/select/select.module.ts +0 -22
- package/src/lib/components/select-users-by-department/select-users-by-department.module.ts +0 -27
- package/src/lib/components/select-users-by-department/select-users-by-departments/department-management.service.ts +0 -27
- package/src/lib/components/select-users-by-department/select-users-by-departments/select-users-by-departments.component.html +0 -88
- package/src/lib/components/select-users-by-department/select-users-by-departments/select-users-by-departments.component.scss +0 -15
- package/src/lib/components/select-users-by-department/select-users-by-departments/select-users-by-departments.component.spec.ts +0 -25
- package/src/lib/components/select-users-by-department/select-users-by-departments/select-users-by-departments.component.ts +0 -105
- package/src/lib/components/table/dynamic-column/dynamic-column.component.ts +0 -79
- package/src/lib/components/table/table/table.component.html +0 -377
- package/src/lib/components/table/table/table.component.scss +0 -507
- package/src/lib/components/table/table/table.component.spec.ts +0 -25
- package/src/lib/components/table/table/table.component.ts +0 -195
- package/src/lib/components/table/table.module.ts +0 -35
- package/src/lib/components/user/user/user.component.html +0 -15
- package/src/lib/components/user/user/user.component.scss +0 -0
- package/src/lib/components/user/user/user.component.spec.ts +0 -25
- package/src/lib/components/user/user/user.component.ts +0 -19
- package/src/lib/components/user/user.module.ts +0 -18
- package/src/lib/components/users-card/users-card.component.html +0 -20
- package/src/lib/components/users-card/users-card.component.scss +0 -16
- package/src/lib/components/users-card/users-card.component.ts +0 -30
- package/src/lib/components/users-card/users-card.module.ts +0 -19
- package/src/lib/components/viewer-log/components/viewer-log/viewer-log.component.html +0 -9
- package/src/lib/components/viewer-log/components/viewer-log/viewer-log.component.scss +0 -12
- package/src/lib/components/viewer-log/components/viewer-log/viewer-log.component.spec.ts +0 -25
- package/src/lib/components/viewer-log/components/viewer-log/viewer-log.component.ts +0 -25
- package/src/lib/components/viewer-log/viewer-log.module.ts +0 -12
- package/src/lib/components/vocabulary/interfaces/op-type.interface.ts +0 -4
- package/src/lib/components/vocabulary/services/vocabulary-api.service.ts +0 -46
- package/src/lib/components/vocabulary/vocabulary/vocabulary.component.html +0 -12
- package/src/lib/components/vocabulary/vocabulary/vocabulary.component.scss +0 -0
- package/src/lib/components/vocabulary/vocabulary/vocabulary.component.spec.ts +0 -25
- package/src/lib/components/vocabulary/vocabulary/vocabulary.component.ts +0 -80
- package/src/lib/components/vocabulary/vocabulary.module.ts +0 -20
- package/src/lib/configuration/app-config.service.ts +0 -26
- package/src/lib/configuration/configuration.module.ts +0 -12
- package/src/lib/configuration/helpers/app-initializer.ts +0 -5
- package/src/lib/directive/app-has-role/app-has-role.directive.ts +0 -62
- package/src/lib/directive/clickOutSide/click-outside.directive.ts +0 -20
- package/src/lib/directive/directive.module.ts +0 -36
- package/src/lib/directive/drag-and-drop/drag-and-drop.directive.ts +0 -37
- package/src/lib/directive/permissions/evaluators.service.ts +0 -148
- package/src/lib/directive/permissions/permissions.directive.ts +0 -74
- package/src/lib/directive/rtl/set-dir-rtl.directive.ts +0 -25
- package/src/lib/directive/rtl/set-rtl.directive.ts +0 -26
- package/src/lib/nuxeo-development-framework.component.ts +0 -20
- package/src/lib/nuxeo-development-framework.module.ts +0 -31
- package/src/lib/nuxeo-development-framework.service.ts +0 -9
- package/src/lib/pipes/file-size.pipe.ts +0 -61
- package/src/lib/pipes/hijri-date.pipe.ts +0 -40
- package/src/lib/pipes/localized-date.pipe.ts +0 -80
- package/src/lib/pipes/multi-value.pipe.ts +0 -39
- package/src/lib/pipes/pipes.module.ts +0 -20
- package/src/lib/pipes/secure-html.pipe.ts +0 -27
- package/src/lib/pipes/secure.pipe.ts +0 -37
- package/src/lib/pipes/time-ago.pipe.ts +0 -68
- package/src/lib/shared/components/button/button.component.html +0 -13
- package/src/lib/shared/components/button/button.component.scss +0 -102
- package/src/lib/shared/components/button/button.component.spec.ts +0 -25
- package/src/lib/shared/components/button/button.component.ts +0 -87
- package/src/lib/shared/components/item-list/item-list.component.html +0 -37
- package/src/lib/shared/components/item-list/item-list.component.scss +0 -62
- package/src/lib/shared/components/item-list/item-list.component.spec.ts +0 -25
- package/src/lib/shared/components/item-list/item-list.component.ts +0 -69
- package/src/lib/shared/components/no-data/no-data.component.html +0 -3
- package/src/lib/shared/components/no-data/no-data.component.scss +0 -13
- package/src/lib/shared/components/no-data/no-data.component.spec.ts +0 -25
- package/src/lib/shared/components/no-data/no-data.component.ts +0 -26
- package/src/lib/shared/components/read-more/read-more.component.ts +0 -86
- package/src/lib/shared/components/search-autocomplete/search-autocomplete.component.html +0 -24
- package/src/lib/shared/components/search-autocomplete/search-autocomplete.component.scss +0 -50
- package/src/lib/shared/components/search-autocomplete/search-autocomplete.component.spec.ts +0 -25
- package/src/lib/shared/components/search-autocomplete/search-autocomplete.component.ts +0 -153
- package/src/lib/shared/components/spinner/spinner.component.html +0 -10
- package/src/lib/shared/components/spinner/spinner.component.scss +0 -11
- package/src/lib/shared/components/spinner/spinner.component.spec.ts +0 -25
- package/src/lib/shared/components/spinner/spinner.component.ts +0 -25
- package/src/lib/shared/components/user-card/user-card.component.html +0 -21
- package/src/lib/shared/components/user-card/user-card.component.scss +0 -42
- package/src/lib/shared/components/user-card/user-card.component.spec.ts +0 -25
- package/src/lib/shared/components/user-card/user-card.component.ts +0 -42
- package/src/lib/shared/libraryShared.module.ts +0 -47
- package/src/lib/shared-services/dialog-mangment.service.ts +0 -62
- package/src/lib/shared-services/dynamic-form.service.ts +0 -252
- package/src/lib/shared-services/file-manager.adapter.ts +0 -69
- package/src/lib/shared-services/file-manager.service.ts +0 -1073
- package/src/lib/shared-services/global-pdftron.service.ts +0 -50
- package/src/lib/shared-services/mainfolder.service.ts +0 -220
- package/src/lib/shared-services/publishing-document.service.ts +0 -242
- package/src/lib/shared-services/recently-viewed.service.ts +0 -55
- package/src/lib/shared-services/shared-docs.service.ts +0 -173
- package/src/lib/shared-services/shared-services.module.ts +0 -12
- package/src/lib/shared-services/upload-file.service.ts +0 -26
- package/src/lib/shared-services/upload-managment.service.ts +0 -148
- package/src/lib/shared-services/user.service.ts +0 -49
- package/src/public-api.ts +0 -274
- package/src/test.ts +0 -26
- package/tsconfig.doc.json +0 -4
- package/tsconfig.lib.json +0 -21
- package/tsconfig.lib.prod.json +0 -10
- package/tsconfig.spec.json +0 -17
- package/tslint.json +0 -17
- /package/{src/lib/components/dynamic-form/interfaces/dynamic-form.interfaces.ts → lib/components/dynamic-form/interfaces/dynamic-form.interfaces.d.ts} +0 -0
- /package/{src/lib/components/dynamic-form/models/dynamic-form.models.ts → lib/components/dynamic-form/models/dynamic-form.models.d.ts} +0 -0
|
@@ -0,0 +1,745 @@
|
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import { Component, EventEmitter, Inject, Input, Output, ViewChild, } from '@angular/core';
|
|
3
|
+
import WebViewer from '@pdftron/webviewer';
|
|
4
|
+
import { APP_BASE_HREF } from '@angular/common';
|
|
5
|
+
import { SecurePipe } from '../../../pipes/secure.pipe';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "./pdftron.service";
|
|
8
|
+
import * as i2 from "../../../Core/services/nuxeo/nuxeo.service";
|
|
9
|
+
import * as i3 from "../../../pipes/secure.pipe";
|
|
10
|
+
import * as i4 from "../../../Core/services/translation/translation.service";
|
|
11
|
+
/**
|
|
12
|
+
* A reusable file viewer based on PDFTron Library
|
|
13
|
+
* @title
|
|
14
|
+
* PDFTron Viewer
|
|
15
|
+
* @example
|
|
16
|
+
* <app-pdftron
|
|
17
|
+
* [fileData]="fileData"
|
|
18
|
+
* [editMode]="false"
|
|
19
|
+
* [docId]="fileId"
|
|
20
|
+
* [fileTitle]="file.title"
|
|
21
|
+
* >
|
|
22
|
+
* </app-pdftron>
|
|
23
|
+
*/
|
|
24
|
+
export class PdftronComponent {
|
|
25
|
+
constructor(cdr, pdftronService, nuxeo, baseHref, securePipe, translationService, environment) {
|
|
26
|
+
this.cdr = cdr;
|
|
27
|
+
this.pdftronService = pdftronService;
|
|
28
|
+
this.nuxeo = nuxeo;
|
|
29
|
+
this.baseHref = baseHref;
|
|
30
|
+
this.securePipe = securePipe;
|
|
31
|
+
this.translationService = translationService;
|
|
32
|
+
this.environment = environment;
|
|
33
|
+
this.actionClicked = false; // used to know if there is action clicked outside to start edit mode or not
|
|
34
|
+
this.DOCUMENT_TYPE = 'application/pdf';
|
|
35
|
+
this.fitMode = 'FitWidth';
|
|
36
|
+
this.searchString = ''; // string to search for it in the document
|
|
37
|
+
this.trackSignature = false; // to enable tracking signature position and emit it after every change it signature
|
|
38
|
+
this.onSignatureTracking = new EventEmitter(); // event to emit signature changes
|
|
39
|
+
this.useOutsideAnotations = false; // flage to indicat if using out side anotations or not
|
|
40
|
+
this.onAddingAnotation = new EventEmitter(); // used to export all anotations to outside
|
|
41
|
+
this.events = new EventEmitter();
|
|
42
|
+
this.SignatureEvent = new EventEmitter(); // used to export signature to outside
|
|
43
|
+
this.firstTimeLoad = true; //flage to control importing signatures in the first time load only
|
|
44
|
+
this.firstSignatureLoad = true; // flage to pass first load of imported signatures without emitting the event
|
|
45
|
+
this.newSignCreation = false; // flage to indicate signature creation is created or choosed from stored ones
|
|
46
|
+
this.savedAnotations = [];
|
|
47
|
+
this.fileWithOcr = false;
|
|
48
|
+
this.newAnnotations = [];
|
|
49
|
+
this.mySearchStringResults = [];
|
|
50
|
+
this.recivedSearchStringsArray = [];
|
|
51
|
+
this.searchFn = (searchValue, options) => {
|
|
52
|
+
this.mySearchStringResults = [];
|
|
53
|
+
if (this.savedAnotations.length > 0) {
|
|
54
|
+
this.savedAnotations.map(annotation => {
|
|
55
|
+
annotation.Hidden = true;
|
|
56
|
+
// Always redraw annotation if rendering was updated
|
|
57
|
+
this.webViewerInstance.annotManager.redrawAnnotation(annotation);
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
// don't do any search until there is a search pattern
|
|
61
|
+
if (searchValue.trim().length > 0) {
|
|
62
|
+
if (this.fileWithOcr) {
|
|
63
|
+
// add redaction annotation for each search result
|
|
64
|
+
// const annotation = new Annotations.TextHighlightAnnotation();
|
|
65
|
+
let mySearch = searchValue.split(' ');
|
|
66
|
+
if (mySearch.length > 1) {
|
|
67
|
+
// then i am searching with more than one word
|
|
68
|
+
this.pages.pages.forEach((page, index) => {
|
|
69
|
+
this.pageHeight = page.page_height;
|
|
70
|
+
this.pageWidth = page.page_width;
|
|
71
|
+
this.standardHeight = this.webViewerInstance.docViewer.getPageHeight((index + 1));
|
|
72
|
+
this.standardWidth = this.webViewerInstance.docViewer.getPageWidth((index + 1));
|
|
73
|
+
page.zones.forEach(zone => {
|
|
74
|
+
zone.paragraphs.forEach(paragraph => {
|
|
75
|
+
paragraph.lines.forEach(line => {
|
|
76
|
+
if (line.text.includes(searchValue)) {
|
|
77
|
+
this.SearchForWordInLine(mySearch, line, (index + 1), page);
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
// then i am searching with only one word
|
|
86
|
+
this.searchForWordInAllPages(searchValue);
|
|
87
|
+
}
|
|
88
|
+
this.webViewerInstance.docViewer.clearSearchResults();
|
|
89
|
+
this.dispalaySearchResults(this.webViewerInstance.docViewer);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
this.webViewerInstance.docViewer.clearSearchResults();
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
ngOnInit() {
|
|
98
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
99
|
+
this.transelationSubscrition = this.translationService.isArabic.subscribe(res => {
|
|
100
|
+
this.isArabic = res;
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
ngAfterViewInit() {
|
|
105
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
106
|
+
this.recivedSearchStringsArray = this.searchString.trim() ? this.searchString.split(',') : [];
|
|
107
|
+
if (this.fileTitle.endsWith('.ppt')) {
|
|
108
|
+
this.DOCUMENT_TYPE = 'application/vnd.ms-powerpoint';
|
|
109
|
+
}
|
|
110
|
+
else if (this.fileTitle.endsWith('.pptx')) {
|
|
111
|
+
this.DOCUMENT_TYPE =
|
|
112
|
+
'application/vnd.openxmlformats-officedocument.presentationml.presentation';
|
|
113
|
+
}
|
|
114
|
+
else if (this.fileTitle.endsWith('.doc')) {
|
|
115
|
+
this.DOCUMENT_TYPE = 'application/msword';
|
|
116
|
+
}
|
|
117
|
+
else if (this.fileTitle.endsWith('.docx')) {
|
|
118
|
+
this.DOCUMENT_TYPE =
|
|
119
|
+
'application/vnd.openxmlformats-officedocument.wordprocessingml.document';
|
|
120
|
+
}
|
|
121
|
+
WebViewer({
|
|
122
|
+
path: this.baseHref + '/assets/pdftrons',
|
|
123
|
+
forceClientSideInit: true,
|
|
124
|
+
streaming: true,
|
|
125
|
+
licenseKey: this.environment.pdftronLicenceKey,
|
|
126
|
+
css: this.isArabic ? (this.baseHref + '/assets/styles/ar-mypdftron.css') : (this.baseHref + '/assets/styles/en-mypdftron.css'),
|
|
127
|
+
annotationUser: this.nuxeo.nuxeoClient.user.properties.firstName + ' ' + this.nuxeo.nuxeoClient.user.properties.lastName,
|
|
128
|
+
disabledElements: ['downloadButton', 'printButton'],
|
|
129
|
+
}, this.viewerRef.nativeElement).then((instance) => __awaiter(this, void 0, void 0, function* () {
|
|
130
|
+
this.isArabic ? instance.setLanguage('ar') : instance.setLanguage('en');
|
|
131
|
+
this.pdftronService.instance = this.webViewerInstance = instance;
|
|
132
|
+
if (this.correspondance.facets.indexOf('ctocr') > -1) {
|
|
133
|
+
this.fileWithOcr = true;
|
|
134
|
+
this.pages = JSON.parse(this.correspondance.properties['ctocr:recognizedJson']);
|
|
135
|
+
// override search funtion to use our search in ocr not defult search
|
|
136
|
+
instance.overrideSearchExecution(this.searchFn);
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
// if no ocr then add search lisner to lisne to internal search and catch results
|
|
140
|
+
this.addSearchListner();
|
|
141
|
+
}
|
|
142
|
+
this.addPrintButton();
|
|
143
|
+
this.addDownloadButton();
|
|
144
|
+
this.importSignature();
|
|
145
|
+
this.exportingSignature();
|
|
146
|
+
this.deleteAnnotation();
|
|
147
|
+
this.exportingSavedSignature();
|
|
148
|
+
if (this.useOutsideAnotations) {
|
|
149
|
+
this.importAnotationsFromOutside();
|
|
150
|
+
this.exportAnotationsToOutside();
|
|
151
|
+
}
|
|
152
|
+
this.webViewerInstance.docViewer.setSearchHighlightColors({
|
|
153
|
+
// setSearchHighlightColors accepts both Annotations.Color objects or 'rgba' strings
|
|
154
|
+
searchResult: new this.webViewerInstance.Annotations.Color(250, 206, 0, 0.50196),
|
|
155
|
+
activeSearchResult: new this.webViewerInstance.Annotations.Color(250, 206, 0, 0.50196),
|
|
156
|
+
});
|
|
157
|
+
if (this.recivedSearchStringsArray.length !== 0) {
|
|
158
|
+
this.automaticSearch(this.recivedSearchStringsArray);
|
|
159
|
+
}
|
|
160
|
+
this.loadDocument();
|
|
161
|
+
}));
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
importAnotationsFromOutside() {
|
|
165
|
+
const documentViewer = this.webViewerInstance.docViewer;
|
|
166
|
+
documentViewer.on('documentLoaded', () => {
|
|
167
|
+
this.webViewerInstance.annotManager.importAnnotations(this.importedAnotations);
|
|
168
|
+
});
|
|
169
|
+
// .then(annotations => {
|
|
170
|
+
// annotations.forEach(annotation => {
|
|
171
|
+
// this.webViewerInstance.annotManager.redrawAnnotation(annotation);
|
|
172
|
+
// });
|
|
173
|
+
// });
|
|
174
|
+
}
|
|
175
|
+
// exctract all anotations on the file and send it out side to be saved and leave the file as it is without any anotations on it
|
|
176
|
+
exportAnotationsToOutside() {
|
|
177
|
+
this.webViewerInstance.annotManager.on('annotationChanged', (annotations, action, { imported }) => {
|
|
178
|
+
if (imported)
|
|
179
|
+
return;
|
|
180
|
+
this.webViewerInstance.annotManager.exportAnnotations().then(exctractedAnotations => {
|
|
181
|
+
this.onAddingAnotation.emit(exctractedAnotations);
|
|
182
|
+
});
|
|
183
|
+
// if tracking signature location is enable then emit signature outside with every changes in it
|
|
184
|
+
if (this.trackSignature) {
|
|
185
|
+
this.onSignatureTracking.emit({ anotations: annotations, action: action });
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
importSignature() {
|
|
190
|
+
const documentViewer = this.webViewerInstance.docViewer;
|
|
191
|
+
const signatureTool = documentViewer.getTool('AnnotationCreateSignature');
|
|
192
|
+
documentViewer.on('documentLoaded', () => {
|
|
193
|
+
if (this.firstTimeLoad) {
|
|
194
|
+
signatureTool.importSignatures([...this.userSignatures]);
|
|
195
|
+
this.firstTimeLoad = false;
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
exportingSavedSignature() {
|
|
200
|
+
const documentViewer = this.webViewerInstance.docViewer;
|
|
201
|
+
const SignatureCreateTool = documentViewer.getTool('AnnotationCreateSignature');
|
|
202
|
+
SignatureCreateTool.on('signatureSaved', (annotation) => {
|
|
203
|
+
if (!this.firstSignatureLoad) {
|
|
204
|
+
console.log('signature saved trigered');
|
|
205
|
+
this.newSignCreation = true;
|
|
206
|
+
}
|
|
207
|
+
this.firstSignatureLoad = false;
|
|
208
|
+
});
|
|
209
|
+
;
|
|
210
|
+
}
|
|
211
|
+
exportingSignature() {
|
|
212
|
+
const documentViewer = this.webViewerInstance.docViewer;
|
|
213
|
+
const SignatureCreateTool = documentViewer.getTool('AnnotationCreateSignature');
|
|
214
|
+
SignatureCreateTool.on('annotationAdded', (annotation) => {
|
|
215
|
+
if (annotation && this.newSignCreation) {
|
|
216
|
+
this.newSignCreation = false;
|
|
217
|
+
this.extractAnotation(annotation, documentViewer);
|
|
218
|
+
console.log(annotation);
|
|
219
|
+
}
|
|
220
|
+
});
|
|
221
|
+
;
|
|
222
|
+
}
|
|
223
|
+
extractAnotation(annotation, documentViewer) {
|
|
224
|
+
if (annotation['image']) {
|
|
225
|
+
// convert base64 signature into file and emit it to out side
|
|
226
|
+
let base64Img = annotation['image']['currentSrc'];
|
|
227
|
+
var arr = base64Img.split(','), mime = arr[0].match(/:(.*?);/)[1], bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
|
|
228
|
+
while (n--) {
|
|
229
|
+
u8arr[n] = bstr.charCodeAt(n);
|
|
230
|
+
}
|
|
231
|
+
let name = mime.replace('/', '.');
|
|
232
|
+
let myFile = new File([u8arr], 'mySignature.png', { type: mime });
|
|
233
|
+
this.SignatureEvent.emit({ data: myFile, eventName: 'export' });
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
this.extractAnnotationSignature(annotation, documentViewer);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
extractAnnotationSignature(annotation, docViewer) {
|
|
240
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
241
|
+
// Create a new Canvas to draw the Annotation on
|
|
242
|
+
const canvas = document.createElement('canvas');
|
|
243
|
+
// Reference the annotation from the Document
|
|
244
|
+
const pageMatrix = docViewer.getDocument().getPageMatrix(annotation.PageNumber);
|
|
245
|
+
// Set the height & width of the canvas to match the annotation
|
|
246
|
+
canvas.height = annotation.Height;
|
|
247
|
+
canvas.width = annotation.Width;
|
|
248
|
+
const ctx = canvas.getContext('2d');
|
|
249
|
+
// Translate the Annotation to the top Top Left Corner of the Canvas ie (0, 0)
|
|
250
|
+
ctx.translate(-annotation.X, -annotation.Y);
|
|
251
|
+
// Draw the Annotation onto the Canvas
|
|
252
|
+
annotation.draw(ctx, pageMatrix);
|
|
253
|
+
// Convert the Canvas to a Blob Object for Upload
|
|
254
|
+
canvas.toBlob((blob) => {
|
|
255
|
+
// Call your Blob Storage Upload Function
|
|
256
|
+
let name = blob.type.replace('/', '.');
|
|
257
|
+
let myFile = new File([blob], name);
|
|
258
|
+
this.SignatureEvent.emit({ data: myFile, eventName: 'export' });
|
|
259
|
+
});
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
deleteAnnotation() {
|
|
263
|
+
const documentViewer = this.webViewerInstance.docViewer;
|
|
264
|
+
const SignatureCreateTool = documentViewer.getTool('AnnotationCreateSignature');
|
|
265
|
+
SignatureCreateTool.on('signatureDeleted', (annotation, index) => {
|
|
266
|
+
console.log('there were annotations deleted');
|
|
267
|
+
this.userSignatures.splice(index, 1);
|
|
268
|
+
this.SignatureEvent.emit({ data: { signature: annotation, index: index }, eventName: 'delete' });
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
addDownloadButton() {
|
|
272
|
+
this.webViewerInstance.setHeaderItems((header) => {
|
|
273
|
+
header.push({
|
|
274
|
+
type: 'actionButton',
|
|
275
|
+
img: '<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" class="bi bi-file-earmark-arrow-down" viewBox="0 0 16 16"> <path d="M8.5 6.5a.5.5 0 0 0-1 0v3.793L6.354 9.146a.5.5 0 1 0-.708.708l2 2a.5.5 0 0 0 .708 0l2-2a.5.5 0 0 0-.708-.708L8.5 10.293V6.5z"/> <path d="M14 14V4.5L9.5 0H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2zM9.5 3A1.5 1.5 0 0 0 11 4.5h2V14a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h5.5v2z"/></svg>',
|
|
276
|
+
title: this.isArabic ? 'تنزيل' : 'Download',
|
|
277
|
+
onClick: () => __awaiter(this, void 0, void 0, function* () {
|
|
278
|
+
const { DocumentViewer, AnnotationManager, SaveOptions } = this.webViewerInstance.CoreControls;
|
|
279
|
+
// const xfdfString = await AnnotationManager.exportAnnotations();
|
|
280
|
+
const saveOptions = SaveOptions;
|
|
281
|
+
const options = {
|
|
282
|
+
filename: this.correspondance.title ? this.correspondance.title : 'myDocument.pdf',
|
|
283
|
+
// xfdfString,
|
|
284
|
+
flags: saveOptions.LINEARIZED,
|
|
285
|
+
downloadType: 'pdf'
|
|
286
|
+
};
|
|
287
|
+
this.pdftronService.instance.downloadPdf(options);
|
|
288
|
+
this.events.next('download');
|
|
289
|
+
// let url = this.correspondance.properties.content.data;
|
|
290
|
+
// let fileName = this.correspondance.properties.content.name;
|
|
291
|
+
// if (url && fileName) {
|
|
292
|
+
// let safeUrl = this.securePipe.transform(url);
|
|
293
|
+
// safeUrl.subscribe((url: any) => {
|
|
294
|
+
// const link = document.createElement('a');
|
|
295
|
+
// link.style.display = 'none';
|
|
296
|
+
// link.href = url.changingThisBreaksApplicationSecurity;
|
|
297
|
+
// link.download = fileName;
|
|
298
|
+
// document.body.appendChild(link);
|
|
299
|
+
// link.click();
|
|
300
|
+
// document.body.removeChild(link);
|
|
301
|
+
// this.events.next('download');
|
|
302
|
+
// });
|
|
303
|
+
// }
|
|
304
|
+
}),
|
|
305
|
+
});
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
addPrintButton() {
|
|
309
|
+
this.webViewerInstance.setHeaderItems((header) => {
|
|
310
|
+
header.push({
|
|
311
|
+
type: 'actionButton',
|
|
312
|
+
img: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><defs><style>.cls-1{fill:#abb0c4;}</style></defs><title>icon - header - print - line</title><path class="cls-1" d="M20,6H18V2H6V6H4A2,2,0,0,0,2,8v9a2,2,0,0,0,2,2H6v3H18V19h2a2,2,0,0,0,2-2V8A2,2,0,0,0,20,6ZM8,4h8V6H8Zm8,16H8V16h8Zm4-3H18V14H6v3H4V8H20Zm-4-7h2v2H16Zm-3,0h2v2H13Z"></path></svg>',
|
|
313
|
+
title: this.isArabic ? "طباعة" : 'Print',
|
|
314
|
+
onClick: () => {
|
|
315
|
+
this.pdftronService.instance.print();
|
|
316
|
+
this.events.next('print');
|
|
317
|
+
},
|
|
318
|
+
});
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
addWatermark() {
|
|
322
|
+
const userinfo = this.nuxeo.nuxeoClient.user.properties;
|
|
323
|
+
this.pdftronService.addWatermark(`${userinfo.username} `
|
|
324
|
+
// `${userinfo.firstName} ${
|
|
325
|
+
// userinfo.lastName
|
|
326
|
+
// } `
|
|
327
|
+
);
|
|
328
|
+
}
|
|
329
|
+
loadDocument() {
|
|
330
|
+
if (!this.webViewerInstance || (!this.fileData && !this.fileURL)) {
|
|
331
|
+
return;
|
|
332
|
+
}
|
|
333
|
+
const { docViewer, annotManager, Annotations } = this.webViewerInstance;
|
|
334
|
+
docViewer.on('documentLoaded', () => {
|
|
335
|
+
let fitMode = this.webViewerInstance.FitMode.FitWidth;
|
|
336
|
+
if (this.fitMode === 'FitPage') {
|
|
337
|
+
fitMode = this.webViewerInstance.FitMode.FitPage;
|
|
338
|
+
}
|
|
339
|
+
else if (this.fitMode === 'Zoom') {
|
|
340
|
+
fitMode = this.webViewerInstance.FitMode.Zoom;
|
|
341
|
+
}
|
|
342
|
+
this.webViewerInstance.setFitMode(fitMode);
|
|
343
|
+
});
|
|
344
|
+
if (!this.editMode) {
|
|
345
|
+
this.webViewerInstance.annotManager.setReadOnly(true);
|
|
346
|
+
// instance.enableTools([]);
|
|
347
|
+
}
|
|
348
|
+
if (this.fileURL && this.fileURL.length) {
|
|
349
|
+
this.webViewerInstance.loadDocument(this.fileURL, {
|
|
350
|
+
xodstreaming: true,
|
|
351
|
+
customHeaders: {
|
|
352
|
+
Authorization: this.authHeader,
|
|
353
|
+
},
|
|
354
|
+
// withCredentials: true,
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
else {
|
|
358
|
+
this.webViewerInstance.loadDocument(new Blob([new Uint8Array(this.fileData)], { type: this.DOCUMENT_TYPE }), {
|
|
359
|
+
filename: this.fileTitle,
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
this.isFetching = false;
|
|
363
|
+
if (this.correspondance !== undefined) {
|
|
364
|
+
// if we need to check on secrecy level for adding water mark or not
|
|
365
|
+
if (this.environment.enableViewerWaterMark && this.secrecyProperty) {
|
|
366
|
+
// check for secrecy level befor adding watermark
|
|
367
|
+
if (this.correspondance.properties[this.secrecyProperty] && this.correspondance.properties[this.secrecyProperty] !== 'Normal') {
|
|
368
|
+
this.addWatermark();
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
else if (this.environment.enableViewerWaterMark && !this.secrecyProperty) {
|
|
372
|
+
this.addWatermark();
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
this.cdr.detectChanges();
|
|
376
|
+
}
|
|
377
|
+
exportAsBlob() {
|
|
378
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
379
|
+
const doc = this.webViewerInstance.docViewer.getDocument();
|
|
380
|
+
const xfdfString = yield this.webViewerInstance.annotManager.exportAnnotations();
|
|
381
|
+
const data = yield doc.getFileData({
|
|
382
|
+
// saves the document with annotations in it
|
|
383
|
+
xfdfString,
|
|
384
|
+
});
|
|
385
|
+
const arr = new Uint8Array(data);
|
|
386
|
+
const blob = new Blob([arr], { type: this.DOCUMENT_TYPE });
|
|
387
|
+
return Promise.resolve(blob);
|
|
388
|
+
});
|
|
389
|
+
}
|
|
390
|
+
toggleEdit() {
|
|
391
|
+
if (!this.actionClicked) {
|
|
392
|
+
// action clicked is not clicked then no update mode opened
|
|
393
|
+
this.webViewerInstance.disableElements([
|
|
394
|
+
'toolbarGroup-Shapes',
|
|
395
|
+
'toolbarGroup-Edit',
|
|
396
|
+
'toolbarGroup-Insert',
|
|
397
|
+
'toolbarGroup-Annotate',
|
|
398
|
+
]);
|
|
399
|
+
this.webViewerInstance.annotManager.setReadOnly(true);
|
|
400
|
+
}
|
|
401
|
+
else {
|
|
402
|
+
// edit mode opened and must be when action is clicked
|
|
403
|
+
if (this.editingType) {
|
|
404
|
+
this.webViewerInstance.disableElements([
|
|
405
|
+
'toolbarGroup-Shapes',
|
|
406
|
+
'toolbarGroup-Edit',
|
|
407
|
+
'toolbarGroup-Insert',
|
|
408
|
+
'toolbarGroup-Annotate',
|
|
409
|
+
]);
|
|
410
|
+
let group;
|
|
411
|
+
if (this.editingType === 'signDoc') {
|
|
412
|
+
this.webViewerInstance.enableElements([
|
|
413
|
+
'toolbarGroup-Insert'
|
|
414
|
+
]);
|
|
415
|
+
}
|
|
416
|
+
else if (this.editingType === 'annotate') {
|
|
417
|
+
this.webViewerInstance.enableElements([
|
|
418
|
+
'toolbarGroup-Shapes',
|
|
419
|
+
'toolbarGroup-Edit',
|
|
420
|
+
'toolbarGroup-Annotate',
|
|
421
|
+
]);
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
else {
|
|
425
|
+
this.webViewerInstance.enableElements([
|
|
426
|
+
'toolbarGroup-Shapes',
|
|
427
|
+
'toolbarGroup-Edit',
|
|
428
|
+
'toolbarGroup-Insert',
|
|
429
|
+
'toolbarGroup-Annotate',
|
|
430
|
+
]);
|
|
431
|
+
}
|
|
432
|
+
this.webViewerInstance.annotManager.setReadOnly(false);
|
|
433
|
+
// this.webViewerInstance.setToolbarGroup('toolbarGroup-Annotate');
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
ngOnChanges(changes) {
|
|
437
|
+
if (this.webViewerInstance) {
|
|
438
|
+
this.toggleEdit();
|
|
439
|
+
if (changes.urlFileContent &&
|
|
440
|
+
changes.urlFileContent.previousValue &&
|
|
441
|
+
changes.urlFileContent.previousValue !==
|
|
442
|
+
changes.urlFileContent.currentValue) {
|
|
443
|
+
this.ngOnDestroy();
|
|
444
|
+
this.ngOnInit();
|
|
445
|
+
this.ngAfterViewInit();
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
pdfTronEvent(event) {
|
|
450
|
+
if (this[event.action]) {
|
|
451
|
+
// method exists in the component
|
|
452
|
+
// this[event.action](event.params); // call it
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
// adding search lisner to lisen to internal search from ui and without ocr
|
|
456
|
+
addSearchListner() {
|
|
457
|
+
const { annotManager, docViewer, Annotations } = this.webViewerInstance;
|
|
458
|
+
const searchListener = (searchPattern, options, results) => {
|
|
459
|
+
this.mySearchStringResults = [];
|
|
460
|
+
if (this.savedAnotations.length > 0) {
|
|
461
|
+
this.savedAnotations.map(annotation => {
|
|
462
|
+
annotation.Hidden = true;
|
|
463
|
+
// Always redraw annotation if rendering was updated
|
|
464
|
+
annotManager.redrawAnnotation(annotation);
|
|
465
|
+
});
|
|
466
|
+
}
|
|
467
|
+
// don't do any search until there is a search pattern
|
|
468
|
+
if (searchPattern.trim().length > 0) {
|
|
469
|
+
// add redaction annotation for each search result
|
|
470
|
+
this.newAnnotations = results.map(result => {
|
|
471
|
+
const annotation = new Annotations.TextHighlightAnnotation();
|
|
472
|
+
annotation.Quads = result.quads.map(quad => quad.getPoints());
|
|
473
|
+
annotation.PageNumber = result.pageNum;
|
|
474
|
+
annotation.StrokeColor = new Annotations.Color(250, 206, 0, 0.50196);
|
|
475
|
+
annotation.Author = this.webViewerInstance.annotManager.getCurrentUser();
|
|
476
|
+
return annotation;
|
|
477
|
+
});
|
|
478
|
+
this.savedAnotations.push(...this.newAnnotations);
|
|
479
|
+
annotManager.addAnnotations(this.newAnnotations);
|
|
480
|
+
annotManager.drawAnnotationsFromList(this.newAnnotations);
|
|
481
|
+
}
|
|
482
|
+
else {
|
|
483
|
+
docViewer.clearSearchResults();
|
|
484
|
+
}
|
|
485
|
+
};
|
|
486
|
+
docViewer.on('documentLoaded', () => {
|
|
487
|
+
this.webViewerInstance.addSearchListener(searchListener);
|
|
488
|
+
});
|
|
489
|
+
}
|
|
490
|
+
// perform automatic search when intering the page
|
|
491
|
+
automaticSearch(searchTextArray) {
|
|
492
|
+
const { annotManager, docViewer, Annotations } = this.webViewerInstance;
|
|
493
|
+
let searchOptions;
|
|
494
|
+
this.webViewerInstance.openElements(['searchPanel']);
|
|
495
|
+
docViewer.on('documentLoaded', () => {
|
|
496
|
+
const mode = this.webViewerInstance.CoreControls.Search.Mode.PAGE_STOP | this.webViewerInstance.CoreControls.Search.Mode.HIGHLIGHT | this.webViewerInstance.CoreControls.Search.Mode.AMBIENT_STRING;
|
|
497
|
+
this.mySearchStringResults = []; // empty my search result when starting new search
|
|
498
|
+
if (this.fileWithOcr) {
|
|
499
|
+
// add redaction annotation for each search result
|
|
500
|
+
const annotation = new Annotations.TextHighlightAnnotation();
|
|
501
|
+
searchTextArray.map(searchText => {
|
|
502
|
+
let mySearch = searchText.split(' ');
|
|
503
|
+
if (mySearch.length > 1) {
|
|
504
|
+
// then i am searching with more than one word
|
|
505
|
+
this.pages.pages.forEach((page, index) => {
|
|
506
|
+
this.pageHeight = page.page_height;
|
|
507
|
+
this.pageWidth = page.page_width;
|
|
508
|
+
this.standardHeight = this.webViewerInstance.docViewer.getPageHeight((index + 1));
|
|
509
|
+
this.standardWidth = this.webViewerInstance.docViewer.getPageWidth((index + 1));
|
|
510
|
+
page.zones.forEach(zone => {
|
|
511
|
+
zone.paragraphs.forEach(paragraph => {
|
|
512
|
+
paragraph.lines.forEach(line => {
|
|
513
|
+
if (line.text.includes(searchText)) {
|
|
514
|
+
this.SearchForWordInLine(mySearch, line, (index + 1), page);
|
|
515
|
+
}
|
|
516
|
+
});
|
|
517
|
+
});
|
|
518
|
+
});
|
|
519
|
+
});
|
|
520
|
+
}
|
|
521
|
+
else {
|
|
522
|
+
// then i am searching with only one word
|
|
523
|
+
this.searchForWordInAllPages(searchText);
|
|
524
|
+
}
|
|
525
|
+
});
|
|
526
|
+
docViewer.clearSearchResults();
|
|
527
|
+
this.dispalaySearchResults(docViewer);
|
|
528
|
+
}
|
|
529
|
+
else {
|
|
530
|
+
searchOptions = {
|
|
531
|
+
// If true, a search of the entire document will be performed. Otherwise, a single search will be performed.
|
|
532
|
+
fullSearch: true,
|
|
533
|
+
// The callback function that is called when the search returns a result.
|
|
534
|
+
onResult: result => {
|
|
535
|
+
// with 'PAGE_STOP' mode, the callback is invoked after each page has been searched.
|
|
536
|
+
if (result.resultCode === this.webViewerInstance.CoreControls.Search.ResultCode.FOUND) {
|
|
537
|
+
const annotation = new Annotations.TextHighlightAnnotation();
|
|
538
|
+
annotation.Quads = result.quads.map(quad => quad.getPoints());
|
|
539
|
+
console.log(annotation.Quads);
|
|
540
|
+
annotation.PageNumber = result.pageNum;
|
|
541
|
+
annotation.StrokeColor = new Annotations.Color(250, 206, 0, 0.50196);
|
|
542
|
+
annotation.Author = this.webViewerInstance.annotManager.getCurrentUser();
|
|
543
|
+
this.savedAnotations.push(annotation);
|
|
544
|
+
annotManager.addAnnotations([annotation]);
|
|
545
|
+
annotManager.drawAnnotationsFromList([annotation]);
|
|
546
|
+
docViewer.displayAdditionalSearchResults([result]);
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
};
|
|
550
|
+
searchTextArray.map(searchedText => {
|
|
551
|
+
docViewer.textSearchInit(searchedText, mode, searchOptions);
|
|
552
|
+
});
|
|
553
|
+
}
|
|
554
|
+
});
|
|
555
|
+
}
|
|
556
|
+
// search for single word in all pages
|
|
557
|
+
searchForWordInAllPages(searchedWord) {
|
|
558
|
+
this.pages.pages.forEach((page, index) => {
|
|
559
|
+
this.pageHeight = page.page_height;
|
|
560
|
+
this.pageWidth = page.page_width;
|
|
561
|
+
this.standardHeight = this.webViewerInstance.docViewer.getPageHeight((index + 1));
|
|
562
|
+
this.standardWidth = this.webViewerInstance.docViewer.getPageWidth((index + 1));
|
|
563
|
+
const x = (this.pageWidth / this.standardWidth); // width ratio
|
|
564
|
+
const y = (this.pageHeight / this.standardHeight); // height ratio
|
|
565
|
+
page.zones.forEach(zone => {
|
|
566
|
+
zone.paragraphs.forEach(paragraph => {
|
|
567
|
+
paragraph.lines.forEach(line => {
|
|
568
|
+
line.words.forEach(word => {
|
|
569
|
+
if (word.text.includes(searchedWord)) {
|
|
570
|
+
// annotation.PageNumber = index+1;
|
|
571
|
+
let quads = [{
|
|
572
|
+
x1: (word.coordinates.upper_left.x / x),
|
|
573
|
+
x2: (word.coordinates.bottom_right.x / x),
|
|
574
|
+
x3: (word.coordinates.bottom_right.x / x),
|
|
575
|
+
x4: (word.coordinates.upper_left.x / x),
|
|
576
|
+
y1: (word.coordinates.upper_left.y / y),
|
|
577
|
+
y2: (word.coordinates.upper_left.y / y),
|
|
578
|
+
y3: (word.coordinates.bottom_right.y / y),
|
|
579
|
+
y4: (word.coordinates.bottom_right.y / y),
|
|
580
|
+
}];
|
|
581
|
+
this.higlightText(quads, index + 1);
|
|
582
|
+
this.constructSearchResult(searchedWord, index + 1, quads, line.text);
|
|
583
|
+
}
|
|
584
|
+
});
|
|
585
|
+
});
|
|
586
|
+
});
|
|
587
|
+
});
|
|
588
|
+
});
|
|
589
|
+
}
|
|
590
|
+
// search for word in single line
|
|
591
|
+
SearchForWordInLine(listOfSearchedWords, line, pagenumber, page) {
|
|
592
|
+
this.pageHeight = page.page_height;
|
|
593
|
+
this.pageWidth = page.page_width;
|
|
594
|
+
this.standardHeight = this.webViewerInstance.docViewer.getPageHeight((pagenumber));
|
|
595
|
+
this.standardWidth = this.webViewerInstance.docViewer.getPageWidth((pagenumber));
|
|
596
|
+
const x = (this.pageWidth / this.standardWidth); // width ratio
|
|
597
|
+
const y = (this.pageHeight / this.standardHeight); // height ratio
|
|
598
|
+
// find only words related to my search form the line
|
|
599
|
+
let myFoundedResults = [];
|
|
600
|
+
let correctResults = [];
|
|
601
|
+
line.words.forEach((word, wordIndex) => {
|
|
602
|
+
if (listOfSearchedWords.indexOf(word.text) > -1) {
|
|
603
|
+
myFoundedResults.push({ word: word, wordIndex: wordIndex });
|
|
604
|
+
}
|
|
605
|
+
});
|
|
606
|
+
// find only words exist in my search sentence and not single and repeated word
|
|
607
|
+
myFoundedResults.map((result, index) => {
|
|
608
|
+
if ((myFoundedResults[index]['wordIndex'] - 1 === (myFoundedResults[index - 1] && myFoundedResults[index - 1]['wordIndex'])) ||
|
|
609
|
+
(myFoundedResults[index + 1] && (myFoundedResults[index + 1]['wordIndex'] - 1 === myFoundedResults[index]['wordIndex']))) {
|
|
610
|
+
correctResults.push(result);
|
|
611
|
+
}
|
|
612
|
+
});
|
|
613
|
+
// highliht these words after eleminating all repeated and related words
|
|
614
|
+
// must be for loop sp i can control the step in each loop
|
|
615
|
+
let quads = [];
|
|
616
|
+
for (let i = 0; i < correctResults.length; (i = i + listOfSearchedWords.length)) {
|
|
617
|
+
quads.push({
|
|
618
|
+
x1: (correctResults[((i + listOfSearchedWords.length) - 1)].word.coordinates.upper_left.x / x),
|
|
619
|
+
x2: (correctResults[i].word.coordinates.bottom_right.x / x),
|
|
620
|
+
x3: (correctResults[i].word.coordinates.bottom_right.x / x),
|
|
621
|
+
x4: (correctResults[((i + listOfSearchedWords.length) - 1)].word.coordinates.upper_left.x / x),
|
|
622
|
+
y1: (correctResults[i].word.coordinates.upper_left.y / y),
|
|
623
|
+
y2: (correctResults[((i + listOfSearchedWords.length) - 1)].word.coordinates.upper_left.y / y),
|
|
624
|
+
y3: (correctResults[((i + listOfSearchedWords.length) - 1)].word.coordinates.bottom_right.y / y),
|
|
625
|
+
y4: (correctResults[i].word.coordinates.bottom_right.y / y),
|
|
626
|
+
});
|
|
627
|
+
this.higlightText(quads, pagenumber);
|
|
628
|
+
this.constructSearchResult(listOfSearchedWords.join(" "), pagenumber, quads, line.text);
|
|
629
|
+
}
|
|
630
|
+
}
|
|
631
|
+
constructSearchResult(searchedText, pageNum, quads, line) {
|
|
632
|
+
let mySearchStartTextIndex = line.indexOf(searchedText);
|
|
633
|
+
let mySeearchedTextEndIndex = mySearchStartTextIndex + searchedText.length;
|
|
634
|
+
let searchResultObject = {
|
|
635
|
+
ambientStr: line,
|
|
636
|
+
resultStr: searchedText,
|
|
637
|
+
resultStrStart: mySearchStartTextIndex,
|
|
638
|
+
resultStrEnd: mySeearchedTextEndIndex,
|
|
639
|
+
pageNum: pageNum,
|
|
640
|
+
resultCode: 2,
|
|
641
|
+
quads: [{
|
|
642
|
+
ea: quads[0]['y3'],
|
|
643
|
+
fa: quads[0]['y4'],
|
|
644
|
+
ha: quads[0]['x1'],
|
|
645
|
+
ia: quads[0]['x2'],
|
|
646
|
+
pB: quads[0]['x3'],
|
|
647
|
+
qB: quads[0]['x4'],
|
|
648
|
+
rB: quads[0]['y1'],
|
|
649
|
+
sB: quads[0]['y2']
|
|
650
|
+
}]
|
|
651
|
+
};
|
|
652
|
+
this.mySearchStringResults.push(searchResultObject);
|
|
653
|
+
console.log(this.mySearchStringResults);
|
|
654
|
+
}
|
|
655
|
+
dispalaySearchResults(docViewer) {
|
|
656
|
+
setTimeout(() => {
|
|
657
|
+
docViewer.displayAdditionalSearchResults(this.mySearchStringResults);
|
|
658
|
+
}, 500);
|
|
659
|
+
}
|
|
660
|
+
// draw hiligthing around certain charatacters
|
|
661
|
+
higlightText(quads, pageNumber) {
|
|
662
|
+
const highlightingAnnot = new this.webViewerInstance.Annotations.TextHighlightAnnotation();
|
|
663
|
+
highlightingAnnot.StrokeColor = new this.webViewerInstance.Annotations.Color(250, 206, 0, 0.50196);
|
|
664
|
+
highlightingAnnot.Quads = quads;
|
|
665
|
+
highlightingAnnot.PageNumber = pageNumber;
|
|
666
|
+
highlightingAnnot.Author = this.webViewerInstance.annotManager.getCurrentUser();
|
|
667
|
+
this.savedAnotations.push(highlightingAnnot);
|
|
668
|
+
this.webViewerInstance.annotManager.addAnnotation(highlightingAnnot);
|
|
669
|
+
// need to draw the annotation otherwise it won't show up until the page is refreshed
|
|
670
|
+
this.webViewerInstance.annotManager.redrawAnnotation(highlightingAnnot);
|
|
671
|
+
}
|
|
672
|
+
// ------------------------------------------------------------------------ ------------------------------------------
|
|
673
|
+
ngOnDestroy() {
|
|
674
|
+
if (this.webViewerInstance) {
|
|
675
|
+
this.webViewerInstance.closeDocument().then(() => {
|
|
676
|
+
console.log('document closed!');
|
|
677
|
+
});
|
|
678
|
+
this.pdftronService.instance = this.webViewerInstance = null;
|
|
679
|
+
}
|
|
680
|
+
this.transelationSubscrition ? this.transelationSubscrition.unsubscribe() : null;
|
|
681
|
+
}
|
|
682
|
+
}
|
|
683
|
+
PdftronComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: PdftronComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.PdftronService }, { token: i2.NuxeoService }, { token: APP_BASE_HREF }, { token: i3.SecurePipe }, { token: i4.TranslationService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Component });
|
|
684
|
+
PdftronComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.4", type: PdftronComponent, selector: "app-pdftron", inputs: { editMode: "editMode", actionClicked: "actionClicked", fileTitle: "fileTitle", docId: "docId", DOCUMENT_TYPE: "DOCUMENT_TYPE", fileData: "fileData", fitMode: "fitMode", authHeader: "authHeader", fileURL: "fileURL", correspondance: "correspondance", secrecyProperty: "secrecyProperty", editingType: "editingType", userSignatures: "userSignatures", searchString: "searchString", trackSignature: "trackSignature", useOutsideAnotations: "useOutsideAnotations", importedAnotations: "importedAnotations" }, outputs: { onSignatureTracking: "onSignatureTracking", onAddingAnotation: "onAddingAnotation", events: "events", SignatureEvent: "SignatureEvent" }, providers: [SecurePipe], viewQueries: [{ propertyName: "viewerRef", first: true, predicate: ["fileViewer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div #fileViewer style=\"width: 100%; height: 100%;\"></div>\r\n", styles: [""] });
|
|
685
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: PdftronComponent, decorators: [{
|
|
686
|
+
type: Component,
|
|
687
|
+
args: [{
|
|
688
|
+
selector: 'app-pdftron',
|
|
689
|
+
templateUrl: './pdftron.component.html',
|
|
690
|
+
styleUrls: ['./pdftron.component.scss'],
|
|
691
|
+
providers: [SecurePipe],
|
|
692
|
+
}]
|
|
693
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.PdftronService }, { type: i2.NuxeoService }, { type: undefined, decorators: [{
|
|
694
|
+
type: Inject,
|
|
695
|
+
args: [APP_BASE_HREF]
|
|
696
|
+
}] }, { type: i3.SecurePipe }, { type: i4.TranslationService }, { type: undefined, decorators: [{
|
|
697
|
+
type: Inject,
|
|
698
|
+
args: ['environment']
|
|
699
|
+
}] }]; }, propDecorators: { viewerRef: [{
|
|
700
|
+
type: ViewChild,
|
|
701
|
+
args: ['fileViewer']
|
|
702
|
+
}], editMode: [{
|
|
703
|
+
type: Input
|
|
704
|
+
}], actionClicked: [{
|
|
705
|
+
type: Input
|
|
706
|
+
}], fileTitle: [{
|
|
707
|
+
type: Input
|
|
708
|
+
}], docId: [{
|
|
709
|
+
type: Input
|
|
710
|
+
}], DOCUMENT_TYPE: [{
|
|
711
|
+
type: Input
|
|
712
|
+
}], fileData: [{
|
|
713
|
+
type: Input
|
|
714
|
+
}], fitMode: [{
|
|
715
|
+
type: Input
|
|
716
|
+
}], authHeader: [{
|
|
717
|
+
type: Input
|
|
718
|
+
}], fileURL: [{
|
|
719
|
+
type: Input
|
|
720
|
+
}], correspondance: [{
|
|
721
|
+
type: Input
|
|
722
|
+
}], secrecyProperty: [{
|
|
723
|
+
type: Input
|
|
724
|
+
}], editingType: [{
|
|
725
|
+
type: Input
|
|
726
|
+
}], userSignatures: [{
|
|
727
|
+
type: Input
|
|
728
|
+
}], searchString: [{
|
|
729
|
+
type: Input
|
|
730
|
+
}], trackSignature: [{
|
|
731
|
+
type: Input
|
|
732
|
+
}], onSignatureTracking: [{
|
|
733
|
+
type: Output
|
|
734
|
+
}], useOutsideAnotations: [{
|
|
735
|
+
type: Input
|
|
736
|
+
}], importedAnotations: [{
|
|
737
|
+
type: Input
|
|
738
|
+
}], onAddingAnotation: [{
|
|
739
|
+
type: Output
|
|
740
|
+
}], events: [{
|
|
741
|
+
type: Output
|
|
742
|
+
}], SignatureEvent: [{
|
|
743
|
+
type: Output
|
|
744
|
+
}] } });
|
|
745
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGRmdHJvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL3BkZi10cm9uL3BkZnRyb24vcGRmdHJvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL3BkZi10cm9uL3BkZnRyb24vcGRmdHJvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUdMLFNBQVMsRUFFVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFJTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sU0FBMkIsTUFBTSxvQkFBb0IsQ0FBQztBQUc3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7QUFLeEQ7Ozs7Ozs7Ozs7OztHQVlHO0FBT0gsTUFBTSxPQUFPLGdCQUFnQjtJQWdEM0IsWUFDUyxHQUFzQixFQUNyQixjQUE4QixFQUM5QixLQUFtQixFQUNJLFFBQWdCLEVBQ3ZDLFVBQXNCLEVBQ3RCLGtCQUF1QyxFQUNoQixXQUFXO1FBTm5DLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3JCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixVQUFLLEdBQUwsS0FBSyxDQUFjO1FBQ0ksYUFBUSxHQUFSLFFBQVEsQ0FBUTtRQUN2QyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBcUI7UUFDaEIsZ0JBQVcsR0FBWCxXQUFXLENBQUE7UUFoRG5DLGtCQUFhLEdBQUcsS0FBSyxDQUFDLENB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QUExQixNQUFNO2dCQUVQLE1BQU07c0JBREwsTUFBTTtnQkFFRyxjQUFjO3NCQUF2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IFdlYlZpZXdlciwgeyBDb3JlQ29udHJvbHMgfSBmcm9tICdAcGRmdHJvbi93ZWJ2aWV3ZXInO1xyXG5pbXBvcnQgeyBOdXhlb1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9Db3JlL3NlcnZpY2VzL251eGVvL251eGVvLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQZGZ0cm9uU2VydmljZSB9IGZyb20gJy4vcGRmdHJvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQVBQX0JBU0VfSFJFRiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFNlY3VyZVBpcGUgfSBmcm9tICcuLi8uLi8uLi9waXBlcy9zZWN1cmUucGlwZSc7XHJcbmltcG9ydCB7IFRocm93U3RtdCB9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyJztcclxuaW1wb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vQ29yZS9zZXJ2aWNlcy90cmFuc2xhdGlvbi90cmFuc2xhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcblxyXG4vKipcclxuICogQSByZXVzYWJsZSBmaWxlIHZpZXdlciBiYXNlZCBvbiBQREZUcm9uIExpYnJhcnlcclxuICogQHRpdGxlXHJcbiAqIFBERlRyb24gVmlld2VyXHJcbiAqIEBleGFtcGxlXHJcbiAqIDxhcHAtcGRmdHJvblxyXG4gKiAgIFtmaWxlRGF0YV09XCJmaWxlRGF0YVwiXHJcbiAqICAgW2VkaXRNb2RlXT1cImZhbHNlXCJcclxuICogICBbZG9jSWRdPVwiZmlsZUlkXCJcclxuICogICBbZmlsZVRpdGxlXT1cImZpbGUudGl0bGVcIlxyXG4gKiA+XHJcbiAqIDwvYXBwLXBkZnRyb24+XHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1wZGZ0cm9uJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcGRmdHJvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcGRmdHJvbi5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogW1NlY3VyZVBpcGVdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGRmdHJvbkNvbXBvbmVudFxyXG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XHJcbiAgQFZpZXdDaGlsZCgnZmlsZVZpZXdlcicpIHZpZXdlclJlZjogRWxlbWVudFJlZjtcclxuICB3ZWJWaWV3ZXJJbnN0YW5jZTtcclxuICAvKiogRGlzYWJsZS9FbmFibGUgQW5ub3RhdGlvbiAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgZWRpdE1vZGU6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgYWN0aW9uQ2xpY2tlZCA9IGZhbHNlOyAvLyB1c2VkIHRvIGtub3cgaWYgdGhlcmUgaXMgYWN0aW9uIGNsaWNrZWQgb3V0c2lkZSB0byBzdGFydCBlZGl0IG1vZGUgb3Igbm90XHJcbiAgaXNEb2N1bWVudExvYWRpbmc6IGJvb2xlYW47XHJcbiAgaXNGZXRjaGluZzogYm9vbGVhbjtcclxuICAvKiogRG9jdW1lbnQgdGl0bGUgKi9cclxuICBASW5wdXQoKVxyXG4gIGZpbGVUaXRsZTogc3RyaW5nO1xyXG4gIC8qKiBEb2N1bWVudCBJRCAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgZG9jSWQ6IHN0cmluZztcclxuICBASW5wdXQoKVxyXG4gIERPQ1VNRU5UX1RZUEUgPSAnYXBwbGljYXRpb24vcGRmJztcclxuICBASW5wdXQoKVxyXG4gIGZpbGVEYXRhO1xyXG4gIEBJbnB1dCgpXHJcbiAgZml0TW9kZTogJ0ZpdFdpZHRoJyB8ICdGaXRQYWdlJyB8ICdab29tJyA9ICdGaXRXaWR0aCc7XHJcbiAgQElucHV0KClcclxuICBhdXRoSGVhZGVyOiBzdHJpbmc7XHJcbiAgQElucHV0KClcclxuICBmaWxlVVJMOiBzdHJpbmc7XHJcbiAgQElucHV0KClcclxuICBjb3JyZXNwb25kYW5jZTtcclxuXHJcbiAgQElucHV0KCkgc2VjcmVjeVByb3BlcnR5OyAvLyB1c2VkIHRvIGFkZCB3YXRlcm1hcmsgYWNvcmRpbmcgY2VydGFpbiBzZWNyZWN5IGxldmVsXHJcbiAgQElucHV0KCkgZWRpdGluZ1R5cGU7XHJcbiAgQElucHV0KCkgdXNlclNpZ25hdHVyZXM7XHJcbiAgQElucHV0KCkgc2VhcmNoU3RyaW5nID0gJyc7IC8vIHN0cmluZyB0byBzZWFyY2ggZm9yIGl0IGluIHRoZSBkb2N1bWVudFxyXG5cclxuICBASW5wdXQoKSB0cmFja1NpZ25hdHVyZSA9IGZhbHNlOyAvLyB0byBlbmFibGUgdHJhY2tpbmcgc2lnbmF0dXJlIHBvc2l0aW9uIGFuZCBlbWl0IGl0IGFmdGVyIGV2ZXJ5IGNoYW5nZSBpdCBzaWduYXR1cmVcclxuICBAT3V0cHV0KCkgb25TaWduYXR1cmVUcmFja2luZyA9IG5ldyBFdmVudEVtaXR0ZXIoKTsgLy8gZXZlbnQgdG8gZW1pdCBzaWduYXR1cmUgY2hhbmdlc1xyXG5cclxuICBASW5wdXQoKSB1c2VPdXRzaWRlQW5vdGF0aW9ucyA9IGZhbHNlOyAvLyBmbGFnZSB0byBpbmRpY2F0IGlmIHVzaW5nIG91dCBzaWRlIGFub3RhdGlvbnMgb3Igbm90XHJcbiAgQElucHV0KCkgaW1wb3J0ZWRBbm90YXRpb25zIDsgLy8gaW1wb3J0ZWQgYW5vdGF0aW9ucyBmcm9tIG91dHNpZGVcclxuICBAT3V0cHV0KCkgb25BZGRpbmdBbm90YXRpb24gPSBuZXcgRXZlbnRFbWl0dGVyKCk7IC8vIHVzZWQgdG8gZXhwb3J0IGFsbCBhbm90YXRpb25zIHRvIG91dHNpZGVcclxuICBAT3V0cHV0KClcclxuICBldmVudHMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIFNpZ25hdHVyZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpOyAvLyB1c2VkIHRvIGV4cG9ydCBzaWduYXR1cmUgdG8gb3V0c2lkZVxyXG4gIGZpcnN0VGltZUxvYWQgPSB0cnVlOyAvL2ZsYWdlIHRvIGNvbnRyb2wgaW1wb3J0aW5nIHNpZ25hdHVyZXMgaW4gdGhlIGZpcnN0IHRpbWUgbG9hZCBvbmx5XHJcbiAgZmlyc3RTaWduYXR1cmVMb2FkID0gdHJ1ZTsgLy8gZmxhZ2UgdG8gcGFzcyBmaXJzdCBsb2FkIG9mIGltcG9ydGVkIHNpZ25hdHVyZXMgd2l0aG91dCBlbWl0dGluZyB0aGUgZXZlbnQgXHJcbiAgbmV3U2lnbkNyZWF0aW9uID0gZmFsc2U7IC8vIGZsYWdlIHRvIGluZGljYXRlIHNpZ25hdHVyZSBjcmVhdGlvbiBpcyBjcmVhdGVkIG9yIGNob29zZWQgZnJvbSBzdG9yZWQgb25lc1xyXG4gIHRyYW5zZWxhdGlvblN1YnNjcml0aW9uIDogU3Vic2NyaXB0aW9uO1xyXG4gIGlzQXJhYmljO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIHBkZnRyb25TZXJ2aWNlOiBQZGZ0cm9uU2VydmljZSxcclxuICAgIHByaXZhdGUgbnV4ZW86IE51eGVvU2VydmljZSxcclxuICAgIEBJbmplY3QoQVBQX0JBU0VfSFJFRikgcHJpdmF0ZSBiYXNlSHJlZjogc3RyaW5nLFxyXG4gICAgcHJpdmF0ZSBzZWN1cmVQaXBlOiBTZWN1cmVQaXBlLFxyXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGlvblNlcnZpY2UgOiBUcmFuc2xhdGlvblNlcnZpY2UsXHJcbiAgICBASW5qZWN0KCdlbnZpcm9ubWVudCcpIHByaXZhdGUgZW52aXJvbm1lbnRcclxuICApIHsgfVxyXG5cclxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMudHJhbnNlbGF0aW9uU3Vic2NyaXRpb24gPSB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5pc0FyYWJpYy5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgdGhpcy5pc0FyYWJpYyA9IHJlcyA7XHJcbiAgICB9KVxyXG4gICB9XHJcblxyXG4gIGFzeW5jIG5nQWZ0ZXJWaWV3SW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMucmVjaXZlZFNlYXJjaFN0cmluZ3NBcnJheSA9IHRoaXMuc2VhcmNoU3RyaW5nLnRyaW0oKSA/IHRoaXMuc2VhcmNoU3RyaW5nLnNwbGl0KCcsJykgOiBbXTtcclxuXHJcbiAgICBpZiAodGhpcy5maWxlVGl0bGUuZW5kc1dpdGgoJy5wcHQnKSkge1xyXG4gICAgICB0aGlzLkRPQ1VNRU5UX1RZUEUgPSAnYXBwbGljYXRpb24vdm5kLm1zLXBvd2VycG9pbnQnO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmZpbGVUaXRsZS5lbmRzV2l0aCgnLnBwdHgnKSkge1xyXG4gICAgICB0aGlzLkRPQ1VNRU5UX1RZUEUgPVxyXG4gICAgICAgICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwucHJlc2VudGF0aW9uJztcclxuICAgIH0gZWxzZSBpZiAodGhpcy5maWxlVGl0bGUuZW5kc1dpdGgoJy5kb2MnKSkge1xyXG4gICAgICB0aGlzLkRPQ1VNRU5UX1RZUEUgPSAnYXBwbGljYXRpb24vbXN3b3JkJztcclxuICAgIH0gZWxzZSBpZiAodGhpcy5maWxlVGl0bGUuZW5kc1dpdGgoJy5kb2N4JykpIHtcclxuICAgICAgdGhpcy5ET0NVTUVOVF9UWVBFID1cclxuICAgICAgICAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQnO1xyXG4gICAgfVxyXG4gICAgV2ViVmlld2VyKFxyXG4gICAgICB7XHJcbiAgICAgICAgcGF0aDogdGhpcy5iYXNlSHJlZiArICcvYXNzZXRzL3BkZnRyb25zJyxcclxuICAgICAgICBmb3JjZUNsaWVudFNpZGVJbml0OiB0cnVlLFxyXG4gICAgICAgIHN0cmVhbWluZzogdHJ1ZSxcclxuICAgICAgICBsaWNlbnNlS2V5OiB0aGlzLmVudmlyb25tZW50LnBkZnRyb25MaWNlbmNlS2V5LFxyXG4gICAgICAgIGNzczogdGhpcy5pc0FyYWJpYyA/ICh0aGlzLmJhc2VIcmVmICsgJy9hc3NldHMvc3R5bGVzL2FyLW15cGRmdHJvbi5jc3MnKSA6ICh0aGlzLmJhc2VIcmVmICsgJy9hc3NldHMvc3R5bGVzL2VuLW15cGRmdHJvbi5jc3MnKSxcclxuICAgICAgICBhbm5vdGF0aW9uVXNlcjogdGhpcy5udXhlby5udXhlb0NsaWVudC51c2VyLnByb3BlcnRpZXMuZmlyc3ROYW1lICsgJyAnICsgdGhpcy5udXhlby5udXhlb0NsaWVudC51c2VyLnByb3BlcnRpZXMubGFzdE5hbWUsXHJcbiAgICAgICAgZGlzYWJsZWRFbGVtZW50czogWydkb3dubG9hZEJ1dHRvbicsICdwcmludEJ1dHRvbiddLFxyXG5cclxuICAgICAgfSxcclxuICAgICAgdGhpcy52aWV3ZXJSZWYubmF0aXZlRWxlbWVudFxyXG4gICAgKS50aGVuKGFzeW5jIChpbnN0YW5jZSkgPT4ge1xyXG4gICAgICB0aGlzLmlzQXJhYmljID8gaW5zdGFuY2Uuc2V0TGFuZ3VhZ2UoJ2FyJykgOiBpbnN0YW5jZS5zZXRMYW5ndWFnZSgnZW4nKSA7XHJcbiAgICAgIHRoaXMucGRmdHJvblNlcnZpY2UuaW5zdGFuY2UgPSB0aGlzLndlYlZpZXdlckluc3RhbmNlID0gaW5zdGFuY2U7XHJcbiAgICAgIGlmKHRoaXMuY29ycmVzcG9uZGFuY2UuZmFjZXRzLmluZGV4T2YoJ2N0b2NyJykgPiAtMSl7XHJcbiAgICAgICAgdGhpcy5maWxlV2l0aE9jciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wYWdlcyA9IEpTT04ucGFyc2UodGhpcy5jb3JyZXNwb25kYW5jZS5wcm9wZXJ0aWVzWydjdG9jcjpyZWNvZ25pemVkSnNvbiddKTtcclxuICAgICAgICAvLyBvdmVycmlkZSBzZWFyY2ggZnVudGlvbiB0byB1c2Ugb3VyIHNlYXJjaCBpbiBvY3Igbm90IGRlZnVsdCBzZWFyY2hcclxuICAgICAgICBpbnN0YW5jZS5vdmVycmlkZVNlYXJjaEV4ZWN1dGlvbih0aGlzLnNlYXJjaEZuKTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAvLyBpZiBubyBvY3IgdGhlbiBhZGQgc2VhcmNoIGxpc25lciB0byBsaXNuZSB0byBpbnRlcm5hbCBzZWFyY2ggYW5kIGNhdGNoIHJlc3VsdHNcclxuICAgICAgICAgICAgdGhpcy5hZGRTZWFyY2hMaXN0bmVyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB0aGlzLmFkZFByaW50QnV0dG9uKCk7XHJcbiAgICAgIHRoaXMuYWRkRG93bmxvYWRCdXR0b24oKTtcclxuICAgICAgdGhpcy5pbXBvcnRTaWduYXR1cmUoKTtcclxuICAgICAgdGhpcy5leHBvcnRpbmdTaWduYXR1cmUoKTtcclxuICAgICAgdGhpcy5kZWxldGVBbm5vdGF0aW9uKCk7XHJcbiAgICAgIHRoaXMuZXhwb3J0aW5nU2F2ZWRTaWduYXR1cmUoKTtcclxuICAgICAgaWYodGhpcy51c2VPdXRzaWRlQW5vdGF0aW9ucyl7XHJcbiAgICAgICAgdGhpcy5pbXBvcnRBbm90YXRpb25zRnJvbU91dHNpZGUoKTtcclxuICAgICAgICB0aGlzLmV4cG9ydEFub3RhdGlvbnNUb091dHNpZGUoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmRvY1ZpZXdlci5zZXRTZWFyY2hIaWdobGlnaHRDb2xvcnMoe1xyXG4gICAgICAgIC8vIHNldFNlYXJjaEhpZ2hsaWdodENvbG9ycyBhY2NlcHRzIGJvdGggQW5ub3RhdGlvbnMuQ29sb3Igb2JqZWN0cyBvciAncmdiYScgc3RyaW5nc1xyXG4gICAgICAgIHNlYXJjaFJlc3VsdDogbmV3IHRoaXMud2ViVmlld2VySW5zdGFuY2UuQW5ub3RhdGlvbnMuQ29sb3IoMjUwLDIwNiwwLDAuNTAxOTYpLFxyXG4gICAgICAgIGFjdGl2ZVNlYXJjaFJlc3VsdDogbmV3IHRoaXMud2ViVmlld2VySW5zdGFuY2UuQW5ub3RhdGlvbnMuQ29sb3IoMjUwLDIwNiwwLDAuNTAxOTYpLFxyXG4gICAgICB9KTtcclxuICAgICAgaWYodGhpcy5yZWNpdmVkU2VhcmNoU3RyaW5nc0FycmF5Lmxlbmd0aCAhPT0gMCl7XHJcbiAgICAgICAgdGhpcy5hdXRvbWF0aWNTZWFyY2godGhpcy5yZWNpdmVkU2VhcmNoU3RyaW5nc0FycmF5KTtcclxuICAgIH1cclxuICAgICAgdGhpcy5sb2FkRG9jdW1lbnQoKTtcclxuXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGltcG9ydEFub3RhdGlvbnNGcm9tT3V0c2lkZSgpe1xyXG4gICAgY29uc3QgZG9jdW1lbnRWaWV3ZXIgPSB0aGlzLndlYlZpZXdlckluc3RhbmNlLmRvY1ZpZXdlcjtcclxuXHJcbiAgICBkb2N1bWVudFZpZXdlci5vbignZG9jdW1lbnRMb2FkZWQnLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMud2ViVmlld2VySW5zdGFuY2UuYW5ub3RNYW5hZ2VyLmltcG9ydEFubm90YXRpb25zKHRoaXMuaW1wb3J0ZWRBbm90YXRpb25zKVxyXG4gICAgfSlcclxuICAgIC8vIC50aGVuKGFubm90YXRpb25zID0+IHtcclxuICAgIC8vICAgYW5ub3RhdGlvbnMuZm9yRWFjaChhbm5vdGF0aW9uID0+IHtcclxuICAgIC8vICAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmFubm90TWFuYWdlci5yZWRyYXdBbm5vdGF0aW9uKGFubm90YXRpb24pO1xyXG4gICAgLy8gICB9KTtcclxuICAgIC8vIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gZXhjdHJhY3QgYWxsIGFub3RhdGlvbnMgb24gdGhlIGZpbGUgYW5kIHNlbmQgaXQgb3V0IHNpZGUgdG8gYmUgc2F2ZWQgYW5kIGxlYXZlIHRoZSBmaWxlIGFzIGl0IGlzIHdpdGhvdXQgYW55IGFub3RhdGlvbnMgb24gaXRcclxuICBleHBvcnRBbm90YXRpb25zVG9PdXRzaWRlKCl7XHJcbiAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmFubm90TWFuYWdlci5vbignYW5ub3RhdGlvbkNoYW5nZWQnLCAoYW5ub3RhdGlvbnMsIGFjdGlvbiwgeyBpbXBvcnRlZCB9KSA9PiB7XHJcbiAgICAgIGlmIChpbXBvcnRlZCkgcmV0dXJuO1xyXG4gICAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmFubm90TWFuYWdlci5leHBvcnRBbm5vdGF0aW9ucygpLnRoZW4oZXhjdHJhY3RlZEFub3RhdGlvbnMgPT4ge1xyXG4gICAgICAgIHRoaXMub25BZGRpbmdBbm90YXRpb24uZW1pdChleGN0cmFjdGVkQW5vdGF0aW9ucyk7XHJcbiAgICAgIH0pO1xyXG4gICAgICAvLyBpZiB0cmFja2luZyBzaWduYXR1cmUgbG9jYXRpb24gaXMgZW5hYmxlIHRoZW4gZW1pdCBzaWduYXR1cmUgb3V0c2lkZSB3aXRoIGV2ZXJ5IGNoYW5nZXMgaW4gaXRcclxuICAgICAgaWYodGhpcy50cmFja1NpZ25hdHVyZSl7XHJcbiAgICAgICAgdGhpcy5vblNpZ25hdHVyZVRyYWNraW5nLmVtaXQoe2Fub3RhdGlvbnMgOiBhbm5vdGF0aW9ucyAsIGFjdGlvbiA6IGFjdGlvbn0pXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaW1wb3J0U2lnbmF0dXJlKCkge1xyXG4gICAgY29uc3QgZG9jdW1lbnRWaWV3ZXIgPSB0aGlzLndlYlZpZXdlckluc3RhbmNlLmRvY1ZpZXdlcjtcclxuICAgIGNvbnN0IHNpZ25hdHVyZVRvb2wgPSBkb2N1bWVudFZpZXdlci5nZXRUb29sKCdBbm5vdGF0aW9uQ3JlYXRlU2lnbmF0dXJlJyk7XHJcblxyXG4gICAgZG9jdW1lbnRWaWV3ZXIub24oJ2RvY3VtZW50TG9hZGVkJywgKCkgPT4ge1xyXG4gICAgICBpZih0aGlzLmZpcnN0VGltZUxvYWQpe1xyXG4gICAgICAgIHNpZ25hdHVyZVRvb2wuaW1wb3J0U2lnbmF0dXJlcyhbLi4udGhpcy51c2VyU2lnbmF0dXJlc10pO1xyXG4gICAgICAgIHRoaXMuZmlyc3RUaW1lTG9hZCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICBcclxuICBleHBvcnRpbmdTYXZlZFNpZ25hdHVyZSgpIHtcclxuICAgIGNvbnN0IGRvY3VtZW50Vmlld2VyID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kb2NWaWV3ZXI7XHJcbiAgICBjb25zdCBTaWduYXR1cmVDcmVhdGVUb29sID0gZG9jdW1lbnRWaWV3ZXIuZ2V0VG9vbCgnQW5ub3RhdGlvbkNyZWF0ZVNpZ25hdHVyZScpXHJcbiAgICBTaWduYXR1cmVDcmVhdGVUb29sLm9uKCdzaWduYXR1cmVTYXZlZCcsIChhbm5vdGF0aW9uKSA9PiB7XHJcbiAgICAgIGlmKCF0aGlzLmZpcnN0U2lnbmF0dXJlTG9hZCl7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ3NpZ25hdHVyZSBzYXZlZCB0cmlnZXJlZCcpO1xyXG4gICAgICAgIHRoaXMubmV3U2lnbkNyZWF0aW9uID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmZpcnN0U2lnbmF0dXJlTG9hZCA9IGZhbHNlO1xyXG4gICAgfSk7O1xyXG4gIH1cclxuICBcclxuICBleHBvcnRpbmdTaWduYXR1cmUoKSB7XHJcbiAgICBjb25zdCBkb2N1bWVudFZpZXdlciA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuZG9jVmlld2VyO1xyXG4gICAgY29uc3QgU2lnbmF0dXJlQ3JlYXRlVG9vbCA9IGRvY3VtZW50Vmlld2VyLmdldFRvb2woJ0Fubm90YXRpb25DcmVhdGVTaWduYXR1cmUnKVxyXG4gICAgU2lnbmF0dXJlQ3JlYXRlVG9vbC5vbignYW5ub3RhdGlvbkFkZGVkJywgKGFubm90YXRpb24pID0+IHtcclxuICAgICAgaWYgKGFubm90YXRpb24gJiYgdGhpcy5uZXdTaWduQ3JlYXRpb24pIHtcclxuICAgICAgICB0aGlzLm5ld1NpZ25DcmVhdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZXh0cmFjdEFub3RhdGlvbihhbm5vdGF0aW9uICwgZG9jdW1lbnRWaWV3ZXIpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGFubm90YXRpb24pXHJcbiAgICAgIH1cclxuICAgIH0pOztcclxuICB9XHJcblxyXG4gIGV4dHJhY3RBbm90YXRpb24oYW5ub3RhdGlvbiAsIGRvY3VtZW50Vmlld2VyKXtcclxuICAgIGlmKGFubm90YXRpb25bJ2ltYWdlJ10pe1xyXG4gICAgICAvLyBjb252ZXJ0IGJhc2U2NCBzaWduYXR1cmUgaW50byBmaWxlIGFuZCBlbWl0IGl0IHRvIG91dCBzaWRlIFxyXG4gICAgICBsZXQgYmFzZTY0SW1nID0gYW5ub3RhdGlvblsnaW1hZ2UnXVsnY3VycmVudFNyYyddO1xyXG4gICAgICB2YXIgYXJyID0gYmFzZTY0SW1nLnNwbGl0KCcsJyksXHJcbiAgICAgIG1pbWUgPSBhcnJbMF0ubWF0Y2goLzooLio/KTsvKVsxXSxcclxuICAgICAgYnN0ciA9IGF0b2IoYXJyWzFdKSwgXHJcbiAgICAgIG4gPSBic3RyLmxlbmd0aCwgXHJcbiAgICAgIHU4YXJyID0gbmV3IFVpbnQ4QXJyYXkobik7XHJcbiAgICAgIHdoaWxlKG4tLSl7XHJcbiAgICAgICAgICB1OGFycltuXSA9IGJzdHIuY2hhckNvZGVBdChuKTtcclxuICAgICAgfVxyXG4gICAgICBsZXQgbmFtZSA9IG1pbWUucmVwbGFjZSgnLycgLCAnLicpXHJcbiAgICAgIGxldCBteUZpbGUgPSBuZXcgRmlsZShbdThhcnJdLCAnbXlTaWduYXR1cmUucG5nJywge3R5cGU6bWltZX0pO1xyXG4gICAgICB0aGlzLlNpZ25hdHVyZUV2ZW50LmVtaXQoeyBkYXRhOiBteUZpbGUsIGV2ZW50TmFtZTogJ2V4cG9ydCcgfSk7XHJcblxyXG4gICAgfWVsc2V7XHJcbiAgICAgIHRoaXMuZXh0cmFjdEFubm90YXRpb25TaWduYXR1cmUoYW5ub3RhdGlvbiAsIGRvY3VtZW50Vmlld2VyKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgZXh0cmFjdEFubm90YXRpb25TaWduYXR1cmUoYW5ub3RhdGlvbiwgZG9jVmlld2VyKSB7XHJcbiAgICAvLyBDcmVhdGUgYSBuZXcgQ2FudmFzIHRvIGRyYXcgdGhlIEFubm90YXRpb24gb25cclxuICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgLy8gUmVmZXJlbmNlIHRoZSBhbm5vdGF0aW9uIGZyb20gdGhlIERvY3VtZW50XHJcbiAgICBjb25zdCBwYWdlTWF0cml4ID0gZG9jVmlld2VyLmdldERvY3VtZW50KCkuZ2V0UGFnZU1hdHJpeChhbm5vdGF0aW9uLlBhZ2VOdW1iZXIpO1xyXG4gICAgLy8gU2V0IHRoZSBoZWlnaHQgJiB3aWR0aCBvZiB0aGUgY2FudmFzIHRvIG1hdGNoIHRoZSBhbm5vdGF0aW9uXHJcbiAgICBjYW52YXMuaGVpZ2h0ID0gYW5ub3RhdGlvbi5IZWlnaHQ7XHJcbiAgICBjYW52YXMud2lkdGggPSBhbm5vdGF0aW9uLldpZHRoO1xyXG4gICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAvLyBUcmFuc2xhdGUgdGhlIEFubm90YXRpb24gdG8gdGhlIHRvcCBUb3AgTGVmdCBDb3JuZXIgb2YgdGhlIENhbnZhcyBpZSAoMCwgMClcclxuICAgIGN0eC50cmFuc2xhdGUoLWFubm90YXRpb24uWCwgLWFubm90YXRpb24uWSk7XHJcbiAgICAvLyBEcmF3IHRoZSBBbm5vdGF0aW9uIG9udG8gdGhlIENhbnZhc1xyXG4gICAgYW5ub3RhdGlvbi5kcmF3KGN0eCwgcGFnZU1hdHJpeCk7XHJcbiAgICAvLyBDb252ZXJ0IHRoZSBDYW52YXMgdG8gYSBCbG9iIE9iamVjdCBmb3IgVXBsb2FkXHJcbiAgICBjYW52YXMudG9CbG9iKChibG9iKSA9PiB7XHJcbiAgICAgIC8vIENhbGwgeW91ciBCbG9iIFN0b3JhZ2UgVXBsb2FkIEZ1bmN0aW9uXHJcbiAgICAgIGxldCBuYW1lID0gYmxvYi50eXBlLnJlcGxhY2UoJy8nICwgJy4nKVxyXG4gICAgICBsZXQgbXlGaWxlID0gbmV3IEZpbGUoW2Jsb2JdLCBuYW1lKTtcclxuICAgICAgdGhpcy5TaWduYXR1cmVFdmVudC5lbWl0KHsgZGF0YTogbXlGaWxlLCBldmVudE5hbWU6ICdleHBvcnQnIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVBbm5vdGF0aW9uKCkge1xyXG4gICAgY29uc3QgZG9jdW1lbnRWaWV3ZXIgPSB0aGlzLndlYlZpZXdlckluc3RhbmNlLmRvY1ZpZXdlcjtcclxuICAgIGNvbnN0IFNpZ25hdHVyZUNyZWF0ZVRvb2wgPSBkb2N1bWVudFZpZXdlci5nZXRUb29sKCdBbm5vdGF0aW9uQ3JlYXRlU2lnbmF0dXJlJyk7XHJcbiAgICBTaWduYXR1cmVDcmVhdGVUb29sLm9uKCdzaWduYXR1cmVEZWxldGVkJywgKGFubm90YXRpb24sIGluZGV4KSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCd0aGVyZSB3ZXJlIGFubm90YXRpb25zIGRlbGV0ZWQnKTtcclxuICAgICAgdGhpcy51c2VyU2lnbmF0dXJlcy5zcGxpY2UoaW5kZXggLCAxKTtcclxuICAgICAgdGhpcy5TaWduYXR1cmVFdmVudC5lbWl0KHsgZGF0YTogeyBzaWduYXR1cmU6IGFubm90YXRpb24sIGluZGV4OiBpbmRleCB9LCBldmVudE5hbWU6ICdkZWxldGUnIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhZGREb3dubG9hZEJ1dHRvbigpIHtcclxuICAgIHRoaXMud2ViVmlld2VySW5zdGFuY2Uuc2V0SGVhZGVySXRlbXMoKGhlYWRlcikgPT4ge1xyXG4gICAgICBoZWFkZXIucHVzaCh7XHJcbiAgICAgICAgdHlwZTogJ2FjdGlvbkJ1dHRvbicsXHJcbiAgICAgICAgaW1nOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIGNsYXNzPVwiYmkgYmktZmlsZS1lYXJtYXJrLWFycm93LWRvd25cIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+IDxwYXRoIGQ9XCJNOC41IDYuNWEuNS41IDAgMCAwLTEgMHYzLjc5M0w2LjM1NCA5LjE0NmEuNS41IDAgMSAwLS43MDguNzA4bDIgMmEuNS41IDAgMCAwIC43MDggMGwyLTJhLjUuNSAwIDAgMC0uNzA4LS43MDhMOC41IDEwLjI5M1Y2LjV6XCIvPiA8cGF0aCBkPVwiTTE0IDE0VjQuNUw5LjUgMEg0YTIgMiAwIDAgMC0yIDJ2MTJhMiAyIDAgMCAwIDIgMmg4YTIgMiAwIDAgMCAyLTJ6TTkuNSAzQTEuNSAxLjUgMCAwIDAgMTEgNC41aDJWMTRhMSAxIDAgMCAxLTEgMUg0YTEgMSAwIDAgMS0xLTFWMmExIDEgMCAwIDEgMS0xaDUuNXYyelwiLz48L3N2Zz4nLFxyXG4gICAgICAgIHRpdGxlOiB0aGlzLmlzQXJhYmljID8gJ9iq2YbYstmK2YQnIDogJ0Rvd25sb2FkJyxcclxuICAgICAgICBvbkNsaWNrOiBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCB7IERvY3VtZW50Vmlld2VyLCBBbm5vdGF0aW9uTWFuYWdlciwgU2F2ZU9wdGlvbnMgfSA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuQ29yZUNvbnRyb2xzO1xyXG4gICAgICAgICAgLy8gY29uc3QgeGZkZlN0cmluZyA9IGF3YWl0IEFubm90YXRpb25NYW5hZ2VyLmV4cG9ydEFubm90YXRpb25zKCk7XHJcbiAgICAgICAgICBjb25zdCBzYXZlT3B0aW9ucyA9IFNhdmVPcHRpb25zO1xyXG4gICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgZmlsZW5hbWU6IHRoaXMuY29ycmVzcG9uZGFuY2UudGl0bGUgPyB0aGlzLmNvcnJlc3BvbmRhbmNlLnRpdGxlIDogJ215RG9jdW1lbnQucGRmJyxcclxuICAgICAgICAgICAgLy8geGZkZlN0cmluZyxcclxuICAgICAgICAgICAgZmxhZ3M6IHNhdmVPcHRpb25zLkxJTkVBUklaRUQsXHJcbiAgICAgICAgICAgIGRvd25sb2FkVHlwZTogJ3BkZidcclxuICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgdGhpcy5wZGZ0cm9uU2VydmljZS5pbnN0YW5jZS5kb3dubG9hZFBkZihvcHRpb25zKTtcclxuICAgICAgICAgIHRoaXMuZXZlbnRzLm5leHQoJ2Rvd25sb2FkJyk7XHJcbiAgICAgICAgICAvLyBsZXQgdXJsID0gdGhpcy5jb3JyZXNwb25kYW5jZS5wcm9wZXJ0aWVzLmNvbnRlbnQuZGF0YTtcclxuICAgICAgICAgIC8vIGxldCBmaWxlTmFtZSA9IHRoaXMuY29ycmVzcG9uZGFuY2UucHJvcGVydGllcy5jb250ZW50Lm5hbWU7XHJcbiAgICAgICAgICAvLyBpZiAodXJsICYmIGZpbGVOYW1lKSB7XHJcbiAgICAgICAgICAvLyAgIGxldCBzYWZlVXJsID0gdGhpcy5zZWN1cmVQaXBlLnRyYW5zZm9ybSh1cmwpO1xyXG4gICAgICAgICAgLy8gICBzYWZlVXJsLnN1YnNjcmliZSgodXJsOiBhbnkpID0+IHtcclxuICAgICAgICAgIC8vICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICAgICAgLy8gICAgIGxpbmsuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgIC8vICAgICBsaW5rLmhyZWYgPSB1cmwuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eTtcclxuICAgICAgICAgIC8vICAgICBsaW5rLmRvd25sb2FkID0gZmlsZU5hbWU7XHJcbiAgICAgICAgICAvLyAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcclxuICAgICAgICAgIC8vICAgICBsaW5rLmNsaWNrKCk7XHJcbiAgICAgICAgICAvLyAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTtcclxuICAgICAgICAgIC8vICAgICB0aGlzLmV2ZW50cy5uZXh0KCdkb3dubG9hZCcpO1xyXG4gICAgICAgICAgLy8gICB9KTtcclxuICAgICAgICAgIC8vIH1cclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYWRkUHJpbnRCdXR0b24oKSB7XHJcbiAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLnNldEhlYWRlckl0ZW1zKChoZWFkZXIpID0+IHtcclxuICAgICAgaGVhZGVyLnB1c2goe1xyXG4gICAgICAgIHR5cGU6ICdhY3Rpb25CdXR0b24nLFxyXG4gICAgICAgIGltZzogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6I2FiYjBjNDt9PC9zdHlsZT48L2RlZnM+PHRpdGxlPmljb24gLSBoZWFkZXIgLSBwcmludCAtIGxpbmU8L3RpdGxlPjxwYXRoIGNsYXNzPVwiY2xzLTFcIiBkPVwiTTIwLDZIMThWMkg2VjZINEEyLDIsMCwwLDAsMiw4djlhMiwyLDAsMCwwLDIsMkg2djNIMThWMTloMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDIwLDZaTTgsNGg4VjZIOFptOCwxNkg4VjE2aDhabTQtM0gxOFYxNEg2djNINFY4SDIwWm0tNC03aDJ2MkgxNlptLTMsMGgydjJIMTNaXCI+PC9wYXRoPjwvc3ZnPicsXHJcbiAgICAgICAgdGl0bGU6IHRoaXMuaXNBcmFiaWMgPyBcIti32KjYp9i52KlcIiA6ICdQcmludCcsXHJcbiAgICAgICAgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5wZGZ0cm9uU2VydmljZS5pbnN0YW5jZS5wcmludCgpO1xyXG4gICAgICAgICAgdGhpcy5ldmVudHMubmV4dCgncHJpbnQnKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYWRkV2F0ZXJtYXJrKCkge1xyXG4gICAgY29uc3QgdXNlcmluZm8gPSB0aGlzLm51eGVvLm51eGVvQ2xpZW50LnVzZXIucHJvcGVydGllcztcclxuICAgIHRoaXMucGRmdHJvblNlcnZpY2UuYWRkV2F0ZXJtYXJrKFxyXG4gICAgICBgJHt1c2VyaW5mby51c2VybmFtZX0gICAgYFxyXG4gICAgICAvLyBgJHt1c2VyaW5mby5maXJzdE5hbWV9ICR7XHJcbiAgICAgIC8vICAgdXNlcmluZm8ubGFzdE5hbWVcclxuICAgICAgLy8gfSBgXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgbG9hZERvY3VtZW50KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLndlYlZpZXdlckluc3RhbmNlIHx8ICghdGhpcy5maWxlRGF0YSAmJiAhdGhpcy5maWxlVVJMKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCB7IGRvY1ZpZXdlciwgYW5ub3RNYW5hZ2VyLCBBbm5vdGF0aW9ucyB9ID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZTtcclxuICAgIGRvY1ZpZXdlci5vbignZG9jdW1lbnRMb2FkZWQnLCAoKSA9PiB7XHJcbiAgICAgIGxldCBmaXRNb2RlID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5GaXRNb2RlLkZpdFdpZHRoO1xyXG4gICAgICBpZiAodGhpcy5maXRNb2RlID09PSAnRml0UGFnZScpIHtcclxuICAgICAgICBmaXRNb2RlID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5GaXRNb2RlLkZpdFBhZ2U7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5maXRNb2RlID09PSAnWm9vbScpIHtcclxuICAgICAgICBmaXRNb2RlID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5GaXRNb2RlLlpvb207XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5zZXRGaXRNb2RlKGZpdE1vZGUpO1xyXG4gICAgfSk7XHJcbiAgICBpZiAoIXRoaXMuZWRpdE1vZGUpIHtcclxuICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5hbm5vdE1hbmFnZXIuc2V0UmVhZE9ubHkodHJ1ZSk7XHJcbiAgICAgIC8vIGluc3RhbmNlLmVuYWJsZVRvb2xzKFtdKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmZpbGVVUkwgJiYgdGhpcy5maWxlVVJMLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmxvYWREb2N1bWVudCh0aGlzLmZpbGVVUkwsIHtcclxuICAgICAgICB4b2RzdHJlYW1pbmc6dHJ1ZSxcclxuICAgICAgICBjdXN0b21IZWFkZXJzOiB7XHJcbiAgICAgICAgICBBdXRob3JpemF0aW9uOiB0aGlzLmF1dGhIZWFkZXIsXHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5sb2FkRG9jdW1lbnQoXHJcbiAgICAgICAgbmV3IEJsb2IoW25ldyBVaW50OEFycmF5KHRoaXMuZmlsZURhdGEpXSwgeyB0eXBlOiB0aGlzLkRPQ1VNRU5UX1RZUEUgfSksXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgZmlsZW5hbWU6IHRoaXMuZmlsZVRpdGxlLFxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlzRmV0Y2hpbmcgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLmNvcnJlc3BvbmRhbmNlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgLy8gaWYgd2UgbmVlZCB0byBjaGVjayBvbiBzZWNyZWN5IGxldmVsIGZvciBhZGRpbmcgd2F0ZXIgbWFyayBvciBub3QgXHJcbiAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LmVuYWJsZVZpZXdlcldhdGVyTWFyayAmJiB0aGlzLnNlY3JlY3lQcm9wZXJ0eSkge1xyXG4gICAgICAgIC8vIGNoZWNrIGZvciBzZWNyZWN5IGxldmVsIGJlZm9yIGFkZGluZyB3YXRlcm1hcmtcclxuICAgICAgICBpZiAodGhpcy5jb3JyZXNwb25kYW5jZS5wcm9wZXJ0aWVzW3RoaXMuc2VjcmVjeVByb3BlcnR5XSAmJiB0aGlzLmNvcnJlc3BvbmRhbmNlLnByb3BlcnRpZXNbdGhpcy5zZWNyZWN5UHJvcGVydHldICE9PSAnTm9ybWFsJykge1xyXG4gICAgICAgICAgdGhpcy5hZGRXYXRlcm1hcmsoKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLmVudmlyb25tZW50LmVuYWJsZVZpZXdlcldhdGVyTWFyayAmJiAhdGhpcy5zZWNyZWN5UHJvcGVydHkpIHtcclxuICAgICAgICB0aGlzLmFkZFdhdGVybWFyaygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBleHBvcnRBc0Jsb2IoKTogUHJvbWlzZTxCbG9iPiB7XHJcbiAgICBjb25zdCBkb2MgPSB0aGlzLndlYlZpZXdlckluc3RhbmNlLmRvY1ZpZXdlci5nZXREb2N1bWVudCgpO1xyXG4gICAgY29uc3QgeGZkZlN0cmluZyA9XHJcbiAgICAgIGF3YWl0IHRoaXMud2ViVmlld2VySW5zdGFuY2UuYW5ub3RNYW5hZ2VyLmV4cG9ydEFubm90YXRpb25zKCk7XHJcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgZG9jLmdldEZpbGVEYXRhKHtcclxuICAgICAgLy8gc2F2ZXMgdGhlIGRvY3VtZW50IHdpdGggYW5ub3RhdGlvbnMgaW4gaXRcclxuICAgICAgeGZkZlN0cmluZyxcclxuICAgIH0pO1xyXG4gICAgY29uc3QgYXJyID0gbmV3IFVpbnQ4QXJyYXkoZGF0YSk7XHJcbiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2Fycl0sIHsgdHlwZTogdGhpcy5ET0NVTUVOVF9UWVBFIH0pO1xyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShibG9iKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZUVkaXQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuYWN0aW9uQ2xpY2tlZCkge1xyXG4gICAgICAvLyBhY3Rpb24gY2xpY2tlZCBpcyBub3QgY2xpY2tlZCB0aGVuIG5vIHVwZGF0ZSBtb2RlIG9wZW5lZFxyXG4gICAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmRpc2FibGVFbGVtZW50cyhbXHJcbiAgICAgICAgJ3Rvb2xiYXJHcm91cC1TaGFwZXMnLFxyXG4gICAgICAgICd0b29sYmFyR3JvdXAtRWRpdCcsXHJcbiAgICAgICAgJ3Rvb2xiYXJHcm91cC1JbnNlcnQnLFxyXG4gICAgICAgICd0b29sYmFyR3JvdXAtQW5ub3RhdGUnLFxyXG4gICAgICBdKTtcclxuICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5hbm5vdE1hbmFnZXIuc2V0UmVhZE9ubHkodHJ1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBlZGl0IG1vZGUgb3BlbmVkIGFuZCBtdXN0IGJlIHdoZW4gYWN0aW9uIGlzIGNsaWNrZWRcclxuICAgICAgaWYgKHRoaXMuZWRpdGluZ1R5cGUpIHtcclxuICAgICAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmRpc2FibGVFbGVtZW50cyhbXHJcbiAgICAgICAgICAndG9vbGJhckdyb3VwLVNoYXBlcycsXHJcbiAgICAgICAgICAndG9vbGJhckdyb3VwLUVkaXQnLFxyXG4gICAgICAgICAgJ3Rvb2xiYXJHcm91cC1JbnNlcnQnLFxyXG4gICAgICAgICAgJ3Rvb2xiYXJHcm91cC1Bbm5vdGF0ZScsXHJcbiAgICAgICAgXSk7XHJcbiAgICAgICAgbGV0IGdyb3VwIDtcclxuICAgICAgICBpZih0aGlzLmVkaXRpbmdUeXBlID09PSAnc2lnbkRvYycpe1xyXG4gICAgICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5lbmFibGVFbGVtZW50cyhbXHJcbiAgICAgICAgICAgICd0b29sYmFyR3JvdXAtSW5zZXJ0J1xyXG4gICAgICAgICAgXSk7XHJcblxyXG4gICAgICAgIH1lbHNlIGlmKHRoaXMuZWRpdGluZ1R5cGUgPT09ICdhbm5vdGF0ZScpe1xyXG4gICAgICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5lbmFibGVFbGVtZW50cyhbXHJcbiAgICAgICAgICAgICd0b29sYmFyR3JvdXAtU2hhcGVzJyxcclxuICAgICAgICAgICAgJ3Rvb2xiYXJHcm91cC1FZGl0JyxcclxuICAgICAgICAgICAgJ3Rvb2xiYXJHcm91cC1Bbm5vdGF0ZScsXHJcbiAgICAgICAgICBdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5lbmFibGVFbGVtZW50cyhbXHJcbiAgICAgICAgICAndG9vbGJhckdyb3VwLVNoYXBlcycsXHJcbiAgICAgICAgICAndG9vbGJhckdyb3VwLUVkaXQnLFxyXG4gICAgICAgICAgJ3Rvb2xiYXJHcm91cC1JbnNlcnQnLFxyXG4gICAgICAgICAgJ3Rvb2xiYXJHcm91cC1Bbm5vdGF0ZScsXHJcbiAgICAgICAgXSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5hbm5vdE1hbmFnZXIuc2V0UmVhZE9ubHkoZmFsc2UpO1xyXG4gICAgICAvLyB0aGlzLndlYlZpZXdlckluc3RhbmNlLnNldFRvb2xiYXJHcm91cCgndG9vbGJhckdyb3VwLUFubm90YXRlJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy53ZWJWaWV3ZXJJbnN0YW5jZSkge1xyXG4gICAgICB0aGlzLnRvZ2dsZUVkaXQoKTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGNoYW5nZXMudXJsRmlsZUNvbnRlbnQgJiZcclxuICAgICAgICBjaGFuZ2VzLnVybEZpbGVDb250ZW50LnByZXZpb3VzVmFsdWUgJiZcclxuICAgICAgICBjaGFuZ2VzLnVybEZpbGVDb250ZW50LnByZXZpb3VzVmFsdWUgIT09XHJcbiAgICAgICAgY2hhbmdlcy51cmxGaWxlQ29udGVudC5jdXJyZW50VmFsdWVcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5uZ09uRGVzdHJveSgpO1xyXG4gICAgICAgIHRoaXMubmdPbkluaXQoKTtcclxuICAgICAgICB0aGlzLm5nQWZ0ZXJWaWV3SW5pdCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHBkZlRyb25FdmVudChldmVudCkge1xyXG4gICAgaWYgKHRoaXNbZXZlbnQuYWN0aW9uXSkge1xyXG4gICAgICAvLyBtZXRob2QgZXhpc3RzIGluIHRoZSBjb21wb25lbnRcclxuICAgICAgLy8gIHRoaXNbZXZlbnQuYWN0aW9uXShldmVudC5wYXJhbXMpOyAvLyBjYWxsIGl0XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHNlYXJjaCByZXN1bHRzIHNlY3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgXHJcbiAgcGFnZXM6YW55O1xyXG4gIHN0YW5kYXJkSGVpZ2h0O1xyXG4gIHN0YW5kYXJkV2lkdGg7XHJcbiAgcGFnZUhlaWdodDtcclxuICBwYWdlV2lkdGg7XHJcbiAgc2F2ZWRBbm90YXRpb25zID0gW107XHJcbiAgZmlsZVdpdGhPY3IgPSBmYWxzZTtcclxuICBuZXdBbm5vdGF0aW9ucz1bXTtcclxuICBteVNlYXJjaFN0cmluZ1Jlc3VsdHMgPSBbXTtcclxuICByZWNpdmVkU2VhcmNoU3RyaW5nc0FycmF5ID0gW107XHJcblxyXG4gIC8vIGFkZGluZyBzZWFyY2ggbGlzbmVyIHRvIGxpc2VuIHRvIGludGVybmFsIHNlYXJjaCBmcm9tIHVpIGFuZCB3aXRob3V0IG9jclxyXG4gIGFkZFNlYXJjaExpc3RuZXIoKSB7XHJcbiAgICBjb25zdCB7IGFubm90TWFuYWdlciwgZG9jVmlld2VyLCBBbm5vdGF0aW9ucyB9ID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZTtcclxuICAgIGNvbnN0IHNlYXJjaExpc3RlbmVyID0gKHNlYXJjaFBhdHRlcm4sIG9wdGlvbnMsIHJlc3VsdHMpID0+IHtcclxuXHJcbiAgICAgICAgdGhpcy5teVNlYXJjaFN0cmluZ1Jlc3VsdHMgPSBbXTtcclxuICAgICAgaWYodGhpcy5zYXZlZEFub3RhdGlvbnMubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgdGhpcy5zYXZlZEFub3RhdGlvbnMubWFwKGFubm90YXRpb24gPT4ge1xyXG4gICAgICAgICAgYW5ub3RhdGlvbi5IaWRkZW4gPSB0cnVlO1xyXG4gICAgICAgIC8vIEFsd2F5cyByZWRyYXcgYW5ub3RhdGlvbiBpZiByZW5kZXJpbmcgd2FzIHVwZGF0ZWRcclxuICAgICAgICBhbm5vdE1hbmFnZXIucmVkcmF3QW5ub3RhdGlvbihhbm5vdGF0aW9uKTtcclxuICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gZG9uJ3QgZG8gYW55IHNlYXJjaCB1bnRpbCB0aGVyZSBpcyBhIHNlYXJjaCBwYXR0ZXJuXHJcbiAgICAgIGlmKHNlYXJjaFBhdHRlcm4udHJpbSgpLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICAvLyBhZGQgcmVkYWN0aW9uIGFubm90YXRpb24gZm9yIGVhY2ggc2VhcmNoIHJlc3VsdFxyXG4gICAgICAgICAgICB0aGlzLm5ld0Fubm90YXRpb25zID0gcmVzdWx0cy5tYXAocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBhbm5vdGF0aW9uID0gbmV3IEFubm90YXRpb25zLlRleHRIaWdobGlnaHRBbm5vdGF0aW9uKCk7XHJcbiAgICAgICAgICAgICAgYW5ub3RhdGlvbi5RdWFkcyA9IHJlc3VsdC5xdWFkcy5tYXAocXVhZCA9PiBxdWFkLmdldFBvaW50cygpKTtcclxuICAgICAgICAgICAgICBhbm5vdGF0aW9uLlBhZ2VOdW1iZXIgPSByZXN1bHQucGFnZU51bTtcclxuICAgICAgICAgICAgICBhbm5vdGF0aW9uLlN0cm9rZUNvbG9yID0gbmV3IEFubm90YXRpb25zLkNvbG9yKDI1MCwyMDYsMCwwLjUwMTk2KTsgIFxyXG4gICAgICAgICAgICAgIGFubm90YXRpb24uQXV0aG9yID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5hbm5vdE1hbmFnZXIuZ2V0Q3VycmVudFVzZXIoKTsgICAgICBcclxuICAgICAgICAgICAgICByZXR1cm4gYW5ub3RhdGlvbjtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2F2ZWRBbm90YXRpb25zLnB1c2goLi4udGhpcy5uZXdBbm5vdGF0aW9ucyk7XHJcbiAgICAgICAgICAgIGFubm90TWFuYWdlci5hZGRBbm5vdGF0aW9ucyh0aGlzLm5ld0Fubm90YXRpb25zKTtcclxuICAgICAgICAgICAgYW5ub3RNYW5hZ2VyLmRyYXdBbm5vdGF0aW9uc0Zyb21MaXN0KHRoaXMubmV3QW5ub3RhdGlvbnMpO1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICBkb2NWaWV3ZXIuY2xlYXJTZWFyY2hSZXN1bHRzKCk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgZG9jVmlld2VyLm9uKCdkb2N1bWVudExvYWRlZCcsICgpID0+IHtcclxuICAgICAgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5hZGRTZWFyY2hMaXN0ZW5lcihzZWFyY2hMaXN0ZW5lcik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIHBlcmZvcm0gYXV0b21hdGljIHNlYXJjaCB3aGVuIGludGVyaW5nIHRoZSBwYWdlIFxyXG4gIGF1dG9tYXRpY1NlYXJjaChzZWFyY2hUZXh0QXJyYXkpe1xyXG4gICAgY29uc3QgeyBhbm5vdE1hbmFnZXIsIGRvY1ZpZXdlciwgQW5ub3RhdGlvbnMgfSA9IHRoaXMud2ViVmlld2VySW5zdGFuY2U7XHJcbiAgICBsZXQgc2VhcmNoT3B0aW9ucztcclxuICAgIHRoaXMud2ViVmlld2VySW5zdGFuY2Uub3BlbkVsZW1lbnRzKFsnc2VhcmNoUGFuZWwnXSk7XHJcbiAgICBkb2NWaWV3ZXIub24oJ2RvY3VtZW50TG9hZGVkJywgKCkgPT4ge1xyXG4gICAgICBjb25zdCBtb2RlID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5Db3JlQ29udHJvbHMuU2VhcmNoLk1vZGUuUEFHRV9TVE9QIHwgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5Db3JlQ29udHJvbHMuU2VhcmNoLk1vZGUuSElHSExJR0hUIHwgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5Db3JlQ29udHJvbHMuU2VhcmNoLk1vZGUuQU1CSUVOVF9TVFJJTkc7XHJcbiAgICAgIHRoaXMubXlTZWFyY2hTdHJpbmdSZXN1bHRzID0gW107IC8vIGVtcHR5IG15IHNlYXJjaCByZXN1bHQgd2hlbiBzdGFydGluZyBuZXcgc2VhcmNoXHJcbiAgICAgIGlmICh0aGlzLmZpbGVXaXRoT2NyKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gYWRkIHJlZGFjdGlvbiBhbm5vdGF0aW9uIGZvciBlYWNoIHNlYXJjaCByZXN1bHRcclxuICAgICAgICAgIGNvbnN0IGFubm90YXRpb24gPSBuZXcgQW5ub3RhdGlvbnMuVGV4dEhpZ2hsaWdodEFubm90YXRpb24oKTtcclxuICAgICAgICAgIHNlYXJjaFRleHRBcnJheS5tYXAoc2VhcmNoVGV4dCA9PiB7XHJcbiAgICAgICAgICAgIGxldCBteVNlYXJjaCA9IHNlYXJjaFRleHQuc3BsaXQoJyAnKTtcclxuICAgICAgICAgICAgaWYobXlTZWFyY2gubGVuZ3RoID4gMSl7XHJcbiAgICAgICAgICAgICAgLy8gdGhlbiBpIGFtIHNlYXJjaGluZyB3aXRoIG1vcmUgdGhhbiBvbmUgd29yZFxyXG4gICAgICAgICAgICAgIHRoaXMucGFnZXMucGFnZXMuZm9yRWFjaCgocGFnZSAsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2VIZWlnaHQgPSBwYWdlLnBhZ2VfaGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlV2lkdGggPSBwYWdlLnBhZ2Vfd2lkdGg7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YW5kYXJkSGVpZ2h0ID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kb2NWaWV3ZXIuZ2V0UGFnZUhlaWdodCgoaW5kZXgrMSkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFuZGFyZFdpZHRoID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kb2NWaWV3ZXIuZ2V0UGFnZVdpZHRoKChpbmRleCsxKSk7XHJcbiAgICAgICAgICAgICAgICBwYWdlLnpvbmVzLmZvckVhY2goem9uZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHpvbmUucGFyYWdyYXBocy5mb3JFYWNoKHBhcmFncmFwaCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYWdyYXBoLmxpbmVzLmZvckVhY2gobGluZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZihsaW5lLnRleHQuaW5jbHVkZXMoc2VhcmNoVGV4dCkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlNlYXJjaEZvcldvcmRJbkxpbmUobXlTZWFyY2gsbGluZSwoaW5kZXgrMSkgLCBwYWdlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgLy8gdGhlbiBpIGFtIHNlYXJjaGluZyB3aXRoIG9ubHkgb25lIHdvcmQgXHJcbiAgICAgICAgICAgICAgdGhpcy5zZWFyY2hGb3JXb3JkSW5BbGxQYWdlcyhzZWFyY2hUZXh0KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgZG9jVmlld2VyLmNsZWFyU2VhcmNoUmVzdWx0cygpO1xyXG4gICAgICAgICAgdGhpcy5kaXNwYWxheVNlYXJjaFJlc3VsdHMoZG9jVmlld2VyKTtcclxuICAgICAgfSBlbHNle1xyXG4gICAgICAgIHNlYXJjaE9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAvLyBJZiB0cnVlLCBhIHNlYXJjaCBvZiB0aGUgZW50aXJlIGRvY3VtZW50IHdpbGwgYmUgcGVyZm9ybWVkLiBPdGhlcndpc2UsIGEgc2luZ2xlIHNlYXJjaCB3aWxsIGJlIHBlcmZvcm1lZC5cclxuICAgICAgICAgIGZ1bGxTZWFyY2g6IHRydWUsXHJcbiAgICAgICAgICAvLyBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGUgc2VhcmNoIHJldHVybnMgYSByZXN1bHQuXHJcbiAgICAgICAgICBvblJlc3VsdDogcmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgLy8gd2l0aCAnUEFHRV9TVE9QJyBtb2RlLCB0aGUgY2FsbGJhY2sgaXMgaW52b2tlZCBhZnRlciBlYWNoIHBhZ2UgaGFzIGJlZW4gc2VhcmNoZWQuXHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQucmVzdWx0Q29kZSA9PT0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5Db3JlQ29udHJvbHMuU2VhcmNoLlJlc3VsdENvZGUuRk9VTkQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFubm90YXRpb24gPSBuZXcgQW5ub3RhdGlvbnMuVGV4dEhpZ2hsaWdodEFubm90YXRpb24oKTtcclxuICAgICAgICAgICAgICAgIGFubm90YXRpb24uUXVhZHMgPSByZXN1bHQucXVhZHMubWFwKHF1YWQgPT4gcXVhZC5nZXRQb2ludHMoKSk7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhhbm5vdGF0aW9uLlF1YWRzKTtcclxuICAgICAgICAgICAgICAgIGFubm90YXRpb24uUGFnZU51bWJlciA9IHJlc3VsdC5wYWdlTnVtO1xyXG4gICAgICAgICAgICAgICAgYW5ub3RhdGlvbi5TdHJva2VDb2xvciA9IG5ldyBBbm5vdGF0aW9ucy5Db2xvcigyNTAsMjA2LDAsMC41MDE5Nik7ICAgXHJcbiAgICAgICAgICAgICAgICBhbm5vdGF0aW9uLkF1dGhvciA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuYW5ub3RNYW5hZ2VyLmdldEN1cnJlbnRVc2VyKCk7ICBcclxuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZWRBbm90YXRpb25zLnB1c2goYW5ub3RhdGlvbikgICA7XHJcbiAgICAgICAgICAgICAgICBhbm5vdE1hbmFnZXIuYWRkQW5ub3RhdGlvbnMoW2Fubm90YXRpb25dKTtcclxuICAgICAgICAgICAgICAgIGFubm90TWFuYWdlci5kcmF3QW5ub3RhdGlvbnNGcm9tTGlzdChbYW5ub3RhdGlvbl0pO1xyXG4gICAgICAgICAgICAgICAgZG9jVmlld2VyLmRpc3BsYXlBZGRpdGlvbmFsU2VhcmNoUmVzdWx0cyhbcmVzdWx0XSk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBzZWFyY2hUZXh0QXJyYXkubWFwKHNlYXJjaGVkVGV4dCA9PiB7XHJcbiAgICAgICAgICBkb2NWaWV3ZXIudGV4dFNlYXJjaEluaXQoc2VhcmNoZWRUZXh0LCBtb2RlLCBzZWFyY2hPcHRpb25zKTtcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgLy8gc2VhcmNoIGZvciBzaW5nbGUgd29yZCBpbiBhbGwgcGFnZXMgXHJcbiAgc2VhcmNoRm9yV29yZEluQWxsUGFnZXMoc2VhcmNoZWRXb3JkKXtcclxuICAgIHRoaXMucGFnZXMucGFnZXMuZm9yRWFjaCgocGFnZSAsIGluZGV4KSA9PiB7XHJcbiAgICAgIHRoaXMucGFnZUhlaWdodCA9IHBhZ2UucGFnZV9oZWlnaHQ7XHJcbiAgICAgIHRoaXMucGFnZVdpZHRoID0gcGFnZS5wYWdlX3dpZHRoO1xyXG4gICAgICB0aGlzLnN0YW5kYXJkSGVpZ2h0ID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kb2NWaWV3ZXIuZ2V0UGFnZUhlaWdodCgoaW5kZXgrMSkpO1xyXG4gICAgICB0aGlzLnN0YW5kYXJkV2lkdGggPSB0aGlzLndlYlZpZXdlckluc3RhbmNlLmRvY1ZpZXdlci5nZXRQYWdlV2lkdGgoKGluZGV4KzEpKTtcclxuICAgICAgY29uc3QgeCA9ICh0aGlzLnBhZ2VXaWR0aCAvIHRoaXMuc3RhbmRhcmRXaWR0aCk7IC8vIHdpZHRoIHJhdGlvXHJcbiAgICAgIGNvbnN0IHkgPSAodGhpcy5wYWdlSGVpZ2h0IC8gdGhpcy5zdGFuZGFyZEhlaWdodCk7IC8vIGhlaWdodCByYXRpb1xyXG4gICAgICBwYWdlLnpvbmVzLmZvckVhY2goem9uZSA9PiB7XHJcbiAgICAgICAgem9uZS5wYXJhZ3JhcGhzLmZvckVhY2gocGFyYWdyYXBoID0+IHtcclxuICAgICAgICAgIHBhcmFncmFwaC5saW5lcy5mb3JFYWNoKGxpbmUgPT4ge1xyXG4gICAgICAgICAgICBsaW5lLndvcmRzLmZvckVhY2god29yZCA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHdvcmQudGV4dC5pbmNsdWRlcyhzZWFyY2hlZFdvcmQpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBhbm5vdGF0aW9uLlBhZ2VOdW1iZXIgPSBpbmRleCsxO1xyXG4gICAgICAgICAgICAgICAgbGV0IHF1YWRzID0gW3tcclxuICAgICAgICAgICAgICAgICAgICB4MTogKHdvcmQuY29vcmRpbmF0ZXMudXBwZXJfbGVmdC54IC8geCksXHJcbiAgICAgICAgICAgICAgICAgICAgeDI6ICh3b3JkLmNvb3JkaW5hdGVzLmJvdHRvbV9yaWdodC54IC8geCksXHJcbiAgICAgICAgICAgICAgICAgICAgeDM6ICh3b3JkLmNvb3JkaW5hdGVzLmJvdHRvbV9yaWdodC54IC8geCksXHJcbiAgICAgICAgICAgICAgICAgICAgeDQ6ICh3b3JkLmNvb3JkaW5hdGVzLnVwcGVyX2xlZnQueCAvIHgpLFxyXG4gICAgICAgICAgICAgICAgICAgIHkxOiAod29yZC5jb29yZGluYXRlcy51cHBlcl9sZWZ0LnkgLyB5KSxcclxuICAgICAgICAgICAgICAgICAgICB5MjogKHdvcmQuY29vcmRpbmF0ZXMudXBwZXJfbGVmdC55IC8geSksXHJcbiAgICAgICAgICAgICAgICAgICAgeTM6ICh3b3JkLmNvb3JkaW5hdGVzLmJvdHRvbV9yaWdodC55IC8geSksXHJcbiAgICAgICAgICAgICAgICAgICAgeTQ6ICh3b3JkLmNvb3JkaW5hdGVzLmJvdHRvbV9yaWdodC55IC8geSksXHJcbiAgICAgICAgICAgICAgICAgIH1dXHJcbiAgICAgICAgICAgICAgICB0aGlzLmhpZ2xpZ2h0VGV4dChcclxuICAgICAgICAgICAgICAgICAgcXVhZHMsIFxyXG4gICAgICAgICAgICAgICAgICBpbmRleCsxXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25zdHJ1Y3RTZWFyY2hSZXN1bHQoc2VhcmNoZWRXb3JkICwgaW5kZXgrMSAsIHF1YWRzICwgbGluZS50ZXh0ICk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBzZWFyY2ggZm9yIHdvcmQgaW4gc2luZ2xlIGxpbmUgXHJcbiAgU2VhcmNoRm9yV29yZEluTGluZShsaXN0T2ZTZWFyY2hlZFdvcmRzLCBsaW5lLCBwYWdlbnVtYmVyLCBwYWdlKSB7XHJcbiAgICB0aGlzLnBhZ2VIZWlnaHQgPSBwYWdlLnBhZ2VfaGVpZ2h0O1xyXG4gICAgdGhpcy5wYWdlV2lkdGggPSBwYWdlLnBhZ2Vfd2lkdGg7XHJcbiAgICB0aGlzLnN0YW5kYXJkSGVpZ2h0ID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kb2NWaWV3ZXIuZ2V0UGFnZUhlaWdodCgocGFnZW51bWJlcikpO1xyXG4gICAgdGhpcy5zdGFuZGFyZFdpZHRoID0gdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kb2NWaWV3ZXIuZ2V0UGFnZVdpZHRoKChwYWdlbnVtYmVyKSk7XHJcbiAgICBjb25zdCB4ID0gKHRoaXMucGFnZVdpZHRoIC8gdGhpcy5zdGFuZGFyZFdpZHRoKTsgLy8gd2lkdGggcmF0aW9cclxuICAgIGNvbnN0IHkgPSAodGhpcy5wYWdlSGVpZ2h0IC8gdGhpcy5zdGFuZGFyZEhlaWdodCk7IC8vIGhlaWdodCByYXRpb1xyXG4gICAgLy8gZmluZCBvbmx5IHdvcmRzIHJlbGF0ZWQgdG8gbXkgc2VhcmNoIGZvcm0gdGhlIGxpbmVcclxuICAgIGxldCBteUZvdW5kZWRSZXN1bHRzID0gW107XHJcbiAgICBsZXQgY29ycmVjdFJlc3VsdHMgPSBbXTtcclxuICAgIGxpbmUud29yZHMuZm9yRWFjaCgod29yZCwgd29yZEluZGV4KSA9PiB7XHJcbiAgICAgIGlmIChsaXN0T2ZTZWFyY2hlZFdvcmRzLmluZGV4T2Yod29yZC50ZXh0KSA+IC0xKSB7XHJcbiAgICAgICAgbXlGb3VuZGVkUmVzdWx0cy5wdXNoKHsgd29yZDogd29yZCwgd29yZEluZGV4OiB3b3JkSW5kZXggfSlcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gZmluZCBvbmx5IHdvcmRzIGV4aXN0IGluIG15IHNlYXJjaCBzZW50ZW5jZSBhbmQgbm90IHNpbmdsZSBhbmQgcmVwZWF0ZWQgd29yZFxyXG4gICAgbXlGb3VuZGVkUmVzdWx0cy5tYXAoKHJlc3VsdCwgaW5kZXgpID0+IHtcclxuICAgICAgaWYgKChteUZvdW5kZWRSZXN1bHRzW2luZGV4XVsnd29yZEluZGV4J10gLSAxID09PSAobXlGb3VuZGVkUmVzdWx0c1tpbmRleCAtIDFdICYmIG15Rm91bmRlZFJlc3VsdHNbaW5kZXggLSAxXVsnd29yZEluZGV4J10pKSB8fFxyXG4gICAgICAgIChteUZvdW5kZWRSZXN1bHRzW2luZGV4ICsgMV0gJiYgKG15Rm91bmRlZFJlc3VsdHNbaW5kZXggKyAxXVsnd29yZEluZGV4J10gLSAxID09PSBteUZvdW5kZWRSZXN1bHRzW2luZGV4XVsnd29yZEluZGV4J10pKSkge1xyXG4gICAgICAgIGNvcnJlY3RSZXN1bHRzLnB1c2gocmVzdWx0KVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICAgIC8vIGhpZ2hsaWh0IHRoZXNlIHdvcmRzIGFmdGVyIGVsZW1pbmF0aW5nIGFsbCByZXBlYXRlZCBhbmQgcmVsYXRlZCB3b3Jkc1xyXG4gICAgLy8gbXVzdCBiZSBmb3IgbG9vcCBzcCBpIGNhbiBjb250cm9sIHRoZSBzdGVwIGluIGVhY2ggbG9vcFxyXG4gICAgbGV0IHF1YWRzID0gW107XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvcnJlY3RSZXN1bHRzLmxlbmd0aDsgKGkgPSBpICsgbGlzdE9mU2VhcmNoZWRXb3Jkcy5sZW5ndGgpKSB7XHJcbiAgICAgIHF1YWRzLnB1c2goXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgeDE6IChjb3JyZWN0UmVzdWx0c1soKGkgKyBsaXN0T2ZTZWFyY2hlZFdvcmRzLmxlbmd0aCkgLSAxKV0ud29yZC5jb29yZGluYXRlcy51cHBlcl9sZWZ0LnggLyB4KSxcclxuICAgICAgICAgIHgyOiAoY29ycmVjdFJlc3VsdHNbaV0ud29yZC5jb29yZGluYXRlcy5ib3R0b21fcmlnaHQueCAvIHgpLFxyXG4gICAgICAgICAgeDM6IChjb3JyZWN0UmVzdWx0c1tpXS53b3JkLmNvb3JkaW5hdGVzLmJvdHRvbV9yaWdodC54IC8geCksXHJcbiAgICAgICAgICB4NDogKGNvcnJlY3RSZXN1bHRzWygoaSArIGxpc3RPZlNlYXJjaGVkV29yZHMubGVuZ3RoKSAtIDEpXS53b3JkLmNvb3JkaW5hdGVzLnVwcGVyX2xlZnQueCAvIHgpLFxyXG4gICAgICAgICAgeTE6IChjb3JyZWN0UmVzdWx0c1tpXS53b3JkLmNvb3JkaW5hdGVzLnVwcGVyX2xlZnQueSAvIHkpLFxyXG4gICAgICAgICAgeTI6IChjb3JyZWN0UmVzdWx0c1soKGkgKyBsaXN0T2ZTZWFyY2hlZFdvcmRzLmxlbmd0aCkgLSAxKV0ud29yZC5jb29yZGluYXRlcy51cHBlcl9sZWZ0LnkgLyB5KSxcclxuICAgICAgICAgIHkzOiAoY29ycmVjdFJlc3VsdHNbKChpICsgbGlzdE9mU2VhcmNoZWRXb3Jkcy5sZW5ndGgpIC0gMSldLndvcmQuY29vcmRpbmF0ZXMuYm90dG9tX3JpZ2h0LnkgLyB5KSxcclxuICAgICAgICAgIHk0OiAoY29ycmVjdFJlc3VsdHNbaV0ud29yZC5jb29yZGluYXRlcy5ib3R0b21fcmlnaHQueSAvIHkpLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB0aGlzLmhpZ2xpZ2h0VGV4dChcclxuICAgICAgICBxdWFkcyxcclxuICAgICAgICBwYWdlbnVtYmVyXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuY29uc3RydWN0U2VhcmNoUmVzdWx0KGxpc3RPZlNlYXJjaGVkV29yZHMuam9pbihcIiBcIikgLCBwYWdlbnVtYmVyICwgcXVhZHMgLCBsaW5lLnRleHQpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RTZWFyY2hSZXN1bHQoc2VhcmNoZWRUZXh0ICwgcGFnZU51bSAsIHF1YWRzICwgbGluZSl7XHJcbiAgIGxldCBteVNlYXJjaFN0YXJ0VGV4dEluZGV4ID0gbGluZS5pbmRleE9mKHNlYXJjaGVkVGV4dCk7XHJcbiAgIGxldCBteVNlZWFyY2hlZFRleHRFbmRJbmRleCA9IG15U2VhcmNoU3RhcnRUZXh0SW5kZXggKyBzZWFyY2hlZFRleHQubGVuZ3RoO1xyXG4gICAgbGV0IHNlYXJjaFJlc3VsdE9iamVjdCA9IHtcclxuICAgICAgICBhbWJpZW50U3RyOiBsaW5lLFxyXG4gICAgICAgIHJlc3VsdFN0cjogc2VhcmNoZWRUZXh0LFxyXG4gICAgICAgIHJlc3VsdFN0clN0YXJ0Om15U2VhcmNoU3RhcnRUZXh0SW5kZXgsXHJcbiAgICAgICAgcmVzdWx0U3RyRW5kOiBteVNlZWFyY2hlZFRleHRFbmRJbmRleCxcclxuICAgICAgICBwYWdlTnVtOiBwYWdlTnVtLFxyXG4gICAgICAgIHJlc3VsdENvZGU6IDIsXHJcbiAgICAgICAgcXVhZHM6IFt7XHJcbiAgICAgICAgICAgIGVhOiBxdWFkc1swXVsneTMnXSxcclxuICAgICAgICAgICAgZmE6IHF1YWRzWzBdWyd5NCddLFxyXG4gICAgICAgICAgICBoYTogcXVhZHNbMF1bJ3gxJ10sXHJcbiAgICAgICAgICAgIGlhOiBxdWFkc1swXVsneDInXSxcclxuICAgICAgICAgICAgcEI6IHF1YWRzWzBdWyd4MyddLFxyXG4gICAgICAgICAgICBxQjogcXVhZHNbMF1bJ3g0J10sXHJcbiAgICAgICAgICAgIHJCOiBxdWFkc1swXVsneTEnXSxcclxuICAgICAgICAgICAgc0I6IHF1YWRzWzBdWyd5MiddXHJcbiAgICAgICAgfV1cclxuICAgIH1cclxuICAgIHRoaXMubXlTZWFyY2hTdHJpbmdSZXN1bHRzLnB1c2goc2VhcmNoUmVzdWx0T2JqZWN0KTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMubXlTZWFyY2hTdHJpbmdSZXN1bHRzKTtcclxuICB9XHJcblxyXG4gIGRpc3BhbGF5U2VhcmNoUmVzdWx0cyhkb2NWaWV3ZXIpe1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgZG9jVmlld2VyLmRpc3BsYXlBZGRpdGlvbmFsU2VhcmNoUmVzdWx0cyh0aGlzLm15U2VhcmNoU3RyaW5nUmVzdWx0cyk7XHJcbiAgICB9LCA1MDApO1xyXG4gIH1cclxuXHJcbiAgLy8gZHJhdyBoaWxpZ3RoaW5nIGFyb3VuZCBjZXJ0YWluIGNoYXJhdGFjdGVyc1xyXG4gIGhpZ2xpZ2h0VGV4dChxdWFkcywgcGFnZU51bWJlcikge1xyXG4gICAgY29uc3QgaGlnaGxpZ2h0aW5nQW5ub3QgPSBuZXcgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5Bbm5vdGF0aW9ucy5UZXh0SGlnaGxpZ2h0QW5ub3RhdGlvbigpO1xyXG4gICAgaGlnaGxpZ2h0aW5nQW5ub3QuU3Ryb2tlQ29sb3IgPSBuZXcgdGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5Bbm5vdGF0aW9ucy5Db2xvcigyNTAsMjA2LDAsMC41MDE5Nik7XHJcbiAgICBoaWdobGlnaHRpbmdBbm5vdC5RdWFkcyA9IHF1YWRzO1xyXG4gICAgaGlnaGxpZ2h0aW5nQW5ub3QuUGFnZU51bWJlciA9IHBhZ2VOdW1iZXI7XHJcbiAgICBoaWdobGlnaHRpbmdBbm5vdC5BdXRob3IgPSB0aGlzLndlYlZpZXdlckluc3RhbmNlLmFubm90TWFuYWdlci5nZXRDdXJyZW50VXNlcigpO1xyXG4gICAgdGhpcy5zYXZlZEFub3RhdGlvbnMucHVzaChoaWdobGlnaHRpbmdBbm5vdCk7XHJcbiAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmFubm90TWFuYWdlci5hZGRBbm5vdGF0aW9uKGhpZ2hsaWdodGluZ0Fubm90KTtcclxuXHJcbiAgICAvLyBuZWVkIHRvIGRyYXcgdGhlIGFubm90YXRpb24gb3RoZXJ3aXNlIGl0IHdvbid0IHNob3cgdXAgdW50aWwgdGhlIHBhZ2UgaXMgcmVmcmVzaGVkXHJcbiAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmFubm90TWFuYWdlci5yZWRyYXdBbm5vdGF0aW9uKGhpZ2hsaWdodGluZ0Fubm90KTtcclxuICB9XHJcblxyXG4gIHNlYXJjaEZuID0gKHNlYXJjaFZhbHVlLCBvcHRpb25zKSA9PiB7XHJcbiAgICB0aGlzLm15U2VhcmNoU3RyaW5nUmVzdWx0cyA9IFtdO1xyXG4gICBpZih0aGlzLnNhdmVkQW5vdGF0aW9ucy5sZW5ndGggPiAwKXtcclxuICAgICB0aGlzLnNhdmVkQW5vdGF0aW9ucy5tYXAoYW5ub3RhdGlvbiA9PiB7XHJcbiAgICAgICBhbm5vdGF0aW9uLkhpZGRlbiA9IHRydWU7XHJcbiAgICAgLy8gQWx3YXlzIHJlZHJhdyBhbm5vdGF0aW9uIGlmIHJlbmRlcmluZyB3YXMgdXBkYXRlZFxyXG4gICAgIHRoaXMud2ViVmlld2VySW5zdGFuY2UuYW5ub3RNYW5hZ2VyLnJlZHJhd0Fubm90YXRpb24oYW5ub3RhdGlvbik7XHJcbiAgIH0pO1xyXG4gICB9XHJcbiAgIC8vIGRvbid0IGRvIGFueSBzZWFyY2ggdW50aWwgdGhlcmUgaXMgYSBzZWFyY2ggcGF0dGVyblxyXG4gICBpZihzZWFyY2hWYWx1ZS50cmltKCkubGVuZ3RoID4gMCl7XHJcbiAgICAgICBpZiAodGhpcy5maWxlV2l0aE9jcikge1xyXG4gICAgICAgICAvLyBhZGQgcmVkYWN0aW9uIGFubm90YXRpb24gZm9yIGVhY2ggc2VhcmNoIHJlc3VsdFxyXG4gICAgICAgICAgIC8vIGNvbnN0IGFubm90YXRpb24gPSBuZXcgQW5ub3RhdGlvbnMuVGV4dEhpZ2hsaWdodEFubm90YXRpb24oKTtcclxuICAgICAgICAgICBsZXQgbXlTZWFyY2ggPSBzZWFyY2hWYWx1ZS5zcGxpdCgnICcpO1xyXG4gICAgICAgICAgIGlmKG15U2VhcmNoLmxlbmd0aCA+IDEpe1xyXG4gICAgICAgICAgICAgLy8gdGhlbiBpIGFtIHNlYXJjaGluZyB3aXRoIG1vcmUgdGhhbiBvbmUgd29yZFxyXG4gICAgICAgICAgICAgdGhpcy5wYWdlcy5wYWdlcy5mb3JFYWNoKChwYWdlICwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgdGhpcy5wYWdlSGVpZ2h0ID0gcGFnZS5wYWdlX2hlaWdodDtcclxuICAgICAgICAgICAgICAgdGhpcy5wYWdlV2lkdGggPSBwYWdlLnBhZ2Vfd2lkdGg7XHJcbiAgICAgICAgICAgICAgIHRoaXMuc3RhbmRhcmRIZWlnaHQgPSB0aGlzLndlYlZpZXdlckluc3RhbmNlLmRvY1ZpZXdlci5nZXRQYWdlSGVpZ2h0KChpbmRleCsxKSk7XHJcbiAgICAgICAgICAgICAgIHRoaXMuc3RhbmRhcmRXaWR0aCA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UuZG9jVmlld2VyLmdldFBhZ2VXaWR0aCgoaW5kZXgrMSkpO1xyXG4gICAgICAgICAgICAgICBwYWdlLnpvbmVzLmZvckVhY2goem9uZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgem9uZS5wYXJhZ3JhcGhzLmZvckVhY2gocGFyYWdyYXBoID0+IHtcclxuICAgICAgICAgICAgICAgICAgIHBhcmFncmFwaC5saW5lcy5mb3JFYWNoKGxpbmUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICBpZihsaW5lLnRleHQuaW5jbHVkZXMoc2VhcmNoVmFsdWUpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlNlYXJjaEZvcldvcmRJbkxpbmUobXlTZWFyY2gsbGluZSwoaW5kZXgrMSkgLCBwYWdlKVxyXG4gICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAvLyB0aGVuIGkgYW0gc2VhcmNoaW5nIHdpdGggb25seSBvbmUgd29yZCBcclxuICAgICAgICAgICAgIHRoaXMuc2VhcmNoRm9yV29yZEluQWxsUGFnZXMoc2VhcmNoVmFsdWUpXHJcbiAgICAgICAgICAgfVxyXG4gICAgICAgICAgIHRoaXMud2ViVmlld2VySW5zdGFuY2UuZG9jVmlld2VyLmNsZWFyU2VhcmNoUmVzdWx0cygpO1xyXG4gICAgICAgICAgICAgdGhpcy5kaXNwYWxheVNlYXJjaFJlc3VsdHModGhpcy53ZWJWaWV3ZXJJbnN0YW5jZS5kb2NWaWV3ZXIpO1xyXG4gICAgICAgfVxyXG4gfWVsc2V7XHJcbiAgIHRoaXMud2ViVmlld2VySW5zdGFuY2UuZG9jVmlld2VyLmNsZWFyU2VhcmNoUmVzdWx0cygpO1xyXG4gfVxyXG59XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy53ZWJWaWV3ZXJJbnN0YW5jZSkge1xyXG4gICAgICB0aGlzLndlYlZpZXdlckluc3RhbmNlLmNsb3NlRG9jdW1lbnQoKS50aGVuKCgpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnZG9jdW1lbnQgY2xvc2VkIScpO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5wZGZ0cm9uU2VydmljZS5pbnN0YW5jZSA9IHRoaXMud2ViVmlld2VySW5zdGFuY2UgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgdGhpcy50cmFuc2VsYXRpb25TdWJzY3JpdGlvbiA/IHRoaXMudHJhbnNlbGF0aW9uU3Vic2NyaXRpb24udW5zdWJzY3JpYmUoKSA6IG51bGw7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgI2ZpbGVWaWV3ZXIgc3R5bGU9XCJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlO1wiPjwvZGl2PlxyXG4iXX0=
|