announcekit-angular
Version:
Use AnnounceKit widgets in your Angular apps
219 lines • 24.7 kB
JavaScript
import { Component, Input, Output, EventEmitter, ViewChild } from '@angular/core';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
export class AnnouncekitComponent {
constructor(ngZone) {
this.ngZone = ngZone;
this.onWidgetOpen = new EventEmitter();
this.onWidgetClose = new EventEmitter();
this.onWidgetUnread = new EventEmitter();
this.onWidgetReady = new EventEmitter();
this.propsValid = true;
this.widgetHandlers = [];
this.widgetHandlers = [];
this.ngZone.runOutsideAngular(() => {
if (!window[`announcekit`]) {
window[`announcekit`] = window[`announcekit`] || {
queue: [],
push(x) {
window[`announcekit`].queue.push(x);
},
on(n, x) {
window[`announcekit`].queue.push([n, x]);
}
};
let scripttag;
scripttag = document.createElement('script');
scripttag.async = true;
scripttag.src = `https://cdn.announcekit.app/widget-v2.js`;
let scr;
scr = document.getElementsByTagName('script')[0];
scr.parentNode.insertBefore(scripttag, scr);
}
});
}
set user(value) {
if (this.isString(value) || this.isString(this._user)) {
this.propsValid = false;
this._user = undefined;
}
else {
if (!value) {
this._user = undefined;
}
else {
this._user = Object.assign({}, value);
}
}
}
set data(value) {
if (this.isString(value) || this.isString(this._data)) {
this.propsValid = false;
this._data = undefined;
}
else {
if (!value) {
this._data = undefined;
}
else {
this._data = Object.assign({}, value);
}
}
}
get user() {
return this._user;
}
get data() {
return this._data;
}
ngOnChanges() {
if (this.propsValid) {
this.loaded();
}
this.propsValid = true;
}
loaded() {
const style = this.widgetStyle;
const styleParams = {
badge: {
style
},
line: {
style
},
float: {
style
}
};
if (this.floatWidget) {
delete styleParams.badge;
delete styleParams.line;
}
const name = Math.random()
.toString(36)
.substring(10);
this.ngZone.runOutsideAngular(() => {
window[`announcekit`].push({
widget: this.widget,
name,
version: 2,
framework: 'angular',
framework_version: '4.0.0',
embed: !!this.embedWidget,
data: this.data,
user: this.user,
lang: this.lang,
labels: this.labels,
user_token: this.userToken,
selector: this.elementRef.nativeElement,
boosters: typeof this.boosters === 'undefined' ? true : this.boosters,
...styleParams,
onInit: (initWidget) => {
if (initWidget.conf.name !== name) {
return initWidget.destroy();
}
const ann = window[`announcekit`];
this.widgetInstance = initWidget;
this.barBooster = ann.boosters.bar;
this.modalBooster = ann.boosters.modal;
this.widgetHandlers.forEach((h) => h(initWidget));
this.widgetHandlers = [];
if (this.onWidgetUnread) {
this.onWidgetUnread.emit(this.widgetInstance.state.ui.unreadCount);
}
ann.on('widget-open', ({ widget }) => {
if (widget === initWidget && this.onWidgetOpen) {
this.onWidgetOpen.emit({ widget });
}
});
ann.on('widget-close', ({ widget }) => {
if (widget === initWidget && this.onWidgetClose) {
this.onWidgetClose.emit({ widget });
}
});
ann.on('widget-ready', ({ widget }) => {
if (widget === initWidget && this.onWidgetReady) {
this.onWidgetReady.emit({ widget });
}
});
}
});
});
}
withWidget(fn) {
return new Promise(res => {
if (this.widgetInstance) {
return res(fn(this.widgetInstance));
}
else {
this.widgetHandlers.push((widget) => {
res(fn(widget));
});
}
});
}
unread() {
return this.withWidget((widget) => widget.state.ui.unreadCount);
}
instance() {
return this.withWidget((widget) => widget);
}
open() {
this.withWidget((widget) => widget.open());
}
close() {
this.withWidget((widget) => widget.close());
}
isString(obj) {
return obj !== undefined && obj !== null && obj.constructor === String;
}
ngAfterViewInit() {
if (!(this.user || this.data)) {
this.loaded();
}
}
}
AnnouncekitComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: AnnouncekitComponent, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
AnnouncekitComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: AnnouncekitComponent, selector: "announcekit", inputs: { widget: "widget", user: "user", data: "data", lang: "lang", floatWidget: "floatWidget", embedWidget: "embedWidget", boosters: "boosters", widgetStyle: "widgetStyle", userToken: "userToken", labels: "labels" }, outputs: { onWidgetOpen: "onWidgetOpen", onWidgetClose: "onWidgetClose", onWidgetUnread: "onWidgetUnread", onWidgetReady: "onWidgetReady" }, viewQueries: [{ propertyName: "elementRef", first: true, predicate: ["ankRef"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div #ankRef style=\"display: inline\" [ngClass]=\"className\">\r\n <ng-content></ng-content>\r\n</div>", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: AnnouncekitComponent, decorators: [{
type: Component,
args: [{ selector: 'announcekit', template: "<div #ankRef style=\"display: inline\" [ngClass]=\"className\">\r\n <ng-content></ng-content>\r\n</div>" }]
}], ctorParameters: function () { return [{ type: i0.NgZone }]; }, propDecorators: { elementRef: [{
type: ViewChild,
args: ['ankRef', { static: true }]
}], widget: [{
type: Input
}], user: [{
type: Input,
args: ['user']
}], data: [{
type: Input,
args: ['data']
}], lang: [{
type: Input
}], floatWidget: [{
type: Input
}], embedWidget: [{
type: Input
}], boosters: [{
type: Input
}], widgetStyle: [{
type: Input
}], userToken: [{
type: Input
}], labels: [{
type: Input
}], onWidgetOpen: [{
type: Output,
args: ['onWidgetOpen']
}], onWidgetClose: [{
type: Output,
args: ['onWidgetClose']
}], onWidgetUnread: [{
type: Output,
args: ['onWidgetUnread']
}], onWidgetReady: [{
type: Output,
args: ['onWidgetReady']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ub3VuY2VraXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ub3VuY2VraXQtYW5ndWxhci9zcmMvbGliL2Fubm91bmNla2l0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL2Fubm91bmNla2l0LWFuZ3VsYXIvc3JjL2xpYi9hbm5vdW5jZWtpdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFxQyxTQUFTLEVBQ3JGLE1BQU0sZUFBZSxDQUFDOzs7QUFpQnZCLE1BQU0sT0FBTyxvQkFBb0I7SUFpRS9CLFlBQW9CLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBeEJWLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUN0QyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDdkMsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQzFDLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQVV6RCxlQUFVLEdBQVksSUFBSSxDQUFDO1FBTTVCLG1CQUFjLEdBQVUsRUFBRSxDQUFDO1FBTWhDLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBRXpCLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFO1lBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEVBQUU7Z0JBQzFCLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUk7b0JBQy9DLEtBQUssRUFBRSxFQUFFO29CQUNULElBQUksQ0FBQyxDQUFNO3dCQUNULE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN0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RCxlQUFlO1FBQ2IsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDN0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ2Y7SUFDSCxDQUFDOztpSEExTlUsb0JBQW9CO3FHQUFwQixvQkFBb0IscWlCQ25CakMsMEdBRU07MkZEaUJPLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSxhQUFhOzZGQUtjLFVBQVU7c0JBQTlDLFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFFMUIsTUFBTTtzQkFBZCxLQUFLO2dCQUVhLElBQUk7c0JBQXRCLEtBQUs7dUJBQUMsTUFBTTtnQkFjTSxJQUFJO3NCQUF0QixLQUFLO3VCQUFDLE1BQU07Z0JBY0osSUFBSTtzQkFBWixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBRWtCLFlBQVk7c0JBQW5DLE1BQU07dUJBQUMsY0FBYztnQkFDRyxhQUFhO3NCQUFyQyxNQUFNO3VCQUFDLGVBQWU7Z0JBQ0csY0FBYztzQkFBdkMsTUFBTTt1QkFBQyxnQkFBZ0I7Z0JBQ0MsYUFBYTtzQkFBckMsTUFBTTt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE5nWm9uZSwgQWZ0ZXJWaWV3SW5pdCwgRWxlbWVudFJlZiwgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbnRlcmZhY2UgVXNlciB7XG4gIGlkOiBhbnk7XG5cbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG5pbnRlcmZhY2UgRGF0YSB7XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYW5ub3VuY2VraXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vYW5ub3VuY2VraXQuY29tcG9uZW50Lmh0bWwnXG59KVxuXG5leHBvcnQgY2xhc3MgQW5ub3VuY2VraXRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgQFZpZXdDaGlsZCgnYW5rUmVmJywge3N0YXRpYzogdHJ1ZX0pIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XG5cbiAgQElucHV0KCkgd2lkZ2V0OiBzdHJpbmc7XG5cbiAgQElucHV0KCd1c2VyJykgc2V0IHVzZXIodmFsdWU6IFVzZXIpIHtcbiAgICBpZiAodGhpcy5pc1N0cmluZyh2YWx1ZSkgfHwgdGhpcy5pc1N0cmluZyh0aGlzLl91c2VyKSkge1xuICAgICAgdGhpcy5wcm9wc1ZhbGlkID0gZmFsc2U7XG4gICAgICB0aGlzLl91c2VyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgdGhpcy5fdXNlciA9IHVuZGVmaW5lZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3VzZXIgPSBPYmplY3QuYXNzaWduKHt9LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQElucHV0KCdkYXRhJykgc2V0IGRhdGEodmFsdWU6IERhdGEpIHtcbiAgICBpZiAodGhpcy5pc1N0cmluZyh2YWx1ZSkgfHwgdGhpcy5pc1N0cmluZyh0aGlzLl9kYXRhKSkge1xuICAgICAgdGhpcy5wcm9wc1ZhbGlkID0gZmFsc2U7XG4gICAgICB0aGlzLl9kYXRhID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgdGhpcy5fZGF0YSA9IHVuZGVmaW5lZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2RhdGEgPSBPYmplY3QuYXNzaWduKHt9LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQElucHV0KCkgbGFuZz86IHN0cmluZztcbiAgQElucHV0KCkgZmxvYXRXaWRnZXQ/OiBib29sZWFuO1xuICBASW5wdXQoKSBlbWJlZFdpZGdldD86IGJvb2xlYW47XG4gIEBJbnB1dCgpIGJvb3N0ZXJzPzogYm9vbGVhbjtcbiAgQElucHV0KCkgd2lkZ2V0U3R5bGU/OiBhbnk7XG4gIEBJbnB1dCgpIHVzZXJUb2tlbj86IHN0cmluZztcbiAgQElucHV0KCkgbGFiZWxzPzogW3N0cmluZ107XG5cbiAgQE91dHB1dCgnb25XaWRnZXRPcGVuJykgb25XaWRnZXRPcGVuID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoJ29uV2lkZ2V0Q2xvc2UnKSBvbldpZGdldENsb3NlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoJ29uV2lkZ2V0VW5yZWFkJykgb25XaWRnZXRVbnJlYWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgnb25XaWRnZXRSZWFkeScpIG9uV2lkZ2V0UmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBnZXQgdXNlcigpOiBVc2VyIHtcbiAgICByZXR1cm4gdGhpcy5fdXNlcjtcbiAgfVxuXG4gIGdldCBkYXRhKCk6IERhdGEge1xuICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9wc1ZhbGlkOiBib29sZWFuID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfdXNlcjogVXNlcjtcbiAgcHJpdmF0ZSBfZGF0YTogRGF0YTtcbiAgcHVibGljIGNsYXNzTmFtZTogc3RyaW5nO1xuXG4gIHB1YmxpYyB3aWRnZXRJbnN0YW5jZTogYW55O1xuICBwdWJsaWMgd2lkZ2V0SGFuZGxlcnM6IGFueVtdID0gW107XG5cbiAgcHVibGljIGJhckJvb3N0ZXI6IGFueTtcbiAgcHVibGljIG1vZGFsQm9vc3RlcjogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbmdab25lOiBOZ1pvbmUpIHtcbiAgICB0aGlzLndpZGdldEhhbmRsZXJzID0gW107XG5cbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBpZiAoIXdpbmRvd1tgYW5ub3VuY2VraXRgXSkge1xuICAgICAgICB3aW5kb3dbYGFubm91bmNla2l0YF0gPSB3aW5kb3dbYGFubm91bmNla2l0YF0gfHwge1xuICAgICAgICAgIHF1ZXVlOiBbXSxcbiAgICAgICAgICBwdXNoKHg6IGFueSkge1xuICAgICAgICAgICAgd2luZG93W2Bhbm5vdW5jZWtpdGBdLnF1ZXVlLnB1c2goeCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbihuOiBhbnksIHg6IGFueSkge1xuICAgICAgICAgICAgd2luZG93W2Bhbm5vdW5jZWtpdGBdLnF1ZXVlLnB1c2goW24sIHhdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgbGV0IHNjcmlwdHRhZzogSFRNTFNjcmlwdEVsZW1lbnQ7XG4gICAgICAgIHNjcmlwdHRhZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpIGFzIEhUTUxTY3JpcHRFbGVtZW50O1xuICAgICAgICBzY3JpcHR0YWcuYXN5bmMgPSB0cnVlO1xuICAgICAgICBzY3JpcHR0YWcuc3JjID0gYGh0dHBzOi8vY2RuLmFubm91bmNla2l0LmFwcC93aWRnZXQtdjIuanNgO1xuXG4gICAgICAgIGxldCBzY3I6IEhUTUxTY3JpcHRFbGVtZW50O1xuICAgICAgICBzY3IgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0JylbMF07XG4gICAgICAgIHNjci5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzY3JpcHR0YWcsIHNjcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcygpIHtcbiAgICBpZiAodGhpcy5wcm9wc1ZhbGlkKSB7XG4gICAgICB0aGlzLmxvYWRlZCgpO1xuICAgIH1cblxuICAgIHRoaXMucHJvcHNWYWxpZCA9IHRydWU7XG4gIH1cblxuICBwcml2YXRlIGxvYWRlZCgpOiB2b2lkIHtcbiAgICBjb25zdCBzdHlsZSA9IHRoaXMud2lkZ2V0U3R5bGU7XG5cbiAgICBjb25zdCBzdHlsZVBhcmFtcyA9IHtcbiAgICAgIGJhZGdlOiB7XG4gICAgICAgIHN0eWxlXG4gICAgICB9LFxuICAgICAgbGluZToge1xuICAgICAgICBzdHlsZVxuICAgICAgfSxcbiAgICAgIGZsb2F0OiB7XG4gICAgICAgIHN0eWxlXG4gICAgICB9XG4gICAgfTtcblxuXG4gICAgaWYgKHRoaXMuZmxvYXRXaWRnZXQpIHtcbiAgICAgIGRlbGV0ZSBzdHlsZVBhcmFtcy5iYWRnZTtcbiAgICAgIGRlbGV0ZSBzdHlsZVBhcmFtcy5saW5lO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbWUgPSBNYXRoLnJhbmRvbSgpXG4gICAgICAudG9TdHJpbmcoMzYpXG4gICAgICAuc3Vic3RyaW5nKDEwKTtcblxuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHdpbmRvd1tgYW5ub3VuY2VraXRgXS5wdXNoKHtcbiAgICAgICAgd2lkZ2V0OiB0aGlzLndpZGdldCxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgdmVyc2lvbjogMixcbiAgICAgICAgZnJhbWV3b3JrOiAnYW5ndWxhcicsXG4gICAgICAgIGZyYW1ld29ya192ZXJzaW9uOiAnNC4wLjAnLFxuICAgICAgICBlbWJlZDogISF0aGlzLmVtYmVkV2lkZ2V0LFxuICAgICAgICBkYXRhOiB0aGlzLmRhdGEsXG4gICAgICAgIHVzZXI6IHRoaXMudXNlcixcbiAgICAgICAgbGFuZzogdGhpcy5sYW5nLFxuICAgICAgICBsYWJlbHM6IHRoaXMubGFiZWxzLFxuICAgICAgICB1c2VyX3Rva2VuOiB0aGlzLnVzZXJUb2tlbixcbiAgICAgICAgc2VsZWN0b3I6IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICBib29zdGVyczogdHlwZW9mIHRoaXMuYm9vc3RlcnMgPT09ICd1bmRlZmluZWQnID8gdHJ1ZSA6IHRoaXMuYm9vc3RlcnMsXG4gICAgICAgIC4uLnN0eWxlUGFyYW1zLFxuICAgICAgICBvbkluaXQ6IChpbml0V2lkZ2V0OiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoaW5pdFdpZGdldC5jb25mLm5hbWUgIT09IG5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBpbml0V2lkZ2V0LmRlc3Ryb3koKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBhbm4gPSB3aW5kb3dbYGFubm91bmNla2l0YF07XG5cbiAgICAgICAgICB0aGlzLndpZGdldEluc3RhbmNlID0gaW5pdFdpZGdldDtcblxuICAgICAgICAgIHRoaXMuYmFyQm9vc3RlciA9IGFubi5ib29zdGVycy5iYXI7XG4gICAgICAgICAgdGhpcy5tb2RhbEJvb3N0ZXIgPSBhbm4uYm9vc3RlcnMubW9kYWw7XG5cbiAgICAgICAgICB0aGlzLndpZGdldEhhbmRsZXJzLmZvckVhY2goKGgpID0+IGgoaW5pdFdpZGdldCkpO1xuICAgICAgICAgIHRoaXMud2lkZ2V0SGFuZGxlcnMgPSBbXTtcblxuICAgICAgICAgIGlmICh0aGlzLm9uV2lkZ2V0VW5yZWFkKSB7XG4gICAgICAgICAgICB0aGlzLm9uV2lkZ2V0VW5yZWFkLmVtaXQodGhpcy53aWRnZXRJbnN0YW5jZS5zdGF0ZS51aS51bnJlYWRDb3VudCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYW5uLm9uKCd3aWRnZXQtb3BlbicsICh7IHdpZGdldCB9OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmICh3aWRnZXQgPT09IGluaXRXaWRnZXQgJiYgdGhpcy5vbldpZGdldE9wZW4pIHtcbiAgICAgICAgICAgICAgdGhpcy5vbldpZGdldE9wZW4uZW1pdCh7IHdpZGdldCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGFubi5vbignd2lkZ2V0LWNsb3NlJywgKHsgd2lkZ2V0IH06IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHdpZGdldCA9PT0gaW5pdFdpZGdldCAmJiB0aGlzLm9uV2lkZ2V0Q2xvc2UpIHtcbiAgICAgICAgICAgICAgdGhpcy5vbldpZGdldENsb3NlLmVtaXQoeyB3aWRnZXQgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBhbm4ub24oJ3dpZGdldC1yZWFkeScsICh7IHdpZGdldCB9OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmICh3aWRnZXQgPT09IGluaXRXaWRnZXQgJiYgdGhpcy5vbldpZGdldFJlYWR5KSB7XG4gICAgICAgICAgICAgIHRoaXMub25XaWRnZXRSZWFkeS5lbWl0KHsgd2lkZ2V0IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHdpdGhXaWRnZXQoZm4pIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzID0+IHtcbiAgICAgIGlmICh0aGlzLndpZGdldEluc3RhbmNlKSB7XG4gICAgICAgIHJldHVybiByZXMoZm4odGhpcy53aWRnZXRJbnN0YW5jZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy53aWRnZXRIYW5kbGVycy5wdXNoKCh3aWRnZXQ6IGFueSkgPT4ge1xuICAgICAgICAgIHJlcyhmbih3aWRnZXQpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB1bnJlYWQoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy53aXRoV2lkZ2V0KCh3aWRnZXQ6IGFueSkgPT4gd2lkZ2V0LnN0YXRlLnVpLnVucmVhZENvdW50KTtcbiAgfVxuXG4gIGluc3RhbmNlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMud2l0aFdpZGdldCgod2lkZ2V0OiBhbnkpID0+IHdpZGdldCk7XG4gIH1cblxuICBvcGVuKCkge1xuICAgIHRoaXMud2l0aFdpZGdldCgod2lkZ2V0OiBhbnkpID0+IHdpZGdldC5vcGVuKCkpO1xuICB9XG5cbiAgY2xvc2UoKSB7XG4gICAgdGhpcy53aXRoV2lkZ2V0KCh3aWRnZXQ6IGFueSkgPT4gd2lkZ2V0LmNsb3NlKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1N0cmluZyhvYmopOiBib29sZWFuIHtcbiAgICByZXR1cm4gb2JqICE9PSB1bmRlZmluZWQgJiYgb2JqICE9PSBudWxsICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3RyaW5nO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICghKHRoaXMudXNlciB8fCB0aGlzLmRhdGEpKSB7XG4gICAgICB0aGlzLmxvYWRlZCgpO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiAjYW5rUmVmIHN0eWxlPVwiZGlzcGxheTogaW5saW5lXCIgW25nQ2xhc3NdPVwiY2xhc3NOYW1lXCI+XHJcbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG48L2Rpdj4iXX0=