@net7/boilerplate-arianna 3.0.1-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/esm2020/lib/components/aw-facets-wrapper/aw-facets-wrapper.mjs +29 -0
- package/esm2020/lib/components/bubble-chart-wrapper/bubble-chart-wrapper.mjs +23 -0
- package/esm2020/lib/components/chart-tippy/chart-tippy.mjs +25 -0
- package/esm2020/lib/components/index.mjs +7 -0
- package/esm2020/lib/components/pdf-viewer/pdf-viewer.mjs +31 -0
- package/esm2020/lib/components/scheda-dropdown/scheda-dropdown.mjs +26 -0
- package/esm2020/lib/components/smart-breadcrumbs/smart-breadcrumbs.mjs +82 -0
- package/esm2020/lib/config/apollo.config.mjs +706 -0
- package/esm2020/lib/config-types/arianna/app.mjs +2 -0
- package/esm2020/lib/config-types/arianna/index.mjs +3 -0
- package/esm2020/lib/config-types/arianna/layouts.mjs +2 -0
- package/esm2020/lib/config-types/index.mjs +2 -0
- package/esm2020/lib/data-sources/autocomplete-wrapper.ds.mjs +48 -0
- package/esm2020/lib/data-sources/aw-facets-wrapper.ds.mjs +162 -0
- package/esm2020/lib/data-sources/bubble-chart.ds.mjs +95 -0
- package/esm2020/lib/data-sources/carousel.ds.mjs +74 -0
- package/esm2020/lib/data-sources/chart-tippy.ds.mjs +30 -0
- package/esm2020/lib/data-sources/entita-metadata-viewer.ds.mjs +16 -0
- package/esm2020/lib/data-sources/entita-nav.ds.mjs +74 -0
- package/esm2020/lib/data-sources/gallery-results.ds.mjs +103 -0
- package/esm2020/lib/data-sources/hero.ds.mjs +27 -0
- package/esm2020/lib/data-sources/home-autocomplete.ds.mjs +80 -0
- package/esm2020/lib/data-sources/home-facets-wrapper.ds.mjs +178 -0
- package/esm2020/lib/data-sources/home-hero-patrimonio.ds.mjs +7 -0
- package/esm2020/lib/data-sources/home-item-tags-wrapper.ds.mjs +7 -0
- package/esm2020/lib/data-sources/index.mjs +36 -0
- package/esm2020/lib/data-sources/linked-objects.ds.mjs +219 -0
- package/esm2020/lib/data-sources/map.ds.mjs +88 -0
- package/esm2020/lib/data-sources/related-entities.ds.mjs +35 -0
- package/esm2020/lib/data-sources/scheda-breadcrumbs.ds.mjs +18 -0
- package/esm2020/lib/data-sources/scheda-dropdown.ds.mjs +40 -0
- package/esm2020/lib/data-sources/scheda-image.ds.mjs +65 -0
- package/esm2020/lib/data-sources/scheda-inner-title.ds.mjs +7 -0
- package/esm2020/lib/data-sources/scheda-metadata.ds.mjs +11 -0
- package/esm2020/lib/data-sources/scheda-pdf.ds.mjs +54 -0
- package/esm2020/lib/data-sources/search-layout-tabs.ds.mjs +28 -0
- package/esm2020/lib/data-sources/sidebar-header.ds.mjs +24 -0
- package/esm2020/lib/data-sources/table.ds.mjs +8 -0
- package/esm2020/lib/data-sources/timeline.ds.mjs +106 -0
- package/esm2020/lib/data-sources/tree.ds.mjs +154 -0
- package/esm2020/lib/event-handlers/autocomplete-wrapper.eh.mjs +18 -0
- package/esm2020/lib/event-handlers/aw-facets-wrapper.eh.mjs +88 -0
- package/esm2020/lib/event-handlers/bubble-chart.eh.mjs +98 -0
- package/esm2020/lib/event-handlers/chart-tippy.eh.mjs +64 -0
- package/esm2020/lib/event-handlers/entita-nav.eh.mjs +22 -0
- package/esm2020/lib/event-handlers/gallery-results.eh.mjs +38 -0
- package/esm2020/lib/event-handlers/hero.eh.mjs +25 -0
- package/esm2020/lib/event-handlers/home-autocomplete.eh.mjs +15 -0
- package/esm2020/lib/event-handlers/home-facets-wrapper.eh.mjs +125 -0
- package/esm2020/lib/event-handlers/home-hero-patrimonio.eh.mjs +7 -0
- package/esm2020/lib/event-handlers/home-item-tags-wrapper.eh.mjs +18 -0
- package/esm2020/lib/event-handlers/index.mjs +30 -0
- package/esm2020/lib/event-handlers/linked-objects.eh.mjs +60 -0
- package/esm2020/lib/event-handlers/map.eh.mjs +23 -0
- package/esm2020/lib/event-handlers/scheda-breadcrumbs.eh.mjs +12 -0
- package/esm2020/lib/event-handlers/scheda-dropdown.eh.mjs +17 -0
- package/esm2020/lib/event-handlers/scheda-pdf.eh.mjs +14 -0
- package/esm2020/lib/event-handlers/search-layout-tabs.eh.mjs +7 -0
- package/esm2020/lib/event-handlers/sidebar-header.eh.mjs +11 -0
- package/esm2020/lib/event-handlers/table.eh.mjs +15 -0
- package/esm2020/lib/event-handlers/timeline.eh.mjs +46 -0
- package/esm2020/lib/event-handlers/tree.eh.mjs +113 -0
- package/esm2020/lib/helpers/metadata.helper.mjs +89 -0
- package/esm2020/lib/layouts/collection-layout/collection-layout.config.mjs +17 -0
- package/esm2020/lib/layouts/collection-layout/collection-layout.ds.mjs +173 -0
- package/esm2020/lib/layouts/collection-layout/collection-layout.eh.mjs +27 -0
- package/esm2020/lib/layouts/collection-layout/collection-layout.mjs +38 -0
- package/esm2020/lib/layouts/collection-layout/collection-layout.types.mjs +2 -0
- package/esm2020/lib/layouts/entita-layout/entita-layout.config.mjs +29 -0
- package/esm2020/lib/layouts/entita-layout/entita-layout.ds.mjs +310 -0
- package/esm2020/lib/layouts/entita-layout/entita-layout.eh.mjs +119 -0
- package/esm2020/lib/layouts/entita-layout/entita-layout.mjs +51 -0
- package/esm2020/lib/layouts/entita-layout/entita-layout.types.mjs +2 -0
- package/esm2020/lib/layouts/gallery-layout/gallery-facets.config.mjs +145 -0
- package/esm2020/lib/layouts/gallery-layout/gallery-layout.config.mjs +32 -0
- package/esm2020/lib/layouts/gallery-layout/gallery-layout.ds.mjs +15 -0
- package/esm2020/lib/layouts/gallery-layout/gallery-layout.eh.mjs +8 -0
- package/esm2020/lib/layouts/gallery-layout/gallery-layout.mjs +45 -0
- package/esm2020/lib/layouts/home-layout/home-layout.config.mjs +36 -0
- package/esm2020/lib/layouts/home-layout/home-layout.ds.mjs +286 -0
- package/esm2020/lib/layouts/home-layout/home-layout.eh.mjs +245 -0
- package/esm2020/lib/layouts/home-layout/home-layout.mjs +44 -0
- package/esm2020/lib/layouts/index.mjs +41 -0
- package/esm2020/lib/layouts/map-layout/map-layout.config.mjs +26 -0
- package/esm2020/lib/layouts/map-layout/map-layout.ds.mjs +112 -0
- package/esm2020/lib/layouts/map-layout/map-layout.eh.mjs +44 -0
- package/esm2020/lib/layouts/map-layout/map-layout.mjs +46 -0
- package/esm2020/lib/layouts/scheda-layout/scheda-layout.config.mjs +32 -0
- package/esm2020/lib/layouts/scheda-layout/scheda-layout.ds.mjs +282 -0
- package/esm2020/lib/layouts/scheda-layout/scheda-layout.eh.mjs +150 -0
- package/esm2020/lib/layouts/scheda-layout/scheda-layout.mjs +53 -0
- package/esm2020/lib/layouts/search-layout/search-facets.config.mjs +163 -0
- package/esm2020/lib/layouts/search-layout/search-layout.config.mjs +32 -0
- package/esm2020/lib/layouts/search-layout/search-layout.ds.mjs +296 -0
- package/esm2020/lib/layouts/search-layout/search-layout.eh.mjs +175 -0
- package/esm2020/lib/layouts/search-layout/search-layout.mjs +50 -0
- package/esm2020/lib/layouts/timeline-layout/timeline-layout.config.mjs +26 -0
- package/esm2020/lib/layouts/timeline-layout/timeline-layout.ds.mjs +133 -0
- package/esm2020/lib/layouts/timeline-layout/timeline-layout.eh.mjs +41 -0
- package/esm2020/lib/layouts/timeline-layout/timeline-layout.mjs +46 -0
- package/esm2020/lib/n7-boilerplate-arianna.module.mjs +110 -0
- package/esm2020/lib/search/aw-facet-inputs/aw-facet-input-checkbox.mjs +32 -0
- package/esm2020/lib/search/aw-facet-inputs/aw-facet-input-link.mjs +89 -0
- package/esm2020/lib/search/aw-facet-inputs/aw-facet-input-select.mjs +28 -0
- package/esm2020/lib/search/aw-facet-inputs/aw-facet-input-text.mjs +36 -0
- package/esm2020/lib/search/aw-facet-inputs/aw-facet-input.mjs +30 -0
- package/esm2020/lib/search/aw-facet-inputs/index.mjs +6 -0
- package/esm2020/lib/search/aw-search.model.mjs +331 -0
- package/esm2020/lib/search/aw-search.service.mjs +42 -0
- package/esm2020/lib/search/entity-links.helper.mjs +126 -0
- package/esm2020/net7-boilerplate-arianna.mjs +5 -0
- package/esm2020/public-api.mjs +11 -0
- package/fesm2015/net7-boilerplate-arianna.mjs +7482 -0
- package/fesm2015/net7-boilerplate-arianna.mjs.map +1 -0
- package/fesm2020/net7-boilerplate-arianna.mjs +7520 -0
- package/fesm2020/net7-boilerplate-arianna.mjs.map +1 -0
- package/lib/components/aw-facets-wrapper/aw-facets-wrapper.d.ts +9 -0
- package/lib/components/bubble-chart-wrapper/bubble-chart-wrapper.d.ts +9 -0
- package/lib/components/chart-tippy/chart-tippy.d.ts +9 -0
- package/lib/components/index.d.ts +6 -0
- package/lib/components/pdf-viewer/pdf-viewer.d.ts +38 -0
- package/lib/components/scheda-dropdown/scheda-dropdown.d.ts +23 -0
- package/lib/components/smart-breadcrumbs/smart-breadcrumbs.d.ts +71 -0
- package/lib/config/apollo.config.d.ts +67 -0
- package/lib/config-types/arianna/app.d.ts +103 -0
- package/lib/config-types/arianna/index.d.ts +2 -0
- package/lib/config-types/arianna/layouts.d.ts +164 -0
- package/lib/config-types/index.d.ts +1 -0
- package/lib/data-sources/autocomplete-wrapper.ds.d.ts +18 -0
- package/lib/data-sources/aw-facets-wrapper.ds.d.ts +50 -0
- package/lib/data-sources/bubble-chart.ds.d.ts +47 -0
- package/lib/data-sources/carousel.ds.d.ts +22 -0
- package/lib/data-sources/chart-tippy.ds.d.ts +4 -0
- package/lib/data-sources/entita-metadata-viewer.ds.d.ts +9 -0
- package/lib/data-sources/entita-nav.ds.d.ts +4 -0
- package/lib/data-sources/gallery-results.ds.d.ts +11 -0
- package/lib/data-sources/hero.ds.d.ts +20 -0
- package/lib/data-sources/home-autocomplete.ds.d.ts +37 -0
- package/lib/data-sources/home-facets-wrapper.ds.d.ts +14 -0
- package/lib/data-sources/home-hero-patrimonio.ds.d.ts +4 -0
- package/lib/data-sources/home-item-tags-wrapper.ds.d.ts +4 -0
- package/lib/data-sources/index.d.ts +27 -0
- package/lib/data-sources/linked-objects.ds.d.ts +22 -0
- package/lib/data-sources/map.ds.d.ts +17 -0
- package/lib/data-sources/related-entities.ds.d.ts +7 -0
- package/lib/data-sources/scheda-breadcrumbs.ds.d.ts +5 -0
- package/lib/data-sources/scheda-dropdown.ds.d.ts +7 -0
- package/lib/data-sources/scheda-image.ds.d.ts +10 -0
- package/lib/data-sources/scheda-inner-title.ds.d.ts +4 -0
- package/lib/data-sources/scheda-metadata.ds.d.ts +8 -0
- package/lib/data-sources/scheda-pdf.ds.d.ts +8 -0
- package/lib/data-sources/search-layout-tabs.ds.d.ts +12 -0
- package/lib/data-sources/sidebar-header.ds.d.ts +11 -0
- package/lib/data-sources/table.ds.d.ts +4 -0
- package/lib/data-sources/timeline.ds.d.ts +37 -0
- package/lib/data-sources/tree.ds.d.ts +19 -0
- package/lib/event-handlers/autocomplete-wrapper.eh.d.ts +4 -0
- package/lib/event-handlers/aw-facets-wrapper.eh.d.ts +7 -0
- package/lib/event-handlers/bubble-chart.eh.d.ts +7 -0
- package/lib/event-handlers/chart-tippy.eh.d.ts +6 -0
- package/lib/event-handlers/entita-nav.eh.d.ts +4 -0
- package/lib/event-handlers/gallery-results.eh.d.ts +4 -0
- package/lib/event-handlers/hero.eh.d.ts +4 -0
- package/lib/event-handlers/home-autocomplete.eh.d.ts +4 -0
- package/lib/event-handlers/home-facets-wrapper.eh.d.ts +7 -0
- package/lib/event-handlers/home-hero-patrimonio.eh.d.ts +4 -0
- package/lib/event-handlers/home-item-tags-wrapper.eh.d.ts +4 -0
- package/lib/event-handlers/index.d.ts +21 -0
- package/lib/event-handlers/linked-objects.eh.d.ts +5 -0
- package/lib/event-handlers/map.eh.d.ts +5 -0
- package/lib/event-handlers/scheda-breadcrumbs.eh.d.ts +4 -0
- package/lib/event-handlers/scheda-dropdown.eh.d.ts +4 -0
- package/lib/event-handlers/scheda-pdf.eh.d.ts +6 -0
- package/lib/event-handlers/search-layout-tabs.eh.d.ts +4 -0
- package/lib/event-handlers/sidebar-header.eh.d.ts +4 -0
- package/lib/event-handlers/table.eh.d.ts +4 -0
- package/lib/event-handlers/timeline.eh.d.ts +5 -0
- package/lib/event-handlers/tree.eh.d.ts +9 -0
- package/lib/helpers/metadata.helper.d.ts +15 -0
- package/lib/layouts/collection-layout/collection-layout.config.d.ts +13 -0
- package/lib/layouts/collection-layout/collection-layout.d.ts +21 -0
- package/lib/layouts/collection-layout/collection-layout.ds.d.ts +50 -0
- package/lib/layouts/collection-layout/collection-layout.eh.d.ts +6 -0
- package/lib/layouts/collection-layout/collection-layout.types.d.ts +31 -0
- package/lib/layouts/entita-layout/entita-layout.config.d.ts +29 -0
- package/lib/layouts/entita-layout/entita-layout.d.ts +28 -0
- package/lib/layouts/entita-layout/entita-layout.ds.d.ts +76 -0
- package/lib/layouts/entita-layout/entita-layout.eh.d.ts +13 -0
- package/lib/layouts/entita-layout/entita-layout.types.d.ts +17 -0
- package/lib/layouts/gallery-layout/gallery-facets.config.d.ts +150 -0
- package/lib/layouts/gallery-layout/gallery-layout.config.d.ts +38 -0
- package/lib/layouts/gallery-layout/gallery-layout.d.ts +26 -0
- package/lib/layouts/gallery-layout/gallery-layout.ds.d.ts +158 -0
- package/lib/layouts/gallery-layout/gallery-layout.eh.d.ts +4 -0
- package/lib/layouts/home-layout/home-layout.config.d.ts +15 -0
- package/lib/layouts/home-layout/home-layout.d.ts +23 -0
- package/lib/layouts/home-layout/home-layout.ds.d.ts +53 -0
- package/lib/layouts/home-layout/home-layout.eh.d.ts +11 -0
- package/lib/layouts/index.d.ts +32 -0
- package/lib/layouts/map-layout/map-layout.config.d.ts +22 -0
- package/lib/layouts/map-layout/map-layout.d.ts +23 -0
- package/lib/layouts/map-layout/map-layout.ds.d.ts +37 -0
- package/lib/layouts/map-layout/map-layout.eh.d.ts +5 -0
- package/lib/layouts/scheda-layout/scheda-layout.config.d.ts +19 -0
- package/lib/layouts/scheda-layout/scheda-layout.d.ts +33 -0
- package/lib/layouts/scheda-layout/scheda-layout.ds.d.ts +75 -0
- package/lib/layouts/scheda-layout/scheda-layout.eh.d.ts +11 -0
- package/lib/layouts/search-layout/search-facets.config.d.ts +168 -0
- package/lib/layouts/search-layout/search-layout.config.d.ts +38 -0
- package/lib/layouts/search-layout/search-layout.d.ts +31 -0
- package/lib/layouts/search-layout/search-layout.ds.d.ts +71 -0
- package/lib/layouts/search-layout/search-layout.eh.d.ts +31 -0
- package/lib/layouts/timeline-layout/timeline-layout.config.d.ts +22 -0
- package/lib/layouts/timeline-layout/timeline-layout.d.ts +23 -0
- package/lib/layouts/timeline-layout/timeline-layout.ds.d.ts +39 -0
- package/lib/layouts/timeline-layout/timeline-layout.eh.d.ts +5 -0
- package/lib/n7-boilerplate-arianna.module.d.ts +28 -0
- package/lib/search/aw-facet-inputs/aw-facet-input-checkbox.d.ts +18 -0
- package/lib/search/aw-facet-inputs/aw-facet-input-link.d.ts +8 -0
- package/lib/search/aw-facet-inputs/aw-facet-input-select.d.ts +21 -0
- package/lib/search/aw-facet-inputs/aw-facet-input-text.d.ts +30 -0
- package/lib/search/aw-facet-inputs/aw-facet-input.d.ts +35 -0
- package/lib/search/aw-facet-inputs/index.d.ts +5 -0
- package/lib/search/aw-search.model.d.ts +125 -0
- package/lib/search/aw-search.service.d.ts +13 -0
- package/lib/search/entity-links.helper.d.ts +12 -0
- package/net7-boilerplate-arianna.d.ts +5 -0
- package/package.json +36 -0
- package/public-api.d.ts +6 -0
- package/src/lib/styles/arianna/components/_advanced-autocomplete.scss +103 -0
- package/src/lib/styles/arianna/components/_breadcrumbs.scss +129 -0
- package/src/lib/styles/arianna/components/_bubble-popup-menu.scss +87 -0
- package/src/lib/styles/arianna/components/_carousel.scss +32 -0
- package/src/lib/styles/arianna/components/_facet-header.scss +58 -0
- package/src/lib/styles/arianna/components/_facet.scss +268 -0
- package/src/lib/styles/arianna/components/_footer.scss +64 -0
- package/src/lib/styles/arianna/components/_header.scss +61 -0
- package/src/lib/styles/arianna/components/_item-preview.scss +278 -0
- package/src/lib/styles/arianna/components/_map.scss +59 -0
- package/src/lib/styles/arianna/components/_metadata-viewer.scss +106 -0
- package/src/lib/styles/arianna/components/_pdf-viewer.scss +93 -0
- package/src/lib/styles/arianna/components/_simple-autocomplete.scss +60 -0
- package/src/lib/styles/arianna/components/_timeline.scss +112 -0
- package/src/lib/styles/arianna/components/_tippy-tooltip.scss +41 -0
- package/src/lib/styles/arianna/components/_tree.scss +110 -0
- package/src/lib/styles/arianna/generic/_color_scheme.scss +60 -0
- package/src/lib/styles/arianna/generic/_mixins.scss +18 -0
- package/src/lib/styles/arianna/generic/_variables.scss +380 -0
- package/src/lib/styles/arianna/layouts/_collection-layout.scss +200 -0
- package/src/lib/styles/arianna/layouts/_entita-layout.scss +344 -0
- package/src/lib/styles/arianna/layouts/_home-layout.scss +785 -0
- package/src/lib/styles/arianna/layouts/_multimedia-layout.scss +132 -0
- package/src/lib/styles/arianna/layouts/_scheda-layout.scss +438 -0
- package/src/lib/styles/arianna/layouts/_search-layout.scss +284 -0
- package/src/lib/styles/arianna/utilities/_item-preview-list.scss +48 -0
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
import { LayoutDataSource } from '@n7-frontend/core';
|
|
2
|
+
import { fromEvent, Subject, of, merge, } from 'rxjs';
|
|
3
|
+
import { takeUntil } from 'rxjs/operators';
|
|
4
|
+
import { get as _get } from 'lodash';
|
|
5
|
+
import { helpers } from '@net7/boilerplate-common';
|
|
6
|
+
import metadataHelper from '../../helpers/metadata.helper';
|
|
7
|
+
export class AwSchedaLayoutDS extends LayoutDataSource {
|
|
8
|
+
constructor() {
|
|
9
|
+
super(...arguments);
|
|
10
|
+
this.destroyed$ = new Subject();
|
|
11
|
+
this.stickyControlTrigger$ = new Subject();
|
|
12
|
+
this.contentParts = {};
|
|
13
|
+
this.sidebarIsSticky = false;
|
|
14
|
+
this.treeMaxHeight = '100%';
|
|
15
|
+
this.contentIsLoading = false;
|
|
16
|
+
this.currentId = null;
|
|
17
|
+
/** Switch loaded-content and loaded-empty states */
|
|
18
|
+
this.hasContent = true;
|
|
19
|
+
/** Name of query that should be used (chosen in config) */
|
|
20
|
+
this.getTreeQuery = 'getTree';
|
|
21
|
+
this.getTree = () => AwSchedaLayoutDS.tree;
|
|
22
|
+
}
|
|
23
|
+
onInit({ configuration, mainState, router, options, titleService, communication, }) {
|
|
24
|
+
if (configuration) {
|
|
25
|
+
this.configuration = configuration;
|
|
26
|
+
this.layoutConfig = this.configuration.get('scheda-layout');
|
|
27
|
+
}
|
|
28
|
+
this.mainState = mainState;
|
|
29
|
+
this.router = router;
|
|
30
|
+
this.titleService = titleService;
|
|
31
|
+
this.communication = communication;
|
|
32
|
+
this.options = options;
|
|
33
|
+
if (!this.sidebarCollapsed) {
|
|
34
|
+
this.sidebarCollapsed = this.layoutConfig.tree.collapsedByDefault ?? false;
|
|
35
|
+
}
|
|
36
|
+
this.relatedEntitiesHeader = this.layoutConfig['related-entities'].title;
|
|
37
|
+
this.similarItemsSectionTitle = this.layoutConfig['related-items'].title;
|
|
38
|
+
this.externalUrlText = this.layoutConfig['external-url-text'];
|
|
39
|
+
this.metadataSectionTitle = this.getMetadataSectionTitle();
|
|
40
|
+
this.hasSimilarItems = false;
|
|
41
|
+
this.one('aw-chart-tippy').updateOptions({
|
|
42
|
+
basePath: this.configuration.get('paths').entitaBasePath,
|
|
43
|
+
});
|
|
44
|
+
this.emptyLabel = this.layoutConfig['empty-label'];
|
|
45
|
+
this.emptyStateString = this.layoutConfig['empty-html'];
|
|
46
|
+
this.one('aw-tree').updateOptions({ config: this.configuration.get('config-keys') });
|
|
47
|
+
// switch the tree query to the slim version
|
|
48
|
+
if (this.layoutConfig?.tree?.lite) {
|
|
49
|
+
this.getTreeQuery = 'getTreeLite';
|
|
50
|
+
}
|
|
51
|
+
this.mainState.update('headTitle', 'Arianna4View - Patrimonio');
|
|
52
|
+
this.mainState.update('pageTitle', 'Arianna4View - Patrimonio');
|
|
53
|
+
this.mainState.updateCustom('currentNav', 'patrimonio');
|
|
54
|
+
// image viewer context-menu check
|
|
55
|
+
const imageViewerConfig = this.configuration.get('scheda-layout')['image-viewer'] || {};
|
|
56
|
+
this.hasContextMenu = () => !!imageViewerConfig['context-menu'];
|
|
57
|
+
// pdf viewer options
|
|
58
|
+
this.one('aw-scheda-pdf').updateOptions(this.configuration.get('scheda-layout')['pdf-viewer'] || {});
|
|
59
|
+
// sidebar sticky control
|
|
60
|
+
this._sidebarStickyControl();
|
|
61
|
+
}
|
|
62
|
+
onDestroy() {
|
|
63
|
+
this.destroyed$.next();
|
|
64
|
+
}
|
|
65
|
+
getMetadataSectionTitle() {
|
|
66
|
+
const layoutConfig = this.configuration.get('scheda-layout');
|
|
67
|
+
const metadataConfig = layoutConfig.metadata || {};
|
|
68
|
+
return metadataConfig.title || null;
|
|
69
|
+
}
|
|
70
|
+
getNavigation(id) {
|
|
71
|
+
if (AwSchedaLayoutDS.tree) {
|
|
72
|
+
return of(AwSchedaLayoutDS.tree);
|
|
73
|
+
}
|
|
74
|
+
return this.communication.request$(this.getTreeQuery, {
|
|
75
|
+
onError: (error) => console.error(error),
|
|
76
|
+
params: { treeId: id },
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
setTree(tree) {
|
|
80
|
+
AwSchedaLayoutDS.tree = tree;
|
|
81
|
+
}
|
|
82
|
+
updateNavigation(text) {
|
|
83
|
+
this.one('aw-sidebar-header').update({ text, isExpanded: !this.sidebarCollapsed });
|
|
84
|
+
}
|
|
85
|
+
loadItem(id) {
|
|
86
|
+
const maxSimilarItems = this.configuration.get('scheda-layout')['related-items']['max-related-items'];
|
|
87
|
+
return this.communication.request$('getNode', {
|
|
88
|
+
onError: (error) => console.error(error),
|
|
89
|
+
params: { id, maxSimilarItems },
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Loads the content of the selected tree item in the right portion of the view.
|
|
94
|
+
* @param response http response for the tree item
|
|
95
|
+
*/
|
|
96
|
+
loadContent(response) {
|
|
97
|
+
if (response) {
|
|
98
|
+
// reset
|
|
99
|
+
this.currentDigitalObject = null;
|
|
100
|
+
this.currentDigitalObjectIndex = null;
|
|
101
|
+
const metadataFields = this.getFields(response);
|
|
102
|
+
this.hasMetadata = !!(Array.isArray(metadataFields) && metadataFields.length);
|
|
103
|
+
this.hasSimilarItems = Array.isArray(response.relatedItems) && response.relatedItems.length;
|
|
104
|
+
this.hasBreadcrumb = Array.isArray(response.breadcrumbs) && response.breadcrumbs.length;
|
|
105
|
+
this.hasDigitalObjects = (Array.isArray(response.digitalObjects)
|
|
106
|
+
&& response.digitalObjects.length);
|
|
107
|
+
this.hasRelatedEntities = (Array.isArray(response.relatedEntities)
|
|
108
|
+
&& response.relatedEntities.length);
|
|
109
|
+
this.hasContent = !!(this.hasMetadata
|
|
110
|
+
|| this.hasSimilarItems
|
|
111
|
+
|| this.hasRelatedEntities
|
|
112
|
+
|| this.hasDigitalObjects);
|
|
113
|
+
this.contentParts = [];
|
|
114
|
+
const content = { content: null };
|
|
115
|
+
if (response.text) {
|
|
116
|
+
content.content = response.text;
|
|
117
|
+
}
|
|
118
|
+
this.contentParts.push(content);
|
|
119
|
+
// digital objects
|
|
120
|
+
if (this.hasDigitalObjects) {
|
|
121
|
+
response.digitalObjects = this.normalizeDigitalObjects(response.digitalObjects);
|
|
122
|
+
// this.one('aw-scheda-digital-objects').update(response.digitalObjects);
|
|
123
|
+
this.one('aw-scheda-dropdown').update(response);
|
|
124
|
+
this.digitalObjects = response.digitalObjects;
|
|
125
|
+
this.changeDigitalObject(0);
|
|
126
|
+
}
|
|
127
|
+
const titleObj = {
|
|
128
|
+
icon: response.icon,
|
|
129
|
+
title: {
|
|
130
|
+
main: {
|
|
131
|
+
text: response.title || response.label,
|
|
132
|
+
classes: 'bold',
|
|
133
|
+
},
|
|
134
|
+
},
|
|
135
|
+
tools: response.subTitle,
|
|
136
|
+
actions: {},
|
|
137
|
+
};
|
|
138
|
+
this.one('aw-scheda-inner-title').update(titleObj);
|
|
139
|
+
this.one('aw-scheda-metadata').update(metadataFields);
|
|
140
|
+
// Breadcrumb section
|
|
141
|
+
const breadcrumbs = {
|
|
142
|
+
items: [],
|
|
143
|
+
};
|
|
144
|
+
if (response.breadcrumbs) {
|
|
145
|
+
response.breadcrumbs.forEach((element) => {
|
|
146
|
+
breadcrumbs.items.push({
|
|
147
|
+
label: element.label,
|
|
148
|
+
anchor: {
|
|
149
|
+
href: [
|
|
150
|
+
this.configuration.get('paths').schedaBasePath,
|
|
151
|
+
`${element.link}/`,
|
|
152
|
+
helpers.slugify(element.label),
|
|
153
|
+
].join(''),
|
|
154
|
+
},
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
this.one('aw-scheda-breadcrumbs').update(breadcrumbs);
|
|
158
|
+
}
|
|
159
|
+
// update head title
|
|
160
|
+
this.mainState.update('headTitle', `Arianna4View - Patrimonio - ${response.title || response.label}`);
|
|
161
|
+
}
|
|
162
|
+
if (response.relatedItems) {
|
|
163
|
+
this.one('aw-linked-objects').updateOptions({ context: 'scheda', config: this.configuration });
|
|
164
|
+
this.one('aw-linked-objects').update(response);
|
|
165
|
+
}
|
|
166
|
+
if (response.relatedEntities) {
|
|
167
|
+
response.relatedEntities.forEach((el) => {
|
|
168
|
+
const label = response.title || response.label;
|
|
169
|
+
el.relationName = label.length > 30
|
|
170
|
+
? `${label.substr(0, 30)}... `
|
|
171
|
+
: label;
|
|
172
|
+
});
|
|
173
|
+
this.one('aw-related-entities').updateOptions({
|
|
174
|
+
context: 'scheda', config: this.configuration, list: 'relatedEntities', title: response.title
|
|
175
|
+
});
|
|
176
|
+
this.one('aw-related-entities').update(response.relatedEntities);
|
|
177
|
+
}
|
|
178
|
+
// control sticky
|
|
179
|
+
setTimeout(() => {
|
|
180
|
+
this.stickyControlTrigger$.next();
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Toggle between the tree's collapsed or expanded state.
|
|
185
|
+
*/
|
|
186
|
+
collapseSidebar() {
|
|
187
|
+
// overwrite the configuration to prevent unwanted changes to the tree state.
|
|
188
|
+
this.layoutConfig.tree.collapsedByDefault = !this.layoutConfig.tree.collapsedByDefault;
|
|
189
|
+
this.sidebarCollapsed = !this.sidebarCollapsed;
|
|
190
|
+
this.getWidgetDataSource('aw-sidebar-header').toggleSidebar();
|
|
191
|
+
}
|
|
192
|
+
_sidebarStickyControl() {
|
|
193
|
+
// no sticky for Internet Explorer
|
|
194
|
+
if (helpers.browserIsIE()) {
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
const source$ = fromEvent(window, 'scroll');
|
|
198
|
+
merge(source$, this.stickyControlTrigger$).pipe(takeUntil(this.destroyed$)).subscribe(() => {
|
|
199
|
+
const windowTop = window.pageYOffset;
|
|
200
|
+
const windowBottom = window.scrollY + window.innerHeight;
|
|
201
|
+
const wrapper = document.getElementsByClassName('sticky-parent')[0];
|
|
202
|
+
const wrapperTop = wrapper.offsetTop;
|
|
203
|
+
const wrapperBottom = wrapperTop + wrapper.clientHeight;
|
|
204
|
+
this.sidebarIsSticky = wrapperTop <= windowTop;
|
|
205
|
+
// tree height control
|
|
206
|
+
if (this.sidebarIsSticky && windowBottom < wrapperBottom) {
|
|
207
|
+
this.treeMaxHeight = `${windowBottom - windowTop - 50}px`;
|
|
208
|
+
}
|
|
209
|
+
else if (this.sidebarIsSticky && windowBottom >= wrapperBottom) {
|
|
210
|
+
this.treeMaxHeight = `${wrapperBottom - windowTop - 50}px`;
|
|
211
|
+
}
|
|
212
|
+
else if (windowBottom < wrapperBottom) {
|
|
213
|
+
this.treeMaxHeight = `${windowBottom - wrapperTop - 50}px`;
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
this.treeMaxHeight = `${wrapperBottom - wrapperTop - 50}px`;
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
getFields(response) {
|
|
221
|
+
const { fields, document_type: dt, document_classification: dc } = response;
|
|
222
|
+
const paths = this.configuration.get('paths');
|
|
223
|
+
const labels = this.configuration.get('labels');
|
|
224
|
+
const dcSegments = typeof dc === 'string' ? dc.split('.') : [];
|
|
225
|
+
const dcLastSegment = dcSegments[dcSegments.length - 1];
|
|
226
|
+
let metadataToShow = _get(this.configuration.get('scheda-layout'), 'metadata-to-show', {});
|
|
227
|
+
metadataToShow = metadataToShow[dcLastSegment] || metadataToShow[dt] || [];
|
|
228
|
+
return metadataHelper.normalize({
|
|
229
|
+
fields,
|
|
230
|
+
paths,
|
|
231
|
+
labels,
|
|
232
|
+
metadataToShow,
|
|
233
|
+
type: dt
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
changeDigitalObject(payload) {
|
|
237
|
+
if (this.currentDigitalObjectIndex !== payload) {
|
|
238
|
+
// link check
|
|
239
|
+
if (this.digitalObjects[payload].type === 'external' && this.currentDigitalObject) {
|
|
240
|
+
window.open(this.digitalObjects[payload].url, '_blank');
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
// always reset image viewer
|
|
244
|
+
const schedaImageDS = this.getWidgetDataSource('aw-scheda-image');
|
|
245
|
+
schedaImageDS.reset();
|
|
246
|
+
this.currentDigitalObjectIndex = payload;
|
|
247
|
+
this.currentDigitalObject = this.digitalObjects[payload];
|
|
248
|
+
if (this.currentDigitalObject.type.includes('images')) {
|
|
249
|
+
if (schedaImageDS.hasInstance()) {
|
|
250
|
+
schedaImageDS.updateImages(this.currentDigitalObject);
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
this.one('aw-scheda-image').update(this.currentDigitalObject);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
else if (this.currentDigitalObject.type === 'pdf') {
|
|
257
|
+
this.one('aw-scheda-pdf').update(this.currentDigitalObject);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
normalizeDigitalObjects(digitalObjects) {
|
|
263
|
+
return digitalObjects.map(($do) => {
|
|
264
|
+
if ($do.type.includes('images')) {
|
|
265
|
+
return {
|
|
266
|
+
id: 'scheda-layout-viewer',
|
|
267
|
+
type: $do.type,
|
|
268
|
+
label: $do.label,
|
|
269
|
+
hasNavigation: $do.items.length > 1,
|
|
270
|
+
items: $do.items.map(({ url, iiifImages }) => ({
|
|
271
|
+
url,
|
|
272
|
+
iiifImages,
|
|
273
|
+
type: $do.type,
|
|
274
|
+
}))
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
return $do;
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
AwSchedaLayoutDS.tree = null;
|
|
282
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWRhLWxheW91dC5kcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL243LWJvaWxlcnBsYXRlLWFyaWFubmEvc3JjL2xpYi9sYXlvdXRzL3NjaGVkYS1sYXlvdXQvc2NoZWRhLWxheW91dC5kcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNyRCxPQUFPLEVBQ0wsU0FBUyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsS0FBSyxHQUM5QixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsR0FBRyxJQUFJLElBQUksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNyQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDbkQsT0FBTyxjQUFjLE1BQU0sK0JBQStCLENBQUM7QUFFM0QsTUFBTSxPQUFPLGdCQUFpQixTQUFRLGdCQUFnQjtJQUF0RDs7UUFHVSxlQUFVLEdBQWlCLElBQUksT0FBTyxFQUFFLENBQUM7UUFFekMsMEJBQXFCLEdBQWlCLElBQUksT0FBTyxFQUFFLENBQUM7UUFvQnJELGlCQUFZLEdBQVEsRUFBRSxDQUFDO1FBNEJ2QixvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUV4QixrQkFBYSxHQUFHLE1BQU0sQ0FBQztRQUV2QixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFFekIsY0FBUyxHQUFrQixJQUFJLENBQUM7UUFJdkMsb0RBQW9EO1FBQzdDLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFTekIsMkRBQTJEO1FBQ25ELGlCQUFZLEdBQThCLFNBQVMsQ0FBQztRQXlFNUQsWUFBTyxHQUFHLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQztJQXFPeEMsQ0FBQztJQTVTQyxNQUFNLENBQUMsRUFD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QkFBb0IsQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFO29CQUNuRCxJQUFJLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztpQkFDN0Q7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQUVPLHVCQUF1QixDQUFDLGNBQWM7UUFDNUMsT0FBTyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDaEMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDL0IsT0FBTztvQkFDTCxFQUFFLEVBQUUsc0JBQXNCO29CQUMxQixJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7b0JBQ2QsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLO29CQUNoQixhQUFhLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQztvQkFDbkMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7d0JBQzdDLEdBQUc7d0JBQ0gsVUFBVTt3QkFDVixJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7cUJBQ2YsQ0FBQyxDQUFDO2lCQUNKLENBQUM7YUFDSDtZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOztBQXRYTSxxQkFBSSxHQUFRLElBQUksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExheW91dERhdGFTb3VyY2UgfSBmcm9tICdAbjctZnJvbnRlbmQvY29yZSc7XG5pbXBvcnQge1xuICBmcm9tRXZlbnQsIFN1YmplY3QsIG9mLCBtZXJnZSxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBnZXQgYXMgX2dldCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBoZWxwZXJzIH0gZnJvbSAnQG5ldDcvYm9pbGVycGxhdGUtY29tbW9uJztcbmltcG9ydCBtZXRhZGF0YUhlbHBlciBmcm9tICcuLi8uLi9oZWxwZXJzL21ldGFkYXRhLmhlbHBlcic7XG5cbmV4cG9ydCBjbGFzcyBBd1NjaGVkYUxheW91dERTIGV4dGVuZHMgTGF5b3V0RGF0YVNvdXJjZSB7XG4gIHN0YXRpYyB0cmVlOiBhbnkgPSBudWxsO1xuXG4gIHByaXZhdGUgZGVzdHJveWVkJDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcblxuICBwcml2YXRlIHN0aWNreUNvbnRyb2xUcmlnZ2VyJDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcblxuICBwcml2YXRlIGNvbW11bmljYXRpb246IGFueTtcblxuICBwcm90ZWN0ZWQgY29uZmlndXJhdGlvbjogYW55O1xuXG4gIHByb3RlY3RlZCBtYWluU3RhdGU6IGFueTtcblxuICBwcm90ZWN0ZWQgcm91dGVyOiBhbnk7XG5cbiAgcHJvdGVjdGVkIHRpdGxlU2VydmljZTogYW55O1xuXG4gIHB1YmxpYyBvcHRpb25zOiBhbnk7XG5cbiAgcHJpdmF0ZSBsYXlvdXRDb25maWc7XG5cbiAgcHVibGljIHBhZ2VUaXRsZTogc3RyaW5nO1xuXG4gIHB1YmxpYyBoYXNCcmVhZGNydW1iOiBib29sZWFuO1xuXG4gIHB1YmxpYyBjb250ZW50UGFydHM6IGFueSA9IHt9O1xuXG4gIHB1YmxpYyB0cmVlOiBhbnk7XG5cbiAgcHVibGljIHNpZGViYXJDb2xsYXBzZWQ6IGJvb2xlYW47XG5cbiAgcHVibGljIHJlbGF0ZWRFbnRpdGllc0hlYWRlcjogc3RyaW5nO1xuXG4gIHB1YmxpYyBzaW1pbGFySXRlbXNTZWN0aW9uVGl0bGU6IHN0cmluZztcblxuICBwdWJsaWMgbWV0YWRhdGFTZWN0aW9uVGl0bGU6IHN0cmluZztcblxuICBwdWJsaWMgaGFzTWV0YWRhdGE6IGJvb2xlYW47XG5cbiAgcHVibGljIGhhc1JlbGF0ZWRFbnRpdGllczogYm9vbGVhbjtcblxuICBwdWJsaWMgaGFzU2ltaWxhckl0ZW1zOiBib29sZWFuO1xuXG4gIHB1YmxpYyBoYXNEaWdpdGFsT2JqZWN0czogYm9vbGVhbjtcblxuICBwdWJsaWMgZGlnaXRhbE9iamVjdHM6IGFueTtcblxuICBwdWJsaWMgY3VycmVudERpZ2l0YWxPYmplY3Q6IGFueTtcblxuICBwdWJsaWMgY3VycmVudERpZ2l0YWxPYmplY3RJbmRleDogbnVtYmVyO1xuXG4gIHB1YmxpYyBpbWFnZVZpZXdlcklzdGFuY2U6IGFueTtcblxuICBwdWJsaWMgc2lkZWJhcklzU3RpY2t5ID0gZmFsc2U7XG5cbiAgcHVibGljIHRyZWVNYXhIZWlnaHQgPSAnMTAwJSc7XG5cbiAgcHVibGljIGNvbnRlbnRJc0xvYWRpbmcgPSBmYWxzZTtcblxuICBwdWJsaWMgY3VycmVudElkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBwdWJsaWMgZW1wdHlMYWJlbDogc3RyaW5nO1xuXG4gIC8qKiBTd2l0Y2ggbG9hZGVkLWNvbnRlbnQgYW5kIGxvYWRlZC1lbXB0eSBzdGF0ZXMgKi9cbiAgcHVibGljIGhhc0NvbnRlbnQgPSB0cnVlO1xuXG4gIC8qKiBTdHJpbmcgdG8gcmVuZGVyIGluIHRoZSBsb2FkZWQtZW1wdHkgc3RhdGUgKi9cbiAgcHVibGljIGVtcHR5U3RhdGVTdHJpbmc6IHN0cmluZztcblxuICBwdWJsaWMgZXh0ZXJuYWxVcmxUZXh0OiBzdHJpbmc7XG5cbiAgcHVibGljIGhhc0NvbnRleHRNZW51OiAoKSA9PiBib29sZWFuO1xuXG4gIC8qKiBOYW1lIG9mIHF1ZXJ5IHRoYXQgc2hvdWxkIGJlIHVzZWQgKGNob3NlbiBpbiBjb25maWcpICovXG4gIHByaXZhdGUgZ2V0VHJlZVF1ZXJ5OiAnZ2V0VHJlZScgfCAnZ2V0VHJlZUxpdGUnID0gJ2dldFRyZWUnO1xuXG4gIG9uSW5pdCh7XG4gICAgY29uZmlndXJhdGlvbiwgbWFpblN0YXRlLCByb3V0ZXIsIG9wdGlvbnMsIHRpdGxlU2VydmljZSwgY29tbXVuaWNhdGlvbixcbiAgfSkge1xuICAgIGlmIChjb25maWd1cmF0aW9uKSB7XG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uO1xuICAgICAgdGhpcy5sYXlvdXRDb25maWcgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0KCdzY2hlZGEtbGF5b3V0Jyk7XG4gICAgfVxuICAgIHRoaXMubWFpblN0YXRlID0gbWFpblN0YXRlO1xuICAgIHRoaXMucm91dGVyID0gcm91dGVyO1xuICAgIHRoaXMudGl0bGVTZXJ2aWNlID0gdGl0bGVTZXJ2aWNlO1xuICAgIHRoaXMuY29tbXVuaWNhdGlvbiA9IGNvbW11bmljYXRpb247XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICBpZiAoIXRoaXMuc2lkZWJhckNvbGxhcHNlZCkge1xuICAgICAgdGhpcy5zaWRlYmFyQ29sbGFwc2VkID0gdGhpcy5sYXlvdXRDb25maWcudHJlZS5jb2xsYXBzZWRCeURlZmF1bHQgPz8gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMucmVsYXRlZEVudGl0aWVzSGVhZGVyID0gdGhpcy5sYXlvdXRDb25maWdbJ3JlbGF0ZWQtZW50aXRpZXMnXS50aXRsZTtcbiAgICB0aGlzLnNpbWlsYXJJdGVtc1NlY3Rpb25UaXRsZSA9IHRoaXMubGF5b3V0Q29uZmlnWydyZWxhdGVkLWl0ZW1zJ10udGl0bGU7XG4gICAgdGhpcy5leHRlcm5hbFVybFRleHQgPSB0aGlzLmxheW91dENvbmZpZ1snZXh0ZXJuYWwtdXJsLXRleHQnXTtcbiAgICB0aGlzLm1ldGFkYXRhU2VjdGlvblRpdGxlID0gdGhpcy5nZXRNZXRhZGF0YVNlY3Rpb25UaXRsZSgpO1xuICAgIHRoaXMuaGFzU2ltaWxhckl0ZW1zID0gZmFsc2U7XG4gICAgdGhpcy5vbmUoJ2F3LWNoYXJ0LXRpcHB5JykudXBkYXRlT3B0aW9ucyh7XG4gICAgICBiYXNlUGF0aDogdGhpcy5jb25maWd1cmF0aW9uLmdldCgncGF0aHMnKS5lbnRpdGFCYXNlUGF0aCxcbiAgICB9KTtcbiAgICB0aGlzLmVtcHR5TGFiZWwgPSB0aGlzLmxheW91dENvbmZpZ1snZW1wdHktbGFiZWwnXTtcbiAgICB0aGlzLmVtcHR5U3RhdGVTdHJpbmcgPSB0aGlzLmxheW91dENvbmZpZ1snZW1wdHktaHRtbCddO1xuICAgIHRoaXMub25lKCdhdy10cmVlJykudXBkYXRlT3B0aW9ucyh7IGNvbmZpZzogdGhpcy5jb25maWd1cmF0aW9uLmdldCgnY29uZmlnLWtleXMnKSB9KTtcblxuICAgIC8vIHN3aXRjaCB0aGUgdHJlZSBxdWVyeSB0byB0aGUgc2xpbSB2ZXJzaW9uXG4gICAgaWYgKHRoaXMubGF5b3V0Q29uZmlnPy50cmVlPy5saXRlKSB7XG4gICAgICB0aGlzLmdldFRyZWVRdWVyeSA9ICdnZXRUcmVlTGl0ZSc7XG4gICAgfVxuXG4gICAgdGhpcy5tYWluU3RhdGUudXBkYXRlKCdoZWFkVGl0bGUnLCAnQXJpYW5uYTRWaWV3IC0gUGF0cmltb25pbycpO1xuICAgIHRoaXMubWFpblN0YXRlLnVwZGF0ZSgncGFnZVRpdGxlJywgJ0FyaWFubmE0VmlldyAtIFBhdHJpbW9uaW8nKTtcbiAgICB0aGlzLm1haW5TdGF0ZS51cGRhdGVDdXN0b20oJ2N1cnJlbnROYXYnLCAncGF0cmltb25pbycpO1xuXG4gICAgLy8gaW1hZ2Ugdmlld2VyIGNvbnRleHQtbWVudSBjaGVja1xuICAgIGNvbnN0IGltYWdlVmlld2VyQ29uZmlnID0gdGhpcy5jb25maWd1cmF0aW9uLmdldCgnc2NoZWRhLWxheW91dCcpWydpbWFnZS12aWV3ZXInXSB8fCB7fTtcbiAgICB0aGlzLmhhc0NvbnRleHRNZW51ID0gKCkgPT4gISFpbWFnZVZpZXdlckNvbmZpZ1snY29udGV4dC1tZW51J107XG5cbiAgICAvLyBwZGYgdmlld2VyIG9wdGlvbnNcbiAgICB0aGlzLm9uZSgnYXctc2NoZWRhLXBkZicpLnVwZGF0ZU9wdGlvbnModGhpcy5jb25maWd1cmF0aW9uLmdldCgnc2NoZWRhLWxheW91dCcpWydwZGYtdmlld2VyJ10gfHwge30pO1xuXG4gICAgLy8gc2lkZWJhciBzdGlja3kgY29udHJvbFxuICAgIHRoaXMuX3NpZGViYXJTdGlja3lDb250cm9sKCk7XG4gIH1cblxuICBvbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5kZXN0cm95ZWQkLm5leHQoKTtcbiAgfVxuXG4gIGdldE1ldGFkYXRhU2VjdGlvblRpdGxlKCkge1xuICAgIGNvbnN0IGxheW91dENvbmZpZyA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXQoJ3NjaGVkYS1sYXlvdXQnKTtcbiAgICBjb25zdCBtZXRhZGF0YUNvbmZpZyA9IGxheW91dENvbmZpZy5tZXRhZGF0YSB8fCB7fTtcbiAgICByZXR1cm4gbWV0YWRhdGFDb25maWcudGl0bGUgfHwgbnVsbDtcbiAgfVxuXG4gIGdldE5hdmlnYXRpb24oaWQpIHtcbiAgICBpZiAoQXdTY2hlZGFMYXlvdXREUy50cmVlKSB7XG4gICAgICByZXR1cm4gb2YoQXdTY2hlZGFMYXlvdXREUy50cmVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29tbXVuaWNhdGlvbi5yZXF1ZXN0JCh0aGlzLmdldFRyZWVRdWVyeSwge1xuICAgICAgb25FcnJvcjogKGVycm9yKSA9PiBjb25zb2xlLmVycm9yKGVycm9yKSxcbiAgICAgIHBhcmFtczogeyB0cmVlSWQ6IGlkIH0sXG4gICAgfSk7XG4gIH1cblxuICBzZXRUcmVlKHRyZWUpIHtcbiAgICBBd1NjaGVkYUxheW91dERTLnRyZWUgPSB0cmVlO1xuICB9XG5cbiAgZ2V0VHJlZSA9ICgpID0+IEF3U2NoZWRhTGF5b3V0RFMudHJlZTtcblxuICB1cGRhdGVOYXZpZ2F0aW9uKHRleHQpIHtcbiAgICB0aGlzLm9uZSgnYXctc2lkZWJhci1oZWFkZXInKS51cGRhdGUoeyB0ZXh0LCBpc0V4cGFuZGVkOiAhdGhpcy5zaWRlYmFyQ29sbGFwc2VkIH0pO1xuICB9XG5cbiAgbG9hZEl0ZW0oaWQpIHtcbiAgICBjb25zdCBtYXhTaW1pbGFySXRlbXMgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0KCdzY2hlZGEtbGF5b3V0JylbJ3JlbGF0ZWQtaXRlbXMnXVsnbWF4LXJlbGF0ZWQtaXRlbXMnXTtcbiAgICByZXR1cm4gdGhpcy5jb21tdW5pY2F0aW9uLnJlcXVlc3QkKCdnZXROb2RlJywge1xuICAgICAgb25FcnJvcjogKGVycm9yKSA9PiBjb25zb2xlLmVycm9yKGVycm9yKSxcbiAgICAgIHBhcmFtczogeyBpZCwgbWF4U2ltaWxhckl0ZW1zIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgdGhlIGNvbnRlbnQgb2YgdGhlIHNlbGVjdGVkIHRyZWUgaXRlbSBpbiB0aGUgcmlnaHQgcG9ydGlvbiBvZiB0aGUgdmlldy5cbiAgICogQHBhcmFtIHJlc3BvbnNlIGh0dHAgcmVzcG9uc2UgZm9yIHRoZSB0cmVlIGl0ZW1cbiAgICovXG4gIGxvYWRDb250ZW50KHJlc3BvbnNlKSB7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAvLyByZXNldFxuICAgICAgdGhpcy5jdXJyZW50RGlnaXRhbE9iamVjdCA9IG51bGw7XG4gICAgICB0aGlzLmN1cnJlbnREaWdpdGFsT2JqZWN0SW5kZXggPSBudWxsO1xuXG4gICAgICBjb25zdCBtZXRhZGF0YUZpZWxkcyA9IHRoaXMuZ2V0RmllbGRzKHJlc3BvbnNlKTtcbiAgICAgIHRoaXMuaGFzTWV0YWRhdGEgPSAhIShBcnJheS5pc0FycmF5KG1ldGFkYXRhRmllbGRzKSAmJiBtZXRhZGF0YUZpZWxkcy5sZW5ndGgpO1xuICAgICAgdGhpcy5oYXNTaW1pbGFySXRlbXMgPSBBcnJheS5pc0FycmF5KHJlc3BvbnNlLnJlbGF0ZWRJdGVtcykgJiYgcmVzcG9uc2UucmVsYXRlZEl0ZW1zLmxlbmd0aDtcbiAgICAgIHRoaXMuaGFzQnJlYWRjcnVtYiA9IEFycmF5LmlzQXJyYXkocmVzcG9uc2UuYnJlYWRjcnVtYnMpICYmIHJlc3BvbnNlLmJyZWFkY3J1bWJzLmxlbmd0aDtcbiAgICAgIHRoaXMuaGFzRGlnaXRhbE9iamVjdHMgPSAoXG4gICAgICAgIEFycmF5LmlzQXJyYXkocmVzcG9uc2UuZGlnaXRhbE9iamVjdHMpXG4gICAgICAgICYmIHJlc3BvbnNlLmRpZ2l0YWxPYmplY3RzLmxlbmd0aFxuICAgICAgKTtcbiAgICAgIHRoaXMuaGFzUmVsYXRlZEVudGl0aWVzID0gKFxuICAgICAgICBBcnJheS5pc0FycmF5KHJlc3BvbnNlLnJlbGF0ZWRFbnRpdGllcylcbiAgICAgICAgJiYgcmVzcG9uc2UucmVsYXRlZEVudGl0aWVzLmxlbmd0aFxuICAgICAgKTtcbiAgICAgIHRoaXMuaGFzQ29udGVudCA9ICEhKFxuICAgICAgICB0aGlzLmhhc01ldGFkYXRhXG4gICAgICAgIHx8IHRoaXMuaGFzU2ltaWxhckl0ZW1zXG4gICAgICAgIHx8IHRoaXMuaGFzUmVsYXRlZEVudGl0aWVzXG4gICAgICAgIHx8IHRoaXMuaGFzRGlnaXRhbE9iamVjdHNcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuY29udGVudFBhcnRzID0gW107XG4gICAgICBjb25zdCBjb250ZW50ID0geyBjb250ZW50OiBudWxsIH07XG5cbiAgICAgIGlmIChyZXNwb25zZS50ZXh0KSB7XG4gICAgICAgIGNvbnRlbnQuY29udGVudCA9IHJlc3BvbnNlLnRleHQ7XG4gICAgICB9XG4gICAgICB0aGlzLmNvbnRlbnRQYXJ0cy5wdXNoKGNvbnRlbnQpO1xuXG4gICAgICAvLyBkaWdpdGFsIG9iamVjdHNcbiAgICAgIGlmICh0aGlzLmhhc0RpZ2l0YWxPYmplY3RzKSB7XG4gICAgICAgIHJlc3BvbnNlLmRpZ2l0YWxPYmplY3RzID0gdGhpcy5ub3JtYWxpemVEaWdpdGFsT2JqZWN0cyhyZXNwb25zZS5kaWdpdGFsT2JqZWN0cyk7XG4gICAgICAgIC8vIHRoaXMub25lKCdhdy1zY2hlZGEtZGlnaXRhbC1vYmplY3RzJykudXBkYXRlKHJlc3BvbnNlLmRpZ2l0YWxPYmplY3RzKTtcbiAgICAgICAgdGhpcy5vbmUoJ2F3LXNjaGVkYS1kcm9wZG93bicpLnVwZGF0ZShyZXNwb25zZSk7XG4gICAgICAgIHRoaXMuZGlnaXRhbE9iamVjdHMgPSByZXNwb25zZS5kaWdpdGFsT2JqZWN0cztcbiAgICAgICAgdGhpcy5jaGFuZ2VEaWdpdGFsT2JqZWN0KDApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0aXRsZU9iaiA9IHtcbiAgICAgICAgaWNvbjogcmVzcG9uc2UuaWNvbixcbiAgICAgICAgdGl0bGU6IHtcbiAgICAgICAgICBtYWluOiB7XG4gICAgICAgICAgICB0ZXh0OiByZXNwb25zZS50aXRsZSB8fCByZXNwb25zZS5sYWJlbCxcbiAgICAgICAgICAgIGNsYXNzZXM6ICdib2xkJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB0b29sczogcmVzcG9uc2Uuc3ViVGl0bGUsXG4gICAgICAgIGFjdGlvbnM6IHt9LFxuICAgICAgfTtcblxuICAgICAgdGhpcy5vbmUoJ2F3LXNjaGVkYS1pbm5lci10aXRsZScpLnVwZGF0ZSh0aXRsZU9iaik7XG4gICAgICB0aGlzLm9uZSgnYXctc2NoZWRhLW1ldGFkYXRhJykudXBkYXRlKG1ldGFkYXRhRmllbGRzKTtcblxuICAgICAgLy8gQnJlYWRjcnVtYiBzZWN0aW9uXG4gICAgICBjb25zdCBicmVhZGNydW1icyA9IHtcbiAgICAgICAgaXRlbXM6IFtdLFxuICAgICAgfTtcblxuICAgICAgaWYgKHJlc3BvbnNlLmJyZWFkY3J1bWJzKSB7XG4gICAgICAgIHJlc3BvbnNlLmJyZWFkY3J1bWJzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICBicmVhZGNydW1icy5pdGVtcy5wdXNoKHtcbiAgICAgICAgICAgIGxhYmVsOiBlbGVtZW50LmxhYmVsLFxuICAgICAgICAgICAgYW5jaG9yOiB7XG4gICAgICAgICAgICAgIGhyZWY6IFtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0KCdwYXRocycpLnNjaGVkYUJhc2VQYXRoLFxuICAgICAgICAgICAgICAgIGAke2VsZW1lbnQubGlua30vYCxcbiAgICAgICAgICAgICAgICBoZWxwZXJzLnNsdWdpZnkoZWxlbWVudC5sYWJlbCksXG4gICAgICAgICAgICAgIF0uam9pbignJyksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5vbmUoJ2F3LXNjaGVkYS1icmVhZGNydW1icycpLnVwZGF0ZShicmVhZGNydW1icyk7XG4gICAgICB9XG5cbiAgICAgIC8vIHVwZGF0ZSBoZWFkIHRpdGxlXG4gICAgICB0aGlzLm1haW5TdGF0ZS51cGRhdGUoJ2hlYWRUaXRsZScsIGBBcmlhbm5hNFZpZXcgLSBQYXRyaW1vbmlvIC0gJHtyZXNwb25zZS50aXRsZSB8fCByZXNwb25zZS5sYWJlbH1gKTtcbiAgICB9XG5cbiAgICBpZiAocmVzcG9uc2UucmVsYXRlZEl0ZW1zKSB7XG4gICAgICB0aGlzLm9uZSgnYXctbGlua2VkLW9iamVjdHMnKS51cGRhdGVPcHRpb25zKHsgY29udGV4dDogJ3NjaGVkYScsIGNvbmZpZzogdGhpcy5jb25maWd1cmF0aW9uIH0pO1xuICAgICAgdGhpcy5vbmUoJ2F3LWxpbmtlZC1vYmplY3RzJykudXBkYXRlKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgaWYgKHJlc3BvbnNlLnJlbGF0ZWRFbnRpdGllcykge1xuICAgICAgcmVzcG9uc2UucmVsYXRlZEVudGl0aWVzLmZvckVhY2goKGVsKSA9PiB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gcmVzcG9uc2UudGl0bGUgfHwgcmVzcG9uc2UubGFiZWw7XG4gICAgICAgIGVsLnJlbGF0aW9uTmFtZSA9IGxhYmVsLmxlbmd0aCA+IDMwXG4gICAgICAgICAgPyBgJHtsYWJlbC5zdWJzdHIoMCwgMzApfS4uLiBgXG4gICAgICAgICAgOiBsYWJlbDtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5vbmUoJ2F3LXJlbGF0ZWQtZW50aXRpZXMnKS51cGRhdGVPcHRpb25zKHtcbiAgICAgICAgY29udGV4dDogJ3NjaGVkYScsIGNvbmZpZzogdGhpcy5jb25maWd1cmF0aW9uLCBsaXN0OiAncmVsYXRlZEVudGl0aWVzJywgdGl0bGU6IHJlc3BvbnNlLnRpdGxlXG4gICAgICB9KTtcbiAgICAgIHRoaXMub25lKCdhdy1yZWxhdGVkLWVudGl0aWVzJykudXBkYXRlKHJlc3BvbnNlLnJlbGF0ZWRFbnRpdGllcyk7XG4gICAgfVxuXG4gICAgLy8gY29udHJvbCBzdGlja3lcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc3RpY2t5Q29udHJvbFRyaWdnZXIkLm5leHQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGUgYmV0d2VlbiB0aGUgdHJlZSdzIGNvbGxhcHNlZCBvciBleHBhbmRlZCBzdGF0ZS5cbiAgICovXG4gIGNvbGxhcHNlU2lkZWJhcigpIHtcbiAgICAvLyBvdmVyd3JpdGUgdGhlIGNvbmZpZ3VyYXRpb24gdG8gcHJldmVudCB1bndhbnRlZCBjaGFuZ2VzIHRvIHRoZSB0cmVlIHN0YXRlLlxuICAgIHRoaXMubGF5b3V0Q29uZmlnLnRyZWUuY29sbGFwc2VkQnlEZWZhdWx0ID0gIXRoaXMubGF5b3V0Q29uZmlnLnRyZWUuY29sbGFwc2VkQnlEZWZhdWx0O1xuICAgIHRoaXMuc2lkZWJhckNvbGxhcHNlZCA9ICF0aGlzLnNpZGViYXJDb2xsYXBzZWQ7XG4gICAgdGhpcy5nZXRXaWRnZXREYXRhU291cmNlKCdhdy1zaWRlYmFyLWhlYWRlcicpLnRvZ2dsZVNpZGViYXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NpZGViYXJTdGlja3lDb250cm9sKCkge1xuICAgIC8vIG5vIHN0aWNreSBmb3IgSW50ZXJuZXQgRXhwbG9yZXJcbiAgICBpZiAoaGVscGVycy5icm93c2VySXNJRSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNvdXJjZSQgPSBmcm9tRXZlbnQod2luZG93LCAnc2Nyb2xsJyk7XG5cbiAgICBtZXJnZShzb3VyY2UkLCB0aGlzLnN0aWNreUNvbnRyb2xUcmlnZ2VyJCkucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpLFxuICAgICkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGNvbnN0IHdpbmRvd1RvcCA9IHdpbmRvdy5wYWdlWU9mZnNldDtcbiAgICAgIGNvbnN0IHdpbmRvd0JvdHRvbSA9IHdpbmRvdy5zY3JvbGxZICsgd2luZG93LmlubmVySGVpZ2h0O1xuICAgICAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3N0aWNreS1wYXJlbnQnKVswXSBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGNvbnN0IHdyYXBwZXJUb3AgPSB3cmFwcGVyLm9mZnNldFRvcDtcbiAgICAgIGNvbnN0IHdyYXBwZXJCb3R0b20gPSB3cmFwcGVyVG9wICsgd3JhcHBlci5jbGllbnRIZWlnaHQ7XG5cbiAgICAgIHRoaXMuc2lkZWJhcklzU3RpY2t5ID0gd3JhcHBlclRvcCA8PSB3aW5kb3dUb3A7XG5cbiAgICAgIC8vIHRyZWUgaGVpZ2h0IGNvbnRyb2xcbiAgICAgIGlmICh0aGlzLnNpZGViYXJJc1N0aWNreSAmJiB3aW5kb3dCb3R0b20gPCB3cmFwcGVyQm90dG9tKSB7XG4gICAgICAgIHRoaXMudHJlZU1heEhlaWdodCA9IGAke3dpbmRvd0JvdHRvbSAtIHdpbmRvd1RvcCAtIDUwfXB4YDtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zaWRlYmFySXNTdGlja3kgJiYgd2luZG93Qm90dG9tID49IHdyYXBwZXJCb3R0b20pIHtcbiAgICAgICAgdGhpcy50cmVlTWF4SGVpZ2h0ID0gYCR7d3JhcHBlckJvdHRvbSAtIHdpbmRvd1RvcCAtIDUwfXB4YDtcbiAgICAgIH0gZWxzZSBpZiAod2luZG93Qm90dG9tIDwgd3JhcHBlckJvdHRvbSkge1xuICAgICAgICB0aGlzLnRyZWVNYXhIZWlnaHQgPSBgJHt3aW5kb3dCb3R0b20gLSB3cmFwcGVyVG9wIC0gNTB9cHhgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50cmVlTWF4SGVpZ2h0ID0gYCR7d3JhcHBlckJvdHRvbSAtIHdyYXBwZXJUb3AgLSA1MH1weGA7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RmllbGRzKHJlc3BvbnNlKSB7XG4gICAgY29uc3Qge1xuICAgICAgZmllbGRzLFxuICAgICAgZG9jdW1lbnRfdHlwZTogZHQsXG4gICAgICBkb2N1bWVudF9jbGFzc2lmaWNhdGlvbjogZGNcbiAgICB9ID0gcmVzcG9uc2U7XG4gICAgY29uc3QgcGF0aHMgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0KCdwYXRocycpO1xuICAgIGNvbnN0IGxhYmVscyA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXQoJ2xhYmVscycpO1xuICAgIGNvbnN0IGRjU2VnbWVudHMgPSB0eXBlb2YgZGMgPT09ICdzdHJpbmcnID8gZGMuc3BsaXQoJy4nKSA6IFtdO1xuICAgIGNvbnN0IGRjTGFzdFNlZ21lbnQgPSBkY1NlZ21lbnRzW2RjU2VnbWVudHMubGVuZ3RoIC0gMV07XG4gICAgbGV0IG1ldGFkYXRhVG9TaG93ID0gX2dldCh0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0KCdzY2hlZGEtbGF5b3V0JyksICdtZXRhZGF0YS10by1zaG93Jywge30pO1xuICAgIG1ldGFkYXRhVG9TaG93ID0gbWV0YWRhdGFUb1Nob3dbZGNMYXN0U2VnbWVudF0gfHwgbWV0YWRhdGFUb1Nob3dbZHRdIHx8IFtdO1xuXG4gICAgcmV0dXJuIG1ldGFkYXRhSGVscGVyLm5vcm1hbGl6ZSh7XG4gICAgICBmaWVsZHMsXG4gICAgICBwYXRocyxcbiAgICAgIGxhYmVscyxcbiAgICAgIG1ldGFkYXRhVG9TaG93LFxuICAgICAgdHlwZTogZHRcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBjaGFuZ2VEaWdpdGFsT2JqZWN0KHBheWxvYWQpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50RGlnaXRhbE9iamVjdEluZGV4ICE9PSBwYXlsb2FkKSB7XG4gICAgICAvLyBsaW5rIGNoZWNrXG4gICAgICBpZiAodGhpcy5kaWdpdGFsT2JqZWN0c1twYXlsb2FkXS50eXBlID09PSAnZXh0ZXJuYWwnICYmIHRoaXMuY3VycmVudERpZ2l0YWxPYmplY3QpIHtcbiAgICAgICAgd2luZG93Lm9wZW4odGhpcy5kaWdpdGFsT2JqZWN0c1twYXlsb2FkXS51cmwsICdfYmxhbmsnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGFsd2F5cyByZXNldCBpbWFnZSB2aWV3ZXJcbiAgICAgICAgY29uc3Qgc2NoZWRhSW1hZ2VEUyA9IHRoaXMuZ2V0V2lkZ2V0RGF0YVNvdXJjZSgnYXctc2NoZWRhLWltYWdlJyk7XG4gICAgICAgIHNjaGVkYUltYWdlRFMucmVzZXQoKTtcblxuICAgICAgICB0aGlzLmN1cnJlbnREaWdpdGFsT2JqZWN0SW5kZXggPSBwYXlsb2FkO1xuICAgICAgICB0aGlzLmN1cnJlbnREaWdpdGFsT2JqZWN0ID0gdGhpcy5kaWdpdGFsT2JqZWN0c1twYXlsb2FkXTtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudERpZ2l0YWxPYmplY3QudHlwZS5pbmNsdWRlcygnaW1hZ2VzJykpIHtcbiAgICAgICAgICBpZiAoc2NoZWRhSW1hZ2VEUy5oYXNJbnN0YW5jZSgpKSB7XG4gICAgICAgICAgICBzY2hlZGFJbWFnZURTLnVwZGF0ZUltYWdlcyh0aGlzLmN1cnJlbnREaWdpdGFsT2JqZWN0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vbmUoJ2F3LXNjaGVkYS1pbWFnZScpLnVwZGF0ZSh0aGlzLmN1cnJlbnREaWdpdGFsT2JqZWN0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50RGlnaXRhbE9iamVjdC50eXBlID09PSAncGRmJykge1xuICAgICAgICAgIHRoaXMub25lKCdhdy1zY2hlZGEtcGRmJykudXBkYXRlKHRoaXMuY3VycmVudERpZ2l0YWxPYmplY3QpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVEaWdpdGFsT2JqZWN0cyhkaWdpdGFsT2JqZWN0cykge1xuICAgIHJldHVybiBkaWdpdGFsT2JqZWN0cy5tYXAoKCRkbykgPT4ge1xuICAgICAgaWYgKCRkby50eXBlLmluY2x1ZGVzKCdpbWFnZXMnKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlkOiAnc2NoZWRhLWxheW91dC12aWV3ZXInLFxuICAgICAgICAgIHR5cGU6ICRkby50eXBlLFxuICAgICAgICAgIGxhYmVsOiAkZG8ubGFiZWwsXG4gICAgICAgICAgaGFzTmF2aWdhdGlvbjogJGRvLml0ZW1zLmxlbmd0aCA+IDEsXG4gICAgICAgICAgaXRlbXM6ICRkby5pdGVtcy5tYXAoKHsgdXJsLCBpaWlmSW1hZ2VzIH0pID0+ICh7XG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICBpaWlmSW1hZ2VzLFxuICAgICAgICAgICAgdHlwZTogJGRvLnR5cGUsXG4gICAgICAgICAgfSkpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gJGRvO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { EventHandler } from '@n7-frontend/core';
|
|
2
|
+
import { isEmpty } from 'lodash';
|
|
3
|
+
import { forkJoin, from, of, Subject } from 'rxjs';
|
|
4
|
+
import { switchMap } from 'rxjs/operators';
|
|
5
|
+
export class AwSchedaLayoutEH extends EventHandler {
|
|
6
|
+
constructor() {
|
|
7
|
+
super(...arguments);
|
|
8
|
+
this.destroyed$ = new Subject();
|
|
9
|
+
}
|
|
10
|
+
listen() {
|
|
11
|
+
this.innerEvents$.subscribe(({ type, payload }) => {
|
|
12
|
+
switch (type) {
|
|
13
|
+
case 'aw-scheda-layout.init':
|
|
14
|
+
{
|
|
15
|
+
this.dataSource.onInit(payload);
|
|
16
|
+
this.configuration = payload.configuration;
|
|
17
|
+
this.route = payload.route;
|
|
18
|
+
const paramId = this.route.snapshot.params.id || '';
|
|
19
|
+
if (paramId) {
|
|
20
|
+
this.dataSource.currentId = paramId;
|
|
21
|
+
}
|
|
22
|
+
this.listenRoute();
|
|
23
|
+
this.loadNavigation(paramId);
|
|
24
|
+
this.emitOuter('viewleaf');
|
|
25
|
+
// scroll top
|
|
26
|
+
window.scrollTo(0, 0);
|
|
27
|
+
}
|
|
28
|
+
break;
|
|
29
|
+
case 'aw-scheda-layout.destroy':
|
|
30
|
+
this.destroyed$.next();
|
|
31
|
+
this.dataSource.onDestroy();
|
|
32
|
+
break;
|
|
33
|
+
case 'aw-scheda-layout.togglesidebar':
|
|
34
|
+
this.dataSource.collapseSidebar();
|
|
35
|
+
break;
|
|
36
|
+
default:
|
|
37
|
+
console.warn('unhandled inner event of type', type);
|
|
38
|
+
break;
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
this.outerEvents$.subscribe(({ type, payload }) => {
|
|
42
|
+
switch (type) {
|
|
43
|
+
case 'aw-sidebar-header.click':
|
|
44
|
+
this.dataSource.collapseSidebar();
|
|
45
|
+
break;
|
|
46
|
+
case 'aw-scheda-dropdown.click':
|
|
47
|
+
this.dataSource.changeDigitalObject(payload);
|
|
48
|
+
break;
|
|
49
|
+
default:
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
listenRoute() {
|
|
55
|
+
this.route.paramMap.subscribe((params) => {
|
|
56
|
+
const paramId = params.get('id');
|
|
57
|
+
if (paramId) {
|
|
58
|
+
if (paramId) {
|
|
59
|
+
this.dataSource.currentId = paramId;
|
|
60
|
+
this.emitOuter('routechanged', paramId);
|
|
61
|
+
}
|
|
62
|
+
this.dataSource.contentIsLoading = true;
|
|
63
|
+
this.dataSource.loadItem(paramId).pipe(switchMap((response) => this.parseDigitalObjects$(response))).subscribe((response) => {
|
|
64
|
+
this.dataSource.contentIsLoading = false;
|
|
65
|
+
if (response)
|
|
66
|
+
this.dataSource.loadContent(response);
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
// scroll top
|
|
70
|
+
window.scrollTo(0, 0);
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
loadNavigation(selectedItem) {
|
|
74
|
+
this.dataSource.updateNavigation('Caricamento in corso...');
|
|
75
|
+
this.dataSource.getNavigation('patrimonio').subscribe((response) => {
|
|
76
|
+
if (response) {
|
|
77
|
+
this.dataSource.setTree(response);
|
|
78
|
+
this.dataSource.updateNavigation(this.dataSource.getTree().label);
|
|
79
|
+
this.emitOuter('navigationresponse', {
|
|
80
|
+
tree: this.dataSource.getTree(),
|
|
81
|
+
currentItem: selectedItem,
|
|
82
|
+
basePath: this.configuration.get('paths').schedaBasePath,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
parseDigitalObjects$(response) {
|
|
88
|
+
const iiifManifest$ = {};
|
|
89
|
+
const baseUrls = this.configuration.get('baseUrls') || {};
|
|
90
|
+
const { iiifServer, iipServer } = baseUrls;
|
|
91
|
+
if (Array.isArray(response?.digitalObjects)) {
|
|
92
|
+
response.digitalObjects.forEach((digitalObject) => {
|
|
93
|
+
// iip config url check
|
|
94
|
+
if (iipServer && digitalObject.type === 'images-iip') {
|
|
95
|
+
digitalObject.items.forEach((item) => {
|
|
96
|
+
item.url = `${iipServer}${item.url}`;
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
// iiif config url check
|
|
100
|
+
if (iiifServer && digitalObject.type === 'images-iiif') {
|
|
101
|
+
digitalObject.items.forEach((item) => {
|
|
102
|
+
item.url = `${iiifServer}${item.url}`;
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
if (digitalObject.type === 'images-iiif') {
|
|
106
|
+
digitalObject.items.forEach(({ url }) => {
|
|
107
|
+
iiifManifest$[url] = from(fetch(url)
|
|
108
|
+
.then((data) => {
|
|
109
|
+
if (!data.ok) {
|
|
110
|
+
throw Error(data.statusText);
|
|
111
|
+
}
|
|
112
|
+
return data.json();
|
|
113
|
+
})
|
|
114
|
+
.catch((err) => {
|
|
115
|
+
console.warn(`Error loading iiif manifest ${url}`, err);
|
|
116
|
+
return null;
|
|
117
|
+
}));
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
if (!isEmpty(iiifManifest$)) {
|
|
123
|
+
return forkJoin(iiifManifest$).pipe(switchMap((data) => {
|
|
124
|
+
response.digitalObjects.forEach((digitalObject) => {
|
|
125
|
+
if (digitalObject.type === 'images-iiif') {
|
|
126
|
+
digitalObject.items.forEach((itemImages, index) => {
|
|
127
|
+
digitalObject.items[index].iiifImages = this.getManifestImages(data[itemImages.url]);
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
return of(response);
|
|
132
|
+
}));
|
|
133
|
+
}
|
|
134
|
+
return of(response);
|
|
135
|
+
}
|
|
136
|
+
getManifestImages(manifest) {
|
|
137
|
+
const iiifImages = [];
|
|
138
|
+
if (manifest?.sequences) {
|
|
139
|
+
manifest.sequences.forEach(({ canvases }) => {
|
|
140
|
+
canvases.forEach(({ images }) => {
|
|
141
|
+
images.forEach(({ resource }) => {
|
|
142
|
+
iiifImages.push(resource['@id']);
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
return iiifImages;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWRhLWxheW91dC5laC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL243LWJvaWxlcnBsYXRlLWFyaWFubmEvc3JjL2xpYi9sYXlvdXRzL3NjaGVkYS1sYXlvdXQvc2NoZWRhLWxheW91dC5laC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNqQyxPQUFPLEVBQ0wsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUM1QixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUczQyxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsWUFBWTtJQUFsRDs7UUFDVSxlQUFVLEdBQWlCLElBQUksT0FBTyxFQUFFLENBQUM7SUErSm5ELENBQUM7SUF6SlEsTUFBTTtRQUNYLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRTtZQUNoRCxRQUFRLElBQUksRUFBRTtnQkFDWixLQUFLLHVCQUF1QjtvQkFBRTt3QkFDNUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQ2hDLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQzt3QkFDM0MsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO3dCQUMzQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQzt3QkFDcEQsSUFBSSxPQUFPLEVBQUU7NEJBQ1gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEdBQUcsT0FB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LENBQUMsQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLEVBQUU7NEJBQ2hELGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FDNUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FDckIsQ0FBQzt3QkFDSixDQUFDLENBQUMsQ0FBQztxQkFDSjtnQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDSCxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN0QixDQUFDLENBQUMsQ0FDSCxDQUFDO1NBQ0g7UUFDRCxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRU8saUJBQWlCLENBQUMsUUFBUTtRQUNoQyxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxRQUFRLEVBQUUsU0FBUyxFQUFFO1lBQ3ZCLFFBQVEsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFO2dCQUMxQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFO29CQUM5QixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFO3dCQUM5QixVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO29CQUNuQyxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEhhbmRsZXIgfSBmcm9tICdAbjctZnJvbnRlbmQvY29yZSc7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7XG4gIGZvcmtKb2luLCBmcm9tLCBvZiwgU3ViamVjdFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnQG5ldDcvYm9pbGVycGxhdGUtY29tbW9uJztcblxuZXhwb3J0IGNsYXNzIEF3U2NoZWRhTGF5b3V0RUggZXh0ZW5kcyBFdmVudEhhbmRsZXIge1xuICBwcml2YXRlIGRlc3Ryb3llZCQ6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgcHJpdmF0ZSBjb25maWd1cmF0aW9uOiBDb25maWd1cmF0aW9uU2VydmljZTtcblxuICBwcml2YXRlIHJvdXRlOiBhbnk7XG5cbiAgcHVibGljIGxpc3RlbigpIHtcbiAgICB0aGlzLmlubmVyRXZlbnRzJC5zdWJzY3JpYmUoKHsgdHlwZSwgcGF5bG9hZCB9KSA9PiB7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSAnYXctc2NoZWRhLWxheW91dC5pbml0Jzoge1xuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5vbkluaXQocGF5bG9hZCk7XG4gICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uID0gcGF5bG9hZC5jb25maWd1cmF0aW9uO1xuICAgICAgICAgIHRoaXMucm91dGUgPSBwYXlsb2FkLnJvdXRlO1xuICAgICAgICAgIGNvbnN0IHBhcmFtSWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5pZCB8fCAnJztcbiAgICAgICAgICBpZiAocGFyYW1JZCkge1xuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlLmN1cnJlbnRJZCA9IHBhcmFtSWQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubGlzdGVuUm91dGUoKTtcbiAgICAgICAgICB0aGlzLmxvYWROYXZpZ2F0aW9uKHBhcmFtSWQpO1xuICAgICAgICAgIHRoaXMuZW1pdE91dGVyKCd2aWV3bGVhZicpO1xuICAgICAgICAgIC8vIHNjcm9sbCB0b3BcbiAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG4gICAgICAgIH0gYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYXctc2NoZWRhLWxheW91dC5kZXN0cm95JzpcbiAgICAgICAgICB0aGlzLmRlc3Ryb3llZCQubmV4dCgpO1xuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5vbkRlc3Ryb3koKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdhdy1zY2hlZGEtbGF5b3V0LnRvZ2dsZXNpZGViYXInOlxuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5jb2xsYXBzZVNpZGViYXIoKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnNvbGUud2FybigndW5oYW5kbGVkIGlubmVyIGV2ZW50IG9mIHR5cGUnLCB0eXBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMub3V0ZXJFdmVudHMkLnN1YnNjcmliZSgoeyB0eXBlLCBwYXlsb2FkIH0pID0+IHtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlICdhdy1zaWRlYmFyLWhlYWRlci5jbGljayc6XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlLmNvbGxhcHNlU2lkZWJhcigpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdhdy1zY2hlZGEtZHJvcGRvd24uY2xpY2snOlxuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5jaGFuZ2VEaWdpdGFsT2JqZWN0KHBheWxvYWQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5Sb3V0ZSgpIHtcbiAgICB0aGlzLnJvdXRlLnBhcmFtTWFwLnN1YnNjcmliZSgocGFyYW1zKSA9PiB7XG4gICAgICBjb25zdCBwYXJhbUlkID0gcGFyYW1zLmdldCgnaWQnKTtcbiAgICAgIGlmIChwYXJhbUlkKSB7XG4gICAgICAgIGlmIChwYXJhbUlkKSB7XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlLmN1cnJlbnRJZCA9IHBhcmFtSWQ7XG4gICAgICAgICAgdGhpcy5lbWl0T3V0ZXIoJ3JvdXRlY2hhbmdlZCcsIHBhcmFtSWQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5jb250ZW50SXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmxvYWRJdGVtKHBhcmFtSWQpLnBpcGUoXG4gICAgICAgICAgc3dpdGNoTWFwKChyZXNwb25zZSkgPT4gdGhpcy5wYXJzZURpZ2l0YWxPYmplY3RzJChyZXNwb25zZSkpXG4gICAgICAgICkuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5jb250ZW50SXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlKSB0aGlzLmRhdGFTb3VyY2UubG9hZENvbnRlbnQocmVzcG9uc2UpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIC8vIHNjcm9sbCB0b3BcbiAgICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZE5hdmlnYXRpb24oc2VsZWN0ZWRJdGVtKSB7XG4gICAgdGhpcy5kYXRhU291cmNlLnVwZGF0ZU5hdmlnYXRpb24oJ0NhcmljYW1lbnRvIGluIGNvcnNvLi4uJyk7XG4gICAgdGhpcy5kYXRhU291cmNlLmdldE5hdmlnYXRpb24oJ3BhdHJpbW9uaW8nKS5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XG4gICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLnNldFRyZWUocmVzcG9uc2UpO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UudXBkYXRlTmF2aWdhdGlvbih0aGlzLmRhdGFTb3VyY2UuZ2V0VHJlZSgpLmxhYmVsKTtcbiAgICAgICAgdGhpcy5lbWl0T3V0ZXIoJ25hdmlnYXRpb25yZXNwb25zZScsIHtcbiAgICAgICAgICB0cmVlOiB0aGlzLmRhdGFTb3VyY2UuZ2V0VHJlZSgpLFxuICAgICAgICAgIGN1cnJlbnRJdGVtOiBzZWxlY3RlZEl0ZW0sXG4gICAgICAgICAgYmFzZVBhdGg6IHRoaXMuY29uZmlndXJhdGlvbi5nZXQoJ3BhdGhzJykuc2NoZWRhQmFzZVBhdGgsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZURpZ2l0YWxPYmplY3RzJChyZXNwb25zZSkge1xuICAgIGNvbnN0IGlpaWZNYW5pZmVzdCQgPSB7fTtcbiAgICBjb25zdCBiYXNlVXJscyA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXQoJ2Jhc2VVcmxzJykgfHwge307XG4gICAgY29uc3QgeyBpaWlmU2VydmVyLCBpaXBTZXJ2ZXIgfSA9IGJhc2VVcmxzO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3BvbnNlPy5kaWdpdGFsT2JqZWN0cykpIHtcbiAgICAgIHJlc3BvbnNlLmRpZ2l0YWxPYmplY3RzLmZvckVhY2goKGRpZ2l0YWxPYmplY3QpID0+IHtcbiAgICAgICAgLy8gaWlwIGNvbmZpZyB1cmwgY2hlY2tcbiAgICAgICAgaWYgKGlpcFNlcnZlciAmJiBkaWdpdGFsT2JqZWN0LnR5cGUgPT09ICdpbWFnZXMtaWlwJykge1xuICAgICAgICAgIGRpZ2l0YWxPYmplY3QuaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaXRlbS51cmwgPSBgJHtpaXBTZXJ2ZXJ9JHtpdGVtLnVybH1gO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlpaWYgY29uZmlnIHVybCBjaGVja1xuICAgICAgICBpZiAoaWlpZlNlcnZlciAmJiBkaWdpdGFsT2JqZWN0LnR5cGUgPT09ICdpbWFnZXMtaWlpZicpIHtcbiAgICAgICAgICBkaWdpdGFsT2JqZWN0Lml0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGl0ZW0udXJsID0gYCR7aWlpZlNlcnZlcn0ke2l0ZW0udXJsfWA7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGlnaXRhbE9iamVjdC50eXBlID09PSAnaW1hZ2VzLWlpaWYnKSB7XG4gICAgICAgICAgZGlnaXRhbE9iamVjdC5pdGVtcy5mb3JFYWNoKCh7IHVybCB9KSA9PiB7XG4gICAgICAgICAgICBpaWlmTWFuaWZlc3QkW3VybF0gPSBmcm9tKFxuICAgICAgICAgICAgICBmZXRjaCh1cmwpXG4gICAgICAgICAgICAgICAgLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmICghZGF0YS5vaykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihkYXRhLnN0YXR1c1RleHQpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEuanNvbigpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgRXJyb3IgbG9hZGluZyBpaWlmIG1hbmlmZXN0ICR7dXJsfWAsIGVycik7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICghaXNFbXB0eShpaWlmTWFuaWZlc3QkKSkge1xuICAgICAgcmV0dXJuIGZvcmtKb2luKGlpaWZNYW5pZmVzdCQpLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoZGF0YTogb2JqZWN0KSA9PiB7XG4gICAgICAgICAgcmVzcG9uc2UuZGlnaXRhbE9iamVjdHMuZm9yRWFjaCgoZGlnaXRhbE9iamVjdCkgPT4ge1xuICAgICAgICAgICAgaWYgKGRpZ2l0YWxPYmplY3QudHlwZSA9PT0gJ2ltYWdlcy1paWlmJykge1xuICAgICAgICAgICAgICBkaWdpdGFsT2JqZWN0Lml0ZW1zLmZvckVhY2goKGl0ZW1JbWFnZXMsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgZGlnaXRhbE9iamVjdC5pdGVtc1tpbmRleF0uaWlpZkltYWdlcyA9IHRoaXMuZ2V0TWFuaWZlc3RJbWFnZXMoXG4gICAgICAgICAgICAgICAgICBkYXRhW2l0ZW1JbWFnZXMudXJsXVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBvZihyZXNwb25zZSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gb2YocmVzcG9uc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNYW5pZmVzdEltYWdlcyhtYW5pZmVzdCkge1xuICAgIGNvbnN0IGlpaWZJbWFnZXMgPSBbXTtcbiAgICBpZiAobWFuaWZlc3Q/LnNlcXVlbmNlcykge1xuICAgICAgbWFuaWZlc3Quc2VxdWVuY2VzLmZvckVhY2goKHsgY2FudmFzZXMgfSkgPT4ge1xuICAgICAgICBjYW52YXNlcy5mb3JFYWNoKCh7IGltYWdlcyB9KSA9PiB7XG4gICAgICAgICAgaW1hZ2VzLmZvckVhY2goKHsgcmVzb3VyY2UgfSkgPT4ge1xuICAgICAgICAgICAgaWlpZkltYWdlcy5wdXNoKHJlc291cmNlWydAaWQnXSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBpaWlmSW1hZ2VzO1xuICB9XG59XG4iXX0=
|