@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
274 lines • 23.8 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { Component, ElementRef, HostBinding, Input, OnInit, 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 appearance
* of the icon.
*
* Example:
* ```html
* <igx-icon color="#00ff00" isActive="true">home</igx-icon>
* ```
*/
var NEXT_ID = 0;
var IgxIconComponent = /** @class */ (function () {
function IgxIconComponent(_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
*/
IgxIconComponent.prototype.ngOnInit = function () {
this.updateIconClass();
};
Object.defineProperty(IgxIconComponent.prototype, "getFontSet", {
/**
* An accessor that returns the value of the font property.
*```typescript
*@ViewChild("MyIcon")
*public icon: IgxIconComponent;
*ngAfterViewInit() {
* let iconFont = this.icon.getFontSet;
* }
* ```
*/
get: function () {
return this.font;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxIconComponent.prototype, "getActive", {
/**
* An accessor that returns the value of the active property.
*```typescript
*@ViewChild("MyIcon")
*public icon: IgxIconComponent;
*ngAfterViewInit() {
* let iconActive = this.icon.getActive;
* }
* ```
*/
get: function () {
return this.active;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxIconComponent.prototype, "getInactive", {
/**
* An accessor that returns inactive property.
*```typescript
*@ViewChild("MyIcon")
*public icon: IgxIconComponent;
*ngAfterViewInit() {
* let iconActive = this.icon.getInactive;
* }
* ```
*/
get: function () {
return !this.active;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxIconComponent.prototype, "getIconColor", {
/**
* An accessor that returns the opposite value of the `iconColor` property.
*```typescript
*@ViewChild("MyIcon")
*public icon: IgxIconComponent;
*ngAfterViewInit() {
* let iconColor = this.icon.getIconColor;
* }
* ```
*/
get: function () {
return this.iconColor;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxIconComponent.prototype, "getIconName", {
/**
* An accessor that returns the value of the iconName property.
*```typescript
*@ViewChild("MyIcon")
*public icon: IgxIconComponent;
*ngAfterViewInit() {
* let iconName = this.icon.getIconName;
* }
* ```
*/
get: function () {
return this.iconName;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxIconComponent.prototype, "getSvgKey", {
/**
* 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;
* }
* ```
*/
get: function () {
if (this.iconService.isSvgIconCached(this.iconName, this.font)) {
return '#' + this.iconService.getSvgIconKey(this.iconName, this.font);
}
return null;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxIconComponent.prototype, "template", {
/**
* An accessor that returns a TemplateRef to explicit, svg or no ligature.
*```typescript
*@ViewChild("MyIcon")
*public icon: IgxIconComponent;
*ngAfterViewInit() {
* let iconTemplate = this.icon.template;
* }
* ```
*/
get: function () {
if (this.iconName) {
if (this.iconService.isSvgIconCached(this.iconName, this.font)) {
return this.svgImage;
}
return this.noLigature;
}
return this.explicitLigature;
},
enumerable: true,
configurable: true
});
/**
* @hidden
*/
IgxIconComponent.prototype.updateIconClass = function () {
var 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.ctorParameters = function () { return [
{ type: ElementRef },
{ type: IgxIconService }
]; };
__decorate([
ViewChild('noLigature', { read: TemplateRef, static: true }),
__metadata("design:type", TemplateRef)
], IgxIconComponent.prototype, "noLigature", void 0);
__decorate([
ViewChild('explicitLigature', { read: TemplateRef, static: true }),
__metadata("design:type", TemplateRef)
], IgxIconComponent.prototype, "explicitLigature", void 0);
__decorate([
ViewChild('svgImage', { read: TemplateRef, static: true }),
__metadata("design:type", TemplateRef)
], IgxIconComponent.prototype, "svgImage", void 0);
__decorate([
HostBinding('class.igx-icon'),
__metadata("design:type", Object)
], IgxIconComponent.prototype, "cssClass", void 0);
__decorate([
HostBinding('attr.aria-hidden'),
__metadata("design:type", Object)
], IgxIconComponent.prototype, "ariaHidden", void 0);
__decorate([
HostBinding('attr.id'),
Input(),
__metadata("design:type", Object)
], IgxIconComponent.prototype, "id", void 0);
__decorate([
Input('fontSet'),
__metadata("design:type", String)
], IgxIconComponent.prototype, "font", void 0);
__decorate([
Input('isActive'),
__metadata("design:type", Object)
], IgxIconComponent.prototype, "active", void 0);
__decorate([
Input('color'),
__metadata("design:type", String)
], IgxIconComponent.prototype, "iconColor", void 0);
__decorate([
Input('name'),
__metadata("design:type", String)
], IgxIconComponent.prototype, "iconName", void 0);
__decorate([
HostBinding('class.igx-icon--inactive'),
__metadata("design:type", Boolean),
__metadata("design:paramtypes", [])
], IgxIconComponent.prototype, "getInactive", null);
__decorate([
HostBinding('style.color'),
__metadata("design:type", String),
__metadata("design:paramtypes", [])
], IgxIconComponent.prototype, "getIconColor", null);
IgxIconComponent = __decorate([
Component({
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"
}),
__metadata("design:paramtypes", [ElementRef, IgxIconService])
], IgxIconComponent);
return IgxIconComponent;
}());
export { IgxIconComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9pZ25pdGV1aS1hbmd1bGFyLyIsInNvdXJjZXMiOlsibGliL2ljb24vaWNvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUcsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWhEOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztBQU9oQjtJQTBGSSwwQkFBb0IsR0FBZSxFQUFVLFdBQTJCO1FBQXBELFFBQUcsR0FBSCxHQUFHLENBQVk7UUFBVSxnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7UUFoRnhFOzs7Ozs7Ozs7O1dBVUc7UUFFSSxhQUFRLEdBQUcsVUFBVSxDQUFDO1FBRTdCOzs7Ozs7Ozs7O1dBVUc7UUFFSSxlQUFVLEdBQUcsSUFBSSxDQUFDO1FBRXpCOzs7OztVQUtFO1FBR0ssT0FBRSxHQUFHLGNBQVksT0FBTyxFQUFJLENBQUM7UUFXcEM7Ozs7O1VBS0U7UUFFSyxXQUFNLEdBQUcsSUFBSSxDQUFDO1FBMkJqQixJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztRQUNkLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUM7UUFDNUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxtQ0FBUSxHQUFSO1FBQ0ksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFZRCxzQkFBSSx3Q0FBVTtRQVZkOzs7Ozs7Ozs7V0FTRzthQUNIO1lBQ0ksT0FBTyxJQUFJLENB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Q0FBQyxTQUFTLENBQUM7O2tEQUNHO0lBU3BCO1FBREMsS0FBSyxDQUFDLFVBQVUsQ0FBQzs7b0RBQ0c7SUFTckI7UUFEQyxLQUFLLENBQUMsT0FBTyxDQUFDOzt1REFDVTtJQVV6QjtRQURDLEtBQUssQ0FBQyxNQUFNLENBQUM7O3NEQUNVO0lBMkR4QjtRQURDLFdBQVcsQ0FBQywwQkFBMEIsQ0FBQzs7O3VEQUd2QztJQWFEO1FBREMsV0FBVyxDQUFDLGFBQWEsQ0FBQzs7O3dEQUcxQjtJQS9KUSxnQkFBZ0I7UUFMNUIsU0FBUyxDQUFDO1lBQ1AsUUFBUSxFQUFFLFVBQVU7WUFDcEIsd1RBQWtDO1NBQ3JDLENBQUM7eUNBNEYyQixVQUFVLEVBQXVCLGNBQWM7T0ExRi9ELGdCQUFnQixDQW1PNUI7SUFBRCx1QkFBQztDQUFBLEFBbk9ELElBbU9DO1NBbk9ZLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkluaXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElneEljb25TZXJ2aWNlIH0gZnJvbSAnLi9pY29uLnNlcnZpY2UnO1xuXG4vKipcbiAqICoqSWduaXRlIFVJIGZvciBBbmd1bGFyIEljb24qKiAtXG4gKiBbRG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly93d3cuaW5mcmFnaXN0aWNzLmNvbS9wcm9kdWN0cy9pZ25pdGUtdWktYW5ndWxhci9hbmd1bGFyL2NvbXBvbmVudHMvaWNvbi5odG1sKVxuICpcbiAqIFRoZSBJZ25pdGUgVUkgSWNvbiBtYWtlcyBpdCBlYXN5IGZvciBkZXZlbG9wZXJzIHRvIGluY2x1ZGUgbWF0ZXJpYWwgZGVzaWduIGljb25zIGRpcmVjdGx5IGluIHRoZWlyIG1hcmt1cC4gVGhlIGljb25zXG4gKiBzdXBwb3J0IGN1c3RvbSBjb2xvcnMgYW5kIGNhbiBiZSBtYXJrZWQgYXMgYWN0aXZlIG9yIGRpc2FibGVkIHVzaW5nIHRoZSBgaXNBY3RpdmVgIHByb3BlcnR5LiBUaGlzIHdpbGwgY2hhbmdlIHRoZSBhcHBlYXJhbmNlXG4gKiBvZiB0aGUgaWNvbi5cbiAqXG4gKiBFeGFtcGxlOlxuICogYGBgaHRtbFxuICogPGlneC1pY29uIGNvbG9yPVwiIzAwZmYwMFwiIGlzQWN0aXZlPVwidHJ1ZVwiPmhvbWU8L2lneC1pY29uPlxuICogYGBgXG4gKi9cbmxldCBORVhUX0lEID0gMDtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdpZ3gtaWNvbicsXG4gICAgdGVtcGxhdGVVcmw6ICdpY29uLmNvbXBvbmVudC5odG1sJ1xufSlcblxuZXhwb3J0IGNsYXNzIElneEljb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBWaWV3Q2hpbGQoJ25vTGlnYXR1cmUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcml2YXRlIG5vTGlnYXR1cmU6IFRlbXBsYXRlUmVmPEhUTUxFbGVtZW50PjtcblxuICAgIEBWaWV3Q2hpbGQoJ2V4cGxpY2l0TGlnYXR1cmUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcml2YXRlIGV4cGxpY2l0TGlnYXR1cmU6IFRlbXBsYXRlUmVmPEhUTUxFbGVtZW50PjtcblxuICAgIEBWaWV3Q2hpbGQoJ3N2Z0ltYWdlJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJpdmF0ZSBzdmdJbWFnZTogVGVtcGxhdGVSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gICAgLyoqXG4gICAgICogIFRoaXMgYWxsb3dzIHlvdSB0byBjaGFuZ2UgdGhlIHZhbHVlIG9mIGBjbGFzcy5pZ3gtaWNvbmAuIEJ5IGRlZmF1bHQgaXQncyBgaWd4LWljb25gLlxuICAgICAqYGBgdHlwZXNjcmlwdFxuICAgICAqQFZpZXdDaGlsZChcIk15SWNvblwiKSBwdWJsaWMgaWNvbjogSWd4SWNvbkNvbXBvbmVudDtcbiAgICAgKmNvbnN0cnVjdG9yKHByaXZhdGUgY2RSZWY6Q2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG4gICAgICpuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICogICAgdGhpcy5pY29uLmNzc0NsYXNzID0gXCJcIjtcbiAgICAgKiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgKn1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1pY29uJylcbiAgICBwdWJsaWMgY3NzQ2xhc3MgPSAnaWd4LWljb24nO1xuXG4gICAgLyoqXG4gICAgICogIFRoaXMgYWxsb3dzIHlvdSB0byBkaXNhYmxlIHRoZSBgYXJpYS1oaWRkZW5gIGF0dHJpYnV0ZS4gQnkgZGVmYXVsdCBpdCdzIGFwcGxpZWQuXG4gICAgICpgYGB0eXBlc2NyaXB0XG4gICAgICpAVmlld0NoaWxkKFwiTXlJY29uXCIpIHB1YmxpYyBpY29uOiBJZ3hJY29uQ29tcG9uZW50O1xuICAgICAqY29uc3RydWN0b3IocHJpdmF0ZSBjZFJlZjpDaGFuZ2VEZXRlY3RvclJlZikge31cbiAgICAgKm5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgKiAgICB0aGlzLmljb24uYXJpYUhpZGRlbiA9IGZhbHNlO1xuICAgICAqICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAqfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWhpZGRlbicpXG4gICAgcHVibGljIGFyaWFIaWRkZW4gPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgKiAgQW4gQElucHV0IHByb3BlcnR5IHRoYXQgc2V0cyB0aGUgdmFsdWUgb2YgdGhlIGBpZGAgYXR0cmlidXRlLlxuICAgICpgYGBodG1sXG4gICAgKjxpZ3gtaWNvbiBpZD1cImlneC1pY29uLTFcIiBmb250U2V0PVwibWF0ZXJpYWxcIiBjb2xvcj1cImJsdWVcIiBbaXNBY3RpdmVdPVwiZmFsc2VcIj5zZXR0aW5nczwvaWd4LWljb24+XG4gICAgKmBgYFxuICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpZCA9IGBpZ3gtaWNvbi0ke05FWFRfSUQrK31gO1xuXG4gICAgLyoqXG4gICAgKiAgQW4gQElucHV0IHByb3BlcnR5IHRoYXQgc2V0cyB0aGUgdmFsdWUgb2YgdGhlIGBmb250U2V0YC4gQnkgZGVmYXVsdCBpdCdzIFwibWF0ZXJpYWxcIi5cbiAgICAqYGBgaHRtbFxuICAgICo8aWd4LWljb24gZm9udFNldD1cIm1hdGVyaWFsXCIgY29sb3I9XCJibHVlXCIgW2lzQWN0aXZlXT1cImZhbHNlXCI+c2V0dGluZ3M8L2lneC1pY29uPlxuICAgICpgYGBcbiAgICAqL1xuICAgIEBJbnB1dCgnZm9udFNldCcpXG4gICAgcHVibGljIGZvbnQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICogIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IGFsbG93cyB5b3UgdG8gZGlzYWJsZSB0aGUgYGFjdGl2ZWAgcHJvcGVydHkuIEJ5IGRlZmF1bHQgaXQncyBhcHBsaWVkLlxuICAgICpgYGBodG1sXG4gICAgKjxpZ3gtaWNvbiBbaXNBY3RpdmVdPVwiZmFsc2VcIiBmb250U2V0PVwibWF0ZXJpYWxcIiBjb2xvcj1cImJsdWVcIj5zZXR0aW5nczwvaWd4LWljb24+XG4gICAgKmBgYFxuICAgICovXG4gICAgQElucHV0KCdpc0FjdGl2ZScpXG4gICAgcHVibGljIGFjdGl2ZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAqICBBbiBASW5wdXQgcHJvcGVydHkgdGhhdCBhbGxvd3MgeW91IHRvIGNoYW5nZSB0aGUgYGljb25Db2xvcmAgb2YgdGhlIGljb24uXG4gICAgKmBgYGh0bWxcbiAgICAqPGlneC1pY29uIGNvbG9yPVwiYmx1ZVwiIFtpc0FjdGl2ZV09XCJ0cnVlXCIgZm9udFNldD1cIm1hdGVyaWFsXCI+c2V0dGluZ3M8L2lneC1pY29uPlxuICAgICpgYGBcbiAgICAqL1xuICAgIEBJbnB1dCgnY29sb3InKVxuICAgIHB1YmxpYyBpY29uQ29sb3I6IHN0cmluZztcblxuICAgIC8qKlxuICAgICogIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IGFsbG93cyB5b3UgdG8gc2V0IHRoZSBgaWNvbk5hbWVgIG9mIHRoZSBpY29uLlxuICAgICogIFRoZSBgaWNvbk5hbWVgIGNhbiBiZSBzZXQgdXNpbmcgdGhlIGBuYW1lYCBwcm9wZXJ0eS5cbiAgICAqYGBgaHRtbFxuICAgICo8aWd4LWljb24gY29sb3I9XCJibHVlXCIgW2lzQWN0aXZlXT1cInRydWVcIiBmb250U2V0PVwibWF0ZXJpYWxcIj5xdWVzdGlvbl9hbnN3ZXI8L2lneC1pY29uPlxuICAgICpgYGBcbiAgICAqL1xuICAgIEBJbnB1dCgnbmFtZScpXG4gICAgcHVibGljIGljb25OYW1lOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBBbiBFbGVtZW50UmVmIHByb3BlcnR5IG9mIHRoZSBgaWd4LWljb25gIGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZWw6IEVsZW1lbnRSZWY7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9lbDogRWxlbWVudFJlZiwgcHJpdmF0ZSBpY29uU2VydmljZTogSWd4SWNvblNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5lbCA9IF9lbDtcbiAgICAgICAgdGhpcy5mb250ID0gdGhpcy5pY29uU2VydmljZS5kZWZhdWx0Rm9udFNldDtcbiAgICAgICAgdGhpcy5pY29uU2VydmljZS5yZWdpc3RlckZvbnRTZXRBbGlhcygnbWF0ZXJpYWwnLCAnbWF0ZXJpYWwtaWNvbnMnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlSWNvbkNsYXNzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogIEFuIGFjY2Vzc29yIHRoYXQgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGZvbnQgcHJvcGVydHkuXG4gICAgICpgYGB0eXBlc2NyaXB0XG4gICAgICpAVmlld0NoaWxkKFwiTXlJY29uXCIpXG4gICAgICpwdWJsaWMgaWNvbjogSWd4SWNvbkNvbXBvbmVudDtcbiAgICAgKm5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgKiAgICBsZXQgaWNvbkZvbnQgPSB0aGlzLmljb24uZ2V0Rm9udFNldDtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgZ2V0IGdldEZvbnRTZXQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9udDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgQW4gYWNjZXNzb3IgdGhhdCByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgYWN0aXZlIHByb3BlcnR5LlxuICAgICAqYGBgdHlwZXNjcmlwdFxuICAgICAqQFZpZXdDaGlsZChcIk15SWNvblwiKVxuICAgICAqcHVibGljIGljb246IElneEljb25Db21wb25lbnQ7XG4gICAgICpuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICogICAgbGV0IGljb25BY3RpdmUgPSB0aGlzLmljb24uZ2V0QWN0aXZlO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBnZXQgZ2V0QWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogIEFuIGFjY2Vzc29yIHRoYXQgcmV0dXJucyBpbmFjdGl2ZSBwcm9wZXJ0eS5cbiAgICAgKmBgYHR5cGVzY3JpcHRcbiAgICAgKkBWaWV3Q2hpbGQoXCJNeUljb25cIilcbiAgICAgKnB1YmxpYyBpY29uOiBJZ3hJY29uQ29tcG9uZW50O1xuICAgICAqbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAqICAgIGxldCBpY29uQWN0aXZlID0gdGhpcy5pY29uLmdldEluYWN0aXZlO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1pY29uLS1pbmFjdGl2ZScpXG4gICAgZ2V0IGdldEluYWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuYWN0aXZlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICBBbiBhY2Nlc3NvciB0aGF0IHJldHVybnMgdGhlIG9wcG9zaXRlIHZhbHVlIG9mIHRoZSBgaWNvbkNvbG9yYCBwcm9wZXJ0eS5cbiAgICAgKmBgYHR5cGVzY3JpcHRcbiAgICAgKkBWaWV3Q2hpbGQoXCJNeUljb25cIilcbiAgICAgKnB1YmxpYyBpY29uOiBJZ3hJY29uQ29tcG9uZW50O1xuICAgICAqbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAqICAgIGxldCBpY29uQ29sb3IgPSB0aGlzLmljb24uZ2V0SWNvbkNvbG9yO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLmNvbG9yJylcbiAgICBnZXQgZ2V0SWNvbkNvbG9yKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmljb25Db2xvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgQW4gYWNjZXNzb3IgdGhhdCByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgaWNvbk5hbWUgcHJvcGVydHkuXG4gICAgICpgYGB0eXBlc2NyaXB0XG4gICAgICpAVmlld0NoaWxkKFwiTXlJY29uXCIpXG4gICAgICpwdWJsaWMgaWNvbjogSWd4SWNvbkNvbXBvbmVudDtcbiAgICAgKm5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgKiAgICBsZXQgaWNvbk5hbWUgPSB0aGlzLmljb24uZ2V0SWNvbk5hbWU7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGdldCBnZXRJY29uTmFtZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5pY29uTmFtZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgQW4gYWNjZXNzb3IgdGhhdCByZXR1cm5zIHRoZSBrZXkgb2YgdGhlIFNWRyBpbWFnZS5cbiAgICAgKiAgVGhlIGtleSBjb25zaXN0cyBvZiB0aGUgZm9udFNldCBhbmQgdGhlIGljb25OYW1lIHNlcGFyYXRlZCBieSB1bmRlcnNjb3JlLlxuICAgICAqYGBgdHlwZXNjcmlwdFxuICAgICAqQFZpZXdDaGlsZChcIk15SWNvblwiKVxuICAgICAqcHVibGljIGljb246IElneEljb25Db21wb25lbnQ7XG4gICAgICpuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICogICAgbGV0IHN2Z0tleSA9IHRoaXMuaWNvbi5nZXRTdmdLZXk7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGdldCBnZXRTdmdLZXkoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuaWNvblNlcnZpY2UuaXNTdmdJY29uQ2FjaGVkKHRoaXMuaWNvbk5hbWUsIHRoaXMuZm9udCkpIHtcbiAgICAgICAgICAgIHJldHVybiAnIycgKyB0aGlzLmljb25TZXJ2aWNlLmdldFN2Z0ljb25LZXkodGhpcy5pY29uTmFtZSwgdGhpcy5mb250KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICAgQW4gYWNjZXNzb3IgdGhhdCByZXR1cm5zIGEgVGVtcGxhdGVSZWYgdG8gZXhwbGljaXQsIHN2ZyBvciBubyBsaWdhdHVyZS5cbiAgICAgKmBgYHR5cGVzY3JpcHRcbiAgICAgKkBWaWV3Q2hpbGQoXCJNeUljb25cIilcbiAgICAgKnB1YmxpYyBpY29uOiBJZ3hJY29uQ29tcG9uZW50O1xuICAgICAqbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAqICAgIGxldCBpY29uVGVtcGxhdGUgPSB0aGlzLmljb24udGVtcGxhdGU7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGdldCB0ZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxIVE1MRWxlbWVudD4ge1xuICAgICAgICBpZiAodGhpcy5pY29uTmFtZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaWNvblNlcnZpY2UuaXNTdmdJY29uQ2FjaGVkKHRoaXMuaWNvbk5hbWUsIHRoaXMuZm9udCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdmdJbWFnZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubm9MaWdhdHVyZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmV4cGxpY2l0TGlnYXR1cmU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgdXBkYXRlSWNvbkNsYXNzKCkge1xuICAgICAgICBjb25zdCBjbGFzc05hbWUgPSB0aGlzLmljb25TZXJ2aWNlLmZvbnRTZXRDbGFzc05hbWUodGhpcy5mb250KTtcbiAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTtcblxuICAgICAgICBpZiAodGhpcy5pY29uTmFtZSAmJiAhdGhpcy5pY29uU2VydmljZS5pc1N2Z0ljb25DYWNoZWQodGhpcy5pY29uTmFtZSwgdGhpcy5mb250KSkge1xuICAgICAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQodGhpcy5pY29uTmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=