UNPKG

ngx-ace-icy

Version:
416 lines 27.7 kB
/** * @fileoverview added by tsickle * Generated from: ngx-ace.component.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, EventEmitter, Output, ElementRef, Input, forwardRef, NgZone } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; export class NgxAceComponent { /** * @param {?} elementRef * @param {?} zone */ constructor(elementRef, zone) { this.elementRef = elementRef; this.zone = zone; this.textChanged = new EventEmitter(); this.textChange = new EventEmitter(); this.placeholder = '请输入内容'; this.style = {}; // tslint:disable-next-line:variable-name this._options = {}; // tslint:disable-next-line:variable-name this._readOnly = false; // tslint:disable-next-line:variable-name this._theme = 'monokai'; // tslint:disable-next-line:variable-name this._mode = 'sql'; // tslint:disable-next-line:variable-name this._autoUpdateContent = true; // tslint:disable-next-line:variable-name this._durationBeforeCallback = 0; // tslint:disable-next-line:variable-name this._text = ''; // tslint:disable-next-line:variable-name // private _onChange = (_: any) => { // } this.onChange = (/** * @return {?} */ () => null); // tslint:disable-next-line:variable-name // private _onTouched = () => { // } this.onTouched = (/** * @return {?} */ () => null); /** @type {?} */ const el = elementRef.nativeElement; this.zone.runOutsideAngular((/** * @return {?} */ () => { // tslint:disable-next-line:no-string-literal this._editor = ace['edit'](el); })); this._editor.setOptions({ enableBasicAutocompletion: true, enableSnippets: true, enableLiveAutocompletion: true, minLines: 1, maxLines: Infinity, }); this._editor.$blockScrolling = Infinity; this._editor.setShowPrintMargin(false); } /** * @return {?} */ ngOnInit() { this.init(); this.initEvents(); } /** * @return {?} */ ngOnDestroy() { this._editor.destroy(); } /** * @return {?} */ init() { this.setOptions(this._options || {}); this.setTheme(this._theme); this.setMode(this._mode); this.setReadOnly(this._readOnly); } /** * @return {?} */ initEvents() { this._editor.on('change', (/** * @return {?} */ () => this.updateText())); this._editor.on('paste', (/** * @return {?} */ () => this.updateText())); } /** * @return {?} */ updateText() { /** @type {?} */ const newVal = this._editor.getValue(); if (newVal === this.oldText) { return; } if (!this._durationBeforeCallback) { this._text = newVal; this.zone.run((/** * @return {?} */ () => { this.textChange.emit(newVal); this.textChanged.emit(newVal); this.onChange(newVal); })); } else { if (this.timeoutSaving) { clearTimeout(this.timeoutSaving); } this.timeoutSaving = setTimeout((/** * @return {?} */ () => { this._text = newVal; this.zone.run((/** * @return {?} */ () => { this.textChange.emit(newVal); this.textChanged.emit(newVal); })); this.timeoutSaving = null; }), this._durationBeforeCallback); } this.oldText = newVal; this.emptyMessage(); } /** * @param {?} options * @return {?} */ set options(options) { this.setOptions(options); } /** * @param {?} options * @return {?} */ setOptions(options) { this._options = options; this._editor.setOptions(options || {}); } /** * @param {?} readOnly * @return {?} */ set readOnly(readOnly) { this.setReadOnly(readOnly); } /** * @param {?} readOnly * @return {?} */ setReadOnly(readOnly) { this._readOnly = readOnly; this._editor.setReadOnly(readOnly); } /** * @param {?} theme * @return {?} */ set theme(theme) { this.setTheme(theme); } /** * @param {?} theme * @return {?} */ setTheme(theme) { this._theme = theme; this._editor.setTheme(`ace/theme/${theme}`); } /** * @param {?} mode * @return {?} */ set mode(mode) { this.setMode(mode); } /** * @param {?} mode * @return {?} */ setMode(mode) { this._mode = mode; if (typeof this._mode === 'object') { this._editor.getSession().setMode(this._mode); } else { this._editor.getSession().setMode(`ace/mode/${this._mode}`); } } /** * @return {?} */ get value() { return this.text; } /** * @param {?} value * @return {?} */ set value(value) { this.setText(value); } /** * @param {?} value * @return {?} */ writeValue(value) { this.setText(value); } /** * @param {?} fn * @return {?} */ registerOnChange(fn) { this.onChange = fn; } /** * @param {?} fn * @return {?} */ registerOnTouched(fn) { this.onTouched = fn; } /** * @return {?} */ get text() { return this._text; } /** * @param {?} text * @return {?} */ set text(text) { this.setText(text); } /** * @param {?} text * @return {?} */ setText(text) { if (text === null || text === undefined) { text = ''; } if (this._text !== text && this._autoUpdateContent === true) { this._text = text; this._editor.setValue(text); this.onChange(text); this._editor.clearSelection(); } this.emptyMessage(); } /** * @param {?} status * @return {?} */ set autoUpdateContent(status) { this.setAutoUpdateContent(status); } /** * @param {?} status * @return {?} */ setAutoUpdateContent(status) { this._autoUpdateContent = status; } /** * @param {?} num * @return {?} */ set durationBeforeCallback(num) { this.setDurationBeforeCallback(num); } /** * @param {?} num * @return {?} */ setDurationBeforeCallback(num) { this._durationBeforeCallback = num; } /** * 为空时增加placeholder提示信息 * @private * @return {?} */ emptyMessage() { /** @type {?} */ const shouldShow = !this._text.length; /** @type {?} */ let node = this._editor.renderer.emptyMessageNode; if (!shouldShow && node) { this._editor.renderer.scroller.removeChild(this._editor.renderer.emptyMessageNode); this._editor.renderer.emptyMessageNode = null; } else if (shouldShow && !node) { node = this._editor.renderer.emptyMessageNode = document.createElement('div'); node.textContent = this.placeholder; node.className = 'ace_emptyMessage'; node.style.padding = '0 9px'; node.style.position = 'absolute'; node.style.zIndex = 9; node.style.opacity = 0.5; this._editor.renderer.scroller.appendChild(node); } } /** * @return {?} */ getEditor() { return this._editor; } } NgxAceComponent.decorators = [ { type: Component, args: [{ selector: 'c-ngx-ace', template: '', providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef((/** * @return {?} */ () => NgxAceComponent)), multi: true }], styles: [':host { display:block;box-sizing: content-box;}'] }] } ]; /** @nocollapse */ NgxAceComponent.ctorParameters = () => [ { type: ElementRef }, { type: NgZone } ]; NgxAceComponent.propDecorators = { textChanged: [{ type: Output }], textChange: [{ type: Output }], placeholder: [{ type: Input }], style: [{ type: Input }], options: [{ type: Input }], readOnly: [{ type: Input }], theme: [{ type: Input }], mode: [{ type: Input }], value: [{ type: Input }], text: [{ type: Input }], autoUpdateContent: [{ type: Input }], durationBeforeCallback: [{ type: Input }] }; if (false) { /** @type {?} */ NgxAceComponent.prototype.textChanged; /** @type {?} */ NgxAceComponent.prototype.textChange; /** @type {?} */ NgxAceComponent.prototype.placeholder; /** @type {?} */ NgxAceComponent.prototype.style; /** @type {?} */ NgxAceComponent.prototype._options; /** @type {?} */ NgxAceComponent.prototype._readOnly; /** @type {?} */ NgxAceComponent.prototype._theme; /** @type {?} */ NgxAceComponent.prototype._mode; /** @type {?} */ NgxAceComponent.prototype._autoUpdateContent; /** @type {?} */ NgxAceComponent.prototype._editor; /** @type {?} */ NgxAceComponent.prototype._durationBeforeCallback; /** @type {?} */ NgxAceComponent.prototype._text; /** @type {?} */ NgxAceComponent.prototype.oldText; /** @type {?} */ NgxAceComponent.prototype.timeoutSaving; /** * @type {?} * @private */ NgxAceComponent.prototype.onChange; /** * @type {?} * @private */ NgxAceComponent.prototype.onTouched; /** * @type {?} * @private */ NgxAceComponent.prototype.elementRef; /** * @type {?} * @private */ NgxAceComponent.prototype.zone; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWFjZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtYWNlLWljeS8iLCJzb3VyY2VzIjpbIm5neC1hY2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFxQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUgsT0FBTyxFQUFFLGlCQUFpQixFQUF3QixNQUFNLGdCQUFnQixDQUFDO0FBY3pFLE1BQU0sT0FBTyxlQUFlOzs7OztJQXlCMUIsWUFBb0IsVUFBc0IsRUFBVSxJQUFZO1FBQTVDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFBVSxTQUFJLEdBQUosSUFBSSxDQUFRO1FBdkJ0RCxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDakMsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDakMsZ0JBQVcsR0FBRyxPQUFPLENBQUM7UUFDdEIsVUFBSyxHQUFRLEVBQUUsQ0FBQzs7UUFFekIsYUFBUSxHQUFRLEVBQUUsQ0FBQzs7UUFFbkIsY0FBUyxHQUFHLEtBQUssQ0FBQzs7UUFFbEIsV0FBTSxHQUFHLFNBQVMsQ0FBQzs7UUFFbkIsVUFBSyxHQUFRLEtBQUssQ0FBQzs7UUFFbkIsdUJBQWtCLEdBQUcsSUFBSSxDQUFDOztRQUkxQiw0QkFBdUIsR0FBRyxDQUFDLENBQUM7O1FBRTVCLFVBQUssR0FBRyxFQUFFLENBQUM7Ozs7UUFnSUgsYUFBUTs7O1FBQTRCLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBQzs7OztRQVMvQyxjQUFTOzs7UUFBZSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUM7O2NBcEluQyxFQUFFLEdBQUcsVUFBVSxDQUFDLGFBQWE7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUI7OztRQUFDLEdBQUcsRUFBRTtZQUMvQiw2Q0FBNkM7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SUFFbEIsaUNBQW1COztJQUVuQixnQ0FBbUI7O0lBRW5CLDZDQUEwQjs7SUFFMUIsa0NBQWE7O0lBRWIsa0RBQTRCOztJQUU1QixnQ0FBVzs7SUFDWCxrQ0FBYTs7SUFDYix3Q0FBbUI7Ozs7O0lBOEhuQixtQ0FBdUQ7Ozs7O0lBU3ZELG9DQUEyQzs7Ozs7SUFySS9CLHFDQUE4Qjs7Ozs7SUFBRSwrQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgT3V0cHV0LCBFbGVtZW50UmVmLCBJbnB1dCwgZm9yd2FyZFJlZiwgT25Jbml0LCBPbkRlc3Ryb3ksIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5kZWNsYXJlIHZhciBhY2U6IGFueTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYy1uZ3gtYWNlJyxcbiAgdGVtcGxhdGU6ICcnLFxuICBzdHlsZXM6IFsnOmhvc3QgeyBkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6IGNvbnRlbnQtYm94O30nXSxcbiAgcHJvdmlkZXJzOiBbe1xuICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE5neEFjZUNvbXBvbmVudCksXG4gICAgbXVsdGk6IHRydWVcbiAgfV1cbn0pXG5leHBvcnQgY2xhc3MgTmd4QWNlQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBAT3V0cHV0KCkgdGV4dENoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSB0ZXh0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICfor7fovpPlhaXlhoXlrrknO1xuICBASW5wdXQoKSBzdHlsZTogYW55ID0ge307XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lXG4gIF9vcHRpb25zOiBhbnkgPSB7fTtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnZhcmlhYmxlLW5hbWVcbiAgX3JlYWRPbmx5ID0gZmFsc2U7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lXG4gIF90aGVtZSA9ICdtb25va2FpJztcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnZhcmlhYmxlLW5hbWVcbiAgX21vZGU6IGFueSA9ICdzcWwnO1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZVxuICBfYXV0b1VwZGF0ZUNvbnRlbnQgPSB0cnVlO1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZVxuICBfZWRpdG9yOiBhbnk7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lXG4gIF9kdXJhdGlvbkJlZm9yZUNhbGxiYWNrID0gMDtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnZhcmlhYmxlLW5hbWVcbiAgX3RleHQgPSAnJztcbiAgb2xkVGV4dDogYW55O1xuICB0aW1lb3V0U2F2aW5nOiBhbnk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLCBwcml2YXRlIHpvbmU6IE5nWm9uZSkge1xuICAgIGNvbnN0IGVsID0gZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tc3RyaW5nLWxpdGVyYWxcbiAgICAgIHRoaXMuX2VkaXRvciA9IGFjZVsnZWRpdCddKGVsKTtcbiAgICB9KTtcbiAgICB0aGlzLl9lZGl0b3Iuc2V0T3B0aW9ucyh7XG4gICAgICBlbmFibGVCYXNpY0F1dG9jb21wbGV0aW9uOiB0cnVlLFxuICAgICAgZW5hYmxlU25pcHBldHM6IHRydWUsXG4gICAgICBlbmFibGVMaXZlQXV0b2NvbXBsZXRpb246IHRydWUsXG4gICAgICBtaW5MaW5lczogMSxcbiAgICAgIG1heExpbmVzOiBJbmZpbml0eSxcbiAgICB9KTtcbiAgICB0aGlzLl9lZGl0b3IuJGJsb2NrU2Nyb2xsaW5nID0gSW5maW5pdHk7XG4gICAgdGhpcy5fZWRpdG9yLnNldFNob3dQcmludE1hcmdpbihmYWxzZSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmluaXQoKTtcbiAgICB0aGlzLmluaXRFdmVudHMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX2VkaXRvci5kZXN0cm95KCk7XG4gIH1cblxuICBpbml0KCkge1xuICAgIHRoaXMuc2V0T3B0aW9ucyh0aGlzLl9vcHRpb25zIHx8IHt9KTtcbiAgICB0aGlzLnNldFRoZW1lKHRoaXMuX3RoZW1lKTtcbiAgICB0aGlzLnNldE1vZGUodGhpcy5fbW9kZSk7XG4gICAgdGhpcy5zZXRSZWFkT25seSh0aGlzLl9yZWFkT25seSk7XG4gIH1cblxuICBpbml0RXZlbnRzKCkge1xuICAgIHRoaXMuX2VkaXRvci5vbignY2hhbmdlJywgKCkgPT4gdGhpcy51cGRhdGVUZXh0KCkpO1xuICAgIHRoaXMuX2VkaXRvci5vbigncGFzdGUnLCAoKSA9PiB0aGlzLnVwZGF0ZVRleHQoKSk7XG4gIH1cblxuICB1cGRhdGVUZXh0KCkge1xuICAgIGNvbnN0IG5ld1ZhbCA9IHRoaXMuX2VkaXRvci5nZXRWYWx1ZSgpO1xuICAgIGlmIChuZXdWYWwgPT09IHRoaXMub2xkVGV4dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX2R1cmF0aW9uQmVmb3JlQ2FsbGJhY2spIHtcbiAgICAgIHRoaXMuX3RleHQgPSBuZXdWYWw7XG4gICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcbiAgICAgICAgdGhpcy50ZXh0Q2hhbmdlLmVtaXQobmV3VmFsKTtcbiAgICAgICAgdGhpcy50ZXh0Q2hhbmdlZC5lbWl0KG5ld1ZhbCk7XG4gICAgICAgIHRoaXMub25DaGFuZ2UobmV3VmFsKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy50aW1lb3V0U2F2aW5nKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRTYXZpbmcpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnRpbWVvdXRTYXZpbmcgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5fdGV4dCA9IG5ld1ZhbDtcbiAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgdGhpcy50ZXh0Q2hhbmdlLmVtaXQobmV3VmFsKTtcbiAgICAgICAgICB0aGlzLnRleHRDaGFuZ2VkLmVtaXQobmV3VmFsKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudGltZW91dFNhdmluZyA9IG51bGw7XG4gICAgICB9LCB0aGlzLl9kdXJhdGlvbkJlZm9yZUNhbGxiYWNrKTtcbiAgICB9XG4gICAgdGhpcy5vbGRUZXh0ID0gbmV3VmFsO1xuICAgIHRoaXMuZW1wdHlNZXNzYWdlKCk7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgb3B0aW9ucyhvcHRpb25zOiBhbnkpIHtcbiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gIH1cblxuICBzZXRPcHRpb25zKG9wdGlvbnM6IGFueSkge1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMuX2VkaXRvci5zZXRPcHRpb25zKG9wdGlvbnMgfHwge30pO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IHJlYWRPbmx5KHJlYWRPbmx5OiBhbnkpIHtcbiAgICB0aGlzLnNldFJlYWRPbmx5KHJlYWRPbmx5KTtcbiAgfVxuXG4gIHNldFJlYWRPbmx5KHJlYWRPbmx5OiBhbnkpIHtcbiAgICB0aGlzLl9yZWFkT25seSA9IHJlYWRPbmx5O1xuICAgIHRoaXMuX2VkaXRvci5zZXRSZWFkT25seShyZWFkT25seSk7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgdGhlbWUodGhlbWU6IGFueSkge1xuICAgIHRoaXMuc2V0VGhlbWUodGhlbWUpO1xuICB9XG5cbiAgc2V0VGhlbWUodGhlbWU6IGFueSkge1xuICAgIHRoaXMuX3RoZW1lID0gdGhlbWU7XG4gICAgdGhpcy5fZWRpdG9yLnNldFRoZW1lKGBhY2UvdGhlbWUvJHt0aGVtZX1gKTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBtb2RlKG1vZGU6IGFueSkge1xuICAgIHRoaXMuc2V0TW9kZShtb2RlKTtcbiAgfVxuXG4gIHNldE1vZGUobW9kZTogYW55KSB7XG4gICAgdGhpcy5fbW9kZSA9IG1vZGU7XG4gICAgaWYgKHR5cGVvZiB0aGlzLl9tb2RlID09PSAnb2JqZWN0Jykge1xuICAgICAgdGhpcy5fZWRpdG9yLmdldFNlc3Npb24oKS5zZXRNb2RlKHRoaXMuX21vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9lZGl0b3IuZ2V0U2Vzc2lvbigpLnNldE1vZGUoYGFjZS9tb2RlLyR7dGhpcy5fbW9kZX1gKTtcbiAgICB9XG4gIH1cblxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMudGV4dDtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRUZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xuICAgIHRoaXMuc2V0VGV4dCh2YWx1ZSk7XG4gIH1cblxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZVxuICAvLyBwcml2YXRlIF9vbkNoYW5nZSA9IChfOiBhbnkpID0+IHtcbiAgLy8gfVxuICBwcml2YXRlIG9uQ2hhbmdlOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCA9ICgpID0+IG51bGw7XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnZhcmlhYmxlLW5hbWVcbiAgLy8gcHJpdmF0ZSBfb25Ub3VjaGVkID0gKCkgPT4ge1xuICAvLyB9XG4gIHByaXZhdGUgb25Ub3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4gbnVsbDtcblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIGdldCB0ZXh0KCkge1xuICAgIHJldHVybiB0aGlzLl90ZXh0O1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IHRleHQodGV4dDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRUZXh0KHRleHQpO1xuICB9XG5cbiAgc2V0VGV4dCh0ZXh0OiBhbnkpIHtcbiAgICBpZiAodGV4dCA9PT0gbnVsbCB8fCB0ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRleHQgPSAnJztcbiAgICB9XG4gICAgaWYgKHRoaXMuX3RleHQgIT09IHRleHQgJiYgdGhpcy5fYXV0b1VwZGF0ZUNvbnRlbnQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuX3RleHQgPSB0ZXh0O1xuICAgICAgdGhpcy5fZWRpdG9yLnNldFZhbHVlKHRleHQpO1xuICAgICAgdGhpcy5vbkNoYW5nZSh0ZXh0KTtcbiAgICAgIHRoaXMuX2VkaXRvci5jbGVhclNlbGVjdGlvbigpO1xuICAgIH1cbiAgICB0aGlzLmVtcHR5TWVzc2FnZSgpO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGF1dG9VcGRhdGVDb250ZW50KHN0YXR1czogYW55KSB7XG4gICAgdGhpcy5zZXRBdXRvVXBkYXRlQ29udGVudChzdGF0dXMpO1xuICB9XG5cbiAgc2V0QXV0b1VwZGF0ZUNvbnRlbnQoc3RhdHVzOiBhbnkpIHtcbiAgICB0aGlzLl9hdXRvVXBkYXRlQ29udGVudCA9IHN0YXR1cztcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBkdXJhdGlvbkJlZm9yZUNhbGxiYWNrKG51bTogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXREdXJhdGlvbkJlZm9yZUNhbGxiYWNrKG51bSk7XG4gIH1cblxuICBzZXREdXJhdGlvbkJlZm9yZUNhbGxiYWNrKG51bTogbnVtYmVyKSB7XG4gICAgdGhpcy5fZHVyYXRpb25CZWZvcmVDYWxsYmFjayA9IG51bTtcbiAgfVxuXG4gIC8qKiDkuLrnqbrml7blop7liqBwbGFjZWhvbGRlcuaPkOekuuS/oeaBryAqL1xuICBwcml2YXRlIGVtcHR5TWVzc2FnZSgpOiB2b2lkIHtcbiAgICBjb25zdCBzaG91bGRTaG93ID0gIXRoaXMuX3RleHQubGVuZ3RoO1xuICAgIGxldCBub2RlID0gdGhpcy5fZWRpdG9yLnJlbmRlcmVyLmVtcHR5TWVzc2FnZU5vZGU7XG4gICAgaWYgKCFzaG91bGRTaG93ICYmIG5vZGUpIHtcbiAgICAgIHRoaXMuX2VkaXRvci5yZW5kZXJlci5zY3JvbGxlci5yZW1vdmVDaGlsZCh0aGlzLl9lZGl0b3IucmVuZGVyZXIuZW1wdHlNZXNzYWdlTm9kZSk7XG4gICAgICB0aGlzLl9lZGl0b3IucmVuZGVyZXIuZW1wdHlNZXNzYWdlTm9kZSA9IG51bGw7XG4gICAgfSBlbHNlIGlmIChzaG91bGRTaG93ICYmICFub2RlKSB7XG4gICAgICBub2RlID0gdGhpcy5fZWRpdG9yLnJlbmRlcmVyLmVtcHR5TWVzc2FnZU5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIG5vZGUudGV4dENvbnRlbnQgPSB0aGlzLnBsYWNlaG9sZGVyO1xuICAgICAgbm9kZS5jbGFzc05hbWUgPSAnYWNlX2VtcHR5TWVzc2FnZSc7XG4gICAgICBub2RlLnN0eWxlLnBhZGRpbmcgPSAnMCA5cHgnO1xuICAgICAgbm9kZS5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgICBub2RlLnN0eWxlLnpJbmRleCA9IDk7XG4gICAgICBub2RlLnN0eWxlLm9wYWNpdHkgPSAwLjU7XG4gICAgICB0aGlzLl9lZGl0b3IucmVuZGVyZXIuc2Nyb2xsZXIuYXBwZW5kQ2hpbGQobm9kZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RWRpdG9yKCkge1xuICAgIHJldHVybiB0aGlzLl9lZGl0b3I7XG4gIH1cblxufVxuIl19