@wavemaker/app-ng-runtime 11.4.0-next.24577 → 11.4.0-next.24579
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.
- app-ng-runtime/build-task/basic/tree/tree.build.d.ts +1 -2
- app-ng-runtime/build-task/bundles/index.umd.js +5 -7
- app-ng-runtime/build-task/bundles/index.umd.js.map +1 -1
- app-ng-runtime/build-task/esm2015/basic/tree/tree.build.js +3 -4
- app-ng-runtime/build-task/fesm2015/index.js +5 -7
- app-ng-runtime/build-task/fesm2015/index.js.map +1 -1
- app-ng-runtime/components/basic/tree/bundles/index.umd.js +271 -255
- app-ng-runtime/components/basic/tree/bundles/index.umd.js.map +1 -1
- app-ng-runtime/components/basic/tree/esm2015/public_api.js +2 -2
- app-ng-runtime/components/basic/tree/esm2015/tree.component.js +314 -0
- app-ng-runtime/components/basic/tree/esm2015/tree.module.js +3 -3
- app-ng-runtime/components/basic/tree/fesm2015/index.js +251 -247
- app-ng-runtime/components/basic/tree/fesm2015/index.js.map +1 -1
- app-ng-runtime/components/basic/tree/index.metadata.json +1 -1
- app-ng-runtime/components/basic/tree/public_api.d.ts +1 -1
- app-ng-runtime/components/basic/tree/tree.component.d.ts +33 -0
- app-ng-runtime/package.json +1 -1
- app-ng-runtime/scripts/tree-keyboard-navigation/keyboard-navigation.js +251 -0
- app-ng-runtime/components/basic/tree/esm2015/tree.directive.js +0 -310
- app-ng-runtime/components/basic/tree/tree.directive.d.ts +0 -35
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
import { Component, Injector, ViewEncapsulation } from '@angular/core';
|
|
2
|
+
import { APPLY_STYLES_TYPE, getOrderedDataset, provideAsWidgetRef, StylableComponent, styler } from '@wm/components/base';
|
|
3
|
+
import { registerProps } from './tree.props';
|
|
4
|
+
const WIDGET_INFO = { widgetType: 'wm-tree', hostClass: 'app-tree' };
|
|
5
|
+
const defaultTreeIconClass = 'plus-minus';
|
|
6
|
+
export class TreeComponent extends StylableComponent {
|
|
7
|
+
constructor(inj) {
|
|
8
|
+
super(inj, WIDGET_INFO);
|
|
9
|
+
this.setting = {
|
|
10
|
+
data: {
|
|
11
|
+
simpleData: {
|
|
12
|
+
enable: true
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
view: {
|
|
16
|
+
dblClickExpand: false,
|
|
17
|
+
fontCss: {
|
|
18
|
+
'font-awesome': true
|
|
19
|
+
},
|
|
20
|
+
switchIcon: {},
|
|
21
|
+
},
|
|
22
|
+
check: {},
|
|
23
|
+
callback: {}
|
|
24
|
+
};
|
|
25
|
+
styler(this.nativeElement, this, APPLY_STYLES_TYPE.CONTAINER);
|
|
26
|
+
}
|
|
27
|
+
onPropertyChange(key, nv, ov) {
|
|
28
|
+
switch (key) {
|
|
29
|
+
case 'dataset':
|
|
30
|
+
this.nodes = this.getNodes(nv);
|
|
31
|
+
if (this.level > 0) {
|
|
32
|
+
this.expandTree(this.level, this.nodes, 0);
|
|
33
|
+
}
|
|
34
|
+
this.renderTree();
|
|
35
|
+
break;
|
|
36
|
+
case 'levels':
|
|
37
|
+
if (nv > 0) {
|
|
38
|
+
this.level = nv;
|
|
39
|
+
}
|
|
40
|
+
break;
|
|
41
|
+
case 'treeicons':
|
|
42
|
+
this.treeicon = nv;
|
|
43
|
+
break;
|
|
44
|
+
case 'nodelabel':
|
|
45
|
+
this.nodelabel = nv;
|
|
46
|
+
break;
|
|
47
|
+
case 'icon':
|
|
48
|
+
this.nodeicon = nv;
|
|
49
|
+
case 'orderby':
|
|
50
|
+
this.renderTree();
|
|
51
|
+
break;
|
|
52
|
+
case 'class':
|
|
53
|
+
this.treeClass = nv;
|
|
54
|
+
break;
|
|
55
|
+
default:
|
|
56
|
+
super.onPropertyChange(key, nv, ov);
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// expands the tree nodes if the property is selected.
|
|
61
|
+
expandTree(level, node, childLevel) {
|
|
62
|
+
node.map(childNode => {
|
|
63
|
+
if ("children" in childNode && !("open" in childNode) && childLevel < level) {
|
|
64
|
+
childNode["open"] = true;
|
|
65
|
+
this.expandTree(level, childNode.children, childLevel + 1);
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
childLevel = 0;
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
// sets the template for the tree based on the property selected.
|
|
74
|
+
setTreeTemplate(value) {
|
|
75
|
+
if (value === 'Classic') {
|
|
76
|
+
this.setting.check["enable"] = false;
|
|
77
|
+
}
|
|
78
|
+
else if (value === 'Checkbox') {
|
|
79
|
+
this.setting.check["enable"] = true;
|
|
80
|
+
this.setting.check["chkStyle"] = 'checkbox';
|
|
81
|
+
}
|
|
82
|
+
else if (value === 'Radio') {
|
|
83
|
+
this.setting.check["enable"] = true;
|
|
84
|
+
this.setting.check["chkStyle"] = 'radio';
|
|
85
|
+
this.setting.check["radioType"] = "all";
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// extracts nodes from string format
|
|
89
|
+
getNodesFromString(value) {
|
|
90
|
+
return value.split(',').map((item) => {
|
|
91
|
+
return {
|
|
92
|
+
'name': item && item.trim()
|
|
93
|
+
};
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
// gets the nodes and orders the nodes if required
|
|
97
|
+
getNodes(newVal) {
|
|
98
|
+
let nodes;
|
|
99
|
+
if (_.isArray(newVal)) {
|
|
100
|
+
nodes = getOrderedDataset(newVal, this.orderby);
|
|
101
|
+
}
|
|
102
|
+
else if (_.isObject(newVal)) {
|
|
103
|
+
nodes = [newVal];
|
|
104
|
+
}
|
|
105
|
+
else if (_.isString(newVal) && !_.isEmpty(newVal)) {
|
|
106
|
+
newVal = newVal.trim();
|
|
107
|
+
if (newVal) {
|
|
108
|
+
nodes = this.getNodesFromString(newVal);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return nodes;
|
|
112
|
+
}
|
|
113
|
+
// adds class to the nodes inorder to add icons to respective node.
|
|
114
|
+
setNodeclasses(treeId, treeNode) {
|
|
115
|
+
return treeNode.icon ? { add: [`${treeNode.icon}`] } : '';
|
|
116
|
+
}
|
|
117
|
+
;
|
|
118
|
+
// Sets the node label with any icon if bound to
|
|
119
|
+
setNodeData(nodes, depth, level, parentNode, type) {
|
|
120
|
+
if (depth === 0) {
|
|
121
|
+
nodes.map(node => {
|
|
122
|
+
if (node.children) {
|
|
123
|
+
this.setNodeData(node.children, depth, level, parentNode, type);
|
|
124
|
+
}
|
|
125
|
+
if (node.icon && this.nodelabel == 'icon') {
|
|
126
|
+
node[type] = node.icon;
|
|
127
|
+
}
|
|
128
|
+
else if (node.name && this.nodelabel == 'name') {
|
|
129
|
+
node[type] = node.name;
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
nodes.map(node => {
|
|
138
|
+
if (node.children && level > 1) {
|
|
139
|
+
if (depth === level) {
|
|
140
|
+
parentNode = node;
|
|
141
|
+
}
|
|
142
|
+
this.setNodeData(node.children, depth, level - 1, parentNode, type);
|
|
143
|
+
}
|
|
144
|
+
if (level === 1 && (type === "name" ? this.nodelabel.includes("label") || this.nodelabel.includes("name") : this.nodeicon.includes("label") || this.nodeicon.includes("name"))) {
|
|
145
|
+
parentNode[type] = node.name || node.label;
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
else if (level === 1 && (node.icon !== undefined) && (type === "name" ? this.nodelabel.includes("icon") : this.nodeicon.includes("icon"))) {
|
|
149
|
+
parentNode[type] = node.icon;
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
// adds tree icons to the nodes on load of the tree
|
|
159
|
+
changeTreeIcons(nv) {
|
|
160
|
+
let eleClose = $('ul[name="' + this.name + '"] li span.button.switch');
|
|
161
|
+
$(eleClose).map((idx, ele) => {
|
|
162
|
+
$(ele).addClass(nv);
|
|
163
|
+
$(ele).on("click", function (e) {
|
|
164
|
+
setTimeout(() => {
|
|
165
|
+
$(ele).addClass(nv);
|
|
166
|
+
}, 0);
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
getPath(treeNode, path) {
|
|
171
|
+
if (treeNode.getParentNode() === null) {
|
|
172
|
+
path = "/" + treeNode.name + path;
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
path = this.getPath(treeNode.getParentNode(), path) + "/" + treeNode.name;
|
|
176
|
+
}
|
|
177
|
+
return path;
|
|
178
|
+
}
|
|
179
|
+
// binds the click event to all nodes to open the child nodes
|
|
180
|
+
onClick(event, treeId, treeNode, clickFlag) {
|
|
181
|
+
var treeObj = $.fn.zTree.getZTreeObj(`${this.name}`);
|
|
182
|
+
if (this.nodeclick === 'expand') {
|
|
183
|
+
treeObj.expandNode(treeNode, treeNode.open ? false : true, false, true);
|
|
184
|
+
this.changeTreeIcons(this.treeicon || defaultTreeIconClass);
|
|
185
|
+
let path = this.getPath(treeNode, "");
|
|
186
|
+
const eventParams = {
|
|
187
|
+
'$event': event,
|
|
188
|
+
"$item": treeNode,
|
|
189
|
+
"$path": path
|
|
190
|
+
};
|
|
191
|
+
this.invokeEventCallback('select', eventParams);
|
|
192
|
+
if (treeNode.open) {
|
|
193
|
+
// this.invokeEventCallback('expand', eventParams);
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
this.invokeEventCallback('collapse', eventParams);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
// Adds tree icon classes to child nodes when expanded
|
|
201
|
+
onExpand(event, treeId, treeNode) {
|
|
202
|
+
let self = this;
|
|
203
|
+
treeNode.children ? treeNode.children.map((el) => {
|
|
204
|
+
if (el.isParent) {
|
|
205
|
+
let ele = $(`#${el.tId}_switch`);
|
|
206
|
+
$(ele).addClass(self.treeicon || defaultTreeIconClass);
|
|
207
|
+
$(ele).on("click", function (e) {
|
|
208
|
+
setTimeout(() => {
|
|
209
|
+
$(ele).addClass(self.treeicon || defaultTreeIconClass);
|
|
210
|
+
}, 0);
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
}) : '';
|
|
214
|
+
}
|
|
215
|
+
// function to support backward compatibility of objects
|
|
216
|
+
modifyObjects(array) {
|
|
217
|
+
array.forEach(obj => {
|
|
218
|
+
if (obj.label !== undefined) {
|
|
219
|
+
obj.name = obj.label;
|
|
220
|
+
delete obj.label;
|
|
221
|
+
}
|
|
222
|
+
if (obj.children !== undefined) {
|
|
223
|
+
this.modifyObjects(obj.children);
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
return array;
|
|
227
|
+
}
|
|
228
|
+
// sets the node children property to parent nodes
|
|
229
|
+
setNodeChildren(nodes, depth, level, parentNode) {
|
|
230
|
+
if (depth <= 0) {
|
|
231
|
+
return nodes;
|
|
232
|
+
}
|
|
233
|
+
for (let i = 0; i < nodes.length; i++) {
|
|
234
|
+
const node = nodes[i];
|
|
235
|
+
if (depth === level) {
|
|
236
|
+
parentNode = nodes[i];
|
|
237
|
+
}
|
|
238
|
+
if (node.children && node.children.length > 0) {
|
|
239
|
+
if (level === 1) {
|
|
240
|
+
parentNode.children = node.children.map(child => ({ name: child.name, children: child === null || child === void 0 ? void 0 : child.children }));
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
else {
|
|
244
|
+
this.setNodeChildren(node.children, depth, level - 1, parentNode);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
return nodes;
|
|
249
|
+
}
|
|
250
|
+
countDepth(str) {
|
|
251
|
+
const regex = /\[.*?\]/g;
|
|
252
|
+
let matches = str.match(regex);
|
|
253
|
+
let count = 1;
|
|
254
|
+
if (matches === null)
|
|
255
|
+
return count;
|
|
256
|
+
for (let match of matches) {
|
|
257
|
+
count++;
|
|
258
|
+
}
|
|
259
|
+
return count;
|
|
260
|
+
}
|
|
261
|
+
// Renders the tree on to the dom
|
|
262
|
+
renderTree() {
|
|
263
|
+
if (this.nodes) {
|
|
264
|
+
this.nativeElement.setAttribute('id', this.name);
|
|
265
|
+
this.nodes = this.modifyObjects(this.nodes);
|
|
266
|
+
this.setTreeTemplate(this.treeClass);
|
|
267
|
+
if (this.nodelabel) {
|
|
268
|
+
let depth = 0;
|
|
269
|
+
if (this.nodelabel.includes("children")) {
|
|
270
|
+
depth = this.countDepth(this.nodelabel);
|
|
271
|
+
}
|
|
272
|
+
this.setNodeData(this.nodes, depth, depth, null, "name");
|
|
273
|
+
}
|
|
274
|
+
if (this.nodeicon) {
|
|
275
|
+
let depth = 0;
|
|
276
|
+
if (this.nodeicon.includes("children")) {
|
|
277
|
+
depth = this.countDepth(this.nodeicon);
|
|
278
|
+
}
|
|
279
|
+
this.setNodeData(this.nodes, depth, depth, null, "icon");
|
|
280
|
+
}
|
|
281
|
+
if (this.nodechildren) {
|
|
282
|
+
let depth = this.countDepth(this.nodechildren);
|
|
283
|
+
if (depth > 1) {
|
|
284
|
+
this.nodes = this.setNodeChildren(this.nodes, depth, depth, null);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
this.setting.view['nodeClasses'] = this.setNodeclasses;
|
|
289
|
+
this.setting.callback["onClick"] = this.onClick.bind(this);
|
|
290
|
+
this.setting.callback["onExpand"] = this.onExpand.bind(this);
|
|
291
|
+
let zTree = $.fn.zTree.init($('ul[name="' + this.name + '"]'), this.setting, this.nodes);
|
|
292
|
+
$.fn.zTreeKeyboardNavigation(zTree, $('ul[name="' + this.name + '"]'), null, this.treeicon || defaultTreeIconClass);
|
|
293
|
+
}
|
|
294
|
+
ngAfterViewInit() {
|
|
295
|
+
setTimeout(() => {
|
|
296
|
+
this.changeTreeIcons(this.treeicon || defaultTreeIconClass);
|
|
297
|
+
}, 200);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
TreeComponent.initializeProps = registerProps();
|
|
301
|
+
TreeComponent.decorators = [
|
|
302
|
+
{ type: Component, args: [{
|
|
303
|
+
selector: 'ul[wmTree]',
|
|
304
|
+
template: "<ul #wmTree class=\"ztree\" id=\"ztree\"></ul> ",
|
|
305
|
+
providers: [
|
|
306
|
+
provideAsWidgetRef(TreeComponent)
|
|
307
|
+
],
|
|
308
|
+
encapsulation: ViewEncapsulation.None
|
|
309
|
+
},] }
|
|
310
|
+
];
|
|
311
|
+
TreeComponent.ctorParameters = () => [
|
|
312
|
+
{ type: Injector }
|
|
313
|
+
];
|
|
314
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvYmFzaWMvdHJlZS9zcmMvdHJlZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxRQUFRLEVBQVUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHOUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFJN0MsTUFBTSxXQUFXLEdBQUcsRUFBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUMsQ0FBQztBQUNuRSxNQUFNLG9CQUFvQixHQUFHLFlBQVksQ0FBQztBQVUxQyxNQUFNLE9BQU8sYUFBYyxTQUFRLGlCQUFpQjtJQW1DaEQsWUFDSSxHQUFhO1FBRWIsS0FBSyxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztRQXhCcEIsWUFBTyxHQUFHO1lBQ2QsSUFBSSxFQUFFO2dCQUNGLFVBQVUsRUFBRTtvQkFDUixNQUFNLEVBQUUsSUFBSTtpQkFDZjthQUNKO1lBQ0QsSUFBSSxFQUFFO2dCQUNGLGNBQWMsRUFBRSxLQUFLO2dCQUNyQixPQUFPLEVBQUU7b0JBQ0wsY0FBYyxFQUFFLElBQUk7aUJBQ3JCO2dCQUNILFVBQVUsRUFBRSxFQUVYO2FBQ0o7WUFDRCxLQUFLLEVBQUUsRUFDTjtZQUNELFFBQVEsRUFBRSxFQUNUO1NBQ0osQ0FBQztRQU1FLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsR0FBVyxF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SSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV6RixDQUFDLENBQUMsRUFBRSxDQUFDLHVCQUF1QixDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLElBQUksb0JBQW9CLENBQUMsQ0FBQztJQUV4SCxDQUFDO0lBRUQsZUFBZTtRQUNYLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksb0JBQW9CLENBQUMsQ0FBQztRQUNoRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDWixDQUFDOztBQTFVTSw2QkFBZSxHQUFHLGFBQWEsRUFBRSxDQUFDOztZQVQ1QyxTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLFlBQVk7Z0JBQ3RCLDREQUFvQztnQkFDcEMsU0FBUyxFQUFFO29CQUNQLGtCQUFrQixDQUFDLGFBQWEsQ0FBQztpQkFDcEM7Z0JBQ0QsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7YUFDeEM7OztZQWxCa0IsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBJbmplY3RvciwgT25Jbml0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5cbmltcG9ydCB7IEFQUExZX1NUWUxFU19UWVBFLCBnZXRPcmRlcmVkRGF0YXNldCwgcHJvdmlkZUFzV2lkZ2V0UmVmLCBTdHlsYWJsZUNvbXBvbmVudCwgc3R5bGVyIH0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5pbXBvcnQgeyByZWdpc3RlclByb3BzIH0gZnJvbSAnLi90cmVlLnByb3BzJztcbiBcbmRlY2xhcmUgY29uc3QgXywgJDtcblxuY29uc3QgV0lER0VUX0lORk8gPSB7d2lkZ2V0VHlwZTogJ3dtLXRyZWUnLCBob3N0Q2xhc3M6ICdhcHAtdHJlZSd9O1xuY29uc3QgZGVmYXVsdFRyZWVJY29uQ2xhc3MgPSAncGx1cy1taW51cyc7XG5cbkBDb21wb25lbnQoeyBcbiAgICBzZWxlY3RvcjogJ3VsW3dtVHJlZV0nLCBcbiAgICB0ZW1wbGF0ZVVybDogJy4vdHJlZS5jb21wb25lbnQuaHRtbCcsIFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBwcm92aWRlQXNXaWRnZXRSZWYoVHJlZUNvbXBvbmVudClcbiAgICBdLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pICBcbmV4cG9ydCBjbGFzcyBUcmVlQ29tcG9uZW50IGV4dGVuZHMgU3R5bGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIHN0YXRpYyBpbml0aWFsaXplUHJvcHMgPSByZWdpc3RlclByb3BzKCk7XG5cbiAgICBwcml2YXRlIG5vZGVzO1xuICAgIHByaXZhdGUgbGV2ZWw7XG4gICAgcHJpdmF0ZSBvcmRlcmJ5O1xuICAgIHByaXZhdGUgbm9kZWxhYmVsO1xuICAgIHByaXZhdGUgdHJlZWljb247XG4gICAgcHJpdmF0ZSBub2RlY2hpbGRyZW47XG4gICAgcHJpdmF0ZSBub2RlY2xpY2s7XG4gICAgcHJpdmF0ZSB0cmVlQ2xhc3M7XG4gICAgcHJpdmF0ZSBub2RlaWNvbjtcbiAgICBwcml2YXRlIG5hbWU7XG5cbiAgICBwcml2YXRlIHNldHRpbmcgPSB7XG4gICAgICAgIGRhdGE6IHsgXG4gICAgICAgICAgICBzaW1wbGVEYXRhOiB7XG4gICAgICAgICAgICAgICAgZW5hYmxlOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB2aWV3OiB7XG4gICAgICAgICAgICBkYmxDbGlja0V4cGFuZDogZmFsc2UsXG4gICAgICAgICAgICBmb250Q3NzOiB7XG4gICAgICAgICAgICAgICAgJ2ZvbnQtYXdlc29tZSc6IHRydWVcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN3aXRjaEljb246IHtcbiAgICBcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sIFxuICAgICAgICBjaGVjazogeyBcbiAgICAgICAgfSxcbiAgICAgICAgY2FsbGJhY2s6IHtcbiAgICAgICAgfVxuICAgIH07XG4gICAgXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGluajogSW5qZWN0b3JcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qLCBXSURHRVRfSU5GTyk7XG4gICAgICAgIHN0eWxlcih0aGlzLm5hdGl2ZUVsZW1lbnQsIHRoaXMsIEFQUExZX1NUWUxFU19UWVBFLkNPTlRBSU5FUik7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUHJvcGVydHlDaGFuZ2Uoa2V5OiBzdHJpbmcsIG52OiBhbnksIG92PzogYW55KTogdm9pZCB7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdkYXRhc2V0JzogXG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlcyA9IHRoaXMuZ2V0Tm9kZXMobnYpO1xuICAgICAgICAgICAgICAgIGlmKHRoaXMubGV2ZWwgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwYW5kVHJlZSh0aGlzLmxldmVsLCB0aGlzLm5vZGVzLCAwKTtcbiAgICAgICAgICAgICAgICB9ICBcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlclRyZWUoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2xldmVscyc6XG4gICAgICAgICAgICAgICAgaWYgKG52ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxldmVsID0gbnY7IFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3RyZWVpY29ucyc6XG4gICAgICAgICAgICAgICAgdGhpcy50cmVlaWNvbiA9IG52O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbm9kZWxhYmVsJzpcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGVsYWJlbCA9IG52O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaWNvbic6XG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlaWNvbiA9IG52O1xuICAgICAgICAgICAgY2FzZSAnb3JkZXJieSc6XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJUcmVlKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdjbGFzcyc6XG4gICAgICAgICAgICAgICAgdGhpcy50cmVlQ2xhc3MgPSBudjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBleHBhbmRzIHRoZSB0cmVlIG5vZGVzIGlmIHRoZSBwcm9wZXJ0eSBpcyBzZWxlY3RlZC5cbiAgICBwcml2YXRlIGV4cGFuZFRyZWUobGV2ZWwsIG5vZGUsIGNoaWxkTGV2ZWwpIHtcbiAgICAgICAgbm9kZS5tYXAoY2hpbGROb2RlID0+IHtcbiAgICAgICAgICAgIGlmIChcImNoaWxkcmVuXCIgaW4gY2hpbGROb2RlICYmICEoXCJvcGVuXCIgaW4gY2hpbGROb2RlKSAmJiBjaGlsZExldmVsIDwgbGV2ZWwpIHtcbiAgICAgICAgICAgICAgICBjaGlsZE5vZGVbXCJvcGVuXCJdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZFRyZWUobGV2ZWwsIGNoaWxkTm9kZS5jaGlsZHJlbiwgY2hpbGRMZXZlbCsxKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2hpbGRMZXZlbCA9IDA7XG4gICAgICAgICAgICAgICAgcmV0dXJuOyBcbiAgICAgICAgICAgIH0gXG4gICAgICAgIH0pICAgXG4gICAgfVxuIFxuICAgIC8vIHNldHMgdGhlIHRlbXBsYXRlIGZvciB0aGUgdHJlZSBiYXNlZCBvbiB0aGUgcHJvcGVydHkgc2VsZWN0ZWQuXG4gICAgcHJpdmF0ZSBzZXRUcmVlVGVtcGxhdGUodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSAnQ2xhc3NpYycpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jaGVja1tcImVuYWJsZVwiXSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYodmFsdWUgPT09ICdDaGVja2JveCcpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jaGVja1tcImVuYWJsZVwiXSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuY2hlY2tbXCJjaGtTdHlsZVwiXSA9ICdjaGVja2JveCc7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09ICdSYWRpbycpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jaGVja1tcImVuYWJsZVwiXSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuY2hlY2tbXCJjaGtTdHlsZVwiXSA9ICdyYWRpbyc7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuY2hlY2tbXCJyYWRpb1R5cGVcIl0gPSBcImFsbFwiO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZXh0cmFjdHMgbm9kZXMgZnJvbSBzdHJpbmcgZm9ybWF0XG4gICAgcHJpdmF0ZSBnZXROb2Rlc0Zyb21TdHJpbmcodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLnNwbGl0KCcsJykubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICduYW1lJzogaXRlbSAmJiBpdGVtLnRyaW0oKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gZ2V0cyB0aGUgbm9kZXMgYW5kIG9yZGVycyB0aGUgbm9kZXMgaWYgcmVxdWlyZWQgXG4gICAgcHJpdmF0ZSBnZXROb2RlcyhuZXdWYWwpIHtcbiAgICAgICAgbGV0IG5vZGVzO1xuICAgICAgICBpZiAoXy5pc0FycmF5KG5ld1ZhbCkpIHtcbiAgICAgICAgICAgIG5vZGVzID0gZ2V0T3JkZXJlZERhdGFzZXQobmV3VmFsLCB0aGlzLm9yZGVyYnkpO1xuICAgICAgICB9IGVsc2UgaWYgKF8uaXNPYmplY3QobmV3VmFsKSkge1xuICAgICAgICAgICAgbm9kZXMgPSBbbmV3VmFsXTtcbiAgICAgICAgfSBlbHNlIGlmIChfLmlzU3RyaW5nKG5ld1ZhbCkgJiYgIV8uaXNFbXB0eShuZXdWYWwpKSB7XG4gICAgICAgICAgICBuZXdWYWwgPSBuZXdWYWwudHJpbSgpO1xuICAgICAgICAgICAgaWYgKG5ld1ZhbCkge1xuICAgICAgICAgICAgICAgIG5vZGVzID0gdGhpcy5nZXROb2Rlc0Zyb21TdHJpbmcobmV3VmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBcbiAgICAgICAgcmV0dXJuIG5vZGVzO1xuICAgIH1cblxuXG4gICAgLy8gYWRkcyBjbGFzcyB0byB0aGUgbm9kZXMgaW5vcmRlciB0byBhZGQgaWNvbnMgdG8gcmVzcGVjdGl2ZSBub2RlLlxuICAgIHByaXZhdGUgc2V0Tm9kZWNsYXNzZXModHJlZUlkLCB0cmVlTm9kZSkge1xuICAgICAgICByZXR1cm4gdHJlZU5vZGUuaWNvbiA/IHthZGQ6IFtgJHt0cmVlTm9kZS5pY29ufWBdfSA6ICcnO1xuICAgIH07XG5cbiAgICAvLyBTZXRzIHRoZSBub2RlIGxhYmVsIHdpdGggYW55IGljb24gaWYgYm91bmQgdG9cbiAgICBwcml2YXRlIHNldE5vZGVEYXRhKG5vZGVzLCBkZXB0aCwgbGV2ZWwsIHBhcmVudE5vZGUsIHR5cGUpIHtcbiAgICAgICAgaWYoZGVwdGggPT09IDApIHtcbiAgICAgICAgICAgIG5vZGVzLm1hcChub2RlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldE5vZGVEYXRhKG5vZGUuY2hpbGRyZW4sIGRlcHRoLCBsZXZlbCAsIHBhcmVudE5vZGUsIHR5cGUpO1xuICAgICAgICAgICAgICAgIH0gaWYgKG5vZGUuaWNvbiAmJiB0aGlzLm5vZGVsYWJlbCA9PSAnaWNvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZVt0eXBlXSA9IG5vZGUuaWNvbjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYobm9kZS5uYW1lICYmIHRoaXMubm9kZWxhYmVsID09ICduYW1lJykge1xuICAgICAgICAgICAgICAgICAgICBub2RlW3R5cGVdID0gbm9kZS5uYW1lO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbm9kZXMubWFwKG5vZGUgPT4geyAgIFxuICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkcmVuICYmIGxldmVsID4gMSkgeyBcbiAgICAgICAgICAgICAgICAgICAgaWYoZGVwdGggPT09IGxldmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnROb2RlID0gbm9kZTtcbiAgICAgICAgICAgICAgICAgICAgfSBcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXROb2RlRGF0YShub2RlLmNoaWxkcmVuLCBkZXB0aCwgbGV2ZWwgLSAxLCBwYXJlbnROb2RlLCB0eXBlKTtcbiAgICAgICAgICAgICAgICB9ICBcbiAgICAgICAgICAgICAgICBpZiAobGV2ZWwgPT09IDEgJiYgKHR5cGUgPT09IFwibmFtZVwiID8gdGhpcy5ub2RlbGFiZWwuaW5jbHVkZXMoXCJsYWJlbFwiKSB8fCB0aGlzLm5vZGVsYWJlbC5pbmNsdWRlcyhcIm5hbWVcIik6IHRoaXMubm9kZWljb24uaW5jbHVkZXMoXCJsYWJlbFwiKSB8fCB0aGlzLm5vZGVpY29uLmluY2x1ZGVzKFwibmFtZVwiKSApKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGVbdHlwZV0gPSBub2RlLm5hbWUgfHwgbm9kZS5sYWJlbDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmKGxldmVsID09PSAxICYmIChub2RlLmljb24gIT09IHVuZGVmaW5lZCkgJiYgKHR5cGUgPT09IFwibmFtZVwiID8gdGhpcy5ub2RlbGFiZWwuaW5jbHVkZXMoXCJpY29uXCIpIDogdGhpcy5ub2RlaWNvbi5pbmNsdWRlcyhcImljb25cIikpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGVbdHlwZV0gPSBub2RlLmljb247XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkgXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhZGRzIHRyZWUgaWNvbnMgdG8gdGhlIG5vZGVzIG9uIGxvYWQgb2YgdGhlIHRyZWUgXG4gICAgcHJpdmF0ZSBjaGFuZ2VUcmVlSWNvbnMobnYpIHsgXG4gICAgICAgIGxldCBlbGVDbG9zZSA9ICQoJ3VsW25hbWU9XCInICsgdGhpcy5uYW1lICsgJ1wiXSBsaSBzcGFuLmJ1dHRvbi5zd2l0Y2gnKTtcblxuICAgICAgICAkKGVsZUNsb3NlKS5tYXAoKGlkeCwgZWxlKSA9PiB7XG4gICAgICAgICAgICAkKGVsZSkuYWRkQ2xhc3MobnYpOyBcbiAgICAgICAgICAgICQoZWxlKS5vbihcImNsaWNrXCIsZnVuY3Rpb24oZSkgeyBcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgJChlbGUpLmFkZENsYXNzKG52KTsgXG4gICAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSkgIFxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UGF0aCh0cmVlTm9kZSwgcGF0aCkgeyBcbiAgICAgICAgaWYodHJlZU5vZGUuZ2V0UGFyZW50Tm9kZSgpID09PSBudWxsKSB7XG4gICAgICAgICAgICBwYXRoID0gXCIvXCIgKyB0cmVlTm9kZS5uYW1lICsgcGF0aDtcbiAgICAgICAgfSBlbHNlIHsgICBcbiAgICAgICAgICAgIHBhdGggPSB0aGlzLmdldFBhdGgodHJlZU5vZGUuZ2V0UGFyZW50Tm9kZSgpLCBwYXRoKSArIFwiL1wiICsgdHJlZU5vZGUubmFtZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGF0aDsgXG4gICAgfVxuXG4gICAgLy8gYmluZHMgdGhlIGNsaWNrIGV2ZW50IHRvIGFsbCBub2RlcyB0byBvcGVuIHRoZSBjaGlsZCBub2Rlc1xuICAgIHB1YmxpYyBvbkNsaWNrKGV2ZW50LCB0cmVlSWQsIHRyZWVOb2RlLCBjbGlja0ZsYWcpIHtcbiAgICAgICAgdmFyIHRyZWVPYmogPSAkLmZuLnpUcmVlLmdldFpUcmVlT2JqKGAke3RoaXMubmFtZX1gKTtcbiAgICAgICAgaWYgKHRoaXMubm9kZWNsaWNrID09PSAnZXhwYW5kJykge1xuICAgICAgICAgICAgdHJlZU9iai5leHBhbmROb2RlKHRyZWVOb2RlLCB0cmVlTm9kZS5vcGVuID8gZmFsc2UgOiB0cnVlLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVRyZWVJY29ucyh0aGlzLnRyZWVpY29uIHx8IGRlZmF1bHRUcmVlSWNvbkNsYXNzKVxuXG4gICAgICAgICAgICBsZXQgcGF0aCA9IHRoaXMuZ2V0UGF0aCh0cmVlTm9kZSwgXCJcIik7XG5cbiAgICAgICAgICAgIGNvbnN0IGV2ZW50UGFyYW1zID0ge1xuICAgICAgICAgICAgICAgICckZXZlbnQnICA6IGV2ZW50LFxuICAgICAgICAgICAgICAgIFwiJGl0ZW1cIiAgIDogdHJlZU5vZGUsIFxuICAgICAgICAgICAgICAgIFwiJHBhdGhcIiA6IHBhdGhcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnc2VsZWN0JywgZXZlbnRQYXJhbXMpO1xuXG4gICAgICAgICAgICBpZih0cmVlTm9kZS5vcGVuKSB7XG4gICAgICAgICAgICAgICAgLy8gdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdleHBhbmQnLCBldmVudFBhcmFtcyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnY29sbGFwc2UnLCBldmVudFBhcmFtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gXG4gICAgfVxuXG4gICAgLy8gQWRkcyB0cmVlIGljb24gY2xhc3NlcyB0byBjaGlsZCBub2RlcyB3aGVuIGV4cGFuZGVkIFxuICAgIHB1YmxpYyBvbkV4cGFuZChldmVudCwgdHJlZUlkLCB0cmVlTm9kZSkge1xuICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XG4gICAgICAgIHRyZWVOb2RlLmNoaWxkcmVuID8gdHJlZU5vZGUuY2hpbGRyZW4ubWFwKChlbCkgPT4ge1xuICAgICAgICAgICAgaWYgKGVsLmlzUGFyZW50KSB7XG4gICAgICAgICAgICAgICAgbGV0IGVsZSA9ICQoYCMke2VsLnRJZH1fc3dpdGNoYCk7XG4gICAgICAgICAgICAgICAgJChlbGUpLmFkZENsYXNzKHNlbGYudHJlZWljb24gfHwgZGVmYXVsdFRyZWVJY29uQ2xhc3MpO1xuICAgICAgICAgICAgICAgICQoZWxlKS5vbihcImNsaWNrXCIsZnVuY3Rpb24oZSkgeyBcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKGVsZSkuYWRkQ2xhc3Moc2VsZi50cmVlaWNvbiB8fCBkZWZhdWx0VHJlZUljb25DbGFzcyk7IFxuICAgICAgICAgICAgICAgICAgICB9LCAwKTsgXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IFxuICAgICAgICB9KSA6ICcnO1xuICAgIH1cblxuICAgIC8vIGZ1bmN0aW9uIHRvIHN1cHBvcnQgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBvZiBvYmplY3RzXG4gICAgcHVibGljIG1vZGlmeU9iamVjdHMoYXJyYXkpIHtcbiAgICAgICAgYXJyYXkuZm9yRWFjaChvYmogPT4ge1xuICAgICAgICAgIGlmIChvYmoubGFiZWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgb2JqLm5hbWUgPSBvYmoubGFiZWw7XG4gICAgICAgICAgICBkZWxldGUgb2JqLmxhYmVsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob2JqLmNoaWxkcmVuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMubW9kaWZ5T2JqZWN0cyhvYmouY2hpbGRyZW4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBhcnJheTtcbiAgICAgIH1cblxuICAgIC8vIHNldHMgdGhlIG5vZGUgY2hpbGRyZW4gcHJvcGVydHkgdG8gcGFyZW50IG5vZGVzXG4gICAgcHJpdmF0ZSBzZXROb2RlQ2hpbGRyZW4obm9kZXMsIGRlcHRoLCBsZXZlbCwgcGFyZW50Tm9kZSkge1xuICAgICAgICBpZiAoZGVwdGggPD0gMCkge1xuICAgICAgICAgIHJldHVybiBub2RlcztcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzW2ldO1xuXG4gICAgICAgICAgaWYoZGVwdGggPT09IGxldmVsKSB7XG4gICAgICAgICAgICBwYXJlbnROb2RlICA9IG5vZGVzW2ldO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobm9kZS5jaGlsZHJlbiAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGlmIChsZXZlbCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHBhcmVudE5vZGUuY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuLm1hcChjaGlsZCA9PiAoeyBuYW1lOiBjaGlsZC5uYW1lLCBjaGlsZHJlbjogY2hpbGQ/LmNoaWxkcmVuIH0pKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnNldE5vZGVDaGlsZHJlbihub2RlLmNoaWxkcmVuLCBkZXB0aCAsbGV2ZWwgLSAxLCBwYXJlbnROb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIFxuICAgICAgICByZXR1cm4gbm9kZXM7XG4gICAgICB9XG4gICAgXG4gICAgcHJpdmF0ZSBjb3VudERlcHRoKHN0cikge1xuICAgICAgICBjb25zdCByZWdleCA9IC9cXFsuKj9cXF0vZztcbiAgICAgICAgbGV0IG1hdGNoZXMgPSBzdHIubWF0Y2gocmVnZXgpOyBcbiAgICAgICAgbGV0IGNvdW50ID0gMTsgXG5cbiAgICAgICAgaWYobWF0Y2hlcyA9PT0gbnVsbCkgcmV0dXJuIGNvdW50O1xuICAgICAgICBcbiAgICAgICAgZm9yIChsZXQgbWF0Y2ggb2YgbWF0Y2hlcykge1xuICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHJldHVybiBjb3VudDtcbiAgICAgIH1cblxuXG4gICAgLy8gUmVuZGVycyB0aGUgdHJlZSBvbiB0byB0aGUgZG9tIFxuICAgIHB1YmxpYyByZW5kZXJUcmVlKCkgeyBcbiAgICAgICAgaWYodGhpcy5ub2Rlcykge1xuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnaWQnLCB0aGlzLm5hbWUpO1xuICAgICAgICAgICAgdGhpcy5ub2RlcyA9IHRoaXMubW9kaWZ5T2JqZWN0cyh0aGlzLm5vZGVzKTtcbiAgICAgICAgICAgIHRoaXMuc2V0VHJlZVRlbXBsYXRlKHRoaXMudHJlZUNsYXNzKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMubm9kZWxhYmVsKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRlcHRoID0wO1xuICAgICAgICAgICAgICAgIGlmKHRoaXMubm9kZWxhYmVsLmluY2x1ZGVzKFwiY2hpbGRyZW5cIikpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVwdGggPSB0aGlzLmNvdW50RGVwdGgodGhpcy5ub2RlbGFiZWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnNldE5vZGVEYXRhKHRoaXMubm9kZXMsIGRlcHRoLCBkZXB0aCwgbnVsbCwgXCJuYW1lXCIpO1xuICAgICAgICAgICAgfSAgXG4gICAgICAgICAgICBpZih0aGlzLm5vZGVpY29uKSAge1xuICAgICAgICAgICAgICAgIGxldCBkZXB0aCA9MDtcbiAgICAgICAgICAgICAgICBpZih0aGlzLm5vZGVpY29uLmluY2x1ZGVzKFwiY2hpbGRyZW5cIikpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVwdGggPSB0aGlzLmNvdW50RGVwdGgodGhpcy5ub2RlaWNvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc2V0Tm9kZURhdGEodGhpcy5ub2RlcywgZGVwdGgsIGRlcHRoLCBudWxsLCBcImljb25cIik7XG4gICAgICAgICAgICB9XG4gICAgXG4gICAgICAgICAgICBpZiAodGhpcy5ub2RlY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBsZXQgZGVwdGggPSB0aGlzLmNvdW50RGVwdGgodGhpcy5ub2RlY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIGlmKGRlcHRoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vZGVzID0gdGhpcy5zZXROb2RlQ2hpbGRyZW4odGhpcy5ub2RlcywgZGVwdGgsIGRlcHRoLCBudWxsKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG5cbiAgICAgICAgdGhpcy5zZXR0aW5nLnZpZXdbJ25vZGVDbGFzc2VzJ10gPSB0aGlzLnNldE5vZGVjbGFzc2VzO1xuICAgICAgICB0aGlzLnNldHRpbmcuY2FsbGJhY2tbXCJvbkNsaWNrXCJdID0gdGhpcy5vbkNsaWNrLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuc2V0dGluZy5jYWxsYmFja1tcIm9uRXhwYW5kXCJdID0gdGhpcy5vbkV4cGFuZC5iaW5kKHRoaXMpOyBcblxuICAgICAgICBsZXQgelRyZWUgPSAkLmZuLnpUcmVlLmluaXQoJCgndWxbbmFtZT1cIicgKyB0aGlzLm5hbWUgKyAnXCJdJyksIHRoaXMuc2V0dGluZywgdGhpcy5ub2Rlcyk7XG5cbiAgICAgICAgJC5mbi56VHJlZUtleWJvYXJkTmF2aWdhdGlvbih6VHJlZSwgJCgndWxbbmFtZT1cIicgKyB0aGlzLm5hbWUgKyAnXCJdJyksIG51bGwsIHRoaXMudHJlZWljb24gfHwgZGVmYXVsdFRyZWVJY29uQ2xhc3MpO1xuXG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQgeyAgICBcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVRyZWVJY29ucyh0aGlzLnRyZWVpY29uIHx8IGRlZmF1bHRUcmVlSWNvbkNsYXNzKTtcbiAgICAgICAgfSwgMjAwKTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { NgModule } from '@angular/core';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
3
|
import { WmComponentsModule } from '@wm/components/base';
|
|
4
|
-
import {
|
|
4
|
+
import { TreeComponent } from './tree.component';
|
|
5
5
|
const components = [
|
|
6
|
-
|
|
6
|
+
TreeComponent
|
|
7
7
|
];
|
|
8
8
|
export class TreeModule {
|
|
9
9
|
}
|
|
@@ -18,4 +18,4 @@ TreeModule.decorators = [
|
|
|
18
18
|
entryComponents: []
|
|
19
19
|
},] }
|
|
20
20
|
];
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvYmFzaWMvdHJlZS9zcmMvdHJlZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWpELE1BQU0sVUFBVSxHQUFHO0lBQ2YsYUFBYTtDQUNoQixDQUFDO0FBV0YsTUFBTSxPQUFPLFVBQVU7OztZQVR0QixRQUFRLFNBQUM7Z0JBQ04sT0FBTyxFQUFFO29CQUNMLFlBQVk7b0JBQ1osa0JBQWtCO2lCQUNyQjtnQkFDRCxZQUFZLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQztnQkFDN0IsT0FBTyxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUM7Z0JBQ3hCLGVBQWUsRUFBRSxFQUFFO2FBQ3RCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmltcG9ydCB7IFdtQ29tcG9uZW50c01vZHVsZSB9IGZyb20gJ0B3bS9jb21wb25lbnRzL2Jhc2UnO1xuXG5pbXBvcnQgeyBUcmVlQ29tcG9uZW50IH0gZnJvbSAnLi90cmVlLmNvbXBvbmVudCc7XG5cbmNvbnN0IGNvbXBvbmVudHMgPSBbXG4gICAgVHJlZUNvbXBvbmVudFxuXTtcblxuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgV21Db21wb25lbnRzTW9kdWxlXG4gICAgXSxcbiAgICBkZWNsYXJhdGlvbnM6IFsuLi5jb21wb25lbnRzXSxcbiAgICBleHBvcnRzOiBbLi4uY29tcG9uZW50c10sXG4gICAgZW50cnlDb21wb25lbnRzOiBbXVxufSlcbmV4cG9ydCBjbGFzcyBUcmVlTW9kdWxlIHtcbn1cbiJdfQ==
|