data-analytics/data-dash/webapp/static/js/script.js (91 lines of code) (raw):

$(document).ready(function () { let leftData; let rightData; let exData; const baseStatus = "0"; const carLeftDivId = "#car_1"; const carRightDivId = "#car_2"; const statusClassesMap = { 0: "race-going", 1: "race-win", 2: "race-lose", 3: "checkpoint", }; var socket = io(); function setBoxShadow(div, status) { updateStatus(div, status) } function updateStatus(selector, status) { let el = $(selector); Object.values(statusClassesMap).forEach(s => { el.removeClass(s); }); if (status) { el.addClass(statusClassesMap[status]); } } function setCheckpoints(div, checkpointsMap) { for (let i = 0; i < 8; i++) { let checkpoint = i + 1 let selector = div + " tr"; let row = $(selector).eq(checkpoint); let valEl = row.find("td.checkpoint_val"); let checkpointValue = checkpointsMap[checkpoint]; // Reset board if nothing to show. if (!checkpointValue) { updateStatus(row); valEl.text(0); continue; } if (checkpointValue) { updateStatus(row, 3) valEl.text(formatTimestamp(checkpointValue)); } } } function formatTimestamp(timestamp) { // Create a Date object from the timestamp const date = new Date(timestamp); // Extract components for formatting let hours = date.getHours().toString().padStart(2, '0'); hours = hours % 12 || 12 const minutes = date.getMinutes().toString().padStart(2, '0'); const seconds = date.getSeconds().toString().padStart(2, '0'); const milliseconds = date.getMilliseconds().toString().padStart(3, '0'); // Construct the formatted time string return `${hours}:${minutes}:${seconds}:${milliseconds}`; } function setPic(div, id) { $(div + " .img").css( "background-image", `url("https://storage.googleapis.com/data-analytics-demos/next2024/cars/${id}.png")`, ); } socket.on("connect", function () { console.log("connect") setBoxShadow(carLeftDivId, baseStatus); setBoxShadow(carRightDivId, baseStatus); }); socket.on("send_data", function (data) { console.log("data received") leftData = data.left; rightData = data.right; setBoxShadow(carLeftDivId, leftData.status); setBoxShadow(carRightDivId, rightData.status); console.log("LEFT DATA:") console.log(leftData) setPic(carLeftDivId, leftData.car_id); console.log("RIGHT DATA:") console.log(rightData) setPic(carRightDivId, rightData.car_id); setCheckpoints(carLeftDivId, leftData.checkpoints); setCheckpoints(carRightDivId, rightData.checkpoints); }); socket.on('disconnect', function() { console.log('Disconnected from server'); // Attempt reconnection every 3 seconds setTimeout(function() { socket.connect(); }, 3000); }); socket.on('set_default', function(data) { console.log("setting default") setPic(carLeftDivId, data.left_id); setPic(carRightDivId, data.right_id); }); });