ngx-edu-sharing-ui 9.0.2 → 9.1.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/esm2022/lib/actionbar/actionbar.component.mjs +33 -18
- package/esm2022/lib/common/edu-sharing-ui-common.module.mjs +73 -62
- package/esm2022/lib/directives/check-text-overflow.directive.mjs +8 -2
- package/esm2022/lib/directives/icon.directive.mjs +38 -14
- package/esm2022/lib/directives/infinite-scroll.directive.mjs +85 -0
- package/esm2022/lib/dropdown/dropdown.component.mjs +17 -10
- package/esm2022/lib/edu-sharing-ui-configuration.mjs +8 -1
- package/esm2022/lib/edu-sharing-ui.module.mjs +5 -1
- package/esm2022/lib/list-items/list-base/list-base.component.mjs +6 -6
- package/esm2022/lib/list-items/list-counts/list-counts.component.mjs +3 -1
- package/esm2022/lib/list-items/list-text/list-text.component.mjs +17 -17
- package/esm2022/lib/mds/mds-helper.service.mjs +167 -0
- package/esm2022/lib/mds/mds.module.mjs +16 -0
- package/esm2022/lib/node-entries/drag-preview/drag-preview.component.mjs +3 -3
- package/esm2022/lib/node-entries/entries-model.mjs +2 -1
- package/esm2022/lib/node-entries/node-cache.mjs +9 -1
- package/esm2022/lib/node-entries/node-data-source.mjs +4 -2
- package/esm2022/lib/node-entries/node-entries-card/node-entries-card.component.mjs +16 -12
- package/esm2022/lib/node-entries/node-entries-card-grid/node-entries-card-grid.component.mjs +37 -22
- package/esm2022/lib/node-entries/node-entries-card-small/node-entries-card-small.component.mjs +5 -5
- package/esm2022/lib/node-entries/node-entries-global-options/node-entries-global-options.component.mjs +7 -3
- package/esm2022/lib/node-entries/node-entries-global.service.mjs +14 -1
- package/esm2022/lib/node-entries/node-entries-table/column-chooser/column-chooser.component.mjs +3 -3
- package/esm2022/lib/node-entries/node-entries-table/node-entries-table.component.mjs +45 -34
- package/esm2022/lib/node-entries/node-entries-wrapper.component.mjs +17 -5
- package/esm2022/lib/node-entries/node-entries.component.mjs +2 -2
- package/esm2022/lib/node-entries/node-rating/node-rating.component.mjs +35 -12
- package/esm2022/lib/node-entries/option-button/option-button.component.mjs +24 -11
- package/esm2022/lib/node-entries/sort-select-panel/sort-select-panel.component.mjs +3 -3
- package/esm2022/lib/node-url/node-url.component.mjs +7 -3
- package/esm2022/lib/pipes/file-size.pipe.mjs +6 -5
- package/esm2022/lib/pipes/node-title.pipe.mjs +7 -1
- package/esm2022/lib/pipes/option-tooltip.pipe.mjs +3 -3
- package/esm2022/lib/pipes/property-slug.pipe.mjs +16 -0
- package/esm2022/lib/services/abstract/options-helper.service.mjs +1 -1
- package/esm2022/lib/services/app-container.service.mjs +66 -0
- package/esm2022/lib/services/node-entries.service.mjs +47 -3
- package/esm2022/lib/services/node-helper.service.mjs +38 -12
- package/esm2022/lib/services/options-helper-data.service.mjs +5 -5
- package/esm2022/lib/services/repo-url.service.mjs +2 -1
- package/esm2022/lib/services/ui.service.mjs +22 -1
- package/esm2022/lib/spinner/spinner.component.mjs +4 -3
- package/esm2022/lib/translations/translation-loader.mjs +48 -14
- package/esm2022/lib/translations/translations.module.mjs +15 -4
- package/esm2022/lib/translations/translations.service.mjs +25 -7
- package/esm2022/lib/types/injection-tokens.mjs +9 -0
- package/esm2022/lib/types/option-item.mjs +9 -3
- package/esm2022/module.mjs +51 -43
- package/fesm2022/ngx-edu-sharing-ui.mjs +4595 -3931
- package/fesm2022/ngx-edu-sharing-ui.mjs.map +1 -1
- package/lib/actionbar/actionbar.component.d.ts +13 -3
- package/lib/common/edu-sharing-ui-common.module.d.ts +27 -25
- package/lib/directives/icon.directive.d.ts +6 -4
- package/lib/directives/infinite-scroll.directive.d.ts +22 -0
- package/lib/dropdown/dropdown.component.d.ts +6 -3
- package/lib/edu-sharing-ui-configuration.d.ts +5 -0
- package/lib/edu-sharing-ui.module.d.ts +7 -6
- package/lib/list-items/list-widget.d.ts +1 -1
- package/lib/mds/mds-helper.service.d.ts +37 -0
- package/lib/mds/mds.module.d.ts +6 -0
- package/lib/node-entries/entries-model.d.ts +3 -2
- package/lib/node-entries/node-data-source.d.ts +1 -1
- package/lib/node-entries/node-entries-card/node-entries-card.component.d.ts +2 -2
- package/lib/node-entries/node-entries-card-grid/node-entries-card-grid.component.d.ts +6 -1
- package/lib/node-entries/node-entries-global-options/node-entries-global-options.component.d.ts +1 -0
- package/lib/node-entries/node-entries-global.service.d.ts +7 -0
- package/lib/node-entries/node-entries-table/node-entries-table.component.d.ts +4 -1
- package/lib/node-entries/node-entries-wrapper.component.d.ts +8 -3
- package/lib/node-entries/node-rating/node-rating.component.d.ts +3 -3
- package/lib/node-entries/option-button/option-button.component.d.ts +8 -3
- package/lib/pipes/node-title.pipe.d.ts +2 -1
- package/lib/pipes/option-tooltip.pipe.d.ts +1 -1
- package/lib/pipes/property-slug.pipe.d.ts +7 -0
- package/lib/services/abstract/options-helper.service.d.ts +4 -4
- package/lib/services/app-container.service.d.ts +43 -0
- package/lib/services/node-entries.service.d.ts +31 -6
- package/lib/services/node-helper.service.d.ts +7 -5
- package/lib/services/options-helper-data.service.d.ts +6 -6
- package/lib/services/ui.service.d.ts +15 -2
- package/lib/spinner/spinner.component.d.ts +1 -1
- package/lib/translations/translation-loader.d.ts +2 -1
- package/lib/translations/translations.service.d.ts +5 -2
- package/lib/types/injection-tokens.d.ts +8 -0
- package/lib/types/option-item.d.ts +10 -6
- package/module.d.ts +50 -42
- package/package.json +1 -1
- package/esm2022/lib/translations/languages.mjs +0 -5
- package/lib/translations/languages.d.ts +0 -4
|
@@ -36,6 +36,11 @@ export class NodeEntriesWrapperComponent {
|
|
|
36
36
|
this.displayType = NodeEntriesDisplayType.Grid;
|
|
37
37
|
this.displayTypeChange = new EventEmitter();
|
|
38
38
|
this.elementInteractionType = InteractionType.DefaultActionLink;
|
|
39
|
+
/**
|
|
40
|
+
* This color defines the base color of gradients visually limiting a grid in scroll direction.
|
|
41
|
+
* Defaults to white.
|
|
42
|
+
*/
|
|
43
|
+
this.scrollGradientColor = '#fff';
|
|
39
44
|
/**
|
|
40
45
|
* UI hints for whether a single click will cause a dynamic action.
|
|
41
46
|
*
|
|
@@ -94,7 +99,6 @@ export class NodeEntriesWrapperComponent {
|
|
|
94
99
|
this.entriesService.columns = this.columns;
|
|
95
100
|
this.entriesService.configureColumns = this.configureColumns;
|
|
96
101
|
this.entriesService.checkbox = this.checkbox;
|
|
97
|
-
this.entriesService.columnsChange = this.columnsChange;
|
|
98
102
|
this.entriesService.displayType = this.displayType;
|
|
99
103
|
this.entriesService.elementInteractionType = this.elementInteractionType;
|
|
100
104
|
this.entriesService.gridConfig = this.gridConfig;
|
|
@@ -109,6 +113,7 @@ export class NodeEntriesWrapperComponent {
|
|
|
109
113
|
this.entriesService.primaryInstance = this.primaryInstance;
|
|
110
114
|
this.entriesService.singleClickHint = this.singleClickHint;
|
|
111
115
|
this.entriesService.disableInfiniteScroll = this.disableInfiniteScroll;
|
|
116
|
+
this.entriesService.scrollGradientColor.set(this.scrollGradientColor);
|
|
112
117
|
if (changes['initConfig']) {
|
|
113
118
|
this.initOptionsGenerator(this.initConfig);
|
|
114
119
|
}
|
|
@@ -161,12 +166,17 @@ export class NodeEntriesWrapperComponent {
|
|
|
161
166
|
return;
|
|
162
167
|
}
|
|
163
168
|
this.dataSource.getData().forEach((d) => {
|
|
164
|
-
let hits = nodes.filter((n) => n
|
|
169
|
+
let hits = nodes.filter((n) => n?.ref
|
|
170
|
+
? n?.ref.id === d?.ref.id
|
|
171
|
+
: n?.authorityName ===
|
|
172
|
+
d?.authorityName);
|
|
165
173
|
if (hits.length === 0) {
|
|
166
174
|
// handle if the original has changed (for collection refs)
|
|
167
|
-
hits = nodes.filter((n) => n
|
|
175
|
+
hits = nodes.filter((n) => n?.ref &&
|
|
176
|
+
n?.ref?.id === d?.originalId);
|
|
168
177
|
}
|
|
169
178
|
if (hits.length === 1) {
|
|
179
|
+
console.log('copy', d, hits);
|
|
170
180
|
this.nodeHelperService.copyDataToNode(d, hits[0]);
|
|
171
181
|
}
|
|
172
182
|
});
|
|
@@ -244,7 +254,7 @@ export class NodeEntriesWrapperComponent {
|
|
|
244
254
|
this.getSelection().clear();
|
|
245
255
|
}
|
|
246
256
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: NodeEntriesWrapperComponent, deps: [{ token: i0.ViewContainerRef }, { token: i1.TemporaryStorageService }, { token: i0.NgZone }, { token: i2.NodeEntriesService }, { token: i3.OptionsHelperDataService }, { token: i4.NodeHelperService }, { token: i5.UIService }, { token: i6.NodeEntriesTemplatesService }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
247
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", type: NodeEntriesWrapperComponent, selector: "es-node-entries-wrapper", inputs: { dataSource: "dataSource", scope: "scope", columns: "columns", configureColumns: "configureColumns", checkbox: "checkbox", globalOptions: "globalOptions", displayType: "displayType", elementInteractionType: "elementInteractionType", sort: "sort", dragDrop: "dragDrop", gridConfig: "gridConfig", initConfig: "initConfig", primaryInstance: "primaryInstance", singleClickHint: "singleClickHint", disableInfiniteScroll: "disableInfiniteScroll" }, outputs: { columnsChange: "columnsChange", displayTypeChange: "displayTypeChange", fetchData: "fetchData", clickItem: "clickItem", dblClickItem: "dblClickItem", sortChange: "sortChange", virtualNodesAdded: "virtualNodesAdded", displayTypeChanged: "displayTypeChanged" }, providers: [NodeEntriesService, OptionsHelperDataService, NodeEntriesTemplatesService], queries: [{ propertyName: "titleRef", first: true, predicate: ["title"], descendants: true }, { propertyName: "emptyRef", first: true, predicate: ["empty"], descendants: true }, { propertyName: "actionAreaRef", first: true, predicate: ["actionArea"], descendants: true }, { propertyName: "overlayRef", first: true, predicate: ["overlay"], descendants: true }], viewQueries: [{ propertyName: "nodeEntriesComponentRef", first: true, predicate: ["nodeEntriesComponent"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `<es-node-entries
|
|
257
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", type: NodeEntriesWrapperComponent, selector: "es-node-entries-wrapper", inputs: { dataSource: "dataSource", scope: "scope", columns: "columns", configureColumns: "configureColumns", checkbox: "checkbox", globalOptions: "globalOptions", displayType: "displayType", elementInteractionType: "elementInteractionType", sort: "sort", dragDrop: "dragDrop", gridConfig: "gridConfig", scrollGradientColor: "scrollGradientColor", initConfig: "initConfig", primaryInstance: "primaryInstance", singleClickHint: "singleClickHint", disableInfiniteScroll: "disableInfiniteScroll" }, outputs: { columnsChange: "columnsChange", displayTypeChange: "displayTypeChange", fetchData: "fetchData", clickItem: "clickItem", dblClickItem: "dblClickItem", sortChange: "sortChange", virtualNodesAdded: "virtualNodesAdded", displayTypeChanged: "displayTypeChanged" }, providers: [NodeEntriesService, OptionsHelperDataService, NodeEntriesTemplatesService], queries: [{ propertyName: "titleRef", first: true, predicate: ["title"], descendants: true }, { propertyName: "emptyRef", first: true, predicate: ["empty"], descendants: true }, { propertyName: "actionAreaRef", first: true, predicate: ["actionArea"], descendants: true }, { propertyName: "overlayRef", first: true, predicate: ["overlay"], descendants: true }], viewQueries: [{ propertyName: "nodeEntriesComponentRef", first: true, predicate: ["nodeEntriesComponent"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `<es-node-entries
|
|
248
258
|
#nodeEntriesComponent
|
|
249
259
|
*ngIf="!customNodeListComponent"
|
|
250
260
|
></es-node-entries>`, isInline: true, dependencies: [{ kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i8.NodeEntriesComponent, selector: "es-node-entries" }] }); }
|
|
@@ -300,6 +310,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImpor
|
|
|
300
310
|
type: Input
|
|
301
311
|
}], gridConfig: [{
|
|
302
312
|
type: Input
|
|
313
|
+
}], scrollGradientColor: [{
|
|
314
|
+
type: Input
|
|
303
315
|
}], initConfig: [{
|
|
304
316
|
type: Input
|
|
305
317
|
}], primaryInstance: [{
|
|
@@ -321,4 +333,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImpor
|
|
|
321
333
|
}], displayTypeChanged: [{
|
|
322
334
|
type: Output
|
|
323
335
|
}] } });
|
|
324
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1lbnRyaWVzLXdyYXBwZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi9ub2RlLWVudHJpZXMvbm9kZS1lbnRyaWVzLXdyYXBwZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHSCxTQUFTLEVBRVQsWUFBWSxFQUVaLFlBQVksRUFDWixLQUFLLEVBS0wsTUFBTSxFQUlOLFNBQVMsR0FFWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRS9FLE9BQU8sRUFHSCxlQUFlLEVBUWYsc0JBQXNCLEdBQ3pCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUl0RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUdoRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQzs7Ozs7Ozs7OztBQVduRixNQUFNLE9BQU8sMkJBQTJCO0lBOEVwQyxZQUNZLGdCQUFrQyxFQUNsQyx1QkFBZ0QsRUFDaEQsTUFBYyxFQUNkLGNBQXFDLEVBQ3RDLGFBQXVDLEVBQ3RDLGlCQUFvQyxFQUNwQyxTQUFvQjtJQUM1QixRQUFRO0lBQ1IsbUNBQW1DO0lBQzNCLGdCQUE2QyxFQUM3QyxpQkFBb0MsRUFDcEMsVUFBc0I7UUFYdEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyw0QkFBdUIsR0FBdkIsdUJBQXVCLENB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ZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29tcG9uZW50UmVmLFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbnB1dCxcbiAgICBOZ1pvbmUsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZSxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBUeXBlLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE5vZGVFbnRyaWVzVGVtcGxhdGVzU2VydmljZSB9IGZyb20gJy4vbm9kZS1lbnRyaWVzLXRlbXBsYXRlcy5zZXJ2aWNlJztcbmltcG9ydCB7IE5vZGVFbnRyaWVzQ29tcG9uZW50IH0gZnJvbSAnLi9ub2RlLWVudHJpZXMuY29tcG9uZW50JztcbmltcG9ydCB7XG4gICAgRmV0Y2hFdmVudCxcbiAgICBHcmlkQ29uZmlnLFxuICAgIEludGVyYWN0aW9uVHlwZSxcbiAgICBMaXN0RHJhZ0dyb3BDb25maWcsXG4gICAgTGlzdEV2ZW50SW50ZXJmYWNlLFxuICAgIExpc3RPcHRpb25zLFxuICAgIExpc3RPcHRpb25zQ29uZmlnLFxuICAgIExpc3RTb3J0Q29uZmlnLFxuICAgIE5vZGVDbGlja0V2ZW50LFxuICAgIE5vZGVFbnRyaWVzRGF0YVR5cGUsXG4gICAgTm9kZUVudHJpZXNEaXNwbGF5VHlwZSxcbn0gZnJvbSAnLi9lbnRyaWVzLW1vZGVsJztcbmltcG9ydCB7IE5vZGVEYXRhU291cmNlIH0gZnJvbSAnLi9ub2RlLWRhdGEtc291cmNlJztcbmltcG9ydCB7IEhlbHBlciB9IGZyb20gJy4uL3V0aWwvaGVscGVyJztcbmltcG9ydCB7IE5vZGVFbnRyaWVzU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL25vZGUtZW50cmllcy5zZXJ2aWNlJztcbmltcG9ydCB7IE9wdGlvbkl0ZW0sIFNjb3BlIH0gZnJvbSAnLi4vdHlwZXMvb3B0aW9uLWl0ZW0nO1xuaW1wb3J0IHsgTm9kZUhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9ub2RlLWhlbHBlci5zZXJ2aWNlJztcbmltcG9ydCB7IExpc3RJdGVtIH0gZnJvbSAnLi4vdHlwZXMvbGlzdC1pdGVtJztcbmltcG9ydCB7IFRlbXBvcmFyeVN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdGVtcG9yYXJ5LXN0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uUmVmZXJlbmNlLCBOb2RlLCBVc2VyIH0gZnJvbSAnbmd4LWVkdS1zaGFyaW5nLWFwaSc7XG5pbXBvcnQgeyBWaXJ0dWFsTm9kZSB9IGZyb20gJy4uL3R5cGVzL2FwaS1tb2RlbHMnO1xuaW1wb3J0IHsgT3B0aW9uc0hlbHBlckRhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvb3B0aW9ucy1oZWxwZXItZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IFVJU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3VpLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2VzLW5vZGUtZW50cmllcy13cmFwcGVyJyxcbiAgICB0ZW1wbGF0ZTogYDxlcy1ub2RlLWVudHJpZXNcbiAgICAgICAgI25vZGVFbnRyaWVzQ29tcG9uZW50XG4gICAgICAgICpuZ0lmPVwiIWN1c3RvbU5vZGVMaXN0Q29tcG9uZW50XCJcbiAgICA+PC9lcy1ub2RlLWVudHJpZXM+YCxcbiAgICBwcm92aWRlcnM6IFtOb2RlRW50cmllc1NlcnZpY2UsIE9wdGlvbnNIZWxwZXJEYXRhU2VydmljZSwgTm9kZUVudHJpZXNUZW1wbGF0ZXNTZXJ2aWNlXSxcbn0pXG5leHBvcnQgY2xhc3MgTm9kZUVudHJpZXNXcmFwcGVyQ29tcG9uZW50PFQgZXh0ZW5kcyBOb2RlRW50cmllc0RhdGFUeXBlPlxuICAgIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgTGlzdEV2ZW50SW50ZXJmYWNlPFQ+XG57XG4gICAgLyoqXG4gICAgICogdGl0bGUgKGFib3ZlKSB0aGUgdGFibGUvZ3JpZFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoJ3RpdGxlJykgdGl0bGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgLyoqXG4gICAgICogZGF0YSBzaG93biB3aGVuIGRhdGEgc291cmNlIGlzIGVtcHR5XG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZCgnZW1wdHknKSBlbXB0eVJlZjogVGVtcGxhdGVSZWY8YW55PjtcbiAgICAvKipcbiAgICAgKiBjdXN0b20gYXJlYSBmb3IgYWN0aW9ucyBvbmx5IGZvciBOb2RlRW50cmllc0Rpc3BsYXlUeXBlLlNtYWxsR3JpZCAocGVyIGNhcmQgYXQgdGhlIGJvdHRvbSlcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKCdhY3Rpb25BcmVhJykgYWN0aW9uQXJlYVJlZjogVGVtcGxhdGVSZWY8YW55PjtcbiAgICAvKipcbiAgICAgKiBjdXN0b20gYXJlYSBmb3IgYW4gb3ZlcmxheSBcImFib3ZlXCIgZWFjaCBjYXJkIChpLmUuIHRvIHNob3cgZGlzYWJsZWQgaW5mb3MpLCBvbmx5IGZvciBOb2RlRW50cmllc0Rpc3BsYXlUeXBlLlNtYWxsR3JpZCAmIG9kZUVudHJpZXNEaXNwbGF5VHlwZS5HcmlkXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZCgnb3ZlcmxheScpIG92ZXJsYXlSZWY6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQFZpZXdDaGlsZCgnbm9kZUVudHJpZXNDb21wb25lbnQnKSBub2RlRW50cmllc0NvbXBvbmVudFJlZjogTm9kZUVudHJpZXNDb21wb25lbnQ8VD47XG4gICAgQElucHV0KCkgZGF0YVNvdXJjZTogTm9kZURhdGFTb3VyY2U8VD47XG4gICAgQElucHV0KCkgc2NvcGU6IFNjb3BlO1xuICAgIEBJbnB1dCgpIGNvbHVtbnM6IExpc3RJdGVtW107XG4gICAgQElucHV0KCkgY29uZmlndXJlQ29sdW1uczogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBjaGVja2JveCA9IHRydWU7XG4gICAgQE91dHB1dCgpIGNvbHVtbnNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPExpc3RJdGVtW10+KCk7XG4gICAgQElucHV0KCkgZ2xvYmFsT3B0aW9uczogT3B0aW9uSXRlbVtdO1xuICAgIEBJbnB1dCgpIGRpc3BsYXlUeXBlID0gTm9kZUVudHJpZXNEaXNwbGF5VHlwZS5HcmlkO1xuICAgIEBPdXRwdXQoKSBkaXNwbGF5VHlwZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Tm9kZUVudHJpZXNEaXNwbGF5VHlwZT4oKTtcbiAgICBASW5wdXQoKSBlbGVtZW50SW50ZXJhY3Rpb25UeXBlID0gSW50ZXJhY3Rpb25UeXBlLkRlZmF1bHRBY3Rpb25MaW5rO1xuICAgIEBJbnB1dCgpIHNvcnQ6IExpc3RTb3J0Q29uZmlnO1xuICAgIEBJbnB1dCgpIGRyYWdEcm9wOiBMaXN0RHJhZ0dyb3BDb25maWc8VD47XG4gICAgQElucHV0KCkgZ3JpZENvbmZpZzogR3JpZENvbmZpZztcbiAgICAvKipcbiAgICAgKiB0aGlzIGNhbiBiZSBzZXQgaW5zdGVhZCBvZiBjYWxsaW5nIGluaXRPcHRpb25zR2VuZXJhdG9yKClcbiAgICAgKi9cbiAgICBASW5wdXQoKSBpbml0Q29uZmlnOiBMaXN0T3B0aW9uc0NvbmZpZztcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoaXMgbm9kZS1lbnRyaWVzIGluc3RhbmNlIHJlcHJlc2VudHMgdGhlIHBhZ2UncyBtYWluIGNvbnRlbnQuXG4gICAgICpcbiAgICAgKiBPbmx5IHNldCB0byB0cnVlIGZvciBvbmUgaW5zdGFuY2UgcGVyIHBhZ2UuXG4gICAgICpcbiAgICAgKiBJZiB0cnVlLCB0aGlzIGluc3RhbmNlIHdpbGxcbiAgICAgKiAtIGhhbmRsZSBwYWdlLXdpZGUga2V5Ym9hcmQgc2hvcnRjdXRzXG4gICAgICogLSB0YWtlIGNvbnRyb2wgb2YgdGhlIGBwYWdlYCBhbmQgYHBhZ2VTaXplYCBxdWVyeSBwYXJhbWV0ZXJzIGZvciBwYWdpbmF0aW9uXG4gICAgICovXG4gICAgQElucHV0KCkgcHJpbWFyeUluc3RhbmNlOiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFVJIGhpbnRzIGZvciB3aGV0aGVyIGEgc2luZ2xlIGNsaWNrIHdpbGwgY2F1c2UgYSBkeW5hbWljIGFjdGlvbi5cbiAgICAgKlxuICAgICAqIFRoaXMgZG9lcyBub3QgY29uZmlndXJlIHRoZSBhY3R1YWwgYmVoYXZpb3IgYnV0IG9ubHkgVUkgaGludHMgdG8gdGhlIHVzZXIuIEhpbnRzIGluY2x1ZGVcbiAgICAgKiBob3ZlciBlZmZlY3RzIGFuZCBhIGNoYW5nZWQgY3Vyc29yLlxuICAgICAqXG4gICAgICogLSBXaGVuIGNob29zaW5nICdzdGF0aWMnLCB0aGUgYGNsaWNrSXRlbWAgZXZlbnQgc2hvdWxkIHRyaWdnZXIgc29tZSBzdGF0aW9uYXJ5IGFjdGlvbiBsaWtlXG4gICAgICogICBzZWxlY3RpbmcgdGhlIGVsZW1lbnQgb3IgZGlzcGxheWluZyBpbmZvcm1hdGlvbiBpbiBhIGNvbXBsZW1lbnRhcnkgcGFnZSBhcmVhLiBUaGVcbiAgICAgKiAgIGBkYmxDbGlja0l0ZW1gIGV2ZW50IGNhbiBiZSB1c2VkIGZvciBhIG1vcmUgZGlzcnVwdGl2ZSBhY3Rpb24uXG4gICAgICogLSBXaGVuIGNob29zaW5nICdkeW5hbWljJywgdGhlIGBjbGlja0l0ZW1gIGV2ZW50IHNob3VsZCB0cmlnZ2VyIGEgbWFqb3IgYWN0aW9uIGxpa2VcbiAgICAgKiAgIG5hdmlnYXRpbmcgdG8gYSBuZXcgcGFnZSBvciBjbG9zaW5nIGEgZGlhbG9nLlxuICAgICAqL1xuICAgIC8vIFRPRE86IENvbnNpZGVyIGNvbnRyb2xsaW5nIHRoZSB1aSBoaW50cyBhbmQgdGhlIGFjdHVhbCBiZWhhdmlvciB3aXRoIGEgc2luZ2xlIG9wdGlvbi5cbiAgICBASW5wdXQoKSBzaW5nbGVDbGlja0hpbnQ6ICdkeW5hbWljJyB8ICdzdGF0aWMnID0gJ2R5bmFtaWMnO1xuICAgIC8qKlxuICAgICAqIERvIG5vdCBsb2FkIG1vcmUgZGF0YSBvbiBzY3JvbGwuXG4gICAgICovXG4gICAgQElucHV0KCkgZGlzYWJsZUluZmluaXRlU2Nyb2xsID0gZmFsc2U7XG5cbiAgICBAT3V0cHV0KCkgZmV0Y2hEYXRhID0gbmV3IEV2ZW50RW1pdHRlcjxGZXRjaEV2ZW50PigpO1xuICAgIEBPdXRwdXQoKSBjbGlja0l0ZW0gPSBuZXcgRXZlbnRFbWl0dGVyPE5vZGVDbGlja0V2ZW50PFQ+PigpO1xuICAgIEBPdXRwdXQoKSBkYmxDbGlja0l0ZW0gPSBuZXcgRXZlbnRFbWl0dGVyPE5vZGVDbGlja0V2ZW50PFQ+PigpO1xuICAgIEBPdXRwdXQoKSBzb3J0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxMaXN0U29ydENvbmZpZz4oKTtcbiAgICBAT3V0cHV0KCkgdmlydHVhbE5vZGVzQWRkZWQ7XG4gICAgQE91dHB1dCgpIGRpc3BsYXlUeXBlQ2hhbmdlZDtcblxuICAgIGN1c3RvbU5vZGVMaXN0Q29tcG9uZW50OiBUeXBlPE5vZGVFbnRyaWVzQ29tcG9uZW50PFQ+PjtcbiAgICBwcml2YXRlIGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPE5vZGVFbnRyaWVzQ29tcG9uZW50PFQ+PjtcbiAgICBwcml2YXRlIG9wdGlvbnM6IExpc3RPcHRpb25zO1xuICAgIHByaXZhdGUgZGVzdHJveWVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgICAgIHByaXZhdGUgdGVtcG9yYXJ5U3RvcmFnZVNlcnZpY2U6IFRlbXBvcmFyeVN0b3JhZ2VTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgICAgICBwcml2YXRlIGVudHJpZXNTZXJ2aWNlOiBOb2RlRW50cmllc1NlcnZpY2U8VD4sXG4gICAgICAgIHB1YmxpYyBvcHRpb25zSGVscGVyOiBPcHRpb25zSGVscGVyRGF0YVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbm9kZUhlbHBlclNlcnZpY2U6IE5vZGVIZWxwZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHVpU2VydmljZTogVUlTZXJ2aWNlLFxuICAgICAgICAvLyBAVE9ET1xuICAgICAgICAvLyBwcml2YXRlIG1haW5OYXY6IE1haW5OYXZTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHRlbXBsYXRlc1NlcnZpY2U6IE5vZGVFbnRyaWVzVGVtcGxhdGVzU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICApIHtcbiAgICAgICAgLy8gcmVndWxhcnkgcmUtYmluZCB0ZW1wbGF0ZSBzaW5jZSBpdCBtaWdodCBoYXZlIHVwZGF0ZWQgd2l0aG91dCBuZ0NoYW5nZXMgdHJpZ2dlclxuICAgICAgICAvKlxuICAgICAgICBuZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT5cbiAgICAgICAgICAgIHNldEludGVydmFsKCgpID0+IHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLmVtcHR5UmVmID0gdGhpcy5lbXB0eVJlZilcbiAgICAgICAgKTtcbiAgICAgICAgKi9cbiAgICAgICAgdGhpcy52aXJ0dWFsTm9kZXNBZGRlZCA9IHRoaXMub3B0aW9uc0hlbHBlci52aXJ0dWFsTm9kZXNBZGRlZDtcbiAgICAgICAgdGhpcy5kaXNwbGF5VHlwZUNoYW5nZWQgPSB0aGlzLm9wdGlvbnNIZWxwZXIuZGlzcGxheVR5cGVDaGFuZ2VkO1xuICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLnNlbGVjdGlvbi5jaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zSGVscGVyLmdldERhdGEoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9uc0hlbHBlci5nZXREYXRhKCkuc2VsZWN0ZWRPYmplY3RzID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uc2VsZWN0ZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zSGVscGVyLmdldERhdGEoKS5hY3RpdmVPYmplY3RzID0gdGhpcy5lbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uc2VsZWN0ZWQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fybignb3B0aW9uc0hlbHBlciBpcyBub3QgaW5pdGFsaXplZCBjb3JyZWN0bHk7IGRhdGEgaXMgZW1wdHknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMub3B0aW9uc0hlbHBlci5yZWZyZXNoQ29tcG9uZW50cygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucHJpbWFyeUluc3RhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnNIZWxwZXIucmVnaXN0ZXJHbG9iYWxLZXlib2FyZFNob3J0Y3V0cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogeyBba2V5OiBzdHJpbmddOiBTaW1wbGVDaGFuZ2UgfSA9IHt9KSB7XG4gICAgICAgIGlmICghdGhpcy5jb21wb25lbnRSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2UubGlzdCA9IHRoaXM7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2UuZGF0YVNvdXJjZSA9IHRoaXMuZGF0YVNvdXJjZTtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5zY29wZSA9IHRoaXMuc2NvcGU7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2UuY29sdW1ucyA9IHRoaXMuY29sdW1ucztcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5jb25maWd1cmVDb2x1bW5zID0gdGhpcy5jb25maWd1cmVDb2x1bW5zO1xuICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLmNoZWNrYm94ID0gdGhpcy5jaGVja2JveDtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5jb2x1bW5zQ2hhbmdlID0gdGhpcy5jb2x1bW5zQ2hhbmdlO1xuICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLmRpc3BsYXlUeXBlID0gdGhpcy5kaXNwbGF5VHlwZTtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5lbGVtZW50SW50ZXJhY3Rpb25UeXBlID0gdGhpcy5lbGVtZW50SW50ZXJhY3Rpb25UeXBlO1xuICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLmdyaWRDb25maWcgPSB0aGlzLmdyaWRDb25maWc7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2Uub3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5nbG9iYWxPcHRpb25zID0gdGhpcy5nbG9iYWxPcHRpb25zO1xuICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLnNvcnQgPSB0aGlzLnNvcnQ7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2Uuc29ydENoYW5nZSA9IHRoaXMuc29ydENoYW5nZTtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5kcmFnRHJvcCA9IHRoaXMuZHJhZ0Ryb3A7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2UuY2xpY2tJdGVtID0gdGhpcy5jbGlja0l0ZW07XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2UuZGJsQ2xpY2tJdGVtID0gdGhpcy5kYmxDbGlja0l0ZW07XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2UuZmV0Y2hEYXRhID0gdGhpcy5mZXRjaERhdGE7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2UucHJpbWFyeUluc3RhbmNlID0gdGhpcy5wcmltYXJ5SW5zdGFuY2U7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2Uuc2luZ2xlQ2xpY2tIaW50ID0gdGhpcy5zaW5nbGVDbGlja0hpbnQ7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2UuZGlzYWJsZUluZmluaXRlU2Nyb2xsID0gdGhpcy5kaXNhYmxlSW5maW5pdGVTY3JvbGw7XG5cbiAgICAgICAgaWYgKGNoYW5nZXNbJ2luaXRDb25maWcnXSkge1xuICAgICAgICAgICAgdGhpcy5pbml0T3B0aW9uc0dlbmVyYXRvcih0aGlzLmluaXRDb25maWcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbXBvbmVudFJlZikge1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UuY2hhbmdlRGV0ZWN0b3JSZWY/LmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUaGlzIG1pZ2h0IG5lZWQgd3JhcHBpbmcgd2l0aCBgc2V0VGltZW91dGAuXG4gICAgICAgIHRoaXMudXBkYXRlVGVtcGxhdGVzKCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveWVkLm5leHQoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95ZWQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXBsYWNlcyB0aGlzIHdyYXBwZXIgd2l0aCB0aGUgY29uZmlndXJlZCBjdXN0b20tbm9kZS1saXN0IGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBwcml2YXRlIGluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3VzdG9tTm9kZUxpc3RDb21wb25lbnQgPSB0aGlzLnRlbXBvcmFyeVN0b3JhZ2VTZXJ2aWNlLmdldChcbiAgICAgICAgICAgIFRlbXBvcmFyeVN0b3JhZ2VTZXJ2aWNlLkNVU1RPTV9OT0RFX0VOVFJJRVNfQ09NUE9ORU5ULFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tTm9kZUxpc3RDb21wb25lbnQgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmID0gdGhpcy51aVNlcnZpY2UuaW5qZWN0QW5ndWxhckNvbXBvbmVudChcbiAgICAgICAgICAgIHRoaXMudmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tTm9kZUxpc3RDb21wb25lbnQsXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgIC8vIElucHV0IGJpbmRpbmdzIGFyZSBpbml0aWFsaXplZCBpbiBgbmdPbkNoYW5nZXNgLlxuICAgICAgICAgICAgdGhpcy5nZXRPdXRwdXRCaW5kaW5ncygpLFxuICAgICAgICApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2ltcGxlIG1hcCBvZiB0aGUgb3V0cHV0IGJpbmRpbmdzIGRlZmluZWQgaW4gdGhpcyBjb21wb25lbnQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRPdXRwdXRCaW5kaW5ncygpOiB7IFtrZXk6IHN0cmluZ106IEV2ZW50RW1pdHRlcjxhbnk+IH0ge1xuICAgICAgICBjb25zdCBvdXRwdXRCaW5kaW5nczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0aGlzKSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSAodGhpcyBhcyBhbnkpW2tleV07XG4gICAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBFdmVudEVtaXR0ZXIpIHtcbiAgICAgICAgICAgICAgICBvdXRwdXRCaW5kaW5nc1trZXldID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dHB1dEJpbmRpbmdzO1xuICAgIH1cblxuICAgIGdldERpc3BsYXlUeXBlKCk6IE5vZGVFbnRyaWVzRGlzcGxheVR5cGUge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXNwbGF5VHlwZTtcbiAgICB9XG5cbiAgICBzZXREaXNwbGF5VHlwZShkaXNwbGF5VHlwZTogTm9kZUVudHJpZXNEaXNwbGF5VHlwZSk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc3BsYXlUeXBlID0gZGlzcGxheVR5cGU7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2UuZGlzcGxheVR5cGUgPSBkaXNwbGF5VHlwZTtcbiAgICAgICAgdGhpcy5uZ09uQ2hhbmdlcygpO1xuICAgICAgICB0aGlzLmRpc3BsYXlUeXBlQ2hhbmdlLmVtaXQoZGlzcGxheVR5cGUpO1xuICAgIH1cblxuICAgIHVwZGF0ZU5vZGVzKG5vZGVzOiB2b2lkIHwgVFtdKSB7XG4gICAgICAgIGlmICghbm9kZXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZ2V0RGF0YSgpLmZvckVhY2goKGQpID0+IHtcbiAgICAgICAgICAgIGxldCBoaXRzID0gKG5vZGVzIGFzIFRbXSkuZmlsdGVyKChuKSA9PiAobiBhcyBOb2RlKS5yZWYuaWQgPT09IChkIGFzIE5vZGUpLnJlZi5pZCk7XG4gICAgICAgICAgICBpZiAoaGl0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBoYW5kbGUgaWYgdGhlIG9yaWdpbmFsIGhhcyBjaGFuZ2VkIChmb3IgY29sbGVjdGlvbiByZWZzKVxuICAgICAgICAgICAgICAgIGhpdHMgPSAobm9kZXMgYXMgVFtdKS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgIChuKSA9PiAobiBhcyBOb2RlKS5yZWYuaWQgPT09IChkIGFzIHVua25vd24gYXMgQ29sbGVjdGlvblJlZmVyZW5jZSkub3JpZ2luYWxJZCxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGhpdHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlSGVscGVyU2VydmljZS5jb3B5RGF0YVRvTm9kZShkIGFzIE5vZGUsIGhpdHNbMF0gYXMgTm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyB0cmlnZ2VyIHJlYnVpbGRcbiAgICAgICAgaWYgKHRoaXMuZGF0YVNvdXJjZSBpbnN0YW5jZW9mIE5vZGVEYXRhU291cmNlKSB7XG4gICAgICAgICAgICAodGhpcy5kYXRhU291cmNlIGFzIE5vZGVEYXRhU291cmNlPFQ+KS5yZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb2xkU2VsZWN0aW9uID0gdGhpcy5lbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uc2VsZWN0ZWQ7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uLnNlbGVjdChcbiAgICAgICAgICAgIC4uLm9sZFNlbGVjdGlvbi5tYXAoXG4gICAgICAgICAgICAgICAgKG8pID0+IHRoaXMuZGF0YVNvdXJjZS5nZXREYXRhKCkuZmlsdGVyKChkKSA9PiBIZWxwZXIub2JqZWN0RXF1YWxzKG8sIGQpKT8uWzBdLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgc2hvd1Jlb3JkZXJDb2x1bW5zRGlhbG9nKCk6IHZvaWQge31cblxuICAgIGFkZFZpcnR1YWxOb2Rlcyh2aXJ0dWFsOiBUW10pOiB2b2lkIHtcbiAgICAgICAgdmlydHVhbCA9IHZpcnR1YWwubWFwKChvKSA9PiB7XG4gICAgICAgICAgICAobyBhcyBWaXJ0dWFsTm9kZSkudmlydHVhbCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gbztcbiAgICAgICAgfSk7XG4gICAgICAgIHZpcnR1YWwuZm9yRWFjaCgodikgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbnMgPSB0aGlzLmRhdGFTb3VyY2VcbiAgICAgICAgICAgICAgICAuZ2V0RGF0YSgpXG4gICAgICAgICAgICAgICAgLnNvbWUoKGQpID0+XG4gICAgICAgICAgICAgICAgICAgIChkIGFzIE5vZGUpLnJlZlxuICAgICAgICAgICAgICAgICAgICAgICAgPyAoZCBhcyBOb2RlKS5yZWY/LmlkID09PSAodiBhcyBOb2RlKS5yZWY/LmlkXG4gICAgICAgICAgICAgICAgICAgICAgICA6IChkIGFzIFVzZXIpLmF1dGhvcml0eU5hbWUgPT09ICh2IGFzIFVzZXIpLmF1dGhvcml0eU5hbWUsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChjb250YWlucykge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTm9kZXMoW3ZdKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlLmFwcGVuZERhdGEoW3ZdLCAnYmVmb3JlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLnNlbGVjdGlvbi5zZWxlY3QoLi4udmlydHVhbCk7XG4gICAgICAgIHRoaXMudmlydHVhbE5vZGVzQWRkZWQuZW1pdCh2aXJ0dWFsIGFzIE5vZGVbXSk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHNldE9wdGlvbnMob3B0aW9uczogTGlzdE9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgdGhpcy5uZ09uQ2hhbmdlcygpO1xuICAgIH1cblxuICAgIGdldFNlbGVjdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uO1xuICAgIH1cblxuICAgIGFzeW5jIGluaXRPcHRpb25zR2VuZXJhdG9yKGNvbmZpZzogTGlzdE9wdGlvbnNDb25maWcpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5vcHRpb25zSGVscGVyLmluaXRDb21wb25lbnRzKGNvbmZpZy5hY3Rpb25iYXIsIHRoaXMpO1xuICAgICAgICB0aGlzLm9wdGlvbnNIZWxwZXIuc2V0RGF0YSh7XG4gICAgICAgICAgICBzY29wZTogdGhpcy5lbnRyaWVzU2VydmljZS5zY29wZSxcbiAgICAgICAgICAgIGFjdGl2ZU9iamVjdHM6IHRoaXMuZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uLnNlbGVjdGVkLFxuICAgICAgICAgICAgc2VsZWN0ZWRPYmplY3RzOiB0aGlzLmVudHJpZXNTZXJ2aWNlLnNlbGVjdGlvbi5zZWxlY3RlZCxcbiAgICAgICAgICAgIGFsbE9iamVjdHM6IHRoaXMuZGF0YVNvdXJjZS5nZXREYXRhKCksXG4gICAgICAgICAgICBwYXJlbnQ6IGNvbmZpZy5wYXJlbnQsXG4gICAgICAgICAgICBjdXN0b21PcHRpb25zOiBjb25maWcuY3VzdG9tT3B0aW9ucyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMub3B0aW9uc0hlbHBlci5yZWZyZXNoQ29tcG9uZW50cygpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgLy8gUHJldmVudCBjaGFuZ2VkLWFmdGVyLWNoZWNrZWQgZXJyb3JcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB0aGlzLnVwZGF0ZVRlbXBsYXRlcygpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVRlbXBsYXRlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZXNTZXJ2aWNlLnRpdGxlID0gdGhpcy50aXRsZVJlZjtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZXNTZXJ2aWNlLmVtcHR5ID0gdGhpcy5lbXB0eVJlZjtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZXNTZXJ2aWNlLmFjdGlvbkFyZWEgPSB0aGlzLmFjdGlvbkFyZWFSZWY7XG4gICAgICAgIHRoaXMudGVtcGxhdGVzU2VydmljZS5vdmVybGF5ID0gdGhpcy5vdmVybGF5UmVmO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJlc2V0IHRoZSBwYWdpbmF0aW9uIHRvIHRoZSBmaXJzdCBwYWdlXG4gICAgICogaGludDogdGhpcyB3aWxsIGRvIG5vdGhpbmcgaW4gY2FzZSB0aGUgcGFnaW5hdGlvblN0cmF0ZWd5ICE9PSBQYWdpbmF0aW9uXG4gICAgICovXG4gICAgcmVzZXRQYWdpbmF0aW9uKCkge1xuICAgICAgICB0aGlzLm5vZGVFbnRyaWVzQ29tcG9uZW50UmVmPy5wYWdpbmF0b3I/LmZpcnN0UGFnZSgpO1xuICAgIH1cblxuICAgIGRlbGV0ZU5vZGVzKG9iamVjdHM6IFRbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UucmVtb3ZlRGF0YShvYmplY3RzKTtcbiAgICAgICAgdGhpcy5nZXRTZWxlY3Rpb24oKS5jbGVhcigpO1xuICAgIH1cbn1cbiJdfQ==
|
|
336
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1lbnRyaWVzLXdyYXBwZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi9ub2RlLWVudHJpZXMvbm9kZS1lbnRyaWVzLXdyYXBwZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHSCxTQUFTLEVBRVQsWUFBWSxFQUVaLFlBQVksRUFDWixLQUFLLEVBS0wsTUFBTSxFQUtOLFNBQVMsR0FHWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRS9FLE9BQU8sRUFHSCxlQUFlLEVBUWYsc0JBQXNCLEdBQ3pCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQXdCLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFJNUYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFHaEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seUNBQXlDLENBQUM7Ozs7Ozs7Ozs7QUFXbkYsTUFBTSxPQUFPLDJCQUEyQjtJQXFGcEMsWUFDWSxnQkFBa0MsRUFDbEMsdUJBQWdELEVBQ2hELE1BQWMsRUFDZCxjQUFxQyxFQUN0QyxhQUF1QyxFQUN0QyxpQkFBb0MsRUFDcEMsU0FBb0I7SUFDNUIsUUFBUTtJQUNSLG1DQUFtQztJQUMzQixnQkFBNkMsRUFDN0MsaUJBQW9DLEVBQ3BDLFVBQXNCO1FBWHRCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsNEJBQXVCLEdBQXZCLHVCQUF1QixD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RyxlQUFlO3NCQUF2QixLQUFLO2dCQUlHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFFSSxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbXBvbmVudFJlZixcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5wdXQsXG4gICAgTmdab25lLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBzaWduYWwsXG4gICAgU2ltcGxlQ2hhbmdlLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFR5cGUsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDb250YWluZXJSZWYsXG4gICAgV3JpdGFibGVTaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTm9kZUVudHJpZXNUZW1wbGF0ZXNTZXJ2aWNlIH0gZnJvbSAnLi9ub2RlLWVudHJpZXMtdGVtcGxhdGVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm9kZUVudHJpZXNDb21wb25lbnQgfSBmcm9tICcuL25vZGUtZW50cmllcy5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgICBGZXRjaEV2ZW50LFxuICAgIEdyaWRDb25maWcsXG4gICAgSW50ZXJhY3Rpb25UeXBlLFxuICAgIExpc3REcmFnR3JvcENvbmZpZyxcbiAgICBMaXN0RXZlbnRJbnRlcmZhY2UsXG4gICAgTGlzdE9wdGlvbnMsXG4gICAgTGlzdE9wdGlvbnNDb25maWcsXG4gICAgTGlzdFNvcnRDb25maWcsXG4gICAgTm9kZUNsaWNrRXZlbnQsXG4gICAgTm9kZUVudHJpZXNEYXRhVHlwZSxcbiAgICBOb2RlRW50cmllc0Rpc3BsYXlUeXBlLFxufSBmcm9tICcuL2VudHJpZXMtbW9kZWwnO1xuaW1wb3J0IHsgTm9kZURhdGFTb3VyY2UgfSBmcm9tICcuL25vZGUtZGF0YS1zb3VyY2UnO1xuaW1wb3J0IHsgSGVscGVyIH0gZnJvbSAnLi4vdXRpbC9oZWxwZXInO1xuaW1wb3J0IHsgQ3VzdG9tU2VsZWN0aW9uTW9kZWwsIE5vZGVFbnRyaWVzU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL25vZGUtZW50cmllcy5zZXJ2aWNlJztcbmltcG9ydCB7IE9wdGlvbkl0ZW0sIFNjb3BlIH0gZnJvbSAnLi4vdHlwZXMvb3B0aW9uLWl0ZW0nO1xuaW1wb3J0IHsgTm9kZUhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9ub2RlLWhlbHBlci5zZXJ2aWNlJztcbmltcG9ydCB7IExpc3RJdGVtIH0gZnJvbSAnLi4vdHlwZXMvbGlzdC1pdGVtJztcbmltcG9ydCB7IFRlbXBvcmFyeVN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdGVtcG9yYXJ5LXN0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uUmVmZXJlbmNlLCBHZW5lcmljQXV0aG9yaXR5LCBOb2RlLCBVc2VyIH0gZnJvbSAnbmd4LWVkdS1zaGFyaW5nLWFwaSc7XG5pbXBvcnQgeyBWaXJ0dWFsTm9kZSB9IGZyb20gJy4uL3R5cGVzL2FwaS1tb2RlbHMnO1xuaW1wb3J0IHsgT3B0aW9uc0hlbHBlckRhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvb3B0aW9ucy1oZWxwZXItZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IFVJU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3VpLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2VzLW5vZGUtZW50cmllcy13cmFwcGVyJyxcbiAgICB0ZW1wbGF0ZTogYDxlcy1ub2RlLWVudHJpZXNcbiAgICAgICAgI25vZGVFbnRyaWVzQ29tcG9uZW50XG4gICAgICAgICpuZ0lmPVwiIWN1c3RvbU5vZGVMaXN0Q29tcG9uZW50XCJcbiAgICA+PC9lcy1ub2RlLWVudHJpZXM+YCxcbiAgICBwcm92aWRlcnM6IFtOb2RlRW50cmllc1NlcnZpY2UsIE9wdGlvbnNIZWxwZXJEYXRhU2VydmljZSwgTm9kZUVudHJpZXNUZW1wbGF0ZXNTZXJ2aWNlXSxcbn0pXG5leHBvcnQgY2xhc3MgTm9kZUVudHJpZXNXcmFwcGVyQ29tcG9uZW50PFQgZXh0ZW5kcyBOb2RlRW50cmllc0RhdGFUeXBlPlxuICAgIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgTGlzdEV2ZW50SW50ZXJmYWNlPFQ+XG57XG4gICAgLyoqXG4gICAgICogdGl0bGUgKGFib3ZlKSB0aGUgdGFibGUvZ3JpZFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoJ3RpdGxlJykgdGl0bGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgLyoqXG4gICAgICogZGF0YSBzaG93biB3aGVuIGRhdGEgc291cmNlIGlzIGVtcHR5XG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZCgnZW1wdHknKSBlbXB0eVJlZjogVGVtcGxhdGVSZWY8YW55PjtcbiAgICAvKipcbiAgICAgKiBjdXN0b20gYXJlYSBmb3IgYWN0aW9ucyBvbmx5IGZvciBOb2RlRW50cmllc0Rpc3BsYXlUeXBlLlNtYWxsR3JpZCAocGVyIGNhcmQgYXQgdGhlIGJvdHRvbSlcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKCdhY3Rpb25BcmVhJykgYWN0aW9uQXJlYVJlZjogVGVtcGxhdGVSZWY8YW55PjtcbiAgICAvKipcbiAgICAgKiBjdXN0b20gYXJlYSBmb3IgYW4gb3ZlcmxheSBcImFib3ZlXCIgZWFjaCBjYXJkIChpLmUuIHRvIHNob3cgZGlzYWJsZWQgaW5mb3MpLCBvbmx5IGZvciBOb2RlRW50cmllc0Rpc3BsYXlUeXBlLlNtYWxsR3JpZCAmIG9kZUVudHJpZXNEaXNwbGF5VHlwZS5HcmlkXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZCgnb3ZlcmxheScpIG92ZXJsYXlSZWY6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQFZpZXdDaGlsZCgnbm9kZUVudHJpZXNDb21wb25lbnQnKSBub2RlRW50cmllc0NvbXBvbmVudFJlZjogTm9kZUVudHJpZXNDb21wb25lbnQ8VD47XG4gICAgQElucHV0KCkgZGF0YVNvdXJjZTogTm9kZURhdGFTb3VyY2U8VD47XG4gICAgQElucHV0KCkgc2NvcGU6IFNjb3BlO1xuICAgIEBJbnB1dCgpIGNvbHVtbnM6IExpc3RJdGVtW107XG4gICAgQElucHV0KCkgY29uZmlndXJlQ29sdW1uczogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBjaGVja2JveCA9IHRydWU7XG4gICAgQE91dHB1dCgpIGNvbHVtbnNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPExpc3RJdGVtW10+KCk7XG4gICAgQElucHV0KCkgZ2xvYmFsT3B0aW9uczogT3B0aW9uSXRlbVtdO1xuICAgIEBJbnB1dCgpIGRpc3BsYXlUeXBlID0gTm9kZUVudHJpZXNEaXNwbGF5VHlwZS5HcmlkO1xuICAgIEBPdXRwdXQoKSBkaXNwbGF5VHlwZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Tm9kZUVudHJpZXNEaXNwbGF5VHlwZT4oKTtcbiAgICBASW5wdXQoKSBlbGVtZW50SW50ZXJhY3Rpb25UeXBlID0gSW50ZXJhY3Rpb25UeXBlLkRlZmF1bHRBY3Rpb25MaW5rO1xuICAgIEBJbnB1dCgpIHNvcnQ6IExpc3RTb3J0Q29uZmlnO1xuICAgIEBJbnB1dCgpIGRyYWdEcm9wOiBMaXN0RHJhZ0dyb3BDb25maWc8VD47XG4gICAgQElucHV0KCkgZ3JpZENvbmZpZzogR3JpZENvbmZpZztcblxuICAgIC8qKlxuICAgICAqIFRoaXMgY29sb3IgZGVmaW5lcyB0aGUgYmFzZSBjb2xvciBvZiBncmFkaWVudHMgdmlzdWFsbHkgbGltaXRpbmcgYSBncmlkIGluIHNjcm9sbCBkaXJlY3Rpb24uXG4gICAgICogRGVmYXVsdHMgdG8gd2hpdGUuXG4gICAgICovXG4gICAgQElucHV0KCkgc2Nyb2xsR3JhZGllbnRDb2xvcjogc3RyaW5nID0gJyNmZmYnO1xuXG4gICAgLyoqXG4gICAgICogdGhpcyBjYW4gYmUgc2V0IGluc3RlYWQgb2YgY2FsbGluZyBpbml0T3B0aW9uc0dlbmVyYXRvcigpXG4gICAgICovXG4gICAgQElucHV0KCkgaW5pdENvbmZpZzogTGlzdE9wdGlvbnNDb25maWc7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIG5vZGUtZW50cmllcyBpbnN0YW5jZSByZXByZXNlbnRzIHRoZSBwYWdlJ3MgbWFpbiBjb250ZW50LlxuICAgICAqXG4gICAgICogT25seSBzZXQgdG8gdHJ1ZSBmb3Igb25lIGluc3RhbmNlIHBlciBwYWdlLlxuICAgICAqXG4gICAgICogSWYgdHJ1ZSwgdGhpcyBpbnN0YW5jZSB3aWxsXG4gICAgICogLSBoYW5kbGUgcGFnZS13aWRlIGtleWJvYXJkIHNob3J0Y3V0c1xuICAgICAqIC0gdGFrZSBjb250cm9sIG9mIHRoZSBgcGFnZWAgYW5kIGBwYWdlU2l6ZWAgcXVlcnkgcGFyYW1ldGVycyBmb3IgcGFnaW5hdGlvblxuICAgICAqL1xuICAgIEBJbnB1dCgpIHByaW1hcnlJbnN0YW5jZTogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBVSSBoaW50cyBmb3Igd2hldGhlciBhIHNpbmdsZSBjbGljayB3aWxsIGNhdXNlIGEgZHluYW1pYyBhY3Rpb24uXG4gICAgICpcbiAgICAgKiBUaGlzIGRvZXMgbm90IGNvbmZpZ3VyZSB0aGUgYWN0dWFsIGJlaGF2aW9yIGJ1dCBvbmx5IFVJIGhpbnRzIHRvIHRoZSB1c2VyLiBIaW50cyBpbmNsdWRlXG4gICAgICogaG92ZXIgZWZmZWN0cyBhbmQgYSBjaGFuZ2VkIGN1cnNvci5cbiAgICAgKlxuICAgICAqIC0gV2hlbiBjaG9vc2luZyAnc3RhdGljJywgdGhlIGBjbGlja0l0ZW1gIGV2ZW50IHNob3VsZCB0cmlnZ2VyIHNvbWUgc3RhdGlvbmFyeSBhY3Rpb24gbGlrZVxuICAgICAqICAgc2VsZWN0aW5nIHRoZSBlbGVtZW50IG9yIGRpc3BsYXlpbmcgaW5mb3JtYXRpb24gaW4gYSBjb21wbGVtZW50YXJ5IHBhZ2UgYXJlYS4gVGhlXG4gICAgICogICBgZGJsQ2xpY2tJdGVtYCBldmVudCBjYW4gYmUgdXNlZCBmb3IgYSBtb3JlIGRpc3J1cHRpdmUgYWN0aW9uLlxuICAgICAqIC0gV2hlbiBjaG9vc2luZyAnZHluYW1pYycsIHRoZSBgY2xpY2tJdGVtYCBldmVudCBzaG91bGQgdHJpZ2dlciBhIG1ham9yIGFjdGlvbiBsaWtlXG4gICAgICogICBuYXZpZ2F0aW5nIHRvIGEgbmV3IHBhZ2Ugb3IgY2xvc2luZyBhIGRpYWxvZy5cbiAgICAgKi9cbiAgICAvLyBUT0RPOiBDb25zaWRlciBjb250cm9sbGluZyB0aGUgdWkgaGludHMgYW5kIHRoZSBhY3R1YWwgYmVoYXZpb3Igd2l0aCBhIHNpbmdsZSBvcHRpb24uXG4gICAgQElucHV0KCkgc2luZ2xlQ2xpY2tIaW50OiAnZHluYW1pYycgfCAnc3RhdGljJyA9ICdkeW5hbWljJztcbiAgICAvKipcbiAgICAgKiBEbyBub3QgbG9hZCBtb3JlIGRhdGEgb24gc2Nyb2xsLlxuICAgICAqL1xuICAgIEBJbnB1dCgpIGRpc2FibGVJbmZpbml0ZVNjcm9sbCA9IGZhbHNlO1xuXG4gICAgQE91dHB1dCgpIGZldGNoRGF0YSA9IG5ldyBFdmVudEVtaXR0ZXI8RmV0Y2hFdmVudD4oKTtcbiAgICBAT3V0cHV0KCkgY2xpY2tJdGVtID0gbmV3IEV2ZW50RW1pdHRlcjxOb2RlQ2xpY2tFdmVudDxUPj4oKTtcbiAgICBAT3V0cHV0KCkgZGJsQ2xpY2tJdGVtID0gbmV3IEV2ZW50RW1pdHRlcjxOb2RlQ2xpY2tFdmVudDxUPj4oKTtcbiAgICBAT3V0cHV0KCkgc29ydENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8TGlzdFNvcnRDb25maWc+KCk7XG4gICAgQE91dHB1dCgpIHZpcnR1YWxOb2Rlc0FkZGVkO1xuICAgIEBPdXRwdXQoKSBkaXNwbGF5VHlwZUNoYW5nZWQ7XG5cbiAgICBjdXN0b21Ob2RlTGlzdENvbXBvbmVudDogVHlwZTxOb2RlRW50cmllc0NvbXBvbmVudDxUPj47XG4gICAgcHJpdmF0ZSBjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxOb2RlRW50cmllc0NvbXBvbmVudDxUPj47XG4gICAgcHJpdmF0ZSBvcHRpb25zOiBMaXN0T3B0aW9ucztcbiAgICBwcml2YXRlIGRlc3Ryb3llZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgICAgICBwcml2YXRlIHRlbXBvcmFyeVN0b3JhZ2VTZXJ2aWNlOiBUZW1wb3JhcnlTdG9yYWdlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICAgICAgcHJpdmF0ZSBlbnRyaWVzU2VydmljZTogTm9kZUVudHJpZXNTZXJ2aWNlPFQ+LFxuICAgICAgICBwdWJsaWMgb3B0aW9uc0hlbHBlcjogT3B0aW9uc0hlbHBlckRhdGFTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG5vZGVIZWxwZXJTZXJ2aWNlOiBOb2RlSGVscGVyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB1aVNlcnZpY2U6IFVJU2VydmljZSxcbiAgICAgICAgLy8gQFRPRE9cbiAgICAgICAgLy8gcHJpdmF0ZSBtYWluTmF2OiBNYWluTmF2U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB0ZW1wbGF0ZXNTZXJ2aWNlOiBOb2RlRW50cmllc1RlbXBsYXRlc1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgKSB7XG4gICAgICAgIC8vIHJlZ3VsYXJ5IHJlLWJpbmQgdGVtcGxhdGUgc2luY2UgaXQgbWlnaHQgaGF2ZSB1cGRhdGVkIHdpdGhvdXQgbmdDaGFuZ2VzIHRyaWdnZXJcbiAgICAgICAgLypcbiAgICAgICAgbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+XG4gICAgICAgICAgICBzZXRJbnRlcnZhbCgoKSA9PiB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5lbXB0eVJlZiA9IHRoaXMuZW1wdHlSZWYpXG4gICAgICAgICk7XG4gICAgICAgICovXG4gICAgICAgIHRoaXMudmlydHVhbE5vZGVzQWRkZWQgPSB0aGlzLm9wdGlvbnNIZWxwZXIudmlydHVhbE5vZGVzQWRkZWQ7XG4gICAgICAgIHRoaXMuZGlzcGxheVR5cGVDaGFuZ2VkID0gdGhpcy5vcHRpb25zSGVscGVyLmRpc3BsYXlUeXBlQ2hhbmdlZDtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uY2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9uc0hlbHBlci5nZXREYXRhKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnNIZWxwZXIuZ2V0RGF0YSgpLnNlbGVjdGVkT2JqZWN0cyA9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uLnNlbGVjdGVkO1xuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9uc0hlbHBlci5nZXREYXRhKCkuYWN0aXZlT2JqZWN0cyA9IHRoaXMuZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uLnNlbGVjdGVkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ29wdGlvbnNIZWxwZXIgaXMgbm90IGluaXRhbGl6ZWQgY29ycmVjdGx5OyBkYXRhIGlzIGVtcHR5Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnNIZWxwZXIucmVmcmVzaENvbXBvbmVudHMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnByaW1hcnlJbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zSGVscGVyLnJlZ2lzdGVyR2xvYmFsS2V5Ym9hcmRTaG9ydGN1dHMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IHsgW2tleTogc3RyaW5nXTogU2ltcGxlQ2hhbmdlIH0gPSB7fSkge1xuICAgICAgICBpZiAoIXRoaXMuY29tcG9uZW50UmVmKSB7XG4gICAgICAgICAgICB0aGlzLmluaXQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLmxpc3QgPSB0aGlzO1xuICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLmRhdGFTb3VyY2UgPSB0aGlzLmRhdGFTb3VyY2U7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2Uuc2NvcGUgPSB0aGlzLnNjb3BlO1xuICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2UuY29uZmlndXJlQ29sdW1ucyA9IHRoaXMuY29uZmlndXJlQ29sdW1ucztcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5jaGVja2JveCA9IHRoaXMuY2hlY2tib3g7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2UuZGlzcGxheVR5cGUgPSB0aGlzLmRpc3BsYXlUeXBlO1xuICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLmVsZW1lbnRJbnRlcmFjdGlvblR5cGUgPSB0aGlzLmVsZW1lbnRJbnRlcmFjdGlvblR5cGU7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2UuZ3JpZENvbmZpZyA9IHRoaXMuZ3JpZENvbmZpZztcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5vcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLmdsb2JhbE9wdGlvbnMgPSB0aGlzLmdsb2JhbE9wdGlvbnM7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2Uuc29ydCA9IHRoaXMuc29ydDtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5zb3J0Q2hhbmdlID0gdGhpcy5zb3J0Q2hhbmdlO1xuICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLmRyYWdEcm9wID0gdGhpcy5kcmFnRHJvcDtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5jbGlja0l0ZW0gPSB0aGlzLmNsaWNrSXRlbTtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5kYmxDbGlja0l0ZW0gPSB0aGlzLmRibENsaWNrSXRlbTtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5mZXRjaERhdGEgPSB0aGlzLmZldGNoRGF0YTtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5wcmltYXJ5SW5zdGFuY2UgPSB0aGlzLnByaW1hcnlJbnN0YW5jZTtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5zaW5nbGVDbGlja0hpbnQgPSB0aGlzLnNpbmdsZUNsaWNrSGludDtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5kaXNhYmxlSW5maW5pdGVTY3JvbGwgPSB0aGlzLmRpc2FibGVJbmZpbml0ZVNjcm9sbDtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5zY3JvbGxHcmFkaWVudENvbG9yLnNldCh0aGlzLnNjcm9sbEdyYWRpZW50Q29sb3IpO1xuXG4gICAgICAgIGlmIChjaGFuZ2VzWydpbml0Q29uZmlnJ10pIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdE9wdGlvbnNHZW5lcmF0b3IodGhpcy5pbml0Q29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb21wb25lbnRSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLmNoYW5nZURldGVjdG9yUmVmPy5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVGhpcyBtaWdodCBuZWVkIHdyYXBwaW5nIHdpdGggYHNldFRpbWVvdXRgLlxuICAgICAgICB0aGlzLnVwZGF0ZVRlbXBsYXRlcygpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3llZC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveWVkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVwbGFjZXMgdGhpcyB3cmFwcGVyIHdpdGggdGhlIGNvbmZpZ3VyZWQgY3VzdG9tLW5vZGUtbGlzdCBjb21wb25lbnQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBpbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmN1c3RvbU5vZGVMaXN0Q29tcG9uZW50ID0gdGhpcy50ZW1wb3JhcnlTdG9yYWdlU2VydmljZS5nZXQoXG4gICAgICAgICAgICBUZW1wb3JhcnlTdG9yYWdlU2VydmljZS5DVVNUT01fTk9ERV9FTlRSSUVTX0NPTVBPTkVOVCxcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0aGlzLmN1c3RvbU5vZGVMaXN0Q29tcG9uZW50ID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZiA9IHRoaXMudWlTZXJ2aWNlLmluamVjdEFuZ3VsYXJDb21wb25lbnQoXG4gICAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXJSZWYsXG4gICAgICAgICAgICB0aGlzLmN1c3RvbU5vZGVMaXN0Q29tcG9uZW50LFxuICAgICAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAvLyBJbnB1dCBiaW5kaW5ncyBhcmUgaW5pdGlhbGl6ZWQgaW4gYG5nT25DaGFuZ2VzYC5cbiAgICAgICAgICAgIHRoaXMuZ2V0T3V0cHV0QmluZGluZ3MoKSxcbiAgICAgICAgKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHNpbXBsZSBtYXAgb2YgdGhlIG91dHB1dCBiaW5kaW5ncyBkZWZpbmVkIGluIHRoaXMgY29tcG9uZW50LlxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0T3V0cHV0QmluZGluZ3MoKTogeyBba2V5OiBzdHJpbmddOiBFdmVudEVtaXR0ZXI8YW55PiB9IHtcbiAgICAgICAgY29uc3Qgb3V0cHV0QmluZGluZ3M6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcykpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gKHRoaXMgYXMgYW55KVtrZXldO1xuICAgICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRXZlbnRFbWl0dGVyKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0QmluZGluZ3Nba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXRCaW5kaW5ncztcbiAgICB9XG5cbiAgICBnZXREaXNwbGF5VHlwZSgpOiBOb2RlRW50cmllc0Rpc3BsYXlUeXBlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzcGxheVR5cGU7XG4gICAgfVxuXG4gICAgc2V0RGlzcGxheVR5cGUoZGlzcGxheVR5cGU6IE5vZGVFbnRyaWVzRGlzcGxheVR5cGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5VHlwZSA9IGRpc3BsYXlUeXBlO1xuICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLmRpc3BsYXlUeXBlID0gZGlzcGxheVR5cGU7XG4gICAgICAgIHRoaXMubmdPbkNoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5kaXNwbGF5VHlwZUNoYW5nZS5lbWl0KGRpc3BsYXlUeXBlKTtcbiAgICB9XG5cbiAgICB1cGRhdGVOb2Rlcyhub2Rlczogdm9pZCB8IFRbXSkge1xuICAgICAgICBpZiAoIW5vZGVzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmdldERhdGEoKS5mb3JFYWNoKChkKSA9PiB7XG4gICAgICAgICAgICBsZXQgaGl0cyA9IChub2RlcyBhcyBUW10pLmZpbHRlcigobikgPT5cbiAgICAgICAgICAgICAgICAobiBhcyBOb2RlKT8ucmVmXG4gICAgICAgICAgICAgICAgICAgID8gKG4gYXMgTm9kZSk/LnJlZi5pZCA9PT0gKGQgYXMgTm9kZSk/LnJlZi5pZFxuICAgICAgICAgICAgICAgICAgICA6IChuIGFzIEdlbmVyaWNBdXRob3JpdHkpPy5hdXRob3JpdHlOYW1lID09PVxuICAgICAgICAgICAgICAgICAgICAgIChkIGFzIEdlbmVyaWNBdXRob3JpdHkpPy5hdXRob3JpdHlOYW1lLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChoaXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBpZiB0aGUgb3JpZ2luYWwgaGFzIGNoYW5nZWQgKGZvciBjb2xsZWN0aW9uIHJlZnMpXG4gICAgICAgICAgICAgICAgaGl0cyA9IChub2RlcyBhcyBUW10pLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgKG4pID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAobiBhcyBOb2RlKT8ucmVmICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAobiBhcyBOb2RlKT8ucmVmPy5pZCA9PT0gKGQgYXMgdW5rbm93biBhcyBDb2xsZWN0aW9uUmVmZXJlbmNlKT8ub3JpZ2luYWxJZCxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGhpdHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2NvcHknLCBkLCBoaXRzKTtcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGVIZWxwZXJTZXJ2aWNlLmNvcHlEYXRhVG9Ob2RlKGQgYXMgTm9kZSwgaGl0c1swXSBhcyBOb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIHRyaWdnZXIgcmVidWlsZFxuICAgICAgICBpZiAodGhpcy5kYXRhU291cmNlIGluc3RhbmNlb2YgTm9kZURhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgICh0aGlzLmRhdGFTb3VyY2UgYXMgTm9kZURhdGFTb3VyY2U8VD4pLnJlZnJlc2goKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvbGRTZWxlY3Rpb24gPSB0aGlzLmVudHJpZXNTZXJ2aWNlLnNlbGVjdGlvbi5zZWxlY3RlZDtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uc2VsZWN0KFxuICAgICAgICAgICAgLi4ub2xkU2VsZWN0aW9uLm1hcChcbiAgICAgICAgICAgICAgICAobykgPT4gdGhpcy5kYXRhU291cmNlLmdldERhdGEoKS5maWx0ZXIoKGQpID0+IEhlbHBlci5vYmplY3RFcXVhbHMobywgZCkpPy5bMF0sXG4gICAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBzaG93UmVvcmRlckNvbHVtbnNEaWFsb2coKTogdm9pZCB7fVxuXG4gICAgYWRkVmlydHVhbE5vZGVzKHZpcnR1YWw6IFRbXSk6IHZvaWQge1xuICAgICAgICB2aXJ0dWFsID0gdmlydHVhbC5tYXAoKG8pID0+IHtcbiAgICAgICAgICAgIChvIGFzIFZpcnR1YWxOb2RlKS52aXJ0dWFsID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBvO1xuICAgICAgICB9KTtcbiAgICAgICAgdmlydHVhbC5mb3JFYWNoKCh2KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb250YWlucyA9IHRoaXMuZGF0YVNvdXJjZVxuICAgICAgICAgICAgICAgIC5nZXREYXRhKClcbiAgICAgICAgICAgICAgICAuc29tZSgoZCkgPT5cbiAgICAgICAgICAgICAgICAgICAgKGQgYXMgTm9kZSkucmVmXG4gICAgICAgICAgICAgICAgICAgICAgICA/IChkIGFzIE5vZGUpLnJlZj8uaWQgPT09ICh2IGFzIE5vZGUpLnJlZj8uaWRcbiAgICAgICAgICAgICAgICAgICAgICAgIDogKGQgYXMgVXNlcikuYXV0aG9yaXR5TmFtZSA9PT0gKHYgYXMgVXNlcikuYXV0aG9yaXR5TmFtZSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGNvbnRhaW5zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVOb2Rlcyhbdl0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UuYXBwZW5kRGF0YShbdl0sICdiZWZvcmUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uLnNlbGVjdCguLi52aXJ0dWFsKTtcbiAgICAgICAgdGhpcy52aXJ0dWFsTm9kZXNBZGRlZC5lbWl0KHZpcnR1YWwgYXMgTm9kZVtdKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgc2V0T3B0aW9ucyhvcHRpb25zOiBMaXN0T3B0aW9ucyk6IHZvaWQge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLm5nT25DaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgZ2V0U2VsZWN0aW9uKCk6IEN1c3RvbVNlbGVjdGlvbk1vZGVsPFQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uO1xuICAgIH1cblxuICAgIGFzeW5jIGluaXRPcHRpb25zR2VuZXJhdG9yKGNvbmZpZzogTGlzdE9wdGlvbnNDb25maWcpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5vcHRpb25zSGVscGVyLmluaXRDb21wb25lbnRzKGNvbmZpZy5hY3Rpb25iYXIsIHRoaXMpO1xuICAgICAgICB0aGlzLm9wdGlvbnNIZWxwZXIuc2V0RGF0YSh7XG4gICAgICAgICAgICBzY29wZTogdGhpcy5lbnRyaWVzU2VydmljZS5zY29wZSxcbiAgICAgICAgICAgIGFjdGl2ZU9iamVjdHM6IHRoaXMuZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uLnNlbGVjdGVkLFxuICAgICAgICAgICAgc2VsZWN0ZWRPYmplY3RzOiB0aGlzLmVudHJpZXNTZXJ2aWNlLnNlbGVjdGlvbi5zZWxlY3RlZCxcbiAgICAgICAgICAgIGFsbE9iamVjdHM6IHRoaXMuZGF0YVNvdXJjZS5nZXREYXRhKCksXG4gICAgICAgICAgICBwYXJlbnQ6IGNvbmZpZy5wYXJlbnQsXG4gICAgICAgICAgICBjdXN0b21PcHRpb25zOiBjb25maWcuY3VzdG9tT3B0aW9ucyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMub3B0aW9uc0hlbHBlci5yZWZyZXNoQ29tcG9uZW50cygpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgLy8gUHJldmVudCBjaGFuZ2VkLWFmdGVyLWNoZWNrZWQgZXJyb3JcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB0aGlzLnVwZGF0ZVRlbXBsYXRlcygpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVRlbXBsYXRlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZXNTZXJ2aWNlLnRpdGxlID0gdGhpcy50aXRsZVJlZjtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZXNTZXJ2aWNlLmVtcHR5ID0gdGhpcy5lbXB0eVJlZjtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZXNTZXJ2aWNlLmFjdGlvbkFyZWEgPSB0aGlzLmFjdGlvbkFyZWFSZWY7XG4gICAgICAgIHRoaXMudGVtcGxhdGVzU2VydmljZS5vdmVybGF5ID0gdGhpcy5vdmVybGF5UmVmO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJlc2V0IHRoZSBwYWdpbmF0aW9uIHRvIHRoZSBmaXJzdCBwYWdlXG4gICAgICogaGludDogdGhpcyB3aWxsIGRvIG5vdGhpbmcgaW4gY2FzZSB0aGUgcGFnaW5hdGlvblN0cmF0ZWd5ICE9PSBQYWdpbmF0aW9uXG4gICAgICovXG4gICAgcmVzZXRQYWdpbmF0aW9uKCkge1xuICAgICAgICB0aGlzLm5vZGVFbnRyaWVzQ29tcG9uZW50UmVmPy5wYWdpbmF0b3I/LmZpcnN0UGFnZSgpO1xuICAgIH1cblxuICAgIGRlbGV0ZU5vZGVzKG9iamVjdHM6IFRbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UucmVtb3ZlRGF0YShvYmplY3RzKTtcbiAgICAgICAgdGhpcy5nZXRTZWxlY3Rpb24oKS5jbGVhcigpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -117,11 +117,11 @@ export class NodeEntriesComponent {
|
|
|
117
117
|
});
|
|
118
118
|
}
|
|
119
119
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: NodeEntriesComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.NodeEntriesGlobalService }, { token: i2.NodeEntriesService }, { token: i3.NodeEntriesTemplatesService }, { token: i4.KeyboardShortcutsService, optional: true }, { token: i5.ActivatedRoute }, { token: i6.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
120
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", type: NodeEntriesComponent, selector: "es-node-entries", viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }], ngImport: i0, template: "<div class=\"top-matter\">\n <div class=\"title\">\n <ng-container *ngTemplateOutlet=\"templatesService.title\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"templatesService.entriesTopMatter\"></ng-container>\n</div>\n<ng-container *ngIf=\"entriesService.dataSource\">\n <ng-container *ngIf=\"entriesService.displayType === NodeEntriesDisplayType.Table\">\n <es-node-entries-table></es-node-entries-table>\n </ng-container>\n <ng-container\n *ngIf=\"\n entriesService.displayType === NodeEntriesDisplayType.SmallGrid ||\n entriesService.displayType === NodeEntriesDisplayType.Grid\n \"\n >\n <es-node-entries-card-grid [displayType]=\"entriesService.displayType\">\n </es-node-entries-card-grid>\n </ng-container>\n <ng-container *ngIf=\"entriesService.dataSource.isEmpty() && !entriesService.dataSource.isLoading\">\n <ng-container *ngTemplateOutlet=\"templatesService.empty\"></ng-container>\n </ng-container>\n</ng-container>\n<mat-paginator\n #paginator\n [pageSizeOptions]=\"entriesGlobalService.getPaginatorSizeOptions(entriesService.scope)\"\n *ngIf=\"entriesService.paginationStrategy === 'paginator'\"\n [class.display-none]=\"\n (entriesService.dataSource.isLoading && entriesService.dataSource.isLoading !== 'page') ||\n entriesService.dataSource.isEmpty()\n \"\n (page)=\"openPage($event)\"\n></mat-paginator>\n", styles: [".top-matter{display:flex;align-items:center;flex-wrap:wrap;gap:12px
|
|
120
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", type: NodeEntriesComponent, selector: "es-node-entries", viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }], ngImport: i0, template: "<div class=\"top-matter\">\n <div class=\"title\">\n <ng-container *ngTemplateOutlet=\"templatesService.title\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"templatesService.entriesTopMatter\"></ng-container>\n</div>\n<ng-container *ngIf=\"entriesService.dataSource\">\n <ng-container *ngIf=\"entriesService.displayType === NodeEntriesDisplayType.Table\">\n <es-node-entries-table></es-node-entries-table>\n </ng-container>\n <ng-container\n *ngIf=\"\n entriesService.displayType === NodeEntriesDisplayType.SmallGrid ||\n entriesService.displayType === NodeEntriesDisplayType.Grid\n \"\n >\n <es-node-entries-card-grid [displayType]=\"entriesService.displayType\">\n </es-node-entries-card-grid>\n </ng-container>\n <ng-container *ngIf=\"entriesService.dataSource.isEmpty() && !entriesService.dataSource.isLoading\">\n <ng-container *ngTemplateOutlet=\"templatesService.empty\"></ng-container>\n </ng-container>\n</ng-container>\n<mat-paginator\n #paginator\n [pageSizeOptions]=\"entriesGlobalService.getPaginatorSizeOptions(entriesService.scope)\"\n *ngIf=\"entriesService.paginationStrategy === 'paginator'\"\n [class.display-none]=\"\n (entriesService.dataSource.isLoading && entriesService.dataSource.isLoading !== 'page') ||\n entriesService.dataSource.isEmpty()\n \"\n (page)=\"openPage($event)\"\n></mat-paginator>\n", styles: [".top-matter{display:flex;align-items:center;flex-wrap:wrap;gap:12px 10px;position:relative;z-index:1}.top-matter .title{display:flex;flex-grow:1}\n"], dependencies: [{ kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i8.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "component", type: i9.NodeEntriesCardGridComponent, selector: "es-node-entries-card-grid", inputs: ["displayType"] }, { kind: "component", type: i10.NodeEntriesTableComponent, selector: "es-node-entries-table" }] }); }
|
|
121
121
|
}
|
|
122
122
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: NodeEntriesComponent, decorators: [{
|
|
123
123
|
type: Component,
|
|
124
|
-
args: [{ selector: 'es-node-entries', template: "<div class=\"top-matter\">\n <div class=\"title\">\n <ng-container *ngTemplateOutlet=\"templatesService.title\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"templatesService.entriesTopMatter\"></ng-container>\n</div>\n<ng-container *ngIf=\"entriesService.dataSource\">\n <ng-container *ngIf=\"entriesService.displayType === NodeEntriesDisplayType.Table\">\n <es-node-entries-table></es-node-entries-table>\n </ng-container>\n <ng-container\n *ngIf=\"\n entriesService.displayType === NodeEntriesDisplayType.SmallGrid ||\n entriesService.displayType === NodeEntriesDisplayType.Grid\n \"\n >\n <es-node-entries-card-grid [displayType]=\"entriesService.displayType\">\n </es-node-entries-card-grid>\n </ng-container>\n <ng-container *ngIf=\"entriesService.dataSource.isEmpty() && !entriesService.dataSource.isLoading\">\n <ng-container *ngTemplateOutlet=\"templatesService.empty\"></ng-container>\n </ng-container>\n</ng-container>\n<mat-paginator\n #paginator\n [pageSizeOptions]=\"entriesGlobalService.getPaginatorSizeOptions(entriesService.scope)\"\n *ngIf=\"entriesService.paginationStrategy === 'paginator'\"\n [class.display-none]=\"\n (entriesService.dataSource.isLoading && entriesService.dataSource.isLoading !== 'page') ||\n entriesService.dataSource.isEmpty()\n \"\n (page)=\"openPage($event)\"\n></mat-paginator>\n", styles: [".top-matter{display:flex;align-items:center;flex-wrap:wrap;gap:12px
|
|
124
|
+
args: [{ selector: 'es-node-entries', template: "<div class=\"top-matter\">\n <div class=\"title\">\n <ng-container *ngTemplateOutlet=\"templatesService.title\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"templatesService.entriesTopMatter\"></ng-container>\n</div>\n<ng-container *ngIf=\"entriesService.dataSource\">\n <ng-container *ngIf=\"entriesService.displayType === NodeEntriesDisplayType.Table\">\n <es-node-entries-table></es-node-entries-table>\n </ng-container>\n <ng-container\n *ngIf=\"\n entriesService.displayType === NodeEntriesDisplayType.SmallGrid ||\n entriesService.displayType === NodeEntriesDisplayType.Grid\n \"\n >\n <es-node-entries-card-grid [displayType]=\"entriesService.displayType\">\n </es-node-entries-card-grid>\n </ng-container>\n <ng-container *ngIf=\"entriesService.dataSource.isEmpty() && !entriesService.dataSource.isLoading\">\n <ng-container *ngTemplateOutlet=\"templatesService.empty\"></ng-container>\n </ng-container>\n</ng-container>\n<mat-paginator\n #paginator\n [pageSizeOptions]=\"entriesGlobalService.getPaginatorSizeOptions(entriesService.scope)\"\n *ngIf=\"entriesService.paginationStrategy === 'paginator'\"\n [class.display-none]=\"\n (entriesService.dataSource.isLoading && entriesService.dataSource.isLoading !== 'page') ||\n entriesService.dataSource.isEmpty()\n \"\n (page)=\"openPage($event)\"\n></mat-paginator>\n", styles: [".top-matter{display:flex;align-items:center;flex-wrap:wrap;gap:12px 10px;position:relative;z-index:1}.top-matter .title{display:flex;flex-grow:1}\n"] }]
|
|
125
125
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.NodeEntriesGlobalService }, { type: i2.NodeEntriesService }, { type: i3.NodeEntriesTemplatesService }, { type: i4.KeyboardShortcutsService, decorators: [{
|
|
126
126
|
type: Optional
|
|
127
127
|
}] }, { type: i5.ActivatedRoute }, { type: i6.TranslateService }]; }, propDecorators: { paginator: [{
|
|
@@ -11,14 +11,13 @@ import * as i5 from "@angular/material/button";
|
|
|
11
11
|
import * as i6 from "@angular/material/tooltip";
|
|
12
12
|
import * as i7 from "@ngx-translate/core";
|
|
13
13
|
export class NodeRatingComponent {
|
|
14
|
-
constructor(toast, configService, networkApi, authenticationService, changeDetectorRef) {
|
|
14
|
+
constructor(toast, configService, networkApi, authenticationService, changeDetectorRef, ratingService) {
|
|
15
15
|
this.toast = toast;
|
|
16
16
|
this.configService = configService;
|
|
17
17
|
this.networkApi = networkApi;
|
|
18
18
|
this.authenticationService = authenticationService;
|
|
19
19
|
this.changeDetectorRef = changeDetectorRef;
|
|
20
|
-
|
|
21
|
-
this.ratingService = {};
|
|
20
|
+
this.ratingService = ratingService;
|
|
22
21
|
}
|
|
23
22
|
async ngOnInit() {
|
|
24
23
|
await this.configService.observeConfig().pipe(take(1)).toPromise();
|
|
@@ -29,7 +28,12 @@ export class NodeRatingComponent {
|
|
|
29
28
|
const name = RestHelper.getTitle(this.node);
|
|
30
29
|
if (this.node.rating?.user) {
|
|
31
30
|
try {
|
|
32
|
-
await this.ratingService
|
|
31
|
+
await this.ratingService
|
|
32
|
+
.deleteRating({
|
|
33
|
+
repository: this.node.ref.repo,
|
|
34
|
+
node: this.node.ref.id,
|
|
35
|
+
})
|
|
36
|
+
.toPromise();
|
|
33
37
|
this.toast.toast('RATING.TOAST.LIKE_REMOVED', { name });
|
|
34
38
|
this.node.rating.user = 0;
|
|
35
39
|
this.node.rating.overall.count--;
|
|
@@ -40,7 +44,14 @@ export class NodeRatingComponent {
|
|
|
40
44
|
}
|
|
41
45
|
else {
|
|
42
46
|
try {
|
|
43
|
-
await this.ratingService
|
|
47
|
+
await this.ratingService
|
|
48
|
+
.addOrUpdateRating({
|
|
49
|
+
repository: this.node.ref.repo,
|
|
50
|
+
node: this.node.ref.id,
|
|
51
|
+
rating: 5,
|
|
52
|
+
body: null,
|
|
53
|
+
})
|
|
54
|
+
.toPromise();
|
|
44
55
|
this.toast.toast('RATING.TOAST.LIKED', { name });
|
|
45
56
|
this.node.rating.user = 5;
|
|
46
57
|
this.node.rating.overall.count++;
|
|
@@ -63,7 +74,14 @@ export class NodeRatingComponent {
|
|
|
63
74
|
async setRating(rating) {
|
|
64
75
|
const name = RestHelper.getTitle(this.node);
|
|
65
76
|
try {
|
|
66
|
-
await this.ratingService
|
|
77
|
+
await this.ratingService
|
|
78
|
+
.addOrUpdateRating({
|
|
79
|
+
repository: this.node.ref.repo,
|
|
80
|
+
node: this.node.ref.id,
|
|
81
|
+
rating,
|
|
82
|
+
body: null,
|
|
83
|
+
})
|
|
84
|
+
.toPromise();
|
|
67
85
|
this.toast.toast('RATING.TOAST.RATED', { name, rating });
|
|
68
86
|
this.node.rating.overall.count += this.node.rating.user ? 0 : 1;
|
|
69
87
|
this.node.rating.user = rating;
|
|
@@ -76,7 +94,12 @@ export class NodeRatingComponent {
|
|
|
76
94
|
async deleteRating() {
|
|
77
95
|
const name = RestHelper.getTitle(this.node);
|
|
78
96
|
try {
|
|
79
|
-
await this.ratingService
|
|
97
|
+
await this.ratingService
|
|
98
|
+
.deleteRating({
|
|
99
|
+
repository: this.node.ref.repo,
|
|
100
|
+
node: this.node.ref.id,
|
|
101
|
+
})
|
|
102
|
+
.toPromise();
|
|
80
103
|
this.toast.toast('RATING.TOAST.RATING_REMOVED', { name });
|
|
81
104
|
this.node.rating.overall.count--;
|
|
82
105
|
this.node.rating.overall.sum -= this.node.rating.user;
|
|
@@ -90,13 +113,13 @@ export class NodeRatingComponent {
|
|
|
90
113
|
isFromHomeRepo(node) {
|
|
91
114
|
return this.networkApi.isFromHomeRepository(node);
|
|
92
115
|
}
|
|
93
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: NodeRatingComponent, deps: [{ token: i1.Toast }, { token: i2.ConfigService }, { token: i2.NetworkService }, { token: i2.AuthenticationService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
94
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", type: NodeRatingComponent, selector: "es-node-rating", inputs: { node: "node" }, ngImport: i0, template: "<ng-container *ngIf=\"hasPermission && node.type === 'ccm:io' && isFromHomeRepo(node)\">\n <div *ngIf=\"mode === 'likes'\" class=\"likes\">\n <button\n (click)=\"toogleLike()\"\n [disabled]=\"(this.authenticationService.observeLoginInfo() | async)?.isGuest\"\n mat-icon-button\n color=\"primary\"\n matTooltip=\"{{ 'RATING.LIKES' | translate }}\"\n >\n <i [esIcon]=\"'edu-thumb_up' + (!node.rating?.user ? '_off' : '')\"></i>\n </button>\n <span matTooltip=\"{{ 'RATING.COUNT_LIKES' | translate }}\">{{\n node.rating?.overall.count\n }}</span>\n </div>\n <div *ngIf=\"mode === 'stars'\" class=\"stars\" mat-icon-button color=\"primary\">\n <button\n *ngFor=\"let rating of [1, 2, 3, 4, 5]\"\n mat-icon-button\n color=\"primary\"\n class=\"star\"\n (click)=\"setRating(rating)\"\n [disabled]=\"(this.authenticationService.observeLoginInfo() | async)?.isGuest\"\n (focus)=\"hoverStar = rating\"\n (mouseenter)=\"hoverStar = rating\"\n (mouseleave)=\"hoverStar = 0\"\n (blur)=\"hoverStar = 0\"\n [class.star-hover]=\"hoverStar >= rating\"\n >\n <i\n [esIcon]=\"\n 'star' +\n ((hoverStar ? hoverStar >= rating : getPrimaryRating() >= rating) ? '' : '_border')\n \"\n matTooltip=\"{{ 'RATING.STARS_RATE' | translate : { rating: rating } }}\"\n ></i>\n </button>\n <button\n *ngIf=\"!!node.rating?.user\"\n mat-icon-button\n color=\"primary\"\n class=\"delete\"\n matTooltip=\"{{ 'RATING.DELETE_RATING' | translate }}\"\n (click)=\"deleteRating()\"\n [disabled]=\"(this.authenticationService.observeLoginInfo() | async)?.isGuest\"\n >\n <i esIcon=\"clear\"></i>\n </button>\n <span matTooltip=\"{{ 'RATING.COUNT_RATINGS' | translate }}\"\n >({{ node.rating?.overall.count }})</span\n >\n </div>\n</ng-container>\n", styles: [".stars{display:flex;align-items:center}.stars span{padding-left:8px}.likes{display:flex;align-items:center}.
|
|
116
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: NodeRatingComponent, deps: [{ token: i1.Toast }, { token: i2.ConfigService }, { token: i2.NetworkService }, { token: i2.AuthenticationService }, { token: i0.ChangeDetectorRef }, { token: i2.RatingV1Service }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
117
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", type: NodeRatingComponent, selector: "es-node-rating", inputs: { node: "node" }, ngImport: i0, template: "<ng-container *ngIf=\"hasPermission && node.type === 'ccm:io' && isFromHomeRepo(node)\">\n <div *ngIf=\"mode === 'likes'\" class=\"likes\">\n <button\n (click)=\"toogleLike()\"\n [disabled]=\"(this.authenticationService.observeLoginInfo() | async)?.isGuest\"\n mat-icon-button\n color=\"primary\"\n matTooltip=\"{{ 'RATING.LIKES' | translate }}\"\n >\n <i [esIcon]=\"'edu-thumb_up' + (!node.rating?.user ? '_off' : '')\"></i>\n </button>\n <span matTooltip=\"{{ 'RATING.COUNT_LIKES' | translate }}\">{{\n node.rating?.overall.count\n }}</span>\n </div>\n <div *ngIf=\"mode === 'stars'\" class=\"stars\" mat-icon-button color=\"primary\">\n <button\n *ngFor=\"let rating of [1, 2, 3, 4, 5]\"\n mat-icon-button\n color=\"primary\"\n class=\"star\"\n (click)=\"setRating(rating)\"\n [disabled]=\"(this.authenticationService.observeLoginInfo() | async)?.isGuest\"\n (focus)=\"hoverStar = rating\"\n (mouseenter)=\"hoverStar = rating\"\n (mouseleave)=\"hoverStar = 0\"\n (blur)=\"hoverStar = 0\"\n [class.star-hover]=\"hoverStar >= rating\"\n >\n <i\n [esIcon]=\"\n 'star' +\n ((hoverStar ? hoverStar >= rating : getPrimaryRating() >= rating) ? '' : '_border')\n \"\n matTooltip=\"{{ 'RATING.STARS_RATE' | translate : { rating: rating } }}\"\n ></i>\n </button>\n <button\n *ngIf=\"!!node.rating?.user\"\n mat-icon-button\n color=\"primary\"\n class=\"delete\"\n matTooltip=\"{{ 'RATING.DELETE_RATING' | translate }}\"\n (click)=\"deleteRating()\"\n [disabled]=\"(this.authenticationService.observeLoginInfo() | async)?.isGuest\"\n >\n <i esIcon=\"clear\"></i>\n </button>\n <span matTooltip=\"{{ 'RATING.COUNT_RATINGS' | translate }}\"\n >({{ node.rating?.overall.count }})</span\n >\n </div>\n</ng-container>\n", styles: [".stars{display:flex;align-items:center}.stars span{padding-left:8px}.likes{display:flex;align-items:center}.mdc-icon-button.mat-primary{color:var(--textLight);display:flex;align-items:center;padding:0}.mdc-icon-button.mat-primary.star,.mdc-icon-button.mat-primary.delete{min-width:unset;width:18px;height:18px}.mdc-icon-button.mat-primary.star i,.mdc-icon-button.mat-primary.delete i{font-size:17px;line-height:1}.mdc-icon-button.mat-primary.star ::ng-deep .mat-mdc-button-touch-target,.mdc-icon-button.mat-primary.delete ::ng-deep .mat-mdc-button-touch-target{display:none}.mdc-icon-button.mat-primary.star.star-hover,.mdc-icon-button.mat-primary.delete.star-hover{color:var(--colorStarActive)}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }] }); }
|
|
95
118
|
}
|
|
96
119
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: NodeRatingComponent, decorators: [{
|
|
97
120
|
type: Component,
|
|
98
|
-
args: [{ selector: 'es-node-rating', template: "<ng-container *ngIf=\"hasPermission && node.type === 'ccm:io' && isFromHomeRepo(node)\">\n <div *ngIf=\"mode === 'likes'\" class=\"likes\">\n <button\n (click)=\"toogleLike()\"\n [disabled]=\"(this.authenticationService.observeLoginInfo() | async)?.isGuest\"\n mat-icon-button\n color=\"primary\"\n matTooltip=\"{{ 'RATING.LIKES' | translate }}\"\n >\n <i [esIcon]=\"'edu-thumb_up' + (!node.rating?.user ? '_off' : '')\"></i>\n </button>\n <span matTooltip=\"{{ 'RATING.COUNT_LIKES' | translate }}\">{{\n node.rating?.overall.count\n }}</span>\n </div>\n <div *ngIf=\"mode === 'stars'\" class=\"stars\" mat-icon-button color=\"primary\">\n <button\n *ngFor=\"let rating of [1, 2, 3, 4, 5]\"\n mat-icon-button\n color=\"primary\"\n class=\"star\"\n (click)=\"setRating(rating)\"\n [disabled]=\"(this.authenticationService.observeLoginInfo() | async)?.isGuest\"\n (focus)=\"hoverStar = rating\"\n (mouseenter)=\"hoverStar = rating\"\n (mouseleave)=\"hoverStar = 0\"\n (blur)=\"hoverStar = 0\"\n [class.star-hover]=\"hoverStar >= rating\"\n >\n <i\n [esIcon]=\"\n 'star' +\n ((hoverStar ? hoverStar >= rating : getPrimaryRating() >= rating) ? '' : '_border')\n \"\n matTooltip=\"{{ 'RATING.STARS_RATE' | translate : { rating: rating } }}\"\n ></i>\n </button>\n <button\n *ngIf=\"!!node.rating?.user\"\n mat-icon-button\n color=\"primary\"\n class=\"delete\"\n matTooltip=\"{{ 'RATING.DELETE_RATING' | translate }}\"\n (click)=\"deleteRating()\"\n [disabled]=\"(this.authenticationService.observeLoginInfo() | async)?.isGuest\"\n >\n <i esIcon=\"clear\"></i>\n </button>\n <span matTooltip=\"{{ 'RATING.COUNT_RATINGS' | translate }}\"\n >({{ node.rating?.overall.count }})</span\n >\n </div>\n</ng-container>\n", styles: [".stars{display:flex;align-items:center}.stars span{padding-left:8px}.likes{display:flex;align-items:center}.
|
|
99
|
-
}], ctorParameters: function () { return [{ type: i1.Toast }, { type: i2.ConfigService }, { type: i2.NetworkService }, { type: i2.AuthenticationService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { node: [{
|
|
121
|
+
args: [{ selector: 'es-node-rating', template: "<ng-container *ngIf=\"hasPermission && node.type === 'ccm:io' && isFromHomeRepo(node)\">\n <div *ngIf=\"mode === 'likes'\" class=\"likes\">\n <button\n (click)=\"toogleLike()\"\n [disabled]=\"(this.authenticationService.observeLoginInfo() | async)?.isGuest\"\n mat-icon-button\n color=\"primary\"\n matTooltip=\"{{ 'RATING.LIKES' | translate }}\"\n >\n <i [esIcon]=\"'edu-thumb_up' + (!node.rating?.user ? '_off' : '')\"></i>\n </button>\n <span matTooltip=\"{{ 'RATING.COUNT_LIKES' | translate }}\">{{\n node.rating?.overall.count\n }}</span>\n </div>\n <div *ngIf=\"mode === 'stars'\" class=\"stars\" mat-icon-button color=\"primary\">\n <button\n *ngFor=\"let rating of [1, 2, 3, 4, 5]\"\n mat-icon-button\n color=\"primary\"\n class=\"star\"\n (click)=\"setRating(rating)\"\n [disabled]=\"(this.authenticationService.observeLoginInfo() | async)?.isGuest\"\n (focus)=\"hoverStar = rating\"\n (mouseenter)=\"hoverStar = rating\"\n (mouseleave)=\"hoverStar = 0\"\n (blur)=\"hoverStar = 0\"\n [class.star-hover]=\"hoverStar >= rating\"\n >\n <i\n [esIcon]=\"\n 'star' +\n ((hoverStar ? hoverStar >= rating : getPrimaryRating() >= rating) ? '' : '_border')\n \"\n matTooltip=\"{{ 'RATING.STARS_RATE' | translate : { rating: rating } }}\"\n ></i>\n </button>\n <button\n *ngIf=\"!!node.rating?.user\"\n mat-icon-button\n color=\"primary\"\n class=\"delete\"\n matTooltip=\"{{ 'RATING.DELETE_RATING' | translate }}\"\n (click)=\"deleteRating()\"\n [disabled]=\"(this.authenticationService.observeLoginInfo() | async)?.isGuest\"\n >\n <i esIcon=\"clear\"></i>\n </button>\n <span matTooltip=\"{{ 'RATING.COUNT_RATINGS' | translate }}\"\n >({{ node.rating?.overall.count }})</span\n >\n </div>\n</ng-container>\n", styles: [".stars{display:flex;align-items:center}.stars span{padding-left:8px}.likes{display:flex;align-items:center}.mdc-icon-button.mat-primary{color:var(--textLight);display:flex;align-items:center;padding:0}.mdc-icon-button.mat-primary.star,.mdc-icon-button.mat-primary.delete{min-width:unset;width:18px;height:18px}.mdc-icon-button.mat-primary.star i,.mdc-icon-button.mat-primary.delete i{font-size:17px;line-height:1}.mdc-icon-button.mat-primary.star ::ng-deep .mat-mdc-button-touch-target,.mdc-icon-button.mat-primary.delete ::ng-deep .mat-mdc-button-touch-target{display:none}.mdc-icon-button.mat-primary.star.star-hover,.mdc-icon-button.mat-primary.delete.star-hover{color:var(--colorStarActive)}\n"] }]
|
|
122
|
+
}], ctorParameters: function () { return [{ type: i1.Toast }, { type: i2.ConfigService }, { type: i2.NetworkService }, { type: i2.AuthenticationService }, { type: i0.ChangeDetectorRef }, { type: i2.RatingV1Service }]; }, propDecorators: { node: [{
|
|
100
123
|
type: Input
|
|
101
124
|
}] } });
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1yYXRpbmcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi9ub2RlLWVudHJpZXMvbm9kZS1yYXRpbmcvbm9kZS1yYXRpbmcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi9ub2RlLWVudHJpZXMvbm9kZS1yYXRpbmcvbm9kZS1yYXRpbmcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzVFLE9BQU8sRUFJSCxhQUFhLEdBRWhCLE1BQU0scUJBQXFCLENBQUM7QUFFN0IsT0FBTyxFQUFFLElBQUksRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7O0FBTXBELE1BQU0sT0FBTyxtQkFBbUI7SUFPNUIsWUFDVyxLQUFZLEVBQ1osYUFBNEIsRUFDM0IsVUFBMEIsRUFDM0IscUJBQTRDLEVBQzVDLGlCQUFvQztRQUpwQyxVQUFLLEdBQUwsS0FBSyxDQUFPO1FBQ1osa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDM0IsZUFBVSxHQUFWLFVBQVUsQ0FBZ0I7UUFDM0IsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUM1QyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBWC9DLFFBQVE7UUFDUixrQkFBYSxHQUFRLEVBQUUsQ0FBQztJQVdyQixDQUFDO0lBRUosS0FBSyxDQUFDLFFBQVE7UUFDVixNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ25FLElB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QUMsQ0FBQyxDQUFDO1NBQ3ZCO0lBQ0wsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFVO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0RCxDQUFDOzhHQXRGUSxtQkFBbUI7a0dBQW5CLG1CQUFtQixnRkNoQmhDLGc1REFxREE7OzJGRHJDYSxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0ksZ0JBQWdCO3lOQU9qQixJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIE5vZGUsXG4gICAgQ29uZmlnU2VydmljZSxcbiAgICBBdXRoZW50aWNhdGlvblNlcnZpY2UsXG4gICAgUmVzdENvbnN0YW50cyxcbiAgICBOZXR3b3JrU2VydmljZSxcbn0gZnJvbSAnbmd4LWVkdS1zaGFyaW5nLWFwaSc7XG5pbXBvcnQgeyBUb2FzdCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Fic3RyYWN0L3RvYXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgdGFrZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgUmVzdEhlbHBlciB9IGZyb20gJy4uLy4uL3V0aWwvcmVzdC1oZWxwZXInO1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdlcy1ub2RlLXJhdGluZycsXG4gICAgdGVtcGxhdGVVcmw6ICdub2RlLXJhdGluZy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJ25vZGUtcmF0aW5nLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIE5vZGVSYXRpbmdDb21wb25lbnQ8VCBleHRlbmRzIE5vZGU+IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICAvLyBAVE9ET1xuICAgIHJhdGluZ1NlcnZpY2U6IGFueSA9IHt9O1xuICAgIEBJbnB1dCgpIG5vZGU6IFQ7XG4gICAgbW9kZTogUmF0aW5nTW9kZTtcbiAgICBoYXNQZXJtaXNzaW9uOiBib29sZWFuO1xuICAgIGhvdmVyU3RhcjogbnVtYmVyO1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgdG9hc3Q6IFRvYXN0LFxuICAgICAgICBwdWJsaWMgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBuZXR3b3JrQXBpOiBOZXR3b3JrU2VydmljZSxcbiAgICAgICAgcHVibGljIGF1dGhlbnRpY2F0aW9uU2VydmljZTogQXV0aGVudGljYXRpb25TZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLCAvLyBAVE9ETyAvLyBwdWJsaWMgcmF0aW5nU2VydmljZTogUmVzdFJhdGluZ1NlcnZpY2UsXG4gICAgKSB7fVxuXG4gICAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY29uZmlnU2VydmljZS5vYnNlcnZlQ29uZmlnKCkucGlwZSh0YWtlKDEpKS50b1Byb21pc2UoKTtcbiAgICAgICAgdGhpcy5tb2RlID0gdGhpcy5jb25maWdTZXJ2aWNlLmluc3RhbnQoJ3JhdGluZy5tb2RlJywgJ25vbmUnKTtcbiAgICAgICAgdGhpcy5oYXNQZXJtaXNzaW9uID0gYXdhaXQgdGhpcy5hdXRoZW50aWNhdGlvblNlcnZpY2UuaGFzVG9vbHBlcm1pc3Npb24oXG4gICAgICAgICAgICBSZXN0Q29uc3RhbnRzLlRPT0xQRVJNSVNTSU9OX1JBVEVfUkVBRCxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBhc3luYyB0b29nbGVMaWtlKCkge1xuICAgICAgICBjb25zdCBuYW1lID0gUmVzdEhlbHBlci5nZXRUaXRsZSh0aGlzLm5vZGUpO1xuICAgICAgICBpZiAodGhpcy5ub2RlLnJhdGluZz8udXNlcikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJhdGluZ1NlcnZpY2UuZGVsZXRlTm9kZVJhdGluZyh0aGlzLm5vZGUucmVmLmlkKS50b1Byb21pc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LnRvYXN0KCdSQVRJTkcuVE9BU1QuTElLRV9SRU1PVkVEJywgeyBuYW1lIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMubm9kZS5yYXRpbmcudXNlciA9IDA7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlLnJhdGluZy5vdmVyYWxsLmNvdW50LS07XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdC5lcnJvcihlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yYXRpbmdTZXJ2aWNlLnVwZGF0ZU5vZGVSYXRpbmcodGhpcy5ub2RlLnJlZi5pZCwgNSkudG9Qcm9taXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdC50b2FzdCgnUkFUSU5HLlRPQVNULkxJS0VEJywgeyBuYW1lIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMubm9kZS5yYXRpbmcudXNlciA9IDU7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlLnJhdGluZy5vdmVyYWxsLmNvdW50Kys7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdC5lcnJvcihlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBnZXRQcmltYXJ5UmF0aW5nKCkge1xuICAgICAgICBpZiAoIXRoaXMubm9kZS5yYXRpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm5vZGUucmF0aW5nLnVzZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm5vZGUucmF0aW5nLnVzZXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubm9kZS5yYXRpbmcub3ZlcmFsbC5zdW0gLyB0aGlzLm5vZGUucmF0aW5nLm92ZXJhbGwuY291bnQ7XG4gICAgfVxuXG4gICAgYXN5bmMgc2V0UmF0aW5nKHJhdGluZzogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBSZXN0SGVscGVyLmdldFRpdGxlKHRoaXMubm9kZSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJhdGluZ1NlcnZpY2UudXBkYXRlTm9kZVJhdGluZyh0aGlzLm5vZGUucmVmLmlkLCByYXRpbmcpLnRvUHJvbWlzZSgpO1xuICAgICAgICAgICAgdGhpcy50b2FzdC50b2FzdCgnUkFUSU5HLlRPQVNULlJBVEVEJywgeyBuYW1lLCByYXRpbmcgfSk7XG4gICAgICAgICAgICB0aGlzLm5vZGUucmF0aW5nLm92ZXJhbGwuY291bnQgKz0gdGhpcy5ub2RlLnJhdGluZy51c2VyID8gMCA6IDE7XG4gICAgICAgICAgICB0aGlzLm5vZGUucmF0aW5nLnVzZXIgPSByYXRpbmc7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy50b2FzdC5lcnJvcihlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGRlbGV0ZVJhdGluZygpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IFJlc3RIZWxwZXIuZ2V0VGl0bGUodGhpcy5ub2RlKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucmF0aW5nU2VydmljZS5kZWxldGVOb2RlUmF0aW5nKHRoaXMubm9kZS5yZWYuaWQpLnRvUHJvbWlzZSgpO1xuICAgICAgICAgICAgdGhpcy50b2FzdC50b2FzdCgnUkFUSU5HLlRPQVNULlJBVElOR19SRU1PVkVEJywgeyBuYW1lIH0pO1xuICAgICAgICAgICAgdGhpcy5ub2RlLnJhdGluZy5vdmVyYWxsLmNvdW50LS07XG4gICAgICAgICAgICB0aGlzLm5vZGUucmF0aW5nLm92ZXJhbGwuc3VtIC09IHRoaXMubm9kZS5yYXRpbmcudXNlcjtcbiAgICAgICAgICAgIHRoaXMubm9kZS5yYXRpbmcudXNlciA9IDA7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy50b2FzdC5lcnJvcihlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzRnJvbUhvbWVSZXBvKG5vZGU6IE5vZGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV0d29ya0FwaS5pc0Zyb21Ib21lUmVwb3NpdG9yeShub2RlKTtcbiAgICB9XG59XG5leHBvcnQgdHlwZSBSYXRpbmdNb2RlID0gJ25vbmUnIHwgJ2xpa2VzJyB8ICdzdGFycyc7XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzUGVybWlzc2lvbiAmJiBub2RlLnR5cGUgPT09ICdjY206aW8nICYmIGlzRnJvbUhvbWVSZXBvKG5vZGUpXCI+XG4gIDxkaXYgKm5nSWY9XCJtb2RlID09PSAnbGlrZXMnXCIgY2xhc3M9XCJsaWtlc1wiPlxuICAgIDxidXR0b25cbiAgICAgIChjbGljayk9XCJ0b29nbGVMaWtlKClcIlxuICAgICAgW2Rpc2FibGVkXT1cIih0aGlzLmF1dGhlbnRpY2F0aW9uU2VydmljZS5vYnNlcnZlTG9naW5JbmZvKCkgfCBhc3luYyk/LmlzR3Vlc3RcIlxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgbWF0VG9vbHRpcD1cInt7ICdSQVRJTkcuTElLRVMnIHwgdHJhbnNsYXRlIH19XCJcbiAgICA+XG4gICAgICA8aSBbZXNJY29uXT1cIidlZHUtdGh1bWJfdXAnICsgKCFub2RlLnJhdGluZz8udXNlciA/ICdfb2ZmJyA6ICcnKVwiPjwvaT5cbiAgICA8L2J1dHRvbj5cbiAgICA8c3BhbiBtYXRUb29sdGlwPVwie3sgJ1JBVElORy5DT1VOVF9MSUtFUycgfCB0cmFuc2xhdGUgfX1cIj57e1xuICAgICAgbm9kZS5yYXRpbmc/Lm92ZXJhbGwuY291bnRcbiAgICB9fTwvc3Bhbj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJtb2RlID09PSAnc3RhcnMnXCIgY2xhc3M9XCJzdGFyc1wiIG1hdC1pY29uLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIj5cbiAgICA8YnV0dG9uXG4gICAgICAqbmdGb3I9XCJsZXQgcmF0aW5nIG9mIFsxLCAyLCAzLCA0LCA1XVwiXG4gICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICBjbGFzcz1cInN0YXJcIlxuICAgICAgKGNsaWNrKT1cInNldFJhdGluZyhyYXRpbmcpXCJcbiAgICAgIFtkaXNhYmxlZF09XCIodGhpcy5hdXRoZW50aWNhdGlvblNlcnZpY2Uub2JzZXJ2ZUxvZ2luSW5mbygpIHwgYXN5bmMpPy5pc0d1ZXN0XCJcbiAgICAgIChmb2N1cyk9XCJob3ZlclN0YXIgPSByYXRpbmdcIlxuICAgICAgKG1vdXNlZW50ZXIpPVwiaG92ZXJTdGFyID0gcmF0aW5nXCJcbiAgICAgIChtb3VzZWxlYXZlKT1cImhvdmVyU3RhciA9IDBcIlxuICAgICAgKGJsdXIpPVwiaG92ZXJTdGFyID0gMFwiXG4gICAgICBbY2xhc3Muc3Rhci1ob3Zlcl09XCJob3ZlclN0YXIgPj0gcmF0aW5nXCJcbiAgICA+XG4gICAgICA8aVxuICAgICAgICBbZXNJY29uXT1cIlxuICAgICAgICAgICdzdGFyJyArXG4gICAgICAgICAgKChob3ZlclN0YXIgPyBob3ZlclN0YXIgPj0gcmF0aW5nIDogZ2V0UHJpbWFyeVJhdGluZygpID49IHJhdGluZykgPyAnJyA6ICdfYm9yZGVyJylcbiAgICAgICAgXCJcbiAgICAgICAgbWF0VG9vbHRpcD1cInt7ICdSQVRJTkcuU1RBUlNfUkFURScgfCB0cmFuc2xhdGUgOiB7IHJhdGluZzogcmF0aW5nIH0gfX1cIlxuICAgICAgPjwvaT5cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICAqbmdJZj1cIiEhbm9kZS5yYXRpbmc/LnVzZXJcIlxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgY2xhc3M9XCJkZWxldGVcIlxuICAgICAgbWF0VG9vbHRpcD1cInt7ICdSQVRJTkcuREVMRVRFX1JBVElORycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgKGNsaWNrKT1cImRlbGV0ZVJhdGluZygpXCJcbiAgICAgIFtkaXNhYmxlZF09XCIodGhpcy5hdXRoZW50aWNhdGlvblNlcnZpY2Uub2JzZXJ2ZUxvZ2luSW5mbygpIHwgYXN5bmMpPy5pc0d1ZXN0XCJcbiAgICA+XG4gICAgICA8aSBlc0ljb249XCJjbGVhclwiPjwvaT5cbiAgICA8L2J1dHRvbj5cbiAgICA8c3BhbiBtYXRUb29sdGlwPVwie3sgJ1JBVElORy5DT1VOVF9SQVRJTkdTJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICA+KHt7IG5vZGUucmF0aW5nPy5vdmVyYWxsLmNvdW50IH19KTwvc3BhblxuICAgID5cbiAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
|
|
125
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1yYXRpbmcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi9ub2RlLWVudHJpZXMvbm9kZS1yYXRpbmcvbm9kZS1yYXRpbmcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi9ub2RlLWVudHJpZXMvbm9kZS1yYXRpbmcvbm9kZS1yYXRpbmcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzVFLE9BQU8sRUFJSCxhQUFhLEdBR2hCLE1BQU0scUJBQXFCLENBQUM7QUFFN0IsT0FBTyxFQUFFLElBQUksRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7O0FBT3BELE1BQU0sT0FBTyxtQkFBbUI7SUFLNUIsWUFDVyxLQUFZLEVBQ1osYUFBNEIsRUFDM0IsVUFBMEIsRUFDM0IscUJBQTRDLEVBQzVDLGlCQUFvQyxFQUNwQyxhQUE4QjtRQUw5QixVQUFLLEdBQUwsS0FBSyxDQUFPO1FBQ1osa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDM0IsZUFBVSxHQUFWLFVBQVUsQ0FBZ0I7UUFDM0IsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUM1QyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLGtCQUFhLEdBQWIsYUFBYSxDQUFpQjtJQUN0QyxDQUFDO0lBRUosS0FBSyxDQUFDLFFBQVE7UUFDVixNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ25F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SyxDQUFDLDZCQUE2QixFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUMxRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDdEQsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUMxQixJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDMUM7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNSLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3ZCO0lBQ0wsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFVO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0RCxDQUFDOzhHQTdHUSxtQkFBbUI7a0dBQW5CLG1CQUFtQixnRkNsQmhDLGc1REFxREE7OzJGRG5DYSxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0ksZ0JBQWdCO3VQQUtqQixJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIE5vZGUsXG4gICAgQ29uZmlnU2VydmljZSxcbiAgICBBdXRoZW50aWNhdGlvblNlcnZpY2UsXG4gICAgUmVzdENvbnN0YW50cyxcbiAgICBOZXR3b3JrU2VydmljZSxcbiAgICBSYXRpbmdWMVNlcnZpY2UsXG59IGZyb20gJ25neC1lZHUtc2hhcmluZy1hcGknO1xuaW1wb3J0IHsgVG9hc3QgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hYnN0cmFjdC90b2FzdC5zZXJ2aWNlJztcbmltcG9ydCB7IHRha2UsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFJlc3RIZWxwZXIgfSBmcm9tICcuLi8uLi91dGlsL3Jlc3QtaGVscGVyJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdlcy1ub2RlLXJhdGluZycsXG4gICAgdGVtcGxhdGVVcmw6ICdub2RlLXJhdGluZy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJ25vZGUtcmF0aW5nLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIE5vZGVSYXRpbmdDb21wb25lbnQ8VCBleHRlbmRzIE5vZGU+IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBASW5wdXQoKSBub2RlOiBUO1xuICAgIG1vZGU6IFJhdGluZ01vZGU7XG4gICAgaGFzUGVybWlzc2lvbjogYm9vbGVhbjtcbiAgICBob3ZlclN0YXI6IG51bWJlcjtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHRvYXN0OiBUb2FzdCxcbiAgICAgICAgcHVibGljIGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbmV0d29ya0FwaTogTmV0d29ya1NlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBhdXRoZW50aWNhdGlvblNlcnZpY2U6IEF1dGhlbnRpY2F0aW9uU2VydmljZSxcbiAgICAgICAgcHVibGljIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHVibGljIHJhdGluZ1NlcnZpY2U6IFJhdGluZ1YxU2VydmljZSxcbiAgICApIHt9XG5cbiAgICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5jb25maWdTZXJ2aWNlLm9ic2VydmVDb25maWcoKS5waXBlKHRha2UoMSkpLnRvUHJvbWlzZSgpO1xuICAgICAgICB0aGlzLm1vZGUgPSB0aGlzLmNvbmZpZ1NlcnZpY2UuaW5zdGFudCgncmF0aW5nLm1vZGUnLCAnbm9uZScpO1xuICAgICAgICB0aGlzLmhhc1Blcm1pc3Npb24gPSBhd2FpdCB0aGlzLmF1dGhlbnRpY2F0aW9uU2VydmljZS5oYXNUb29scGVybWlzc2lvbihcbiAgICAgICAgICAgIFJlc3RDb25zdGFudHMuVE9PTFBFUk1JU1NJT05fUkFURV9SRUFELFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGFzeW5jIHRvb2dsZUxpa2UoKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBSZXN0SGVscGVyLmdldFRpdGxlKHRoaXMubm9kZSk7XG4gICAgICAgIGlmICh0aGlzLm5vZGUucmF0aW5nPy51c2VyKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmF0aW5nU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAuZGVsZXRlUmF0aW5nKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk6IHRoaXMubm9kZS5yZWYucmVwbyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGU6IHRoaXMubm9kZS5yZWYuaWQsXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC50b1Byb21pc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LnRvYXN0KCdSQVRJTkcuVE9BU1QuTElLRV9SRU1PVkVEJywgeyBuYW1lIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMubm9kZS5yYXRpbmcudXNlciA9IDA7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlLnJhdGluZy5vdmVyYWxsLmNvdW50LS07XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdC5lcnJvcihlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yYXRpbmdTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgIC5hZGRPclVwZGF0ZVJhdGluZyh7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5OiB0aGlzLm5vZGUucmVmLnJlcG8sXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlOiB0aGlzLm5vZGUucmVmLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmF0aW5nOiA1LFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLnRvUHJvbWlzZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3QudG9hc3QoJ1JBVElORy5UT0FTVC5MSUtFRCcsIHsgbmFtZSB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGUucmF0aW5nLnVzZXIgPSA1O1xuICAgICAgICAgICAgICAgIHRoaXMubm9kZS5yYXRpbmcub3ZlcmFsbC5jb3VudCsrO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3QuZXJyb3IoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgZ2V0UHJpbWFyeVJhdGluZygpIHtcbiAgICAgICAgaWYgKCF0aGlzLm5vZGUucmF0aW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ub2RlLnJhdGluZy51c2VyKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ub2RlLnJhdGluZy51c2VyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm5vZGUucmF0aW5nLm92ZXJhbGwuc3VtIC8gdGhpcy5ub2RlLnJhdGluZy5vdmVyYWxsLmNvdW50O1xuICAgIH1cblxuICAgIGFzeW5jIHNldFJhdGluZyhyYXRpbmc6IG51bWJlcikge1xuICAgICAgICBjb25zdCBuYW1lID0gUmVzdEhlbHBlci5nZXRUaXRsZSh0aGlzLm5vZGUpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5yYXRpbmdTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmFkZE9yVXBkYXRlUmF0aW5nKHtcbiAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeTogdGhpcy5ub2RlLnJlZi5yZXBvLFxuICAgICAgICAgICAgICAgICAgICBub2RlOiB0aGlzLm5vZGUucmVmLmlkLFxuICAgICAgICAgICAgICAgICAgICByYXRpbmcsXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IG51bGwsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAudG9Qcm9taXNlKCk7XG4gICAgICAgICAgICB0aGlzLnRvYXN0LnRvYXN0KCdSQVRJTkcuVE9BU1QuUkFURUQnLCB7IG5hbWUsIHJhdGluZyB9KTtcbiAgICAgICAgICAgIHRoaXMubm9kZS5yYXRpbmcub3ZlcmFsbC5jb3VudCArPSB0aGlzLm5vZGUucmF0aW5nLnVzZXIgPyAwIDogMTtcbiAgICAgICAgICAgIHRoaXMubm9kZS5yYXRpbmcudXNlciA9IHJhdGluZztcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLnRvYXN0LmVycm9yKGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZGVsZXRlUmF0aW5nKCkge1xuICAgICAgICBjb25zdCBuYW1lID0gUmVzdEhlbHBlci5nZXRUaXRsZSh0aGlzLm5vZGUpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5yYXRpbmdTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmRlbGV0ZVJhdGluZyh7XG4gICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk6IHRoaXMubm9kZS5yZWYucmVwbyxcbiAgICAgICAgICAgICAgICAgICAgbm9kZTogdGhpcy5ub2RlLnJlZi5pZCxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC50b1Byb21pc2UoKTtcbiAgICAgICAgICAgIHRoaXMudG9hc3QudG9hc3QoJ1JBVElORy5UT0FTVC5SQVRJTkdfUkVNT1ZFRCcsIHsgbmFtZSB9KTtcbiAgICAgICAgICAgIHRoaXMubm9kZS5yYXRpbmcub3ZlcmFsbC5jb3VudC0tO1xuICAgICAgICAgICAgdGhpcy5ub2RlLnJhdGluZy5vdmVyYWxsLnN1bSAtPSB0aGlzLm5vZGUucmF0aW5nLnVzZXI7XG4gICAgICAgICAgICB0aGlzLm5vZGUucmF0aW5nLnVzZXIgPSAwO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRoaXMudG9hc3QuZXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc0Zyb21Ib21lUmVwbyhub2RlOiBOb2RlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5ldHdvcmtBcGkuaXNGcm9tSG9tZVJlcG9zaXRvcnkobm9kZSk7XG4gICAgfVxufVxuZXhwb3J0IHR5cGUgUmF0aW5nTW9kZSA9ICdub25lJyB8ICdsaWtlcycgfCAnc3RhcnMnO1xuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc1Blcm1pc3Npb24gJiYgbm9kZS50eXBlID09PSAnY2NtOmlvJyAmJiBpc0Zyb21Ib21lUmVwbyhub2RlKVwiPlxuICA8ZGl2ICpuZ0lmPVwibW9kZSA9PT0gJ2xpa2VzJ1wiIGNsYXNzPVwibGlrZXNcIj5cbiAgICA8YnV0dG9uXG4gICAgICAoY2xpY2spPVwidG9vZ2xlTGlrZSgpXCJcbiAgICAgIFtkaXNhYmxlZF09XCIodGhpcy5hdXRoZW50aWNhdGlvblNlcnZpY2Uub2JzZXJ2ZUxvZ2luSW5mbygpIHwgYXN5bmMpPy5pc0d1ZXN0XCJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgIG1hdFRvb2x0aXA9XCJ7eyAnUkFUSU5HLkxJS0VTJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgPlxuICAgICAgPGkgW2VzSWNvbl09XCInZWR1LXRodW1iX3VwJyArICghbm9kZS5yYXRpbmc/LnVzZXIgPyAnX29mZicgOiAnJylcIj48L2k+XG4gICAgPC9idXR0b24+XG4gICAgPHNwYW4gbWF0VG9vbHRpcD1cInt7ICdSQVRJTkcuQ09VTlRfTElLRVMnIHwgdHJhbnNsYXRlIH19XCI+e3tcbiAgICAgIG5vZGUucmF0aW5nPy5vdmVyYWxsLmNvdW50XG4gICAgfX08L3NwYW4+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwibW9kZSA9PT0gJ3N0YXJzJ1wiIGNsYXNzPVwic3RhcnNcIiBtYXQtaWNvbi1idXR0b24gY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgPGJ1dHRvblxuICAgICAgKm5nRm9yPVwibGV0IHJhdGluZyBvZiBbMSwgMiwgMywgNCwgNV1cIlxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgY2xhc3M9XCJzdGFyXCJcbiAgICAgIChjbGljayk9XCJzZXRSYXRpbmcocmF0aW5nKVwiXG4gICAgICBbZGlzYWJsZWRdPVwiKHRoaXMuYXV0aGVudGljYXRpb25TZXJ2aWNlLm9ic2VydmVMb2dpbkluZm8oKSB8IGFzeW5jKT8uaXNHdWVzdFwiXG4gICAgICAoZm9jdXMpPVwiaG92ZXJTdGFyID0gcmF0aW5nXCJcbiAgICAgIChtb3VzZWVudGVyKT1cImhvdmVyU3RhciA9IHJhdGluZ1wiXG4gICAgICAobW91c2VsZWF2ZSk9XCJob3ZlclN0YXIgPSAwXCJcbiAgICAgIChibHVyKT1cImhvdmVyU3RhciA9IDBcIlxuICAgICAgW2NsYXNzLnN0YXItaG92ZXJdPVwiaG92ZXJTdGFyID49IHJhdGluZ1wiXG4gICAgPlxuICAgICAgPGlcbiAgICAgICAgW2VzSWNvbl09XCJcbiAgICAgICAgICAnc3RhcicgK1xuICAgICAgICAgICgoaG92ZXJTdGFyID8gaG92ZXJTdGFyID49IHJhdGluZyA6IGdldFByaW1hcnlSYXRpbmcoKSA+PSByYXRpbmcpID8gJycgOiAnX2JvcmRlcicpXG4gICAgICAgIFwiXG4gICAgICAgIG1hdFRvb2x0aXA9XCJ7eyAnUkFUSU5HLlNUQVJTX1JBVEUnIHwgdHJhbnNsYXRlIDogeyByYXRpbmc6IHJhdGluZyB9IH19XCJcbiAgICAgID48L2k+XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgKm5nSWY9XCIhIW5vZGUucmF0aW5nPy51c2VyXCJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgIGNsYXNzPVwiZGVsZXRlXCJcbiAgICAgIG1hdFRvb2x0aXA9XCJ7eyAnUkFUSU5HLkRFTEVURV9SQVRJTkcnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgIChjbGljayk9XCJkZWxldGVSYXRpbmcoKVwiXG4gICAgICBbZGlzYWJsZWRdPVwiKHRoaXMuYXV0aGVudGljYXRpb25TZXJ2aWNlLm9ic2VydmVMb2dpbkluZm8oKSB8IGFzeW5jKT8uaXNHdWVzdFwiXG4gICAgPlxuICAgICAgPGkgZXNJY29uPVwiY2xlYXJcIj48L2k+XG4gICAgPC9idXR0b24+XG4gICAgPHNwYW4gbWF0VG9vbHRpcD1cInt7ICdSQVRJTkcuQ09VTlRfUkFUSU5HUycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgPih7eyBub2RlLnJhdGluZz8ub3ZlcmFsbC5jb3VudCB9fSk8L3NwYW5cbiAgICA+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG4iXX0=
|
|
@@ -9,27 +9,40 @@ import * as i4 from "@ngx-translate/core";
|
|
|
9
9
|
// `app-node-url` should only wrap the title since links with lots of content confuse screen
|
|
10
10
|
// readers.
|
|
11
11
|
export class OptionButtonComponent {
|
|
12
|
-
|
|
12
|
+
constructor() {
|
|
13
|
+
this.isShown = false;
|
|
14
|
+
this.isEnabled = false;
|
|
15
|
+
}
|
|
16
|
+
async ngOnChanges(changes) {
|
|
17
|
+
this.isEnabled = await this.optionIsValid(this.option, this.node);
|
|
18
|
+
this.isShown = await this.optionIsShown(this.option, this.node);
|
|
19
|
+
}
|
|
20
|
+
async optionIsValid(optionItem, node) {
|
|
13
21
|
if (optionItem.enabledCallback) {
|
|
14
|
-
return optionItem.enabledCallback(node);
|
|
22
|
+
return await optionItem.enabledCallback(node);
|
|
15
23
|
}
|
|
16
24
|
return optionItem.isEnabled;
|
|
17
25
|
}
|
|
18
|
-
optionIsShown(optionItem, node) {
|
|
26
|
+
async optionIsShown(optionItem, node) {
|
|
19
27
|
if (optionItem.showCallback) {
|
|
20
28
|
return optionItem.showCallback(node);
|
|
21
29
|
}
|
|
22
30
|
return true;
|
|
23
31
|
}
|
|
32
|
+
async click(option, node) {
|
|
33
|
+
if (await this.optionIsShown(option, node)) {
|
|
34
|
+
option.callback(node);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
24
37
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: OptionButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", type: OptionButtonComponent, selector: "es-option-button", inputs: { option: "option", node: "node" }, ngImport: i0, template: `
|
|
38
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", type: OptionButtonComponent, selector: "es-option-button", inputs: { option: "option", node: "node" }, usesOnChanges: true, ngImport: i0, template: `
|
|
26
39
|
<button
|
|
27
40
|
mat-icon-button
|
|
28
41
|
color="primary"
|
|
29
42
|
matTooltip="{{ option.name | translate }}"
|
|
30
|
-
[class.display-none]="!
|
|
31
|
-
[disabled]="!
|
|
32
|
-
(click)="
|
|
43
|
+
[class.display-none]="!isShown"
|
|
44
|
+
[disabled]="!isEnabled"
|
|
45
|
+
(click)="click(option, node)"
|
|
33
46
|
attr.data-test="option-button-{{ option.name }}"
|
|
34
47
|
>
|
|
35
48
|
<i esIcon="{{ option.icon }}" [aria]="false"></i>
|
|
@@ -45,9 +58,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImpor
|
|
|
45
58
|
mat-icon-button
|
|
46
59
|
color="primary"
|
|
47
60
|
matTooltip="{{ option.name | translate }}"
|
|
48
|
-
[class.display-none]="!
|
|
49
|
-
[disabled]="!
|
|
50
|
-
(click)="
|
|
61
|
+
[class.display-none]="!isShown"
|
|
62
|
+
[disabled]="!isEnabled"
|
|
63
|
+
(click)="click(option, node)"
|
|
51
64
|
attr.data-test="option-button-{{ option.name }}"
|
|
52
65
|
>
|
|
53
66
|
<i esIcon="{{ option.icon }}" [aria]="false"></i>
|
|
@@ -59,4 +72,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImpor
|
|
|
59
72
|
}], node: [{
|
|
60
73
|
type: Input
|
|
61
74
|
}] } });
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9uLWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lZHUtc2hhcmluZy11aS9zcmMvbGliL25vZGUtZW50cmllcy9vcHRpb24tYnV0dG9uL29wdGlvbi1idXR0b24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUE0QixNQUFNLGVBQWUsQ0FBQzs7Ozs7O0FBRzNFLGtHQUFrRztBQUNsRyxnR0FBZ0c7QUFDaEcsNEZBQTRGO0FBQzVGLFdBQVc7QUFrQlgsTUFBTSxPQUFPLHFCQUFxQjtJQWhCbEM7UUFvQkksWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixjQUFTLEdBQUcsS0FBSyxDQUFDO0tBeUJyQjtJQXhCRyxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQXNCO1FBQ3BDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxDQUFDLFVBQXNCLEVBQUUsSUFBVTtRQUNsRCxJQUFJLFVBQVUsQ0FBQyxlQUFlLEVBQUU7WUFDNUIsT0FBTyxNQUFNLFVBQVUsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDakQ7UUFDRCxPQUFPLFVBQVUsQ0FBQyxTQUFTLENBQUM7SUFDaEMsQ0FBQztJQUVPLEtBQUssQ0FBQyxhQUFhLENBQUMsVUFBc0IsRUFBRSxJQUFVO1FBQzFELElBQUksVUFBVSxDQUFDLFlBQVksRUFBRTtZQUN6QixPQUFPLFVBQVUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDeEM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFrQixFQUFFLElBQVU7UUFDdEMsSUFBSSxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ3hDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDekI7SUFDTCxDQUFDOzhHQTdCUSxxQkFBcUI7a0dBQXJCLHFCQUFxQix5SEFkcEI7Ozs7Ozs7Ozs7OztLQVlUOzsyRkFFUSxxQkFBcUI7a0JBaEJqQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxrQkFBa0I7b0JBQzVCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7O0tBWVQ7aUJBQ0o7OEJBRVksTUFBTTtzQkFBZCxLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTm9kZSB9IGZyb20gJ25neC1lZHUtc2hhcmluZy1hcGknO1xuaW1wb3J0IHsgT3B0aW9uSXRlbSB9IGZyb20gJy4uLy4uL3R5cGVzL29wdGlvbi1pdGVtJztcbi8vIFRPRE86IERlY2lkZSBpZiBwcm92aWRpbmcgZm9jdXMgaGlnaGxpZ2h0cyBhbmQgcmlwcGxlcyB3aXRoIHRoaXMgY29tcG9uZW50IGlzIGEgZ29vZCBpZGVhLiBXaGVuXG4vLyB1c2luZyBgYXBwLW5vZGUtdXJsYCBmb3IgY2FyZHMsIHdlIG1pZ2h0IG5lZWQgaGlnaGxpZ2h0cyBhbmQgcmlwcGxlcyBmb3IgdGhlIHdob2xlIGNhcmQgd2hpbGVcbi8vIGBhcHAtbm9kZS11cmxgIHNob3VsZCBvbmx5IHdyYXAgdGhlIHRpdGxlIHNpbmNlIGxpbmtzIHdpdGggbG90cyBvZiBjb250ZW50IGNvbmZ1c2Ugc2NyZWVuXG4vLyByZWFkZXJzLlxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2VzLW9wdGlvbi1idXR0b24nLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJ7eyBvcHRpb24ubmFtZSB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICBbY2xhc3MuZGlzcGxheS1ub25lXT1cIiFpc1Nob3duXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNFbmFibGVkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjbGljayhvcHRpb24sIG5vZGUpXCJcbiAgICAgICAgICAgIGF0dHIuZGF0YS10ZXN0PVwib3B0aW9uLWJ1dHRvbi17eyBvcHRpb24ubmFtZSB9fVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxpIGVzSWNvbj1cInt7IG9wdGlvbi5pY29uIH19XCIgW2FyaWFdPVwiZmFsc2VcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIGAsXG59KVxuZXhwb3J0IGNsYXNzIE9wdGlvbkJ1dHRvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gICAgQElucHV0KCkgb3B0aW9uOiBPcHRpb25JdGVtO1xuICAgIEBJbnB1dCgpIG5vZGU6IE5vZGU7XG5cbiAgICBpc1Nob3duID0gZmFsc2U7XG4gICAgaXNFbmFibGVkID0gZmFsc2U7XG4gICAgYXN5bmMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICB0aGlzLmlzRW5hYmxlZCA9IGF3YWl0IHRoaXMub3B0aW9uSXNWYWxpZCh0aGlzLm9wdGlvbiwgdGhpcy5ub2RlKTtcbiAgICAgICAgdGhpcy5pc1Nob3duID0gYXdhaXQgdGhpcy5vcHRpb25Jc1Nob3duKHRoaXMub3B0aW9uLCB0aGlzLm5vZGUpO1xuICAgIH1cblxuICAgIGFzeW5jIG9wdGlvbklzVmFsaWQob3B0aW9uSXRlbTogT3B0aW9uSXRlbSwgbm9kZTogTm9kZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICBpZiAob3B0aW9uSXRlbS5lbmFibGVkQ2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBvcHRpb25JdGVtLmVuYWJsZWRDYWxsYmFjayhub2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3B0aW9uSXRlbS5pc0VuYWJsZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBvcHRpb25Jc1Nob3duKG9wdGlvbkl0ZW06IE9wdGlvbkl0ZW0sIG5vZGU6IE5vZGUpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgaWYgKG9wdGlvbkl0ZW0uc2hvd0NhbGxiYWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9uSXRlbS5zaG93Q2FsbGJhY2sobm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgYXN5bmMgY2xpY2sob3B0aW9uOiBPcHRpb25JdGVtLCBub2RlOiBOb2RlKSB7XG4gICAgICAgIGlmIChhd2FpdCB0aGlzLm9wdGlvbklzU2hvd24ob3B0aW9uLCBub2RlKSkge1xuICAgICAgICAgICAgb3B0aW9uLmNhbGxiYWNrKG5vZGUpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
|
|
@@ -20,11 +20,11 @@ export class SortSelectPanelComponent {
|
|
|
20
20
|
});
|
|
21
21
|
}
|
|
22
22
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: SortSelectPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
23
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", type: SortSelectPanelComponent, selector: "es-sort-select-panel", inputs: { active: "active", direction: "direction", columns: "columns", customSortingInProgress: "customSortingInProgress" }, outputs: { sortChange: "sortChange", customSortingInProgressChange: "customSortingInProgressChange" }, ngImport: i0, template: "<mat-slide-toggle\n *ngIf=\"active === 'ccm:collection_ordered_position'\"\n [(ngModel)]=\"customSortingInProgress\"\n (ngModelChange)=\"customSortingInProgressChange.emit($event)\"\n>\n {{ 'COLLECTIONS.SORT_SLIDER' | translate }}\n</mat-slide-toggle>\n<button\n
|
|
23
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", type: SortSelectPanelComponent, selector: "es-sort-select-panel", inputs: { active: "active", direction: "direction", columns: "columns", customSortingInProgress: "customSortingInProgress" }, outputs: { sortChange: "sortChange", customSortingInProgressChange: "customSortingInProgressChange" }, ngImport: i0, template: "<mat-slide-toggle\n *ngIf=\"active === 'ccm:collection_ordered_position'\"\n [(ngModel)]=\"customSortingInProgress\"\n (ngModelChange)=\"customSortingInProgressChange.emit($event)\"\n>\n {{ 'COLLECTIONS.SORT_SLIDER' | translate }}\n</mat-slide-toggle>\n<ng-container *ngIf=\"columns?.length\">\n <button\n *ngIf=\"sortDropdown.menu\"\n [matMenuTriggerFor]=\"sortDropdown.menu\"\n mat-button\n color=\"primary\"\n >\n <span *ngIf=\"active\">{{ 'NODE.' + active | translate }}</span>\n <span *ngIf=\"!active\">{{ 'SORT_BY' | translate }}</span>\n <i\n *ngIf=\"active && active !== 'ccm:collection_ordered_position'\"\n [esIcon]=\"'arrow_' + (direction === 'asc' ? 'upward' : 'downward')\"\n ></i>\n </button>\n\n <es-sort-dropdown\n #sortDropdown\n [columns]=\"columns\"\n [sortBy]=\"active\"\n [sortAscending]=\"direction === 'asc'\"\n (onSort)=\"onSort($event)\"\n ></es-sort-dropdown>\n</ng-container>\n", styles: [":host{display:flex;justify-content:flex-end;align-items:center}mat-slide-toggle{margin-right:10px}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { kind: "component", type: i4.SortDropdownComponent, selector: "es-sort-dropdown", inputs: ["columns", "sortBy", "sortAscending"], outputs: ["onSort"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i6.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i7.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }] }); }
|
|
24
24
|
}
|
|
25
25
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: SortSelectPanelComponent, decorators: [{
|
|
26
26
|
type: Component,
|
|
27
|
-
args: [{ selector: 'es-sort-select-panel', template: "<mat-slide-toggle\n *ngIf=\"active === 'ccm:collection_ordered_position'\"\n [(ngModel)]=\"customSortingInProgress\"\n (ngModelChange)=\"customSortingInProgressChange.emit($event)\"\n>\n {{ 'COLLECTIONS.SORT_SLIDER' | translate }}\n</mat-slide-toggle>\n<button\n
|
|
27
|
+
args: [{ selector: 'es-sort-select-panel', template: "<mat-slide-toggle\n *ngIf=\"active === 'ccm:collection_ordered_position'\"\n [(ngModel)]=\"customSortingInProgress\"\n (ngModelChange)=\"customSortingInProgressChange.emit($event)\"\n>\n {{ 'COLLECTIONS.SORT_SLIDER' | translate }}\n</mat-slide-toggle>\n<ng-container *ngIf=\"columns?.length\">\n <button\n *ngIf=\"sortDropdown.menu\"\n [matMenuTriggerFor]=\"sortDropdown.menu\"\n mat-button\n color=\"primary\"\n >\n <span *ngIf=\"active\">{{ 'NODE.' + active | translate }}</span>\n <span *ngIf=\"!active\">{{ 'SORT_BY' | translate }}</span>\n <i\n *ngIf=\"active && active !== 'ccm:collection_ordered_position'\"\n [esIcon]=\"'arrow_' + (direction === 'asc' ? 'upward' : 'downward')\"\n ></i>\n </button>\n\n <es-sort-dropdown\n #sortDropdown\n [columns]=\"columns\"\n [sortBy]=\"active\"\n [sortAscending]=\"direction === 'asc'\"\n (onSort)=\"onSort($event)\"\n ></es-sort-dropdown>\n</ng-container>\n", styles: [":host{display:flex;justify-content:flex-end;align-items:center}mat-slide-toggle{margin-right:10px}\n"] }]
|
|
28
28
|
}], ctorParameters: function () { return []; }, propDecorators: { active: [{
|
|
29
29
|
type: Input
|
|
30
30
|
}], direction: [{
|
|
@@ -38,4 +38,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImpor
|
|
|
38
38
|
}], customSortingInProgressChange: [{
|
|
39
39
|
type: Output
|
|
40
40
|
}] } });
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydC1zZWxlY3QtcGFuZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi9ub2RlLWVudHJpZXMvc29ydC1zZWxlY3QtcGFuZWwvc29ydC1zZWxlY3QtcGFuZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi9ub2RlLWVudHJpZXMvc29ydC1zZWxlY3QtcGFuZWwvc29ydC1zZWxlY3QtcGFuZWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7OztBQVN2RSxNQUFNLE9BQU8sd0JBQXdCO0lBUWpDO1FBSlUsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFdEMsa0NBQTZCLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztJQUV2RCxDQUFDO0lBRWhCLE1BQU0sQ0FBQyxLQUFnQjtRQUNuQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztZQUNqQixNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUk7WUFDbEIsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTTtTQUM5QyxDQUFDLENBQUM7SUFDUCxDQUFDOzhHQWZRLHdCQUF3QjtrR0FBeEIsd0JBQXdCLGlTQ1RyQyxvOEJBOEJBOzsyRkRyQmEsd0JBQXdCO2tCQUxwQyxTQUFTOytCQUNJLHNCQUFzQjswRUFLdkIsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNJLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0UsdUJBQXVCO3NCQUEvQixLQUFLO2dCQUNJLDZCQUE2QjtzQkFBdEMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTb3J0LCBTb3J0RGlyZWN0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XG5pbXBvcnQgeyBMaXN0SXRlbVNvcnQsIFNvcnRFdmVudCwgU29ydFBhbmVsIH0gZnJvbSAnLi4vLi4vdHlwZXMvbGlzdC1pdGVtJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdlcy1zb3J0LXNlbGVjdC1wYW5lbCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NvcnQtc2VsZWN0LXBhbmVsLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zb3J0LXNlbGVjdC1wYW5lbC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBTb3J0U2VsZWN0UGFuZWxDb21wb25lbnQgaW1wbGVtZW50cyBTb3J0UGFuZWwge1xuICAgIEBJbnB1dCgpIGFjdGl2ZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGRpcmVjdGlvbjogU29ydERpcmVjdGlvbjtcbiAgICBASW5wdXQoKSBjb2x1bW5zOiBMaXN0SXRlbVNvcnRbXTtcbiAgICBAT3V0cHV0KCkgc29ydENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8U29ydD4oKTtcbiAgICBASW5wdXQoKSBjdXN0b21Tb3J0aW5nSW5Qcm9ncmVzczogYm9vbGVhbjtcbiAgICBAT3V0cHV0KCkgY3VzdG9tU29ydGluZ0luUHJvZ3Jlc3NDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgICBvblNvcnQoZXZlbnQ6IFNvcnRFdmVudCkge1xuICAgICAgICB0aGlzLnNvcnRDaGFuZ2UuZW1pdCh7XG4gICAgICAgICAgICBhY3RpdmU6IGV2ZW50Lm5hbWUsXG4gICAgICAgICAgICBkaXJlY3Rpb246IGV2ZW50LmFzY2VuZGluZyA/ICdhc2MnIDogJ2Rlc2MnLFxuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCI8bWF0LXNsaWRlLXRvZ2dsZVxuICAqbmdJZj1cImFjdGl2ZSA9PT0gJ2NjbTpjb2xsZWN0aW9uX29yZGVyZWRfcG9zaXRpb24nXCJcbiAgWyhuZ01vZGVsKV09XCJjdXN0b21Tb3J0aW5nSW5Qcm9ncmVzc1wiXG4gIChuZ01vZGVsQ2hhbmdlKT1cImN1c3RvbVNvcnRpbmdJblByb2dyZXNzQ2hhbmdlLmVtaXQoJGV2ZW50KVwiXG4+XG4gIHt7ICdDT0xMRUNUSU9OUy5TT1JUX1NMSURFUicgfCB0cmFuc2xhdGUgfX1cbjwvbWF0LXNsaWRlLXRvZ2dsZT5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW5zPy5sZW5ndGhcIj5cbiAgPGJ1dHRvblxuICAgICpuZ0lmPVwic29ydERyb3Bkb3duLm1lbnVcIlxuICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJzb3J0RHJvcGRvd24ubWVudVwiXG4gICAgbWF0LWJ1dHRvblxuICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gID5cbiAgICA8c3BhbiAqbmdJZj1cImFjdGl2ZVwiPnt7ICdOT0RFLicgKyBhY3RpdmUgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgPHNwYW4gKm5nSWY9XCIhYWN0aXZlXCI+e3sgJ1NPUlRfQlknIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgIDxpXG4gICAgICAqbmdJZj1cImFjdGl2ZSAmJiBhY3RpdmUgIT09ICdjY206Y29sbGVjdGlvbl9vcmRlcmVkX3Bvc2l0aW9uJ1wiXG4gICAgICBbZXNJY29uXT1cIidhcnJvd18nICsgKGRpcmVjdGlvbiA9PT0gJ2FzYycgPyAndXB3YXJkJyA6ICdkb3dud2FyZCcpXCJcbiAgICA+PC9pPlxuICA8L2J1dHRvbj5cblxuICA8ZXMtc29ydC1kcm9wZG93blxuICAgICNzb3J0RHJvcGRvd25cbiAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcbiAgICBbc29ydEJ5XT1cImFjdGl2ZVwiXG4gICAgW3NvcnRBc2NlbmRpbmddPVwiZGlyZWN0aW9uID09PSAnYXNjJ1wiXG4gICAgKG9uU29ydCk9XCJvblNvcnQoJGV2ZW50KVwiXG4gID48L2VzLXNvcnQtZHJvcGRvd24+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
|