g.raphael-0.5/0000755000175600017570000000000011654171544012270 5ustar pravipravig.raphael-0.5/g.pie.js0000644000175600017570000002177011654171544013637 0ustar pravipravi/* * g.Raphael 0.5 - Charting library, based on Raphaël * * Copyright (c) 2009 Dmitry Baranovskiy (http://g.raphaeljs.com) * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license. */ (function () { function Piechart(paper, cx, cy, r, values, opts) { opts = opts || {}; var chartinst = this, sectors = [], covers = paper.set(), chart = paper.set(), series = paper.set(), order = [], len = values.length, angle = 0, total = 0, others = 0, cut = 9, defcut = true; function sector(cx, cy, r, startAngle, endAngle, fill) { var rad = Math.PI / 180, x1 = cx + r * Math.cos(-startAngle * rad), x2 = cx + r * Math.cos(-endAngle * rad), xm = cx + r / 2 * Math.cos(-(startAngle + (endAngle - startAngle) / 2) * rad), y1 = cy + r * Math.sin(-startAngle * rad), y2 = cy + r * Math.sin(-endAngle * rad), ym = cy + r / 2 * Math.sin(-(startAngle + (endAngle - startAngle) / 2) * rad), res = [ "M", cx, cy, "L", x1, y1, "A", r, r, 0, +(Math.abs(endAngle - startAngle) > 180), 1, x2, y2, "z" ]; res.middle = { x: xm, y: ym }; return res; } chart.covers = covers; if (len == 1) { series.push(paper.circle(cx, cy, r).attr({ fill: chartinst.colors[0], stroke: opts.stroke || "#fff", "stroke-width": opts.strokewidth == null ? 1 : opts.strokewidth })); covers.push(paper.circle(cx, cy, r).attr(chartinst.shim)); total = values[0]; values[0] = { value: values[0], order: 0, valueOf: function () { return this.value; } }; series[0].middle = {x: cx, y: cy}; series[0].mangle = 180; } else { for (var i = 0; i < len; i++) { total += values[i]; values[i] = { value: values[i], order: i, valueOf: function () { return this.value; } }; } values.sort(function (a, b) { return b.value - a.value; }); for (i = 0; i < len; i++) { if (defcut && values[i] * 360 / total <= 1.5) { cut = i; defcut = false; } if (i > cut) { defcut = false; values[cut].value += values[i]; values[cut].others = true; others = values[cut].value; } } len = Math.min(cut + 1, values.length); others && values.splice(len) && (values[cut].others = true); for (i = 0; i < len; i++) { var mangle = angle - 360 * values[i] / total / 2; if (!i) { angle = 90 - mangle; mangle = angle - 360 * values[i] / total / 2; } if (opts.init) { var ipath = sector(cx, cy, 1, angle, angle - 360 * values[i] / total).join(","); } var path = sector(cx, cy, r, angle, angle -= 360 * values[i] / total); var p = paper.path(opts.init ? ipath : path).attr({ fill: opts.colors && opts.colors[i] || chartinst.colors[i] || "#666", stroke: opts.stroke || "#fff", "stroke-width": (opts.strokewidth == null ? 1 : opts.strokewidth), "stroke-linejoin": "round" }); p.value = values[i]; p.middle = path.middle; p.mangle = mangle; sectors.push(p); series.push(p); opts.init && p.animate({ path: path.join(",") }, (+opts.init - 1) || 1000, ">"); } for (i = 0; i < len; i++) { p = paper.path(sectors[i].attr("path")).attr(chartinst.shim); opts.href && opts.href[i] && p.attr({ href: opts.href[i] }); p.attr = function () {}; covers.push(p); series.push(p); } } chart.hover = function (fin, fout) { fout = fout || function () {}; var that = this; for (var i = 0; i < len; i++) { (function (sector, cover, j) { var o = { sector: sector, cover: cover, cx: cx, cy: cy, mx: sector.middle.x, my: sector.middle.y, mangle: sector.mangle, r: r, value: values[j], total: total, label: that.labels && that.labels[j] }; cover.mouseover(function () { fin.call(o); }).mouseout(function () { fout.call(o); }); })(series[i], covers[i], i); } return this; }; // x: where label could be put // y: where label could be put // value: value to show // total: total number to count % chart.each = function (f) { var that = this; for (var i = 0; i < len; i++) { (function (sector, cover, j) { var o = { sector: sector, cover: cover, cx: cx, cy: cy, x: sector.middle.x, y: sector.middle.y, mangle: sector.mangle, r: r, value: values[j], total: total, label: that.labels && that.labels[j] }; f.call(o); })(series[i], covers[i], i); } return this; }; chart.click = function (f) { var that = this; for (var i = 0; i < len; i++) { (function (sector, cover, j) { var o = { sector: sector, cover: cover, cx: cx, cy: cy, mx: sector.middle.x, my: sector.middle.y, mangle: sector.mangle, r: r, value: values[j], total: total, label: that.labels && that.labels[j] }; cover.click(function () { f.call(o); }); })(series[i], covers[i], i); } return this; }; chart.inject = function (element) { element.insertBefore(covers[0]); }; var legend = function (labels, otherslabel, mark, dir) { var x = cx + r + r / 5, y = cy, h = y + 10; labels = labels || []; dir = (dir && dir.toLowerCase && dir.toLowerCase()) || "east"; mark = paper[mark && mark.toLowerCase()] || "circle"; chart.labels = paper.set(); for (var i = 0; i < len; i++) { var clr = series[i].attr("fill"), j = values[i].order, txt; values[i].others && (labels[j] = otherslabel || "Others"); labels[j] = chartinst.labelise(labels[j], values[i], total); chart.labels.push(paper.set()); chart.labels[i].push(paper[mark](x + 5, h, 5).attr({ fill: clr, stroke: "none" })); chart.labels[i].push(txt = paper.text(x + 20, h, labels[j] || values[j]).attr(chartinst.txtattr).attr({ fill: opts.legendcolor || "#000", "text-anchor": "start"})); covers[i].label = chart.labels[i]; h += txt.getBBox().height * 1.2; } var bb = chart.labels.getBBox(), tr = { east: [0, -bb.height / 2], west: [-bb.width - 2 * r - 20, -bb.height / 2], north: [-r - bb.width / 2, -r - bb.height - 10], south: [-r - bb.width / 2, r + 10] }[dir]; chart.labels.translate.apply(chart.labels, tr); chart.push(chart.labels); }; if (opts.legend) { legend(opts.legend, opts.legendothers, opts.legendmark, opts.legendpos); } chart.push(series, covers); chart.series = series; chart.covers = covers; return chart; }; //inheritance var F = function() {}; F.prototype = Raphael.g; Piechart.prototype = new F; //public Raphael.fn.piechart = function(cx, cy, r, values, opts) { return new Piechart(this, cx, cy, r, values, opts); } })(); g.raphael-0.5/g.line.js0000644000175600017570000002635611654171544014016 0ustar pravipravi/*! * g.Raphael 0.5 - Charting library, based on Raphaël * * Copyright (c) 2009 Dmitry Baranovskiy (http://g.raphaeljs.com) * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license. */ (function () { function shrink(values, dim) { var k = values.length / dim, j = 0, l = k, sum = 0, res = []; while (j < values.length) { l--; if (l < 0) { sum += values[j] * (1 + l); res.push(sum / k); sum = values[j++] * -l; l += k; } else { sum += values[j++]; } } return res; } function getAnchors(p1x, p1y, p2x, p2y, p3x, p3y) { var l1 = (p2x - p1x) / 2, l2 = (p3x - p2x) / 2, a = Math.atan((p2x - p1x) / Math.abs(p2y - p1y)), b = Math.atan((p3x - p2x) / Math.abs(p2y - p3y)); a = p1y < p2y ? Math.PI - a : a; b = p3y < p2y ? Math.PI - b : b; var alpha = Math.PI / 2 - ((a + b) % (Math.PI * 2)) / 2, dx1 = l1 * Math.sin(alpha + a), dy1 = l1 * Math.cos(alpha + a), dx2 = l2 * Math.sin(alpha + b), dy2 = l2 * Math.cos(alpha + b); return { x1: p2x - dx1, y1: p2y + dy1, x2: p2x + dx2, y2: p2y + dy2 }; } function Linechart(paper, x, y, width, height, valuesx, valuesy, opts) { var chartinst = this; opts = opts || {}; if (!paper.raphael.is(valuesx[0], "array")) { valuesx = [valuesx]; } if (!paper.raphael.is(valuesy[0], "array")) { valuesy = [valuesy]; } var gutter = opts.gutter || 10, len = Math.max(valuesx[0].length, valuesy[0].length), symbol = opts.symbol || "", colors = opts.colors || chartinst.colors, columns = null, dots = null, chart = paper.set(), path = []; for (var i = 0, ii = valuesy.length; i < ii; i++) { len = Math.max(len, valuesy[i].length); } var shades = paper.set(); for (i = 0, ii = valuesy.length; i < ii; i++) { if (opts.shade) { shades.push(paper.path().attr({ stroke: "none", fill: colors[i], opacity: opts.nostroke ? 1 : .3 })); } if (valuesy[i].length > width - 2 * gutter) { valuesy[i] = shrink(valuesy[i], width - 2 * gutter); len = width - 2 * gutter; } if (valuesx[i] && valuesx[i].length > width - 2 * gutter) { valuesx[i] = shrink(valuesx[i], width - 2 * gutter); } } var allx = Array.prototype.concat.apply([], valuesx), ally = Array.prototype.concat.apply([], valuesy), xdim = chartinst.snapEnds(Math.min.apply(Math, allx), Math.max.apply(Math, allx), valuesx[0].length - 1), minx = xdim.from, maxx = xdim.to, ydim = chartinst.snapEnds(Math.min.apply(Math, ally), Math.max.apply(Math, ally), valuesy[0].length - 1), miny = ydim.from, maxy = ydim.to, kx = (width - gutter * 2) / ((maxx - minx) || 1), ky = (height - gutter * 2) / ((maxy - miny) || 1); var axis = paper.set(); if (opts.axis) { var ax = (opts.axis + "").split(/[,\s]+/); +ax[0] && axis.push(chartinst.axis(x + gutter, y + gutter, width - 2 * gutter, minx, maxx, opts.axisxstep || Math.floor((width - 2 * gutter) / 20), 2, paper)); +ax[1] && axis.push(chartinst.axis(x + width - gutter, y + height - gutter, height - 2 * gutter, miny, maxy, opts.axisystep || Math.floor((height - 2 * gutter) / 20), 3, paper)); +ax[2] && axis.push(chartinst.axis(x + gutter, y + height - gutter, width - 2 * gutter, minx, maxx, opts.axisxstep || Math.floor((width - 2 * gutter) / 20), 0, paper)); +ax[3] && axis.push(chartinst.axis(x + gutter, y + height - gutter, height - 2 * gutter, miny, maxy, opts.axisystep || Math.floor((height - 2 * gutter) / 20), 1, paper)); } var lines = paper.set(), symbols = paper.set(), line; for (i = 0, ii = valuesy.length; i < ii; i++) { if (!opts.nostroke) { lines.push(line = paper.path().attr({ stroke: colors[i], "stroke-width": opts.width || 2, "stroke-linejoin": "round", "stroke-linecap": "round", "stroke-dasharray": opts.dash || "" })); } var sym = Raphael.is(symbol, "array") ? symbol[i] : symbol, symset = paper.set(); path = []; for (var j = 0, jj = valuesy[i].length; j < jj; j++) { var X = x + gutter + ((valuesx[i] || valuesx[0])[j] - minx) * kx, Y = y + height - gutter - (valuesy[i][j] - miny) * ky; (Raphael.is(sym, "array") ? sym[j] : sym) && symset.push(paper[Raphael.is(sym, "array") ? sym[j] : sym](X, Y, (opts.width || 2) * 3).attr({ fill: colors[i], stroke: "none" })); if (opts.smooth) { if (j && j != jj - 1) { var X0 = x + gutter + ((valuesx[i] || valuesx[0])[j - 1] - minx) * kx, Y0 = y + height - gutter - (valuesy[i][j - 1] - miny) * ky, X2 = x + gutter + ((valuesx[i] || valuesx[0])[j + 1] - minx) * kx, Y2 = y + height - gutter - (valuesy[i][j + 1] - miny) * ky, a = getAnchors(X0, Y0, X, Y, X2, Y2); path = path.concat([a.x1, a.y1, X, Y, a.x2, a.y2]); } if (!j) { path = ["M", X, Y, "C", X, Y]; } } else { path = path.concat([j ? "L" : "M", X, Y]); } } if (opts.smooth) { path = path.concat([X, Y, X, Y]); } symbols.push(symset); if (opts.shade) { shades[i].attr({ path: path.concat(["L", X, y + height - gutter, "L", x + gutter + ((valuesx[i] || valuesx[0])[0] - minx) * kx, y + height - gutter, "z"]).join(",") }); } !opts.nostroke && line.attr({ path: path.join(",") }); } function createColumns(f) { // unite Xs together var Xs = []; for (var i = 0, ii = valuesx.length; i < ii; i++) { Xs = Xs.concat(valuesx[i]); } Xs.sort(); // remove duplicates var Xs2 = [], xs = []; for (i = 0, ii = Xs.length; i < ii; i++) { Xs[i] != Xs[i - 1] && Xs2.push(Xs[i]) && xs.push(x + gutter + (Xs[i] - minx) * kx); } Xs = Xs2; ii = Xs.length; var cvrs = f || paper.set(); for (i = 0; i < ii; i++) { var X = xs[i] - (xs[i] - (xs[i - 1] || x)) / 2, w = ((xs[i + 1] || x + width) - xs[i]) / 2 + (xs[i] - (xs[i - 1] || x)) / 2, C; f ? (C = {}) : cvrs.push(C = paper.rect(X - 1, y, Math.max(w + 1, 1), height).attr({ stroke: "none", fill: "#000", opacity: 0 })); C.values = []; C.symbols = paper.set(); C.y = []; C.x = xs[i]; C.axis = Xs[i]; for (var j = 0, jj = valuesy.length; j < jj; j++) { Xs2 = valuesx[j] || valuesx[0]; for (var k = 0, kk = Xs2.length; k < kk; k++) { if (Xs2[k] == Xs[i]) { C.values.push(valuesy[j][k]); C.y.push(y + height - gutter - (valuesy[j][k] - miny) * ky); C.symbols.push(chart.symbols[j][k]); } } } f && f.call(C); } !f && (columns = cvrs); } function createDots(f) { var cvrs = f || paper.set(), C; for (var i = 0, ii = valuesy.length; i < ii; i++) { for (var j = 0, jj = valuesy[i].length; j < jj; j++) { var X = x + gutter + ((valuesx[i] || valuesx[0])[j] - minx) * kx, nearX = x + gutter + ((valuesx[i] || valuesx[0])[j ? j - 1 : 1] - minx) * kx, Y = y + height - gutter - (valuesy[i][j] - miny) * ky; f ? (C = {}) : cvrs.push(C = paper.circle(X, Y, Math.abs(nearX - X) / 2).attr({ stroke: "none", fill: "#000", opacity: 0 })); C.x = X; C.y = Y; C.value = valuesy[i][j]; C.line = chart.lines[i]; C.shade = chart.shades[i]; C.symbol = chart.symbols[i][j]; C.symbols = chart.symbols[i]; C.axis = (valuesx[i] || valuesx[0])[j]; f && f.call(C); } } !f && (dots = cvrs); } chart.push(lines, shades, symbols, axis, columns, dots); chart.lines = lines; chart.shades = shades; chart.symbols = symbols; chart.axis = axis; chart.hoverColumn = function (fin, fout) { !columns && createColumns(); columns.mouseover(fin).mouseout(fout); return this; }; chart.clickColumn = function (f) { !columns && createColumns(); columns.click(f); return this; }; chart.hrefColumn = function (cols) { var hrefs = paper.raphael.is(arguments[0], "array") ? arguments[0] : arguments; if (!(arguments.length - 1) && typeof cols == "object") { for (var x in cols) { for (var i = 0, ii = columns.length; i < ii; i++) if (columns[i].axis == x) { columns[i].attr("href", cols[x]); } } } !columns && createColumns(); for (i = 0, ii = hrefs.length; i < ii; i++) { columns[i] && columns[i].attr("href", hrefs[i]); } return this; }; chart.hover = function (fin, fout) { !dots && createDots(); dots.mouseover(fin).mouseout(fout); return this; }; chart.click = function (f) { !dots && createDots(); dots.click(f); return this; }; chart.each = function (f) { createDots(f); return this; }; chart.eachColumn = function (f) { createColumns(f); return this; }; return chart; }; //inheritance var F = function() {}; F.prototype = Raphael.g; Linechart.prototype = new F; //public Raphael.fn.linechart = function(x, y, width, height, valuesx, valuesy, opts) { return new Linechart(this, x, y, width, height, valuesx, valuesy, opts); } })(); g.raphael-0.5/g.raphael.js0000644000175600017570000006701611654171544014501 0ustar pravipravi/*! * g.Raphael 0.5 - Charting library, based on Raphaël * * Copyright (c) 2009 Dmitry Baranovskiy (http://g.raphaeljs.com) * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license. */ /* * Tooltips on Element prototype */ /*\ * Element.popup [ method ] ** * Puts the context Element in a 'popup' tooltip. Can also be used on sets. ** > Parameters ** - dir (string) location of Element relative to the tail: `'down'`, `'left'`, `'up'` [default], or `'right'`. - size (number) amount of bevel/padding around the Element, as well as half the width and height of the tail [default: `5`] - x (number) x coordinate of the popup's tail [default: Element's `x` or `cx`] - y (number) y coordinate of the popup's tail [default: Element's `y` or `cy`] ** = (object) path element of the popup > Usage | paper.circle(50, 50, 5).attr({ | stroke: "#fff", | fill: "0-#c9de96-#8ab66b:44-#398235" | }).popup(); \*/ Raphael.el.popup = function (dir, size, x, y) { var paper = this.paper || this[0].paper, bb, xy, center, cw, ch; if (!paper) return; switch (this.type) { case 'text': case 'circle': case 'ellipse': center = true; break; default: center = false; } dir = dir == null ? 'up' : dir; size = size || 5; bb = this.getBBox(); x = typeof x == 'number' ? x : (center ? bb.x + bb.width / 2 : bb.x); y = typeof y == 'number' ? y : (center ? bb.y + bb.height / 2 : bb.y); cw = Math.max(bb.width / 2 - size, 0); ch = Math.max(bb.height / 2 - size, 0); this.translate(x - bb.x - (center ? bb.width / 2 : 0), y - bb.y - (center ? bb.height / 2 : 0)); bb = this.getBBox(); var paths = { up: [ 'M', x, y, 'l', -size, -size, -cw, 0, 'a', size, size, 0, 0, 1, -size, -size, 'l', 0, -bb.height, 'a', size, size, 0, 0, 1, size, -size, 'l', size * 2 + cw * 2, 0, 'a', size, size, 0, 0, 1, size, size, 'l', 0, bb.height, 'a', size, size, 0, 0, 1, -size, size, 'l', -cw, 0, 'z' ].join(','), down: [ 'M', x, y, 'l', size, size, cw, 0, 'a', size, size, 0, 0, 1, size, size, 'l', 0, bb.height, 'a', size, size, 0, 0, 1, -size, size, 'l', -(size * 2 + cw * 2), 0, 'a', size, size, 0, 0, 1, -size, -size, 'l', 0, -bb.height, 'a', size, size, 0, 0, 1, size, -size, 'l', cw, 0, 'z' ].join(','), left: [ 'M', x, y, 'l', -size, size, 0, ch, 'a', size, size, 0, 0, 1, -size, size, 'l', -bb.width, 0, 'a', size, size, 0, 0, 1, -size, -size, 'l', 0, -(size * 2 + ch * 2), 'a', size, size, 0, 0, 1, size, -size, 'l', bb.width, 0, 'a', size, size, 0, 0, 1, size, size, 'l', 0, ch, 'z' ].join(','), right: [ 'M', x, y, 'l', size, -size, 0, -ch, 'a', size, size, 0, 0, 1, size, -size, 'l', bb.width, 0, 'a', size, size, 0, 0, 1, size, size, 'l', 0, size * 2 + ch * 2, 'a', size, size, 0, 0, 1, -size, size, 'l', -bb.width, 0, 'a', size, size, 0, 0, 1, -size, -size, 'l', 0, -ch, 'z' ].join(',') }; xy = { up: { x: -!center * (bb.width / 2), y: -size * 2 - (center ? bb.height / 2 : bb.height) }, down: { x: -!center * (bb.width / 2), y: size * 2 + (center ? bb.height / 2 : bb.height) }, left: { x: -size * 2 - (center ? bb.width / 2 : bb.width), y: -!center * (bb.height / 2) }, right: { x: size * 2 + (center ? bb.width / 2 : bb.width), y: -!center * (bb.height / 2) } }[dir]; this.translate(xy.x, xy.y); return paper.path(paths[dir]).attr({ fill: "#000", stroke: "none" }).insertBefore(this.node ? this : this[0]); }; /*\ * Element.tag [ method ] ** * Puts the context Element in a 'tag' tooltip. Can also be used on sets. ** > Parameters ** - angle (number) angle of orientation in degrees [default: `0`] - r (number) radius of the loop [default: `5`] - x (number) x coordinate of the center of the tag loop [default: Element's `x` or `cx`] - y (number) y coordinate of the center of the tag loop [default: Element's `x` or `cx`] ** = (object) path element of the tag > Usage | paper.circle(50, 50, 15).attr({ | stroke: "#fff", | fill: "0-#c9de96-#8ab66b:44-#398235" | }).tag(60); \*/ Raphael.el.tag = function (angle, r, x, y) { var d = 3, paper = this.paper || this[0].paper; if (!paper) return; var p = paper.path().attr({ fill: '#000', stroke: '#000' }), bb = this.getBBox(), dx, R, center, tmp; switch (this.type) { case 'text': case 'circle': case 'ellipse': center = true; break; default: center = false; } angle = angle || 0; x = typeof x == 'number' ? x : (center ? bb.x + bb.width / 2 : bb.x); y = typeof y == 'number' ? y : (center ? bb.y + bb.height / 2 : bb.y); r = r == null ? 5 : r; R = .5522 * r; if (bb.height >= r * 2) { p.attr({ path: [ "M", x, y + r, "a", r, r, 0, 1, 1, 0, -r * 2, r, r, 0, 1, 1, 0, r * 2, "m", 0, -r * 2 -d, "a", r + d, r + d, 0, 1, 0, 0, (r + d) * 2, "L", x + r + d, y + bb.height / 2 + d, "l", bb.width + 2 * d, 0, 0, -bb.height - 2 * d, -bb.width - 2 * d, 0, "L", x, y - r - d ].join(",") }); } else { dx = Math.sqrt(Math.pow(r + d, 2) - Math.pow(bb.height / 2 + d, 2)); p.attr({ path: [ "M", x, y + r, "c", -R, 0, -r, R - r, -r, -r, 0, -R, r - R, -r, r, -r, R, 0, r, r - R, r, r, 0, R, R - r, r, -r, r, "M", x + dx, y - bb.height / 2 - d, "a", r + d, r + d, 0, 1, 0, 0, bb.height + 2 * d, "l", r + d - dx + bb.width + 2 * d, 0, 0, -bb.height - 2 * d, "L", x + dx, y - bb.height / 2 - d ].join(",") }); } angle = 360 - angle; p.rotate(angle, x, y); if (this.attrs) { //elements this.attr(this.attrs.x ? 'x' : 'cx', x + r + d + (!center ? this.type == 'text' ? bb.width : 0 : bb.width / 2)).attr('y', center ? y : y - bb.height / 2); this.rotate(angle, x, y); angle > 90 && angle < 270 && this.attr(this.attrs.x ? 'x' : 'cx', x - r - d - (!center ? bb.width : bb.width / 2)).rotate(180, x, y); } else { //sets if (angle > 90 && angle < 270) { this.translate(x - bb.x - bb.width - r - d, y - bb.y - bb.height / 2); this.rotate(angle - 180, bb.x + bb.width + r + d, bb.y + bb.height / 2); } else { this.translate(x - bb.x + r + d, y - bb.y - bb.height / 2); this.rotate(angle, bb.x - r - d, bb.y + bb.height / 2); } } return p.insertBefore(this.node ? this : this[0]); }; /*\ * Element.drop [ method ] ** * Puts the context Element in a 'drop' tooltip. Can also be used on sets. ** > Parameters ** - angle (number) angle of orientation in degrees [default: `0`] - x (number) x coordinate of the drop's point [default: Element's `x` or `cx`] - y (number) y coordinate of the drop's point [default: Element's `x` or `cx`] ** = (object) path element of the drop > Usage | paper.circle(50, 50, 8).attr({ | stroke: "#fff", | fill: "0-#c9de96-#8ab66b:44-#398235" | }).drop(60); \*/ Raphael.el.drop = function (angle, x, y) { var bb = this.getBBox(), paper = this.paper || this[0].paper, center, size, p, dx, dy; if (!paper) return; switch (this.type) { case 'text': case 'circle': case 'ellipse': center = true; break; default: center = false; } angle = angle || 0; x = typeof x == 'number' ? x : (center ? bb.x + bb.width / 2 : bb.x); y = typeof y == 'number' ? y : (center ? bb.y + bb.height / 2 : bb.y); size = Math.max(bb.width, bb.height) + Math.min(bb.width, bb.height); p = paper.path([ "M", x, y, "l", size, 0, "A", size * .4, size * .4, 0, 1, 0, x + size * .7, y - size * .7, "z" ]).attr({fill: "#000", stroke: "none"}).rotate(22.5 - angle, x, y); angle = (angle + 90) * Math.PI / 180; dx = (x + size * Math.sin(angle)) - (center ? 0 : bb.width / 2); dy = (y + size * Math.cos(angle)) - (center ? 0 : bb.height / 2); this.attrs ? this.attr(this.attrs.x ? 'x' : 'cx', dx).attr(this.attrs.y ? 'y' : 'cy', dy) : this.translate(dx - bb.x, dy - bb.y); return p.insertBefore(this.node ? this : this[0]); }; /*\ * Element.flag [ method ] ** * Puts the context Element in a 'flag' tooltip. Can also be used on sets. ** > Parameters ** - angle (number) angle of orientation in degrees [default: `0`] - x (number) x coordinate of the flag's point [default: Element's `x` or `cx`] - y (number) y coordinate of the flag's point [default: Element's `x` or `cx`] ** = (object) path element of the flag > Usage | paper.circle(50, 50, 10).attr({ | stroke: "#fff", | fill: "0-#c9de96-#8ab66b:44-#398235" | }).flag(60); \*/ Raphael.el.flag = function (angle, x, y) { var d = 3, paper = this.paper || this[0].paper; if (!paper) return; var p = paper.path().attr({ fill: '#000', stroke: '#000' }), bb = this.getBBox(), h = bb.height / 2, center; switch (this.type) { case 'text': case 'circle': case 'ellipse': center = true; break; default: center = false; } angle = angle || 0; x = typeof x == 'number' ? x : (center ? bb.x + bb.width / 2 : bb.x); y = typeof y == 'number' ? y : (center ? bb.y + bb.height / 2: bb.y); p.attr({ path: [ "M", x, y, "l", h + d, -h - d, bb.width + 2 * d, 0, 0, bb.height + 2 * d, -bb.width - 2 * d, 0, "z" ].join(",") }); angle = 360 - angle; p.rotate(angle, x, y); if (this.attrs) { //elements this.attr(this.attrs.x ? 'x' : 'cx', x + h + d + (!center ? this.type == 'text' ? bb.width : 0 : bb.width / 2)).attr('y', center ? y : y - bb.height / 2); this.rotate(angle, x, y); angle > 90 && angle < 270 && this.attr(this.attrs.x ? 'x' : 'cx', x - h - d - (!center ? bb.width : bb.width / 2)).rotate(180, x, y); } else { //sets if (angle > 90 && angle < 270) { this.translate(x - bb.x - bb.width - h - d, y - bb.y - bb.height / 2); this.rotate(angle - 180, bb.x + bb.width + h + d, bb.y + bb.height / 2); } else { this.translate(x - bb.x + h + d, y - bb.y - bb.height / 2); this.rotate(angle, bb.x - h - d, bb.y + bb.height / 2); } } return p.insertBefore(this.node ? this : this[0]); }; /*\ * Element.label [ method ] ** * Puts the context Element in a 'label' tooltip. Can also be used on sets. ** = (object) path element of the label. > Usage | paper.circle(50, 50, 10).attr({ | stroke: "#fff", | fill: "0-#c9de96-#8ab66b:44-#398235" | }).label(); \*/ Raphael.el.label = function () { var bb = this.getBBox(), paper = this.paper || this[0].paper, r = Math.min(20, bb.width + 10, bb.height + 10) / 2; if (!paper) return; return paper.rect(bb.x - r / 2, bb.y - r / 2, bb.width + r, bb.height + r, r).attr({ stroke: 'none', fill: '#000' }).insertBefore(this.node ? this : this[0]); }; /*\ * Element.blob [ method ] ** * Puts the context Element in a 'blob' tooltip. Can also be used on sets. ** > Parameters ** - angle (number) angle of orientation in degrees [default: `0`] - x (number) x coordinate of the blob's tail [default: Element's `x` or `cx`] - y (number) y coordinate of the blob's tail [default: Element's `x` or `cx`] ** = (object) path element of the blob > Usage | paper.circle(50, 50, 8).attr({ | stroke: "#fff", | fill: "0-#c9de96-#8ab66b:44-#398235" | }).blob(60); \*/ Raphael.el.blob = function (angle, x, y) { var bb = this.getBBox(), rad = Math.PI / 180, paper = this.paper || this[0].paper, p, center, size; if (!paper) return; switch (this.type) { case 'text': case 'circle': case 'ellipse': center = true; break; default: center = false; } p = paper.path().attr({ fill: "#000", stroke: "none" }); angle = (+angle + 1 ? angle : 45) + 90; size = Math.min(bb.height, bb.width); x = typeof x == 'number' ? x : (center ? bb.x + bb.width / 2 : bb.x); y = typeof y == 'number' ? y : (center ? bb.y + bb.height / 2 : bb.y); var w = Math.max(bb.width + size, size * 25 / 12), h = Math.max(bb.height + size, size * 25 / 12), x2 = x + size * Math.sin((angle - 22.5) * rad), y2 = y + size * Math.cos((angle - 22.5) * rad), x1 = x + size * Math.sin((angle + 22.5) * rad), y1 = y + size * Math.cos((angle + 22.5) * rad), dx = (x1 - x2) / 2, dy = (y1 - y2) / 2, rx = w / 2, ry = h / 2, k = -Math.sqrt(Math.abs(rx * rx * ry * ry - rx * rx * dy * dy - ry * ry * dx * dx) / (rx * rx * dy * dy + ry * ry * dx * dx)), cx = k * rx * dy / ry + (x1 + x2) / 2, cy = k * -ry * dx / rx + (y1 + y2) / 2; p.attr({ x: cx, y: cy, path: [ "M", x, y, "L", x1, y1, "A", rx, ry, 0, 1, 1, x2, y2, "z" ].join(",") }); this.translate(cx - bb.x - bb.width / 2, cy - bb.y - bb.height / 2); return p.insertBefore(this.node ? this : this[0]); }; /* * Tooltips on Paper prototype */ /*\ * Paper.label [ method ] ** * Puts the given `text` into a 'label' tooltip. The text is given a default style according to @g.txtattr. See @Element.label ** > Parameters ** - x (number) x coordinate of the center of the label - y (number) y coordinate of the center of the label - text (string) text to place inside the label ** = (object) set containing the label path and the text element > Usage | paper.label(50, 50, "$9.99"); \*/ Raphael.fn.label = function (x, y, text) { var set = this.set(); text = this.text(x, y, text).attr(Raphael.g.txtattr); return set.push(text.label(), text); }; /*\ * Paper.popup [ method ] ** * Puts the given `text` into a 'popup' tooltip. The text is given a default style according to @g.txtattr. See @Element.popup * * Note: The `dir` parameter has changed from g.Raphael 0.4.1 to 0.5. The options `0`, `1`, `2`, and `3` has been changed to `'down'`, `'left'`, `'up'`, and `'right'` respectively. ** > Parameters ** - x (number) x coordinate of the popup's tail - y (number) y coordinate of the popup's tail - text (string) text to place inside the popup - dir (string) location of the text relative to the tail: `'down'`, `'left'`, `'up'` [default], or `'right'`. - size (number) amount of padding around the Element [default: `5`] ** = (object) set containing the popup path and the text element > Usage | paper.popup(50, 50, "$9.99", 'down'); \*/ Raphael.fn.popup = function (x, y, text, dir, size) { var set = this.set(); text = this.text(x, y, text).attr(Raphael.g.txtattr); return set.push(text.popup(dir, size), text); }; /*\ * Paper.tag [ method ] ** * Puts the given text into a 'tag' tooltip. The text is given a default style according to @g.txtattr. See @Element.tag ** > Parameters ** - x (number) x coordinate of the center of the tag loop - y (number) y coordinate of the center of the tag loop - text (string) text to place inside the tag - angle (number) angle of orientation in degrees [default: `0`] - r (number) radius of the loop [default: `5`] ** = (object) set containing the tag path and the text element > Usage | paper.tag(50, 50, "$9.99", 60); \*/ Raphael.fn.tag = function (x, y, text, angle, r) { var set = this.set(); text = this.text(x, y, text).attr(Raphael.g.txtattr); return set.push(text.tag(angle, r), text); }; /*\ * Paper.flag [ method ] ** * Puts the given `text` into a 'flag' tooltip. The text is given a default style according to @g.txtattr. See @Element.flag ** > Parameters ** - x (number) x coordinate of the flag's point - y (number) y coordinate of the flag's point - text (string) text to place inside the flag - angle (number) angle of orientation in degrees [default: `0`] ** = (object) set containing the flag path and the text element > Usage | paper.flag(50, 50, "$9.99", 60); \*/ Raphael.fn.flag = function (x, y, text, angle) { var set = this.set(); text = this.text(x, y, text).attr(Raphael.g.txtattr); return set.push(text.flag(angle), text); }; /*\ * Paper.drop [ method ] ** * Puts the given text into a 'drop' tooltip. The text is given a default style according to @g.txtattr. See @Element.drop ** > Parameters ** - x (number) x coordinate of the drop's point - y (number) y coordinate of the drop's point - text (string) text to place inside the drop - angle (number) angle of orientation in degrees [default: `0`] ** = (object) set containing the drop path and the text element > Usage | paper.drop(50, 50, "$9.99", 60); \*/ Raphael.fn.drop = function (x, y, text, angle) { var set = this.set(); text = this.text(x, y, text).attr(Raphael.g.txtattr); return set.push(text.drop(angle), text); }; /*\ * Paper.blob [ method ] ** * Puts the given text into a 'blob' tooltip. The text is given a default style according to @g.txtattr. See @Element.blob ** > Parameters ** - x (number) x coordinate of the blob's tail - y (number) y coordinate of the blob's tail - text (string) text to place inside the blob - angle (number) angle of orientation in degrees [default: `0`] ** = (object) set containing the blob path and the text element > Usage | paper.blob(50, 50, "$9.99", 60); \*/ Raphael.fn.blob = function (x, y, text, angle) { var set = this.set(); text = this.text(x, y, text).attr(Raphael.g.txtattr); return set.push(text.blob(angle), text); }; /** * Brightness functions on the Element prototype */ /*\ * Element.lighter [ method ] ** * Makes the context element lighter by increasing the brightness and reducing the saturation by a given factor. Can be called on Sets. ** > Parameters ** - times (number) adjustment factor [default: `2`] ** = (object) Element > Usage | paper.circle(50, 50, 20).attr({ | fill: "#ff0000", | stroke: "#fff", | "stroke-width": 2 | }).lighter(6); \*/ Raphael.el.lighter = function (times) { times = times || 2; var fs = [this.attrs.fill, this.attrs.stroke]; this.fs = this.fs || [fs[0], fs[1]]; fs[0] = Raphael.rgb2hsb(Raphael.getRGB(fs[0]).hex); fs[1] = Raphael.rgb2hsb(Raphael.getRGB(fs[1]).hex); fs[0].b = Math.min(fs[0].b * times, 1); fs[0].s = fs[0].s / times; fs[1].b = Math.min(fs[1].b * times, 1); fs[1].s = fs[1].s / times; this.attr({fill: "hsb(" + [fs[0].h, fs[0].s, fs[0].b] + ")", stroke: "hsb(" + [fs[1].h, fs[1].s, fs[1].b] + ")"}); return this; }; /*\ * Element.darker [ method ] ** * Makes the context element darker by decreasing the brightness and increasing the saturation by a given factor. Can be called on Sets. ** > Parameters ** - times (number) adjustment factor [default: `2`] ** = (object) Element > Usage | paper.circle(50, 50, 20).attr({ | fill: "#ff0000", | stroke: "#fff", | "stroke-width": 2 | }).darker(6); \*/ Raphael.el.darker = function (times) { times = times || 2; var fs = [this.attrs.fill, this.attrs.stroke]; this.fs = this.fs || [fs[0], fs[1]]; fs[0] = Raphael.rgb2hsb(Raphael.getRGB(fs[0]).hex); fs[1] = Raphael.rgb2hsb(Raphael.getRGB(fs[1]).hex); fs[0].s = Math.min(fs[0].s * times, 1); fs[0].b = fs[0].b / times; fs[1].s = Math.min(fs[1].s * times, 1); fs[1].b = fs[1].b / times; this.attr({fill: "hsb(" + [fs[0].h, fs[0].s, fs[0].b] + ")", stroke: "hsb(" + [fs[1].h, fs[1].s, fs[1].b] + ")"}); return this; }; /*\ * Element.resetBrightness [ method ] ** * Resets brightness and saturation levels to their original values. See @Element.lighter and @Element.darker. Can be called on Sets. ** = (object) Element > Usage | paper.circle(50, 50, 20).attr({ | fill: "#ff0000", | stroke: "#fff", | "stroke-width": 2 | }).lighter(6).resetBrightness(); \*/ Raphael.el.resetBrightness = function () { if (this.fs) { this.attr({ fill: this.fs[0], stroke: this.fs[1] }); delete this.fs; } return this; }; //alias to set prototype (function () { var brightness = ['lighter', 'darker', 'resetBrightness'], tooltips = ['popup', 'tag', 'flag', 'label', 'drop', 'blob']; for (var f in tooltips) (function (name) { Raphael.st[name] = function () { return Raphael.el[name].apply(this, arguments); }; })(tooltips[f]); for (var f in brightness) (function (name) { Raphael.st[name] = function () { for (var i = 0; i < this.length; i++) { this[i][name].apply(this[i], arguments); } return this; }; })(brightness[f]); })(); //chart prototype for storing common functions Raphael.g = { /*\ * g.shim [ object ] ** * An attribute object that charts will set on all generated shims (shims being the invisible objects that mouse events are bound to) ** > Default value | { stroke: 'none', fill: '#000', 'fill-opacity': 0 } \*/ shim: { stroke: 'none', fill: '#000', 'fill-opacity': 0 }, /*\ * g.txtattr [ object ] ** * An attribute object that charts and tooltips will set on any generated text ** > Default value | { font: '12px Arial, sans-serif', fill: '#fff' } \*/ txtattr: { font: '12px Arial, sans-serif', fill: '#fff' }, /*\ * g.colors [ array ] ** * An array of color values that charts will iterate through when drawing chart data values. ** \*/ colors: (function () { var hues = [.6, .2, .05, .1333, .75, 0], colors = []; for (var i = 0; i < 10; i++) { if (i < hues.length) { colors.push('hsb(' + hues[i] + ',.75, .75)'); } else { colors.push('hsb(' + hues[i - hues.length] + ', 1, .5)'); } } return colors; })(), snapEnds: function(from, to, steps) { var f = from, t = to; if (f == t) { return {from: f, to: t, power: 0}; } function round(a) { return Math.abs(a - .5) < .25 ? ~~(a) + .5 : Math.round(a); } var d = (t - f) / steps, r = ~~(d), R = r, i = 0; if (r) { while (R) { i--; R = ~~(d * Math.pow(10, i)) / Math.pow(10, i); } i ++; } else { while (!r) { i = i || 1; r = ~~(d * Math.pow(10, i)) / Math.pow(10, i); i++; } i && i--; } t = round(to * Math.pow(10, i)) / Math.pow(10, i); if (t < to) { t = round((to + .5) * Math.pow(10, i)) / Math.pow(10, i); } f = round((from - (i > 0 ? 0 : .5)) * Math.pow(10, i)) / Math.pow(10, i); return { from: f, to: t, power: i }; }, axis: function (x, y, length, from, to, steps, orientation, labels, type, dashsize, paper) { dashsize = dashsize == null ? 2 : dashsize; type = type || "t"; steps = steps || 10; paper = arguments[arguments.length-1] //paper is always last argument var path = type == "|" || type == " " ? ["M", x + .5, y, "l", 0, .001] : orientation == 1 || orientation == 3 ? ["M", x + .5, y, "l", 0, -length] : ["M", x, y + .5, "l", length, 0], ends = this.snapEnds(from, to, steps), f = ends.from, t = ends.to, i = ends.power, j = 0, txtattr = { font: "11px 'Fontin Sans', Fontin-Sans, sans-serif" }, text = paper.set(), d; d = (t - f) / steps; var label = f, rnd = i > 0 ? i : 0; dx = length / steps; if (+orientation == 1 || +orientation == 3) { var Y = y, addon = (orientation - 1 ? 1 : -1) * (dashsize + 3 + !!(orientation - 1)); while (Y >= y - length) { type != "-" && type != " " && (path = path.concat(["M", x - (type == "+" || type == "|" ? dashsize : !(orientation - 1) * dashsize * 2), Y + .5, "l", dashsize * 2 + 1, 0])); text.push(paper.text(x + addon, Y, (labels && labels[j++]) || (Math.round(label) == label ? label : +label.toFixed(rnd))).attr(txtattr).attr({ "text-anchor": orientation - 1 ? "start" : "end" })); label += d; Y -= dx; } if (Math.round(Y + dx - (y - length))) { type != "-" && type != " " && (path = path.concat(["M", x - (type == "+" || type == "|" ? dashsize : !(orientation - 1) * dashsize * 2), y - length + .5, "l", dashsize * 2 + 1, 0])); text.push(paper.text(x + addon, y - length, (labels && labels[j]) || (Math.round(label) == label ? label : +label.toFixed(rnd))).attr(txtattr).attr({ "text-anchor": orientation - 1 ? "start" : "end" })); } } else { label = f; rnd = (i > 0) * i; addon = (orientation ? -1 : 1) * (dashsize + 9 + !orientation); var X = x, dx = length / steps, txt = 0, prev = 0; while (X <= x + length) { type != "-" && type != " " && (path = path.concat(["M", X + .5, y - (type == "+" ? dashsize : !!orientation * dashsize * 2), "l", 0, dashsize * 2 + 1])); text.push(txt = paper.text(X, y + addon, (labels && labels[j++]) || (Math.round(label) == label ? label : +label.toFixed(rnd))).attr(txtattr)); var bb = txt.getBBox(); if (prev >= bb.x - 5) { text.pop(text.length - 1).remove(); } else { prev = bb.x + bb.width; } label += d; X += dx; } if (Math.round(X - dx - x - length)) { type != "-" && type != " " && (path = path.concat(["M", x + length + .5, y - (type == "+" ? dashsize : !!orientation * dashsize * 2), "l", 0, dashsize * 2 + 1])); text.push(paper.text(x + length, y + addon, (labels && labels[j]) || (Math.round(label) == label ? label : +label.toFixed(rnd))).attr(txtattr)); } } var res = paper.path(path); res.text = text; res.all = paper.set([res, text]); res.remove = function () { this.text.remove(); this.constructor.prototype.remove.call(this); }; return res; }, labelise: function(label, val, total) { if (label) { return (label + "").replace(/(##+(?:\.#+)?)|(%%+(?:\.%+)?)/g, function (all, value, percent) { if (value) { return (+val).toFixed(value.replace(/^#+\.?/g, "").length); } if (percent) { return (val * 100 / total).toFixed(percent.replace(/^%+\.?/g, "").length) + "%"; } }); } else { return (+val).toFixed(0); } } } g.raphael-0.5/test/0000755000175600017570000000000011654171544013247 5ustar pravipravig.raphael-0.5/test/linechart.html0000644000175600017570000000656611654171544016123 0ustar pravipravi gRaphaël Line Charts

Demo of gRaphaël JavaScript library.

g.raphael-0.5/test/images/0000755000175600017570000000000011654171544014514 5ustar pravipravig.raphael-0.5/test/images/bgbg.png0000644000175600017570000000460411654171544016127 0ustar pravipraviPNG  IHDR(dS0PLTEqtEXtSoftwareAdobe ImageReadyqe<IDAThލɒICv%-V/4-BXT ]5gkTIoHB| s$u-XEBÄW-#d=b#/B!՚\JPLu2ZM5KFUs'XSqzuUٛA߷#d\|okJxFrU](`YLYH Д |J$v&fm\7fu|h\d#}$\G@1etɭ)jFc/`$8AtL1 \+o9tӼir H9v?f I))[)w,6GHs+8 tY^2MPuWU\c6#Ѧ(,>@Z`fcVnݜ'& t\}ȓA?YBͰxWcxpWwC?ؾz Z[V\z2h(#6ֳm(4u,;oAT52q%ÔNoH d51dG Qr'en &)!h^I!>!~Oׯ} gDLhB|\13+iK5,`QӸ5p"hB'Ї/Zx-Gqi')Zqmx9/ Fw{(_em|G79s;#›XP tIKqn\x$mh;fc(SAn6G2OO}=y_Q c)[B$cڲ)bK? '͠ =MK pX趄t3훌P^ "t\|.yqhR;;Y`5 4mAQ߮תUdpvțl *)XCH%lG%86hKE R++Zc`iD{=N`m?z9-<(K _Yp ӱi4xbF_R6sk]"p>ٿ.~5)q\Z5X[`Fܪ,DNKYrWpXq ^ċ0ULu&4lۑn)`ӮB/'Rrflt@hQd*'ѽp\b*םk9`>{7;%}ﻫ鏼 H -}d3$#|Z o@_tKFCnExf"/c X)cͬȺ 0G=ǀV / ;æ.q@{!=b1Z#iݐ$@ }\N>yО[-+La m6~{Ó;.6P Vl[q.b3y,F8[t-S5A8~V D;{>+̤Bg`2`1>2GxSP󮑦&P #sI:|`ޟߠhH;I|>Bv_6V BI8kO<2[ <Qq E3 _Lֿʱ۩ Xyx_PE'!HMH\`faDؖF:/Wox( O-<_+xW yH[70K]tc1gӦ9EQub)?Ba٘4mU|x/F?zsz$]vȫxI߈IUVK|فO*UW_.Ηa oR?ǷnjȞ Lol0&^8rի.}oYpgkß' >_O w;e~bwF^Qқ,@Gv(V{r w) qA`* xR`|-&Y%Lj7H>ߊ< ʈv=+ *ZQ(][azB&sO/ڪ}oz_ؘk" }QZ>'IENDB`g.raphael-0.5/test/images/bg.png0000644000175600017570000000646711654171544015627 0ustar pravipraviPNG  IHDR ߁0PLTE,tEXtSoftwareAdobe ImageReadyqe< IDATx\YvGˢv>d{dYl?W "KetO})/]IKUc=b>ȀYCo OG[r=ٗ9g L^O`Cԗe6K19ɖ-JFi.kmbRMJrD}ᦩ45:\{0\6# م:VE6S(:LN"w]Bڶ2%G#;VE)h-ihN2DԴF@[ZlIxv)vBj`a\Cٷ 'c%c赊4xBH麈 ׬9$뤼$\c4>Xsx0,ˣRhΖjXN,5f`6rH}eQh34bDzBS4\iu,u;`Q* 5ѱDU{&ֱGh|խݶ#YS224t1F(r-oI Oך.Ħo5ZXM?;,>btyUKۃ$]b`R_fDi_lT5U^lW9zhJ 5L Έ@$[`K0An0iiL&핡9KU0GBqǕRǖKsIya}w„ 5ux|!Xm__Ժ*Scjk<}DzZcM8kO͜_JieSd|=(\W0YsL6T+7 7s9 54)K\eq_t{߬8^z§O0j?$xT!X?K`wl'2MC[Vz8z!qά]\9/}5ؿuo'dwTDDeJ|1P|I+1Fp(giOUu\SX/?եOۃ>_Y/ }C`Qy"*=!]/VsM~6Uui1`ܓNK[$lq4&gʹ{Ÿ4۹O=}ೃ?0w ^Y$7YI(~OXOE/UzBN3\K7pݯ/JdmW?r~hwJ^ ?RwR\w^Xy6ŵ=oٺ_3wt}=3u?Zx<02P>U~zw =3?cMZ?h ls4jݟP 3wu졏OȺ_f m7p/,,']߀z"FPsݭg>c˺y#jcuV}CZ? O]:qſݺ ?%*ܔ:F˃?7Q~{@u_Oy?j8DIENDB`g.raphael-0.5/test/barchart.html0000644000175600017570000000412311654171544015723 0ustar pravipravi g·Raphaël Static Bar Charts

Demo of g·Raphaël JavaScript library.

g.raphael-0.5/test/brightness.html0000644000175600017570000000313611654171544016310 0ustar pravipravi Raphael Tooltips
g.raphael-0.5/test/piechart2.html0000644000175600017570000000427411654171544016025 0ustar pravipravi g·Raphaël Dynamic Pie Chart

Pie chart with legend, hyperlinks on two first sectors and hover effect.

Demo of g·Raphaël JavaScript library.

g.raphael-0.5/test/tooltips.html0000644000175600017570000000722711654171544016022 0ustar pravipravi Raphael Tooltips
g.raphael-0.5/test/dotchart.html0000644000175600017570000000702211654171544015746 0ustar pravipravi gRaphaël Dot Chart

Demo of gRaphaël JavaScript library.

g.raphael-0.5/test/barchart2.html0000644000175600017570000000560011654171544016006 0ustar pravipravi gRaphaël Dynamic Bar Chart

Demo of gRaphaël JavaScript library.

g.raphael-0.5/test/piechart.html0000644000175600017570000000232511654171544015736 0ustar pravipravi gRaphaël Static Pie Chart

Demo of gRaphaël JavaScript library.

g.raphael-0.5/test/css/0000755000175600017570000000000011654171544014037 5ustar pravipravig.raphael-0.5/test/css/demo.css0000644000175600017570000000103611654171544015475 0ustar pravipravibody { background: #999 url(../images/bgbg.png); font: 100.01% "Fontin Sans", Fontin-Sans, "Myriad Pro", "Lucida Grande", "Lucida Sans Unicode", Lucida, Verdana, Helvetica, sans-serif; color: #000; margin: 10px 0 0 0; padding: 0; text-align: center; } #holder { -moz-border-radius: 10px; -webkit-border-radius: 10px; -webkit-box-shadow: 0 1px 3px #666; background: #ddd url(../images/bg.png); margin: 0 auto; width: 640px; height: 480px; } p { text-align: left; margin: .5em 2em; } g.raphael-0.5/test/css/demo-print.css0000644000175600017570000000056311654171544016633 0ustar pravipravibody { background: #fff; font: 100.01% "Fontin Sans", Fontin-Sans, "Myriad Pro", "Lucida Grande", "Lucida Sans Unicode", Lucida, Verdana, Helvetica, sans-serif; color: #000; margin: 10px 0 0 0; padding: 0; text-align: center; } #holder { margin: 0 auto; width: 640px; height: 480px; } p { text-align: left; margin: .5em 2em; } g.raphael-0.5/docs/0000755000175600017570000000000011654171544013220 5ustar pravipravig.raphael-0.5/docs/reference.html0000644000175600017570000007350711654171544016060 0ustar pravipravi g.Raphaël Reference
  1. Element
  2. Element.blob()
  3. Element.darker()
  4. Element.drop()
  5. Element.flag()
  6. Element.label()
  7. Element.lighter()
  8. Element.popup()
  9. Element.resetBrightness()
  10. Element.tag()
  11. Paper
  12. Paper.blob()
  13. Paper.drop()
  14. Paper.flag()
  15. Paper.label()
  16. Paper.popup()
  17. Paper.tag()
  18. g
  19. g.colors
  20. g.shim
  21. g.txtattr

g.Raphaël Reference

 Element

 Element.blob(angle, x, y)

Puts the context Element in a 'blob' tooltip. Can also be used on sets.

Parameters

angle
number
angle of orientation in degrees [default: 0]
x
number
x coordinate of the blob's tail [default: Element's x or cx]
y
number
y coordinate of the blob's tail [default: Element's x or cx]

Returns: object path element of the blob

Usage

paper.circle(50, 50, 8).attr({
    stroke: "#fff",
    fill: "0-#c9de96-#8ab66b:44-#398235"
}).blob(60);

 Element.darker(times)

Makes the context element darker by decreasing the brightness and increasing the saturation by a given factor. Can be called on Sets.

Parameters

times
number
adjustment factor [default: 2]

Returns: object Element

Usage

paper.circle(50, 50, 20).attr({
    fill: "#ff0000",
    stroke: "#fff",
    "stroke-width": 2
}).darker(6);

 Element.drop(angle, x, y)

Puts the context Element in a 'drop' tooltip. Can also be used on sets.

Parameters

angle
number
angle of orientation in degrees [default: 0]
x
number
x coordinate of the drop's point [default: Element's x or cx]
y
number
y coordinate of the drop's point [default: Element's x or cx]

