UNPKG

@blox/material

Version:

Material Components for Angular

195 lines 25.6 kB
import { Directive, ElementRef, HostBinding, Input, Renderer2 } from '@angular/core'; import { MDCLinearProgressFoundation } from '@material/linear-progress'; import { asBoolean } from '../../utils/value.utils'; const CLASS_INDETERMINATE = 'mdc-linear-progress--indeterminate'; const CLASS_REVERSED = 'mdc-linear-progress--reversed'; /** * Directive for creating a Material Design linear progress indicator. * The current implementation will add and manage all DOM child elements that * are required for the wrapped <code>mdc-linear-progress</code> component. * Future implementations will also support supplying (customized) * DOM children. */ export class MdcLinearProgressDirective { constructor(_rndr, _root) { this._rndr = _rndr; this._root = _root; /** @internal */ this._cls = true; /** @internal */ this._role = 'progressbar'; /** @internal */ this._min = 0; /** @internal */ this._max = 1; /** @internal */ this._indeterminate = false; /** @internal */ this._reverse = false; this._progress = 0; this._buffer = 1; this._closed = false; this._elmBuffer = null; this._elmPrimaryBar = null; /** * Label indicationg how the progress bar should be announced to the user. * Determines the ària-label` attribute value. */ this.label = null; this.mdcAdapter = { addClass: (className) => { if (className !== CLASS_INDETERMINATE && className != CLASS_REVERSED) this._rndr.addClass(this._root.nativeElement, className); }, getPrimaryBar: () => this._elmPrimaryBar, getBuffer: () => this._elmBuffer, hasClass: (className) => { if (className === CLASS_INDETERMINATE) return this._indeterminate; if (className === CLASS_REVERSED) return this._reverse; return this._root.nativeElement.classList.contains(className); }, removeClass: (className) => { if (className !== CLASS_INDETERMINATE && className != CLASS_REVERSED) this._rndr.removeClass(this._root.nativeElement, className); }, setStyle: (el, styleProperty, value) => { this._rndr.setStyle(el, styleProperty, value); }, forceLayout: () => this._root.nativeElement.offsetWidth, removeAttribute: (name) => this._rndr.removeAttribute(this._root.nativeElement, name), setAttribute: (name, value) => this._rndr.setAttribute(this._root.nativeElement, name, value) }; this.foundation = null; } ngAfterContentInit() { this.initElements(); this.foundation = new MDCLinearProgressFoundation(this.mdcAdapter); this.foundation.init(); this.foundation.setProgress(this._progress); this.foundation.setBuffer(this._buffer); if (this._closed) this.foundation.close(); } ngOnDestroy() { var _a; (_a = this.foundation) === null || _a === void 0 ? void 0 : _a.destroy(); this._elmPrimaryBar = null; this._elmBuffer = null; } initElements() { this.addElement(this._root.nativeElement, 'div', ['mdc-linear-progress__buffering-dots']); this._elmBuffer = this.addElement(this._root.nativeElement, 'div', ['mdc-linear-progress__buffer']); this._elmPrimaryBar = this.addElement(this._root.nativeElement, 'div', ['mdc-linear-progress__bar', 'mdc-linear-progress__primary-bar']); this.addElement(this._elmPrimaryBar, 'span', ['mdc-linear-progress__bar-inner']); const secondaryBar = this.addElement(this._root.nativeElement, 'div', ['mdc-linear-progress__bar', 'mdc-linear-progress__secondary-bar']); this.addElement(secondaryBar, 'span', ['mdc-linear-progress__bar-inner']); } addElement(parent, element, classNames) { let child = this._rndr.createElement(element); classNames.forEach(name => { this._rndr.addClass(child, name); }); this._rndr.appendChild(parent, child); return child; } /** * Puts the progress indicator in 'indeterminate' state, signaling * that the exact progress on a measured task is not known. */ get indeterminate() { return this._indeterminate; } set indeterminate(value) { let newValue = asBoolean(value); if (newValue !== this._indeterminate) { this._indeterminate = newValue; if (this.foundation) { this.foundation.setDeterminate(!this._indeterminate); if (!this._indeterminate) { this.foundation.setProgress(this._progress); this.foundation.setBuffer(this._buffer); } } } } /** * Reverses the direction of the linear progress indicator. */ get reversed() { return this._reverse; } set reversed(value) { var _a; this._reverse = asBoolean(value); (_a = this.foundation) === null || _a === void 0 ? void 0 : _a.setReverse(this._reverse); } /** * Set the progress, the value should be between [0, 1]. */ get progressValue() { return this._progress; } set progressValue(value) { var _a; this._progress = +value; (_a = this.foundation) === null || _a === void 0 ? void 0 : _a.setProgress(this._progress); } /** * Set the buffer progress, the value should be between [0, 1]. */ get bufferValue() { return this._buffer; } set bufferValue(value) { var _a; this._buffer = +value; (_a = this.foundation) === null || _a === void 0 ? void 0 : _a.setBuffer(this._buffer); } /** * When set to true this closes (animates away) the progress bar, * when set to false this opens (animates into view) the progress bar. */ get closed() { return this._closed; } set closed(value) { var _a, _b; let newValue = asBoolean(value); if (newValue !== this._closed) { this._closed = newValue; if (newValue) (_a = this.foundation) === null || _a === void 0 ? void 0 : _a.close(); else (_b = this.foundation) === null || _b === void 0 ? void 0 : _b.open(); } } } MdcLinearProgressDirective.decorators = [ { type: Directive, args: [{ selector: '[mdcLinearProgress]' },] } ]; MdcLinearProgressDirective.ctorParameters = () => [ { type: Renderer2 }, { type: ElementRef } ]; MdcLinearProgressDirective.propDecorators = { _cls: [{ type: HostBinding, args: ['class.mdc-linear-progress',] }], _role: [{ type: HostBinding, args: ['attr.role',] }], _min: [{ type: HostBinding, args: ['attr.aria-valuemin',] }], _max: [{ type: HostBinding, args: ['attr.aria-valuemax',] }], _indeterminate: [{ type: HostBinding, args: ['class.' + CLASS_INDETERMINATE,] }], _reverse: [{ type: HostBinding, args: ['class.' + CLASS_REVERSED,] }], label: [{ type: HostBinding, args: ['attr.aria-label',] }, { type: Input }], indeterminate: [{ type: Input }, { type: HostBinding, args: ['class.' + CLASS_INDETERMINATE,] }], reversed: [{ type: Input }, { type: HostBinding, args: ['class.' + CLASS_REVERSED,] }], progressValue: [{ type: Input }], bufferValue: [{ type: Input }], closed: [{ type: Input }] }; export const LINEAR_PROGRESS_DIRECTIVES = [ MdcLinearProgressDirective ]; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWRjLmxpbmVhci1wcm9ncmVzcy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9saW5lYXItcHJvZ3Jlc3MvbWRjLmxpbmVhci1wcm9ncmVzcy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFvQixTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQWEsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xILE9BQU8sRUFBRSwyQkFBMkIsRUFBNEIsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFcEQsTUFBTSxtQkFBbUIsR0FBRyxvQ0FBb0MsQ0FBQztBQUNqRSxNQUFNLGNBQWMsR0FBRywrQkFBK0IsQ0FBQztBQUV2RDs7Ozs7O0dBTUc7QUFJSCxNQUFNLE9BQU8sMEJBQTBCO0lBbURuQyxZQUFvQixLQUFnQixFQUFVLEtBQWlCO1FBQTNDLFVBQUssR0FBTCxLQUFLLENBQVc7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFZO1FBbEQvRCxnQkFBZ0I7UUFDbUMsU0FBSSxHQUFHLElBQUksQ0FBQztRQUMvRCxnQkFBZ0I7UUFDVSxVQUFLLEdBQVcsYUFBYSxDQUFDO1FBQ3hELGdCQUFnQjtRQUNtQixTQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLGdCQUFnQjtRQUNtQixTQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLGdCQUFnQjtRQUM2QixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUNwRSxnQkFBZ0I7UUFDd0IsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqRCxjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsWUFBTyxHQUFHLENBQUMsQ0FBQztRQUNaLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsZUFBVSxHQUF1QixJQUFJLENBQUM7UUFDdEMsbUJBQWMsR0FBdUIsSUFB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LEdBQUcsY0FBYzs0QkFlOUMsS0FBSzswQkFlTCxLQUFLO3FCQWdCTCxLQUFLOztBQW1CVixNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRztJQUN0QywwQkFBMEI7Q0FDN0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyQ29udGVudEluaXQsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkRlc3Ryb3ksIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNRENMaW5lYXJQcm9ncmVzc0ZvdW5kYXRpb24sIE1EQ0xpbmVhclByb2dyZXNzQWRhcHRlciB9IGZyb20gJ0BtYXRlcmlhbC9saW5lYXItcHJvZ3Jlc3MnO1xyXG5pbXBvcnQgeyBhc0Jvb2xlYW4gfSBmcm9tICcuLi8uLi91dGlscy92YWx1ZS51dGlscyc7XHJcblxyXG5jb25zdCBDTEFTU19JTkRFVEVSTUlOQVRFID0gJ21kYy1saW5lYXItcHJvZ3Jlc3MtLWluZGV0ZXJtaW5hdGUnO1xyXG5jb25zdCBDTEFTU19SRVZFUlNFRCA9ICdtZGMtbGluZWFyLXByb2dyZXNzLS1yZXZlcnNlZCc7XHJcblxyXG4vKipcclxuICogRGlyZWN0aXZlIGZvciBjcmVhdGluZyBhIE1hdGVyaWFsIERlc2lnbiBsaW5lYXIgcHJvZ3Jlc3MgaW5kaWNhdG9yLlxyXG4gKiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiB3aWxsIGFkZCBhbmQgbWFuYWdlIGFsbCBET00gY2hpbGQgZWxlbWVudHMgdGhhdFxyXG4gKiBhcmUgcmVxdWlyZWQgZm9yIHRoZSB3cmFwcGVkIDxjb2RlPm1kYy1saW5lYXItcHJvZ3Jlc3M8L2NvZGU+IGNvbXBvbmVudC5cclxuICogRnV0dXJlIGltcGxlbWVudGF0aW9ucyB3aWxsIGFsc28gc3VwcG9ydCBzdXBwbHlpbmcgKGN1c3RvbWl6ZWQpXHJcbiAqIERPTSBjaGlsZHJlbi5cclxuICovXHJcbkBEaXJlY3RpdmUoe1xyXG4gICAgc2VsZWN0b3I6ICdbbWRjTGluZWFyUHJvZ3Jlc3NdJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTWRjTGluZWFyUHJvZ3Jlc3NEaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3kge1xyXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5tZGMtbGluZWFyLXByb2dyZXNzJykgcmVhZG9ubHkgX2NscyA9IHRydWU7XHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpIF9yb2xlOiBzdHJpbmcgPSAncHJvZ3Jlc3NiYXInO1xyXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtdmFsdWVtaW4nKSBfbWluID0gMDtcclxuICAgIC8qKiBAaW50ZXJuYWwgKi9cclxuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXZhbHVlbWF4JykgX21heCA9IDE7XHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLicgKyBDTEFTU19JTkRFVEVSTUlOQVRFKSBfaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xyXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy4nICsgQ0xBU1NfUkVWRVJTRUQpIF9yZXZlcnNlID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIF9wcm9ncmVzcyA9IDA7XHJcbiAgICBwcml2YXRlIF9idWZmZXIgPSAxO1xyXG4gICAgcHJpdmF0ZSBfY2xvc2VkID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIF9lbG1CdWZmZXI6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XHJcbiAgICBwcml2YXRlIF9lbG1QcmltYXJ5QmFyOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xyXG4gICAgLyoqXHJcbiAgICAgKiBMYWJlbCBpbmRpY2F0aW9uZyBob3cgdGhlIHByb2dyZXNzIGJhciBzaG91bGQgYmUgYW5ub3VuY2VkIHRvIHRoZSB1c2VyLlxyXG4gICAgICogRGV0ZXJtaW5lcyB0aGUgw6ByaWEtbGFiZWxgIGF0dHJpYnV0ZSB2YWx1ZS5cclxuICAgICAqL1xyXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbGFiZWwnKSBASW5wdXQoKSBsYWJlbDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgcHJpdmF0ZSBtZGNBZGFwdGVyOiBNRENMaW5lYXJQcm9ncmVzc0FkYXB0ZXIgPSB7XHJcbiAgICAgICAgYWRkQ2xhc3M6IChjbGFzc05hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICBpZiAoY2xhc3NOYW1lICE9PSBDTEFTU19JTkRFVEVSTUlOQVRFICYmIGNsYXNzTmFtZSAhPSBDTEFTU19SRVZFUlNFRClcclxuICAgICAgICAgICAgICAgIHRoaXMuX3JuZHIuYWRkQ2xhc3ModGhpcy5fcm9vdC5uYXRpdmVFbGVtZW50LCBjbGFzc05hbWUpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZ2V0UHJpbWFyeUJhcjogKCkgPT4gdGhpcy5fZWxtUHJpbWFyeUJhcixcclxuICAgICAgICBnZXRCdWZmZXI6ICgpID0+IHRoaXMuX2VsbUJ1ZmZlcixcclxuICAgICAgICBoYXNDbGFzczogKGNsYXNzTmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjbGFzc05hbWUgPT09IENMQVNTX0lOREVURVJNSU5BVEUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5kZXRlcm1pbmF0ZTtcclxuICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gQ0xBU1NfUkVWRVJTRUQpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV2ZXJzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Jvb3QubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHJlbW92ZUNsYXNzOiAoY2xhc3NOYW1lOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSAhPT0gQ0xBU1NfSU5ERVRFUk1JTkFURSAmJiBjbGFzc05hbWUgIT0gQ0xBU1NfUkVWRVJTRUQpXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ybmRyLnJlbW92ZUNsYXNzKHRoaXMuX3Jvb3QubmF0aXZlRWxlbWVudCwgY2xhc3NOYW1lKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldFN0eWxlOiAoZWwsIHN0eWxlUHJvcGVydHksIHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX3JuZHIuc2V0U3R5bGUoZWwsIHN0eWxlUHJvcGVydHksIHZhbHVlKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGZvcmNlTGF5b3V0OiAoKSA9PiB0aGlzLl9yb290Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgsXHJcbiAgICAgICAgcmVtb3ZlQXR0cmlidXRlOiAobmFtZSkgPT4gdGhpcy5fcm5kci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5fcm9vdC5uYXRpdmVFbGVtZW50LCBuYW1lKSxcclxuICAgICAgICBzZXRBdHRyaWJ1dGU6IChuYW1lLCB2YWx1ZSkgPT4gdGhpcy5fcm5kci5zZXRBdHRyaWJ1dGUodGhpcy5fcm9vdC5uYXRpdmVFbGVtZW50LCBuYW1lLCB2YWx1ZSlcclxuICAgIH07XHJcbiAgICBwcml2YXRlIGZvdW5kYXRpb246IE1EQ0xpbmVhclByb2dyZXNzRm91bmRhdGlvbiB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX3JuZHI6IFJlbmRlcmVyMiwgcHJpdmF0ZSBfcm9vdDogRWxlbWVudFJlZikge1xyXG4gICAgfVxyXG5cclxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcclxuICAgICAgICB0aGlzLmluaXRFbGVtZW50cygpO1xyXG4gICAgICAgIHRoaXMuZm91bmRhdGlvbiA9IG5ldyBNRENMaW5lYXJQcm9ncmVzc0ZvdW5kYXRpb24odGhpcy5tZGNBZGFwdGVyKTtcclxuICAgICAgICB0aGlzLmZvdW5kYXRpb24uaW5pdCgpO1xyXG4gICAgICAgIHRoaXMuZm91bmRhdGlvbi5zZXRQcm9ncmVzcyh0aGlzLl9wcm9ncmVzcyk7XHJcbiAgICAgICAgdGhpcy5mb3VuZGF0aW9uLnNldEJ1ZmZlcih0aGlzLl9idWZmZXIpO1xyXG4gICAgICAgIGlmICh0aGlzLl9jbG9zZWQpXHJcbiAgICAgICAgICAgIHRoaXMuZm91bmRhdGlvbi5jbG9zZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuZm91bmRhdGlvbj8uZGVzdHJveSgpO1xyXG4gICAgICAgIHRoaXMuX2VsbVByaW1hcnlCYXIgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX2VsbUJ1ZmZlciA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0RWxlbWVudHMoKSB7XHJcbiAgICAgICAgdGhpcy5hZGRFbGVtZW50KHRoaXMuX3Jvb3QubmF0aXZlRWxlbWVudCwgJ2RpdicsIFsnbWRjLWxpbmVhci1wcm9ncmVzc19fYnVmZmVyaW5nLWRvdHMnXSk7XHJcbiAgICAgICAgdGhpcy5fZWxtQnVmZmVyID0gdGhpcy5hZGRFbGVtZW50KHRoaXMuX3Jvb3QubmF0aXZlRWxlbWVudCwgJ2RpdicsIFsnbWRjLWxpbmVhci1wcm9ncmVzc19fYnVmZmVyJ10pO1xyXG4gICAgICAgIHRoaXMuX2VsbVByaW1hcnlCYXIgPSB0aGlzLmFkZEVsZW1lbnQodGhpcy5fcm9vdC5uYXRpdmVFbGVtZW50LCAnZGl2JywgWydtZGMtbGluZWFyLXByb2dyZXNzX19iYXInLCAnbWRjLWxpbmVhci1wcm9ncmVzc19fcHJpbWFyeS1iYXInXSk7XHJcbiAgICAgICAgdGhpcy5hZGRFbGVtZW50KHRoaXMuX2VsbVByaW1hcnlCYXIhLCAnc3BhbicsIFsnbWRjLWxpbmVhci1wcm9ncmVzc19fYmFyLWlubmVyJ10pO1xyXG4gICAgICAgIGNvbnN0IHNlY29uZGFyeUJhciA9IHRoaXMuYWRkRWxlbWVudCh0aGlzLl9yb290Lm5hdGl2ZUVsZW1lbnQsICdkaXYnLCBbJ21kYy1saW5lYXItcHJvZ3Jlc3NfX2JhcicsICdtZGMtbGluZWFyLXByb2dyZXNzX19zZWNvbmRhcnktYmFyJ10pO1xyXG4gICAgICAgIHRoaXMuYWRkRWxlbWVudChzZWNvbmRhcnlCYXIsICdzcGFuJywgWydtZGMtbGluZWFyLXByb2dyZXNzX19iYXItaW5uZXInXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhZGRFbGVtZW50KHBhcmVudDogSFRNTEVsZW1lbnQsIGVsZW1lbnQ6IHN0cmluZywgY2xhc3NOYW1lczogc3RyaW5nW10pIHtcclxuICAgICAgICBsZXQgY2hpbGQgPSB0aGlzLl9ybmRyLmNyZWF0ZUVsZW1lbnQoZWxlbWVudCk7XHJcbiAgICAgICAgY2xhc3NOYW1lcy5mb3JFYWNoKG5hbWUgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9ybmRyLmFkZENsYXNzKGNoaWxkLCBuYW1lKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLl9ybmRyLmFwcGVuZENoaWxkKHBhcmVudCwgY2hpbGQpO1xyXG4gICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFB1dHMgdGhlIHByb2dyZXNzIGluZGljYXRvciBpbiAnaW5kZXRlcm1pbmF0ZScgc3RhdGUsIHNpZ25hbGluZ1xyXG4gICAgICogdGhhdCB0aGUgZXhhY3QgcHJvZ3Jlc3Mgb24gYSBtZWFzdXJlZCB0YXNrIGlzIG5vdCBrbm93bi5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuJyArIENMQVNTX0lOREVURVJNSU5BVEUpXHJcbiAgICBnZXQgaW5kZXRlcm1pbmF0ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faW5kZXRlcm1pbmF0ZTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgc2V0IGluZGV0ZXJtaW5hdGUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICBsZXQgbmV3VmFsdWUgPSBhc0Jvb2xlYW4odmFsdWUpO1xyXG4gICAgICAgIGlmIChuZXdWYWx1ZSAhPT0gdGhpcy5faW5kZXRlcm1pbmF0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9pbmRldGVybWluYXRlID0gbmV3VmFsdWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZvdW5kYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZm91bmRhdGlvbi5zZXREZXRlcm1pbmF0ZSghdGhpcy5faW5kZXRlcm1pbmF0ZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2luZGV0ZXJtaW5hdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvdW5kYXRpb24uc2V0UHJvZ3Jlc3ModGhpcy5fcHJvZ3Jlc3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm91bmRhdGlvbi5zZXRCdWZmZXIodGhpcy5fYnVmZmVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfaW5kZXRlcm1pbmF0ZTogYm9vbGVhbiB8ICcnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV2ZXJzZXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgbGluZWFyIHByb2dyZXNzIGluZGljYXRvci5cclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgQEhvc3RCaW5kaW5nKCdjbGFzcy4nICsgQ0xBU1NfUkVWRVJTRUQpXHJcbiAgICBnZXQgcmV2ZXJzZWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JldmVyc2U7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0IHJldmVyc2VkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5fcmV2ZXJzZSA9IGFzQm9vbGVhbih2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5mb3VuZGF0aW9uPy5zZXRSZXZlcnNlKHRoaXMuX3JldmVyc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9yZXZlcnNlZDogYm9vbGVhbiB8ICcnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSBwcm9ncmVzcywgdGhlIHZhbHVlIHNob3VsZCBiZSBiZXR3ZWVuIFswLCAxXS5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBwcm9ncmVzc1ZhbHVlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9ncmVzcztcclxuICAgIH1cclxuXHJcbiAgICBzZXQgcHJvZ3Jlc3NWYWx1ZSh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MgPSArdmFsdWU7XHJcbiAgICAgICAgdGhpcy5mb3VuZGF0aW9uPy5zZXRQcm9ncmVzcyh0aGlzLl9wcm9ncmVzcyk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3Byb2dyZXNzVmFsdWU6IG51bWJlciB8IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgYnVmZmVyIHByb2dyZXNzLCB0aGUgdmFsdWUgc2hvdWxkIGJlIGJldHdlZW4gWzAsIDFdLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IGJ1ZmZlclZhbHVlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9idWZmZXI7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0IGJ1ZmZlclZhbHVlKHZhbHVlOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLl9idWZmZXIgPSArdmFsdWU7XHJcbiAgICAgICAgdGhpcy5mb3VuZGF0aW9uPy5zZXRCdWZmZXIodGhpcy5fYnVmZmVyKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfYnVmZmVyVmFsdWU6IG51bWJlciB8IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZW4gc2V0IHRvIHRydWUgdGhpcyBjbG9zZXMgKGFuaW1hdGVzIGF3YXkpIHRoZSBwcm9ncmVzcyBiYXIsXHJcbiAgICAgKiB3aGVuIHNldCB0byBmYWxzZSB0aGlzIG9wZW5zIChhbmltYXRlcyBpbnRvIHZpZXcpIHRoZSBwcm9ncmVzcyBiYXIuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgY2xvc2VkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jbG9zZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0IGNsb3NlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIGxldCBuZXdWYWx1ZSA9IGFzQm9vbGVhbih2YWx1ZSk7XHJcbiAgICAgICAgaWYgKG5ld1ZhbHVlICE9PSB0aGlzLl9jbG9zZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5fY2xvc2VkID0gbmV3VmFsdWU7XHJcbiAgICAgICAgICAgIGlmIChuZXdWYWx1ZSlcclxuICAgICAgICAgICAgICAgIHRoaXMuZm91bmRhdGlvbj8uY2xvc2UoKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5mb3VuZGF0aW9uPy5vcGVuKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9jbG9zZWQ6IGJvb2xlYW4gfCAnJztcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IExJTkVBUl9QUk9HUkVTU19ESVJFQ1RJVkVTID0gW1xyXG4gICAgTWRjTGluZWFyUHJvZ3Jlc3NEaXJlY3RpdmVcclxuXTtcclxuIl19