<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Inngangsverkstedet</title> <style> body { text-align: center; width: 80vw; margin: auto auto; } #graphDiv { display: flex; flex-direction: column; } </style> </head> <body> <h2>En kort analyse av nerders døgnrytme i deres naturlige habitat, PVV</h2> <div id="graphDiv"> <h4>Siste 24 timer</h4> <canvas id="doorGraphDay"></canvas> <h4>Siste 7 dager</h4> <canvas id="doorGraphWeek"></canvas> </div> <script src="chart.min.js"></script> <script src="moment.js"></script> <script src="chartjs-adapter-moment.js"></script> <script> const graphElDay = document.getElementById("doorGraphDay"); const graphElWeek = document.getElementById("doorGraphWeek"); const XHR = new XMLHttpRequest(); const url="/door/?period=week"; XHR.open("GET", url); XHR.send(); XHR.onreadystatechange = ()=>{ if (XHR.readyState == 4 && XHR.status == 200) { console.log("Response 200 from API") response = JSON.parse(XHR.responseText); //Should be try-catched? if (response.status != "OK") { console.log("Error when connecting to API."); return } else { const allDatapoints = response.entries; console.log("Success, " + allDatapoints.length + " datapoints received."); const dayDatapoints = getLastDay(allDatapoints); displayLineDiagram(graphElDay, dayDatapoints, "hour"); displayLineDiagram(graphElWeek, allDatapoints, "day"); } } } function getLastDay(data) { let date = new Date(); let curTime = date.getTime(); let targetTime = parseInt(curTime/1e3) - (60*60*24); let i; for (i = 0; i < data.length; i++) { if (data[i].time < targetTime) { break; } } return data.slice(0, i); } function displayLineDiagram(canv, data, timeunit) { let ctx = canv.getContext("2d"); let dotColor = data.map(entry => entry.open ? "rgb(10, 150, 10)" : "rgb(200, 100, 100)"); let chart = new Chart(ctx, { type: 'line', data: { labels: data.map(entry=> 1e3 * entry.time), datasets: [{ data: data.map(entry => entry.open), stepped: "before", borderColor: dotColor, backgroundColor: dotColor }], }, options: { scales: { xAxis: { type: "time", time: { unit: timeunit }, }, yAxis: { suggestedMin: -0.1, suggestedMax: 1.1, grid: {display: false}, ticks: { callback: function(label, index, labels) { if (label == 0) { return "Stengt"; } else if (label == 1) { return "Åpent"; } else { return ""; } } } } }, plugins: { legend: { display: false }, tooltip: { callbacks: { label: function(tooltipItem) { const value = tooltipItem.formattedValue; if (value == 0) { return "Stengt"; } else if (value == 1) { return "Åpent"; } else { return ""; } } } } } } }); } </script> </body> </html>