; /* * AshAlom Gauge Meter. Version 2.0.0 * Copyright AshAlom.com All rights reserved. * https://github.com/AshAlom/GaugeMeter <- Deleted! * https://github.com/githubsrinath/GaugeMeter <- Backup original. * * Original created by Dr Ash Alom * * This is a bug fixed and modified version of the AshAlom Gauge Meter. * Copyright 2018 Michael Wolf (Mictronics) * https://github.com/mictronics/GaugeMeter * */ !function ($) { $.fn.gaugeMeter = function (t) { var defaults = $.extend({ id: "", percent: 0, used: null, min: null, total: null, size: 100, prepend: "", append: "", theme: "Red-Gold-Green", color: "", back: "RGBa(0,0,0,.06)", width: 3, style: "Full", stripe: "0", animationstep: 1, animate_gauge_colors: false, animate_text_colors: false, label: "", label_color: "Black", text: "", text_size: 0.22, fill: "", showvalue: false }, t); return this.each(function () { function getThemeColor(e) { var t = "#2C94E0"; return e || (e = 1e-14), "Red-Gold-Green" === option.theme && (e > 0 && (t = "#d90000"), e > 10 && (t = "#e32100"), e > 20 && (t = "#f35100"), e > 30 && (t = "#ff8700"), e > 40 && (t = "#ffb800"), e > 50 && (t = "#ffd900"), e > 60 && (t = "#dcd800"), e > 70 && (t = "#a6d900"), e > 80 && (t = "#69d900"), e > 90 && (t = "#32d900")), "Green-Gold-Red" === option.theme && (e > 0 && (t = "#32d900"), e > 10 && (t = "#69d900"), e > 20 && (t = "#a6d900"), e > 30 && (t = "#dcd800"), e > 40 && (t = "#ffd900"), e > 50 && (t = "#ffb800"), e > 60 && (t = "#ff8700"), e > 70 && (t = "#f35100"), e > 80 && (t = "#e32100"), e > 90 && (t = "#d90000")), "Green-Red" === option.theme && (e > 0 && (t = "#32d900"), e > 10 && (t = "#41c900"), e > 20 && (t = "#56b300"), e > 30 && (t = "#6f9900"), e > 40 && (t = "#8a7b00"), e > 50 && (t = "#a75e00"), e > 60 && (t = "#c24000"), e > 70 && (t = "#db2600"), e > 80 && (t = "#f01000"), e > 90 && (t = "#ff0000")), "Red-Green" === option.theme && (e > 0 && (t = "#ff0000"), e > 10 && (t = "#f01000"), e > 20 && (t = "#db2600"), e > 30 && (t = "#c24000"), e > 40 && (t = "#a75e00"), e > 50 && (t = "#8a7b00"), e > 60 && (t = "#6f9900"), e > 70 && (t = "#56b300"), e > 80 && (t = "#41c900"), e > 90 && (t = "#32d900")), "DarkBlue-LightBlue" === option.theme && (e > 0 && (t = "#2c94e0"), e > 10 && (t = "#2b96e1"), e > 20 && (t = "#2b99e4"), e > 30 && (t = "#2a9ce7"), e > 40 && (t = "#28a0e9"), e > 50 && (t = "#26a4ed"), e > 60 && (t = "#25a8f0"), e > 70 && (t = "#24acf3"), e > 80 && (t = "#23aff5"), e > 90 && (t = "#21b2f7")), "LightBlue-DarkBlue" === option.theme && (e > 0 && (t = "#21b2f7"), e > 10 && (t = "#23aff5"), e > 20 && (t = "#24acf3"), e > 30 && (t = "#25a8f0"), e > 40 && (t = "#26a4ed"), e > 50 && (t = "#28a0e9"), e > 60 && (t = "#2a9ce7"), e > 70 && (t = "#2b99e4"), e > 80 && (t = "#2b96e1"), e > 90 && (t = "#2c94e0")), "DarkRed-LightRed" === option.theme && (e > 0 && (t = "#d90000"), e > 10 && (t = "#dc0000"), e > 20 && (t = "#e00000"), e > 30 && (t = "#e40000"), e > 40 && (t = "#ea0000"), e > 50 && (t = "#ee0000"), e > 60 && (t = "#f30000"), e > 70 && (t = "#f90000"), e > 80 && (t = "#fc0000"), e > 90 && (t = "#ff0000")), "LightRed-DarkRed" === option.theme && (e > 0 && (t = "#ff0000"), e > 10 && (t = "#fc0000"), e > 20 && (t = "#f90000"), e > 30 && (t = "#f30000"), e > 40 && (t = "#ee0000"), e > 50 && (t = "#ea0000"), e > 60 && (t = "#e40000"), e > 70 && (t = "#e00000"), e > 80 && (t = "#dc0000"), e > 90 && (t = "#d90000")), "DarkGreen-LightGreen" === option.theme && (e > 0 && (t = "#32d900"), e > 10 && (t = "#33db00"), e > 20 && (t = "#34df00"), e > 30 && (t = "#34e200"), e > 40 && (t = "#36e700"), e > 50 && (t = "#37ec00"), e > 60 && (t = "#38f100"), e > 70 && (t = "#38f600"), e > 80 && (t = "#39f900"), e > 90 && (t = "#3afc00")), "LightGreen-DarkGreen" === option.theme && (e > 0 && (t = "#3afc00"), e > 10 && (t = "#39f900"), e > 20 && (t = "#38f600"), e > 30 && (t = "#38f100"), e > 40 && (t = "#37ec00"), e > 50 && (t = "#36e700"), e > 60 && (t = "#34e200"), e > 70 && (t = "#34df00"), e > 80 && (t = "#33db00"), e > 90 && (t = "#32d900")), "DarkGold-LightGold" === option.theme && (e > 0 && (t = "#ffb800"), e > 10 && (t = "#ffba00"), e > 20 && (t = "#ffbd00"), e > 30 && (t = "#ffc200"), e > 40 && (t = "#ffc600"), e > 50 && (t = "#ffcb00"), e > 60 && (t = "#ffcf00"), e > 70 && (t = "#ffd400"), e > 80 && (t = "#ffd600"), e > 90 && (t = "#ffd900")), "LightGold-DarkGold" === option.theme && (e > 0 && (t = "#ffd900"), e > 10 && (t = "#ffd600"), e > 20 && (t = "#ffd400"), e > 30 && (t = "#ffcf00"), e > 40 && (t = "#ffcb00"), e > 50 && (t = "#ffc600"), e > 60 && (t = "#ffc200"), e > 70 && (t = "#ffbd00"), e > 80 && (t = "#ffba00"), e > 90 && (t = "#ffb800")), "White" === option.theme && (t = "#fff"), "Black" === option.theme && (t = "#000"), t; } /* The label below gauge. */ function createLabel(t, a) { if(t.children("b").length === 0){ $("").appendTo(t).html(option.label).css({ "line-height": option.size + 5 * a + "px", color: option.label_color }); } } /* Prepend and append text, the gauge text or percentage value. */ function createSpanTag(t) { var fgcolor = ""; if (option.animate_text_colors === true){ fgcolor = option.fgcolor; } var child = t.children("span"); if(child.length !== 0){ child.html(r).css({color: fgcolor}); return; } if(option.text_size <= 0.0 || Number.isNaN(option.text_size)){ option.text_size = 0.22; } if(option.text_size > 0.5){ option.text_size = 0.5; } $("").appendTo(t).html(r).css({ "line-height": option.size + "px", "font-size": option.text_size * option.size + "px", color: fgcolor }); } /* Get data attributes as options from div tag. Fall back to defaults when not exists. */ function getDataAttr(t) { $.each(dataAttr, function (index, element) { if(t.data(element) !== undefined && t.data(element) !== null){ option[element] = t.data(element); } else { option[element] = $(defaults).attr(element); } if(element === "fill"){ s = option[element]; } if((element === "size" || element === "width" || element === "animationstep" || element === "stripe" ) && !Number.isInteger(option[element])){ option[element] = parseInt(option[element]); } if(element === "text_size"){ option[element] = parseFloat(option[element]); } }); } /* Draws the gauge. */ function drawGauge(a) { if(M < 0) M = 0; if(M > 100) M = 100; var lw = option.width < 1 || isNaN(option.width) ? option.size / 20 : option.width; g.clearRect(0, 0, b.width, b.height); g.beginPath(); g.arc(m, v, x, G, k, !1); if(s){ g.fillStyle = option.fill; g.fill(); } g.lineWidth = lw; g.strokeStyle = option.back; option.stripe > parseInt(0) ? g.setLineDash([option.stripe], 1) : g.lineCap = "round"; g.stroke(); g.beginPath(); g.arc(m, v, x, -I, P * a - I, !1); g.lineWidth = lw; g.strokeStyle = option.fgcolor; g.stroke(); c > M && (M += z, requestAnimationFrame(function(){ drawGauge(Math.min(M, c) / 100); }, p)); } $(this).attr("data-id", $(this).attr("id")); var r, dataAttr = ["percent", "used", "min", "total", "size", "prepend", "append", "theme", "color", "back", "width", "style", "stripe", "animationstep", "animate_gauge_colors", "animate_text_colors", "label", "label_color", "text", "text_size", "fill", "showvalue"], option = {}, c = 0, p = $(this), s = false; p.addClass("gaugeMeter"); getDataAttr(p); if(Number.isInteger(option.used) && Number.isInteger(option.total)){ var u = option.used; var t = option.total; if(Number.isInteger(option.min)) { if(option.min < 0) { t -= option.min; u -= option.min; } } c = u / (t / 100); } else { if(Number.isInteger(option.percent)){ c = option.percent; } else { c = parseInt(defaults.percent); } } if(c < 0) c = 0; if(c > 100) c = 100; if( option.text !== "" && option.text !== null && option.text !== undefined){ if(option.append !== "" && option.append !== null && option.append !== undefined){ r = option.text + "" + option.append + ""; } else { r = option.text; } if(option.prepend !== "" && option.prepend !== null && option.prepend !== undefined){ r = "" + option.prepend + "" + r; } } else { if(defaults.showvalue === true || option.showvalue === true){ r = option.used; } else { r = c.toString(); } if(option.prepend !== "" && option.prepend !== null && option.prepend !== undefined){ r = "" + option.prepend + "" + r; } if(option.append !== "" && option.append !== null && option.append !== undefined){ r = r + "" + option.append + ""; } } option.fgcolor = getThemeColor(c); if(option.color !== "" && option.color !== null && option.color !== undefined){ option.fgcolor = option.color; } if(option.animate_gauge_colors === true){ option.fgcolor = getThemeColor(c); } createSpanTag(p); if(option.style !== "" && option.style !== null && option.style !== undefined){ createLabel(p, option.size / 13); } $(this).width(option.size + "px"); var b = $("").attr({width: option.size, height: option.size}).get(0), g = b.getContext("2d"), m = b.width / 2, v = b.height / 2, _ = 360 * option.percent, x = (_ * (Math.PI / 180), b.width / 2.5), k = 2.3 * Math.PI, G = 0, M = 0 === option.animationstep ? c : 0, z = Math.max(option.animationstep, 0), P = 2 * Math.PI, I = Math.PI / 2, R = option.style; var child = $(this).children("canvas"); if(child.length !== 0){ /* Replace existing canvas when new percentage was written. */ child.replaceWith(b); } else { /* Initially create canvas. */ $(b).appendTo($(this)); } if ("Semi" === R){ k = 2 * Math.PI; G = 3.13; P = 1 * Math.PI; I = Math.PI / .996; } if ("Arch" === R){ k = 2.195 * Math.PI; G = 1, G = 655.99999; P = 1.4 * Math.PI; I = Math.PI / .8335; } drawGauge(M / 100); }); }; } (jQuery);