UNPKG

igniteui-angular

Version:

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

358 lines • 24.7 kB
/** * @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