@doku-dev/doku-fragment
Version:
A new Angular UI library that moving away from Bootstrap and built from scratch.
101 lines • 13.7 kB
JavaScript
import { DOCUMENT } from '@angular/common';
import { ContentChild, Directive, Inject, Input, } from '@angular/core';
import { ReplaySubject, fromEvent, takeUntil } from 'rxjs';
import { getClickType } from '../../utils/get-click-type';
import { DOKU_DROPDOWN, DOKU_DROPDOWN_MENU, DOKU_DROPDOWN_TOGGLE } from './dropdown.token';
import * as i0 from "@angular/core";
export class DokuDropdown {
constructor(elementRef, renderer, ngZone, document) {
this.elementRef = elementRef;
this.renderer = renderer;
this.ngZone = ngZone;
this.document = document;
/**
* The position of the dropdown menu while opened based on the toggler/anchor element.
* @default 'bottom-start'
*/
this.placement = 'bottom-start';
this.destroy$ = new ReplaySubject();
}
get dropdownToggleElement() {
return this.dropdownToggle?.['elementRef']?.nativeElement;
}
get dropdownMenuElement() {
return this.dropdownMenu?.['elementRef']?.nativeElement;
}
ngAfterViewInit() {
this.closeDropdownMenuEventHandler();
}
ngOnDestroy() {
this.destroy$.next(true);
this.destroy$.complete();
}
toggleDropdownMenu() {
this.dropdownMenu?.toggle();
}
showDropdownMenu() {
this.dropdownMenu?.show();
}
hideDropdownMenu() {
this.dropdownMenu?.hide();
}
/**
* It will create a container for dropdown and append it to the body element.
*/
applyContainer() {
this.resetContainer();
const bodyContainer = (this.bodyContainer = this.renderer.createElement('div'));
bodyContainer.id = 'd-dropdown-portal';
this.originalDropdownMenu = this.dropdownMenuElement;
this.renderer.appendChild(bodyContainer, this.originalDropdownMenu);
this.renderer.appendChild(this.document.body, bodyContainer);
}
/**
* Remove body container when dropdown closed and add back the dropdown menu to its original element position.
*/
resetContainer() {
if (this.originalDropdownMenu) {
this.renderer.appendChild(this.elementRef.nativeElement, this.originalDropdownMenu);
}
if (this.bodyContainer) {
this.renderer.removeChild(this.document.body, this.bodyContainer);
this.bodyContainer = undefined;
}
}
closeDropdownMenuEventHandler() {
this.ngZone.runOutsideAngular(() => {
if (!this.dropdownToggleElement || !this.dropdownMenuElement)
return;
fromEvent(window, 'click', { capture: true })
.pipe(takeUntil(this.destroy$))
.subscribe((event) => {
const { clickTrigger, clickOutside } = getClickType(event, [this.dropdownToggleElement], [this.dropdownMenuElement]);
if (clickOutside && !clickTrigger)
this.dropdownMenu?.hide();
});
});
}
}
DokuDropdown.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DokuDropdown, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Directive });
DokuDropdown.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: DokuDropdown, isStandalone: true, selector: "[doku-dropdown]", inputs: { placement: "placement" }, providers: [{ provide: DOKU_DROPDOWN, useExisting: DokuDropdown }], queries: [{ propertyName: "dropdownToggle", first: true, predicate: DOKU_DROPDOWN_TOGGLE, descendants: true }, { propertyName: "dropdownMenu", first: true, predicate: DOKU_DROPDOWN_MENU, descendants: true }], exportAs: ["dokuDropdown"], ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DokuDropdown, decorators: [{
type: Directive,
args: [{
selector: '[doku-dropdown]',
exportAs: 'dokuDropdown',
standalone: true,
providers: [{ provide: DOKU_DROPDOWN, useExisting: DokuDropdown }],
}]
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: Document, decorators: [{
type: Inject,
args: [DOCUMENT]
}] }]; }, propDecorators: { placement: [{
type: Input
}], dropdownToggle: [{
type: ContentChild,
args: [DOKU_DROPDOWN_TOGGLE]
}], dropdownMenu: [{
type: ContentChild,
args: [DOKU_DROPDOWN_MENU]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZG9rdS1mcmFnbWVudC9zcmMvbGliL2Ryb3Bkb3duL2Ryb3Bkb3duLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUVMLFlBQVksRUFDWixTQUFTLEVBRVQsTUFBTSxFQUNOLEtBQUssR0FJTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBSTFELE9BQU8sRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7QUFRM0YsTUFBTSxPQUFPLFlBQVk7SUFldkIsWUFDWSxVQUFzQixFQUN4QixRQUFtQixFQUNuQixNQUFjLEVBQ0ksUUFBa0I7UUFIbEMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN4QixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDSSxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBbEI5Qzs7O1dBR0c7UUFDTSxjQUFTLEdBQTBCLGNBQWMsQ0FBQztRQVFuRCxhQUFRLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztJQU9wQyxDQUFDO0lBRUosSUFBWSxxQkFBcUI7UUFDL0IsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsYUFBYSxDQUFDO0lBQzVELENBQUM7SUFFRCxJQUFZLG1CQUFtQjtRQUM3QixPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxhQUFhLENBQUM7SUFDMUQsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRDs7T0FFRztJQUNPLGNBQWM7UUFDdEIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sYUFBYSxHQUFnQixDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUM3RixhQUFhLENBQUMsRUFBRSxHQUFHLG1CQUFtQixDQUFDO1FBQ3ZDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7UUFDckQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRDs7T0FFRztJQUNPLGNBQWM7UUFDdEIsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDN0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7U0FDckY7UUFDRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ2xFLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO1NBQ2hDO0lBQ0gsQ0FBQztJQUVPLDZCQUE2QjtRQUNuQyxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRTtZQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQjtnQkFBRSxPQUFPO1lBQ3JFLFNBQVMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO2lCQUMxQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDOUIsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ25CLE1BQU0sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEdBQUcsWUFBWSxDQUNqRCxLQUFLLEVBQ0wsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsRUFDNUIsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FDM0IsQ0FBQztnQkFFRixJQUFJLFlBQVksSUFBSSxDQUFDLFlBQVk7b0JBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUMvRCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7eUdBM0ZVLFlBQVksMkZBbUJiLFFBQVE7NkZBbkJQLFlBQVksa0dBRlosQ0FBQyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxDQUFDLHNFQVNwRCxvQkFBb0IsK0VBQ3BCLGtCQUFrQjsyRkFSckIsWUFBWTtrQkFOeEIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixRQUFRLEVBQUUsY0FBYztvQkFDeEIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLGNBQWMsRUFBRSxDQUFDO2lCQUNuRTs7MEJBb0JJLE1BQU07MkJBQUMsUUFBUTs0Q0FkVCxTQUFTO3NCQUFqQixLQUFLO2dCQUVzQyxjQUFjO3NCQUF6RCxZQUFZO3VCQUFDLG9CQUFvQjtnQkFDUSxZQUFZO3NCQUFyRCxZQUFZO3VCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgUmVuZGVyZXIyLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJlcGxheVN1YmplY3QsIGZyb21FdmVudCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBnZXRDbGlja1R5cGUgfSBmcm9tICcuLi8uLi91dGlscy9nZXQtY2xpY2stdHlwZSc7XG5pbXBvcnQgeyBEb2t1RHJvcGRvd25NZW51IH0gZnJvbSAnLi9kcm9wZG93bi1tZW51LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEb2t1RHJvcGRvd25Ub2dnbGUgfSBmcm9tICcuL2Ryb3Bkb3duLXRvZ2dsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRG9rdURyb3Bkb3duUGxhY2VtZW50IH0gZnJvbSAnLi9kcm9wZG93bi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRE9LVV9EUk9QRE9XTiwgRE9LVV9EUk9QRE9XTl9NRU5VLCBET0tVX0RST1BET1dOX1RPR0dMRSB9IGZyb20gJy4vZHJvcGRvd24udG9rZW4nO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZG9rdS1kcm9wZG93bl0nLFxuICBleHBvcnRBczogJ2Rva3VEcm9wZG93bicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogRE9LVV9EUk9QRE9XTiwgdXNlRXhpc3Rpbmc6IERva3VEcm9wZG93biB9XSxcbn0pXG5leHBvcnQgY2xhc3MgRG9rdURyb3Bkb3duIGltcGxlbWVudHMgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcbiAgLyoqXG4gICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgZHJvcGRvd24gbWVudSB3aGlsZSBvcGVuZWQgYmFzZWQgb24gdGhlIHRvZ2dsZXIvYW5jaG9yIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0ICdib3R0b20tc3RhcnQnXG4gICAqL1xuICBASW5wdXQoKSBwbGFjZW1lbnQ6IERva3VEcm9wZG93blBsYWNlbWVudCA9ICdib3R0b20tc3RhcnQnO1xuXG4gIEBDb250ZW50Q2hpbGQoRE9LVV9EUk9QRE9XTl9UT0dHTEUpIHByaXZhdGUgZHJvcGRvd25Ub2dnbGU/OiBEb2t1RHJvcGRvd25Ub2dnbGU7XG4gIEBDb250ZW50Q2hpbGQoRE9LVV9EUk9QRE9XTl9NRU5VKSBwcml2YXRlIGRyb3Bkb3duTWVudT86IERva3VEcm9wZG93bk1lbnU7XG5cbiAgcHJpdmF0ZSBib2R5Q29udGFpbmVyPzogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgb3JpZ2luYWxEcm9wZG93bk1lbnU/OiBIVE1MRWxlbWVudDtcblxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFJlcGxheVN1YmplY3QoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBEb2N1bWVudFxuICApIHt9XG5cbiAgcHJpdmF0ZSBnZXQgZHJvcGRvd25Ub2dnbGVFbGVtZW50KCk6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5kcm9wZG93blRvZ2dsZT8uWydlbGVtZW50UmVmJ10/Lm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICBwcml2YXRlIGdldCBkcm9wZG93bk1lbnVFbGVtZW50KCk6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5kcm9wZG93bk1lbnU/LlsnZWxlbWVudFJlZiddPy5uYXRpdmVFbGVtZW50O1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY2xvc2VEcm9wZG93bk1lbnVFdmVudEhhbmRsZXIoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICB0b2dnbGVEcm9wZG93bk1lbnUoKSB7XG4gICAgdGhpcy5kcm9wZG93bk1lbnU/LnRvZ2dsZSgpO1xuICB9XG5cbiAgc2hvd0Ryb3Bkb3duTWVudSgpIHtcbiAgICB0aGlzLmRyb3Bkb3duTWVudT8uc2hvdygpO1xuICB9XG5cbiAgaGlkZURyb3Bkb3duTWVudSgpIHtcbiAgICB0aGlzLmRyb3Bkb3duTWVudT8uaGlkZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0IHdpbGwgY3JlYXRlIGEgY29udGFpbmVyIGZvciBkcm9wZG93biBhbmQgYXBwZW5kIGl0IHRvIHRoZSBib2R5IGVsZW1lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgYXBwbHlDb250YWluZXIoKSB7XG4gICAgdGhpcy5yZXNldENvbnRhaW5lcigpO1xuICAgIGNvbnN0IGJvZHlDb250YWluZXI6IEhUTUxFbGVtZW50ID0gKHRoaXMuYm9keUNvbnRhaW5lciA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnZGl2JykpO1xuICAgIGJvZHlDb250YWluZXIuaWQgPSAnZC1kcm9wZG93bi1wb3J0YWwnO1xuICAgIHRoaXMub3JpZ2luYWxEcm9wZG93bk1lbnUgPSB0aGlzLmRyb3Bkb3duTWVudUVsZW1lbnQ7XG4gICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChib2R5Q29udGFpbmVyLCB0aGlzLm9yaWdpbmFsRHJvcGRvd25NZW51KTtcbiAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuZG9jdW1lbnQuYm9keSwgYm9keUNvbnRhaW5lcik7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGJvZHkgY29udGFpbmVyIHdoZW4gZHJvcGRvd24gY2xvc2VkIGFuZCBhZGQgYmFjayB0aGUgZHJvcGRvd24gbWVudSB0byBpdHMgb3JpZ2luYWwgZWxlbWVudCBwb3NpdGlvbi5cbiAgICovXG4gIHByb3RlY3RlZCByZXNldENvbnRhaW5lcigpIHtcbiAgICBpZiAodGhpcy5vcmlnaW5hbERyb3Bkb3duTWVudSkge1xuICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgdGhpcy5vcmlnaW5hbERyb3Bkb3duTWVudSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmJvZHlDb250YWluZXIpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy5kb2N1bWVudC5ib2R5LCB0aGlzLmJvZHlDb250YWluZXIpO1xuICAgICAgdGhpcy5ib2R5Q29udGFpbmVyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xvc2VEcm9wZG93bk1lbnVFdmVudEhhbmRsZXIoKSB7XG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmRyb3Bkb3duVG9nZ2xlRWxlbWVudCB8fCAhdGhpcy5kcm9wZG93bk1lbnVFbGVtZW50KSByZXR1cm47XG4gICAgICBmcm9tRXZlbnQod2luZG93LCAnY2xpY2snLCB7IGNhcHR1cmU6IHRydWUgfSlcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgY2xpY2tUcmlnZ2VyLCBjbGlja091dHNpZGUgfSA9IGdldENsaWNrVHlwZShcbiAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgW3RoaXMuZHJvcGRvd25Ub2dnbGVFbGVtZW50XSxcbiAgICAgICAgICAgIFt0aGlzLmRyb3Bkb3duTWVudUVsZW1lbnRdXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChjbGlja091dHNpZGUgJiYgIWNsaWNrVHJpZ2dlcikgdGhpcy5kcm9wZG93bk1lbnU/LmhpZGUoKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==