Returns: object path element of the drop

Usage

paper.circle(50, 50, 8).attr({
    stroke: "#fff",
    fill: "0-#c9de96-#8ab66b:44-#398235"
}).drop(60);

 Element.flag(angle, x, y)

Puts the context Element in a 'flag' tooltip. Can also be used on sets.

Parameters

angle
number
angle of orientation in degrees [default: 0]
x
number
x coordinate of the flag's point [default: Element's x or cx]
y
number
y coordinate of the flag's point [default: Element's x or cx]

Returns: object path element of the flag

Usage

paper.circle(50, 50, 10).attr({
    stroke: "#fff",
    fill: "0-#c9de96-#8ab66b:44-#398235"
}).flag(60);

 Element.label()

Puts the context Element in a 'label' tooltip. Can also be used on sets.

Returns: object path element of the label.

Usage

paper.circle(50, 50, 10).attr({
    stroke: "#fff",
    fill: "0-#c9de96-#8ab66b:44-#398235"
}).label();

 Element.lighter(times)

Makes the context element lighter by increasing the brightness and reducing the saturation by a given factor. Can be called on Sets.

Parameters

times
number
adjustment factor [default: 2]

Returns: object Element

Usage

paper.circle(50, 50, 20).attr({
    fill: "#ff0000",
    stroke: "#fff",
    "stroke-width": 2
}).lighter(6);

 Element.popup(dir, size, x, y)

