UNPKG

carbon-components-angular

Version:
208 lines (204 loc) 16.8 kB
import { HostBinding, Component, Input, Output, EventEmitter } from "@angular/core"; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; /** * Available HTML anchor targets */ export var Target; (function (Target) { Target["self"] = "_self"; Target["blank"] = "_blank"; Target["parent"] = "_parent"; Target["top"] = "_top"; })(Target || (Target = {})); /** * Security HTML anchor rel when target is set */ const REL = "noreferrer noopener"; /** * `OverflowMenuOption` represents a single option in an overflow menu * * Presently it has three possible states - normal, disabled, and danger: * ``` * <cds-overflow-menu-option>Simple option</cds-overflow-menu-option> * <cds-overflow-menu-option disabled="true">Disabled</cds-overflow-menu-option> * <cds-overflow-menu-option type="danger">Danger option</cds-overflow-menu-option> * ``` * * For content that expands beyond the overflow menu `OverflowMenuOption` automatically adds a title attribute. */ export class OverflowMenuOption { constructor(elementRef) { this.elementRef = elementRef; this.optionClass = true; this.role = "presentation"; /** * Set to `true` to display a dividing line above this option */ this.divider = false; /** * toggles between `normal` and `danger` states */ this.type = "normal"; /** * disable/enable interactions */ this.disabled = false; /** * Apply a custom class to the inner button/anchor */ this.innerClass = ""; this.selected = new EventEmitter(); this.tabIndex = -1; // note: title must be a real attribute (i.e. not a getter) as of Angular@6 due to // change after checked errors this.title = null; } get isDanger() { return this.type === "danger"; } get isDisabled() { return this.disabled; } /** * Allows to add a target to the anchor */ set target(value) { if (!Object.values(Target).includes(value)) { console.warn(`\`target\` must have one of the following values: ${Object.values(Target).join(", ")}. Please use the \`Target\` enum exported by carbon-components-angular`); return; } this._target = value; } get target() { return this._target; } /** * rel only returns its value if target is defined */ get rel() { return this._target ? REL : null; } onClick() { this.selected.emit(); } onFocus() { setTimeout(() => this.tabIndex = 0); } onBlur() { setTimeout(() => this.tabIndex = -1); } ngAfterViewInit() { const button = this.elementRef.nativeElement.querySelector("button, a"); const textContainer = button.querySelector(".cds--overflow-menu-options__option-content"); if (textContainer.scrollWidth > textContainer.offsetWidth) { this.title = button.textContent; } } } OverflowMenuOption.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: OverflowMenuOption, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); OverflowMenuOption.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: OverflowMenuOption, selector: "cds-overflow-menu-option, ibm-overflow-menu-option", inputs: { divider: "divider", type: "type", disabled: "disabled", href: "href", target: "target", innerClass: "innerClass" }, outputs: { selected: "selected" }, host: { properties: { "class.cds--overflow-menu-options__option": "this.optionClass", "attr.role": "this.role", "class.cds--overflow-menu-options__option--danger": "this.isDanger", "class.cds--overflow-menu-options__option--disabled": "this.isDisabled", "class.cds--overflow-menu--divider": "this.divider" } }, ngImport: i0, template: ` <button *ngIf="!href" class="cds--overflow-menu-options__btn {{innerClass}}" role="menuitem" [tabindex]="tabIndex" (focus)="onFocus()" (blur)="onBlur()" (click)="onClick()" [disabled]="disabled" [attr.title]="title"> <ng-container *ngTemplateOutlet="tempOutlet"></ng-container> </button> <a *ngIf="href" class="cds--overflow-menu-options__btn {{innerClass}}" role="menuitem" [tabindex]="tabIndex" (focus)="onFocus()" (blur)="onBlur()" (click)="onClick()" [attr.disabled]="disabled" [href]="href" [attr.target]="target" [attr.rel]="rel" [attr.title]="title"> <ng-container *ngTemplateOutlet="tempOutlet"></ng-container> </a> <ng-template #tempOutlet> <div class="cds--overflow-menu-options__option-content"> <ng-content></ng-content> </div> </ng-template> `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: OverflowMenuOption, decorators: [{ type: Component, args: [{ selector: "cds-overflow-menu-option, ibm-overflow-menu-option", template: ` <button *ngIf="!href" class="cds--overflow-menu-options__btn {{innerClass}}" role="menuitem" [tabindex]="tabIndex" (focus)="onFocus()" (blur)="onBlur()" (click)="onClick()" [disabled]="disabled" [attr.title]="title"> <ng-container *ngTemplateOutlet="tempOutlet"></ng-container> </button> <a *ngIf="href" class="cds--overflow-menu-options__btn {{innerClass}}" role="menuitem" [tabindex]="tabIndex" (focus)="onFocus()" (blur)="onBlur()" (click)="onClick()" [attr.disabled]="disabled" [href]="href" [attr.target]="target" [attr.rel]="rel" [attr.title]="title"> <ng-container *ngTemplateOutlet="tempOutlet"></ng-container> </a> <ng-template #tempOutlet> <div class="cds--overflow-menu-options__option-content"> <ng-content></ng-content> </div> </ng-template> ` }] }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { optionClass: [{ type: HostBinding, args: ["class.cds--overflow-menu-options__option"] }], role: [{ type: HostBinding, args: ["attr.role"] }], isDanger: [{ type: HostBinding, args: ["class.cds--overflow-menu-options__option--danger"] }], isDisabled: [{ type: HostBinding, args: ["class.cds--overflow-menu-options__option--disabled"] }], divider: [{ type: HostBinding, args: ["class.cds--overflow-menu--divider"] }, { type: Input }], type: [{ type: Input }], disabled: [{ type: Input }], href: [{ type: Input }], target: [{ type: Input }], innerClass: [{ type: Input }], selected: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmZsb3ctbWVudS1vcHRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RpYWxvZy9vdmVyZmxvdy1tZW51L292ZXJmbG93LW1lbnUtb3B0aW9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sV0FBVyxFQUNYLFNBQVMsRUFDVCxLQUFLLEVBRUwsTUFBTSxFQUNOLFlBQVksRUFFWixNQUFNLGVBQWUsQ0FBQzs7O0FBRXZCOztHQUVHO0FBQ0gsTUFBTSxDQUFOLElBQVksTUFLWDtBQUxELFdBQVksTUFBTTtJQUNqQix3QkFBYyxDQUFBO0lBQ2QsMEJBQWdCLENBQUE7SUFDaEIsNEJBQWtCLENBQUE7SUFDbEIsc0JBQVksQ0FBQTtBQUNiLENBQUMsRUFMVyxNQUFNLEtBQU4sTUFBTSxRQUtqQjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxHQUFHLEdBQUcscUJBQXFCLENBQUM7QUFFbEM7Ozs7Ozs7Ozs7O0dBV0c7QUF3Q0gsTUFBTSxPQUFPLGtCQUFrQjtJQWtFOUIsWUFBc0IsVUFBc0I7UUFBdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQWpFYSxnQkFBVyxHQUFHLElBQUksQ0FBQztRQUNsRCxTQUFJLEdBQUcsY0FBYyxDQUFDO1FBV2hEOztXQUVHO1FBQ3dELFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDM0U7O1dBRUc7UUFDTSxTQUFJLEdBQXdCLFFBQVEsQ0FBQztRQUM5Qzs7V0FFRztRQUNNLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFrQjFCOztXQUVHO1FBQ00sZUFBVSxHQUFHLEVBQUUsQ0FBQztRQVlmLGFBQVEsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVwRCxhQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDckIsa0ZBQWtGO1FBQ2xGLDhCQUE4QjtRQUN2QixVQUFLLEdBQUcsSUFBSSxDQUFDO0lBSTJCLENBQUM7SUE5RGhELElBQ1csUUFBUTtRQUNsQixPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUNXLFVBQVU7UUFDcEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3RCLENBQUM7SUFpQkQ7O09BRUc7SUFDSCxJQUFhLE1BQU0sQ0FBQyxLQUFhO1FBQ2hDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUMzQyxPQUFPLENBQUMsSUFBSSxDQUNmLHFEQUFxRCxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7cUVBQ2hCLENBQUMsQ0FBQztZQUNwRSxPQUFPO1NBQ1A7UUFFRCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBTUQsSUFBSSxNQUFNO1FBQ1QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3JCLENBQUM7SUFDRDs7T0FFRztJQUNILElBQUksR0FBRztRQUNOLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDbEMsQ0FBQztJQWFELE9BQU87UUFDTixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxPQUFPO1FBQ04sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELE1BQU07UUFDTCxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxlQUFlO1FBQ2QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsNkNBQTZDLENBQUMsQ0FBQztRQUMxRixJQUFJLGFBQWEsQ0FBQyxXQUFXLEdBQUcsYUFBYSxDQUFDLFdBQVcsRUFBRTtZQUMxRCxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUM7U0FDaEM7SUFDRixDQUFDOzsrR0F0Rlcsa0JBQWtCO21HQUFsQixrQkFBa0Isa2pCQXJDcEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBbUNUOzJGQUVXLGtCQUFrQjtrQkF2QzlCLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLG9EQUFvRDtvQkFDOUQsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQW1DVDtpQkFDRDtpR0FFeUQsV0FBVztzQkFBbkUsV0FBVzt1QkFBQywwQ0FBMEM7Z0JBQzdCLElBQUk7c0JBQTdCLFdBQVc7dUJBQUMsV0FBVztnQkFHYixRQUFRO3NCQURsQixXQUFXO3VCQUFDLGtEQUFrRDtnQkFNcEQsVUFBVTtzQkFEcEIsV0FBVzt1QkFBQyxvREFBb0Q7Z0JBT04sT0FBTztzQkFBakUsV0FBVzt1QkFBQyxtQ0FBbUM7O3NCQUFHLEtBQUs7Z0JBSS9DLElBQUk7c0JBQVosS0FBSztnQkFJRyxRQUFRO3NCQUFoQixLQUFLO2dCQUlHLElBQUk7c0JBQVosS0FBSztnQkFJTyxNQUFNO3NCQUFsQixLQUFLO2dCQWFHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBWUksUUFBUTtzQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdEhvc3RCaW5kaW5nLFxuXHRDb21wb25lbnQsXG5cdElucHV0LFxuXHRFbGVtZW50UmVmLFxuXHRPdXRwdXQsXG5cdEV2ZW50RW1pdHRlcixcblx0QWZ0ZXJWaWV3SW5pdFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG4vKipcbiAqIEF2YWlsYWJsZSBIVE1MIGFuY2hvciB0YXJnZXRzXG4gKi9cbmV4cG9ydCBlbnVtIFRhcmdldCB7XG5cdHNlbGYgPSBcIl9zZWxmXCIsXG5cdGJsYW5rID0gXCJfYmxhbmtcIixcblx0cGFyZW50ID0gXCJfcGFyZW50XCIsXG5cdHRvcCA9IFwiX3RvcFwiXG59XG5cbi8qKlxuICogU2VjdXJpdHkgSFRNTCBhbmNob3IgcmVsIHdoZW4gdGFyZ2V0IGlzIHNldFxuICovXG5jb25zdCBSRUwgPSBcIm5vcmVmZXJyZXIgbm9vcGVuZXJcIjtcblxuLyoqXG4gKiBgT3ZlcmZsb3dNZW51T3B0aW9uYCByZXByZXNlbnRzIGEgc2luZ2xlIG9wdGlvbiBpbiBhbiBvdmVyZmxvdyBtZW51XG4gKlxuICogUHJlc2VudGx5IGl0IGhhcyB0aHJlZSBwb3NzaWJsZSBzdGF0ZXMgLSBub3JtYWwsIGRpc2FibGVkLCBhbmQgZGFuZ2VyOlxuICogYGBgXG4gKiA8Y2RzLW92ZXJmbG93LW1lbnUtb3B0aW9uPlNpbXBsZSBvcHRpb248L2Nkcy1vdmVyZmxvdy1tZW51LW9wdGlvbj5cbiAqIDxjZHMtb3ZlcmZsb3ctbWVudS1vcHRpb24gZGlzYWJsZWQ9XCJ0cnVlXCI+RGlzYWJsZWQ8L2Nkcy1vdmVyZmxvdy1tZW51LW9wdGlvbj5cbiAqIDxjZHMtb3ZlcmZsb3ctbWVudS1vcHRpb24gdHlwZT1cImRhbmdlclwiPkRhbmdlciBvcHRpb248L2Nkcy1vdmVyZmxvdy1tZW51LW9wdGlvbj5cbiAqIGBgYFxuICpcbiAqIEZvciBjb250ZW50IHRoYXQgZXhwYW5kcyBiZXlvbmQgdGhlIG92ZXJmbG93IG1lbnUgYE92ZXJmbG93TWVudU9wdGlvbmAgYXV0b21hdGljYWxseSBhZGRzIGEgdGl0bGUgYXR0cmlidXRlLlxuICovXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6IFwiY2RzLW92ZXJmbG93LW1lbnUtb3B0aW9uLCBpYm0tb3ZlcmZsb3ctbWVudS1vcHRpb25cIixcblx0dGVtcGxhdGU6IGBcblx0XHQ8YnV0dG9uXG5cdFx0XHQqbmdJZj1cIiFocmVmXCJcblx0XHRcdGNsYXNzPVwiY2RzLS1vdmVyZmxvdy1tZW51LW9wdGlvbnNfX2J0biB7e2lubmVyQ2xhc3N9fVwiXG5cdFx0XHRyb2xlPVwibWVudWl0ZW1cIlxuXHRcdFx0W3RhYmluZGV4XT1cInRhYkluZGV4XCJcblx0XHRcdChmb2N1cyk9XCJvbkZvY3VzKClcIlxuXHRcdFx0KGJsdXIpPVwib25CbHVyKClcIlxuXHRcdFx0KGNsaWNrKT1cIm9uQ2xpY2soKVwiXG5cdFx0XHRbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuXHRcdFx0W2F0dHIudGl0bGVdPVwidGl0bGVcIj5cblx0XHRcdDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wT3V0bGV0XCI+PC9uZy1jb250YWluZXI+XG5cdFx0PC9idXR0b24+XG5cblx0XHQ8YVxuXHRcdFx0Km5nSWY9XCJocmVmXCJcblx0XHRcdGNsYXNzPVwiY2RzLS1vdmVyZmxvdy1tZW51LW9wdGlvbnNfX2J0biB7e2lubmVyQ2xhc3N9fVwiXG5cdFx0XHRyb2xlPVwibWVudWl0ZW1cIlxuXHRcdFx0W3RhYmluZGV4XT1cInRhYkluZGV4XCJcblx0XHRcdChmb2N1cyk9XCJvbkZvY3VzKClcIlxuXHRcdFx0KGJsdXIpPVwib25CbHVyKClcIlxuXHRcdFx0KGNsaWNrKT1cIm9uQ2xpY2soKVwiXG5cdFx0XHRbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG5cdFx0XHRbaHJlZl09XCJocmVmXCJcblx0XHRcdFthdHRyLnRhcmdldF09XCJ0YXJnZXRcIlxuXHRcdFx0W2F0dHIucmVsXT1cInJlbFwiXG5cdFx0XHRbYXR0ci50aXRsZV09XCJ0aXRsZVwiPlxuXHRcdFx0PG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBPdXRsZXRcIj48L25nLWNvbnRhaW5lcj5cblx0XHQ8L2E+XG5cblx0XHQ8bmctdGVtcGxhdGUgI3RlbXBPdXRsZXQ+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiY2RzLS1vdmVyZmxvdy1tZW51LW9wdGlvbnNfX29wdGlvbi1jb250ZW50XCI+XG5cdFx0XHRcdDxuZy1jb250ZW50PjwvbmctY29udGVudD5cblx0XHRcdDwvZGl2PlxuXHRcdDwvbmctdGVtcGxhdGU+XG5cdGBcbn0pXG5leHBvcnQgY2xhc3MgT3ZlcmZsb3dNZW51T3B0aW9uIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG5cdEBIb3N0QmluZGluZyhcImNsYXNzLmNkcy0tb3ZlcmZsb3ctbWVudS1vcHRpb25zX19vcHRpb25cIikgb3B0aW9uQ2xhc3MgPSB0cnVlO1xuXHRASG9zdEJpbmRpbmcoXCJhdHRyLnJvbGVcIikgcm9sZSA9IFwicHJlc2VudGF0aW9uXCI7XG5cblx0QEhvc3RCaW5kaW5nKFwiY2xhc3MuY2RzLS1vdmVyZmxvdy1tZW51LW9wdGlvbnNfX29wdGlvbi0tZGFuZ2VyXCIpXG5cdHB1YmxpYyBnZXQgaXNEYW5nZXIoKTogQm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMudHlwZSA9PT0gXCJkYW5nZXJcIjtcblx0fVxuXG5cdEBIb3N0QmluZGluZyhcImNsYXNzLmNkcy0tb3ZlcmZsb3ctbWVudS1vcHRpb25zX19vcHRpb24tLWRpc2FibGVkXCIpXG5cdHB1YmxpYyBnZXQgaXNEaXNhYmxlZCgpOiBCb29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5kaXNhYmxlZDtcblx0fVxuXHQvKipcblx0ICogU2V0IHRvIGB0cnVlYCB0byBkaXNwbGF5IGEgZGl2aWRpbmcgbGluZSBhYm92ZSB0aGlzIG9wdGlvblxuXHQgKi9cblx0QEhvc3RCaW5kaW5nKFwiY2xhc3MuY2RzLS1vdmVyZmxvdy1tZW51LS1kaXZpZGVyXCIpIEBJbnB1dCgpIGRpdmlkZXIgPSBmYWxzZTtcblx0LyoqXG5cdCAqIHRvZ2dsZXMgYmV0d2VlbiBgbm9ybWFsYCBhbmQgYGRhbmdlcmAgc3RhdGVzXG5cdCAqL1xuXHRASW5wdXQoKSB0eXBlOiBcIm5vcm1hbFwiIHwgXCJkYW5nZXJcIiA9IFwibm9ybWFsXCI7XG5cdC8qKlxuXHQgKiBkaXNhYmxlL2VuYWJsZSBpbnRlcmFjdGlvbnNcblx0ICovXG5cdEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG5cdC8qKlxuXHQgKiBJZiBpdCdzIGFuIGFuY2hvciwgdGhpcyBpcyBpdHMgbG9jYXRpb25cblx0ICovXG5cdEBJbnB1dCgpIGhyZWY6IHN0cmluZztcblx0LyoqXG5cdCAqIEFsbG93cyB0byBhZGQgYSB0YXJnZXQgdG8gdGhlIGFuY2hvclxuXHQgKi9cblx0QElucHV0KCkgc2V0IHRhcmdldCh2YWx1ZTogVGFyZ2V0KSB7XG5cdFx0aWYgKCFPYmplY3QudmFsdWVzKFRhcmdldCkuaW5jbHVkZXModmFsdWUpKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oXG5gXFxgdGFyZ2V0XFxgIG11c3QgaGF2ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6ICR7T2JqZWN0LnZhbHVlcyhUYXJnZXQpLmpvaW4oXCIsIFwiKX0uXG5QbGVhc2UgdXNlIHRoZSBcXGBUYXJnZXRcXGAgZW51bSBleHBvcnRlZCBieSBjYXJib24tY29tcG9uZW50cy1hbmd1bGFyYCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5fdGFyZ2V0ID0gdmFsdWU7XG5cdH1cblx0LyoqXG5cdCAqIEFwcGx5IGEgY3VzdG9tIGNsYXNzIHRvIHRoZSBpbm5lciBidXR0b24vYW5jaG9yXG5cdCAqL1xuXHRASW5wdXQoKSBpbm5lckNsYXNzID0gXCJcIjtcblxuXHRnZXQgdGFyZ2V0KCkge1xuXHRcdHJldHVybiB0aGlzLl90YXJnZXQ7XG5cdH1cblx0LyoqXG5cdCAqIHJlbCBvbmx5IHJldHVybnMgaXRzIHZhbHVlIGlmIHRhcmdldCBpcyBkZWZpbmVkXG5cdCAqL1xuXHRnZXQgcmVsKCkge1xuXHRcdHJldHVybiB0aGlzLl90YXJnZXQgPyBSRUwgOiBudWxsO1xuXHR9XG5cblx0QE91dHB1dCgpIHNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXHRwdWJsaWMgdGFiSW5kZXggPSAtMTtcblx0Ly8gbm90ZTogdGl0bGUgbXVzdCBiZSBhIHJlYWwgYXR0cmlidXRlIChpLmUuIG5vdCBhIGdldHRlcikgYXMgb2YgQW5ndWxhckA2IGR1ZSB0b1xuXHQvLyBjaGFuZ2UgYWZ0ZXIgY2hlY2tlZCBlcnJvcnNcblx0cHVibGljIHRpdGxlID0gbnVsbDtcblxuXHRwcm90ZWN0ZWQgX3RhcmdldDogVGFyZ2V0O1xuXG5cdGNvbnN0cnVjdG9yKHByb3RlY3RlZCBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7fVxuXG5cdG9uQ2xpY2soKSB7XG5cdFx0dGhpcy5zZWxlY3RlZC5lbWl0KCk7XG5cdH1cblxuXHRvbkZvY3VzKCkge1xuXHRcdHNldFRpbWVvdXQoKCkgPT4gdGhpcy50YWJJbmRleCA9IDApO1xuXHR9XG5cblx0b25CbHVyKCkge1xuXHRcdHNldFRpbWVvdXQoKCkgPT4gdGhpcy50YWJJbmRleCA9IC0xKTtcblx0fVxuXG5cdG5nQWZ0ZXJWaWV3SW5pdCgpIHtcblx0XHRjb25zdCBidXR0b24gPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiYnV0dG9uLCBhXCIpO1xuXHRcdGNvbnN0IHRleHRDb250YWluZXIgPSBidXR0b24ucXVlcnlTZWxlY3RvcihcIi5jZHMtLW92ZXJmbG93LW1lbnUtb3B0aW9uc19fb3B0aW9uLWNvbnRlbnRcIik7XG5cdFx0aWYgKHRleHRDb250YWluZXIuc2Nyb2xsV2lkdGggPiB0ZXh0Q29udGFpbmVyLm9mZnNldFdpZHRoKSB7XG5cdFx0XHR0aGlzLnRpdGxlID0gYnV0dG9uLnRleHRDb250ZW50O1xuXHRcdH1cblx0fVxufVxuIl19