ngx-ace-icy
Version:
angular9+版本以上ace语法编辑器
416 lines • 27.7 kB
JavaScript
/**
* @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