MINI Sh3ll
/**
* Graph Duration Code Referencce
*
* 1-> Today -> 1,24 (Hours)
* 2-> Daily -> 1,31 (Days)
* 3-> Monthly -> Jan,Dec (Month)
* 4-> Last Day -> (Only for numeric, Not for graph)
*
*
* Check for data type for x and y
* x-Int,Y-date -> Y will contain default values according to graph duration and X will have Max of Time
* x-Int,Y-Int -> Show as it is
* x-Date,Y-Int -> X will contain default values according to graph duration and Y will have Max of Time
* x-Date,Y-date -> Discard with default values(0)
*/
function plotChart(ajaxResponse,id,ajaxInput,charttype) {
$('canvas#graphical_'+id).remove();
if(ajaxInput.type == 'preview'){
$('canvas').remove();
$('.plant_names').html('');
}
$('#loader_'+id).show();
$('#no-response_'+id).hide();
$('#loader_'+id).hide();
$('#no-response_'+id).hide();
if (ajaxResponse.status==false) {
$('#loader_'+id).hide();
$('#no-response_'+id).show();
$('#container_graphical_'+id).empty();
return;
}
var response = ajaxResponse.records;
var month_name = function(dt){
mlist = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ];
//mlist = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sept", "Oct", "Nov", "Dec" ];
return mlist[dt.getMonth()];
};
var fill = false;
var status = false;
var datasetValue = [];
// var linedata = [];
var xValue = [];
// var yValue = [];
var count = response.length;
var canvas = "graphical_"+id;
$('#container_graphical_'+id).append('<canvas id="'+canvas+'" height="280" width="500"></canvas>');
if(charttype == 'area') {
fill = true;
charttype = 'line';
}
if(charttype == 'bar' || charttype=='horizontalBar') {
status = true;
}
var label = '';
var type = charttype;
var yLabel = {
display: true,
labelString: humanize(ajaxInput['y_value']),
};
var xLabel = {
display: true,
labelString: label
};
var xAxis = {
stacked: status,
gridLines: {
display: false
},
ticks: {
padding: 20,
fontColor: "rgba(0,0,0,0.5)",
fontStyle: "bold",
autoSkip: false
},
scaleLabel: xLabel
};
if(charttype=='pie') {
var options = {
responsive: true,
animation: {
duration: 10,
},
tooltips: {
mode: 'label',
},
legend: {
display: true,
position: 'right',
}
};
} else {
var options = {
responsive: true,
animation: {
duration: 10,
},
tooltips: {
mode: 'label',
},
scales: {
yAxes: [{
stacked: status,
ticks: {
beginAtZero: true
},
scaleLabel: yLabel
}],
xAxes: [xAxis]
},
};
}
//Generate Labels for X and Y Axes
var temp = response[0];
if(temp){
if(temp.x_label){
xLabel.labelString = temp.x_label;
}else{
xLabel.labelString = humanize(ajaxInput['x_value']);
}
if(temp.y_label){
yLabel.labelString = temp.y_label;
}else{
yLabel.labelString = humanize(ajaxInput['y_value']);
}
}
/*change lable for horizontal bar*/
if(charttype=='horizontalBar') {
var temp = xLabel.labelString;
xLabel.labelString = yLabel.labelString;
yLabel.labelString = temp;
}
//Generate X axes labels
response[0].records.forEach(function(item) {
xValue.push(item.x);
});
//For Scatter annd bubble chart which only accepts numeric values
if(ajaxInput.graph_duration==3 && response.x_time){
xAxis.type = 'category';
}
//Reverse Value for X and Y Co-ordinates for horizontal Bar
if(charttype=='horizontalBar') {
response.forEach(function(rec){
rec.records.forEach(function(item) {
var itemX= item.x;
item.x = item.y;
item.y = itemX;
});
});
}
//Flatten Array for pie chart
var colors = [];
if(charttype=='pie') {
response.forEach(function(rec,index){
rec.records = rec.records.map(function(item) {
if(index==0){
colors.push(getRandomColor());
}
return item.y;
});
});
}
//Generate Datasets for each plants along with color
for (var j = 0; j < count; j++) {
var color = response[j]['chart_color'];
datasetValue[j] = {
label: response[j]['label'],
fill: fill,
strokeColor: 'rgba(220,220,220,1)',
backgroundColor: colors.length>0?colors:color,
borderColor: colors.length>0?colors:color,
hoverBackgroundColor: colors.length>0?colors:color,
hoverBorderWidth: 2,
data: response[j].records
}
}
//Config Object for chartjs
var config = {
type: type,
data: {
labels: xValue,
datasets: datasetValue
},
options: options
};
//Seperate Graph for each Pie Chart
if(charttype=='pie'){
var cacheObj = JSON.stringify(config);
var $container = $("#container_graphical_"+id).addClass('row');
$container.empty();
var addClass = 'col-sm-12 mt-2 text-center font-weight-bold';
var canvasClass = 'm-4';
if(datasetValue.length > 1) {
addClass = 'col-sm-6 mt-2 text-center font-weight-bold';
canvasClass = 'mt-3';
}
datasetValue.forEach(function(item,index){
$innerClass = $("<div/>").addClass(addClass).attr("id","chart_pie_inner_div"+id+"_"+index);
$container.append($innerClass);
$canvas = $("<canvas/>").addClass(canvasClass).attr("id","chart_pie_"+id+"_"+index+ 'height="280" width="500"');
$innerClass.append($canvas);
$innerClass.append('<span class="plant_names_pie m-3">'+item.label+'</span>');
(function(canvas,config){
config.data.datasets = [item];
var ctx = canvas.get(0).getContext('2d');
var chart = new Chart(ctx, config);
//Store it in data object for future reference
canvas.data("chart",chart);
})($canvas,JSON.parse(cacheObj));
});
//Exit function to stop further proccessing
return;
}
//Get Canvas Context
// var ctx = document.getElementById('graphical_'+id).getContext('2d');
var $canvas = $("#graphical_"+id);
var ctx = $canvas.get(0).getContext('2d');
//Generate Chart using chartjs
var chart = new Chart(ctx, config);
//Store it in data object for future reference
$canvas.data("chart",chart);
}
function getRandomColor() {
var letters = '0123456789ABCDEF';
var color = '#';
for (var i = 0; i < 6; i++) {
color += letters[Math.floor(Math.random() * 16)];
}
return color;
}
function humanize(str) {
var i, frags = str.split('_');
for (i=0; i<frags.length; i++) {
frags[i] = frags[i].charAt(0).toUpperCase() + frags[i].slice(1);
}
return frags.join(' ');
}
OHA YOOOO