aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorstonedDiscord <Tukz@gmx.de>2022-03-16 23:11:54 +0100
committerstonedDiscord <Tukz@gmx.de>2022-03-16 23:11:54 +0100
commit7f0eaa80f7a2535ad30c1380546173fd6a60920d (patch)
tree6568a06cd60d98a037f2d30c641a6d0394d2f2b5
parent34653b82f175af4df5995ce9194fd8ffbaed5015 (diff)
add a loading bar and a wrapper for all overlaying "windows"
-rw-r--r--public/client.html11
-rw-r--r--webAO/client.js24
-rw-r--r--webAO/styles/client.css31
3 files changed, 40 insertions, 26 deletions
diff --git a/public/client.html b/public/client.html
index dc924fb..10a3496 100644
--- a/public/client.html
+++ b/public/client.html
@@ -45,11 +45,11 @@
</head>
<body>
+<div id="client_waiting">
+ <noscript><p style="color: red;">webAO requires JavaScript to work</p></noscript>
<div id="client_loading">
<h1 id="client_loadingtext">Loading</h1>
- <noscript><p style="color: red;">webAO requires JavaScript to work</p></noscript>
- <p>Having trouble? <a href="https://discord.gg/9rYQVVQ">Join us on Discord</a></p>
- <button class="client_reconnect" onclick="ReconnectButton()">Reconnect</button>
+ <progress id="client_loadingbar" value="0"></progress>
</div>
<div id="client_charselect">
<p>Choose your character</p>
@@ -64,8 +64,11 @@
<p style="color: #a00">Code:
<span id="error_id">(none)</span>
</p>
- <button class="client_reconnect" onclick="ReconnectButton()">Reconnect</button>
+
</div>
+ <p>Having trouble? <a href="https://discord.gg/9rYQVVQ">Join us on Discord</a></p>
+ <button class="client_reconnect" onclick="ReconnectButton()">Reconnect</button>
+</div>
</body>
<template id="client_wrapper">
diff --git a/webAO/client.js b/webAO/client.js
index 8bac1cc..26f8716 100644
--- a/webAO/client.js
+++ b/webAO/client.js
@@ -483,6 +483,7 @@ class Client extends EventEmitter {
if (extrafeatures.length == 0 && this.banned === false) {
document.getElementById('client_errortext').textContent = 'Could not connect to the server';
}
+ document.getElementById('client_waiting').style.display = 'block';
document.getElementById('client_error').style.display = 'flex';
document.getElementById('client_loading').style.display = 'none';
document.getElementById('error_id').textContent = e.code;
@@ -870,6 +871,7 @@ class Client extends EventEmitter {
for (let i = 2; i <= args.length - 2; i++) {
if (i % 2 === 0) {
document.getElementById('client_loadingtext').innerHTML = `Loading Character ${args[1]}/${this.char_list_length}`;
+ document.getElementById('client_loadingbar').value = charid;
const chargs = args[i].split('&');
const charid = args[i - 1];
setTimeout(() => this.handleCharacterInfo(chargs, charid), 500);
@@ -887,15 +889,18 @@ class Client extends EventEmitter {
async handleSC(args) {
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
- // Add this so people can see characters loading on the screen.
- document.getElementById('client_loading').style.display = 'none';
- document.getElementById('client_charselect').style.display = 'block';
+ if (mode === 'watch') { // Spectators don't need to pick a character
+ document.getElementById('client_charselect').style.display = 'none';
+ } else {
+ document.getElementById('client_charselect').style.display = 'block';
+ }
document.getElementById('client_loadingtext').innerHTML = 'Loading Characters';
for (let i = 1; i < args.length; i++) {
document.getElementById('client_loadingtext').innerHTML = `Loading Character ${i}/${this.char_list_length}`;
const chargs = args[i].split('&');
const charid = i - 1;
+ document.getElementById('client_loadingbar').value = charid;
await sleep(0.1); // TODO: Too many network calls without this. net::ERR_INSUFFICIENT_RESOURCES
this.handleCharacterInfo(chargs, charid);
}
@@ -912,6 +917,7 @@ class Client extends EventEmitter {
*/
handleEI(args) {
document.getElementById('client_loadingtext').innerHTML = `Loading Evidence ${args[1]}/${this.evidence_list_length}`;
+ document.getElementById('client_loadingbar').value = this.char_list_length + args[1];
this.sendServer('RM#%');
}
@@ -924,6 +930,7 @@ class Client extends EventEmitter {
handleLE(args) {
this.evidences = [];
for (let i = 1; i < args.length - 1; i++) {
+ document.getElementById('client_loadingbar').value = this.char_list_length + i;
const arg = args[i].split('&');
this.evidences[i - 1] = {
name: prepChat(arg[0]),
@@ -1076,9 +1083,9 @@ class Client extends EventEmitter {
for (let i = 2; i < args.length - 1; i++) {
if (i % 2 === 0) {
- document.getElementById('client_loadingtext').innerHTML = `Loading Music ${args[1]}/${this.music_list_length}`;
const trackname = safeTags(args[i]);
const trackindex = args[i - 1];
+ document.getElementById('client_loadingbar').value = this.char_list_length + this.evidence_list_length + trackindex;
if (this.musics_time) {
this.addTrack(trackname);
} else if (this.isAudio(trackname)) {
@@ -1111,6 +1118,7 @@ class Client extends EventEmitter {
const trackname = safeTags(args[i]);
const trackindex = i - 1;
document.getElementById('client_loadingtext').innerHTML = `Loading Music ${i}/${this.music_list_length}`;
+ document.getElementById('client_loadingbar').value = this.char_list_length + this.evidence_list_length + i;
if (this.musics_time) {
this.addTrack(trackname);
} else if (this.isAudio(trackname)) {
@@ -1216,11 +1224,6 @@ class Client extends EventEmitter {
*/
handleDONE(_args) {
document.getElementById('client_loading').style.display = 'none';
- if (mode === 'watch') { // Spectators don't need to pick a character
- document.getElementById('client_charselect').style.display = 'none';
- } else {
- document.getElementById('client_charselect').style.display = 'block';
- }
}
/**
@@ -1472,6 +1475,8 @@ class Client extends EventEmitter {
this.char_list_length += 1; // some servers count starting from 0 some from 1...
this.evidence_list_length = Number(args[2]);
this.music_list_length = Number(args[3]);
+
+ document.getElementById('client_loadingbar').max = this.char_list_length + this.evidence_list_length + this.music_list_length;
// create the charselect grid, to be filled by the character loader
document.getElementById('client_chartable').innerHTML = '';
@@ -1515,6 +1520,7 @@ class Client extends EventEmitter {
*/
async handlePV(args) {
this.charID = Number(args[3]);
+ document.getElementById('client_waiting').style.display = 'none';
document.getElementById('client_charselect').style.display = 'none';
const me = this.chars[this.charID];
diff --git a/webAO/styles/client.css b/webAO/styles/client.css
index 940a1ea..0dfe15c 100644
--- a/webAO/styles/client.css
+++ b/webAO/styles/client.css
@@ -68,20 +68,31 @@
animation: error_blink 3s ease-in-out infinite;
}
-#client_loading {
+#client_waiting {
display: block;
flex-direction: column;
position: fixed;
- top: 30vh;
- left: 30vw;
- width: 40vw;
+ top: 5vh;
+ left: 10vw;
+ width: 80vw;
+ max-height: 90vh;
+ justify-content: center;
+ text-align: center;
+ align-items: center;
+ font-size: large;
+ z-index: 100;
+ background: #555;
+}
+
+#client_loading {
+ display: block;
+ flex-direction: column;
justify-content: center;
text-align: center;
align-items: center;
background: black;
color: lightgreen;
font-size: large;
- z-index: 100;
}
#client_loadingtext {
@@ -104,17 +115,11 @@
}
#client_charselect {
- display: none;
- position: fixed;
- top: 5vh;
- left: 10vw;
- width: 80vw;
- max-height: 90vh;
+ display: block;
overflow-y: scroll;
text-align: center;
margin: 0 auto;
background: #444;
- z-index: 50;
}
#client_icwrapper {
@@ -701,4 +706,4 @@
.hrtext:after {
left: 0.5em;
margin-right: -50%;
-} \ No newline at end of file
+}