truly-ui
Version:
Web Components for Desktop Applications.
86 lines (84 loc) • 16.1 kB
JavaScript
/*
MIT License
Copyright (c) 2019 Temainfo Sistemas
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
import { Component, ViewChild } from '@angular/core';
import * as i0 from "@angular/core";
import * as i1 from "@angular/router";
import * as i2 from "@angular/common";
export class TlSimpleSubMenu {
constructor(router, change) {
this.router = router;
this.change = change;
this.icon = '';
this.label = '';
this.subItem = '';
this.items = [];
this.docked = false;
this.anchorElements = [];
this.callBack = Function();
}
setDataSubMenu(items) {
this.items = items;
this.change.detectChanges();
}
setProperties(properties) {
Object.keys(properties).forEach((item) => {
this[item] = properties[item];
});
}
setAnchorElement(item, element) {
if (item[this.subItem] && this.alreadyTaken(element).length === 0) {
this.anchorElements.push({ 'rootElement': element, 'subItems': item[this.subItem] });
}
}
isRouterActive(item) {
return this.router.url === item[this.link];
}
alreadyTaken(element) {
const anchor = this.anchorElements.filter((value) => {
return value.rootElement === element;
});
return anchor;
}
callbackListElement($event, item) {
$event.stopPropagation();
if (item[this.link]) {
return this.router.navigate([item[this.link]], { queryParams: item['queryParams'] });
}
if (item['callBack']) {
this.callBack = item['callBack'];
this.callBack($event);
}
}
getWidth() {
return Math.round(parseInt(this.width, 10) + 1) + 'px';
}
ngOnChanges(changes) { }
ngOnDestroy() { }
}
/** @nocollapse */ TlSimpleSubMenu.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TlSimpleSubMenu, deps: [{ token: i1.Router }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
/** @nocollapse */ TlSimpleSubMenu.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TlSimpleSubMenu, selector: "tl-simple-sub-menu", viewQueries: [{ propertyName: "subMenuList", first: true, predicate: ["subMenuList"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<ul class=\"ui-simple-sub-menu-list\" [ngClass]=\"{'docked': docked}\"\n [style.left]=\"getWidth()\"\n [style.width]=\"width\"\n [style.top]=\"'-' + itemHeight\" #subMenuList>\n <li #elementList class=\"ui-simple-list-item\" [style.height]=\"itemHeight\"\n [class.router-active]=\"isRouterActive(item)\"\n [style.line-height]=\"itemHeight\"\n (keydown.enter)=\"callbackListElement($event, item)\"\n (click)=\"callbackListElement($event, item)\"\n *ngFor=\"let item of items\">\n <i [style.height]=\"itemHeight\" [style.line-height]=\"itemHeight\" [class]=\"'icon ' + item[icon]\"></i>\n <span [style.height]=\"itemHeight\" [style.line-height]=\"itemHeight\" class=\"label\">{{item[label]}}</span>\n <i [style.height]=\"itemHeight\" [style.line-height]=\"itemHeight\" *ngIf=\"item[subItem]\" [ngClass]=\"{'anchor': setAnchorElement(item, elementList)}\"\n class=\"ion ion-ios-arrow-forward icon\"></i>\n </li>\n</ul>\n", styles: [":host{width:auto;grid-column-end:span 4;visibility:hidden}.ui-simple-sub-menu-list{font-family:Lato,sans-serif;list-style:none;margin:0;padding:0;position:relative;outline:1px solid #C8C8C8;z-index:100}.ui-simple-list-item{position:relative;font-family:Lato,sans-serif;font-size:1em;display:grid;cursor:pointer;text-decoration:none;height:40px;line-height:40px;grid-template-columns:20px 1fr 20px}.ui-simple-list-item>.icon{text-align:center;font-size:1.1em}.ui-simple-list-item>.label{padding:0;font-style:normal;font-size:1em;text-align:left;font-weight:400;height:40px;line-height:40px}.ui-simple-list-item:hover>::ng-deep tl-simple-sub-menu{visibility:visible}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TlSimpleSubMenu, decorators: [{
type: Component,
args: [{ selector: 'tl-simple-sub-menu', template: "<ul class=\"ui-simple-sub-menu-list\" [ngClass]=\"{'docked': docked}\"\n [style.left]=\"getWidth()\"\n [style.width]=\"width\"\n [style.top]=\"'-' + itemHeight\" #subMenuList>\n <li #elementList class=\"ui-simple-list-item\" [style.height]=\"itemHeight\"\n [class.router-active]=\"isRouterActive(item)\"\n [style.line-height]=\"itemHeight\"\n (keydown.enter)=\"callbackListElement($event, item)\"\n (click)=\"callbackListElement($event, item)\"\n *ngFor=\"let item of items\">\n <i [style.height]=\"itemHeight\" [style.line-height]=\"itemHeight\" [class]=\"'icon ' + item[icon]\"></i>\n <span [style.height]=\"itemHeight\" [style.line-height]=\"itemHeight\" class=\"label\">{{item[label]}}</span>\n <i [style.height]=\"itemHeight\" [style.line-height]=\"itemHeight\" *ngIf=\"item[subItem]\" [ngClass]=\"{'anchor': setAnchorElement(item, elementList)}\"\n class=\"ion ion-ios-arrow-forward icon\"></i>\n </li>\n</ul>\n", styles: [":host{width:auto;grid-column-end:span 4;visibility:hidden}.ui-simple-sub-menu-list{font-family:Lato,sans-serif;list-style:none;margin:0;padding:0;position:relative;outline:1px solid #C8C8C8;z-index:100}.ui-simple-list-item{position:relative;font-family:Lato,sans-serif;font-size:1em;display:grid;cursor:pointer;text-decoration:none;height:40px;line-height:40px;grid-template-columns:20px 1fr 20px}.ui-simple-list-item>.icon{text-align:center;font-size:1.1em}.ui-simple-list-item>.label{padding:0;font-style:normal;font-size:1em;text-align:left;font-weight:400;height:40px;line-height:40px}.ui-simple-list-item:hover>::ng-deep tl-simple-sub-menu{visibility:visible}\n"] }]
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { subMenuList: [{
type: ViewChild,
args: ['subMenuList', { static: true }]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLXN1Yi1tZW51LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHJ1bHktdWkvc3JjL2NvbXBvbmVudHMvbWVudS9wYXJ0cy9zaW1wbGUvc2ltcGxlLXN1Yi1tZW51LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHJ1bHktdWkvc3JjL2NvbXBvbmVudHMvbWVudS9wYXJ0cy9zaW1wbGUvc2ltcGxlLXN1Yi1tZW51Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBQ0gsT0FBTyxFQUNFLFNBQVMsRUFBdUMsU0FBUyxFQUNqRSxNQUFNLGVBQWUsQ0FBQzs7OztBQVN2QixNQUFNLE9BQU8sZUFBZTtJQTBCMUIsWUFBcUIsTUFBYyxFQUFVLE1BQXlCO1FBQWpELFdBQU0sR0FBTixNQUFNLENBQVE7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFtQjtRQXhCL0QsU0FBSSxHQUFHLEVBQUUsQ0FBQztRQUVWLFVBQUssR0FBRyxFQUFFLENBQUM7UUFFWCxZQUFPLEdBQUcsRUFBRSxDQUFDO1FBRWIsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUVYLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFVZixtQkFBYyxHQUFHLEVBQUUsQ0FBQztRQUVuQixhQUFRLEdBQUcsUUFBUSxFQUFFLENBQUM7SUFJNEMsQ0FBQztJQUUzRSxjQUFjLENBQUUsS0FBSztRQUNuQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCxhQUFhLENBQUUsVUFBVTtRQUN2QixNQUFNLENBQUMsSUFBSSxDQUFFLFVBQVUsQ0FBRSxDQUFDLE9BQU8sQ0FBRSxDQUFFLElBQUksRUFBRyxFQUFFO1lBQzVDLElBQUksQ0FBRSxJQUFJLENBQUUsR0FBRyxVQUFVLENBQUUsSUFBSSxDQUFFLENBQUM7UUFDcEMsQ0FBQyxDQUFFLENBQUM7SUFDTixDQUFDO0lBRUQsZ0JBQWdCLENBQUUsSUFBSSxFQUFFLE9BQU87UUFDN0IsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNqRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFDLGFBQWEsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUMsQ0FBQyxDQUFDO1NBQ3BGO0lBQ0gsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFJO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsWUFBWSxDQUFDLE9BQU87UUFDbEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNsRCxPQUFPLEtBQUssQ0FBQyxXQUFXLEtBQUssT0FBTyxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELG1CQUFtQixDQUFFLE1BQU0sRUFBRSxJQUFJO1FBQy9CLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN6QixJQUFLLElBQUksQ0FBRSxJQUFJLENBQUMsSUFBSSxDQUFFLEVBQUc7WUFDdkIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBRSxDQUFFLElBQUksQ0FBRSxJQUFJLENBQUMsSUFBSSxDQUFFLENBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBRSxDQUFDO1NBQzVGO1FBQ0QsSUFBSyxJQUFJLENBQUUsVUFBVSxDQUFFLEVBQUc7WUFDeEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUUsVUFBVSxDQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBRSxNQUFNLENBQUUsQ0FBQztTQUN6QjtJQUNILENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUN6RCxDQUFDO0lBRUQsV0FBVyxDQUFFLE9BQXNCLElBQUksQ0FBQztJQUV4QyxXQUFXLEtBQUksQ0FBQzs7Z0lBekVMLGVBQWU7b0hBQWYsZUFBZSx5TUNoQzVCLDA4QkFnQkE7NEZEZ0JhLGVBQWU7a0JBTDNCLFNBQVM7K0JBQ0Usb0JBQW9COzZIQTRCYyxXQUFXO3NCQUF0RCxTQUFTO3VCQUFFLGFBQWEsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuIE1JVCBMaWNlbnNlXG5cbiBDb3B5cmlnaHQgKGMpIDIwMTkgVGVtYWluZm8gU2lzdGVtYXNcblxuIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gU09GVFdBUkUuXG4gKi9cbmltcG9ydCB7XG4gIElucHV0LCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIENoYW5nZURldGVjdG9yUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7Q2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0fSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcblxuQENvbXBvbmVudCgge1xuICBzZWxlY3RvcjogJ3RsLXNpbXBsZS1zdWItbWVudScsXG4gIHRlbXBsYXRlVXJsOiAnLi9zaW1wbGUtc3ViLW1lbnUuaHRtbCcsXG4gIHN0eWxlVXJsczogWyAnLi9zaW1wbGUtc3ViLW1lbnUuc2NzcycgXSxcbn0gKVxuZXhwb3J0IGNsYXNzIFRsU2ltcGxlU3ViTWVudSBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcblxuICBwdWJsaWMgaWNvbiA9ICcnO1xuXG4gIHB1YmxpYyBsYWJlbCA9ICcnO1xuXG4gIHB1YmxpYyBzdWJJdGVtID0gJyc7XG5cbiAgcHVibGljIGl0ZW1zID0gW107XG5cbiAgcHVibGljIGRvY2tlZCA9IGZhbHNlO1xuXG4gIHB1YmxpYyB3aWR0aDtcblxuICBwdWJsaWMgaXRlbUhlaWdodDtcblxuICBwdWJsaWMgZG9ja1dpZHRoO1xuXG4gIHB1YmxpYyBsaW5rO1xuXG4gIHB1YmxpYyBhbmNob3JFbGVtZW50cyA9IFtdO1xuXG4gIHByaXZhdGUgY2FsbEJhY2sgPSBGdW5jdGlvbigpO1xuXG4gIEBWaWV3Q2hpbGQoICdzdWJNZW51TGlzdCcsIHtzdGF0aWM6IHRydWV9ICkgc3ViTWVudUxpc3Q6IEVsZW1lbnRSZWY7XG5cbiAgY29uc3RydWN0b3IoIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsIHByaXZhdGUgY2hhbmdlOiBDaGFuZ2VEZXRlY3RvclJlZiApIHt9XG5cbiAgc2V0RGF0YVN1Yk1lbnUoIGl0ZW1zICkge1xuICAgIHRoaXMuaXRlbXMgPSBpdGVtcztcbiAgICB0aGlzLmNoYW5nZS5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBzZXRQcm9wZXJ0aWVzKCBwcm9wZXJ0aWVzICkge1xuICAgIE9iamVjdC5rZXlzKCBwcm9wZXJ0aWVzICkuZm9yRWFjaCggKCBpdGVtICkgPT4ge1xuICAgICAgdGhpc1sgaXRlbSBdID0gcHJvcGVydGllc1sgaXRlbSBdO1xuICAgIH0gKTtcbiAgfVxuXG4gIHNldEFuY2hvckVsZW1lbnQoIGl0ZW0sIGVsZW1lbnQgKSB7XG4gICAgaWYgKGl0ZW1bdGhpcy5zdWJJdGVtXSAmJiB0aGlzLmFscmVhZHlUYWtlbihlbGVtZW50KS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuYW5jaG9yRWxlbWVudHMucHVzaCh7J3Jvb3RFbGVtZW50JzogZWxlbWVudCwgJ3N1Ykl0ZW1zJzogaXRlbVt0aGlzLnN1Ykl0ZW1dfSk7XG4gICAgfVxuICB9XG5cbiAgaXNSb3V0ZXJBY3RpdmUoaXRlbSkge1xuICAgIHJldHVybiB0aGlzLnJvdXRlci51cmwgPT09IGl0ZW1bdGhpcy5saW5rXTtcbiAgfVxuXG4gIGFscmVhZHlUYWtlbihlbGVtZW50KSB7XG4gICAgY29uc3QgYW5jaG9yID0gdGhpcy5hbmNob3JFbGVtZW50cy5maWx0ZXIoKHZhbHVlKSA9PiB7XG4gICAgICByZXR1cm4gdmFsdWUucm9vdEVsZW1lbnQgPT09IGVsZW1lbnQ7XG4gICAgfSk7XG4gICAgcmV0dXJuIGFuY2hvcjtcbiAgfVxuXG4gIGNhbGxiYWNrTGlzdEVsZW1lbnQoICRldmVudCwgaXRlbSApIHtcbiAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKCBpdGVtWyB0aGlzLmxpbmsgXSApIHtcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlci5uYXZpZ2F0ZSggWyBpdGVtWyB0aGlzLmxpbmsgXSBdLCB7IHF1ZXJ5UGFyYW1zOiBpdGVtWydxdWVyeVBhcmFtcyddIH0gKTtcbiAgICB9XG4gICAgaWYgKCBpdGVtWyAnY2FsbEJhY2snIF0gKSB7XG4gICAgICB0aGlzLmNhbGxCYWNrID0gaXRlbVsgJ2NhbGxCYWNrJyBdO1xuICAgICAgdGhpcy5jYWxsQmFjayggJGV2ZW50ICk7XG4gICAgfVxuICB9XG5cbiAgZ2V0V2lkdGgoKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQocGFyc2VJbnQodGhpcy53aWR0aCwgMTApICsgMSkgKyAncHgnO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoIGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMgKSB7fVxuXG4gIG5nT25EZXN0cm95KCkge31cblxufVxuIiwiPHVsIGNsYXNzPVwidWktc2ltcGxlLXN1Yi1tZW51LWxpc3RcIiBbbmdDbGFzc109XCJ7J2RvY2tlZCc6IGRvY2tlZH1cIlxuICAgIFtzdHlsZS5sZWZ0XT1cImdldFdpZHRoKClcIlxuICAgIFtzdHlsZS53aWR0aF09XCJ3aWR0aFwiXG4gICAgW3N0eWxlLnRvcF09XCInLScgKyBpdGVtSGVpZ2h0XCIgI3N1Yk1lbnVMaXN0PlxuICA8bGkgI2VsZW1lbnRMaXN0IGNsYXNzPVwidWktc2ltcGxlLWxpc3QtaXRlbVwiIFtzdHlsZS5oZWlnaHRdPVwiaXRlbUhlaWdodFwiXG4gICAgICBbY2xhc3Mucm91dGVyLWFjdGl2ZV09XCJpc1JvdXRlckFjdGl2ZShpdGVtKVwiXG4gICAgICBbc3R5bGUubGluZS1oZWlnaHRdPVwiaXRlbUhlaWdodFwiXG4gICAgICAoa2V5ZG93bi5lbnRlcik9XCJjYWxsYmFja0xpc3RFbGVtZW50KCRldmVudCwgaXRlbSlcIlxuICAgICAgKGNsaWNrKT1cImNhbGxiYWNrTGlzdEVsZW1lbnQoJGV2ZW50LCBpdGVtKVwiXG4gICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtc1wiPlxuICAgIDxpIFtzdHlsZS5oZWlnaHRdPVwiaXRlbUhlaWdodFwiIFtzdHlsZS5saW5lLWhlaWdodF09XCJpdGVtSGVpZ2h0XCIgW2NsYXNzXT1cIidpY29uICcgKyBpdGVtW2ljb25dXCI+PC9pPlxuICAgIDxzcGFuIFtzdHlsZS5oZWlnaHRdPVwiaXRlbUhlaWdodFwiIFtzdHlsZS5saW5lLWhlaWdodF09XCJpdGVtSGVpZ2h0XCIgY2xhc3M9XCJsYWJlbFwiPnt7aXRlbVtsYWJlbF19fTwvc3Bhbj5cbiAgICA8aSBbc3R5bGUuaGVpZ2h0XT1cIml0ZW1IZWlnaHRcIiBbc3R5bGUubGluZS1oZWlnaHRdPVwiaXRlbUhlaWdodFwiICpuZ0lmPVwiaXRlbVtzdWJJdGVtXVwiIFtuZ0NsYXNzXT1cInsnYW5jaG9yJzogc2V0QW5jaG9yRWxlbWVudChpdGVtLCBlbGVtZW50TGlzdCl9XCJcbiAgICAgICBjbGFzcz1cImlvbiBpb24taW9zLWFycm93LWZvcndhcmQgaWNvblwiPjwvaT5cbiAgPC9saT5cbjwvdWw+XG4iXX0=