html5 boiler plate
[scannr.git] / js / flotr2 / js / types / radar.js
blob:a/js/flotr2/js/types/radar.js -> blob:b/js/flotr2/js/types/radar.js
  /** Radar **/
  Flotr.addType('radar', {
  options: {
  show: false, // => setting to true will show radar chart, false will hide
  lineWidth: 2, // => line width in pixels
  fill: true, // => true to fill the area from the line to the x axis, false for (transparent) no fill
  fillOpacity: 0.4, // => opacity of the fill color, set to 1 for a solid fill, 0 hides the fill
  radiusRatio: 0.90 // => ratio of the radar, against the plot size
  },
  draw : function (options) {
  var
  context = options.context,
  shadowSize = options.shadowSize;
   
  context.save();
  context.translate(options.width / 2, options.height / 2);
  context.lineWidth = options.lineWidth;
   
  // Shadow
  context.fillStyle = 'rgba(0,0,0,0.05)';
  context.strokeStyle = 'rgba(0,0,0,0.05)';
  this.plot(options, shadowSize / 2);
  context.strokeStyle = 'rgba(0,0,0,0.1)';
  this.plot(options, shadowSize / 4);
   
  // Chart
  context.strokeStyle = options.color;
  context.fillStyle = options.fillStyle;
  this.plot(options);
   
  context.restore();
  },
  plot : function (options, offset) {
  var
  data = options.data,
  context = options.context,
  radius = Math.min(options.height, options.width) * options.radiusRatio / 2,
  step = 2 * Math.PI / data.length,
  angle = -Math.PI / 2,
  i, ratio;
   
  offset = offset || 0;
   
  context.beginPath();
  for (i = 0; i < data.length; ++i) {
  ratio = data[i][1] / this.max;
   
  context[i === 0 ? 'moveTo' : 'lineTo'](
  Math.cos(i * step + angle) * radius * ratio + offset,
  Math.sin(i * step + angle) * radius * ratio + offset
  );
  }
  context.closePath();
  if (options.fill) context.fill();
  context.stroke();
  },
  extendYRange : function (axis, data) {
  this.max = Math.max(axis.max, this.max || -Number.MAX_VALUE);
  }
  });