@doku-dev/doku-fragment
Version:
A new Angular UI library that moving away from Bootstrap and built from scratch.
120 lines • 21.1 kB
JavaScript
import { TemplateRef, createComponent, } from '@angular/core';
import { DokuSpinner } from '../spinner';
export class TemplateUtil {
static createNoDataElement(props) {
const { bodyElement, contentElement, ...rest } = this.createBaseElement({
renderer: props.renderer,
totalColumn: props.totalColumn,
});
bodyElement.className = 'd-table-body-no-data';
return { bodyElement, contentElement, ...rest };
}
static updateNoDataContent(props) {
let templateViewRef;
if (!props.content || typeof props.content === 'string') {
const el = props.renderer.createElement('div');
el.className = 'd-text-h5';
el.textContent = props.content || 'No Data';
props.renderer.appendChild(props.noDataElement.contentElement, el);
}
if (props.content instanceof TemplateRef) {
templateViewRef = props.content.createEmbeddedView(null, props.injector);
props.appRef.attachView(templateViewRef);
templateViewRef.rootNodes.forEach((node) => {
props.renderer.appendChild(props.noDataElement.contentElement, node);
});
}
const destroy = () => {
templateViewRef?.destroy();
};
return { destroy };
}
static createLoadingElement(props) {
const { bodyElement, contentElement, ...rest } = this.createBaseElement({
renderer: props.renderer,
totalColumn: props.totalColumn,
});
bodyElement.className = 'd-table-body-loading';
return { bodyElement, contentElement, ...rest };
}
static updateLoadingContent(props) {
let spinnerViewRef;
let templateViewRef;
if (!props.content || typeof props.content === 'string') {
const loadingWrapperElement = props.renderer.createElement('div');
loadingWrapperElement.className = 'd-table-body-loading-wrapper';
// Spinner component
const spinnerComponent = createComponent(DokuSpinner, {
environmentInjector: props.envInjector,
});
spinnerComponent.location.nativeElement.style.display = 'flex';
spinnerComponent.location.nativeElement.style.marginRight = '16px';
spinnerComponent.setInput('diameter', 32);
spinnerComponent.setInput('strokeWidth', 3);
props.appRef.attachView(spinnerComponent.hostView);
spinnerViewRef = spinnerComponent.hostView;
// Loading text element
const loadingTextElement = props.renderer.createElement('span');
loadingTextElement.className = 'd-text-body-m';
loadingTextElement.textContent = props.content || 'Please wait, we are loading your data...';
// Append spinner and loading text to wrapper element
props.renderer.appendChild(loadingWrapperElement, spinnerComponent.location.nativeElement);
props.renderer.appendChild(loadingWrapperElement, loadingTextElement);
// Append to content element
props.renderer.appendChild(props.loadingElement.contentElement, loadingWrapperElement);
}
if (props.content instanceof TemplateRef) {
templateViewRef = props.content.createEmbeddedView(null, props.injector);
props.appRef.attachView(templateViewRef);
templateViewRef.rootNodes.forEach((node) => {
props.renderer.appendChild(props.loadingElement.contentElement, node);
});
}
const destroy = () => {
spinnerViewRef?.destroy();
templateViewRef?.destroy();
};
return { destroy };
}
static createErrorElement(props) {
const { bodyElement, contentElement, ...rest } = this.createBaseElement({
renderer: props.renderer,
totalColumn: props.totalColumn,
});
bodyElement.className = 'd-table-body-error';
return { bodyElement, contentElement, ...rest };
}
static updateErrorContent(props) {
let templateViewRef;
if (!props.content || typeof props.content === 'string') {
const el = props.renderer.createElement('div');
el.className = 'd-text-h5';
el.textContent = props.content || 'Something went wrong!';
props.renderer.appendChild(props.errorElement.contentElement, el);
}
if (props.content instanceof TemplateRef) {
templateViewRef = props.content.createEmbeddedView(null, props.injector);
props.appRef.attachView(templateViewRef);
templateViewRef.rootNodes.forEach((node) => {
props.renderer.appendChild(props.errorElement.contentElement, node);
});
}
const destroy = () => {
templateViewRef?.destroy();
};
return { destroy };
}
static createBaseElement(props) {
const contentElement = props.renderer.createElement('div');
contentElement.className = 'd-table-body-custom-content';
const cellElement = props.renderer.createElement('td');
cellElement.colSpan = props.totalColumn;
cellElement.appendChild(contentElement);
const rowElement = props.renderer.createElement('tr');
rowElement.appendChild(cellElement);
const bodyElement = props.renderer.createElement('tbody');
bodyElement.appendChild(rowElement);
return { bodyElement, rowElement, cellElement, contentElement };
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rva3UtZnJhZ21lbnQvc3JjL2xpYi90YWJsZS90ZW1wbGF0ZS51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFNTCxXQUFXLEVBRVgsZUFBZSxHQUNoQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXpDLE1BQU0sT0FBTyxZQUFZO0lBQ3ZCLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFtRDtRQUM1RSxNQUFNLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztZQUN0RSxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVE7WUFDeEIsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO1NBQy9CLENBQUMsQ0FBQztRQUNILFdBQVcsQ0FBQyxTQUFTLEdBQUcsc0JBQXNCLENBQUM7UUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztJQUNsRCxDQUFDO0lBRUQsTUFBTSxDQUFDLG1CQUFtQixDQUFDLEtBTTFCO1FBQ0MsSUFBSSxlQUFxRCxDQUFDO1FBRTFELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLE9BQU8sS0FBSyxDQUFDLE9BQU8sS0FBSyxRQUFRLEVBQUU7WUFDdkQsTUFBTSxFQUFFLEdBQW1CLEtBQUssQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9ELEVBQUUsQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDO1lBQzNCLEVBQUUsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLE9BQU8sSUFBSSxTQUFTLENBQUM7WUFDNUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFD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bUIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0UsY0FBYyxDQUFDLFNBQVMsR0FBRyw2QkFBNkIsQ0FBQztRQUV6RCxNQUFNLFdBQVcsR0FBeUIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0UsV0FBVyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO1FBRXhDLFdBQVcsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFeEMsTUFBTSxVQUFVLEdBQXdCLEtBQUssQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTNFLFVBQVUsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFcEMsTUFBTSxXQUFXLEdBQTRCLEtBQUssQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRW5GLFdBQVcsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFcEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxDQUFDO0lBQ2xFLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFwcGxpY2F0aW9uUmVmLFxuICBFbWJlZGRlZFZpZXdSZWYsXG4gIEVudmlyb25tZW50SW5qZWN0b3IsXG4gIEluamVjdG9yLFxuICBSZW5kZXJlcjIsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3UmVmLFxuICBjcmVhdGVDb21wb25lbnQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9rdVNwaW5uZXIgfSBmcm9tICcuLi9zcGlubmVyJztcblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlVXRpbCB7XG4gIHN0YXRpYyBjcmVhdGVOb0RhdGFFbGVtZW50KHByb3BzOiB7IHJlbmRlcmVyOiBSZW5kZXJlcjI7IHRvdGFsQ29sdW1uOiBudW1iZXIgfSkge1xuICAgIGNvbnN0IHsgYm9keUVsZW1lbnQsIGNvbnRlbnRFbGVtZW50LCAuLi5yZXN0IH0gPSB0aGlzLmNyZWF0ZUJhc2VFbGVtZW50KHtcbiAgICAgIHJlbmRlcmVyOiBwcm9wcy5yZW5kZXJlcixcbiAgICAgIHRvdGFsQ29sdW1uOiBwcm9wcy50b3RhbENvbHVtbixcbiAgICB9KTtcbiAgICBib2R5RWxlbWVudC5jbGFzc05hbWUgPSAnZC10YWJsZS1ib2R5LW5vLWRhdGEnO1xuICAgIHJldHVybiB7IGJvZHlFbGVtZW50LCBjb250ZW50RWxlbWVudCwgLi4ucmVzdCB9O1xuICB9XG5cbiAgc3RhdGljIHVwZGF0ZU5vRGF0YUNvbnRlbnQocHJvcHM6IHtcbiAgICByZW5kZXJlcjogUmVuZGVyZXIyO1xuICAgIGFwcFJlZjogQXBwbGljYXRpb25SZWY7XG4gICAgbm9EYXRhRWxlbWVudDogUmV0dXJuVHlwZTx0eXBlb2YgVGVtcGxhdGVVdGlsLmNyZWF0ZU5vRGF0YUVsZW1lbnQ+O1xuICAgIGluamVjdG9yPzogSW5qZWN0b3I7XG4gICAgY29udGVudD86IHN0cmluZyB8IFRlbXBsYXRlUmVmPHVua25vd24+O1xuICB9KSB7XG4gICAgbGV0IHRlbXBsYXRlVmlld1JlZjogRW1iZWRkZWRWaWV3UmVmPHVua25vd24+IHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKCFwcm9wcy5jb250ZW50IHx8IHR5cGVvZiBwcm9wcy5jb250ZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgZWw6IEhUTUxEaXZFbGVtZW50ID0gcHJvcHMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBlbC5jbGFzc05hbWUgPSAnZC10ZXh0LWg1JztcbiAgICAgIGVsLnRleHRDb250ZW50ID0gcHJvcHMuY29udGVudCB8fCAnTm8gRGF0YSc7XG4gICAgICBwcm9wcy5yZW5kZXJlci5hcHBlbmRDaGlsZChwcm9wcy5ub0RhdGFFbGVtZW50LmNvbnRlbnRFbGVtZW50LCBlbCk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmNvbnRlbnQgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZikge1xuICAgICAgdGVtcGxhdGVWaWV3UmVmID0gcHJvcHMuY29udGVudC5jcmVhdGVFbWJlZGRlZFZpZXcobnVsbCwgcHJvcHMuaW5qZWN0b3IpO1xuICAgICAgcHJvcHMuYXBwUmVmLmF0dGFjaFZpZXcodGVtcGxhdGVWaWV3UmVmKTtcbiAgICAgIHRlbXBsYXRlVmlld1JlZi5yb290Tm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICBwcm9wcy5yZW5kZXJlci5hcHBlbmRDaGlsZChwcm9wcy5ub0RhdGFFbGVtZW50LmNvbnRlbnRFbGVtZW50LCBub2RlKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICB0ZW1wbGF0ZVZpZXdSZWY/LmRlc3Ryb3koKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHsgZGVzdHJveSB9O1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZUxvYWRpbmdFbGVtZW50KHByb3BzOiB7XG4gICAgcmVuZGVyZXI6IFJlbmRlcmVyMjtcbiAgICB0b3RhbENvbHVtbjogbnVtYmVyO1xuICAgIGVudmlyb25tZW50SW5qZWN0b3I6IEVudmlyb25tZW50SW5qZWN0b3I7XG4gICAgYXBwbGljYXRpb25SZWY6IEFwcGxpY2F0aW9uUmVmO1xuICB9KSB7XG4gICAgY29uc3QgeyBib2R5RWxlbWVudCwgY29udGVudEVsZW1lbnQsIC4uLnJlc3QgfSA9IHRoaXMuY3JlYXRlQmFzZUVsZW1lbnQoe1xuICAgICAgcmVuZGVyZXI6IHByb3BzLnJlbmRlcmVyLFxuICAgICAgdG90YWxDb2x1bW46IHByb3BzLnRvdGFsQ29sdW1uLFxuICAgIH0pO1xuICAgIGJvZHlFbGVtZW50LmNsYXNzTmFtZSA9ICdkLXRhYmxlLWJvZHktbG9hZGluZyc7XG4gICAgcmV0dXJuIHsgYm9keUVsZW1lbnQsIGNvbnRlbnRFbGVtZW50LCAuLi5yZXN0IH07XG4gIH1cblxuICBzdGF0aWMgdXBkYXRlTG9hZGluZ0NvbnRlbnQocHJvcHM6IHtcbiAgICByZW5kZXJlcjogUmVuZGVyZXIyO1xuICAgIGFwcFJlZjogQXBwbGljYXRpb25SZWY7XG4gICAgZW52SW5qZWN0b3I6IEVudmlyb25tZW50SW5qZWN0b3I7XG4gICAgbG9hZGluZ0VsZW1lbnQ6IFJldHVyblR5cGU8dHlwZW9mIFRlbXBsYXRlVXRpbC5jcmVhdGVMb2FkaW5nRWxlbWVudD47XG4gICAgaW5qZWN0b3I/OiBJbmplY3RvcjtcbiAgICBjb250ZW50Pzogc3RyaW5nIHwgVGVtcGxhdGVSZWY8dW5rbm93bj47XG4gIH0pIHtcbiAgICBsZXQgc3Bpbm5lclZpZXdSZWY6IFZpZXdSZWYgfCB1bmRlZmluZWQ7XG4gICAgbGV0IHRlbXBsYXRlVmlld1JlZjogRW1iZWRkZWRWaWV3UmVmPHVua25vd24+IHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKCFwcm9wcy5jb250ZW50IHx8IHR5cGVvZiBwcm9wcy5jb250ZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgbG9hZGluZ1dyYXBwZXJFbGVtZW50OiBIVE1MRGl2RWxlbWVudCA9IHByb3BzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgbG9hZGluZ1dyYXBwZXJFbGVtZW50LmNsYXNzTmFtZSA9ICdkLXRhYmxlLWJvZHktbG9hZGluZy13cmFwcGVyJztcblxuICAgICAgLy8gU3Bpbm5lciBjb21wb25lbnRcbiAgICAgIGNvbnN0IHNwaW5uZXJDb21wb25lbnQgPSBjcmVhdGVDb21wb25lbnQoRG9rdVNwaW5uZXIsIHtcbiAgICAgICAgZW52aXJvbm1lbnRJbmplY3RvcjogcHJvcHMuZW52SW5qZWN0b3IsXG4gICAgICB9KTtcbiAgICAgIHNwaW5uZXJDb21wb25lbnQubG9jYXRpb24ubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgICAgc3Bpbm5lckNvbXBvbmVudC5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LnN0eWxlLm1hcmdpblJpZ2h0ID0gJzE2cHgnO1xuICAgICAgc3Bpbm5lckNvbXBvbmVudC5zZXRJbnB1dCgnZGlhbWV0ZXInLCAzMik7XG4gICAgICBzcGlubmVyQ29tcG9uZW50LnNldElucHV0KCdzdHJva2VXaWR0aCcsIDMpO1xuICAgICAgcHJvcHMuYXBwUmVmLmF0dGFjaFZpZXcoc3Bpbm5lckNvbXBvbmVudC5ob3N0Vmlldyk7XG4gICAgICBzcGlubmVyVmlld1JlZiA9IHNwaW5uZXJDb21wb25lbnQuaG9zdFZpZXc7XG5cbiAgICAgIC8vIExvYWRpbmcgdGV4dCBlbGVtZW50XG4gICAgICBjb25zdCBsb2FkaW5nVGV4dEVsZW1lbnQ6IEhUTUxTcGFuRWxlbWVudCA9IHByb3BzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgIGxvYWRpbmdUZXh0RWxlbWVudC5jbGFzc05hbWUgPSAnZC10ZXh0LWJvZHktbSc7XG4gICAgICBsb2FkaW5nVGV4dEVsZW1lbnQudGV4dENvbnRlbnQgPSBwcm9wcy5jb250ZW50IHx8ICdQbGVhc2Ugd2FpdCwgd2UgYXJlIGxvYWRpbmcgeW91ciBkYXRhLi4uJztcblxuICAgICAgLy8gQXBwZW5kIHNwaW5uZXIgYW5kIGxvYWRpbmcgdGV4dCB0byB3cmFwcGVyIGVsZW1lbnRcbiAgICAgIHByb3BzLnJlbmRlcmVyLmFwcGVuZENoaWxkKGxvYWRpbmdXcmFwcGVyRWxlbWVudCwgc3Bpbm5lckNvbXBvbmVudC5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KTtcbiAgICAgIHByb3BzLnJlbmRlcmVyLmFwcGVuZENoaWxkKGxvYWRpbmdXcmFwcGVyRWxlbWVudCwgbG9hZGluZ1RleHRFbGVtZW50KTtcblxuICAgICAgLy8gQXBwZW5kIHRvIGNvbnRlbnQgZWxlbWVudFxuICAgICAgcHJvcHMucmVuZGVyZXIuYXBwZW5kQ2hpbGQocHJvcHMubG9hZGluZ0VsZW1lbnQuY29udGVudEVsZW1lbnQsIGxvYWRpbmdXcmFwcGVyRWxlbWVudCk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmNvbnRlbnQgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZikge1xuICAgICAgdGVtcGxhdGVWaWV3UmVmID0gcHJvcHMuY29udGVudC5jcmVhdGVFbWJlZGRlZFZpZXcobnVsbCwgcHJvcHMuaW5qZWN0b3IpO1xuICAgICAgcHJvcHMuYXBwUmVmLmF0dGFjaFZpZXcodGVtcGxhdGVWaWV3UmVmKTtcbiAgICAgIHRlbXBsYXRlVmlld1JlZi5yb290Tm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICBwcm9wcy5yZW5kZXJlci5hcHBlbmRDaGlsZChwcm9wcy5sb2FkaW5nRWxlbWVudC5jb250ZW50RWxlbWVudCwgbm9kZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBkZXN0cm95ID0gKCkgPT4ge1xuICAgICAgc3Bpbm5lclZpZXdSZWY/LmRlc3Ryb3koKTtcbiAgICAgIHRlbXBsYXRlVmlld1JlZj8uZGVzdHJveSgpO1xuICAgIH07XG5cbiAgICByZXR1cm4geyBkZXN0cm95IH07XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlRXJyb3JFbGVtZW50KHByb3BzOiB7IHJlbmRlcmVyOiBSZW5kZXJlcjI7IHRvdGFsQ29sdW1uOiBudW1iZXIgfSkge1xuICAgIGNvbnN0IHsgYm9keUVsZW1lbnQsIGNvbnRlbnRFbGVtZW50LCAuLi5yZXN0IH0gPSB0aGlzLmNyZWF0ZUJhc2VFbGVtZW50KHtcbiAgICAgIHJlbmRlcmVyOiBwcm9wcy5yZW5kZXJlcixcbiAgICAgIHRvdGFsQ29sdW1uOiBwcm9wcy50b3RhbENvbHVtbixcbiAgICB9KTtcbiAgICBib2R5RWxlbWVudC5jbGFzc05hbWUgPSAnZC10YWJsZS1ib2R5LWVycm9yJztcbiAgICByZXR1cm4geyBib2R5RWxlbWVudCwgY29udGVudEVsZW1lbnQsIC4uLnJlc3QgfTtcbiAgfVxuXG4gIHN0YXRpYyB1cGRhdGVFcnJvckNvbnRlbnQocHJvcHM6IHtcbiAgICByZW5kZXJlcjogUmVuZGVyZXIyO1xuICAgIGFwcFJlZjogQXBwbGljYXRpb25SZWY7XG4gICAgZXJyb3JFbGVtZW50OiBSZXR1cm5UeXBlPHR5cGVvZiBUZW1wbGF0ZVV0aWwuY3JlYXRlRXJyb3JFbGVtZW50PjtcbiAgICBpbmplY3Rvcj86IEluamVjdG9yO1xuICAgIGNvbnRlbnQ/OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjx1bmtub3duPjtcbiAgfSkge1xuICAgIGxldCB0ZW1wbGF0ZVZpZXdSZWY6IEVtYmVkZGVkVmlld1JlZjx1bmtub3duPiB8IHVuZGVmaW5lZDtcblxuICAgIGlmICghcHJvcHMuY29udGVudCB8fCB0eXBlb2YgcHJvcHMuY29udGVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IGVsOiBIVE1MRGl2RWxlbWVudCA9IHByb3BzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgZWwuY2xhc3NOYW1lID0gJ2QtdGV4dC1oNSc7XG4gICAgICBlbC50ZXh0Q29udGVudCA9IHByb3BzLmNvbnRlbnQgfHwgJ1NvbWV0aGluZyB3ZW50IHdyb25nISc7XG4gICAgICBwcm9wcy5yZW5kZXJlci5hcHBlbmRDaGlsZChwcm9wcy5lcnJvckVsZW1lbnQuY29udGVudEVsZW1lbnQsIGVsKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuY29udGVudCBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmKSB7XG4gICAgICB0ZW1wbGF0ZVZpZXdSZWYgPSBwcm9wcy5jb250ZW50LmNyZWF0ZUVtYmVkZGVkVmlldyhudWxsLCBwcm9wcy5pbmplY3Rvcik7XG4gICAgICBwcm9wcy5hcHBSZWYuYXR0YWNoVmlldyh0ZW1wbGF0ZVZpZXdSZWYpO1xuICAgICAgdGVtcGxhdGVWaWV3UmVmLnJvb3ROb2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICAgIHByb3BzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHByb3BzLmVycm9yRWxlbWVudC5jb250ZW50RWxlbWVudCwgbm9kZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBkZXN0cm95ID0gKCkgPT4ge1xuICAgICAgdGVtcGxhdGVWaWV3UmVmPy5kZXN0cm95KCk7XG4gICAgfTtcblxuICAgIHJldHVybiB7IGRlc3Ryb3kgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGNyZWF0ZUJhc2VFbGVtZW50KHByb3BzOiB7IHJlbmRlcmVyOiBSZW5kZXJlcjI7IHRvdGFsQ29sdW1uOiBudW1iZXIgfSkge1xuICAgIGNvbnN0IGNvbnRlbnRFbGVtZW50OiBIVE1MRGl2RWxlbWVudCA9IHByb3BzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGNvbnRlbnRFbGVtZW50LmNsYXNzTmFtZSA9ICdkLXRhYmxlLWJvZHktY3VzdG9tLWNvbnRlbnQnO1xuXG4gICAgY29uc3QgY2VsbEVsZW1lbnQ6IEhUTUxUYWJsZUNlbGxFbGVtZW50ID0gcHJvcHMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgndGQnKTtcbiAgICBjZWxsRWxlbWVudC5jb2xTcGFuID0gcHJvcHMudG90YWxDb2x1bW47XG5cbiAgICBjZWxsRWxlbWVudC5hcHBlbmRDaGlsZChjb250ZW50RWxlbWVudCk7XG5cbiAgICBjb25zdCByb3dFbGVtZW50OiBIVE1MVGFibGVSb3dFbGVtZW50ID0gcHJvcHMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgndHInKTtcblxuICAgIHJvd0VsZW1lbnQuYXBwZW5kQ2hpbGQoY2VsbEVsZW1lbnQpO1xuXG4gICAgY29uc3QgYm9keUVsZW1lbnQ6IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50ID0gcHJvcHMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgndGJvZHknKTtcblxuICAgIGJvZHlFbGVtZW50LmFwcGVuZENoaWxkKHJvd0VsZW1lbnQpO1xuXG4gICAgcmV0dXJuIHsgYm9keUVsZW1lbnQsIHJvd0VsZW1lbnQsIGNlbGxFbGVtZW50LCBjb250ZW50RWxlbWVudCB9O1xuICB9XG59XG4iXX0=