You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

19 lines
2.5 KiB

2 years ago
  1. /*
  2. Highcharts funnel module, Beta
  3. (c) 2010-2012 Torstein Hønsi
  4. License: www.highcharts.com/license
  5. */
  6. (function (d) {
  7. var u = d.getOptions().plotOptions, p = d.seriesTypes, D = d.merge, z = function () { }, A = d.each; u.funnel = D(u.pie, { center: ["50%", "50%"], width: "90%", neckWidth: "30%", height: "100%", neckHeight: "25%", dataLabels: { connectorWidth: 1, connectorColor: "#606060" }, size: !0, states: { select: { color: "#C0C0C0", borderColor: "#000000", shadow: !1 } } }); p.funnel = d.extendClass(p.pie, {
  8. type: "funnel", animate: z, translate: function () {
  9. var a = function (k, a) { return /%$/.test(k) ? a * parseInt(k, 10) / 100 : parseInt(k, 10) }, g = 0, e = this.chart, f = e.plotWidth,
  10. e = e.plotHeight, h = 0, c = this.options, C = c.center, b = a(C[0], f), d = a(C[0], e), p = a(c.width, f), i, q, j = a(c.height, e), r = a(c.neckWidth, f), s = a(c.neckHeight, e), v = j - s, a = this.data, w, x, u = c.dataLabels.position === "left" ? 1 : 0, y, m, B, n, l, t, o; this.getWidthAt = q = function (k) { return k > j - s || j === s ? r : r + (p - r) * ((j - s - k) / (j - s)) }; this.getX = function (k, a) { return b + (a ? -1 : 1) * (q(k) / 2 + c.dataLabels.distance) }; this.center = [b, d, j]; this.centerX = b; A(a, function (a) { g += a.y }); A(a, function (a) {
  11. o = null; x = g ? a.y / g : 0; m = d - j / 2 + h * j; l = m + x * j; i = q(m); y = b - i / 2; B = y +
  12. i; i = q(l); n = b - i / 2; t = n + i; m > v ? (y = n = b - r / 2, B = t = b + r / 2) : l > v && (o = l, i = q(v), n = b - i / 2, t = n + i, l = v); w = ["M", y, m, "L", B, m, t, l]; o && w.push(t, o, n, o); w.push(n, l, "Z"); a.shapeType = "path"; a.shapeArgs = { d: w }; a.percentage = x * 100; a.plotX = b; a.plotY = (m + (o || l)) / 2; a.tooltipPos = [b, a.plotY]; a.slice = z; a.half = u; h += x
  13. }); this.setTooltipPoints()
  14. }, drawPoints: function () { var a = this, g = a.options, e = a.chart.renderer; A(a.data, function (f) { var h = f.graphic, c = f.shapeArgs; h ? h.animate(c) : f.graphic = e.path(c).attr({ fill: f.color, stroke: g.borderColor, "stroke-width": g.borderWidth }).add(a.group) }) },
  15. sortByAngle: z, drawDataLabels: function () { var a = this.data, g = this.options.dataLabels.distance, e, f, h, c = a.length, d, b; for (this.center[2] -= 2 * g; c--;)h = a[c], f = (e = h.half) ? 1 : -1, b = h.plotY, d = this.getX(b, e), h.labelPos = [0, b, d + (g - 5) * f, b, d + g * f, b, e ? "right" : "left", 0]; p.pie.prototype.drawDataLabels.call(this) }
  16. })
  17. })(Highcharts);