@deeksha2309/sunbird-collection-editor 8.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/esm2022/lib/collection-editor-cursor.service.mjs +3 -0
- package/esm2022/lib/collection-editor-library.component.mjs +16 -0
- package/esm2022/lib/collection-editor-library.module.mjs +137 -0
- package/esm2022/lib/components/answer/answer.component.mjs +43 -0
- package/esm2022/lib/components/asset-browser/asset-browser.component.mjs +325 -0
- package/esm2022/lib/components/asset-browser/asset-browser.data.mjs +53 -0
- package/esm2022/lib/components/assign-page-number/assign-page-number.component.mjs +191 -0
- package/esm2022/lib/components/ckeditor-tool/ckeditor-tool.component.mjs +895 -0
- package/esm2022/lib/components/collection-icon/collection-icon.component.mjs +43 -0
- package/esm2022/lib/components/contentplayer-page/contentplayer-page.component.mjs +351 -0
- package/esm2022/lib/components/csv-upload/csv-upload.component.mjs +178 -0
- package/esm2022/lib/components/dialcode/dialcode.component.mjs +182 -0
- package/esm2022/lib/components/editor/editor.component.mjs +1125 -0
- package/esm2022/lib/components/fancy-tree/fancy-tree.component.mjs +529 -0
- package/esm2022/lib/components/header/header.component.mjs +123 -0
- package/esm2022/lib/components/library/library.component.mjs +242 -0
- package/esm2022/lib/components/library-filter/library-filter.component.mjs +149 -0
- package/esm2022/lib/components/library-list/library-list.component.mjs +92 -0
- package/esm2022/lib/components/library-player/library-player.component.mjs +62 -0
- package/esm2022/lib/components/manage-collaborator/manage-collaborator.component.mjs +256 -0
- package/esm2022/lib/components/meta-form/meta-form.component.mjs +377 -0
- package/esm2022/lib/components/options/options.component.mjs +144 -0
- package/esm2022/lib/components/plain-tree/plain-tree.component.mjs +125 -0
- package/esm2022/lib/components/progress-status/progress-status.component.mjs +46 -0
- package/esm2022/lib/components/publish-checklist/publish-checklist.component.mjs +67 -0
- package/esm2022/lib/components/quality-params-modal/quality-params-modal.component.mjs +52 -0
- package/esm2022/lib/components/question/question.component.mjs +1360 -0
- package/esm2022/lib/components/quml-player/quml-player.component.mjs +73 -0
- package/esm2022/lib/components/qumlplayer-page/qumlplayer-page.component.mjs +84 -0
- package/esm2022/lib/components/resource-reorder/resource-reorder.component.mjs +143 -0
- package/esm2022/lib/components/skeleton-loader/skeleton-loader.component.mjs +26 -0
- package/esm2022/lib/components/template/template.component.mjs +42 -0
- package/esm2022/lib/components/term-and-condition/term-and-condition.component.mjs +68 -0
- package/esm2022/lib/directives/telemetry-interact/telemetry-interact.directive.mjs +33 -0
- package/esm2022/lib/interfaces/McqForm.mjs +29 -0
- package/esm2022/lib/interfaces/editor.mjs +2 -0
- package/esm2022/lib/interfaces/framework.mjs +2 -0
- package/esm2022/lib/interfaces/httpOptions.mjs +2 -0
- package/esm2022/lib/interfaces/requestParam.mjs +2 -0
- package/esm2022/lib/interfaces/serverResponse.mjs +2 -0
- package/esm2022/lib/pipes/sanitize-html.pipe.mjs +20 -0
- package/esm2022/lib/services/config/category.config.json +8 -0
- package/esm2022/lib/services/config/config.service.mjs +27 -0
- package/esm2022/lib/services/config/editor.config.json +31 -0
- package/esm2022/lib/services/config/label.config.json +314 -0
- package/esm2022/lib/services/config/player.config.json +96 -0
- package/esm2022/lib/services/config/url.config.json +69 -0
- package/esm2022/lib/services/data/data.service.mjs +192 -0
- package/esm2022/lib/services/dialcode/dialcode.service.mjs +309 -0
- package/esm2022/lib/services/editor/editor.service.mjs +682 -0
- package/esm2022/lib/services/framework/framework.service.mjs +106 -0
- package/esm2022/lib/services/helper/helper.service.mjs +160 -0
- package/esm2022/lib/services/player/player.service.mjs +99 -0
- package/esm2022/lib/services/public-data/public-data.service.mjs +21 -0
- package/esm2022/lib/services/question/question.service.mjs +167 -0
- package/esm2022/lib/services/telemetry/telemetry.service.mjs +120 -0
- package/esm2022/lib/services/toaster/toaster.service.mjs +105 -0
- package/esm2022/lib/services/tree/tree.service.mjs +284 -0
- package/esm2022/project-sunbird-sunbird-collection-editor.mjs +5 -0
- package/esm2022/public-api.mjs +4 -0
- package/fesm2022/project-sunbird-sunbird-collection-editor.mjs +10138 -0
- package/fesm2022/project-sunbird-sunbird-collection-editor.mjs.map +1 -0
- package/index.d.ts +6 -0
- package/lib/assets/.gitkeep +0 -0
- package/lib/assets/images/MCQ.png +0 -0
- package/lib/assets/images/Spin.gif +0 -0
- package/lib/assets/images/bulkuploadfile.png +0 -0
- package/lib/assets/images/cancel-sign copy.png +0 -0
- package/lib/assets/images/cancel-sign.png +0 -0
- package/lib/assets/images/emptyResult.svg +1 -0
- package/lib/assets/images/icons-rtl.gif +0 -0
- package/lib/assets/images/icons.gif +0 -0
- package/lib/assets/images/imageicon.svg +16 -0
- package/lib/assets/images/imageicon_blue.svg +16 -0
- package/lib/assets/images/layoutoneicon.svg +16 -0
- package/lib/assets/images/layoutoneicon_blue.svg +16 -0
- package/lib/assets/images/layoutthreeicon.svg +18 -0
- package/lib/assets/images/layoutthreeicon_blue.svg +18 -0
- package/lib/assets/images/layouttwoicon.svg +18 -0
- package/lib/assets/images/layouttwoicon_blue.svg +18 -0
- package/lib/assets/images/leftalignicon.svg +17 -0
- package/lib/assets/images/leftalignicon_blue.svg +17 -0
- package/lib/assets/images/loader.gif +0 -0
- package/lib/assets/images/loader.svg +1 -0
- package/lib/assets/images/loading.gif +0 -0
- package/lib/assets/images/middlealignicon.svg +17 -0
- package/lib/assets/images/middlealignicon_blue.svg +17 -0
- package/lib/assets/images/question_collection.svg +18 -0
- package/lib/assets/images/rightalignicon.svg +17 -0
- package/lib/assets/images/rightalignicon_blue.svg +17 -0
- package/lib/assets/images/vline-rtl.gif +0 -0
- package/lib/assets/images/vline.gif +0 -0
- package/lib/assets/images/writing.png +0 -0
- package/lib/collection-editor-cursor.service.d.ts +5 -0
- package/lib/collection-editor-cursor.service.d.ts.map +1 -0
- package/lib/collection-editor-library.component.d.ts +9 -0
- package/lib/collection-editor-library.component.d.ts.map +1 -0
- package/lib/collection-editor-library.module.d.ts +50 -0
- package/lib/collection-editor-library.module.d.ts.map +1 -0
- package/lib/components/answer/answer.component.d.ts +24 -0
- package/lib/components/answer/answer.component.d.ts.map +1 -0
- package/lib/components/asset-browser/asset-browser.component.d.ts +81 -0
- package/lib/components/asset-browser/asset-browser.component.d.ts.map +1 -0
- package/lib/components/asset-browser/asset-browser.data.d.ts +52 -0
- package/lib/components/asset-browser/asset-browser.data.d.ts.map +1 -0
- package/lib/components/assign-page-number/assign-page-number.component.d.ts +38 -0
- package/lib/components/assign-page-number/assign-page-number.component.d.ts.map +1 -0
- package/lib/components/ckeditor-tool/ckeditor-tool.component.d.ts +161 -0
- package/lib/components/ckeditor-tool/ckeditor-tool.component.d.ts.map +1 -0
- package/lib/components/collection-icon/collection-icon.component.d.ts +18 -0
- package/lib/components/collection-icon/collection-icon.component.d.ts.map +1 -0
- package/lib/components/contentplayer-page/contentplayer-page.component.d.ts +54 -0
- package/lib/components/contentplayer-page/contentplayer-page.component.d.ts.map +1 -0
- package/lib/components/csv-upload/csv-upload.component.d.ts +42 -0
- package/lib/components/csv-upload/csv-upload.component.d.ts.map +1 -0
- package/lib/components/dialcode/dialcode.component.d.ts +48 -0
- package/lib/components/dialcode/dialcode.component.d.ts.map +1 -0
- package/lib/components/editor/editor.component.d.ts +146 -0
- package/lib/components/editor/editor.component.d.ts.map +1 -0
- package/lib/components/fancy-tree/fancy-tree.component.d.ts +77 -0
- package/lib/components/fancy-tree/fancy-tree.component.d.ts.map +1 -0
- package/lib/components/header/header.component.d.ts +46 -0
- package/lib/components/header/header.component.d.ts.map +1 -0
- package/lib/components/library/library.component.d.ts +69 -0
- package/lib/components/library/library.component.d.ts.map +1 -0
- package/lib/components/library-filter/library-filter.component.d.ts +47 -0
- package/lib/components/library-filter/library-filter.component.d.ts.map +1 -0
- package/lib/components/library-list/library-list.component.d.ts +32 -0
- package/lib/components/library-list/library-list.component.d.ts.map +1 -0
- package/lib/components/library-player/library-player.component.d.ts +24 -0
- package/lib/components/library-player/library-player.component.d.ts.map +1 -0
- package/lib/components/manage-collaborator/manage-collaborator.component.d.ts +75 -0
- package/lib/components/manage-collaborator/manage-collaborator.component.d.ts.map +1 -0
- package/lib/components/meta-form/meta-form.component.d.ts +51 -0
- package/lib/components/meta-form/meta-form.component.d.ts.map +1 -0
- package/lib/components/options/options.component.d.ts +53 -0
- package/lib/components/options/options.component.d.ts.map +1 -0
- package/lib/components/plain-tree/plain-tree.component.d.ts +20 -0
- package/lib/components/plain-tree/plain-tree.component.d.ts.map +1 -0
- package/lib/components/progress-status/progress-status.component.d.ts +25 -0
- package/lib/components/progress-status/progress-status.component.d.ts.map +1 -0
- package/lib/components/publish-checklist/publish-checklist.component.d.ts +23 -0
- package/lib/components/publish-checklist/publish-checklist.component.d.ts.map +1 -0
- package/lib/components/quality-params-modal/quality-params-modal.component.d.ts +24 -0
- package/lib/components/quality-params-modal/quality-params-modal.component.d.ts.map +1 -0
- package/lib/components/question/question.component.d.ts +215 -0
- package/lib/components/question/question.component.d.ts.map +1 -0
- package/lib/components/quml-player/quml-player.component.d.ts +26 -0
- package/lib/components/quml-player/quml-player.component.d.ts.map +1 -0
- package/lib/components/qumlplayer-page/qumlplayer-page.component.d.ts +31 -0
- package/lib/components/qumlplayer-page/qumlplayer-page.component.d.ts.map +1 -0
- package/lib/components/resource-reorder/resource-reorder.component.d.ts +45 -0
- package/lib/components/resource-reorder/resource-reorder.component.d.ts.map +1 -0
- package/lib/components/skeleton-loader/skeleton-loader.component.d.ts +13 -0
- package/lib/components/skeleton-loader/skeleton-loader.component.d.ts.map +1 -0
- package/lib/components/template/template.component.d.ts +21 -0
- package/lib/components/template/template.component.d.ts.map +1 -0
- package/lib/components/term-and-condition/term-and-condition.component.d.ts +26 -0
- package/lib/components/term-and-condition/term-and-condition.component.d.ts.map +1 -0
- package/lib/directives/telemetry-interact/telemetry-interact.directive.d.ts +27 -0
- package/lib/directives/telemetry-interact/telemetry-interact.directive.d.ts.map +1 -0
- package/lib/interfaces/McqForm.d.ts +32 -0
- package/lib/interfaces/McqForm.d.ts.map +1 -0
- package/lib/interfaces/editor.d.ts +78 -0
- package/lib/interfaces/editor.d.ts.map +1 -0
- package/lib/interfaces/framework.d.ts +46 -0
- package/lib/interfaces/framework.d.ts.map +1 -0
- package/lib/interfaces/httpOptions.d.ts +35 -0
- package/lib/interfaces/httpOptions.d.ts.map +1 -0
- package/lib/interfaces/requestParam.d.ts +24 -0
- package/lib/interfaces/requestParam.d.ts.map +1 -0
- package/lib/interfaces/serverResponse.d.ts +38 -0
- package/lib/interfaces/serverResponse.d.ts.map +1 -0
- package/lib/pipes/sanitize-html.pipe.d.ts +11 -0
- package/lib/pipes/sanitize-html.pipe.d.ts.map +1 -0
- package/lib/services/config/config.service.d.ts +13 -0
- package/lib/services/config/config.service.d.ts.map +1 -0
- package/lib/services/data/data.service.d.ts +85 -0
- package/lib/services/data/data.service.d.ts.map +1 -0
- package/lib/services/dialcode/dialcode.service.d.ts +36 -0
- package/lib/services/dialcode/dialcode.service.d.ts.map +1 -0
- package/lib/services/editor/editor.service.d.ts +150 -0
- package/lib/services/editor/editor.service.d.ts.map +1 -0
- package/lib/services/framework/framework.service.d.ts +35 -0
- package/lib/services/framework/framework.service.d.ts.map +1 -0
- package/lib/services/helper/helper.service.d.ts +41 -0
- package/lib/services/helper/helper.service.d.ts.map +1 -0
- package/lib/services/player/player.service.d.ts +33 -0
- package/lib/services/player/player.service.d.ts.map +1 -0
- package/lib/services/public-data/public-data.service.d.ts +15 -0
- package/lib/services/public-data/public-data.service.d.ts.map +1 -0
- package/lib/services/question/question.service.d.ts +30 -0
- package/lib/services/question/question.service.d.ts.map +1 -0
- package/lib/services/telemetry/telemetry.service.d.ts +45 -0
- package/lib/services/telemetry/telemetry.service.d.ts.map +1 -0
- package/lib/services/toaster/toaster.service.d.ts +50 -0
- package/lib/services/toaster/toaster.service.d.ts.map +1 -0
- package/lib/services/tree/tree.service.d.ts +51 -0
- package/lib/services/tree/tree.service.d.ts.map +1 -0
- package/package.json +32 -0
- package/project-sunbird-sunbird-collection-editor.d.ts.map +1 -0
- package/public-api.d.ts +4 -0
- package/public-api.d.ts.map +1 -0
|
@@ -0,0 +1,529 @@
|
|
|
1
|
+
import { Component, Input, ViewChild, Output, EventEmitter, ViewEncapsulation } from '@angular/core';
|
|
2
|
+
import 'jquery.fancytree';
|
|
3
|
+
import * as _ from 'lodash-es';
|
|
4
|
+
import { Subject } from 'rxjs';
|
|
5
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "../../services/tree/tree.service";
|
|
8
|
+
import * as i2 from "../../services/editor/editor.service";
|
|
9
|
+
import * as i3 from "../../services/telemetry/telemetry.service";
|
|
10
|
+
import * as i4 from "../../services/helper/helper.service";
|
|
11
|
+
import * as i5 from "../../services/toaster/toaster.service";
|
|
12
|
+
import * as i6 from "../../services/config/config.service";
|
|
13
|
+
import * as i7 from "../../services/dialcode/dialcode.service";
|
|
14
|
+
import * as i8 from "@angular/common";
|
|
15
|
+
import * as i9 from "../../directives/telemetry-interact/telemetry-interact.directive";
|
|
16
|
+
export class FancyTreeComponent {
|
|
17
|
+
constructor(treeService, editorService, telemetryService, helperService, toasterService, cdr, configService, dialcodeService) {
|
|
18
|
+
this.treeService = treeService;
|
|
19
|
+
this.editorService = editorService;
|
|
20
|
+
this.telemetryService = telemetryService;
|
|
21
|
+
this.helperService = helperService;
|
|
22
|
+
this.toasterService = toasterService;
|
|
23
|
+
this.cdr = cdr;
|
|
24
|
+
this.configService = configService;
|
|
25
|
+
this.dialcodeService = dialcodeService;
|
|
26
|
+
this.treeEventEmitter = new EventEmitter();
|
|
27
|
+
this.showLibraryButton = false;
|
|
28
|
+
this.rootMenuTemplate = `<span class="ui dropdown sb-dotted-dropdown" autoclose="itemClick" suidropdown="" tabindex="0">
|
|
29
|
+
<span id="contextMenu" class="p-0 w-auto"><i class="icon ellipsis vertical sb-color-black"></i></span>
|
|
30
|
+
<span id= "contextMenuDropDown" class="menu transition hidden" suidropdownmenu="" style="">
|
|
31
|
+
<div id="addchild" class="item">Add Child</div>
|
|
32
|
+
</span>
|
|
33
|
+
</span>`;
|
|
34
|
+
this.folderMenuTemplate = `<span id= "removeNodeIcon"> <i class="fa fa-trash-o" type="button"></i> </span><span class="ui dropdown sb-dotted-dropdown" autoclose="itemClick" suidropdown="" tabindex="0">
|
|
35
|
+
<span id="contextMenu" class="p-0 w-auto"><i class="icon ellipsis vertical sb-color-black"></i></span>
|
|
36
|
+
<span id= "contextMenuDropDown" class="menu transition hidden" suidropdownmenu="" style="">
|
|
37
|
+
<div id="addsibling" class="item">Add Sibling</div>
|
|
38
|
+
<div id="addchild" class="item">Add Child</div>
|
|
39
|
+
<div id="delete" class="item">Delete</div>
|
|
40
|
+
</span>
|
|
41
|
+
</span>`;
|
|
42
|
+
// tslint:disable-next-line:max-line-length
|
|
43
|
+
this.contentMenuTemplate = `<span id="contextMenu"><span id= "removeNodeIcon" type="content" > <i class="fa fa-trash-o" type="button"></i> </span></span>`;
|
|
44
|
+
this.onComponentDestroy$ = new Subject();
|
|
45
|
+
}
|
|
46
|
+
ngOnInit() {
|
|
47
|
+
this.config = _.cloneDeep(this.editorService.editorConfig.config);
|
|
48
|
+
this.config.mode = _.get(this.config, 'mode').toLowerCase();
|
|
49
|
+
if (!_.has(this.config, 'maxDepth')) { // TODO:: rethink this
|
|
50
|
+
this.config.maxDepth = 4;
|
|
51
|
+
}
|
|
52
|
+
this.initialize();
|
|
53
|
+
this.editorService.bulkUploadStatus$.subscribe(status => {
|
|
54
|
+
this.bulkUploadProcessingStatus = status;
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
ngAfterViewInit() {
|
|
58
|
+
this.renderTree(this.getTreeConfig());
|
|
59
|
+
}
|
|
60
|
+
initialize() {
|
|
61
|
+
const data = this.nodes.data;
|
|
62
|
+
this.nodeParentDependentMap = this.editorService.getParentDependentMap(this.nodes.data);
|
|
63
|
+
let treeData;
|
|
64
|
+
if (_.get(this.editorService, 'editorConfig.config.renderTaxonomy') === true && _.isEmpty(_.get(this.nodes, 'data.children'))) {
|
|
65
|
+
this.helperService.addDepthToHierarchy(this.nodes.data.children);
|
|
66
|
+
this.nodes.data.children = this.removeIntermediateLevelsFromFramework(this.nodes.data.children);
|
|
67
|
+
treeData = this.buildTreeFromFramework(this.nodes.data);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
treeData = this.buildTree(this.nodes.data);
|
|
71
|
+
}
|
|
72
|
+
this.editorService.treeData = treeData;
|
|
73
|
+
this.rootNode = [{
|
|
74
|
+
id: data.identifier || uuidv4(),
|
|
75
|
+
title: data.name,
|
|
76
|
+
tooltip: data.name,
|
|
77
|
+
...(data.contentType && { contentType: data.contentType }),
|
|
78
|
+
primaryCategory: data.primaryCategory,
|
|
79
|
+
objectType: data.objectType,
|
|
80
|
+
metadata: _.omit(data, ['children', 'collections']),
|
|
81
|
+
folder: true,
|
|
82
|
+
children: treeData,
|
|
83
|
+
root: true,
|
|
84
|
+
icon: _.get(this.config, 'iconClass')
|
|
85
|
+
}];
|
|
86
|
+
}
|
|
87
|
+
buildTreeFromFramework(data, tree, level) {
|
|
88
|
+
tree = tree || [];
|
|
89
|
+
if (data.children) {
|
|
90
|
+
data.children = _.sortBy(data.children, ['index']);
|
|
91
|
+
}
|
|
92
|
+
_.forEach(data.children, (child) => {
|
|
93
|
+
const childTree = [];
|
|
94
|
+
tree.push({
|
|
95
|
+
id: uuidv4(),
|
|
96
|
+
title: child.name,
|
|
97
|
+
tooltip: child.name,
|
|
98
|
+
primaryCategory: child.primaryCategory,
|
|
99
|
+
metadata: _.omit(child, ['children', 'collections']),
|
|
100
|
+
folder: true,
|
|
101
|
+
children: childTree,
|
|
102
|
+
root: false,
|
|
103
|
+
icon: 'fa fa-folder-o'
|
|
104
|
+
});
|
|
105
|
+
if (child.children) {
|
|
106
|
+
this.buildTreeFromFramework(child, childTree);
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
return tree;
|
|
110
|
+
}
|
|
111
|
+
removeIntermediateLevelsFromFramework(data, parentData) {
|
|
112
|
+
const tree = [];
|
|
113
|
+
_.forEach(data, child => {
|
|
114
|
+
if (child.depth === 0 || child.depth === this.helperService.treeDepth) {
|
|
115
|
+
const node = {
|
|
116
|
+
..._.omit(child, ['children']),
|
|
117
|
+
...(child.children && { children: this.removeIntermediateLevelsFromFramework(child.children, child) })
|
|
118
|
+
};
|
|
119
|
+
tree.push(node);
|
|
120
|
+
}
|
|
121
|
+
else if ((child.depth !== 0 || child.depth !== this.helperService.treeDepth)) {
|
|
122
|
+
parentData.children = _.filter(parentData.children, item => (item.depth === 0 || item.depth === this.helperService.treeDepth));
|
|
123
|
+
if (child.children && child.children.length > 0) {
|
|
124
|
+
const children = this.removeIntermediateLevelsFromFramework(child.children, child);
|
|
125
|
+
parentData.children = _.concat(parentData.children, children);
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
parentData.children = _.concat(parentData.children, child.children);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
return !_.isEmpty(tree) ? tree : _.flatten(parentData.children);
|
|
133
|
+
}
|
|
134
|
+
buildTree(data, tree, level) {
|
|
135
|
+
tree = tree || [];
|
|
136
|
+
if (data.children) {
|
|
137
|
+
data.children = _.sortBy(data.children, ['index']);
|
|
138
|
+
}
|
|
139
|
+
data.level = level ? (level + 1) : 1;
|
|
140
|
+
_.forEach(data.children, (child) => {
|
|
141
|
+
const childTree = [];
|
|
142
|
+
tree.push({
|
|
143
|
+
id: child.identifier || uuidv4(),
|
|
144
|
+
title: child.name,
|
|
145
|
+
tooltip: child.name,
|
|
146
|
+
...(child.contentType && { contentType: child.contentType }),
|
|
147
|
+
primaryCategory: child.primaryCategory,
|
|
148
|
+
objectType: child.objectType,
|
|
149
|
+
metadata: _.omit(child, ['children', 'collections']),
|
|
150
|
+
folder: this.isFolder(child),
|
|
151
|
+
children: childTree,
|
|
152
|
+
root: false,
|
|
153
|
+
icon: this.getIconClass(child, data.level)
|
|
154
|
+
});
|
|
155
|
+
if (child.visibility === 'Parent') {
|
|
156
|
+
this.buildTree(child, childTree, data.level);
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
return tree;
|
|
160
|
+
}
|
|
161
|
+
isFolder(child) {
|
|
162
|
+
if (this.isContent(child)) {
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
return child.visibility === 'Parent' ? true : false;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
getIconClass(child, level) {
|
|
170
|
+
if (this.isContent(child)) {
|
|
171
|
+
return 'fa fa-file-o';
|
|
172
|
+
}
|
|
173
|
+
else if (child.visibility === 'Parent') {
|
|
174
|
+
return _.get(this.config, `hierarchy.level.${level}.iconClass`) || 'fa fa-folder-o';
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
return 'fa fa-file-o';
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
isContent(child) {
|
|
181
|
+
// tslint:disable-next-line:max-line-length
|
|
182
|
+
return (_.get(this.config, 'objectType') === 'QuestionSet' && child.objectType === 'Question');
|
|
183
|
+
}
|
|
184
|
+
renderTree(options) {
|
|
185
|
+
options = { ...options, ...this.options };
|
|
186
|
+
$(this.tree.nativeElement).fancytree(options);
|
|
187
|
+
this.treeService.setTreeElement(this.tree.nativeElement);
|
|
188
|
+
if (this.options.showConnectors) {
|
|
189
|
+
$('.fancytree-container').addClass('fancytree-connectors');
|
|
190
|
+
}
|
|
191
|
+
setTimeout(() => {
|
|
192
|
+
this.treeService.reloadTree(this.rootNode);
|
|
193
|
+
this.treeService.setActiveNode();
|
|
194
|
+
const rootNode = this.treeService.getFirstChild();
|
|
195
|
+
rootNode.setExpanded(true);
|
|
196
|
+
this.eachNodeActionButton(rootNode);
|
|
197
|
+
this.dialcodeService.readExistingQrCode();
|
|
198
|
+
});
|
|
199
|
+
if (_.get(this.editorService, 'editorConfig.config.renderTaxonomy') === true && _.isEmpty(_.get(this.nodes, 'data.children'))) {
|
|
200
|
+
_.forEach(this.rootNode[0]?.children, (child) => {
|
|
201
|
+
this.treeService.updateTreeNodeMetadata(child.metadata, child.id, child.primaryCategory, child.objectType);
|
|
202
|
+
_.forEach(child.children, (el) => {
|
|
203
|
+
this.treeService.updateTreeNodeMetadata(el.metadata, el.id, el.primaryCategory, el.objectType);
|
|
204
|
+
});
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
getTreeConfig() {
|
|
209
|
+
const options = {
|
|
210
|
+
extensions: ['glyph', 'dnd5'],
|
|
211
|
+
clickFolderMode: 3,
|
|
212
|
+
source: this.rootNode,
|
|
213
|
+
escapeTitles: true,
|
|
214
|
+
glyph: {
|
|
215
|
+
preset: 'awesome4',
|
|
216
|
+
map: {
|
|
217
|
+
folder: 'icon folder sb-fancyTree-icon',
|
|
218
|
+
folderOpen: 'icon folder outline sb-fancyTree-icon'
|
|
219
|
+
}
|
|
220
|
+
},
|
|
221
|
+
dnd5: {
|
|
222
|
+
autoExpandMS: 400,
|
|
223
|
+
// focusOnClick: true,
|
|
224
|
+
preventVoidMoves: true,
|
|
225
|
+
preventRecursion: true,
|
|
226
|
+
dragStart: (node, data) => {
|
|
227
|
+
/** This function MUST be defined to enable dragging for the tree.
|
|
228
|
+
* Return false to cancel dragging of node.
|
|
229
|
+
*/
|
|
230
|
+
const draggable = _.get(this.config, 'mode') === 'edit' ? true : false;
|
|
231
|
+
return draggable;
|
|
232
|
+
},
|
|
233
|
+
dragEnter: (node, data) => {
|
|
234
|
+
/** data.otherNode may be null for non-fancytree droppables.
|
|
235
|
+
* Return false to disallow dropping on node. In this case
|
|
236
|
+
* dragOver and dragLeave are not called.
|
|
237
|
+
* Return 'over', 'before, or 'after' to force a hitMode.
|
|
238
|
+
* Return ['before', 'after'] to restrict available hitModes.
|
|
239
|
+
* Any other return value will calc the hitMode from the cursor position.
|
|
240
|
+
*/
|
|
241
|
+
// Prevent dropping a parent below another parent (only sort
|
|
242
|
+
// nodes under the same parent)
|
|
243
|
+
/* if(node.parent !== data.otherNode.parent){
|
|
244
|
+
return false;
|
|
245
|
+
}
|
|
246
|
+
// Don't allow dropping *over* a node (would create a child)
|
|
247
|
+
return ["before", "after"];
|
|
248
|
+
*/
|
|
249
|
+
return true;
|
|
250
|
+
},
|
|
251
|
+
dragDrop: (node, data) => {
|
|
252
|
+
/** This function MUST be defined to enable dropping of items on
|
|
253
|
+
* the tree.
|
|
254
|
+
*/
|
|
255
|
+
// data.otherNode.moveTo(node, data.hitMode);
|
|
256
|
+
return this.dragDrop(node, data);
|
|
257
|
+
},
|
|
258
|
+
filter: {
|
|
259
|
+
autoApply: true,
|
|
260
|
+
autoExpand: false,
|
|
261
|
+
counter: true,
|
|
262
|
+
fuzzy: false,
|
|
263
|
+
hideExpandedCounter: true,
|
|
264
|
+
hideExpanders: false,
|
|
265
|
+
highlight: true,
|
|
266
|
+
leavesOnly: false,
|
|
267
|
+
nodata: true,
|
|
268
|
+
mode: 'dimm'
|
|
269
|
+
}
|
|
270
|
+
},
|
|
271
|
+
init: (event, data) => { },
|
|
272
|
+
click: (event, data) => {
|
|
273
|
+
this.tree.nativeElement.click();
|
|
274
|
+
this.telemetryService.interact({ edata: this.getTelemetryInteractEdata() });
|
|
275
|
+
return true;
|
|
276
|
+
},
|
|
277
|
+
activate: (event, data) => {
|
|
278
|
+
this.treeEventEmitter.emit({ type: 'nodeSelect', data: data.node });
|
|
279
|
+
setTimeout(() => {
|
|
280
|
+
this.attachContextMenu(data.node, true);
|
|
281
|
+
this.eachNodeActionButton(data.node);
|
|
282
|
+
}, 10);
|
|
283
|
+
},
|
|
284
|
+
renderNode: (event, data) => {
|
|
285
|
+
const node = data.node;
|
|
286
|
+
const $nodeSpan = $(node.span);
|
|
287
|
+
// check if span of node already rendered
|
|
288
|
+
if (!$nodeSpan.data('rendered')) {
|
|
289
|
+
this.attachContextMenu(node);
|
|
290
|
+
// span rendered
|
|
291
|
+
$nodeSpan.data('rendered', true);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
};
|
|
295
|
+
return options;
|
|
296
|
+
}
|
|
297
|
+
eachNodeActionButton(node) {
|
|
298
|
+
this.visibility = {};
|
|
299
|
+
if (this.bulkUploadProcessingStatus) {
|
|
300
|
+
this.visibility.addChild = false;
|
|
301
|
+
this.visibility.addSibling = false;
|
|
302
|
+
this.visibility.addFromLibrary = false;
|
|
303
|
+
this.visibility.addQuestionFromLibrary = false;
|
|
304
|
+
this.visibility.createNew = false;
|
|
305
|
+
}
|
|
306
|
+
else {
|
|
307
|
+
const nodeLevel = node.getLevel() - 1;
|
|
308
|
+
this.visibility.addChild = ((node.folder === false) || (nodeLevel >= this.config.maxDepth)) ? false : true;
|
|
309
|
+
// tslint:disable-next-line:max-line-length
|
|
310
|
+
this.visibility.addSibling = ((node.folder === true) && (!node.data.root) && !((node.getLevel() - 1) > this.config.maxDepth)) ? true : false;
|
|
311
|
+
if (nodeLevel === 0) {
|
|
312
|
+
this.visibility.addFromLibrary = _.isEmpty(_.get(this.config, 'children')) || _.get(this.config, 'enableQuestionCreation') === false ? false : true;
|
|
313
|
+
this.visibility.createNew = _.isEmpty(_.get(this.config, 'children')) || _.get(this.config, 'enableQuestionCreation') === false ? false : true;
|
|
314
|
+
this.visibility.addQuestionFromLibrary = !_.isEmpty(_.get(this.config, 'children')) && _.get(this.config, 'enableAddFromLibrary') === true ? true : false;
|
|
315
|
+
}
|
|
316
|
+
else {
|
|
317
|
+
const hierarchylevelData = this.config.hierarchy[`level${nodeLevel}`];
|
|
318
|
+
// tslint:disable-next-line:max-line-length
|
|
319
|
+
this.visibility.addFromLibrary = ((node.folder === false) || _.isEmpty(_.get(hierarchylevelData, 'children')) || _.get(this.config, 'enableQuestionCreation') === false) ? false : true;
|
|
320
|
+
// tslint:disable-next-line:max-line-length
|
|
321
|
+
this.visibility.createNew = ((node.folder === false) || _.isEmpty(_.get(hierarchylevelData, 'children')) || _.get(this.config, 'enableQuestionCreation') === false) ? false : true;
|
|
322
|
+
this.visibility.addQuestionFromLibrary = ((node.folder === true) && !_.isEmpty(_.get(hierarchylevelData, 'children')) && _.get(this.config, 'enableAddFromLibrary') === true) ? true : false;
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
if (_.get(this.editorService, 'editorConfig.config.renderTaxonomy') === true) {
|
|
326
|
+
this.visibility.addChild = false;
|
|
327
|
+
this.visibility.addSibling = false;
|
|
328
|
+
}
|
|
329
|
+
this.cdr.detectChanges();
|
|
330
|
+
}
|
|
331
|
+
addChild() {
|
|
332
|
+
this.telemetryService.interact({ edata: this.getTelemetryInteractEdata('add_child') });
|
|
333
|
+
const tree = $(this.tree.nativeElement).fancytree('getTree');
|
|
334
|
+
const nodeConfig = this.config.hierarchy[tree.getActiveNode().getLevel()];
|
|
335
|
+
const childrenTypes = _.get(nodeConfig, 'children.Content');
|
|
336
|
+
if ((((tree.getActiveNode().getLevel() - 1) >= this.config.maxDepth))) {
|
|
337
|
+
return this.toasterService.error(_.get(this.configService, 'labelConfig.messages.error.007'));
|
|
338
|
+
}
|
|
339
|
+
this.treeService.addNode('child');
|
|
340
|
+
}
|
|
341
|
+
addSibling() {
|
|
342
|
+
this.telemetryService.interact({ edata: this.getTelemetryInteractEdata('add_sibling') });
|
|
343
|
+
const tree = $(this.tree.nativeElement).fancytree('getTree');
|
|
344
|
+
const node = tree.getActiveNode();
|
|
345
|
+
if (!node.data.root) {
|
|
346
|
+
this.treeService.addNode('sibling');
|
|
347
|
+
}
|
|
348
|
+
else {
|
|
349
|
+
this.toasterService.error(_.get(this.configService, 'labelConfig.messages.error.007'));
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
getActiveNode() {
|
|
353
|
+
return $(this.tree.nativeElement).fancytree('getTree').getActiveNode();
|
|
354
|
+
}
|
|
355
|
+
attachContextMenu(node, activeNode) {
|
|
356
|
+
if (_.get(this.config, 'mode') !== 'edit' || (node.data.root === true && _.isEmpty(this.config.hierarchy))) {
|
|
357
|
+
return;
|
|
358
|
+
}
|
|
359
|
+
const $nodeSpan = $(node.span);
|
|
360
|
+
// tslint:disable-next-line:max-line-length // TODO:: (node.data.contentType === 'CourseUnit') check this condition
|
|
361
|
+
const menuTemplate = node.data.root === true ? this.rootMenuTemplate : (node.data.root === false && node.folder === true ? this.folderMenuTemplate : this.contentMenuTemplate);
|
|
362
|
+
const iconsButton = $(menuTemplate);
|
|
363
|
+
if ((node.getLevel() - 1) >= this.config.maxDepth) {
|
|
364
|
+
iconsButton.find('#addchild').remove();
|
|
365
|
+
}
|
|
366
|
+
let contextMenu = $($nodeSpan[0]).find(`#contextMenu`);
|
|
367
|
+
if (!contextMenu.length) {
|
|
368
|
+
$nodeSpan.append(iconsButton);
|
|
369
|
+
if (!activeNode) {
|
|
370
|
+
iconsButton.hide();
|
|
371
|
+
}
|
|
372
|
+
$nodeSpan[0].onmouseover = () => {
|
|
373
|
+
iconsButton.show();
|
|
374
|
+
};
|
|
375
|
+
$nodeSpan[0].onmouseout = () => {
|
|
376
|
+
iconsButton.hide();
|
|
377
|
+
};
|
|
378
|
+
contextMenu = $($nodeSpan[0]).find(`#contextMenu`);
|
|
379
|
+
contextMenu.on('click', (event) => {
|
|
380
|
+
this.treeService.closePrevOpenedDropDown();
|
|
381
|
+
setTimeout(() => {
|
|
382
|
+
const nSpan = $(this.getActiveNode().span);
|
|
383
|
+
const dropDownElement = $(nSpan[0]).find(`#contextMenuDropDown`);
|
|
384
|
+
dropDownElement.removeClass('hidden');
|
|
385
|
+
dropDownElement.addClass('visible');
|
|
386
|
+
_.forEach(_.get(_.first(dropDownElement), 'children'), item => {
|
|
387
|
+
item.addEventListener('click', (ev) => {
|
|
388
|
+
this.treeService.closePrevOpenedDropDown();
|
|
389
|
+
this.handleActionButtons(ev.currentTarget);
|
|
390
|
+
ev.stopPropagation();
|
|
391
|
+
});
|
|
392
|
+
});
|
|
393
|
+
}, 100);
|
|
394
|
+
// event.stopPropagation();
|
|
395
|
+
});
|
|
396
|
+
$($nodeSpan[0]).find(`#removeNodeIcon`).on('click', (event) => {
|
|
397
|
+
const isContent = event.currentTarget.getAttribute('type') && event.currentTarget.getAttribute('type') === 'content';
|
|
398
|
+
this.removeNode(isContent);
|
|
399
|
+
});
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
dropNode(targetNode, currentNode) {
|
|
403
|
+
let dropAllowed;
|
|
404
|
+
dropAllowed = true;
|
|
405
|
+
// tslint:disable-next-line:max-line-length
|
|
406
|
+
if (currentNode.otherNode.getLevel() === targetNode.getLevel() && currentNode.otherNode.folder === true && currentNode.hitMode !== 'over') {
|
|
407
|
+
dropAllowed = true;
|
|
408
|
+
// tslint:disable-next-line:max-line-length
|
|
409
|
+
}
|
|
410
|
+
else if (currentNode.otherNode.folder === true && (this.maxTreeDepth(currentNode.otherNode) + (targetNode.getLevel() - 1)) > _.get(this.config, 'maxDepth')) {
|
|
411
|
+
return this.dropNotAllowed();
|
|
412
|
+
}
|
|
413
|
+
else if (currentNode.otherNode.folder === false && !this.checkContentAddition(targetNode, currentNode)) {
|
|
414
|
+
dropAllowed = false;
|
|
415
|
+
}
|
|
416
|
+
if (dropAllowed) {
|
|
417
|
+
currentNode.otherNode.moveTo(targetNode, currentNode.hitMode);
|
|
418
|
+
this.treeService.nextTreeStatus('reorder');
|
|
419
|
+
return true;
|
|
420
|
+
}
|
|
421
|
+
else {
|
|
422
|
+
this.toasterService.warning(`${currentNode.otherNode.title} cannot be added to ${currentNode.node.title}`);
|
|
423
|
+
return false;
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
dragDrop(node, data) {
|
|
427
|
+
if ((data.hitMode === 'before' || data.hitMode === 'after' || data.hitMode === 'over') && data.node.data.root) {
|
|
428
|
+
return this.dropNotAllowed();
|
|
429
|
+
}
|
|
430
|
+
if (_.has(this.config, 'maxDepth')) {
|
|
431
|
+
return this.dropNode(node, data);
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
dropNotAllowed() {
|
|
435
|
+
this.toasterService.warning(_.get(this.configService, 'labelConfig.messages.error.007'));
|
|
436
|
+
return false;
|
|
437
|
+
}
|
|
438
|
+
maxTreeDepth(root) {
|
|
439
|
+
const buffer = [{ node: root, depth: 1 }];
|
|
440
|
+
let current = buffer.pop();
|
|
441
|
+
let max = 0;
|
|
442
|
+
while (current && current.node) {
|
|
443
|
+
// Find all children of this node.
|
|
444
|
+
_.forEach(current.node.children, (child) => {
|
|
445
|
+
buffer.push({ node: child, depth: current.depth + 1 });
|
|
446
|
+
});
|
|
447
|
+
if (current.depth > max) {
|
|
448
|
+
max = current.depth;
|
|
449
|
+
}
|
|
450
|
+
current = buffer.pop();
|
|
451
|
+
}
|
|
452
|
+
return max;
|
|
453
|
+
}
|
|
454
|
+
checkContentAddition(targetNode, contentNode) {
|
|
455
|
+
if (targetNode.folder === false && (contentNode.hitMode === 'before' || contentNode.hitMode === 'after')) {
|
|
456
|
+
return true;
|
|
457
|
+
}
|
|
458
|
+
if (targetNode.folder === false && contentNode.hitMode === 'over') {
|
|
459
|
+
return false;
|
|
460
|
+
}
|
|
461
|
+
const nodeConfig = this.config.hierarchy[`level${targetNode.getLevel() - 1}`];
|
|
462
|
+
const contentPrimaryCategories = _.flatMap(_.get(nodeConfig, 'children'));
|
|
463
|
+
if (!_.isEmpty(contentPrimaryCategories)) {
|
|
464
|
+
return _.includes(contentPrimaryCategories, _.get(contentNode, 'otherNode.data.metadata.primaryCategory')) ? true : false;
|
|
465
|
+
}
|
|
466
|
+
return false;
|
|
467
|
+
}
|
|
468
|
+
removeNode(isContent) {
|
|
469
|
+
this.treeEventEmitter.emit({ type: 'deleteNode', isContent });
|
|
470
|
+
this.telemetryService.interact({ edata: this.getTelemetryInteractEdata('delete') });
|
|
471
|
+
}
|
|
472
|
+
handleActionButtons(el) {
|
|
473
|
+
console.log('action buttons -------->', el.id);
|
|
474
|
+
switch (el.id) {
|
|
475
|
+
case 'edit':
|
|
476
|
+
break;
|
|
477
|
+
case 'delete':
|
|
478
|
+
this.removeNode();
|
|
479
|
+
break;
|
|
480
|
+
case 'addsibling':
|
|
481
|
+
this.addSibling();
|
|
482
|
+
break;
|
|
483
|
+
case 'addchild':
|
|
484
|
+
this.addChild();
|
|
485
|
+
break;
|
|
486
|
+
case 'addresource':
|
|
487
|
+
break;
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
addFromLibrary() {
|
|
491
|
+
this.editorService.emitshowLibraryPageEvent('showLibraryPage');
|
|
492
|
+
}
|
|
493
|
+
getTelemetryInteractEdata(id) {
|
|
494
|
+
return {
|
|
495
|
+
id: id || 'collection-toc',
|
|
496
|
+
type: 'click',
|
|
497
|
+
subtype: 'launch',
|
|
498
|
+
pageid: this.telemetryService.telemetryPageId,
|
|
499
|
+
extra: {
|
|
500
|
+
values: [_.get(this.getActiveNode(), 'data')]
|
|
501
|
+
}
|
|
502
|
+
};
|
|
503
|
+
}
|
|
504
|
+
createNewContent() {
|
|
505
|
+
this.treeEventEmitter.emit({ type: 'createNewContent' });
|
|
506
|
+
}
|
|
507
|
+
ngOnDestroy() {
|
|
508
|
+
this.onComponentDestroy$.next();
|
|
509
|
+
this.onComponentDestroy$.complete();
|
|
510
|
+
}
|
|
511
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FancyTreeComponent, deps: [{ token: i1.TreeService }, { token: i2.EditorService }, { token: i3.EditorTelemetryService }, { token: i4.HelperService }, { token: i5.ToasterService }, { token: i0.ChangeDetectorRef }, { token: i6.ConfigService }, { token: i7.DialcodeService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
512
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FancyTreeComponent, selector: "lib-fancy-tree", inputs: { nodes: "nodes", options: "options", buttonLoaders: "buttonLoaders" }, outputs: { treeEventEmitter: "treeEventEmitter" }, viewQueries: [{ propertyName: "tree", first: true, predicate: ["fancyTree"], descendants: true }], ngImport: i0, template: "<div #fancyTree></div>\n<div class=\"sb-fixed-with-whitebg pr-20 d-flex flex-jc-space-between\" *ngIf=\"config && config.mode === 'edit'\">\n <div class=\"d-flex w-25\">\n <div class=\"sb-btn-cover\">\n <button [ngClass]=\"visibility?.addSibling ? '' : 'sb-disabled'\" (click)=\"addSibling();\"\n class=\"sb-btn sb-btn-outline-primary sb-btn-normal sb-btn-radius p-0 b-none\"><i aria-hidden=\"true\" class=\"icon plus\"></i>\n {{configService.labelConfig?.button_labels?.add_sibling_btn_label}} </button>\n </div>\n <div class=\"sb-btn-cover\">\n <button [ngClass]=\"visibility?.addChild ? '' : 'sb-disabled'\" (click)=\"addChild();\"\n class=\"sb-btn sb-btn-outline-primary sb-btn-normal sb-btn-radius b-none p-0\"><i class=\"icon plus\"></i>\n {{configService.labelConfig?.button_labels?.add_child_btn_label}} </button>\n </div>\n </div>\n <button *ngIf=\"config.objectType !== 'QuestionSet'\" (click)=\"addFromLibrary();\"\n [disabled]=\"!visibility?.addFromLibrary\"\n [ngClass]=\"[!visibility?.addFromLibrary ? 'sb-btn-outline-disabled' : '', (visibility?.addFromLibrary && buttonLoaders?.addFromLibraryButtonLoader) ? 'sb-btn-loading-spinner sb-btn-outline-disabled': '']\"\n class=\"sb-btn sb-btn-outline-primary sb-btn-normal mt-10 mr-30\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('add_from_library','click','launch', telemetryService.telemetryPageId)\">\n <i class=\"icon plus\" aria-hidden=\"true\" *ngIf=\"!buttonLoaders?.addFromLibraryButtonLoader\"></i>\n <div class=\"sb-loading-spinner\" *ngIf=\"buttonLoaders?.addFromLibraryButtonLoader\" role=\"status\" aria-hidden=\"true\">\n </div>\n {{configService.labelConfig?.button_labels?.add_from_library_btn_label}}\n </button>\n <button *ngIf=\"config.objectType === 'QuestionSet'\" [disabled]=\"!visibility?.createNew\"\n [ngClass]=\"[!visibility?.createNew ? 'sb-btn-outline-disabled' : '', (visibility?.createNew && buttonLoaders?.addFromLibraryButtonLoader) ? 'sb-btn-loading-spinner sb-btn-outline-disabled': '']\"\n type=\"button\" class=\"sb-btn sb-btn-normal sb-btn-primary mt-10 mr-30\" (click)=\"createNewContent()\"\n libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('create_new','click','launch', telemetryService.telemetryPageId)\">\n <i class=\"icon plus\" *ngIf=\"!buttonLoaders?.addFromLibraryButtonLoader\"></i>\n <div class=\"sb-loading-spinner\" *ngIf=\"buttonLoaders?.addFromLibraryButtonLoader\" role=\"status\" aria-hidden=\"true\">\n </div>\n {{configService.labelConfig?.button_labels?.create_new_btn_label}}\n </button>\n</div>", styles: [".sb-collectionTree-fancyTreelist ul{padding:0!important}.sb-collectionTree-fancyTreelist .ui-fancytree{margin-bottom:1rem!important}.sb-collectionTree-fancyTreelist .ui-fancytree:before{background:none!important}.sb-collectionTree-fancyTreelist .ui-fancytree ul:before{background:none!important}.sb-collectionTree-fancyTreelist .ui-fancytree .fancytree-folder .fancytree-title{color:var(--primary-color)!important;font-size:.9286rem!important;font-weight:700!important;padding-left:5px;width:inherit!important}.sb-collectionTree-fancyTreelist .ui-fancytree .fancytree-folder .highlightNode{color:red!important}.sb-collectionTree-fancyTreelist .ui-fancytree .fancytree-folder .highlightNode:before{color:red!important}.sb-collectionTree-fancyTreelist .ui-fancytree li{padding:0;margin:0 0 1px}.sb-collectionTree-fancyTreelist .ui-fancytree li .fancytree-ico-c{padding-left:5px!important}.sb-collectionTree-fancyTreelist .ui-fancytree li .fancytree-expanded{padding:15px 33px;border:1px solid transparent;background-color:#fff}.sb-collectionTree-fancyTreelist .ui-fancytree li .fancytree-active{border:1px solid #d0e0f3;background-color:var(--primary-0);padding:15px 33px;border-top:none}.sb-collectionTree-fancyTreelist .ui-fancytree li:last-child:after{display:none}.sb-collectionTree-fancyTreelist .ui-fancytree li ul{padding-top:1px}.sb-collectionTree-fancyTreelist .ui-fancytree li ul li{list-style-type:none}.sb-collectionTree-fancyTreelist .ui-fancytree li ul li .fancytree-custom-icon:before{color:var(--primary-color)!important;margin-top:2px;float:left;margin-left:6px;font-size:16px}.sb-collectionTree-fancyTreelist .ui-fancytree li ul li .fancytree-custom-icon:last-child:after{display:none}.sb-collectionTree-fancyTreelist .ui-fancytree li ul li .fancytree-node{padding:6px 6px 8px 5px;margin-left:45px;border:1px solid transparent}.sb-collectionTree-fancyTreelist .ui-fancytree li ul li .fancytree-node.fancytree-active,.sb-collectionTree-fancyTreelist .ui-fancytree li ul li .fancytree-node.fancytree-focused,.sb-collectionTree-fancyTreelist .ui-fancytree li ul li .fancytree-node:hover{border:1px solid #d0e0f3;background-color:var(--primary-0);border-right:0}.sb-collectionTree-fancyTreelist .ui-fancytree li:before{background:none!important}.sb-collectionTree-fancyTreelist .ui-fancytree li .sb-fancyTree-icon{color:var(--gray-300)!important}.sb-collectionTree-fancyTreelist .ui-fancytree li .fancytree-custom-icon:before{color:var(--primary-color)!important;margin-left:5px}.sb-collectionTree-fancyTreelist .ui-fancytree .fa-caret-down{margin-top:6px;display:block;width:10px;padding-left:2px}.sb-collectionTree-fancyTreelist .ui-fancytree .fa-caret-right{margin-top:6px;display:block;width:10px;padding-left:6px}.sb-collectionTree-fancyTreelist .ui-fancytree{padding-right:.785rem;margin:0;padding:0;list-style-type:none}.sb-fixed-with-whitebg{position:fixed;width:100%;border-top:1px solid #ddd;left:0;right:0;bottom:0;background-color:#fff;z-index:99999;padding:0!important}.sb-fixed-with-whitebg .sb-btn-cover{padding:.5rem;border-right:solid 1px #ccc;width:50%;text-align:center}.sb-fixed-with-whitebg .sb-btn-cover .sb-btn:hover{background:none!important;color:var(--primary-400)}.sb-dotted-dropdown{position:absolute!important;right:6px;padding-left:33px}.sb-dotted-dropdown .menu{right:0!important;left:inherit!important}.sb-dotted-dropdown .menu .item{font-size:.785rem!important}.eight.bg-white{border-left:solid 1px var(--gray-100);padding-bottom:4.5rem!important}.b-none{border:none!important}.w-25{width:25.1%;max-width:25.1%}#removeNodeIcon{padding-right:24px}\n"], dependencies: [{ kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.TelemetryInteractDirective, selector: "[libTelemetryInteract]", inputs: ["telemetryInteractEdata"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
513
|
+
}
|
|
514
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FancyTreeComponent, decorators: [{
|
|
515
|
+
type: Component,
|
|
516
|
+
args: [{ selector: 'lib-fancy-tree', encapsulation: ViewEncapsulation.None, template: "<div #fancyTree></div>\n<div class=\"sb-fixed-with-whitebg pr-20 d-flex flex-jc-space-between\" *ngIf=\"config && config.mode === 'edit'\">\n <div class=\"d-flex w-25\">\n <div class=\"sb-btn-cover\">\n <button [ngClass]=\"visibility?.addSibling ? '' : 'sb-disabled'\" (click)=\"addSibling();\"\n class=\"sb-btn sb-btn-outline-primary sb-btn-normal sb-btn-radius p-0 b-none\"><i aria-hidden=\"true\" class=\"icon plus\"></i>\n {{configService.labelConfig?.button_labels?.add_sibling_btn_label}} </button>\n </div>\n <div class=\"sb-btn-cover\">\n <button [ngClass]=\"visibility?.addChild ? '' : 'sb-disabled'\" (click)=\"addChild();\"\n class=\"sb-btn sb-btn-outline-primary sb-btn-normal sb-btn-radius b-none p-0\"><i class=\"icon plus\"></i>\n {{configService.labelConfig?.button_labels?.add_child_btn_label}} </button>\n </div>\n </div>\n <button *ngIf=\"config.objectType !== 'QuestionSet'\" (click)=\"addFromLibrary();\"\n [disabled]=\"!visibility?.addFromLibrary\"\n [ngClass]=\"[!visibility?.addFromLibrary ? 'sb-btn-outline-disabled' : '', (visibility?.addFromLibrary && buttonLoaders?.addFromLibraryButtonLoader) ? 'sb-btn-loading-spinner sb-btn-outline-disabled': '']\"\n class=\"sb-btn sb-btn-outline-primary sb-btn-normal mt-10 mr-30\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('add_from_library','click','launch', telemetryService.telemetryPageId)\">\n <i class=\"icon plus\" aria-hidden=\"true\" *ngIf=\"!buttonLoaders?.addFromLibraryButtonLoader\"></i>\n <div class=\"sb-loading-spinner\" *ngIf=\"buttonLoaders?.addFromLibraryButtonLoader\" role=\"status\" aria-hidden=\"true\">\n </div>\n {{configService.labelConfig?.button_labels?.add_from_library_btn_label}}\n </button>\n <button *ngIf=\"config.objectType === 'QuestionSet'\" [disabled]=\"!visibility?.createNew\"\n [ngClass]=\"[!visibility?.createNew ? 'sb-btn-outline-disabled' : '', (visibility?.createNew && buttonLoaders?.addFromLibraryButtonLoader) ? 'sb-btn-loading-spinner sb-btn-outline-disabled': '']\"\n type=\"button\" class=\"sb-btn sb-btn-normal sb-btn-primary mt-10 mr-30\" (click)=\"createNewContent()\"\n libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('create_new','click','launch', telemetryService.telemetryPageId)\">\n <i class=\"icon plus\" *ngIf=\"!buttonLoaders?.addFromLibraryButtonLoader\"></i>\n <div class=\"sb-loading-spinner\" *ngIf=\"buttonLoaders?.addFromLibraryButtonLoader\" role=\"status\" aria-hidden=\"true\">\n </div>\n {{configService.labelConfig?.button_labels?.create_new_btn_label}}\n </button>\n</div>", styles: [".sb-collectionTree-fancyTreelist ul{padding:0!important}.sb-collectionTree-fancyTreelist .ui-fancytree{margin-bottom:1rem!important}.sb-collectionTree-fancyTreelist .ui-fancytree:before{background:none!important}.sb-collectionTree-fancyTreelist .ui-fancytree ul:before{background:none!important}.sb-collectionTree-fancyTreelist .ui-fancytree .fancytree-folder .fancytree-title{color:var(--primary-color)!important;font-size:.9286rem!important;font-weight:700!important;padding-left:5px;width:inherit!important}.sb-collectionTree-fancyTreelist .ui-fancytree .fancytree-folder .highlightNode{color:red!important}.sb-collectionTree-fancyTreelist .ui-fancytree .fancytree-folder .highlightNode:before{color:red!important}.sb-collectionTree-fancyTreelist .ui-fancytree li{padding:0;margin:0 0 1px}.sb-collectionTree-fancyTreelist .ui-fancytree li .fancytree-ico-c{padding-left:5px!important}.sb-collectionTree-fancyTreelist .ui-fancytree li .fancytree-expanded{padding:15px 33px;border:1px solid transparent;background-color:#fff}.sb-collectionTree-fancyTreelist .ui-fancytree li .fancytree-active{border:1px solid #d0e0f3;background-color:var(--primary-0);padding:15px 33px;border-top:none}.sb-collectionTree-fancyTreelist .ui-fancytree li:last-child:after{display:none}.sb-collectionTree-fancyTreelist .ui-fancytree li ul{padding-top:1px}.sb-collectionTree-fancyTreelist .ui-fancytree li ul li{list-style-type:none}.sb-collectionTree-fancyTreelist .ui-fancytree li ul li .fancytree-custom-icon:before{color:var(--primary-color)!important;margin-top:2px;float:left;margin-left:6px;font-size:16px}.sb-collectionTree-fancyTreelist .ui-fancytree li ul li .fancytree-custom-icon:last-child:after{display:none}.sb-collectionTree-fancyTreelist .ui-fancytree li ul li .fancytree-node{padding:6px 6px 8px 5px;margin-left:45px;border:1px solid transparent}.sb-collectionTree-fancyTreelist .ui-fancytree li ul li .fancytree-node.fancytree-active,.sb-collectionTree-fancyTreelist .ui-fancytree li ul li .fancytree-node.fancytree-focused,.sb-collectionTree-fancyTreelist .ui-fancytree li ul li .fancytree-node:hover{border:1px solid #d0e0f3;background-color:var(--primary-0);border-right:0}.sb-collectionTree-fancyTreelist .ui-fancytree li:before{background:none!important}.sb-collectionTree-fancyTreelist .ui-fancytree li .sb-fancyTree-icon{color:var(--gray-300)!important}.sb-collectionTree-fancyTreelist .ui-fancytree li .fancytree-custom-icon:before{color:var(--primary-color)!important;margin-left:5px}.sb-collectionTree-fancyTreelist .ui-fancytree .fa-caret-down{margin-top:6px;display:block;width:10px;padding-left:2px}.sb-collectionTree-fancyTreelist .ui-fancytree .fa-caret-right{margin-top:6px;display:block;width:10px;padding-left:6px}.sb-collectionTree-fancyTreelist .ui-fancytree{padding-right:.785rem;margin:0;padding:0;list-style-type:none}.sb-fixed-with-whitebg{position:fixed;width:100%;border-top:1px solid #ddd;left:0;right:0;bottom:0;background-color:#fff;z-index:99999;padding:0!important}.sb-fixed-with-whitebg .sb-btn-cover{padding:.5rem;border-right:solid 1px #ccc;width:50%;text-align:center}.sb-fixed-with-whitebg .sb-btn-cover .sb-btn:hover{background:none!important;color:var(--primary-400)}.sb-dotted-dropdown{position:absolute!important;right:6px;padding-left:33px}.sb-dotted-dropdown .menu{right:0!important;left:inherit!important}.sb-dotted-dropdown .menu .item{font-size:.785rem!important}.eight.bg-white{border-left:solid 1px var(--gray-100);padding-bottom:4.5rem!important}.b-none{border:none!important}.w-25{width:25.1%;max-width:25.1%}#removeNodeIcon{padding-right:24px}\n"] }]
|
|
517
|
+
}], ctorParameters: function () { return [{ type: i1.TreeService }, { type: i2.EditorService }, { type: i3.EditorTelemetryService }, { type: i4.HelperService }, { type: i5.ToasterService }, { type: i0.ChangeDetectorRef }, { type: i6.ConfigService }, { type: i7.DialcodeService }]; }, propDecorators: { tree: [{
|
|
518
|
+
type: ViewChild,
|
|
519
|
+
args: ['fancyTree']
|
|
520
|
+
}], nodes: [{
|
|
521
|
+
type: Input
|
|
522
|
+
}], options: [{
|
|
523
|
+
type: Input
|
|
524
|
+
}], buttonLoaders: [{
|
|
525
|
+
type: Input
|
|
526
|
+
}], treeEventEmitter: [{
|
|
527
|
+
type: Output
|
|
528
|
+
}] } });
|
|
529
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFuY3ktdHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb2xsZWN0aW9uLWVkaXRvci1saWJyYXJ5L3NyYy9saWIvY29tcG9uZW50cy9mYW5jeS10cmVlL2ZhbmN5LXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29sbGVjdGlvbi1lZGl0b3ItbGlicmFyeS9zcmMvbGliL2NvbXBvbmVudHMvZmFuY3ktdHJlZS9mYW5jeS10cmVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQWlCLEtBQUssRUFBRSxTQUFTLEVBQWMsTUFBTSxFQUFFLFlBQVksRUFDekQsaUJBQWlCLEVBQ3JDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxLQUFLLENBQUMsTUFBTSxXQUFXLENBQUM7QUFVL0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsRUFBRSxJQUFJLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7QUFVcEMsTUFBTSxPQUFPLGtCQUFrQjtJQStCN0IsWUFBbUIsV0FBd0IsRUFBVSxhQUE0QixFQUM5RCxnQkFBd0MsRUFBVSxhQUE0QixFQUM3RSxjQUE4QixFQUFVLEdBQXNCLEVBQy9ELGFBQTRCLEVBQVUsZUFBZ0M7UUFIdEUsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFBVSxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM5RCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXdCO1FBQVUsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDN0UsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQVUsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDL0Qsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFBVSxvQkFBZSxH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TCxFQUFFLEVBQUUsRUFBRSxJQUFJLGdCQUFnQjtZQUMxQixJQUFJLEVBQUUsT0FBTztZQUNiLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLE1BQU0sRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZTtZQUM3QyxLQUFLLEVBQUU7Z0JBQ0wsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDOUM7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN0QyxDQUFDOytHQWhoQlUsa0JBQWtCO21HQUFsQixrQkFBa0IsNFJDMUIvQiw0cEZBa0NNOzs0RkRSTyxrQkFBa0I7a0JBTjlCLFNBQVM7K0JBQ0UsZ0JBQWdCLGlCQUdYLGlCQUFpQixDQUFDLElBQUk7c1RBR04sSUFBSTtzQkFBbEMsU0FBUzt1QkFBQyxXQUFXO2dCQUNOLEtBQUs7c0JBQXBCLEtBQUs7Z0JBQ1UsT0FBTztzQkFBdEIsS0FBSztnQkFDSSxhQUFhO3NCQUF0QixLQUFLO2dCQUNXLGdCQUFnQjtzQkFBaEMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCwgQWZ0ZXJWaWV3SW5pdCwgSW5wdXQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsXG4gIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3RW5jYXBzdWxhdGlvbiwgQ2hhbmdlRGV0ZWN0b3JSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgJ2pxdWVyeS5mYW5jeXRyZWUnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgVHJlZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cmVlL3RyZWUuc2VydmljZSc7XG5pbXBvcnQgeyBFZGl0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZWRpdG9yL2VkaXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IEhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9oZWxwZXIvaGVscGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRWRpdG9yVGVsZW1ldHJ5U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RlbGVtZXRyeS90ZWxlbWV0cnkuc2VydmljZSc7XG5pbXBvcnQgeyBUb2FzdGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RvYXN0ZXIvdG9hc3Rlci5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb25maWcvY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgIERpYWxjb2RlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RpYWxjb2RlL2RpYWxjb2RlLnNlcnZpY2UnO1xuXG5cbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnO1xuXG5kZWNsYXJlIHZhciAkOiBhbnk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1mYW5jeS10cmVlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZhbmN5LXRyZWUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9mYW5jeS10cmVlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIEZhbmN5VHJlZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZCgnZmFuY3lUcmVlJykgcHVibGljIHRyZWU6IEVsZW1lbnRSZWY7XG4gIEBJbnB1dCgpIHB1YmxpYyBub2RlczogYW55O1xuICBASW5wdXQoKSBwdWJsaWMgb3B0aW9uczogYW55O1xuICBASW5wdXQoICkgYnV0dG9uTG9hZGVyczogYW55O1xuICBAT3V0cHV0KCkgcHVibGljIHRyZWVFdmVudEVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwdWJsaWMgY29uZmlnOiBhbnk7XG4gIHB1YmxpYyBzaG93VHJlZTogYm9vbGVhbjtcbiAgcHVibGljIHZpc2liaWxpdHk6IGFueTtcbiAgcHVibGljIHNob3dBZGRDaGlsZEJ1dHRvbjogYm9vbGVhbjtcbiAgcHVibGljIHNob3dBZGRTaWJsaW5nQnV0dG9uOiBib29sZWFuO1xuICBwdWJsaWMgcm9vdE5vZGU6IGFueTtcbiAgcHVibGljIHNob3dMaWJyYXJ5QnV0dG9uID0gZmFsc2U7XG4gIHB1YmxpYyByb290TWVudVRlbXBsYXRlID0gYDxzcGFuIGNsYXNzPVwidWkgZHJvcGRvd24gc2ItZG90dGVkLWRyb3Bkb3duXCIgYXV0b2Nsb3NlPVwiaXRlbUNsaWNrXCIgc3VpZHJvcGRvd249XCJcIiB0YWJpbmRleD1cIjBcIj5cbiAgPHNwYW4gaWQ9XCJjb250ZXh0TWVudVwiIGNsYXNzPVwicC0wIHctYXV0b1wiPjxpIGNsYXNzPVwiaWNvbiBlbGxpcHNpcyB2ZXJ0aWNhbCBzYi1jb2xvci1ibGFja1wiPjwvaT48L3NwYW4+XG4gIDxzcGFuIGlkPSBcImNvbnRleHRNZW51RHJvcERvd25cIiBjbGFzcz1cIm1lbnUgdHJhbnNpdGlvbiBoaWRkZW5cIiBzdWlkcm9wZG93bm1lbnU9XCJcIiBzdHlsZT1cIlwiPlxuICAgIDxkaXYgaWQ9XCJhZGRjaGlsZFwiIGNsYXNzPVwiaXRlbVwiPkFkZCBDaGlsZDwvZGl2PlxuICA8L3NwYW4+XG4gIDwvc3Bhbj5gO1xuICBwdWJsaWMgZm9sZGVyTWVudVRlbXBsYXRlID0gYDxzcGFuIGlkPSBcInJlbW92ZU5vZGVJY29uXCI+IDxpIGNsYXNzPVwiZmEgZmEtdHJhc2gtb1wiIHR5cGU9XCJidXR0b25cIj48L2k+IDwvc3Bhbj48c3BhbiBjbGFzcz1cInVpIGRyb3Bkb3duIHNiLWRvdHRlZC1kcm9wZG93blwiIGF1dG9jbG9zZT1cIml0ZW1DbGlja1wiIHN1aWRyb3Bkb3duPVwiXCIgdGFiaW5kZXg9XCIwXCI+XG4gIDxzcGFuIGlkPVwiY29udGV4dE1lbnVcIiBjbGFzcz1cInAtMCB3LWF1dG9cIj48aSBjbGFzcz1cImljb24gZWxsaXBzaXMgdmVydGljYWwgc2ItY29sb3ItYmxhY2tcIj48L2k+PC9zcGFuPlxuICA8c3BhbiBpZD0gXCJjb250ZXh0TWVudURyb3BEb3duXCIgY2xhc3M9XCJtZW51IHRyYW5zaXRpb24gaGlkZGVuXCIgc3VpZHJvcGRvd25tZW51PVwiXCIgc3R5bGU9XCJcIj5cbiAgICA8ZGl2IGlkPVwiYWRkc2libGluZ1wiIGNsYXNzPVwiaXRlbVwiPkFkZCBTaWJsaW5nPC9kaXY+XG4gICAgPGRpdiBpZD1cImFkZGNoaWxkXCIgY2xhc3M9XCJpdGVtXCI+QWRkIENoaWxkPC9kaXY+XG4gICAgPGRpdiBpZD1cImRlbGV0ZVwiIGNsYXNzPVwiaXRlbVwiPkRlbGV0ZTwvZGl2PlxuICA8L3NwYW4+XG4gIDwvc3Bhbj5gO1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gIHB1YmxpYyBjb250ZW50TWVudVRlbXBsYXRlID0gYDxzcGFuIGlkPVwiY29udGV4dE1lbnVcIj48c3BhbiBpZD0gXCJyZW1vdmVOb2RlSWNvblwiIHR5cGU9XCJjb250ZW50XCIgPiA8aSBjbGFzcz1cImZhIGZhLXRyYXNoLW9cIiB0eXBlPVwiYnV0dG9uXCI+PC9pPiA8L3NwYW4+PC9zcGFuPmA7XG4gIHB1YmxpYyBub2RlUGFyZW50RGVwZW5kZW50TWFwOiBhbnk7XG4gIHB1YmxpYyBidWxrVXBsb2FkUHJvY2Vzc2luZ1N0YXR1czogYW55O1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdHJlZVNlcnZpY2U6IFRyZWVTZXJ2aWNlLCBwcml2YXRlIGVkaXRvclNlcnZpY2U6IEVkaXRvclNlcnZpY2UsXG4gICAgICAgICAgICAgIHB1YmxpYyB0ZWxlbWV0cnlTZXJ2aWNlOiBFZGl0b3JUZWxlbWV0cnlTZXJ2aWNlLCBwcml2YXRlIGhlbHBlclNlcnZpY2U6IEhlbHBlclNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgdG9hc3RlclNlcnZpY2U6IFRvYXN0ZXJTZXJ2aWNlLCBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgICAgICAgIHB1YmxpYyBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLCBwcml2YXRlIGRpYWxjb2RlU2VydmljZTogRGlhbGNvZGVTZXJ2aWNlKSB7IH1cbiAgcHJpdmF0ZSBvbkNvbXBvbmVudERlc3Ryb3kkID0gbmV3IFN1YmplY3Q8YW55PigpO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuY29uZmlnID0gXy5jbG9uZURlZXAodGhpcy5lZGl0b3JTZXJ2aWNlLmVkaXRvckNvbmZpZy5jb25maWcpO1xuICAgIHRoaXMuY29uZmlnLm1vZGUgPSAgXy5nZXQodGhpcy5jb25maWcsICdtb2RlJykudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoIV8uaGFzKHRoaXMuY29uZmlnLCAnbWF4RGVwdGgnKSkgeyAvLyBUT0RPOjogcmV0aGluayB0aGlzXG4gICAgICB0aGlzLmNvbmZpZy5tYXhEZXB0aCA9IDQ7XG4gICAgfVxuICAgIHRoaXMuaW5pdGlhbGl6ZSgpO1xuICAgIHRoaXMuZWRpdG9yU2VydmljZS5idWxrVXBsb2FkU3RhdHVzJC5zdWJzY3JpYmUoc3RhdHVzID0+IHtcbiAgICAgIHRoaXMuYnVsa1VwbG9hZFByb2Nlc3NpbmdTdGF0dXMgPSBzdGF0dXM7XG4gICAgfSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5yZW5kZXJUcmVlKHRoaXMuZ2V0VHJlZUNvbmZpZygpKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZSgpIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5ub2Rlcy5kYXRhO1xuICAgIHRoaXMubm9kZVBhcmVudERlcGVuZGVudE1hcCA9IHRoaXMuZWRpdG9yU2VydmljZS5nZXRQYXJlbnREZXBlbmRlbnRNYXAodGhpcy5ub2Rlcy5kYXRhKTtcbiAgICBsZXQgdHJlZURhdGE7XG4gICAgaWYgKF8uZ2V0KHRoaXMuZWRpdG9yU2VydmljZSwgJ2VkaXRvckNvbmZpZy5jb25maWcucmVuZGVyVGF4b25vbXknKSA9PT0gdHJ1ZSAmJiBfLmlzRW1wdHkoXy5nZXQodGhpcy5ub2RlcywgJ2RhdGEuY2hpbGRyZW4nKSkpIHtcbiAgICAgIHRoaXMuaGVscGVyU2VydmljZS5hZGREZXB0aFRvSGllcmFyY2h5KHRoaXMubm9kZXMuZGF0YS5jaGlsZHJlbik7XG4gICAgICB0aGlzLm5vZGVzLmRhdGEuY2hpbGRyZW4gPSAgIHRoaXMucmVtb3ZlSW50ZXJtZWRpYXRlTGV2ZWxzRnJvbUZyYW1ld29yayh0aGlzLm5vZGVzLmRhdGEuY2hpbGRyZW4pO1xuICAgICAgdHJlZURhdGEgPSB0aGlzLmJ1aWxkVHJlZUZyb21GcmFtZXdvcmsodGhpcy5ub2Rlcy5kYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdHJlZURhdGEgPSB0aGlzLmJ1aWxkVHJlZSh0aGlzLm5vZGVzLmRhdGEpO1xuICAgIH1cbiAgICB0aGlzLmVkaXRvclNlcnZpY2UudHJlZURhdGEgPSB0cmVlRGF0YTtcbiAgICB0aGlzLnJvb3ROb2RlID0gW3tcbiAgICAgIGlkOiBkYXRhLmlkZW50aWZpZXIgfHwgdXVpZHY0KCksXG4gICAgICB0aXRsZTogZGF0YS5uYW1lLFxuICAgICAgdG9vbHRpcDogZGF0YS5uYW1lLFxuICAgICAgLi4uKGRhdGEuY29udGVudFR5cGUgJiYge2NvbnRlbnRUeXBlOiBkYXRhLmNvbnRlbnRUeXBlfSksXG4gICAgICBwcmltYXJ5Q2F0ZWdvcnk6IGRhdGEucHJpbWFyeUNhdGVnb3J5LFxuICAgICAgb2JqZWN0VHlwZTogZGF0YS5vYmplY3RUeXBlLFxuICAgICAgbWV0YWRhdGE6IF8ub21pdChkYXRhLCBbJ2NoaWxkcmVuJywgJ2NvbGxlY3Rpb25zJ10pLFxuICAgICAgZm9sZGVyOiB0cnVlLFxuICAgICAgY2hpbGRyZW46IHRyZWVEYXRhLFxuICAgICAgcm9vdDogdHJ1ZSxcbiAgICAgIGljb246IF8uZ2V0KHRoaXMuY29uZmlnLCAnaWNvbkNsYXNzJylcbiAgICB9XTtcbiAgfVxuXG4gIGJ1aWxkVHJlZUZyb21GcmFtZXdvcmsoZGF0YSwgdHJlZT8sIGxldmVsPykge1xuICAgIHRyZWUgPSB0cmVlIHx8IFtdO1xuICAgIGlmIChkYXRhLmNoaWxkcmVuKSB7IGRhdGEuY2hpbGRyZW4gPSBfLnNvcnRCeShkYXRhLmNoaWxkcmVuLCBbJ2luZGV4J10pOyB9XG4gICAgXy5mb3JFYWNoKGRhdGEuY2hpbGRyZW4sIChjaGlsZCkgPT4ge1xuICAgICAgY29uc3QgY2hpbGRUcmVlID0gW107XG4gICAgICB0cmVlLnB1c2goe1xuICAgICAgICBpZDogdXVpZHY0KCksXG4gICAgICAgIHRpdGxlOiBjaGlsZC5uYW1lLFxuICAgICAgICB0b29sdGlwOiBjaGlsZC5uYW1lLFxuICAgICAgICBwcmltYXJ5Q2F0ZWdvcnk6IGNoaWxkLnByaW1hcnlDYXRlZ29yeSxcbiAgICAgICAgbWV0YWRhdGE6IF8ub21pdChjaGlsZCwgWydjaGlsZHJlbicsICdjb2xsZWN0aW9ucyddKSxcbiAgICAgICAgZm9sZGVyOiB0cnVlLFxuICAgICAgICBjaGlsZHJlbjogY2hpbGRUcmVlLFxuICAgICAgICByb290OiBmYWxzZSxcbiAgICAgICAgaWNvbjogJ2ZhIGZhLWZvbGRlci1vJ1xuICAgICAgfSk7XG4gICAgICBpZiAoY2hpbGQuY2hpbGRyZW4pIHtcbiAgICAgICAgdGhpcy5idWlsZFRyZWVGcm9tRnJhbWV3b3JrKGNoaWxkLCBjaGlsZFRyZWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0cmVlO1xuICB9XG5cbiAgcmVtb3ZlSW50ZXJtZWRpYXRlTGV2ZWxzRnJvbUZyYW1ld29yayhkYXRhLCBwYXJlbnREYXRhPykge1xuICAgIGNvbnN0IHRyZWUgPSBbXTtcbiAgICBfLmZvckVhY2goZGF0YSwgY2hpbGQgPT4ge1xuICAgICAgaWYgKGNoaWxkLmRlcHRoID09PSAwIHx8IGNoaWxkLmRlcHRoID09PSB0aGlzLmhlbHBlclNlcnZpY2UudHJlZURlcHRoKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB7XG4gICAgICAgICAgLi4uXy5vbWl0KGNoaWxkLCBbJ2NoaWxkcmVuJ10pLFxuICAgICAgICAgIC4uLihjaGlsZC5jaGlsZHJlbiAmJiB7Y2hpbGRyZW46IHRoaXMucmVtb3ZlSW50ZXJtZWRpYXRlTGV2ZWxzRnJvbUZyYW1ld29yayhjaGlsZC5jaGlsZHJlbiwgY2hpbGQpfSlcbiAgICAgICAgfTtcbiAgICAgICAgdHJlZS5wdXNoKFxuICAgICAgICAgIG5vZGVcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoKGNoaWxkLmRlcHRoICE9PSAwIHx8IGNoaWxkLmRlcHRoICE9PSB0aGlzLmhlbHBlclNlcnZpY2UudHJlZURlcHRoKSkge1xuICAgICAgICBwYXJlbnREYXRhLmNoaWxkcmVuICA9IF8uZmlsdGVyKHBhcmVudERhdGEuY2hpbGRyZW4sIGl0ZW0gPT4gKGl0ZW0uZGVwdGggPT09IDAgfHwgaXRlbS5kZXB0aCA9PT0gdGhpcy5oZWxwZXJTZXJ2aWNlLnRyZWVEZXB0aCkpO1xuICAgICAgICBpZiAoY2hpbGQuY2hpbGRyZW4gJiYgY2hpbGQuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5yZW1vdmVJbnRlcm1lZGlhdGVMZXZlbHNGcm9tRnJhbWV3b3JrKGNoaWxkLmNoaWxkcmVuLCBjaGlsZCk7XG4gICAgICAgICAgcGFyZW50RGF0YS5jaGlsZHJlbiA9IF8uY29uY2F0KHBhcmVudERhdGEuY2hpbGRyZW4sIGNoaWxkcmVuKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYXJlbnREYXRhLmNoaWxkcmVuID0gXy5jb25jYXQocGFyZW50RGF0YS5jaGlsZHJlbiwgY2hpbGQuY2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuICFfLmlzRW1wdHkodHJlZSkgPyB0cmVlIDogXy5mbGF0dGVuKHBhcmVudERhdGEuY2hpbGRyZW4pO1xuICB9XG5cbiAgYnVpbGRUcmVlKGRhdGEsIHRyZWU/LCBsZXZlbD8pIHtcbiAgICB0cmVlID0gdHJlZSB8fCBbXTtcbiAgICBpZiAoZGF0YS5jaGlsZHJlbikgeyBkYXRhLmNoaWxkcmVuID0gXy5zb3J0QnkoZGF0YS5jaGlsZHJlbiwgWydpbmRleCddKTsgfVxuICAgIGRhdGEubGV2ZWwgPSBsZXZlbCA/IChsZXZlbCArIDEpIDogMTtcbiAgICBfLmZvckVhY2goZGF0YS5jaGlsZHJlbiwgKGNoaWxkKSA9PiB7XG4gICAgICBjb25zdCBjaGlsZFRyZWUgPSBbXTtcbiAgICAgIHRyZWUucHVzaCh7XG4gICAgICAgIGlkOiBjaGlsZC5pZGVudGlmaWVyIHx8IHV1aWR2NCgpLFxuICAgICAgICB0aXRsZTogY2hpbGQubmFtZSxcbiAgICAgICAgdG9vbHRpcDogY2hpbGQubmFtZSxcbiAgICAgICAgLi4uKGNoaWxkLmNvbnRlbnRUeXBlICYmIHtjb250ZW50VHlwZTogY2hpbGQuY29udGVudFR5cGV9KSxcbiAgICAgICAgcHJpbWFyeUNhdGVnb3J5OiBjaGlsZC5wcmltYXJ5Q2F0ZWdvcnksXG4gICAgICAgIG9iamVjdFR5cGU6IGNoaWxkLm9iamVjdFR5cGUsXG4gICAgICAgIG1ldGFkYXRhOiBfLm9taXQoY2hpbGQsIFsnY2hpbGRyZW4nLCAnY29sbGVjdGlvbnMnXSksXG4gICAgICAgIGZvbGRlcjogdGhpcy5pc0ZvbGRlcihjaGlsZCksXG4gICAgICAgIGNoaWxkcmVuOiBjaGlsZFRyZWUsXG4gICAgICAgIHJvb3Q6IGZhbHNlLFxuICAgICAgICBpY29uOiB0aGlzLmdldEljb25DbGFzcyhjaGlsZCwgZGF0YS5sZXZlbClcbiAgICAgIH0pO1xuICAgICAgaWYgKGNoaWxkLnZpc2liaWxpdHkgPT09ICdQYXJlbnQnKSB7XG4gICAgICAgIHRoaXMuYnVpbGRUcmVlKGNoaWxkLCBjaGlsZFRyZWUsIGRhdGEubGV2ZWwpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0cmVlO1xuICB9XG5cbiAgaXNGb2xkZXIoY2hpbGQ6IGFueSkge1xuICAgIGlmICh0aGlzLmlzQ29udGVudChjaGlsZCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGNoaWxkLnZpc2liaWxpdHkgPT09ICdQYXJlbnQnID8gdHJ1ZSA6IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGdldEljb25DbGFzcyhjaGlsZDogYW55LCBsZXZlbDogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuaXNDb250ZW50KGNoaWxkKSkge1xuICAgICAgcmV0dXJuICdmYSBmYS1maWxlLW8nO1xuICAgIH0gZWxzZSBpZiAoY2hpbGQudmlzaWJpbGl0eSA9PT0gJ1BhcmVudCcpIHtcbiAgICAgICAgcmV0dXJuIF8uZ2V0KHRoaXMuY29uZmlnLCBgaGllcmFyY2h5LmxldmVsLiR7bGV2ZWx9Lmljb25DbGFzc2ApIHx8ICdmYSBmYS1mb2xkZXItbyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnZmEgZmEtZmlsZS1vJztcbiAgICB9XG4gIH1cblxuICBpc0NvbnRlbnQoY2hpbGQ6IGFueSkge1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgICByZXR1cm4gKF8uZ2V0KHRoaXMuY29uZmlnLCAnb2JqZWN0VHlwZScpID09PSAnUXVlc3Rpb25TZXQnICYmIGNoaWxkLm9iamVjdFR5cGUgPT09ICdRdWVzdGlvbicpO1xuICB9XG5cbiAgcmVuZGVyVHJlZShvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHsgLi4ub3B0aW9ucywgLi4udGhpcy5vcHRpb25zIH07XG4gICAgJCh0aGlzLnRyZWUubmF0aXZlRWxlbWVudCkuZmFuY3l0cmVlKG9wdGlvbnMpO1xuICAgIHRoaXMudHJlZVNlcnZpY2Uuc2V0VHJlZUVsZW1lbnQodGhpcy50cmVlLm5hdGl2ZUVsZW1lbnQpO1xuICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd0Nvbm5lY3RvcnMpIHtcbiAgICAgICQoJy5mYW5jeXRyZWUtY29udGFpbmVyJykuYWRkQ2xhc3MoJ2ZhbmN5dHJlZS1jb25uZWN0b3JzJyk7XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy50cmVlU2VydmljZS5yZWxvYWRUcmVlKHRoaXMucm9vdE5vZGUpO1xuICAgICAgdGhpcy50cmVlU2VydmljZS5zZXRBY3RpdmVOb2RlKCk7XG4gICAgICBjb25zdCByb290Tm9kZSA9IHRoaXMudHJlZVNlcnZpY2UuZ2V0Rmlyc3RDaGlsZCgpO1xuICAgICAgcm9vdE5vZGUuc2V0RXhwYW5kZWQodHJ1ZSk7XG4gICAgICB0aGlzLmVhY2hOb2RlQWN0aW9uQnV0dG9uKHJvb3ROb2RlKTtcbiAgICAgIHRoaXMuZGlhbGNvZGVTZXJ2aWNlLnJlYWRFeGlzdGluZ1FyQ29kZSgpO1xuICAgIH0pO1xuICAgIGlmIChfLmdldCh0aGlzLmVkaXRvclNlcnZpY2UsICdlZGl0b3JDb25maWcuY29uZmlnLnJlbmRlclRheG9ub215JykgPT09IHRydWUgJiYgXy5pc0VtcHR5KF8uZ2V0KHRoaXMubm9kZXMsICdkYXRhLmNoaWxkcmVuJykpKSB7XG4gICAgICBfLmZvckVhY2godGhpcy5yb290Tm9kZVswXT8uY2hpbGRyZW4sIChjaGlsZCkgPT4ge1xuICAgICAgICAgIHRoaXMudHJlZVNlcnZpY2UudXBkYXRlVHJlZU5vZGVNZXRhZGF0YShjaGlsZC5tZXRhZGF0YSwgY2hpbGQuaWQsIGNoaWxkLnByaW1hcnlDYXRlZ29yeSwgY2hpbGQub2JqZWN0VHlwZSk7XG4gICAgICAgICAgXy5mb3JFYWNoKGNoaWxkLmNoaWxkcmVuLCAoZWwpID0+IHtcbiAgICAgICAgICAgIHRoaXMudHJlZVNlcnZpY2UudXBkYXRlVHJlZU5vZGVNZXRhZGF0YShlbC5tZXRhZGF0YSwgZWwuaWQsIGVsLnByaW1hcnlDYXRlZ29yeSwgZWwub2JqZWN0VHlwZSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBnZXRUcmVlQ29uZmlnKCkge1xuICAgIGNvbnN0IG9wdGlvbnM6IGFueSA9IHtcbiAgICAgIGV4dGVuc2lvbnM6IFsnZ2x5cGgnLCAnZG5kNSddLFxuICAgICAgY2xpY2tGb2xkZXJNb2RlOiAzLFxuICAgICAgc291cmNlOiB0aGlzLnJvb3ROb2RlLFxuICAgICAgZXNjYXBlVGl0bGVzOiB0cnVlLFxuICAgICAgZ2x5cGg6IHtcbiAgICAgICAgcHJlc2V0OiAnYXdlc29tZTQnLFxuICAgICAgICBtYXA6IHtcbiAgICAgICAgICBmb2xkZXI6ICdpY29uIGZvbGRlciBzYi1mYW5jeVRyZWUtaWNvbicsXG4gICAgICAgICAgZm9sZGVyT3BlbjogJ2ljb24gZm9sZGVyIG91dGxpbmUgc2ItZmFuY3lUcmVlLWljb24nXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBkbmQ1OiB7XG4gICAgICAgIGF1dG9FeHBhbmRNUzogNDAwLFxuICAgICAgICAvLyBmb2N1c09uQ2xpY2s6IHRydWUsXG4gICAgICAgIHByZXZlbnRWb2lkTW92ZXM6IHRydWUsIC8vIFByZXZlbnQgZHJvcHBpbmcgbm9kZXMgJ2JlZm9yZSBzZWxmJywgZXRjLlxuICAgICAgICBwcmV2ZW50UmVjdXJzaW9uOiB0cnVlLCAvLyBQcmV2ZW50IGRyb3BwaW5nIG5vZGVzIG9uIG93biBkZXNjZW5kYW50c1xuICAgICAgICBkcmFnU3RhcnQ6IChub2RlLCBkYXRhKSA9PiB7XG4gICAgICAgICAgLyoqIFRoaXMgZnVuY3Rpb24gTVVTVCBiZSBkZWZpbmVkIHRvIGVuYWJsZSBkcmFnZ2luZyBmb3IgdGhlIHRyZWUuXG4gICAgICAgICAgICogIFJldHVybiBmYWxzZSB0byBjYW5jZWwgZHJhZ2dpbmcgb2Ygbm9kZS5cbiAgICAgICAgICAgKi9cbiAgICAgICAgICBjb25zdCBkcmFnZ2FibGUgPSBfLmdldCh0aGlzLmNvbmZpZywgJ21vZGUnKSA9PT0gJ2VkaXQnID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgIHJldHVybiBkcmFnZ2FibGU7XG4gICAgICAgIH0sXG4gICAgICAgIGRyYWdFbnRlcjogKG5vZGUsIGRhdGEpID0+IHtcbiAgICAgICAgICAvKiogZGF0YS5vdGhlck5vZGUgbWF5IGJlIG51bGwgZm9yIG5vbi1mYW5jeXRyZWUgZHJvcHBhYmxlcy5cbiAgICAgICAgICAgKiAgUmV0dXJuIGZhbHNlIHRvIGRpc2FsbG93IGRyb3BwaW5nIG9uIG5vZGUuIEluIHRoaXMgY2FzZVxuICAgICAgICAgICAqICBkcmFnT3ZlciBhbmQgZHJhZ0xlYXZlIGFyZSBub3QgY2FsbGVkLlxuICAgICAgICAgICAqICBSZXR1cm4gJ292ZXInLCAnYmVmb3JlLCBvciAnYWZ0ZXInIHRvIGZvcmNlIGEgaGl0TW9kZS5cbiAgICAgICAgICAgKiAgUmV0dXJuIFsnYmVmb3JlJywgJ2FmdGVyJ10gdG8gcmVzdHJpY3QgYXZhaWxhYmxlIGhpdE1vZGVzLlxuICAgICAgICAgICAqICBBbnkgb3RoZXIgcmV0dXJuIHZhbHVlIHdpbGwgY2FsYyB0aGUgaGl0TW9kZSBmcm9tIHRoZSBjdXJzb3IgcG9zaXRpb24uXG4gICAgICAgICAgICovXG4gICAgICAgICAgLy8gUHJldmVudCBkcm9wcGluZyBhIHBhcmVudCBiZWxvdyBhbm90aGVyIHBhcmVudCAob25seSBzb3J0XG4gICAgICAgICAgLy8gbm9kZXMgdW5kZXIgdGhlIHNhbWUgcGFyZW50KVxuICAgICAgICAgIC8qICAgICAgICAgICBpZihub2RlLnBhcmVudCAhPT0gZGF0YS5vdGhlck5vZGUucGFyZW50KXtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgYWxsb3cgZHJvcHBpbmcgKm92ZXIqIGEgbm9kZSAod291bGQgY3JlYXRlIGEgY2hpbGQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbXCJiZWZvcmVcIiwgXCJhZnRlclwiXTtcbiAgICAgICAgICAqL1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICBkcmFnRHJvcDogKG5vZGUsIGRhdGEpID0+IHtcbiAgICAgICAgICAvKiogVGhpcyBmdW5jdGlvbiBNVVNUIGJlIGRlZmluZWQgdG8gZW5hYmxlIGRyb3BwaW5nIG9mIGl0ZW1zIG9uXG4gICAgICAgICAgICogIHRoZSB0cmVlLlxuICAgICAgICAgICAqL1xuICAgICAgICAgIC8vIGRhdGEub3RoZXJOb2RlLm1vdmVUbyhub2RlLCBkYXRhLmhpdE1vZGUpO1xuICAgICAgICAgIHJldHVybiB0aGlzLmRyYWdEcm9wKG5vZGUsIGRhdGEpO1xuICAgICAgICB9LFxuICAgICAgICBmaWx0ZXI6IHtcbiAgICAgICAgICBhdXRvQXBwbHk6IHRydWUsXG4gICAgICAgICAgYXV0b0V4cGFuZDogZmFsc2UsXG4gICAgICAgICAgY291bnRlcjogdHJ1ZSxcbiAgICAgICAgICBmdXp6eTogZmFsc2UsXG4gICAgICAgICAgaGlkZUV4cGFuZGVkQ291bnRlcjogdHJ1ZSxcbiAgICAgICAgICBoaWRlRXhwYW5kZXJzOiBmYWxzZSxcbiAgICAgICAgICBoaWdobGlnaHQ6IHRydWUsXG4gICAgICAgICAgbGVhdmVzT25seTogZmFsc2UsXG4gICAgICAgICAgbm9kYXRhOiB0cnVlLFxuICAgICAgICAgIG1vZGU6ICdkaW1tJ1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaW5pdDogKGV2ZW50LCBkYXRhKSA9PiB7IH0sXG4gICAgICBjbGljazogKGV2ZW50LCBkYXRhKTogYm9vbGVhbiA9PiB7XG4gICAgICAgIHRoaXMudHJlZS5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG4gICAgICAgIHRoaXMudGVsZW1ldHJ5U2VydmljZS5pbnRlcmFjdCh7IGVkYXRhOiB0aGlzLmdldFRlbGVtZXRyeUludGVyYWN0RWRhdGEoKSB9KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9LFxuICAgICAgYWN0aXZhdGU6IChldmVudCwgZGF0YSkgPT4ge1xuICAgICAgICB0aGlzLnRyZWVFdmVudEVtaXR0ZXIuZW1pdCh7IHR5cGU6ICdub2RlU2VsZWN0JywgZGF0YTogZGF0YS5ub2RlIH0pO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLmF0dGFjaENvbnRleHRNZW51KGRhdGEubm9kZSwgdHJ1ZSk7XG4gICAgICAgICAgdGhpcy5lYWNoTm9kZUFjdGlvbkJ1dHRvbihkYXRhLm5vZGUpO1xuICAgICAgICB9LCAxMCk7XG4gICAgICB9LFxuICAgICAgcmVuZGVyTm9kZTogKGV2ZW50LCBkYXRhKSA9PiB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBkYXRhLm5vZGU7XG4gICAgICAgIGNvbnN0ICRub2RlU3BhbiA9ICQobm9kZS5zcGFuKTtcblxuICAgICAgICAvLyBjaGVjayBpZiBzcGFuIG9mIG5vZGUgYWxyZWFkeSByZW5kZXJlZFxuICAgICAgICBpZiAoISRub2RlU3Bhbi5kYXRhKCdyZW5kZXJlZCcpKSB7XG4gICAgICAgICAgdGhpcy5hdHRhY2hDb250ZXh0TWVudShub2RlKTtcbiAgICAgICAgICAvLyBzcGFuIHJlbmRlcmVkXG4gICAgICAgICAgJG5vZGVTcGFuLmRhdGEoJ3JlbmRlcmVkJywgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG5cbiAgZWFjaE5vZGVBY3Rpb25CdXR0b24obm9kZSkge1xuICAgIHRoaXMudmlzaWJpbGl0eSA9IHt9O1xuICAgIGlmICh0aGlzLmJ1bGtVcGxvYWRQcm9jZXNzaW5nU3RhdHVzKSB7XG4gICAgdGhpcy52aXNpYmlsaXR5LmFkZENoaWxkID0gZmFsc2U7XG4gICAgdGhpcy52aXNpYmlsaXR5LmFkZFNpYmxpbmcgPSAgZmFsc2U7XG4gICAgdGhpcy52aXNpYmlsaXR5LmFkZEZyb21MaWJyYXJ5ID0gIGZhbHNlO1xuICAgIHRoaXMudmlzaWJpbGl0eS5hZGRRdWVzdGlvbkZyb21MaWJyYXJ5ID0gZmFsc2U7XG4gICAgdGhpcy52aXNpYmlsaXR5LmNyZWF0ZU5ldyA9ICBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgbm9kZUxldmVsID0gbm9kZS5nZXRMZXZlbCgpIC0gMTtcbiAgICAgIHRoaXMudmlzaWJpbGl0eS5hZGRDaGlsZCA9ICgobm9kZS5mb2xkZXIgPT09IGZhbHNlKSB8fCAobm9kZUxldmVsID49IHRoaXMuY29uZmlnLm1heERlcHRoKSkgPyBmYWxzZSA6IHRydWU7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgICB0aGlzLnZpc2liaWxpdHkuYWRkU2libGluZyA9ICgobm9kZS5mb2xkZXIgPT09IHRydWUpICYmICghbm9kZS5kYXRhLnJvb3QpICYmICEoKG5vZGUuZ2V0TGV2ZWwoKSAtIDEpID4gdGhpcy5jb25maWcubWF4RGVwdGgpKSA/IHRydWUgOiBmYWxzZTtcbiAgICAgIGlmIChub2RlTGV2ZWwgPT09IDApIHtcbiAgICAgICAgdGhpcy52aXNpYmlsaXR5LmFkZEZyb21MaWJyYXJ5ID0gXy5pc0VtcHR5KF8uZ2V0KHRoaXMuY29uZmlnLCAnY2hpbGRyZW4nKSkgfHwgXy5nZXQodGhpcy5jb25maWcsICdlbmFibGVRdWVzdGlvbkNyZWF0aW9uJykgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICB0aGlzLnZpc2liaWxpdHkuY3JlYXRlTmV3ID0gXy5pc0VtcHR5KF8uZ2V0KHRoaXMuY29uZmlnLCAnY2hpbGRyZW4nKSkgfHwgXy5nZXQodGhpcy5jb25maWcsICdlbmFibGVRdWVzdGlvbkNyZWF0aW9uJykgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICB0aGlzLnZpc2liaWxpdHkuYWRkUXVlc3Rpb25Gcm9tTGlicmFyeSA9ICFfLmlzRW1wdHkoXy5nZXQodGhpcy5jb25maWcsICdjaGlsZHJlbicpKSAmJiBfLmdldCh0aGlzLmNvbmZpZywgJ2VuYWJsZUFkZEZyb21MaWJyYXJ5JykgPT09IHRydWUgPyB0cnVlIDogZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBoaWVyYXJjaHlsZXZlbERhdGEgPSB0aGlzLmNvbmZpZy5oaWVyYXJjaHlbYGxldmVsJHtub2RlTGV2ZWx9YF07XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgICAgICAgdGhpcy52aXNpYmlsaXR5LmFkZEZyb21MaWJyYXJ5ID0gKChub2RlLmZvbGRlciA9PT0gZmFsc2UpIHx8IF8uaXNFbXB0eShfLmdldChoaWVyYXJjaHlsZXZlbERhdGEsICdjaGlsZHJlbicpKSB8fCBfLmdldCh0aGlzLmNvbmZpZywgJ2VuYWJsZVF1ZXN0aW9uQ3JlYXRpb24nKSA9PT0gZmFsc2UpID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgICAgIHRoaXMudmlzaWJpbGl0eS5jcmVhdGVOZXcgPSAoKG5vZGUuZm9sZGVyID09PSBmYWxzZSkgfHwgXy5pc0VtcHR5KF8uZ2V0KGhpZXJhcmNoeWxldmVsRGF0YSwgJ2NoaWxkcmVuJykpIHx8IF8uZ2V0KHRoaXMuY29uZmlnLCAnZW5hYmxlUXVlc3Rpb25DcmVhdGlvbicpID09PSBmYWxzZSkgPyBmYWxzZSA6IHRydWU7XG4gICAgICAgIHRoaXMudmlzaWJpbGl0eS5hZGRRdWVzdGlvbkZyb21MaWJyYXJ5ID0gKChub2RlLmZvbGRlciA9PT0gdHJ1ZSkgJiYgIV8uaXNFbXB0eShfLmdldChoaWVyYXJjaHlsZXZlbERhdGEsICdjaGlsZHJlbicpKSAmJiBfLmdldCh0aGlzLmNvbmZpZywgJ2VuYWJsZUFkZEZyb21MaWJyYXJ5JykgPT09IHRydWUpID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoXy5nZXQodGhpcy5lZGl0b3JTZXJ2aWNlLCAnZWRpdG9yQ29uZmlnLmNvbmZpZy5yZW5kZXJUYXhvbm9teScpID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnZpc2liaWxpdHkuYWRkQ2hpbGQgPSBmYWxzZTtcbiAgICAgIHRoaXMudmlzaWJpbGl0eS5hZGRTaWJsaW5nID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGFkZENoaWxkKCkge1xuICAgIHRoaXMudGVsZW1ldHJ5U2VydmljZS5pbnRlcmFjdCh7IGVkYXRhOiB0aGlzLmdldFRlbGVtZXRyeUludGVyYWN0RWRhdGEoJ2FkZF9jaGlsZCcpIH0pO1xuICAgIGNvbnN0IHRyZWUgPSAkKHRoaXMudHJlZS5uYXRpdmVFbGVtZW50KS5mYW5jeXRyZWUoJ2dldFRyZWUnKTtcbiAgICBjb25zdCBub2RlQ29uZmlnID0gdGhpcy5jb25maWcuaGllcmFyY2h5W3RyZWUuZ2V0QWN0aXZlTm9kZSgpLmdldExldmVsKCldO1xuICAgIGNvbnN0IGNoaWxkcmVuVHlwZXMgPSBfLmdldChub2RlQ29uZmlnLCAnY2hpbGRyZW4uQ29udGVudCcpO1xuICAgIGlmICgoKCh0cmVlLmdldEFjdGl2ZU5vZGUoKS5nZXRMZXZlbCgpIC0gMSkgPj0gdGhpcy5jb25maWcubWF4RGVwdGgpKSkge1xuICAgICAgcmV0dXJuIHRoaXMudG9hc3RlclNlcnZpY2UuZXJyb3IoXy5nZXQodGhpcy5jb25maWdTZXJ2aWNlLCAnbGFiZWxDb25maWcubWVzc2FnZXMuZXJyb3IuMDA3JykpO1xuICAgIH1cbiAgICB0aGlzLnRyZWVTZXJ2aWNlLmFkZE5vZGUoJ2NoaWxkJyk7XG4gIH1cblxuICBhZGRTaWJsaW5nKCkge1xuICAgIHRoaXMudGVsZW1ldHJ5U2VydmljZS5pbnRlcmFjdCh7IGVkYXRhOiB0aGlzLmdldFRlbGVtZXRyeUludGVyYWN0RWRhdGEoJ2FkZF9zaWJsaW5nJykgfSk7XG4gICAgY29uc3QgdHJlZSA9ICQodGhpcy50cmVlLm5hdGl2ZUVsZW1lbnQpLmZhbmN5dHJlZSgnZ2V0VHJlZScpO1xuXG4gICAgY29uc3Qgbm9kZSA9IHRyZWUuZ2V0QWN0aXZlTm9kZSgpO1xuICAgIGlmICghbm9kZS5kYXRhLnJvb3QpIHtcbiAgICAgIHRoaXMudHJlZVNlcnZpY2UuYWRkTm9kZSgnc2libGluZycpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLmVycm9yKF8uZ2V0KHRoaXMuY29uZmlnU2VydmljZSwgJ2xhYmVsQ29uZmlnLm1lc3NhZ2VzLmVycm9yLjAwNycpKTtcbiAgICB9XG4gIH1cblxuICBnZXRBY3RpdmVOb2RlKCkge1xuICAgIHJldHVybiAkKHRoaXMudHJlZS5uYXRpdmVFbGVtZW50KS5mYW5jeXRyZWUoJ2dldFRyZWUnKS5nZXRBY3RpdmVOb2RlKCk7XG4gIH1cblxuICBhdHRhY2hDb250ZXh0TWVudShub2RlLCBhY3RpdmVOb2RlPykge1xuICAgIGlmIChfLmdldCh0aGlzLmNvbmZpZywgJ21vZGUnKSAhPT0gJ2VkaXQnIHx8IChub2RlLmRhdGEucm9vdCA9PT0gdHJ1ZSAmJiBfLmlzRW1wdHkodGhpcy5jb25maWcuaGllcmFyY2h5KSApKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0ICRub2RlU3BhbiA9ICQobm9kZS5zcGFuKTtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoICAgLy8gVE9ETzo6IChub2RlLmRhdGEuY29udGVudFR5cGUgPT09ICdDb3Vyc2VVbml0JykgY2hlY2sgdGhpcyBjb25kaXRpb25cbiAgICBjb25zdCBtZW51VGVtcGxhdGUgPSBub2RlLmRhdGEucm9vdCA9PT0gdHJ1ZSA/IHRoaXMucm9vdE1lbnVUZW1wbGF0ZSA6IChub2RlLmRhdGEucm9vdCA9PT0gZmFsc2UgJiYgbm9kZS5mb2xkZXIgPT09IHRydWUgID8gdGhpcy5mb2xkZXJNZW51VGVtcGxhdGUgOiB0aGlzLmNvbnRlbnRNZW51VGVtcGxhdGUpO1xuICAgIGNvbnN0IGljb25zQnV0dG9uID0gJChtZW51VGVtcGxhdGUpO1xuICAgIGlmICgobm9kZS5nZXRMZXZlbCgpIC0gMSkgPj0gdGhpcy5jb25maWcubWF4RGVwdGgpIHtcbiAgICAgIGljb25zQnV0dG9uLmZpbmQoJyNhZGRjaGlsZCcpLnJlbW92ZSgpO1xuICAgIH1cblxuICAgIGxldCBjb250ZXh0TWVudSA9ICQoJG5vZGVTcGFuWzBdKS5maW5kKGAjY29udGV4dE1lbnVgKTtcblxuICAgIGlmICghY29udGV4dE1lbnUubGVuZ3RoKSB7XG4gICAgICAkbm9kZVNwYW4uYXBwZW5kKGljb25zQnV0dG9uKTtcblxuICAgICAgaWYgKCFhY3RpdmVOb2RlKSB7XG4gICAgICAgIGljb25zQnV0dG9uLmhpZGUoKTtcbiAgICAgIH1cblxuICAgICAgJG5vZGVTcGFuWzBdLm9ubW91c2VvdmVyID0gKCkgPT4ge1xuICAgICAgICBpY29uc0J1dHRvbi5zaG93KCk7XG4gICAgICB9O1xuXG4gICAgICAkbm9kZVNwYW5bMF0ub25tb3VzZW91dCA9ICgpID0+IHtcbiAgICAgICAgaWNvbnNCdXR0b24uaGlkZSgpO1xuICAgICAgfTtcblxuICAgICAgY29udGV4dE1lbnUgPSAkKCRub2RlU3BhblswXSkuZmluZChgI2NvbnRleHRNZW51YCk7XG5cbiAgICAgIGNvbnRleHRNZW51Lm9uKCdjbGljaycsIChldmVudCkgPT4ge1xuICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLmNsb3NlUHJldk9wZW5lZERyb3BEb3duKCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5TcGFuID0gJCh0aGlzLmdldEFjdGl2ZU5vZGUoKS5zcGFuKTtcblxuICAgICAgICAgIGNvbnN0IGRyb3BEb3duRWxlbWVudCA9ICQoblNwYW5bMF0pLmZpbmQoYCNjb250ZXh0TWVudURyb3BEb3duYCk7XG4gICAgICAgICAgZHJvcERvd25FbGVtZW50LnJlbW92ZUNsYXNzKCdoaWRkZW4nKTtcbiAgICAgICAgICBkcm9wRG93bkVsZW1lbnQuYWRkQ2xhc3MoJ3Zpc2libGUnKTtcbiAgICAgICAgICBfLmZvckVhY2goXy5nZXQoXy5maXJzdChkcm9wRG93bkVsZW1lbnQpLCAnY2hpbGRyZW4nKSwgaXRlbSA9PiB7XG4gICAgICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2KSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMudHJlZVNlcnZpY2UuY2xvc2VQcmV2T3BlbmVkRHJvcERvd24oKTtcbiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVBY3Rpb25CdXR0b25zKGV2LmN1cnJlbnRUYXJnZXQpO1xuICAgICAgICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LCAxMDApO1xuICAgICAgICAvLyBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIH0pO1xuXG4gICAgICAkKCRub2RlU3BhblswXSkuZmluZChgI3JlbW92ZU5vZGVJY29uYCkub24oJ2NsaWNrJywgKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgaXNDb250ZW50ID0gIGV2ZW50LmN1cnJlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKCd0eXBlJykgJiYgZXZlbnQuY3VycmVudFRhcmdldC5nZXRBdHRyaWJ1dGUoJ3R5cGUnKSA9PT0gJ2NvbnRlbnQnO1xuICAgICAgICB0aGlzLnJlbW92ZU5vZGUoaXNDb250ZW50KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICB9XG5cbiAgZHJvcE5vZGUodGFyZ2V0Tm9kZSwgY3VycmVudE5vZGUpIHtcblxuICAgIGxldCBkcm9wQWxsb3dlZDtcbiAgICBkcm9wQWxsb3dlZCA9IHRydWU7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICAgIGlmIChjdXJyZW50Tm9kZS5vdGhlck5vZGUuZ2V0TGV2ZWwoKSA9PT0gdGFyZ2V0Tm9kZS5nZXRMZXZlbCgpICYmIGN1cnJlbnROb2RlLm90aGVyTm9kZS5mb2xkZXIgPT09IHRydWUgJiYgIGN1cnJlbnROb2RlLmhpdE1vZGUgIT09ICdvdmVyJykge1xuICAgICAgZHJvcEFsbG93ZWQgPSB0cnVlO1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnROb2RlLm90aGVyTm9kZS5mb2xkZXIgPT09IHRydWUgJiYgKHRoaXMubWF4VHJlZURlcHRoKGN1cnJlbnROb2RlLm90aGVyTm9kZSkgKyAodGFyZ2V0Tm9kZS5nZXRMZXZlbCgpIC0gMSkpID4gXy5nZXQodGhpcy5jb25maWcsICdtYXhEZXB0aCcpKSB7XG4gICAgICByZXR1cm4gdGhpcy5kcm9wTm90QWxsb3dlZCgpO1xuICAgIH0gZWxzZSBpZiAoY3VycmVudE5vZGUub3RoZXJOb2RlLmZvbGRlciA9PT0gZmFsc2UgJiYgIXRoaXMuY2hlY2tDb250ZW50QWRkaXRpb24odGFyZ2V0Tm9kZSwgY3VycmVudE5vZGUpKSB7XG4gICAgICBkcm9wQWxsb3dlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChkcm9wQWxsb3dlZCkge1xuICAgICAgICBjdXJyZW50Tm9kZS5vdGhlck5vZGUubW92ZVRvKHRhcmdldE5vZGUsIGN1cnJlbnROb2RlLmhpdE1vZGUpO1xuICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLm5leHRUcmVlU3RhdHVzKCdyZW9yZGVyJyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2Uud2FybmluZyhgJHtjdXJyZW50Tm9kZS5vdGhlck5vZGUudGl0bGV9IGNhbm5vdCBiZSBhZGRlZCB0byAke2N1cnJlbnROb2RlLm5vZGUudGl0bGV9YCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgfVxuXG4gIGRyYWdEcm9wKG5vZGUsIGRhdGEpIHtcbiAgICBpZiAoKGRhdGEuaGl0TW9kZSA9PT0gJ2JlZm9yZScgfHwgZGF0YS5oaXRNb2RlID09PSAnYWZ0ZXInIHx8IGRhdGEuaGl0TW9kZSA9PT0gJ292ZXInKSAmJiBkYXRhLm5vZGUuZGF0YS5yb290KSB7XG4gICAgICByZXR1cm4gdGhpcy5kcm9wTm90QWxsb3dlZCgpO1xuICAgIH1cbiAgICBpZiAoXy5oYXModGhpcy5jb25maWcsICdtYXhEZXB0aCcpKSB7XG4gICAgICByZXR1cm4gdGhpcy5kcm9wTm9kZShub2RlLCBkYXRhKTtcbiAgICB9XG4gIH1cblxuICBkcm9wTm90QWxsb3dlZCgpIHtcbiAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLndhcm5pbmcoXy5nZXQodGhpcy5jb25maWdTZXJ2aWNlLCAnbGFiZWxDb25maWcubWVzc2FnZXMuZXJyb3IuMDA3JykpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIG1heFRyZWVEZXB0aChyb290KSB7XG4gICAgY29uc3QgYnVmZmVyID0gW3sgbm9kZTogcm9vdCwgZGVwdGg6IDEgfV07XG4gICAgbGV0IGN1cnJlbnQgPSBidWZmZXIucG9wKCk7XG4gICAgbGV0IG1heCA9IDA7XG5cbiAgICB3aGlsZSAoY3VycmVudCAmJiBjdXJyZW50Lm5vZGUpIHtcbiAgICAgIC8vIEZpbmQgYWxsIGNoaWxkcmVuIG9mIHRoaXMgbm9kZS5cbiAgICAgIF8uZm9yRWFjaChjdXJyZW50Lm5vZGUuY2hpbGRyZW4sIChjaGlsZCkgPT4ge1xuICAgICAgICBidWZmZXIucHVzaCh7IG5vZGU6IGNoaWxkLCBkZXB0aDogY3VycmVudC5kZXB0aCArIDEgfSk7XG4gICAgICB9KTtcbiAgICAgIGlmIChjdXJyZW50LmRlcHRoID4gbWF4KSB7XG4gICAgICAgIG1heCA9IGN1cnJlbnQuZGVwdGg7XG4gICAgICB9XG4gICAgICBjdXJyZW50ID0gYnVmZmVyLnBvcCgpO1xuICAgIH1cbiAgICByZXR1cm4gbWF4O1xuICB9XG5cbiAgY2hlY2tDb250ZW50QWRkaXRpb24odGFyZ2V0Tm9kZSwgY29udGVudE5vZGUpOiBib29sZWFuIHtcbiAgICBpZiAodGFyZ2V0Tm9kZS5mb2xkZXIgPT09IGZhbHNlICYmIChjb250ZW50Tm9kZS5oaXRNb2RlID09PSAnYmVmb3JlJyB8fCBjb250ZW50Tm9kZS5oaXRNb2RlID09PSAnYWZ0ZXInKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICh0YXJnZXROb2RlLmZvbGRlciA9PT0gZmFsc2UgJiYgY29udGVudE5vZGUuaGl0TW9kZSA9PT0gJ292ZXInKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IG5vZGVDb25maWcgPSB0aGlzLmNvbmZpZy5oaWVyYXJjaHlbYGxldmVsJHt0YXJnZXROb2RlLmdldExldmVsKCkgLSAxfWBdO1xuICAgIGNvbnN0IGNvbnRlbnRQcmltYXJ5Q2F0ZWdvcmllcyA9IF8uZmxhdE1hcChfLmdldChub2RlQ29uZmlnLCAnY2hpbGRyZW4nKSk7XG4gICAgaWYgKCFfLmlzRW1wdHkoY29udGVudFByaW1hcnlDYXRlZ29yaWVzKSkge1xuICAgICAgcmV0dXJuIF8uaW5jbHVkZXMoY29udGVudFByaW1hcnlDYXRlZ29yaWVzLCBfLmdldChjb250ZW50Tm9kZSwgJ290aGVyTm9kZS5kYXRhLm1ldGFkYXRhLnByaW1hcnlDYXRlZ29yeScpKSA/IHRydWUgOiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmVtb3ZlTm9kZShpc0NvbnRlbnQ/OiBib29sZWFuKSB7XG4gICAgdGhpcy50cmVlRXZlbnRFbWl0dGVyLmVtaXQoeyB0eXBlOiAnZGVsZXRlTm9kZScsIGlzQ29udGVudCB9KTtcbiAgICB0aGlzLnRlbGVtZXRyeVNlcnZpY2UuaW50ZXJhY3QoeyBlZGF0YTogdGhpcy5nZXRUZWxlbWV0cnlJbnRlcmFjdEVkYXRhKCdkZWxldGUnKSB9KTtcbiAgfVxuXG4gIGhhbmRsZUFjdGlvbkJ1dHRvbnMoZWwpIHtcbiAgICBjb25zb2xlLmxvZygnYWN0aW9uIGJ1dHRvbnMgLS0tLS0tLS0+JywgZWwuaWQpO1xuICAgIHN3aXRjaCAoZWwuaWQpIHtcbiAgICAgIGNhc2UgJ2VkaXQnOlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2RlbGV0ZSc6XG4gICAgICAgIHRoaXMucmVtb3ZlTm9kZSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2FkZHNpYmxpbmcnOlxuICAgICAgICB0aGlzLmFkZFNpYmxpbmcoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhZGRjaGlsZCc6XG4gICAgICAgIHRoaXMuYWRkQ2hpbGQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhZGRyZXNvdXJjZSc6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGFkZEZyb21MaWJyYXJ5KCkge1xuICAgIHRoaXMuZWRpdG9yU2VydmljZS5lbWl0c2hvd0xpYnJhcnlQYWdlRXZlbnQoJ3Nob3dMaWJyYXJ5UGFnZScpO1xuICB9XG4gIGdldFRlbGVtZXRyeUludGVyYWN0RWRhdGEoaWQ/KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBpZCB8fCAnY29sbGVjdGlvbi10b2MnLFxuICAgICAgdHlwZTogJ2NsaWNrJyxcbiAgICAgIHN1YnR5cGU6ICdsYXVuY2gnLFxuICAgICAgcGFnZWlkOiB0aGlzLnRlbGVtZXRyeVNlcnZpY2UudGVsZW1ldHJ5UGFnZUlkLFxuICAgICAgZXh0cmE6IHtcbiAgICAgICAgdmFsdWVzOiBbXy5nZXQodGhpcy5nZXRBY3RpdmVOb2RlKCksICdkYXRhJyldXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGNyZWF0ZU5ld0NvbnRlbnQoKSB7XG4gICAgdGhpcy50cmVlRXZlbnRFbWl0dGVyLmVtaXQoeyB0eXBlOiAnY3JlYXRlTmV3Q29udGVudCcgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLm9uQ29tcG9uZW50RGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMub25Db21wb25lbnREZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG59IiwiPGRpdiAjZmFuY3lUcmVlPjwvZGl2PlxuPGRpdiBjbGFzcz1cInNiLWZpeGVkLXdpdGgtd2hpdGViZyBwci0yMCBkLWZsZXggZmxleC1qYy1zcGFjZS1iZXR3ZWVuXCIgKm5nSWY9XCJjb25maWcgJiYgY29uZmlnLm1vZGUgPT09ICdlZGl0J1wiPlxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IHctMjVcIj5cbiAgICA8ZGl2IGNsYXNzPVwic2ItYnRuLWNvdmVyXCI+XG4gICAgICA8YnV0dG9uIFtuZ0NsYXNzXT1cInZpc2liaWxpdHk/LmFkZFNpYmxpbmcgPyAnJyA6ICdzYi1kaXNhYmxlZCdcIiAoY2xpY2spPVwiYWRkU2libGluZygpO1wiXG4gICAgICAgIGNsYXNzPVwic2ItYnRuIHNiLWJ0bi1vdXRsaW5lLXByaW1hcnkgc2ItYnRuLW5vcm1hbCBzYi1idG4tcmFkaXVzIHAtMCBiLW5vbmVcIj48aSBhcmlhLWhpZGRlbj1cInRydWVcIiBjbGFzcz1cImljb24gcGx1c1wiPjwvaT5cbiAgICAgICAge3tjb25maWdTZXJ2aWNlLmxhYmVsQ29uZmlnPy5idXR0b25fbGFiZWxzPy5hZGRfc2libGluZ19idG5fbGFiZWx9fSA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwic2ItYnRuLWNvdmVyXCI+XG4gICAgICA8YnV0dG9uIFtuZ0NsYXNzXT1cInZpc2liaWxpdHk/LmFkZENoaWxkID8gJycgOiAnc2ItZGlzYWJsZWQnXCIgKGNsaWNrKT1cImFkZENoaWxkKCk7XCJcbiAgICAgICAgY2xhc3M9XCJzYi1idG4gc2ItYnRuLW91dGxpbmUtcHJpbWFyeSBzYi1idG4tbm9ybWFsIHNiLWJ0bi1yYWRpdXMgYi1ub25lIHAtMFwiPjxpIGNsYXNzPVwiaWNvbiBwbHVzXCI+PC9pPlxuICAgICAgICB7e2NvbmZpZ1NlcnZpY2UubGFiZWxDb25maWc/LmJ1dHRvbl9sYWJlbHM/LmFkZF9jaGlsZF9idG5fbGFiZWx9fSA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxidXR0b24gKm5nSWY9XCJjb25maWcub2JqZWN0VHlwZSAhPT0gJ1F1ZXN0aW9uU2V0J1wiIChjbGljayk9XCJhZGRGcm9tTGlicmFyeSgpO1wiXG4gICAgW2Rpc2FibGVkXT1cIiF2aXNpYmlsaXR5Py5hZGRGcm9tTGlicmFyeVwiXG4gICAgW25nQ2xhc3NdPVwiWyF2aXNpYmlsaXR5Py5hZGRGcm9tTGlicmFyeSA/ICdzYi1idG4tb3V0bGluZS1kaXNhYmxlZCcgOiAnJywgKHZpc2liaWxpdHk/LmFkZEZyb21MaWJyYXJ5ICYmIGJ1dHRvbkxvYWRlcnM/LmFkZEZyb21MaWJyYXJ5QnV0dG9uTG9hZGVyKSA/ICdzYi1idG4tbG9hZGluZy1zcGlubmVyIHNiLWJ0bi1vdXRsaW5lLWRpc2FibGVkJzogJyddXCJcbiAgICBjbGFzcz1cInNiLWJ0biBzYi1idG4tb3V0bGluZS1wcmltYXJ5IHNiLWJ0bi1ub3JtYWwgbXQtMTAgbXItMzBcIiBsaWJUZWxlbWV0cnlJbnRlcmFjdFxuICAgIFt0ZWxlbWV0cnlJbnRlcmFjdEVkYXRhXT1cInRlbGVtZXRyeVNlcnZpY2UuZ2V0VGVsZW1ldHJ5SW50ZXJhY3RFZGF0YSgnYWRkX2Zyb21fbGlicmFyeScsJ2NsaWNrJywnbGF1bmNoJywgdGVsZW1ldHJ5U2VydmljZS50ZWxlbWV0cnlQYWdlSWQpXCI+XG4gICAgPGkgY2xhc3M9XCJpY29uIHBsdXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAqbmdJZj1cIiFidXR0b25Mb2FkZXJzPy5hZGRGcm9tTGlicmFyeUJ1dHRvbkxvYWRlclwiPjwvaT5cbiAgICA8ZGl2IGNsYXNzPVwic2ItbG9hZGluZy1zcGlubmVyXCIgKm5nSWY9XCJidXR0b25Mb2FkZXJzPy5hZGRGcm9tTGlicmFyeUJ1dHRvbkxvYWRlclwiIHJvbGU9XCJzdGF0dXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICA8L2Rpdj5cbiAgICB7e2NvbmZpZ1NlcnZpY2UubGFiZWxDb25maWc/LmJ1dHRvbl9sYWJlbHM/LmFkZF9mcm9tX2xpYnJhcnlfYnRuX2xhYmVsfX1cbiAgPC9idXR0b24+XG4gIDxidXR0b24gKm5nSWY9XCJjb25maWcub2JqZWN0VHlwZSA9PT0gJ1F1ZXN0aW9uU2V0J1wiIFtkaXNhYmxlZF09XCIhdmlzaWJpbGl0eT8uY3JlYXRlTmV3XCJcbiAgICBbbmdDbGFzc109XCJbIXZpc2liaWxpdHk/LmNyZWF0ZU5ldyA/ICdzYi1idG4tb3V0bGluZS1kaXNhYmxlZCcgOiAnJywgKHZpc2liaWxpdHk/LmNyZWF0ZU5ldyAmJiBidXR0b25Mb2FkZXJzPy5hZGRGcm9tTGlicmFyeUJ1dHRvbkxvYWRlcikgPyAnc2ItYnRuLWxvYWRpbmctc3Bpbm5lciBzYi1idG4tb3V0bGluZS1kaXNhYmxlZCc6ICcnXVwiXG4gICAgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic2ItYnRuIHNiLWJ0bi1ub3JtYWwgc2ItYnRuLXByaW1hcnkgbXQtMTAgbXItMzBcIiAoY2xpY2spPVwiY3JlYXRlTmV3Q29udGVudCgpXCJcbiAgICBsaWJUZWxlbWV0cnlJbnRlcmFjdFxuICAgIFt0ZWxlbWV0cnlJbnRlcmFjdEVkYXRhXT1cInRlbGVtZXRyeVNlcnZpY2UuZ2V0VGVsZW1ldHJ5SW50ZXJhY3RFZGF0YSgnY3JlYXRlX25ldycsJ2NsaWNrJywnbGF1bmNoJywgdGVsZW1ldHJ5U2VydmljZS50ZWxlbWV0cnlQYWdlSWQpXCI+XG4gICAgPGkgY2xhc3M9XCJpY29uIHBsdXNcIiAqbmdJZj1cIiFidXR0b25Mb2FkZXJzPy5hZGRGcm9tTGlicmFyeUJ1dHRvbkxvYWRlclwiPjwvaT5cbiAgICA8ZGl2IGNsYXNzPVwic2ItbG9hZGluZy1zcGlubmVyXCIgKm5nSWY9XCJidXR0b25Mb2FkZXJzPy5hZGRGcm9tTGlicmFyeUJ1dHRvbkxvYWRlclwiIHJvbGU9XCJzdGF0dXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICA8L2Rpdj5cbiAgICB7e2NvbmZpZ1NlcnZpY2UubGFiZWxDb25maWc/LmJ1dHRvbl9sYWJlbHM/LmNyZWF0ZV9uZXdfYnRuX2xhYmVsfX1cbiAgPC9idXR0b24+XG48L2Rpdj4iXX0=
|