@duoduo-oba/ng-devui
Version:
DevUI components based on Angular
278 lines • 27.8 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: toast.component.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';
import { ToastService } from './toast.service';
import { Subject } from 'rxjs';
import { throttleTime } from 'rxjs/operators';
/**
* @record
*/
export function Message() { }
if (false) {
/** @type {?|undefined} */
Message.prototype.severity;
/** @type {?|undefined} */
Message.prototype.summary;
/** @type {?|undefined} */
Message.prototype.detail;
/** @type {?|undefined} */
Message.prototype.id;
}
export class ToastComponent {
/**
* @param {?} el
* @param {?} toastService
*/
constructor(el, toastService) {
this.el = el;
this.toastService = toastService;
this.closeEvent = new EventEmitter();
this.valueChange = new EventEmitter();
this.zIndex = ToastService.zIndex;
this.clickSub = new Subject();
this.subItem = this.clickSub.pipe(throttleTime(250, undefined, { leading: true, trailing: false }))
.subscribe((/**
* @param {?} obj
* @return {?}
*/
obj => this.remove(obj.index, obj.dom)));
}
/**
* @return {?}
*/
get _life() {
if (this.life) {
return this.life;
}
else {
if (this.value && this.value.length > 0) {
switch (this.value[0].severity) {
case 'success':
return 5000;
break;
case 'info':
return 5000;
break;
case 'warn':
return 10000;
break;
case 'error':
return 10000;
break;
default:
return 5000;
}
}
else {
return 5000;
}
}
}
/**
* @return {?}
*/
ngAfterViewInit() {
this.container = (/** @type {?} */ (this.containerViewChild.nativeElement));
}
/**
* @return {?}
*/
get value() {
return this._value;
}
/**
* @param {?} val
* @return {?}
*/
set value(val) {
this._value = val;
if (this.container) {
this.handleValueChange();
}
}
/**
* @return {?}
*/
handleValueChange() {
this.zIndex = ++ToastService.zIndex;
this.toastService.fadeIn(this.container, 250);
if (!this.sticky) {
if (this.timeout) {
clearTimeout(this.timeout);
}
this.timestamp = new Date().getTime();
this.timeout = setTimeout((/**
* @return {?}
*/
() => {
this.removeAll();
}), this._life);
}
}
/**
* @param {?} index
* @return {?}
*/
interrupt(index) {
this.resetDelay((/**
* @return {?}
*/
() => {
/** @type {?} */
const otherToasts = this._value.slice(0);
otherToasts.splice(index, 1, undefined);
/** @type {?} */
const doms = this.container.children;
otherToasts.forEach((/**
* @param {?} v
* @param {?} i
* @return {?}
*/
(v, i) => v && this.toastService.fadeOut(doms[i], 250)));
}));
}
/**
* @param {?} fn
* @return {?}
*/
resetDelay(fn) {
if (!this.sticky && this.timeout) {
clearTimeout(this.timeout);
/** @type {?} */
const remainTime = this._life - (new Date().getTime() - this.timestamp);
this.timeout = setTimeout((/**
* @return {?}
*/
() => { fn(); }), remainTime);
}
}
/**
* @param {?} index
* @param {?} msgel
* @return {?}
*/
remove(index, msgel) {
this.toastService.fadeOut(msgel, 250, (/**
* @return {?}
*/
() => {
this.closeEvent.emit({ message: this.value[index] });
this._value = this.value.filter((/**
* @param {?} val
* @param {?} i
* @return {?}
*/
(val, i) => i !== index));
this.valueChange.emit(this._value);
this.removeReset();
}));
}
/**
* @return {?}
*/
removeAll() {
if (this.value && this.value.length) {
this.toastService.fadeOut(this.container, 250, (/**
* @return {?}
*/
() => {
this.value.forEach((/**
* @param {?} msg
* @param {?} index
* @return {?}
*/
(msg, index) => this.closeEvent.emit({ message: this.value[index] })));
this.value = [];
this.valueChange.emit(this.value);
}));
}
}
/**
* @param {?} index
* @param {?} msgel
* @return {?}
*/
removeThrottle(index, msgel) {
this.clickSub.next({ index: index, dom: msgel });
}
/**
* @return {?}
*/
removeReset() {
this.resetDelay((/**
* @return {?}
*/
() => { this.removeAll(); }));
}
/**
* @return {?}
*/
ngOnDestroy() {
if (!this.sticky) {
clearTimeout(this.timeout);
}
if (this.subItem) {
this.subItem.unsubscribe();
}
}
}
ToastComponent.decorators = [
{ type: Component, args: [{
selector: 'd-toast',
template: "<div #container [ngClass]=\"'devui-toast'\" [style.zIndex]=\"zIndex\" [ngStyle]=\"style\" [class]=\"styleClass\">\r\n <div\r\n #msgel\r\n *ngFor=\"let msg of value; let i = index\"\r\n class=\"devui-toast-item-container\"\r\n aria-live=\"polite\"\r\n [ngClass]=\"{\r\n 'devui-toast-message-info': msg.severity == 'info',\r\n 'devui-toast-message-warn': msg.severity == 'warn',\r\n 'devui-toast-message-error': msg.severity == 'error',\r\n 'devui-toast-message-success': msg.severity == 'success'\r\n }\"\r\n >\r\n <div class=\"devui-toast-item\" [ngSwitch]=\"msg.severity\" (mouseenter)=\"interrupt(i)\" (mouseleave)=\"removeReset()\">\r\n <div class=\"devui-toast-icon-close\" (click)=\"removeThrottle(i, msgel)\">\r\n <svg\r\n width=\"16px\"\r\n height=\"16px\"\r\n viewBox=\"0 0 14 14\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n >\r\n <defs>\r\n <polygon\r\n id=\"path-1\"\r\n points=\"8.07106781 6.65685425 10.8994949 3.82842712 12.3137085 5.24264069 9.48528137 8.07106781 12.3137085 10.8994949 10.8994949 12.3137085 8.07106781 9.48528137 5.24264069 12.3137085 3.82842712 10.8994949 6.65685425 8.07106781 3.82842712 5.24264069 5.24264069 3.82842712\"\r\n ></polygon>\r\n </defs>\r\n <g id=\"error\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <mask id=\"mask-2\" fill=\"white\">\r\n <use xlink:href=\"#path-1\"></use>\r\n </mask>\r\n <use id=\"Mask\" class=\"devui-toast-close-icon\" xlink:href=\"#path-1\"></use>\r\n </g>\r\n </svg>\r\n </div>\r\n <span\r\n class=\"devui-toast-image\"\r\n [ngClass]=\"{\r\n 'devui-toast-image-info': msg.severity === 'info',\r\n 'devui-toast-image-warning': msg.severity === 'warn',\r\n 'devui-toast-image-error': msg.severity === 'error',\r\n 'devui-toast-image-success': msg.severity === 'success'\r\n }\"\r\n >\r\n <ng-container *ngSwitchCase=\"'info'\">\r\n <svg\r\n width=\"16px\"\r\n height=\"16px\"\r\n viewBox=\"0 0 16 16\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n >\r\n <g id=\"info\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <path class=\"devui-toast-image-info-path\" d=\"M7,13 L7,6 L9,6 L9,13 L7,13 Z M7,5 L7,3 L9,3 L9,5 L7,5 Z\" id=\"info\"></path>\r\n </g>\r\n </svg>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'warn'\">\r\n <svg\r\n width=\"16px\"\r\n height=\"16px\"\r\n viewBox=\"0 0 16 16\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n >\r\n <g id=\"warning\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <path\r\n class=\"devui-toast-image-warning-path\"\r\n d=\"M7,3 L9,3 L9,10 L7,10 L7,3 Z M7,11 L9,11 L9,13 L7,13 L7,11 Z\"\r\n id=\"warn\"\r\n ></path>\r\n </g>\r\n </svg>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'error'\">\r\n <svg\r\n width=\"16px\"\r\n height=\"16px\"\r\n viewBox=\"0 0 16 16\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n >\r\n <defs>\r\n <polygon\r\n id=\"path-e\"\r\n points=\"8.07106781 6.65685425 10.8994949 3.82842712 12.3137085 5.24264069 9.48528137 8.07106781 12.3137085 10.8994949 10.8994949 12.3137085 8.07106781 9.48528137 5.24264069 12.3137085 3.82842712 10.8994949 6.65685425 8.07106781 3.82842712 5.24264069 5.24264069 3.82842712\"\r\n ></polygon>\r\n </defs>\r\n <g id=\"error\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <mask id=\"mask-2\" fill=\"white\">\r\n <use xlink:href=\"#path-e\"></use>\r\n </mask>\r\n <use id=\"Mask\" class=\"devui-toast-image-error-path\" xlink:href=\"#path-e\"></use>\r\n </g>\r\n </svg>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'success'\">\r\n <svg\r\n width=\"16px\"\r\n height=\"16px\"\r\n viewBox=\"0 0 16 16\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n >\r\n <defs>\r\n <polygon\r\n id=\"path-s\"\r\n points=\"6.53553391 9.77817459 12.1923882 4.12132034 13.6066017 5.53553391 6.53553391 12.6066017 3 9.07106781 4.41421356 7.65685425 6.53553391 9.77817459\"\r\n ></polygon>\r\n </defs>\r\n <g id=\"correct\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <mask id=\"mask-2\" fill=\"white\">\r\n <use xlink:href=\"#path-s\"></use>\r\n </mask>\r\n <use id=\"Mask\" class=\"devui-toast-image-success-path\" xlink:href=\"#path-s\"></use>\r\n </g>\r\n </svg>\r\n </ng-container>\r\n </span>\r\n <div class=\"devui-toast-message\">\r\n <span class=\"devui-toast-title\">{{ msg.summary }}</span>\r\n <p *ngIf=\"msg.detail\" [innerHTML]=\"msg.detail | safe: 'html'\"></p>\r\n </div>\r\n <div style=\"clear: both;\"></div>\r\n </div>\r\n </div>\r\n</div>\r\n",
styles: [":host::ng-deep a:link,:host::ng-deep a:visited{color:#5e7ce0}:host::ng-deep a:active,:host::ng-deep a:hover{color:#344899}.devui-toast{position:fixed;top:50px;right:20px;width:20em;word-break:normal;word-wrap:break-word}.devui-toast-item-container{position:relative;margin:0 0 10px;opacity:.95;box-shadow:0 12px 24px rgba(41,48,64,.2);border-radius:.25em;color:#dfe1e6}.devui-toast-item{position:relative;display:block;padding:8px 1em}.devui-toast-item p{padding:0;margin:0}.devui-toast-icon-close{position:absolute;top:7px;right:10px;cursor:pointer}.devui-toast-icon-close .devui-toast-close-icon{fill:#fff}.devui-toast-title{font-size:14px;padding:0 0 .5em;display:block;font-weight:700}.devui-toast-image{position:absolute;display:inline-block;width:16px;height:16px;border-radius:50%;left:10px;top:10px;padding:0}.devui-toast-image.devui-toast-image-warning{background-color:#fac20a}.devui-toast-image.devui-toast-image-info{background-color:#5e7ce0}.devui-toast-image.devui-toast-image-error{background-color:#f66f6a}.devui-toast-image.devui-toast-image-success{background-color:#50d4ab}.devui-toast-image .devui-toast-image-error-path,.devui-toast-image .devui-toast-image-info-path,.devui-toast-image .devui-toast-image-success-path,.devui-toast-image .devui-toast-image-warning-path{fill:#fff}.devui-toast-message{padding:0 0 .25em;margin-left:20px}.devui-toast-message p{font-size:12px}.devui-toast .devui-toast-message-error,.devui-toast .devui-toast-message-info,.devui-toast .devui-toast-message-success,.devui-toast .devui-toast-message-warn{background-color:#464d6e}"]
}] }
];
/** @nocollapse */
ToastComponent.ctorParameters = () => [
{ type: ElementRef },
{ type: ToastService }
];
ToastComponent.propDecorators = {
sticky: [{ type: Input }],
life: [{ type: Input }],
style: [{ type: Input }],
styleClass: [{ type: Input }],
closeEvent: [{ type: Output }],
valueChange: [{ type: Output }],
containerViewChild: [{ type: ViewChild, args: ['container', { static: true },] }],
value: [{ type: Input }]
};
if (false) {
/** @type {?} */
ToastComponent.prototype.sticky;
/** @type {?} */
ToastComponent.prototype.life;
/** @type {?} */
ToastComponent.prototype.style;
/** @type {?} */
ToastComponent.prototype.styleClass;
/** @type {?} */
ToastComponent.prototype.closeEvent;
/** @type {?} */
ToastComponent.prototype.valueChange;
/** @type {?} */
ToastComponent.prototype.containerViewChild;
/** @type {?} */
ToastComponent.prototype._value;
/** @type {?} */
ToastComponent.prototype.zIndex;
/** @type {?} */
ToastComponent.prototype.container;
/** @type {?} */
ToastComponent.prototype.timeout;
/** @type {?} */
ToastComponent.prototype.timestamp;
/** @type {?} */
ToastComponent.prototype.clickSub;
/** @type {?} */
ToastComponent.prototype.subItem;
/** @type {?} */
ToastComponent.prototype.el;
/** @type {?} */
ToastComponent.prototype.toastService;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZGV2dWkvdG9hc3QvIiwic291cmNlcyI6WyJ0b2FzdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFFOUMsNkJBS0M7OztJQUpDLDJCQUFrQjs7SUFDbEIsMEJBQWlCOztJQUNqQix5QkFBZ0I7O0lBQ2hCLHFCQUFTOztBQVFYLE1BQU0sT0FBTyxjQUFjOzs7OztJQStDekIsWUFBbUIsRUFBYyxFQUFTLFlBQTBCO1FBQWpELE9BQUUsR0FBRixFQUFFLENBQVk7UUFBUyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQXpDMUQsZUFBVSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ25ELGdCQUFXLEdBQTRCLElBQUksWUFBWSxFQUFhLENBQUM7UUF5QzdFLElBQUksQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQztRQUNsQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7YUFDaEcsU0FBUzs7OztRQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FB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RE4sZ0NBQXlCOztJQUN6Qiw4QkFBbUI7O0lBQ25CLCtCQUFvQjs7SUFDcEIsb0NBQTRCOztJQUU1QixvQ0FBNkQ7O0lBQzdELHFDQUErRTs7SUFDL0UsNENBQXlFOztJQTRCekUsZ0NBQXVCOztJQUN2QixnQ0FBZTs7SUFDZixtQ0FBMEI7O0lBQzFCLGlDQUFhOztJQUViLG1DQUFrQjs7SUFFbEIsa0NBQWM7O0lBRWQsaUNBQXNCOztJQUVWLDRCQUFxQjs7SUFBRSxzQ0FBaUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi90b2FzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRocm90dGxlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZSB7XHJcbiAgc2V2ZXJpdHk/OiBzdHJpbmc7XHJcbiAgc3VtbWFyeT86IHN0cmluZztcclxuICBkZXRhaWw/OiBzdHJpbmc7XHJcbiAgaWQ/OiBhbnk7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZC10b2FzdCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RvYXN0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90b2FzdC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUb2FzdENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KCkgc3RpY2t5OiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGxpZmU6IGFueTtcclxuICBASW5wdXQoKSBzdHlsZTogYW55O1xyXG4gIEBJbnB1dCgpIHN0eWxlQ2xhc3M6IHN0cmluZztcclxuXHJcbiAgQE91dHB1dCgpIGNsb3NlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPE1lc3NhZ2VbXT4gPSBuZXcgRXZlbnRFbWl0dGVyPE1lc3NhZ2VbXT4oKTtcclxuICBAVmlld0NoaWxkKCdjb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBjb250YWluZXJWaWV3Q2hpbGQ6IEVsZW1lbnRSZWY7XHJcblxyXG4gIGdldCBfbGlmZSgpIHtcclxuICAgIGlmICh0aGlzLmxpZmUpIHtcclxuICAgICAgcmV0dXJuIHRoaXMubGlmZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLnZhbHVlICYmIHRoaXMudmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHN3aXRjaCAodGhpcy52YWx1ZVswXS5zZXZlcml0eSkge1xyXG4gICAgICAgICAgY2FzZSAnc3VjY2Vzcyc6XHJcbiAgICAgICAgICAgIHJldHVybiA1MDAwO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgJ2luZm8nOlxyXG4gICAgICAgICAgICByZXR1cm4gNTAwMDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlICd3YXJuJzpcclxuICAgICAgICAgICAgcmV0dXJuIDEwMDAwO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgJ2Vycm9yJzpcclxuICAgICAgICAgICAgcmV0dXJuIDEwMDAwO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIHJldHVybiA1MDAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gNTAwMDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBfdmFsdWU6IEFycmF5PE1lc3NhZ2U+O1xyXG4gIHpJbmRleDogbnVtYmVyO1xyXG4gIGNvbnRhaW5lcjogSFRNTERpdkVsZW1lbnQ7XHJcbiAgdGltZW91dDogYW55O1xyXG5cclxuICB0aW1lc3RhbXA6IG51bWJlcjtcclxuXHJcbiAgY2xpY2tTdWI6IGFueTtcclxuXHJcbiAgc3ViSXRlbTogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZWw6IEVsZW1lbnRSZWYsIHB1YmxpYyB0b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSkge1xyXG4gICAgdGhpcy56SW5kZXggPSBUb2FzdFNlcnZpY2UuekluZGV4O1xyXG4gICAgdGhpcy5jbGlja1N1YiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgICB0aGlzLnN1Ykl0ZW0gPSB0aGlzLmNsaWNrU3ViLnBpcGUodGhyb3R0bGVUaW1lKDI1MCwgdW5kZWZpbmVkLCB7IGxlYWRpbmc6IHRydWUsIHRyYWlsaW5nOiBmYWxzZSB9KSlcclxuICAgICAgLnN1YnNjcmliZShvYmogPT4gdGhpcy5yZW1vdmUob2JqLmluZGV4LCBvYmouZG9tKSk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLmNvbnRhaW5lciA9IDxIVE1MRGl2RWxlbWVudD50aGlzLmNvbnRhaW5lclZpZXdDaGlsZC5uYXRpdmVFbGVtZW50O1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgZ2V0IHZhbHVlKCk6IEFycmF5PE1lc3NhZ2U+IHtcclxuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcclxuICB9XHJcblxyXG4gIHNldCB2YWx1ZSh2YWw6IEFycmF5PE1lc3NhZ2U+KSB7XHJcbiAgICB0aGlzLl92YWx1ZSA9IHZhbDtcclxuICAgIGlmICh0aGlzLmNvbnRhaW5lcikge1xyXG4gICAgICB0aGlzLmhhbmRsZVZhbHVlQ2hhbmdlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVWYWx1ZUNoYW5nZSgpIHtcclxuICAgIHRoaXMuekluZGV4ID0gKytUb2FzdFNlcnZpY2UuekluZGV4O1xyXG4gICAgdGhpcy50b2FzdFNlcnZpY2UuZmFkZUluKHRoaXMuY29udGFpbmVyLCAyNTApO1xyXG5cclxuICAgIGlmICghdGhpcy5zdGlja3kpIHtcclxuICAgICAgaWYgKHRoaXMudGltZW91dCkge1xyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudGltZXN0YW1wID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlQWxsKCk7XHJcbiAgICAgIH0sIHRoaXMuX2xpZmUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW50ZXJydXB0KGluZGV4OiBudW1iZXIpIHtcclxuICAgIHRoaXMucmVzZXREZWxheSgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IG90aGVyVG9hc3RzID0gdGhpcy5fdmFsdWUuc2xpY2UoMCk7XHJcbiAgICAgIG90aGVyVG9hc3RzLnNwbGljZShpbmRleCwgMSwgdW5kZWZpbmVkKTtcclxuICAgICAgY29uc3QgZG9tcyA9IHRoaXMuY29udGFpbmVyLmNoaWxkcmVuO1xyXG4gICAgICBvdGhlclRvYXN0cy5mb3JFYWNoKCh2LCBpKSA9PiB2ICYmIHRoaXMudG9hc3RTZXJ2aWNlLmZhZGVPdXQoZG9tc1tpXSwgMjUwKSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHJlc2V0RGVsYXkoZm46IEZ1bmN0aW9uKSB7XHJcbiAgICBpZiAoIXRoaXMuc3RpY2t5ICYmIHRoaXMudGltZW91dCkge1xyXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcclxuICAgICAgY29uc3QgcmVtYWluVGltZSA9IHRoaXMuX2xpZmUgLSAobmV3IERhdGUoKS5nZXRUaW1lKCkgLSB0aGlzLnRpbWVzdGFtcCk7XHJcbiAgICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4geyBmbigpOyB9LCByZW1haW5UaW1lKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZShpbmRleDogbnVtYmVyLCBtc2dlbDogYW55KSB7XHJcbiAgICB0aGlzLnRvYXN0U2VydmljZS5mYWRlT3V0KG1zZ2VsLCAyNTAsICgpID0+IHtcclxuICAgICAgdGhpcy5jbG9zZUV2ZW50LmVtaXQoeyBtZXNzYWdlOiB0aGlzLnZhbHVlW2luZGV4XSB9KTtcclxuICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLnZhbHVlLmZpbHRlcigodmFsLCBpKSA9PiBpICE9PSBpbmRleCk7XHJcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLl92YWx1ZSk7XHJcbiAgICAgIHRoaXMucmVtb3ZlUmVzZXQoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlQWxsKCkge1xyXG4gICAgaWYgKHRoaXMudmFsdWUgJiYgdGhpcy52YWx1ZS5sZW5ndGgpIHtcclxuICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZmFkZU91dCh0aGlzLmNvbnRhaW5lciwgMjUwLCAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy52YWx1ZS5mb3JFYWNoKChtc2csIGluZGV4KSA9PiB0aGlzLmNsb3NlRXZlbnQuZW1pdCh7IG1lc3NhZ2U6IHRoaXMudmFsdWVbaW5kZXhdIH0pKTtcclxuICAgICAgICB0aGlzLnZhbHVlID0gW107XHJcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZVRocm90dGxlKGluZGV4OiBudW1iZXIsIG1zZ2VsOiBhbnkpIHtcclxuICAgIHRoaXMuY2xpY2tTdWIubmV4dCh7IGluZGV4OiBpbmRleCwgZG9tOiBtc2dlbCB9KTtcclxuICB9XHJcblxyXG4gIHJlbW92ZVJlc2V0KCkge1xyXG4gICAgdGhpcy5yZXNldERlbGF5KCgpID0+IHsgdGhpcy5yZW1vdmVBbGwoKTsgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmICghdGhpcy5zdGlja3kpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zdWJJdGVtKSB7XHJcbiAgICAgIHRoaXMuc3ViSXRlbS51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=