allerta-vvf/server/resources/src/main.js

145 lines
4.9 KiB
JavaScript
Raw Normal View History

jQuery = $;
2020-09-13 00:56:56 +02:00
window.$ = window.jQuery = $;
import 'bootstrap';
import 'bootstrap/dist/css/bootstrap.min.css';
import './font-awesome.scss';
2020-09-13 00:56:56 +02:00
import '../node_modules/bootstrap-cookie-alert/cookiealert.css'; // TODO: migrate to Bootstrap Italia
import 'bootstrap-datepicker';
2020-10-22 23:56:09 +02:00
import '../node_modules/bootstrap-toggle/css/bootstrap-toggle.css';
import '../node_modules/bootstrap-toggle/js/bootstrap-toggle.js';
import '../node_modules/bootstrap-datepicker/dist/css/bootstrap-datepicker3.css';
import 'time-input-polyfill/auto';
2020-11-05 00:08:54 +01:00
import 'jquery-pjax';
$(document).pjax('a', '#content');
$(document).on('pjax:start', function() {
if(window.loadTable_interval !== undefined){
clearInterval(window.loadTable_interval);
window.loadTable_interval = undefined;
}
})
2020-09-13 00:56:56 +02:00
// Cookie functions from w3schools
function setCookie(cname, cvalue, exdays) {
var d = new Date();
d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
var expires = "expires=" + d.toUTCString();
document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}
function getCookie(cname) {
var name = cname + "=";
var decodedCookie = decodeURIComponent(document.cookie);
var ca = decodedCookie.split(';');
for (var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) === ' ') {
c = c.substring(1);
}
if (c.indexOf(name) === 0) {
return c.substring(name.length, c.length);
}
}
return "";
}
$( document ).ajaxError(function(event, xhr, settings, error) {
console.error("Error requesting content: "+error+" - status code "+xhr.status);
console.log(event);
console.log(xhr);
console.log(settings);
});
2020-09-13 00:56:56 +02:00
$( document ).ready(function() {
// From https://github.com/Wruczek/Bootstrap-Cookie-Alert/blob/gh-pages/cookiealert.js
var cookieAlert = document.querySelector(".cookiealert");
var acceptCookies = document.querySelector(".acceptcookies");
if (!cookieAlert) {
return;
}
cookieAlert.offsetHeight; // Force browser to trigger reflow (https://stackoverflow.com/a/39451131)
// Show the alert if we cant find the "acceptCookies" cookie
if (!getCookie("acceptCookies")) {
cookieAlert.classList.add("show");
}
// When clicking on the agree button, create a 1 year
// cookie to remember user's choice and close the banner
acceptCookies.addEventListener("click", function () {
setCookie("acceptCookies", true, 365);
cookieAlert.classList.remove("show");
// dispatch the accept event
window.dispatchEvent(new Event("cookieAlertAccept"))
});
2020-10-09 14:35:20 +02:00
});
if (getCookie("authenticated")) {
if ('serviceWorker' in navigator) {
2020-10-09 14:35:20 +02:00
window.addEventListener('load', () => {
2020-11-05 00:08:54 +01:00
navigator.serviceWorker.register('sw.js').then(registration => {
2020-10-11 00:33:42 +02:00
console.log('SW registered: ', registration);
}).catch(registrationError => {
console.log('SW registration failed: ', registrationError);
});
2020-10-09 14:35:20 +02:00
});
}
}
2020-10-24 00:17:01 +02:00
function fillTable(data){
$("#table_body").empty();
$.each(data, function(num, item) {
var row = document.createElement("tr");
$.each(item, function(num, i) {
if(i !== null){
var cell = document.createElement("td");
cell.innerHTML = i;
row.appendChild(cell);
}
});
document.getElementById("table_body").appendChild(row);
});
}
2020-10-25 21:22:32 +01:00
var offline = false;
2020-11-05 00:08:54 +01:00
var loadTable_interval = undefined;
function loadTable(table_page, set_interval=true, interval=10000){
$.getJSON( "resources/ajax/ajax_"+table_page+".php", function( data, status, xhr ) {
fillTable(data);
var headers = new Headers();
headers.append('date', Date.now());
caches.open('tables-1').then((cache) => {
cache.put('/table_'+table_page+'.json', new Response(xhr.responseText, {headers: headers}))
});
if(window.offline){ // if xhr request successful, client is online
$("#offline_alert").hide(400);
window.offline = false;
}
}).fail(function(data, status) {
if(status == "parsererror"){
if($("#table_body").children().length == 0) {
loadTable(table_page, set_interval, interval);
} // else nothing
} else {
2020-10-24 00:17:01 +02:00
caches.open('tables-1').then(cache => {
cache.match("/table_"+table_page+".json").then(response => {
response.json().then(data => {
fillTable(data);
console.log("Table loaded from cache");
2020-10-25 21:22:32 +01:00
$("#offline_update").text(new Date(parseInt(response.headers.get("date"))).toLocaleString());
});
});
2020-10-24 00:17:01 +02:00
});
2020-10-25 21:22:32 +01:00
if(!window.offline){ // if xhr request fails, client is offline
$("#offline_alert").show(400);
window.offline = true;
}
2020-11-05 00:08:54 +01:00
}
});
if(set_interval){
window.loadTable_interval = setInterval(function() {
window.loadTable(table_page, false);
}, interval);
}
}
2020-11-05 00:08:54 +01:00
window.loadTable_interval = loadTable_interval;
2020-10-24 00:17:01 +02:00
window.fillTable = fillTable;
window.loadTable = loadTable;