UNPKG

@duoduo-oba/ng-devui

Version:

DevUI components based on Angular

318 lines 28.8 kB
/** * @fileoverview added by tsickle * Generated from: accordion.component.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, EventEmitter, Input, Output, TemplateRef } from '@angular/core'; import { I18nService } from '@duoduo-oba/ng-devui/i18n'; export class AccordionComponent { /** * @param {?} i18n */ constructor(i18n) { this.i18n = i18n; /* Key值定义, 用于自定义数据结构 */ this.titleKey = 'title'; // 标题的key,item[titleKey]类型为string,为标题显示内容 // 标题的key,item[titleKey]类型为string,为标题显示内容 this.loadingKey = 'loading'; // 子菜单动态加载item[loadingKey]类型为boolean // 子菜单动态加载item[loadingKey]类型为boolean this.childrenKey = 'children'; // 子菜单Key // 子菜单Key this.disabledKey = 'disabled'; // 是否禁用Key // 是否禁用Key this.activeKey = 'active'; // 菜单是否激活/选中 // 菜单是否激活/选中 this.openKey = 'open'; // 菜单是否打开 // 可点击菜单内容条模板 this.menuToggle = new EventEmitter(); // 可展开菜单展开事件 // 可展开菜单展开事件 this.itemClick = new EventEmitter(); // 可点击菜单点击事件 // 可点击菜单点击事件 this.activeItemChange = new EventEmitter(); /** * 高级选项和模板 */ this.restrictOneOpen = false; // 限制一级菜单同时只能打开一个 // 限制一级菜单同时只能打开一个 this.autoOpenActiveMenu = false; // 自动展开活跃菜单 // 自动展开活跃菜单 this.showNoContent = true; // 没有内容的时候是否显示没有数据 // 可折叠菜单内容完全自定义,用做折叠面板 /* 内置路由/链接/动态判断路由或链接类型 */ this.linkType = ''; this.linkTypeKey = 'linkType'; // linkType为'dependOnLinkTypeKey'时指定对象linkType定义区 // linkType为'dependOnLinkTypeKey'时指定对象linkType定义区 this.linkKey = 'link'; // 链接内容的key // 链接内容的key this.linkTargetKey = 'target'; // 链接目标窗口的key // 链接目标窗口的key this.linkDefaultTarget = '_self'; // 不设置target的时候target默认值 // 点击了可点击菜单 this.itemClickFn = (/** * @param {?} itemEvent * @return {?} */ (itemEvent) => { /** @type {?} */ const prevActiveItem = this.activeItem; this.activeItemFn(itemEvent.item); this.itemClick.emit(Object.assign({}, itemEvent, { prevActiveItem: prevActiveItem })); }); this.linkItemClickFn = (/** * @param {?} itemEvent * @return {?} */ (itemEvent) => { /** @type {?} */ const prevActiveItem = this.activeItem; this.activeItem = itemEvent.item; this.itemClick.emit(Object.assign({}, itemEvent, { prevActiveItem: prevActiveItem })); }); // 打开或关闭可折叠菜单 this.menuToggleFn = (/** * @param {?} menuEvent * @return {?} */ (menuEvent) => { this.openMenuFn(menuEvent.item, menuEvent.open); this.menuToggle.emit(menuEvent); }); } /** * @param {?} changes * @return {?} */ ngOnChanges(changes) { if (changes['data']) { this.initActiveItem(); } if (changes['autoOpenActiveMenu']) { if (this.autoOpenActiveMenu && changes['autoOpenActiveMenu'].previousValue === false) { this.cleanOpenData(); } } } /** * @return {?} */ ngOnInit() { if (this.data) { this.initActiveItem(); } this.i18nCommonText = this.i18n.getI18nText().common; this.i18nSubscription = this.i18n.langChange().subscribe((/** * @param {?} data * @return {?} */ data => { this.i18nCommonText = data.common; })); } /** * @return {?} */ ngOnDestroy() { if (this.i18nSubscription) { this.i18nSubscription.unsubscribe(); } } /** * @private * @param {?} arr * @param {?=} childrenKey * @param {?=} includeParent * @param {?=} includeLeaf * @return {?} */ flatten(arr, childrenKey = 'children', includeParent = false, includeLeaf = true) { return arr.reduce((/** * @param {?} acc * @param {?} cur * @return {?} */ (acc, cur) => { /** @type {?} */ const children = cur[childrenKey]; if (children === undefined) { if (includeLeaf) { acc.push(cur); } } else { if (includeParent) { acc.push(cur); } if (Array.isArray(children)) { acc.push(...this.flatten(children, childrenKey, includeParent)); } } return acc; }), []); } /** * @private * @return {?} */ cleanOpenData() { this.flatten(this.data, this.childrenKey, true, false).forEach((/** * @param {?} item * @return {?} */ item => item[this.openKey] = undefined)); } // 默认激活 /** * @return {?} */ initActiveItem() { /** @type {?} */ const activeItem = this.flatten(this.data, this.childrenKey) .filter((/** * @param {?} item * @return {?} */ item => item[this.activeKey])).pop(); if (activeItem) { if (!this.activeItem) { this.activeItemFn(activeItem); } } else { this.activeItem = undefined; } } // 激活子菜单项并去掉其他子菜单的激活 /** * @param {?} item * @return {?} */ activeItemFn(item) { if (this.activeItem && this.activeItem[this.activeKey]) { this.activeItem[this.activeKey] = false; } item[this.activeKey] = true; this.activeItem = item; this.activeItemChange.emit(this.activeItem); } // 打开或关闭一级菜单,如果有限制只能展开一项则关闭其他一级菜单 /** * @param {?} item * @param {?} open * @return {?} */ openMenuFn(item, open) { if (open && this.restrictOneOpen) { ((/** @type {?} */ ((this.data)))).forEach((/** * @param {?} itemtemp * @return {?} */ itemtemp => { itemtemp[this.openKey] = false; })); } item[this.openKey] = open; } } AccordionComponent.decorators = [ { type: Component, args: [{ selector: 'd-accordion', template: "<d-accordion-list class=\"devui-accordion-menu devui-scrollbar\" [data]=\"data\" [deepth]=\"0\" [parent]=\"null\"> </d-accordion-list>\r\n", styles: ["@charset \"UTF-8\";:host{display:block}:host ::ng-deep d-accordion-item,:host ::ng-deep d-accordion-item-hreflink,:host ::ng-deep d-accordion-item-routerlink,:host ::ng-deep d-accordion-list,:host ::ng-deep d-accordion-menu{display:block}:host ::ng-deep .devui-accordion-menu{display:block;background:#fff;box-shadow:0 1px 2px 0 rgba(41,48,64,.2);width:100%;overflow-y:auto}:host ::ng-deep .devui-accordion-menu>.devui-accordion-list>.devui-accordion-item>.devui-accordion-item-title,:host ::ng-deep .devui-accordion-menu>.devui-accordion-list>.devui-accordion-item>.devui-accordion-menu-item>.devui-accordion-item-title{font-weight:700}:host ::ng-deep .devui-accordion-menu .devui-over-flow-ellipsis{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}:host ::ng-deep .devui-accordion-submenu{background:#fff;width:100%}:host ::ng-deep .devui-accordion-item-title{display:block;height:40px;width:100%;padding:0 10px 0 20px;font-weight:400;line-height:40px;color:#252b3a;background:0 0;cursor:pointer}:host ::ng-deep .devui-accordion-item-title.disabled{opacity:.3;cursor:default}:host ::ng-deep .devui-accordion-item-title:not(.disabled):hover{background:#f2f5fc}:host ::ng-deep .devui-accordion-item-title:not(.disabled).active,:host ::ng-deep .devui-accordion-item-title:not(.disabled).devui-router-active{color:#5e7ce0;background:#f2f5fc}:host ::ng-deep .devui-accordion-item-title:not(.disabled).active>a,:host ::ng-deep .devui-accordion-item-title:not(.disabled).devui-router-active>a{color:#5e7ce0}:host ::ng-deep .devui-accordion-item-title>a{text-decoration:none;display:block;width:100%;color:#252b3a}:host ::ng-deep .devui-accordion-item-title>a:hover{color:inherit;text-decoration:none}:host ::ng-deep d-accordion-item-hreflink.devui-accordion-item-title,:host ::ng-deep d-accordion-item-routerlink.devui-accordion-item-title{padding:0}:host ::ng-deep d-accordion-item-hreflink.devui-accordion-item-title>a,:host ::ng-deep d-accordion-item-routerlink.devui-accordion-item-title>a{padding:0 10px 0 20px}:host ::ng-deep .devui-accordion-menu-item>.devui-accordion-item-title{position:relative;padding-right:30px}:host ::ng-deep .devui-accordion-menu-item>.devui-accordion-item-title>.devui-accordion-open-icon{display:inline-block;text-indent:0;pointer-events:none;position:absolute;right:10px;top:12px;width:16px;height:16px;line-height:16px;-webkit-transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out}:host ::ng-deep .devui-accordion-menu-item>.devui-accordion-item-title>.devui-accordion-open-icon>svg{width:16px;height:16px}:host ::ng-deep .devui-accordion-menu-item>.devui-accordion-item-title>.devui-accordion-open-icon>svg polygon{fill:#252b3a}:host ::ng-deep .devui-accordion-menu-item>.devui-accordion-item-title:not(.open)>.devui-accordion-open-icon{-webkit-transform:rotate(-90deg);transform:rotate(-90deg);-webkit-transform-origin:center;transform-origin:center}:host ::ng-deep .devui-accordion-menu-item>.devui-accordion-item-title.disabled>.devui-accordion-open-icon{opacity:.3}:host ::ng-deep .devui-accordion-menu-item>.devui-accordion-item-title.active{color:#5e7ce0;background:0 0}:host ::ng-deep d-accordion-list.devui-accordion-menu-hidden{display:none}"] }] } ]; /** @nocollapse */ AccordionComponent.ctorParameters = () => [ { type: I18nService } ]; AccordionComponent.propDecorators = { data: [{ type: Input }], titleKey: [{ type: Input }], loadingKey: [{ type: Input }], childrenKey: [{ type: Input }], disabledKey: [{ type: Input }], activeKey: [{ type: Input }], openKey: [{ type: Input }], menuItemTemplate: [{ type: Input }], itemTemplate: [{ type: Input }], menuToggle: [{ type: Output }], itemClick: [{ type: Output }], activeItemChange: [{ type: Output }], restrictOneOpen: [{ type: Input }], autoOpenActiveMenu: [{ type: Input }], showNoContent: [{ type: Input }], noContentTemplate: [{ type: Input }], loadingTemplate: [{ type: Input }], innerListTemplate: [{ type: Input }], linkType: [{ type: Input }], linkTypeKey: [{ type: Input }], linkKey: [{ type: Input }], linkTargetKey: [{ type: Input }], linkDefaultTarget: [{ type: Input }] }; if (false) { /** @type {?} */ AccordionComponent.prototype.data; /** @type {?} */ AccordionComponent.prototype.titleKey; /** @type {?} */ AccordionComponent.prototype.loadingKey; /** @type {?} */ AccordionComponent.prototype.childrenKey; /** @type {?} */ AccordionComponent.prototype.disabledKey; /** @type {?} */ AccordionComponent.prototype.activeKey; /** @type {?} */ AccordionComponent.prototype.openKey; /** @type {?} */ AccordionComponent.prototype.menuItemTemplate; /** @type {?} */ AccordionComponent.prototype.itemTemplate; /** @type {?} */ AccordionComponent.prototype.menuToggle; /** @type {?} */ AccordionComponent.prototype.itemClick; /** @type {?} */ AccordionComponent.prototype.activeItemChange; /** * 高级选项和模板 * @type {?} */ AccordionComponent.prototype.restrictOneOpen; /** @type {?} */ AccordionComponent.prototype.autoOpenActiveMenu; /** @type {?} */ AccordionComponent.prototype.showNoContent; /** @type {?} */ AccordionComponent.prototype.noContentTemplate; /** @type {?} */ AccordionComponent.prototype.loadingTemplate; /** @type {?} */ AccordionComponent.prototype.innerListTemplate; /** @type {?} */ AccordionComponent.prototype.linkType; /** @type {?} */ AccordionComponent.prototype.linkTypeKey; /** @type {?} */ AccordionComponent.prototype.linkKey; /** @type {?} */ AccordionComponent.prototype.linkTargetKey; /** @type {?} */ AccordionComponent.prototype.linkDefaultTarget; /** @type {?} */ AccordionComponent.prototype.activeItem; /** @type {?} */ AccordionComponent.prototype.i18nCommonText; /** @type {?} */ AccordionComponent.prototype.i18nSubscription; /** @type {?} */ AccordionComponent.prototype.itemClickFn; /** @type {?} */ AccordionComponent.prototype.linkItemClickFn; /** @type {?} */ AccordionComponent.prototype.menuToggleFn; /** * @type {?} * @private */ AccordionComponent.prototype.i18n; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3JkaW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWRldnVpL2FjY29yZGlvbi8iLCJzb3VyY2VzIjpbImFjY29yZGlvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsV0FBVyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBRWpJLE9BQU8sRUFBRSxXQUFXLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBUTNELE1BQU0sT0FBTyxrQkFBa0I7Ozs7SUFxQzdCLFlBQW9CLElBQWlCO1FBQWpCLFNBQUksR0FBSixJQUFJLENBQWE7O1FBbEM1QixhQUFRLEdBQUcsT0FBTyxDQUFDLENBQUMseUNBQXlDOztRQUM3RCxlQUFVLEdBQUcsU0FBUyxDQUFDLENBQUMsb0NBQW9DOztRQUM1RCxnQkFBVyxHQUFHLFVBQVUsQ0FBQyxDQUFDLFNBQVM7O1FBQ25DLGdCQUFXLEdBQUcsVUFBVSxDQUFDLENBQUMsVUFBVTs7UUFDcEMsY0FBUyxHQUFHLFFBQVEsQ0FBQyxDQUFDLFlBQVk7O1FBQ2xDLFlBQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxTQUFTOztRQU0xQixlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQTRCLENBQUMsQ0FBQyxZQUFZOztRQUN2RSxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQTJCLENBQUMsQ0FBQyxZQUFZOztRQUNyRSxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDOzs7O1FBRzVDLG9CQUFlLEdBQUcsS0FBSyxDQUFDLENBQUMsaUJBQWlCOztRQUMxQyx1QkFBa0IsR0FBRyxLQUFLLENBQUMsQ0FBQyxXQUFXOztRQUN2QyxrQkFBYSxHQUFHLElBQUksQ0FBQyxDQUFDLGtCQUFrQjs7O1FBTXhDLGFBQVEsR0FBcUUsRUFBRSxDQUFDO1FBQ2hGLGdCQUFXLEdBQUcsVUFBVSxDQUFDLENBQUMsaURBQWlEOztR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MUIsOENBQTRDOztJQUM1QywwQ0FBd0M7O0lBRXhDLHdDQUFvRTs7SUFDcEUsdUNBQWtFOztJQUNsRSw4Q0FBcUQ7Ozs7O0lBR3JELDZDQUFpQzs7SUFDakMsZ0RBQW9DOztJQUNwQywyQ0FBOEI7O0lBQzlCLCtDQUE2Qzs7SUFDN0MsNkNBQTJDOztJQUMzQywrQ0FBNkM7O0lBRzdDLHNDQUF5Rjs7SUFDekYseUNBQWtDOztJQUNsQyxxQ0FBMEI7O0lBQzFCLDJDQUFrQzs7SUFDbEMsK0NBQXFDOztJQUVyQyx3Q0FBVzs7SUFDWCw0Q0FBd0M7O0lBQ3hDLDhDQUErQjs7SUFzRS9CLHlDQUlDOztJQUVELDZDQUlDOztJQUdELDBDQUdDOzs7OztJQXBGVyxrQ0FBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFRlbXBsYXRlUmVmLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWNjb3JkaW9uTWVudVR5cGUsIEFjY29yZGlvbk1lbnVUb2dnbGVFdmVudCwgQWNjb3JkaW9uSXRlbUNsaWNrRXZlbnQsIEFjY29yZGlvbk9wdGlvbnN9IGZyb20gJy4vYWNjb3JkaW9uLnR5cGUnO1xyXG5pbXBvcnQgeyBJMThuU2VydmljZSwgSTE4bkludGVyZmFjZSB9IGZyb20gJ25nLWRldnVpL2kxOG4nO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZC1hY2NvcmRpb24nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hY2NvcmRpb24uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2FjY29yZGlvbi5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQWNjb3JkaW9uQ29tcG9uZW50IGltcGxlbWVudHMgQWNjb3JkaW9uT3B0aW9ucywgT25DaGFuZ2VzLCBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KCkgZGF0YTogQXJyYXk8YW55PiB8IEFjY29yZGlvbk1lbnVUeXBlO1xyXG4gIC8qIEtleeWAvOWumuS5iSwg55So5LqO6Ieq5a6a5LmJ5pWw5o2u57uT5p6EICovXHJcbiAgQElucHV0KCkgdGl0bGVLZXkgPSAndGl0bGUnOyAvLyDmoIfpopjnmoRrZXnvvIxpdGVtW3RpdGxlS2V5Xeexu+Wei+S4unN0cmluZ++8jOS4uuagh+mimOaYvuekuuWGheWuuVxyXG4gIEBJbnB1dCgpIGxvYWRpbmdLZXkgPSAnbG9hZGluZyc7IC8vIOWtkOiPnOWNleWKqOaAgeWKoOi9vWl0ZW1bbG9hZGluZ0tleV3nsbvlnovkuLpib29sZWFuXHJcbiAgQElucHV0KCkgY2hpbGRyZW5LZXkgPSAnY2hpbGRyZW4nOyAvLyDlrZDoj5zljZVLZXlcclxuICBASW5wdXQoKSBkaXNhYmxlZEtleSA9ICdkaXNhYmxlZCc7IC8vIOaYr+WQpuemgeeUqEtleVxyXG4gIEBJbnB1dCgpIGFjdGl2ZUtleSA9ICdhY3RpdmUnOyAvLyDoj5zljZXmmK/lkKbmv4DmtLsv6YCJ5LitXHJcbiAgQElucHV0KCkgb3BlbktleSA9ICdvcGVuJzsgLy8g6I+c5Y2V5piv5ZCm5omT5byAXHJcblxyXG4gIC8qIOiPnOWNleaooeadvyAqL1xyXG4gIEBJbnB1dCgpIG1lbnVJdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47IC8vIOWPr+WxleW8gOiPnOWNleWGheWuueadoeaooeadv1xyXG4gIEBJbnB1dCgpIGl0ZW1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjsgLy8g5Y+v54K55Ye76I+c5Y2V5YaF5a655p2h5qih5p2/XHJcblxyXG4gIEBPdXRwdXQoKSBtZW51VG9nZ2xlID0gbmV3IEV2ZW50RW1pdHRlcjxBY2NvcmRpb25NZW51VG9nZ2xlRXZlbnQ+KCk7IC8vIOWPr+WxleW8gOiPnOWNleWxleW8gOS6i+S7tlxyXG4gIEBPdXRwdXQoKSBpdGVtQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEFjY29yZGlvbkl0ZW1DbGlja0V2ZW50PigpOyAvLyDlj6/ngrnlh7voj5zljZXngrnlh7vkuovku7ZcclxuICBAT3V0cHV0KCkgYWN0aXZlSXRlbUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICAvKiog6auY57qn6YCJ6aG55ZKM5qih5p2/ICovXHJcbiAgQElucHV0KCkgcmVzdHJpY3RPbmVPcGVuID0gZmFsc2U7IC8vIOmZkOWItuS4gOe6p+iPnOWNleWQjOaXtuWPquiDveaJk+W8gOS4gOS4qlxyXG4gIEBJbnB1dCgpIGF1dG9PcGVuQWN0aXZlTWVudSA9IGZhbHNlOyAvLyDoh6rliqjlsZXlvIDmtLvot4Poj5zljZVcclxuICBASW5wdXQoKSBzaG93Tm9Db250ZW50ID0gdHJ1ZTsgLy8g5rKh5pyJ5YaF5a6555qE5pe25YCZ5piv5ZCm5pi+56S65rKh5pyJ5pWw5o2uXHJcbiAgQElucHV0KCkgbm9Db250ZW50VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47IC8vIOayoeacieWGheWuueeahOaXtuWAmeS9v+eUqOiHquWumuS5ieaooeadv1xyXG4gIEBJbnB1dCgpIGxvYWRpbmdUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjsgLy8g5Yqg6L295Lit5L2/55So6Ieq5a6a5LmJ5qih5p2/XHJcbiAgQElucHV0KCkgaW5uZXJMaXN0VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47IC8vIOWPr+aKmOWPoOiPnOWNleWGheWuueWujOWFqOiHquWumuS5ie+8jOeUqOWBmuaKmOWPoOmdouadv1xyXG5cclxuICAvKiDlhoXnva7ot6/nlLEv6ZO+5o6lL+WKqOaAgeWIpOaWrei3r+eUseaIlumTvuaOpeexu+WeiyAqL1xyXG4gIEBJbnB1dCgpIGxpbmtUeXBlOiAncm91dGVyTGluaycgfCAnaHJlZkxpbmsnIHwgJ2RlcGVuZE9uTGlua1R5cGVLZXknIHwgJycgfCBzdHJpbmcgID0gJyc7XHJcbiAgQElucHV0KCkgbGlua1R5cGVLZXkgPSAnbGlua1R5cGUnOyAvLyBsaW5rVHlwZeS4uidkZXBlbmRPbkxpbmtUeXBlS2V5J+aXtuaMh+WumuWvueixoWxpbmtUeXBl5a6a5LmJ5Yy6XHJcbiAgQElucHV0KCkgbGlua0tleSA9ICdsaW5rJzsgLy8g6ZO+5o6l5YaF5a6555qEa2V5XHJcbiAgQElucHV0KCkgbGlua1RhcmdldEtleSA9ICd0YXJnZXQnOyAvLyDpk77mjqXnm67moIfnqpflj6PnmoRrZXlcclxuICBASW5wdXQoKSBsaW5rRGVmYXVsdFRhcmdldCA9ICdfc2VsZic7IC8vIOS4jeiuvue9rnRhcmdldOeahOaXtuWAmXRhcmdldOm7mOiupOWAvFxyXG5cclxuICBhY3RpdmVJdGVtOyAvLyDorrDlvZXnlKjmiLfngrnlh7vnmoTmv4DmtLvoj5zljZXpoblcclxuICBpMThuQ29tbW9uVGV4dDogSTE4bkludGVyZmFjZVsnY29tbW9uJ107XHJcbiAgaTE4blN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGkxOG46IEkxOG5TZXJ2aWNlKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBpZiAoY2hhbmdlc1snZGF0YSddKSB7XHJcbiAgICAgICB0aGlzLmluaXRBY3RpdmVJdGVtKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1snYXV0b09wZW5BY3RpdmVNZW51J10pIHtcclxuICAgICAgaWYgKHRoaXMuYXV0b09wZW5BY3RpdmVNZW51ICYmIGNoYW5nZXNbJ2F1dG9PcGVuQWN0aXZlTWVudSddLnByZXZpb3VzVmFsdWUgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgdGhpcy5jbGVhbk9wZW5EYXRhKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YSkge1xyXG4gICAgICB0aGlzLmluaXRBY3RpdmVJdGVtKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmkxOG5Db21tb25UZXh0ID0gdGhpcy5pMThuLmdldEkxOG5UZXh0KCkuY29tbW9uO1xyXG4gICAgdGhpcy5pMThuU3Vic2NyaXB0aW9uID0gdGhpcy5pMThuLmxhbmdDaGFuZ2UoKS5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgIHRoaXMuaTE4bkNvbW1vblRleHQgPSBkYXRhLmNvbW1vbjtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICBpZiAodGhpcy5pMThuU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuaTE4blN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmbGF0dGVuKGFycjogQXJyYXk8YW55PiwgY2hpbGRyZW5LZXkgPSAnY2hpbGRyZW4nLCBpbmNsdWRlUGFyZW50ID0gZmFsc2UsIGluY2x1ZGVMZWFmID0gdHJ1ZSkge1xyXG4gICAgcmV0dXJuIGFyci5yZWR1Y2UoKGFjYywgY3VyKSA9PiB7XHJcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gY3VyW2NoaWxkcmVuS2V5XTtcclxuICAgICAgaWYgKCBjaGlsZHJlbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKGluY2x1ZGVMZWFmKSB7XHJcbiAgICAgICAgICBhY2MucHVzaChjdXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoaW5jbHVkZVBhcmVudCkge1xyXG4gICAgICAgICAgYWNjLnB1c2goY3VyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XHJcbiAgICAgICAgICBhY2MucHVzaCguLi50aGlzLmZsYXR0ZW4oY2hpbGRyZW4sIGNoaWxkcmVuS2V5LCBpbmNsdWRlUGFyZW50KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhY2M7XHJcbiAgICB9LCBbXSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFuT3BlbkRhdGEoKSB7XHJcbiAgICB0aGlzLmZsYXR0ZW4odGhpcy5kYXRhLCB0aGlzLmNoaWxkcmVuS2V5LCB0cnVlLCBmYWxzZSkuZm9yRWFjaChcclxuICAgICAgaXRlbSA9PiBpdGVtW3RoaXMub3BlbktleV0gPSB1bmRlZmluZWRcclxuICAgICk7XHJcbiAgfVxyXG4gIC8vIOm7mOiupOa/gOa0u1xyXG4gIGluaXRBY3RpdmVJdGVtKCkge1xyXG4gICAgY29uc3QgYWN0aXZlSXRlbSA9IHRoaXMuZmxhdHRlbih0aGlzLmRhdGEsIHRoaXMuY2hpbGRyZW5LZXkpXHJcbiAgICAgIC5maWx0ZXIoaXRlbSA9PiBpdGVtW3RoaXMuYWN0aXZlS2V5XSkucG9wKCk7XHJcbiAgICBpZiAoYWN0aXZlSXRlbSkge1xyXG4gICAgICBpZiAoIXRoaXMuYWN0aXZlSXRlbSkge1xyXG4gICAgICAgIHRoaXMuYWN0aXZlSXRlbUZuKGFjdGl2ZUl0ZW0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmFjdGl2ZUl0ZW0gPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyDngrnlh7vkuoblj6/ngrnlh7voj5zljZVcclxuICBwdWJsaWMgaXRlbUNsaWNrRm4gPSAoaXRlbUV2ZW50OiBBY2NvcmRpb25JdGVtQ2xpY2tFdmVudCkgPT4ge1xyXG4gICAgY29uc3QgcHJldkFjdGl2ZUl0ZW0gPSB0aGlzLmFjdGl2ZUl0ZW07XHJcbiAgICB0aGlzLmFjdGl2ZUl0ZW1GbihpdGVtRXZlbnQuaXRlbSk7XHJcbiAgICB0aGlzLml0ZW1DbGljay5lbWl0KHsuLi5pdGVtRXZlbnQsIHByZXZBY3RpdmVJdGVtOiBwcmV2QWN0aXZlSXRlbX0pO1xyXG4gIH1cclxuXHJcbiAgbGlua0l0ZW1DbGlja0ZuID0gKGl0ZW1FdmVudDogQWNjb3JkaW9uSXRlbUNsaWNrRXZlbnQpID0+IHtcclxuICAgIGNvbnN0IHByZXZBY3RpdmVJdGVtID0gdGhpcy5hY3RpdmVJdGVtO1xyXG4gICAgdGhpcy5hY3RpdmVJdGVtID0gaXRlbUV2ZW50Lml0ZW07XHJcbiAgICB0aGlzLml0ZW1DbGljay5lbWl0KHsuLi5pdGVtRXZlbnQsIHByZXZBY3RpdmVJdGVtOiBwcmV2QWN0aXZlSXRlbX0pO1xyXG4gIH1cclxuXHJcbiAgLy8g5omT5byA5oiW5YWz6Zet5Y+v5oqY5Y+g6I+c5Y2VXHJcbiAgcHVibGljIG1lbnVUb2dnbGVGbiA9IChtZW51RXZlbnQ6IEFjY29yZGlvbk1lbnVUb2dnbGVFdmVudCkgPT4ge1xyXG4gICAgdGhpcy5vcGVuTWVudUZuKG1lbnVFdmVudC5pdGVtLCBtZW51RXZlbnQub3Blbik7XHJcbiAgICB0aGlzLm1lbnVUb2dnbGUuZW1pdChtZW51RXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgLy8g5r+A5rS75a2Q6I+c5Y2V6aG55bm25Y675o6J5YW25LuW5a2Q6I+c5Y2V55qE5r+A5rS7XHJcbiAgYWN0aXZlSXRlbUZuKGl0ZW0pIHtcclxuICAgIGlmICh0aGlzLmFjdGl2ZUl0ZW0gJiYgdGhpcy5hY3RpdmVJdGVtW3RoaXMuYWN0aXZlS2V5XSkge1xyXG4gICAgICB0aGlzLmFjdGl2ZUl0ZW1bdGhpcy5hY3RpdmVLZXldID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpdGVtW3RoaXMuYWN0aXZlS2V5XSA9IHRydWU7XHJcbiAgICB0aGlzLmFjdGl2ZUl0ZW0gPSBpdGVtO1xyXG4gICAgdGhpcy5hY3RpdmVJdGVtQ2hhbmdlLmVtaXQodGhpcy5hY3RpdmVJdGVtKTtcclxuICB9XHJcblxyXG4gIC8vIOaJk+W8gOaIluWFs+mXreS4gOe6p+iPnOWNle+8jOWmguaenOaciemZkOWItuWPquiDveWxleW8gOS4gOmhueWImeWFs+mXreWFtuS7luS4gOe6p+iPnOWNlVxyXG4gIG9wZW5NZW51Rm4oaXRlbSwgb3Blbikge1xyXG4gICAgaWYgKG9wZW4gJiYgdGhpcy5yZXN0cmljdE9uZU9wZW4pIHtcclxuICAgICAgKDxBcnJheTxhbnk+Pih0aGlzLmRhdGEpKS5mb3JFYWNoKGl0ZW10ZW1wID0+IHsgaXRlbXRlbXBbdGhpcy5vcGVuS2V5XSA9IGZhbHNlOyB9KTtcclxuICAgIH1cclxuICAgIGl0ZW1bdGhpcy5vcGVuS2V5XSA9IG9wZW47XHJcbiAgfVxyXG59XHJcbiJdfQ==