Puts the context Element in a 'popup' tooltip. Can also be used on sets.

Parameters

dir
string
location of Element relative to the tail: 'down', 'left', 'up' [default], or 'right'.
size
number
amount of bevel/padding around the Element, as well as half the width and height of the tail [default: 5]
x
number
x coordinate of the popup's tail [default: Element's x or cx]
y
number
y coordinate of the popup's tail [default: Element's y or cy]

Returns: object path element of the popup

Usage

paper.circle(50, 50, 5).attr({
    stroke: "#fff",
    fill: "0-#c9de96-#8ab66b:44-#398235"
}).popup();

 Element.resetBrightness()

Resets brightness and saturation levels to their original values. See Element.lighter and Element.darker. Can be called on Sets.

Returns: object Element

Usage

paper.circle(50, 50, 20).attr({
    fill: "#ff0000",
    stroke: "#fff",
    "stroke-width": 2
}).lighter(6).resetBrightness();

 Element.tag(angle, r, x, y)

Puts the context Element in a 'tag' tooltip. Can also be used on sets.

Parameters

angle
number
angle of orientation in degrees [default: 0]
r
number
radius of the loop [default: 5]
x
number
x coordinate of the center of the tag loop [default: Element's x or cx]
y
number
y coordinate of the center of the tag loop [default: Element's x or cx]

Returns: object path element of the tag

Usage

paper.circle(50, 50, 15).attr({
    stroke: "#fff",
    fill: "0-#c9de96-#8ab66b:44-#398235"
}).tag(60);

 Paper

 Paper.blob(x, y, text, angle)

Puts the given text into a 'blob' tooltip. The text is given a default style according to g.txtattr. See Element.blob

Parameters

x
number
x coordinate of the blob's tail
y
number
y coordinate of the blob's tail
text
string
text to place inside the blob
angle
number
angle of orientation in degrees [default: 0]

Returns: object set containing the blob path and the text element

Usage

paper.blob(50, 50, "$9.99", 60);

 Paper.drop(x, y, text, angle)

Puts the given text into a 'drop' tooltip. The text is given a default style according to g.txtattr. See Element.drop

Parameters

x
number
x coordinate of the drop's point
y
number
y coordinate of the drop's point
text
string
text to place inside the drop
angle
number
angle of orientation in degrees [default: 0]

Returns: object set containing the drop path and the text element

Usage

paper.drop(50, 50, "$9.99", 60);

 Paper.flag(x, y, text, angle)

Puts the given text into a 'flag' tooltip. The text is given a default style according to g.txtattr. See Element.flag

Parameters

x
number
x coordinate of the flag's point
y
number
y coordinate of the flag's point
text
string
text to place inside the flag
angle
number
angle of orientation in degrees [default: 0]

Returns: object set containing the flag path and the text element

Usage

paper.flag(50, 50, "$9.99", 60);

 Paper.label(x, y, text)

Puts the given text into a 'label' tooltip. The text is given a default style according to g.txtattr. See Element.label

Parameters

x
number
x coordinate of the center of the label
y
number
y coordinate of the center of the label
text
string
text to place inside the label

Returns: object set containing the label path and the text element

Usage

paper.label(50, 50, "$9.99");

 Paper.popup(x, y, text, dir, size)

Puts the given text into a 'popup' tooltip. The text is given a default style according to g.txtattr. See Element.popup

Note: The dir parameter has changed from g.Raphael 0.4.1 to 0.5. The options 0, 1, 2, and 3 has been changed to 'down', 'left', 'up', and 'right' respectively.

Parameters

x
number
x coordinate of the popup's tail
y
number
y coordinate of the popup's tail
text
string
text to place inside the popup
dir
string
location of the text relative to the tail: 'down', 'left', 'up' [default], or 'right'.
size
number
amount of padding around the Element [default: 5]

Returns: object set containing the popup path and the text element

Usage

paper.popup(50, 50, "$9.99", 'down');

 Paper.tag(x, y, text, angle, r)

Puts the given text into a 'tag' tooltip. The text is given a default style according to g.txtattr. See Element.tag

Parameters

x
number
x coordinate of the center of the tag loop
y
number
y coordinate of the center of the tag loop
text
string
text to place inside the tag
angle
number
angle of orientation in degrees [default: 0]
r
number
radius of the loop [default: 5]

Returns: object set containing the tag path and the text element

Usage

paper.tag(50, 50, "$9.99", 60);

 g

 g.colors

An array of color values that charts will iterate through when drawing chart data values.

 g.shim

An attribute object that charts will set on all generated shims (shims being the invisible objects that mouse events are bound to)

Default value

{ stroke: 'none', fill: '#000', 'fill-opacity': 0 }

 g.txtattr

An attribute object that charts and tooltips will set on any generated text

Default value

{ font: '12px Arial, sans-serif', fill: '#fff' }
g.raphael-0.5/docs/reference.js0000644000175600017570000000304411654171544015515 0ustar pravipraviRaphael(function () { var grad = { stroke: "#fff", fill: "0-#c9de96-#8ab66b:44-#398235" }, fill = { stroke: "#fff", fill: "#ff0000", "stroke-width": 2 }; function prepare(id) { var div = document.getElementById(id); div.style.cssText = "display:block;float:right;padding:10px;width:99px;height:99px;background:#2C53B0 url(./blueprint-min.png) no-repeat"; return Raphael(div, 99, 99); } prepare("Element.popup-extra").circle(50, 50, 5).attr(grad).popup(); prepare("Element.tag-extra").circle(50, 50, 15).attr(grad).tag(60); prepare("Element.drop-extra").circle(50, 50, 8).attr(grad).drop(60); prepare("Element.flag-extra").circle(50, 50, 10).attr(grad).flag(60); prepare("Element.label-extra").circle(50, 50, 10).attr(grad).label(); prepare("Element.blob-extra").circle(50, 50, 8).attr(grad).blob(60); prepare("Paper.popup-extra").popup(50, 50, "Hello", 'down'); prepare("Paper.tag-extra").tag(50, 50, "$9.99", 60); prepare("Paper.drop-extra").drop(50, 50, "$10", 60); prepare("Paper.flag-extra").flag(50, 50, "$9.99", 60); prepare("Paper.label-extra").label(50, 50, "$9.99"); prepare("Paper.blob-extra").blob(50, 50, "Hello", 60); prepare("Element.lighter-extra").circle(50, 50, 20).attr(fill).lighter(6); prepare("Element.darker-extra").circle(50, 50, 20).attr(fill).darker(6); prepare("Element.resetBrightness-extra").circle(50, 50, 20).attr(fill).lighter(6).resetBrightness(); }); g.raphael-0.5/docs/dr.css0000644000175600017570000001665611654171544014355 0ustar pravipravihtml, body { height: 100%; margin: 0; padding: 0; } #dr-js { background: #999; margin: 0; padding: 0; overflow-y: hidden; } #src-dr-js { background: #000; margin: 1em; padding: 0; } .dr-doc { background: #eee; border-right: solid #eee 3px; float: right; font: 300 16px/1.4 "Myriad Pro", "Helvetica Neue", Helvetica, "Arial Unicode MS", Arial, sans-serif; height: 100%; margin: 0; overflow: auto; padding: 0 30px; width: 800px; } .dr-toc { background: #ddd; background: -moz-linear-gradient(left, #ddd 0%, #eee 100%); /* firefox */ background: -webkit-gradient(linear, left top, right top, color-stop(0%, #ddd), color-stop(100%, #eee)); /* webkit */ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ddd', endColorstr='#eee',GradientType=1); /* ie */ border-right: solid #ddd 3px; float: right; font-family: Menlo, Consolas, Monaco, "Lucida Console", monospace; height: 100%; list-style: none; margin: 0; overflow: auto; padding: 0 16px; width: 240px; } #dr { margin: 0 auto; width: 1152px; height: 100%; } ::-moz-selection { background: #c00; color: #fff; } ::selection { background: #c00; color: #fff; } .dr-doc code, .dr-type em, .dr-returns em, .dr-property em { font-family: Menlo, Consolas, Monaco, "Lucida Console", monospace; } .extra { display: none; } pre.code code { color: #fff; } pre.code { background: #333; color: #fff; overflow-x: auto; padding: 16px 30px; margin: 0 -30px; } code b { color: #e9df8f; font-weight: normal; } code i, code i *, code i .d { color: #8b9967; font-style: normal; } code .s { color: #e7be61; } code .d { color: #cf6a4c; } code .c, code .c * { color: #999; font-style: italic; } em.amp { font-family: Baskerville, "Goudy Old Style", Palatino, "Book Antiqua", serif; font-style: italic; } dl.dr-parameters { margin: 8px 0; } dt.dr-param { color: #666; font-weight: 400; float: left; margin-right: 16px; min-width: 160px; } dd.dr-type { margin: 0; } dd.dr-description { display: table; min-height: 24px; border: solid 1px #eee; } .dr-type { float: left; } .dr-type em, .dr-returns em, .dr-property em { -moz-border-radius: 5px; -webkit-border-radius: 5px; background: #ccc; border-radius: 5px; float: left; font-size: .75em; font-style: normal; font-weight: 700; margin: 0 8px 0 0; min-width: 80px; padding: 2px 5px; text-align: center; } .dr-type em.amp, .dr-returns em.amp, .dr-property em.amp { float: none; background: none; font-size: 1em; font-weight: 400; font-style: italic; margin: 0; padding: 0; min-width: 0; } .dr-property em.dr-type { margin: 4px 16px 0 0; } em.dr-type-string { background: #e1edb1; color: #3d4c00; } em.dr-type-object { background: #edb1b1; color: #4c0000; } em.dr-type-function { background: #cfb1ed; color: #26004c; } em.dr-type-number { background: #b1c9ed; color: #001e4c; } em.dr-type-boolean { background: #b1edc9; color: #004c1e; } em.dr-type-array { background: #edd5b1; color: #4c2d00; } dd.dr-optional { display: none; } ol.dr-json { background: #ddd; list-style: none; margin: 0 -30px; padding: 16px 30px; } ol.dr-json .dr-json-key { float: left; min-width: 50px; margin-right: 16px; } ol.dr-json .dr-json-description { display: table; } ol.dr-json ol.dr-json { margin: 0; padding: 0 0 0 50px; } h1 { font-weight: 400; font-size: 2.6em; margin: 0; } h2, h3, h4, h5 { margin: 1em 0 .5em 0; padding: 6px 0 0; font-weight: 600; position: relative; } h5 { font-size: 18px; } h4 { font-size: 20px; } h3 { font-size: 28px; } h2 { font-size: 38px; } h2.dr-method, h3.dr-method, h4.dr-method, h5.dr-method { color: #900; } h2.dr-property, h3.dr-property, h4.dr-property, h5.dr-property { color: #009; } i.dr-trixie { border: solid 10px #eee; border-left-color: #999; height: 0; margin-left: -30px; margin-top: -10px; overflow: hidden; position: absolute; top: 50%; width: 0; } p.header { font-size: 19px; font-weight: 600; margin: 1em 0 .3em; } .dr-returns { margin-top: 16px; } .dr-returns .dr-title { float: left; margin-right: 16px; width: 160px; } .dr-toc a { display: block; text-decoration: none; color: #333; padding-top: 8px; position: relative; z-index: 1000; } .dr-toc li.dr-lvl1 a { padding-left: 1em; } .dr-toc li.dr-lvl2 a { padding-left: 2em; } .dr-toc li.dr-lvl3 a { padding-left: 3em; } .dr-toc li.dr-lvl4 a { padding-left: 4em; } .dr-toc li.dr-lvl5 a { padding-left: 5em; } .dr-toc li.dr-lvl6 a { padding-left: 6em; } .dr-toc a.dr-property { color: #339; } .dr-toc a.dr-method { color: #933; } .dr-toc a:hover { text-shadow: 0 0 2px #333; } .dr-toc a.dr-property:hover { text-shadow: 0 0 2px #66c; } .dr-toc a.dr-method:hover { text-shadow: 0 0 2px #c66; } a.dr-hash, a.dr-sourceline { -webkit-transition: opacity 0.2s linear; color: #333; font-family: Menlo, "Arial Unicode MS", sans-serif; margin: 0 0 0 .3em; opacity: 0; text-decoration: none; } a.dr-link { position: relative; color: #3875c0; } a.dr-link:hover { text-shadow: 0 1px 2px #999; bottom: 1px; padding-bottom: 1px; } a.dr-link:visited { color: #7051bc; } h2:hover a.dr-hash, h3:hover a.dr-hash, h4:hover a.dr-hash, h5:hover a.dr-hash, h2:hover a.dr-sourceline, h3:hover a.dr-sourceline, h4:hover a.dr-sourceline, h5:hover a.dr-sourceline { opacity: 1; } p { margin: 0 0 .5em; } .dr-source-line { margin: 0; } .dr-source-line a { -webkit-border-radius: 5px; -webkit-border-radius: 5px; -moz-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; border-radius: 5px; color: #000; background: #999; font-weight: 400; font-size: .75em; text-decoration: none; padding: 5px; } #src-dr-js code { background: #000; display: block; color: #fff; font-family: Menlo, Consolas, Monaco, "Lucida Console", monospace; white-space: pre; padding-left: 100px; position: relative; line-height: 1.2; } #src-dr-js code:hover { background: #333; } #src-dr-js code:hover .ln { color: #fff; } #src-dr-js code .ln { position: absolute; left: 0; color: #333; width: 70px; text-align: right; } /*Scrollbar*/ .dr-doc::-webkit-scrollbar, .dr-toc::-webkit-scrollbar { width: 7px; height: 9px; } .dr-doc::-webkit-scrollbar-button:start:decrement, .dr-doc::-webkit-scrollbar-button:end:increment, .dr-toc::-webkit-scrollbar-button:start:decrement, .dr-toc::-webkit-scrollbar-button:end:increment { display: block; height: 0; background-color: transparent; } .dr-doc::-webkit-scrollbar-track-piece, .dr-toc::-webkit-scrollbar-track-piece { -webkit-border-radius: 0; -webkit-border-bottom-right-radius: 4px; -webkit-border-bottom-left-radius: 4px; } .dr-doc::-webkit-scrollbar-thumb:vertical, .dr-toc::-webkit-scrollbar-thumb:vertical { height: 50px; background-color: rgba(0, 0, 0, 0.2); -webkit-border-radius: 4px; } .dr-doc::-webkit-scrollbar-thumb:horizontal, .dr-toc::-webkit-scrollbar-thumb:horizontal { width: 50px; background-color: rgba(0, 0, 0, 0.2); -webkit-border-radius: 4px; }g.raphael-0.5/docs/blueprint-min.png0000644000175600017570000001506111654171544016516 0ustar pravipraviPNG  IHDRww99ߊ pHYs  IDATx흽Qonc pc:kء0/ݟ{IZ}]UfՒJӟXGy~ۦ#vr?Ax;o'#>־1_f7{tH>xNN!xgnooO>%O2L A53VV̓K>ډ28{h'=vZ:BϾ77g|7{\~o?'_<3/˿ӓwg\;=yWQ]ob[YK'! (; ̟⣀Dt_qGWz_~;n=@#{ة>/wkʥh7g9qgc?՘ugӺګh߭+ wD 4A^9;o|g':S{~v(ygG(D7?\4T',mi?qr-'ۯO="y/I;uҏNY?뙿o~ʥQrRNXcN*H8#x~mx??u#{3>d7:b)oyYG~{e}2{ͦ%7jZjo܍^Wֻ -B7OZ3nLϞe>{G}W+<2yS_%Cֱ }mnk}󭏽^tR$'+ɥ!zR,N(?u~QaS~GAɣ)_-^YKW.BWeeNl?'YD]7٧ƫ|6JDg#vMXrg~+@uN$fE>G"6:ghh~cDZl nz#uL#u7=ҕQbgү]+}ُ}z8A9{r6~82z}<ŧ0o#Z?m}YK|:9Is;~64OyzNczi6}i R%/½[W#:y9KFx4+_T_>ՖCH?uw?Ǹ@ݟS׸~tW+:iӄFx4d<2_-<S|8ۯx<] oԕ<s5^OQ=O?s{_YPmP ʢ]YY9pך'?*gXT u̒zg\T'5loCE?/y[ ٸ4VDw\9o(ߡ:>nzk;T $XB1͈zEO?(Mbg=}ڷ/Roևq񬯎c'9wKrawR'f|Q}iIu7:؏>[߾@3}d}ϰk?wK}ܜ'=83aӦmGfk]tMuSmy0>'HW/`ڠ"?Zr)ݓĊN&H7V;.vobe^|xϾƯ; ;ė\LMDx4#'[ڍNy2n /6oñQ̿ʃtxv7{e-]919l6mxڠq| o#{¾ʷ?ձh_fy/Syb#,n-]ܞdl9afS,>1$Noy>g3s/˿?t]Rc3MsWbh-k,f3gZg*nL-Ze{(y2_T}3=;Tֳ(Fn4.1[?]W2_ц{xO9ly"> >tA'1O=ɸyS_~+}d^^yOg>ܻtR,'f0'ɸH笚OSPgf} y%ymoy5}ԕ;0&LH8(NWUgu7z~ecعfSSn-]014g~FO[Ɠ:ݟ|qt|Nڴ^3ϺԺ[WHN2O>:O"|tS7m™u푐~ugq>߭o/Wߵw|gUߡbPqkaϾai;EVoo^ҟzC ꈾ3}Wym;T\`X#'߸/h|8m*mk6ubn&_Z~?Q3.¦~%oDGҟ:ֵzG۩c}u3`Xo 8Zm ij(Jy26zٜ:{$XϸhFg?+Ѹi{D;Nn}+"L^_ sN|~&,?1eݍ72.~O݌xq<8WurzۆG3Al1_F@C!iL=o!~u^]mug~C[Y'׉bb)H$@N&Mgg=3Ty}3/g=iľ済8gmWĿsD 9ɣɉ$6OPg4hu_ꎄic~/'?|诬+q'Jhd>|qE8+'q;T3<[k(kqwk=󛿽5;Y3=uEEuk]YK\XE4 褿Nt>hLl?R~Dže^%ϸh+οZz"3flV$QGvm>(ꇟ6~l$o^]G]k;yqu_r)% ɤ2WWI6pM][۸Uv''~ kʥL|3 xCHh>6K<[qOcOye|$#} v^tR$'朰Dɣ->[|~'_4o<>ڟu}TޡphYWw$Q@qi>m6my+SQco_c3;vluO"6bDڢ~?zƯ͑'}u\}ǏNbc86?_cQϾ[Zk՘|Gߡzw_ߡV7,En-Li7o=yE2.VO['Ce\TOT/Doen-PH䶑6,u' Y< aӟY_ n-=s=+eey=>'O꥾Čwz":4Nѧ gy ~+K_9w"$_mlJQP;0^WdYOYF6 t\=yZr)$QJ?|m@A[7̳{?zO_Zz4eR7OuܭoRM(>~}ڍg6r7їڧN#}p]iO lrzRys|-mk[SGvr?sw۬7qޮ4ɷAd4ɷAd//ňIENDB`g.raphael-0.5/docs/dr-print.css0000644000175600017570000000662011654171544015475 0ustar pravipravihtml, body { background: #fff; margin: 2cm 1cm; padding: 0; } .dr-doc { font: 300 16px/1.4 "Myriad Pro", "Helvetica Neue", Helvetica, "Arial Unicode MS", Arial, sans-serif; } .dr-toc { display: none; } ::-moz-selection { background: #c00; color: #fff; } ::selection { background: #c00; color: #fff; } .dr-doc code, .dr-type em, .dr-returns em, .dr-property em { font-family: Menlo, Consolas, Monaco, "Lucida Console", monospace; } pre.code { -moz-border-radius: 10px; -webkit-border-radius: 10px; border: dotted 1px #666; padding: .5em; } pre.code code { color: #000; } code b { color: #63f; font-weight: normal; } code i, code i *, code i .d { color: #363; font-style: normal; } code .s { color: #e7be61; } code .d { color: #cf6a4c; } code .c, code .c * { color: #999; font-style: italic; } em.amp { font-family: Baskerville, "Goudy Old Style", Palatino, "Book Antiqua", serif; font-style: italic; } dl.dr-parameters { margin: 8px 0; } dt.dr-param { color: #666; font-weight: 400; float: left; margin-right: 16px; min-width: 160px; } dd.dr-type { margin: 0; } dd.dr-description { display: table; min-height: 24px; border: solid 1px #fff; } .dr-type { float: left; } .extra { display: none; } .dr-type em, .dr-returns em, .dr-property em { -moz-border-radius: 5px; -webkit-border-radius: 5px; background: #ccc; border-radius: 5px; float: left; font-size: .75em; font-style: normal; font-weight: 700; margin: 0 8px 0 0; min-width: 80px; padding: 2px 5px; text-align: center; } .dr-type em.amp, .dr-returns em.amp, .dr-property em.amp { float: none; background: none; font-size: 1em; font-weight: 400; font-style: italic; margin: 0; padding: 0; min-width: 0; } .dr-property em.dr-type { margin: 4px 16px 0 0; } em.dr-type-string { background: #e1edb1; color: #3d4c00; } em.dr-type-object { background: #edb1b1; color: #4c0000; } em.dr-type-function { background: #cfb1ed; color: #26004c; } em.dr-type-number { background: #b1c9ed; color: #001e4c; } em.dr-type-boolean { background: #b1edc9; color: #004c1e; } em.dr-type-array { background: #edd5b1; color: #4c2d00; } dd.dr-optional { display: none; } ol.dr-json { list-style: none; margin: 0 -30px; padding: 16px 30px; } ol.dr-json .dr-json-key { float: left; min-width: 50px; margin-right: 16px; } ol.dr-json .dr-json-description { display: table; } ol.dr-json ol.dr-json { margin: 0; padding: 0 0 0 50px; } h1 { font-weight: 400; font-size: 2.6em; margin: 0; } h2, h3, h4, h5 { margin: 1em 0 .5em 0; padding: 6px 0 0; font-weight: 600; position: relative; clear: left; } h5 { font-size: 18px; } h4 { font-size: 20px; } h3 { font-size: 28px; } h2 { font-size: 38px; } h2.dr-method, h3.dr-method, h4.dr-method, h5.dr-method { color: #900; } h2.dr-property, h3.dr-property, h4.dr-property, h5.dr-property { color: #009; } i.dr-trixie { display: none; } p.header { font-size: 19px; font-weight: 600; margin: 1em 0 .3em; } .dr-returns { margin-top: 16px; } .dr-returns .dr-title { float: left; margin-right: 16px; width: 160px; } a.dr-hash, a.dr-link, a.dr-sourceline { display: none; } p { margin: 0 0 .5em; }g.raphael-0.5/g.bar.js0000644000175600017570000004751211654171544013630 0ustar pravipravi/*! * g.Raphael 0.5 - Charting library, based on Raphaël * * Copyright (c) 2009 Dmitry Baranovskiy (http://g.raphaeljs.com) * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license. */ (function () { var mmin = Math.min, mmax = Math.max; function finger(x, y, width, height, dir, ending, isPath, paper) { var path, ends = { round: 'round', sharp: 'sharp', soft: 'soft', square: 'square' }; // dir 0 for horizontal and 1 for vertical if ((dir && !height) || (!dir && !width)) { return isPath ? "" : paper.path(); } ending = ends[ending] || "square"; height = Math.round(height); width = Math.round(width); x = Math.round(x); y = Math.round(y); switch (ending) { case "round": if (!dir) { var r = ~~(height / 2); if (width < r) { r = width; path = [ "M", x + .5, y + .5 - ~~(height / 2), "l", 0, 0, "a", r, ~~(height / 2), 0, 0, 1, 0, height, "l", 0, 0, "z" ]; } else { path = [ "M", x + .5, y + .5 - r, "l", width - r, 0, "a", r, r, 0, 1, 1, 0, height, "l", r - width, 0, "z" ]; } } else { r = ~~(width / 2); if (height < r) { r = height; path = [ "M", x - ~~(width / 2), y, "l", 0, 0, "a", ~~(width / 2), r, 0, 0, 1, width, 0, "l", 0, 0, "z" ]; } else { path = [ "M", x - r, y, "l", 0, r - height, "a", r, r, 0, 1, 1, width, 0, "l", 0, height - r, "z" ]; } } break; case "sharp": if (!dir) { var half = ~~(height / 2); path = [ "M", x, y + half, "l", 0, -height, mmax(width - half, 0), 0, mmin(half, width), half, -mmin(half, width), half + (half * 2 < height), "z" ]; } else { half = ~~(width / 2); path = [ "M", x + half, y, "l", -width, 0, 0, -mmax(height - half, 0), half, -mmin(half, height), half, mmin(half, height), half, "z" ]; } break; case "square": if (!dir) { path = [ "M", x, y + ~~(height / 2), "l", 0, -height, width, 0, 0, height, "z" ]; } else { path = [ "M", x + ~~(width / 2), y, "l", 1 - width, 0, 0, -height, width - 1, 0, "z" ]; } break; case "soft": if (!dir) { r = mmin(width, Math.round(height / 5)); path = [ "M", x + .5, y + .5 - ~~(height / 2), "l", width - r, 0, "a", r, r, 0, 0, 1, r, r, "l", 0, height - r * 2, "a", r, r, 0, 0, 1, -r, r, "l", r - width, 0, "z" ]; } else { r = mmin(Math.round(width / 5), height); path = [ "M", x - ~~(width / 2), y, "l", 0, r - height, "a", r, r, 0, 0, 1, r, -r, "l", width - 2 * r, 0, "a", r, r, 0, 0, 1, r, r, "l", 0, height - r, "z" ]; } } if (isPath) { return path.join(","); } else { return paper.path(path); } } /* * Vertical Barchart */ function VBarchart(paper, x, y, width, height, values, opts) { opts = opts || {}; var chartinst = this, type = opts.type || "square", gutter = parseFloat(opts.gutter || "20%"), chart = paper.set(), bars = paper.set(), covers = paper.set(), covers2 = paper.set(), total = Math.max.apply(Math, values), stacktotal = [], multi = 0, colors = opts.colors || chartinst.colors, len = values.length; if (Raphael.is(values[0], "array")) { total = []; multi = len; len = 0; for (var i = values.length; i--;) { bars.push(paper.set()); total.push(Math.max.apply(Math, values[i])); len = Math.max(len, values[i].length); } if (opts.stacked) { for (var i = len; i--;) { var tot = 0; for (var j = values.length; j--;) { tot +=+ values[j][i] || 0; } stacktotal.push(tot); } } for (var i = values.length; i--;) { if (values[i].length < len) { for (var j = len; j--;) { values[i].push(0); } } } total = Math.max.apply(Math, opts.stacked ? stacktotal : total); } total = (opts.to) || total; var barwidth = width / (len * (100 + gutter) + gutter) * 100, barhgutter = barwidth * gutter / 100, barvgutter = opts.vgutter == null ? 20 : opts.vgutter, stack = [], X = x + barhgutter, Y = (height - 2 * barvgutter) / total; if (!opts.stretch) { barhgutter = Math.round(barhgutter); barwidth = Math.floor(barwidth); } !opts.stacked && (barwidth /= multi || 1); for (var i = 0; i < len; i++) { stack = []; for (var j = 0; j < (multi || 1); j++) { var h = Math.round((multi ? values[j][i] : values[i]) * Y), top = y + height - barvgutter - h, bar = finger(Math.round(X + barwidth / 2), top + h, barwidth, h, true, type, null, paper).attr({ stroke: "none", fill: colors[multi ? j : i] }); if (multi) { bars[j].push(bar); } else { bars.push(bar); } bar.y = top; bar.x = Math.round(X + barwidth / 2); bar.w = barwidth; bar.h = h; bar.value = multi ? values[j][i] : values[i]; if (!opts.stacked) { X += barwidth; } else { stack.push(bar); } } if (opts.stacked) { var cvr; covers2.push(cvr = paper.rect(stack[0].x - stack[0].w / 2, y, barwidth, height).attr(chartinst.shim)); cvr.bars = paper.set(); var size = 0; for (var s = stack.length; s--;) { stack[s].toFront(); } for (var s = 0, ss = stack.length; s < ss; s++) { var bar = stack[s], cover, h = (size + bar.value) * Y, path = finger(bar.x, y + height - barvgutter - !!size * .5, barwidth, h, true, type, 1, paper); cvr.bars.push(bar); size && bar.attr({path: path}); bar.h = h; bar.y = y + height - barvgutter - !!size * .5 - h; covers.push(cover = paper.rect(bar.x - bar.w / 2, bar.y, barwidth, bar.value * Y).attr(chartinst.shim)); cover.bar = bar; cover.value = bar.value; size += bar.value; } X += barwidth; } X += barhgutter; } covers2.toFront(); X = x + barhgutter; if (!opts.stacked) { for (var i = 0; i < len; i++) { for (var j = 0; j < (multi || 1); j++) { var cover; covers.push(cover = paper.rect(Math.round(X), y + barvgutter, barwidth, height - barvgutter).attr(chartinst.shim)); cover.bar = multi ? bars[j][i] : bars[i]; cover.value = cover.bar.value; X += barwidth; } X += barhgutter; } } chart.label = function (labels, isBottom) { labels = labels || []; this.labels = paper.set(); var L, l = -Infinity; if (opts.stacked) { for (var i = 0; i < len; i++) { var tot = 0; for (var j = 0; j < (multi || 1); j++) { tot += multi ? values[j][i] : values[i]; if (j == multi - 1) { var label = paper.labelise(labels[i], tot, total); L = paper.text(bars[i * (multi || 1) + j].x, y + height - barvgutter / 2, label).attr(txtattr).insertBefore(covers[i * (multi || 1) + j]); var bb = L.getBBox(); if (bb.x - 7 < l) { L.remove(); } else { this.labels.push(L); l = bb.x + bb.width; } } } } } else { for (var i = 0; i < len; i++) { for (var j = 0; j < (multi || 1); j++) { var label = paper.labelise(multi ? labels[j] && labels[j][i] : labels[i], multi ? values[j][i] : values[i], total); L = paper.text(bars[i * (multi || 1) + j].x, isBottom ? y + height - barvgutter / 2 : bars[i * (multi || 1) + j].y - 10, label).attr(txtattr).insertBefore(covers[i * (multi || 1) + j]); var bb = L.getBBox(); if (bb.x - 7 < l) { L.remove(); } else { this.labels.push(L); l = bb.x + bb.width; } } } } return this; }; chart.hover = function (fin, fout) { covers2.hide(); covers.show(); covers.mouseover(fin).mouseout(fout); return this; }; chart.hoverColumn = function (fin, fout) { covers.hide(); covers2.show(); fout = fout || function () {}; covers2.mouseover(fin).mouseout(fout); return this; }; chart.click = function (f) { covers2.hide(); covers.show(); covers.click(f); return this; }; chart.each = function (f) { if (!Raphael.is(f, "function")) { return this; } for (var i = covers.length; i--;) { f.call(covers[i]); } return this; }; chart.eachColumn = function (f) { if (!Raphael.is(f, "function")) { return this; } for (var i = covers2.length; i--;) { f.call(covers2[i]); } return this; }; chart.clickColumn = function (f) { covers.hide(); covers2.show(); covers2.click(f); return this; }; chart.push(bars, covers, covers2); chart.bars = bars; chart.covers = covers; return chart; }; /** * Horizontal Barchart */ function HBarchart(paper, x, y, width, height, values, opts) { opts = opts || {}; var chartinst = this, type = opts.type || "square", gutter = parseFloat(opts.gutter || "20%"), chart = paper.set(), bars = paper.set(), covers = paper.set(), covers2 = paper.set(), total = Math.max.apply(Math, values), stacktotal = [], multi = 0, colors = opts.colors || chartinst.colors, len = values.length; if (Raphael.is(values[0], "array")) { total = []; multi = len; len = 0; for (var i = values.length; i--;) { bars.push(paper.set()); total.push(Math.max.apply(Math, values[i])); len = Math.max(len, values[i].length); } if (opts.stacked) { for (var i = len; i--;) { var tot = 0; for (var j = values.length; j--;) { tot +=+ values[j][i] || 0; } stacktotal.push(tot); } } for (var i = values.length; i--;) { if (values[i].length < len) { for (var j = len; j--;) { values[i].push(0); } } } total = Math.max.apply(Math, opts.stacked ? stacktotal : total); } total = (opts.to) || total; var barheight = Math.floor(height / (len * (100 + gutter) + gutter) * 100), bargutter = Math.floor(barheight * gutter / 100), stack = [], Y = y + bargutter, X = (width - 1) / total; !opts.stacked && (barheight /= multi || 1); for (var i = 0; i < len; i++) { stack = []; for (var j = 0; j < (multi || 1); j++) { var val = multi ? values[j][i] : values[i], bar = finger(x, Y + barheight / 2, Math.round(val * X), barheight - 1, false, type, null, paper).attr({stroke: "none", fill: colors[multi ? j : i]}); if (multi) { bars[j].push(bar); } else { bars.push(bar); } bar.x = x + Math.round(val * X); bar.y = Y + barheight / 2; bar.w = Math.round(val * X); bar.h = barheight; bar.value = +val; if (!opts.stacked) { Y += barheight; } else { stack.push(bar); } } if (opts.stacked) { var cvr = paper.rect(x, stack[0].y - stack[0].h / 2, width, barheight).attr(chartinst.shim); covers2.push(cvr); cvr.bars = paper.set(); var size = 0; for (var s = stack.length; s--;) { stack[s].toFront(); } for (var s = 0, ss = stack.length; s < ss; s++) { var bar = stack[s], cover, val = Math.round((size + bar.value) * X), path = finger(x, bar.y, val, barheight - 1, false, type, 1, paper); cvr.bars.push(bar); size && bar.attr({ path: path }); bar.w = val; bar.x = x + val; covers.push(cover = paper.rect(x + size * X, bar.y - bar.h / 2, bar.value * X, barheight).attr(chartinst.shim)); cover.bar = bar; size += bar.value; } Y += barheight; } Y += bargutter; } covers2.toFront(); Y = y + bargutter; if (!opts.stacked) { for (var i = 0; i < len; i++) { for (var j = 0; j < (multi || 1); j++) { var cover = paper.rect(x, Y, width, barheight).attr(chartinst.shim); covers.push(cover); cover.bar = multi ? bars[j][i] : bars[i]; cover.value = cover.bar.value; Y += barheight; } Y += bargutter; } } chart.label = function (labels, isRight) { labels = labels || []; this.labels = paper.set(); for (var i = 0; i < len; i++) { for (var j = 0; j < multi; j++) { var label = paper.labelise(multi ? labels[j] && labels[j][i] : labels[i], multi ? values[j][i] : values[i], total), X = isRight ? bars[i * (multi || 1) + j].x - barheight / 2 + 3 : x + 5, A = isRight ? "end" : "start", L; this.labels.push(L = paper.text(X, bars[i * (multi || 1) + j].y, label).attr(txtattr).attr({ "text-anchor": A }).insertBefore(covers[0])); if (L.getBBox().x < x + 5) { L.attr({x: x + 5, "text-anchor": "start"}); } else { bars[i * (multi || 1) + j].label = L; } } } return this; }; chart.hover = function (fin, fout) { covers2.hide(); covers.show(); fout = fout || function () {}; covers.mouseover(fin).mouseout(fout); return this; }; chart.hoverColumn = function (fin, fout) { covers.hide(); covers2.show(); fout = fout || function () {}; covers2.mouseover(fin).mouseout(fout); return this; }; chart.each = function (f) { if (!Raphael.is(f, "function")) { return this; } for (var i = covers.length; i--;) { f.call(covers[i]); } return this; }; chart.eachColumn = function (f) { if (!Raphael.is(f, "function")) { return this; } for (var i = covers2.length; i--;) { f.call(covers2[i]); } return this; }; chart.click = function (f) { covers2.hide(); covers.show(); covers.click(f); return this; }; chart.clickColumn = function (f) { covers.hide(); covers2.show(); covers2.click(f); return this; }; chart.push(bars, covers, covers2); chart.bars = bars; chart.covers = covers; return chart; }; //inheritance var F = function() {}; F.prototype = Raphael.g; HBarchart.prototype = VBarchart.prototype = new F; Raphael.fn.hbarchart = function(x, y, width, height, values, opts) { return new HBarchart(this, x, y, width, height, values, opts); }; Raphael.fn.barchart = function(x, y, width, height, values, opts) { return new VBarchart(this, x, y, width, height, values, opts); }; })(); g.raphael-0.5/g.dot.js0000644000175600017570000001341011654171544013640 0ustar pravipravi/*! * g.Raphael 0.5 - Charting library, based on Raphaël * * Copyright (c) 2009 Dmitry Baranovskiy (http://g.raphaeljs.com) * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license. */ (function () { var colorValue = function (value, total, s, b) { return 'hsb(' + [Math.min((1 - value / total) * .4, 1), s || .75, b || .75] + ')'; }; function Dotchart(paper, x, y, width, height, valuesx, valuesy, size, opts) { var chartinst = this; function drawAxis(ax) { +ax[0] && (ax[0] = chartinst.axis(x + gutter, y + gutter, width - 2 * gutter, minx, maxx, opts.axisxstep || Math.floor((width - 2 * gutter) / 20), 2, opts.axisxlabels || null, opts.axisxtype || "t", null, paper)); +ax[1] && (ax[1] = chartinst.axis(x + width - gutter, y + height - gutter, height - 2 * gutter, miny, maxy, opts.axisystep || Math.floor((height - 2 * gutter) / 20), 3, opts.axisylabels || null, opts.axisytype || "t", null, paper)); +ax[2] && (ax[2] = chartinst.axis(x + gutter, y + height - gutter + maxR, width - 2 * gutter, minx, maxx, opts.axisxstep || Math.floor((width - 2 * gutter) / 20), 0, opts.axisxlabels || null, opts.axisxtype || "t", null, paper)); +ax[3] && (ax[3] = chartinst.axis(x + gutter - maxR, y + height - gutter, height - 2 * gutter, miny, maxy, opts.axisystep || Math.floor((height - 2 * gutter) / 20), 1, opts.axisylabels || null, opts.axisytype || "t", null, paper)); } opts = opts || {}; var xdim = chartinst.snapEnds(Math.min.apply(Math, valuesx), Math.max.apply(Math, valuesx), valuesx.length - 1), minx = xdim.from, maxx = xdim.to, gutter = opts.gutter || 10, ydim = chartinst.snapEnds(Math.min.apply(Math, valuesy), Math.max.apply(Math, valuesy), valuesy.length - 1), miny = ydim.from, maxy = ydim.to, len = Math.max(valuesx.length, valuesy.length, size.length), symbol = paper[opts.symbol] || "circle", res = paper.set(), series = paper.set(), max = opts.max || 100, top = Math.max.apply(Math, size), R = [], k = Math.sqrt(top / Math.PI) * 2 / max; for (var i = 0; i < len; i++) { R[i] = Math.min(Math.sqrt(size[i] / Math.PI) * 2 / k, max); } gutter = Math.max.apply(Math, R.concat(gutter)); var axis = paper.set(), maxR = Math.max.apply(Math, R); if (opts.axis) { var ax = (opts.axis + "").split(/[,\s]+/); drawAxis.call(chartinst, ax); var g = [], b = []; for (var i = 0, ii = ax.length; i < ii; i++) { var bb = ax[i].all ? ax[i].all.getBBox()[["height", "width"][i % 2]] : 0; g[i] = bb + gutter; b[i] = bb; } gutter = Math.max.apply(Math, g.concat(gutter)); for (var i = 0, ii = ax.length; i < ii; i++) if (ax[i].all) { ax[i].remove(); ax[i] = 1; } drawAxis.call(chartinst, ax); for (var i = 0, ii = ax.length; i < ii; i++) if (ax[i].all) { axis.push(ax[i].all); } res.axis = axis; } var kx = (width - gutter * 2) / ((maxx - minx) || 1), ky = (height - gutter * 2) / ((maxy - miny) || 1); for (var i = 0, ii = valuesy.length; i < ii; i++) { var sym = paper.raphael.is(symbol, "array") ? symbol[i] : symbol, X = x + gutter + (valuesx[i] - minx) * kx, Y = y + height - gutter - (valuesy[i] - miny) * ky; sym && R[i] && series.push(paper[sym](X, Y, R[i]).attr({ fill: opts.heat ? colorValue(R[i], maxR) : chartinst.colors[0], "fill-opacity": opts.opacity ? R[i] / max : 1, stroke: "none" })); } var covers = paper.set(); for (var i = 0, ii = valuesy.length; i < ii; i++) { var X = x + gutter + (valuesx[i] - minx) * kx, Y = y + height - gutter - (valuesy[i] - miny) * ky; covers.push(paper.circle(X, Y, maxR).attr(chartinst.shim)); opts.href && opts.href[i] && covers[i].attr({href: opts.href[i]}); covers[i].r = +R[i].toFixed(3); covers[i].x = +X.toFixed(3); covers[i].y = +Y.toFixed(3); covers[i].X = valuesx[i]; covers[i].Y = valuesy[i]; covers[i].value = size[i] || 0; covers[i].dot = series[i]; } res.covers = covers; res.series = series; res.push(series, axis, covers); res.hover = function (fin, fout) { covers.mouseover(fin).mouseout(fout); return this; }; res.click = function (f) { covers.click(f); return this; }; res.each = function (f) { if (!paper.raphael.is(f, "function")) { return this; } for (var i = covers.length; i--;) { f.call(covers[i]); } return this; }; res.href = function (map) { var cover; for (var i = covers.length; i--;) { cover = covers[i]; if (cover.X == map.x && cover.Y == map.y && cover.value == map.value) { cover.attr({href: map.href}); } } }; return res; }; //inheritance var F = function() {}; F.prototype = Raphael.g Dotchart.prototype = new F; //public Raphael.fn.dotchart = function(x, y, width, height, valuesx, valuesy, size, opts) { return new Dotchart(this, x, y, width, height, valuesx, valuesy, size, opts); } })(); g.raphael-0.5/g.raphael.json0000644000175600017570000000046711654171544015033 0ustar pravipravi{ "title": "g.Raphaël", "output": "../g.raphael/docs/reference.html", "scripts": ["../raphael-min.js", "../g.raphael.js", "reference.js"], "files": [{ "url": "../g.raphael/g.raphael.js", "link": "https://github.com/DmitryBaranovskiy/g.raphael/blob/master/g.raphael.js" }] } g.raphael-0.5/min/0000755000175600017570000000000011654171544013053 5ustar pravipravig.raphael-0.5/min/g.bar-min.js0000644000175600017570000001563011654171544015170 0ustar pravipravi/*! * g.Raphael 0.5 - Charting library, based on Raphaël * * Copyright (c) 2009 Dmitry Baranovskiy (http://g.raphaeljs.com) * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license. */ (function(){var f=Math.min,a=Math.max;function e(o,m,h,p,j,k,l,i){var s,n={round:"round",sharp:"sharp",soft:"soft",square:"square"};if((j&&!p)||(!j&&!h)){return l?"":i.path()}k=n[k]||"square";p=Math.round(p);h=Math.round(h);o=Math.round(o);m=Math.round(m);switch(k){case"round":if(!j){var g=~~(p/2);if(h180),1,p,N,"z"];L.middle={x:J,y:F};return L}s.covers=k;if(z==1){m.push(n.circle(h,g,t).attr({fill:c.colors[0],stroke:o.stroke||"#fff","stroke-width":o.strokewidth==null?1:o.strokewidth}));k.push(n.circle(h,g,t).attr(c.shim));D=e[0];e[0]={value:e[0],order:0,valueOf:function(){return this.value}};m[0].middle={x:h,y:g};m[0].mangle=180}else{for(var y=0;yf){B=false;e[f].value+=e[y];e[f].others=true;C=e[f].value}}z=Math.min(f+1,e.length);C&&e.splice(z)&&(e[f].others=true);for(y=0;y")}for(y=0;ye-2*q){z[ac]=a(z[ac],e-2*q);B=e-2*q}if(A[ac]&&A[ac].length>e-2*q){A[ac]=a(A[ac],e-2*q)}}var W=Array.prototype.concat.apply([],A),U=Array.prototype.concat.apply([],z),u=s.snapEnds(Math.min.apply(Math,W),Math.max.apply(Math,W),A[0].length-1),E=u.from,o=u.to,N=s.snapEnds(Math.min.apply(Math,U),Math.max.apply(Math,U),z[0].length-1),C=N.from,n=N.to,Z=(e-q*2)/((o-E)||1),V=(h-q*2)/((n-C)||1);var G=f.set();if(J.axis){var m=(J.axis+"").split(/[,\s]+/);+m[0]&&G.push(s.axis(P+q,O+q,e-2*q,E,o,J.axisxstep||Math.floor((e-2*q)/20),2,f));+m[1]&&G.push(s.axis(P+e-q,O+h-q,h-2*q,C,n,J.axisystep||Math.floor((h-2*q)/20),3,f));+m[2]&&G.push(s.axis(P+q,O+h-q,e-2*q,E,o,J.axisxstep||Math.floor((e-2*q)/20),0,f));+m[3]&&G.push(s.axis(P+q,O+h-q,h-2*q,C,n,J.axisystep||Math.floor((h-2*q)/20),1,f))}var M=f.set(),aa=f.set(),r;for(ac=0,L=z.length;ac=b*2){c.attr({path:["M",l,k+b,"a",b,b,0,1,1,0,-b*2,b,b,0,1,1,0,b*2,"m",0,-b*2-i,"a",b+i,b+i,0,1,0,0,(b+i)*2,"L",l+b+i,k+j.height/2+i,"l",j.width+2*i,0,0,-j.height-2*i,-j.width-2*i,0,"L",l,k-b-i].join(",")})}else{m=Math.sqrt(Math.pow(b+i,2)-Math.pow(j.height/2+i,2));c.attr({path:["M",l,k+b,"c",-h,0,-b,h-b,-b,-b,0,-h,b-h,-b,b,-b,h,0,b,b-h,b,b,0,h,h-b,b,-b,b,"M",l+m,k-j.height/2-i,"a",b+i,b+i,0,1,0,0,j.height+2*i,"l",b+i-m+j.width+2*i,0,0,-j.height-2*i,"L",l+m,k-j.height/2-i].join(",")})}f=360-f;c.rotate(f,l,k);if(this.attrs){this.attr(this.attrs.x?"x":"cx",l+b+i+(!a?this.type=="text"?j.width:0:j.width/2)).attr("y",a?k:k-j.height/2);this.rotate(f,l,k);f>90&&f<270&&this.attr(this.attrs.x?"x":"cx",l-b-i-(!a?j.width:j.width/2)).rotate(180,l,k)}else{if(f>90&&f<270){this.translate(l-j.x-j.width-b-i,k-j.y-j.height/2);this.rotate(f-180,j.x+j.width+b+i,j.y+j.height/2)}else{this.translate(l-j.x+b+i,k-j.y-j.height/2);this.rotate(f,j.x-b-i,j.y+j.height/2)}}return c.insertBefore(this.node?this:this[0])};Raphael.el.drop=function(d,g,f){var e=this.getBBox(),c=this.paper||this[0].paper,a,j,b,i,h;if(!c){return}switch(this.type){case"text":case"circle":case"ellipse":a=true;break;default:a=false}d=d||0;g=typeof g=="number"?g:(a?e.x+e.width/2:e.x);f=typeof f=="number"?f:(a?e.y+e.height/2:e.y);j=Math.max(e.width,e.height)+Math.min(e.width,e.height);b=c.path(["M",g,f,"l",j,0,"A",j*0.4,j*0.4,0,1,0,g+j*0.7,f-j*0.7,"z"]).attr({fill:"#000",stroke:"none"}).rotate(22.5-d,g,f);d=(d+90)*Math.PI/180;i=(g+j*Math.sin(d))-(a?0:e.width/2);h=(f+j*Math.cos(d))-(a?0:e.height/2);this.attrs?this.attr(this.attrs.x?"x":"cx",i).attr(this.attrs.y?"y":"cy",h):this.translate(i-e.x,h-e.y);return b.insertBefore(this.node?this:this[0])};Raphael.el.flag=function(e,k,j){var g=3,c=this.paper||this[0].paper;if(!c){return}var b=c.path().attr({fill:"#000",stroke:"#000"}),i=this.getBBox(),f=i.height/2,a;switch(this.type){case"text":case"circle":case"ellipse":a=true;break;default:a=false}e=e||0;k=typeof k=="number"?k:(a?i.x+i.width/2:i.x);j=typeof j=="number"?j:(a?i.y+i.height/2:i.y);b.attr({path:["M",k,j,"l",f+g,-f-g,i.width+2*g,0,0,i.height+2*g,-i.width-2*g,0,"z"].join(",")});e=360-e;b.rotate(e,k,j);if(this.attrs){this.attr(this.attrs.x?"x":"cx",k+f+g+(!a?this.type=="text"?i.width:0:i.width/2)).attr("y",a?j:j-i.height/2);this.rotate(e,k,j);e>90&&e<270&&this.attr(this.attrs.x?"x":"cx",k-f-g-(!a?i.width:i.width/2)).rotate(180,k,j)}else{if(e>90&&e<270){this.translate(k-i.x-i.width-f-g,j-i.y-i.height/2);this.rotate(e-180,i.x+i.width+f+g,i.y+i.height/2)}else{this.translate(k-i.x+f+g,j-i.y-i.height/2);this.rotate(e,i.x-f-g,i.y+i.height/2)}}return b.insertBefore(this.node?this:this[0])};Raphael.el.label=function(){var c=this.getBBox(),b=this.paper||this[0].paper,a=Math.min(20,c.width+10,c.height+10)/2;if(!b){return}return b.rect(c.x-a/2,c.y-a/2,c.width+a,c.height+a,a).attr({stroke:"none",fill:"#000"}).insertBefore(this.node?this:this[0])};Raphael.el.blob=function(z,j,i){var g=this.getBBox(),B=Math.PI/180,n=this.paper||this[0].paper,r,A,q;if(!n){return}switch(this.type){case"text":case"circle":case"ellipse":A=true;break;default:A=false}r=n.path().attr({fill:"#000",stroke:"none"});z=(+z+1?z:45)+90;q=Math.min(g.height,g.width);j=typeof j=="number"?j:(A?g.x+g.width/2:g.x);i=typeof i=="number"?i:(A?g.y+g.height/2:g.y);var m=Math.max(g.width+q,q*25/12),t=Math.max(g.height+q,q*25/12),u=j+q*Math.sin((z-22.5)*B),b=i+q*Math.cos((z-22.5)*B),v=j+q*Math.sin((z+22.5)*B),d=i+q*Math.cos((z+22.5)*B),o=(v-u)/2,l=(d-b)/2,f=m/2,e=t/2,s=-Math.sqrt(Math.abs(f*f*e*e-f*f*l*l-e*e*o*o)/(f*f*l*l+e*e*o*o)),c=s*f*l/e+(v+u)/2,a=s*-e*o/f+(d+b)/2;r.attr({x:c,y:a,path:["M",j,i,"L",v,d,"A",f,e,0,1,1,u,b,"z"].join(",")});this.translate(c-g.x-g.width/2,a-g.y-g.height/2);return r.insertBefore(this.node?this:this[0])};Raphael.fn.label=function(a,d,b){var c=this.set();b=this.text(a,d,b).attr(Raphael.g.txtattr);return c.push(b.label(),b)};Raphael.fn.popup=function(a,f,d,b,c){var e=this.set();d=this.text(a,f,d).attr(Raphael.g.txtattr);return e.push(d.popup(b,c),d)};Raphael.fn.tag=function(a,f,d,c,b){var e=this.set();d=this.text(a,f,d).attr(Raphael.g.txtattr);return e.push(d.tag(c,b),d)};Raphael.fn.flag=function(a,e,c,b){var d=this.set();c=this.text(a,e,c).attr(Raphael.g.txtattr);return d.push(c.flag(b),c)};Raphael.fn.drop=function(a,e,c,b){var d=this.set();c=this.text(a,e,c).attr(Raphael.g.txtattr);return d.push(c.drop(b),c)};Raphael.fn.blob=function(a,e,c,b){var d=this.set();c=this.text(a,e,c).attr(Raphael.g.txtattr);return d.push(c.blob(b),c)};Raphael.el.lighter=function(b){b=b||2;var a=[this.attrs.fill,this.attrs.stroke];this.fs=this.fs||[a[0],a[1]];a[0]=Raphael.rgb2hsb(Raphael.getRGB(a[0]).hex);a[1]=Raphael.rgb2hsb(Raphael.getRGB(a[1]).hex);a[0].b=Math.min(a[0].b*b,1);a[0].s=a[0].s/b;a[1].b=Math.min(a[1].b*b,1);a[1].s=a[1].s/b;this.attr({fill:"hsb("+[a[0].h,a[0].s,a[0].b]+")",stroke:"hsb("+[a[1].h,a[1].s,a[1].b]+")"});return this};Raphael.el.darker=function(b){b=b||2;var a=[this.attrs.fill,this.attrs.stroke];this.fs=this.fs||[a[0],a[1]];a[0]=Raphael.rgb2hsb(Raphael.getRGB(a[0]).hex);a[1]=Raphael.rgb2hsb(Raphael.getRGB(a[1]).hex);a[0].s=Math.min(a[0].s*b,1);a[0].b=a[0].b/b;a[1].s=Math.min(a[1].s*b,1);a[1].b=a[1].b/b;this.attr({fill:"hsb("+[a[0].h,a[0].s,a[0].b]+")",stroke:"hsb("+[a[1].h,a[1].s,a[1].b]+")"});return this};Raphael.el.resetBrightness=function(){if(this.fs){this.attr({fill:this.fs[0],stroke:this.fs[1]});delete this.fs}return this};(function(){var c=["lighter","darker","resetBrightness"],a=["popup","tag","flag","label","drop","blob"];for(var b in a){(function(d){Raphael.st[d]=function(){return Raphael.el[d].apply(this,arguments)}})(a[b])}for(var b in c){(function(d){Raphael.st[d]=function(){for(var e=0;e0?0:0.5))*Math.pow(10,b))/Math.pow(10,b);return{from:e,to:l,power:b}},axis:function(p,o,k,D,e,G,g,J,h,a,q){a=a==null?2:a;h=h||"t";G=G||10;q=arguments[arguments.length-1];var C=h=="|"||h==" "?["M",p+0.5,o,"l",0,0.001]:g==1||g==3?["M",p+0.5,o,"l",0,-k]:["M",p,o+0.5,"l",k,0],s=this.snapEnds(D,e,G),H=s.from,z=s.to,F=s.power,E=0,w={font:"11px 'Fontin Sans', Fontin-Sans, sans-serif"},v=q.set(),I;I=(z-H)/G;var n=H,m=F>0?F:0;r=k/G;if(+g==1||+g==3){var b=o,u=(g-1?1:-1)*(a+3+!!(g-1));while(b>=o-k){h!="-"&&h!=" "&&(C=C.concat(["M",p-(h=="+"||h=="|"?a:!(g-1)*a*2),b+0.5,"l",a*2+1,0]));v.push(q.text(p+u,b,(J&&J[E++])||(Math.round(n)==n?n:+n.toFixed(m))).attr(w).attr({"text-anchor":g-1?"start":"end"}));n+=I;b-=r}if(Math.round(b+r-(o-k))){h!="-"&&h!=" "&&(C=C.concat(["M",p-(h=="+"||h=="|"?a:!(g-1)*a*2),o-k+0.5,"l",a*2+1,0]));v.push(q.text(p+u,o-k,(J&&J[E])||(Math.round(n)==n?n:+n.toFixed(m))).attr(w).attr({"text-anchor":g-1?"start":"end"}))}}else{n=H;m=(F>0)*F;u=(g?-1:1)*(a+9+!g);var c=p,r=k/G,A=0,B=0;while(c<=p+k){h!="-"&&h!=" "&&(C=C.concat(["M",c+0.5,o-(h=="+"?a:!!g*a*2),"l",0,a*2+1]));v.push(A=q.text(c,o+u,(J&&J[E++])||(Math.round(n)==n?n:+n.toFixed(m))).attr(w));var l=A.getBBox();if(B>=l.x-5){v.pop(v.length-1).remove()}else{B=l.x+l.width}n+=I;c+=r}if(Math.round(c-r-p-k)){h!="-"&&h!=" "&&(C=C.concat(["M",p+k+0.5,o-(h=="+"?a:!!g*a*2),"l",0,a*2+1]));v.push(q.text(p+k,o+u,(J&&J[E])||(Math.round(n)==n?n:+n.toFixed(m))).attr(w))}}var K=q.path(C);K.text=v;K.all=q.set([K,v]);K.remove=function(){this.text.remove();this.constructor.prototype.remove.call(this)};return K},labelise:function(a,c,b){if(a){return(a+"").replace(/(##+(?:\.#+)?)|(%%+(?:\.%+)?)/g,function(d,f,e){if(f){return(+c).toFixed(f.replace(/^#+\.?/g,"").length)}if(e){return(c*100/b).toFixed(e.replace(/^%+\.?/g,"").length)+"%"}})}else{return(+c).toFixed(0)}}};g.raphael-0.5/README.markdown0000644000175600017570000000304711654171544014775 0ustar pravipravig.Raphaël - Official charting plugin for Raphaël ========= For more information, see: http://g.raphaeljs.com/ Changelog --------- **v0.5** * Refactored codebase and API to work with Raphaël 2.0 * `g` is no longer a namespace, but instead a prototype object that all charts inherit. See documentation for all configurable options on the `g` prototype. * `g.markers` has been removed. The marker parameter strings now just try and resolve functions on the Paper prototype. * All primitive shapes have been removed. They are now part of Raphaël core in `plugins/` * The companion function `original` to the brightness functions `lighter` and `darker` has been renamed to `resetBrightness` to account for the `g` namespace removal * Tooltips have been modified/enhanced in the following ways: * All tooltips can now be called on any Element or Set instance, as well as from the paper object. * All tooltip `update` functions have been removed. Tooltip functions now return their path element. It is up to the caller to manage both the Element or set that is used as the context and the path element that was drawn by the tooltip function. * All tooltip `dir` options have been changed from `0`, `1`, `2`, `3`, to `'down'`, `'left'`, `'up'`, `'right'` repectively. * `blob` and `drop` tooltips no longer accept `size` parameters. Instead, the bounding box of the Element/Set being used as content is used to automatically determine the size. * `popupit` and `labelit` have been removed. Their functionality is now the default behavior of all tooltips