@ctrl/ngx-rightclick 1.1.3 → 3.0.0
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/LICENSE +1 -1
- package/README.md +5 -16
- package/bundles/ctrl-ngx-rightclick.umd.js +622 -658
- package/bundles/ctrl-ngx-rightclick.umd.js.map +1 -1
- package/bundles/ctrl-ngx-rightclick.umd.min.js +15 -1
- package/bundles/ctrl-ngx-rightclick.umd.min.js.map +1 -1
- package/context-menu-injector.d.ts +4 -4
- package/context-menu-trigger.directive.d.ts +1 -0
- package/context-menu.service.d.ts +2 -2
- package/context-submenu-trigger.directive.d.ts +3 -3
- package/ctrl-ngx-rightclick.metadata.json +1 -1
- package/esm2015/context-menu-injector.js +7 -52
- package/esm2015/context-menu-trigger.directive.js +52 -77
- package/esm2015/context-menu.module.js +16 -18
- package/esm2015/context-menu.service.js +19 -121
- package/esm2015/context-submenu-trigger.directive.js +38 -67
- package/esm2015/ctrl-ngx-rightclick.js +2 -6
- package/esm2015/menu.component.js +26 -64
- package/esm2015/public_api.js +7 -11
- package/esm5/context-menu-injector.js +8 -51
- package/esm5/context-menu-trigger.directive.js +54 -94
- package/esm5/context-menu.module.js +13 -16
- package/esm5/context-menu.service.js +20 -164
- package/esm5/context-submenu-trigger.directive.js +39 -88
- package/esm5/ctrl-ngx-rightclick.js +2 -6
- package/esm5/menu.component.js +26 -77
- package/esm5/public_api.js +7 -11
- package/fesm2015/ctrl-ngx-rightclick.js +143 -246
- package/fesm2015/ctrl-ngx-rightclick.js.map +1 -1
- package/fesm5/ctrl-ngx-rightclick.js +149 -336
- package/fesm5/ctrl-ngx-rightclick.js.map +1 -1
- package/menu.component.d.ts +1 -1
- package/package.json +5 -9
@@ -1,52 +1,223 @@
|
|
1
1
|
(function (global, factory) {
|
2
|
-
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/
|
3
|
-
typeof define === 'function' && define.amd ? define('@ctrl/ngx-rightclick', ['exports', '@angular/
|
4
|
-
(factory((global.ctrl = global.ctrl || {}, global.ctrl['ngx-rightclick'] = {}),global.ng.
|
5
|
-
}(this, (function (exports,
|
2
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/cdk/overlay'), require('@angular/cdk/portal'), require('rxjs'), require('rxjs/operators')) :
|
3
|
+
typeof define === 'function' && define.amd ? define('@ctrl/ngx-rightclick', ['exports', '@angular/core', '@angular/cdk/overlay', '@angular/cdk/portal', 'rxjs', 'rxjs/operators'], factory) :
|
4
|
+
(global = global || self, factory((global.ctrl = global.ctrl || {}, global.ctrl['ngx-rightclick'] = {}), global.ng.core, global.ng.cdk.overlay, global.ng.cdk.portal, global.rxjs, global.rxjs.operators));
|
5
|
+
}(this, (function (exports, core, overlay, portal, rxjs, operators) { 'use strict';
|
6
6
|
|
7
|
-
/*! *****************************************************************************
|
8
|
-
Copyright (c) Microsoft Corporation. All rights reserved.
|
9
|
-
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
|
10
|
-
this file except in compliance with the License. You may obtain a copy of the
|
11
|
-
License at http://www.apache.org/licenses/LICENSE-2.0
|
12
|
-
|
13
|
-
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
14
|
-
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
|
15
|
-
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
|
16
|
-
MERCHANTABLITY OR NON-INFRINGEMENT.
|
17
|
-
|
18
|
-
See the Apache Version 2.0 License for specific language governing permissions
|
19
|
-
and limitations under the License.
|
20
|
-
***************************************************************************** */
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
};
|
7
|
+
/*! *****************************************************************************
|
8
|
+
Copyright (c) Microsoft Corporation. All rights reserved.
|
9
|
+
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
|
10
|
+
this file except in compliance with the License. You may obtain a copy of the
|
11
|
+
License at http://www.apache.org/licenses/LICENSE-2.0
|
12
|
+
|
13
|
+
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
14
|
+
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
|
15
|
+
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
|
16
|
+
MERCHANTABLITY OR NON-INFRINGEMENT.
|
17
|
+
|
18
|
+
See the Apache Version 2.0 License for specific language governing permissions
|
19
|
+
and limitations under the License.
|
20
|
+
***************************************************************************** */
|
21
|
+
/* global Reflect, Promise */
|
22
|
+
|
23
|
+
var extendStatics = function(d, b) {
|
24
|
+
extendStatics = Object.setPrototypeOf ||
|
25
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
26
|
+
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
|
27
|
+
return extendStatics(d, b);
|
28
|
+
};
|
29
|
+
|
30
|
+
function __extends(d, b) {
|
31
|
+
extendStatics(d, b);
|
32
|
+
function __() { this.constructor = d; }
|
33
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
34
|
+
}
|
35
|
+
|
36
|
+
var __assign = function() {
|
37
|
+
__assign = Object.assign || function __assign(t) {
|
38
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
39
|
+
s = arguments[i];
|
40
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
|
41
|
+
}
|
42
|
+
return t;
|
43
|
+
};
|
44
|
+
return __assign.apply(this, arguments);
|
45
|
+
};
|
46
|
+
|
47
|
+
function __rest(s, e) {
|
48
|
+
var t = {};
|
49
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
50
|
+
t[p] = s[p];
|
51
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
52
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
53
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
54
|
+
t[p[i]] = s[p[i]];
|
55
|
+
}
|
56
|
+
return t;
|
57
|
+
}
|
58
|
+
|
59
|
+
function __decorate(decorators, target, key, desc) {
|
60
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
61
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
62
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
63
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
64
|
+
}
|
65
|
+
|
66
|
+
function __param(paramIndex, decorator) {
|
67
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
68
|
+
}
|
69
|
+
|
70
|
+
function __metadata(metadataKey, metadataValue) {
|
71
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
|
72
|
+
}
|
73
|
+
|
74
|
+
function __awaiter(thisArg, _arguments, P, generator) {
|
75
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
76
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
77
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
78
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
79
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
80
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
81
|
+
});
|
82
|
+
}
|
83
|
+
|
84
|
+
function __generator(thisArg, body) {
|
85
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
86
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
87
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
88
|
+
function step(op) {
|
89
|
+
if (f) throw new TypeError("Generator is already executing.");
|
90
|
+
while (_) try {
|
91
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
92
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
93
|
+
switch (op[0]) {
|
94
|
+
case 0: case 1: t = op; break;
|
95
|
+
case 4: _.label++; return { value: op[1], done: false };
|
96
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
97
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
98
|
+
default:
|
99
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
100
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
101
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
102
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
103
|
+
if (t[2]) _.ops.pop();
|
104
|
+
_.trys.pop(); continue;
|
105
|
+
}
|
106
|
+
op = body.call(thisArg, _);
|
107
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
108
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
109
|
+
}
|
110
|
+
}
|
111
|
+
|
112
|
+
function __exportStar(m, exports) {
|
113
|
+
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
|
114
|
+
}
|
115
|
+
|
116
|
+
function __values(o) {
|
117
|
+
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
118
|
+
if (m) return m.call(o);
|
119
|
+
if (o && typeof o.length === "number") return {
|
120
|
+
next: function () {
|
121
|
+
if (o && i >= o.length) o = void 0;
|
122
|
+
return { value: o && o[i++], done: !o };
|
123
|
+
}
|
124
|
+
};
|
125
|
+
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
126
|
+
}
|
127
|
+
|
128
|
+
function __read(o, n) {
|
129
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
130
|
+
if (!m) return o;
|
131
|
+
var i = m.call(o), r, ar = [], e;
|
132
|
+
try {
|
133
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
134
|
+
}
|
135
|
+
catch (error) { e = { error: error }; }
|
136
|
+
finally {
|
137
|
+
try {
|
138
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
139
|
+
}
|
140
|
+
finally { if (e) throw e.error; }
|
141
|
+
}
|
142
|
+
return ar;
|
143
|
+
}
|
144
|
+
|
145
|
+
function __spread() {
|
146
|
+
for (var ar = [], i = 0; i < arguments.length; i++)
|
147
|
+
ar = ar.concat(__read(arguments[i]));
|
148
|
+
return ar;
|
149
|
+
}
|
150
|
+
|
151
|
+
function __spreadArrays() {
|
152
|
+
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
|
153
|
+
for (var r = Array(s), k = 0, i = 0; i < il; i++)
|
154
|
+
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
|
155
|
+
r[k] = a[j];
|
156
|
+
return r;
|
157
|
+
};
|
158
|
+
|
159
|
+
function __await(v) {
|
160
|
+
return this instanceof __await ? (this.v = v, this) : new __await(v);
|
161
|
+
}
|
162
|
+
|
163
|
+
function __asyncGenerator(thisArg, _arguments, generator) {
|
164
|
+
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
165
|
+
var g = generator.apply(thisArg, _arguments || []), i, q = [];
|
166
|
+
return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
|
167
|
+
function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
|
168
|
+
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
|
169
|
+
function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
|
170
|
+
function fulfill(value) { resume("next", value); }
|
171
|
+
function reject(value) { resume("throw", value); }
|
172
|
+
function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
|
173
|
+
}
|
174
|
+
|
175
|
+
function __asyncDelegator(o) {
|
176
|
+
var i, p;
|
177
|
+
return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
|
178
|
+
function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; }
|
179
|
+
}
|
180
|
+
|
181
|
+
function __asyncValues(o) {
|
182
|
+
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
183
|
+
var m = o[Symbol.asyncIterator], i;
|
184
|
+
return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
|
185
|
+
function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
|
186
|
+
function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
|
187
|
+
}
|
188
|
+
|
189
|
+
function __makeTemplateObject(cooked, raw) {
|
190
|
+
if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
|
191
|
+
return cooked;
|
192
|
+
};
|
193
|
+
|
194
|
+
function __importStar(mod) {
|
195
|
+
if (mod && mod.__esModule) return mod;
|
196
|
+
var result = {};
|
197
|
+
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
198
|
+
result.default = mod;
|
199
|
+
return result;
|
200
|
+
}
|
201
|
+
|
202
|
+
function __importDefault(mod) {
|
203
|
+
return (mod && mod.__esModule) ? mod : { default: mod };
|
204
|
+
}
|
205
|
+
|
206
|
+
function __classPrivateFieldGet(receiver, privateMap) {
|
207
|
+
if (!privateMap.has(receiver)) {
|
208
|
+
throw new TypeError("attempted to get private field on non-instance");
|
209
|
+
}
|
210
|
+
return privateMap.get(receiver);
|
211
|
+
}
|
212
|
+
|
213
|
+
function __classPrivateFieldSet(receiver, privateMap, value) {
|
214
|
+
if (!privateMap.has(receiver)) {
|
215
|
+
throw new TypeError("attempted to set private field on non-instance");
|
216
|
+
}
|
217
|
+
privateMap.set(receiver, value);
|
218
|
+
return value;
|
44
219
|
}
|
45
220
|
|
46
|
-
/**
|
47
|
-
* @fileoverview added by tsickle
|
48
|
-
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
49
|
-
*/
|
50
221
|
var MenuPackage = /** @class */ (function () {
|
51
222
|
function MenuPackage(menu, context) {
|
52
223
|
this.menu = menu;
|
@@ -55,44 +226,26 @@
|
|
55
226
|
return MenuPackage;
|
56
227
|
}());
|
57
228
|
var MenuInjector = /** @class */ (function () {
|
58
|
-
function MenuInjector(
|
59
|
-
this.
|
60
|
-
this.
|
229
|
+
function MenuInjector(activeContextMenu, parentInjector, context) {
|
230
|
+
this.activeContextMenu = activeContextMenu;
|
231
|
+
this.parentInjector = parentInjector;
|
61
232
|
this.context = context;
|
62
|
-
this.
|
233
|
+
this.menuContext = new MenuPackage(activeContextMenu, context);
|
63
234
|
}
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
*/
|
71
|
-
MenuInjector.prototype.get = /**
|
72
|
-
* @template T
|
73
|
-
* @param {?} token
|
74
|
-
* @param {?=} notFoundValue
|
75
|
-
* @param {?=} flags
|
76
|
-
* @return {?}
|
77
|
-
*/
|
78
|
-
function (token, notFoundValue, flags) {
|
79
|
-
if (token === MenuPackage) {
|
80
|
-
return this._menuContext;
|
81
|
-
}
|
82
|
-
return this._parentInjector.get(token, notFoundValue, flags);
|
83
|
-
};
|
235
|
+
MenuInjector.prototype.get = function (token, notFoundValue, flags) {
|
236
|
+
if (token === MenuPackage) {
|
237
|
+
return this.menuContext;
|
238
|
+
}
|
239
|
+
return this.parentInjector.get(token, notFoundValue, flags);
|
240
|
+
};
|
84
241
|
return MenuInjector;
|
85
242
|
}());
|
86
243
|
|
87
|
-
/**
|
88
|
-
* @fileoverview added by tsickle
|
89
|
-
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
90
|
-
*/
|
91
244
|
var ContextMenuService = /** @class */ (function () {
|
92
|
-
function ContextMenuService(overlay, scrollStrategy,
|
245
|
+
function ContextMenuService(overlay, scrollStrategy, injector) {
|
93
246
|
this.overlay = overlay;
|
94
247
|
this.scrollStrategy = scrollStrategy;
|
95
|
-
this.
|
248
|
+
this.injector = injector;
|
96
249
|
this.menus = [];
|
97
250
|
this.id = 0;
|
98
251
|
}
|
@@ -103,658 +256,469 @@
|
|
103
256
|
* @param submenu is a menu within a menu
|
104
257
|
* @param level if submenu, what level
|
105
258
|
*/
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
* @param {?} menuComponent the component to be shown
|
121
|
-
* @param {?} context
|
122
|
-
* @param {?} menuClose
|
123
|
-
* @param {?} menuAction
|
124
|
-
* @param {?=} submenu is a menu within a menu
|
125
|
-
* @param {?=} level if submenu, what level
|
126
|
-
* @return {?}
|
127
|
-
*/
|
128
|
-
function ($event, menuComponent, context, menuClose, menuAction, submenu, level) {
|
129
|
-
if (submenu === void 0) {
|
130
|
-
submenu = false;
|
131
|
-
}
|
132
|
-
/** @type {?} */
|
133
|
-
var target;
|
134
|
-
if (!submenu) {
|
135
|
-
this.closeAll();
|
136
|
-
target = {
|
137
|
-
getBoundingClientRect: function () {
|
138
|
-
return ({
|
139
|
-
bottom: $event.clientY,
|
140
|
-
height: 0,
|
141
|
-
left: $event.clientX,
|
142
|
-
right: $event.clientX,
|
143
|
-
top: $event.clientY,
|
144
|
-
width: 0,
|
145
|
-
});
|
146
|
-
},
|
147
|
-
};
|
148
|
-
}
|
149
|
-
else {
|
150
|
-
// close other submenus
|
151
|
-
this.closeAll(undefined, level);
|
152
|
-
target = $event.target;
|
153
|
-
}
|
154
|
-
/** @type {?} */
|
155
|
-
var el = new i0.ElementRef(target);
|
156
|
-
/** @type {?} */
|
157
|
-
var positionStrategy = this.overlay
|
158
|
-
.position()
|
159
|
-
.flexibleConnectedTo(el)
|
160
|
-
.withFlexibleDimensions(false);
|
161
|
-
if (!submenu) {
|
162
|
-
positionStrategy.withPositions([
|
163
|
-
{
|
164
|
-
originX: 'start',
|
165
|
-
originY: 'bottom',
|
166
|
-
overlayX: 'start',
|
167
|
-
overlayY: 'top',
|
168
|
-
},
|
169
|
-
{
|
170
|
-
originX: 'start',
|
171
|
-
originY: 'top',
|
172
|
-
overlayX: 'start',
|
173
|
-
overlayY: 'bottom',
|
174
|
-
},
|
175
|
-
{
|
176
|
-
originX: 'end',
|
177
|
-
originY: 'top',
|
178
|
-
overlayX: 'start',
|
179
|
-
overlayY: 'top',
|
180
|
-
},
|
181
|
-
{
|
182
|
-
originX: 'start',
|
183
|
-
originY: 'top',
|
184
|
-
overlayX: 'end',
|
185
|
-
overlayY: 'top',
|
186
|
-
},
|
187
|
-
{
|
188
|
-
originX: 'end',
|
189
|
-
originY: 'center',
|
190
|
-
overlayX: 'start',
|
191
|
-
overlayY: 'center',
|
192
|
-
},
|
193
|
-
{
|
194
|
-
originX: 'start',
|
195
|
-
originY: 'center',
|
196
|
-
overlayX: 'end',
|
197
|
-
overlayY: 'center',
|
198
|
-
},
|
199
|
-
]);
|
200
|
-
}
|
201
|
-
else {
|
202
|
-
positionStrategy.withPositions([
|
203
|
-
{
|
204
|
-
originX: 'end',
|
205
|
-
originY: 'top',
|
206
|
-
overlayX: 'start',
|
207
|
-
overlayY: 'top',
|
208
|
-
},
|
209
|
-
{
|
210
|
-
originX: 'start',
|
211
|
-
originY: 'top',
|
212
|
-
overlayX: 'end',
|
213
|
-
overlayY: 'top',
|
214
|
-
},
|
215
|
-
{
|
216
|
-
originX: 'end',
|
217
|
-
originY: 'bottom',
|
218
|
-
overlayX: 'start',
|
219
|
-
overlayY: 'bottom',
|
220
|
-
},
|
221
|
-
{
|
222
|
-
originX: 'start',
|
223
|
-
originY: 'bottom',
|
224
|
-
overlayX: 'end',
|
225
|
-
overlayY: 'bottom',
|
226
|
-
},
|
227
|
-
]);
|
228
|
-
}
|
229
|
-
/** @type {?} */
|
230
|
-
var t = {
|
231
|
-
submenu: submenu,
|
232
|
-
id: this.id++,
|
233
|
-
isMenuHovered: new rxjs.BehaviorSubject(false),
|
234
|
-
isTriggerHovered: new rxjs.BehaviorSubject(false),
|
259
|
+
ContextMenuService.prototype.show = function ($event, menuComponent, context, menuClose, menuAction, submenu, level) {
|
260
|
+
if (submenu === void 0) { submenu = false; }
|
261
|
+
var target;
|
262
|
+
if (!submenu) {
|
263
|
+
this.closeAll();
|
264
|
+
target = {
|
265
|
+
getBoundingClientRect: function () { return ({
|
266
|
+
bottom: $event.clientY,
|
267
|
+
height: 0,
|
268
|
+
left: $event.clientX,
|
269
|
+
right: $event.clientX,
|
270
|
+
top: $event.clientY,
|
271
|
+
width: 0,
|
272
|
+
}); },
|
235
273
|
};
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
274
|
+
}
|
275
|
+
else {
|
276
|
+
// close other submenus
|
277
|
+
this.closeAll(undefined, level);
|
278
|
+
target = $event.target;
|
279
|
+
}
|
280
|
+
var el = new core.ElementRef(target);
|
281
|
+
var positionStrategy = this.overlay
|
282
|
+
.position()
|
283
|
+
.flexibleConnectedTo(el)
|
284
|
+
.withFlexibleDimensions(false);
|
285
|
+
if (!submenu) {
|
286
|
+
positionStrategy.withPositions([
|
287
|
+
{
|
288
|
+
originX: 'start',
|
289
|
+
originY: 'bottom',
|
290
|
+
overlayX: 'start',
|
291
|
+
overlayY: 'top',
|
292
|
+
},
|
293
|
+
{
|
294
|
+
originX: 'start',
|
295
|
+
originY: 'top',
|
296
|
+
overlayX: 'start',
|
297
|
+
overlayY: 'bottom',
|
298
|
+
},
|
299
|
+
{
|
300
|
+
originX: 'end',
|
301
|
+
originY: 'top',
|
302
|
+
overlayX: 'start',
|
303
|
+
overlayY: 'top',
|
304
|
+
},
|
305
|
+
{
|
306
|
+
originX: 'start',
|
307
|
+
originY: 'top',
|
308
|
+
overlayX: 'end',
|
309
|
+
overlayY: 'top',
|
310
|
+
},
|
311
|
+
{
|
312
|
+
originX: 'end',
|
313
|
+
originY: 'center',
|
314
|
+
overlayX: 'start',
|
315
|
+
overlayY: 'center',
|
316
|
+
},
|
317
|
+
{
|
318
|
+
originX: 'start',
|
319
|
+
originY: 'center',
|
320
|
+
overlayX: 'end',
|
321
|
+
overlayY: 'center',
|
322
|
+
},
|
323
|
+
]);
|
324
|
+
}
|
325
|
+
else {
|
326
|
+
positionStrategy.withPositions([
|
327
|
+
{
|
328
|
+
originX: 'end',
|
329
|
+
originY: 'top',
|
330
|
+
overlayX: 'start',
|
331
|
+
overlayY: 'top',
|
332
|
+
},
|
333
|
+
{
|
334
|
+
originX: 'start',
|
335
|
+
originY: 'top',
|
336
|
+
overlayX: 'end',
|
337
|
+
overlayY: 'top',
|
338
|
+
},
|
339
|
+
{
|
340
|
+
originX: 'end',
|
341
|
+
originY: 'bottom',
|
342
|
+
overlayX: 'start',
|
343
|
+
overlayY: 'bottom',
|
344
|
+
},
|
345
|
+
{
|
346
|
+
originX: 'start',
|
347
|
+
originY: 'bottom',
|
348
|
+
overlayX: 'end',
|
349
|
+
overlayY: 'bottom',
|
350
|
+
},
|
351
|
+
]);
|
352
|
+
}
|
353
|
+
var t = {
|
354
|
+
submenu: submenu,
|
355
|
+
id: this.id++,
|
356
|
+
isMenuHovered: new rxjs.BehaviorSubject(false),
|
357
|
+
isTriggerHovered: new rxjs.BehaviorSubject(false),
|
282
358
|
};
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
359
|
+
var menuInjector = new MenuInjector(t, this.injector, context);
|
360
|
+
var componentPortal = new portal.ComponentPortal(menuComponent, undefined, menuInjector);
|
361
|
+
var overlayRef = this.overlay.create({
|
362
|
+
positionStrategy: positionStrategy,
|
363
|
+
panelClass: 'ngx-contextmenu',
|
364
|
+
scrollStrategy: this.scrollStrategy.close(),
|
365
|
+
});
|
366
|
+
var component = overlayRef.attach(componentPortal);
|
367
|
+
var res = __assign(__assign({ overlayRef: overlayRef, component: component }, t), { menuClose: menuClose, menuAction: menuAction });
|
368
|
+
this.menus.push(res);
|
369
|
+
return res;
|
370
|
+
};
|
371
|
+
ContextMenuService.prototype.getCurrentLevel = function () {
|
372
|
+
return this.menus.length;
|
373
|
+
};
|
374
|
+
ContextMenuService.prototype.closeAll = function (context, idx) {
|
375
|
+
if (idx === void 0) { idx = 0; }
|
376
|
+
for (var index = idx; index < this.menus.length; index++) {
|
377
|
+
var menu = this.menus[index];
|
378
|
+
this.destroyMenu(menu, context);
|
379
|
+
}
|
380
|
+
this.menus.splice(idx, this.menus.length);
|
381
|
+
};
|
382
|
+
ContextMenuService.prototype.destroyMenu = function (menu, context) {
|
383
|
+
menu.component.instance._state = 'exit';
|
384
|
+
if (menu.component.instance.lazy) {
|
385
|
+
menu.component.instance._animationDone
|
386
|
+
.pipe(operators.filter(function (event) { return event.toState === 'exit'; }), operators.take(1))
|
387
|
+
.subscribe(function () {
|
304
388
|
menu.overlayRef.detach();
|
305
389
|
menu.overlayRef.dispose();
|
306
|
-
}
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
menu.
|
311
|
-
}
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
*/
|
332
|
-
ContextMenuService.prototype.checkOutsideClick = /**
|
333
|
-
* @param {?} $event
|
334
|
-
* @return {?}
|
335
|
-
*/
|
336
|
-
function ($event) {
|
337
|
-
var e_1, _a;
|
338
|
-
try {
|
339
|
-
for (var _b = __values(this.menus), _c = _b.next(); !_c.done; _c = _b.next()) {
|
340
|
-
var m = _c.value;
|
341
|
-
/** @type {?} */
|
342
|
-
var clickedInside = m.component.location.nativeElement.contains($event.target);
|
343
|
-
if (clickedInside) {
|
344
|
-
$event.preventDefault();
|
345
|
-
$event.stopPropagation();
|
346
|
-
return;
|
347
|
-
}
|
390
|
+
});
|
391
|
+
}
|
392
|
+
else {
|
393
|
+
menu.overlayRef.detach();
|
394
|
+
menu.overlayRef.dispose();
|
395
|
+
}
|
396
|
+
if (context) {
|
397
|
+
menu.menuAction.next(context);
|
398
|
+
}
|
399
|
+
menu.menuClose.next();
|
400
|
+
};
|
401
|
+
ContextMenuService.prototype.close = function (menu, menuIndex, context) {
|
402
|
+
this.destroyMenu(menu, context);
|
403
|
+
this.menus.splice(menuIndex, 1);
|
404
|
+
};
|
405
|
+
ContextMenuService.prototype.checkOutsideClick = function ($event) {
|
406
|
+
var e_1, _a;
|
407
|
+
try {
|
408
|
+
for (var _b = __values(this.menus), _c = _b.next(); !_c.done; _c = _b.next()) {
|
409
|
+
var m = _c.value;
|
410
|
+
var clickedInside = m.component.location.nativeElement.contains($event.target);
|
411
|
+
if (clickedInside) {
|
412
|
+
$event.preventDefault();
|
413
|
+
$event.stopPropagation();
|
414
|
+
return;
|
348
415
|
}
|
349
416
|
}
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
if (_c && !_c.done && (_a = _b.return))
|
356
|
-
_a.call(_b);
|
357
|
-
}
|
358
|
-
finally {
|
359
|
-
if (e_1)
|
360
|
-
throw e_1.error;
|
361
|
-
}
|
417
|
+
}
|
418
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
419
|
+
finally {
|
420
|
+
try {
|
421
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
362
422
|
}
|
363
|
-
|
364
|
-
}
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
423
|
+
finally { if (e_1) throw e_1.error; }
|
424
|
+
}
|
425
|
+
this.closeAll();
|
426
|
+
};
|
427
|
+
ContextMenuService.prototype.closeSubMenu = function (id) {
|
428
|
+
var menuIndex = this.menus.findIndex(function (n) { return n.id === id; });
|
429
|
+
if (menuIndex === -1 || menuIndex !== this.menus.length - 1) {
|
430
|
+
return;
|
431
|
+
}
|
432
|
+
// make sure we can close the current menu
|
433
|
+
var menu = this.menus[menuIndex];
|
434
|
+
if (menu.isMenuHovered.getValue() || menu.isTriggerHovered.getValue()) {
|
435
|
+
return;
|
436
|
+
}
|
437
|
+
// close all menus up if possible
|
438
|
+
for (var index = this.menus.length - 1; index >= 1; index--) {
|
439
|
+
var m = this.menus[index];
|
440
|
+
if (!m.isMenuHovered.getValue() && !m.isTriggerHovered.getValue()) {
|
441
|
+
this.close(m, index);
|
378
442
|
}
|
379
|
-
|
380
|
-
/** @type {?} */
|
381
|
-
var menu = this.menus[menuIndex];
|
382
|
-
if (menu.isMenuHovered.getValue() || menu.isTriggerHovered.getValue()) {
|
443
|
+
else {
|
383
444
|
return;
|
384
445
|
}
|
385
|
-
|
386
|
-
for (var index = this.menus.length - 1; index >= 1; index--) {
|
387
|
-
/** @type {?} */
|
388
|
-
var m = this.menus[index];
|
389
|
-
if (!m.isMenuHovered.getValue() && !m.isTriggerHovered.getValue()) {
|
390
|
-
this.close(m, index);
|
391
|
-
}
|
392
|
-
else {
|
393
|
-
return;
|
394
|
-
}
|
395
|
-
}
|
396
|
-
};
|
397
|
-
ContextMenuService.decorators = [
|
398
|
-
{ type: i0.Injectable, args: [{ providedIn: 'root' },] }
|
399
|
-
];
|
400
|
-
/** @nocollapse */
|
401
|
-
ContextMenuService.ctorParameters = function () {
|
402
|
-
return [
|
403
|
-
{ type: i1.Overlay },
|
404
|
-
{ type: i1.ScrollStrategyOptions },
|
405
|
-
{ type: i0.Injector }
|
406
|
-
];
|
446
|
+
}
|
407
447
|
};
|
408
|
-
|
448
|
+
ContextMenuService.ctorParameters = function () { return [
|
449
|
+
{ type: overlay.Overlay },
|
450
|
+
{ type: overlay.ScrollStrategyOptions },
|
451
|
+
{ type: core.Injector }
|
452
|
+
]; };
|
453
|
+
ContextMenuService.ɵprov = core["ɵɵdefineInjectable"]({ factory: function ContextMenuService_Factory() { return new ContextMenuService(core["ɵɵinject"](overlay.Overlay), core["ɵɵinject"](overlay.ScrollStrategyOptions), core["ɵɵinject"](core.INJECTOR)); }, token: ContextMenuService, providedIn: "root" });
|
454
|
+
ContextMenuService = __decorate([
|
455
|
+
core.Injectable({ providedIn: 'root' })
|
456
|
+
], ContextMenuService);
|
409
457
|
return ContextMenuService;
|
410
458
|
}());
|
411
459
|
|
412
|
-
/**
|
413
|
-
* @fileoverview added by tsickle
|
414
|
-
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
415
|
-
*/
|
416
460
|
var ContextMenuTriggerDirective = /** @class */ (function () {
|
417
461
|
function ContextMenuTriggerDirective(contextMenuService) {
|
418
462
|
this.contextMenuService = contextMenuService;
|
419
463
|
this.holdToDisplay = 1000;
|
420
|
-
this.menuAction = new
|
421
|
-
this.menuClose = new
|
464
|
+
this.menuAction = new core.EventEmitter();
|
465
|
+
this.menuClose = new core.EventEmitter();
|
466
|
+
this.beforeOpen = new core.EventEmitter();
|
422
467
|
this.visible = false;
|
423
468
|
}
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
* @return {?}
|
456
|
-
*/
|
457
|
-
ContextMenuTriggerDirective.prototype.handleMouseUp = /**
|
458
|
-
* @return {?}
|
459
|
-
*/
|
460
|
-
function () {
|
461
|
-
clearTimeout(this.mouseDownTimeoutId);
|
462
|
-
};
|
463
|
-
/**
|
464
|
-
* @return {?}
|
465
|
-
*/
|
466
|
-
ContextMenuTriggerDirective.prototype.ngOnInit = /**
|
467
|
-
* @return {?}
|
468
|
-
*/
|
469
|
-
function () {
|
470
|
-
var _this = this;
|
471
|
-
this.sub = this.menuClose.subscribe(function () { return _this.visible = false; });
|
472
|
-
};
|
473
|
-
/**
|
474
|
-
* @return {?}
|
475
|
-
*/
|
476
|
-
ContextMenuTriggerDirective.prototype.ngOnDestroy = /**
|
477
|
-
* @return {?}
|
478
|
-
*/
|
479
|
-
function () {
|
480
|
-
this.sub.unsubscribe();
|
481
|
-
};
|
482
|
-
ContextMenuTriggerDirective.decorators = [
|
483
|
-
{ type: i0.Directive, args: [{
|
484
|
-
selector: '[contextMenuTrigger]',
|
485
|
-
exportAs: 'contextMenuTrigger',
|
486
|
-
},] }
|
487
|
-
];
|
488
|
-
/** @nocollapse */
|
489
|
-
ContextMenuTriggerDirective.ctorParameters = function () {
|
490
|
-
return [
|
491
|
-
{ type: ContextMenuService }
|
492
|
-
];
|
469
|
+
ContextMenuTriggerDirective.prototype.handleMenu = function ($event) {
|
470
|
+
var preventOpen = false;
|
471
|
+
this.beforeOpen.emit({
|
472
|
+
menuContext: this.menuContext,
|
473
|
+
event: $event,
|
474
|
+
preventOpen: function () {
|
475
|
+
preventOpen = true;
|
476
|
+
},
|
477
|
+
});
|
478
|
+
if (preventOpen) {
|
479
|
+
return;
|
480
|
+
}
|
481
|
+
$event.preventDefault();
|
482
|
+
this.menu = this.contextMenuService.show($event, this.contextMenuTrigger, this.menuContext, this.menuClose, this.menuAction);
|
483
|
+
this.visible = true;
|
484
|
+
};
|
485
|
+
ContextMenuTriggerDirective.prototype.handleMouseDown = function ($event) {
|
486
|
+
var _this = this;
|
487
|
+
if (this.holdToDisplay >= 0) {
|
488
|
+
$event.stopPropagation();
|
489
|
+
$event.clientY = $event.touches[0].clientY;
|
490
|
+
$event.clientX = $event.touches[0].clientX;
|
491
|
+
this.mouseDownTimeoutId = setTimeout(function () { return _this.handleMenu($event); }, this.holdToDisplay);
|
492
|
+
}
|
493
|
+
};
|
494
|
+
ContextMenuTriggerDirective.prototype.handleMouseUp = function () {
|
495
|
+
clearTimeout(this.mouseDownTimeoutId);
|
496
|
+
};
|
497
|
+
ContextMenuTriggerDirective.prototype.ngOnInit = function () {
|
498
|
+
var _this = this;
|
499
|
+
this.sub = this.menuClose.subscribe(function () { return (_this.visible = false); });
|
493
500
|
};
|
494
|
-
ContextMenuTriggerDirective.
|
495
|
-
|
496
|
-
menuContext: [{ type: i0.Input }],
|
497
|
-
holdToDisplay: [{ type: i0.Input }],
|
498
|
-
menuAction: [{ type: i0.Output }],
|
499
|
-
menuClose: [{ type: i0.Output }],
|
500
|
-
handleMenu: [{ type: i0.HostListener, args: ['contextmenu', ['$event'],] }],
|
501
|
-
handleMouseDown: [{ type: i0.HostListener, args: ['touchstart', ['$event'],] }],
|
502
|
-
handleMouseUp: [{ type: i0.HostListener, args: ['touchend',] }]
|
501
|
+
ContextMenuTriggerDirective.prototype.ngOnDestroy = function () {
|
502
|
+
this.sub.unsubscribe();
|
503
503
|
};
|
504
|
+
ContextMenuTriggerDirective.ctorParameters = function () { return [
|
505
|
+
{ type: ContextMenuService }
|
506
|
+
]; };
|
507
|
+
__decorate([
|
508
|
+
core.Input()
|
509
|
+
], ContextMenuTriggerDirective.prototype, "contextMenuTrigger", void 0);
|
510
|
+
__decorate([
|
511
|
+
core.Input()
|
512
|
+
], ContextMenuTriggerDirective.prototype, "menuContext", void 0);
|
513
|
+
__decorate([
|
514
|
+
core.Input()
|
515
|
+
], ContextMenuTriggerDirective.prototype, "holdToDisplay", void 0);
|
516
|
+
__decorate([
|
517
|
+
core.Output()
|
518
|
+
], ContextMenuTriggerDirective.prototype, "menuAction", void 0);
|
519
|
+
__decorate([
|
520
|
+
core.Output()
|
521
|
+
], ContextMenuTriggerDirective.prototype, "menuClose", void 0);
|
522
|
+
__decorate([
|
523
|
+
core.Output()
|
524
|
+
], ContextMenuTriggerDirective.prototype, "beforeOpen", void 0);
|
525
|
+
__decorate([
|
526
|
+
core.HostListener('contextmenu', ['$event'])
|
527
|
+
], ContextMenuTriggerDirective.prototype, "handleMenu", null);
|
528
|
+
__decorate([
|
529
|
+
core.HostListener('touchstart', ['$event'])
|
530
|
+
], ContextMenuTriggerDirective.prototype, "handleMouseDown", null);
|
531
|
+
__decorate([
|
532
|
+
core.HostListener('touchend')
|
533
|
+
], ContextMenuTriggerDirective.prototype, "handleMouseUp", null);
|
534
|
+
ContextMenuTriggerDirective = __decorate([
|
535
|
+
core.Directive({
|
536
|
+
selector: '[contextMenuTrigger]',
|
537
|
+
exportAs: 'contextMenuTrigger',
|
538
|
+
})
|
539
|
+
], ContextMenuTriggerDirective);
|
504
540
|
return ContextMenuTriggerDirective;
|
505
541
|
}());
|
506
542
|
|
507
|
-
/**
|
508
|
-
* @fileoverview added by tsickle
|
509
|
-
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
510
|
-
*/
|
511
543
|
var ContextSubmenuTriggerDirective = /** @class */ (function () {
|
512
544
|
function ContextSubmenuTriggerDirective(contextMenuService) {
|
513
545
|
var _this = this;
|
514
546
|
this.contextMenuService = contextMenuService;
|
515
547
|
this.hoverDelay = 500;
|
516
548
|
this.openDelay = 200;
|
517
|
-
this.menuAction = new
|
518
|
-
this.menuClose = new
|
549
|
+
this.menuAction = new core.EventEmitter();
|
550
|
+
this.menuClose = new core.EventEmitter();
|
519
551
|
this.visible = false;
|
520
552
|
this.level = 1;
|
521
553
|
// get current level
|
522
554
|
setTimeout(function () { return (_this.level = _this.contextMenuService.getCurrentLevel()); });
|
523
555
|
}
|
556
|
+
ContextSubmenuTriggerDirective.prototype.handleSubMenuClick = function ($event) {
|
557
|
+
$event.preventDefault();
|
558
|
+
$event.stopPropagation();
|
559
|
+
clearTimeout(this.opentimer);
|
560
|
+
clearTimeout(this.closetimer);
|
561
|
+
this.menu = this.contextMenuService.show($event, this.contextSubmenuTrigger, this.menuContext, this.menuClose, this.menuAction, true, this.level);
|
562
|
+
this.visible = true;
|
563
|
+
};
|
564
|
+
ContextSubmenuTriggerDirective.prototype.handleSubMenuEnter = function ($event) {
|
565
|
+
var _this = this;
|
566
|
+
if (this.menu) {
|
567
|
+
this.menu.isTriggerHovered.next(true);
|
568
|
+
}
|
569
|
+
clearTimeout(this.closetimer);
|
570
|
+
this.opentimer = setTimeout(function () {
|
571
|
+
_this.menu = _this.contextMenuService.show($event, _this.contextSubmenuTrigger, _this.menuContext, _this.menuClose, _this.menuAction, true, _this.level);
|
572
|
+
_this.visible = true;
|
573
|
+
_this.opentimer = null;
|
574
|
+
}, this.openDelay);
|
575
|
+
};
|
524
576
|
/**
|
525
|
-
* @param {?} $event
|
526
|
-
* @return {?}
|
527
|
-
*/
|
528
|
-
ContextSubmenuTriggerDirective.prototype.handleSubMenuClick = /**
|
529
|
-
* @param {?} $event
|
530
|
-
* @return {?}
|
531
|
-
*/
|
532
|
-
function ($event) {
|
533
|
-
event.preventDefault();
|
534
|
-
event.stopPropagation();
|
535
|
-
clearTimeout(this.opentimer);
|
536
|
-
clearTimeout(this.closetimer);
|
537
|
-
this.menu = this.contextMenuService.show($event, this.contextSubmenuTrigger, this.menuContext, this.menuClose, this.menuAction, true, this.level);
|
538
|
-
this.visible = true;
|
539
|
-
};
|
540
|
-
/**
|
541
|
-
* @param {?} $event
|
542
|
-
* @return {?}
|
543
|
-
*/
|
544
|
-
ContextSubmenuTriggerDirective.prototype.handleSubMenuEnter = /**
|
545
|
-
* @param {?} $event
|
546
|
-
* @return {?}
|
547
|
-
*/
|
548
|
-
function ($event) {
|
549
|
-
var _this = this;
|
550
|
-
if (this.menu) {
|
551
|
-
this.menu.isTriggerHovered.next(true);
|
552
|
-
}
|
553
|
-
clearTimeout(this.closetimer);
|
554
|
-
this.opentimer = setTimeout(function () {
|
555
|
-
_this.menu = _this.contextMenuService.show($event, _this.contextSubmenuTrigger, _this.menuContext, _this.menuClose, _this.menuAction, true, _this.level);
|
556
|
-
_this.visible = true;
|
557
|
-
_this.opentimer = null;
|
558
|
-
}, this.openDelay);
|
559
|
-
};
|
560
|
-
/**
|
561
|
-
* submenu hides after cursor has exited for a period of time
|
562
|
-
*/
|
563
|
-
/**
|
564
|
-
* submenu hides after cursor has exited for a period of time
|
565
|
-
* @return {?}
|
566
|
-
*/
|
567
|
-
ContextSubmenuTriggerDirective.prototype.handleSubMenuExit = /**
|
568
577
|
* submenu hides after cursor has exited for a period of time
|
569
|
-
* @return {?}
|
570
578
|
*/
|
571
|
-
|
572
|
-
|
573
|
-
|
574
|
-
|
575
|
-
|
579
|
+
ContextSubmenuTriggerDirective.prototype.handleSubMenuExit = function () {
|
580
|
+
var _this = this;
|
581
|
+
clearTimeout(this.opentimer);
|
582
|
+
if (this.menu) {
|
583
|
+
this.menu.isTriggerHovered.next(false);
|
584
|
+
}
|
585
|
+
this.closetimer = setTimeout(function () {
|
586
|
+
if (_this.menu) {
|
587
|
+
_this.menu.isTriggerHovered.next(false);
|
588
|
+
_this.contextMenuService.closeSubMenu(_this.menu.id);
|
589
|
+
_this.menu = undefined;
|
576
590
|
}
|
577
|
-
|
578
|
-
|
579
|
-
|
580
|
-
_this.contextMenuService.closeSubMenu(_this.menu.id);
|
581
|
-
_this.menu = undefined;
|
582
|
-
}
|
583
|
-
_this.visible = false;
|
584
|
-
}, this.hoverDelay);
|
585
|
-
};
|
586
|
-
/**
|
587
|
-
* if overwritten make sure to clear timeouts
|
588
|
-
*/
|
591
|
+
_this.visible = false;
|
592
|
+
}, this.hoverDelay);
|
593
|
+
};
|
589
594
|
/**
|
590
595
|
* if overwritten make sure to clear timeouts
|
591
|
-
* @return {?}
|
592
596
|
*/
|
593
|
-
ContextSubmenuTriggerDirective.prototype.ngOnDestroy =
|
594
|
-
|
595
|
-
|
596
|
-
*/
|
597
|
-
function () {
|
598
|
-
clearTimeout(this.opentimer);
|
599
|
-
clearTimeout(this.closetimer);
|
600
|
-
};
|
601
|
-
ContextSubmenuTriggerDirective.decorators = [
|
602
|
-
{ type: i0.Directive, args: [{ selector: '[contextSubmenuTrigger]' },] }
|
603
|
-
];
|
604
|
-
/** @nocollapse */
|
605
|
-
ContextSubmenuTriggerDirective.ctorParameters = function () {
|
606
|
-
return [
|
607
|
-
{ type: ContextMenuService }
|
608
|
-
];
|
609
|
-
};
|
610
|
-
ContextSubmenuTriggerDirective.propDecorators = {
|
611
|
-
hoverDelay: [{ type: i0.Input }],
|
612
|
-
openDelay: [{ type: i0.Input }],
|
613
|
-
contextSubmenuTrigger: [{ type: i0.Input }],
|
614
|
-
menuContext: [{ type: i0.Input }],
|
615
|
-
menuAction: [{ type: i0.Output }],
|
616
|
-
menuClose: [{ type: i0.Output }],
|
617
|
-
handleSubMenuClick: [{ type: i0.HostListener, args: ['click', ['$event', 'true'],] }],
|
618
|
-
handleSubMenuEnter: [{ type: i0.HostListener, args: ['mouseover', ['$event'],] }],
|
619
|
-
handleSubMenuExit: [{ type: i0.HostListener, args: ['mouseout', ['$event'],] }]
|
597
|
+
ContextSubmenuTriggerDirective.prototype.ngOnDestroy = function () {
|
598
|
+
clearTimeout(this.opentimer);
|
599
|
+
clearTimeout(this.closetimer);
|
620
600
|
};
|
601
|
+
ContextSubmenuTriggerDirective.ctorParameters = function () { return [
|
602
|
+
{ type: ContextMenuService }
|
603
|
+
]; };
|
604
|
+
__decorate([
|
605
|
+
core.Input()
|
606
|
+
], ContextSubmenuTriggerDirective.prototype, "hoverDelay", void 0);
|
607
|
+
__decorate([
|
608
|
+
core.Input()
|
609
|
+
], ContextSubmenuTriggerDirective.prototype, "openDelay", void 0);
|
610
|
+
__decorate([
|
611
|
+
core.Input()
|
612
|
+
], ContextSubmenuTriggerDirective.prototype, "contextSubmenuTrigger", void 0);
|
613
|
+
__decorate([
|
614
|
+
core.Input()
|
615
|
+
], ContextSubmenuTriggerDirective.prototype, "menuContext", void 0);
|
616
|
+
__decorate([
|
617
|
+
core.Output()
|
618
|
+
], ContextSubmenuTriggerDirective.prototype, "menuAction", void 0);
|
619
|
+
__decorate([
|
620
|
+
core.Output()
|
621
|
+
], ContextSubmenuTriggerDirective.prototype, "menuClose", void 0);
|
622
|
+
__decorate([
|
623
|
+
core.HostListener('click', ['$event'])
|
624
|
+
], ContextSubmenuTriggerDirective.prototype, "handleSubMenuClick", null);
|
625
|
+
__decorate([
|
626
|
+
core.HostListener('mouseover', ['$event'])
|
627
|
+
], ContextSubmenuTriggerDirective.prototype, "handleSubMenuEnter", null);
|
628
|
+
__decorate([
|
629
|
+
core.HostListener('mouseout')
|
630
|
+
], ContextSubmenuTriggerDirective.prototype, "handleSubMenuExit", null);
|
631
|
+
ContextSubmenuTriggerDirective = __decorate([
|
632
|
+
core.Directive({ selector: '[contextSubmenuTrigger]' })
|
633
|
+
], ContextSubmenuTriggerDirective);
|
621
634
|
return ContextSubmenuTriggerDirective;
|
622
635
|
}());
|
623
636
|
|
624
|
-
/**
|
625
|
-
* @fileoverview added by tsickle
|
626
|
-
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
627
|
-
*/
|
628
637
|
var MenuComponent = /** @class */ (function () {
|
629
638
|
function MenuComponent(menuPackage, contextMenuService) {
|
630
639
|
this.menuPackage = menuPackage;
|
631
640
|
this.contextMenuService = contextMenuService;
|
632
|
-
/**
|
633
|
-
* State of the dialog animation.
|
634
|
-
*/
|
641
|
+
/** State of the dialog animation. */
|
635
642
|
this._state = 'enter';
|
636
643
|
this._animationDone = new rxjs.Subject();
|
637
|
-
/**
|
638
|
-
* set lazy to False if you do not have animations
|
639
|
-
*/
|
644
|
+
/** set lazy to False if you do not have animations */
|
640
645
|
this.lazy = true;
|
641
646
|
}
|
642
|
-
|
643
|
-
|
644
|
-
|
645
|
-
|
646
|
-
|
647
|
-
|
648
|
-
|
649
|
-
|
650
|
-
|
651
|
-
|
652
|
-
|
653
|
-
|
654
|
-
|
655
|
-
|
656
|
-
|
657
|
-
|
658
|
-
|
659
|
-
|
660
|
-
|
661
|
-
function () {
|
662
|
-
var _this = this;
|
663
|
-
if (!this.menuPackage.menu.submenu) {
|
664
|
-
return;
|
665
|
-
}
|
666
|
-
this.menuPackage.menu.isMenuHovered.next(false);
|
667
|
-
this.closetimer = setTimeout(function () {
|
668
|
-
_this.contextMenuService.closeSubMenu(_this.menuPackage.menu.id);
|
669
|
-
}, 500);
|
670
|
-
};
|
671
|
-
/**
|
672
|
-
* @param {?} $event
|
673
|
-
* @return {?}
|
674
|
-
*/
|
675
|
-
MenuComponent.prototype.handleWindowClick = /**
|
676
|
-
* @param {?} $event
|
677
|
-
* @return {?}
|
678
|
-
*/
|
679
|
-
function ($event) {
|
680
|
-
this.contextMenuService.checkOutsideClick($event);
|
681
|
-
};
|
682
|
-
/** Callback that is invoked when the menu animation completes. */
|
683
|
-
/**
|
684
|
-
* Callback that is invoked when the menu animation completes.
|
685
|
-
* @param {?} event
|
686
|
-
* @return {?}
|
687
|
-
*/
|
688
|
-
MenuComponent.prototype._onAnimationDone = /**
|
689
|
-
* Callback that is invoked when the menu animation completes.
|
690
|
-
* @param {?} event
|
691
|
-
* @return {?}
|
692
|
-
*/
|
693
|
-
function (event) {
|
694
|
-
this._animationDone.next(event);
|
695
|
-
};
|
696
|
-
MenuComponent.decorators = [
|
697
|
-
{ type: i0.Component, args: [{
|
698
|
-
selector: 'app-menu',
|
699
|
-
template: ""
|
700
|
-
}] }
|
701
|
-
];
|
702
|
-
/** @nocollapse */
|
703
|
-
MenuComponent.ctorParameters = function () {
|
704
|
-
return [
|
705
|
-
{ type: MenuPackage },
|
706
|
-
{ type: ContextMenuService }
|
707
|
-
];
|
647
|
+
MenuComponent.prototype.handleMouseover = function () {
|
648
|
+
if (!this.menuPackage.menu.submenu) {
|
649
|
+
return;
|
650
|
+
}
|
651
|
+
this.menuPackage.menu.isMenuHovered.next(true);
|
652
|
+
clearTimeout(this.closetimer);
|
653
|
+
};
|
654
|
+
MenuComponent.prototype.handleMouseleave = function () {
|
655
|
+
var _this = this;
|
656
|
+
if (!this.menuPackage.menu.submenu) {
|
657
|
+
return;
|
658
|
+
}
|
659
|
+
this.menuPackage.menu.isMenuHovered.next(false);
|
660
|
+
this.closetimer = setTimeout(function () {
|
661
|
+
_this.contextMenuService.closeSubMenu(_this.menuPackage.menu.id);
|
662
|
+
}, 500);
|
663
|
+
};
|
664
|
+
MenuComponent.prototype.handleWindowClick = function ($event) {
|
665
|
+
this.contextMenuService.checkOutsideClick($event);
|
708
666
|
};
|
709
|
-
|
710
|
-
|
711
|
-
|
712
|
-
handleWindowClick: [{ type: i0.HostListener, args: ['document:click', ['$event'],] }]
|
667
|
+
/** Callback that is invoked when the menu animation completes. */
|
668
|
+
MenuComponent.prototype._onAnimationDone = function (event) {
|
669
|
+
this._animationDone.next(event);
|
713
670
|
};
|
671
|
+
MenuComponent.ctorParameters = function () { return [
|
672
|
+
{ type: MenuPackage },
|
673
|
+
{ type: ContextMenuService }
|
674
|
+
]; };
|
675
|
+
__decorate([
|
676
|
+
core.HostListener('mouseover')
|
677
|
+
], MenuComponent.prototype, "handleMouseover", null);
|
678
|
+
__decorate([
|
679
|
+
core.HostListener('mouseleave')
|
680
|
+
], MenuComponent.prototype, "handleMouseleave", null);
|
681
|
+
__decorate([
|
682
|
+
core.HostListener('document:click', ['$event'])
|
683
|
+
], MenuComponent.prototype, "handleWindowClick", null);
|
684
|
+
__decorate([
|
685
|
+
core.HostListener('@menu.done', ['$event'])
|
686
|
+
], MenuComponent.prototype, "_onAnimationDone", null);
|
687
|
+
MenuComponent = __decorate([
|
688
|
+
core.Component({
|
689
|
+
selector: 'app-menu',
|
690
|
+
template: ""
|
691
|
+
})
|
692
|
+
], MenuComponent);
|
714
693
|
return MenuComponent;
|
715
694
|
}());
|
716
695
|
|
717
|
-
/**
|
718
|
-
* @fileoverview added by tsickle
|
719
|
-
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
720
|
-
*/
|
721
696
|
var ContextMenuModule = /** @class */ (function () {
|
722
697
|
function ContextMenuModule() {
|
723
698
|
}
|
724
|
-
ContextMenuModule
|
725
|
-
|
726
|
-
|
727
|
-
|
728
|
-
|
729
|
-
|
730
|
-
|
731
|
-
|
732
|
-
|
733
|
-
|
734
|
-
];
|
699
|
+
ContextMenuModule = __decorate([
|
700
|
+
core.NgModule({
|
701
|
+
declarations: [
|
702
|
+
ContextMenuTriggerDirective,
|
703
|
+
ContextSubmenuTriggerDirective,
|
704
|
+
MenuComponent,
|
705
|
+
],
|
706
|
+
exports: [ContextMenuTriggerDirective, ContextSubmenuTriggerDirective],
|
707
|
+
imports: [portal.PortalModule, overlay.OverlayModule],
|
708
|
+
})
|
709
|
+
], ContextMenuModule);
|
735
710
|
return ContextMenuModule;
|
736
711
|
}());
|
737
712
|
|
738
|
-
/**
|
739
|
-
* @fileoverview added by tsickle
|
740
|
-
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
741
|
-
*/
|
742
|
-
|
743
|
-
/**
|
744
|
-
* @fileoverview added by tsickle
|
745
|
-
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
746
|
-
*/
|
747
|
-
|
748
713
|
exports.ContextMenuModule = ContextMenuModule;
|
749
|
-
exports.MenuPackage = MenuPackage;
|
750
|
-
exports.MenuInjector = MenuInjector;
|
751
|
-
exports.MenuComponent = MenuComponent;
|
752
|
-
exports.ContextSubmenuTriggerDirective = ContextSubmenuTriggerDirective;
|
753
|
-
exports.ContextMenuTriggerDirective = ContextMenuTriggerDirective;
|
754
714
|
exports.ContextMenuService = ContextMenuService;
|
715
|
+
exports.ContextMenuTriggerDirective = ContextMenuTriggerDirective;
|
716
|
+
exports.ContextSubmenuTriggerDirective = ContextSubmenuTriggerDirective;
|
717
|
+
exports.MenuComponent = MenuComponent;
|
718
|
+
exports.MenuInjector = MenuInjector;
|
719
|
+
exports.MenuPackage = MenuPackage;
|
755
720
|
|
756
721
|
Object.defineProperty(exports, '__esModule', { value: true });
|
757
722
|
|
758
723
|
})));
|
759
|
-
|
760
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3RybC1uZ3gtcmlnaHRjbGljay51bWQuanMubWFwIiwic291cmNlcyI6WyJub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIiwibmc6Ly9AY3RybC9uZ3gtcmlnaHRjbGljay9jb250ZXh0LW1lbnUtaW5qZWN0b3IudHMiLCJuZzovL0BjdHJsL25neC1yaWdodGNsaWNrL2NvbnRleHQtbWVudS5zZXJ2aWNlLnRzIiwibmc6Ly9AY3RybC9uZ3gtcmlnaHRjbGljay9jb250ZXh0LW1lbnUtdHJpZ2dlci5kaXJlY3RpdmUudHMiLCJuZzovL0BjdHJsL25neC1yaWdodGNsaWNrL2NvbnRleHQtc3VibWVudS10cmlnZ2VyLmRpcmVjdGl2ZS50cyIsIm5nOi8vQGN0cmwvbmd4LXJpZ2h0Y2xpY2svbWVudS5jb21wb25lbnQudHMiLCJuZzovL0BjdHJsL25neC1yaWdodGNsaWNrL2NvbnRleHQtbWVudS5tb2R1bGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5MaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2VcclxudGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGVcclxuTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcclxuXHJcblRISVMgQ09ERSBJUyBQUk9WSURFRCBPTiBBTiAqQVMgSVMqIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcclxuS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBBTlkgSU1QTElFRFxyXG5XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLFxyXG5NRVJDSEFOVEFCTElUWSBPUiBOT04tSU5GUklOR0VNRU5ULlxyXG5cclxuU2VlIHRoZSBBcGFjaGUgVmVyc2lvbiAyLjAgTGljZW5zZSBmb3Igc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXHJcbmFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xyXG4gICAgdmFyIHQgPSB7fTtcclxuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIGlmIChlLmluZGV4T2YocFtpXSkgPCAwKVxyXG4gICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHJlc3VsdC52YWx1ZSk7IH0pLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIGV4cG9ydHMpIHtcclxuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKCFleHBvcnRzLmhhc093blByb3BlcnR5KHApKSBleHBvcnRzW3BdID0gbVtwXTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcclxuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXSwgaSA9IDA7XHJcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XHJcbiAgICBpZiAoIW0pIHJldHVybiBvO1xyXG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xyXG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaWYgKGdbbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxyXG4gICAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XHJcbiAgICB2YXIgaSwgcDtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBuID09PSBcInJldHVyblwiIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xyXG4gICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcclxuICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XHJcbiAgICByZXR1cm4gY29va2VkO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0U3Rhcihtb2QpIHtcclxuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XHJcbiAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgcmVzdWx0W2tdID0gbW9kW2tdO1xyXG4gICAgcmVzdWx0LmRlZmF1bHQgPSBtb2Q7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xyXG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcclxufVxyXG4iLCJpbXBvcnQgeyBJbmplY3RvciwgVHlwZSwgSW5qZWN0aW9uVG9rZW4sIEluamVjdEZsYWdzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFjdGl2ZUNvbnRleHRNZW51U3ViIH0gZnJvbSAnLi9jb250ZXh0LW1lbnUuc2VydmljZSc7XG5cbmV4cG9ydCBjbGFzcyBNZW51UGFja2FnZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBtZW51OiBBY3RpdmVDb250ZXh0TWVudVN1YiwgcHVibGljIGNvbnRleHQ6IGFueSkge31cbn1cblxuZXhwb3J0IGNsYXNzIE1lbnVJbmplY3RvciBpbXBsZW1lbnRzIEluamVjdG9yIHtcbiAgX21lbnVDb250ZXh0OiBNZW51UGFja2FnZTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfYWN0aXZlQ29udGV4dE1lbnU6IEFjdGl2ZUNvbnRleHRNZW51U3ViLFxuICAgIHByaXZhdGUgX3BhcmVudEluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcml2YXRlIGNvbnRleHQ6IGFueSxcbiAgKSB7XG4gICAgdGhpcy5fbWVudUNvbnRleHQgPSBuZXcgTWVudVBhY2thZ2UoX2FjdGl2ZUNvbnRleHRNZW51LCBjb250ZXh0KTtcbiAgfVxuXG4gIGdldDxUPih0b2tlbjogYW55LCBub3RGb3VuZFZhbHVlPzogVCwgZmxhZ3M/OiBJbmplY3RGbGFncyk6IFQgfCBNZW51UGFja2FnZSB7XG4gICAgaWYgKHRva2VuID09PSBNZW51UGFja2FnZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX21lbnVDb250ZXh0O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcGFyZW50SW5qZWN0b3IuZ2V0PFQ+KHRva2VuLCBub3RGb3VuZFZhbHVlLCBmbGFncyk7XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIE92ZXJsYXksXG4gIE92ZXJsYXlSZWYsXG4gIFNjcm9sbFN0cmF0ZWd5T3B0aW9ucyxcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgQ29tcG9uZW50UG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyBFbGVtZW50UmVmLCBJbmplY3RhYmxlLCBJbmplY3RvciwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBNZW51SW5qZWN0b3IgfSBmcm9tICcuL2NvbnRleHQtbWVudS1pbmplY3Rvcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aXZlQ29udGV4dE1lbnVTdWIge1xuICBpZDogbnVtYmVyO1xuICBpc1RyaWdnZXJIb3ZlcmVkOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj47XG4gIGlzTWVudUhvdmVyZWQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPjtcbiAgc3VibWVudTogYm9vbGVhbjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aXZlQ29udGV4dE1lbnUgZXh0ZW5kcyBBY3RpdmVDb250ZXh0TWVudVN1YiB7XG4gIG92ZXJsYXlSZWY6IE92ZXJsYXlSZWY7XG4gIGNvbXBvbmVudDogYW55O1xuICBtZW51Q2xvc2U6IEV2ZW50RW1pdHRlcjx2b2lkPjtcbiAgbWVudUFjdGlvbjogRXZlbnRFbWl0dGVyPGFueT47XG59XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQ29udGV4dE1lbnVTZXJ2aWNlIHtcbiAgbWVudXM6IEFjdGl2ZUNvbnRleHRNZW51W10gPSBbXTtcbiAgaWQgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgb3ZlcmxheTogT3ZlcmxheSxcbiAgICBwcml2YXRlIHNjcm9sbFN0cmF0ZWd5OiBTY3JvbGxTdHJhdGVneU9wdGlvbnMsXG4gICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yLFxuICApIHt9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSAkZXZlbnQgdHJpZ2dlcmluZyBldmVudFxuICAgKiBAcGFyYW0gbWVudUNvbXBvbmVudCB0aGUgY29tcG9uZW50IHRvIGJlIHNob3duXG4gICAqIEBwYXJhbSBzdWJtZW51IGlzIGEgbWVudSB3aXRoaW4gYSBtZW51XG4gICAqIEBwYXJhbSBsZXZlbCBpZiBzdWJtZW51LCB3aGF0IGxldmVsXG4gICAqL1xuICBzaG93KFxuICAgICRldmVudDogTW91c2VFdmVudCxcbiAgICBtZW51Q29tcG9uZW50LFxuICAgIGNvbnRleHQ6IGFueSxcbiAgICBtZW51Q2xvc2U6IEV2ZW50RW1pdHRlcjxhbnk+LFxuICAgIG1lbnVBY3Rpb246IEV2ZW50RW1pdHRlcjxhbnk+LFxuICAgIHN1Ym1lbnUgPSBmYWxzZSxcbiAgICBsZXZlbD86IG51bWJlcixcbiAgKTogQWN0aXZlQ29udGV4dE1lbnUge1xuICAgIGxldCB0YXJnZXQ6IGFueTtcbiAgICBpZiAoIXN1Ym1lbnUpIHtcbiAgICAgIHRoaXMuY2xvc2VBbGwoKTtcbiAgICAgIHRhcmdldCA9IHtcbiAgICAgICAgZ2V0Qm91bmRpbmdDbGllbnRSZWN0OiAoKTogQ2xpZW50UmVjdCA9PiAoe1xuICAgICAgICAgIGJvdHRvbTogJGV2ZW50LmNsaWVudFksXG4gICAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICAgIGxlZnQ6ICRldmVudC5jbGllbnRYLFxuICAgICAgICAgIHJpZ2h0OiAkZXZlbnQuY2xpZW50WCxcbiAgICAgICAgICB0b3A6ICRldmVudC5jbGllbnRZLFxuICAgICAgICAgIHdpZHRoOiAwLFxuICAgICAgICB9KSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNsb3NlIG90aGVyIHN1Ym1lbnVzXG4gICAgICB0aGlzLmNsb3NlQWxsKHVuZGVmaW5lZCwgbGV2ZWwpO1xuICAgICAgdGFyZ2V0ID0gJGV2ZW50LnRhcmdldDtcbiAgICB9XG4gICAgY29uc3QgZWwgPSBuZXcgRWxlbWVudFJlZih0YXJnZXQpO1xuICAgIGNvbnN0IHBvc2l0aW9uU3RyYXRlZ3kgPSB0aGlzLm92ZXJsYXlcbiAgICAgIC5wb3NpdGlvbigpXG4gICAgICAuZmxleGlibGVDb25uZWN0ZWRUbyhlbClcbiAgICAgIC53aXRoRmxleGlibGVEaW1lbnNpb25zKGZhbHNlKTtcblxuICAgIGlmICghc3VibWVudSkge1xuICAgICAgcG9zaXRpb25TdHJhdGVneS53aXRoUG9zaXRpb25zKFtcbiAgICAgICAge1xuICAgICAgICAgIG9yaWdpblg6ICdzdGFydCcsXG4gICAgICAgICAgb3JpZ2luWTogJ2JvdHRvbScsXG4gICAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXG4gICAgICAgICAgb3ZlcmxheVk6ICd0b3AnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgb3JpZ2luWDogJ3N0YXJ0JyxcbiAgICAgICAgICBvcmlnaW5ZOiAndG9wJyxcbiAgICAgICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgICAgICAgICBvdmVybGF5WTogJ2JvdHRvbScsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBvcmlnaW5YOiAnZW5kJyxcbiAgICAgICAgICBvcmlnaW5ZOiAndG9wJyxcbiAgICAgICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgICAgICAgICBvdmVybGF5WTogJ3RvcCcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgICAgIG9yaWdpblk6ICd0b3AnLFxuICAgICAgICAgIG92ZXJsYXlYOiAnZW5kJyxcbiAgICAgICAgICBvdmVybGF5WTogJ3RvcCcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBvcmlnaW5YOiAnZW5kJyxcbiAgICAgICAgICBvcmlnaW5ZOiAnY2VudGVyJyxcbiAgICAgICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgICAgICAgICBvdmVybGF5WTogJ2NlbnRlcicsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgICAgIG9yaWdpblk6ICdjZW50ZXInLFxuICAgICAgICAgIG92ZXJsYXlYOiAnZW5kJyxcbiAgICAgICAgICBvdmVybGF5WTogJ2NlbnRlcicsXG4gICAgICAgIH0sXG4gICAgICBdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcG9zaXRpb25TdHJhdGVneS53aXRoUG9zaXRpb25zKFtcbiAgICAgICAge1xuICAgICAgICAgIG9yaWdpblg6ICdlbmQnLFxuICAgICAgICAgIG9yaWdpblk6ICd0b3AnLFxuICAgICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxuICAgICAgICAgIG92ZXJsYXlZOiAndG9wJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG9yaWdpblg6ICdzdGFydCcsXG4gICAgICAgICAgb3JpZ2luWTogJ3RvcCcsXG4gICAgICAgICAgb3ZlcmxheVg6ICdlbmQnLFxuICAgICAgICAgIG92ZXJsYXlZOiAndG9wJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG9yaWdpblg6ICdlbmQnLFxuICAgICAgICAgIG9yaWdpblk6ICdib3R0b20nLFxuICAgICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxuICAgICAgICAgIG92ZXJsYXlZOiAnYm90dG9tJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG9yaWdpblg6ICdzdGFydCcsXG4gICAgICAgICAgb3JpZ2luWTogJ2JvdHRvbScsXG4gICAgICAgICAgb3ZlcmxheVg6ICdlbmQnLFxuICAgICAgICAgIG92ZXJsYXlZOiAnYm90dG9tJyxcbiAgICAgICAgfSxcbiAgICAgIF0pO1xuICAgIH1cbiAgICBjb25zdCB0OiBBY3RpdmVDb250ZXh0TWVudVN1YiA9IHtcbiAgICAgIHN1Ym1lbnUsXG4gICAgICBpZDogdGhpcy5pZCsrLFxuICAgICAgaXNNZW51SG92ZXJlZDogbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSksXG4gICAgICBpc1RyaWdnZXJIb3ZlcmVkOiBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKSxcbiAgICB9O1xuICAgIGNvbnN0IG1lbnVJbmplY3RvciA9IG5ldyBNZW51SW5qZWN0b3IodCwgdGhpcy5faW5qZWN0b3IsIGNvbnRleHQpO1xuICAgIGNvbnN0IGNvbXBvbmVudFBvcnRhbCA9IG5ldyBDb21wb25lbnRQb3J0YWwoXG4gICAgICBtZW51Q29tcG9uZW50LFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgbWVudUluamVjdG9yLFxuICAgICk7XG4gICAgY29uc3Qgb3ZlcmxheVJlZiA9IHRoaXMub3ZlcmxheS5jcmVhdGUoe1xuICAgICAgcG9zaXRpb25TdHJhdGVneSxcbiAgICAgIHBhbmVsQ2xhc3M6ICduZ3gtY29udGV4dG1lbnUnLFxuICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHRoaXMuc2Nyb2xsU3RyYXRlZ3kuY2xvc2UoKSxcbiAgICB9KTtcbiAgICBjb25zdCBjb21wb25lbnQgPSBvdmVybGF5UmVmLmF0dGFjaDxhbnk+KGNvbXBvbmVudFBvcnRhbCk7XG4gICAgY29uc3QgcmVzID0geyBvdmVybGF5UmVmLCBjb21wb25lbnQsIC4uLnQsIG1lbnVDbG9zZSwgbWVudUFjdGlvbiB9O1xuICAgIHRoaXMubWVudXMucHVzaChyZXMpO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgZ2V0Q3VycmVudExldmVsKCkge1xuICAgIHJldHVybiB0aGlzLm1lbnVzLmxlbmd0aDtcbiAgfVxuICBjbG9zZUFsbChjb250ZXh0PzogYW55LCBpZHggPSAwKSB7XG4gICAgZm9yIChsZXQgaW5kZXggPSBpZHg7IGluZGV4IDwgdGhpcy5tZW51cy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IG1lbnUgPSB0aGlzLm1lbnVzW2luZGV4XTtcbiAgICAgIHRoaXMuZGVzdHJveU1lbnUobWVudSwgY29udGV4dCk7XG4gICAgfVxuICAgIHRoaXMubWVudXMuc3BsaWNlKGlkeCwgdGhpcy5tZW51cy5sZW5ndGgpO1xuICB9XG4gIGRlc3Ryb3lNZW51KG1lbnU6IEFjdGl2ZUNvbnRleHRNZW51LCBjb250ZXh0PzogYW55KSB7XG4gICAgbWVudS5jb21wb25lbnQuaW5zdGFuY2UuX3N0YXRlID0gJ2V4aXQnO1xuICAgIGlmIChtZW51LmNvbXBvbmVudC5pbnN0YW5jZS5sYXp5KSB7XG4gICAgICBtZW51LmNvbXBvbmVudC5pbnN0YW5jZS5fYW5pbWF0aW9uRG9uZVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKGV2ZW50OiBhbnkpID0+IGV2ZW50LnRvU3RhdGUgPT09ICdleGl0JyksXG4gICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICBtZW51Lm92ZXJsYXlSZWYuZGV0YWNoKCk7XG4gICAgICAgICAgbWVudS5vdmVybGF5UmVmLmRpc3Bvc2UoKTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1lbnUub3ZlcmxheVJlZi5kZXRhY2goKTtcbiAgICAgIG1lbnUub3ZlcmxheVJlZi5kaXNwb3NlKCk7XG4gICAgfVxuICAgIGlmIChjb250ZXh0KSB7XG4gICAgICBtZW51Lm1lbnVBY3Rpb24ubmV4dChjb250ZXh0KTtcbiAgICB9XG4gICAgbWVudS5tZW51Q2xvc2UubmV4dCgpO1xuICB9XG4gIGNsb3NlKG1lbnU6IEFjdGl2ZUNvbnRleHRNZW51LCBtZW51SW5kZXg6IG51bWJlciwgY29udGV4dD86IGFueSkge1xuICAgIHRoaXMuZGVzdHJveU1lbnUobWVudSwgY29udGV4dCk7XG4gICAgdGhpcy5tZW51cy5zcGxpY2UobWVudUluZGV4LCAxKTtcbiAgfVxuICBjaGVja091dHNpZGVDbGljaygkZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBmb3IgKGNvbnN0IG0gb2YgdGhpcy5tZW51cykge1xuICAgICAgY29uc3QgY2xpY2tlZEluc2lkZSA9IG0uY29tcG9uZW50LmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoXG4gICAgICAgICRldmVudC50YXJnZXQsXG4gICAgICApO1xuICAgICAgaWYgKGNsaWNrZWRJbnNpZGUpIHtcbiAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNsb3NlQWxsKCk7XG4gIH1cbiAgY2xvc2VTdWJNZW51KGlkOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBtZW51SW5kZXggPSB0aGlzLm1lbnVzLmZpbmRJbmRleChuID0+IG4uaWQgPT09IGlkKTtcbiAgICBpZiAobWVudUluZGV4ID09PSAtMSB8fCBtZW51SW5kZXggIT09IHRoaXMubWVudXMubGVuZ3RoIC0gMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBtYWtlIHN1cmUgd2UgY2FuIGNsb3NlIHRoZSBjdXJyZW50IG1lbnVcbiAgICBjb25zdCBtZW51ID0gdGhpcy5tZW51c1ttZW51SW5kZXhdO1xuICAgIGlmIChtZW51LmlzTWVudUhvdmVyZWQuZ2V0VmFsdWUoKSB8fCBtZW51LmlzVHJpZ2dlckhvdmVyZWQuZ2V0VmFsdWUoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBjbG9zZSBhbGwgbWVudXMgdXAgaWYgcG9zc2libGVcbiAgICBmb3IgKGxldCBpbmRleCA9IHRoaXMubWVudXMubGVuZ3RoIC0gMTsgaW5kZXggPj0gMTsgaW5kZXgtLSkge1xuICAgICAgY29uc3QgbSA9IHRoaXMubWVudXNbaW5kZXhdO1xuICAgICAgaWYgKCFtLmlzTWVudUhvdmVyZWQuZ2V0VmFsdWUoKSAmJiAhbS5pc1RyaWdnZXJIb3ZlcmVkLmdldFZhbHVlKCkpIHtcbiAgICAgICAgdGhpcy5jbG9zZShtLCBpbmRleCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBDb250ZXh0TWVudVNlcnZpY2UsIEFjdGl2ZUNvbnRleHRNZW51IH0gZnJvbSAnLi9jb250ZXh0LW1lbnUuc2VydmljZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tjb250ZXh0TWVudVRyaWdnZXJdJyxcbiAgZXhwb3J0QXM6ICdjb250ZXh0TWVudVRyaWdnZXInLFxufSlcbmV4cG9ydCBjbGFzcyBDb250ZXh0TWVudVRyaWdnZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGNvbnRleHRNZW51VHJpZ2dlcjogYW55O1xuICBASW5wdXQoKSBtZW51Q29udGV4dDogYW55O1xuICBASW5wdXQoKSBob2xkVG9EaXNwbGF5ID0gMTAwMDtcbiAgQE91dHB1dCgpIG1lbnVBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG1lbnVDbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgbWVudTogQWN0aXZlQ29udGV4dE1lbnU7XG4gIHZpc2libGUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBtb3VzZURvd25UaW1lb3V0SWQ6IGFueTtcbiAgcHJpdmF0ZSBzdWI6IFN1YnNjcmlwdGlvbjtcblxuICBASG9zdExpc3RlbmVyKCdjb250ZXh0bWVudScsIFsnJGV2ZW50J10pXG4gIGhhbmRsZU1lbnUoJGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5tZW51ID0gdGhpcy5jb250ZXh0TWVudVNlcnZpY2Uuc2hvdyhcbiAgICAgICRldmVudCxcbiAgICAgIHRoaXMuY29udGV4dE1lbnVUcmlnZ2VyLFxuICAgICAgdGhpcy5tZW51Q29udGV4dCxcbiAgICAgIHRoaXMubWVudUNsb3NlLFxuICAgICAgdGhpcy5tZW51QWN0aW9uLFxuICAgICk7XG4gICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBbJyRldmVudCddKVxuICBoYW5kbGVNb3VzZURvd24oJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5ob2xkVG9EaXNwbGF5ID49IDApIHtcbiAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICRldmVudC5jbGllbnRZID0gJGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WTtcbiAgICAgICRldmVudC5jbGllbnRYID0gJGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WDtcblxuICAgICAgdGhpcy5tb3VzZURvd25UaW1lb3V0SWQgPSBzZXRUaW1lb3V0KFxuICAgICAgICAoKSA9PiB0aGlzLmhhbmRsZU1lbnUoJGV2ZW50KSxcbiAgICAgICAgdGhpcy5ob2xkVG9EaXNwbGF5LFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd0b3VjaGVuZCcpXG4gIGhhbmRsZU1vdXNlVXAoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMubW91c2VEb3duVGltZW91dElkKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29udGV4dE1lbnVTZXJ2aWNlOiBDb250ZXh0TWVudVNlcnZpY2UpIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zdWIgPSB0aGlzLm1lbnVDbG9zZS5zdWJzY3JpYmUoKCkgPT4gdGhpcy52aXNpYmxlID0gZmFsc2UpO1xuICB9XG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc3ViLnVuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG4gIEFjdGl2ZUNvbnRleHRNZW51LFxuICBDb250ZXh0TWVudVNlcnZpY2UsXG59IGZyb20gJy4vY29udGV4dC1tZW51LnNlcnZpY2UnO1xuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdbY29udGV4dFN1Ym1lbnVUcmlnZ2VyXScgfSlcbmV4cG9ydCBjbGFzcyBDb250ZXh0U3VibWVudVRyaWdnZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBob3ZlckRlbGF5ID0gNTAwO1xuICBASW5wdXQoKSBvcGVuRGVsYXkgPSAyMDA7XG4gIEBJbnB1dCgpIGNvbnRleHRTdWJtZW51VHJpZ2dlcjogYW55O1xuICBASW5wdXQoKSBtZW51Q29udGV4dDogYW55O1xuICBAT3V0cHV0KCkgbWVudUFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgbWVudUNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBtZW51OiBBY3RpdmVDb250ZXh0TWVudTtcbiAgb3BlbnRpbWVyOiBhbnk7XG4gIGNsb3NldGltZXI6IGFueTtcbiAgdmlzaWJsZSA9IGZhbHNlO1xuICBsZXZlbCA9IDE7XG5cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCcsICd0cnVlJ10pXG4gIGhhbmRsZVN1Yk1lbnVDbGljaygkZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNsZWFyVGltZW91dCh0aGlzLm9wZW50aW1lcik7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuY2xvc2V0aW1lcik7XG4gICAgdGhpcy5tZW51ID0gdGhpcy5jb250ZXh0TWVudVNlcnZpY2Uuc2hvdyhcbiAgICAgICRldmVudCxcbiAgICAgIHRoaXMuY29udGV4dFN1Ym1lbnVUcmlnZ2VyLFxuICAgICAgdGhpcy5tZW51Q29udGV4dCxcbiAgICAgIHRoaXMubWVudUNsb3NlLFxuICAgICAgdGhpcy5tZW51QWN0aW9uLFxuICAgICAgdHJ1ZSxcbiAgICAgIHRoaXMubGV2ZWwsXG4gICAgKTtcbiAgICB0aGlzLnZpc2libGUgPSB0cnVlO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2VvdmVyJywgWyckZXZlbnQnXSlcbiAgaGFuZGxlU3ViTWVudUVudGVyKCRldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICh0aGlzLm1lbnUpIHtcbiAgICAgIHRoaXMubWVudS5pc1RyaWdnZXJIb3ZlcmVkLm5leHQodHJ1ZSk7XG4gICAgfVxuICAgIGNsZWFyVGltZW91dCh0aGlzLmNsb3NldGltZXIpO1xuICAgIHRoaXMub3BlbnRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLm1lbnUgPSB0aGlzLmNvbnRleHRNZW51U2VydmljZS5zaG93KFxuICAgICAgICAkZXZlbnQsXG4gICAgICAgIHRoaXMuY29udGV4dFN1Ym1lbnVUcmlnZ2VyLFxuICAgICAgICB0aGlzLm1lbnVDb250ZXh0LFxuICAgICAgICB0aGlzLm1lbnVDbG9zZSxcbiAgICAgICAgdGhpcy5tZW51QWN0aW9uLFxuICAgICAgICB0cnVlLFxuICAgICAgICB0aGlzLmxldmVsLFxuICAgICAgKTtcbiAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG4gICAgICB0aGlzLm9wZW50aW1lciA9IG51bGw7XG4gICAgfSwgdGhpcy5vcGVuRGVsYXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIHN1Ym1lbnUgaGlkZXMgYWZ0ZXIgY3Vyc29yIGhhcyBleGl0ZWQgZm9yIGEgcGVyaW9kIG9mIHRpbWVcbiAgICovXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlb3V0JywgWyckZXZlbnQnXSlcbiAgaGFuZGxlU3ViTWVudUV4aXQoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMub3BlbnRpbWVyKTtcbiAgICBpZiAodGhpcy5tZW51KSB7XG4gICAgICB0aGlzLm1lbnUuaXNUcmlnZ2VySG92ZXJlZC5uZXh0KGZhbHNlKTtcbiAgICB9XG4gICAgdGhpcy5jbG9zZXRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5tZW51KSB7XG4gICAgICAgIHRoaXMubWVudS5pc1RyaWdnZXJIb3ZlcmVkLm5leHQoZmFsc2UpO1xuICAgICAgICB0aGlzLmNvbnRleHRNZW51U2VydmljZS5jbG9zZVN1Yk1lbnUodGhpcy5tZW51LmlkKTtcbiAgICAgICAgdGhpcy5tZW51ID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgfSwgdGhpcy5ob3ZlckRlbGF5KTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29udGV4dE1lbnVTZXJ2aWNlOiBDb250ZXh0TWVudVNlcnZpY2UpIHtcbiAgICAvLyBnZXQgY3VycmVudCBsZXZlbFxuICAgIHNldFRpbWVvdXQoKCkgPT4gKHRoaXMubGV2ZWwgPSB0aGlzLmNvbnRleHRNZW51U2VydmljZS5nZXRDdXJyZW50TGV2ZWwoKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIGlmIG92ZXJ3cml0dGVuIG1ha2Ugc3VyZSB0byBjbGVhciB0aW1lb3V0c1xuICAgKi9cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMub3BlbnRpbWVyKTtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5jbG9zZXRpbWVyKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBIb3N0TGlzdGVuZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFuaW1hdGlvbkV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5cbmltcG9ydCB7IENvbnRleHRNZW51U2VydmljZSB9IGZyb20gJy4vY29udGV4dC1tZW51LnNlcnZpY2UnO1xuaW1wb3J0IHsgTWVudVBhY2thZ2UgfSBmcm9tICcuL2NvbnRleHQtbWVudS1pbmplY3Rvcic7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1tZW51JyxcbiAgdGVtcGxhdGU6IGBgLFxufSlcbmV4cG9ydCBjbGFzcyBNZW51Q29tcG9uZW50IHtcbiAgLyoqIFN0YXRlIG9mIHRoZSBkaWFsb2cgYW5pbWF0aW9uLiAqL1xuICBfc3RhdGU6ICd2b2lkJyB8ICdlbnRlcicgfCAnZXhpdCcgPSAnZW50ZXInO1xuICBfYW5pbWF0aW9uRG9uZSA9IG5ldyBTdWJqZWN0PEFuaW1hdGlvbkV2ZW50PigpO1xuICAvKiogc2V0IGxhenkgdG8gRmFsc2UgaWYgeW91IGRvIG5vdCBoYXZlIGFuaW1hdGlvbnMgKi9cbiAgbGF6eSA9IHRydWU7XG4gIGNsb3NldGltZXI6IGFueTtcblxuICBASG9zdExpc3RlbmVyKCdtb3VzZW92ZXInKVxuICBoYW5kbGVNb3VzZW92ZXIoKSB7XG4gICAgaWYgKCF0aGlzLm1lbnVQYWNrYWdlLm1lbnUuc3VibWVudSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm1lbnVQYWNrYWdlLm1lbnUuaXNNZW51SG92ZXJlZC5uZXh0KHRydWUpO1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmNsb3NldGltZXIpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2VsZWF2ZScpXG4gIGhhbmRsZU1vdXNlbGVhdmUoKSB7XG4gICAgaWYgKCF0aGlzLm1lbnVQYWNrYWdlLm1lbnUuc3VibWVudSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm1lbnVQYWNrYWdlLm1lbnUuaXNNZW51SG92ZXJlZC5uZXh0KGZhbHNlKTtcbiAgICB0aGlzLmNsb3NldGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuY29udGV4dE1lbnVTZXJ2aWNlLmNsb3NlU3ViTWVudSh0aGlzLm1lbnVQYWNrYWdlLm1lbnUuaWQpO1xuICAgIH0sIDUwMCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXG4gIGhhbmRsZVdpbmRvd0NsaWNrKCRldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMuY29udGV4dE1lbnVTZXJ2aWNlLmNoZWNrT3V0c2lkZUNsaWNrKCRldmVudCk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbWVudVBhY2thZ2U6IE1lbnVQYWNrYWdlLFxuICAgIHB1YmxpYyBjb250ZXh0TWVudVNlcnZpY2U6IENvbnRleHRNZW51U2VydmljZSxcbiAgKSB7fVxuXG4gIC8qKiBDYWxsYmFjayB0aGF0IGlzIGludm9rZWQgd2hlbiB0aGUgbWVudSBhbmltYXRpb24gY29tcGxldGVzLiAqL1xuICBfb25BbmltYXRpb25Eb25lKGV2ZW50OiBBbmltYXRpb25FdmVudCkge1xuICAgIHRoaXMuX2FuaW1hdGlvbkRvbmUubmV4dChldmVudCk7XG4gIH1cbn1cbiIsImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPdmVybGF5TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgUG9ydGFsTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5cbmltcG9ydCB7IENvbnRleHRNZW51VHJpZ2dlckRpcmVjdGl2ZSB9IGZyb20gJy4vY29udGV4dC1tZW51LXRyaWdnZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IENvbnRleHRTdWJtZW51VHJpZ2dlckRpcmVjdGl2ZSB9IGZyb20gJy4vY29udGV4dC1zdWJtZW51LXRyaWdnZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IE1lbnVDb21wb25lbnQgfSBmcm9tICcuL21lbnUuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgQ29udGV4dE1lbnVUcmlnZ2VyRGlyZWN0aXZlLFxuICAgIENvbnRleHRTdWJtZW51VHJpZ2dlckRpcmVjdGl2ZSxcbiAgICBNZW51Q29tcG9uZW50LFxuICBdLFxuICBleHBvcnRzOiBbQ29udGV4dE1lbnVUcmlnZ2VyRGlyZWN0aXZlLCBDb250ZXh0U3VibWVudVRyaWdnZXJEaXJlY3RpdmVdLFxuICBpbXBvcnRzOiBbUG9ydGFsTW9kdWxlLCBPdmVybGF5TW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgQ29udGV4dE1lbnVNb2R1bGUge31cbiJdLCJuYW1lcyI6WyJFbGVtZW50UmVmIiwiQmVoYXZpb3JTdWJqZWN0IiwiQ29tcG9uZW50UG9ydGFsIiwiZmlsdGVyIiwidGFrZSIsInRzbGliXzEuX192YWx1ZXMiLCJJbmplY3RhYmxlIiwiT3ZlcmxheSIsIlNjcm9sbFN0cmF0ZWd5T3B0aW9ucyIsIkluamVjdG9yIiwiRXZlbnRFbWl0dGVyIiwiRGlyZWN0aXZlIiwiSW5wdXQiLCJPdXRwdXQiLCJIb3N0TGlzdGVuZXIiLCJTdWJqZWN0IiwiQ29tcG9uZW50IiwiTmdNb2R1bGUiLCJQb3J0YWxNb2R1bGUiLCJPdmVybGF5TW9kdWxlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7SUFBQTs7Ozs7Ozs7Ozs7Ozs7QUFjQSxJQWVPLElBQUksUUFBUSxHQUFHO1FBQ2xCLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxJQUFJLFNBQVMsUUFBUSxDQUFDLENBQUM7WUFDM0MsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2pELENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pCLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQztvQkFBRSxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxD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
|
724
|
+
//# sourceMappingURL=ctrl-ngx-rightclick.umd.js.map
|