UNPKG

igniteui-angular

Version:

Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps

334 lines • 23.4 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, ChangeDetectorRef, ElementRef, HostBinding, HostListener, Input, Host, EventEmitter, Output, ContentChild, Inject } from '@angular/core'; import { IgxExpansionPanelIconDirective } from './expansion-panel.directives'; import { IGX_EXPANSION_PANEL_COMPONENT } from './expansion-panel.common'; /** @enum {string} */ const ICON_POSITION = { LEFT: 'left', NONE: 'none', RIGHT: 'right', }; export { ICON_POSITION }; export class IgxExpansionPanelHeaderComponent { /** * @param {?} panel * @param {?} cdr * @param {?} elementRef */ constructor(panel, cdr, elementRef) { this.panel = panel; this.cdr = cdr; this.elementRef = elementRef; // properties section this._iconTemplate = false; /** * Sets/gets the `id` of the expansion panel header. * ```typescript * let panelHeaderId = this.panel.header.id; * ``` * \@memberof IgxExpansionPanelComponent */ this.id = ''; /** * Gets/sets the `aria-level` attribute of the header * Get * ```typescript * const currentAriaLevel = this.panel.header.lv; * ``` * Set * ```typescript * this.panel.header.lv = '5'; * ``` * ```html * <igx-expansion-panel-header [lv]="myCustomLevel"></igx-expansion-panel-header> * ``` */ this.lv = '3'; /** * Gets/sets the `role` attribute of the header * Get * ```typescript * const currentRole = this.panel.header.role; * ``` * Set * ```typescript * this.panel.header.role = '5'; * ``` * ```html * <igx-expansion-panel-header [role]="'custom'"></igx-expansion-panel-header> * ``` */ this.role = 'heading'; /** * Gets/sets the position of the expansion-panel-header expand/collapse icon * Accepts `left`, `right` or `none` * ```typescript * const currentIconPosition = this.panel.header.iconPosition; * ``` * Set * ```typescript * this.panel.header.iconPosition = 'left'; * ``` * ```html * <igx-expansion-panel-header [iconPosition]="'right'"></igx-expansion-panel-header> * ``` */ this.iconPosition = ICON_POSITION.LEFT; /** * Emitted whenever a user interacts with the header host * ```typescript * handleInteraction(event: IExpansionPanelEventArgs) { * ... * } * ``` * ```html * <igx-expansion-panel-header (onInteraction)="handleInteraction($event)"> * ... * </igx-expansion-panel-header> * ``` */ this.onInteraction = new EventEmitter(); /** * @hidden */ this.cssClass = 'igx-expansion-panel__header'; /** * Gets/sets the whether the header is disabled * When disabled, the header will not handle user events and will stop their propagation * * ```typescript * const isDisabled = this.panel.header.disabled; * ``` * Set * ```typescript * this.panel.header.disabled = true; * ``` * ```html * <igx-expansion-panel-header [disabled]="true"> * ... * </igx-expansion-panel-header> * ``` */ this.disabled = false; this.id = `${this.panel.id}-header`; } /** * @hidden * @param {?} val * @return {?} */ set iconTemplate(val) { this._iconTemplate = (/** @type {?} */ (val)); } /** * @hidden * @return {?} */ get iconTemplate() { return this._iconTemplate; } /** * @hidden * @return {?} */ get controls() { return this.panel.id; } /** * @hidden * @return {?} */ get isExpanded() { return !this.panel.collapsed; } /** * @hidden * @param {?=} evt * @return {?} */ onAction(evt) { if (this.disabled) { evt.stopPropagation(); return; } this.onInteraction.emit({ event: evt, panel: this.panel }); this.panel.toggle(evt); evt.preventDefault(); } /** * @hidden \@internal * @param {?} event * @return {?} */ openPanel(event) { if (event.altKey) { this.panel.expand(event); this.onInteraction.emit({ event: event, panel: this.panel }); } } /** * @hidden \@internal * @param {?} event * @return {?} */ closePanel(event) { if (event.altKey) { this.panel.collapse(event); this.onInteraction.emit({ event: event, panel: this.panel }); } } /** * @hidden * @return {?} */ get iconPositionClass() { switch (this.iconPosition) { case (ICON_POSITION.LEFT): return `igx-expansion-panel__header-icon--start`; case (ICON_POSITION.RIGHT): return `igx-expansion-panel__header-icon--end`; case (ICON_POSITION.NONE): return `igx-expansion-panel__header-icon--none`; default: return ''; } } } IgxExpansionPanelHeaderComponent.decorators = [ { type: Component, args: [{ selector: 'igx-expansion-panel-header', template: "<div class=\"igx-expansion-panel__header-inner\" tabindex=\"0\" role=\"button\" [attr.id]=\"id\"\n[attr.aria-disabled]=\"disabled\" [attr.aria-expanded]=\"isExpanded\" [attr.aria-controls]=\"controls\">\n <div class=\"igx-expansion-panel__title-wrapper\">\n <ng-content select=\"igx-expansion-panel-title\"></ng-content>\n <ng-content select=\"igx-expansion-panel-description\"></ng-content>\n </div>\n <ng-content></ng-content>\n <div [class]=\"iconPositionClass\">\n <ng-content *ngIf=\"iconTemplate\" select=\"igx-expansion-panel-icon\"></ng-content>\n <igx-icon *ngIf=\"!iconTemplate\" fontSet=\"material\">\n {{panel.collapsed? 'expand_more':'expand_less'}}\n </igx-icon>\n </div>\n</div>\n" }] } ]; /** @nocollapse */ IgxExpansionPanelHeaderComponent.ctorParameters = () => [ { type: undefined, decorators: [{ type: Host }, { type: Inject, args: [IGX_EXPANSION_PANEL_COMPONENT,] }] }, { type: ChangeDetectorRef }, { type: ElementRef } ]; IgxExpansionPanelHeaderComponent.propDecorators = { iconTemplate: [{ type: ContentChild, args: [IgxExpansionPanelIconDirective,] }], lv: [{ type: HostBinding, args: ['attr.aria-level',] }, { type: Input }], role: [{ type: HostBinding, args: ['attr.role',] }, { type: Input }], iconPosition: [{ type: Input }], onInteraction: [{ type: Output }], cssClass: [{ type: HostBinding, args: ['class.igx-expansion-panel__header',] }], isExpanded: [{ type: HostBinding, args: ['class.igx-expansion-panel__header--expanded',] }], disabled: [{ type: Input }, { type: HostBinding, args: ['class.igx-expansion-panel--disabled',] }], onAction: [{ type: HostListener, args: ['keydown.Enter', ['$event'],] }, { type: HostListener, args: ['keydown.Space', ['$event'],] }, { type: HostListener, args: ['keydown.Spacebar', ['$event'],] }, { type: HostListener, args: ['click', ['$event'],] }], openPanel: [{ type: HostListener, args: ['keydown.Alt.ArrowDown', ['$event'],] }], closePanel: [{ type: HostListener, args: ['keydown.Alt.ArrowUp', ['$event'],] }] }; if (false) { /** * @type {?} * @private */ IgxExpansionPanelHeaderComponent.prototype._iconTemplate; /** * Sets/gets the `id` of the expansion panel header. * ```typescript * let panelHeaderId = this.panel.header.id; * ``` * \@memberof IgxExpansionPanelComponent * @type {?} */ IgxExpansionPanelHeaderComponent.prototype.id; /** * Gets/sets the `aria-level` attribute of the header * Get * ```typescript * const currentAriaLevel = this.panel.header.lv; * ``` * Set * ```typescript * this.panel.header.lv = '5'; * ``` * ```html * <igx-expansion-panel-header [lv]="myCustomLevel"></igx-expansion-panel-header> * ``` * @type {?} */ IgxExpansionPanelHeaderComponent.prototype.lv; /** * Gets/sets the `role` attribute of the header * Get * ```typescript * const currentRole = this.panel.header.role; * ``` * Set * ```typescript * this.panel.header.role = '5'; * ``` * ```html * <igx-expansion-panel-header [role]="'custom'"></igx-expansion-panel-header> * ``` * @type {?} */ IgxExpansionPanelHeaderComponent.prototype.role; /** * Gets/sets the position of the expansion-panel-header expand/collapse icon * Accepts `left`, `right` or `none` * ```typescript * const currentIconPosition = this.panel.header.iconPosition; * ``` * Set * ```typescript * this.panel.header.iconPosition = 'left'; * ``` * ```html * <igx-expansion-panel-header [iconPosition]="'right'"></igx-expansion-panel-header> * ``` * @type {?} */ IgxExpansionPanelHeaderComponent.prototype.iconPosition; /** * Emitted whenever a user interacts with the header host * ```typescript * handleInteraction(event: IExpansionPanelEventArgs) { * ... * } * ``` * ```html * <igx-expansion-panel-header (onInteraction)="handleInteraction($event)"> * ... * </igx-expansion-panel-header> * ``` * @type {?} */ IgxExpansionPanelHeaderComponent.prototype.onInteraction; /** * @hidden * @type {?} */ IgxExpansionPanelHeaderComponent.prototype.cssClass; /** * Gets/sets the whether the header is disabled * When disabled, the header will not handle user events and will stop their propagation * * ```typescript * const isDisabled = this.panel.header.disabled; * ``` * Set * ```typescript * this.panel.header.disabled = true; * ``` * ```html * <igx-expansion-panel-header [disabled]="true"> * ... * </igx-expansion-panel-header> * ``` * @type {?} */ IgxExpansionPanelHeaderComponent.prototype.disabled; /** @type {?} */ IgxExpansionPanelHeaderComponent.prototype.panel; /** @type {?} */ IgxExpansionPanelHeaderComponent.prototype.cdr; /** @type {?} */ IgxExpansionPanelHeaderComponent.prototype.elementRef; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9pZ25pdGV1aS1hbmd1bGFyLyIsInNvdXJjZXMiOlsibGliL2V4cGFuc2lvbi1wYW5lbC9leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsVUFBVSxFQUNWLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUNMLElBQUksRUFDSixZQUFZLEVBQ1osTUFBTSxFQUNOLFlBQVksRUFDWixNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDOUUsT0FBTyxFQUE0Qiw2QkFBNkIsRUFBeUIsTUFBTSwwQkFBMEIsQ0FBQzs7O0lBTXRILE1BQU8sTUFBTTtJQUNiLE1BQU8sTUFBTTtJQUNiLE9BQVEsT0FBTzs7O0FBUW5CLE1BQU0sT0FBTyxnQ0FBZ0M7Ozs7OztJQTBJekMsWUFBa0UsS0FBNEIsRUFBUyxHQUFzQixFQUNySCxVQUFzQjtRQURvQyxVQUFLLEdBQUwsS0FBSyxDQUF1QjtRQUFTLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3JILGVBQVUsR0FBVixVQUFVLENBQVk7O1FBekl0QixrQkFBYSxHQUFHLEtBQUssQ0FBQzs7Ozs7Ozs7UUFRdkIsT0FBRSxHQUFHLEVBQUUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O1FBaUNSLE9BQUUsR0FBRyxHQUFHLENBQUM7Ozs7Ozs7Ozs7Ozs7OztRQWtCVCxTQUFJLEdBQUcsU0FBUyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7UUF3QmpCLGlCQUFZLEdBQWtCLGFBQWEsQ0FBQyxJQUFJLENBQUM7Ozs7Ozs7Ozs7Ozs7O1FBZ0JqRCxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUE0QixDQUFDOzs7O1FBTTVELGFBQVEsR0FBRyw2QkFBNkIs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LFFBQVEsQ0FBQyxjQUN4QyxZQUFZLFNBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDLGNBQ3hDLFlBQVksU0FBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyxjQUMzQyxZQUFZLFNBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDO3dCQVlqQyxZQUFZLFNBQUMsdUJBQXVCLEVBQUUsQ0FBQyxRQUFRLENBQUM7eUJBUy9DLFlBQVksU0FBQyxxQkFBcUIsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7Ozs7OztJQXhLaEQseURBQThCOzs7Ozs7Ozs7SUFROUIsOENBQWU7Ozs7Ozs7Ozs7Ozs7Ozs7SUErQmYsOENBRWdCOzs7Ozs7Ozs7Ozs7Ozs7O0lBZ0JoQixnREFFd0I7Ozs7Ozs7Ozs7Ozs7Ozs7SUF1QnhCLHdEQUN3RDs7Ozs7Ozs7Ozs7Ozs7O0lBZXhELHlEQUNvRTs7Ozs7SUFLbkUsb0RBQ2dEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBMkJqRCxvREFFd0I7O0lBRVosaURBQWtGOztJQUFFLCtDQUE2Qjs7SUFDNUgsc0RBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgRWxlbWVudFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5wdXQsXG4gICAgSG9zdCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgT3V0cHV0LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBJbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJZ3hFeHBhbnNpb25QYW5lbEljb25EaXJlY3RpdmUgfSBmcm9tICcuL2V4cGFuc2lvbi1wYW5lbC5kaXJlY3RpdmVzJztcbmltcG9ydCB7IElFeHBhbnNpb25QYW5lbEV2ZW50QXJncywgSUdYX0VYUEFOU0lPTl9QQU5FTF9DT01QT05FTlQsIElneEV4cGFuc2lvblBhbmVsQmFzZSB9IGZyb20gJy4vZXhwYW5zaW9uLXBhbmVsLmNvbW1vbic7XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgZW51bSBJQ09OX1BPU0lUSU9OIHtcbiAgICBMRUZUID0gJ2xlZnQnLFxuICAgIE5PTkUgPSAnbm9uZScsXG4gICAgUklHSFQgPSAncmlnaHQnXG59XG5cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdpZ3gtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcicsXG4gICAgdGVtcGxhdGVVcmw6ICdleHBhbnNpb24tcGFuZWwtaGVhZGVyLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBJZ3hFeHBhbnNpb25QYW5lbEhlYWRlckNvbXBvbmVudCB7XG4gICAgIC8vIHByb3BlcnRpZXMgc2VjdGlvblxuICAgIHByaXZhdGUgX2ljb25UZW1wbGF0ZSA9IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgYGlkYCBvZiB0aGUgZXhwYW5zaW9uIHBhbmVsIGhlYWRlci5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHBhbmVsSGVhZGVySWQgPSAgdGhpcy5wYW5lbC5oZWFkZXIuaWQ7XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneEV4cGFuc2lvblBhbmVsQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGlkID0gJyc7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZChJZ3hFeHBhbnNpb25QYW5lbEljb25EaXJlY3RpdmUpXG4gICAgcHVibGljIHNldCBpY29uVGVtcGxhdGUodmFsOiBhbnkpIHtcbiAgICAgICAgdGhpcy5faWNvblRlbXBsYXRlID0gPGJvb2xlYW4+dmFsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGljb25UZW1wbGF0ZSgpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5faWNvblRlbXBsYXRlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMvc2V0cyB0aGUgYGFyaWEtbGV2ZWxgIGF0dHJpYnV0ZSBvZiB0aGUgaGVhZGVyXG4gICAgICogR2V0XG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICBjb25zdCBjdXJyZW50QXJpYUxldmVsID0gdGhpcy5wYW5lbC5oZWFkZXIubHY7XG4gICAgICogYGBgXG4gICAgICogU2V0XG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICB0aGlzLnBhbmVsLmhlYWRlci5sdiA9ICc1JztcbiAgICAgKiBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogIDxpZ3gtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBbbHZdPVwibXlDdXN0b21MZXZlbFwiPjwvaWd4LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbGV2ZWwnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGx2ID0gJzMnO1xuXG4gICAgLyoqXG4gICAgICogR2V0cy9zZXRzIHRoZSBgcm9sZWAgYXR0cmlidXRlIG9mIHRoZSBoZWFkZXJcbiAgICAgKiBHZXRcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogIGNvbnN0IGN1cnJlbnRSb2xlID0gdGhpcy5wYW5lbC5oZWFkZXIucm9sZTtcbiAgICAgKiBgYGBcbiAgICAgKiBTZXRcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogIHRoaXMucGFuZWwuaGVhZGVyLnJvbGUgPSAnNSc7XG4gICAgICogYGBgXG4gICAgICogYGBgaHRtbFxuICAgICAqICA8aWd4LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgW3JvbGVdPVwiJ2N1c3RvbSdcIj48L2lneC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyByb2xlID0gJ2hlYWRpbmcnO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY29udHJvbHMgKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhbmVsLmlkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMvc2V0cyB0aGUgcG9zaXRpb24gb2YgdGhlIGV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZXhwYW5kL2NvbGxhcHNlIGljb25cbiAgICAgKiBBY2NlcHRzIGBsZWZ0YCwgYHJpZ2h0YCBvciBgbm9uZWBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogIGNvbnN0IGN1cnJlbnRJY29uUG9zaXRpb24gPSB0aGlzLnBhbmVsLmhlYWRlci5pY29uUG9zaXRpb247XG4gICAgICogYGBgXG4gICAgICogU2V0XG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICB0aGlzLnBhbmVsLmhlYWRlci5pY29uUG9zaXRpb24gPSAnbGVmdCc7XG4gICAgICogYGBgXG4gICAgICogYGBgaHRtbFxuICAgICAqICA8aWd4LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgW2ljb25Qb3NpdGlvbl09XCIncmlnaHQnXCI+PC9pZ3gtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpY29uUG9zaXRpb246IElDT05fUE9TSVRJT04gPSBJQ09OX1BPU0lUSU9OLkxFRlQ7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW5ldmVyIGEgdXNlciBpbnRlcmFjdHMgd2l0aCB0aGUgaGVhZGVyIGhvc3RcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogIGhhbmRsZUludGVyYWN0aW9uKGV2ZW50OiBJRXhwYW5zaW9uUGFuZWxFdmVudEFyZ3MpIHtcbiAgICAgKiAgLi4uXG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiAgPGlneC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIChvbkludGVyYWN0aW9uKT1cImhhbmRsZUludGVyYWN0aW9uKCRldmVudClcIj5cbiAgICAgKiAgICAgIC4uLlxuICAgICAqICA8L2lneC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvbkludGVyYWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxJRXhwYW5zaW9uUGFuZWxFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWV4cGFuc2lvbi1wYW5lbF9faGVhZGVyJylcbiAgICAgcHVibGljIGNzc0NsYXNzID0gJ2lneC1leHBhbnNpb24tcGFuZWxfX2hlYWRlcic7XG5cbiAgICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1leHBhbnNpb24tcGFuZWxfX2hlYWRlci0tZXhwYW5kZWQnKVxuICAgICBwdWJsaWMgZ2V0IGlzRXhwYW5kZWQgKCkge1xuICAgICAgICAgICAgcmV0dXJuICF0aGlzLnBhbmVsLmNvbGxhcHNlZDtcbiAgICAgICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMvc2V0cyB0aGUgd2hldGhlciB0aGUgaGVhZGVyIGlzIGRpc2FibGVkXG4gICAgICogV2hlbiBkaXNhYmxlZCwgdGhlIGhlYWRlciB3aWxsIG5vdCBoYW5kbGUgdXNlciBldmVudHMgYW5kIHdpbGwgc3RvcCB0aGVpciBwcm9wYWdhdGlvblxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICBjb25zdCBpc0Rpc2FibGVkID0gdGhpcy5wYW5lbC5oZWFkZXIuZGlzYWJsZWQ7XG4gICAgICogYGBgXG4gICAgICogU2V0XG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICB0aGlzLnBhbmVsLmhlYWRlci5kaXNhYmxlZCA9IHRydWU7XG4gICAgICogYGBgXG4gICAgICogYGBgaHRtbFxuICAgICAqICA8aWd4LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgW2Rpc2FibGVkXT1cInRydWVcIj5cbiAgICAgKiAgICAgLi4uXG4gICAgICogIDwvaWd4LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1leHBhbnNpb24tcGFuZWwtLWRpc2FibGVkJylcbiAgICBwdWJsaWMgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKEBIb3N0KCkgQEluamVjdChJR1hfRVhQQU5TSU9OX1BBTkVMX0NPTVBPTkVOVCkgcHVibGljIHBhbmVsOiBJZ3hFeHBhbnNpb25QYW5lbEJhc2UsIHB1YmxpYyBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICBwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZikge1xuICAgICAgICAgdGhpcy5pZCA9IGAke3RoaXMucGFuZWwuaWR9LWhlYWRlcmA7XG4gICAgIH1cblxuICAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uRW50ZXInLCBbJyRldmVudCddKVxuICAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLlNwYWNlJywgWyckZXZlbnQnXSlcbiAgICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5TcGFjZWJhcicsIFsnJGV2ZW50J10pXG4gICAgIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgICAgcHVibGljIG9uQWN0aW9uKGV2dD86IEV2ZW50KSB7XG4gICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgfVxuICAgICAgICAgdGhpcy5vbkludGVyYWN0aW9uLmVtaXQoeyBldmVudDogZXZ0LCBwYW5lbDogdGhpcy5wYW5lbCB9KTtcbiAgICAgICAgIHRoaXMucGFuZWwudG9nZ2xlKGV2dCk7XG4gICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5BbHQuQXJyb3dEb3duJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb3BlblBhbmVsKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC5hbHRLZXkpIHtcbiAgICAgICAgICAgIHRoaXMucGFuZWwuZXhwYW5kKGV2ZW50KTtcbiAgICAgICAgICAgIHRoaXMub25JbnRlcmFjdGlvbi5lbWl0KHsgZXZlbnQ6IGV2ZW50LCBwYW5lbDogdGhpcy5wYW5lbCB9KTtcbiAgICAgICAgfVxuICAgICB9XG5cbiAgICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uQWx0LkFycm93VXAnLCBbJyRldmVudCddKVxuICAgICBwdWJsaWMgY2xvc2VQYW5lbChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAoZXZlbnQuYWx0S2V5KSB7XG4gICAgICAgICAgICB0aGlzLnBhbmVsLmNvbGxhcHNlKGV2ZW50KTtcbiAgICAgICAgICAgIHRoaXMub25JbnRlcmFjdGlvbi5lbWl0KHsgZXZlbnQ6IGV2ZW50LCBwYW5lbDogdGhpcy5wYW5lbCB9KTtcbiAgICAgICAgfVxuICAgICB9XG5cbiAgICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgICBwdWJsaWMgZ2V0IGljb25Qb3NpdGlvbkNsYXNzKCk6IHN0cmluZyB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5pY29uUG9zaXRpb24pIHtcbiAgICAgICAgICAgIGNhc2UgKElDT05fUE9TSVRJT04uTEVGVCk6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBpZ3gtZXhwYW5zaW9uLXBhbmVsX19oZWFkZXItaWNvbi0tc3RhcnRgO1xuICAgICAgICAgICAgY2FzZSAoSUNPTl9QT1NJVElPTi5SSUdIVCk6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBpZ3gtZXhwYW5zaW9uLXBhbmVsX19oZWFkZXItaWNvbi0tZW5kYDtcbiAgICAgICAgICAgIGNhc2UgKElDT05fUE9TSVRJT04uTk9ORSk6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBpZ3gtZXhwYW5zaW9uLXBhbmVsX19oZWFkZXItaWNvbi0tbm9uZWA7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICB9XG59XG4iXX0=