umami/embedded/index.js

100 lines
3.1 KiB
JavaScript
Raw Normal View History

/* eslint-disable */
if (typeof Chart === 'undefined') {
2023-03-06 11:07:58 +01:00
var script = document.createElement('script');
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'));
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');
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);
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();
}