UNPKG

ngx-tiptap-editor

Version:

[![Build and Publish](https://github.com/HuiiBuh/ngx-tiptap-editor/actions/workflows/publish.yml/badge.svg)](https://github.com/HuiiBuh/ngx-tiptap-editor/actions/workflows/publish.yml) [![Deploy to Github Pages](https://github.com/HuiiBuh/ngx-tiptap-edito

90 lines 13.8 kB
import { ApplicationRef, ComponentFactoryResolver, Injector, NgZone } from '@angular/core'; import { Subject } from 'rxjs'; import { deepMerge } from '../helpers'; export class TipBaseExtension { constructor() { this.destroy$ = new Subject(); } static create(extension, extensionOptions) { return { options: extensionOptions, angularExtension: extension, build(parentInjector) { const injector = Injector.create({ providers: [{ provide: this.angularExtension }], parent: parentInjector }); const injectedExtension = injector.get(this.angularExtension); injectedExtension.options = this.options; injectedExtension.nativeExtension = injectedExtension.createExtension(injectedExtension.options); return injectedExtension; } }; } set options(value) { if (this._options) throw new Error(`${this.constructor.name} already has the options set. Don't try to set it twice.`); this._options = this.defaultOptions ? deepMerge(this.defaultOptions, value) : value; } get options() { return this._options; } set editor(value) { if (this._editor) throw new Error(`${this.constructor.name} already has the editor set. Don't try to set it twice.`); this._editor = value; this._editor.on('destroy', () => { this.onEditorDestroy && this.onEditorDestroy(); this.destroy$.next(true); this.destroy$.complete(); }); this.onEditorReady && this.onEditorReady(); } get editor() { return this._editor; } set nativeExtension(value) { if (this._nativeExtension) throw new Error(`${this.constructor.name} already has a nativeExtension assigned to it. Don't try to assign it twice`); this._nativeExtension = value; } get nativeExtension() { return this._nativeExtension; } } export class AdvancedBaseExtension extends TipBaseExtension { /** * Inject the provided component at any position in the dom * @param component The component which should be injected * @param injectionPoint The point you want to inject the component into (this.document.body for example) */ createAndInsertIntoDom(component, injectionPoint) { const componentRef = this.createComponent(component); return this.insertComponent(componentRef, injectionPoint); } insertComponent(componentRef, injectionPoint) { const appRef = this.injector.get(ApplicationRef); appRef.attachView(componentRef.hostView); const domElement = componentRef.hostView.rootNodes[0]; injectionPoint.appendChild(domElement); const ngZone = this.injector.get(NgZone); return { remove: () => { ngZone.run(() => { appRef.detachView(componentRef.hostView); componentRef.destroy(); }); } }; } createComponent(component, additionalProviders = []) { const componentFactoryResolver = this.injector.get(ComponentFactoryResolver); const componentFactory = componentFactoryResolver.resolveComponentFactory(component); const injector = Injector.create({ providers: additionalProviders, parent: this.injector }); return componentFactory.create(injector); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlwLWJhc2UtZXh0ZW5zaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXRpcHRhcC1lZGl0b3Ivc3JjL2xpYi9leHRlbnNpb25zL3RpcC1iYXNlLWV4dGVuc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsY0FBYyxFQUNkLHdCQUF3QixFQUd4QixRQUFRLEVBQ1IsTUFBTSxFQUdQLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQVl2QyxNQUFNLE9BQWdCLGdCQUFnQjtJQUF0QztRQUNZLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBVyxDQUFDO0lBNkQ5QyxDQUFDO0lBeERRLE1BQU0sQ0FBQyxNQUFNLENBQ2xCLFNBQW9CLEVBQ3BCLGdCQUF5QjtRQUV6QixPQUFPO1lBQ0wsT0FBTyxFQUFFLGdCQUFnQjtZQUN6QixnQkFBZ0IsRUFBRSxTQUFTO1lBQzNCLEtBQUssQ0FBQyxjQUF3QjtnQkFFNUIsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztvQkFDL0IsU0FBUyxFQUFFLENBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFDLENBQUM7b0JBQzdDLE1BQU0sRUFBRSxjQUFjO2lCQUN2QixDQUFDLENBQUM7Z0JBRUgsTUFBTSxpQkFBaUIsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUM5RCxpQkFBaUIsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztnQkFDekMsaUJBQWlCLENBQUMsZUFBZSxHQUFHLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDakcsT0FBTyxpQkFBaUIsQ0FBQztZQUMzQixDQUFDO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFJRCxJQUFXLE9BQU8sQ0FBQyxLQUFRO1FBQ3pCLElBQUksSUFBSSxDQUFDLFFBQVE7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLDBEQUEwRCxDQUFDLENBQUM7UUFDdkgsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQzNGLENBQUM7SUFFRCxJQUFXLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFXLE1BQU0sQ0FBQyxLQUFhO1FBQzdCLElBQUksSUFBSSxDQUFDLE9BQU87WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLHlEQUF5RCxDQUFDLENBQUM7UUFDckgsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRTtZQUM5QixJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVELElBQVcsTUFBTTtRQUNmLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBVyxlQUFlLENBQUMsS0FBbUI7UUFDNUMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSw2RUFBNkUsQ0FBQyxDQUFDO1FBQ2xKLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQVcsZUFBZTtRQUN4QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUMvQixDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQWdCLHFCQUF3QyxTQUFRLGdCQUFtQjtJQUd2Rjs7OztPQUlHO0lBQ08sc0JBQXNCLENBQU8sU0FBcUIsRUFBRSxjQUEyQjtRQUN2RixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3JELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVTLGVBQWUsQ0FBQyxZQUErQixFQUFFLGNBQTJCO1FBQ3BGLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2pELE1BQU0sQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sVUFBVSxHQUFJLFlBQVksQ0FBQyxRQUFpQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQWdCLENBQUM7UUFDL0YsY0FBYyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUV2QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QyxPQUFPO1lBQ0wsTUFBTSxFQUFFLEdBQUcsRUFBRTtnQkFDWCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtvQkFDZCxNQUFNLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDekMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUN6QixDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVTLGVBQWUsQ0FBTyxTQUFxQixFQUFFLHNCQUF3QyxFQUFFO1FBQy9GLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUM3RSxNQUFNLGdCQUFnQixHQUFHLHdCQUF3QixDQUFDLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXJGLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFDL0IsU0FBUyxFQUFFLG1CQUFtQjtZQUM5QixNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVE7U0FDdEIsQ0FBQyxDQUFDO1FBRUgsT0FBTyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDM0MsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQXBwbGljYXRpb25SZWYsXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgQ29tcG9uZW50UmVmLFxuICBFbWJlZGRlZFZpZXdSZWYsXG4gIEluamVjdG9yLFxuICBOZ1pvbmUsXG4gIFN0YXRpY1Byb3ZpZGVyLFxuICBUeXBlXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQW55RXh0ZW5zaW9uLCBFZGl0b3IgfSBmcm9tICdAdGlwdGFwL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVlcE1lcmdlIH0gZnJvbSAnLi4vaGVscGVycyc7XG5pbXBvcnQgeyBDLCBPYmplY3RQcm9wIH0gZnJvbSAnLi4vbW9kZWxzL3V0aWxpdHktdHlwZXMnO1xuaW1wb3J0IHsgQ29uc3RydWN0b3IsIEV4dGVuc2lvbkJ1aWxkZXIgfSBmcm9tICcuL2Jhc2UtZXh0ZW5zaW9uLm1vZGVsJztcblxuZXhwb3J0IGludGVyZmFjZSBUaXBCYXNlRXh0ZW5zaW9uPFQ+IHtcbiAgZGVmYXVsdE9wdGlvbnM6IFBhcnRpYWw8VD47XG5cbiAgb25FZGl0b3JSZWFkeSgpOiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcblxuICBvbkVkaXRvckRlc3Ryb3koKTogdm9pZCB8IFByb21pc2U8dm9pZD47XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUaXBCYXNlRXh0ZW5zaW9uPFQgZXh0ZW5kcyBvYmplY3Q+IHtcbiAgcHJvdGVjdGVkIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgcHJpdmF0ZSBfbmF0aXZlRXh0ZW5zaW9uITogQW55RXh0ZW5zaW9uO1xuICBwcml2YXRlIF9vcHRpb25zITogVDtcbiAgcHJpdmF0ZSBfZWRpdG9yITogRWRpdG9yO1xuXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlPEVYVEVOU0lPTiBleHRlbmRzIENvbnN0cnVjdG9yLCBPUFRJT05TIGV4dGVuZHMgUGFydGlhbDxPYmplY3RQcm9wPEMuSW5zdGFuY2U8RVhURU5TSU9OPiwgJ29wdGlvbnMnPj4+KFxuICAgIGV4dGVuc2lvbjogRVhURU5TSU9OLFxuICAgIGV4dGVuc2lvbk9wdGlvbnM6IE9QVElPTlMsXG4gICk6IEV4dGVuc2lvbkJ1aWxkZXI8T1BUSU9OUywgRVhURU5TSU9OPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wdGlvbnM6IGV4dGVuc2lvbk9wdGlvbnMsXG4gICAgICBhbmd1bGFyRXh0ZW5zaW9uOiBleHRlbnNpb24sXG4gICAgICBidWlsZChwYXJlbnRJbmplY3RvcjogSW5qZWN0b3IpOiBDLkluc3RhbmNlPEVYVEVOU0lPTj4ge1xuXG4gICAgICAgIGNvbnN0IGluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHtcbiAgICAgICAgICBwcm92aWRlcnM6IFt7cHJvdmlkZTogdGhpcy5hbmd1bGFyRXh0ZW5zaW9ufV0sXG4gICAgICAgICAgcGFyZW50OiBwYXJlbnRJbmplY3RvclxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBpbmplY3RlZEV4dGVuc2lvbiA9IGluamVjdG9yLmdldCh0aGlzLmFuZ3VsYXJFeHRlbnNpb24pO1xuICAgICAgICBpbmplY3RlZEV4dGVuc2lvbi5vcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBpbmplY3RlZEV4dGVuc2lvbi5uYXRpdmVFeHRlbnNpb24gPSBpbmplY3RlZEV4dGVuc2lvbi5jcmVhdGVFeHRlbnNpb24oaW5qZWN0ZWRFeHRlbnNpb24ub3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBpbmplY3RlZEV4dGVuc2lvbjtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGFic3RyYWN0IGNyZWF0ZUV4dGVuc2lvbihleHRlbnNpb25PcHRpb25zOiBSZXF1aXJlZDxUPik6IEFueUV4dGVuc2lvbjtcblxuICBwdWJsaWMgc2V0IG9wdGlvbnModmFsdWU6IFQpIHtcbiAgICBpZiAodGhpcy5fb3B0aW9ucykgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX0gYWxyZWFkeSBoYXMgdGhlIG9wdGlvbnMgc2V0LiBEb24ndCB0cnkgdG8gc2V0IGl0IHR3aWNlLmApO1xuICAgIHRoaXMuX29wdGlvbnMgPSB0aGlzLmRlZmF1bHRPcHRpb25zID8gZGVlcE1lcmdlKHRoaXMuZGVmYXVsdE9wdGlvbnMsIHZhbHVlKSBhcyBUIDogdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG9wdGlvbnMoKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XG4gIH1cblxuICBwdWJsaWMgc2V0IGVkaXRvcih2YWx1ZTogRWRpdG9yKSB7XG4gICAgaWYgKHRoaXMuX2VkaXRvcikgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX0gYWxyZWFkeSBoYXMgdGhlIGVkaXRvciBzZXQuIERvbid0IHRyeSB0byBzZXQgaXQgdHdpY2UuYCk7XG4gICAgdGhpcy5fZWRpdG9yID0gdmFsdWU7XG4gICAgdGhpcy5fZWRpdG9yLm9uKCdkZXN0cm95JywgKCkgPT4ge1xuICAgICAgdGhpcy5vbkVkaXRvckRlc3Ryb3kgJiYgdGhpcy5vbkVkaXRvckRlc3Ryb3koKTtcbiAgICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9KTtcbiAgICB0aGlzLm9uRWRpdG9yUmVhZHkgJiYgdGhpcy5vbkVkaXRvclJlYWR5KCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGVkaXRvcigpOiBFZGl0b3Ige1xuICAgIHJldHVybiB0aGlzLl9lZGl0b3I7XG4gIH1cblxuICBwdWJsaWMgc2V0IG5hdGl2ZUV4dGVuc2lvbih2YWx1ZTogQW55RXh0ZW5zaW9uKSB7XG4gICAgaWYgKHRoaXMuX25hdGl2ZUV4dGVuc2lvbikgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX0gYWxyZWFkeSBoYXMgYSBuYXRpdmVFeHRlbnNpb24gYXNzaWduZWQgdG8gaXQuIERvbid0IHRyeSB0byBhc3NpZ24gaXQgdHdpY2VgKTtcbiAgICB0aGlzLl9uYXRpdmVFeHRlbnNpb24gPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbmF0aXZlRXh0ZW5zaW9uKCk6IEFueUV4dGVuc2lvbiB7XG4gICAgcmV0dXJuIHRoaXMuX25hdGl2ZUV4dGVuc2lvbjtcbiAgfVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWR2YW5jZWRCYXNlRXh0ZW5zaW9uPFQgZXh0ZW5kcyBvYmplY3Q+IGV4dGVuZHMgVGlwQmFzZUV4dGVuc2lvbjxUPiB7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBpbmplY3RvcjogSW5qZWN0b3I7XG5cbiAgLyoqXG4gICAqIEluamVjdCB0aGUgcHJvdmlkZWQgY29tcG9uZW50IGF0IGFueSBwb3NpdGlvbiBpbiB0aGUgZG9tXG4gICAqIEBwYXJhbSBjb21wb25lbnQgVGhlIGNvbXBvbmVudCB3aGljaCBzaG91bGQgYmUgaW5qZWN0ZWRcbiAgICogQHBhcmFtIGluamVjdGlvblBvaW50IFRoZSBwb2ludCB5b3Ugd2FudCB0byBpbmplY3QgdGhlIGNvbXBvbmVudCBpbnRvICh0aGlzLmRvY3VtZW50LmJvZHkgZm9yIGV4YW1wbGUpXG4gICAqL1xuICBwcm90ZWN0ZWQgY3JlYXRlQW5kSW5zZXJ0SW50b0RvbTxDT01QPihjb21wb25lbnQ6IFR5cGU8Q09NUD4sIGluamVjdGlvblBvaW50OiBIVE1MRWxlbWVudCk6IHsgcmVtb3ZlOiAoKSA9PiB2b2lkIH0ge1xuICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudCk7XG4gICAgcmV0dXJuIHRoaXMuaW5zZXJ0Q29tcG9uZW50KGNvbXBvbmVudFJlZiwgaW5qZWN0aW9uUG9pbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGluc2VydENvbXBvbmVudChjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxhbnk+LCBpbmplY3Rpb25Qb2ludDogSFRNTEVsZW1lbnQpOiB7IHJlbW92ZTogKCkgPT4gdm9pZCB9IHtcbiAgICBjb25zdCBhcHBSZWYgPSB0aGlzLmluamVjdG9yLmdldChBcHBsaWNhdGlvblJlZik7XG4gICAgYXBwUmVmLmF0dGFjaFZpZXcoY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcbiAgICBjb25zdCBkb21FbGVtZW50ID0gKGNvbXBvbmVudFJlZi5ob3N0VmlldyBhcyBFbWJlZGRlZFZpZXdSZWY8YW55Pikucm9vdE5vZGVzWzBdIGFzIEhUTUxFbGVtZW50O1xuICAgIGluamVjdGlvblBvaW50LmFwcGVuZENoaWxkKGRvbUVsZW1lbnQpO1xuXG4gICAgY29uc3Qgbmdab25lID0gdGhpcy5pbmplY3Rvci5nZXQoTmdab25lKTtcbiAgICByZXR1cm4ge1xuICAgICAgcmVtb3ZlOiAoKSA9PiB7XG4gICAgICAgIG5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgIGFwcFJlZi5kZXRhY2hWaWV3KGNvbXBvbmVudFJlZi5ob3N0Vmlldyk7XG4gICAgICAgICAgY29tcG9uZW50UmVmLmRlc3Ryb3koKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVDb21wb25lbnQ8Q09NUD4oY29tcG9uZW50OiBUeXBlPENPTVA+LCBhZGRpdGlvbmFsUHJvdmlkZXJzOiBTdGF0aWNQcm92aWRlcltdID0gW10pOiBDb21wb25lbnRSZWY8Q09NUD4ge1xuICAgIGNvbnN0IGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlciA9IHRoaXMuaW5qZWN0b3IuZ2V0KENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcik7XG4gICAgY29uc3QgY29tcG9uZW50RmFjdG9yeSA9IGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShjb21wb25lbnQpO1xuXG4gICAgY29uc3QgaW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgcHJvdmlkZXJzOiBhZGRpdGlvbmFsUHJvdmlkZXJzLFxuICAgICAgcGFyZW50OiB0aGlzLmluamVjdG9yXG4gICAgfSk7XG5cbiAgICByZXR1cm4gY29tcG9uZW50RmFjdG9yeS5jcmVhdGUoaW5qZWN0b3IpO1xuICB9XG59XG4iXX0=