ngx-toastr 8.7.2 → 8.7.3
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/bundles/ngx-toastr.umd.js +274 -5
- package/bundles/ngx-toastr.umd.js.map +1 -1
- package/bundles/ngx-toastr.umd.min.js +1 -1
- package/bundles/ngx-toastr.umd.min.js.map +1 -1
- package/esm2015/ngx-toastr.js +2 -2
- package/esm2015/public_api.js +3 -1
- package/esm2015/toastr/toast-noanimation.component.js +260 -0
- package/esm5/ngx-toastr.js +2 -2
- package/esm5/public_api.js +3 -1
- package/esm5/toastr/toast-noanimation.component.js +285 -0
- package/fesm2015/ngx-toastr.js +238 -3
- package/fesm2015/ngx-toastr.js.map +1 -1
- package/fesm5/ngx-toastr.js +265 -3
- package/fesm5/ngx-toastr.js.map +1 -1
- package/ngx-toastr.metadata.json +1 -1
- package/package.json +1 -1
- package/public_api.d.ts +2 -0
- package/toastr/toast-noanimation.component.d.ts +43 -0
package/esm5/public_api.js
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
* @fileoverview added by tsickle
|
3
3
|
* @suppress {checkTypes} checked by tsc
|
4
4
|
*/
|
5
|
+
export { ToastContainerDirective, ToastContainerModule } from './toastr/toast.directive';
|
5
6
|
export { Toast } from './toastr/toast.component';
|
6
7
|
export { ToastrService } from './toastr/toastr.service';
|
7
8
|
export { ToastPackage } from './toastr/toastr-config';
|
@@ -9,9 +10,10 @@ export { DefaultGlobalConfig } from './toastr/default-config';
|
|
9
10
|
export { ToastrModule } from './toastr/toastr.module';
|
10
11
|
export { ToastRef, ToastInjector } from './toastr/toast-injector';
|
11
12
|
export { TOAST_CONFIG } from './toastr/toast-token';
|
13
|
+
export { ToastNoAnimation, ToastNoAnimationModule } from './toastr/toast-noanimation.component';
|
12
14
|
export { ComponentPortal, BasePortalHost } from './portal/portal';
|
13
15
|
export { Overlay, OVERLAY_PROVIDERS } from './overlay/overlay';
|
14
16
|
export { OverlayContainer } from './overlay/overlay-container';
|
15
17
|
export { OverlayRef } from './overlay/overlay-ref';
|
16
18
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC10b2FzdHIvIiwic291cmNlcyI6WyJwdWJsaWNfYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSw4REFBYywwQkFBMEIsQ0FBQztBQUN6QyxzQkFBYywwQkFBMEIsQ0FBQztBQUN6Qyw4QkFBYyx5QkFBeUIsQ0FBQztBQUN4Qyw2QkFBYyx3QkFBd0IsQ0FBQztBQUN2QyxvQ0FBYyx5QkFBeUIsQ0FBQztBQUN4Qyw2QkFBYyx3QkFBd0IsQ0FBQztBQUN2Qyx3Q0FBYyx5QkFBeUIsQ0FBQztBQUN4Qyw2QkFBYyxzQkFBc0IsQ0FBQztBQUNyQyx5REFBYyxzQ0FBc0MsQ0FBQztBQUVyRCxnREFBYyxpQkFBaUIsQ0FBQztBQUNoQywyQ0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxpQ0FBYyw2QkFBNkIsQ0FBQztBQUM1QywyQkFBYyx1QkFBdUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vdG9hc3RyL3RvYXN0LmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3RvYXN0ci90b2FzdC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90b2FzdHIvdG9hc3RyLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi90b2FzdHIvdG9hc3RyLWNvbmZpZyc7XG5leHBvcnQgKiBmcm9tICcuL3RvYXN0ci9kZWZhdWx0LWNvbmZpZyc7XG5leHBvcnQgKiBmcm9tICcuL3RvYXN0ci90b2FzdHIubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vdG9hc3RyL3RvYXN0LWluamVjdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vdG9hc3RyL3RvYXN0LXRva2VuJztcbmV4cG9ydCAqIGZyb20gJy4vdG9hc3RyL3RvYXN0LW5vYW5pbWF0aW9uLmNvbXBvbmVudCc7XG5cbmV4cG9ydCAqIGZyb20gJy4vcG9ydGFsL3BvcnRhbCc7XG5leHBvcnQgKiBmcm9tICcuL292ZXJsYXkvb3ZlcmxheSc7XG5leHBvcnQgKiBmcm9tICcuL292ZXJsYXkvb3ZlcmxheS1jb250YWluZXInO1xuZXhwb3J0ICogZnJvbSAnLi9vdmVybGF5L292ZXJsYXktcmVmJztcbiJdfQ==
|
@@ -0,0 +1,285 @@
|
|
1
|
+
/**
|
2
|
+
* @fileoverview added by tsickle
|
3
|
+
* @suppress {checkTypes} checked by tsc
|
4
|
+
*/
|
5
|
+
import { CommonModule } from '@angular/common';
|
6
|
+
import { ApplicationRef, Component, HostBinding, HostListener, NgModule, } from '@angular/core';
|
7
|
+
import { ToastPackage } from './toastr-config';
|
8
|
+
import { ToastrService } from './toastr.service';
|
9
|
+
var ToastNoAnimation = /** @class */ (function () {
|
10
|
+
function ToastNoAnimation(toastrService, toastPackage, appRef) {
|
11
|
+
var _this = this;
|
12
|
+
this.toastrService = toastrService;
|
13
|
+
this.toastPackage = toastPackage;
|
14
|
+
this.appRef = appRef;
|
15
|
+
/**
|
16
|
+
* width of progress bar
|
17
|
+
*/
|
18
|
+
this.width = -1;
|
19
|
+
/**
|
20
|
+
* a combination of toast type and options.toastClass
|
21
|
+
*/
|
22
|
+
this.toastClasses = '';
|
23
|
+
/**
|
24
|
+
* controls animation
|
25
|
+
*/
|
26
|
+
this.state = 'inactive';
|
27
|
+
this.message = toastPackage.message;
|
28
|
+
this.title = toastPackage.title;
|
29
|
+
this.options = toastPackage.config;
|
30
|
+
this.toastClasses = toastPackage.toastType + " " + toastPackage.config.toastClass;
|
31
|
+
this.sub = toastPackage.toastRef.afterActivate().subscribe(function () {
|
32
|
+
_this.activateToast();
|
33
|
+
});
|
34
|
+
this.sub1 = toastPackage.toastRef.manualClosed().subscribe(function () {
|
35
|
+
_this.remove();
|
36
|
+
});
|
37
|
+
}
|
38
|
+
Object.defineProperty(ToastNoAnimation.prototype, "displayStyle", {
|
39
|
+
get: /**
|
40
|
+
* @return {?}
|
41
|
+
*/
|
42
|
+
function () {
|
43
|
+
if (this.state === 'inactive') {
|
44
|
+
return 'none';
|
45
|
+
}
|
46
|
+
return 'inherit';
|
47
|
+
},
|
48
|
+
enumerable: true,
|
49
|
+
configurable: true
|
50
|
+
});
|
51
|
+
/**
|
52
|
+
* @return {?}
|
53
|
+
*/
|
54
|
+
ToastNoAnimation.prototype.ngOnDestroy = /**
|
55
|
+
* @return {?}
|
56
|
+
*/
|
57
|
+
function () {
|
58
|
+
this.sub.unsubscribe();
|
59
|
+
this.sub1.unsubscribe();
|
60
|
+
clearInterval(this.intervalId);
|
61
|
+
clearTimeout(this.timeout);
|
62
|
+
};
|
63
|
+
/**
|
64
|
+
* activates toast and sets timeout
|
65
|
+
*/
|
66
|
+
/**
|
67
|
+
* activates toast and sets timeout
|
68
|
+
* @return {?}
|
69
|
+
*/
|
70
|
+
ToastNoAnimation.prototype.activateToast = /**
|
71
|
+
* activates toast and sets timeout
|
72
|
+
* @return {?}
|
73
|
+
*/
|
74
|
+
function () {
|
75
|
+
var _this = this;
|
76
|
+
this.state = 'active';
|
77
|
+
if (!this.options.disableTimeOut && this.options.timeOut) {
|
78
|
+
this.timeout = setTimeout(function () {
|
79
|
+
_this.remove();
|
80
|
+
}, this.options.timeOut);
|
81
|
+
this.hideTime = new Date().getTime() + this.options.timeOut;
|
82
|
+
if (this.options.progressBar) {
|
83
|
+
this.intervalId = setInterval(function () { return _this.updateProgress(); }, 10);
|
84
|
+
}
|
85
|
+
}
|
86
|
+
if (this.options.onActivateTick) {
|
87
|
+
this.appRef.tick();
|
88
|
+
}
|
89
|
+
};
|
90
|
+
/**
|
91
|
+
* updates progress bar width
|
92
|
+
*/
|
93
|
+
/**
|
94
|
+
* updates progress bar width
|
95
|
+
* @return {?}
|
96
|
+
*/
|
97
|
+
ToastNoAnimation.prototype.updateProgress = /**
|
98
|
+
* updates progress bar width
|
99
|
+
* @return {?}
|
100
|
+
*/
|
101
|
+
function () {
|
102
|
+
if (this.width === 0 || this.width === 100 || !this.options.timeOut) {
|
103
|
+
return;
|
104
|
+
}
|
105
|
+
var /** @type {?} */ now = new Date().getTime();
|
106
|
+
var /** @type {?} */ remaining = this.hideTime - now;
|
107
|
+
this.width = remaining / this.options.timeOut * 100;
|
108
|
+
if (this.options.progressAnimation === 'increasing') {
|
109
|
+
this.width = 100 - this.width;
|
110
|
+
}
|
111
|
+
if (this.width <= 0) {
|
112
|
+
this.width = 0;
|
113
|
+
}
|
114
|
+
if (this.width >= 100) {
|
115
|
+
this.width = 100;
|
116
|
+
}
|
117
|
+
};
|
118
|
+
/**
|
119
|
+
* tells toastrService to remove this toast after animation time
|
120
|
+
*/
|
121
|
+
/**
|
122
|
+
* tells toastrService to remove this toast after animation time
|
123
|
+
* @return {?}
|
124
|
+
*/
|
125
|
+
ToastNoAnimation.prototype.remove = /**
|
126
|
+
* tells toastrService to remove this toast after animation time
|
127
|
+
* @return {?}
|
128
|
+
*/
|
129
|
+
function () {
|
130
|
+
var _this = this;
|
131
|
+
if (this.state === 'removed') {
|
132
|
+
return;
|
133
|
+
}
|
134
|
+
clearTimeout(this.timeout);
|
135
|
+
this.state = 'removed';
|
136
|
+
this.timeout = setTimeout(function () { return _this.toastrService.remove(_this.toastPackage.toastId); });
|
137
|
+
};
|
138
|
+
/**
|
139
|
+
* @return {?}
|
140
|
+
*/
|
141
|
+
ToastNoAnimation.prototype.tapToast = /**
|
142
|
+
* @return {?}
|
143
|
+
*/
|
144
|
+
function () {
|
145
|
+
if (this.state === 'removed') {
|
146
|
+
return;
|
147
|
+
}
|
148
|
+
this.toastPackage.triggerTap();
|
149
|
+
if (this.options.tapToDismiss) {
|
150
|
+
this.remove();
|
151
|
+
}
|
152
|
+
};
|
153
|
+
/**
|
154
|
+
* @return {?}
|
155
|
+
*/
|
156
|
+
ToastNoAnimation.prototype.stickAround = /**
|
157
|
+
* @return {?}
|
158
|
+
*/
|
159
|
+
function () {
|
160
|
+
if (this.state === 'removed') {
|
161
|
+
return;
|
162
|
+
}
|
163
|
+
clearTimeout(this.timeout);
|
164
|
+
this.options.timeOut = 0;
|
165
|
+
this.hideTime = 0;
|
166
|
+
// disable progressBar
|
167
|
+
clearInterval(this.intervalId);
|
168
|
+
this.width = 0;
|
169
|
+
};
|
170
|
+
/**
|
171
|
+
* @return {?}
|
172
|
+
*/
|
173
|
+
ToastNoAnimation.prototype.delayedHideToast = /**
|
174
|
+
* @return {?}
|
175
|
+
*/
|
176
|
+
function () {
|
177
|
+
var _this = this;
|
178
|
+
if (this.options.disableTimeOut
|
179
|
+
|| this.options.extendedTimeOut === 0
|
180
|
+
|| this.state === 'removed') {
|
181
|
+
return;
|
182
|
+
}
|
183
|
+
this.timeout = setTimeout(function () { return _this.remove(); }, this.options.extendedTimeOut);
|
184
|
+
this.options.timeOut = this.options.extendedTimeOut;
|
185
|
+
this.hideTime = new Date().getTime() + (this.options.timeOut || 0);
|
186
|
+
this.width = -1;
|
187
|
+
if (this.options.progressBar) {
|
188
|
+
this.intervalId = setInterval(function () { return _this.updateProgress(); }, 10);
|
189
|
+
}
|
190
|
+
};
|
191
|
+
ToastNoAnimation.decorators = [
|
192
|
+
{ type: Component, args: [{
|
193
|
+
selector: '[toast-component]',
|
194
|
+
template: "\n <button *ngIf=\"options.closeButton\" (click)=\"remove()\" class=\"toast-close-button\" aria-label=\"Close\">\n <span aria-hidden=\"true\">×</span>\n </button>\n <div *ngIf=\"title\" [class]=\"options.titleClass\" [attr.aria-label]=\"title\">\n {{ title }}\n </div>\n <div *ngIf=\"message && options.enableHtml\" role=\"alert\" aria-live=\"polite\"\n [class]=\"options.messageClass\" [innerHTML]=\"message\">\n </div>\n <div *ngIf=\"message && !options.enableHtml\" role=\"alert\" aria-live=\"polite\"\n [class]=\"options.messageClass\" [attr.aria-label]=\"message\">\n {{ message }}\n </div>\n <div *ngIf=\"options.progressBar\">\n <div class=\"toast-progress\" [style.width]=\"width + '%'\"></div>\n </div>\n ",
|
195
|
+
},] },
|
196
|
+
];
|
197
|
+
/** @nocollapse */
|
198
|
+
ToastNoAnimation.ctorParameters = function () { return [
|
199
|
+
{ type: ToastrService, },
|
200
|
+
{ type: ToastPackage, },
|
201
|
+
{ type: ApplicationRef, },
|
202
|
+
]; };
|
203
|
+
ToastNoAnimation.propDecorators = {
|
204
|
+
"toastClasses": [{ type: HostBinding, args: ['class',] },],
|
205
|
+
"displayStyle": [{ type: HostBinding, args: ['style.display',] },],
|
206
|
+
"tapToast": [{ type: HostListener, args: ['click',] },],
|
207
|
+
"stickAround": [{ type: HostListener, args: ['mouseenter',] },],
|
208
|
+
"delayedHideToast": [{ type: HostListener, args: ['mouseleave',] },],
|
209
|
+
};
|
210
|
+
return ToastNoAnimation;
|
211
|
+
}());
|
212
|
+
export { ToastNoAnimation };
|
213
|
+
function ToastNoAnimation_tsickle_Closure_declarations() {
|
214
|
+
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
|
215
|
+
ToastNoAnimation.decorators;
|
216
|
+
/**
|
217
|
+
* @nocollapse
|
218
|
+
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
|
219
|
+
*/
|
220
|
+
ToastNoAnimation.ctorParameters;
|
221
|
+
/** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
|
222
|
+
ToastNoAnimation.propDecorators;
|
223
|
+
/** @type {?} */
|
224
|
+
ToastNoAnimation.prototype.message;
|
225
|
+
/** @type {?} */
|
226
|
+
ToastNoAnimation.prototype.title;
|
227
|
+
/** @type {?} */
|
228
|
+
ToastNoAnimation.prototype.options;
|
229
|
+
/**
|
230
|
+
* width of progress bar
|
231
|
+
* @type {?}
|
232
|
+
*/
|
233
|
+
ToastNoAnimation.prototype.width;
|
234
|
+
/**
|
235
|
+
* a combination of toast type and options.toastClass
|
236
|
+
* @type {?}
|
237
|
+
*/
|
238
|
+
ToastNoAnimation.prototype.toastClasses;
|
239
|
+
/**
|
240
|
+
* controls animation
|
241
|
+
* @type {?}
|
242
|
+
*/
|
243
|
+
ToastNoAnimation.prototype.state;
|
244
|
+
/** @type {?} */
|
245
|
+
ToastNoAnimation.prototype.timeout;
|
246
|
+
/** @type {?} */
|
247
|
+
ToastNoAnimation.prototype.intervalId;
|
248
|
+
/** @type {?} */
|
249
|
+
ToastNoAnimation.prototype.hideTime;
|
250
|
+
/** @type {?} */
|
251
|
+
ToastNoAnimation.prototype.sub;
|
252
|
+
/** @type {?} */
|
253
|
+
ToastNoAnimation.prototype.sub1;
|
254
|
+
/** @type {?} */
|
255
|
+
ToastNoAnimation.prototype.toastrService;
|
256
|
+
/** @type {?} */
|
257
|
+
ToastNoAnimation.prototype.toastPackage;
|
258
|
+
/** @type {?} */
|
259
|
+
ToastNoAnimation.prototype.appRef;
|
260
|
+
}
|
261
|
+
var ToastNoAnimationModule = /** @class */ (function () {
|
262
|
+
function ToastNoAnimationModule() {
|
263
|
+
}
|
264
|
+
ToastNoAnimationModule.decorators = [
|
265
|
+
{ type: NgModule, args: [{
|
266
|
+
imports: [CommonModule],
|
267
|
+
declarations: [ToastNoAnimation],
|
268
|
+
exports: [ToastNoAnimation],
|
269
|
+
entryComponents: [ToastNoAnimation],
|
270
|
+
},] },
|
271
|
+
];
|
272
|
+
return ToastNoAnimationModule;
|
273
|
+
}());
|
274
|
+
export { ToastNoAnimationModule };
|
275
|
+
function ToastNoAnimationModule_tsickle_Closure_declarations() {
|
276
|
+
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
|
277
|
+
ToastNoAnimationModule.decorators;
|
278
|
+
/**
|
279
|
+
* @nocollapse
|
280
|
+
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
|
281
|
+
*/
|
282
|
+
ToastNoAnimationModule.ctorParameters;
|
283
|
+
}
|
284
|
+
|
285
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3Qtbm9hbmltYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LXRvYXN0ci8iLCJzb3VyY2VzIjpbInRvYXN0ci90b2FzdC1ub2FuaW1hdGlvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsY0FBYyxFQUNkLFNBQVMsRUFDVCxXQUFXLEVBQ1gsWUFBWSxFQUNaLFFBQVEsR0FFVCxNQUFNLGVBQWUsQ0FBQztBQUt2QixPQUFPLEVBQW9CLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7SUFnRC9DLDBCQUNZLGFBQTRCLEVBQy9CLGNBQ0csTUFBc0I7UUFIbEMsaUJBaUJDO1FBaEJXLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQy9CLGlCQUFZLEdBQVosWUFBWTtRQUNULFdBQU0sR0FBTixNQUFNLENBQWdCOzs7O3FCQXZCMUIsQ0FBQyxDQUFDOzs7OzRCQUUyQixFQUFFOzs7O3FCQVcvQixVQUFVO1FBWWhCLElBQUksQ0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQztRQUNwQyxJQUFJLENBQUMsS0FBSyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUM7UUFDaEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDO1FBQ25DLElBQUksQ0FBQyxZQUFZLEdBQU0sWUFBWSxDQUFDLFNBQVMsU0FDM0MsWUFBWSxDQUFDLE1BQU0sQ0FBQyxVQUNwQixDQUFDO1FBQ0gsSUFBSSxDQUFDLEdBQUcsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDLFNBQVMsQ0FBQztZQUN6RCxLQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDdEIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLElB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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2dCQWdKNUIsUUFBUSxTQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsWUFBWSxFQUFFLENBQUMsZ0JBQWdCLENBQUM7b0JBQ2hDLE9BQU8sRUFBRSxDQUFDLGdCQUFnQixDQUFDO29CQUMzQixlQUFlLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztpQkFDcEM7O2lDQTFMRDs7U0EyTGEsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICBBcHBsaWNhdGlvblJlZixcclxuICBDb21wb25lbnQsXHJcbiAgSG9zdEJpbmRpbmcsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIE5nTW9kdWxlLFxyXG4gIE9uRGVzdHJveSxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuXHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHsgSW5kaXZpZHVhbENvbmZpZywgVG9hc3RQYWNrYWdlIH0gZnJvbSAnLi90b2FzdHItY29uZmlnJztcclxuaW1wb3J0IHsgVG9hc3RyU2VydmljZSB9IGZyb20gJy4vdG9hc3RyLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdbdG9hc3QtY29tcG9uZW50XScsXHJcbiAgdGVtcGxhdGU6IGBcclxuICA8YnV0dG9uICpuZ0lmPVwib3B0aW9ucy5jbG9zZUJ1dHRvblwiIChjbGljayk9XCJyZW1vdmUoKVwiIGNsYXNzPVwidG9hc3QtY2xvc2UtYnV0dG9uXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+XHJcbiAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPlxyXG4gIDwvYnV0dG9uPlxyXG4gIDxkaXYgKm5nSWY9XCJ0aXRsZVwiIFtjbGFzc109XCJvcHRpb25zLnRpdGxlQ2xhc3NcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInRpdGxlXCI+XHJcbiAgICB7eyB0aXRsZSB9fVxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgKm5nSWY9XCJtZXNzYWdlICYmIG9wdGlvbnMuZW5hYmxlSHRtbFwiIHJvbGU9XCJhbGVydFwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiXHJcbiAgICBbY2xhc3NdPVwib3B0aW9ucy5tZXNzYWdlQ2xhc3NcIiBbaW5uZXJIVE1MXT1cIm1lc3NhZ2VcIj5cclxuICA8L2Rpdj5cclxuICA8ZGl2ICpuZ0lmPVwibWVzc2FnZSAmJiAhb3B0aW9ucy5lbmFibGVIdG1sXCIgcm9sZT1cImFsZXJ0XCIgYXJpYS1saXZlPVwicG9saXRlXCJcclxuICAgIFtjbGFzc109XCJvcHRpb25zLm1lc3NhZ2VDbGFzc1wiIFthdHRyLmFyaWEtbGFiZWxdPVwibWVzc2FnZVwiPlxyXG4gICAge3sgbWVzc2FnZSB9fVxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgKm5nSWY9XCJvcHRpb25zLnByb2dyZXNzQmFyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwidG9hc3QtcHJvZ3Jlc3NcIiBbc3R5bGUud2lkdGhdPVwid2lkdGggKyAnJSdcIj48L2Rpdj5cclxuICA8L2Rpdj5cclxuICBgLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVG9hc3ROb0FuaW1hdGlvbiBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgbWVzc2FnZT86IHN0cmluZyB8IFNhZmVIdG1sIHwgbnVsbDtcclxuICB0aXRsZT86IHN0cmluZztcclxuICBvcHRpb25zOiBJbmRpdmlkdWFsQ29uZmlnO1xyXG4gIC8qKiB3aWR0aCBvZiBwcm9ncmVzcyBiYXIgKi9cclxuICB3aWR0aCA9IC0xO1xyXG4gIC8qKiBhIGNvbWJpbmF0aW9uIG9mIHRvYXN0IHR5cGUgYW5kIG9wdGlvbnMudG9hc3RDbGFzcyAqL1xyXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKSB0b2FzdENsYXNzZXMgPSAnJztcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS5kaXNwbGF5JylcclxuICBnZXQgZGlzcGxheVN0eWxlKCkge1xyXG4gICAgaWYgKHRoaXMuc3RhdGUgPT09ICdpbmFjdGl2ZScpIHtcclxuICAgICAgcmV0dXJuICdub25lJztcclxuICAgIH1cclxuICAgIHJldHVybiAnaW5oZXJpdCc7XHJcbiAgfVxyXG5cclxuICAvKiogY29udHJvbHMgYW5pbWF0aW9uICovXHJcbiAgc3RhdGUgPSAnaW5hY3RpdmUnO1xyXG4gIHByaXZhdGUgdGltZW91dDogYW55O1xyXG4gIHByaXZhdGUgaW50ZXJ2YWxJZDogYW55O1xyXG4gIHByaXZhdGUgaGlkZVRpbWU6IG51bWJlcjtcclxuICBwcml2YXRlIHN1YjogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgc3ViMTogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByb3RlY3RlZCB0b2FzdHJTZXJ2aWNlOiBUb2FzdHJTZXJ2aWNlLFxyXG4gICAgcHVibGljIHRvYXN0UGFja2FnZTogVG9hc3RQYWNrYWdlLFxyXG4gICAgcHJvdGVjdGVkIGFwcFJlZjogQXBwbGljYXRpb25SZWYsXHJcbiAgKSB7XHJcbiAgICB0aGlzLm1lc3NhZ2UgPSB0b2FzdFBhY2thZ2UubWVzc2FnZTtcclxuICAgIHRoaXMudGl0bGUgPSB0b2FzdFBhY2thZ2UudGl0bGU7XHJcbiAgICB0aGlzLm9wdGlvbnMgPSB0b2FzdFBhY2thZ2UuY29uZmlnO1xyXG4gICAgdGhpcy50b2FzdENsYXNzZXMgPSBgJHt0b2FzdFBhY2thZ2UudG9hc3RUeXBlfSAke1xyXG4gICAgICB0b2FzdFBhY2thZ2UuY29uZmlnLnRvYXN0Q2xhc3NcclxuICAgIH1gO1xyXG4gICAgdGhpcy5zdWIgPSB0b2FzdFBhY2thZ2UudG9hc3RSZWYuYWZ0ZXJBY3RpdmF0ZSgpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuYWN0aXZhdGVUb2FzdCgpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnN1YjEgPSB0b2FzdFBhY2thZ2UudG9hc3RSZWYubWFudWFsQ2xvc2VkKCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5yZW1vdmUoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuc3ViLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLnN1YjEudW5zdWJzY3JpYmUoKTtcclxuICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbElkKTtcclxuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBhY3RpdmF0ZXMgdG9hc3QgYW5kIHNldHMgdGltZW91dFxyXG4gICAqL1xyXG4gIGFjdGl2YXRlVG9hc3QoKSB7XHJcbiAgICB0aGlzLnN0YXRlID0gJ2FjdGl2ZSc7XHJcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5kaXNhYmxlVGltZU91dCAmJiB0aGlzLm9wdGlvbnMudGltZU91dCkge1xyXG4gICAgICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLnJlbW92ZSgpO1xyXG4gICAgICB9LCB0aGlzLm9wdGlvbnMudGltZU91dCk7XHJcbiAgICAgIHRoaXMuaGlkZVRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSArIHRoaXMub3B0aW9ucy50aW1lT3V0O1xyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLnByb2dyZXNzQmFyKSB7XHJcbiAgICAgICAgdGhpcy5pbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoKCkgPT4gdGhpcy51cGRhdGVQcm9ncmVzcygpLCAxMCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLm9wdGlvbnMub25BY3RpdmF0ZVRpY2spIHtcclxuICAgICAgdGhpcy5hcHBSZWYudGljaygpO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiB1cGRhdGVzIHByb2dyZXNzIGJhciB3aWR0aFxyXG4gICAqL1xyXG4gIHVwZGF0ZVByb2dyZXNzKCkge1xyXG4gICAgaWYgKHRoaXMud2lkdGggPT09IDAgfHwgdGhpcy53aWR0aCA9PT0gMTAwIHx8ICF0aGlzLm9wdGlvbnMudGltZU91dCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgIGNvbnN0IHJlbWFpbmluZyA9IHRoaXMuaGlkZVRpbWUgLSBub3c7XHJcbiAgICB0aGlzLndpZHRoID0gcmVtYWluaW5nIC8gdGhpcy5vcHRpb25zLnRpbWVPdXQgKiAxMDA7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLnByb2dyZXNzQW5pbWF0aW9uID09PSAnaW5jcmVhc2luZycpIHtcclxuICAgICAgdGhpcy53aWR0aCA9IDEwMCAtIHRoaXMud2lkdGg7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy53aWR0aCA8PSAwKSB7XHJcbiAgICAgIHRoaXMud2lkdGggPSAwO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMud2lkdGggPj0gMTAwKSB7XHJcbiAgICAgIHRoaXMud2lkdGggPSAxMDA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiB0ZWxscyB0b2FzdHJTZXJ2aWNlIHRvIHJlbW92ZSB0aGlzIHRvYXN0IGFmdGVyIGFuaW1hdGlvbiB0aW1lXHJcbiAgICovXHJcbiAgcmVtb3ZlKCkge1xyXG4gICAgaWYgKHRoaXMuc3RhdGUgPT09ICdyZW1vdmVkJykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcclxuICAgIHRoaXMuc3RhdGUgPSAncmVtb3ZlZCc7XHJcbiAgICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KFxyXG4gICAgICAoKSA9PiB0aGlzLnRvYXN0clNlcnZpY2UucmVtb3ZlKHRoaXMudG9hc3RQYWNrYWdlLnRvYXN0SWQpLFxyXG4gICAgKTtcclxuICB9XHJcbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snKVxyXG4gIHRhcFRvYXN0KCkge1xyXG4gICAgaWYgKHRoaXMuc3RhdGUgPT09ICdyZW1vdmVkJykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnRvYXN0UGFja2FnZS50cmlnZ2VyVGFwKCk7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLnRhcFRvRGlzbWlzcykge1xyXG4gICAgICB0aGlzLnJlbW92ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuICBASG9zdExpc3RlbmVyKCdtb3VzZWVudGVyJylcclxuICBzdGlja0Fyb3VuZCgpIHtcclxuICAgIGlmICh0aGlzLnN0YXRlID09PSAncmVtb3ZlZCcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XHJcbiAgICB0aGlzLm9wdGlvbnMudGltZU91dCA9IDA7XHJcbiAgICB0aGlzLmhpZGVUaW1lID0gMDtcclxuXHJcbiAgICAvLyBkaXNhYmxlIHByb2dyZXNzQmFyXHJcbiAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWxJZCk7XHJcbiAgICB0aGlzLndpZHRoID0gMDtcclxuICB9XHJcbiAgQEhvc3RMaXN0ZW5lcignbW91c2VsZWF2ZScpXHJcbiAgZGVsYXllZEhpZGVUb2FzdCgpIHtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuZGlzYWJsZVRpbWVPdXRcclxuICAgICAgfHwgdGhpcy5vcHRpb25zLmV4dGVuZGVkVGltZU91dCA9PT0gMFxyXG4gICAgICB8fCB0aGlzLnN0YXRlID09PSAncmVtb3ZlZCcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dChcclxuICAgICAgKCkgPT4gdGhpcy5yZW1vdmUoKSxcclxuICAgICAgdGhpcy5vcHRpb25zLmV4dGVuZGVkVGltZU91dCxcclxuICAgICk7XHJcbiAgICB0aGlzLm9wdGlvbnMudGltZU91dCA9IHRoaXMub3B0aW9ucy5leHRlbmRlZFRpbWVPdXQ7XHJcbiAgICB0aGlzLmhpZGVUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgKyAodGhpcy5vcHRpb25zLnRpbWVPdXQgfHwgMCk7XHJcbiAgICB0aGlzLndpZHRoID0gLTE7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLnByb2dyZXNzQmFyKSB7XHJcbiAgICAgIHRoaXMuaW50ZXJ2YWxJZCA9IHNldEludGVydmFsKCgpID0+IHRoaXMudXBkYXRlUHJvZ3Jlc3MoKSwgMTApO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuQE5nTW9kdWxlKHtcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcclxuICBkZWNsYXJhdGlvbnM6IFtUb2FzdE5vQW5pbWF0aW9uXSxcclxuICBleHBvcnRzOiBbVG9hc3ROb0FuaW1hdGlvbl0sXHJcbiAgZW50cnlDb21wb25lbnRzOiBbVG9hc3ROb0FuaW1hdGlvbl0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUb2FzdE5vQW5pbWF0aW9uTW9kdWxlIHt9XHJcbiJdfQ==
|