2023-03-06 10:34:22 +01:00
|
|
|
/* eslint-disable */
|
|
|
|
|
|
|
|
if (typeof Chart === 'undefined') {
|
2023-03-06 11:07:58 +01:00
|
|
|
var script = document.createElement('script');
|
2023-03-06 10:34:22 +01:00
|
|
|
script.src = '//cdn.jsdelivr.net/npm/chart.js';
|
|
|
|
script.onload = function () {
|
|
|
|
window.unamiChart = false;
|
|
|
|
loadUnamiStat();
|
|
|
|
};
|
|
|
|
document.head.appendChild(script);
|
|
|
|
}
|
|
|
|
|
|
|
|
function loadUnamiStat() {
|
2023-03-06 11:07:58 +01:00
|
|
|
var unamiChart = document.getElementById('unamiChart');
|
|
|
|
if (unamiChart) {
|
|
|
|
var startAt = unamiChart.getAttribute('data-start-at');
|
|
|
|
var endAt = unamiChart.getAttribute('data-end-at');
|
|
|
|
var unit = unamiChart.getAttribute('data-unit');
|
|
|
|
var tz = unamiChart.getAttribute('data-tz');
|
|
|
|
var shareId = unamiChart.getAttribute('data-share-id');
|
|
|
|
var reload = Number(unamiChart.getAttribute('data-reload'));
|
2023-03-06 10:34:22 +01:00
|
|
|
loadUnamiDataAjax(startAt, endAt, unit, tz, shareId);
|
|
|
|
if (reload > 0) {
|
|
|
|
setInterval(function () {
|
|
|
|
loadUnamiDataAjax(startAt, endAt, unit, tz, shareId);
|
|
|
|
}, 1000 * reload);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
alert('canvas#unamiChart does not exist!');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function loadUnamiDataAjax(startAt, endAt, unit, tz, shareId) {
|
|
|
|
if (startAt == 'auto') {
|
|
|
|
startAt = new Date() * 1 - 24 * 3600 * 1000;
|
|
|
|
}
|
|
|
|
if (endAt == 'auto') {
|
|
|
|
endAt = new Date() * 1;
|
|
|
|
}
|
2023-03-06 11:07:58 +01:00
|
|
|
var unamiChart = document.getElementById('unamiChart');
|
|
|
|
var website = unamiChart.getAttribute('data-website');
|
|
|
|
var apiUrl = unamiChart.getAttribute('data-url');
|
2023-03-06 10:34:22 +01:00
|
|
|
var chartOptions = {
|
|
|
|
responsive: true,
|
|
|
|
maintainAspectRatio: false,
|
|
|
|
legend: { position: 'top' },
|
|
|
|
scales: { x: { stacked: true }, y: { stacked: true } },
|
|
|
|
};
|
|
|
|
var url = `${apiUrl}/api/websites/${website}/pageviews?start_at=${startAt}&end_at=${endAt}&unit=${unit}&tz=${tz}&shareId=${shareId}`;
|
2023-03-06 11:07:58 +01:00
|
|
|
|
|
|
|
var xhr = new XMLHttpRequest();
|
|
|
|
xhr.open('GET', url);
|
|
|
|
xhr.onload = function () {
|
|
|
|
if (xhr.status === 200) {
|
|
|
|
var data = JSON.parse(xhr.responseText);
|
2023-03-06 10:34:22 +01:00
|
|
|
var labels = data.pageviews.map(p => {
|
|
|
|
var date = new Date(p.t);
|
|
|
|
var hours = date.getHours();
|
|
|
|
return `${hours === 0 ? 12 : hours > 12 ? hours - 12 : hours}${hours < 12 ? 'AM' : 'PM'}`;
|
|
|
|
});
|
|
|
|
|
|
|
|
var pageviewsData = data.pageviews.map(p => p.y);
|
|
|
|
var sessionsData = data.sessions.map(s => s.y);
|
|
|
|
|
|
|
|
var chartData = {
|
|
|
|
labels: labels,
|
|
|
|
datasets: [
|
|
|
|
{
|
|
|
|
label: 'Unique visitors',
|
|
|
|
data: sessionsData,
|
|
|
|
backgroundColor: 'rgba(38, 128, 235, 0.6)',
|
|
|
|
borderColor: 'rgba(38, 128, 235, 0.7)',
|
|
|
|
},
|
|
|
|
{
|
|
|
|
label: 'Page views',
|
|
|
|
data: pageviewsData,
|
|
|
|
backgroundColor: 'rgba(38, 128, 235, 0.4)',
|
|
|
|
borderColor: 'rgba(38, 128, 235, 0.5)',
|
|
|
|
},
|
|
|
|
],
|
|
|
|
};
|
|
|
|
|
|
|
|
if (!window.unamiChart) {
|
|
|
|
var ctx = document.getElementById('unamiChart').getContext('2d');
|
|
|
|
window.unamiChart = new Chart(ctx, {
|
|
|
|
type: 'bar',
|
|
|
|
data: chartData,
|
|
|
|
options: chartOptions,
|
|
|
|
});
|
|
|
|
} else {
|
|
|
|
window.unamiChart.data = chartData;
|
|
|
|
window.unamiChart.update('none');
|
|
|
|
}
|
2023-03-06 11:07:58 +01:00
|
|
|
} else {
|
|
|
|
console.log('Request failed. Returned status of ' + xhr.status);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
xhr.send();
|
2023-03-06 10:34:22 +01:00
|
|
|
}
|