115 lines
4.0 KiB
JavaScript
115 lines
4.0 KiB
JavaScript
|
/**
|
||
|
* jqPlot
|
||
|
* Pure JavaScript plotting plugin using jQuery
|
||
|
*
|
||
|
* Version: 1.0.0b2_r792
|
||
|
*
|
||
|
* Copyright (c) 2009-2011 Chris Leonello
|
||
|
* jqPlot is currently available for use in all personal or commercial projects
|
||
|
* under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
|
||
|
* version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
|
||
|
* choose the license that best suits your project and use it accordingly.
|
||
|
*
|
||
|
* Although not required, the author would appreciate an email letting him
|
||
|
* know of any substantial use of jqPlot. You can reach the author at:
|
||
|
* chris at jqplot dot com or see http://www.jqplot.com/info.php .
|
||
|
*
|
||
|
* If you are feeling kind and generous, consider supporting the project by
|
||
|
* making a donation at: http://www.jqplot.com/donate.php .
|
||
|
*
|
||
|
* sprintf functions contained in jqplot.sprintf.js by Ash Searle:
|
||
|
*
|
||
|
* version 2007.04.27
|
||
|
* author Ash Searle
|
||
|
* http://hexmen.com/blog/2007/03/printf-sprintf/
|
||
|
* http://hexmen.com/js/sprintf.js
|
||
|
* The author (Ash Searle) has placed this code in the public domain:
|
||
|
* "This code is unrestricted: you are free to use it however you like."
|
||
|
*
|
||
|
*/
|
||
|
(function($) {
|
||
|
/**
|
||
|
* Class: $.jqplot.ciParser
|
||
|
* Data Renderer function which converts a custom JSON data object into jqPlot data format.
|
||
|
* Set this as a callable on the jqplot dataRenderer plot option:
|
||
|
*
|
||
|
* > plot = $.jqplot('mychart', [data], { dataRenderer: $.jqplot.ciParser, ... });
|
||
|
*
|
||
|
* Where data is an object in JSON format or a JSON encoded string conforming to the
|
||
|
* City Index API spec.
|
||
|
*
|
||
|
* Note that calling the renderer function is handled internally by jqPlot. The
|
||
|
* user does not have to call the function. The parameters described below will
|
||
|
* automatically be passed to the ciParser function.
|
||
|
*
|
||
|
* Parameters:
|
||
|
* data - JSON encoded string or object.
|
||
|
* plot - reference to jqPlot Plot object.
|
||
|
*
|
||
|
* Returns:
|
||
|
* data array in jqPlot format.
|
||
|
*
|
||
|
*/
|
||
|
$.jqplot.ciParser = function (data, plot) {
|
||
|
var ret = [],
|
||
|
line,
|
||
|
temp,
|
||
|
i, j, k, kk;
|
||
|
|
||
|
if (typeof(data) == "string") {
|
||
|
data = $.jqplot.JSON.parse(data, handleStrings);
|
||
|
}
|
||
|
|
||
|
else if (typeof(data) == "object") {
|
||
|
for (k in data) {
|
||
|
for (i=0; i<data[k].length; i++) {
|
||
|
for (kk in data[k][i]) {
|
||
|
data[k][i][kk] = handleStrings(kk, data[k][i][kk]);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
else {
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
// function handleStrings
|
||
|
// Checks any JSON encoded strings to see if they are
|
||
|
// encoded dates. If so, pull out the timestamp.
|
||
|
// Expects dates to be represented by js timestamps.
|
||
|
|
||
|
function handleStrings(key, value) {
|
||
|
var a;
|
||
|
if (value != null) {
|
||
|
if (value.toString().indexOf('Date') >= 0) {
|
||
|
//here we will try to extract the ticks from the Date string in the "value" fields of JSON returned data
|
||
|
a = /^\/Date\((-?[0-9]+)\)\/$/.exec(value);
|
||
|
if (a) {
|
||
|
return parseInt(a[1], 10);
|
||
|
}
|
||
|
}
|
||
|
return value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
for (var prop in data) {
|
||
|
line = [];
|
||
|
temp = data[prop];
|
||
|
switch (prop) {
|
||
|
case "PriceTicks":
|
||
|
for (i=0; i<temp.length; i++) {
|
||
|
line.push([temp[i]['TickDate'], temp[i]['Price']]);
|
||
|
}
|
||
|
break;
|
||
|
case "PriceBars":
|
||
|
for (i=0; i<temp.length; i++) {
|
||
|
line.push([temp[i]['BarDate'], temp[i]['Open'], temp[i]['High'], temp[i]['Low'], temp[i]['Close']]);
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
ret.push(line);
|
||
|
}
|
||
|
return ret;
|
||
|
};
|
||
|
})(jQuery);
|