UNPKG

progress-button

Version:
175 lines 22.7 kB
import { Injectable } from '@angular/core'; import { mergeOptions, ProgressButtonConfig } from './progress-button.types'; import * as i0 from "@angular/core"; import * as i1 from "./progress-button.types"; export class ProgressButtonService { constructor(config = new ProgressButtonConfig()) { /** * Check if animation is active * @param name ProgressButtonAnimation Animation name */ this.isAnimation = (name) => { return (this.progress.animation === name); }; /** * Return some progress styles * @param progressValue The progress value * @param statusClass The status (state-success | state-error) */ this.styles = (progressValue, statusClass) => { return { progressInner: this.progressInnerStyle(progressValue), button: this.buttonStyle(statusClass), content: this.contentStyle(statusClass) }; }; /** * Get the Progress Inner Style * @param progressValue The progress value */ this.progressInnerStyle = (progressValue) => { const style = { background: this.design.progressInnerBackground, borderColor: null, borderLeftWidth: null, borderRightWidth: null, height: null, width: null, }; // Reset LinesSize if ((this.design.linesSize === null) || (typeof this.design.linesSize === 'undefined')) { this.design.linesSize = 10; } // Lateral Lines if (this.isAnimation('lateral-lines')) { style.background = null; style.borderColor = this.design.progressInnerBackground; style.borderLeftWidth = this.design.linesSize + 'px'; style.borderRightWidth = this.design.linesSize + 'px'; } // Set Size style.height = this.progressInnerHeight(progressValue); style.width = this.progressInnerWidth(progressValue); return style; }; /** * Get Calculated Progress Inner Width */ this.progressInnerWidth = (progressValue) => { if (this.progress.direction === 'horizontal') { return progressValue + '%'; } else { if (this.isAnimation('shrink') && this.design.radius) { return progressValue + '%'; } } if (this.isAnimation('top-line')) { return this.design.linesSize + 'px'; } return null; }; /** * Get Calculated Progress Inner Height */ this.progressInnerHeight = (progressValue) => { if (this.progress.direction === 'vertical') { if (this.isAnimation('shrink') && this.design.radius) { return '100%'; } return progressValue + '%'; } if (this.isAnimation('top-line')) { return this.design.linesSize + 'px'; } return null; }; /** * Get the background color of the button according to the status */ this.mainBackgroundColor = (statusClass) => { let bg = this.design.background; switch (statusClass) { case 'state-success': bg = this.design.successBackground; break; case 'state-error': bg = this.design.errorBackground; break; } return bg; }; /** * Get css style of the button */ this.buttonStyle = (statusClass) => { return { background: (!this.status.isPerspective) ? this.mainBackgroundColor(statusClass) : null, color: this.design.color, borderRadius: (this.status.isBorderRadius) ? this.design.radius + 'px' : null, }; }; /** * Get the content style according to the status */ this.contentStyle = (statusClass) => { return { background: (this.status.isContentBackground) ? this.mainBackgroundColor(statusClass) : null, color: this.design.color, borderRadius: (this.status.isBorderRadius) ? this.design.radius + 'px' : null, }; }; const defConfig = new ProgressButtonConfig(); this.progressP = (config.progress) ? Object.assign({}, config.progress) : Object.assign({}, defConfig.progress); this.designP = (config.design) ? Object.assign({}, config.design) : Object.assign({}, defConfig.design); } /** * Return the status of the data */ get status() { const status = { perspective: null, isHorizontal: true, isPerspective: false, isBorderRadius: false, isRotateAnimation: false, isFlipAnimation: false, isSlideDownAnimation: false, isMoveUpAnimation: false, isContentBackground: false }; status.isHorizontal = (this.progress.direction === 'horizontal'); status.isRotateAnimation = (this.progress.animation.includes('rotate-')); status.isFlipAnimation = (this.progress.animation.includes('flip-')); status.isSlideDownAnimation = (this.progress.animation.includes('slide-down')); status.isMoveUpAnimation = (this.progress.animation.includes('move-up')); status.perspective = (status.isRotateAnimation || status.isFlipAnimation) ? '' : null; // Have progress animation 3D perspective status.isPerspective = (status.perspective !== null); status.isBorderRadius = (!status.isRotateAnimation && this.design.radius !== null); status.isContentBackground = (status.isPerspective || status.isSlideDownAnimation || status.isMoveUpAnimation); return status; } get design() { return this.designP; } set design(value) { this.designP = mergeOptions(value, this.designP); } get progress() { return this.progressP; } set progress(value) { this.progressP = mergeOptions(value, this.progressP); } } /** @nocollapse */ ProgressButtonService.ɵprov = i0.ɵɵdefineInjectable({ factory: function ProgressButtonService_Factory() { return new ProgressButtonService(i0.ɵɵinject(i1.ProgressButtonConfig)); }, token: ProgressButtonService, providedIn: "root" }); ProgressButtonService.decorators = [ { type: Injectable, args: [{ providedIn: 'root' },] } ]; /** @nocollapse */ ProgressButtonService.ctorParameters = () => [ { type: ProgressButtonConfig } ]; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MtYnV0dG9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm9ncmVzcy1idXR0b24vc3JjL2xpYi9wcm9ncmVzcy1idXR0b24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFDTCxZQUFZLEVBRVosb0JBQW9CLEVBSXJCLE1BQU0seUJBQXlCLENBQUM7OztBQUtqQyxNQUFNLE9BQU8scUJBQXFCO0lBTWhDLFlBQVksU0FBK0IsSUFBSSxvQkFBb0IsRUFBRTtRQWlEckU7OztXQUdHO1FBQ0gsZ0JBQVcsR0FBRyxDQUFDLElBQTZCLEVBQVcsRUFBRTtZQUN2RCxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDNUMsQ0FBQyxDQUFDO1FBRUY7Ozs7V0FJRztRQUNILFdBQU0sR0FBRyxDQUFDLGFBQXFCLEVBQUUsV0FBbUIsRUFBd0IsRUFBRTtZQUM1RSxPQUFPO2dCQUNMLGFBQWEsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDO2dCQUNyRCxNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUM7Z0JBQ3JDLE9BQU8sRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQzthQUN4QyxDQUFDO1FBQ0osQ0FBQyxDQUFDO1FBRUY7OztXQUdHO1FBQ0ssdUJBQWtCLEdBQUcsQ0FBQyxhQUFxQixFQUFFLEVBQUU7WUFFckQsTUFBTSxLQUFLLEdBQUc7Z0JBQ1osVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsdUJBQXVCO2dCQUMvQyxXQUFXLEVBQUUsSUFBSTtnQkFDakIsZUFBZSxFQUFFLElBQUk7Z0JBQ3JCLGdCQUFnQixFQUFFLElBQUk7Z0JBQ3RCLE1BQU0sRUFBRSxJQUFJ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QUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyx5Q0FBeUM7UUFDaEksTUFBTSxDQUFDLGFBQWEsR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDckQsTUFBTSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ25GLE1BQU0sQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxhQUFhLElBQUksTUFBTSxDQUFDLG9CQUFvQixJQUFJLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQy9HLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVELElBQUksTUFBTSxDQUFDLEtBQTJCO1FBQ3BDLElBQUksQ0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxRQUFRLENBQUMsS0FBeUI7UUFDcEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxZQUFZLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN2RCxDQUFDOzs7O1lBeERGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7OztZQVJDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgbWVyZ2VPcHRpb25zLFxyXG4gIFByb2dyZXNzQnV0dG9uQW5pbWF0aW9uLFxyXG4gIFByb2dyZXNzQnV0dG9uQ29uZmlnLFxyXG4gIFByb2dyZXNzQnV0dG9uRGF0YSxcclxuICBQcm9ncmVzc0J1dHRvbkRhdGFTdGF0dXMsXHJcbiAgUHJvZ3Jlc3NCdXR0b25EZXNpZ24sIFByb2dyZXNzQnV0dG9uU3R5bGVzXHJcbn0gZnJvbSAnLi9wcm9ncmVzcy1idXR0b24udHlwZXMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUHJvZ3Jlc3NCdXR0b25TZXJ2aWNlIHtcclxuXHJcblxyXG4gIHByaXZhdGUgcHJvZ3Jlc3NQOiBQcm9ncmVzc0J1dHRvbkRhdGE7XHJcbiAgcHJpdmF0ZSBkZXNpZ25QOiBQcm9ncmVzc0J1dHRvbkRlc2lnbjtcclxuXHJcbiAgY29uc3RydWN0b3IoY29uZmlnOiBQcm9ncmVzc0J1dHRvbkNvbmZpZyA9IG5ldyBQcm9ncmVzc0J1dHRvbkNvbmZpZygpKSB7XHJcbiAgICBjb25zdCBkZWZDb25maWcgPSBuZXcgUHJvZ3Jlc3NCdXR0b25Db25maWcoKTtcclxuICAgIHRoaXMucHJvZ3Jlc3NQID0gKGNvbmZpZy5wcm9ncmVzcykgPyB7Li4uY29uZmlnLnByb2dyZXNzfSA6IHsuLi5kZWZDb25maWcucHJvZ3Jlc3N9O1xyXG4gICAgdGhpcy5kZXNpZ25QID0gKGNvbmZpZy5kZXNpZ24pID8gey4uLmNvbmZpZy5kZXNpZ259IDogey4uLmRlZkNvbmZpZy5kZXNpZ259O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSBzdGF0dXMgb2YgdGhlIGRhdGFcclxuICAgKi9cclxuICBnZXQgc3RhdHVzKCk6IFByb2dyZXNzQnV0dG9uRGF0YVN0YXR1cyB7XHJcbiAgICBjb25zdCBzdGF0dXMgPSB7XHJcbiAgICAgIHBlcnNwZWN0aXZlOiBudWxsLFxyXG4gICAgICBpc0hvcml6b250YWw6IHRydWUsXHJcbiAgICAgIGlzUGVyc3BlY3RpdmU6IGZhbHNlLFxyXG4gICAgICBpc0JvcmRlclJhZGl1czogZmFsc2UsXHJcbiAgICAgIGlzUm90YXRlQW5pbWF0aW9uOiBmYWxzZSxcclxuICAgICAgaXNGbGlwQW5pbWF0aW9uOiBmYWxzZSxcclxuICAgICAgaXNTbGlkZURvd25BbmltYXRpb246IGZhbHNlLFxyXG4gICAgICBpc01vdmVVcEFuaW1hdGlvbjogZmFsc2UsXHJcbiAgICAgIGlzQ29udGVudEJhY2tncm91bmQ6IGZhbHNlXHJcbiAgICB9O1xyXG4gICAgc3RhdHVzLmlzSG9yaXpvbnRhbCA9ICh0aGlzLnByb2dyZXNzLmRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnKTtcclxuICAgIHN0YXR1cy5pc1JvdGF0ZUFuaW1hdGlvbiA9ICh0aGlzLnByb2dyZXNzLmFuaW1hdGlvbi5pbmNsdWRlcygncm90YXRlLScpKTtcclxuICAgIHN0YXR1cy5pc0ZsaXBBbmltYXRpb24gPSAodGhpcy5wcm9ncmVzcy5hbmltYXRpb24uaW5jbHVkZXMoJ2ZsaXAtJykpO1xyXG4gICAgc3RhdHVzLmlzU2xpZGVEb3duQW5pbWF0aW9uID0gKHRoaXMucHJvZ3Jlc3MuYW5pbWF0aW9uLmluY2x1ZGVzKCdzbGlkZS1kb3duJykpO1xyXG4gICAgc3RhdHVzLmlzTW92ZVVwQW5pbWF0aW9uID0gKHRoaXMucHJvZ3Jlc3MuYW5pbWF0aW9uLmluY2x1ZGVzKCdtb3ZlLXVwJykpO1xyXG4gICAgc3RhdHVzLnBlcnNwZWN0aXZlID0gKHN0YXR1cy5pc1JvdGF0ZUFuaW1hdGlvbiB8fCBzdGF0dXMuaXNGbGlwQW5pbWF0aW9uKSA/ICcnIDogbnVsbDsgLy8gSGF2ZSBwcm9ncmVzcyBhbmltYXRpb24gM0QgcGVyc3BlY3RpdmVcclxuICAgIHN0YXR1cy5pc1BlcnNwZWN0aXZlID0gKHN0YXR1cy5wZXJzcGVjdGl2ZSAhPT0gbnVsbCk7XHJcbiAgICBzdGF0dXMuaXNCb3JkZXJSYWRpdXMgPSAoIXN0YXR1cy5pc1JvdGF0ZUFuaW1hdGlvbiAmJiB0aGlzLmRlc2lnbi5yYWRpdXMgIT09IG51bGwpO1xyXG4gICAgc3RhdHVzLmlzQ29udGVudEJhY2tncm91bmQgPSAoc3RhdHVzLmlzUGVyc3BlY3RpdmUgfHwgc3RhdHVzLmlzU2xpZGVEb3duQW5pbWF0aW9uIHx8IHN0YXR1cy5pc01vdmVVcEFuaW1hdGlvbik7XHJcbiAgICByZXR1cm4gc3RhdHVzO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRlc2lnbigpOiBQcm9ncmVzc0J1dHRvbkRlc2lnbiB7XHJcbiAgICByZXR1cm4gdGhpcy5kZXNpZ25QO1xyXG4gIH1cclxuXHJcbiAgc2V0IGRlc2lnbih2YWx1ZTogUHJvZ3Jlc3NCdXR0b25EZXNpZ24pIHtcclxuICAgIHRoaXMuZGVzaWduUCA9IG1lcmdlT3B0aW9ucyh2YWx1ZSwgdGhpcy5kZXNpZ25QKTtcclxuICB9XHJcblxyXG4gIGdldCBwcm9ncmVzcygpOiBQcm9ncmVzc0J1dHRvbkRhdGEge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvZ3Jlc3NQO1xyXG4gIH1cclxuXHJcbiAgc2V0IHByb2dyZXNzKHZhbHVlOiBQcm9ncmVzc0J1dHRvbkRhdGEpIHtcclxuICAgIHRoaXMucHJvZ3Jlc3NQID0gbWVyZ2VPcHRpb25zKHZhbHVlLCB0aGlzLnByb2dyZXNzUCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVjayBpZiBhbmltYXRpb24gaXMgYWN0aXZlXHJcbiAgICogQHBhcmFtIG5hbWUgUHJvZ3Jlc3NCdXR0b25BbmltYXRpb24gQW5pbWF0aW9uIG5hbWVcclxuICAgKi9cclxuICBpc0FuaW1hdGlvbiA9IChuYW1lOiBQcm9ncmVzc0J1dHRvbkFuaW1hdGlvbik6IGJvb2xlYW4gPT4ge1xyXG4gICAgcmV0dXJuICh0aGlzLnByb2dyZXNzLmFuaW1hdGlvbiA9PT0gbmFtZSk7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHNvbWUgcHJvZ3Jlc3Mgc3R5bGVzXHJcbiAgICogQHBhcmFtIHByb2dyZXNzVmFsdWUgVGhlIHByb2dyZXNzIHZhbHVlXHJcbiAgICogQHBhcmFtIHN0YXR1c0NsYXNzIFRoZSBzdGF0dXMgKHN0YXRlLXN1Y2Nlc3MgfCBzdGF0ZS1lcnJvcilcclxuICAgKi9cclxuICBzdHlsZXMgPSAocHJvZ3Jlc3NWYWx1ZTogbnVtYmVyLCBzdGF0dXNDbGFzczogc3RyaW5nKTogUHJvZ3Jlc3NCdXR0b25TdHlsZXMgPT4ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcHJvZ3Jlc3NJbm5lcjogdGhpcy5wcm9ncmVzc0lubmVyU3R5bGUocHJvZ3Jlc3NWYWx1ZSksXHJcbiAgICAgIGJ1dHRvbjogdGhpcy5idXR0b25TdHlsZShzdGF0dXNDbGFzcyksXHJcbiAgICAgIGNvbnRlbnQ6IHRoaXMuY29udGVudFN0eWxlKHN0YXR1c0NsYXNzKVxyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIFByb2dyZXNzIElubmVyIFN0eWxlXHJcbiAgICogQHBhcmFtIHByb2dyZXNzVmFsdWUgVGhlIHByb2dyZXNzIHZhbHVlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwcm9ncmVzc0lubmVyU3R5bGUgPSAocHJvZ3Jlc3NWYWx1ZTogbnVtYmVyKSA9PiB7XHJcblxyXG4gICAgY29uc3Qgc3R5bGUgPSB7XHJcbiAgICAgIGJhY2tncm91bmQ6IHRoaXMuZGVzaWduLnByb2dyZXNzSW5uZXJCYWNrZ3JvdW5kLFxyXG4gICAgICBib3JkZXJDb2xvcjogbnVsbCxcclxuICAgICAgYm9yZGVyTGVmdFdpZHRoOiBudWxsLFxyXG4gICAgICBib3JkZXJSaWdodFdpZHRoOiBudWxsLFxyXG4gICAgICBoZWlnaHQ6IG51bGwsXHJcbiAgICAgIHdpZHRoOiBudWxsLFxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBSZXNldCBMaW5lc1NpemVcclxuICAgIGlmICgodGhpcy5kZXNpZ24ubGluZXNTaXplID09PSBudWxsKSB8fCAodHlwZW9mIHRoaXMuZGVzaWduLmxpbmVzU2l6ZSA9PT0gJ3VuZGVmaW5lZCcpKSB7XHJcbiAgICAgIHRoaXMuZGVzaWduLmxpbmVzU2l6ZSA9IDEwO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIExhdGVyYWwgTGluZXNcclxuICAgIGlmICh0aGlzLmlzQW5pbWF0aW9uKCdsYXRlcmFsLWxpbmVzJykpIHtcclxuICAgICAgc3R5bGUuYmFja2dyb3VuZCA9IG51bGw7XHJcbiAgICAgIHN0eWxlLmJvcmRlckNvbG9yID0gdGhpcy5kZXNpZ24ucHJvZ3Jlc3NJbm5lckJhY2tncm91bmQ7XHJcbiAgICAgIHN0eWxlLmJvcmRlckxlZnRXaWR0aCA9IHRoaXMuZGVzaWduLmxpbmVzU2l6ZSArICdweCc7XHJcbiAgICAgIHN0eWxlLmJvcmRlclJpZ2h0V2lkdGggPSB0aGlzLmRlc2lnbi5saW5lc1NpemUgKyAncHgnO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFNldCBTaXplXHJcbiAgICBzdHlsZS5oZWlnaHQgPSB0aGlzLnByb2dyZXNzSW5uZXJIZWlnaHQocHJvZ3Jlc3NWYWx1ZSk7XHJcbiAgICBzdHlsZS53aWR0aCA9IHRoaXMucHJvZ3Jlc3NJbm5lcldpZHRoKHByb2dyZXNzVmFsdWUpO1xyXG5cclxuICAgIHJldHVybiBzdHlsZTtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBHZXQgQ2FsY3VsYXRlZCBQcm9ncmVzcyBJbm5lciBXaWR0aFxyXG4gICAqL1xyXG4gIHByaXZhdGUgcHJvZ3Jlc3NJbm5lcldpZHRoID0gKHByb2dyZXNzVmFsdWU6IG51bWJlcikgPT4ge1xyXG4gICAgaWYgKHRoaXMucHJvZ3Jlc3MuZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcpIHtcclxuICAgICAgcmV0dXJuIHByb2dyZXNzVmFsdWUgKyAnJSc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5pc0FuaW1hdGlvbignc2hyaW5rJykgJiYgdGhpcy5kZXNpZ24ucmFkaXVzKSB7XHJcbiAgICAgICAgcmV0dXJuIHByb2dyZXNzVmFsdWUgKyAnJSc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLmlzQW5pbWF0aW9uKCd0b3AtbGluZScpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmRlc2lnbi5saW5lc1NpemUgKyAncHgnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IENhbGN1bGF0ZWQgUHJvZ3Jlc3MgSW5uZXIgSGVpZ2h0XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwcm9ncmVzc0lubmVySGVpZ2h0ID0gKHByb2dyZXNzVmFsdWU6IG51bWJlcikgPT4ge1xyXG4gICAgaWYgKHRoaXMucHJvZ3Jlc3MuZGlyZWN0aW9uID09PSAndmVydGljYWwnKSB7XHJcbiAgICAgIGlmICh0aGlzLmlzQW5pbWF0aW9uKCdzaHJpbmsnKSAmJiB0aGlzLmRlc2lnbi5yYWRpdXMpIHtcclxuICAgICAgICByZXR1cm4gJzEwMCUnO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBwcm9ncmVzc1ZhbHVlICsgJyUnO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuaXNBbmltYXRpb24oJ3RvcC1saW5lJykpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZGVzaWduLmxpbmVzU2l6ZSArICdweCc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIGJhY2tncm91bmQgY29sb3Igb2YgdGhlIGJ1dHRvbiBhY2NvcmRpbmcgdG8gdGhlIHN0YXR1c1xyXG4gICAqL1xyXG4gIHByaXZhdGUgbWFpbkJhY2tncm91bmRDb2xvciA9IChzdGF0dXNDbGFzczogc3RyaW5nKSA9PiB7XHJcbiAgICBsZXQgYmcgPSB0aGlzLmRlc2lnbi5iYWNrZ3JvdW5kO1xyXG4gICAgc3dpdGNoIChzdGF0dXNDbGFzcykge1xyXG4gICAgICBjYXNlICdzdGF0ZS1zdWNjZXNzJzpcclxuICAgICAgICBiZyA9IHRoaXMuZGVzaWduLnN1Y2Nlc3NCYWNrZ3JvdW5kO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdzdGF0ZS1lcnJvcic6XHJcbiAgICAgICAgYmcgPSB0aGlzLmRlc2lnbi5lcnJvckJhY2tncm91bmQ7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYmc7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGNzcyBzdHlsZSBvZiB0aGUgYnV0dG9uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBidXR0b25TdHlsZSA9IChzdGF0dXNDbGFzczogc3RyaW5nKSA9PiB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBiYWNrZ3JvdW5kOiAoIXRoaXMuc3RhdHVzLmlzUGVyc3BlY3RpdmUpID8gdGhpcy5tYWluQmFja2dyb3VuZENvbG9yKHN0YXR1c0NsYXNzKSA6IG51bGwsXHJcbiAgICAgIGNvbG9yOiB0aGlzLmRlc2lnbi5jb2xvcixcclxuICAgICAgYm9yZGVyUmFkaXVzOiAodGhpcy5zdGF0dXMuaXNCb3JkZXJSYWRpdXMpID8gdGhpcy5kZXNpZ24ucmFkaXVzICsgJ3B4JyA6IG51bGwsXHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgY29udGVudCBzdHlsZSBhY2NvcmRpbmcgdG8gdGhlIHN0YXR1c1xyXG4gICAqL1xyXG4gIHByaXZhdGUgY29udGVudFN0eWxlID0gKHN0YXR1c0NsYXNzOiBzdHJpbmcpID0+IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGJhY2tncm91bmQ6ICh0aGlzLnN0YXR1cy5pc0NvbnRlbnRCYWNrZ3JvdW5kKSA/IHRoaXMubWFpbkJhY2tncm91bmRDb2xvcihzdGF0dXNDbGFzcykgOiBudWxsLFxyXG4gICAgICBjb2xvcjogdGhpcy5kZXNpZ24uY29sb3IsXHJcbiAgICAgIGJvcmRlclJhZGl1czogKHRoaXMuc3RhdHVzLmlzQm9yZGVyUmFkaXVzKSA/IHRoaXMuZGVzaWduLnJhZGl1cyArICdweCcgOiBudWxsLFxyXG4gICAgfTtcclxuICB9O1xyXG5cclxufVxyXG4iXX0=