progress-button
Version:
A simple angular progress button.
175 lines • 22.7 kB
JavaScript
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=