ais-uploader
Version:
Simple uploader library for Angular 2+
429 lines • 28.5 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { ComponentFactoryResolver, Directive, ElementRef, HostListener, Input, Renderer2, ViewContainerRef, } from '@angular/core';
import { UploaderConfig } from '../models/uploader-config';
import { Subscription } from 'rxjs';
import { Output, EventEmitter } from '@angular/core';
import { AisUploaderComponent } from '../ais-uploader.component';
var UploaderDirective = /** @class */ (function () {
function UploaderDirective(factory, ref, viewContainerRef, renderer) {
this.factory = factory;
this.ref = ref;
this.viewContainerRef = viewContainerRef;
this.renderer = renderer;
this.onChange = new EventEmitter();
this.onProgress = new EventEmitter();
this.onError = new EventEmitter();
this._sub$ = new Subscription();
}
Object.defineProperty(UploaderDirective.prototype, "config", {
get: /**
* @return {?}
*/
function () {
return this._config;
},
set: /**
* @param {?} config
* @return {?}
*/
function (config) {
if (config === this._config) {
return;
}
this._config = config;
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
UploaderDirective.prototype.ngOnInit = /**
* @return {?}
*/
function () {
if (!this.config.apiUrl ||
!this.config.supportedFormats) {
this.onError.emit('Incorrect config!');
return;
}
this._setBtnContainer();
};
/**
* @return {?}
*/
UploaderDirective.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
this.viewContainerRef.clear();
if (this._clickFn) {
this._clickFn();
}
};
Object.defineProperty(UploaderDirective.prototype, "instance", {
// uploader instance
get:
// uploader instance
/**
* @return {?}
*/
function () {
if (!this._btnContainer) {
return;
}
return this._btnContainer.instance;
},
enumerable: true,
configurable: true
});
Object.defineProperty(UploaderDirective.prototype, "fileName", {
// selected file name
get:
// selected file name
/**
* @return {?}
*/
function () {
if (!this.instance) {
return;
}
return this.instance.fileName;
},
enumerable: true,
configurable: true
});
Object.defineProperty(UploaderDirective.prototype, "tooltipMessage", {
// info message
get:
// info message
/**
* @return {?}
*/
function () {
if (!this.instance) {
return;
}
return this.instance.tooltipMessage;
},
enumerable: true,
configurable: true
});
Object.defineProperty(UploaderDirective.prototype, "progress", {
// get progress
get:
// get progress
/**
* @return {?}
*/
function () {
if (!this.instance) {
return;
}
return this.instance.uploadingProgress;
},
enumerable: true,
configurable: true
});
// delete file from uploader
// delete file from uploader
/**
* @param {?} index
* @return {?}
*/
UploaderDirective.prototype.delete =
// delete file from uploader
/**
* @param {?} index
* @return {?}
*/
function (index) {
if (!this.instance) {
return;
}
this.instance.delete(index);
};
// remove file from uploader
// remove file from uploader
/**
* @param {?=} emit
* @return {?}
*/
UploaderDirective.prototype.clear =
// remove file from uploader
/**
* @param {?=} emit
* @return {?}
*/
function (emit) {
if (emit === void 0) { emit = true; }
if (!this.instance) {
return;
}
this.instance.clear(emit);
};
// cancel uploading
// cancel uploading
/**
* @return {?}
*/
UploaderDirective.prototype.preventUploading =
// cancel uploading
/**
* @return {?}
*/
function () {
if (!this.instance) {
return;
}
this.instance.preventUploading();
};
// start uploading
// start uploading
/**
* @return {?}
*/
UploaderDirective.prototype.upload =
// start uploading
/**
* @return {?}
*/
function () {
if (!this.instance) {
return;
}
return this.instance.upload();
};
// DROP
// DROP
/**
* @param {?} event
* @return {?}
*/
UploaderDirective.prototype.onDragOver =
// DROP
/**
* @param {?} event
* @return {?}
*/
function (event) {
/** @type {?} */
var transfer = this._getTransfer(event);
if (!this._haveFiles(transfer.types)) {
return;
}
transfer.dropEffect = 'copy';
this._preventAndStop(event);
};
/**
* @param {?} event
* @return {?}
*/
UploaderDirective.prototype.onDragLeave = /**
* @param {?} event
* @return {?}
*/
function (event) {
if (((/** @type {?} */ (this))).element) {
if (event.currentTarget === ((/** @type {?} */ (this))).element[0]) {
return;
}
}
this._preventAndStop(event);
};
/**
* @param {?} event
* @return {?}
*/
UploaderDirective.prototype.onDrop = /**
* @param {?} event
* @return {?}
*/
function (event) {
if (!this.config.isDropAllowed) {
return;
}
/** @type {?} */
var transfer = this._getTransfer(event);
if (!transfer) {
return;
}
this._preventAndStop(event);
this.instance.loadFile({ target: { files: transfer.files } });
};
/**
* @protected
* @param {?} event
* @return {?}
*/
UploaderDirective.prototype._getTransfer = /**
* @protected
* @param {?} event
* @return {?}
*/
function (event) {
return event.dataTransfer ? event.dataTransfer : event.originalEvent.dataTransfer; // jQuery fix;
};
/**
* @protected
* @param {?} event
* @return {?}
*/
UploaderDirective.prototype._preventAndStop = /**
* @protected
* @param {?} event
* @return {?}
*/
function (event) {
event.preventDefault();
event.stopPropagation();
};
/**
* @protected
* @param {?} types
* @return {?}
*/
UploaderDirective.prototype._haveFiles = /**
* @protected
* @param {?} types
* @return {?}
*/
function (types) {
if (!types) {
return false;
}
if (types.indexOf) {
return types.indexOf('Files') !== -1;
}
else if (types.contains) {
return types.contains('Files');
}
else {
return false;
}
};
// DROP END
// DROP END
/**
* @private
* @return {?}
*/
UploaderDirective.prototype._setBtnContainer =
// DROP END
/**
* @private
* @return {?}
*/
function () {
var _this = this;
/** @type {?} */
var componentFactory = this.factory.resolveComponentFactory(AisUploaderComponent);
this._btnContainer = this.viewContainerRef.createComponent(componentFactory);
this._btnContainer.instance.config = this.config;
this._clickFn = this.renderer.listen(this.ref.nativeElement, 'click', function (e) { return _this._handleClick(e); });
this._sub$.add(this._btnContainer.instance.onChange.subscribe(function (data) { return _this.onChange.emit(data); }));
this._sub$.add(this._btnContainer.instance.onError.subscribe(function (err) { return _this.onError.emit(err); }));
this._sub$.add(this._btnContainer.instance.onProgress.subscribe(function (progress) { return _this.onProgress.emit(progress); }));
};
/**
* @private
* @param {?} event
* @return {?}
*/
UploaderDirective.prototype._handleClick = /**
* @private
* @param {?} event
* @return {?}
*/
function (event) {
/** @type {?} */
var attributes = Object.values(event.target.attributes).map(function (el) { return el['name']; });
if (!!attributes.find(function (attr) { return attr == 'clear'; }) &&
this.fileName && !this.instance.uploadingProgress) {
this.clear();
return;
}
if (!!attributes.find(function (attr) { return attr == 'stop'; }) &&
this.fileName && this.instance.uploadingProgress) {
this.preventUploading();
return;
}
this._btnContainer.instance.select();
};
UploaderDirective.decorators = [
{ type: Directive, args: [{
selector: '[uploader]',
exportAs: 'uploader',
},] }
];
/** @nocollapse */
UploaderDirective.ctorParameters = function () { return [
{ type: ComponentFactoryResolver },
{ type: ElementRef },
{ type: ViewContainerRef },
{ type: Renderer2 }
]; };
UploaderDirective.propDecorators = {
config: [{ type: Input, args: ['uploader',] }],
onChange: [{ type: Output }],
onProgress: [{ type: Output }],
onError: [{ type: Output }],
onDragOver: [{ type: HostListener, args: ['dragover', ['$event'],] }],
onDragLeave: [{ type: HostListener, args: ['dragleave', ['$event'],] }],
onDrop: [{ type: HostListener, args: ['drop', ['$event'],] }]
};
return UploaderDirective;
}());
export { UploaderDirective };
if (false) {
/** @type {?} */
UploaderDirective.prototype.onChange;
/** @type {?} */
UploaderDirective.prototype.onProgress;
/** @type {?} */
UploaderDirective.prototype.onError;
/**
* @type {?}
* @private
*/
UploaderDirective.prototype._clickFn;
/**
* @type {?}
* @private
*/
UploaderDirective.prototype._btnContainer;
/**
* @type {?}
* @private
*/
UploaderDirective.prototype._config;
/**
* @type {?}
* @private
*/
UploaderDirective.prototype._sub$;
/**
* @type {?}
* @private
*/
UploaderDirective.prototype.factory;
/**
* @type {?}
* @private
*/
UploaderDirective.prototype.ref;
/**
* @type {?}
* @private
*/
UploaderDirective.prototype.viewContainerRef;
/**
* @type {?}
* @private
*/
UploaderDirective.prototype.renderer;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkZXIuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYWlzLXVwbG9hZGVyLyIsInNvdXJjZXMiOlsibGliL2RpcmVjdGl2ZXMvdXBsb2FkZXIuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQ0gsd0JBQXdCLEVBQUUsU0FBUyxFQUNuQyxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsU0FBUyxFQUFFLGdCQUFnQixHQUNsRixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVqRTtJQTBCSSwyQkFDWSxPQUFpQyxFQUNqQyxHQUFlLEVBQ2YsZ0JBQWtDLEVBQ2xDLFFBQW1CO1FBSG5CLFlBQU8sR0FBUCxPQUFPLENBQTBCO1FBQ2pDLFFBQUcsR0FBSCxHQUFHLENBQVk7UUFDZixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGFBQVEsR0FBUixRQUFRLENBQVc7UUFickIsYUFBUSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2pELGVBQVUsR0FBeUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN0RCxZQUFPLEdBQXlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFLckQsVUFBSyxHQUFpQixJQUFJLFlBQVksRUFBRSxDQUFDO0lBUWpELENBQUM7SUEzQkQsc0JBQ0kscUNBQU07Ozs7UUFEVjtZQUVJLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUN4QixDQUFDOzs7OztRQUVELFVBQVcsTUFBc0I7WUFDN0IsSUFBSSxNQUFNLEtBQUssSUFBSSxDQUFDLE9BQU8sRUFBRTtn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QUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRTtZQUNsRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN4QixPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN6QyxDQUFDOztnQkFyTUosU0FBUyxTQUFDO29CQUNQLFFBQVEsRUFBRSxZQUFZO29CQUN0QixRQUFRLEVBQUUsVUFBVTtpQkFDdkI7Ozs7Z0JBWEcsd0JBQXdCO2dCQUN4QixVQUFVO2dCQUFxRCxnQkFBZ0I7Z0JBQTNCLFNBQVM7Ozt5QkFZNUQsS0FBSyxTQUFDLFVBQVU7MkJBWWhCLE1BQU07NkJBQ04sTUFBTTswQkFDTixNQUFNOzZCQWtHTixZQUFZLFNBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDOzhCQVVuQyxZQUFZLFNBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDO3lCQVVwQyxZQUFZLFNBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDOztJQThEcEMsd0JBQUM7Q0FBQSxBQXZNRCxJQXVNQztTQW5NWSxpQkFBaUI7OztJQWExQixxQ0FBMkQ7O0lBQzNELHVDQUFnRTs7SUFDaEUsb0NBQTZEOzs7OztJQUU3RCxxQ0FBMkI7Ozs7O0lBQzNCLDBDQUEyQjs7Ozs7SUFDM0Isb0NBQWdDOzs7OztJQUNoQyxrQ0FBaUQ7Ozs7O0lBRzdDLG9DQUF5Qzs7Ozs7SUFDekMsZ0NBQXVCOzs7OztJQUN2Qiw2Q0FBMEM7Ozs7O0lBQzFDLHFDQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIERpcmVjdGl2ZSxcclxuICAgIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBSZW5kZXJlcjIsIFZpZXdDb250YWluZXJSZWYsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFVwbG9hZGVyQ29uZmlnIH0gZnJvbSAnLi4vbW9kZWxzL3VwbG9hZGVyLWNvbmZpZyc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBaXNVcGxvYWRlckNvbXBvbmVudCB9IGZyb20gJy4uL2Fpcy11cGxvYWRlci5jb21wb25lbnQnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogJ1t1cGxvYWRlcl0nLFxyXG4gICAgZXhwb3J0QXM6ICd1cGxvYWRlcicsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVcGxvYWRlckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAgIEBJbnB1dCgndXBsb2FkZXInKVxyXG4gICAgZ2V0IGNvbmZpZygpOiBVcGxvYWRlckNvbmZpZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZztcclxuICAgIH1cclxuXHJcbiAgICBzZXQgY29uZmlnKGNvbmZpZzogVXBsb2FkZXJDb25maWcpIHtcclxuICAgICAgICBpZiAoY29uZmlnID09PSB0aGlzLl9jb25maWcpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9jb25maWcgPSBjb25maWc7XHJcbiAgICB9XHJcblxyXG4gICAgQE91dHB1dCgpIG9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSBvblByb2dyZXNzOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSBvbkVycm9yOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgICBwcml2YXRlIF9jbGlja0ZuOiBGdW5jdGlvbjtcclxuICAgIHByaXZhdGUgX2J0bkNvbnRhaW5lcjogYW55O1xyXG4gICAgcHJpdmF0ZSBfY29uZmlnOiBVcGxvYWRlckNvbmZpZztcclxuICAgIHByaXZhdGUgX3N1YiQ6IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGZhY3Rvcnk6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICAgICAgICBwcml2YXRlIHJlZjogRWxlbWVudFJlZixcclxuICAgICAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgKSB7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAhdGhpcy5jb25maWcuYXBpVXJsIHx8XHJcbiAgICAgICAgICAgICF0aGlzLmNvbmZpZy5zdXBwb3J0ZWRGb3JtYXRzXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25FcnJvci5lbWl0KCdJbmNvcnJlY3QgY29uZmlnIScpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3NldEJ0bkNvbnRhaW5lcigpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xyXG4gICAgICAgIGlmICh0aGlzLl9jbGlja0ZuKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NsaWNrRm4oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdXBsb2FkZXIgaW5zdGFuY2VcclxuICAgIGdldCBpbnN0YW5jZSgpOiBBaXNVcGxvYWRlckNvbXBvbmVudCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9idG5Db250YWluZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5fYnRuQ29udGFpbmVyLmluc3RhbmNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHNlbGVjdGVkIGZpbGUgbmFtZVxyXG4gICAgZ2V0IGZpbGVOYW1lKCk6IHN0cmluZyB8IHN0cmluZ1tdIHtcclxuICAgICAgICBpZiAoIXRoaXMuaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5pbnN0YW5jZS5maWxlTmFtZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBpbmZvIG1lc3NhZ2VcclxuICAgIGdldCB0b29sdGlwTWVzc2FnZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICghdGhpcy5pbnN0YW5jZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmluc3RhbmNlLnRvb2x0aXBNZXNzYWdlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGdldCBwcm9ncmVzc1xyXG4gICAgZ2V0IHByb2dyZXNzKCk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5zdGFuY2UudXBsb2FkaW5nUHJvZ3Jlc3M7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZGVsZXRlIGZpbGUgZnJvbSB1cGxvYWRlclxyXG4gICAgZGVsZXRlKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmluc3RhbmNlLmRlbGV0ZShpbmRleCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gcmVtb3ZlIGZpbGUgZnJvbSB1cGxvYWRlclxyXG4gICAgY2xlYXIoZW1pdDogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmluc3RhbmNlLmNsZWFyKGVtaXQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGNhbmNlbCB1cGxvYWRpbmdcclxuICAgIHByZXZlbnRVcGxvYWRpbmcoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pbnN0YW5jZS5wcmV2ZW50VXBsb2FkaW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc3RhcnQgdXBsb2FkaW5nXHJcbiAgICB1cGxvYWQoKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBpZiAoIXRoaXMuaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5pbnN0YW5jZS51cGxvYWQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBEUk9QXHJcbiAgICBASG9zdExpc3RlbmVyKCdkcmFnb3ZlcicsIFsnJGV2ZW50J10pXHJcbiAgICBvbkRyYWdPdmVyKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB0cmFuc2ZlciA9IHRoaXMuX2dldFRyYW5zZmVyKGV2ZW50KTtcclxuICAgICAgICBpZiAoIXRoaXMuX2hhdmVGaWxlcyh0cmFuc2Zlci50eXBlcykpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cmFuc2Zlci5kcm9wRWZmZWN0ID0gJ2NvcHknO1xyXG4gICAgICAgIHRoaXMuX3ByZXZlbnRBbmRTdG9wKGV2ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBASG9zdExpc3RlbmVyKCdkcmFnbGVhdmUnLCBbJyRldmVudCddKVxyXG4gICAgb25EcmFnTGVhdmUoZXZlbnQ6IGFueSk6IGFueSB7XHJcbiAgICAgICAgaWYgKCh0aGlzIGFzIGFueSkuZWxlbWVudCkge1xyXG4gICAgICAgICAgICBpZiAoZXZlbnQuY3VycmVudFRhcmdldCA9PT0gKHRoaXMgYXMgYW55KS5lbGVtZW50WzBdKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fcHJldmVudEFuZFN0b3AoZXZlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ2Ryb3AnLCBbJyRldmVudCddKVxyXG4gICAgb25Ecm9wKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuY29uZmlnLmlzRHJvcEFsbG93ZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB0cmFuc2ZlciA9IHRoaXMuX2dldFRyYW5zZmVyKGV2ZW50KTtcclxuICAgICAgICBpZiAoIXRyYW5zZmVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fcHJldmVudEFuZFN0b3AoZXZlbnQpO1xyXG4gICAgICAgIHRoaXMuaW5zdGFuY2UubG9hZEZpbGUoe3RhcmdldDoge2ZpbGVzOiB0cmFuc2Zlci5maWxlc319KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2dldFRyYW5zZmVyKGV2ZW50OiBhbnkpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiBldmVudC5kYXRhVHJhbnNmZXIgPyBldmVudC5kYXRhVHJhbnNmZXIgOiBldmVudC5vcmlnaW5hbEV2ZW50LmRhdGFUcmFuc2ZlcjsgLy8galF1ZXJ5IGZpeDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3ByZXZlbnRBbmRTdG9wKGV2ZW50OiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9oYXZlRmlsZXModHlwZXM6IGFueSk6IGFueSB7XHJcbiAgICAgICAgaWYgKCF0eXBlcykge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlcy5pbmRleE9mKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0eXBlcy5pbmRleE9mKCdGaWxlcycpICE9PSAtMTtcclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVzLmNvbnRhaW5zKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0eXBlcy5jb250YWlucygnRmlsZXMnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIERST1AgRU5EXHJcblxyXG4gICAgcHJpdmF0ZSBfc2V0QnRuQ29udGFpbmVyKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudEZhY3RvcnkgPSB0aGlzLmZhY3RvcnkucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoQWlzVXBsb2FkZXJDb21wb25lbnQpO1xyXG4gICAgICAgIHRoaXMuX2J0bkNvbnRhaW5lciA9IHRoaXMudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50RmFjdG9yeSk7XHJcbiAgICAgICAgdGhpcy5fYnRuQ29udGFpbmVyLmluc3RhbmNlLmNvbmZpZyA9IHRoaXMuY29uZmlnO1xyXG4gICAgICAgIHRoaXMuX2NsaWNrRm4gPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLnJlZi5uYXRpdmVFbGVtZW50LCAnY2xpY2snLCAoZSkgPT4gdGhpcy5faGFuZGxlQ2xpY2soZSkpO1xyXG4gICAgICAgIHRoaXMuX3N1YiQuYWRkKHRoaXMuX2J0bkNvbnRhaW5lci5pbnN0YW5jZS5vbkNoYW5nZS5zdWJzY3JpYmUoZGF0YSA9PiB0aGlzLm9uQ2hhbmdlLmVtaXQoZGF0YSkpKTtcclxuICAgICAgICB0aGlzLl9zdWIkLmFkZCh0aGlzLl9idG5Db250YWluZXIuaW5zdGFuY2Uub25FcnJvci5zdWJzY3JpYmUoZXJyID0+IHRoaXMub25FcnJvci5lbWl0KGVycikpKTtcclxuICAgICAgICB0aGlzLl9zdWIkLmFkZCh0aGlzLl9idG5Db250YWluZXIuaW5zdGFuY2Uub25Qcm9ncmVzcy5zdWJzY3JpYmUocHJvZ3Jlc3MgPT4gdGhpcy5vblByb2dyZXNzLmVtaXQocHJvZ3Jlc3MpKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfaGFuZGxlQ2xpY2soZXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gT2JqZWN0LnZhbHVlcyhldmVudC50YXJnZXQuYXR0cmlidXRlcykubWFwKGVsID0+IGVsWyduYW1lJ10pO1xyXG4gICAgICAgIGlmICghIWF0dHJpYnV0ZXMuZmluZChhdHRyID0+IGF0dHIgPT0gJ2NsZWFyJykgJiZcclxuICAgICAgICAgICAgdGhpcy5maWxlTmFtZSAmJiAhdGhpcy5pbnN0YW5jZS51cGxvYWRpbmdQcm9ncmVzcykge1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCEhYXR0cmlidXRlcy5maW5kKGF0dHIgPT4gYXR0ciA9PSAnc3RvcCcpICYmXHJcbiAgICAgICAgICAgIHRoaXMuZmlsZU5hbWUgJiYgdGhpcy5pbnN0YW5jZS51cGxvYWRpbmdQcm9ncmVzcykge1xyXG4gICAgICAgICAgICB0aGlzLnByZXZlbnRVcGxvYWRpbmcoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9idG5Db250YWluZXIuaW5zdGFuY2Uuc2VsZWN0KCk7XHJcbiAgICB9XHJcblxyXG59XHJcbiJdfQ==