angular-svg-icon
Version:
Angular 8 component for inlining SVGs allowing them to be easily styled with CSS.
387 lines • 23.6 kB
JavaScript
var __read = (this && this.__read) || function (o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { ChangeDetectorRef, Component, ElementRef, Input, KeyValueDiffers, Renderer2 } from '@angular/core';
import { SvgIconRegistryService } from './svg-icon-registry.service';
var SvgIconComponent = /** @class */ (function () {
function SvgIconComponent(element, differs, renderer, iconReg, cdr) {
this.element = element;
this.differs = differs;
this.renderer = renderer;
this.iconReg = iconReg;
this.cdr = cdr;
this.stretch = false;
this.applyCss = false;
}
Object.defineProperty(SvgIconComponent.prototype, "svgStyle", {
// Adapted from ngStyle
set:
// Adapted from ngStyle
/**
* @param {?} v
* @return {?}
*/
function (v) {
this._svgStyle = v;
if (!this.differ && v) {
this.differ = this.differs.find(v).create();
}
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
SvgIconComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
this.init();
};
/**
* @return {?}
*/
SvgIconComponent.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
this.destroy();
};
/**
* @param {?} changeRecord
* @return {?}
*/
SvgIconComponent.prototype.ngOnChanges = /**
* @param {?} changeRecord
* @return {?}
*/
function (changeRecord) {
if (changeRecord.src || changeRecord.name) {
if (this.svg) {
this.destroy();
}
this.init();
}
if (changeRecord.stretch) {
this.stylize();
}
};
/**
* @return {?}
*/
SvgIconComponent.prototype.ngDoCheck = /**
* @return {?}
*/
function () {
if (this.svg && this.differ) {
/** @type {?} */
var changes = this.differ.diff(this._svgStyle);
if (changes) {
this.applyChanges(changes);
}
}
};
/**
* @private
* @return {?}
*/
SvgIconComponent.prototype.init = /**
* @private
* @return {?}
*/
function () {
if (this.name) {
this.icnSub = this.iconReg.getSvgByName(this.name).subscribe(this.initSvg.bind(this));
}
else if (this.src) {
this.icnSub = this.iconReg.loadSvg(this.src).subscribe(this.initSvg.bind(this));
}
};
/**
* @private
* @param {?} svg
* @return {?}
*/
SvgIconComponent.prototype.initSvg = /**
* @private
* @param {?} svg
* @return {?}
*/
function (svg) {
this.setSvg(svg);
this.resetDiffer();
};
/**
* @private
* @return {?}
*/
SvgIconComponent.prototype.destroy = /**
* @private
* @return {?}
*/
function () {
this.svg = undefined;
this.differ = undefined;
if (this.icnSub) {
this.icnSub.unsubscribe();
}
};
/**
* @private
* @return {?}
*/
SvgIconComponent.prototype.resetDiffer = /**
* @private
* @return {?}
*/
function () {
if (this._svgStyle && !this.differ) {
this.differ = this.differs.find(this._svgStyle).create();
}
};
/**
* @private
* @param {?} svg
* @return {?}
*/
SvgIconComponent.prototype.setSvg = /**
* @private
* @param {?} svg
* @return {?}
*/
function (svg) {
if (svg) {
this.svg = svg;
/** @type {?} */
var icon = (/** @type {?} */ (svg.cloneNode(true)));
/** @type {?} */
var elem = this.element.nativeElement;
if (this.applyCss) {
this.copyNgContentAttribute(elem, icon);
}
elem.innerHTML = '';
this.renderer.appendChild(elem, icon);
this.stylize();
this.cdr.markForCheck();
}
};
/**
* @private
* @param {?} hostElem
* @param {?} icon
* @return {?}
*/
SvgIconComponent.prototype.copyNgContentAttribute = /**
* @private
* @param {?} hostElem
* @param {?} icon
* @return {?}
*/
function (hostElem, icon) {
/** @type {?} */
var attributes = (/** @type {?} */ (hostElem.attributes));
/** @type {?} */
var len = attributes.length;
for (var i = 0; i < len; i += 1) {
/** @type {?} */
var attribute = attributes.item(i);
if (attribute.name.startsWith('_ngcontent')) {
this.setNgContentAttribute(icon, attribute.name);
break;
}
}
};
/**
* @private
* @param {?} parent
* @param {?} attributeName
* @return {?}
*/
SvgIconComponent.prototype.setNgContentAttribute = /**
* @private
* @param {?} parent
* @param {?} attributeName
* @return {?}
*/
function (parent, attributeName) {
this.renderer.setAttribute(parent, attributeName, '');
/** @type {?} */
var len = parent.childNodes.length;
for (var i = 0; i < len; i += 1) {
/** @type {?} */
var child = parent.childNodes[i];
if (child instanceof Element) {
this.setNgContentAttribute(child, attributeName);
}
}
};
/**
* @private
* @return {?}
*/
SvgIconComponent.prototype.stylize = /**
* @private
* @return {?}
*/
function () {
if (this.svg) {
/** @type {?} */
var svg = this.element.nativeElement.firstChild;
if (this.stretch === true) {
this.renderer.setAttribute(svg, 'preserveAspectRatio', 'none');
}
else if (this.stretch === false) {
this.renderer.removeAttribute(svg, 'preserveAspectRatio');
}
}
};
/**
* @private
* @param {?} changes
* @return {?}
*/
SvgIconComponent.prototype.applyChanges = /**
* @private
* @param {?} changes
* @return {?}
*/
function (changes) {
var _this = this;
changes.forEachRemovedItem((/**
* @param {?} record
* @return {?}
*/
function (record) { return _this.setStyle(record.key, null); }));
changes.forEachAddedItem((/**
* @param {?} record
* @return {?}
*/
function (record) { return _this.setStyle(record.key, record.currentValue); }));
changes.forEachChangedItem((/**
* @param {?} record
* @return {?}
*/
function (record) { return _this.setStyle(record.key, record.currentValue); }));
};
/**
* @private
* @param {?} nameAndUnit
* @param {?} value
* @return {?}
*/
SvgIconComponent.prototype.setStyle = /**
* @private
* @param {?} nameAndUnit
* @param {?} value
* @return {?}
*/
function (nameAndUnit, value) {
var _a = __read(nameAndUnit.split('.'), 2), name = _a[0], unit = _a[1];
value = value !== null && unit ? "" + value + unit : value;
/** @type {?} */
var svg = this.element.nativeElement.firstChild;
if (value !== null) {
this.renderer.setStyle(svg, name, (/** @type {?} */ (value)));
}
else {
this.renderer.removeStyle(svg, name);
}
};
SvgIconComponent.decorators = [
{ type: Component, args: [{
selector: 'svg-icon',
template: '<ng-content></ng-content>'
}] }
];
/** @nocollapse */
SvgIconComponent.ctorParameters = function () { return [
{ type: ElementRef },
{ type: KeyValueDiffers },
{ type: Renderer2 },
{ type: SvgIconRegistryService },
{ type: ChangeDetectorRef }
]; };
SvgIconComponent.propDecorators = {
src: [{ type: Input }],
name: [{ type: Input }],
stretch: [{ type: Input }],
applyCss: [{ type: Input }],
svgStyle: [{ type: Input }]
};
return SvgIconComponent;
}());
export { SvgIconComponent };
if (false) {
/** @type {?} */
SvgIconComponent.prototype.src;
/** @type {?} */
SvgIconComponent.prototype.name;
/** @type {?} */
SvgIconComponent.prototype.stretch;
/** @type {?} */
SvgIconComponent.prototype.applyCss;
/**
* @type {?}
* @private
*/
SvgIconComponent.prototype.svg;
/**
* @type {?}
* @private
*/
SvgIconComponent.prototype.icnSub;
/**
* @type {?}
* @private
*/
SvgIconComponent.prototype.differ;
/**
* @type {?}
* @private
*/
SvgIconComponent.prototype._svgStyle;
/**
* @type {?}
* @private
*/
SvgIconComponent.prototype.element;
/**
* @type {?}
* @private
*/
SvgIconComponent.prototype.differs;
/**
* @type {?}
* @private
*/
SvgIconComponent.prototype.renderer;
/**
* @type {?}
* @private
*/
SvgIconComponent.prototype.iconReg;
/**
* @type {?}
* @private
*/
SvgIconComponent.prototype.cdr;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ZnLWljb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vYW5ndWxhci1zdmctaWNvbi8iLCJzb3VyY2VzIjpbImxpYi9zdmctaWNvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFXLFVBQVUsRUFBZSxLQUFLLEVBQ3RCLGVBQWUsRUFDeEMsU0FBUyxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUkvRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVyRTtJQXdCQywwQkFDUyxPQUFtQixFQUNuQixPQUF3QixFQUN4QixRQUFtQixFQUNuQixPQUErQixFQUMvQixHQUFzQjtRQUp0QixZQUFPLEdBQVAsT0FBTyxDQUFZO1FBQ25CLFlBQU8sR0FBUCxPQUFPLENBQWlCO1FBQ3hCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsWUFBTyxHQUFQLE9BQU8sQ0FBd0I7UUFDL0IsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUF0QnRCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsYUFBUSxHQUFHLEtBQUssQ0FBQztJQXNCMUIsQ0FBQztJQW5CRCxzQkFDSSxzQ0FBUTtRQUZaLHVCQUF1Qjs7Ozs7OztRQUN2QixVQUNhLENBQTJCO1lBQ3ZDLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtnQkFDdEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQzthQUM1QztRQUNGLENBQUM7OztPQUFBOzs7O0lBZUQsbUNBQVE7OztJQUFSO1FBQ0MsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2IsQ0FBQzs7OztJQUVELHNDQUFXOzs7SUFB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SUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFHLEtBQUssR0FBRyxJQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQzs7WUFDckQsR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFVBQVU7UUFFakQsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFO1lBQ25CLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsbUJBQUEsS0FBSyxFQUFVLENBQUMsQ0FBQztTQUNuRDthQUFNO1lBQ04sSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3JDO0lBQ0YsQ0FBQzs7Z0JBN0pELFNBQVMsU0FBQztvQkFDVixRQUFRLEVBQUUsVUFBVTtvQkFDcEIsUUFBUSxFQUFFLDJCQUEyQjtpQkFDckM7Ozs7Z0JBWCtDLFVBQVU7Z0JBQ0YsZUFBZTtnQkFDeEMsU0FBUztnQkFJL0Isc0JBQXNCO2dCQU50QixpQkFBaUI7OztzQkFheEIsS0FBSzt1QkFDTCxLQUFLOzBCQUNMLEtBQUs7MkJBQ0wsS0FBSzsyQkFHTCxLQUFLOztJQW1KUCx1QkFBQztDQUFBLEFBOUpELElBOEpDO1NBMUpZLGdCQUFnQjs7O0lBQzVCLCtCQUFxQjs7SUFDckIsZ0NBQXNCOztJQUN0QixtQ0FBeUI7O0lBQ3pCLG9DQUEwQjs7Ozs7SUFXMUIsK0JBQXdCOzs7OztJQUN4QixrQ0FBNkI7Ozs7O0lBQzdCLGtDQUFzRDs7Ozs7SUFDdEQscUNBQTJDOzs7OztJQUcxQyxtQ0FBMkI7Ozs7O0lBQzNCLG1DQUFnQzs7Ozs7SUFDaEMsb0NBQTJCOzs7OztJQUMzQixtQ0FBdUM7Ozs7O0lBQ3ZDLCtCQUE4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIERvQ2hlY2ssIEVsZW1lbnRSZWYsIEhvc3RCaW5kaW5nLCBJbnB1dCxcblx0S2V5VmFsdWVDaGFuZ2VSZWNvcmQsIEtleVZhbHVlQ2hhbmdlcywgS2V5VmFsdWVEaWZmZXIsIEtleVZhbHVlRGlmZmVycyxcblx0T25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgUmVuZGVyZXIyLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBTdmdJY29uUmVnaXN0cnlTZXJ2aWNlIH0gZnJvbSAnLi9zdmctaWNvbi1yZWdpc3RyeS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnc3ZnLWljb24nLFxuXHR0ZW1wbGF0ZTogJzxuZy1jb250ZW50PjwvbmctY29udGVudD4nXG59KVxuZXhwb3J0IGNsYXNzIFN2Z0ljb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzLCBEb0NoZWNrIHtcblx0QElucHV0KCkgc3JjOiBzdHJpbmc7XG5cdEBJbnB1dCgpIG5hbWU6IHN0cmluZztcblx0QElucHV0KCkgc3RyZXRjaCA9IGZhbHNlO1xuXHRASW5wdXQoKSBhcHBseUNzcyA9IGZhbHNlO1xuXG5cdC8vIEFkYXB0ZWQgZnJvbSBuZ1N0eWxlXG5cdEBJbnB1dCgpXG5cdHNldCBzdmdTdHlsZSh2OiB7W2tleTogc3RyaW5nXTogc3RyaW5nIH0pIHtcblx0XHR0aGlzLl9zdmdTdHlsZSA9IHY7XG5cdFx0aWYgKCF0aGlzLmRpZmZlciAmJiB2KSB7XG5cdFx0XHR0aGlzLmRpZmZlciA9IHRoaXMuZGlmZmVycy5maW5kKHYpLmNyZWF0ZSgpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgc3ZnOiBTVkdFbGVtZW50O1xuXHRwcml2YXRlIGljblN1YjogU3Vic2NyaXB0aW9uO1xuXHRwcml2YXRlIGRpZmZlcjogS2V5VmFsdWVEaWZmZXI8c3RyaW5nLCBzdHJpbmd8bnVtYmVyPjtcblx0cHJpdmF0ZSBfc3ZnU3R5bGU6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9O1xuXG5cdGNvbnN0cnVjdG9yKFxuXHRcdHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZixcblx0XHRwcml2YXRlIGRpZmZlcnM6IEtleVZhbHVlRGlmZmVycyxcblx0XHRwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG5cdFx0cHJpdmF0ZSBpY29uUmVnOiBTdmdJY29uUmVnaXN0cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuXHR9XG5cblx0bmdPbkluaXQoKSB7XG5cdFx0dGhpcy5pbml0KCk7XG5cdH1cblxuXHRuZ09uRGVzdHJveSgpIHtcblx0XHR0aGlzLmRlc3Ryb3koKTtcblx0fVxuXG5cdG5nT25DaGFuZ2VzKGNoYW5nZVJlY29yZDogU2ltcGxlQ2hhbmdlcykge1xuXHRcdGlmIChjaGFuZ2VSZWNvcmQuc3JjIHx8IGNoYW5nZVJlY29yZC5uYW1lKSB7XG5cdFx0XHRpZiAodGhpcy5zdmcpIHtcblx0XHRcdFx0dGhpcy5kZXN0cm95KCk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmluaXQoKTtcblx0XHR9XG5cdFx0aWYgKGNoYW5nZVJlY29yZC5zdHJldGNoKSB7XG5cdFx0XHR0aGlzLnN0eWxpemUoKTtcblx0XHR9XG5cdH1cblxuXHRuZ0RvQ2hlY2soKSB7XG5cdFx0aWYgKHRoaXMuc3ZnICYmIHRoaXMuZGlmZmVyKSB7XG5cdFx0XHRjb25zdCBjaGFuZ2VzID0gdGhpcy5kaWZmZXIuZGlmZih0aGlzLl9zdmdTdHlsZSk7XG5cdFx0XHRpZiAoY2hhbmdlcykge1xuXHRcdFx0XHR0aGlzLmFwcGx5Q2hhbmdlcyhjaGFuZ2VzKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGluaXQoKSB7XG5cdFx0aWYgKHRoaXMubmFtZSkge1xuXHRcdFx0dGhpcy5pY25TdWIgPSB0aGlzLmljb25SZWcuZ2V0U3ZnQnlOYW1lKHRoaXMubmFtZSkuc3Vic2NyaWJlKHRoaXMuaW5pdFN2Zy5iaW5kKHRoaXMpKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMuc3JjKSB7XG5cdFx0XHR0aGlzLmljblN1YiA9IHRoaXMuaWNvblJlZy5sb2FkU3ZnKHRoaXMuc3JjKS5zdWJzY3JpYmUodGhpcy5pbml0U3ZnLmJpbmQodGhpcykpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgaW5pdFN2Zyhzdmc6IFNWR0VsZW1lbnQpOiB2b2lkIHtcblx0XHR0aGlzLnNldFN2ZyhzdmcpO1xuXHRcdHRoaXMucmVzZXREaWZmZXIoKTtcblx0fVxuXG5cdHByaXZhdGUgZGVzdHJveSgpIHtcblx0XHR0aGlzLnN2ZyA9IHVuZGVmaW5lZDtcblx0XHR0aGlzLmRpZmZlciA9IHVuZGVmaW5lZDtcblx0XHRpZiAodGhpcy5pY25TdWIpIHtcblx0XHRcdHRoaXMuaWNuU3ViLnVuc3Vic2NyaWJlKCk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSByZXNldERpZmZlcigpIHtcblx0XHRpZiAodGhpcy5fc3ZnU3R5bGUgJiYgIXRoaXMuZGlmZmVyKSB7XG5cdFx0XHR0aGlzLmRpZmZlciA9IHRoaXMuZGlmZmVycy5maW5kKHRoaXMuX3N2Z1N0eWxlKS5jcmVhdGUoKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHNldFN2Zyhzdmc6IFNWR0VsZW1lbnQpIHtcblx0XHRpZiAoc3ZnKSB7XG5cdFx0XHR0aGlzLnN2ZyA9IHN2Zztcblx0XHRcdGNvbnN0IGljb24gPSBzdmcuY2xvbmVOb2RlKHRydWUpIGFzIFNWR0VsZW1lbnQ7XG5cdFx0XHRjb25zdCBlbGVtID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG5cblx0XHRcdGlmICh0aGlzLmFwcGx5Q3NzKSB7XG5cdFx0XHRcdHRoaXMuY29weU5nQ29udGVudEF0dHJpYnV0ZShlbGVtLCBpY29uKTtcblx0XHRcdH1cblxuXHRcdFx0ZWxlbS5pbm5lckhUTUwgPSAnJztcblx0XHRcdHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQoZWxlbSwgaWNvbik7XG5cblx0XHRcdHRoaXMuc3R5bGl6ZSgpO1xuXHRcdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBjb3B5TmdDb250ZW50QXR0cmlidXRlKGhvc3RFbGVtOiBhbnksIGljb246IFNWR0VsZW1lbnQpIHtcblx0XHRjb25zdCBhdHRyaWJ1dGVzID0gaG9zdEVsZW0uYXR0cmlidXRlcyBhcyBOYW1lZE5vZGVNYXA7XG5cdFx0Y29uc3QgbGVuID0gYXR0cmlidXRlcy5sZW5ndGg7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkgKz0gMSkge1xuXHRcdFx0Y29uc3QgYXR0cmlidXRlID0gYXR0cmlidXRlcy5pdGVtKGkpO1xuXHRcdFx0aWYgKGF0dHJpYnV0ZS5uYW1lLnN0YXJ0c1dpdGgoJ19uZ2NvbnRlbnQnKSkge1xuXHRcdFx0XHR0aGlzLnNldE5nQ29udGVudEF0dHJpYnV0ZShpY29uLCBhdHRyaWJ1dGUubmFtZSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgc2V0TmdDb250ZW50QXR0cmlidXRlKHBhcmVudDogTm9kZSwgYXR0cmlidXRlTmFtZTogc3RyaW5nKSB7XG5cdFx0dGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUocGFyZW50LCBhdHRyaWJ1dGVOYW1lLCAnJyk7XG5cdFx0Y29uc3QgbGVuID0gcGFyZW50LmNoaWxkTm9kZXMubGVuZ3RoO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpICs9IDEpIHtcblx0XHRcdGNvbnN0IGNoaWxkID0gcGFyZW50LmNoaWxkTm9kZXNbaV07XG5cdFx0XHRpZiAoY2hpbGQgaW5zdGFuY2VvZiBFbGVtZW50KSB7XG5cdFx0XHRcdHRoaXMuc2V0TmdDb250ZW50QXR0cmlidXRlKGNoaWxkLCBhdHRyaWJ1dGVOYW1lKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHN0eWxpemUoKSB7XG5cdFx0aWYgKHRoaXMuc3ZnKSB7XG5cdFx0XHRjb25zdCBzdmcgPSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5maXJzdENoaWxkO1xuXG5cdFx0XHRpZiAodGhpcy5zdHJldGNoID09PSB0cnVlKSB7XG5cdFx0XHRcdHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHN2ZywgJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLCAnbm9uZScpO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLnN0cmV0Y2ggPT09IGZhbHNlKSB7XG5cdFx0XHRcdHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHN2ZywgJ3ByZXNlcnZlQXNwZWN0UmF0aW8nKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGFwcGx5Q2hhbmdlcyhjaGFuZ2VzOiBLZXlWYWx1ZUNoYW5nZXM8c3RyaW5nLCBzdHJpbmd8bnVtYmVyPikge1xuXHRcdGNoYW5nZXMuZm9yRWFjaFJlbW92ZWRJdGVtKChyZWNvcmQ6IEtleVZhbHVlQ2hhbmdlUmVjb3JkPHN0cmluZywgc3RyaW5nfG51bWJlcj4pID0+IHRoaXMuc2V0U3R5bGUocmVjb3JkLmtleSwgbnVsbCkpO1xuXHRcdGNoYW5nZXMuZm9yRWFjaEFkZGVkSXRlbSgocmVjb3JkOiBLZXlWYWx1ZUNoYW5nZVJlY29yZDxzdHJpbmcsIHN0cmluZ3xudW1iZXI+KSA9PiB0aGlzLnNldFN0eWxlKHJlY29yZC5rZXksIHJlY29yZC5jdXJyZW50VmFsdWUpKTtcblx0XHRjaGFuZ2VzLmZvckVhY2hDaGFuZ2VkSXRlbSgocmVjb3JkOiBLZXlWYWx1ZUNoYW5nZVJlY29yZDxzdHJpbmcsIHN0cmluZ3xudW1iZXI+KSA9PiB0aGlzLnNldFN0eWxlKHJlY29yZC5rZXksIHJlY29yZC5jdXJyZW50VmFsdWUpKTtcblx0fVxuXG5cdHByaXZhdGUgc2V0U3R5bGUobmFtZUFuZFVuaXQ6IHN0cmluZywgdmFsdWU6IHN0cmluZ3xudW1iZXJ8bnVsbHx1bmRlZmluZWQpIHtcblx0XHRjb25zdCBbbmFtZSwgdW5pdF0gPSBuYW1lQW5kVW5pdC5zcGxpdCgnLicpO1xuXHRcdHZhbHVlID0gdmFsdWUgIT09IG51bGwgJiYgdW5pdCA/IGAke3ZhbHVlfSR7dW5pdH1gIDogdmFsdWU7XG5cdFx0Y29uc3Qgc3ZnID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZmlyc3RDaGlsZDtcblxuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuXHRcdFx0dGhpcy5yZW5kZXJlci5zZXRTdHlsZShzdmcsIG5hbWUsIHZhbHVlIGFzIHN0cmluZyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUoc3ZnLCBuYW1lKTtcblx0XHR9XG5cdH1cbn1cbiJdfQ==