ng-zorro-antd-mobile
Version:
An enterprise-class mobile UI components based on Ant Design and Angular
159 lines • 19.8 kB
JavaScript
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
import { Injectable, ApplicationRef, NgZone, ComponentFactoryResolver } from '@angular/core';
import { ToastComponent } from './toast.component';
import { ToastOptions } from './toast-options.provider';
import { first } from 'rxjs/operators';
import * as i0 from "@angular/core";
let ToastService = class ToastService {
constructor(_appRef, _cfr, _zone) {
this._appRef = _appRef;
this._cfr = _cfr;
this._zone = _zone;
this.timeout = null;
this.zone = null;
this.compRef = null;
this.insertElement = null;
this.toastCompFactory = null;
this.appRef = null;
this.zone = this._zone;
this.appRef = this._appRef;
this.toastCompFactory = this._cfr.resolveComponentFactory(ToastComponent);
}
_initConfig(config, options) {
const props = {};
const optionalParams = ['content', 'iconType', 'mask', 'position'];
config = Object.assign(options, config);
optionalParams.forEach(key => {
if (config[key] !== undefined) {
props[key] = config[key];
}
});
const iconType = {
info: '',
success: 'success',
fail: 'fail',
offline: 'dislike',
loading: 'loading'
}[options.iconType];
props['iconType'] = iconType;
props['mask'] = options.mask;
props['position'] = options.position;
return props;
}
async notice(config, type, timeInterval = 2000, onClose, mask = true, position = 'middle') {
// 如果已经存在,在没有遮罩层的情况下,会响应别的toast,需要清除原来的
if (this.compRef) {
this.hide();
}
const options = new ToastOptions();
options.iconType = type;
options.mask = mask;
options.position = position;
const props = this._initConfig(config, options);
this.insertElement = document.body.insertBefore(document.createElement(this.toastCompFactory.selector), document.body.firstChild);
let instance;
let subject;
// 需要等待应用程序稳定后再安装,比如在 ngOnInit 里调用
if (!this._zone.isStable) {
await this._appRef.isStable.pipe(first(stable => stable));
}
this.compRef = this._appRef.bootstrap(this.toastCompFactory);
instance = this.compRef.instance;
subject = instance.subject;
if (timeInterval) {
this.timeout = setTimeout(() => {
if (onClose) {
onClose();
}
this.hide();
}, timeInterval);
}
Object.assign(instance, props);
return subject;
}
/**
* Open info dialog
*/
info(content, timeInterval, onClose, mask, position) {
const config = Object.assign({
iconType: 'info',
content: content
});
return this.notice(config, 'info', timeInterval, onClose, mask, position);
}
/**
* Open success dialog
*/
success(content, timeInterval, onClose, mask, position) {
const config = Object.assign({
iconType: 'success',
content: content
});
return this.notice(config, 'success', timeInterval, onClose, mask, position);
}
show(content, timeInterval, mask, position) {
const config = Object.assign({
iconType: 'info',
content: content
});
return this.notice(config, 'info', timeInterval, () => { }, mask, position);
}
fail(content, timeInterval, onClose, mask, position) {
const config = Object.assign({
iconType: 'fail',
content: content
});
return this.notice(config, 'fail', timeInterval, onClose, mask, position);
}
offline(content, timeInterval, onClose, mask, position) {
const config = Object.assign({
iconType: 'offline',
content: content
});
return this.notice(config, 'offline', timeInterval, onClose, mask, position);
}
loading(content, timeInterval, onClose, mask, position) {
const config = Object.assign({
iconType: 'loading',
content: content
});
return this.notice(config, 'loading', timeInterval, onClose, mask, position);
}
hide() {
if (this.timeout) {
clearTimeout(this.timeout);
}
if (this.compRef) {
this._zone.run(() => {
this.compRef.destroy();
document.body.removeChild(this.insertElement);
});
this.compRef = null;
this.insertElement = null;
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: ToastService, deps: [{ token: i0.ApplicationRef }, { token: i0.ComponentFactoryResolver }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: ToastService, providedIn: 'root' }); }
};
ToastService = __decorate([
Injectable(),
__metadata("design:paramtypes", [ApplicationRef, ComponentFactoryResolver, NgZone])
], ToastService);
export { ToastService };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: ToastService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}, {
type: Injectable
}], ctorParameters: () => [{ type: i0.ApplicationRef }, { type: i0.ComponentFactoryResolver }, { type: i0.NgZone }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3Quc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2NvbXBvbmVudHMvdG9hc3QvdG9hc3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQ0wsVUFBVSxFQUdWLGNBQWMsRUFDZCxNQUFNLEVBQ04sd0JBQXdCLEVBQ3pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQVdoQyxJQUFNLFlBQVksR0FBbEIsTUFBTSxZQUFZO0lBUXZCLFlBQW9CLE9BQXVCLEVBQVUsSUFBOEIsRUFBVSxLQUFhO1FBQXRGLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBQVUsU0FBSSxHQUFKLElBQUksQ0FBMEI7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFRO1FBUDFHLFlBQU8sR0FBRyxJQUFJLENBQUM7UUFDZixTQUFJLEdBQVcsSUFBSSxDQUFDO1FBQ3BCLFlBQU8sR0FBc0IsSUFBSSxDQUFDO1FBQ2xDLGtCQUFhLEdBQWdCLElBQUksQ0FBQztRQUNsQyxxQkFBZ0IsR0FBcUMsSUFBSSxDQUFDO1FBQzFELFdBQU0sR0FBbUIsSUFBSSxDQUFDO1FBRzVCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDM0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVELFdBQVcsQ0FBQyxNQUFjLEVBQUUsT0FBcUI7UUFDL0MsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FB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SyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3ZCLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNoRCxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1NBQzNCO0lBQ0gsQ0FBQzs4R0E5SVUsWUFBWTtrSEFBWixZQUFZLGNBSFgsTUFBTTs7QUFHUCxZQUFZO0lBRHhCLFVBQVUsRUFBRTtxQ0FTa0IsY0FBYyxFQUFnQix3QkFBd0IsRUFBaUIsTUFBTTtHQVIvRixZQUFZLENBK0l4Qjs7MkZBL0lZLFlBQVk7a0JBSnhCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COztrQkFDQSxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSW5qZWN0YWJsZSxcbiAgQ29tcG9uZW50UmVmLFxuICBDb21wb25lbnRGYWN0b3J5LFxuICBBcHBsaWNhdGlvblJlZixcbiAgTmdab25lLFxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUb2FzdENvbXBvbmVudCB9IGZyb20gJy4vdG9hc3QuY29tcG9uZW50JztcbmltcG9ydCB7IFRvYXN0T3B0aW9ucyB9IGZyb20gJy4vdG9hc3Qtb3B0aW9ucy5wcm92aWRlcic7XG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuZXhwb3J0IGludGVyZmFjZSBDb25maWdJbnRlcmZhY2Uge1xuICBjb250ZW50PzogYW55O1xuICBpY29uVHlwZT86IHN0cmluZztcbiAgbWFzaz86IGJvb2xlYW47XG59XG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBUb2FzdFNlcnZpY2Uge1xuICB0aW1lb3V0ID0gbnVsbDtcbiAgem9uZTogTmdab25lID0gbnVsbDtcbiAgY29tcFJlZjogQ29tcG9uZW50UmVmPGFueT4gPSBudWxsO1xuICBpbnNlcnRFbGVtZW50OiBIVE1MRWxlbWVudCA9IG51bGw7XG4gIHRvYXN0Q29tcEZhY3Rvcnk6IENvbXBvbmVudEZhY3Rvcnk8VG9hc3RDb21wb25lbnQ+ID0gbnVsbDtcbiAgYXBwUmVmOiBBcHBsaWNhdGlvblJlZiA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfYXBwUmVmOiBBcHBsaWNhdGlvblJlZiwgcHJpdmF0ZSBfY2ZyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIHByaXZhdGUgX3pvbmU6IE5nWm9uZSkge1xuICAgIHRoaXMuem9uZSA9IHRoaXMuX3pvbmU7XG4gICAgdGhpcy5hcHBSZWYgPSB0aGlzLl9hcHBSZWY7XG4gICAgdGhpcy50b2FzdENvbXBGYWN0b3J5ID0gdGhpcy5fY2ZyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KFRvYXN0Q29tcG9uZW50KTtcbiAgfVxuXG4gIF9pbml0Q29uZmlnKGNvbmZpZzogT2JqZWN0LCBvcHRpb25zOiBUb2FzdE9wdGlvbnMpOiBPYmplY3Qge1xuICAgIGNvbnN0IHByb3BzID0ge307XG4gICAgY29uc3Qgb3B0aW9uYWxQYXJhbXM6IHN0cmluZ1tdID0gWydjb250ZW50JywgJ2ljb25UeXBlJywgJ21hc2snLCAncG9zaXRpb24nXTtcblxuICAgIGNvbmZpZyA9IE9iamVjdC5hc3NpZ24ob3B0aW9ucywgY29uZmlnKTtcbiAgICBvcHRpb25hbFBhcmFtcy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoY29uZmlnW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwcm9wc1trZXldID0gY29uZmlnW2tleV07XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBpY29uVHlwZSA9IHtcbiAgICAgIGluZm86ICcnLFxuICAgICAgc3VjY2VzczogJ3N1Y2Nlc3MnLFxuICAgICAgZmFpbDogJ2ZhaWwnLFxuICAgICAgb2ZmbGluZTogJ2Rpc2xpa2UnLFxuICAgICAgbG9hZGluZzogJ2xvYWRpbmcnXG4gICAgfVtvcHRpb25zLmljb25UeXBlXTtcblxuICAgIHByb3BzWydpY29uVHlwZSddID0gaWNvblR5cGU7XG4gICAgcHJvcHNbJ21hc2snXSA9IG9wdGlvbnMubWFzaztcbiAgICBwcm9wc1sncG9zaXRpb24nXSA9IG9wdGlvbnMucG9zaXRpb247XG4gICAgcmV0dXJuIHByb3BzO1xuICB9XG5cbiAgYXN5bmMgbm90aWNlKGNvbmZpZzogQ29uZmlnSW50ZXJmYWNlLCB0eXBlLCB0aW1lSW50ZXJ2YWwgPSAyMDAwLCBvbkNsb3NlLCBtYXNrID0gdHJ1ZSwgcG9zaXRpb24gPSAnbWlkZGxlJykge1xuICAgIC8vIOWmguaenOW3sue7j+WtmOWcqO+8jOWcqOayoeaciemBrue9qeWxgueahOaDheWGteS4i++8jOS8muWTjeW6lOWIq+eahHRvYXN077yM6ZyA6KaB5riF6Zmk5Y6f5p2l55qEXG4gICAgaWYgKHRoaXMuY29tcFJlZikge1xuICAgICAgdGhpcy5oaWRlKCk7XG4gICAgfVxuICAgIGNvbnN0IG9wdGlvbnM6IFRvYXN0T3B0aW9ucyA9IG5ldyBUb2FzdE9wdGlvbnMoKTtcbiAgICBvcHRpb25zLmljb25UeXBlID0gdHlwZTtcbiAgICBvcHRpb25zLm1hc2sgPSBtYXNrO1xuICAgIG9wdGlvbnMucG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgICBjb25zdCBwcm9wcyA9IHRoaXMuX2luaXRDb25maWcoY29uZmlnLCBvcHRpb25zKTtcblxuICAgIHRoaXMuaW5zZXJ0RWxlbWVudCA9IGRvY3VtZW50LmJvZHkuaW5zZXJ0QmVmb3JlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhpcy50b2FzdENvbXBGYWN0b3J5LnNlbGVjdG9yKSwgZG9jdW1lbnQuYm9keS5maXJzdENoaWxkKTtcbiAgICBsZXQgaW5zdGFuY2U6IGFueTtcbiAgICBsZXQgc3ViamVjdDogYW55O1xuICAgIC8vIOmcgOimgeetieW+heW6lOeUqOeoi+W6j+eos+WumuWQjuWGjeWuieijhe+8jOavlOWmguWcqCBuZ09uSW5pdCDph4zosIPnlKhcbiAgICBpZiAoIXRoaXMuX3pvbmUuaXNTdGFibGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuX2FwcFJlZi5pc1N0YWJsZS5waXBlKFxuICAgICAgICBmaXJzdChzdGFibGUgPT4gc3RhYmxlKVxuICAgICAgKVxuICAgIH1cblxuICAgIHRoaXMuY29tcFJlZiA9IHRoaXMuX2FwcFJlZi5ib290c3RyYXAodGhpcy50b2FzdENvbXBGYWN0b3J5KTtcbiAgICBpbnN0YW5jZSA9IHRoaXMuY29tcFJlZi5pbnN0YW5jZTtcbiAgICBzdWJqZWN0ID0gaW5zdGFuY2Uuc3ViamVjdDtcblxuICAgIGlmICh0aW1lSW50ZXJ2YWwpIHtcbiAgICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAob25DbG9zZSkge1xuICAgICAgICAgIG9uQ2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgIH0sIHRpbWVJbnRlcnZhbCk7XG4gICAgfVxuICAgIE9iamVjdC5hc3NpZ24oaW5zdGFuY2UsIHByb3BzKTtcbiAgICByZXR1cm4gc3ViamVjdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVuIGluZm8gZGlhbG9nXG4gICAqL1xuICBpbmZvKGNvbnRlbnQ/OiBzdHJpbmcsIHRpbWVJbnRlcnZhbD86IG51bWJlciwgb25DbG9zZT86ICgpID0+IHZvaWQsIG1hc2s/OiBib29sZWFuLCBwb3NpdGlvbj86IHN0cmluZykge1xuICAgIGNvbnN0IGNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgaWNvblR5cGU6ICdpbmZvJyxcbiAgICAgIGNvbnRlbnQ6IGNvbnRlbnRcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5ub3RpY2UoY29uZmlnLCAnaW5mbycsIHRpbWVJbnRlcnZhbCwgb25DbG9zZSwgbWFzaywgcG9zaXRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW4gc3VjY2VzcyBkaWFsb2dcbiAgICovXG4gIHN1Y2Nlc3MoY29udGVudD86IHN0cmluZywgdGltZUludGVydmFsPzogbnVtYmVyLCBvbkNsb3NlPzogKCkgPT4gdm9pZCwgbWFzaz86IGJvb2xlYW4sIHBvc2l0aW9uPzogc3RyaW5nKSB7XG4gICAgY29uc3QgY29uZmlnID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICBpY29uVHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgY29udGVudDogY29udGVudFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLm5vdGljZShjb25maWcsICdzdWNjZXNzJywgdGltZUludGVydmFsLCBvbkNsb3NlLCBtYXNrLCBwb3NpdGlvbik7XG4gIH1cblxuICBzaG93KGNvbnRlbnQ/OiBzdHJpbmcsIHRpbWVJbnRlcnZhbD86IG51bWJlciwgbWFzaz86IGJvb2xlYW4sIHBvc2l0aW9uPzogc3RyaW5nKSB7XG4gICAgY29uc3QgY29uZmlnID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICBpY29uVHlwZTogJ2luZm8nLFxuICAgICAgY29udGVudDogY29udGVudFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLm5vdGljZShjb25maWcsICdpbmZvJywgdGltZUludGVydmFsLCAoKSA9PiB7fSwgbWFzaywgcG9zaXRpb24pO1xuICB9XG5cbiAgZmFpbChjb250ZW50Pzogc3RyaW5nLCB0aW1lSW50ZXJ2YWw/OiBudW1iZXIsIG9uQ2xvc2U/OiAoKSA9PiB2b2lkLCBtYXNrPzogYm9vbGVhbiwgcG9zaXRpb24/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBjb25maWcgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgIGljb25UeXBlOiAnZmFpbCcsXG4gICAgICBjb250ZW50OiBjb250ZW50XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMubm90aWNlKGNvbmZpZywgJ2ZhaWwnLCB0aW1lSW50ZXJ2YWwsIG9uQ2xvc2UsIG1hc2ssIHBvc2l0aW9uKTtcbiAgfVxuXG4gIG9mZmxpbmUoY29udGVudD86IHN0cmluZywgdGltZUludGVydmFsPzogbnVtYmVyLCBvbkNsb3NlPzogKCkgPT4gdm9pZCwgbWFzaz86IGJvb2xlYW4sIHBvc2l0aW9uPzogc3RyaW5nKSB7XG4gICAgY29uc3QgY29uZmlnID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICBpY29uVHlwZTogJ29mZmxpbmUnLFxuICAgICAgY29udGVudDogY29udGVudFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLm5vdGljZShjb25maWcsICdvZmZsaW5lJywgdGltZUludGVydmFsLCBvbkNsb3NlLCBtYXNrLCBwb3NpdGlvbik7XG4gIH1cblxuICBsb2FkaW5nKGNvbnRlbnQ/OiBzdHJpbmcsIHRpbWVJbnRlcnZhbD86IG51bWJlciwgb25DbG9zZT86ICgpID0+IHZvaWQsIG1hc2s/OiBib29sZWFuLCBwb3NpdGlvbj86IHN0cmluZykge1xuICAgIGNvbnN0IGNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgaWNvblR5cGU6ICdsb2FkaW5nJyxcbiAgICAgIGNvbnRlbnQ6IGNvbnRlbnRcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5ub3RpY2UoY29uZmlnLCAnbG9hZGluZycsIHRpbWVJbnRlcnZhbCwgb25DbG9zZSwgbWFzaywgcG9zaXRpb24pO1xuICB9XG5cbiAgaGlkZSgpIHtcbiAgICBpZiAodGhpcy50aW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29tcFJlZikge1xuICAgICAgdGhpcy5fem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICB0aGlzLmNvbXBSZWYuZGVzdHJveSgpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMuaW5zZXJ0RWxlbWVudCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuY29tcFJlZiA9IG51bGw7XG4gICAgICB0aGlzLmluc2VydEVsZW1lbnQgPSBudWxsO1xuICAgIH1cbiAgfVxufVxuIl19