// Generated by CoffeeScript 1.3.3 (function() { var $, defaults, tallestPoint; $ = jQuery; tallestPoint = function(lines, x) { var computedValues, ret; computedValues = $.map(lines, function(line) { var prevPoint, ret; prevPoint = null; ret = null; $.map(line['data'], function(datum, i) { var slope, xdiff; if (x >= datum['x']) { prevPoint = datum; return; } if (x < datum['x']) { if (prevPoint === null) { ret = datum['y']; return; } xdiff = x - prevPoint['x']; slope = (datum['y'] - prevPoint['y']) / (datum['x'] - prevPoint['x']); ret = prevPoint['y'] + slope * (x - prevPoint['x']); } }); return ret; }); ret = null; $.each(computedValues, function(i, v) { if ((v != null) && (!(ret != null) || ret < v)) { return ret = v; } }); return ret; }; defaults = { marker: 'url(marker.png)', dateFormat: '%b %e', tooltip: { x: 30, y: 10 } }; $.fn.epochchart = function(lines, markers, opts) { var chart, defaultHighchartsOpts, highchartsOpts, markerData, markerLine, maxY; if (opts == null) { opts = {}; } opts = $.extend(true, {}, defaults, opts); if (Object.prototype.toString.call(lines) !== '[object Array]') { lines = [lines]; } defaultHighchartsOpts = { title: { text: null }, xAxis: { type: 'datetime', dateTimeLabelFormats: { day: opts.dateFormat, year: '%b' } }, yAxis: { title: { text: null }, plotLines: [ { value: 0, width: 1, color: '#808080' } ] }, tooltip: { formatter: function() { var date, s; date = Highcharts.dateFormat(opts.dateFormat, this.x); s = '' + date + '
'; if (this.point.name != null) { s += this.point.name; } else { s += "" + this.series.name + ": " + this.y; } return s; }, positioner: function() { return { x: opts.tooltip.x, y: opts.tooltip.y }; } }, plotOptions: { scatter: { marker: { symbol: opts['marker'], states: { hover: { enabled: true, lineColor: 'rgb(100,100,100)' } } }, states: { hover: { marker: { enabled: false } } } }, spline: { marker: { enabled: false } } }, legend: { enabled: false } }; highchartsOpts = $.extend(true, defaultHighchartsOpts, opts['highchartsOpts']); maxY = null; lines = $.map(lines, function(line) { var lineData; lineData = $.map(line.data, function(data) { if (maxY === null || data[1] > maxY) { maxY = data[1]; } return { x: new Date(data[0]), y: data[1] }; }); return { type: 'spline', name: line.name, data: lineData }; }); markerData = $.map(markers, function(marker) { return { x: new Date(marker[0]), y: tallestPoint(lines, marker[0]), name: marker[1] }; }); markerLine = { type: 'scatter', name: 'Markers', data: markerData }; lines.push(markerLine); chart = $.extend(true, highchartsOpts, { series: lines }); return $(this).highcharts(chart); }; }).call(this);