const base_url = "https://oss110metz.rezo-rm.fr/" var page = ['#main-page', '#admin-page', '#login-page', '#demande-page']; window.onpopstate = history.onpushstate = function(e) { if (e.state) { show_page(e.state, true); } else { history.back(); } }; history.pushState("#main-page", "", "") function show_page(id, historyPush) { for(i in page) { $(page[i]).hide(); } $(id).show(); if (!historyPush) { history.pushState(id, "", "") } } $("#login-button").click(function (e) { var data = JSON.stringify({ user: $("#login").val(), password: $("#password").val() }); $("#password").val(''); $.ajax({ type: "POST", url: base_url + "login", data: data, contentType: "application/json; charset=utf-8", dataType: "json", success: function (data) { if(data.success) { localStorage.setItem("token", data.token); localStorage.setItem("user", data.user); localStorage.setItem("isAdmin", data.isAdmin); show_page('#demande-page'); } else { alert(data.why); } } }); }); $("#prank-button").click(function () { if (localStorage.getItem('token')) { show_page('#demande-page'); } else { show_page('#login-page'); } }); $("#logo").click(function () { if (localStorage.getItem('token')) { if (localStorage.getItem('isAdmin')) { show_page('#admin-page'); // Load prank by default get_admin("prank"); } else { show_page('#demande-page'); } } else { show_page('#login-page'); } }); function get_admin(type) { $("#admin-content").innerHTML = ""; $.ajax({ type: "POST", url: base_url + "login", data: JSON.stringify({ uid: localStorage.getItem('user'), token: localStorage.getItem('token'), type: type, }), contentType: "application/json; charset=utf-8", dataType: "json", success: function (data) { if(data.success) { switch (type) { case "prank": let doneCnt = 0; let prankData = []; for (prankUid in data.prankData) { data.prankData[prankUid].prankUid = prankUid; prankData.push(data.prankData[prankUid]); } prankData.sort((a, b) => Date(a.date) - Date(b.date)); for (entry in prankData) { switch (prankData[entry].type) { case "crêpe": if (prankData[entry].state == "pending" || prankData[entry].state == "accepted") { $("#admin-content").insertAdjacentHTML("beforeend", `
Demande de crêpe par ${prankData[entry].creator}
Quantité: ${prankData[entry].amount}
Garniture: ${prankData[entry].supplement}
Livraison: ${prankData[entry].where}
Livraison: ${prankData[entry].note}
UID: ${prankData[entry].prankUid}
UID: ${prankData[entry].date}
${(prankData[entry].state == "pending") ? "Accepter" : "Récupérer (accepté par: "+prankData[entry].manageBy+")"}
Refuser
Done
`) } else if(prankData[entry].state == "done") { doneCnt++; } break; case "kidnap": // Not Handle break; } } $("#admin-content").insertAdjacentHTML("beforeend", `
Nombre totale de mission achevées: ${doneCnt}
`); break; case "treasure": let treasureData = []; for (treasureUid in data.treasureData) { data.treasureData[treasureUid].treasureUid = treasureUid; treasureData.push(data.treasureData[treasureUid]); } treasureData.sort((a, b) => Date(a.date) - Date(b.date)); for (entry in treasureData) { if (treasureData[entry].state == "pending") { $("#admin-content").insertAdjacentHTML("beforeend", `
Demande de vérification par ${treasureData[entry].creator}
Activité: ${treasureData[entry].activity.title}
Description: ${treasureData[entry].desc}
Image: lien
UID: ${treasureData[entry].treasureUid}
UID: ${treasureData[entry].date}
Accepter
Refuser
`) } } break; case "activity": $("#admin-content").insertAdjacentHTML("beforeend", `
Titre:
Description:
Lieu:
Début:
Fin:
Ajouter une activité
`) let activityData = []; for (activityUid in data.activityData) { data.activityData[activityUid].activityUid = activityUid; activityData.push(data.activityData[activityUid]); } activityData.sort((a, b) => Date(a.start) - Date(b.start)); for (entry in activityData) { if (activityData[entry].type = "event") { $("#admin-content").insertAdjacentHTML("beforeend", `
Event:
Description:
Lieu:
Début:
Fin:
UID: ${activityData[entry].activityUid}
Update
Supprimer
`) } else if (activityData[entry].type = "treasure") { $("#admin-content").insertAdjacentHTML("beforebegin", `
Trésor:
Description:
Lieu:
Début:
Status: ${activityData[entry].treasureState}
UID: ${activityData[entry].activityUid}
Update
Supprimer
`) } } break; } refreshListener(); } else { alert(data.why); } } }); } function refreshListener() { $(".prank-btn-accept").click((e) => { let uid = e.target.parentNode.parentNode.id $.ajax({ type: "POST", url: base_url + "acceptPrank", data: JSON.stringify({ uid: localStorage.getItem('user'), token: localStorage.getItem('token'), prankUid: uid, }), contentType: "application/json; charset=utf-8", dataType: "json", success: function (data) { if(data.success) { let btnElems = $("#"+uid).children()[6]; btnElems.children()[0].style.display = "none"; btnElems.children()[2].style.display = "flex"; } else { alert(data.why); } } }); }) $(".prank-btn-refused").click((e) => { let uid = e.target.parentNode.parentNode.id $.ajax({ type: "POST", url: base_url + "refusePrank", data: JSON.stringify({ uid: localStorage.getItem('user'), token: localStorage.getItem('token'), prankUid: uid, }), contentType: "application/json; charset=utf-8", dataType: "json", success: function (data) { if(data.success) { $("#"+uid).remove(); } else { alert(data.why); } } }); }) $(".prank-btn-done").click((e) => { let uid = e.target.parentNode.parentNode.id $.ajax({ type: "POST", url: base_url + "donePrank", data: JSON.stringify({ uid: localStorage.getItem('user'), token: localStorage.getItem('token'), prankUid: uid, }), contentType: "application/json; charset=utf-8", dataType: "json", success: function (data) { if(data.success) { $("#"+uid).remove(); $("#prankDone").innerHTML = parseInt($("#prankDone").innerHTML) + 1; } else { alert(data.why); } } }); }) $(".treasure-btn-accept").click((e) => { let uid = e.target.parentNode.parentNode.id $.ajax({ type: "POST", url: base_url + "acceptTreasure", data: JSON.stringify({ uid: localStorage.getItem('user'), token: localStorage.getItem('token'), treasureUid: uid, }), contentType: "application/json; charset=utf-8", dataType: "json", success: function (data) { if(data.success) { $("#"+uid).remove(); } else { alert(data.why); } } }); }) $(".treasure-btn-refused").click((e) => { let uid = e.target.parentNode.parentNode.id $.ajax({ type: "POST", url: base_url + "refuseTreasure", data: JSON.stringify({ uid: localStorage.getItem('user'), token: localStorage.getItem('token'), treasureUid: uid, }), contentType: "application/json; charset=utf-8", dataType: "json", success: function (data) { if(data.success) { $("#"+uid).remove(); } else { alert(data.why); } } }); }) $(".activity-btn-update").click((e) => { let uid = e.target.parentNode.parentNode.id; let children = e.target.parentNode.parentNode.children(); $.ajax({ type: "POST", url: base_url + "refuseTreasure", data: JSON.stringify({ uid: localStorage.getItem('user'), token: localStorage.getItem('token'), activityUid: uid, type: (children[0].innerHTML.substring(0, 5) == "Event") ? "event" : "treasure", title: children[0].children()[0].value, desc: children[1].children()[0].value, where: children[2].children()[0].value, start: new Date(children[3].children()[0].value).toString(), end: (children[3].children().length == 0) ? null : new Date(children[4].children()[0].value).toString(), }), contentType: "application/json; charset=utf-8", dataType: "json", success: function (data) { if(data.success) { alert("Update réussie") } else { alert(data.why); } } }); }) $(".activity-btn-delete").click((e) => { let uid = e.target.parentNode.parentNode.id $.ajax({ type: "POST", url: base_url + "delActivity", data: JSON.stringify({ uid: localStorage.getItem('user'), token: localStorage.getItem('token'), activityUid: uid, }), contentType: "application/json; charset=utf-8", dataType: "json", success: function (data) { if(data.success) { $("#"+uid).remove(); } else { alert(data.why); } } }); }) $("activityType").on("change", function() { if (this.value == "treasure") { $("#activity-end-add").style.display = "none"; } else if (this.value == "event") { $("#activity-end-add").style.display = "flex"; } }) $(".activity-btn-add").click((e) => { let children = e.target.parentNode.parentNode.children(); $.ajax({ type: "POST", url: base_url + "refuseTreasure", data: JSON.stringify({ uid: localStorage.getItem('user'), token: localStorage.getItem('token'), type: $("#activityType").val(), title: children[2].children()[0].value, desc: children[3].children()[0].value, where: children[4].children()[0].value, start: new Date(children[5].children()[0].value).toString(), end: ($("#activityType").val() == "treasure") ? null : new Date(children[6].children()[0].value).toString(), }), contentType: "application/json; charset=utf-8", dataType: "json", success: function (data) { if(data.success) { get_admin("activity"); } else { alert(data.why); } } }); }) } $(window).on("load", function() { /* Register the Service Worker */ if ('serviceWorker' in navigator) { navigator.serviceWorker.register('./js/sw.js'); } for(i in page) { $(page[i]).css('z-index', i); } /* load timer */ window.setInterval(function() { var time = $("#timer").text(); var t = time.split(":").map(t => parseInt(t)); t[2] -= 1; if (t[2] < 0) { t[2] = 59; t[1] -= 1; } if (t[1] < 0) { t[1] = 59; t[0] -= 1; } if (t[0] < 0) { t[0] = 0; t[1] = 0; t[2] = 0; } $("#timer").text((new Date('December 17, 1995 ' + t.join(':'))).toLocaleTimeString('default', { hour: '2-digit', minute: '2-digit', second: '2-digit' })); }, 1000); }); function toIsoString(date) { var tzo = -date.getTimezoneOffset(), dif = tzo >= 0 ? '+' : '-', pad = function(num) { return (num < 10 ? '0' : '') + num; }; return date.getFullYear() + '-' + pad(date.getMonth() + 1) + '-' + pad(date.getDate()) + 'T' + pad(date.getHours()) + ':' + pad(date.getMinutes()) + ':' + pad(date.getSeconds()); }