UNPKG

swipe-angular-list

Version:

![](https://img.shields.io/npm/dy/swipe-angular-list.svg) ![](https://img.shields.io/github/stars/leifermendez/swipe-angular-list) ![](https://img.shields.io/github/license/leifermendez/swipe-angular-list) # Swiper List (Angular)

321 lines 30.8 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, ElementRef, EventEmitter, HostListener, Input, Output, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core'; import { SwipeServiceService } from '../swipe-service.service'; var ItemListComponent = /** @class */ (function () { function ItemListComponent(elRef, swService) { var _this = this; this.swService = swService; this.alive = true; this.selfElement = null; this.idElement = null; this.disabledMark = false; this.showMark = false; this.itemClass = ''; this.callback = new EventEmitter(); this.swClick = new EventEmitter(); this.swipeCb = new EventEmitter(); this.random = (/** * @return {?} */ function () { /** @type {?} */ var d = new Date(); return d.getTime(); }); this.swipeleft = (/** * @param {?} res * @return {?} */ function (res) { _this.swipeCb.emit(res); _this.swService.closeAll(_this.selfElement.id); if (!_this.disabledMark) { _this.result = (res.deltaX < 0); } }); this.clickItem = (/** * @param {?} a * @return {?} */ function (a) { return _this.swClick.emit(a); }); this.action = (/** * @param {?=} opt * @return {?} */ function (opt) { if (opt === void 0) { opt = ''; } try { _this.result = false; var id = _this.inside.id; if (opt === 'edit') { _this.callback.emit({ action: 'edit', value: id }); } else if (opt === 'trash') { _this.callback.emit({ action: 'trash', value: id }); } } catch (e) { console.error('Debes definir ID de edit, y trash'); } }); this.render = (/** * @return {?} */ function () { /** * Template MARK **/ if (_this.showMark) { if (_this.inside.mark && !_this.markTemplate) { /** @type {?} */ var viewMark = _this.defaultMark.createEmbeddedView(null); _this.viewContainerMark.insert(viewMark); } else if (_this.inside.mark && _this.markTemplate) { /** @type {?} */ var viewMark = _this.markTemplate.createEmbeddedView(null); _this.viewContainerMark.insert(viewMark); } if (!_this.inside.mark && !_this.notMarkTemplate) { /** @type {?} */ var viewMark = _this.defaultNotMark.createEmbeddedView(null); _this.viewContainerMark.insert(viewMark); } else if (!_this.inside.mark && _this.notMarkTemplate) { /** @type {?} */ var viewMark = _this.notMarkTemplate.createEmbeddedView(null); _this.viewContainerMark.insert(viewMark); } } /** * Template EDIT **/ if (_this.editTemplate) { /** @type {?} */ var viewEdit = _this.editTemplate.createEmbeddedView(null); if (_this.viewContainerEdit) { _this.viewContainerEdit.insert(viewEdit); } } else if (_this.editTemplate !== null) { /** @type {?} */ var viewEdit = _this.defaultEdit.createEmbeddedView(null); _this.viewContainerEdit.insert(viewEdit); } /** * Template TRASH **/ if (_this.trashTemplate) { /** @type {?} */ var viewTrash = _this.trashTemplate.createEmbeddedView(null); if (_this.viewContainerTrash) { _this.viewContainerTrash.insert(viewTrash); } } else if (_this.trashTemplate !== null) { /** @type {?} */ var viewTrash = _this.defaultTrash.createEmbeddedView(null); _this.viewContainerTrash.insert(viewTrash); } setTimeout((/** * @return {?} */ function () { if (_this.customTemplate) { // Si tiene // Si tiene /** @type {?} */ var dataInside = tslib_1.__assign({}, _this.inside, { touch: _this.selfElement.id }); /** @type {?} */ var viewCustomTemplate = _this.customTemplate.createEmbeddedView({ item: dataInside, id: _this.selfElement.id }); if (viewCustomTemplate) { _this.viewContainerCustom.insert(viewCustomTemplate); } } else { /** @type {?} */ var viewCustomTemplate = _this.defaultCustom.createEmbeddedView(null); _this.viewContainerCustom.insert(viewCustomTemplate); } }), 10); }); this.selfElement = elRef.nativeElement; this.idElement = "list-swipe-" + this.random(); this.selfElement.setAttribute('data-id', this.idElement); this.selfElement.id = this.idElement; this.subsriberElement = this.swService.swipeObserver.subscribe((/** * @param {?} a * @return {?} */ function (a) { if (a !== _this.selfElement.id) { _this.result = false; } })); } /** * @param {?} event * @return {?} */ ItemListComponent.prototype.clickOut = /** * @param {?} event * @return {?} */ function (event) { if (!this.selfElement.contains(event.target)) { this.result = false; } }; /** * @return {?} */ ItemListComponent.prototype.ngOnDestroy = /** * @return {?} */ function () { try { this.subsriberElement.unsubscribe(); } catch (e) { return null; } }; /** * @return {?} */ ItemListComponent.prototype.ngAfterViewInit = /** * @return {?} */ function () { this.render(); // throw new Error("Method not implemented."); }; /** * @return {?} */ ItemListComponent.prototype.ngOnInit = /** * @return {?} */ function () { }; ItemListComponent.decorators = [ { type: Component, args: [{ selector: 'sw-item-list', template: "<div class=\"{{itemClass}}\" (swipeleft)=\"swipeleft($event)\" (swipe)=\"swipeleft($event)\" >\n <ng-template #defaultEdit>\n edit\n </ng-template>\n <ng-template #defaultTrash>\n trash\n </ng-template>\n <ng-template #defaultMark>\n <div class=\"yes-marker\"></div>\n </ng-template>\n <ng-template #defaultNotMark>\n <div class=\"not-marker\"></div>\n </ng-template>\n\n <ng-template #defaultCustom>\n <div data-id=\"{{idElement}}\" class=\"text truncate\">{{inside?.title}}</div>\n <div data-id=\"{{idElement}}\" class=\"small truncate\">{{inside?.subTitle}}</div>\n </ng-template>\n\n\n <div [ngClass]=\"{'active':(result)}\" data-id=\"{{idElement}}\"\n class=\" options-btn swipe-d-flex justify-content-between\">\n <div (click)=\"action('edit')\" class=\"option-list\" *ngIf=\"editTemplate !== null\">\n <ng-template let-show=\"show\" #viewContainerEdit></ng-template>\n </div>\n <div (click)=\"action('trash')\" class=\"option-list\" *ngIf=\"trashTemplate !== null\">\n <ng-template let-show=\"show\" #viewContainerTrash></ng-template>\n </div>\n </div>\n <div [ngClass]=\"{'left-swipe':(result)}\" data-id=\"{{idElement}}\" class=\"list-swipe swipe-d-flex\">\n\n <div *ngIf=\"showMark\" class=\"swipe-w-10\">\n <ng-container #viewContainerMark></ng-container>\n </div>\n\n <div (click)=\"clickItem($event)\" [ngClass]=\"{'swipe-w-90':showMark, 'swipe-w-100':!showMark}\">\n <div *ngIf=\"customTemplate\" data-id=\"{{idElement}}\">\n <ng-template #viewContainerCustom>\n </ng-template>\n </div>\n\n <div *ngIf=\"!customTemplate\">\n <ng-template #viewContainerCustom></ng-template>\n </div>\n\n </div>\n <div class=\"mark\"></div>\n </div>\n</div>\n", styles: [":host{display:block;font-family:Arial,serif}.not-marker{background:red;width:1rem;height:1rem;border-radius:3rem}.yes-marker{background:green;width:1rem;height:1rem;border-radius:3rem}.swipe-d-flex{display:flex}.swipe-w-10{width:10%}.swipe-w-100{width:100%}.swipe-w-90{width:90%}.options-btn.active{display:flex;transform:translate(66vw,0)}.list-swipe{box-shadow:0 5px 7px rgba(181,181,181,.18);border-radius:.25em;padding:.75em;font-weight:500;font-size:16px;line-height:19px;z-index:9;margin:.75rem 0;transition:50ms ease-out}.left-swipe{transform:translate(-29vw,0);transition:50ms ease-out;box-shadow:6px 0 7px rgba(181,181,181,.31)}.options-btn{position:absolute;display:none;transform:translate(100vw,0);padding:.5rem 0;width:28vw}.list-swipe .text{color:#313131}.list-swipe .small{font-weight:500;font-size:16px;line-height:19px;color:#9b9b9b;padding:1rem 0 0}.list-swipe .mark{background:#fff;height:2rem;margin-top:.75rem;margin-right:-.3rem;border-right:.175rem solid #f96060}.option-list{width:100%;min-height:3.75rem;line-height:3.75rem;border-right:1px solid rgba(0,0,0,.1);text-align:center}.option-list:last-child{border-right:0}.truncate{width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}"] }] } ]; /** @nocollapse */ ItemListComponent.ctorParameters = function () { return [ { type: ElementRef }, { type: SwipeServiceService } ]; }; ItemListComponent.propDecorators = { inside: [{ type: Input }], disabledMark: [{ type: Input, args: ['disable-mark',] }], showMark: [{ type: Input, args: ['show-mark',] }], itemClass: [{ type: Input, args: ['item-class',] }], defaultEdit: [{ type: ViewChild, args: ['defaultEdit',] }], defaultTrash: [{ type: ViewChild, args: ['defaultTrash',] }], defaultMark: [{ type: ViewChild, args: ['defaultMark',] }], defaultNotMark: [{ type: ViewChild, args: ['defaultNotMark',] }], defaultCustom: [{ type: ViewChild, args: ['defaultCustom',] }], customTemplate: [{ type: Input, args: ['customTemplate',] }], editTemplate: [{ type: Input, args: ['editTemplate',] }], trashTemplate: [{ type: Input, args: ['trashTemplate',] }], markTemplate: [{ type: Input, args: ['markTemplate',] }], notMarkTemplate: [{ type: Input, args: ['notMarkTemplate',] }], callback: [{ type: Output }], swClick: [{ type: Output }], swipeCb: [{ type: Output }], viewContainerEdit: [{ type: ViewChild, args: ['viewContainerEdit', { static: false, read: ViewContainerRef },] }], viewContainerTrash: [{ type: ViewChild, args: ['viewContainerTrash', { static: false, read: ViewContainerRef },] }], viewContainerMark: [{ type: ViewChild, args: ['viewContainerMark', { static: false, read: ViewContainerRef },] }], viewContainerCustom: [{ type: ViewChild, args: ['viewContainerCustom', { static: false, read: ViewContainerRef },] }], clickOut: [{ type: HostListener, args: ['document:click', ['$event'],] }] }; return ItemListComponent; }()); export { ItemListComponent }; if (false) { /** @type {?} */ ItemListComponent.prototype.alive; /** @type {?} */ ItemListComponent.prototype.result; /** @type {?} */ ItemListComponent.prototype.selfElement; /** @type {?} */ ItemListComponent.prototype.idElement; /** @type {?} */ ItemListComponent.prototype.inside; /** @type {?} */ ItemListComponent.prototype.disabledMark; /** @type {?} */ ItemListComponent.prototype.showMark; /** @type {?} */ ItemListComponent.prototype.itemClass; /** @type {?} */ ItemListComponent.prototype.defaultEdit; /** @type {?} */ ItemListComponent.prototype.defaultTrash; /** @type {?} */ ItemListComponent.prototype.defaultMark; /** @type {?} */ ItemListComponent.prototype.defaultNotMark; /** @type {?} */ ItemListComponent.prototype.defaultCustom; /** @type {?} */ ItemListComponent.prototype.customTemplate; /** @type {?} */ ItemListComponent.prototype.editTemplate; /** @type {?} */ ItemListComponent.prototype.trashTemplate; /** @type {?} */ ItemListComponent.prototype.markTemplate; /** @type {?} */ ItemListComponent.prototype.notMarkTemplate; /** @type {?} */ ItemListComponent.prototype.callback; /** @type {?} */ ItemListComponent.prototype.swClick; /** @type {?} */ ItemListComponent.prototype.swipeCb; /** @type {?} */ ItemListComponent.prototype.viewContainerEdit; /** @type {?} */ ItemListComponent.prototype.viewContainerTrash; /** @type {?} */ ItemListComponent.prototype.viewContainerMark; /** @type {?} */ ItemListComponent.prototype.viewContainerCustom; /** * @type {?} * @private */ ItemListComponent.prototype.subsriberElement; /** * @type {?} * @private */ ItemListComponent.prototype.random; /** @type {?} */ ItemListComponent.prototype.swipeleft; /** @type {?} */ ItemListComponent.prototype.clickItem; /** @type {?} */ ItemListComponent.prototype.action; /** @type {?} */ ItemListComponent.prototype.render; /** * @type {?} * @private */ ItemListComponent.prototype.swService; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL3N3aXBlLWFuZ3VsYXItbGlzdC8iLCJzb3VyY2VzIjpbImxpYi9pdGVtLWxpc3QvaXRlbS1saXN0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixXQUFXLEVBQ1gsU0FBUyxFQUFFLGdCQUFnQixFQUM1QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUU3RDtJQTRFRSwyQkFBWSxLQUFpQixFQUFVLFNBQThCO1FBQXJFLGlCQVVDO1FBVnNDLGNBQVMsR0FBVCxTQUFTLENBQXFCO1FBdEVyRSxVQUFLLEdBQUcsSUFBSSxDQUFDO1FBRWIsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFDbkIsY0FBUyxHQUFHLElBQUksQ0FBQztRQVFNLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBRXhCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFaEIsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQTBCcEMsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFHbkMsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFHbEMsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUE4QzFCLFdBQU07OztRQUFHOztnQkFDVCxDQUFDLEdBQUcsSUFBSSxJQUFJLEVBQUU7WUFDcEIsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDckIsQ0FBQyxFQUFDO1FBR0ssY0FBUzs7OztRQUFHLFVBQUMsR0FBTztZQUN6QixLQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2QixLQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFJLENBQUMs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bUNBS0U7O0lBRUYseUNBQTRDOztJQUU1QyxxQ0FBcUM7O0lBRXJDLHNDQUFvQzs7SUFHcEMsd0NBQXdEOztJQUV4RCx5Q0FBMEQ7O0lBRzFELHdDQUF3RDs7SUFFeEQsMkNBQThEOztJQUU5RCwwQ0FBNEQ7O0lBRzVELDJDQUEwRDs7SUFFMUQseUNBQXNEOztJQUV0RCwwQ0FBd0Q7O0lBRXhELHlDQUFzRDs7SUFFdEQsNENBQTREOztJQUU1RCxxQ0FDbUM7O0lBRW5DLG9DQUNrQzs7SUFFbEMsb0NBQ2tDOztJQUVsQyw4Q0FDb0M7O0lBRXBDLCtDQUNxQzs7SUFFckMsOENBQ29DOztJQUVwQyxnREFDc0M7Ozs7O0lBU3RDLDZDQUE2Qjs7Ozs7SUF5QjdCLG1DQUdFOztJQUdGLHNDQU1DOztJQUVELHNDQUE2Qzs7SUFFN0MsbUNBWUU7O0lBT0YsbUNBK0RDOzs7OztJQXpIOEIsc0NBQXNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiwgT25Jbml0LCBPbkRlc3Ryb3lcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1N3aXBlU2VydmljZVNlcnZpY2V9IGZyb20gJy4uL3N3aXBlLXNlcnZpY2Uuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N3LWl0ZW0tbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9pdGVtLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9pdGVtLWxpc3QuY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIEl0ZW1MaXN0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25Jbml0LCBPbkRlc3Ryb3kgIHtcbiAgYWxpdmUgPSB0cnVlO1xuICByZXN1bHQ6IGJvb2xlYW47XG4gIHNlbGZFbGVtZW50ID0gbnVsbDtcbiAgaWRFbGVtZW50ID0gbnVsbDtcbiAgQElucHV0KCkgaW5zaWRlOiB7XG4gICAgaWQsXG4gICAgdGl0bGU6ICcnLFxuICAgIHN1YlRpdGxlOiAnJyxcbiAgICBtYXJrOiBmYWxzZSxcbiAgfTtcblxuICBASW5wdXQoJ2Rpc2FibGUtbWFyaycpIGRpc2FibGVkTWFyayA9IGZhbHNlO1xuXG4gIEBJbnB1dCgnc2hvdy1tYXJrJykgc2hvd01hcmsgPSBmYWxzZTtcblxuICBASW5wdXQoJ2l0ZW0tY2xhc3MnKSBpdGVtQ2xhc3MgPSAnJztcblxuICAvLyBAdHMtaWdub3JlXG4gIEBWaWV3Q2hpbGQoJ2RlZmF1bHRFZGl0JykgZGVmYXVsdEVkaXQ6IFRlbXBsYXRlUmVmPGFueT47XG4gIC8vIEB0cy1pZ25vcmVcbiAgQFZpZXdDaGlsZCgnZGVmYXVsdFRyYXNoJykgZGVmYXVsdFRyYXNoOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIC8vIEB0cy1pZ25vcmVcbiAgQFZpZXdDaGlsZCgnZGVmYXVsdE1hcmsnKSBkZWZhdWx0TWFyazogVGVtcGxhdGVSZWY8YW55PjtcbiAgLy8gQHRzLWlnbm9yZVxuICBAVmlld0NoaWxkKCdkZWZhdWx0Tm90TWFyaycpIGRlZmF1bHROb3RNYXJrOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAvLyBAdHMtaWdub3JlXG4gIEBWaWV3Q2hpbGQoJ2RlZmF1bHRDdXN0b20nKSBkZWZhdWx0Q3VzdG9tOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1pbnB1dC1yZW5hbWVcbiAgQElucHV0KCdjdXN0b21UZW1wbGF0ZScpIGN1c3RvbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8taW5wdXQtcmVuYW1lXG4gIEBJbnB1dCgnZWRpdFRlbXBsYXRlJykgZWRpdFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8taW5wdXQtcmVuYW1lXG4gIEBJbnB1dCgndHJhc2hUZW1wbGF0ZScpIHRyYXNoVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1pbnB1dC1yZW5hbWVcbiAgQElucHV0KCdtYXJrVGVtcGxhdGUnKSBtYXJrVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1pbnB1dC1yZW5hbWVcbiAgQElucHV0KCdub3RNYXJrVGVtcGxhdGUnKSBub3RNYXJrVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQE91dHB1dCgpXG4gIGNhbGxiYWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQE91dHB1dCgpXG4gIHN3Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KClcbiAgc3dpcGVDYiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBWaWV3Q2hpbGQoJ3ZpZXdDb250YWluZXJFZGl0Jywge3N0YXRpYzogZmFsc2UsIHJlYWQ6IFZpZXdDb250YWluZXJSZWZ9KVxuICB2aWV3Q29udGFpbmVyRWRpdDogVmlld0NvbnRhaW5lclJlZjtcblxuICBAVmlld0NoaWxkKCd2aWV3Q29udGFpbmVyVHJhc2gnLCB7c3RhdGljOiBmYWxzZSwgcmVhZDogVmlld0NvbnRhaW5lclJlZn0pXG4gIHZpZXdDb250YWluZXJUcmFzaDogVmlld0NvbnRhaW5lclJlZjtcblxuICBAVmlld0NoaWxkKCd2aWV3Q29udGFpbmVyTWFyaycsIHtzdGF0aWM6IGZhbHNlLCByZWFkOiBWaWV3Q29udGFpbmVyUmVmfSlcbiAgdmlld0NvbnRhaW5lck1hcms6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgQFZpZXdDaGlsZCgndmlld0NvbnRhaW5lckN1c3RvbScsIHtzdGF0aWM6IGZhbHNlLCByZWFkOiBWaWV3Q29udGFpbmVyUmVmfSlcbiAgdmlld0NvbnRhaW5lckN1c3RvbTogVmlld0NvbnRhaW5lclJlZjtcblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXG4gIGNsaWNrT3V0KGV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLnNlbGZFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgIHRoaXMucmVzdWx0ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdWJzcmliZXJFbGVtZW50OmFueTtcblxuICBjb25zdHJ1Y3RvcihlbFJlZjogRWxlbWVudFJlZiwgcHJpdmF0ZSBzd1NlcnZpY2U6IFN3aXBlU2VydmljZVNlcnZpY2UpIHtcbiAgICB0aGlzLnNlbGZFbGVtZW50ID0gZWxSZWYubmF0aXZlRWxlbWVudDtcbiAgICB0aGlzLmlkRWxlbWVudCA9IGBsaXN0LXN3aXBlLSR7dGhpcy5yYW5kb20oKX1gO1xuICAgIHRoaXMuc2VsZkVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLWlkJywgdGhpcy5pZEVsZW1lbnQpO1xuICAgIHRoaXMuc2VsZkVsZW1lbnQuaWQgPSB0aGlzLmlkRWxlbWVudDtcbiAgICB0aGlzLnN1YnNyaWJlckVsZW1lbnQgPSB0aGlzLnN3U2VydmljZS5zd2lwZU9ic2VydmVyLnN1YnNjcmliZShhID0+IHtcbiAgICAgIGlmIChhICE9PSB0aGlzLnNlbGZFbGVtZW50LmlkKSB7XG4gICAgICAgIHRoaXMucmVzdWx0ID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdHJ5e1xuICAgICAgdGhpcy5zdWJzcmliZXJFbGVtZW50LnVuc3Vic2NyaWJlKCk7XG4gICAgfWNhdGNoKGUpe1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIC8vIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICB9XG5cbiAgcHJpdmF0ZSByYW5kb20gPSAoKSA9PiB7XG4gICAgY29uc3QgZCA9IG5ldyBEYXRlKCk7XG4gICAgcmV0dXJuIGQuZ2V0VGltZSgpO1xuICB9O1xuXG5cbiAgcHVibGljIHN3aXBlbGVmdCA9IChyZXM6YW55KSA9PiB7XG4gICAgdGhpcy5zd2lwZUNiLmVtaXQocmVzKTtcbiAgICB0aGlzLnN3U2VydmljZS5jbG9zZUFsbCh0aGlzLnNlbGZFbGVtZW50LmlkKTtcbiAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVkTWFyaykge1xuICAgICAgICAgIHRoaXMucmVzdWx0ID0gKHJlcy5kZWx0YVggPCAwKTtcbiAgICAgICAgfVxuICB9XG5cbiAgY2xpY2tJdGVtID0gKGE6IGFueSkgPT4gdGhpcy5zd0NsaWNrLmVtaXQoYSk7XG5cbiAgYWN0aW9uID0gKG9wdCA9ICcnKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMucmVzdWx0ID0gZmFsc2U7XG4gICAgICBjb25zdCB7aWR9ID0gdGhpcy5pbnNpZGU7XG4gICAgICBpZiAob3B0ID09PSAnZWRpdCcpIHtcbiAgICAgICAgdGhpcy5jYWxsYmFjay5lbWl0KHthY3Rpb246ICdlZGl0JywgdmFsdWU6IGlkfSk7XG4gICAgICB9IGVsc2UgaWYgKG9wdCA9PT0gJ3RyYXNoJykge1xuICAgICAgICB0aGlzLmNhbGxiYWNrLmVtaXQoe2FjdGlvbjogJ3RyYXNoJywgdmFsdWU6IGlkfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcignRGViZXMgZGVmaW5pciBJRCBkZSBlZGl0LCB5IHRyYXNoJyk7XG4gICAgfVxuICB9O1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuXG5cbiAgfVxuXG4gIHJlbmRlciA9ICgpID0+IHtcbiAgICAvKipcbiAgICAgKiBUZW1wbGF0ZSBNQVJLXG4gICAgICoqL1xuICAgIGlmICh0aGlzLnNob3dNYXJrKSB7XG4gICAgICBpZiAodGhpcy5pbnNpZGUubWFyayAmJiAhdGhpcy5tYXJrVGVtcGxhdGUpIHtcbiAgICAgICAgY29uc3Qgdmlld01hcmsgPSB0aGlzLmRlZmF1bHRNYXJrLmNyZWF0ZUVtYmVkZGVkVmlldyhudWxsKTtcbiAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyTWFyay5pbnNlcnQodmlld01hcmspO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmluc2lkZS5tYXJrICYmIHRoaXMubWFya1RlbXBsYXRlKSB7XG4gICAgICAgIGNvbnN0IHZpZXdNYXJrID0gdGhpcy5tYXJrVGVtcGxhdGUuY3JlYXRlRW1iZWRkZWRWaWV3KG51bGwpO1xuICAgICAgICB0aGlzLnZpZXdDb250YWluZXJNYXJrLmluc2VydCh2aWV3TWFyayk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5pbnNpZGUubWFyayAmJiAhdGhpcy5ub3RNYXJrVGVtcGxhdGUpIHtcbiAgICAgICAgY29uc3Qgdmlld01hcmsgPSB0aGlzLmRlZmF1bHROb3RNYXJrLmNyZWF0ZUVtYmVkZGVkVmlldyhudWxsKTtcbiAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyTWFyay5pbnNlcnQodmlld01hcmspO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5pbnNpZGUubWFyayAmJiB0aGlzLm5vdE1hcmtUZW1wbGF0ZSkge1xuICAgICAgICBjb25zdCB2aWV3TWFyayA9IHRoaXMubm90TWFya1RlbXBsYXRlLmNyZWF0ZUVtYmVkZGVkVmlldyhudWxsKTtcbiAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyTWFyay5pbnNlcnQodmlld01hcmspO1xuICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBUZW1wbGF0ZSBFRElUXG4gICAgICoqL1xuICAgIGlmICh0aGlzLmVkaXRUZW1wbGF0ZSkge1xuICAgICAgY29uc3Qgdmlld0VkaXQgPSB0aGlzLmVkaXRUZW1wbGF0ZS5jcmVhdGVFbWJlZGRlZFZpZXcobnVsbCk7XG4gICAgICBpZiAodGhpcy52aWV3Q29udGFpbmVyRWRpdCkge1xuICAgICAgICB0aGlzLnZpZXdDb250YWluZXJFZGl0Lmluc2VydCh2aWV3RWRpdCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmVkaXRUZW1wbGF0ZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgdmlld0VkaXQgPSB0aGlzLmRlZmF1bHRFZGl0LmNyZWF0ZUVtYmVkZGVkVmlldyhudWxsKTtcbiAgICAgIHRoaXMudmlld0NvbnRhaW5lckVkaXQuaW5zZXJ0KHZpZXdFZGl0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUZW1wbGF0ZSBUUkFTSFxuICAgICAqKi9cblxuICAgIGlmICh0aGlzLnRyYXNoVGVtcGxhdGUpIHtcbiAgICAgIGNvbnN0IHZpZXdUcmFzaCA9IHRoaXMudHJhc2hUZW1wbGF0ZS5jcmVhdGVFbWJlZGRlZFZpZXcobnVsbCk7XG4gICAgICBpZiAodGhpcy52aWV3Q29udGFpbmVyVHJhc2gpIHtcbiAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyVHJhc2guaW5zZXJ0KHZpZXdUcmFzaCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLnRyYXNoVGVtcGxhdGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHZpZXdUcmFzaCA9IHRoaXMuZGVmYXVsdFRyYXNoLmNyZWF0ZUVtYmVkZGVkVmlldyhudWxsKTtcbiAgICAgIHRoaXMudmlld0NvbnRhaW5lclRyYXNoLmluc2VydCh2aWV3VHJhc2gpO1xuICAgIH1cblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY3VzdG9tVGVtcGxhdGUpIHsgLy8gU2kgdGllbmVcbiAgICAgICAgY29uc3QgZGF0YUluc2lkZSA9IHsuLi50aGlzLmluc2lkZSwgLi4ue3RvdWNoOiB0aGlzLnNlbGZFbGVtZW50LmlkfX07XG4gICAgICAgIGNvbnN0IHZpZXdDdXN0b21UZW1wbGF0ZSA9IHRoaXMuY3VzdG9tVGVtcGxhdGUuY3JlYXRlRW1iZWRkZWRWaWV3KHtcbiAgICAgICAgICBpdGVtOiBkYXRhSW5zaWRlLFxuICAgICAgICAgIGlkOiB0aGlzLnNlbGZFbGVtZW50LmlkXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodmlld0N1c3RvbVRlbXBsYXRlKSB7XG4gICAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyQ3VzdG9tLmluc2VydCh2aWV3Q3VzdG9tVGVtcGxhdGUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB2aWV3Q3VzdG9tVGVtcGxhdGUgPSB0aGlzLmRlZmF1bHRDdXN0b20uY3JlYXRlRW1iZWRkZWRWaWV3KG51bGwpO1xuICAgICAgICB0aGlzLnZpZXdDb250YWluZXJDdXN0b20uaW5zZXJ0KHZpZXdDdXN0b21UZW1wbGF0ZSk7XG4gICAgICB9XG4gICAgfSwgMTApO1xuICB9XG5cbn1cbiJdfQ==