Index: third_party/flot/jquery.flot.symbol.js |
diff --git a/third_party/flot/jquery.flot.symbol.js b/third_party/flot/jquery.flot.symbol.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..79f634971b6fa6acb9bc5ff373d160063d4aa033 |
--- /dev/null |
+++ b/third_party/flot/jquery.flot.symbol.js |
@@ -0,0 +1,71 @@ |
+/* Flot plugin that adds some extra symbols for plotting points. |
+ |
+Copyright (c) 2007-2014 IOLA and Ole Laursen. |
+Licensed under the MIT license. |
+ |
+The symbols are accessed as strings through the standard symbol options: |
+ |
+ series: { |
+ points: { |
+ symbol: "square" // or "diamond", "triangle", "cross" |
+ } |
+ } |
+ |
+*/ |
+ |
+(function ($) { |
+ function processRawData(plot, series, datapoints) { |
+ // we normalize the area of each symbol so it is approximately the |
+ // same as a circle of the given radius |
+ |
+ var handlers = { |
+ square: function (ctx, x, y, radius, shadow) { |
+ // pi * r^2 = (2s)^2 => s = r * sqrt(pi)/2 |
+ var size = radius * Math.sqrt(Math.PI) / 2; |
+ ctx.rect(x - size, y - size, size + size, size + size); |
+ }, |
+ diamond: function (ctx, x, y, radius, shadow) { |
+ // pi * r^2 = 2s^2 => s = r * sqrt(pi/2) |
+ var size = radius * Math.sqrt(Math.PI / 2); |
+ ctx.moveTo(x - size, y); |
+ ctx.lineTo(x, y - size); |
+ ctx.lineTo(x + size, y); |
+ ctx.lineTo(x, y + size); |
+ ctx.lineTo(x - size, y); |
+ }, |
+ triangle: function (ctx, x, y, radius, shadow) { |
+ // pi * r^2 = 1/2 * s^2 * sin (pi / 3) => s = r * sqrt(2 * pi / sin(pi / 3)) |
+ var size = radius * Math.sqrt(2 * Math.PI / Math.sin(Math.PI / 3)); |
+ var height = size * Math.sin(Math.PI / 3); |
+ ctx.moveTo(x - size/2, y + height/2); |
+ ctx.lineTo(x + size/2, y + height/2); |
+ if (!shadow) { |
+ ctx.lineTo(x, y - height/2); |
+ ctx.lineTo(x - size/2, y + height/2); |
+ } |
+ }, |
+ cross: function (ctx, x, y, radius, shadow) { |
+ // pi * r^2 = (2s)^2 => s = r * sqrt(pi)/2 |
+ var size = radius * Math.sqrt(Math.PI) / 2; |
+ ctx.moveTo(x - size, y - size); |
+ ctx.lineTo(x + size, y + size); |
+ ctx.moveTo(x - size, y + size); |
+ ctx.lineTo(x + size, y - size); |
+ } |
+ }; |
+ |
+ var s = series.points.symbol; |
+ if (handlers[s]) |
+ series.points.symbol = handlers[s]; |
+ } |
+ |
+ function init(plot) { |
+ plot.hooks.processDatapoints.push(processRawData); |
+ } |
+ |
+ $.plot.plugins.push({ |
+ init: init, |
+ name: 'symbols', |
+ version: '1.0' |
+ }); |
+})(jQuery); |