ng-devui
Version:
DevUI components based on Angular
147 lines • 32.4 kB
JavaScript
import { Component, HostBinding, Inject, Input, QueryList, ViewChildren, ViewEncapsulation } from '@angular/core';
import { expandCollapse, expandCollapseForDomDestroy } from 'ng-devui/utils';
import { AccordionItemRouterlinkComponent } from './accordion-item-routerlink.component';
import { AccordionMenuComponent } from './accordion-menu.component';
import { ACCORDION } from './accordion-token';
import { AccordionService } from './accordion.service';
import * as i0 from "@angular/core";
import * as i1 from "./accordion.service";
import * as i2 from "@angular/common";
import * as i3 from "./accordion-menu.component";
import * as i4 from "./accordion-item.component";
import * as i5 from "./accordion-item-hreflink.component";
import * as i6 from "./accordion-item-routerlink.component";
export class AccordionListComponent {
get animateState() {
return this.accordion.showAnimation;
}
get loading() {
return this.parent && this.parent[this.accordion.loadingKey];
}
get noContent() {
return this.data === undefined || this.data === null || this.data.length === 0;
}
get linkTypeKey() {
return this.accordion.linkTypeKey;
}
get childrenKey() {
return this.accordion.childrenKey;
}
get activeKey() {
return this.accordion.activeKey;
}
get itemTemplate() {
return this.accordion.itemTemplate;
}
get menuItemTemplate() {
return this.accordion.menuItemTemplate;
}
get innerListTemplate() {
return this.accordion.innerListTemplate;
}
get loadingTemplate() {
return this.accordion.loadingTemplate;
}
get noContentTemplate() {
return this.accordion.noContentTemplate;
}
get linkType() {
return this.accordion.linkType;
}
get i18nCommonText() {
return this.accordion.i18nCommonText;
}
get showNoContent() {
return this.accordion.showNoContent;
}
get linkDefaultTarget() {
return this.accordion.linkDefaultTarget;
}
get routerLinkActivated() {
return ((!!this.accordionItemRouterlinkQueryList && this.accordionItemRouterlinkQueryList.some((airlc) => this.isLinkRouterActive(airlc))) ||
(!!this.accordionMenuQueryList && this.accordionMenuQueryList.some((amc) => this.isMenuRouterActive(amc))));
}
get hasActiveChildren() {
return ((!!this.accordionMenuQueryList && this.accordionMenuQueryList.some((amc) => this.isMenuDataActive(amc))) ||
(!!this.data && !!this.data.length && this.data.some((item) => this.isItemData(item) && this.isItemDataActive(item))));
}
constructor(accordion, accordionService) {
this.accordion = accordion;
this.accordionService = accordionService;
this.deepth = 0;
this.menuToggleItemFn = (item, event) => {
this.accordion.menuToggleFn({
item: item,
open: !item[this.accordion.openKey],
parent: this.parent.parent,
event: event,
});
};
this.itemClickItemFn = (item, event) => {
this.accordion.itemClickFn({
item: item,
parent: this.parent,
event: event,
});
};
}
ngOnInit() {
if (this.parent) {
this.accordionService.setChildListInstance(this, this.parent);
}
}
ngOnDestroy() {
if (this.parent) {
this.accordionService.setChildListInstance(undefined, this.parent);
}
}
isLinkRouterActive(airlc) {
return airlc.routerLinkActivated;
}
isMenuRouterActive(amc) {
return amc.routerLinkActivated;
}
isMenuDataActive(amc) {
return amc.hasActiveChildren;
}
isItemDataActive(item) {
return !!item[this.activeKey];
}
isItemData(item) {
return item[this.childrenKey] === undefined;
}
getOpenState(item, list) {
let stateFlag = false;
if (item && list) {
const open = item[this.accordion.openKey];
const childActivated = list.routerLinkActivated || list.hasActiveChildren;
stateFlag = open === undefined && this.accordion.autoOpenActiveMenu ? childActivated : open;
}
return stateFlag ? 'expanded' : 'collapsed';
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AccordionListComponent, deps: [{ token: ACCORDION }, { token: i1.AccordionService }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AccordionListComponent, selector: "d-accordion-list", inputs: { data: "data", deepth: "deepth", parent: "parent" }, host: { properties: { "class.devui-accordion-show-animate": "this.animateState" } }, viewQueries: [{ propertyName: "accordionMenuQueryList", predicate: AccordionMenuComponent, descendants: true }, { propertyName: "accordionItemRouterlinkQueryList", predicate: AccordionItemRouterlinkComponent, descendants: true }], ngImport: i0, template: "<ul class=\"devui-accordion-list\" *ngIf=\"!innerListTemplate || deepth === 0\">\n <li class=\"devui-accordion-item\" *ngFor=\"let item of data\">\n <!--\u83DC\u5355\u7C7B\u578B-->\n <d-accordion-menu *ngIf=\"item[childrenKey] !== undefined\" [item]=\"item\" [deepth]=\"deepth\" [parent]=\"parent\"></d-accordion-menu>\n <!--\u975E\u83DC\u5355\u7C7B\u578B-->\n <d-accordion-list\n #listInstance\n *ngIf=\"item[childrenKey] !== undefined\"\n class=\"devui-accordion-submenu\"\n [deepth]=\"deepth + 1\"\n [data]=\"item[childrenKey]\"\n [parent]=\"item\"\n [@collapse]=\"getOpenState(item, listInstance)\"\n [@.disabled]=\"!animateState\"\n >\n </d-accordion-list>\n <ng-container *ngIf=\"item[childrenKey] === undefined\">\n <!--\u8DEF\u7531\u94FE\u63A5-->\n <d-accordion-item-routerlink\n *ngIf=\"linkType === 'routerLink'\"\n [item]=\"item\"\n [deepth]=\"deepth\"\n [parent]=\"parent\"\n ></d-accordion-item-routerlink>\n <!--\u666E\u901A\u94FE\u63A5-->\n <d-accordion-item-hreflink\n *ngIf=\"linkType === 'hrefLink'\"\n [item]=\"item\"\n [deepth]=\"deepth\"\n [parent]=\"parent\"\n ></d-accordion-item-hreflink>\n <!--\u52A8\u6001\u94FE\u63A5-->\n <ng-container *ngIf=\"linkType === 'dependOnLinkTypeKey'\">\n <d-accordion-item-routerlink\n *ngIf=\"item[linkTypeKey] === 'routerLink'\"\n [item]=\"item\"\n [deepth]=\"deepth\"\n [parent]=\"parent\"\n ></d-accordion-item-routerlink>\n <d-accordion-item-hreflink\n *ngIf=\"item[linkTypeKey] === 'hrefLink'\"\n [item]=\"item\"\n [deepth]=\"deepth\"\n [parent]=\"parent\"\n ></d-accordion-item-hreflink>\n <d-accordion-item\n *ngIf=\"item[linkTypeKey] !== 'hrefLink' && item[linkTypeKey] !== 'routerLink'\"\n [item]=\"item\"\n [deepth]=\"deepth\"\n [parent]=\"parent\"\n ></d-accordion-item>\n </ng-container>\n <!--\u666E\u901A\u7C7B\u578B-->\n <d-accordion-item *ngIf=\"!linkType || linkType === ''\" [item]=\"item\" [deepth]=\"deepth\" [parent]=\"parent\"></d-accordion-item>\n </ng-container>\n </li>\n</ul>\n<!--\u5217\u8868\u6A21\u677F-->\n<div *ngIf=\"innerListTemplate && deepth !== 0\">\n <ng-template\n [ngTemplateOutlet]=\"innerListTemplate\"\n [ngTemplateOutletContext]=\"{\n item: parent,\n deepth: deepth,\n itemClickFn: itemClickItemFn,\n menuToggleFn: menuToggleItemFn\n }\"\n ></ng-template>\n</div>\n<!--\u65E0\u6570\u636E/\u52A0\u8F7D\u4E2D\u6A21\u677F-->\n<ul *ngIf=\"!innerListTemplate && (loading || (noContent && showNoContent))\">\n <!--\u52A0\u8F7D\u4E2D-->\n <li *ngIf=\"loading && !loadingTemplate\" class=\"devui-accordion-item\">\n <div class=\"devui-accordion-item-title devui-over-flow-ellipsis\" [style.textIndent]=\"deepth * 20 + 'px'\">\n {{ i18nCommonText?.loading }}\n </div>\n </li>\n <!--\u81EA\u5B9A\u4E49\u52A0\u8F7D\u4E2D-->\n <ng-template\n *ngIf=\"loading && loadingTemplate\"\n [ngTemplateOutlet]=\"loadingTemplate\"\n [ngTemplateOutletContext]=\"{ item: parent, deepth: deepth }\"\n ></ng-template>\n <!--\u65E0\u6570\u636E-->\n <li *ngIf=\"showNoContent && !loading && noContent && !noContentTemplate\" class=\"devui-accordion-item\">\n <div class=\"devui-accordion-item-title devui-over-flow-ellipsis disabled\" [style.textIndent]=\"deepth * 20 + 'px'\">\n {{ i18nCommonText?.noData }}\n </div>\n </li>\n <!--\u81EA\u5B9A\u4E49\u65E0\u6570\u636E-->\n <ng-template\n *ngIf=\"showNoContent && !loading && noContent && noContentTemplate\"\n [ngTemplateOutlet]=\"noContentTemplate\"\n [ngTemplateOutletContext]=\"{ item: parent, deepth: deepth }\"\n ></ng-template>\n</ul>\n", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: AccordionListComponent, selector: "d-accordion-list", inputs: ["data", "deepth", "parent"] }, { kind: "component", type: i3.AccordionMenuComponent, selector: "d-accordion-menu" }, { kind: "component", type: i4.AccordionItemComponent, selector: "d-accordion-item" }, { kind: "component", type: i5.AccordionItemHreflinkComponent, selector: "d-accordion-item-hreflink" }, { kind: "component", type: i6.AccordionItemRouterlinkComponent, selector: "d-accordion-item-routerlink" }], animations: [expandCollapse, expandCollapseForDomDestroy], encapsulation: i0.ViewEncapsulation.None }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AccordionListComponent, decorators: [{
type: Component,
args: [{ selector: 'd-accordion-list', encapsulation: ViewEncapsulation.None, animations: [expandCollapse, expandCollapseForDomDestroy], preserveWhitespaces: false, template: "<ul class=\"devui-accordion-list\" *ngIf=\"!innerListTemplate || deepth === 0\">\n <li class=\"devui-accordion-item\" *ngFor=\"let item of data\">\n <!--\u83DC\u5355\u7C7B\u578B-->\n <d-accordion-menu *ngIf=\"item[childrenKey] !== undefined\" [item]=\"item\" [deepth]=\"deepth\" [parent]=\"parent\"></d-accordion-menu>\n <!--\u975E\u83DC\u5355\u7C7B\u578B-->\n <d-accordion-list\n #listInstance\n *ngIf=\"item[childrenKey] !== undefined\"\n class=\"devui-accordion-submenu\"\n [deepth]=\"deepth + 1\"\n [data]=\"item[childrenKey]\"\n [parent]=\"item\"\n [@collapse]=\"getOpenState(item, listInstance)\"\n [@.disabled]=\"!animateState\"\n >\n </d-accordion-list>\n <ng-container *ngIf=\"item[childrenKey] === undefined\">\n <!--\u8DEF\u7531\u94FE\u63A5-->\n <d-accordion-item-routerlink\n *ngIf=\"linkType === 'routerLink'\"\n [item]=\"item\"\n [deepth]=\"deepth\"\n [parent]=\"parent\"\n ></d-accordion-item-routerlink>\n <!--\u666E\u901A\u94FE\u63A5-->\n <d-accordion-item-hreflink\n *ngIf=\"linkType === 'hrefLink'\"\n [item]=\"item\"\n [deepth]=\"deepth\"\n [parent]=\"parent\"\n ></d-accordion-item-hreflink>\n <!--\u52A8\u6001\u94FE\u63A5-->\n <ng-container *ngIf=\"linkType === 'dependOnLinkTypeKey'\">\n <d-accordion-item-routerlink\n *ngIf=\"item[linkTypeKey] === 'routerLink'\"\n [item]=\"item\"\n [deepth]=\"deepth\"\n [parent]=\"parent\"\n ></d-accordion-item-routerlink>\n <d-accordion-item-hreflink\n *ngIf=\"item[linkTypeKey] === 'hrefLink'\"\n [item]=\"item\"\n [deepth]=\"deepth\"\n [parent]=\"parent\"\n ></d-accordion-item-hreflink>\n <d-accordion-item\n *ngIf=\"item[linkTypeKey] !== 'hrefLink' && item[linkTypeKey] !== 'routerLink'\"\n [item]=\"item\"\n [deepth]=\"deepth\"\n [parent]=\"parent\"\n ></d-accordion-item>\n </ng-container>\n <!--\u666E\u901A\u7C7B\u578B-->\n <d-accordion-item *ngIf=\"!linkType || linkType === ''\" [item]=\"item\" [deepth]=\"deepth\" [parent]=\"parent\"></d-accordion-item>\n </ng-container>\n </li>\n</ul>\n<!--\u5217\u8868\u6A21\u677F-->\n<div *ngIf=\"innerListTemplate && deepth !== 0\">\n <ng-template\n [ngTemplateOutlet]=\"innerListTemplate\"\n [ngTemplateOutletContext]=\"{\n item: parent,\n deepth: deepth,\n itemClickFn: itemClickItemFn,\n menuToggleFn: menuToggleItemFn\n }\"\n ></ng-template>\n</div>\n<!--\u65E0\u6570\u636E/\u52A0\u8F7D\u4E2D\u6A21\u677F-->\n<ul *ngIf=\"!innerListTemplate && (loading || (noContent && showNoContent))\">\n <!--\u52A0\u8F7D\u4E2D-->\n <li *ngIf=\"loading && !loadingTemplate\" class=\"devui-accordion-item\">\n <div class=\"devui-accordion-item-title devui-over-flow-ellipsis\" [style.textIndent]=\"deepth * 20 + 'px'\">\n {{ i18nCommonText?.loading }}\n </div>\n </li>\n <!--\u81EA\u5B9A\u4E49\u52A0\u8F7D\u4E2D-->\n <ng-template\n *ngIf=\"loading && loadingTemplate\"\n [ngTemplateOutlet]=\"loadingTemplate\"\n [ngTemplateOutletContext]=\"{ item: parent, deepth: deepth }\"\n ></ng-template>\n <!--\u65E0\u6570\u636E-->\n <li *ngIf=\"showNoContent && !loading && noContent && !noContentTemplate\" class=\"devui-accordion-item\">\n <div class=\"devui-accordion-item-title devui-over-flow-ellipsis disabled\" [style.textIndent]=\"deepth * 20 + 'px'\">\n {{ i18nCommonText?.noData }}\n </div>\n </li>\n <!--\u81EA\u5B9A\u4E49\u65E0\u6570\u636E-->\n <ng-template\n *ngIf=\"showNoContent && !loading && noContent && noContentTemplate\"\n [ngTemplateOutlet]=\"noContentTemplate\"\n [ngTemplateOutletContext]=\"{ item: parent, deepth: deepth }\"\n ></ng-template>\n</ul>\n" }]
}], ctorParameters: () => [{ type: undefined, decorators: [{
type: Inject,
args: [ACCORDION]
}] }, { type: i1.AccordionService }], propDecorators: { data: [{
type: Input
}], deepth: [{
type: Input
}], parent: [{
type: Input
}], accordionMenuQueryList: [{
type: ViewChildren,
args: [AccordionMenuComponent]
}], accordionItemRouterlinkQueryList: [{
type: ViewChildren,
args: [AccordionItemRouterlinkComponent]
}], animateState: [{
type: HostBinding,
args: ['class.devui-accordion-show-animate']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3JkaW9uLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZGV2dWkvYWNjb3JkaW9uL2FjY29yZGlvbi1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL2RldnVpL2FjY29yZGlvbi9hY2NvcmRpb24tbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixTQUFTLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JJLE9BQU8sRUFBRSxjQUFjLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN6RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7O0FBVXZELE1BQU0sT0FBTyxzQkFBc0I7SUFNakMsSUFBdUQsWUFBWTtRQUNqRSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBRUQs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Q0FBZ0M7Z0JBQ1MsWUFBWTtzQkFBbEUsV0FBVzt1QkFBQyxvQ0FBb0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEhvc3RCaW5kaW5nLCBJbmplY3QsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgUXVlcnlMaXN0LCBWaWV3Q2hpbGRyZW4sIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBleHBhbmRDb2xsYXBzZSwgZXhwYW5kQ29sbGFwc2VGb3JEb21EZXN0cm95IH0gZnJvbSAnbmctZGV2dWkvdXRpbHMnO1xuaW1wb3J0IHsgQWNjb3JkaW9uSXRlbVJvdXRlcmxpbmtDb21wb25lbnQgfSBmcm9tICcuL2FjY29yZGlvbi1pdGVtLXJvdXRlcmxpbmsuY29tcG9uZW50JztcbmltcG9ydCB7IEFjY29yZGlvbk1lbnVDb21wb25lbnQgfSBmcm9tICcuL2FjY29yZGlvbi1tZW51LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBQ0NPUkRJT04gfSBmcm9tICcuL2FjY29yZGlvbi10b2tlbic7XG5pbXBvcnQgeyBBY2NvcmRpb25TZXJ2aWNlIH0gZnJvbSAnLi9hY2NvcmRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBBY2NvcmRpb25NZW51SXRlbSB9IGZyb20gJy4vYWNjb3JkaW9uLnR5cGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkLWFjY29yZGlvbi1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FjY29yZGlvbi1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgYW5pbWF0aW9uczogW2V4cGFuZENvbGxhcHNlLCBleHBhbmRDb2xsYXBzZUZvckRvbURlc3Ryb3ldLFxuICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZSxcbn0pXG5leHBvcnQgY2xhc3MgQWNjb3JkaW9uTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgZGF0YTogQXJyYXk8QWNjb3JkaW9uTWVudUl0ZW0+O1xuICBASW5wdXQoKSBkZWVwdGggPSAwO1xuICBASW5wdXQoKSBwYXJlbnQ6IEFjY29yZGlvbk1lbnVJdGVtO1xuICBAVmlld0NoaWxkcmVuKEFjY29yZGlvbk1lbnVDb21wb25lbnQpIGFjY29yZGlvbk1lbnVRdWVyeUxpc3Q6IFF1ZXJ5TGlzdDxhbnk+O1xuICBAVmlld0NoaWxkcmVuKEFjY29yZGlvbkl0ZW1Sb3V0ZXJsaW5rQ29tcG9uZW50KSBhY2NvcmRpb25JdGVtUm91dGVybGlua1F1ZXJ5TGlzdDogUXVlcnlMaXN0PEFjY29yZGlvbkl0ZW1Sb3V0ZXJsaW5rQ29tcG9uZW50PjtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5kZXZ1aS1hY2NvcmRpb24tc2hvdy1hbmltYXRlJykgZ2V0IGFuaW1hdGVTdGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5hY2NvcmRpb24uc2hvd0FuaW1hdGlvbjtcbiAgfVxuXG4gIGdldCBsb2FkaW5nKCkge1xuICAgIHJldHVybiB0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudFt0aGlzLmFjY29yZGlvbi5sb2FkaW5nS2V5XTtcbiAgfVxuXG4gIGdldCBub0NvbnRlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuZGF0YSA9PT0gbnVsbCB8fCB0aGlzLmRhdGEubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgZ2V0IGxpbmtUeXBlS2V5KCkge1xuICAgIHJldHVybiB0aGlzLmFjY29yZGlvbi5saW5rVHlwZUtleTtcbiAgfVxuXG4gIGdldCBjaGlsZHJlbktleSgpIHtcbiAgICByZXR1cm4gdGhpcy5hY2NvcmRpb24uY2hpbGRyZW5LZXk7XG4gIH1cblxuICBnZXQgYWN0aXZlS2V5KCkge1xuICAgIHJldHVybiB0aGlzLmFjY29yZGlvbi5hY3RpdmVLZXk7XG4gIH1cblxuICBnZXQgaXRlbVRlbXBsYXRlKCkge1xuICAgIHJldHVybiB0aGlzLmFjY29yZGlvbi5pdGVtVGVtcGxhdGU7XG4gIH1cblxuICBnZXQgbWVudUl0ZW1UZW1wbGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5hY2NvcmRpb24ubWVudUl0ZW1UZW1wbGF0ZTtcbiAgfVxuXG4gIGdldCBpbm5lckxpc3RUZW1wbGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5hY2NvcmRpb24uaW5uZXJMaXN0VGVtcGxhdGU7XG4gIH1cblxuICBnZXQgbG9hZGluZ1RlbXBsYXRlKCkge1xuICAgIHJldHVybiB0aGlzLmFjY29yZGlvbi5sb2FkaW5nVGVtcGxhdGU7XG4gIH1cblxuICBnZXQgbm9Db250ZW50VGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuYWNjb3JkaW9uLm5vQ29udGVudFRlbXBsYXRlO1xuICB9XG5cbiAgZ2V0IGxpbmtUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLmFjY29yZGlvbi5saW5rVHlwZTtcbiAgfVxuXG4gIGdldCBpMThuQ29tbW9uVGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5hY2NvcmRpb24uaTE4bkNvbW1vblRleHQ7XG4gIH1cblxuICBnZXQgc2hvd05vQ29udGVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5hY2NvcmRpb24uc2hvd05vQ29udGVudDtcbiAgfVxuXG4gIGdldCBsaW5rRGVmYXVsdFRhcmdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5hY2NvcmRpb24ubGlua0RlZmF1bHRUYXJnZXQ7XG4gIH1cblxuICBnZXQgcm91dGVyTGlua0FjdGl2YXRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgKCEhdGhpcy5hY2NvcmRpb25JdGVtUm91dGVybGlua1F1ZXJ5TGlzdCAmJiB0aGlzLmFjY29yZGlvbkl0ZW1Sb3V0ZXJsaW5rUXVlcnlMaXN0LnNvbWUoKGFpcmxjKSA9PiB0aGlzLmlzTGlua1JvdXRlckFjdGl2ZShhaXJsYykpKSB8fFxuICAgICAgKCEhdGhpcy5hY2NvcmRpb25NZW51UXVlcnlMaXN0ICYmIHRoaXMuYWNjb3JkaW9uTWVudVF1ZXJ5TGlzdC5zb21lKChhbWMpID0+IHRoaXMuaXNNZW51Um91dGVyQWN0aXZlKGFtYykpKVxuICAgICk7XG4gIH1cblxuICBnZXQgaGFzQWN0aXZlQ2hpbGRyZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICghIXRoaXMuYWNjb3JkaW9uTWVudVF1ZXJ5TGlzdCAmJiB0aGlzLmFjY29yZGlvbk1lbnVRdWVyeUxpc3Quc29tZSgoYW1jKSA9PiB0aGlzLmlzTWVudURhdGFBY3RpdmUoYW1jKSkpIHx8XG4gICAgICAoISF0aGlzLmRhdGEgJiYgISF0aGlzLmRhdGEubGVuZ3RoICYmIHRoaXMuZGF0YS5zb21lKChpdGVtKSA9PiB0aGlzLmlzSXRlbURhdGEoaXRlbSkgJiYgdGhpcy5pc0l0ZW1EYXRhQWN0aXZlKGl0ZW0pKSlcbiAgICApO1xuICB9XG5cbiAgY29uc3RydWN0b3IoQEluamVjdChBQ0NPUkRJT04pIHByaXZhdGUgYWNjb3JkaW9uOiBhbnksIHByaXZhdGUgYWNjb3JkaW9uU2VydmljZTogQWNjb3JkaW9uU2VydmljZSkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wYXJlbnQpIHtcbiAgICAgIHRoaXMuYWNjb3JkaW9uU2VydmljZS5zZXRDaGlsZExpc3RJbnN0YW5jZSh0aGlzLCB0aGlzLnBhcmVudCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGFyZW50KSB7XG4gICAgICB0aGlzLmFjY29yZGlvblNlcnZpY2Uuc2V0Q2hpbGRMaXN0SW5zdGFuY2UodW5kZWZpbmVkLCB0aGlzLnBhcmVudCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc0xpbmtSb3V0ZXJBY3RpdmUoYWlybGM6IEFjY29yZGlvbkl0ZW1Sb3V0ZXJsaW5rQ29tcG9uZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGFpcmxjLnJvdXRlckxpbmtBY3RpdmF0ZWQ7XG4gIH1cblxuICBwcml2YXRlIGlzTWVudVJvdXRlckFjdGl2ZShhbWM6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhbWMucm91dGVyTGlua0FjdGl2YXRlZDtcbiAgfVxuXG4gIHByaXZhdGUgaXNNZW51RGF0YUFjdGl2ZShhbWM6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhbWMuaGFzQWN0aXZlQ2hpbGRyZW47XG4gIH1cblxuICBwcml2YXRlIGlzSXRlbURhdGFBY3RpdmUoaXRlbTogQWNjb3JkaW9uTWVudUl0ZW0pOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFpdGVtW3RoaXMuYWN0aXZlS2V5XTtcbiAgfVxuXG4gIHByaXZhdGUgaXNJdGVtRGF0YShpdGVtOiBBY2NvcmRpb25NZW51SXRlbSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpdGVtW3RoaXMuY2hpbGRyZW5LZXldID09PSB1bmRlZmluZWQ7XG4gIH1cblxuICBtZW51VG9nZ2xlSXRlbUZuID0gKGl0ZW06IGFueSwgZXZlbnQ/OiBhbnkpID0+IHtcbiAgICB0aGlzLmFjY29yZGlvbi5tZW51VG9nZ2xlRm4oe1xuICAgICAgaXRlbTogaXRlbSxcbiAgICAgIG9wZW46ICFpdGVtW3RoaXMuYWNjb3JkaW9uLm9wZW5LZXldLFxuICAgICAgcGFyZW50OiB0aGlzLnBhcmVudC5wYXJlbnQsXG4gICAgICBldmVudDogZXZlbnQsXG4gICAgfSk7XG4gIH07XG5cbiAgaXRlbUNsaWNrSXRlbUZuID0gKGl0ZW06IGFueSwgZXZlbnQ/OiBhbnkpID0+IHtcbiAgICB0aGlzLmFjY29yZGlvbi5pdGVtQ2xpY2tGbih7XG4gICAgICBpdGVtOiBpdGVtLFxuICAgICAgcGFyZW50OiB0aGlzLnBhcmVudCxcbiAgICAgIGV2ZW50OiBldmVudCxcbiAgICB9KTtcbiAgfTtcblxuICBnZXRPcGVuU3RhdGUoaXRlbSwgbGlzdCkge1xuICAgIGxldCBzdGF0ZUZsYWcgPSBmYWxzZTtcbiAgICBpZiAoaXRlbSAmJiBsaXN0KSB7XG4gICAgICBjb25zdCBvcGVuID0gaXRlbVt0aGlzLmFjY29yZGlvbi5vcGVuS2V5XTtcbiAgICAgIGNvbnN0IGNoaWxkQWN0aXZhdGVkID0gbGlzdC5yb3V0ZXJMaW5rQWN0aXZhdGVkIHx8IGxpc3QuaGFzQWN0aXZlQ2hpbGRyZW47XG4gICAgICBzdGF0ZUZsYWcgPSBvcGVuID09PSB1bmRlZmluZWQgJiYgdGhpcy5hY2NvcmRpb24uYXV0b09wZW5BY3RpdmVNZW51ID8gY2hpbGRBY3RpdmF0ZWQgOiBvcGVuO1xuICAgIH1cbiAgICByZXR1cm4gc3RhdGVGbGFnID8gJ2V4cGFuZGVkJyA6ICdjb2xsYXBzZWQnO1xuICB9XG59XG4iLCI8dWwgY2xhc3M9XCJkZXZ1aS1hY2NvcmRpb24tbGlzdFwiICpuZ0lmPVwiIWlubmVyTGlzdFRlbXBsYXRlIHx8IGRlZXB0aCA9PT0gMFwiPlxuICA8bGkgY2xhc3M9XCJkZXZ1aS1hY2NvcmRpb24taXRlbVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGRhdGFcIj5cbiAgICA8IS0t6I+c5Y2V57G75Z6LLS0+XG4gICAgPGQtYWNjb3JkaW9uLW1lbnUgKm5nSWY9XCJpdGVtW2NoaWxkcmVuS2V5XSAhPT0gdW5kZWZpbmVkXCIgW2l0ZW1dPVwiaXRlbVwiIFtkZWVwdGhdPVwiZGVlcHRoXCIgW3BhcmVudF09XCJwYXJlbnRcIj48L2QtYWNjb3JkaW9uLW1lbnU+XG4gICAgPCEtLemdnuiPnOWNleexu+Weiy0tPlxuICAgIDxkLWFjY29yZGlvbi1saXN0XG4gICAgICAjbGlzdEluc3RhbmNlXG4gICAgICAqbmdJZj1cIml0ZW1bY2hpbGRyZW5LZXldICE9PSB1bmRlZmluZWRcIlxuICAgICAgY2xhc3M9XCJkZXZ1aS1hY2NvcmRpb24tc3VibWVudVwiXG4gICAgICBbZGVlcHRoXT1cImRlZXB0aCArIDFcIlxuICAgICAgW2RhdGFdPVwiaXRlbVtjaGlsZHJlbktleV1cIlxuICAgICAgW3BhcmVudF09XCJpdGVtXCJcbiAgICAgIFtAY29sbGFwc2VdPVwiZ2V0T3BlblN0YXRlKGl0ZW0sIGxpc3RJbnN0YW5jZSlcIlxuICAgICAgW0AuZGlzYWJsZWRdPVwiIWFuaW1hdGVTdGF0ZVwiXG4gICAgPlxuICAgIDwvZC1hY2NvcmRpb24tbGlzdD5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbVtjaGlsZHJlbktleV0gPT09IHVuZGVmaW5lZFwiPlxuICAgICAgPCEtLei3r+eUsemTvuaOpS0tPlxuICAgICAgPGQtYWNjb3JkaW9uLWl0ZW0tcm91dGVybGlua1xuICAgICAgICAqbmdJZj1cImxpbmtUeXBlID09PSAncm91dGVyTGluaydcIlxuICAgICAgICBbaXRlbV09XCJpdGVtXCJcbiAgICAgICAgW2RlZXB0aF09XCJkZWVwdGhcIlxuICAgICAgICBbcGFyZW50XT1cInBhcmVudFwiXG4gICAgICA+PC9kLWFjY29yZGlvbi1pdGVtLXJvdXRlcmxpbms+XG4gICAgICA8IS0t5pmu6YCa6ZO+5o6lLS0+XG4gICAgICA8ZC1hY2NvcmRpb24taXRlbS1ocmVmbGlua1xuICAgICAgICAqbmdJZj1cImxpbmtUeXBlID09PSAnaHJlZkxpbmsnXCJcbiAgICAgICAgW2l0ZW1dPVwiaXRlbVwiXG4gICAgICAgIFtkZWVwdGhdPVwiZGVlcHRoXCJcbiAgICAgICAgW3BhcmVudF09XCJwYXJlbnRcIlxuICAgICAgPjwvZC1hY2NvcmRpb24taXRlbS1ocmVmbGluaz5cbiAgICAgIDwhLS3liqjmgIHpk77mjqUtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsaW5rVHlwZSA9PT0gJ2RlcGVuZE9uTGlua1R5cGVLZXknXCI+XG4gICAgICAgIDxkLWFjY29yZGlvbi1pdGVtLXJvdXRlcmxpbmtcbiAgICAgICAgICAqbmdJZj1cIml0ZW1bbGlua1R5cGVLZXldID09PSAncm91dGVyTGluaydcIlxuICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIlxuICAgICAgICAgIFtkZWVwdGhdPVwiZGVlcHRoXCJcbiAgICAgICAgICBbcGFyZW50XT1cInBhcmVudFwiXG4gICAgICAgID48L2QtYWNjb3JkaW9uLWl0ZW0tcm91dGVybGluaz5cbiAgICAgICAgPGQtYWNjb3JkaW9uLWl0ZW0taHJlZmxpbmtcbiAgICAgICAgICAqbmdJZj1cIml0ZW1bbGlua1R5cGVLZXldID09PSAnaHJlZkxpbmsnXCJcbiAgICAgICAgICBbaXRlbV09XCJpdGVtXCJcbiAgICAgICAgICBbZGVlcHRoXT1cImRlZXB0aFwiXG4gICAgICAgICAgW3BhcmVudF09XCJwYXJlbnRcIlxuICAgICAgICA+PC9kLWFjY29yZGlvbi1pdGVtLWhyZWZsaW5rPlxuICAgICAgICA8ZC1hY2NvcmRpb24taXRlbVxuICAgICAgICAgICpuZ0lmPVwiaXRlbVtsaW5rVHlwZUtleV0gIT09ICdocmVmTGluaycgJiYgaXRlbVtsaW5rVHlwZUtleV0gIT09ICdyb3V0ZXJMaW5rJ1wiXG4gICAgICAgICAgW2l0ZW1dPVwiaXRlbVwiXG4gICAgICAgICAgW2RlZXB0aF09XCJkZWVwdGhcIlxuICAgICAgICAgIFtwYXJlbnRdPVwicGFyZW50XCJcbiAgICAgICAgPjwvZC1hY2NvcmRpb24taXRlbT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPCEtLeaZrumAmuexu+Weiy0tPlxuICAgICAgPGQtYWNjb3JkaW9uLWl0ZW0gKm5nSWY9XCIhbGlua1R5cGUgfHwgbGlua1R5cGUgPT09ICcnXCIgW2l0ZW1dPVwiaXRlbVwiIFtkZWVwdGhdPVwiZGVlcHRoXCIgW3BhcmVudF09XCJwYXJlbnRcIj48L2QtYWNjb3JkaW9uLWl0ZW0+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbGk+XG48L3VsPlxuPCEtLeWIl+ihqOaooeadvy0tPlxuPGRpdiAqbmdJZj1cImlubmVyTGlzdFRlbXBsYXRlICYmIGRlZXB0aCAhPT0gMFwiPlxuICA8bmctdGVtcGxhdGVcbiAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJpbm5lckxpc3RUZW1wbGF0ZVwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgIGl0ZW06IHBhcmVudCxcbiAgICAgIGRlZXB0aDogZGVlcHRoLFxuICAgICAgaXRlbUNsaWNrRm46IGl0ZW1DbGlja0l0ZW1GbixcbiAgICAgIG1lbnVUb2dnbGVGbjogbWVudVRvZ2dsZUl0ZW1GblxuICAgIH1cIlxuICA+PC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuPCEtLeaXoOaVsOaNri/liqDovb3kuK3mqKHmnb8tLT5cbjx1bCAqbmdJZj1cIiFpbm5lckxpc3RUZW1wbGF0ZSAmJiAobG9hZGluZyB8fCAobm9Db250ZW50ICYmIHNob3dOb0NvbnRlbnQpKVwiPlxuICA8IS0t5Yqg6L295LitLS0+XG4gIDxsaSAqbmdJZj1cImxvYWRpbmcgJiYgIWxvYWRpbmdUZW1wbGF0ZVwiIGNsYXNzPVwiZGV2dWktYWNjb3JkaW9uLWl0ZW1cIj5cbiAgICA8ZGl2IGNsYXNzPVwiZGV2dWktYWNjb3JkaW9uLWl0ZW0tdGl0bGUgZGV2dWktb3Zlci1mbG93LWVsbGlwc2lzXCIgW3N0eWxlLnRleHRJbmRlbnRdPVwiZGVlcHRoICogMjAgKyAncHgnXCI+XG4gICAgICB7eyBpMThuQ29tbW9uVGV4dD8ubG9hZGluZyB9fVxuICAgIDwvZGl2PlxuICA8L2xpPlxuICA8IS0t6Ieq5a6a5LmJ5Yqg6L295LitLS0+XG4gIDxuZy10ZW1wbGF0ZVxuICAgICpuZ0lmPVwibG9hZGluZyAmJiBsb2FkaW5nVGVtcGxhdGVcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxvYWRpbmdUZW1wbGF0ZVwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgaXRlbTogcGFyZW50LCBkZWVwdGg6IGRlZXB0aCB9XCJcbiAgPjwvbmctdGVtcGxhdGU+XG4gIDwhLS3ml6DmlbDmja4tLT5cbiAgPGxpICpuZ0lmPVwic2hvd05vQ29udGVudCAmJiAhbG9hZGluZyAmJiBub0NvbnRlbnQgJiYgIW5vQ29udGVudFRlbXBsYXRlXCIgY2xhc3M9XCJkZXZ1aS1hY2NvcmRpb24taXRlbVwiPlxuICAgIDxkaXYgY2xhc3M9XCJkZXZ1aS1hY2NvcmRpb24taXRlbS10aXRsZSBkZXZ1aS1vdmVyLWZsb3ctZWxsaXBzaXMgZGlzYWJsZWRcIiBbc3R5bGUudGV4dEluZGVudF09XCJkZWVwdGggKiAyMCArICdweCdcIj5cbiAgICAgIHt7IGkxOG5Db21tb25UZXh0Py5ub0RhdGEgfX1cbiAgICA8L2Rpdj5cbiAgPC9saT5cbiAgPCEtLeiHquWumuS5ieaXoOaVsOaNri0tPlxuICA8bmctdGVtcGxhdGVcbiAgICAqbmdJZj1cInNob3dOb0NvbnRlbnQgJiYgIWxvYWRpbmcgJiYgbm9Db250ZW50ICYmIG5vQ29udGVudFRlbXBsYXRlXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJub0NvbnRlbnRUZW1wbGF0ZVwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgaXRlbTogcGFyZW50LCBkZWVwdGg6IGRlZXB0aCB9XCJcbiAgPjwvbmctdGVtcGxhdGU+XG48L3VsPlxuIl19