UNPKG

solar-ng-zorro-antd

Version:

An enterprise-class UI components based on Ant Design and Angular

282 lines (281 loc) 26.1 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { isDevMode, Directive, ElementRef, Input, Renderer2 } from '@angular/core'; import { IconDirective } from '@ant-design/icons-angular'; import { NzIconService } from './nz-icon.service'; /** @type {?} */ var iconTypeRE = /^anticon\-\w/; /** * This directive extends IconDirective to provide: * * - IconFont support * - spinning * - old API compatibility */ var NzIconDirective = /** @class */ (function (_super) { tslib_1.__extends(NzIconDirective, _super); function NzIconDirective(_iconService, _elementRef, _renderer) { var _this = _super.call(this, _iconService, _elementRef, _renderer) || this; _this._iconService = _iconService; _this._elementRef = _elementRef; _this._renderer = _renderer; _this.spin = false; return _this; } /** * In order to make this directive compatible to old API, we had do some ugly stuff here. * TODO: Should be removed in next major version. * @param {?} className * @return {?} */ NzIconDirective.prototype._classChangeHandler = /** * In order to make this directive compatible to old API, we had do some ugly stuff here. * TODO: Should be removed in next major version. * @param {?} className * @return {?} */ function (className) { if (className) { /** @type {?} */ var iconType = className .split(/\s/) .filter(function (cls) { return cls !== 'anticon' && cls !== 'anticon-spin' && !!cls.match(iconTypeRE); })[0]; if (!iconType) { return; } /** @type {?} */ var parsedIconType = iconType.replace('anticon-', ''); if (parsedIconType.includes('verticle')) { parsedIconType = parsedIconType.replace('verticle', 'vertical'); this._warnAPI('cross'); } if (parsedIconType.startsWith('cross')) { parsedIconType = parsedIconType.replace('cross', 'close'); this._warnAPI('vertical'); } // Only change icon when icon type does change. if (this.type !== parsedIconType) { this.type = parsedIconType; this._changeIcon().catch(function (err) { console.warn('[NG-ZORRO]', "You can find more about this error on http://ng.ant.design/components/icon/en\n", err); }); } } }; /** * In order to make this directive compatible to old API, we had do some ugly stuff here. * TODO: Should be removed in next major version. * @param {?} type * @return {?} */ NzIconDirective.prototype._warnAPI = /** * In order to make this directive compatible to old API, we had do some ugly stuff here. * TODO: Should be removed in next major version. * @param {?} type * @return {?} */ function (type) { if (isDevMode()) { if (type === 'old' && !this._iconService.warnedAboutAPI) { console.warn('[NG-ZORRO]', "<i class=\"anticon\"></i> would be deprecated soon. Please use <i nz-icon type=\"\"></i> API."); this._iconService.warnedAboutAPI = true; } if (type === 'cross' && !this._iconService.warnedAboutCross) { console.warn('[NG-ZORRO]', "'cross' icon is replaced by 'close' icon."); this._iconService.warnedAboutCross = true; } if (type === 'vertical' && !this._iconService.warnedAboutVertical) { console.warn('[NG-ZORRO]', "'verticle' is misspelled, would be corrected in the next major version."); this._iconService.warnedAboutVertical = true; } } }; /** * @param {?} svg * @return {?} */ NzIconDirective.prototype._toggleSpin = /** * @param {?} svg * @return {?} */ function (svg) { if ((this.spin || this.type === 'loading') && !this._el.classList.contains('anticon-spin')) { this._renderer.addClass(svg, 'anticon-spin'); } else { this._renderer.removeClass(svg, 'anticon-spin'); } }; /** * @return {?} */ NzIconDirective.prototype._setClassName = /** * @return {?} */ function () { // If there's not an anticon class, usually a new API icon, get the icon class name back. // anticon should be added before other class names. if (this._el && typeof this.type === 'string') { /** @type {?} */ var iconClassNameArr = this._el.className.split(/\s/); /** @type {?} */ var oldTypeNameIndex = iconClassNameArr.findIndex(function (cls) { return cls !== 'anticon' && cls !== 'anticon-spin' && !!cls.match(iconTypeRE); }); if (oldTypeNameIndex !== -1) { iconClassNameArr.splice(oldTypeNameIndex, 1, "anticon-" + this.type); this._renderer.setAttribute(this._el, 'class', iconClassNameArr.join(' ')); } else { this._renderer.addClass(this._el, "anticon-" + this.type); } } }; /** * @param {?} svg * @return {?} */ NzIconDirective.prototype._setSVGData = /** * @param {?} svg * @return {?} */ function (svg) { if (typeof this.type === 'string') { this._renderer.setAttribute(svg, 'data-icon', this.type); this._renderer.setAttribute(svg, 'aria-hidden', 'true'); } }; /** * @param {?} svg * @return {?} */ NzIconDirective.prototype._addExtraModifications = /** * @param {?} svg * @return {?} */ function (svg) { this._toggleSpin(svg); this._setSVGData(svg); }; /** * @return {?} */ NzIconDirective.prototype.ngOnChanges = /** * @return {?} */ function () { var _this = this; if (!this.iconfont) { // For ant design icons. this._setClassName(); this._changeIcon().then(function (svg) { _this._addExtraModifications(svg); }).catch(function (err) { if (err) { console.error(err); console.warn('[NG-ZORRO]', "You can find more about this error on http://ng.ant.design/components/icon/en"); } }); } else { // For iconfont icons. this._setSVGElement(this._iconService.createIconfontIcon("#" + this.iconfont)); } }; /** * Subscribe to DOM element attribute change events, so when user use ngClass or something the icon changes with it. */ /** * Subscribe to DOM element attribute change events, so when user use ngClass or something the icon changes with it. * @return {?} */ NzIconDirective.prototype.ngOnInit = /** * Subscribe to DOM element attribute change events, so when user use ngClass or something the icon changes with it. * @return {?} */ function () { var _this = this; this._el = this._elementRef.nativeElement; // Make the component compatible to old class="anticon" API. if (this._el && !this.type) { this._warnAPI('old'); this._classChangeHandler(this._el.className); this._classNameObserver = new MutationObserver(function (mutations) { mutations .filter(function (mutation) { return mutation.attributeName === 'class'; }) .forEach(function (mutation) { return _this._classChangeHandler((/** @type {?} */ (mutation.target)).className); }); }); this._classNameObserver.observe(this._elementRef.nativeElement, { attributes: true }); } if (!this._el.classList.contains('anticon')) { this._renderer.setAttribute(this._el, 'class', "anticon " + this._el.className); } if (this.type) { this._setClassName(); } }; /** * @return {?} */ NzIconDirective.prototype.ngOnDestroy = /** * @return {?} */ function () { if (this._classNameObserver) { this._classNameObserver.disconnect(); } }; /** * If custom content is provided, should try to normalize the svg element. */ /** * If custom content is provided, should try to normalize the svg element. * @return {?} */ NzIconDirective.prototype.ngAfterContentChecked = /** * If custom content is provided, should try to normalize the svg element. * @return {?} */ function () { /** @type {?} */ var children = (/** @type {?} */ (this._elementRef.nativeElement)).children; if (children && children.length && !this.type) { this._iconService.normalizeSvgElement(/** @type {?} */ (children[0])); } }; NzIconDirective.decorators = [ { type: Directive, args: [{ selector: 'i.anticon, [nz-icon]' },] } ]; /** @nocollapse */ NzIconDirective.ctorParameters = function () { return [ { type: NzIconService }, { type: ElementRef }, { type: Renderer2 } ]; }; NzIconDirective.propDecorators = { spin: [{ type: Input }], iconfont: [{ type: Input }] }; return NzIconDirective; }(IconDirective)); export { NzIconDirective }; function NzIconDirective_tsickle_Closure_declarations() { /** @type {?} */ NzIconDirective.prototype.spin; /** @type {?} */ NzIconDirective.prototype.iconfont; /** @type {?} */ NzIconDirective.prototype._classNameObserver; /** @type {?} */ NzIconDirective.prototype._el; /** @type {?} */ NzIconDirective.prototype._iconService; /** @type {?} */ NzIconDirective.prototype._elementRef; /** @type {?} */ NzIconDirective.prototype._renderer; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnotaWNvbi5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9zb2xhci1uZy16b3Jyby1hbnRkLyIsInNvdXJjZXMiOlsiaWNvbi9uei1pY29uLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsU0FBUyxFQUNULFVBQVUsRUFDVixLQUFLLEVBSUwsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBRWxELElBQU0sVUFBVSxHQUFHLGNBQWMsQ0FBQzs7Ozs7Ozs7O0lBWUcsMkNBQWE7SUFtR2hELHlCQUFtQixZQUEyQixFQUFTLFdBQXVCLEVBQVMsU0FBb0I7UUFBM0csWUFDRSxrQkFBTSxZQUFZLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxTQUM1QztRQUZrQixrQkFBWSxHQUFaLFlBQVksQ0FBZTtRQUFTLGlCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQVMsZUFBUyxHQUFULFNBQVMsQ0FBVztxQkFsRzNGLEtBQUs7O0tBb0dwQjs7Ozs7OztJQXpGTyw2Q0FBbUI7Ozs7OztjQUFDLFNBQWlCO1FBQzNDLElBQUksU0FBUyxFQUFFOztZQUNiLElBQU0sUUFBUSxHQUFHLFNBQVM7aUJBQ3ZCLEtBQUssQ0FBQyxJQUFJLENBQUM7aUJBQ1gsTUFBTSxDQUFDLFVBQUEsR0FBRyxJQUFJLE9BQUEsR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLEtBQUssY0FBYyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUF0RSxDQUFzRSxDQUFDLENBQUUsQ0FBQyxDQUFFLENBQUM7WUFFOUYsSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDYixPQUFPO2FBQ1I7O1lBRUQsSUFBSSxjQUFjLEdBQUcsUUFBUSxDQUFDLE9B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QUFDO1NBQ3ZGO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUMzQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxhQUFXLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBVyxDQUFDLENBQUM7U0FDakY7UUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDYixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDdEI7S0FDRjs7OztJQUVELHFDQUFXOzs7SUFBWDtRQUNFLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzNCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUN0QztLQUNGO0lBRUQ7O09BRUc7Ozs7O0lBQ0gsK0NBQXFCOzs7O0lBQXJCOztRQUNFLElBQU0sUUFBUSxHQUFHLG1CQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBNEIsRUFBQyxDQUFDLFFBQVEsQ0FBQztRQUMxRSxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUM3QyxJQUFJLENBQUMsWUFBWSxDQUFDLG1CQUFtQixtQkFBQyxRQUFRLENBQUUsQ0FBQyxDQUFnQixFQUFDLENBQUM7U0FDcEU7S0FDRjs7Z0JBcktGLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsc0JBQXNCO2lCQUNqQzs7OztnQkFiUSxhQUFhO2dCQVJwQixVQUFVO2dCQUtWLFNBQVM7Ozt1QkFrQlIsS0FBSzsyQkFDTCxLQUFLOzswQkE1QlI7RUEwQnFDLGFBQWE7U0FBckMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGlzRGV2TW9kZSxcbiAgQWZ0ZXJDb250ZW50Q2hlY2tlZCxcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgUmVuZGVyZXIyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSWNvbkRpcmVjdGl2ZSB9IGZyb20gJ0BhbnQtZGVzaWduL2ljb25zLWFuZ3VsYXInO1xuaW1wb3J0IHsgTnpJY29uU2VydmljZSB9IGZyb20gJy4vbnotaWNvbi5zZXJ2aWNlJztcblxuY29uc3QgaWNvblR5cGVSRSA9IC9eYW50aWNvblxcLVxcdy87XG5cbi8qKlxuICogVGhpcyBkaXJlY3RpdmUgZXh0ZW5kcyBJY29uRGlyZWN0aXZlIHRvIHByb3ZpZGU6XG4gKlxuICogLSBJY29uRm9udCBzdXBwb3J0XG4gKiAtIHNwaW5uaW5nXG4gKiAtIG9sZCBBUEkgY29tcGF0aWJpbGl0eVxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdpLmFudGljb24sIFtuei1pY29uXSdcbn0pXG5leHBvcnQgY2xhc3MgTnpJY29uRGlyZWN0aXZlIGV4dGVuZHMgSWNvbkRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIEFmdGVyQ29udGVudENoZWNrZWQge1xuICBASW5wdXQoKSBzcGluID0gZmFsc2U7XG4gIEBJbnB1dCgpIGljb25mb250OiBzdHJpbmc7XG5cbiAgLy8gcHJpdmF0ZSBfcmVuZGVyZXI6IFJlbmRlcmVyMjtcbiAgcHJpdmF0ZSBfY2xhc3NOYW1lT2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXI7XG4gIHByaXZhdGUgX2VsOiBIVE1MRWxlbWVudDtcblxuICAvKipcbiAgICogSW4gb3JkZXIgdG8gbWFrZSB0aGlzIGRpcmVjdGl2ZSBjb21wYXRpYmxlIHRvIG9sZCBBUEksIHdlIGhhZCBkbyBzb21lIHVnbHkgc3R1ZmYgaGVyZS5cbiAgICogVE9ETzogU2hvdWxkIGJlIHJlbW92ZWQgaW4gbmV4dCBtYWpvciB2ZXJzaW9uLlxuICAgKi9cbiAgcHJpdmF0ZSBfY2xhc3NDaGFuZ2VIYW5kbGVyKGNsYXNzTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKGNsYXNzTmFtZSkge1xuICAgICAgY29uc3QgaWNvblR5cGUgPSBjbGFzc05hbWVcbiAgICAgICAgLnNwbGl0KC9cXHMvKVxuICAgICAgICAuZmlsdGVyKGNscyA9PiBjbHMgIT09ICdhbnRpY29uJyAmJiBjbHMgIT09ICdhbnRpY29uLXNwaW4nICYmICEhY2xzLm1hdGNoKGljb25UeXBlUkUpKVsgMCBdO1xuXG4gICAgICBpZiAoIWljb25UeXBlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IHBhcnNlZEljb25UeXBlID0gaWNvblR5cGUucmVwbGFjZSgnYW50aWNvbi0nLCAnJyk7XG4gICAgICBpZiAocGFyc2VkSWNvblR5cGUuaW5jbHVkZXMoJ3ZlcnRpY2xlJykpIHtcbiAgICAgICAgcGFyc2VkSWNvblR5cGUgPSBwYXJzZWRJY29uVHlwZS5yZXBsYWNlKCd2ZXJ0aWNsZScsICd2ZXJ0aWNhbCcpO1xuICAgICAgICB0aGlzLl93YXJuQVBJKCdjcm9zcycpO1xuICAgICAgfVxuICAgICAgaWYgKHBhcnNlZEljb25UeXBlLnN0YXJ0c1dpdGgoJ2Nyb3NzJykpIHtcbiAgICAgICAgcGFyc2VkSWNvblR5cGUgPSBwYXJzZWRJY29uVHlwZS5yZXBsYWNlKCdjcm9zcycsICdjbG9zZScpO1xuICAgICAgICB0aGlzLl93YXJuQVBJKCd2ZXJ0aWNhbCcpO1xuICAgICAgfVxuXG4gICAgICAvLyBPbmx5IGNoYW5nZSBpY29uIHdoZW4gaWNvbiB0eXBlIGRvZXMgY2hhbmdlLlxuICAgICAgaWYgKHRoaXMudHlwZSAhPT0gcGFyc2VkSWNvblR5cGUpIHtcbiAgICAgICAgdGhpcy50eXBlID0gcGFyc2VkSWNvblR5cGU7XG4gICAgICAgIHRoaXMuX2NoYW5nZUljb24oKS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgIGNvbnNvbGUud2FybignW05HLVpPUlJPXScsIGBZb3UgY2FuIGZpbmQgbW9yZSBhYm91dCB0aGlzIGVycm9yIG9uIGh0dHA6Ly9uZy5hbnQuZGVzaWduL2NvbXBvbmVudHMvaWNvbi9lblxcbmAsIGVycik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbiBvcmRlciB0byBtYWtlIHRoaXMgZGlyZWN0aXZlIGNvbXBhdGlibGUgdG8gb2xkIEFQSSwgd2UgaGFkIGRvIHNvbWUgdWdseSBzdHVmZiBoZXJlLlxuICAgKiBUT0RPOiBTaG91bGQgYmUgcmVtb3ZlZCBpbiBuZXh0IG1ham9yIHZlcnNpb24uXG4gICAqL1xuICBwcml2YXRlIF93YXJuQVBJKHR5cGU6ICdvbGQnIHwgJ2Nyb3NzJyB8ICd2ZXJ0aWNhbCcpOiB2b2lkIHtcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgIGlmICh0eXBlID09PSAnb2xkJyAmJiAhdGhpcy5faWNvblNlcnZpY2Uud2FybmVkQWJvdXRBUEkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbTkctWk9SUk9dJywgYDxpIGNsYXNzPVwiYW50aWNvblwiPjwvaT4gd291bGQgYmUgZGVwcmVjYXRlZCBzb29uLiBQbGVhc2UgdXNlIDxpIG56LWljb24gdHlwZT1cIlwiPjwvaT4gQVBJLmApO1xuICAgICAgICB0aGlzLl9pY29uU2VydmljZS53YXJuZWRBYm91dEFQSSA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodHlwZSA9PT0gJ2Nyb3NzJyAmJiAhdGhpcy5faWNvblNlcnZpY2Uud2FybmVkQWJvdXRDcm9zcykge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1tORy1aT1JST10nLCBgJ2Nyb3NzJyBpY29uIGlzIHJlcGxhY2VkIGJ5ICdjbG9zZScgaWNvbi5gKTtcbiAgICAgICAgdGhpcy5faWNvblNlcnZpY2Uud2FybmVkQWJvdXRDcm9zcyA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodHlwZSA9PT0gJ3ZlcnRpY2FsJyAmJiAhdGhpcy5faWNvblNlcnZpY2Uud2FybmVkQWJvdXRWZXJ0aWNhbCkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1tORy1aT1JST10nLCBgJ3ZlcnRpY2xlJyBpcyBtaXNzcGVsbGVkLCB3b3VsZCBiZSBjb3JyZWN0ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbi5gKTtcbiAgICAgICAgdGhpcy5faWNvblNlcnZpY2Uud2FybmVkQWJvdXRWZXJ0aWNhbCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfdG9nZ2xlU3Bpbihzdmc6IFNWR0VsZW1lbnQpOiB2b2lkIHtcbiAgICBpZiAoKHRoaXMuc3BpbiB8fCB0aGlzLnR5cGUgPT09ICdsb2FkaW5nJykgJiYgIXRoaXMuX2VsLmNsYXNzTGlzdC5jb250YWlucygnYW50aWNvbi1zcGluJykpIHtcbiAgICAgIHRoaXMuX3JlbmRlcmVyLmFkZENsYXNzKHN2ZywgJ2FudGljb24tc3BpbicpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9yZW5kZXJlci5yZW1vdmVDbGFzcyhzdmcsICdhbnRpY29uLXNwaW4nKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zZXRDbGFzc05hbWUoKTogdm9pZCB7XG4gICAgLy8gSWYgdGhlcmUncyBub3QgYW4gYW50aWNvbiBjbGFzcywgdXN1YWxseSBhIG5ldyBBUEkgaWNvbiwgZ2V0IHRoZSBpY29uIGNsYXNzIG5hbWUgYmFjay5cbiAgICAvLyBhbnRpY29uIHNob3VsZCBiZSBhZGRlZCBiZWZvcmUgb3RoZXIgY2xhc3MgbmFtZXMuXG4gICAgaWYgKHRoaXMuX2VsICYmIHR5cGVvZiB0aGlzLnR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBpY29uQ2xhc3NOYW1lQXJyID0gdGhpcy5fZWwuY2xhc3NOYW1lLnNwbGl0KC9cXHMvKTtcbiAgICAgIGNvbnN0IG9sZFR5cGVOYW1lSW5kZXggPSBpY29uQ2xhc3NOYW1lQXJyLmZpbmRJbmRleChjbHMgPT4gY2xzICE9PSAnYW50aWNvbicgJiYgY2xzICE9PSAnYW50aWNvbi1zcGluJyAmJiAhIWNscy5tYXRjaChpY29uVHlwZVJFKSk7XG5cbiAgICAgIGlmIChvbGRUeXBlTmFtZUluZGV4ICE9PSAtMSkge1xuICAgICAgICBpY29uQ2xhc3NOYW1lQXJyLnNwbGljZShvbGRUeXBlTmFtZUluZGV4LCAxLCBgYW50aWNvbi0ke3RoaXMudHlwZX1gKTtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuX2VsLCAnY2xhc3MnLCBpY29uQ2xhc3NOYW1lQXJyLmpvaW4oJyAnKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9yZW5kZXJlci5hZGRDbGFzcyh0aGlzLl9lbCwgYGFudGljb24tJHt0aGlzLnR5cGV9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2V0U1ZHRGF0YShzdmc6IFNWR0VsZW1lbnQpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIHRoaXMudHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuX3JlbmRlcmVyLnNldEF0dHJpYnV0ZShzdmcsICdkYXRhLWljb24nLCB0aGlzLnR5cGUpO1xuICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0QXR0cmlidXRlKHN2ZywgJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9hZGRFeHRyYU1vZGlmaWNhdGlvbnMoc3ZnOiBTVkdFbGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy5fdG9nZ2xlU3BpbihzdmcpO1xuICAgIHRoaXMuX3NldFNWR0RhdGEoc3ZnKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBfaWNvblNlcnZpY2U6IE56SWNvblNlcnZpY2UsIHB1YmxpYyBfZWxlbWVudFJlZjogRWxlbWVudFJlZiwgcHVibGljIF9yZW5kZXJlcjogUmVuZGVyZXIyKSB7XG4gICAgc3VwZXIoX2ljb25TZXJ2aWNlLCBfZWxlbWVudFJlZiwgX3JlbmRlcmVyKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pY29uZm9udCkge1xuICAgICAgLy8gRm9yIGFudCBkZXNpZ24gaWNvbnMuXG4gICAgICB0aGlzLl9zZXRDbGFzc05hbWUoKTtcbiAgICAgIHRoaXMuX2NoYW5nZUljb24oKS50aGVuKHN2ZyA9PiB7XG4gICAgICAgIHRoaXMuX2FkZEV4dHJhTW9kaWZpY2F0aW9ucyhzdmcpO1xuICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgIGNvbnNvbGUud2FybignW05HLVpPUlJPXScsIGBZb3UgY2FuIGZpbmQgbW9yZSBhYm91dCB0aGlzIGVycm9yIG9uIGh0dHA6Ly9uZy5hbnQuZGVzaWduL2NvbXBvbmVudHMvaWNvbi9lbmApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRm9yIGljb25mb250IGljb25zLlxuICAgICAgdGhpcy5fc2V0U1ZHRWxlbWVudCh0aGlzLl9pY29uU2VydmljZS5jcmVhdGVJY29uZm9udEljb24oYCMke3RoaXMuaWNvbmZvbnR9YCkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmUgdG8gRE9NIGVsZW1lbnQgYXR0cmlidXRlIGNoYW5nZSBldmVudHMsIHNvIHdoZW4gdXNlciB1c2UgbmdDbGFzcyBvciBzb21ldGhpbmcgdGhlIGljb24gY2hhbmdlcyB3aXRoIGl0LlxuICAgKi9cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fZWwgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAvLyBNYWtlIHRoZSBjb21wb25lbnQgY29tcGF0aWJsZSB0byBvbGQgY2xhc3M9XCJhbnRpY29uXCIgQVBJLlxuICAgIGlmICh0aGlzLl9lbCAmJiAhdGhpcy50eXBlKSB7XG4gICAgICB0aGlzLl93YXJuQVBJKCdvbGQnKTtcbiAgICAgIHRoaXMuX2NsYXNzQ2hhbmdlSGFuZGxlcih0aGlzLl9lbC5jbGFzc05hbWUpO1xuICAgICAgdGhpcy5fY2xhc3NOYW1lT2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zOiBNdXRhdGlvblJlY29yZFtdKSA9PiB7XG4gICAgICAgIG11dGF0aW9uc1xuICAgICAgICAgIC5maWx0ZXIoKG11dGF0aW9uOiBNdXRhdGlvblJlY29yZCkgPT4gbXV0YXRpb24uYXR0cmlidXRlTmFtZSA9PT0gJ2NsYXNzJylcbiAgICAgICAgICAuZm9yRWFjaCgobXV0YXRpb246IE11dGF0aW9uUmVjb3JkKSA9PiB0aGlzLl9jbGFzc0NoYW5nZUhhbmRsZXIoKG11dGF0aW9uLnRhcmdldCBhcyBIVE1MRWxlbWVudCkuY2xhc3NOYW1lKSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX2NsYXNzTmFtZU9ic2VydmVyLm9ic2VydmUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCB7IGF0dHJpYnV0ZXM6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9lbC5jbGFzc0xpc3QuY29udGFpbnMoJ2FudGljb24nKSkge1xuICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuX2VsLCAnY2xhc3MnLCBgYW50aWNvbiAke3RoaXMuX2VsLmNsYXNzTmFtZX1gKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50eXBlKSB7XG4gICAgICB0aGlzLl9zZXRDbGFzc05hbWUoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY2xhc3NOYW1lT2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMuX2NsYXNzTmFtZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSWYgY3VzdG9tIGNvbnRlbnQgaXMgcHJvdmlkZWQsIHNob3VsZCB0cnkgdG8gbm9ybWFsaXplIHRoZSBzdmcgZWxlbWVudC5cbiAgICovXG4gIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9ICh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLmNoaWxkcmVuO1xuICAgIGlmIChjaGlsZHJlbiAmJiBjaGlsZHJlbi5sZW5ndGggJiYgIXRoaXMudHlwZSkge1xuICAgICAgdGhpcy5faWNvblNlcnZpY2Uubm9ybWFsaXplU3ZnRWxlbWVudChjaGlsZHJlblsgMCBdIGFzIFNWR0VsZW1lbnQpO1xuICAgIH1cbiAgfVxufVxuIl19