-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
125 lines (109 loc) · 4.15 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
const msgTemplate = document.getElementById("message");
async function load(LN) {
const msgContainer = document.querySelector(`#lobbyN${LN}-panel .messages-flux`);
const loadTemplate = displayLoader();//only here to wait with you
msgContainer.appendChild(loadTemplate);
try {//case: messages loaded
const messages = JSON.parse(localStorage.getItem(`messages-LN${LN}`)) || [];
for (const msg of messages) {
msgContainer.appendChild(generateMsg(msg));
}
} catch (err) {//case: fetch error
console.log("Pas de message?")
const errorElement = displayError(err);
msgContainer.appendChild(errorElement);
const reload = (evt) => {
window.removeEventListener("online", reload);//prevents further firing of reload
evt.preventDefault();
errorElement.remove();
load();
};
window.addEventListener("online", reload);//auto reload when online
const reloadBtn = errorElement.querySelector(`#lobbyN${LN}-panel .msg-reload`);
reloadBtn.addEventListener("click", reload);
}
loadTemplate.remove();//waiting is over
};
/* TEMPLATE : ERROR */
function displayError() {
const div = document.createElement("div");
div.appendChild(
document.importNode(document.getElementById("error").content, true)
);
return div;
}
/* TEMPLATE : LOADER */
function displayLoader() {
const div = document.createElement("div");
div.appendChild(
document.importNode(document.getElementById("loader").content, true)
);
return div;
}
/* TEMPLATE : MESSAGE */
function generateMsg(msg) {
const clone = document.importNode(msgTemplate.content, true);
clone.querySelector(".message__content").innerText = msg.body;
return clone;
}
function wait(time = 1000) {
return new Promise((resolve) => {
window.setTimeout(resolve,time);
})
};
const lobbies = ["01","02","03"];
lobbies.forEach(LN => {
load(LN);
})
/* =============================
* Functionality : post messages
* ============================== */
async function postMsg(LN) {
const msgForm = document.querySelector(`#userFormLN${LN}`);
console.log(msgForm);
const messages = JSON.parse(localStorage.getItem(`messages-LN${LN}`)) || [];
console.log(messages);
const messageInput = msgForm.querySelector(".user-message__input");
console.log(messageInput);
msgForm.addEventListener('submit', event => {
console.log("feefe");
event.preventDefault();
const message = messageInput.value.trim();
if (message) {
const messageObject = { body: message, type: 'outgoing' };
messages.push(messageObject);
localStorage.setItem(`messages-LN${LN}`, JSON.stringify(messages));
messageInput.value = '';
document.querySelector(`#lobbyN${LN}-panel .messages-flux`).appendChild(generateMsg(messageObject));
sendNotification('Nouveau message', message);
}
const sendNotification = (userId, body) => {
if (Notification.permission === 'granted') {
new Notification(userId, { body });
}
};
load(LN);
});
}
lobbies.forEach(lobby => {
postMsg(lobby);
});
/* =============================
* Functionality : notifications
* ============================== */
document.addEventListener('DOMContentLoaded', () => {
const alreadyAskedForNotifications = localStorage.getItem('alreadyAskedForNotifications');
if (!alreadyAskedForNotifications) {
if (Notification.permission !== 'granted') {
Notification.requestPermission().then(permission => {
if (permission === 'granted') {
new Notification('Notifications activées', { body: 'Vous recevrez désormais des notifications.' });
}
localStorage.setItem('alreadyAskedForNotifications', true);
});
} else {
new Notification('Notifications déjà activées', { body: 'Vous recevrez déjà des notifications.' });
localStorage.setItem('alreadyAskedForNotifications', true);
}
}
});