@blox/material
Version:
Material Components for Angular
166 lines • 19.3 kB
JavaScript
import { ContentChildren, Directive, ElementRef, HostBinding, Input, Renderer2 } from '@angular/core';
import { MDCFadingTabIndicatorFoundation, MDCSlidingTabIndicatorFoundation } from '@material/tab-indicator';
import { takeUntil } from 'rxjs/operators';
import { Subject } from 'rxjs';
/**
* Child directive for an `mdcTabIndicator`. Must be present, and can be assigned
* the value `underline` (default), or `icon`, to set the type of indicator.
*/
export class MdcTabIndicatorContentDirective {
constructor(_root) {
this._root = _root;
/** @internal */
this._cls = true;
/** @internal */
this._type = 'underline';
}
/**
* By default the indicator is represented as an underline. Set this value to
* `icon` to have it represented as an icon.
* You can use SVG, or font icon libraries to set the content icon.
*/
get mdcTabIndicatorContent() {
return this._type;
}
set mdcTabIndicatorContent(value) {
this._type = value === 'icon' ? value : 'underline';
}
get _underline() {
return this._type === 'underline';
}
get _icon() {
return this._type === 'icon';
}
}
MdcTabIndicatorContentDirective.decorators = [
{ type: Directive, args: [{
selector: '[mdcTabIndicatorContent]'
},] }
];
MdcTabIndicatorContentDirective.ctorParameters = () => [
{ type: ElementRef }
];
MdcTabIndicatorContentDirective.propDecorators = {
_cls: [{ type: HostBinding, args: ['class.mdc-tab-indicator__content',] }],
mdcTabIndicatorContent: [{ type: Input }],
_underline: [{ type: HostBinding, args: ['class.mdc-tab-indicator__content--underline',] }],
_icon: [{ type: HostBinding, args: ['class.mdc-tab-indicator__content--icon',] }]
};
/**
* Directive for the content (label and optional icon of the tab).
* This directive must be used as a child of an `mdcTab`, or `mdcTabRouter`.
*/
export class MdcTabIndicatorDirective {
constructor(rndr, root) {
this.rndr = rndr;
this.root = root;
/** @internal */
this._cls = true;
this.onDestroy$ = new Subject();
/** @internal */
this._type = 'slide';
this.active = false;
this.mdcAdapter = {
addClass: (className) => {
this.rndr.addClass(this.root.nativeElement, className);
},
removeClass: (className) => {
this.rndr.removeClass(this.root.nativeElement, className);
},
computeContentClientRect: () => this._content._root.nativeElement.getBoundingClientRect(),
setContentStyleProperty: (name, value) => this.rndr.setStyle(this._content._root.nativeElement, name, value)
};
this.foundation = null;
}
ngAfterContentInit() {
if (this._content) {
this.initFoundation();
}
this._contents.changes.pipe(takeUntil(this.onDestroy$)).subscribe(() => {
this.destroyFoundation();
if (this._content)
this.initFoundation();
});
}
ngOnDestroy() {
this.onDestroy$.next();
this.onDestroy$.complete();
this.destroyFoundation();
}
destroyFoundation() {
let destroy = this.foundation != null;
if (destroy) {
this.foundation.destroy();
this.mdcAdapter.removeClass('mdc-tab-indicator--active');
}
this.foundation = null;
return destroy;
}
initFoundation() {
this.foundation = this._type === 'fade' ?
new MDCFadingTabIndicatorFoundation(this.mdcAdapter) :
new MDCSlidingTabIndicatorFoundation(this.mdcAdapter);
this.foundation.init();
if (this.active) {
let clientRect = typeof this.active === 'boolean' ? undefined : this.active;
this.foundation.activate(clientRect);
}
}
/**
* By default the indicator is a sliding indicator: when another tab is activated, the indicator
* animates a slide to the new tab. Set this property `fade` to have a fading animation
* instead.
*/
get mdcTabIndicator() {
return this._type;
}
set mdcTabIndicator(value) {
let newValue = value === 'fade' ? value : 'slide';
if (newValue !== this._type) {
this._type = newValue;
if (this.destroyFoundation())
this.initFoundation();
}
}
/** @internal */
activate(previousIndicatorClientRect) {
this.active = previousIndicatorClientRect || true;
if (this.foundation)
this.foundation.activate(previousIndicatorClientRect);
}
/** @internal */
deactivate() {
this.active = false;
if (this.foundation)
this.foundation.deactivate();
}
/** @internal */
get _slide() {
return this._type === 'fade';
}
get _content() {
return this._contents && this._contents.length > 0 ? this._contents.first : null;
}
/** @internal */
_computeContentClientRect() {
var _a;
return (_a = this.foundation) === null || _a === void 0 ? void 0 : _a.computeContentClientRect();
}
}
MdcTabIndicatorDirective.decorators = [
{ type: Directive, args: [{
selector: '[mdcTabIndicator]'
},] }
];
MdcTabIndicatorDirective.ctorParameters = () => [
{ type: Renderer2 },
{ type: ElementRef }
];
MdcTabIndicatorDirective.propDecorators = {
_cls: [{ type: HostBinding, args: ['class.mdc-tab-indicator',] }],
_contents: [{ type: ContentChildren, args: [MdcTabIndicatorContentDirective,] }],
mdcTabIndicator: [{ type: Input }],
_slide: [{ type: HostBinding, args: ['class.mdc-tab-indicator--fade',] }]
};
export const TAB_INDICATOR_DIRECTIVES = [MdcTabIndicatorContentDirective, MdcTabIndicatorDirective];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWRjLnRhYi5pbmRpY2F0b3IuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdGFiL21kYy50YWIuaW5kaWNhdG9yLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9CLGVBQWUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUM3RCxXQUFXLEVBQUUsS0FBSyxFQUFhLFNBQVMsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQTZCLCtCQUErQixFQUFFLGdDQUFnQyxFQUEwQixNQUFNLHlCQUF5QixDQUFDO0FBQy9KLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9COzs7R0FHRztBQUlILE1BQU0sT0FBTywrQkFBK0I7SUFNeEMsWUFBbUIsS0FBaUI7UUFBakIsVUFBSyxHQUFMLEtBQUssQ0FBWTtRQUxwQyxnQkFBZ0I7UUFDMEMsU0FBSSxHQUFHLElBQUksQ0FBQztRQUN0RSxnQkFBZ0I7UUFDaEIsVUFBSyxHQUF5QixXQUFXLENBQUM7SUFFSCxDQUFDO0lBRXpDOzs7O1FBSUk7SUFDSCxJQUFhLHNCQUFzQjtRQUMvQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUVELElBQUksc0JBQXNCLENBQUMsS0FBMkI7UUFDbEQsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQTtJQUN2RCxDQUFDO0lBSUQsSUFBZ0UsVUFBVTtRQUN0RSxPQUFPLElBQUksQ0FBQyxLQUFLLEtBQUssV0FBVyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUEyRCxLQUFLO1FBQzVELE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxNQUFNLENBQUM7SUFDakMs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LENBQUM7SUFFRCxnQkFBZ0I7SUFDaEIsSUFBa0QsTUFBTTtRQUNwRCxPQUFPLElBQUksQ0FBQyxLQUFLLEtBQUssTUFBTSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxJQUFZLFFBQVE7UUFDaEIsT0FBTyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNyRixDQUFDO0lBRUQsZ0JBQWdCO0lBQ2hCLHlCQUF5Qjs7UUFDckIsYUFBTyxJQUFJLENBQUMsVUFBVSwwQ0FBRSx3QkFBd0IsR0FBRztJQUN2RCxDQUFDOzs7WUE5R0osU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxtQkFBbUI7YUFDaEM7OztZQWxEa0MsU0FBUztZQURXLFVBQVU7OzttQkFzRDVELFdBQVcsU0FBQyx5QkFBeUI7d0JBR3JDLGVBQWUsU0FBQywrQkFBK0I7OEJBNkQvQyxLQUFLO3FCQThCTCxXQUFXLFNBQUMsK0JBQStCOztBQWNoRCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLCtCQUErQixFQUFFLHdCQUF3QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlckNvbnRlbnRJbml0LCBDb250ZW50Q2hpbGRyZW4sIERpcmVjdGl2ZSwgRWxlbWVudFJlZixcbiAgICBIb3N0QmluZGluZywgSW5wdXQsIE9uRGVzdHJveSwgUmVuZGVyZXIyLCBRdWVyeUxpc3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1EQ1RhYkluZGljYXRvckZvdW5kYXRpb24sIE1EQ0ZhZGluZ1RhYkluZGljYXRvckZvdW5kYXRpb24sIE1EQ1NsaWRpbmdUYWJJbmRpY2F0b3JGb3VuZGF0aW9uLCBNRENUYWJJbmRpY2F0b3JBZGFwdGVyIH0gZnJvbSAnQG1hdGVyaWFsL3RhYi1pbmRpY2F0b3InO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG4vKipcbiAqIENoaWxkIGRpcmVjdGl2ZSBmb3IgYW4gYG1kY1RhYkluZGljYXRvcmAuIE11c3QgYmUgcHJlc2VudCwgYW5kIGNhbiBiZSBhc3NpZ25lZFxuICogdGhlIHZhbHVlIGB1bmRlcmxpbmVgIChkZWZhdWx0KSwgb3IgYGljb25gLCB0byBzZXQgdGhlIHR5cGUgb2YgaW5kaWNhdG9yLlxuICovXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1ttZGNUYWJJbmRpY2F0b3JDb250ZW50XSdcbn0pXG5leHBvcnQgY2xhc3MgTWRjVGFiSW5kaWNhdG9yQ29udGVudERpcmVjdGl2ZSB7XG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQnKSByZWFkb25seSBfY2xzID0gdHJ1ZTtcbiAgICAvKiogQGludGVybmFsICovXG4gICAgX3R5cGU6ICd1bmRlcmxpbmUnIHwgJ2ljb24nID0gJ3VuZGVybGluZSc7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgX3Jvb3Q6IEVsZW1lbnRSZWYpIHt9XG5cbiAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQgdGhlIGluZGljYXRvciBpcyByZXByZXNlbnRlZCBhcyBhbiB1bmRlcmxpbmUuIFNldCB0aGlzIHZhbHVlIHRvXG4gICAgICogYGljb25gIHRvIGhhdmUgaXQgcmVwcmVzZW50ZWQgYXMgYW4gaWNvbi5cbiAgICAgKiBZb3UgY2FuIHVzZSBTVkcsIG9yIGZvbnQgaWNvbiBsaWJyYXJpZXMgdG8gc2V0IHRoZSBjb250ZW50IGljb24uXG4gICAgICovXG4gICAgQElucHV0KCkgZ2V0IG1kY1RhYkluZGljYXRvckNvbnRlbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xuICAgIH1cblxuICAgIHNldCBtZGNUYWJJbmRpY2F0b3JDb250ZW50KHZhbHVlOiAndW5kZXJsaW5lJyB8ICdpY29uJykge1xuICAgICAgICB0aGlzLl90eXBlID0gdmFsdWUgPT09ICdpY29uJyA/IHZhbHVlIDogJ3VuZGVybGluZSdcbiAgICB9XG5cbiAgICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfbWRjVGFiSW5kaWNhdG9yQ29udGVudDogJ3VuZGVybGluZScgfCAnaWNvbicgfCAnJztcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MubWRjLXRhYi1pbmRpY2F0b3JfX2NvbnRlbnQtLXVuZGVybGluZScpIGdldCBfdW5kZXJsaW5lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHlwZSA9PT0gJ3VuZGVybGluZSc7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5tZGMtdGFiLWluZGljYXRvcl9fY29udGVudC0taWNvbicpIGdldCBfaWNvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGUgPT09ICdpY29uJztcbiAgICB9XG59XG5cbi8qKlxuICogRGlyZWN0aXZlIGZvciB0aGUgY29udGVudCAobGFiZWwgYW5kIG9wdGlvbmFsIGljb24gb2YgdGhlIHRhYikuXG4gKiBUaGlzIGRpcmVjdGl2ZSBtdXN0IGJlIHVzZWQgYXMgYSBjaGlsZCBvZiBhbiBgbWRjVGFiYCwgb3IgYG1kY1RhYlJvdXRlcmAuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW21kY1RhYkluZGljYXRvcl0nXG59KVxuZXhwb3J0IGNsYXNzIE1kY1RhYkluZGljYXRvckRpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MubWRjLXRhYi1pbmRpY2F0b3InKSByZWFkb25seSBfY2xzID0gdHJ1ZTtcbiAgICBwcml2YXRlIG9uRGVzdHJveSQ6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oTWRjVGFiSW5kaWNhdG9yQ29udGVudERpcmVjdGl2ZSkgX2NvbnRlbnRzPzogUXVlcnlMaXN0PE1kY1RhYkluZGljYXRvckNvbnRlbnREaXJlY3RpdmU+O1xuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBfdHlwZTogJ3NsaWRlJyB8ICdmYWRlJyA9ICdzbGlkZSc7XG4gICAgcHJpdmF0ZSBhY3RpdmU6IENsaWVudFJlY3QgfCBib29sZWFuID0gZmFsc2U7XG4gICAgXG4gICAgcHJpdmF0ZSBtZGNBZGFwdGVyOiBNRENUYWJJbmRpY2F0b3JBZGFwdGVyID0ge1xuICAgICAgICBhZGRDbGFzczogKGNsYXNzTmFtZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5ybmRyLmFkZENsYXNzKHRoaXMucm9vdC5uYXRpdmVFbGVtZW50LCBjbGFzc05hbWUpO1xuICAgICAgICB9LFxuICAgICAgICByZW1vdmVDbGFzczogKGNsYXNzTmFtZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5ybmRyLnJlbW92ZUNsYXNzKHRoaXMucm9vdC5uYXRpdmVFbGVtZW50LCBjbGFzc05hbWUpO1xuICAgICAgICB9LFxuICAgICAgICBjb21wdXRlQ29udGVudENsaWVudFJlY3Q6ICgpID0+IHRoaXMuX2NvbnRlbnQhLl9yb290Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgICAgIHNldENvbnRlbnRTdHlsZVByb3BlcnR5OiAobmFtZSwgdmFsdWUpID0+IHRoaXMucm5kci5zZXRTdHlsZSh0aGlzLl9jb250ZW50IS5fcm9vdC5uYXRpdmVFbGVtZW50LCBuYW1lLCB2YWx1ZSlcbiAgICB9O1xuICAgIHByaXZhdGUgZm91bmRhdGlvbjogTURDVGFiSW5kaWNhdG9yRm91bmRhdGlvbiB8IG51bGwgPSBudWxsO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBybmRyOiBSZW5kZXJlcjIsIHByaXZhdGUgcm9vdDogRWxlbWVudFJlZikge31cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2NvbnRlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdEZvdW5kYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jb250ZW50cyEuY2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95Rm91bmRhdGlvbigpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NvbnRlbnQpXG4gICAgICAgICAgICAgICAgdGhpcy5pbml0Rm91bmRhdGlvbigpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5vbkRlc3Ryb3kkLm5leHQoKTsgdGhpcy5vbkRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuZGVzdHJveUZvdW5kYXRpb24oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlc3Ryb3lGb3VuZGF0aW9uKCkge1xuICAgICAgICBsZXQgZGVzdHJveSA9IHRoaXMuZm91bmRhdGlvbiAhPSBudWxsO1xuICAgICAgICBpZiAoZGVzdHJveSkge1xuICAgICAgICAgICAgdGhpcy5mb3VuZGF0aW9uIS5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLm1kY0FkYXB0ZXIucmVtb3ZlQ2xhc3MoJ21kYy10YWItaW5kaWNhdG9yLS1hY3RpdmUnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvdW5kYXRpb24gPSBudWxsO1xuICAgICAgICByZXR1cm4gZGVzdHJveTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRGb3VuZGF0aW9uKCkge1xuICAgICAgICB0aGlzLmZvdW5kYXRpb24gPSB0aGlzLl90eXBlID09PSAnZmFkZScgP1xuICAgICAgICAgICAgbmV3IE1EQ0ZhZGluZ1RhYkluZGljYXRvckZvdW5kYXRpb24odGhpcy5tZGNBZGFwdGVyKSA6XG4gICAgICAgICAgICBuZXcgTURDU2xpZGluZ1RhYkluZGljYXRvckZvdW5kYXRpb24odGhpcy5tZGNBZGFwdGVyKTtcbiAgICAgICAgdGhpcy5mb3VuZGF0aW9uLmluaXQoKTtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlKSB7XG4gICAgICAgICAgICBsZXQgY2xpZW50UmVjdCA9IHR5cGVvZiB0aGlzLmFjdGl2ZSA9PT0gJ2Jvb2xlYW4nID8gdW5kZWZpbmVkIDogdGhpcy5hY3RpdmU7XG4gICAgICAgICAgICB0aGlzLmZvdW5kYXRpb24uYWN0aXZhdGUoY2xpZW50UmVjdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0IHRoZSBpbmRpY2F0b3IgaXMgYSBzbGlkaW5nIGluZGljYXRvcjogd2hlbiBhbm90aGVyIHRhYiBpcyBhY3RpdmF0ZWQsIHRoZSBpbmRpY2F0b3JcbiAgICAgKiBhbmltYXRlcyBhIHNsaWRlIHRvIHRoZSBuZXcgdGFiLiBTZXQgdGhpcyBwcm9wZXJ0eSBgZmFkZWAgdG8gaGF2ZSBhIGZhZGluZyBhbmltYXRpb25cbiAgICAgKiBpbnN0ZWFkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpIGdldCBtZGNUYWJJbmRpY2F0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xuICAgIH1cblxuICAgIHNldCBtZGNUYWJJbmRpY2F0b3IodmFsdWU6ICdzbGlkZScgfCAnZmFkZScpIHtcbiAgICAgICAgbGV0IG5ld1ZhbHVlOiAnc2xpZGUnIHwgJ2ZhZGUnID0gdmFsdWUgPT09ICdmYWRlJyA/IHZhbHVlIDogJ3NsaWRlJ1xuICAgICAgICBpZiAobmV3VmFsdWUgIT09IHRoaXMuX3R5cGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3R5cGUgPSBuZXdWYWx1ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmRlc3Ryb3lGb3VuZGF0aW9uKCkpXG4gICAgICAgICAgICAgICAgdGhpcy5pbml0Rm91bmRhdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX21kY1RhYkluZGljYXRvcjogJ3NsaWRlJyB8ICdmYWRlJyB8ICcnO1xuXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIGFjdGl2YXRlKHByZXZpb3VzSW5kaWNhdG9yQ2xpZW50UmVjdDogQ2xpZW50UmVjdCB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IHByZXZpb3VzSW5kaWNhdG9yQ2xpZW50UmVjdCB8fCB0cnVlO1xuICAgICAgICBpZiAodGhpcy5mb3VuZGF0aW9uKVxuICAgICAgICAgICAgdGhpcy5mb3VuZGF0aW9uLmFjdGl2YXRlKHByZXZpb3VzSW5kaWNhdG9yQ2xpZW50UmVjdCk7XG4gICAgfVxuXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIGRlYWN0aXZhdGUoKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmZvdW5kYXRpb24pXG4gICAgICAgICAgICB0aGlzLmZvdW5kYXRpb24uZGVhY3RpdmF0ZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLm1kYy10YWItaW5kaWNhdG9yLS1mYWRlJykgZ2V0IF9zbGlkZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGUgPT09ICdmYWRlJztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBfY29udGVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRlbnRzICYmIHRoaXMuX2NvbnRlbnRzLmxlbmd0aCA+IDAgPyB0aGlzLl9jb250ZW50cy5maXJzdCA6IG51bGw7XG4gICAgfVxuXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIF9jb21wdXRlQ29udGVudENsaWVudFJlY3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvdW5kYXRpb24/LmNvbXB1dGVDb250ZW50Q2xpZW50UmVjdCgpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IFRBQl9JTkRJQ0FUT1JfRElSRUNUSVZFUyA9IFtNZGNUYWJJbmRpY2F0b3JDb250ZW50RGlyZWN0aXZlLCBNZGNUYWJJbmRpY2F0b3JEaXJlY3RpdmVdO1xuIl19