
2. Fixed the bug NIHVIVO-1595. Now for https: sites the sparkline visualizations are rendered by generating a chart image url instead of going throught the google visualization API. This image is directly placed in the container. For http sites it follows the old procedure.
95 lines
No EOL
3.3 KiB
JavaScript
95 lines
No EOL
3.3 KiB
JavaScript
/**
|
|
* For rendering images dynamically.
|
|
*
|
|
*/
|
|
$.fn.image = function(src, successFunc, failureFunc){
|
|
return this.each(function(){
|
|
var profileImage = new Image();
|
|
profileImage.onerror = failureFunc;
|
|
profileImage.onload = successFunc;
|
|
profileImage.src = src;
|
|
|
|
return profileImage;
|
|
});
|
|
};
|
|
|
|
|
|
/**
|
|
* Function by Google Charts API Team to do "extended encode" of data.
|
|
*/
|
|
function extendedEncodeDataForChartURL(arrVals, maxVal) {
|
|
|
|
var EXTENDED_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-.';
|
|
var EXTENDED_MAP_LENGTH = EXTENDED_MAP.length;
|
|
var chartData = 'e:';
|
|
|
|
for (i = 0, len = arrVals.length; i < len; i++) {
|
|
// In case the array vals were translated to strings.
|
|
var numericVal = new Number(arrVals[i]);
|
|
// Scale the value to maxVal.
|
|
var scaledVal = Math.floor(EXTENDED_MAP_LENGTH * EXTENDED_MAP_LENGTH * numericVal / maxVal);
|
|
|
|
if (scaledVal > (EXTENDED_MAP_LENGTH * EXTENDED_MAP_LENGTH) - 1) {
|
|
chartData += "..";
|
|
} else if (scaledVal < 0) {
|
|
chartData += '__';
|
|
} else {
|
|
// Calculate first and second digits and add them to the output.
|
|
var quotient = Math.floor(scaledVal / EXTENDED_MAP_LENGTH);
|
|
var remainder = scaledVal - EXTENDED_MAP_LENGTH * quotient;
|
|
chartData += EXTENDED_MAP.charAt(quotient) + EXTENDED_MAP.charAt(remainder);
|
|
}
|
|
}
|
|
|
|
return chartData;
|
|
}
|
|
|
|
/**
|
|
* This will be used for getting images directly from the secure https://charts.googleapis.com
|
|
* instead of http://charts.apis.google.com which currently throws security warnings.
|
|
*
|
|
* see http://code.google.com/apis/chart/docs/chart_params.html FOR chart parameters
|
|
* see http://code.google.com/apis/chart/docs/data_formats.html FOR how to encode data
|
|
*
|
|
* sample constructed URL - https://chart.googleapis.com/chart?cht=ls&chs=148x58&chdlp=r&chco=3399CC&chd=e%3AW2ttpJbb..ttgAbbNtAA
|
|
*/
|
|
function constructVisualizationURLForSparkline(dataString, visualizationOptions) {
|
|
|
|
/*
|
|
* Since we are directly going to use this URL in img tag, we are supposed to enocde "&"
|
|
* update: But since we are directly using it in an Image creating function we dont need to encode it.
|
|
*/
|
|
//var parameterDifferentiator = "&";
|
|
var parameterDifferentiator = "&";
|
|
|
|
var rootGoogleChartAPI_URL = "https://chart.googleapis.com/chart?";
|
|
|
|
/*
|
|
* cht=ls indicates chart of type "line chart sparklines".
|
|
* see http://code.google.com/apis/chart/docs/gallery/chart_gall.html
|
|
*/
|
|
var chartType = "cht=" + visualizationOptions.chartType;
|
|
|
|
/*
|
|
* It seems google reduces 2px from width & height before rendering the actual image.
|
|
* We will do the same.
|
|
*/
|
|
var chartSize = "chs=" + (visualizationOptions.width - 2) + "x" + (visualizationOptions.height - 2);
|
|
|
|
/*
|
|
* It means that legend, if present, is to be displayed to the right of the chart,
|
|
* legend entries in a vertical column.
|
|
*/
|
|
var chartLabelPosition = "chdlp=" + visualizationOptions.chartLabel;
|
|
|
|
/*
|
|
* Color of the sparkline.
|
|
*/
|
|
var chartColor = "chco=" + visualizationOptions.color;
|
|
|
|
return rootGoogleChartAPI_URL + chartType + parameterDifferentiator
|
|
+ chartSize + parameterDifferentiator
|
|
+ chartLabelPosition + parameterDifferentiator
|
|
+ chartColor + parameterDifferentiator
|
|
+ "chd=" + dataString
|
|
} |