[Back] /*
* Copyright (c) 2023 LatePoint LLC. All rights reserved.
*/
function latepoint_init_daily_bookings_chart() {
if (typeof Chart === 'undefined' || !jQuery('#chartDailyBookings').length) return
let $dailyBookingsChart = jQuery('#chartDailyBookings');
let dailyBookingsLabels = $dailyBookingsChart.data('chart-labels').toString().split(',');
let dailyBookingsValues = $dailyBookingsChart.data('chart-values').toString().split(',').map(Number);
let dailyBookingsChartMax = Math.max.apply(Math, dailyBookingsValues);
// calculate max Y to have space for a tooltip
let canvasHeight = 200
let spaceForTooltip = 160
let maxValue = dailyBookingsChartMax + spaceForTooltip * dailyBookingsChartMax / canvasHeight + 1
var fontFamily = latepoint_helper.body_font_family;
Chart.Tooltip.positioners.top = function (items) {
const pos = Chart.Tooltip.positioners.average(items);
// Happens when nothing is found
if (pos === false) {
return false;
}
const chart = this.chart;
return {
x: pos.x,
y: chart.chartArea.top,
xAlign: 'center',
yAlign: 'bottom',
};
};
Chart.defaults.defaultFontFamily = fontFamily;
Chart.defaults.defaultFontSize = 18;
Chart.defaults.defaultFontStyle = '400';
Chart.defaults.plugins.tooltip.titleFont = {
family: fontFamily,
size: 14,
color: 'rgba(255,255,255,0.6)',
style: 'normal',
weight: 400
}
Chart.defaults.plugins.tooltip.titleFont = {family: fontFamily, size: 14, weight: 400};
Chart.defaults.plugins.tooltip.titleColor = 'rgba(255,255,255,0.6)';
Chart.defaults.plugins.tooltip.backgroundColor = '#000';
Chart.defaults.plugins.tooltip.titleMarginBottom = 5;
Chart.defaults.plugins.tooltip.bodyFont = {family: fontFamily, size: 24, weight: 700, lineHeight: 0.8};
Chart.defaults.plugins.tooltip.displayColors = false;
Chart.defaults.plugins.tooltip.padding = 10;
Chart.defaults.plugins.tooltip.yAlign = 'bottom';
Chart.defaults.plugins.tooltip.xAlign = 'center';
Chart.defaults.plugins.tooltip.cornerRadius = 14;
Chart.defaults.plugins.tooltip.caretSize = 5;
Chart.defaults.plugins.tooltip.position = 'top';
var ctx = $dailyBookingsChart[0].getContext("2d");
var gradientStroke = ctx.createLinearGradient(500, 0, 100, 0);
gradientStroke.addColorStop(0, '#219ff8');
gradientStroke.addColorStop(1, '#219ff8');
let gradientFill = ctx.createLinearGradient(0, 0, 0, 140);
gradientFill.addColorStop(0, 'rgba(195, 229, 253, 0.9)');
gradientFill.addColorStop(1, 'rgba(195, 229, 253, 0.1)');
// line chart data
var chartDailyBookingsData = {
labels: dailyBookingsLabels,
datasets: [{
backgroundColor: gradientFill,
borderColor: gradientStroke,
label: "",
fill: true,
lineTension: 0.3,
borderWidth: 2,
borderCapStyle: 'butt',
borderDash: [],
borderDashOffset: 0.0,
borderJoinStyle: 'miter',
pointBorderColor: "#fff",
pointBackgroundColor: "#219ff8",
pointRadius: 3,
pointBorderWidth: 2,
pointHoverRadius: 6,
pointHoverBorderWidth: 4,
pointHoverBackgroundColor: "#219ff8",
pointHoverBorderColor: "#fff",
pointHitRadius: 20,
spanGaps: false,
data: dailyBookingsValues,
}]
};
let options = {
animation: false,
layout: {
padding: {
top: 0
}
},
interaction: {
mode: 'index',
intersect: false,
},
maintainAspectRatio: false,
plugins: {
verticalLiner: {},
legend: {
display: false
},
},
scales: {
x: {
display: true,
ticks: {
fontFamily: fontFamily,
maxRotation: 0,
color: '#788291',
font: {
size: 10,
family: fontFamily
},
callback: function (value, index, ticks) {
if(ticks.length){
return ((index + 2) % Math.round(ticks.length/8)) ? '' : this.getLabelForValue(value)
}else{
return this.getLabelForValue(value)
}
}
},
grid: {
borderDash: [1, 5],
color: 'rgba(0,0,0,0.35)',
zeroLineColor: 'rgba(0,0,0,0.15)',
},
},
y: {
max: maxValue,
grid: {
color: 'rgba(0,0,0,0.05)',
zeroLineColor: 'rgba(0,0,0,0.05)',
},
display: false,
ticks: {
beginAtZero: true,
fontSize: '10',
fontColor: '#000'
}
}
}
}
const plugin = {
id: 'verticalLiner',
afterInit: (chart, args, opts) => {
chart.verticalLiner = {}
},
afterEvent: (chart, args, options) => {
const {inChartArea} = args
chart.verticalLiner = {draw: inChartArea}
},
beforeTooltipDraw: (chart, args, options) => {
const {draw} = chart.verticalLiner
if (!draw) return
const {ctx} = chart
const {top, bottom} = chart.chartArea
const {tooltip} = args
const x = tooltip.caretX
if (!x) return
ctx.save()
ctx.beginPath()
ctx.moveTo(x, top)
ctx.lineTo(x, bottom)
ctx.stroke()
ctx.restore()
}
}
// line chart init
let chartDailyBookings = new Chart($dailyBookingsChart, {
type: 'line',
data: chartDailyBookingsData,
options: options,
plugins: [plugin],
});
}
function latepoint_init_customer_donut_chart() {
if (typeof Chart !== 'undefined' && jQuery('.os-customer-donut-chart').length) {
var fontFamily = latepoint_helper.body_font_family;
// set defaults
Chart.defaults.defaultFontFamily = fontFamily;
Chart.defaults.defaultFontSize = 16;
Chart.defaults.defaultFontStyle = '400';
Chart.defaults.plugins.tooltip.titleFont = {family: fontFamily, size: 14, weight: 400};
Chart.defaults.plugins.tooltip.titleColor = 'rgba(255,255,255,0.6)';
Chart.defaults.plugins.tooltip.backgroundColor = '#000';
Chart.defaults.plugins.tooltip.titleMarginBottom = 1;
Chart.defaults.plugins.tooltip.bodyFont = {family: fontFamily, size: 18, weight: 500};
Chart.defaults.plugins.tooltip.displayColors = false;
Chart.defaults.plugins.tooltip.padding = 5;
Chart.defaults.plugins.tooltip.yAlign = 'bottom';
Chart.defaults.plugins.tooltip.xAlign = 'center';
Chart.defaults.plugins.tooltip.cornerRadius = 4;
Chart.defaults.plugins.tooltip.intersect = false;
jQuery('.os-customer-donut-chart').each(function (index) {
var chart_colors = jQuery(this).data('chart-colors').toString().split(',');
var chart_labels = jQuery(this).data('chart-labels').toString().split(',');
var chart_values = jQuery(this).data('chart-values').toString().split(',').map(Number);
var $chart_canvas = jQuery(this);
var chartDonut = new Chart($chart_canvas, {
type: 'doughnut',
data: {
labels: chart_labels,
datasets: [{
data: chart_values,
backgroundColor: chart_colors,
hoverBackgroundColor: chart_colors,
borderWidth: 0,
hoverBorderColor: 'transparent'
}]
},
options: {
layout: {
padding: {
top: 10,
bottom: 10,
left: 10,
right: 10
}
},
plugins: {
legend: {
display: false
},
tooltip: {
callbacks: {
title: function (tooltipItem) {
return tooltipItem[0].label;
},
label: function (tooltipItem) {
return tooltipItem.parsed;
},
}
},
},
animation: {
animateRotate: false
},
cutout: "90%",
responsive: false,
maintainAspectRatio: true,
}
});
});
}
}
function latepoint_init_donut_charts() {
if (typeof Chart !== 'undefined' && jQuery('.os-donut-chart').length) {
var fontFamily = latepoint_helper.body_font_family;
// set defaults
Chart.defaults.defaultFontFamily = fontFamily;
Chart.defaults.defaultFontSize = 18;
Chart.defaults.defaultFontStyle = '400';
Chart.defaults.plugins.tooltip.titleFont.family = fontFamily;
Chart.defaults.plugins.tooltip.titleFont.size = 14;
Chart.defaults.plugins.tooltip.titleColor = 'rgba(255,255,255,0.6)';
Chart.defaults.plugins.tooltip.backgroundColor = '#000';
Chart.defaults.plugins.tooltip.titleFont.style = '400';
Chart.defaults.plugins.tooltip.titleMarginBottom = 1;
Chart.defaults.plugins.tooltip.bodyFont.family = fontFamily;
Chart.defaults.plugins.tooltip.bodyFont.size = 24;
Chart.defaults.plugins.tooltip.bodyFont.style = '500';
Chart.defaults.plugins.tooltip.displayColors = false;
Chart.defaults.plugins.tooltip.padding.x = 10;
Chart.defaults.plugins.tooltip.padding.y = 8;
Chart.defaults.plugins.tooltip.yAlign = 'bottom';
Chart.defaults.plugins.tooltip.xAlign = 'center';
Chart.defaults.plugins.tooltip.cornerRadius = 8;
Chart.defaults.plugins.tooltip.intersect = false;
jQuery('.os-donut-chart').each(function (index) {
var chart_colors = jQuery(this).data('chart-colors').toString().split(',');
var chart_labels = jQuery(this).data('chart-labels').toString().split(',');
var chart_values = jQuery(this).data('chart-values').toString().split(',').map(Number);
var $chart_canvas = jQuery(this);
var chartDonut = new Chart($chart_canvas, {
type: 'doughnut',
data: {
labels: chart_labels,
datasets: [{
data: chart_values,
backgroundColor: chart_colors,
hoverBackgroundColor: chart_colors,
borderWidth: 0,
hoverBorderColor: 'transparent'
}]
},
options: {
layout: {
padding: {
top: 40
}
},
plugins: {
legend: {
display: false
},
tooltip: {
callbacks: {
title: function (tooltipItem, data) {
return data['labels'][tooltipItem[0]['index']];
},
label: function (tooltipItem, data) {
return data['datasets'][0]['data'][tooltipItem['index']];
}
}
}
},
animation: {
animateScale: true
},
cutoutPercentage: 96,
responsive: false,
maintainAspectRatio: true,
}
});
});
}
}
function latepoint_init_circles_charts() {
jQuery('.circle-chart').each(function (index) {
var chart_elem_id = jQuery(this).prop('id');
var max_value = jQuery(this).data('max-value');
var chart_value = jQuery(this).data('chart-value');
var chart_color = jQuery(this).data('chart-color');
var chart_color_fade = jQuery(this).data('chart-color-fade');
var myCircle = Circles.create({
id: chart_elem_id,
radius: 25,
value: chart_value,
maxValue: max_value,
width: 2,
text: function (value) {
return Math.round(value);
},
colors: [chart_color, chart_color_fade],
duration: 200,
wrpClass: 'circles-wrp',
textClass: 'circles-text',
valueStrokeClass: 'circles-valueStroke',
maxValueStrokeClass: 'circles-maxValueStroke',
styleWrapper: true,
styleText: true
});
});
}