UNPKG

igniteui-angular

Version:

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

325 lines • 23.8 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, ElementRef, HostBinding, Input, TemplateRef, ViewChild } from '@angular/core'; import { IgxIconService } from './icon.service'; /** * **Ignite UI for Angular Icon** - * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/icon.html) * * The Ignite UI Icon makes it easy for developers to include material design icons directly in their markup. The icons * support custom colors and can be marked as active or disabled using the `isActive` property. This will change the appearence * of the icon. * * Example: * ```html * <igx-icon color="#00ff00" isActive="true">home</igx-icon> * ``` * @type {?} */ let NEXT_ID = 0; export class IgxIconComponent { /** * @param {?} _el * @param {?} iconService */ constructor(_el, iconService) { this._el = _el; this.iconService = iconService; /** * This allows you to change the value of `class.igx-icon`. By default it's `igx-icon`. * ```typescript * \@ViewChild("MyIcon") public icon: IgxIconComponent; * constructor(private cdRef:ChangeDetectorRef) {} * ngAfterViewInit() { * this.icon.cssClass = ""; * this.cdRef.detectChanges(); * } * ``` */ this.cssClass = 'igx-icon'; /** * This allows you to disable the `aria-hidden` attribute. By default it's applied. * ```typescript * \@ViewChild("MyIcon") public icon: IgxIconComponent; * constructor(private cdRef:ChangeDetectorRef) {} * ngAfterViewInit() { * this.icon.ariaHidden = false; * this.cdRef.detectChanges(); * } * ``` */ this.ariaHidden = true; /** * An \@Input property that sets the value of the `id` attribute. * ```html * <igx-icon id="igx-icon-1" fontSet="material" color="blue" [isActive]="false">settings</igx-icon> * ``` */ this.id = `igx-icon-${NEXT_ID++}`; /** * An \@Input property that allows you to disable the `active` property. By default it's applied. * ```html * <igx-icon [isActive]="false" fontSet="material" color="blue">settings</igx-icon> * ``` */ this.active = true; this.el = _el; this.font = this.iconService.defaultFontSet; this.iconService.registerFontSetAlias('material', 'material-icons'); } /** * @hidden * @return {?} */ ngOnInit() { this.updateIconClass(); } /** * An accessor that returns the value of the font property. * ```typescript * \@ViewChild("MyIcon") * public icon: IgxIconComponent; * ngAfterViewInit() { * let iconFont = this.icon.getFontSet; * } * ``` * @return {?} */ get getFontSet() { return this.font; } /** * An accessor that returns the value of the active property. * ```typescript * \@ViewChild("MyIcon") * public icon: IgxIconComponent; * ngAfterViewInit() { * let iconActive = this.icon.getActive; * } * ``` * @return {?} */ get getActive() { return this.active; } /** * An accessor that returns inactive property. * ```typescript * \@ViewChild("MyIcon") * public icon: IgxIconComponent; * ngAfterViewInit() { * let iconActive = this.icon.getInactive; * } * ``` * @return {?} */ get getInactive() { return !this.active; } /** * An accessor that returns the opposite value of the `iconColor` property. * ```typescript * \@ViewChild("MyIcon") * public icon: IgxIconComponent; * ngAfterViewInit() { * let iconColor = this.icon.getIconColor; * } * ``` * @return {?} */ get getIconColor() { return this.iconColor; } /** * An accessor that returns the value of the iconName property. * ```typescript * \@ViewChild("MyIcon") * public icon: IgxIconComponent; * ngAfterViewInit() { * let iconName = this.icon.getIconName; * } * ``` * @return {?} */ get getIconName() { return this.iconName; } /** * An accessor that returns the key of the SVG image. * The key consists of the fontSet and the iconName separated by underscore. * ```typescript * \@ViewChild("MyIcon") * public icon: IgxIconComponent; * ngAfterViewInit() { * let svgKey = this.icon.getSvgKey; * } * ``` * @return {?} */ get getSvgKey() { if (this.iconService.isSvgIconCached(this.iconName, this.font)) { return '#' + this.iconService.getSvgIconKey(this.iconName, this.font); } return null; } /** * An accessor that returns a TemplateRef to explicit, svg or no ligature. * ```typescript * \@ViewChild("MyIcon") * public icon: IgxIconComponent; * ngAfterViewInit() { * let iconTemplate = this.icon.template; * } * ``` * @return {?} */ get template() { if (this.iconName) { if (this.iconService.isSvgIconCached(this.iconName, this.font)) { return this.svgImage; } return this.noLigature; } return this.explicitLigature; } /** * @hidden * @private * @return {?} */ updateIconClass() { /** @type {?} */ const className = this.iconService.fontSetClassName(this.font); this.el.nativeElement.classList.add(className); if (this.iconName && !this.iconService.isSvgIconCached(this.iconName, this.font)) { this.el.nativeElement.classList.add(this.iconName); } } } IgxIconComponent.decorators = [ { type: Component, args: [{ selector: 'igx-icon', template: "<ng-template #noLigature></ng-template>\n\n<ng-template #explicitLigature>\n <ng-content></ng-content>\n</ng-template>\n\n<ng-template #svgImage>\n <svg>\n <use [attr.href]=\"getSvgKey\"></use>\n </svg>\n</ng-template>\n\n<ng-container *ngTemplateOutlet=\"template\"></ng-container>\n" }] } ]; /** @nocollapse */ IgxIconComponent.ctorParameters = () => [ { type: ElementRef }, { type: IgxIconService } ]; IgxIconComponent.propDecorators = { noLigature: [{ type: ViewChild, args: ['noLigature', { read: TemplateRef },] }], explicitLigature: [{ type: ViewChild, args: ['explicitLigature', { read: TemplateRef },] }], svgImage: [{ type: ViewChild, args: ['svgImage', { read: TemplateRef },] }], cssClass: [{ type: HostBinding, args: ['class.igx-icon',] }], ariaHidden: [{ type: HostBinding, args: ['attr.aria-hidden',] }], id: [{ type: HostBinding, args: ['attr.id',] }, { type: Input }], font: [{ type: Input, args: ['fontSet',] }], active: [{ type: Input, args: ['isActive',] }], iconColor: [{ type: Input, args: ['color',] }], iconName: [{ type: Input, args: ['name',] }], getInactive: [{ type: HostBinding, args: ['class.igx-icon--inactive',] }], getIconColor: [{ type: HostBinding, args: ['style.color',] }] }; if (false) { /** * @type {?} * @private */ IgxIconComponent.prototype.noLigature; /** * @type {?} * @private */ IgxIconComponent.prototype.explicitLigature; /** * @type {?} * @private */ IgxIconComponent.prototype.svgImage; /** * This allows you to change the value of `class.igx-icon`. By default it's `igx-icon`. * ```typescript * \@ViewChild("MyIcon") public icon: IgxIconComponent; * constructor(private cdRef:ChangeDetectorRef) {} * ngAfterViewInit() { * this.icon.cssClass = ""; * this.cdRef.detectChanges(); * } * ``` * @type {?} */ IgxIconComponent.prototype.cssClass; /** * This allows you to disable the `aria-hidden` attribute. By default it's applied. * ```typescript * \@ViewChild("MyIcon") public icon: IgxIconComponent; * constructor(private cdRef:ChangeDetectorRef) {} * ngAfterViewInit() { * this.icon.ariaHidden = false; * this.cdRef.detectChanges(); * } * ``` * @type {?} */ IgxIconComponent.prototype.ariaHidden; /** * An \@Input property that sets the value of the `id` attribute. * ```html * <igx-icon id="igx-icon-1" fontSet="material" color="blue" [isActive]="false">settings</igx-icon> * ``` * @type {?} */ IgxIconComponent.prototype.id; /** * An \@Input property that sets the value of the `fontSet`. By default it's "material". * ```html * <igx-icon fontSet="material" color="blue" [isActive]="false">settings</igx-icon> * ``` * @type {?} */ IgxIconComponent.prototype.font; /** * An \@Input property that allows you to disable the `active` property. By default it's applied. * ```html * <igx-icon [isActive]="false" fontSet="material" color="blue">settings</igx-icon> * ``` * @type {?} */ IgxIconComponent.prototype.active; /** * An \@Input property that allows you to change the `iconColor` of the icon. * ```html * <igx-icon color="blue" [isActive]="true" fontSet="material">settings</igx-icon> * ``` * @type {?} */ IgxIconComponent.prototype.iconColor; /** * An \@Input property that allows you to set the `iconName` of the icon. * The `iconName` can be set using the `name` property. * ```html * <igx-icon color="blue" [isActive]="true" fontSet="material">question_answer</igx-icon> * ``` * @type {?} */ IgxIconComponent.prototype.iconName; /** * An ElementRef property of the `igx-icon` component. * @type {?} */ IgxIconComponent.prototype.el; /** * @type {?} * @private */ IgxIconComponent.prototype._el; /** * @type {?} * @private */ IgxIconComponent.prototype.iconService; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9pZ25pdGV1aS1hbmd1bGFyLyIsInNvdXJjZXMiOlsibGliL2ljb24vaWNvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQVUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7Ozs7OztJQWU1QyxPQUFPLEdBQUcsQ0FBQztBQU9mLE1BQU0sT0FBTyxnQkFBZ0I7Ozs7O0lBMEZ6QixZQUFvQixHQUFlLEVBQVUsV0FBMkI7UUFBcEQsUUFBRyxHQUFILEdBQUcsQ0FBWTtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjs7Ozs7Ozs7Ozs7O1FBcEVqRSxhQUFRLEdBQUcsVUFBVSxDQUFDOzs7Ozs7Ozs7Ozs7UUFjdEIsZUFBVSxHQUFHLElBQUksQ0FBQzs7Ozs7OztRQVVsQixPQUFFLEdBQUcsWUFBWSxPQUFPLEVBQUUsRUFBRSxDQUFDOzs7Ozs7O1FBa0I3QixXQUFNLEdBQUcsSUFBSSxDQUFDO1FBMkJqQixJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztRQUNkLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUM7UUFDNUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUN4RSxDQUFDOzs7OztJQUtELFFBQVE7UUFDSixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDM0IsQ0FBQzs7Ozs7Ozs7Ozs7O0lBWUQsSUFBSSxVQUFVO1FBQ1YsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3JCLENBQUM7Ozs7Ozs7Ozs7OztJQVlELElBQUksU0FBUztRQUNULE9B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Ozs7OztJQUFFLHVDQUFtQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkluaXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElneEljb25TZXJ2aWNlIH0gZnJvbSAnLi9pY29uLnNlcnZpY2UnO1xuXG4vKipcbiAqICoqSWduaXRlIFVJIGZvciBBbmd1bGFyIEljb24qKiAtXG4gKiBbRG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly93d3cuaW5mcmFnaXN0aWNzLmNvbS9wcm9kdWN0cy9pZ25pdGUtdWktYW5ndWxhci9hbmd1bGFyL2NvbXBvbmVudHMvaWNvbi5odG1sKVxuICpcbiAqIFRoZSBJZ25pdGUgVUkgSWNvbiBtYWtlcyBpdCBlYXN5IGZvciBkZXZlbG9wZXJzIHRvIGluY2x1ZGUgbWF0ZXJpYWwgZGVzaWduIGljb25zIGRpcmVjdGx5IGluIHRoZWlyIG1hcmt1cC4gVGhlIGljb25zXG4gKiBzdXBwb3J0IGN1c3RvbSBjb2xvcnMgYW5kIGNhbiBiZSBtYXJrZWQgYXMgYWN0aXZlIG9yIGRpc2FibGVkIHVzaW5nIHRoZSBgaXNBY3RpdmVgIHByb3BlcnR5LiBUaGlzIHdpbGwgY2hhbmdlIHRoZSBhcHBlYXJlbmNlXG4gKiBvZiB0aGUgaWNvbi5cbiAqXG4gKiBFeGFtcGxlOlxuICogYGBgaHRtbFxuICogPGlneC1pY29uIGNvbG9yPVwiIzAwZmYwMFwiIGlzQWN0aXZlPVwidHJ1ZVwiPmhvbWU8L2lneC1pY29uPlxuICogYGBgXG4gKi9cbmxldCBORVhUX0lEID0gMDtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdpZ3gtaWNvbicsXG4gICAgdGVtcGxhdGVVcmw6ICdpY29uLmNvbXBvbmVudC5odG1sJ1xufSlcblxuZXhwb3J0IGNsYXNzIElneEljb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBWaWV3Q2hpbGQoJ25vTGlnYXR1cmUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gICAgcHJpdmF0ZSBub0xpZ2F0dXJlOiBUZW1wbGF0ZVJlZjxIVE1MRWxlbWVudD47XG5cbiAgICBAVmlld0NoaWxkKCdleHBsaWNpdExpZ2F0dXJlJywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICAgIHByaXZhdGUgZXhwbGljaXRMaWdhdHVyZTogVGVtcGxhdGVSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gICAgQFZpZXdDaGlsZCgnc3ZnSW1hZ2UnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gICAgcHJpdmF0ZSBzdmdJbWFnZTogVGVtcGxhdGVSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gICAgLyoqXG4gICAgICogIFRoaXMgYWxsb3dzIHlvdSB0byBjaGFuZ2UgdGhlIHZhbHVlIG9mIGBjbGFzcy5pZ3gtaWNvbmAuIEJ5IGRlZmF1bHQgaXQncyBgaWd4LWljb25gLlxuICAgICAqYGBgdHlwZXNjcmlwdFxuICAgICAqQFZpZXdDaGlsZChcIk15SWNvblwiKSBwdWJsaWMgaWNvbjogSWd4SWNvbkNvbXBvbmVudDtcbiAgICAgKmNvbnN0cnVjdG9yKHByaXZhdGUgY2RSZWY6Q2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG4gICAgICpuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICogICAgdGhpcy5pY29uLmNzc0NsYXNzID0gXCJcIjtcbiAgICAgKiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgKn1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1pY29uJylcbiAgICBwdWJsaWMgY3NzQ2xhc3MgPSAnaWd4LWljb24nO1xuXG4gICAgLyoqXG4gICAgICogIFRoaXMgYWxsb3dzIHlvdSB0byBkaXNhYmxlIHRoZSBgYXJpYS1oaWRkZW5gIGF0dHJpYnV0ZS4gQnkgZGVmYXVsdCBpdCdzIGFwcGxpZWQuXG4gICAgICpgYGB0eXBlc2NyaXB0XG4gICAgICpAVmlld0NoaWxkKFwiTXlJY29uXCIpIHB1YmxpYyBpY29uOiBJZ3hJY29uQ29tcG9uZW50O1xuICAgICAqY29uc3RydWN0b3IocHJpdmF0ZSBjZFJlZjpDaGFuZ2VEZXRlY3RvclJlZikge31cbiAgICAgKm5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgKiAgICB0aGlzLmljb24uYXJpYUhpZGRlbiA9IGZhbHNlO1xuICAgICAqICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAqfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWhpZGRlbicpXG4gICAgcHVibGljIGFyaWFIaWRkZW4gPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgKiAgQW4gQElucHV0IHByb3BlcnR5IHRoYXQgc2V0cyB0aGUgdmFsdWUgb2YgdGhlIGBpZGAgYXR0cmlidXRlLlxuICAgICpgYGBodG1sXG4gICAgKjxpZ3gtaWNvbiBpZD1cImlneC1pY29uLTFcIiBmb250U2V0PVwibWF0ZXJpYWxcIiBjb2xvcj1cImJsdWVcIiBbaXNBY3RpdmVdPVwiZmFsc2VcIj5zZXR0aW5nczwvaWd4LWljb24+XG4gICAgKmBgYFxuICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpZCA9IGBpZ3gtaWNvbi0ke05FWFRfSUQrK31gO1xuXG4gICAgLyoqXG4gICAgKiAgQW4gQElucHV0IHByb3BlcnR5IHRoYXQgc2V0cyB0aGUgdmFsdWUgb2YgdGhlIGBmb250U2V0YC4gQnkgZGVmYXVsdCBpdCdzIFwibWF0ZXJpYWxcIi5cbiAgICAqYGBgaHRtbFxuICAgICo8aWd4LWljb24gZm9udFNldD1cIm1hdGVyaWFsXCIgY29sb3I9XCJibHVlXCIgW2lzQWN0aXZlXT1cImZhbHNlXCI+c2V0dGluZ3M8L2lneC1pY29uPlxuICAgICpgYGBcbiAgICAqL1xuICAgIEBJbnB1dCgnZm9udFNldCcpXG4gICAgcHVibGljIGZvbnQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICogIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IGFsbG93cyB5b3UgdG8gZGlzYWJsZSB0aGUgYGFjdGl2ZWAgcHJvcGVydHkuIEJ5IGRlZmF1bHQgaXQncyBhcHBsaWVkLlxuICAgICpgYGBodG1sXG4gICAgKjxpZ3gtaWNvbiBbaXNBY3RpdmVdPVwiZmFsc2VcIiBmb250U2V0PVwibWF0ZXJpYWxcIiBjb2xvcj1cImJsdWVcIj5zZXR0aW5nczwvaWd4LWljb24+XG4gICAgKmBgYFxuICAgICovXG4gICAgQElucHV0KCdpc0FjdGl2ZScpXG4gICAgcHVibGljIGFjdGl2ZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAqICBBbiBASW5wdXQgcHJvcGVydHkgdGhhdCBhbGxvd3MgeW91IHRvIGNoYW5nZSB0aGUgYGljb25Db2xvcmAgb2YgdGhlIGljb24uXG4gICAgKmBgYGh0bWxcbiAgICAqPGlneC1pY29uIGNvbG9yPVwiYmx1ZVwiIFtpc0FjdGl2ZV09XCJ0cnVlXCIgZm9udFNldD1cIm1hdGVyaWFsXCI+c2V0dGluZ3M8L2lneC1pY29uPlxuICAgICpgYGBcbiAgICAqL1xuICAgIEBJbnB1dCgnY29sb3InKVxuICAgIHB1YmxpYyBpY29uQ29sb3I6IHN0cmluZztcblxuICAgIC8qKlxuICAgICogIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IGFsbG93cyB5b3UgdG8gc2V0IHRoZSBgaWNvbk5hbWVgIG9mIHRoZSBpY29uLlxuICAgICogIFRoZSBgaWNvbk5hbWVgIGNhbiBiZSBzZXQgdXNpbmcgdGhlIGBuYW1lYCBwcm9wZXJ0eS5cbiAgICAqYGBgaHRtbFxuICAgICo8aWd4LWljb24gY29sb3I9XCJibHVlXCIgW2lzQWN0aXZlXT1cInRydWVcIiBmb250U2V0PVwibWF0ZXJpYWxcIj5xdWVzdGlvbl9hbnN3ZXI8L2lneC1pY29uPlxuICAgICpgYGBcbiAgICAqL1xuICAgIEBJbnB1dCgnbmFtZScpXG4gICAgcHVibGljIGljb25OYW1lOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBBbiBFbGVtZW50UmVmIHByb3BlcnR5IG9mIHRoZSBgaWd4LWljb25gIGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZWw6IEVsZW1lbnRSZWY7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9lbDogRWxlbWVudFJlZiwgcHJpdmF0ZSBpY29uU2VydmljZTogSWd4SWNvblNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5lbCA9IF9lbDtcbiAgICAgICAgdGhpcy5mb250ID0gdGhpcy5pY29uU2VydmljZS5kZWZhdWx0Rm9udFNldDtcbiAgICAgICAgdGhpcy5pY29uU2VydmljZS5yZWdpc3RlckZvbnRTZXRBbGlhcygnbWF0ZXJpYWwnLCAnbWF0ZXJpYWwtaWNvbnMnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlSWNvbkNsYXNzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogIEFuIGFjY2Vzc29yIHRoYXQgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGZvbnQgcHJvcGVydHkuXG4gICAgICpgYGB0eXBlc2NyaXB0XG4gICAgICpAVmlld0NoaWxkKFwiTXlJY29uXCIpXG4gICAgICpwdWJsaWMgaWNvbjogSWd4SWNvbkNvbXBvbmVudDtcbiAgICAgKm5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgKiAgICBsZXQgaWNvbkZvbnQgPSB0aGlzLmljb24uZ2V0Rm9udFNldDtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgZ2V0IGdldEZvbnRTZXQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9udDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgQW4gYWNjZXNzb3IgdGhhdCByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgYWN0aXZlIHByb3BlcnR5LlxuICAgICAqYGBgdHlwZXNjcmlwdFxuICAgICAqQFZpZXdDaGlsZChcIk15SWNvblwiKVxuICAgICAqcHVibGljIGljb246IElneEljb25Db21wb25lbnQ7XG4gICAgICpuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICogICAgbGV0IGljb25BY3RpdmUgPSB0aGlzLmljb24uZ2V0QWN0aXZlO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBnZXQgZ2V0QWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogIEFuIGFjY2Vzc29yIHRoYXQgcmV0dXJucyBpbmFjdGl2ZSBwcm9wZXJ0eS5cbiAgICAgKmBgYHR5cGVzY3JpcHRcbiAgICAgKkBWaWV3Q2hpbGQoXCJNeUljb25cIilcbiAgICAgKnB1YmxpYyBpY29uOiBJZ3hJY29uQ29tcG9uZW50O1xuICAgICAqbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAqICAgIGxldCBpY29uQWN0aXZlID0gdGhpcy5pY29uLmdldEluYWN0aXZlO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1pY29uLS1pbmFjdGl2ZScpXG4gICAgZ2V0IGdldEluYWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuYWN0aXZlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICBBbiBhY2Nlc3NvciB0aGF0IHJldHVybnMgdGhlIG9wcG9zaXRlIHZhbHVlIG9mIHRoZSBgaWNvbkNvbG9yYCBwcm9wZXJ0eS5cbiAgICAgKmBgYHR5cGVzY3JpcHRcbiAgICAgKkBWaWV3Q2hpbGQoXCJNeUljb25cIilcbiAgICAgKnB1YmxpYyBpY29uOiBJZ3hJY29uQ29tcG9uZW50O1xuICAgICAqbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAqICAgIGxldCBpY29uQ29sb3IgPSB0aGlzLmljb24uZ2V0SWNvbkNvbG9yO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLmNvbG9yJylcbiAgICBnZXQgZ2V0SWNvbkNvbG9yKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmljb25Db2xvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgQW4gYWNjZXNzb3IgdGhhdCByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgaWNvbk5hbWUgcHJvcGVydHkuXG4gICAgICpgYGB0eXBlc2NyaXB0XG4gICAgICpAVmlld0NoaWxkKFwiTXlJY29uXCIpXG4gICAgICpwdWJsaWMgaWNvbjogSWd4SWNvbkNvbXBvbmVudDtcbiAgICAgKm5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgKiAgICBsZXQgaWNvbk5hbWUgPSB0aGlzLmljb24uZ2V0SWNvbk5hbWU7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGdldCBnZXRJY29uTmFtZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5pY29uTmFtZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgQW4gYWNjZXNzb3IgdGhhdCByZXR1cm5zIHRoZSBrZXkgb2YgdGhlIFNWRyBpbWFnZS5cbiAgICAgKiAgVGhlIGtleSBjb25zaXN0cyBvZiB0aGUgZm9udFNldCBhbmQgdGhlIGljb25OYW1lIHNlcGFyYXRlZCBieSB1bmRlcnNjb3JlLlxuICAgICAqYGBgdHlwZXNjcmlwdFxuICAgICAqQFZpZXdDaGlsZChcIk15SWNvblwiKVxuICAgICAqcHVibGljIGljb246IElneEljb25Db21wb25lbnQ7XG4gICAgICpuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICogICAgbGV0IHN2Z0tleSA9IHRoaXMuaWNvbi5nZXRTdmdLZXk7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGdldCBnZXRTdmdLZXkoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuaWNvblNlcnZpY2UuaXNTdmdJY29uQ2FjaGVkKHRoaXMuaWNvbk5hbWUsIHRoaXMuZm9udCkpIHtcbiAgICAgICAgICAgIHJldHVybiAnIycgKyB0aGlzLmljb25TZXJ2aWNlLmdldFN2Z0ljb25LZXkodGhpcy5pY29uTmFtZSwgdGhpcy5mb250KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICAgQW4gYWNjZXNzb3IgdGhhdCByZXR1cm5zIGEgVGVtcGxhdGVSZWYgdG8gZXhwbGljaXQsIHN2ZyBvciBubyBsaWdhdHVyZS5cbiAgICAgKmBgYHR5cGVzY3JpcHRcbiAgICAgKkBWaWV3Q2hpbGQoXCJNeUljb25cIilcbiAgICAgKnB1YmxpYyBpY29uOiBJZ3hJY29uQ29tcG9uZW50O1xuICAgICAqbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAqICAgIGxldCBpY29uVGVtcGxhdGUgPSB0aGlzLmljb24udGVtcGxhdGU7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGdldCB0ZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxIVE1MRWxlbWVudD4ge1xuICAgICAgICBpZiAodGhpcy5pY29uTmFtZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaWNvblNlcnZpY2UuaXNTdmdJY29uQ2FjaGVkKHRoaXMuaWNvbk5hbWUsIHRoaXMuZm9udCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdmdJbWFnZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubm9MaWdhdHVyZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmV4cGxpY2l0TGlnYXR1cmU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgdXBkYXRlSWNvbkNsYXNzKCkge1xuICAgICAgICBjb25zdCBjbGFzc05hbWUgPSB0aGlzLmljb25TZXJ2aWNlLmZvbnRTZXRDbGFzc05hbWUodGhpcy5mb250KTtcbiAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTtcblxuICAgICAgICBpZiAodGhpcy5pY29uTmFtZSAmJiAhdGhpcy5pY29uU2VydmljZS5pc1N2Z0ljb25DYWNoZWQodGhpcy5pY29uTmFtZSwgdGhpcy5mb250KSkge1xuICAgICAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQodGhpcy5pY29uTmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=