-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.js
More file actions
126 lines (126 loc) · 5.37 KB
/
Copy pathmain.js
File metadata and controls
126 lines (126 loc) · 5.37 KB
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
126
window.addEventListener("load", function () {
console.log("Verbunden.");
var socket = io();
var login = null;
var settings_cog = document.getElementById("settings_cog");
var settings_menu = document.getElementById("settings_menu");
var login_controls = document.getElementById("login_controls");
var login_btn = document.getElementById("login_btn");
var logout_controls = document.getElementById("logout_controls");
var logout_btn = document.getElementById("logout_btn");
var last_entry = document.getElementById("last_entry");
var advanced_controls = document.getElementById("advanced_controls");
var undo_btn = document.getElementById("undo_btn");
var redo_btn = document.getElementById("redo_btn");
var reset_btn = document.getElementById("reset_btn");
var numbertiles = document.getElementsByClassName("number tile");
settings_cog.addEventListener("click", function (e) {
settings_menu.classList.toggle("closing");
});
login_btn.addEventListener("click", function (e) {
if (!login) socket.emit("loginReq", {pw:login_input.value});
});
logout_btn.addEventListener("click", function (e) {
if (login) socket.emit("logoutReq", {login});
});
undo_btn.addEventListener("click", function (e) {
if (login) socket.emit("bingoUndo", {login});
});
redo_btn.addEventListener("click", function (e) {
if (login) socket.emit("bingoRedo", {login});
});
reset_btn.addEventListener("click", function (e) {
if (login) socket.emit("bingoReset", {login});
});
for (let numbertile of numbertiles) numbertile.addEventListener("click", function (e) {
if (login) socket.emit("bingoData", {login, number:numbertile.getAttribute("number"), state:!numbertile.classList.contains("on")});
});
socket.on("inOutAuth", function (data) {
if (data.login) {
login = data.login;
login_controls.style.setProperty("display", "none");
advanced_controls.style.removeProperty("display");
logout_controls.style.removeProperty("display");
}
else {
login = null;
login_controls.style.removeProperty("display");
advanced_controls.style.setProperty("display", "none");
logout_controls.style.setProperty("display", "none");
}
settings_cog.click();
});
socket.on("showToast", function (data) {
console.log(data.msg);
toast(data.msg, {type:data.type});
});
socket.on("bingoUpdate", function (data) {
for (let numbertile of numbertiles) {
var number = numbertile.getAttribute("number");
if (number) numbertile.classList.toggle("on", data.numbers.includes(number));
}
if (data.undo.length > 0) undo_btn.removeAttribute("disabled");
else undo_btn.setAttribute("disabled", "");
if (data.redo.length > 0) redo_btn.removeAttribute("disabled");
else redo_btn.setAttribute("disabled", "");
if (data.numbers.length > 0) reset_btn.removeAttribute("disabled");
else reset_btn.setAttribute("disabled", "");
var lastnumber = data.numbers.length > 0 ? data.numbers[data.numbers.length-1] : null;
if (lastnumber) {
var lastnumbertile = document.querySelector(`.tile.number[number="${lastnumber}"]`);
if (lastnumbertile) return last_entry.textContent = lastnumbertile.parentElement.getAttribute("column") + " " + lastnumber;
}
last_entry.textContent = "---";
});
var forcevideo = htmlToElement('<video controls muted playsinline autoplay src="data:video/webm;base64,GkXfo0AgQoaBAUL3gQFC8oEEQvOBCEKCQAR3ZWJtQoeBAkKFgQIYU4BnQI0VSalmQCgq17FAAw9CQE2AQAZ3aGFtbXlXQUAGd2hhbW15RIlACECPQAAAAAAAFlSua0AxrkAu14EBY8WBAZyBACK1nEADdW5khkAFVl9WUDglhohAA1ZQOIOBAeBABrCBCLqBCB9DtnVAIueBAKNAHIEAAIAwAQCdASoIAAgAAUAmJaQAA3AA/vz0AAA=" style="width: 0 !important; height: 0 !important; opacity: 0 !important; pointer-events: none !important;"></video>');
forcevideo.addEventListener("loadedmetadata", () => {
if (forcevideo.duration <= 1) forcevideo.setAttribute("loop", "");
else forcevideo.addEventListener("timeupdate", () => {
if (forcevideo.currentTime > 0.5) forcevideo.currentTime = Math.random();
});
});
document.getElementById("settings_menu").append(forcevideo);
});
var htmlToElement = function (html) {
if (!html || !html.trim()) return null;
let template = document.createElement("template");
template.innerHTML = html.replace(/\t|\n|\r/g, "");
if (template.content.childElementCount == 1) return template.content.firstElementChild;
else {
var wrapper = document.createElement("span");
var nodes = Array.from(template.content.childNodes);
while (nodes.length) wrapper.appendChild(nodes.shift());
return wrapper;
}
};
var encodeToHTML = function (string) {
var ele = document.createElement("div");
ele.innerText = string;
return ele.innerHTML;
};
var toast = function (text, options = {}) {
var toasts = document.querySelector(".toasts");
if (!toasts) {
toasts = htmlToElement(`<div class="toasts"></div>`);
document.body.appendChild(toasts);
}
const {type = '', icon = true, timeout = 3000, html = false} = options;
var toast = htmlToElement(`<div class="toast">${html === true ? text : encodeToHTML(text)}</div>`);
if (type) {
toast.classList.add(`toast-${type}`);
if (icon) toast.classList.add("toast-icon");
}
toasts.appendChild(toast);
toast.close = () => {
if (document.contains(toast)) {
toast.classList.add("closing");
setTimeout(() => {
toast.remove();
if (!toasts.querySelectorAll(".toast").length) toasts.remove();
}, 3000);
}
};
toast.addEventListener("click", toast.close);
setTimeout(() => {toast.close();}, timeout > 0 ? timeout : 600000);
return toast;
};