@duoduo-oba/ng-devui
Version:
DevUI components based on Angular
240 lines • 25.4 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: tree.component.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, EventEmitter, Input, Output, TemplateRef, ViewChildren, QueryList } from '@angular/core';
import { TreeFactory } from './tree-factory.class';
import { TreeMaskService } from './tree-mask.service';
import { I18nService } from '@duoduo-oba/ng-devui/i18n';
var TreeComponent = /** @class */ (function () {
function TreeComponent(i18n) {
var _this = this;
this.i18n = i18n;
this.treeNodeTitleKey = 'title';
this.checkboxDisabledKey = 'disabled';
this.nodeSelected = new EventEmitter();
this.nodeDblClicked = new EventEmitter();
this.nodeToggled = new EventEmitter();
this.i18nCommonText = this.i18n.getI18nText().common;
this.i18nSubscription = this.i18n.langChange().subscribe((/**
* @param {?} data
* @return {?}
*/
function (data) {
_this.i18nCommonText = data.common;
}));
}
/**
* @return {?}
*/
TreeComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
this.treeFactory = TreeFactory.fromTree({
treeItems: this.tree,
treeNodeChildrenKey: this.treeNodeChildrenKey,
treeNodeIdKey: this.treeNodeIdKey,
treeNodeTitleKey: this.treeNodeTitleKey,
checkboxDisabledKey: this.checkboxDisabledKey
});
};
/**
* @param {?} changes
* @return {?}
*/
TreeComponent.prototype.ngOnChanges = /**
* @param {?} changes
* @return {?}
*/
function (changes) {
if (changes && changes.tree) {
this.treeFactory = TreeFactory.fromTree({
treeItems: this.tree,
treeNodeChildrenKey: this.treeNodeChildrenKey,
treeNodeIdKey: this.treeNodeIdKey,
treeNodeTitleKey: this.treeNodeTitleKey,
checkboxDisabledKey: this.checkboxDisabledKey
});
}
};
/**
* @return {?}
*/
TreeComponent.prototype.ngAfterViewInit = /**
* @return {?}
*/
function () {
this.elementAsMask = TreeMaskService.creatMaskElement();
};
/**
* @param {?} e
* @return {?}
*/
TreeComponent.prototype.addBackGround = /**
* @param {?} e
* @return {?}
*/
function (e) {
e.stopPropagation();
TreeMaskService.addMask(e.target, this.elementAsMask, TreeMaskService.calcWidth(this.treeNodeContent, 0));
};
/**
* @param {?} e
* @return {?}
*/
TreeComponent.prototype.removeBackGround = /**
* @param {?} e
* @return {?}
*/
function (e) {
e.stopPropagation();
TreeMaskService.removeMask(e.target, this.elementAsMask);
};
/**
* @param {?} event
* @param {?} treeNode
* @return {?}
*/
TreeComponent.prototype.selectNode = /**
* @param {?} event
* @param {?} treeNode
* @return {?}
*/
function (event, treeNode) {
this.nodeSelected.emit(treeNode);
this.treeFactory.activeNodeById(treeNode.id);
};
/**
* @param {?} event
* @param {?} treeNode
* @return {?}
*/
TreeComponent.prototype.toggleNode = /**
* @param {?} event
* @param {?} treeNode
* @return {?}
*/
function (event, treeNode) {
this.treeFactory.toggleNodeById(treeNode.id);
this.nodeToggled.emit(treeNode);
};
/**
* @param {?} treeItems
* @param {?} parentId
* @return {?}
*/
TreeComponent.prototype.appendTreeItems = /**
* @param {?} treeItems
* @param {?} parentId
* @return {?}
*/
function (treeItems, parentId) {
if (!this.treeFactory.nodes[parentId]) {
throw new Error('parent node does not exist.');
}
this.treeFactory.mapTreeItems({
treeItems: treeItems,
parentId: parentId,
treeNodeChildrenKey: this.treeNodeChildrenKey,
treeNodeIdKey: this.treeNodeIdKey,
treeNodeTitleKey: this.treeNodeTitleKey,
checkboxDisabledKey: this.checkboxDisabledKey
});
};
/**
* @param {?} event
* @param {?} node
* @return {?}
*/
TreeComponent.prototype.nodeDblClick = /**
* @param {?} event
* @param {?} node
* @return {?}
*/
function (event, node) {
this.nodeDblClicked.emit(node);
};
/**
* @return {?}
*/
TreeComponent.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
if (this.i18nSubscription) {
this.i18nSubscription.unsubscribe();
}
};
TreeComponent.decorators = [
{ type: Component, args: [{
selector: 'd-tree',
template: "<d-tree-nodes [treeList]=\"treeFactory.treeRoot\" [treeNodesRef]=\"treeNodesRef ? treeNodesRef : default\" [treeFactory]=\"treeFactory\">\r\n</d-tree-nodes>\r\n\r\n<ng-template #default let-treeNode=\"treeNode\" let-treeFactory=\"treeFactory\">\r\n <div class=\"devui-tree-node\" #treeNodeContent>\r\n <div\r\n class=\"devui-tree-node__content\"\r\n [class.devui-tree-node--parent]=\"(treeNode.data.children || []).length > 0\"\r\n (mouseenter)=\"addBackGround($event)\"\r\n (mouseleave)=\"removeBackGround($event)\"\r\n >\r\n <div class=\"devui-tree-node__content--value-wrapper\" [class.isMatch]=\"treeNode.data.isMatch\">\r\n <span\r\n (click)=\"toggleNode($event, treeNode)\"\r\n *ngIf=\"(treeNode.data.children || []).length > 0 || treeNode.data.isParent\"\r\n class=\"devui-tree-node__folder\"\r\n >\r\n <span *ngIf=\"iconParentClose && !treeNode.data.isOpen\" [innerHTML]=\"iconParentClose\"></span>\r\n <span *ngIf=\"iconParentOpen && treeNode.data.isOpen\" [innerHTML]=\"iconParentOpen\"></span>\r\n <span *ngIf=\"!iconParentClose && !treeNode.data.isOpen\">\r\n <svg\r\n class=\"svg-icon\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n width=\"16px\"\r\n height=\"16px\"\r\n viewBox=\"0 0 16 16\"\r\n version=\"1.1\"\r\n >\r\n <g id=\"\u56FE\u6807\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <g id=\"fold\">\r\n <rect id=\"Rectangle-175\" x=\"0\" y=\"0\" width=\"16\" height=\"16\" />\r\n <path\r\n d=\"M14,6 L14,5 L7.58578644,5 L5.58578644,3 L2,3 L2,6 L14,6 Z M14,7 L2,7 L2,13 L14,13 L14,7 Z M1,2 L6,2 L8,4 L15,4 L15,14 L1,14 L1,2 Z\"\r\n id=\"\u5F62\u72B6\"\r\n fill-rule=\"nonzero\"\r\n />\r\n </g>\r\n </g>\r\n </svg>\r\n </span>\r\n <span *ngIf=\"!iconParentOpen && treeNode.data.isOpen\">\r\n <svg\r\n class=\"svg-icon\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n width=\"16px\"\r\n height=\"16px\"\r\n viewBox=\"0 0 16 16\"\r\n version=\"1.1\"\r\n >\r\n <g id=\"\u56FE\u6807\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <g id=\"fold-copy-3\">\r\n <rect id=\"Rectangle-175\" x=\"0\" y=\"0\" width=\"16\" height=\"16\" />\r\n <path\r\n d=\"M14,5 L14,4 L7.58578644,4 L5.58578644,2 L2,2 L2,5 L1,5 L1,1 L6,1 L8,3 L15,3 L15,5 L14,5 Z M1.28077641,7 L2.78077641,13 L13.2192236,13 L14.7192236,7 L1.28077641,7 Z M0,6 L16,6 L14,14 L2,14 L0,6 Z\"\r\n id=\"\u5F62\u72B6\"\r\n fill-rule=\"nonzero\"\r\n />\r\n </g>\r\n </g>\r\n </svg>\r\n </span>\r\n </span>\r\n <span class=\"devui-tree-node__leaf\" *ngIf=\"(treeNode.data.children || []).length === 0 && !treeNode.data.isParent\">\r\n <span *ngIf=\"!iconLeaf\">\r\n <svg\r\n class=\"svg-icon\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n width=\"16px\"\r\n height=\"16px\"\r\n viewBox=\"0 0 16 16\"\r\n version=\"1.1\"\r\n >\r\n <g id=\"\u56FE\u6807\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <g id=\"\u6587\u4EF6\">\r\n <rect id=\"Rectangle-175\" x=\"0\" y=\"0\" width=\"16\" height=\"16\" />\r\n <path\r\n d=\"M13,6 L9,6 L9,2 L3,2 L3,14 L13,14 L13,6 Z M12.5857864,5 L10,2.41421356 L10,5 L12.5857864,5 Z M2,1 L10,1 L14,5 L14,15 L2,15 L2,1 Z\"\r\n id=\"\u5F62\u72B6\"\r\n fill-rule=\"nonzero\"\r\n />\r\n </g>\r\n </g>\r\n </svg>\r\n </span>\r\n <span *ngIf=\"iconLeaf\" [innerHTML]=\"iconLeaf\"></span>\r\n </span>\r\n <span\r\n (click)=\"selectNode($event, treeNode)\"\r\n (dblclick)=\"nodeDblClick($event, treeNode)\"\r\n class=\"devui-tree-node__title\"\r\n [class.active]=\"treeNode.data.isActive\"\r\n title=\"{{ treeNode.data.title }}\"\r\n >{{ treeNode.data.title }}</span\r\n >\r\n <span dLoading [showLoading]=\"treeNode.data.loading\" [loadingTemplateRef]=\"customizedLoadingRef\"> </span>\r\n </div>\r\n </div>\r\n <div class=\"devui-tree-node__children\" *ngIf=\"treeNode.data.isOpen\">\r\n <d-tree-nodes [treeList]=\"treeNode.data.children || []\" [treeNodesRef]=\"default\" [treeFactory]=\"treeFactory\"> </d-tree-nodes>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #customizedLoadingRef>\r\n <span class=\"devui-loading-children\">{{ i18nCommonText?.loading }}</span>\r\n</ng-template>\r\n",
styles: [":host{display:block}.devui-tree-node{color:#575d6c;line-height:1;white-space:nowrap;position:relative}.devui-tree-node .devui-tree-node__content{display:-webkit-inline-box;display:inline-flex;-webkit-box-align:center;align-items:center;font-size:14px}.devui-tree-node .devui-tree-node__content--value-wrapper{display:-webkit-inline-box;display:inline-flex;-webkit-box-align:center;align-items:center;padding:.1em;margin:.3em 0}.devui-tree-node .devui-tree-node__content--value-wrapper.isMatch{color:#5e7ce0;border:1px solid #dfe1e6;border-radius:.2em}.devui-tree-node .devui-tree-node__children{padding-left:.8em}.devui-tree-node .devui-tree-node__children:first-child{border-left-color:transparent}.devui-tree-node .devui-tree-node__children .devui-tree-node{margin-left:1.2em;content:'';position:relative}.devui-tree-node .devui-tree-node__children .devui-tree-node:last-child{border-left-color:transparent}.devui-tree-node .devui-tree-node__title{margin-left:.4em;padding:.1em;display:inline-block;border:1px dashed transparent;border-radius:2px;cursor:pointer}.devui-tree-node .devui-tree-node__title.active{background-color:#f2f5fc;color:#5e7ce0;text-decoration:none;border-color:transparent}.devui-tree-node .devui-tree-node__edit{margin-left:.4em;padding:.1em}.devui-tree-node .devui-tree-node__edit>.devui-input-sm{height:26px}.devui-tree-node .devui-tree-node__edit>.devui-input-sm.error,.devui-tree-node .devui-tree-node__edit>.devui-input-sm.error:focus,.devui-tree-node .devui-tree-node__edit>.devui-input-sm.error:hover{border-color:#f66f6a}.devui-tree-node .devui-tree-node__leaf{cursor:default}.devui-tree-node .devui-tree-node__leaf .devui-tree-node__leaf--default{color:#f2a71f}.devui-tree-node .devui-tree-node__folder{display:inline-block;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.devui-tree-node .devui-tree-node__folder .devui-tree-node__folder--default{color:#f2b806}.devui-tree-node .devui-loading-children{display:inline-block;vertical-align:middle;margin-left:.5em;margin-top:.15em;color:#5e7ce0;font-style:italic;font-size:1em;-webkit-animation-name:devui-loading-children;animation-name:devui-loading-children;-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}@-webkit-keyframes devui-loading-children{0%,12.5%{color:#627fe1}25%{color:#617fe1}37.5%{color:#617ee1}50%,62.5%{color:#607ee0}75%{color:#5f7de0}100%,87.5%{color:#5e7ce0}}@keyframes devui-loading-children{0%,12.5%{color:#627fe1}25%{color:#617fe1}37.5%{color:#617ee1}50%,62.5%{color:#607ee0}75%{color:#5f7de0}100%,87.5%{color:#5e7ce0}}.devui-tree-node svg.svg-icon>g>g>path{fill:#575d6c}::ng-deep .devui-tree-mask{background:#f2f5fc}"]
}] }
];
/** @nocollapse */
TreeComponent.ctorParameters = function () { return [
{ type: I18nService }
]; };
TreeComponent.propDecorators = {
tree: [{ type: Input }],
treeNodesRef: [{ type: Input }],
treeNodeIdKey: [{ type: Input }],
treeNodeChildrenKey: [{ type: Input }],
iconParentOpen: [{ type: Input }],
iconParentClose: [{ type: Input }],
iconLeaf: [{ type: Input }],
treeNodeTitleKey: [{ type: Input }],
checkboxDisabledKey: [{ type: Input }],
nodeSelected: [{ type: Output }],
nodeDblClicked: [{ type: Output }],
nodeToggled: [{ type: Output }],
treeNodeContent: [{ type: ViewChildren, args: ['treeNodeContent',] }]
};
return TreeComponent;
}());
export { TreeComponent };
if (false) {
/** @type {?} */
TreeComponent.prototype.treeFactory;
/** @type {?} */
TreeComponent.prototype.tree;
/** @type {?} */
TreeComponent.prototype.treeNodesRef;
/** @type {?} */
TreeComponent.prototype.treeNodeIdKey;
/** @type {?} */
TreeComponent.prototype.treeNodeChildrenKey;
/** @type {?} */
TreeComponent.prototype.iconParentOpen;
/** @type {?} */
TreeComponent.prototype.iconParentClose;
/** @type {?} */
TreeComponent.prototype.iconLeaf;
/** @type {?} */
TreeComponent.prototype.treeNodeTitleKey;
/** @type {?} */
TreeComponent.prototype.checkboxDisabledKey;
/** @type {?} */
TreeComponent.prototype.nodeSelected;
/** @type {?} */
TreeComponent.prototype.nodeDblClicked;
/** @type {?} */
TreeComponent.prototype.nodeToggled;
/** @type {?} */
TreeComponent.prototype.treeNodeContent;
/** @type {?} */
TreeComponent.prototype.elementAsMask;
/** @type {?} */
TreeComponent.prototype.i18nCommonText;
/** @type {?} */
TreeComponent.prototype.i18nSubscription;
/**
* @type {?}
* @private
*/
TreeComponent.prototype.i18n;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1kZXZ1aS90cmVlLyIsInNvdXJjZXMiOlsidHJlZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLFdBQVcsRUFJWCxZQUFZLEVBQ1osU0FBUyxFQUdWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFFTCxXQUFXLEVBRVosTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFdBQVcsRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFFM0Q7SUF1QkUsdUJBQW9CLElBQWlCO1FBQXJDLGlCQUtDO1FBTG1CLFNBQUksR0FBSixJQUFJLENBQWE7UUFUNUIscUJBQWdCLEdBQUcsT0FBTyxDQUFDO1FBQzNCLHdCQUFtQixHQUFHLFVBQVUsQ0FBQztRQUNoQyxpQkFBWSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3JELG1CQUFjLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDdkQsZ0JBQVcsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQU01RCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDO1FBQ3JELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLFNBQVM7Ozs7UUFBQyxVQUFDLElBQUk7WUFDNUQsS0FBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3BDLENBQUMsRUFBQyxDQUFDO0lBQ0wsQ0FBQzs7OztJQUVELGdDQUFROzs7SUFBUjtRQUNFLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQztZQUN0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QUFXOzs7SUFBWDtRQUNFLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUVyQztJQUNILENBQUM7O2dCQWpHRixTQUFTLFNBQUM7b0JBQ1QsUUFBUSxFQUFFLFFBQVE7b0JBQ2xCLDZ2S0FBb0M7O2lCQUVyQzs7OztnQkFOUSxXQUFXOzs7dUJBU2pCLEtBQUs7K0JBQ0wsS0FBSztnQ0FDTCxLQUFLO3NDQUNMLEtBQUs7aUNBQ0wsS0FBSztrQ0FDTCxLQUFLOzJCQUNMLEtBQUs7bUNBQ0wsS0FBSztzQ0FDTCxLQUFLOytCQUNMLE1BQU07aUNBQ04sTUFBTTs4QkFDTixNQUFNO2tDQUNOLFlBQVksU0FBQyxpQkFBaUI7O0lBK0VqQyxvQkFBQztDQUFBLEFBbEdELElBa0dDO1NBN0ZZLGFBQWE7OztJQUN4QixvQ0FBeUI7O0lBQ3pCLDZCQUFnQzs7SUFDaEMscUNBQXdDOztJQUN4QyxzQ0FBK0I7O0lBQy9CLDRDQUFxQzs7SUFDckMsdUNBQWdDOztJQUNoQyx3Q0FBaUM7O0lBQ2pDLGlDQUEwQjs7SUFDMUIseUNBQW9DOztJQUNwQyw0Q0FBMEM7O0lBQzFDLHFDQUErRDs7SUFDL0QsdUNBQWlFOztJQUNqRSxvQ0FBOEQ7O0lBQzlELHdDQUF3RTs7SUFDeEUsc0NBQW1COztJQUNuQix1Q0FBd0M7O0lBQ3hDLHlDQUErQjs7Ozs7SUFDbkIsNkJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBPbkNoYW5nZXMsXHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBWaWV3Q2hpbGRyZW4sXHJcbiAgUXVlcnlMaXN0LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgT25EZXN0cm95XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgSVRyZWVJdGVtLFxyXG4gIFRyZWVGYWN0b3J5LFxyXG4gIFRyZWVOb2RlXHJcbn0gZnJvbSAnLi90cmVlLWZhY3RvcnkuY2xhc3MnO1xyXG5pbXBvcnQgeyBUcmVlTWFza1NlcnZpY2UgfSBmcm9tICcuL3RyZWUtbWFzay5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSTE4blNlcnZpY2UsIEkxOG5JbnRlcmZhY2UgfSBmcm9tICduZy1kZXZ1aS9pMThuJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZC10cmVlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdHJlZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdHJlZS5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHJlZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIHRyZWVGYWN0b3J5OiBUcmVlRmFjdG9yeTtcclxuICBASW5wdXQoKSB0cmVlOiBBcnJheTxJVHJlZUl0ZW0+O1xyXG4gIEBJbnB1dCgpIHRyZWVOb2Rlc1JlZjogVGVtcGxhdGVSZWY8YW55PjtcclxuICBASW5wdXQoKSB0cmVlTm9kZUlkS2V5OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgdHJlZU5vZGVDaGlsZHJlbktleTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGljb25QYXJlbnRPcGVuOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgaWNvblBhcmVudENsb3NlOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgaWNvbkxlYWY6IHN0cmluZztcclxuICBASW5wdXQoKSB0cmVlTm9kZVRpdGxlS2V5ID0gJ3RpdGxlJztcclxuICBASW5wdXQoKSBjaGVja2JveERpc2FibGVkS2V5ID0gJ2Rpc2FibGVkJztcclxuICBAT3V0cHV0KCkgbm9kZVNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgbm9kZURibENsaWNrZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBub2RlVG9nZ2xlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQFZpZXdDaGlsZHJlbigndHJlZU5vZGVDb250ZW50JykgdHJlZU5vZGVDb250ZW50OiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47IC8vIOiOt+WPlmNvbnRlbnTku6Xlj5blvpd0cmVl5a695bqmXHJcbiAgZWxlbWVudEFzTWFzazogYW55O1xyXG4gIGkxOG5Db21tb25UZXh0OiBJMThuSW50ZXJmYWNlWydjb21tb24nXTtcclxuICBpMThuU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBpMThuOiBJMThuU2VydmljZSkge1xyXG4gICAgdGhpcy5pMThuQ29tbW9uVGV4dCA9IHRoaXMuaTE4bi5nZXRJMThuVGV4dCgpLmNvbW1vbjtcclxuICAgIHRoaXMuaTE4blN1YnNjcmlwdGlvbiA9IHRoaXMuaTE4bi5sYW5nQ2hhbmdlKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB7XHJcbiAgICAgIHRoaXMuaTE4bkNvbW1vblRleHQgPSBkYXRhLmNvbW1vbjtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnRyZWVGYWN0b3J5ID0gVHJlZUZhY3RvcnkuZnJvbVRyZWUoe1xyXG4gICAgICB0cmVlSXRlbXM6IHRoaXMudHJlZSxcclxuICAgICAgdHJlZU5vZGVDaGlsZHJlbktleTogdGhpcy50cmVlTm9kZUNoaWxkcmVuS2V5LFxyXG4gICAgICB0cmVlTm9kZUlkS2V5OiB0aGlzLnRyZWVOb2RlSWRLZXksXHJcbiAgICAgIHRyZWVOb2RlVGl0bGVLZXk6IHRoaXMudHJlZU5vZGVUaXRsZUtleSxcclxuICAgICAgY2hlY2tib3hEaXNhYmxlZEtleTogdGhpcy5jaGVja2JveERpc2FibGVkS2V5XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzICYmIGNoYW5nZXMudHJlZSkge1xyXG4gICAgICB0aGlzLnRyZWVGYWN0b3J5ID0gVHJlZUZhY3RvcnkuZnJvbVRyZWUoe1xyXG4gICAgICAgIHRyZWVJdGVtczogdGhpcy50cmVlLFxyXG4gICAgICAgIHRyZWVOb2RlQ2hpbGRyZW5LZXk6IHRoaXMudHJlZU5vZGVDaGlsZHJlbktleSxcclxuICAgICAgICB0cmVlTm9kZUlkS2V5OiB0aGlzLnRyZWVOb2RlSWRLZXksXHJcbiAgICAgICAgdHJlZU5vZGVUaXRsZUtleTogdGhpcy50cmVlTm9kZVRpdGxlS2V5LFxyXG4gICAgICAgIGNoZWNrYm94RGlzYWJsZWRLZXk6IHRoaXMuY2hlY2tib3hEaXNhYmxlZEtleVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuZWxlbWVudEFzTWFzayA9IFRyZWVNYXNrU2VydmljZS5jcmVhdE1hc2tFbGVtZW50KCk7XHJcbiAgfVxyXG5cclxuICBhZGRCYWNrR3JvdW5kKGUpIHtcclxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBUcmVlTWFza1NlcnZpY2UuYWRkTWFzayhlLnRhcmdldCwgdGhpcy5lbGVtZW50QXNNYXNrLCBUcmVlTWFza1NlcnZpY2UuY2FsY1dpZHRoKHRoaXMudHJlZU5vZGVDb250ZW50LCAwKSk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVCYWNrR3JvdW5kKGUpIHtcclxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBUcmVlTWFza1NlcnZpY2UucmVtb3ZlTWFzayhlLnRhcmdldCwgdGhpcy5lbGVtZW50QXNNYXNrKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdE5vZGUoZXZlbnQsIHRyZWVOb2RlOiBUcmVlTm9kZSkge1xyXG4gICAgdGhpcy5ub2RlU2VsZWN0ZWQuZW1pdCh0cmVlTm9kZSk7XHJcbiAgICB0aGlzLnRyZWVGYWN0b3J5LmFjdGl2ZU5vZGVCeUlkKHRyZWVOb2RlLmlkKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZU5vZGUoZXZlbnQsIHRyZWVOb2RlOiBUcmVlTm9kZSkge1xyXG4gICAgdGhpcy50cmVlRmFjdG9yeS50b2dnbGVOb2RlQnlJZCh0cmVlTm9kZS5pZCk7XHJcbiAgICB0aGlzLm5vZGVUb2dnbGVkLmVtaXQodHJlZU5vZGUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFwcGVuZFRyZWVJdGVtcyh0cmVlSXRlbXM6IEFycmF5PElUcmVlSXRlbT4sIHBhcmVudElkKSB7XHJcbiAgICBpZiAoIXRoaXMudHJlZUZhY3Rvcnkubm9kZXNbcGFyZW50SWRdKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcigncGFyZW50IG5vZGUgZG9lcyBub3QgZXhpc3QuJyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnRyZWVGYWN0b3J5Lm1hcFRyZWVJdGVtcyh7XHJcbiAgICAgIHRyZWVJdGVtczogdHJlZUl0ZW1zLFxyXG4gICAgICBwYXJlbnRJZDogcGFyZW50SWQsXHJcbiAgICAgIHRyZWVOb2RlQ2hpbGRyZW5LZXk6IHRoaXMudHJlZU5vZGVDaGlsZHJlbktleSxcclxuICAgICAgdHJlZU5vZGVJZEtleTogdGhpcy50cmVlTm9kZUlkS2V5LFxyXG4gICAgICB0cmVlTm9kZVRpdGxlS2V5OiB0aGlzLnRyZWVOb2RlVGl0bGVLZXksXHJcbiAgICAgIGNoZWNrYm94RGlzYWJsZWRLZXk6IHRoaXMuY2hlY2tib3hEaXNhYmxlZEtleVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHB1YmxpYyBub2RlRGJsQ2xpY2soZXZlbnQsIG5vZGUpIHtcclxuICAgIHRoaXMubm9kZURibENsaWNrZWQuZW1pdChub2RlKTtcclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICBpZiAodGhpcy5pMThuU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuaTE4blN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG5cclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19