igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
432 lines • 27.5 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { CommonModule } from '@angular/common';
import { Component, ElementRef, HostBinding, Input, NgModule, TemplateRef, ViewChild } from '@angular/core';
import { IgxIconModule } from '../icon/index';
/** @type {?} */
let NEXT_ID = 0;
/** @enum {string} */
const Size = {
SMALL: 'small',
MEDIUM: 'medium',
LARGE: 'large',
};
export { Size };
/** @enum {string} */
const AvatarType = {
DEFAULT: 'default',
INITIALS: 'initials',
IMAGE: 'image',
ICON: 'icon',
};
export { AvatarType };
/**
* **Ignite UI for Angular Avatar** -
* [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/avatar.html)
*
* The Ignite UI Avatar provides an easy way to add an avatar icon to your application. This icon can be an
* image, someone's initials or a material icon from the google material icon set.
*
* Example:
* ```html
* <igx-avatar initials="MS" roundShape="true" size="large">
* </igx-avatar>
* ```
*/
export class IgxAvatarComponent {
/**
* @param {?} elementRef
*/
constructor(elementRef) {
this.elementRef = elementRef;
/**
* Returns the `aria-label` of the avatar.
*
* ```typescript
* let ariaLabel = this.avatar.ariaLabel;
* ```
*
*/
this.ariaLabel = 'avatar';
/**
* Returns the `role` attribute of the avatar.
*
* ```typescript
* let avatarRole = this.avatar.role;
* ```
*
* \@memberof IgxAvatarComponent
*/
this.role = 'img';
/**
* Returns the class of the avatar.
*
* ```typescript
* let avatarCLass = this.avatar.cssClass;
* ```
*
* \@memberof IgxAvatarComponent
*/
this.cssClass = 'igx-avatar';
/**
* @hidden
*/
this._size = 'small';
/**
* Sets the `id` of the avatar. If not set, the first avatar component will have `id` = `"igx-avatar-0"`.
*
* ```html
* <igx-avatar id="my-first-avatar"></igx-avatar>
* ```
*
* \@memberof IgxAvatarComponent
*/
this.id = `igx-avatar-${NEXT_ID++}`;
/**
* Sets a round shape to the avatar if `roundShape` is `"true"`.
* By default the shape of the avatar is a square.
*
* ```html
* <igx-avatar roundShape = "true" ></igx-avatar>
* ```
*
* \@memberof IgxAvatarComponent
*/
this.roundShape = false;
}
/**
* Returns the `size` of the avatar.
*
* ```typescript
* let avatarSize = this.avatar.size;
* ```
*
* \@memberof IgxAvatarComponent
* @return {?}
*/
get size() {
return this._size;
}
/**
* Sets the `size` of the avatar.
* By default the `size` is `"small"`. It can be set to `"medium"` or `"large"`.
*
* ```
* <igx-avatar size="large"></igx-avatar>
* ```
*
* \@memberof IgxAvatarComponent
* @param {?} value
* @return {?}
*/
set size(value) {
switch (value) {
case 'small':
case 'medium':
case 'large':
this._size = value;
break;
default:
this._size = 'small';
}
}
/**
* Returns the type of the avatar.
*
* ```typescript
* let avatarType = this.avatar.type;
* ```
*
* \@memberof IgxAvatarComponent
* @return {?}
*/
get type() {
if (this.src) {
return AvatarType.IMAGE;
}
if (this.icon) {
return AvatarType.ICON;
}
if (this.initials) {
return AvatarType.INITIALS;
}
return AvatarType.DEFAULT;
}
/**
* Returns the template of the avatar.
*
* ```typescript
* let template = this.avatar.template;
* ```
*
* \@memberof IgxAvatarComponent
* @return {?}
*/
get template() {
switch (this.type) {
case AvatarType.IMAGE:
return this.imageTemplate;
case AvatarType.INITIALS:
return this.initialsTemplate;
case AvatarType.ICON:
return this.iconTemplate;
default:
return this.defaultTemplate;
}
}
/**
* @hidden
* @return {?}
*/
ngOnInit() {
this.roleDescription = this.getRole();
}
/**
* @hidden
* @return {?}
*/
ngAfterViewInit() {
this.elementRef.nativeElement.classList
.add(`igx-avatar--${this._size}`, `igx-avatar--${this.type}`);
}
/**
* @hidden
* @private
* @return {?}
*/
getRole() {
switch (this.type) {
case AvatarType.IMAGE:
return 'image avatar';
case AvatarType.ICON:
return 'icon avatar';
case AvatarType.INITIALS:
return 'initials avatar';
default:
return 'custom avatar';
}
}
/**
* Returns the url of the `image`.
*
* ```typescript
* let imageSourceUrl = this.avatar.getSrcUrl();
* ```
*
* \@memberof IgxAvatarComponent
* @return {?}
*/
getSrcUrl() {
return `url(${this.src})`;
}
}
IgxAvatarComponent.decorators = [
{ type: Component, args: [{
selector: 'igx-avatar',
template: "<ng-template #defaultTemplate>\n <ng-content></ng-content>\n</ng-template>\n\n<ng-template #imageTemplate>\n <div #image class=\"igx-avatar__image\" [style.backgroundImage]=\"getSrcUrl()\"></div>\n</ng-template>\n\n<ng-template #initialsTemplate>\n <span>{{initials.substring(0, 2)}}</span>\n</ng-template>\n\n<ng-template #iconTemplate>\n <igx-icon>{{icon}}</igx-icon>\n</ng-template>\n\n<ng-container *ngTemplateOutlet=\"template\"></ng-container>\n"
}] }
];
/** @nocollapse */
IgxAvatarComponent.ctorParameters = () => [
{ type: ElementRef }
];
IgxAvatarComponent.propDecorators = {
image: [{ type: ViewChild, args: ['image',] }],
defaultTemplate: [{ type: ViewChild, args: ['defaultTemplate', { read: TemplateRef },] }],
imageTemplate: [{ type: ViewChild, args: ['imageTemplate', { read: TemplateRef },] }],
initialsTemplate: [{ type: ViewChild, args: ['initialsTemplate', { read: TemplateRef },] }],
iconTemplate: [{ type: ViewChild, args: ['iconTemplate', { read: TemplateRef },] }],
ariaLabel: [{ type: HostBinding, args: ['attr.aria-label',] }],
role: [{ type: HostBinding, args: ['attr.role',] }],
cssClass: [{ type: HostBinding, args: ['class.igx-avatar',] }],
roleDescription: [{ type: HostBinding, args: ['attr.aria-roledescription',] }],
id: [{ type: HostBinding, args: ['attr.id',] }, { type: Input }],
roundShape: [{ type: HostBinding, args: ['class.igx-avatar--rounded',] }, { type: Input }],
color: [{ type: HostBinding, args: ['style.color',] }, { type: Input }],
bgColor: [{ type: HostBinding, args: ['style.background',] }, { type: Input }],
initials: [{ type: Input }],
icon: [{ type: Input }],
src: [{ type: Input }],
size: [{ type: Input }]
};
if (false) {
/**
* This is a reference to the avatar `image` element in the DOM.
*
* ```typescript
* let image = this.avatar.image;
* ```
* \@memberof IgxAvatarComponent
* @type {?}
*/
IgxAvatarComponent.prototype.image;
/**
* @hidden
* @type {?}
* @protected
*/
IgxAvatarComponent.prototype.defaultTemplate;
/**
* @hidden
* @type {?}
* @protected
*/
IgxAvatarComponent.prototype.imageTemplate;
/**
* @hidden
* @type {?}
* @protected
*/
IgxAvatarComponent.prototype.initialsTemplate;
/**
* @hidden
* @type {?}
* @protected
*/
IgxAvatarComponent.prototype.iconTemplate;
/**
* Returns the `aria-label` of the avatar.
*
* ```typescript
* let ariaLabel = this.avatar.ariaLabel;
* ```
*
* @type {?}
*/
IgxAvatarComponent.prototype.ariaLabel;
/**
* Returns the `role` attribute of the avatar.
*
* ```typescript
* let avatarRole = this.avatar.role;
* ```
*
* \@memberof IgxAvatarComponent
* @type {?}
*/
IgxAvatarComponent.prototype.role;
/**
* Returns the class of the avatar.
*
* ```typescript
* let avatarCLass = this.avatar.cssClass;
* ```
*
* \@memberof IgxAvatarComponent
* @type {?}
*/
IgxAvatarComponent.prototype.cssClass;
/**
* Returns the type of the avatar.
* The avatar can be: `"initials type avatar"`, `"icon type avatar"` or `"image type avatar"`.
*
* ```typescript
* let avatarDescription = this.avatar.roleDescription;
* ```
*
* \@memberof IgxAvatarComponent
* @type {?}
*/
IgxAvatarComponent.prototype.roleDescription;
/**
* @hidden
* @type {?}
* @private
*/
IgxAvatarComponent.prototype._size;
/**
* Sets the `id` of the avatar. If not set, the first avatar component will have `id` = `"igx-avatar-0"`.
*
* ```html
* <igx-avatar id="my-first-avatar"></igx-avatar>
* ```
*
* \@memberof IgxAvatarComponent
* @type {?}
*/
IgxAvatarComponent.prototype.id;
/**
* Sets a round shape to the avatar if `roundShape` is `"true"`.
* By default the shape of the avatar is a square.
*
* ```html
* <igx-avatar roundShape = "true" ></igx-avatar>
* ```
*
* \@memberof IgxAvatarComponent
* @type {?}
*/
IgxAvatarComponent.prototype.roundShape;
/**
* Sets the avatar's `initials`/`icon` color.
*
* ```html
* <igx-avatar color="blue"></igx-avatar>
* ```
*
* \@memberof IgxAvatarComponent
* @type {?}
*/
IgxAvatarComponent.prototype.color;
/**
* Sets the background color of the avatar.
*
* ```html
* <igx-avatar bgColor="yellow"></igx-avatar>
* ```
*
* \@memberof IgxAvatarComponent
* @type {?}
*/
IgxAvatarComponent.prototype.bgColor;
/**
* Sets `initials` to the avatar.
*
* ```html
* <igx-avatar initials="MN"></igx-avatar>
* ```
*
* \@memberof IgxAvatarComponent
* @type {?}
*/
IgxAvatarComponent.prototype.initials;
/**
* Sets an `icon` to the avatar. All icons from the material icon set are supported.
*
* ```html
* <igx-avatar icon="phone"></igx-avatar>
* ```
*
* \@memberof IgxAvatarComponent
* @type {?}
*/
IgxAvatarComponent.prototype.icon;
/**
* Sets the `image` source of the avatar.
*
* ```html
* <igx-avatar src="images/picture.jpg"></igx-avatar>
* ```
*
* \@memberof IgxAvatarComponent
* @type {?}
*/
IgxAvatarComponent.prototype.src;
/** @type {?} */
IgxAvatarComponent.prototype.elementRef;
}
/**
* @hidden
*/
export class IgxAvatarModule {
}
IgxAvatarModule.decorators = [
{ type: NgModule, args: [{
declarations: [IgxAvatarComponent],
exports: [IgxAvatarComponent],
imports: [CommonModule, IgxIconModule]
},] }
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZhdGFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2lnbml0ZXVpLWFuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvYXZhdGFyL2F2YXRhci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBRUgsU0FBUyxFQUNULFVBQVUsRUFDVixXQUFXLEVBQ1gsS0FBSyxFQUNMLFFBQVEsRUFFUixXQUFXLEVBQ1gsU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7O0lBRTFDLE9BQU8sR0FBRyxDQUFDOzs7SUFHWCxPQUFRLE9BQU87SUFDZixRQUFTLFFBQVE7SUFDakIsT0FBUSxPQUFPOzs7OztJQUlmLFNBQVUsU0FBUztJQUNuQixVQUFXLFVBQVU7SUFDckIsT0FBUSxPQUFPO0lBQ2YsTUFBTyxNQUFNOzs7Ozs7Ozs7Ozs7Ozs7O0FBb0JqQixNQUFNLE9BQU8sa0JBQWtCOzs7O0lBMFEzQixZQUFtQixVQUFzQjtRQUF0QixlQUFVLEdBQVYsVUFBVSxDQUFZOzs7Ozs7Ozs7UUE1TmxDLGNBQVMsR0FBRyxRQUFRLENBQUM7Ozs7Ozs7Ozs7UUFZckIsU0FBSSxHQUFHLEtBQUssQ0FBQzs7Ozs7Ozs7OztRQVliLGFBQVEsR0FBRyxZQUFZLENBQUM7Ozs7UUFtQnZCLFVBQUssR0FBa0IsT0FBTyxDQUFDOzs7Ozs7Ozs7O1FBYWhDLE9BQUUsR0FBRyxjQUFjLE9BQU8sRUFBRSxFQUFFLENBQUM7Ozs7Ozs7Ozs7O1FBZS9CLGVBQVUsR0FBRyxLQUFLLENBQUM7SUFxSm1CLENBQUM7Ozs7Ozs7Ozs7O0lBMUU5QyxJQUNXLElBQUk7UUFDWCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDdEIsQ0FBQzs7Ozs7Ozs7Ozs7OztJQVlELElBQVcsSUFBSSxDQUFDLEtBQW9CO1FB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bUJBWUwsS0FBSztrQkFZTCxLQUFLO21CQVlMLEtBQUs7Ozs7Ozs7Ozs7OztJQXRMTixtQ0FDeUI7Ozs7OztJQUt6Qiw2Q0FDNEM7Ozs7OztJQUs1QywyQ0FDMEM7Ozs7OztJQUsxQyw4Q0FDNkM7Ozs7OztJQUs3QywwQ0FDeUM7Ozs7Ozs7Ozs7SUFVekMsdUNBQzRCOzs7Ozs7Ozs7OztJQVc1QixrQ0FDb0I7Ozs7Ozs7Ozs7O0lBV3BCLHNDQUMrQjs7Ozs7Ozs7Ozs7O0lBYS9CLDZDQUMrQjs7Ozs7O0lBSy9CLG1DQUF1Qzs7Ozs7Ozs7Ozs7SUFXdkMsZ0NBRXNDOzs7Ozs7Ozs7Ozs7SUFhdEMsd0NBRTBCOzs7Ozs7Ozs7OztJQVkxQixtQ0FFcUI7Ozs7Ozs7Ozs7O0lBWXJCLHFDQUV1Qjs7Ozs7Ozs7Ozs7SUFXdkIsc0NBQ3dCOzs7Ozs7Ozs7OztJQVd4QixrQ0FDb0I7Ozs7Ozs7Ozs7O0lBV3BCLGlDQUNtQjs7SUFxRlAsd0NBQTZCOzs7OztBQXVEN0MsTUFBTSxPQUFPLGVBQWU7OztZQUwzQixRQUFRLFNBQUM7Z0JBQ04sWUFBWSxFQUFFLENBQUMsa0JBQWtCLENBQUM7Z0JBQ2xDLE9BQU8sRUFBRSxDQUFDLGtCQUFrQixDQUFDO2dCQUM3QixPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDO2FBQ3pDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbnB1dCxcbiAgICBOZ01vZHVsZSxcbiAgICBPbkluaXQsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSWd4SWNvbk1vZHVsZSB9IGZyb20gJy4uL2ljb24vaW5kZXgnO1xuXG5sZXQgTkVYVF9JRCA9IDA7XG5cbmV4cG9ydCBlbnVtIFNpemUge1xuICAgIFNNQUxMID0gJ3NtYWxsJyxcbiAgICBNRURJVU0gPSAnbWVkaXVtJyxcbiAgICBMQVJHRSA9ICdsYXJnZSdcbn1cblxuZXhwb3J0IGVudW0gQXZhdGFyVHlwZSB7XG4gICAgREVGQVVMVCA9ICdkZWZhdWx0JyxcbiAgICBJTklUSUFMUyA9ICdpbml0aWFscycsXG4gICAgSU1BR0UgPSAnaW1hZ2UnLFxuICAgIElDT04gPSAnaWNvbidcbn1cblxuLyoqXG4gKiAqKklnbml0ZSBVSSBmb3IgQW5ndWxhciBBdmF0YXIqKiAtXG4gKiBbRG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly93d3cuaW5mcmFnaXN0aWNzLmNvbS9wcm9kdWN0cy9pZ25pdGUtdWktYW5ndWxhci9hbmd1bGFyL2NvbXBvbmVudHMvYXZhdGFyLmh0bWwpXG4gKlxuICogVGhlIElnbml0ZSBVSSBBdmF0YXIgcHJvdmlkZXMgYW4gZWFzeSB3YXkgdG8gYWRkIGFuIGF2YXRhciBpY29uIHRvIHlvdXIgYXBwbGljYXRpb24uICBUaGlzIGljb24gY2FuIGJlIGFuXG4gKiBpbWFnZSwgc29tZW9uZSdzIGluaXRpYWxzIG9yIGEgbWF0ZXJpYWwgaWNvbiBmcm9tIHRoZSBnb29nbGUgbWF0ZXJpYWwgaWNvbiBzZXQuXG4gKlxuICogRXhhbXBsZTpcbiAqIGBgYGh0bWxcbiAqIDxpZ3gtYXZhdGFyIGluaXRpYWxzPVwiTVNcIiByb3VuZFNoYXBlPVwidHJ1ZVwiIHNpemU9XCJsYXJnZVwiPlxuICogPC9pZ3gtYXZhdGFyPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnaWd4LWF2YXRhcicsXG4gICAgdGVtcGxhdGVVcmw6ICdhdmF0YXIuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIElneEF2YXRhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBhdmF0YXIgYGltYWdlYCBlbGVtZW50IGluIHRoZSBET00uXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogIGxldCBpbWFnZSA9ICB0aGlzLmF2YXRhci5pbWFnZTtcbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4QXZhdGFyQ29tcG9uZW50XG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnaW1hZ2UnKVxuICAgIHB1YmxpYyBpbWFnZTogRWxlbWVudFJlZjtcblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ2RlZmF1bHRUZW1wbGF0ZScsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgICBwcm90ZWN0ZWQgZGVmYXVsdFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnaW1hZ2VUZW1wbGF0ZScsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgICBwcm90ZWN0ZWQgaW1hZ2VUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ2luaXRpYWxzVGVtcGxhdGUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gICAgcHJvdGVjdGVkIGluaXRpYWxzVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKkBoaWRkZW5cbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdpY29uVGVtcGxhdGUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gICAgcHJvdGVjdGVkIGljb25UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGBhcmlhLWxhYmVsYCBvZiB0aGUgYXZhdGFyLlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBhcmlhTGFiZWwgPSB0aGlzLmF2YXRhci5hcmlhTGFiZWw7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1sYWJlbCcpXG4gICAgcHVibGljIGFyaWFMYWJlbCA9ICdhdmF0YXInO1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYHJvbGVgIGF0dHJpYnV0ZSBvZiB0aGUgYXZhdGFyLlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBhdmF0YXJSb2xlID0gdGhpcy5hdmF0YXIucm9sZTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hBdmF0YXJDb21wb25lbnRcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpXG4gICAgcHVibGljIHJvbGUgPSAnaW1nJztcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGNsYXNzIG9mIHRoZSBhdmF0YXIuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGF2YXRhckNMYXNzID0gIHRoaXMuYXZhdGFyLmNzc0NsYXNzO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEF2YXRhckNvbXBvbmVudFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWF2YXRhcicpXG4gICAgcHVibGljIGNzc0NsYXNzID0gJ2lneC1hdmF0YXInO1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgdHlwZSBvZiB0aGUgYXZhdGFyLlxuICAgICAqIFRoZSBhdmF0YXIgY2FuIGJlOiBgXCJpbml0aWFscyB0eXBlIGF2YXRhclwiYCwgYFwiaWNvbiB0eXBlIGF2YXRhclwiYCBvciBgXCJpbWFnZSB0eXBlIGF2YXRhclwiYC5cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgYXZhdGFyRGVzY3JpcHRpb24gPSB0aGlzLmF2YXRhci5yb2xlRGVzY3JpcHRpb247XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4QXZhdGFyQ29tcG9uZW50XG4gICAgICovXG5cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1yb2xlZGVzY3JpcHRpb24nKVxuICAgIHB1YmxpYyByb2xlRGVzY3JpcHRpb246IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9zaXplOiBzdHJpbmcgfCBTaXplID0gJ3NtYWxsJztcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGBpZGAgb2YgdGhlIGF2YXRhci4gSWYgbm90IHNldCwgdGhlIGZpcnN0IGF2YXRhciBjb21wb25lbnQgd2lsbCBoYXZlIGBpZGAgPSBgXCJpZ3gtYXZhdGFyLTBcImAuXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1hdmF0YXIgaWQ9XCJteS1maXJzdC1hdmF0YXJcIj48L2lneC1hdmF0YXI+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4QXZhdGFyQ29tcG9uZW50XG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpZCA9IGBpZ3gtYXZhdGFyLSR7TkVYVF9JRCsrfWA7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGEgcm91bmQgc2hhcGUgdG8gdGhlIGF2YXRhciBpZiBgcm91bmRTaGFwZWAgaXMgYFwidHJ1ZVwiYC5cbiAgICAgKiBCeSBkZWZhdWx0IHRoZSBzaGFwZSBvZiB0aGUgYXZhdGFyIGlzIGEgc3F1YXJlLlxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtYXZhdGFyIHJvdW5kU2hhcGUgPSBcInRydWVcIiA+PC9pZ3gtYXZhdGFyPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEF2YXRhckNvbXBvbmVudFxuICAgICAqL1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtYXZhdGFyLS1yb3VuZGVkJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyByb3VuZFNoYXBlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBhdmF0YXIncyBgaW5pdGlhbHNgL2BpY29uYCBjb2xvci5cbiAgICAgKlxuICAgICAqYGBgaHRtbFxuICAgICAqPGlneC1hdmF0YXIgY29sb3I9XCJibHVlXCI+PC9pZ3gtYXZhdGFyPlxuICAgICAqYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4QXZhdGFyQ29tcG9uZW50XG4gICAgICovXG5cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLmNvbG9yJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjb2xvcjogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUgYXZhdGFyLlxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtYXZhdGFyIGJnQ29sb3I9XCJ5ZWxsb3dcIj48L2lneC1hdmF0YXI+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4QXZhdGFyQ29tcG9uZW50XG4gICAgICovXG5cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLmJhY2tncm91bmQnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGJnQ29sb3I6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFNldHMgYGluaXRpYWxzYCB0byB0aGUgYXZhdGFyLlxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtYXZhdGFyIGluaXRpYWxzPVwiTU5cIj48L2lneC1hdmF0YXI+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4QXZhdGFyQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaW5pdGlhbHM6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFNldHMgYW4gYGljb25gIHRvIHRoZSBhdmF0YXIuIEFsbCBpY29ucyBmcm9tIHRoZSBtYXRlcmlhbCBpY29uIHNldCBhcmUgc3VwcG9ydGVkLlxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtYXZhdGFyIGljb249XCJwaG9uZVwiPjwvaWd4LWF2YXRhcj5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hBdmF0YXJDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpY29uOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBgaW1hZ2VgIHNvdXJjZSBvZiB0aGUgYXZhdGFyLlxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtYXZhdGFyIHNyYz1cImltYWdlcy9waWN0dXJlLmpwZ1wiPjwvaWd4LWF2YXRhcj5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hBdmF0YXJDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzcmM6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGBzaXplYCBvZiB0aGUgYXZhdGFyLlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqbGV0IGF2YXRhclNpemUgPSAgdGhpcy5hdmF0YXIuc2l6ZTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBJZ3hBdmF0YXJDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgc2l6ZSgpOiBzdHJpbmcgfCBTaXplIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpemU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYHNpemVgICBvZiB0aGUgYXZhdGFyLlxuICAgICAqIEJ5IGRlZmF1bHQgdGhlIGBzaXplYCBpcyBgXCJzbWFsbFwiYC4gSXQgY2FuIGJlIHNldCB0byBgXCJtZWRpdW1cImAgb3IgYFwibGFyZ2VcImAuXG4gICAgICpcbiAgICAgKiBgYGBcbiAgICAgKiA8aWd4LWF2YXRhciBzaXplPVwibGFyZ2VcIj48L2lneC1hdmF0YXI+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4QXZhdGFyQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIHNldCBzaXplKHZhbHVlOiBzdHJpbmcgfCBTaXplKSB7XG4gICAgICAgIHN3aXRjaCAodmFsdWUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3NtYWxsJzpcbiAgICAgICAgICAgIGNhc2UgJ21lZGl1bSc6XG4gICAgICAgICAgICBjYXNlICdsYXJnZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5fc2l6ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aGlzLl9zaXplID0gJ3NtYWxsJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHR5cGUgb2YgdGhlIGF2YXRhci5cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgYXZhdGFyVHlwZSA9IHRoaXMuYXZhdGFyLnR5cGU7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4QXZhdGFyQ29tcG9uZW50XG4gICAgICovXG4gICAgZ2V0IHR5cGUoKTogQXZhdGFyVHlwZSB7XG4gICAgICAgIGlmICh0aGlzLnNyYykge1xuICAgICAgICAgICAgcmV0dXJuIEF2YXRhclR5cGUuSU1BR0U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pY29uKSB7XG4gICAgICAgICAgICByZXR1cm4gQXZhdGFyVHlwZS5JQ09OO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaW5pdGlhbHMpIHtcbiAgICAgICAgICAgIHJldHVybiBBdmF0YXJUeXBlLklOSVRJQUxTO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIEF2YXRhclR5cGUuREVGQVVMVDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB0ZW1wbGF0ZSBvZiB0aGUgYXZhdGFyLlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCB0ZW1wbGF0ZSA9IHRoaXMuYXZhdGFyLnRlbXBsYXRlO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneEF2YXRhckNvbXBvbmVudFxuICAgICAqL1xuICAgIGdldCB0ZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICAgICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgQXZhdGFyVHlwZS5JTUFHRTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbWFnZVRlbXBsYXRlO1xuICAgICAgICAgICAgY2FzZSBBdmF0YXJUeXBlLklOSVRJQUxTOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmluaXRpYWxzVGVtcGxhdGU7XG4gICAgICAgICAgICBjYXNlIEF2YXRhclR5cGUuSUNPTjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pY29uVGVtcGxhdGU7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRUZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7IH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMucm9sZURlc2NyaXB0aW9uID0gdGhpcy5nZXRSb2xlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0XG4gICAgICAgICAgICAuYWRkKGBpZ3gtYXZhdGFyLS0ke3RoaXMuX3NpemV9YCwgYGlneC1hdmF0YXItLSR7dGhpcy50eXBlfWApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFJvbGUoKTogc3RyaW5nIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgQXZhdGFyVHlwZS5JTUFHRTpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2ltYWdlIGF2YXRhcic7XG4gICAgICAgICAgICBjYXNlIEF2YXRhclR5cGUuSUNPTjpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2ljb24gYXZhdGFyJztcbiAgICAgICAgICAgIGNhc2UgQXZhdGFyVHlwZS5JTklUSUFMUzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2luaXRpYWxzIGF2YXRhcic7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAnY3VzdG9tIGF2YXRhcic7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB1cmwgb2YgdGhlIGBpbWFnZWAuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGltYWdlU291cmNlVXJsID0gdGhpcy5hdmF0YXIuZ2V0U3JjVXJsKCk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4QXZhdGFyQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIGdldFNyY1VybCgpIHtcbiAgICAgICAgcmV0dXJuIGB1cmwoJHt0aGlzLnNyY30pYDtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5ATmdNb2R1bGUoe1xuICAgIGRlY2xhcmF0aW9uczogW0lneEF2YXRhckNvbXBvbmVudF0sXG4gICAgZXhwb3J0czogW0lneEF2YXRhckNvbXBvbmVudF0sXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgSWd4SWNvbk1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgSWd4QXZhdGFyTW9kdWxlIHsgfVxuIl19