166 lines
6.7 KiB
JavaScript
166 lines
6.7 KiB
JavaScript
|
|
||
|
$(document).ready(() => {
|
||
|
window.addEventListener('message', function (event) {
|
||
|
let data = event.data;
|
||
|
if (data.update == "newCall") {
|
||
|
addNewCall(data.callID, data.timer, data.data, data.isPolice);
|
||
|
};
|
||
|
});
|
||
|
});
|
||
|
|
||
|
const MONTH_NAMES = [
|
||
|
'Januar', 'Februar', 'Marts', 'April', 'Maj', 'Juni',
|
||
|
'Juli', 'August', 'September', 'Oktober', 'November', 'December'
|
||
|
];
|
||
|
|
||
|
function getFormattedDate(date, prefomattedDate = false, hideYear = false) {
|
||
|
const day = date.getDate();
|
||
|
const month = MONTH_NAMES[date.getMonth()];
|
||
|
const year = date.getFullYear();
|
||
|
const hours = date.getHours();
|
||
|
let minutes = date.getMinutes();
|
||
|
|
||
|
if (minutes < 10) {
|
||
|
minutes = `0${minutes}`;
|
||
|
}
|
||
|
|
||
|
if (prefomattedDate) {
|
||
|
return `${prefomattedDate} kl. ${hours}:${minutes}`;
|
||
|
}
|
||
|
|
||
|
if (hideYear) {
|
||
|
return `${day}. ${month} kl. ${hours}:${minutes}`;
|
||
|
}
|
||
|
|
||
|
return `${day}. ${month} ${year}. kl. ${hours}:${minutes}`;
|
||
|
}
|
||
|
|
||
|
function timeAgo(dateParam) {
|
||
|
if (!dateParam) {
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
const date = typeof dateParam === 'object' ? dateParam : new Date(dateParam);
|
||
|
const DAY_IN_MS = 86400000;
|
||
|
const today = new Date();
|
||
|
const yesterday = new Date(today - DAY_IN_MS);
|
||
|
const seconds = Math.round((today - date) / 1000);
|
||
|
const minutes = Math.round(seconds / 60);
|
||
|
const isToday = today.toDateString() === date.toDateString();
|
||
|
const isYesterday = yesterday.toDateString() === date.toDateString();
|
||
|
const isThisYear = today.getFullYear() === date.getFullYear();
|
||
|
|
||
|
if (seconds < 5) {
|
||
|
return 'Lige nu';
|
||
|
} else if (seconds < 60) {
|
||
|
return `${seconds} sekunder siden`;
|
||
|
} else if (seconds < 90) {
|
||
|
return 'Omkring et minut siden';
|
||
|
} else if (minutes < 60) {
|
||
|
return `${minutes} minutter siden`;
|
||
|
} else if (isToday) {
|
||
|
return getFormattedDate(date, 'I dag');
|
||
|
} else if (isYesterday) {
|
||
|
return getFormattedDate(date, 'I går');
|
||
|
} else if (isThisYear) {
|
||
|
return getFormattedDate(date, false, true);
|
||
|
}
|
||
|
|
||
|
return getFormattedDate(date);
|
||
|
}
|
||
|
|
||
|
function addNewCall(callID, timer, info, isPolice) {
|
||
|
const prio = info['priority']
|
||
|
let DispatchItem;
|
||
|
if (info['isDead']){
|
||
|
DispatchItem = `<div class="dispatch-item ${callID} dispatch-item-${info['isDead']} animate__animated"><div class="top-info-holder"><div class="call-id">#${callID}</div><div class="call-code priority-${prio}">${info.dispatchCode}</div><div class="call-name">${info.dispatchMessage}</div></div><div class="bottom-info-holder">`
|
||
|
}
|
||
|
else{
|
||
|
DispatchItem = `<div class="dispatch-item ${callID} dispatch-item-${isPolice} animate__animated"><div class="top-info-holder"><div class="call-id">#${callID}</div><div class="call-code priority-${prio}">${info.dispatchCode}</div><div class="call-name">${info.dispatchMessage}</div></div><div class="bottom-info-holder">`
|
||
|
}
|
||
|
|
||
|
|
||
|
// Above we are defining a default dispatch item and then we will append the data we have been sent.
|
||
|
|
||
|
if (info['time']) {
|
||
|
DispatchItem += `<div class="call-bottom-info"><span class="fas fa-clock" style="width: 20px;"></span>${timeAgo(info['time'])}</div>`
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
if (info['firstStreet']) {
|
||
|
DispatchItem += `<div class="call-bottom-info"><span class="fas fa-map-pin" style="padding-left:3px;width:16px;></span>${info['firstStreet']}</div>`
|
||
|
}
|
||
|
|
||
|
if (info['heading']) {
|
||
|
DispatchItem += `<div class="call-bottom-info"><span class="fas fa-share" style="padding-left:0px;width:19px;></span>${info['heading']}</div>`
|
||
|
}
|
||
|
|
||
|
if (info['callsign']) {
|
||
|
DispatchItem += `<div class="call-bottom-info"><span class="fas fa-solid fa-eye" style="margin-left:-1px;width:20px;></span>${info['callsign']}</div>`
|
||
|
}
|
||
|
|
||
|
if (info['doorCount']) {
|
||
|
DispatchItem += `<div class="call-bottom-info"><span class="fas fa-door-open" style="margin-left:-3px;width:22px;></span>${info['doorCount']}</div>`
|
||
|
}
|
||
|
|
||
|
if (info['weapon']) {
|
||
|
DispatchItem += `<div class="call-bottom-info"><span class="fas fa-bullseye" style="width:19px;></span>${info['weapon']}</div>`
|
||
|
}
|
||
|
|
||
|
if (info["camId"]) {
|
||
|
DispatchItem += `<div class="call-bottom-info"><span class="fas fa-camera" style="width:19px;></span>${info['camId']}</div>`
|
||
|
}
|
||
|
|
||
|
if (info['gender']) {
|
||
|
DispatchItem += `<div class="call-bottom-info"><span class="fas fa-genderless" style="padding-left:3px;width:16px;></span>${info['gender']}</div>`
|
||
|
}
|
||
|
|
||
|
if (info['model'] && info['plate']) {
|
||
|
DispatchItem += `<div class="call-bottom-info"><span class="fas fa-car" style="width:19px;></span>${info['model']}<span class="fas fa-digital-tachograph" style="margin-left: 2vh;"></span>${info['plate']}</div>`
|
||
|
} else if (info['plate']) {
|
||
|
DispatchItem += `<div class="call-bottom-info"><span class="fas fa-digital-tachograph" style="margin-left:-3px;width:22px;></span>${info['plate']}</div>`
|
||
|
} else if (info['model']) {
|
||
|
DispatchItem += `<div class="call-bottom-info"><span class="fas fa-car" style="width:19px;></span>${info['model']}</div>`
|
||
|
}
|
||
|
|
||
|
if (info['firstColor']) {
|
||
|
DispatchItem += `<div class="call-bottom-info"><span class="fas fa-spray-can" style="padding-left:1px;width:19px;></span>${info['firstColor']}</div>`
|
||
|
}
|
||
|
if (info['automaticGunfire'] == true) {
|
||
|
DispatchItem += `<div class="call-bottom-info"><span class="fab fa-blackberry" style="width:19px;></span>Automatic Gunfire</div>`
|
||
|
}
|
||
|
|
||
|
if (info['name'] && info['number']) {
|
||
|
DispatchItem += `<div class="call-bottom-info"><span class="far fa-id-badge" style="padding-left: 1px; width: 18px;></span>${info['name']}<span class="fas fa-mobile-alt" style="margin-left: 2vh;"></span>${info['number']}</div>`
|
||
|
} else if (info['number']) {
|
||
|
DispatchItem += `<div class="call-bottom-info"><span class="fas fa-mobile-alt" style="padding-left:3px;width:16px;></span>${info['number']}</div>`
|
||
|
} else if (info['name']) {
|
||
|
DispatchItem += `<div class="call-bottom-info"><span class="far fa-id-badge" style="padding-left: 1px; width: 18px;></span>${info['name']}</div>`
|
||
|
}
|
||
|
|
||
|
if (info['information']) {
|
||
|
DispatchItem += `<div class="line"></div><div class="call-bottom-info call-bottom-information"><span class="far fa-question-circle" style="width:19px;></span>${info['information']}</div>`
|
||
|
}
|
||
|
|
||
|
DispatchItem += `</div></div>`
|
||
|
|
||
|
$(".dispatch-holder").prepend(DispatchItem)
|
||
|
|
||
|
var timer = 4000
|
||
|
|
||
|
if (prio == 1) {
|
||
|
timer = 12000
|
||
|
} else if (prio == 2) {
|
||
|
timer = 9000
|
||
|
}
|
||
|
|
||
|
$(`.${callID}`).addClass("animate__backInRight");
|
||
|
setTimeout(() => {
|
||
|
$(`.${callID}`).addClass("animate__backOutRight");
|
||
|
setTimeout(() => {
|
||
|
$(`.${callID}`).remove();
|
||
|
}, 1000);
|
||
|
}, timer || 4500);
|
||
|
};
|