UNPKG

ng-devui

Version:

DevUI components based on Angular

151 lines 25.4 kB
const ARROW_WIDTH = 8; const PANEL_TO_ELEMENT = 10; export class PanelPostion { constructor(document) { this.document = document; } calculateAvailablePosition(curStepRect, panelRect) { if (this.step.position !== undefined) { this.availablePosition = this.step.position.split('-')[0]; } else { if (curStepRect.bottom + panelRect.height + PANEL_TO_ELEMENT <= this.document.documentElement.clientHeight) { this.availablePosition = 'bottom'; } else if (curStepRect.top - panelRect.height - PANEL_TO_ELEMENT > 0) { this.availablePosition = 'top'; } else if (curStepRect.right + panelRect.width + PANEL_TO_ELEMENT <= this.document.documentElement.clientWidth) { this.availablePosition = 'right'; } else if (curStepRect.left - panelRect.width - PANEL_TO_ELEMENT > 0) { this.availablePosition = 'left'; } } } calculateTopAndLeft(curStepRect, panelRect) { if (this.availablePosition === 'bottom') { this.top = curStepRect.bottom + PANEL_TO_ELEMENT; this.arrowTopBias = ARROW_WIDTH / 2; } else if (this.availablePosition === 'top') { this.arrowTopBias = panelRect.height - ARROW_WIDTH / 2; this.top = curStepRect.top - panelRect.height - PANEL_TO_ELEMENT; } else if (this.availablePosition === 'right') { this.left = curStepRect.right + PANEL_TO_ELEMENT; this.arrowLeftBias = -ARROW_WIDTH / 2; } else if (curStepRect.left - panelRect.width - PANEL_TO_ELEMENT > 0) { this.left = curStepRect.left - panelRect.width - PANEL_TO_ELEMENT; this.arrowLeftBias = panelRect.width - ARROW_WIDTH / 2; } } calculateAlignDirection(curStepRect, panelRect) { if (this.step.position !== undefined) { this.alignDirection = this.step.position.split('-')[1] || 'middle'; } else { if (this.availablePosition === 'bottom' || this.availablePosition === 'top') { this.calculateTopBottomAlign(curStepRect, panelRect); } else if (this.availablePosition === 'left' || this.availablePosition === 'right') { this.calculateLeftRightAlign(curStepRect, panelRect); } } } calculateTopBottomAlign(curStepRect, panelRect) { if (curStepRect.left + panelRect.width < this.document.documentElement.clientWidth) { this.alignDirection = 'left'; } else if (curStepRect.right - panelRect.width > 0) { this.alignDirection = 'right'; } if (panelRect.width < curStepRect.width || (curStepRect.left + curStepRect.width / 2 - panelRect.width / 2 > 0 && curStepRect.left + curStepRect.width / 2 + panelRect.width / 2 < this.document.documentElement.clientWidth)) { this.alignDirection = 'middle'; } } calculateLeftRightAlign(curStepRect, panelRect) { if (panelRect.height < curStepRect.height || (curStepRect.top + curStepRect.height / 2 - panelRect.height / 2 > 0 && curStepRect.top + curStepRect.height / 2 + panelRect.height / 2 < this.document.documentElement.clientHeight)) { this.alignDirection = 'middle'; } else if (curStepRect.top + panelRect.height < this.document.documentElement.clientWidth) { this.alignDirection = 'top'; } else if (curStepRect.bottom - panelRect.height > 0) { this.alignDirection = 'bottom'; } } calculateBias(curStepRect, panelRect) { if (this.availablePosition === 'bottom' || this.availablePosition === 'top') { this.calculateTopBottomBias(curStepRect, panelRect); } else if (this.availablePosition === 'left' || this.availablePosition === 'right') { this.calculateLeftRightBias(curStepRect, panelRect); } } calculateTopBottomBias(curStepRect, panelRect) { if (this.alignDirection === 'middle') { this.left = curStepRect.left + curStepRect.width / 2 - panelRect.width / 2; this.arrowLeftBias = panelRect.width / 2 - ARROW_WIDTH / 2; } else if (this.alignDirection === 'left') { this.left = curStepRect.left; this.arrowLeftBias = PANEL_TO_ELEMENT + ARROW_WIDTH; } else if (this.alignDirection === 'right') { this.left = curStepRect.right - panelRect.width; this.arrowLeftBias = panelRect.width - PANEL_TO_ELEMENT - ARROW_WIDTH; } } calculateLeftRightBias(curStepRect, panelRect) { if (this.alignDirection === 'middle') { this.top = curStepRect.top + curStepRect.height / 2 - panelRect.height / 2; this.arrowTopBias = panelRect.height / 2; } else if (this.alignDirection === 'top') { this.top = curStepRect.top; this.arrowTopBias = PANEL_TO_ELEMENT + ARROW_WIDTH; } else if (this.alignDirection === 'bottom') { this.top = curStepRect.bottom - panelRect.height; this.arrowTopBias = panelRect.height - PANEL_TO_ELEMENT - ARROW_WIDTH; } } getRealClientRect(step) { const stepRect = step.element?.getBoundingClientRect(); const realRect = { top: stepRect?.top - (step?.highlightOffset ? step.highlightOffset[0] : 0), right: stepRect?.right + (step?.highlightOffset ? step.highlightOffset[1] : 0), left: stepRect?.left - (step?.highlightOffset ? step.highlightOffset[3] : 0), bottom: stepRect?.bottom + (step?.highlightOffset ? step.highlightOffset[2] : 0), width: stepRect?.width + (step?.highlightOffset ? step.highlightOffset[3] + step.highlightOffset[1] : 0), height: stepRect?.height + (step?.highlightOffset ? step.highlightOffset[0] + step.highlightOffset[2] : 0), }; return realRect; } calculatePosition(step) { const panel = this.document.querySelector('.user-guide-panel'); const panelRect = panel.getBoundingClientRect(); this.step = step; const curStepRect = this.getRealClientRect(step); this.calculateAvailablePosition(curStepRect, panelRect); this.calculateTopAndLeft(curStepRect, panelRect); this.calculateAlignDirection(curStepRect, panelRect); this.calculateBias(curStepRect, panelRect); const panelArrow = this.document.querySelector('.devui-user-guide-panel-arrow'); if (panelArrow) { panelArrow.style.top = `${this.arrowTopBias}px`; panelArrow.style.left = `${this.arrowLeftBias}px`; } panel.style.cssText = ` top: ${this.top}px; left: ${this.left}px; `; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsY3VsYXRlLXBhbmVsLXBvc2l0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vZGV2dWkvdXNlci1ndWlkZS91dGlscy9jYWxjdWxhdGUtcGFuZWwtcG9zaXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO0FBRTVCLE1BQU0sT0FBTyxZQUFZO0lBV3ZCLFlBQVksUUFBUTtRQUNsQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMzQixDQUFDO0lBRUQsMEJBQTBCLENBQUMsV0FBVyxFQUFFLFNBQVM7UUFDL0MsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVELENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsZ0JBQWdCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQzNHLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxRQUFRLENBQUM7WUFDcEMsQ0FBQztpQkFBTSxJQUFJLFdBQVcsQ0FBQyxHQUFHLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxnQkFBZ0IsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDckUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztZQUNqQyxDQUFDO2lCQUFNLElBQUksV0FBVyxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSyxHQUFHLGdCQUFnQixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUMvRyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDO1lBQ25DLENBQUM7aUJBQU0sSUFBSSxXQUFXLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxLQUFLLEdBQUcsZ0JBQWdCLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxNQUFNLENBQUM7WUFDbEMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsV0FBVyxFQUFFLFNBQVM7UUFDeEMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDeEMsSUFBSSxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUMsTUFBTSxHQUFHLGdCQUFnQixDQUFDO1lBQ2pELElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxHQUFHLENBQUMsQ0FBQztRQUN0QyxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsaUJBQWlCLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLFdBQVcsR0FBRyxDQUFDLENBQUM7WUFDdkQsSUFBSSxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsZ0JBQWdCLENBQUM7UUFDbkUsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLGlCQUFpQixLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQzlDLElBQUksQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQztZQUNqRCxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztRQUN4QyxDQUFDO2FBQU0sSUFBSSxXQUFXLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxLQUFLLEdBQUcsZ0JBQWdCLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDckUsSUFBSSxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxLQUFLLEdBQUcsZ0JBQWdCLENBQUM7WUFDbEUsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUMsS0FBSyxHQUFHLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFDekQsQ0FBQztJQUNILENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxXQUFXLEVBQUUsU0FBUztRQUM1QyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQztRQUNyRSxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksSUFBSSxDQUFDLGlCQUFpQixLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEtBQUssS0FBSyxFQUFFLENBQUM7Z0JBQzVFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDdkQsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLGlCQUFpQixLQUFLLE9BQU8sRUFBRSxDQUFDO2dCQUNuRixJQUFJLENBQUMsdUJBQXVCLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELHVCQUF1QixDQUFDLFdBQVcsRUFBRSxTQUFTO1FBQzVDLElBQUksV0FBVyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ25GLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDO1FBQy9CLENBQUM7YUFBTSxJQUFJLFdBQVcsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNuRCxJQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQztRQUNoQyxDQUFDO1FBQ0QsSUFDRSxTQUFTLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLO1lBQ25DLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDO2dCQUNqRSxXQUFXLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxFQUM3RyxDQUFDO1lBQ0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUM7UUFDakMsQ0FBQztJQUNILENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxXQUFXLEVBQUUsU0FBUztRQUM1QyxJQUNFLFNBQVMsQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLE1BQU07WUFDckMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUM7Z0JBQ2xFLFdBQVcsQ0FBQyxHQUFHLEdBQUcsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLEVBQy9HLENBQUM7WUFDRCxJQUFJLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQztRQUNqQyxDQUFDO2FBQU0sSUFBSSxXQUFXLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDMUYsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDOUIsQ0FBQzthQUFNLElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3JELElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO1FBQ2pDLENBQUM7SUFDSCxDQUFDO0lBRUQsYUFBYSxDQUFDLFdBQVcsRUFBRSxTQUFTO1FBQ2xDLElBQUksSUFBSSxDQUFDLGlCQUFpQixLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDNUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN0RCxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsaUJBQWlCLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUNuRixJQUFJLENBQUMsc0JBQXNCLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3RELENBQUM7SUFDSCxDQUFDO0lBRUQsc0JBQXNCLENBQUMsV0FBVyxFQUFFLFNBQVM7UUFDM0MsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUMzRSxJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFDN0QsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDN0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxnQkFBZ0IsR0FBRyxXQUFXLENBQUM7UUFDdEQsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUMzQyxJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQztZQUNoRCxJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQyxLQUFLLEdBQUcsZ0JBQWdCLEdBQUcsV0FBVyxDQUFDO1FBQ3hFLENBQUM7SUFDSCxDQUFDO0lBRUQsc0JBQXNCLENBQUMsV0FBVyxFQUFFLFNBQVM7UUFDM0MsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxHQUFHLEdBQUcsV0FBVyxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUMzRSxJQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQzNDLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDekMsSUFBSSxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDO1lBQzNCLElBQUksQ0FBQyxZQUFZLEdBQUcsZ0JBQWdCLEdBQUcsV0FBVyxDQUFDO1FBQ3JELENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7WUFDakQsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLGdCQUFnQixHQUFHLFdBQVcsQ0FBQztRQUN4RSxDQUFDO0lBQ0gsQ0FBQztJQUVELGlCQUFpQixDQUFDLElBQUk7UUFDcEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxDQUFDO1FBQ3ZELE1BQU0sUUFBUSxHQUFHO1lBQ2YsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEYsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4RyxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sR0FBRyxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzNHLENBQUM7UUFDRixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsaUJBQWlCLENBQUMsSUFBSTtRQUNwQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBZ0IsQ0FBQztRQUM5RSxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUNoRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUVqQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFakQsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFM0MsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsK0JBQStCLENBQWdCLENBQUM7UUFDL0YsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNmLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDO1lBQ2hELFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDO1FBQ3BELENBQUM7UUFFRCxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRztpQkFDVCxJQUFJLENBQUMsR0FBRztrQkFDUCxJQUFJLENBQUMsSUFBSTtTQUNsQixDQUFDO0lBQ1IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSVN0ZXBFbGVtZW50RGV0YWlsIH0gZnJvbSAnLi4vdXNlci1ndWlkZS50eXBlcyc7XG5cbmNvbnN0IEFSUk9XX1dJRFRIID0gODtcbmNvbnN0IFBBTkVMX1RPX0VMRU1FTlQgPSAxMDtcblxuZXhwb3J0IGNsYXNzIFBhbmVsUG9zdGlvbiB7XG4gIHRvcDogbnVtYmVyO1xuICBsZWZ0OiBudW1iZXI7XG4gIGFycm93VG9wQmlhczogbnVtYmVyO1xuICBhcnJvd0xlZnRCaWFzOiBudW1iZXI7XG5cbiAgYXZhaWxhYmxlUG9zaXRpb246IHN0cmluZztcbiAgYWxpZ25EaXJlY3Rpb246IHN0cmluZztcbiAgc3RlcDogSVN0ZXBFbGVtZW50RGV0YWlsO1xuICBkb2N1bWVudDogRG9jdW1lbnQ7XG5cbiAgY29uc3RydWN0b3IoZG9jdW1lbnQpIHtcbiAgICB0aGlzLmRvY3VtZW50ID0gZG9jdW1lbnQ7XG4gIH1cblxuICBjYWxjdWxhdGVBdmFpbGFibGVQb3NpdGlvbihjdXJTdGVwUmVjdCwgcGFuZWxSZWN0KSB7XG4gICAgaWYgKHRoaXMuc3RlcC5wb3NpdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmF2YWlsYWJsZVBvc2l0aW9uID0gdGhpcy5zdGVwLnBvc2l0aW9uLnNwbGl0KCctJylbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjdXJTdGVwUmVjdC5ib3R0b20gKyBwYW5lbFJlY3QuaGVpZ2h0ICsgUEFORUxfVE9fRUxFTUVOVCA8PSB0aGlzLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpIHtcbiAgICAgICAgdGhpcy5hdmFpbGFibGVQb3NpdGlvbiA9ICdib3R0b20nO1xuICAgICAgfSBlbHNlIGlmIChjdXJTdGVwUmVjdC50b3AgLSBwYW5lbFJlY3QuaGVpZ2h0IC0gUEFORUxfVE9fRUxFTUVOVCA+IDApIHtcbiAgICAgICAgdGhpcy5hdmFpbGFibGVQb3NpdGlvbiA9ICd0b3AnO1xuICAgICAgfSBlbHNlIGlmIChjdXJTdGVwUmVjdC5yaWdodCArIHBhbmVsUmVjdC53aWR0aCArIFBBTkVMX1RPX0VMRU1FTlQgPD0gdGhpcy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpIHtcbiAgICAgICAgdGhpcy5hdmFpbGFibGVQb3NpdGlvbiA9ICdyaWdodCc7XG4gICAgICB9IGVsc2UgaWYgKGN1clN0ZXBSZWN0LmxlZnQgLSBwYW5lbFJlY3Qud2lkdGggLSBQQU5FTF9UT19FTEVNRU5UID4gMCkge1xuICAgICAgICB0aGlzLmF2YWlsYWJsZVBvc2l0aW9uID0gJ2xlZnQnO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNhbGN1bGF0ZVRvcEFuZExlZnQoY3VyU3RlcFJlY3QsIHBhbmVsUmVjdCkge1xuICAgIGlmICh0aGlzLmF2YWlsYWJsZVBvc2l0aW9uID09PSAnYm90dG9tJykge1xuICAgICAgdGhpcy50b3AgPSBjdXJTdGVwUmVjdC5ib3R0b20gKyBQQU5FTF9UT19FTEVNRU5UO1xuICAgICAgdGhpcy5hcnJvd1RvcEJpYXMgPSBBUlJPV19XSURUSCAvIDI7XG4gICAgfSBlbHNlIGlmICh0aGlzLmF2YWlsYWJsZVBvc2l0aW9uID09PSAndG9wJykge1xuICAgICAgdGhpcy5hcnJvd1RvcEJpYXMgPSBwYW5lbFJlY3QuaGVpZ2h0IC0gQVJST1dfV0lEVEggLyAyO1xuICAgICAgdGhpcy50b3AgPSBjdXJTdGVwUmVjdC50b3AgLSBwYW5lbFJlY3QuaGVpZ2h0IC0gUEFORUxfVE9fRUxFTUVOVDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuYXZhaWxhYmxlUG9zaXRpb24gPT09ICdyaWdodCcpIHtcbiAgICAgIHRoaXMubGVmdCA9IGN1clN0ZXBSZWN0LnJpZ2h0ICsgUEFORUxfVE9fRUxFTUVOVDtcbiAgICAgIHRoaXMuYXJyb3dMZWZ0QmlhcyA9IC1BUlJPV19XSURUSCAvIDI7XG4gICAgfSBlbHNlIGlmIChjdXJTdGVwUmVjdC5sZWZ0IC0gcGFuZWxSZWN0LndpZHRoIC0gUEFORUxfVE9fRUxFTUVOVCA+IDApIHtcbiAgICAgIHRoaXMubGVmdCA9IGN1clN0ZXBSZWN0LmxlZnQgLSBwYW5lbFJlY3Qud2lkdGggLSBQQU5FTF9UT19FTEVNRU5UO1xuICAgICAgdGhpcy5hcnJvd0xlZnRCaWFzID0gcGFuZWxSZWN0LndpZHRoIC0gQVJST1dfV0lEVEggLyAyO1xuICAgIH1cbiAgfVxuXG4gIGNhbGN1bGF0ZUFsaWduRGlyZWN0aW9uKGN1clN0ZXBSZWN0LCBwYW5lbFJlY3QpIHtcbiAgICBpZiAodGhpcy5zdGVwLnBvc2l0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuYWxpZ25EaXJlY3Rpb24gPSB0aGlzLnN0ZXAucG9zaXRpb24uc3BsaXQoJy0nKVsxXSB8fCAnbWlkZGxlJztcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuYXZhaWxhYmxlUG9zaXRpb24gPT09ICdib3R0b20nIHx8IHRoaXMuYXZhaWxhYmxlUG9zaXRpb24gPT09ICd0b3AnKSB7XG4gICAgICAgIHRoaXMuY2FsY3VsYXRlVG9wQm90dG9tQWxpZ24oY3VyU3RlcFJlY3QsIHBhbmVsUmVjdCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuYXZhaWxhYmxlUG9zaXRpb24gPT09ICdsZWZ0JyB8fCB0aGlzLmF2YWlsYWJsZVBvc2l0aW9uID09PSAncmlnaHQnKSB7XG4gICAgICAgIHRoaXMuY2FsY3VsYXRlTGVmdFJpZ2h0QWxpZ24oY3VyU3RlcFJlY3QsIHBhbmVsUmVjdCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2FsY3VsYXRlVG9wQm90dG9tQWxpZ24oY3VyU3RlcFJlY3QsIHBhbmVsUmVjdCkge1xuICAgIGlmIChjdXJTdGVwUmVjdC5sZWZ0ICsgcGFuZWxSZWN0LndpZHRoIDwgdGhpcy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpIHtcbiAgICAgIHRoaXMuYWxpZ25EaXJlY3Rpb24gPSAnbGVmdCc7XG4gICAgfSBlbHNlIGlmIChjdXJTdGVwUmVjdC5yaWdodCAtIHBhbmVsUmVjdC53aWR0aCA+IDApIHtcbiAgICAgIHRoaXMuYWxpZ25EaXJlY3Rpb24gPSAncmlnaHQnO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBwYW5lbFJlY3Qud2lkdGggPCBjdXJTdGVwUmVjdC53aWR0aCB8fFxuICAgICAgKGN1clN0ZXBSZWN0LmxlZnQgKyBjdXJTdGVwUmVjdC53aWR0aCAvIDIgLSBwYW5lbFJlY3Qud2lkdGggLyAyID4gMCAmJlxuICAgICAgICBjdXJTdGVwUmVjdC5sZWZ0ICsgY3VyU3RlcFJlY3Qud2lkdGggLyAyICsgcGFuZWxSZWN0LndpZHRoIC8gMiA8IHRoaXMuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKVxuICAgICkge1xuICAgICAgdGhpcy5hbGlnbkRpcmVjdGlvbiA9ICdtaWRkbGUnO1xuICAgIH1cbiAgfVxuXG4gIGNhbGN1bGF0ZUxlZnRSaWdodEFsaWduKGN1clN0ZXBSZWN0LCBwYW5lbFJlY3QpIHtcbiAgICBpZiAoXG4gICAgICBwYW5lbFJlY3QuaGVpZ2h0IDwgY3VyU3RlcFJlY3QuaGVpZ2h0IHx8XG4gICAgICAoY3VyU3RlcFJlY3QudG9wICsgY3VyU3RlcFJlY3QuaGVpZ2h0IC8gMiAtIHBhbmVsUmVjdC5oZWlnaHQgLyAyID4gMCAmJlxuICAgICAgICBjdXJTdGVwUmVjdC50b3AgKyBjdXJTdGVwUmVjdC5oZWlnaHQgLyAyICsgcGFuZWxSZWN0LmhlaWdodCAvIDIgPCB0aGlzLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpXG4gICAgKSB7XG4gICAgICB0aGlzLmFsaWduRGlyZWN0aW9uID0gJ21pZGRsZSc7XG4gICAgfSBlbHNlIGlmIChjdXJTdGVwUmVjdC50b3AgKyBwYW5lbFJlY3QuaGVpZ2h0IDwgdGhpcy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpIHtcbiAgICAgIHRoaXMuYWxpZ25EaXJlY3Rpb24gPSAndG9wJztcbiAgICB9IGVsc2UgaWYgKGN1clN0ZXBSZWN0LmJvdHRvbSAtIHBhbmVsUmVjdC5oZWlnaHQgPiAwKSB7XG4gICAgICB0aGlzLmFsaWduRGlyZWN0aW9uID0gJ2JvdHRvbSc7XG4gICAgfVxuICB9XG5cbiAgY2FsY3VsYXRlQmlhcyhjdXJTdGVwUmVjdCwgcGFuZWxSZWN0KSB7XG4gICAgaWYgKHRoaXMuYXZhaWxhYmxlUG9zaXRpb24gPT09ICdib3R0b20nIHx8IHRoaXMuYXZhaWxhYmxlUG9zaXRpb24gPT09ICd0b3AnKSB7XG4gICAgICB0aGlzLmNhbGN1bGF0ZVRvcEJvdHRvbUJpYXMoY3VyU3RlcFJlY3QsIHBhbmVsUmVjdCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmF2YWlsYWJsZVBvc2l0aW9uID09PSAnbGVmdCcgfHwgdGhpcy5hdmFpbGFibGVQb3NpdGlvbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgdGhpcy5jYWxjdWxhdGVMZWZ0UmlnaHRCaWFzKGN1clN0ZXBSZWN0LCBwYW5lbFJlY3QpO1xuICAgIH1cbiAgfVxuXG4gIGNhbGN1bGF0ZVRvcEJvdHRvbUJpYXMoY3VyU3RlcFJlY3QsIHBhbmVsUmVjdCkge1xuICAgIGlmICh0aGlzLmFsaWduRGlyZWN0aW9uID09PSAnbWlkZGxlJykge1xuICAgICAgdGhpcy5sZWZ0ID0gY3VyU3RlcFJlY3QubGVmdCArIGN1clN0ZXBSZWN0LndpZHRoIC8gMiAtIHBhbmVsUmVjdC53aWR0aCAvIDI7XG4gICAgICB0aGlzLmFycm93TGVmdEJpYXMgPSBwYW5lbFJlY3Qud2lkdGggLyAyIC0gQVJST1dfV0lEVEggLyAyO1xuICAgIH0gZWxzZSBpZiAodGhpcy5hbGlnbkRpcmVjdGlvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICB0aGlzLmxlZnQgPSBjdXJTdGVwUmVjdC5sZWZ0O1xuICAgICAgdGhpcy5hcnJvd0xlZnRCaWFzID0gUEFORUxfVE9fRUxFTUVOVCArIEFSUk9XX1dJRFRIO1xuICAgIH0gZWxzZSBpZiAodGhpcy5hbGlnbkRpcmVjdGlvbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgdGhpcy5sZWZ0ID0gY3VyU3RlcFJlY3QucmlnaHQgLSBwYW5lbFJlY3Qud2lkdGg7XG4gICAgICB0aGlzLmFycm93TGVmdEJpYXMgPSBwYW5lbFJlY3Qud2lkdGggLSBQQU5FTF9UT19FTEVNRU5UIC0gQVJST1dfV0lEVEg7XG4gICAgfVxuICB9XG5cbiAgY2FsY3VsYXRlTGVmdFJpZ2h0QmlhcyhjdXJTdGVwUmVjdCwgcGFuZWxSZWN0KSB7XG4gICAgaWYgKHRoaXMuYWxpZ25EaXJlY3Rpb24gPT09ICdtaWRkbGUnKSB7XG4gICAgICB0aGlzLnRvcCA9IGN1clN0ZXBSZWN0LnRvcCArIGN1clN0ZXBSZWN0LmhlaWdodCAvIDIgLSBwYW5lbFJlY3QuaGVpZ2h0IC8gMjtcbiAgICAgIHRoaXMuYXJyb3dUb3BCaWFzID0gcGFuZWxSZWN0LmhlaWdodCAvIDI7XG4gICAgfSBlbHNlIGlmICh0aGlzLmFsaWduRGlyZWN0aW9uID09PSAndG9wJykge1xuICAgICAgdGhpcy50b3AgPSBjdXJTdGVwUmVjdC50b3A7XG4gICAgICB0aGlzLmFycm93VG9wQmlhcyA9IFBBTkVMX1RPX0VMRU1FTlQgKyBBUlJPV19XSURUSDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuYWxpZ25EaXJlY3Rpb24gPT09ICdib3R0b20nKSB7XG4gICAgICB0aGlzLnRvcCA9IGN1clN0ZXBSZWN0LmJvdHRvbSAtIHBhbmVsUmVjdC5oZWlnaHQ7XG4gICAgICB0aGlzLmFycm93VG9wQmlhcyA9IHBhbmVsUmVjdC5oZWlnaHQgLSBQQU5FTF9UT19FTEVNRU5UIC0gQVJST1dfV0lEVEg7XG4gICAgfVxuICB9XG5cbiAgZ2V0UmVhbENsaWVudFJlY3Qoc3RlcCkge1xuICAgIGNvbnN0IHN0ZXBSZWN0ID0gc3RlcC5lbGVtZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCByZWFsUmVjdCA9IHtcbiAgICAgIHRvcDogc3RlcFJlY3Q/LnRvcCAtIChzdGVwPy5oaWdobGlnaHRPZmZzZXQgPyBzdGVwLmhpZ2hsaWdodE9mZnNldFswXSA6IDApLFxuICAgICAgcmlnaHQ6IHN0ZXBSZWN0Py5yaWdodCArIChzdGVwPy5oaWdobGlnaHRPZmZzZXQgPyBzdGVwLmhpZ2hsaWdodE9mZnNldFsxXSA6IDApLFxuICAgICAgbGVmdDogc3RlcFJlY3Q/LmxlZnQgLSAoc3RlcD8uaGlnaGxpZ2h0T2Zmc2V0ID8gc3RlcC5oaWdobGlnaHRPZmZzZXRbM10gOiAwKSxcbiAgICAgIGJvdHRvbTogc3RlcFJlY3Q/LmJvdHRvbSArIChzdGVwPy5oaWdobGlnaHRPZmZzZXQgPyBzdGVwLmhpZ2hsaWdodE9mZnNldFsyXSA6IDApLFxuICAgICAgd2lkdGg6IHN0ZXBSZWN0Py53aWR0aCArIChzdGVwPy5oaWdobGlnaHRPZmZzZXQgPyBzdGVwLmhpZ2hsaWdodE9mZnNldFszXSArIHN0ZXAuaGlnaGxpZ2h0T2Zmc2V0WzFdIDogMCksXG4gICAgICBoZWlnaHQ6IHN0ZXBSZWN0Py5oZWlnaHQgKyAoc3RlcD8uaGlnaGxpZ2h0T2Zmc2V0ID8gc3RlcC5oaWdobGlnaHRPZmZzZXRbMF0gKyBzdGVwLmhpZ2hsaWdodE9mZnNldFsyXSA6IDApLFxuICAgIH07XG4gICAgcmV0dXJuIHJlYWxSZWN0O1xuICB9XG5cbiAgY2FsY3VsYXRlUG9zaXRpb24oc3RlcCkge1xuICAgIGNvbnN0IHBhbmVsID0gdGhpcy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcudXNlci1ndWlkZS1wYW5lbCcpIGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IHBhbmVsUmVjdCA9IHBhbmVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHRoaXMuc3RlcCA9IHN0ZXA7XG5cbiAgICBjb25zdCBjdXJTdGVwUmVjdCA9IHRoaXMuZ2V0UmVhbENsaWVudFJlY3Qoc3RlcCk7XG5cbiAgICB0aGlzLmNhbGN1bGF0ZUF2YWlsYWJsZVBvc2l0aW9uKGN1clN0ZXBSZWN0LCBwYW5lbFJlY3QpO1xuICAgIHRoaXMuY2FsY3VsYXRlVG9wQW5kTGVmdChjdXJTdGVwUmVjdCwgcGFuZWxSZWN0KTtcbiAgICB0aGlzLmNhbGN1bGF0ZUFsaWduRGlyZWN0aW9uKGN1clN0ZXBSZWN0LCBwYW5lbFJlY3QpO1xuICAgIHRoaXMuY2FsY3VsYXRlQmlhcyhjdXJTdGVwUmVjdCwgcGFuZWxSZWN0KTtcblxuICAgIGNvbnN0IHBhbmVsQXJyb3cgPSB0aGlzLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kZXZ1aS11c2VyLWd1aWRlLXBhbmVsLWFycm93JykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWYgKHBhbmVsQXJyb3cpIHtcbiAgICAgIHBhbmVsQXJyb3cuc3R5bGUudG9wID0gYCR7dGhpcy5hcnJvd1RvcEJpYXN9cHhgO1xuICAgICAgcGFuZWxBcnJvdy5zdHlsZS5sZWZ0ID0gYCR7dGhpcy5hcnJvd0xlZnRCaWFzfXB4YDtcbiAgICB9XG5cbiAgICBwYW5lbC5zdHlsZS5jc3NUZXh0ID0gYFxuICAgICAgICAgIHRvcDogJHt0aGlzLnRvcH1weDtcbiAgICAgICAgICBsZWZ0OiAke3RoaXMubGVmdH1weDtcbiAgICAgICAgYDtcbiAgfVxufVxuIl19