(function(t) { t.fn.circliful = function(i) { var e = t.extend({ startdegree: 0, fgcolor: "#556b2f", bgcolor: "#eee", fill: !1, width: 15, dimension: 200, fontsize: 15, percent: 50, animationstep: 1, iconsize: "20px", iconcolor: "#999", border: "default", complete: null, bordersize: 10 }, i); return this.each(function() { function a(i, e, a) { t("").appendTo(i).addClass(e).text(s).prepend(l).css({ "line-height": a + "px", "font-size": h.fontsize + "px" }) } function n(i, e) { t("").appendTo(i).addClass("circle-info-half").css("line-height", h.dimension * e + "px").text(r) } function o(i) { t.each(c, function(a, n) { h[n] = void 0 != i.data(n) ? i.data(n) : t(e).attr(n), "fill" == n && void 0 != i.data("fill") && (m = !0) }) } function d(e) { u.clearRect(0, 0, g.width, g.height), u.beginPath(), u.arc(x, b, w, z, y, !1), u.lineWidth = h.width + 1, u.strokeStyle = h.bgcolor, u.stroke(), m && (u.fillStyle = h.fill, u.fill()), u.beginPath(), u.arc(x, b, w, -k + T, C * e - k + T, !1), "outline" == h.border ? u.lineWidth = h.width + 13 : "inline" == h.border && (u.lineWidth = h.width - 13), u.strokeStyle = h.fgcolor, u.stroke(), p > M && (M += I, requestAnimationFrame(function() { d(Math.min(M, p) / 100) }, f)), M == p && S && i !== void 0 && t.isFunction(i.complete) && (i.complete(), S = !1) } var s, r, c = ["fgcolor", "bgcolor", "fill", "width", "dimension", "fontsize", "animationstep", "endPercent", "icon", "iconcolor", "iconsize", "border", "startdegree", "bordersize"], h = {}, l = "", p = 0, f = t(this), m = !1; if (f.addClass("circliful"), o(f), void 0 != f.data("text") && (s = f.data("text"), void 0 != f.data("icon") && (l = t("").addClass("fa " + t(this).data("icon")).css({ color: h.iconcolor, "font-size": h.iconsize })), void 0 != f.data("type") ? (F = t(this).data("type"), "half" == F ? a(f, "circle-text-half", h.dimension / 1.45) : a(f, "circle-text", h.dimension)) : a(f, "circle-text", h.dimension)), void 0 != t(this).data("total") && void 0 != t(this).data("part")) { var v = t(this).data("total") / 100; percent = (t(this).data("part") / v / 100).toFixed(3), p = (t(this).data("part") / v).toFixed(3) } else void 0 != t(this).data("percent") ? (percent = t(this).data("percent") / 100, p = t(this).data("percent")) : percent = e.percent / 100; void 0 != t(this).data("info") && (r = t(this).data("info"), void 0 != t(this).data("type") ? (F = t(this).data("type"), "half" == F ? n(f, .9) : n(f, 1.25)) : n(f, 1.25)), t(this).width(h.dimension + "px"); var g = t("").attr({ width: h.dimension, height: h.dimension }).appendTo(t(this)).get(0), u = g.getContext("2d"); t(g).parent(); var x = g.width / 2, b = g.height / 2, P = 360 * h.percent; P * (Math.PI / 180); var w = g.width / 2.5, y = 2.3 * Math.PI, z = 0, M = 0 === h.animationstep ? p : 0, I = Math.max(h.animationstep, 0), C = 2 * Math.PI, k = Math.PI / 2, F = "", S = !0, T = h.startdegree / 180 * Math.PI; void 0 != t(this).data("type") && (F = t(this).data("type"), "half" == F && (y = 2 * Math.PI, z = 3.13, C = Math.PI, k = Math.PI / .996)), d(M / 100) }) } })(jQuery);