@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
246 lines • 21.4 kB
JavaScript
import { __decorate, __metadata, __param } from "tslib";
import { Directive, ElementRef, EventEmitter, HostBinding, Input, Output, NgModule, Renderer2, HostListener, Optional, Inject } from '@angular/core';
import { DisplayDensityBase, DisplayDensityToken, DisplayDensity } from '../../core/density';
let IgxButtonDirective = class IgxButtonDirective extends DisplayDensityBase {
constructor(element, _renderer, _displayDensityOptions) {
super(_displayDensityOptions);
this.element = element;
this._renderer = _renderer;
this._displayDensityOptions = _displayDensityOptions;
/**
*@hidden
*/
this._defaultType = 'flat';
/**
*@hidden
*/
this._cssClassPrefix = 'igx-button';
/**
* Called when the button is clicked
*/
this.buttonClick = new EventEmitter();
/**
* Sets/gets the `role` attribute.
* ```typescript
* this.button.role = 'navbutton';
* ```
* ```typescript
* let buttonRole = this.button.role;
* ```
* @memberof IgxButtonDirective
*/
this.role = 'button';
/**
* Gets or sets whether the button is selected.
* Mainly used in the IgxButtonGroup component and it will have no effect if set separately.
* ```html
* <button igxButton="flat" [selected]="button.selected"></button>
* ```
* @memberof IgxButtonDirective
*/
this.selected = false;
}
/**
* Returns the underlying DOM element
*/
get nativeElement() {
return this.element.nativeElement;
}
/**
* Sets the type of the button.
* ```html
* <button igxButton= "icon"></button>
* ```
* @memberof IgxButtonDirective
*/
set type(value) {
const newValue = value ? value : this._defaultType;
if (this._type !== newValue) {
this._renderer.removeClass(this.nativeElement, `${this._cssClassPrefix}--${this._type}`);
this._type = newValue;
this._renderer.addClass(this.nativeElement, `${this._cssClassPrefix}--${this._type}`);
}
}
/**
* Sets the button text color.
* ```html
* <button igxButton="gradient" igxButtonColor="blue"></button>
* ```
* @memberof IgxButtonDirective
*/
set color(value) {
this._color = value || this.nativeElement.style.color;
this._renderer.setStyle(this.nativeElement, 'color', this._color);
}
/**
* Sets the background color of the button.
* ```html
* <button igxButton="raised" igxButtonBackground="red"></button>
* ```
* @memberof IgxButtonDirective
*/
set background(value) {
this._backgroundColor = value || this._backgroundColor;
this._renderer.setStyle(this.nativeElement, 'background', this._backgroundColor);
}
/**
* Sets the `aria-label` attribute.
* ```html
* <button igxButton= "flat" igxLabel="Label"></button>
* ```
* @memberof IgxButtonDirective
*/
set label(value) {
this._label = value || this._label;
this._renderer.setAttribute(this.nativeElement, `aria-label`, this._label);
}
/**
* Enables/disables the button.
* ```html
* <button igxButton= "fab" [disabled]="true"></button>
* ```
* @memberof IgxButtonDirective
*/
set disabled(val) {
val = !!val;
this._disabled = val;
if (val) {
this._renderer.addClass(this.nativeElement, `${this._cssClassPrefix}--disabled`);
}
else {
this._renderer.removeClass(this.nativeElement, `${this._cssClassPrefix}--disabled`);
}
}
/**
* @hidden
*/
get cssClassCosy() {
return (this._type === 'flat' || this._type === 'raised' || this._type === 'outlined') &&
this.displayDensity === DisplayDensity.cosy;
}
/**
* @hidden
*/
get cssClassCompact() {
return (this._type === 'flat' || this._type === 'raised' || this._type === 'outlined') &&
this.displayDensity === DisplayDensity.compact;
}
/**
* @hidden
*/
get cssClassCosyFab() {
return this._type === 'fab' && this.displayDensity === DisplayDensity.cosy;
}
/**
* @hidden
*/
get cssClassCompactFab() {
return this._type === 'fab' && this.displayDensity === DisplayDensity.compact;
}
/**
* @hidden
*/
get disabledAttribute() {
return this._disabled ? this._disabled : null;
}
/**
*@hidden
*/
onClick(ev) {
this.buttonClick.emit(ev);
}
};
IgxButtonDirective.ctorParameters = () => [
{ type: ElementRef },
{ type: Renderer2 },
{ type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [DisplayDensityToken,] }] }
];
__decorate([
Output(),
__metadata("design:type", Object)
], IgxButtonDirective.prototype, "buttonClick", void 0);
__decorate([
HostBinding('attr.role'),
__metadata("design:type", Object)
], IgxButtonDirective.prototype, "role", void 0);
__decorate([
Input('igxButton'),
__metadata("design:type", String),
__metadata("design:paramtypes", [String])
], IgxButtonDirective.prototype, "type", null);
__decorate([
Input('igxButtonColor'),
__metadata("design:type", String),
__metadata("design:paramtypes", [String])
], IgxButtonDirective.prototype, "color", null);
__decorate([
Input('igxButtonBackground'),
__metadata("design:type", String),
__metadata("design:paramtypes", [String])
], IgxButtonDirective.prototype, "background", null);
__decorate([
Input('igxLabel'),
__metadata("design:type", String),
__metadata("design:paramtypes", [String])
], IgxButtonDirective.prototype, "label", null);
__decorate([
Input(),
__metadata("design:type", Object),
__metadata("design:paramtypes", [Object])
], IgxButtonDirective.prototype, "disabled", null);
__decorate([
HostBinding('class.igx-button--cosy'),
__metadata("design:type", Boolean),
__metadata("design:paramtypes", [])
], IgxButtonDirective.prototype, "cssClassCosy", null);
__decorate([
HostBinding('class.igx-button--compact'),
__metadata("design:type", Boolean),
__metadata("design:paramtypes", [])
], IgxButtonDirective.prototype, "cssClassCompact", null);
__decorate([
HostBinding('class.igx-button--fab-cosy'),
__metadata("design:type", Boolean),
__metadata("design:paramtypes", [])
], IgxButtonDirective.prototype, "cssClassCosyFab", null);
__decorate([
HostBinding('class.igx-button--fab-compact'),
__metadata("design:type", Boolean),
__metadata("design:paramtypes", [])
], IgxButtonDirective.prototype, "cssClassCompactFab", null);
__decorate([
HostBinding('attr.disabled'),
__metadata("design:type", Object),
__metadata("design:paramtypes", [])
], IgxButtonDirective.prototype, "disabledAttribute", null);
__decorate([
Input(),
__metadata("design:type", Object)
], IgxButtonDirective.prototype, "selected", void 0);
__decorate([
HostListener('click', ['$event']),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", void 0)
], IgxButtonDirective.prototype, "onClick", null);
IgxButtonDirective = __decorate([
Directive({
selector: '[igxButton]'
}),
__param(2, Optional()), __param(2, Inject(DisplayDensityToken)),
__metadata("design:paramtypes", [ElementRef, Renderer2, Object])
], IgxButtonDirective);
export { IgxButtonDirective };
/**
* @hidden
*/
let IgxButtonModule = class IgxButtonModule {
};
IgxButtonModule = __decorate([
NgModule({
declarations: [IgxButtonDirective],
exports: [IgxButtonDirective]
})
], IgxButtonModule);
export { IgxButtonModule };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2lnbml0ZXVpLWFuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvZGlyZWN0aXZlcy9idXR0b24vYnV0dG9uLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFFBQVEsRUFDUixTQUFTLEVBQ1QsWUFBWSxFQUNaLFFBQVEsRUFDUixNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLG1CQUFtQixFQUEwQixjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUtySCxJQUFhLGtCQUFrQixHQUEvQixNQUFhLGtCQUFtQixTQUFRLGtCQUFrQjtJQXFDdEQsWUFBbUIsT0FBbUIsRUFBVSxTQUFvQixFQUNiLHNCQUE4QztRQUNqRyxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUZmLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFBVSxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQ2IsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQS9Cckc7O1dBRUc7UUFDSyxpQkFBWSxHQUFHLE1BQU0sQ0FBQztRQUU5Qjs7V0FFRztRQUNLLG9CQUFlLEdBQUcsWUFBWSxDQUFDO1FBa0N2Qzs7V0FFRztRQUVJLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUU3Qzs7Ozs7Ozs7O1dBU0c7UUFFSSxTQUFJLEdBQUcsUUFBUSxDQUFDO1FBa0h2Qjs7Ozs7OztXQU9HO1FBQ2EsYUFBUSxHQUFHLEtBQUssQ0FBQztJQXBKakMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxhQUFhO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUM7SUFDdEMsQ0FBQztJQXFCRDs7Ozs7O09BTUc7SUFFSCxJQUFJ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RDtJQURDLFdBQVcsQ0FBQyxlQUFlLENBQUM7OzsyREFHNUI7QUFVUTtJQUFSLEtBQUssRUFBRTs7b0RBQXlCO0FBTWpDO0lBREMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDOzs7O2lEQUdqQztBQXBNUSxrQkFBa0I7SUFIOUIsU0FBUyxDQUFDO1FBQ1AsUUFBUSxFQUFFLGFBQWE7S0FDMUIsQ0FBQztJQXVDTyxXQUFBLFFBQVEsRUFBRSxDQUFBLEVBQUUsV0FBQSxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtxQ0FEaEIsVUFBVSxFQUFxQixTQUFTO0dBckMzRCxrQkFBa0IsQ0FxTTlCO1NBck1ZLGtCQUFrQjtBQXVNL0I7O0dBRUc7QUFLSCxJQUFhLGVBQWUsR0FBNUIsTUFBYSxlQUFlO0NBQUksQ0FBQTtBQUFuQixlQUFlO0lBSjNCLFFBQVEsQ0FBQztRQUNOLFlBQVksRUFBRSxDQUFDLGtCQUFrQixDQUFDO1FBQ2xDLE9BQU8sRUFBRSxDQUFDLGtCQUFrQixDQUFDO0tBQ2hDLENBQUM7R0FDVyxlQUFlLENBQUk7U0FBbkIsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgRGlyZWN0aXZlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBOZ01vZHVsZSxcbiAgICBSZW5kZXJlcjIsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIE9wdGlvbmFsLFxuICAgIEluamVjdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERpc3BsYXlEZW5zaXR5QmFzZSwgRGlzcGxheURlbnNpdHlUb2tlbiwgSURpc3BsYXlEZW5zaXR5T3B0aW9ucywgRGlzcGxheURlbnNpdHkgfSBmcm9tICcuLi8uLi9jb3JlL2RlbnNpdHknO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tpZ3hCdXR0b25dJ1xufSlcbmV4cG9ydCBjbGFzcyBJZ3hCdXR0b25EaXJlY3RpdmUgZXh0ZW5kcyBEaXNwbGF5RGVuc2l0eUJhc2Uge1xuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfdHlwZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZGVmYXVsdFR5cGUgPSAnZmxhdCc7XG5cbiAgICAvKipcbiAgICAgKkBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9jc3NDbGFzc1ByZWZpeCA9ICdpZ3gtYnV0dG9uJztcblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX2NvbG9yOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKkBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9sYWJlbDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfYmFja2dyb3VuZENvbG9yOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKkBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9kaXNhYmxlZDogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBlbGVtZW50OiBFbGVtZW50UmVmLCBwcml2YXRlIF9yZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KERpc3BsYXlEZW5zaXR5VG9rZW4pIHByb3RlY3RlZCBfZGlzcGxheURlbnNpdHlPcHRpb25zOiBJRGlzcGxheURlbnNpdHlPcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKF9kaXNwbGF5RGVuc2l0eU9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHVuZGVybHlpbmcgRE9NIGVsZW1lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IG5hdGl2ZUVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxsZWQgd2hlbiB0aGUgYnV0dG9uIGlzIGNsaWNrZWRcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgYnV0dG9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgYHJvbGVgIGF0dHJpYnV0ZS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5idXR0b24ucm9sZSA9ICduYXZidXR0b24nO1xuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgYnV0dG9uUm9sZSA9ICB0aGlzLmJ1dHRvbi5yb2xlO1xuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hCdXR0b25EaXJlY3RpdmVcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpXG4gICAgcHVibGljIHJvbGUgPSAnYnV0dG9uJztcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHR5cGUgb2YgdGhlIGJ1dHRvbi5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGJ1dHRvbiAgaWd4QnV0dG9uPSBcImljb25cIj48L2J1dHRvbj5cbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4QnV0dG9uRGlyZWN0aXZlXG4gICAgICovXG4gICAgQElucHV0KCdpZ3hCdXR0b24nKVxuICAgIHNldCB0eXBlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB2YWx1ZSA/IHZhbHVlIDogdGhpcy5fZGVmYXVsdFR5cGU7XG4gICAgICAgIGlmICh0aGlzLl90eXBlICE9PSBuZXdWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5uYXRpdmVFbGVtZW50LCBgJHt0aGlzLl9jc3NDbGFzc1ByZWZpeH0tLSR7dGhpcy5fdHlwZX1gKTtcbiAgICAgICAgICAgIHRoaXMuX3R5cGUgPSBuZXdWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyLmFkZENsYXNzKHRoaXMubmF0aXZlRWxlbWVudCwgYCR7dGhpcy5fY3NzQ2xhc3NQcmVmaXh9LS0ke3RoaXMuX3R5cGV9YCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBidXR0b24gdGV4dCBjb2xvci5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGJ1dHRvbiBpZ3hCdXR0b249XCJncmFkaWVudFwiIGlneEJ1dHRvbkNvbG9yPVwiYmx1ZVwiPjwvYnV0dG9uPlxuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hCdXR0b25EaXJlY3RpdmVcbiAgICAgKi9cbiAgICBASW5wdXQoJ2lneEJ1dHRvbkNvbG9yJykgc2V0IGNvbG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fY29sb3IgPSB2YWx1ZSB8fCB0aGlzLm5hdGl2ZUVsZW1lbnQuc3R5bGUuY29sb3I7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKHRoaXMubmF0aXZlRWxlbWVudCwgJ2NvbG9yJywgdGhpcy5fY29sb3IpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGJhY2tncm91bmQgY29sb3Igb2YgdGhlIGJ1dHRvbi5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGJ1dHRvbiBpZ3hCdXR0b249XCJyYWlzZWRcIiBpZ3hCdXR0b25CYWNrZ3JvdW5kPVwicmVkXCI+PC9idXR0b24+XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneEJ1dHRvbkRpcmVjdGl2ZVxuICAgICAqL1xuICAgIEBJbnB1dCgnaWd4QnV0dG9uQmFja2dyb3VuZCcpIHNldCBiYWNrZ3JvdW5kKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fYmFja2dyb3VuZENvbG9yID0gdmFsdWUgfHwgdGhpcy5fYmFja2dyb3VuZENvbG9yO1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZSh0aGlzLm5hdGl2ZUVsZW1lbnQsICdiYWNrZ3JvdW5kJywgdGhpcy5fYmFja2dyb3VuZENvbG9yKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBgYXJpYS1sYWJlbGAgYXR0cmlidXRlLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8YnV0dG9uIGlneEJ1dHRvbj0gXCJmbGF0XCIgaWd4TGFiZWw9XCJMYWJlbFwiPjwvYnV0dG9uPlxuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hCdXR0b25EaXJlY3RpdmVcbiAgICAgKi9cbiAgICBASW5wdXQoJ2lneExhYmVsJykgc2V0IGxhYmVsKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fbGFiZWwgPSB2YWx1ZSB8fCB0aGlzLl9sYWJlbDtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMubmF0aXZlRWxlbWVudCwgYGFyaWEtbGFiZWxgLCB0aGlzLl9sYWJlbCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW5hYmxlcy9kaXNhYmxlcyB0aGUgYnV0dG9uLlxuICAgICAqICBgYGBodG1sXG4gICAgICogPGJ1dHRvbiBpZ3hCdXR0b249IFwiZmFiXCIgW2Rpc2FibGVkXT1cInRydWVcIj48L2J1dHRvbj5cbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4QnV0dG9uRGlyZWN0aXZlXG4gICAgICovXG4gICAgQElucHV0KCkgc2V0IGRpc2FibGVkKHZhbCkge1xuICAgICAgICB2YWwgPSAhIXZhbDtcbiAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSB2YWw7XG4gICAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyLmFkZENsYXNzKHRoaXMubmF0aXZlRWxlbWVudCwgYCR7dGhpcy5fY3NzQ2xhc3NQcmVmaXh9LS1kaXNhYmxlZGApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5uYXRpdmVFbGVtZW50LCBgJHt0aGlzLl9jc3NDbGFzc1ByZWZpeH0tLWRpc2FibGVkYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtYnV0dG9uLS1jb3N5JylcbiAgICBwdWJsaWMgZ2V0IGNzc0NsYXNzQ29zeSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLl90eXBlID09PSAnZmxhdCcgfHwgdGhpcy5fdHlwZSA9PT0gJ3JhaXNlZCcgfHwgdGhpcy5fdHlwZSA9PT0gJ291dGxpbmVkJykgJiZcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheURlbnNpdHkgPT09IERpc3BsYXlEZW5zaXR5LmNvc3k7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWJ1dHRvbi0tY29tcGFjdCcpXG4gICAgcHVibGljIGdldCBjc3NDbGFzc0NvbXBhY3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAodGhpcy5fdHlwZSA9PT0gJ2ZsYXQnIHx8IHRoaXMuX3R5cGUgPT09ICdyYWlzZWQnIHx8IHRoaXMuX3R5cGUgPT09ICdvdXRsaW5lZCcpICYmXG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlEZW5zaXR5ID09PSBEaXNwbGF5RGVuc2l0eS5jb21wYWN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1idXR0b24tLWZhYi1jb3N5JylcbiAgICBwdWJsaWMgZ2V0IGNzc0NsYXNzQ29zeUZhYigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGUgPT09ICdmYWInICYmIHRoaXMuZGlzcGxheURlbnNpdHkgPT09IERpc3BsYXlEZW5zaXR5LmNvc3k7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWJ1dHRvbi0tZmFiLWNvbXBhY3QnKVxuICAgIHB1YmxpYyBnZXQgY3NzQ2xhc3NDb21wYWN0RmFiKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHlwZSA9PT0gJ2ZhYicgJiYgdGhpcy5kaXNwbGF5RGVuc2l0eSA9PT0gRGlzcGxheURlbnNpdHkuY29tcGFjdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmRpc2FibGVkJylcbiAgICBwdWJsaWMgZ2V0IGRpc2FibGVkQXR0cmlidXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQgPyB0aGlzLl9kaXNhYmxlZCA6IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBvciBzZXRzIHdoZXRoZXIgdGhlIGJ1dHRvbiBpcyBzZWxlY3RlZC5cbiAgICAgKiBNYWlubHkgdXNlZCBpbiB0aGUgSWd4QnV0dG9uR3JvdXAgY29tcG9uZW50IGFuZCBpdCB3aWxsIGhhdmUgbm8gZWZmZWN0IGlmIHNldCBzZXBhcmF0ZWx5LlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8YnV0dG9uIGlneEJ1dHRvbj1cImZsYXRcIiBbc2VsZWN0ZWRdPVwiYnV0dG9uLnNlbGVjdGVkXCI+PC9idXR0b24+XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneEJ1dHRvbkRpcmVjdGl2ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBzZWxlY3RlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbkNsaWNrKGV2KSB7XG4gICAgICAgIHRoaXMuYnV0dG9uQ2xpY2suZW1pdChldik7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuQE5nTW9kdWxlKHtcbiAgICBkZWNsYXJhdGlvbnM6IFtJZ3hCdXR0b25EaXJlY3RpdmVdLFxuICAgIGV4cG9ydHM6IFtJZ3hCdXR0b25EaXJlY3RpdmVdXG59KVxuZXhwb3J0IGNsYXNzIElneEJ1dHRvbk1vZHVsZSB7IH1cbiJdfQ==