igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
358 lines • 24.7 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, ContentChild, ElementRef, HostBinding, Input, HostListener } from '@angular/core';
import { IgxTabItemTemplateDirective } from './tabs.directives';
import { IgxTabsBase } from './tabs.common';
var IgxTabsGroupComponent = /** @class */ (function () {
function IgxTabsGroupComponent(_tabs, _element) {
this._tabs = _tabs;
this._element = _element;
/**
* An \@Input property that allows you to enable/disable the `IgxTabGroupComponent`.
* ```html
* <igx-tabs-group label="Tab 2 Lorem ipsum dolor sit" icon="home" [disabled]="true">
* ```
*/
this.disabled = false;
this.isSelected = false;
/**
* @hidden
*/
this.role = 'tabpanel';
/**
* @hidden
*/
this.styleClass = true;
}
/**
* @param {?} event
* @return {?}
*/
IgxTabsGroupComponent.prototype.onResize = /**
* @param {?} event
* @return {?}
*/
function (event) {
if (this.isSelected) {
this.transformContentAnimation(0);
}
};
Object.defineProperty(IgxTabsGroupComponent.prototype, "relatedTab", {
/**
* An accessor that returns the `IgxTabItemComponent` component.
* ```typescript
* @ViewChild("MyTabsGroup")
* public tab: IgxTabsGroupComponent;
* ngAfterViewInIt(){
* let tabComponent = this.tab.relatedTab;
* }
* ```
*/
get: /**
* An accessor that returns the `IgxTabItemComponent` component.
* ```typescript
* \@ViewChild("MyTabsGroup")
* public tab: IgxTabsGroupComponent;
* ngAfterViewInIt(){
* let tabComponent = this.tab.relatedTab;
* }
* ```
* @return {?}
*/
function () {
if (this._tabs.tabs) {
return (/** @type {?} */ (this._tabs.tabs.toArray()[this.index]));
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxTabsGroupComponent.prototype, "index", {
/**
* An accessor that returns the value of the index of the `IgxTabsGroupComponent`.
* ```typescript
* @ViewChild("MyTabsGroup")
* public tab: IgxTabsGroupComponent;
* ngAfterViewInIt(){
* let tabIndex = this.tab.index;
* }
* ```
*/
get: /**
* An accessor that returns the value of the index of the `IgxTabsGroupComponent`.
* ```typescript
* \@ViewChild("MyTabsGroup")
* public tab: IgxTabsGroupComponent;
* ngAfterViewInIt(){
* let tabIndex = this.tab.index;
* }
* ```
* @return {?}
*/
function () {
if (this._tabs.groups) {
return this._tabs.groups.toArray().indexOf(this);
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxTabsGroupComponent.prototype, "customTabTemplate", {
/**
* @hidden
*/
get: /**
* @hidden
* @return {?}
*/
function () {
return this._tabTemplate;
},
/**
*@hidden
*/
set: /**
* @hidden
* @param {?} template
* @return {?}
*/
function (template) {
this._tabTemplate = template;
},
enumerable: true,
configurable: true
});
/**
* @hidden
*/
/**
* @hidden
* @return {?}
*/
IgxTabsGroupComponent.prototype.ngAfterContentInit = /**
* @hidden
* @return {?}
*/
function () {
if (this.tabTemplate) {
this._tabTemplate = this.tabTemplate.template;
}
};
/**
* @hidden
*/
/**
* @hidden
* @return {?}
*/
IgxTabsGroupComponent.prototype.ngAfterViewChecked = /**
* @hidden
* @return {?}
*/
function () {
this._element.nativeElement.setAttribute('aria-labelledby', "igx-tab-item-" + this.index);
this._element.nativeElement.setAttribute('id', "igx-tabs__group-" + this.index);
if (this.isSelected) {
/** @type {?} */
var tabItem = this.relatedTab.nativeTabItem.nativeElement;
this.transformContentAnimation(0);
this.transformIndicatorAnimation(tabItem);
}
};
/**
* A method that sets the focus on a tab.
* @memberof {@link IgxTabsGroupComponent}
*```typescript
*@ViewChild("MyChild")
*public tab : IgxTabsGroupComponent;
*ngAfterViewInit(){
* this.tab.select();
*}
*```
* @param focusDelay A number representing the expected delay.
*/
/**
* A method that sets the focus on a tab.
* \@memberof {\@link IgxTabsGroupComponent}
* ```typescript
* \@ViewChild("MyChild")
* public tab : IgxTabsGroupComponent;
* ngAfterViewInit(){
* this.tab.select();
* }
* ```
* @param {?=} focusDelay A number representing the expected delay.
* @return {?}
*/
IgxTabsGroupComponent.prototype.select = /**
* A method that sets the focus on a tab.
* \@memberof {\@link IgxTabsGroupComponent}
* ```typescript
* \@ViewChild("MyChild")
* public tab : IgxTabsGroupComponent;
* ngAfterViewInit(){
* this.tab.select();
* }
* ```
* @param {?=} focusDelay A number representing the expected delay.
* @return {?}
*/
function (focusDelay) {
var _this = this;
if (focusDelay === void 0) { focusDelay = 200; }
if (this.disabled || this.isSelected) {
return;
}
this.isSelected = true;
this.relatedTab.tabindex = 0;
if (focusDelay !== 0) {
setTimeout(function () {
_this.relatedTab.nativeTabItem.nativeElement.focus();
}, focusDelay);
}
this.handleSelection();
this._tabs.onTabItemSelected.emit({ tab: this._tabs.tabs.toArray()[this.index], group: this });
};
/**
* @private
* @return {?}
*/
IgxTabsGroupComponent.prototype.handleSelection = /**
* @private
* @return {?}
*/
function () {
/** @type {?} */
var tabElement = this.relatedTab.nativeTabItem.nativeElement;
// Scroll to the left
if (tabElement.offsetLeft < this._tabs.offset) {
this._tabs.scrollElement(tabElement, false);
}
// Scroll to the right
/** @type {?} */
var viewPortOffsetWidth = this._tabs.viewPort.nativeElement.offsetWidth;
/** @type {?} */
var delta = (tabElement.offsetLeft + tabElement.offsetWidth) - (viewPortOffsetWidth + this._tabs.offset);
// Fix for IE 11, a difference is accumulated from the widths calculations
if (delta > 1) {
this._tabs.scrollElement(tabElement, true);
}
this.transformContentAnimation(0.2);
this.transformIndicatorAnimation(tabElement);
};
/**
* @private
* @param {?} duration
* @return {?}
*/
IgxTabsGroupComponent.prototype.transformContentAnimation = /**
* @private
* @param {?} duration
* @return {?}
*/
function (duration) {
/** @type {?} */
var contentOffset = this._tabs.tabsContainer.nativeElement.offsetWidth * this.index;
this._tabs.contentsContainer.nativeElement.style.transitionDuration = duration + "s";
this._tabs.contentsContainer.nativeElement.style.transform = "translate(" + -contentOffset + "px)";
};
/**
* @private
* @param {?} element
* @return {?}
*/
IgxTabsGroupComponent.prototype.transformIndicatorAnimation = /**
* @private
* @param {?} element
* @return {?}
*/
function (element) {
this._tabs.selectedIndicator.nativeElement.style.width = element.offsetWidth + "px";
this._tabs.selectedIndicator.nativeElement.style.transform = "translate(" + element.offsetLeft + "px)";
};
IgxTabsGroupComponent.decorators = [
{ type: Component, args: [{
selector: 'igx-tabs-group',
template: "<ng-content *ngIf=\"isSelected\"></ng-content>\n"
}] }
];
/** @nocollapse */
IgxTabsGroupComponent.ctorParameters = function () { return [
{ type: IgxTabsBase },
{ type: ElementRef }
]; };
IgxTabsGroupComponent.propDecorators = {
disabled: [{ type: Input }],
icon: [{ type: Input }],
label: [{ type: Input }],
tabTemplate: [{ type: ContentChild, args: [IgxTabItemTemplateDirective, { read: IgxTabItemTemplateDirective },] }],
role: [{ type: HostBinding, args: ['attr.role',] }],
styleClass: [{ type: HostBinding, args: ['class.igx-tabs__group',] }],
onResize: [{ type: HostListener, args: ['window:resize', ['$event'],] }]
};
return IgxTabsGroupComponent;
}());
export { IgxTabsGroupComponent };
if (false) {
/**
* An \@Input property that allows you to enable/disable the `IgxTabGroupComponent`.
* ```html
* <igx-tabs-group label="Tab 2 Lorem ipsum dolor sit" icon="home" [disabled]="true">
* ```
* @type {?}
*/
IgxTabsGroupComponent.prototype.disabled;
/**
* An \@Input property that sets the value of the `icon`.
* The value should be valid icon name from {\@link https://material.io/tools/icons/?style=baseline}.
* ```html
* <igx-tabs-group label="Tab 1" icon="home">
* ```
* @type {?}
*/
IgxTabsGroupComponent.prototype.icon;
/**
* An \@Input property that sets the value of the `label`.
* ```html
* <igx-tabs-group label="Tab 1" icon="folder">
* ```
* @type {?}
*/
IgxTabsGroupComponent.prototype.label;
/** @type {?} */
IgxTabsGroupComponent.prototype.isSelected;
/**
* @hidden
* @type {?}
* @protected
*/
IgxTabsGroupComponent.prototype.tabTemplate;
/**
* @type {?}
* @private
*/
IgxTabsGroupComponent.prototype._tabTemplate;
/**
* @hidden
* @type {?}
*/
IgxTabsGroupComponent.prototype.role;
/**
* @hidden
* @type {?}
*/
IgxTabsGroupComponent.prototype.styleClass;
/**
* @type {?}
* @private
*/
IgxTabsGroupComponent.prototype._tabs;
/**
* @type {?}
* @private
*/
IgxTabsGroupComponent.prototype._element;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy1ncm91cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9pZ25pdGV1aS1hbmd1bGFyLyIsInNvdXJjZXMiOlsibGliL3RhYnMvdGFicy1ncm91cC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFHSCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixXQUFXLEVBQ1gsS0FBSyxFQUVMLFlBQVksRUFDZixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsV0FBVyxFQUFvQixNQUFNLGVBQWUsQ0FBQztBQUU5RDtJQTZDSSwrQkFBb0IsS0FBa0IsRUFBVSxRQUFvQjtRQUFoRCxVQUFLLEdBQUwsS0FBSyxDQUFhO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBWTs7Ozs7OztRQS9CN0QsYUFBUSxHQUFHLEtBQUssQ0FBQztRQXFCakIsZUFBVSxHQUFHLEtBQUssQ0FBQzs7OztRQWlCbkIsU0FBSSxHQUFHLFVBQVUsQ0FBQzs7OztRQU1sQixlQUFVLEdBQUcsSUFBSSxDQUFDO0lBWnpCLENBQUM7Ozs7O0lBZU0sd0NBQVE7Ozs7SUFEZixVQUNnQixLQUFLO1FBQ2pCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNqQixJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDckM7SUFDTCxDQUFDO0lBWUQsc0JBQUksNkNBQVU7UUFWZDs7Ozs7Ozs7O1dBU0c7Ozs7Ozs7Ozs7OztRQUNIO1lBQ0ksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRTtnQkFDakIsT0FBTyxtQkFBQSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQXVCLENBQUM7YUFDdkU7UUFDTCxDQUFDOzs7T0FBQTtJQVlELHNCQUFJLHdDQUFL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Ozs7Z0JBTFEsV0FBVztnQkFUaEIsVUFBVTs7OzJCQXdCVCxLQUFLO3VCQVVMLEtBQUs7d0JBU0wsS0FBSzs4QkFRTCxZQUFZLFNBQUMsMkJBQTJCLEVBQUUsRUFBRSxJQUFJLEVBQUUsMkJBQTJCLEVBQUU7dUJBVy9FLFdBQVcsU0FBQyxXQUFXOzZCQU12QixXQUFXLFNBQUMsdUJBQXVCOzJCQUduQyxZQUFZLFNBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDOztJQXVJN0MsNEJBQUM7Q0FBQSxBQW5NRCxJQW1NQztTQTlMWSxxQkFBcUI7Ozs7Ozs7OztJQVE5Qix5Q0FDd0I7Ozs7Ozs7OztJQVN4QixxQ0FDb0I7Ozs7Ozs7O0lBUXBCLHNDQUNxQjs7SUFFckIsMkNBQTBCOzs7Ozs7SUFLMUIsNENBQ21EOzs7OztJQUVuRCw2Q0FBdUM7Ozs7O0lBUXZDLHFDQUN5Qjs7Ozs7SUFLekIsMkNBQ3lCOzs7OztJQWJiLHNDQUEwQjs7Ozs7SUFBRSx5Q0FBNEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXQsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgSG9zdExpc3RlbmVyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBJZ3hUYWJJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi90YWItaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4VGFiSXRlbVRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSAnLi90YWJzLmRpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgSWd4VGFic0Jhc2UsIElneFRhYnNHcm91cEJhc2UgfSBmcm9tICcuL3RhYnMuY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdpZ3gtdGFicy1ncm91cCcsXG4gICAgdGVtcGxhdGVVcmw6ICd0YWJzLWdyb3VwLmNvbXBvbmVudC5odG1sJ1xufSlcblxuZXhwb3J0IGNsYXNzIElneFRhYnNHcm91cENvbXBvbmVudCBpbXBsZW1lbnRzIElneFRhYnNHcm91cEJhc2UsIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0NoZWNrZWQge1xuXG4gICAgLyoqXG4gICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdGhhdCBhbGxvd3MgeW91IHRvIGVuYWJsZS9kaXNhYmxlIHRoZSBgSWd4VGFiR3JvdXBDb21wb25lbnRgLlxuICAgICpgYGBodG1sXG4gICAgKjxpZ3gtdGFicy1ncm91cCBsYWJlbD1cIlRhYiAyICBMb3JlbSBpcHN1bSBkb2xvciBzaXRcIiBpY29uPVwiaG9tZVwiIFtkaXNhYmxlZF09XCJ0cnVlXCI+XG4gICAgKmBgYFxuICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgc2V0cyB0aGUgdmFsdWUgb2YgdGhlIGBpY29uYC5cbiAgICAqIFRoZSB2YWx1ZSBzaG91bGQgYmUgdmFsaWQgaWNvbiBuYW1lIGZyb20ge0BsaW5rIGh0dHBzOi8vbWF0ZXJpYWwuaW8vdG9vbHMvaWNvbnMvP3N0eWxlPWJhc2VsaW5lfS5cbiAgICAqYGBgaHRtbFxuICAgICo8aWd4LXRhYnMtZ3JvdXAgbGFiZWw9XCJUYWIgMVwiIGljb249XCJob21lXCI+XG4gICAgKmBgYFxuICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaWNvbjogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdGhhdCBzZXRzIHRoZSB2YWx1ZSBvZiB0aGUgYGxhYmVsYC5cbiAgICAqYGBgaHRtbFxuICAgICo8aWd4LXRhYnMtZ3JvdXAgbGFiZWw9XCJUYWIgMVwiIGljb249XCJmb2xkZXJcIj5cbiAgICAqYGBgXG4gICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBsYWJlbDogc3RyaW5nO1xuXG4gICAgcHVibGljIGlzU2VsZWN0ZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKElneFRhYkl0ZW1UZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBJZ3hUYWJJdGVtVGVtcGxhdGVEaXJlY3RpdmUgfSlcbiAgICBwcm90ZWN0ZWQgdGFiVGVtcGxhdGU6IElneFRhYkl0ZW1UZW1wbGF0ZURpcmVjdGl2ZTtcblxuICAgIHByaXZhdGUgX3RhYlRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfdGFiczogSWd4VGFic0Jhc2UsIHByaXZhdGUgX2VsZW1lbnQ6IEVsZW1lbnRSZWYpIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKVxuICAgIHB1YmxpYyByb2xlID0gJ3RhYnBhbmVsJztcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC10YWJzX19ncm91cCcpXG4gICAgcHVibGljIHN0eWxlQ2xhc3MgPSB0cnVlO1xuXG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uUmVzaXplKGV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtQ29udGVudEFuaW1hdGlvbigwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIGFjY2Vzc29yIHRoYXQgcmV0dXJucyB0aGUgYElneFRhYkl0ZW1Db21wb25lbnRgIGNvbXBvbmVudC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcIk15VGFic0dyb3VwXCIpXG4gICAgICogcHVibGljIHRhYjogSWd4VGFic0dyb3VwQ29tcG9uZW50O1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5JdCgpe1xuICAgICAqICAgIGxldCB0YWJDb21wb25lbnQgPSB0aGlzLnRhYi5yZWxhdGVkVGFiO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBnZXQgcmVsYXRlZFRhYigpOiBJZ3hUYWJJdGVtQ29tcG9uZW50IHtcbiAgICAgICAgaWYgKHRoaXMuX3RhYnMudGFicykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RhYnMudGFicy50b0FycmF5KClbdGhpcy5pbmRleF0gYXMgSWd4VGFiSXRlbUNvbXBvbmVudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIGFjY2Vzc29yIHRoYXQgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGluZGV4IG9mIHRoZSBgSWd4VGFic0dyb3VwQ29tcG9uZW50YC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcIk15VGFic0dyb3VwXCIpXG4gICAgICogcHVibGljIHRhYjogSWd4VGFic0dyb3VwQ29tcG9uZW50O1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5JdCgpe1xuICAgICAqICAgIGxldCB0YWJJbmRleCA9IHRoaXMudGFiLmluZGV4O1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBnZXQgaW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRoaXMuX3RhYnMuZ3JvdXBzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGFicy5ncm91cHMudG9BcnJheSgpLmluZGV4T2YodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGN1c3RvbVRhYlRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFiVGVtcGxhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgc2V0IGN1c3RvbVRhYlRlbXBsYXRlKHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7XG4gICAgICAgIHRoaXMuX3RhYlRlbXBsYXRlID0gdGVtcGxhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnRhYlRlbXBsYXRlKSB7XG4gICAgICAgICAgICB0aGlzLl90YWJUZW1wbGF0ZSA9IHRoaXMudGFiVGVtcGxhdGUudGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICAgICAgdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbGxlZGJ5JywgYGlneC10YWItaXRlbS0ke3RoaXMuaW5kZXh9YCk7XG4gICAgICAgIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2lkJywgYGlneC10YWJzX19ncm91cC0ke3RoaXMuaW5kZXh9YCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNTZWxlY3RlZCkge1xuICAgICAgICAgICAgY29uc3QgdGFiSXRlbSA9IHRoaXMucmVsYXRlZFRhYi5uYXRpdmVUYWJJdGVtLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybUNvbnRlbnRBbmltYXRpb24oMCk7XG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybUluZGljYXRvckFuaW1hdGlvbih0YWJJdGVtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgbWV0aG9kIHRoYXQgc2V0cyB0aGUgZm9jdXMgb24gYSB0YWIuXG4gICAgICogQG1lbWJlcm9mIHtAbGluayBJZ3hUYWJzR3JvdXBDb21wb25lbnR9XG4gICAgICpgYGB0eXBlc2NyaXB0XG4gICAgICpAVmlld0NoaWxkKFwiTXlDaGlsZFwiKVxuICAgICAqcHVibGljIHRhYiA6IElneFRhYnNHcm91cENvbXBvbmVudDtcbiAgICAgKm5nQWZ0ZXJWaWV3SW5pdCgpe1xuICAgICAqICAgIHRoaXMudGFiLnNlbGVjdCgpO1xuICAgICAqfVxuICAgICAqYGBgXG4gICAgICogQHBhcmFtIGZvY3VzRGVsYXkgQSBudW1iZXIgcmVwcmVzZW50aW5nIHRoZSBleHBlY3RlZCBkZWxheS5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0KGZvY3VzRGVsYXkgPSAyMDApOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5pc1NlbGVjdGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlzU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnJlbGF0ZWRUYWIudGFiaW5kZXggPSAwO1xuXG4gICAgICAgIGlmIChmb2N1c0RlbGF5ICE9PSAwKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbGF0ZWRUYWIubmF0aXZlVGFiSXRlbS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9LCBmb2N1c0RlbGF5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhhbmRsZVNlbGVjdGlvbigpO1xuICAgICAgICB0aGlzLl90YWJzLm9uVGFiSXRlbVNlbGVjdGVkLmVtaXQoeyB0YWI6IHRoaXMuX3RhYnMudGFicy50b0FycmF5KClbdGhpcy5pbmRleF0sIGdyb3VwOiB0aGlzIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgICAgICBjb25zdCB0YWJFbGVtZW50ID0gdGhpcy5yZWxhdGVkVGFiLm5hdGl2ZVRhYkl0ZW0ubmF0aXZlRWxlbWVudDtcblxuICAgICAgICAvLyBTY3JvbGwgdG8gdGhlIGxlZnRcbiAgICAgICAgaWYgKHRhYkVsZW1lbnQub2Zmc2V0TGVmdCA8IHRoaXMuX3RhYnMub2Zmc2V0KSB7XG4gICAgICAgICAgICB0aGlzLl90YWJzLnNjcm9sbEVsZW1lbnQodGFiRWxlbWVudCwgZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2Nyb2xsIHRvIHRoZSByaWdodFxuICAgICAgICBjb25zdCB2aWV3UG9ydE9mZnNldFdpZHRoID0gdGhpcy5fdGFicy52aWV3UG9ydC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgICBjb25zdCBkZWx0YSA9ICh0YWJFbGVtZW50Lm9mZnNldExlZnQgKyB0YWJFbGVtZW50Lm9mZnNldFdpZHRoKSAtICh2aWV3UG9ydE9mZnNldFdpZHRoICsgdGhpcy5fdGFicy5vZmZzZXQpO1xuICAgICAgICAvLyBGaXggZm9yIElFIDExLCBhIGRpZmZlcmVuY2UgaXMgYWNjdW11bGF0ZWQgZnJvbSB0aGUgd2lkdGhzIGNhbGN1bGF0aW9uc1xuICAgICAgICBpZiAoZGVsdGEgPiAxKSB7XG4gICAgICAgICAgICB0aGlzLl90YWJzLnNjcm9sbEVsZW1lbnQodGFiRWxlbWVudCwgdHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRyYW5zZm9ybUNvbnRlbnRBbmltYXRpb24oMC4yKTtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm1JbmRpY2F0b3JBbmltYXRpb24odGFiRWxlbWVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0cmFuc2Zvcm1Db250ZW50QW5pbWF0aW9uKGR1cmF0aW9uOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29udGVudE9mZnNldCA9IHRoaXMuX3RhYnMudGFic0NvbnRhaW5lci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoICogdGhpcy5pbmRleDtcbiAgICAgICAgdGhpcy5fdGFicy5jb250ZW50c0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbiA9IGAke2R1cmF0aW9ufXNgO1xuICAgICAgICB0aGlzLl90YWJzLmNvbnRlbnRzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZSgkey1jb250ZW50T2Zmc2V0fXB4KWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0cmFuc2Zvcm1JbmRpY2F0b3JBbmltYXRpb24oZWxlbWVudDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFicy5zZWxlY3RlZEluZGljYXRvci5uYXRpdmVFbGVtZW50LnN0eWxlLndpZHRoID0gYCR7ZWxlbWVudC5vZmZzZXRXaWR0aH1weGA7XG4gICAgICAgIHRoaXMuX3RhYnMuc2VsZWN0ZWRJbmRpY2F0b3IubmF0aXZlRWxlbWVudC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlKCR7ZWxlbWVudC5vZmZzZXRMZWZ0fXB4KWA7XG4gICAgfVxufVxuIl19