UNPKG

igniteui-angular

Version:

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

217 lines • 17.7 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Directive, HostBinding, TemplateRef } from '@angular/core'; import { IgxTabsBase } from './tabs.common'; /** @enum {string} */ var ButtonStyle = { VISIBLE: 'visible', HIDDEN: 'hidden', NOT_DISPLAYED: 'not_displayed', }; var IgxRightButtonStyleDirective = /** @class */ (function () { function IgxRightButtonStyleDirective(tabs) { this.tabs = tabs; } Object.defineProperty(IgxRightButtonStyleDirective.prototype, "visibleCSS", { get: /** * @return {?} */ function () { return (this.getRightButtonStyle() === ButtonStyle.VISIBLE) ? true : false; }, enumerable: true, configurable: true }); Object.defineProperty(IgxRightButtonStyleDirective.prototype, "hiddenCSS", { get: /** * @return {?} */ function () { return (this.getRightButtonStyle() === ButtonStyle.HIDDEN) ? true : false; }, enumerable: true, configurable: true }); Object.defineProperty(IgxRightButtonStyleDirective.prototype, "notDisplayedCSS", { get: /** * @return {?} */ function () { return (this.getRightButtonStyle() === ButtonStyle.NOT_DISPLAYED) ? true : false; }, enumerable: true, configurable: true }); /** * @private * @return {?} */ IgxRightButtonStyleDirective.prototype.getRightButtonStyle = /** * @private * @return {?} */ function () { /** @type {?} */ var viewPortWidth = this.tabs.viewPort.nativeElement.offsetWidth; // We use this hacky way to get the width of the itemsContainer, // because there is inconsistency in IE we cannot use offsetWidth or scrollOffset. /** @type {?} */ var itemsContainerChildrenCount = this.tabs.itemsContainer.nativeElement.children.length; /** @type {?} */ var itemsContainerWidth = 0; if (itemsContainerChildrenCount > 1) { /** @type {?} */ var lastTab = this.tabs.itemsContainer.nativeElement.children[itemsContainerChildrenCount - 2]; itemsContainerWidth = lastTab.offsetLeft + lastTab.offsetWidth; } /** @type {?} */ var headerContainerWidth = this.tabs.headerContainer.nativeElement.offsetWidth; /** @type {?} */ var offset = this.tabs.offset; /** @type {?} */ var total = offset + viewPortWidth; // Fix for IE 11, a difference is accumulated from the widths calculations. if (itemsContainerWidth - headerContainerWidth <= 1 && offset === 0) { return ButtonStyle.NOT_DISPLAYED; } if (itemsContainerWidth > total) { return ButtonStyle.VISIBLE; } else { return ButtonStyle.HIDDEN; } }; IgxRightButtonStyleDirective.decorators = [ { type: Directive, args: [{ selector: '[igxRightButtonStyle]' },] } ]; /** @nocollapse */ IgxRightButtonStyleDirective.ctorParameters = function () { return [ { type: IgxTabsBase } ]; }; IgxRightButtonStyleDirective.propDecorators = { visibleCSS: [{ type: HostBinding, args: ['class.igx-tabs__header-button',] }], hiddenCSS: [{ type: HostBinding, args: ['class.igx-tabs__header-button--hidden',] }], notDisplayedCSS: [{ type: HostBinding, args: ['class.igx-tabs__header-button--none',] }] }; return IgxRightButtonStyleDirective; }()); export { IgxRightButtonStyleDirective }; if (false) { /** @type {?} */ IgxRightButtonStyleDirective.prototype.tabs; } var IgxLeftButtonStyleDirective = /** @class */ (function () { function IgxLeftButtonStyleDirective(tabs) { this.tabs = tabs; } Object.defineProperty(IgxLeftButtonStyleDirective.prototype, "visibleCSS", { get: /** * @return {?} */ function () { return (this.getLeftButtonStyle() === ButtonStyle.VISIBLE) ? true : false; }, enumerable: true, configurable: true }); Object.defineProperty(IgxLeftButtonStyleDirective.prototype, "hiddenCSS", { get: /** * @return {?} */ function () { return (this.getLeftButtonStyle() === ButtonStyle.HIDDEN) ? true : false; }, enumerable: true, configurable: true }); Object.defineProperty(IgxLeftButtonStyleDirective.prototype, "notDisplayedCSS", { get: /** * @return {?} */ function () { return (this.getLeftButtonStyle() === ButtonStyle.NOT_DISPLAYED) ? true : false; }, enumerable: true, configurable: true }); /** * @private * @return {?} */ IgxLeftButtonStyleDirective.prototype.getLeftButtonStyle = /** * @private * @return {?} */ function () { // We use this hacky way to get the width of the itemsContainer, // because there is inconsistency in IE we cannot use offsetWidth or scrollOffset. /** @type {?} */ var itemsContainerChildrenCount = this.tabs.itemsContainer.nativeElement.children.length; /** @type {?} */ var itemsContainerWidth = 0; if (itemsContainerChildrenCount > 1) { /** @type {?} */ var lastTab = this.tabs.itemsContainer.nativeElement.children[itemsContainerChildrenCount - 2]; itemsContainerWidth = lastTab.offsetLeft + lastTab.offsetWidth; } /** @type {?} */ var headerContainerWidth = this.tabs.headerContainer.nativeElement.offsetWidth; /** @type {?} */ var offset = this.tabs.offset; if (offset === 0) { // Fix for IE 11, a difference is accumulated from the widths calculations. if (itemsContainerWidth - headerContainerWidth <= 1) { return ButtonStyle.NOT_DISPLAYED; } return ButtonStyle.HIDDEN; } else { return ButtonStyle.VISIBLE; } }; IgxLeftButtonStyleDirective.decorators = [ { type: Directive, args: [{ selector: '[igxLeftButtonStyle]' },] } ]; /** @nocollapse */ IgxLeftButtonStyleDirective.ctorParameters = function () { return [ { type: IgxTabsBase } ]; }; IgxLeftButtonStyleDirective.propDecorators = { visibleCSS: [{ type: HostBinding, args: ['class.igx-tabs__header-button',] }], hiddenCSS: [{ type: HostBinding, args: ['class.igx-tabs__header-button--hidden',] }], notDisplayedCSS: [{ type: HostBinding, args: ['class.igx-tabs__header-button--none',] }] }; return IgxLeftButtonStyleDirective; }()); export { IgxLeftButtonStyleDirective }; if (false) { /** @type {?} */ IgxLeftButtonStyleDirective.prototype.tabs; } var IgxTabItemTemplateDirective = /** @class */ (function () { function IgxTabItemTemplateDirective(template) { this.template = template; } IgxTabItemTemplateDirective.decorators = [ { type: Directive, args: [{ selector: '[igxTab]' },] } ]; /** @nocollapse */ IgxTabItemTemplateDirective.ctorParameters = function () { return [ { type: TemplateRef } ]; }; return IgxTabItemTemplateDirective; }()); export { IgxTabItemTemplateDirective }; if (false) { /** @type {?} */ IgxTabItemTemplateDirective.prototype.template; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5kaXJlY3RpdmVzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vaWduaXRldWktYW5ndWxhci8iLCJzb3VyY2VzIjpbImxpYi90YWJzL3RhYnMuZGlyZWN0aXZlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxXQUFXLEVBQ1gsV0FBVyxFQUNkLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7OztJQUd4QyxTQUFVLFNBQVM7SUFDbkIsUUFBUyxRQUFRO0lBQ2pCLGVBQWdCLGVBQWU7O0FBR25DO0lBS0ksc0NBQW1CLElBQWlCO1FBQWpCLFNBQUksR0FBSixJQUFJLENBQWE7SUFDcEMsQ0FBQztJQUVELHNCQUNJLG9EQUFVOzs7O1FBRGQ7WUFFSSxPQUFPLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEtBQUssV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUMvRSxDQUFDOzs7T0FBQTtJQUVELHNCQUNJLG1EQUFTOzs7O1FBRGI7WUFFSSxPQUFPLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEtBQUssV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUM5RSxDQUFDOzs7T0FBQTtJQUVELHNCQUNJLHlEQUFlOzs7O1FBRG5CO1lBRUksT0FBTyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDckYsQ0FBQzs7O09BQUE7Ozs7O0lBRU8sMERBQW1COzs7O0lBQTNCOztZQUNVLGFBQWEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsV0FBVzs7OztZQUk1RCwyQkFBMkIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLE1BQU07O1lBQ3RGLG1CQUFtQixHQUFHLENBQUM7UUFDM0IsSUFBSSwyQkFBMkIsR0FBRyxDQUFDLEVBQUU7O2dCQUMzQixPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQywyQkFBMkIsR0FBRyxDQUFDLENBQUM7WUFDaEcsbUJBQW1CLEdBQUcsT0FBTyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDO1NBQ2xFOztZQUNLLG9CQUFvQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxXQUFXOztZQUMxRSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNOztZQUN6QixLQUFLLEdBQUcsTUFBTSxHQUFHLGFBQWE7UUFFcEMsMkVBQTJFO1FBQzNFLElBQUksbUJBQW1CLEdBQUcsb0JBQW9CLElBQUksQ0FBQyxJQUFJLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDakUsT0FBTyxXQUFXLENBQUMsYUFBYSxDQUFDO1NBQ3BDO1FBRUQsSUFBSSxtQkFBbUIsR0FBRyxLQUFLLEVBQUU7WUFDN0IsT0FBTyxXQUFXLENBQUMsT0FBTyxDQUFDO1NBQzlCO2FBQU07WUFDSCxPQUFPLFdBQVcsQ0FBQyxNQUFNLENBQUM7U0FDN0I7SUFDTCxDQUFDOztnQkFoREosU0FBUyxTQUFDO29CQUNQLFFBQVEsRUFBRSx1QkFBdUI7aUJBQ3BDOzs7O2dCQVZRLFdBQVc7Ozs2QkFnQmYsV0FBVyxTQUFDLCtCQUErQjs0QkFLM0MsV0FBVyxTQUFDLHVDQUF1QztrQ0FLbkQsV0FBVyxTQUFDLHFDQUFxQzs7SUErQnRELG1DQUFDO0NBQUEsQUFqREQsSUFpREM7U0E3Q1ksNEJBQTRCOzs7SUFDekIsNENBQXdCOztBQThDeEM7SUFLSSxxQ0FBbUIsSUFBaUI7UUFBakIsU0FBSSxHQUFKLElBQUksQ0FBYTtJQUNwQyxDQUFDO0lBRUQsc0JBQ0ksbURBQVU7Ozs7UUFEZDtZQUVJLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQzlFLENBQUM7OztPQUFBO0lBRUQsc0JBQ0ksa0RBQVM7Ozs7UUFEYjtZQUVJLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQzdFLENBQUM7OztPQUFBO0lBRUQsc0JBQ0ksd0RBQWU7Ozs7UUFEbkI7WUFFSSxPQUFPLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEtBQUssV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUNwRixDQUFDOzs7T0FBQTs7Ozs7SUFFTyx3REFBa0I7Ozs7SUFBMUI7Ozs7WUFHVSwyQkFBMkIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLE1BQU07O1lBQ3RGLG1CQUFtQixHQUFHLENBQUM7UUFDM0IsSUFBSSwyQkFBMkIsR0FBRyxDQUFDLEVBQUU7O2dCQUMzQixPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQywyQkFBMkIsR0FBRyxDQUFDLENBQUM7WUFDaEcsbUJBQW1CLEdBQUcsT0FBTyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDO1NBQ2xFOztZQUNLLG9CQUFvQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxXQUFXOztZQUMxRSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO1FBRS9CLElBQUksTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNkLDJFQUEyRTtZQUMzRSxJQUFJLG1CQUFtQixHQUFHLG9CQUFvQixJQUFJLENBQUMsRUFBRTtnQkFDakQsT0FBTyxXQUFXLENBQUMsYUFBYSxDQUFDO2FBQ3BDO1lBQ0QsT0FBTyxXQUFXLENBQUMsTUFBTSxDQUFDO1NBQzdCO2FBQU07WUFDSCxPQUFPLFdBQVcsQ0FBQyxPQUFPLENBQUM7U0FDOUI7SUFDTCxDQUFDOztnQkE1Q0osU0FBUyxTQUFDO29CQUNQLFFBQVEsRUFBRSxzQkFBc0I7aUJBQ25DOzs7O2dCQTdEUSxXQUFXOzs7NkJBbUVmLFdBQVcsU0FBQywrQkFBK0I7NEJBSzNDLFdBQVcsU0FBQyx1Q0FBdUM7a0NBS25ELFdBQVcsU0FBQyxxQ0FBcUM7O0lBMkJ0RCxrQ0FBQztDQUFBLEFBN0NELElBNkNDO1NBekNZLDJCQUEyQjs7O0lBQ3hCLDJDQUF3Qjs7QUEwQ3hDO0lBS0kscUNBQW1CLFFBQTBCO1FBQTFCLGFBQVEsR0FBUixRQUFRLENBQWtCO0lBQzdDLENBQUM7O2dCQU5KLFNBQVMsU0FBQztvQkFDUCxRQUFRLEVBQUUsVUFBVTtpQkFDdkI7Ozs7Z0JBOUdHLFdBQVc7O0lBbUhmLGtDQUFDO0NBQUEsQUFQRCxJQU9DO1NBSlksMkJBQTJCOzs7SUFFeEIsK0NBQWlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBEaXJlY3RpdmUsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgVGVtcGxhdGVSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJZ3hUYWJzQmFzZSB9IGZyb20gJy4vdGFicy5jb21tb24nO1xuXG5lbnVtIEJ1dHRvblN0eWxlIHtcbiAgICBWSVNJQkxFID0gJ3Zpc2libGUnLFxuICAgIEhJRERFTiA9ICdoaWRkZW4nLFxuICAgIE5PVF9ESVNQTEFZRUQgPSAnbm90X2Rpc3BsYXllZCdcbn1cblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbaWd4UmlnaHRCdXR0b25TdHlsZV0nXG59KVxuXG5leHBvcnQgY2xhc3MgSWd4UmlnaHRCdXR0b25TdHlsZURpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IocHVibGljIHRhYnM6IElneFRhYnNCYXNlKSB7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtdGFic19faGVhZGVyLWJ1dHRvbicpXG4gICAgZ2V0IHZpc2libGVDU1MoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAodGhpcy5nZXRSaWdodEJ1dHRvblN0eWxlKCkgPT09IEJ1dHRvblN0eWxlLlZJU0lCTEUpID8gdHJ1ZSA6IGZhbHNlO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LXRhYnNfX2hlYWRlci1idXR0b24tLWhpZGRlbicpXG4gICAgZ2V0IGhpZGRlbkNTUygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmdldFJpZ2h0QnV0dG9uU3R5bGUoKSA9PT0gQnV0dG9uU3R5bGUuSElEREVOKSA/IHRydWUgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC10YWJzX19oZWFkZXItYnV0dG9uLS1ub25lJylcbiAgICBnZXQgbm90RGlzcGxheWVkQ1NTKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKHRoaXMuZ2V0UmlnaHRCdXR0b25TdHlsZSgpID09PSBCdXR0b25TdHlsZS5OT1RfRElTUExBWUVEKSA/IHRydWUgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJpZ2h0QnV0dG9uU3R5bGUoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3Qgdmlld1BvcnRXaWR0aCA9IHRoaXMudGFicy52aWV3UG9ydC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuXG4gICAgICAgIC8vIFdlIHVzZSB0aGlzIGhhY2t5IHdheSB0byBnZXQgdGhlIHdpZHRoIG9mIHRoZSBpdGVtc0NvbnRhaW5lcixcbiAgICAgICAgLy8gYmVjYXVzZSB0aGVyZSBpcyBpbmNvbnNpc3RlbmN5IGluIElFIHdlIGNhbm5vdCB1c2Ugb2Zmc2V0V2lkdGggb3Igc2Nyb2xsT2Zmc2V0LlxuICAgICAgICBjb25zdCBpdGVtc0NvbnRhaW5lckNoaWxkcmVuQ291bnQgPSB0aGlzLnRhYnMuaXRlbXNDb250YWluZXIubmF0aXZlRWxlbWVudC5jaGlsZHJlbi5sZW5ndGg7XG4gICAgICAgIGxldCBpdGVtc0NvbnRhaW5lcldpZHRoID0gMDtcbiAgICAgICAgaWYgKGl0ZW1zQ29udGFpbmVyQ2hpbGRyZW5Db3VudCA+IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RUYWIgPSB0aGlzLnRhYnMuaXRlbXNDb250YWluZXIubmF0aXZlRWxlbWVudC5jaGlsZHJlbltpdGVtc0NvbnRhaW5lckNoaWxkcmVuQ291bnQgLSAyXTtcbiAgICAgICAgICAgIGl0ZW1zQ29udGFpbmVyV2lkdGggPSBsYXN0VGFiLm9mZnNldExlZnQgKyBsYXN0VGFiLm9mZnNldFdpZHRoO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhlYWRlckNvbnRhaW5lcldpZHRoID0gdGhpcy50YWJzLmhlYWRlckNvbnRhaW5lci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgICBjb25zdCBvZmZzZXQgPSB0aGlzLnRhYnMub2Zmc2V0O1xuICAgICAgICBjb25zdCB0b3RhbCA9IG9mZnNldCArIHZpZXdQb3J0V2lkdGg7XG5cbiAgICAgICAgLy8gRml4IGZvciBJRSAxMSwgYSBkaWZmZXJlbmNlIGlzIGFjY3VtdWxhdGVkIGZyb20gdGhlIHdpZHRocyBjYWxjdWxhdGlvbnMuXG4gICAgICAgIGlmIChpdGVtc0NvbnRhaW5lcldpZHRoIC0gaGVhZGVyQ29udGFpbmVyV2lkdGggPD0gMSAmJiBvZmZzZXQgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBCdXR0b25TdHlsZS5OT1RfRElTUExBWUVEO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGl0ZW1zQ29udGFpbmVyV2lkdGggPiB0b3RhbCkge1xuICAgICAgICAgICAgcmV0dXJuIEJ1dHRvblN0eWxlLlZJU0lCTEU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gQnV0dG9uU3R5bGUuSElEREVOO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tpZ3hMZWZ0QnV0dG9uU3R5bGVdJ1xufSlcblxuZXhwb3J0IGNsYXNzIElneExlZnRCdXR0b25TdHlsZURpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IocHVibGljIHRhYnM6IElneFRhYnNCYXNlKSB7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtdGFic19faGVhZGVyLWJ1dHRvbicpXG4gICAgZ2V0IHZpc2libGVDU1MoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAodGhpcy5nZXRMZWZ0QnV0dG9uU3R5bGUoKSA9PT0gQnV0dG9uU3R5bGUuVklTSUJMRSkgPyB0cnVlIDogZmFsc2U7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtdGFic19faGVhZGVyLWJ1dHRvbi0taGlkZGVuJylcbiAgICBnZXQgaGlkZGVuQ1NTKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKHRoaXMuZ2V0TGVmdEJ1dHRvblN0eWxlKCkgPT09IEJ1dHRvblN0eWxlLkhJRERFTikgPyB0cnVlIDogZmFsc2U7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtdGFic19faGVhZGVyLWJ1dHRvbi0tbm9uZScpXG4gICAgZ2V0IG5vdERpc3BsYXllZENTUygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmdldExlZnRCdXR0b25TdHlsZSgpID09PSBCdXR0b25TdHlsZS5OT1RfRElTUExBWUVEKSA/IHRydWUgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldExlZnRCdXR0b25TdHlsZSgpOiBzdHJpbmcge1xuICAgICAgICAvLyBXZSB1c2UgdGhpcyBoYWNreSB3YXkgdG8gZ2V0IHRoZSB3aWR0aCBvZiB0aGUgaXRlbXNDb250YWluZXIsXG4gICAgICAgIC8vIGJlY2F1c2UgdGhlcmUgaXMgaW5jb25zaXN0ZW5jeSBpbiBJRSB3ZSBjYW5ub3QgdXNlIG9mZnNldFdpZHRoIG9yIHNjcm9sbE9mZnNldC5cbiAgICAgICAgY29uc3QgaXRlbXNDb250YWluZXJDaGlsZHJlbkNvdW50ID0gdGhpcy50YWJzLml0ZW1zQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgICBsZXQgaXRlbXNDb250YWluZXJXaWR0aCA9IDA7XG4gICAgICAgIGlmIChpdGVtc0NvbnRhaW5lckNoaWxkcmVuQ291bnQgPiAxKSB7XG4gICAgICAgICAgICBjb25zdCBsYXN0VGFiID0gdGhpcy50YWJzLml0ZW1zQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5baXRlbXNDb250YWluZXJDaGlsZHJlbkNvdW50IC0gMl07XG4gICAgICAgICAgICBpdGVtc0NvbnRhaW5lcldpZHRoID0gbGFzdFRhYi5vZmZzZXRMZWZ0ICsgbGFzdFRhYi5vZmZzZXRXaWR0aDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoZWFkZXJDb250YWluZXJXaWR0aCA9IHRoaXMudGFicy5oZWFkZXJDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gdGhpcy50YWJzLm9mZnNldDtcblxuICAgICAgICBpZiAob2Zmc2V0ID09PSAwKSB7XG4gICAgICAgICAgICAvLyBGaXggZm9yIElFIDExLCBhIGRpZmZlcmVuY2UgaXMgYWNjdW11bGF0ZWQgZnJvbSB0aGUgd2lkdGhzIGNhbGN1bGF0aW9ucy5cbiAgICAgICAgICAgIGlmIChpdGVtc0NvbnRhaW5lcldpZHRoIC0gaGVhZGVyQ29udGFpbmVyV2lkdGggPD0gMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBCdXR0b25TdHlsZS5OT1RfRElTUExBWUVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIEJ1dHRvblN0eWxlLkhJRERFTjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBCdXR0b25TdHlsZS5WSVNJQkxFO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tpZ3hUYWJdJ1xufSlcbmV4cG9ydCBjbGFzcyBJZ3hUYWJJdGVtVGVtcGxhdGVEaXJlY3RpdmUge1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7XG4gICAgfVxufVxuIl19