@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.
@@ -1,310 +0,0 @@
1
- import { Attribute, Directive, Injector } from '@angular/core';
2
- import { $appDigest, $parseEvent, $parseExpr, getClonedObject } from '@wm/core';
3
- import { APPLY_STYLES_TYPE, getEvaluatedData, getOrderedDataset, provideAsWidgetRef, StylableComponent, styler } from '@wm/components/base';
4
- import { registerProps } from './tree.props';
5
- const defaultTreeIconClass = 'plus-minus';
6
- const ICON_CLASSES = {
7
- 'folder': {
8
- 'expanded': 'wi-folder-open',
9
- 'collapsed': 'wi-folder'
10
- },
11
- 'circle-plus-minus': {
12
- 'expanded': 'wi-remove-circle-outline',
13
- 'collapsed': 'wi-add-circle-outline'
14
- },
15
- 'chevron': {
16
- 'expanded': 'wi-keyboard-arrow-down',
17
- 'collapsed': 'wi-keyboard-arrow-right'
18
- },
19
- 'menu': {
20
- 'expanded': 'wi-arrow-down',
21
- 'collapsed': 'wi-arrow-right'
22
- },
23
- 'triangle': {
24
- 'expanded': 'wi-arrow-drop-down-circle',
25
- 'collapsed': 'wi-play-circle-filled'
26
- },
27
- 'expand-collapse': {
28
- 'expanded': 'wi-expand-less',
29
- 'collapsed': 'wi-expand-more'
30
- },
31
- 'plus-minus': {
32
- 'expanded': 'wi-minus',
33
- 'collapsed': 'wi-plus'
34
- }
35
- };
36
- const WIDGET_INFO = { widgetType: 'wm-tree', hostClass: 'app-tree' };
37
- export class TreeDirective extends StylableComponent {
38
- constructor(inj, binddatavalue, bindnodelabel, bindnodeicon, bindnodechildren, bindnodeid) {
39
- super(inj, WIDGET_INFO);
40
- this.binddatavalue = binddatavalue;
41
- this.bindnodelabel = bindnodelabel;
42
- this.bindnodeicon = bindnodeicon;
43
- this.bindnodechildren = bindnodechildren;
44
- this.bindnodeid = bindnodeid;
45
- styler(this.nativeElement, this, APPLY_STYLES_TYPE.CONTAINER);
46
- this.bindEvents();
47
- }
48
- onPropertyChange(key, nv, ov) {
49
- switch (key) {
50
- case 'dataset':
51
- this.nodes = this.getNodes(nv);
52
- this._selectNode = undefined;
53
- this.renderTree();
54
- break;
55
- case 'nodeicon':
56
- case 'nodelabel':
57
- case 'nodechildren':
58
- case 'orderby':
59
- this.renderTree();
60
- break;
61
- case 'treeicons':
62
- this.changeTreeIcons(nv, ov);
63
- break;
64
- case 'datavalue':
65
- this.selectById(nv);
66
- break;
67
- default:
68
- super.onPropertyChange(key, nv, ov);
69
- }
70
- }
71
- constructNodes(nodes, parent, levels, deep, _evalDataValue) {
72
- const $ul = $('<ul></ul>');
73
- const _iconClses = ICON_CLASSES[this.treeicons || defaultTreeIconClass];
74
- const _expr = (this.binddatavalue || this.datavalue);
75
- let _iconCls, _cls;
76
- _cls = levels > 0 ? ' expanded ' : ' collapsed ';
77
- _iconCls = _cls + (levels > 0 ? _iconClses.expanded : _iconClses.collapsed);
78
- deep = deep || 0;
79
- parent.append($ul);
80
- nodes.forEach((node, idx) => {
81
- const $li = $('<li></li>'), $iconNode = $('<i></i>'), nodeLabel = getEvaluatedData(node, { field: this.nodelabel, bindExpression: this.bindnodelabel }, this.viewParent) || node.label, nodeIcon = getEvaluatedData(node, { field: this.nodeicon, bindExpression: this.bindnodeicon }, this.viewParent) || node.icon, nodeChildren = getEvaluatedData(node, { field: this.nodechildren, bindExpression: this.bindnodechildren }, this.viewParent) || node.children;
82
- let nodeIdValue = getEvaluatedData(node, { field: this.nodeid, bindExpression: this.bindnodeid }, this.viewParent);
83
- if (nodeIdValue === undefined) {
84
- nodeIdValue = node.children;
85
- }
86
- let isNodeMatched = false, expandCollapseIcon;
87
- $li.data('nodedata', node)
88
- .append($iconNode)
89
- .append(`<span class="title">${nodeLabel}</span>`)
90
- .appendTo($ul);
91
- // if datavalue(ie, expr) is provided select the tree node accordingly
92
- // if datavalue === 'FirstNode' -- select the FirstNode at level 0
93
- // if datavalue === 'LastNode' -- select the LastNode at level 0
94
- // if datavalue is a bind expression evaluate the expression for each node of the tree till the condition is satisfied.
95
- // if node identifier is present then verify the datavalue is bound expr or static value and compare with the node model
96
- if (this.bindnodeid || this.nodeid) {
97
- isNodeMatched = this.binddatavalue ? nodeIdValue === _evalDataValue : nodeIdValue === _expr;
98
- if (nodeIdValue !== undefined) {
99
- $li.attr('id', nodeIdValue);
100
- }
101
- }
102
- else if (this.binddatavalue) { // evaluate the expression only if it is bound (useExpression)
103
- isNodeMatched = !!$parseExpr(_expr)(this, node);
104
- }
105
- // Perform LastNode check only at level 0.(ie, deep = 0);
106
- if (!this._selectNode) {
107
- if ((_expr === 'FirstNode' && idx === 0)
108
- || (!deep && _expr === 'LastNode' && idx === nodes.length - 1)
109
- || isNodeMatched) {
110
- // save a reference of the node to be selected in `_selectNode`
111
- this._selectNode = $li;
112
- this.datavalue = nodeIdValue;
113
- }
114
- }
115
- if (nodeIcon) {
116
- $iconNode.addClass(nodeIcon);
117
- }
118
- if (nodeChildren && nodeChildren.length) { // parent node
119
- $li.addClass(`parent-node ${_cls}`);
120
- expandCollapseIcon = $(`<i class="wi ${_iconCls}"></i>`);
121
- if (nodeIcon) {
122
- $iconNode.addClass(nodeIcon);
123
- }
124
- $li.prepend(expandCollapseIcon);
125
- this.constructNodes(nodeChildren, $li, levels - 1, deep + 1, _evalDataValue);
126
- }
127
- else {
128
- if (!nodeIcon) {
129
- $iconNode.addClass('leaf-node');
130
- }
131
- $li.addClass('leaf-node');
132
- }
133
- });
134
- }
135
- getNodesFromString(value) {
136
- return value.split(',').map((item) => {
137
- return {
138
- 'label': item && item.trim()
139
- };
140
- });
141
- }
142
- getNodes(newVal) {
143
- let nodes;
144
- if (_.isString(newVal) && !_.isEmpty(newVal)) {
145
- newVal = newVal.trim();
146
- if (newVal) {
147
- nodes = this.getNodesFromString(newVal);
148
- }
149
- }
150
- else if (_.isArray(newVal)) {
151
- newVal = getOrderedDataset(newVal, this.orderby);
152
- nodes = newVal;
153
- }
154
- else if (_.isObject(newVal)) {
155
- nodes = [newVal];
156
- }
157
- return nodes;
158
- }
159
- changeTreeIcons(nv, ov) {
160
- const $el = $(this.nativeElement);
161
- nv = nv || defaultTreeIconClass;
162
- ov = ov || defaultTreeIconClass;
163
- $el.find('i.expanded').removeClass(ICON_CLASSES[ov].expanded).addClass(ICON_CLASSES[nv].expanded);
164
- $el.find('i.collapsed').removeClass(ICON_CLASSES[ov].collapsed).addClass(ICON_CLASSES[nv].collapsed);
165
- }
166
- toggleExpandCollapseNode($event, $i, $li) {
167
- const treeIcons = ICON_CLASSES[this.treeicons || defaultTreeIconClass];
168
- const $liPath = this.findSelectedNodeParent($li);
169
- let path = '';
170
- // construct the path of the node
171
- $liPath
172
- .each((i, el) => {
173
- const current = $(el).children('.title').text();
174
- path = `/${current + path}`;
175
- });
176
- const eventParams = {
177
- '$event': $event,
178
- "$item": $li.data('nodedata'),
179
- "$path": path
180
- };
181
- if ($i.hasClass('collapsed')) {
182
- $i.removeClass(`collapsed ${treeIcons.collapsed}`).addClass(`expanded ${treeIcons.expanded}`);
183
- $li.removeClass('collapsed').addClass('expanded');
184
- this.invokeEventCallback('expand', eventParams);
185
- }
186
- else if ($i.hasClass('expanded')) {
187
- $i.removeClass(`expanded ${treeIcons.expanded}`).addClass(`collapsed ${treeIcons.collapsed}`);
188
- $li.removeClass('expanded').addClass('collapsed');
189
- this.invokeEventCallback('collapse', eventParams);
190
- }
191
- }
192
- renderTree(forceRender) {
193
- let docFrag, $li, $liPath, data, path = '';
194
- const levels = +this.nativeElement.getAttribute('levels') || 0, $el = $(this.nativeElement);
195
- $el.empty();
196
- if (forceRender) {
197
- this._selectNode = undefined;
198
- }
199
- if (this.nodes && this.nodes.length) {
200
- docFrag = document.createDocumentFragment();
201
- this.constructNodes(this.nodes, $(docFrag), levels, 0, this.datavalue);
202
- $el.append(docFrag);
203
- }
204
- if (this._selectNode) {
205
- $li = this._selectNode;
206
- $li.addClass('selected');
207
- data = $li.data('nodedata');
208
- $liPath = this.findSelectedNodeParent($li);
209
- if (!$liPath.length) {
210
- $liPath = $li;
211
- }
212
- $liPath
213
- .each((i, el) => {
214
- const $current = $(el), $i = $current.children('i.collapsed'), $title = $current.children('.title');
215
- this.toggleExpandCollapseNode(undefined, $i, $current);
216
- path = `/${$title.text() + path}`;
217
- });
218
- this.selecteditem = getClonedObject(data) || {};
219
- this.selecteditem.path = path;
220
- this.invokeEventCallback('select', { $event: undefined, $item: data, $path: path });
221
- $appDigest();
222
- }
223
- }
224
- selectNode(evt, value) {
225
- const target = evt && $(evt.target), $el = $(this.nativeElement), $li = _.isObject(value) ? value : $el.find(`li[id="${value}"]`).first();
226
- let data, path = '', $liPath, nodeAction;
227
- $el.find('.selected').removeClass('selected');
228
- if (!$li.length) {
229
- return;
230
- }
231
- $li.addClass('selected');
232
- data = $li.data('nodedata');
233
- nodeAction = data[this.nodeaction || 'action'];
234
- // if the selectNode is initiated by click event then use the nativeElement target from event
235
- $liPath = target ? target.parents('.app-tree li') : this.findSelectedNodeParent($li);
236
- // construct the path of the node
237
- $liPath
238
- .each((i, el) => {
239
- const current = $(el).children('.title').text();
240
- path = `/${current + path}`;
241
- });
242
- // expand the current node till the viewParent level which is collapsed
243
- $li.parentsUntil($el, 'li.parent-node.collapsed')
244
- .each((index, el) => {
245
- const $current = $(el), $i = $current.children('i.collapsed');
246
- this.toggleExpandCollapseNode(undefined, $i, $current);
247
- });
248
- this.selecteditem = getClonedObject(data) || {};
249
- this.selecteditem.path = path;
250
- if (target) {
251
- if (this.nodeid || this.bindnodeid) {
252
- this.datavalue = getEvaluatedData(data, { field: this.nodeid, bindExpression: this.bindnodeid }, this.viewParent);
253
- }
254
- else {
255
- this.datavalue = getClonedObject(data) || {};
256
- }
257
- }
258
- else {
259
- this.datavalue = value;
260
- }
261
- //[Todo-CSP]: this data will be dynamic, can not generate function upfront
262
- if (nodeAction) {
263
- $parseEvent(nodeAction)(this);
264
- }
265
- this.invokeEventCallback('select', { $event: evt, $item: data, $path: path });
266
- $appDigest();
267
- }
268
- // click event is added on the host nativeElement
269
- bindEvents() {
270
- $(this.nativeElement).on('click', (evt) => {
271
- const target = $(evt.target), li = target.closest('li'), $i = target.is('i') ? target : target.siblings('i.collapsed,i.expanded');
272
- evt.stopPropagation();
273
- if (target.is('span.title')) { // select the node only if it is nodelabel
274
- this.selecteditem = {};
275
- this.selectNode(evt, li);
276
- }
277
- if (target.is('i') || (target.is('span.title') && this.nodeclick === 'expand')) {
278
- this.toggleExpandCollapseNode(evt, $i, li);
279
- }
280
- });
281
- }
282
- findSelectedNodeParent($li) {
283
- return $li.find('> span.title').parents('.app-tree li');
284
- }
285
- selectById(value) {
286
- this.selectNode(undefined, value);
287
- }
288
- deselectById(value) {
289
- this.selecteditem = {};
290
- this.selectById();
291
- }
292
- }
293
- TreeDirective.initializeProps = registerProps();
294
- TreeDirective.decorators = [
295
- { type: Directive, args: [{
296
- selector: 'div[wmTree]',
297
- providers: [
298
- provideAsWidgetRef(TreeDirective)
299
- ]
300
- },] }
301
- ];
302
- TreeDirective.ctorParameters = () => [
303
- { type: Injector },
304
- { type: undefined, decorators: [{ type: Attribute, args: ['datavalue.bind',] }] },
305
- { type: undefined, decorators: [{ type: Attribute, args: ['nodelabel.bind',] }] },
306
- { type: undefined, decorators: [{ type: Attribute, args: ['nodeicon.bind',] }] },
307
- { type: undefined, decorators: [{ type: Attribute, args: ['nodechildren.bind',] }] },
308
- { type: undefined, decorators: [{ type: Attribute, args: ['nodeid.bind',] }] }
309
- ];
310
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvYmFzaWMvdHJlZS9zcmMvdHJlZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9ELE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFaEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVJLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHN0MsTUFBTSxvQkFBb0IsR0FBRyxZQUFZLENBQUM7QUFDMUMsTUFBTSxZQUFZLEdBQUc7SUFDakIsUUFBUSxFQUFFO1FBQ04sVUFBVSxFQUFHLGdCQUFnQjtRQUM3QixXQUFXLEVBQUUsV0FBVztLQUMzQjtJQUNELG1CQUFtQixFQUFFO1FBQ2pCLFVBQVUsRUFBRywwQkFBMEI7UUFDdkMsV0FBVyxFQUFFLHVCQUF1QjtLQUN2QztJQUNELFNBQVMsRUFBRTtRQUNQLFVBQVUsRUFBRyx3QkFBd0I7UUFDckMsV0FBVyxFQUFFLHlCQUF5QjtLQUN6QztJQUNELE1BQU0sRUFBRTtRQUNKLFVBQVUsRUFBRyxlQUFlO1FBQzVCLFdBQVcsRUFBRSxnQkFBZ0I7S0FDaEM7SUFDRCxVQUFVLEVBQUU7UUFDUixVQUFVLEVBQUcsMkJBQTJCO1FBQ3hDLFdBQVcsRUFBRSx1QkFBdUI7S0FDdkM7SUFDRCxpQkFBaUIsRUFBRTtRQUNmLFVBQVUsRUFBRyxnQkFBZ0I7UUFDN0IsV0FBVyxFQUFFLGdCQUFnQjtLQUNoQztJQUNE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Z0JBQWdCOzRDQUMxQixTQUFTLFNBQUMsZUFBZTs0Q0FDekIsU0FBUyxTQUFDLG1CQUFtQjs0Q0FDN0IsU0FBUyxTQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdHRyaWJ1dGUsIERpcmVjdGl2ZSwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgJGFwcERpZ2VzdCwgJHBhcnNlRXZlbnQsICRwYXJzZUV4cHIsIGdldENsb25lZE9iamVjdCB9IGZyb20gJ0B3bS9jb3JlJztcblxuaW1wb3J0IHsgQVBQTFlfU1RZTEVTX1RZUEUsIGdldEV2YWx1YXRlZERhdGEsIGdldE9yZGVyZWREYXRhc2V0LCBwcm92aWRlQXNXaWRnZXRSZWYsIFN0eWxhYmxlQ29tcG9uZW50LCBzdHlsZXIgfSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcbmltcG9ydCB7IHJlZ2lzdGVyUHJvcHMgfSBmcm9tICcuL3RyZWUucHJvcHMnO1xuXG5kZWNsYXJlIGNvbnN0IF8sICQ7XG5jb25zdCBkZWZhdWx0VHJlZUljb25DbGFzcyA9ICdwbHVzLW1pbnVzJztcbmNvbnN0IElDT05fQ0xBU1NFUyA9IHtcbiAgICAnZm9sZGVyJzoge1xuICAgICAgICAnZXhwYW5kZWQnIDogJ3dpLWZvbGRlci1vcGVuJyxcbiAgICAgICAgJ2NvbGxhcHNlZCc6ICd3aS1mb2xkZXInXG4gICAgfSxcbiAgICAnY2lyY2xlLXBsdXMtbWludXMnOiB7XG4gICAgICAgICdleHBhbmRlZCcgOiAnd2ktcmVtb3ZlLWNpcmNsZS1vdXRsaW5lJyxcbiAgICAgICAgJ2NvbGxhcHNlZCc6ICd3aS1hZGQtY2lyY2xlLW91dGxpbmUnXG4gICAgfSxcbiAgICAnY2hldnJvbic6IHtcbiAgICAgICAgJ2V4cGFuZGVkJyA6ICd3aS1rZXlib2FyZC1hcnJvdy1kb3duJyxcbiAgICAgICAgJ2NvbGxhcHNlZCc6ICd3aS1rZXlib2FyZC1hcnJvdy1yaWdodCdcbiAgICB9LFxuICAgICdtZW51Jzoge1xuICAgICAgICAnZXhwYW5kZWQnIDogJ3dpLWFycm93LWRvd24nLFxuICAgICAgICAnY29sbGFwc2VkJzogJ3dpLWFycm93LXJpZ2h0J1xuICAgIH0sXG4gICAgJ3RyaWFuZ2xlJzoge1xuICAgICAgICAnZXhwYW5kZWQnIDogJ3dpLWFycm93LWRyb3AtZG93bi1jaXJjbGUnLFxuICAgICAgICAnY29sbGFwc2VkJzogJ3dpLXBsYXktY2lyY2xlLWZpbGxlZCdcbiAgICB9LFxuICAgICdleHBhbmQtY29sbGFwc2UnOiB7XG4gICAgICAgICdleHBhbmRlZCcgOiAnd2ktZXhwYW5kLWxlc3MnLFxuICAgICAgICAnY29sbGFwc2VkJzogJ3dpLWV4cGFuZC1tb3JlJ1xuICAgIH0sXG4gICAgJ3BsdXMtbWludXMnOiB7XG4gICAgICAgICdleHBhbmRlZCcgOiAnd2ktbWludXMnLFxuICAgICAgICAnY29sbGFwc2VkJzogJ3dpLXBsdXMnXG4gICAgfVxufTtcblxuY29uc3QgV0lER0VUX0lORk8gPSB7d2lkZ2V0VHlwZTogJ3dtLXRyZWUnLCBob3N0Q2xhc3M6ICdhcHAtdHJlZSd9O1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ2Rpdlt3bVRyZWVdJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgcHJvdmlkZUFzV2lkZ2V0UmVmKFRyZWVEaXJlY3RpdmUpXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBUcmVlRGlyZWN0aXZlIGV4dGVuZHMgU3R5bGFibGVDb21wb25lbnQge1xuICAgIHN0YXRpYyBpbml0aWFsaXplUHJvcHMgPSByZWdpc3RlclByb3BzKCk7XG5cbiAgICBwcml2YXRlIF9zZWxlY3ROb2RlOiBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIG5vZGVzOiBBcnJheTxhbnk+O1xuXG4gICAgcHVibGljIGRhdGF2YWx1ZTogc3RyaW5nO1xuICAgIHB1YmxpYyB0cmVlaWNvbnM6IHN0cmluZztcbiAgICBwdWJsaWMgc2VsZWN0ZWRpdGVtOiBhbnk7XG4gICAgcHVibGljIG5vZGVpZDogc3RyaW5nO1xuICAgIHB1YmxpYyBub2RlYWN0aW9uOiBzdHJpbmc7XG4gICAgcHVibGljIG5vZGVjbGljazogc3RyaW5nO1xuICAgIHB1YmxpYyBub2RlbGFiZWw6IHN0cmluZztcbiAgICBwdWJsaWMgbm9kZWljb246IHN0cmluZztcbiAgICBwdWJsaWMgbm9kZWNoaWxkcmVuOiBzdHJpbmc7XG4gICAgcHVibGljIG9yZGVyYnk6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBpbmo6IEluamVjdG9yLFxuICAgICAgICBAQXR0cmlidXRlKCdkYXRhdmFsdWUuYmluZCcpIHByaXZhdGUgYmluZGRhdGF2YWx1ZSxcbiAgICAgICAgQEF0dHJpYnV0ZSgnbm9kZWxhYmVsLmJpbmQnKSBwcml2YXRlIGJpbmRub2RlbGFiZWwsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ25vZGVpY29uLmJpbmQnKSBwcml2YXRlIGJpbmRub2RlaWNvbixcbiAgICAgICAgQEF0dHJpYnV0ZSgnbm9kZWNoaWxkcmVuLmJpbmQnKSBwcml2YXRlIGJpbmRub2RlY2hpbGRyZW4sXG4gICAgICAgIEBBdHRyaWJ1dGUoJ25vZGVpZC5iaW5kJykgcHJpdmF0ZSBiaW5kbm9kZWlkXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluaiwgV0lER0VUX0lORk8pO1xuICAgICAgICBzdHlsZXIodGhpcy5uYXRpdmVFbGVtZW50LCB0aGlzLCBBUFBMWV9TVFlMRVNfVFlQRS5DT05UQUlORVIpO1xuICAgICAgICB0aGlzLmJpbmRFdmVudHMoKTtcbiAgICB9XG5cbiAgICBvblByb3BlcnR5Q2hhbmdlKGtleTogc3RyaW5nLCBudjogYW55LCBvdj86IGFueSkge1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAnZGF0YXNldCc6XG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlcyA9IHRoaXMuZ2V0Tm9kZXMobnYpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdE5vZGUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJUcmVlKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdub2RlaWNvbic6XG4gICAgICAgICAgICBjYXNlICdub2RlbGFiZWwnOlxuICAgICAgICAgICAgY2FzZSAnbm9kZWNoaWxkcmVuJzpcbiAgICAgICAgICAgIGNhc2UgJ29yZGVyYnknOlxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyVHJlZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndHJlZWljb25zJzpcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZVRyZWVJY29ucyhudiwgb3YpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZGF0YXZhbHVlJzpcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEJ5SWQobnYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBzdXBlci5vblByb3BlcnR5Q2hhbmdlKGtleSwgbnYsIG92KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY29uc3RydWN0Tm9kZXMobm9kZXMsIHBhcmVudCwgbGV2ZWxzLCBkZWVwLCBfZXZhbERhdGFWYWx1ZSkge1xuXG4gICAgICAgIGNvbnN0ICR1bCA9ICQoJzx1bD48L3VsPicpO1xuICAgICAgICBjb25zdCBfaWNvbkNsc2VzID0gSUNPTl9DTEFTU0VTW3RoaXMudHJlZWljb25zIHx8IGRlZmF1bHRUcmVlSWNvbkNsYXNzXTtcbiAgICAgICAgY29uc3QgX2V4cHIgPSAodGhpcy5iaW5kZGF0YXZhbHVlIHx8IHRoaXMuZGF0YXZhbHVlKTtcblxuICAgICAgICBsZXQgX2ljb25DbHMsIF9jbHM7XG5cbiAgICAgICAgX2NscyAgICAgPSBsZXZlbHMgPiAwID8gJyBleHBhbmRlZCAnIDogJyBjb2xsYXBzZWQgJztcbiAgICAgICAgX2ljb25DbHMgPSBfY2xzICsgKGxldmVscyA+IDAgPyBfaWNvbkNsc2VzLmV4cGFuZGVkIDogX2ljb25DbHNlcy5jb2xsYXBzZWQpO1xuXG4gICAgICAgIGRlZXAgPSBkZWVwIHx8IDA7XG5cbiAgICAgICAgcGFyZW50LmFwcGVuZCgkdWwpO1xuICAgICAgICBub2Rlcy5mb3JFYWNoKChub2RlLCBpZHgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0ICRsaSA9ICQoJzxsaT48L2xpPicpLFxuICAgICAgICAgICAgICAgICRpY29uTm9kZSA9ICQoJzxpPjwvaT4nKSxcbiAgICAgICAgICAgICAgICBub2RlTGFiZWwgPSBnZXRFdmFsdWF0ZWREYXRhKG5vZGUsIHtmaWVsZDogdGhpcy5ub2RlbGFiZWwsIGJpbmRFeHByZXNzaW9uOiB0aGlzLmJpbmRub2RlbGFiZWx9LCB0aGlzLnZpZXdQYXJlbnQpIHx8IG5vZGUubGFiZWwsXG4gICAgICAgICAgICAgICAgbm9kZUljb24gPSBnZXRFdmFsdWF0ZWREYXRhKG5vZGUsIHtmaWVsZDogdGhpcy5ub2RlaWNvbiwgYmluZEV4cHJlc3Npb246IHRoaXMuYmluZG5vZGVpY29ufSwgdGhpcy52aWV3UGFyZW50KSB8fCBub2RlLmljb24sXG4gICAgICAgICAgICAgICAgbm9kZUNoaWxkcmVuID0gZ2V0RXZhbHVhdGVkRGF0YShub2RlLCB7ZmllbGQ6IHRoaXMubm9kZWNoaWxkcmVuLCBiaW5kRXhwcmVzc2lvbjogdGhpcy5iaW5kbm9kZWNoaWxkcmVufSwgdGhpcy52aWV3UGFyZW50KSB8fCBub2RlLmNoaWxkcmVuO1xuICAgICAgICAgICAgbGV0IG5vZGVJZFZhbHVlID0gZ2V0RXZhbHVhdGVkRGF0YShub2RlLCB7ZmllbGQ6IHRoaXMubm9kZWlkLCBiaW5kRXhwcmVzc2lvbjogdGhpcy5iaW5kbm9kZWlkfSwgdGhpcy52aWV3UGFyZW50KTtcbiAgICAgICAgICAgIGlmIChub2RlSWRWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgbm9kZUlkVmFsdWUgPSBub2RlLmNoaWxkcmVuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgaXNOb2RlTWF0Y2hlZCA9IGZhbHNlLFxuICAgICAgICAgICAgICAgIGV4cGFuZENvbGxhcHNlSWNvbjtcblxuICAgICAgICAgICAgJGxpLmRhdGEoJ25vZGVkYXRhJywgbm9kZSlcbiAgICAgICAgICAgICAgICAuYXBwZW5kKCRpY29uTm9kZSlcbiAgICAgICAgICAgICAgICAuYXBwZW5kKGA8c3BhbiBjbGFzcz1cInRpdGxlXCI+JHtub2RlTGFiZWx9PC9zcGFuPmApXG4gICAgICAgICAgICAgICAgLmFwcGVuZFRvKCR1bCk7XG5cblxuICAgICAgICAgICAgLy8gaWYgZGF0YXZhbHVlKGllLCBleHByKSBpcyBwcm92aWRlZCBzZWxlY3QgdGhlIHRyZWUgbm9kZSBhY2NvcmRpbmdseVxuICAgICAgICAgICAgLy8gaWYgZGF0YXZhbHVlID09PSAnRmlyc3ROb2RlJyAtLSBzZWxlY3QgdGhlIEZpcnN0Tm9kZSBhdCBsZXZlbCAwXG4gICAgICAgICAgICAvLyBpZiBkYXRhdmFsdWUgPT09ICdMYXN0Tm9kZScgLS0gc2VsZWN0IHRoZSBMYXN0Tm9kZSBhdCBsZXZlbCAwXG4gICAgICAgICAgICAvLyBpZiBkYXRhdmFsdWUgaXMgYSBiaW5kIGV4cHJlc3Npb24gZXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gZm9yIGVhY2ggbm9kZSBvZiB0aGUgdHJlZSB0aWxsIHRoZSBjb25kaXRpb24gaXMgc2F0aXNmaWVkLlxuXG4gICAgICAgICAgICAvLyBpZiBub2RlIGlkZW50aWZpZXIgaXMgcHJlc2VudCB0aGVuIHZlcmlmeSB0aGUgZGF0YXZhbHVlIGlzIGJvdW5kIGV4cHIgb3Igc3RhdGljIHZhbHVlIGFuZCBjb21wYXJlIHdpdGggdGhlIG5vZGUgbW9kZWxcbiAgICAgICAgICAgIGlmICh0aGlzLmJpbmRub2RlaWQgfHwgdGhpcy5ub2RlaWQpIHtcbiAgICAgICAgICAgICAgICBpc05vZGVNYXRjaGVkID0gdGhpcy5iaW5kZGF0YXZhbHVlID8gbm9kZUlkVmFsdWUgPT09IF9ldmFsRGF0YVZhbHVlIDogbm9kZUlkVmFsdWUgPT09IF9leHByO1xuICAgICAgICAgICAgICAgIGlmIChub2RlSWRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICRsaS5hdHRyKCdpZCcsIG5vZGVJZFZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYmluZGRhdGF2YWx1ZSkgeyAvLyBldmFsdWF0ZSB0aGUgZXhwcmVzc2lvbiBvbmx5IGlmIGl0IGlzIGJvdW5kICh1c2VFeHByZXNzaW9uKVxuICAgICAgICAgICAgICAgIGlzTm9kZU1hdGNoZWQgPSAhISRwYXJzZUV4cHIoX2V4cHIpKHRoaXMsIG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gUGVyZm9ybSBMYXN0Tm9kZSBjaGVjayBvbmx5IGF0IGxldmVsIDAuKGllLCBkZWVwID0gMCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX3NlbGVjdE5vZGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoKF9leHByID09PSAnRmlyc3ROb2RlJyAmJiBpZHggPT09IDApXG4gICAgICAgICAgICAgICAgICAgIHx8ICghZGVlcCAmJiBfZXhwciA9PT0gJ0xhc3ROb2RlJyAmJiBpZHggPT09IG5vZGVzLmxlbmd0aCAtIDEpXG4gICAgICAgICAgICAgICAgICAgIHx8IGlzTm9kZU1hdGNoZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gc2F2ZSBhIHJlZmVyZW5jZSBvZiB0aGUgbm9kZSB0byBiZSBzZWxlY3RlZCBpbiBgX3NlbGVjdE5vZGVgXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdE5vZGUgPSAkbGk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YXZhbHVlICAgPSBub2RlSWRWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChub2RlSWNvbikge1xuICAgICAgICAgICAgICAgICRpY29uTm9kZS5hZGRDbGFzcyhub2RlSWNvbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChub2RlQ2hpbGRyZW4gJiYgbm9kZUNoaWxkcmVuLmxlbmd0aCkgeyAvLyBwYXJlbnQgbm9kZVxuICAgICAgICAgICAgICAgICRsaS5hZGRDbGFzcyhgcGFyZW50LW5vZGUgJHtfY2xzfWApO1xuICAgICAgICAgICAgICAgIGV4cGFuZENvbGxhcHNlSWNvbiA9ICQoYDxpIGNsYXNzPVwid2kgJHtfaWNvbkNsc31cIj48L2k+YCk7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGVJY29uKSB7XG4gICAgICAgICAgICAgICAgICAgICRpY29uTm9kZS5hZGRDbGFzcyhub2RlSWNvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICRsaS5wcmVwZW5kKGV4cGFuZENvbGxhcHNlSWNvbik7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25zdHJ1Y3ROb2Rlcyhub2RlQ2hpbGRyZW4sICRsaSwgbGV2ZWxzIC0gMSwgZGVlcCArIDEsIF9ldmFsRGF0YVZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKCFub2RlSWNvbikge1xuICAgICAgICAgICAgICAgICAgICAkaWNvbk5vZGUuYWRkQ2xhc3MoJ2xlYWYtbm9kZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAkbGkuYWRkQ2xhc3MoJ2xlYWYtbm9kZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE5vZGVzRnJvbVN0cmluZyh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWUuc3BsaXQoJywnKS5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgJ2xhYmVsJzogaXRlbSAmJiBpdGVtLnRyaW0oKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXROb2RlcyhuZXdWYWwpIHtcbiAgICAgICAgbGV0IG5vZGVzO1xuICAgICAgICBpZiAoXy5pc1N0cmluZyhuZXdWYWwpICYmICFfLmlzRW1wdHkobmV3VmFsKSkge1xuICAgICAgICAgICAgbmV3VmFsID0gbmV3VmFsLnRyaW0oKTtcbiAgICAgICAgICAgIGlmIChuZXdWYWwpIHtcbiAgICAgICAgICAgICAgICBub2RlcyA9IHRoaXMuZ2V0Tm9kZXNGcm9tU3RyaW5nKG5ld1ZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoXy5pc0FycmF5KG5ld1ZhbCkpIHtcbiAgICAgICAgICAgIG5ld1ZhbCA9IGdldE9yZGVyZWREYXRhc2V0KG5ld1ZhbCwgdGhpcy5vcmRlcmJ5KTtcbiAgICAgICAgICAgIG5vZGVzID0gbmV3VmFsO1xuICAgICAgICB9IGVsc2UgaWYgKF8uaXNPYmplY3QobmV3VmFsKSkge1xuICAgICAgICAgICAgbm9kZXMgPSBbbmV3VmFsXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGFuZ2VUcmVlSWNvbnMobnYsIG92KSB7XG4gICAgICAgIGNvbnN0ICRlbCA9ICQodGhpcy5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgbnYgPSBudiB8fCBkZWZhdWx0VHJlZUljb25DbGFzcztcbiAgICAgICAgb3YgPSBvdiB8fCBkZWZhdWx0VHJlZUljb25DbGFzcztcbiAgICAgICAgJGVsLmZpbmQoJ2kuZXhwYW5kZWQnKS5yZW1vdmVDbGFzcyhJQ09OX0NMQVNTRVNbb3ZdLmV4cGFuZGVkKS5hZGRDbGFzcyhJQ09OX0NMQVNTRVNbbnZdLmV4cGFuZGVkKTtcbiAgICAgICAgJGVsLmZpbmQoJ2kuY29sbGFwc2VkJykucmVtb3ZlQ2xhc3MoSUNPTl9DTEFTU0VTW292XS5jb2xsYXBzZWQpLmFkZENsYXNzKElDT05fQ0xBU1NFU1tudl0uY29sbGFwc2VkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRvZ2dsZUV4cGFuZENvbGxhcHNlTm9kZSgkZXZlbnQsICRpLCAkbGkpIHtcbiAgICAgICAgY29uc3QgdHJlZUljb25zID0gSUNPTl9DTEFTU0VTW3RoaXMudHJlZWljb25zIHx8IGRlZmF1bHRUcmVlSWNvbkNsYXNzXTtcbiAgICAgICAgY29uc3QgICRsaVBhdGggPSAgdGhpcy5maW5kU2VsZWN0ZWROb2RlUGFyZW50KCRsaSk7XG4gICAgICAgIGxldCBwYXRoID0gJyc7XG5cbiAgICAgICAgLy8gY29uc3RydWN0IHRoZSBwYXRoIG9mIHRoZSBub2RlXG4gICAgICAgICRsaVBhdGhcbiAgICAgICAgICAgIC5lYWNoKChpLCBlbCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSAkKGVsKS5jaGlsZHJlbignLnRpdGxlJykudGV4dCgpO1xuICAgICAgICAgICAgICAgIHBhdGggPSBgLyR7Y3VycmVudCArIHBhdGh9YDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICBjb25zdCAgZXZlbnRQYXJhbXMgPSB7XG4gICAgICAgICAgICAgICAgJyRldmVudCcgIDogJGV2ZW50LFxuICAgICAgICAgICAgICAgIFwiJGl0ZW1cIiAgIDogICRsaS5kYXRhKCdub2RlZGF0YScpLFxuICAgICAgICAgICAgICAgIFwiJHBhdGhcIiA6IHBhdGhcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgaWYgKCRpLmhhc0NsYXNzKCdjb2xsYXBzZWQnKSkge1xuICAgICAgICAgICAgJGkucmVtb3ZlQ2xhc3MoYGNvbGxhcHNlZCAke3RyZWVJY29ucy5jb2xsYXBzZWR9YCkuYWRkQ2xhc3MoYGV4cGFuZGVkICR7dHJlZUljb25zLmV4cGFuZGVkfWApO1xuICAgICAgICAgICAgJGxpLnJlbW92ZUNsYXNzKCdjb2xsYXBzZWQnKS5hZGRDbGFzcygnZXhwYW5kZWQnKTtcbiAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnZXhwYW5kJywgZXZlbnRQYXJhbXMpO1xuICAgICAgICB9IGVsc2UgaWYgKCRpLmhhc0NsYXNzKCdleHBhbmRlZCcpKSB7XG4gICAgICAgICAgICAkaS5yZW1vdmVDbGFzcyhgZXhwYW5kZWQgJHt0cmVlSWNvbnMuZXhwYW5kZWR9YCkuYWRkQ2xhc3MoYGNvbGxhcHNlZCAke3RyZWVJY29ucy5jb2xsYXBzZWR9YCk7XG4gICAgICAgICAgICAkbGkucmVtb3ZlQ2xhc3MoJ2V4cGFuZGVkJykuYWRkQ2xhc3MoJ2NvbGxhcHNlZCcpO1xuICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdjb2xsYXBzZScsIGV2ZW50UGFyYW1zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyVHJlZShmb3JjZVJlbmRlcj8pIHtcbiAgICAgICAgbGV0IGRvY0ZyYWcsXG4gICAgICAgICAgICAkbGksXG4gICAgICAgICAgICAkbGlQYXRoLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHBhdGggPSAnJztcbiAgICAgICAgY29uc3QgbGV2ZWxzID0gK3RoaXMubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2xldmVscycpIHx8IDAsXG4gICAgICAgICAgICAkZWwgPSAkKHRoaXMubmF0aXZlRWxlbWVudCk7XG5cbiAgICAgICAgJGVsLmVtcHR5KCk7XG5cbiAgICAgICAgaWYgKGZvcmNlUmVuZGVyKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3ROb2RlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubm9kZXMgJiYgdGhpcy5ub2Rlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGRvY0ZyYWcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICAgICAgICB0aGlzLmNvbnN0cnVjdE5vZGVzKHRoaXMubm9kZXMsICQoZG9jRnJhZyksIGxldmVscywgMCwgdGhpcy5kYXRhdmFsdWUpO1xuICAgICAgICAgICAgJGVsLmFwcGVuZChkb2NGcmFnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9zZWxlY3ROb2RlKSB7XG4gICAgICAgICAgICAkbGkgPSB0aGlzLl9zZWxlY3ROb2RlO1xuICAgICAgICAgICAgJGxpLmFkZENsYXNzKCdzZWxlY3RlZCcpO1xuICAgICAgICAgICAgZGF0YSAgICA9ICRsaS5kYXRhKCdub2RlZGF0YScpO1xuICAgICAgICAgICAgJGxpUGF0aCA9IHRoaXMuZmluZFNlbGVjdGVkTm9kZVBhcmVudCgkbGkpO1xuXG4gICAgICAgICAgICBpZiAoISRsaVBhdGgubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgJGxpUGF0aCA9ICRsaTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJGxpUGF0aFxuICAgICAgICAgICAgICAgIC5lYWNoKChpLCBlbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCAkY3VycmVudCA9ICQoZWwpLFxuICAgICAgICAgICAgICAgICAgICAgICAgJGkgICAgICAgPSAkY3VycmVudC5jaGlsZHJlbignaS5jb2xsYXBzZWQnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICR0aXRsZSAgID0gJGN1cnJlbnQuY2hpbGRyZW4oJy50aXRsZScpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZUV4cGFuZENvbGxhcHNlTm9kZSh1bmRlZmluZWQsICRpLCAkY3VycmVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgcGF0aCA9IGAvJHskdGl0bGUudGV4dCgpICsgcGF0aH1gO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkaXRlbSA9IGdldENsb25lZE9iamVjdChkYXRhKSB8fCB7fTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRpdGVtLnBhdGggPSBwYXRoO1xuXG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3NlbGVjdCcsIHskZXZlbnQ6IHVuZGVmaW5lZCwgJGl0ZW06IGRhdGEsICRwYXRoOiBwYXRofSk7XG4gICAgICAgICAgICAkYXBwRGlnZXN0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNlbGVjdE5vZGUoZXZ0LCB2YWx1ZSkge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBldnQgJiYgJChldnQudGFyZ2V0KSxcbiAgICAgICAgICAgICRlbCA9ICQodGhpcy5uYXRpdmVFbGVtZW50KSxcbiAgICAgICAgICAgICRsaSA9IF8uaXNPYmplY3QodmFsdWUpID8gdmFsdWUgOiAkZWwuZmluZChgbGlbaWQ9XCIke3ZhbHVlfVwiXWApLmZpcnN0KCk7XG4gICAgICAgIGxldCBkYXRhLFxuICAgICAgICAgICAgcGF0aCA9ICcnLFxuICAgICAgICAgICAgJGxpUGF0aCxcbiAgICAgICAgICAgIG5vZGVBY3Rpb247XG4gICAgICAgICRlbC5maW5kKCcuc2VsZWN0ZWQnKS5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTtcbiAgICAgICAgaWYgKCEkbGkubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgJGxpLmFkZENsYXNzKCdzZWxlY3RlZCcpO1xuICAgICAgICBkYXRhID0gJGxpLmRhdGEoJ25vZGVkYXRhJyk7XG4gICAgICAgIG5vZGVBY3Rpb24gPSBkYXRhW3RoaXMubm9kZWFjdGlvbiB8fCAnYWN0aW9uJ107XG5cbiAgICAgICAgLy8gaWYgdGhlIHNlbGVjdE5vZGUgaXMgaW5pdGlhdGVkIGJ5IGNsaWNrIGV2ZW50IHRoZW4gdXNlIHRoZSBuYXRpdmVFbGVtZW50IHRhcmdldCBmcm9tIGV2ZW50XG4gICAgICAgICRsaVBhdGggPSB0YXJnZXQgPyB0YXJnZXQucGFyZW50cygnLmFwcC10cmVlIGxpJykgOiB0aGlzLmZpbmRTZWxlY3RlZE5vZGVQYXJlbnQoJGxpKTtcblxuICAgICAgICAvLyBjb25zdHJ1Y3QgdGhlIHBhdGggb2YgdGhlIG5vZGVcbiAgICAgICAgJGxpUGF0aFxuICAgICAgICAgICAgLmVhY2goKGksIGVsKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudCA9ICQoZWwpLmNoaWxkcmVuKCcudGl0bGUnKS50ZXh0KCk7XG4gICAgICAgICAgICAgICAgcGF0aCA9IGAvJHtjdXJyZW50ICsgcGF0aH1gO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gZXhwYW5kIHRoZSBjdXJyZW50IG5vZGUgdGlsbCB0aGUgdmlld1BhcmVudCBsZXZlbCB3aGljaCBpcyBjb2xsYXBzZWRcbiAgICAgICAgJGxpLnBhcmVudHNVbnRpbCgkZWwsICdsaS5wYXJlbnQtbm9kZS5jb2xsYXBzZWQnKVxuICAgICAgICAgICAgLmVhY2goKGluZGV4LCBlbCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0ICRjdXJyZW50ID0gJChlbCksXG4gICAgICAgICAgICAgICAgICAgICRpID0gJGN1cnJlbnQuY2hpbGRyZW4oJ2kuY29sbGFwc2VkJyk7XG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGVFeHBhbmRDb2xsYXBzZU5vZGUodW5kZWZpbmVkLCAkaSwgJGN1cnJlbnQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZGl0ZW0gICAgICA9IGdldENsb25lZE9iamVjdChkYXRhKSB8fCB7fTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZGl0ZW0ucGF0aCA9IHBhdGg7XG5cbiAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgICAgaWYgKHRoaXMubm9kZWlkIHx8IHRoaXMuYmluZG5vZGVpZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YXZhbHVlID0gZ2V0RXZhbHVhdGVkRGF0YShkYXRhLCB7ZmllbGQ6IHRoaXMubm9kZWlkLCBiaW5kRXhwcmVzc2lvbjogdGhpcy5iaW5kbm9kZWlkfSwgdGhpcy52aWV3UGFyZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhdmFsdWUgPSBnZXRDbG9uZWRPYmplY3QoZGF0YSkgfHwge307XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGF2YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9bVG9kby1DU1BdOiB0aGlzIGRhdGEgd2lsbCBiZSBkeW5hbWljLCBjYW4gbm90IGdlbmVyYXRlIGZ1bmN0aW9uIHVwZnJvbnRcbiAgICAgICAgaWYgKG5vZGVBY3Rpb24pIHtcbiAgICAgICAgICAgICRwYXJzZUV2ZW50KG5vZGVBY3Rpb24pKHRoaXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdzZWxlY3QnLCB7JGV2ZW50OiBldnQsICRpdGVtOiBkYXRhLCAkcGF0aDogcGF0aH0pO1xuICAgICAgICAkYXBwRGlnZXN0KCk7XG4gICAgfVxuICAgIC8vIGNsaWNrIGV2ZW50IGlzIGFkZGVkIG9uIHRoZSBob3N0IG5hdGl2ZUVsZW1lbnRcbiAgICBwcml2YXRlIGJpbmRFdmVudHMoKSB7XG4gICAgICAgICQodGhpcy5uYXRpdmVFbGVtZW50KS5vbignY2xpY2snLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSAkKGV2dC50YXJnZXQpLFxuICAgICAgICAgICAgICAgIGxpICAgICA9IHRhcmdldC5jbG9zZXN0KCdsaScpLFxuICAgICAgICAgICAgICAgICRpICAgICA9IHRhcmdldC5pcygnaScpID8gdGFyZ2V0IDogdGFyZ2V0LnNpYmxpbmdzKCdpLmNvbGxhcHNlZCxpLmV4cGFuZGVkJyk7XG5cbiAgICAgICAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAgICAgaWYgKHRhcmdldC5pcygnc3Bhbi50aXRsZScpKSB7IC8vIHNlbGVjdCB0aGUgbm9kZSBvbmx5IGlmIGl0IGlzIG5vZGVsYWJlbFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRpdGVtID0ge307XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3ROb2RlKGV2dCwgbGkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGFyZ2V0LmlzKCdpJykgfHwgKHRhcmdldC5pcygnc3Bhbi50aXRsZScpICYmIHRoaXMubm9kZWNsaWNrID09PSAnZXhwYW5kJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZUV4cGFuZENvbGxhcHNlTm9kZShldnQsICRpLCBsaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmluZFNlbGVjdGVkTm9kZVBhcmVudCgkbGkpIHtcbiAgICAgICAgcmV0dXJuICRsaS5maW5kKCc+IHNwYW4udGl0bGUnKS5wYXJlbnRzKCcuYXBwLXRyZWUgbGknKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNlbGVjdEJ5SWQodmFsdWU/KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0Tm9kZSh1bmRlZmluZWQsIHZhbHVlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBkZXNlbGVjdEJ5SWQodmFsdWU/KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRpdGVtID0ge307XG4gICAgICAgIHRoaXMuc2VsZWN0QnlJZCgpO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,35 +0,0 @@
1
- import { Injector } from '@angular/core';
2
- import { StylableComponent } from '@wm/components/base';
3
- export declare class TreeDirective extends StylableComponent {
4
- private binddatavalue;
5
- private bindnodelabel;
6
- private bindnodeicon;
7
- private bindnodechildren;
8
- private bindnodeid;
9
- static initializeProps: void;
10
- private _selectNode;
11
- private nodes;
12
- datavalue: string;
13
- treeicons: string;
14
- selecteditem: any;
15
- nodeid: string;
16
- nodeaction: string;
17
- nodeclick: string;
18
- nodelabel: string;
19
- nodeicon: string;
20
- nodechildren: string;
21
- orderby: string;
22
- constructor(inj: Injector, binddatavalue: any, bindnodelabel: any, bindnodeicon: any, bindnodechildren: any, bindnodeid: any);
23
- onPropertyChange(key: string, nv: any, ov?: any): void;
24
- private constructNodes;
25
- private getNodesFromString;
26
- private getNodes;
27
- private changeTreeIcons;
28
- private toggleExpandCollapseNode;
29
- private renderTree;
30
- private selectNode;
31
- private bindEvents;
32
- private findSelectedNodeParent;
33
- private selectById;
34
- private deselectById;
35
- }