aboutsummaryrefslogtreecommitdiff
path: root/webAO
diff options
context:
space:
mode:
Diffstat (limited to 'webAO')
-rw-r--r--webAO/client.js18
-rw-r--r--webAO/client/setEmote.js4
-rw-r--r--webAO/master.js176
-rw-r--r--webAO/utils/calculateApngLength.js28
-rw-r--r--webAO/utils/fileExists.js37
-rw-r--r--webAO/utils/getAnimLength.js2
6 files changed, 130 insertions, 135 deletions
diff --git a/webAO/client.js b/webAO/client.js
index 0c7c4b6..e07c7e9 100644
--- a/webAO/client.js
+++ b/webAO/client.js
@@ -21,7 +21,7 @@ import chatbox_arr from './styles/chatbox/chatboxes.js';
import iniParse from './iniParse';
import getCookie from './utils/getCookie.js';
import setCookie from './utils/setCookie.js';
-import {request} from './services/request.js';
+import { request } from './services/request.js';
import { changeShoutVolume, changeSFXVolume } from './dom/changeVolume.js';
import setEmote from './client/setEmote.js';
import fileExists from './utils/fileExists.js';
@@ -790,10 +790,10 @@ class Client extends EventEmitter {
const fileUrl = charIconBaseUrl + extensions[i];
const exists = await fileExists(fileUrl);
if (exists) {
- return fileUrl
+ return fileUrl;
}
}
- return transparentPNG
+ return transparentPNG;
};
const charIconUrlResponse = await getCharIcon();
@@ -801,7 +801,7 @@ class Client extends EventEmitter {
const img = document.getElementById(`demo_${charid}`);
img.alt = chargs[0];
img.src = icon; // seems like a good time to load the icon
-
+
// If the ini doesn't exist on the server this will throw an error
try {
const cinidata = await request(`${AO_HOST}characters/${encodeURI(chargs[0].toLowerCase())}/char.ini`);
@@ -874,7 +874,7 @@ class Client extends EventEmitter {
document.getElementById('client_loadingtext').innerHTML = `Loading Character ${args[1]}/${this.char_list_length}`;
const chargs = args[i].split('&');
const charid = args[i - 1];
- setTimeout(() => this.handleCharacterInfo(chargs, charid), 500)
+ setTimeout(() => this.handleCharacterInfo(chargs, charid), 500);
}
}
// Request the next pack
@@ -892,8 +892,8 @@ class Client extends EventEmitter {
document.getElementById('client_loadingtext').innerHTML = `Loading Character ${i}/${this.char_list_length}`;
const chargs = args[i].split('&');
const charid = i - 1;
-
- this.handleCharacterInfo(chargs, charid)
+
+ this.handleCharacterInfo(chargs, charid);
}
// We're done with the characters, request the music
this.sendServer('RM#%');
@@ -1542,7 +1542,7 @@ class Client extends EventEmitter {
esfxd = 0;
}
// Make sure the asset server is case insensitive, or that everything on it is lowercase
-
+
emotes[i] = {
desc: emoteinfo[0].toLowerCase(),
preanim: emoteinfo[1].toLowerCase(),
@@ -1553,7 +1553,7 @@ class Client extends EventEmitter {
frame_screenshake: '',
frame_realization: '',
frame_sfx: '',
- button: `${AO_HOST}characters/${encodeURI(me.name.toLowerCase())}/emotions/button${i}_off.png`,
+ button: `${AO_HOST}characters/${encodeURI(me.name.toLowerCase())}/emotions/button${i}_off.png`,
};
emotesList.innerHTML
+= `<img src=${emotes[i].button}
diff --git a/webAO/client/setEmote.js b/webAO/client/setEmote.js
index 275d764..16c95be 100644
--- a/webAO/client/setEmote.js
+++ b/webAO/client/setEmote.js
@@ -17,9 +17,9 @@ const setEmote = (AO_HOST, client, charactername, emotename, prefix, pair, side)
const webp_s = document.getElementById(`client_${position}${pairID}_webp`);
const extensionsMap = {
'.gif': gif_s,
- '.png': png_s,
+ '.png': png_s,
'.apng': apng_s,
- '.webp': webp_s,
+ '.webp': webp_s,
};
for (const [extension, htmlElement] of Object.entries(extensionsMap)) {
diff --git a/webAO/master.js b/webAO/master.js
index 4589ec4..b4ead94 100644
--- a/webAO/master.js
+++ b/webAO/master.js
@@ -1,6 +1,7 @@
import FingerprintJS from '@fingerprintjs/fingerprintjs';
import { unescapeChat, safeTags } from './encoding.js';
+
const myStorage = window.localStorage;
const version = process.env.npm_package_version;
@@ -27,125 +28,124 @@ fpPromise
.then((result) => {
hdid = result.visitorId;
- check_https();
-
- fetch("https://servers.aceattorneyonline.com/servers")
+ check_https();
+
+ fetch('https://servers.aceattorneyonline.com/servers')
.then(cachedServerlist)
- .then(response => loadServerlist(response))
+ .then((response) => loadServerlist(response))
.catch(cachedServerlist);
- fetch("https://servers.aceattorneyonline.com/version")
- .then(response => response.text())
- .then(response => processVersion(response));
+ fetch('https://servers.aceattorneyonline.com/version')
+ .then((response) => response.text())
+ .then((response) => processVersion(response));
- // i don't need the ms to play alone
- setTimeout(() => checkOnline(-1, '127.0.0.1:50001'), 0);
-});
+ // i don't need the ms to play alone
+ setTimeout(() => checkOnline(-1, '127.0.0.1:50001'), 0);
+ });
export function check_https() {
- if (document.location.protocol === 'https:') {
+ if (document.location.protocol === 'https:') {
document.getElementById('https_error').style.display = '';
- }
+ }
}
export function setServ(ID) {
- selectedServer = ID;
+ selectedServer = ID;
- if (document.getElementById(`server${ID}`).className === '') { checkOnline(ID, `${servers[ID].ip}:${servers[ID].ws_port}`); }
+ if (document.getElementById(`server${ID}`).className === '') { checkOnline(ID, `${servers[ID].ip}:${servers[ID].ws_port}`); }
- if (servers[ID].description !== undefined) {
- document.getElementById('serverdescription_content').innerHTML = `<b>${servers[ID].online}</b><br>${safeTags(servers[ID].description)}`;
- } else {
- document.getElementById('serverdescription_content').innerHTML = '';
- }
+ if (servers[ID].description !== undefined) {
+ document.getElementById('serverdescription_content').innerHTML = `<b>${servers[ID].online}</b><br>${safeTags(servers[ID].description)}`;
+ } else {
+ document.getElementById('serverdescription_content').innerHTML = '';
+ }
}
window.setServ = setServ;
function checkOnline(serverID, coIP) {
- let oserv;
- if (serverID !== -2) {
- try {
- oserv = new WebSocket(`ws://${coIP}`);
- } catch (SecurityError) {
- document.getElementById(`server${serverID}`).className = 'unavailable';
- return;
- }
- }
-
- // define what the callbacks do
- function onCOOpen(_e) {
- document.getElementById(`server${serverID}`).className = 'available';
- oserv.send(`HI#${hdid}#%`);
- oserv.send('ID#webAO#webAO#%');
- }
-
- function onCOMessage(e) {
- const comsg = e.data;
- const coheader = comsg.split('#', 2)[0];
- const coarguments = comsg.split('#').slice(1);
- if (coheader === 'PN') {
- servers[serverID].online = `Online: ${Number(coarguments[0])}/${Number(coarguments[1])}`;
- oserv.close();
- return;
- } else if (coheader === 'BD') {
- servers[serverID].online = 'Banned';
- servers[serverID].description = coarguments[0];
- oserv.close();
- return;
- }
- if (serverID === selectedServer) {
- document.getElementById('serverdescription_content').innerHTML = `<b>${servers[serverID].online}</b><br>${safeTags(servers[serverID].description)}`;
- }
- }
-
- // assign the callbacks
- oserv.onopen = function (evt) {
- onCOOpen(evt);
- };
-
- oserv.onmessage = function (evt) {
- onCOMessage(evt);
- };
-
- oserv.onerror = function (_evt) {
- document.getElementById(`server${serverID}`).className = 'unavailable';
- };
+ let oserv;
+ if (serverID !== -2) {
+ try {
+ oserv = new WebSocket(`ws://${coIP}`);
+ } catch (SecurityError) {
+ document.getElementById(`server${serverID}`).className = 'unavailable';
+ return;
+ }
+ }
+
+ // define what the callbacks do
+ function onCOOpen(_e) {
+ document.getElementById(`server${serverID}`).className = 'available';
+ oserv.send(`HI#${hdid}#%`);
+ oserv.send('ID#webAO#webAO#%');
+ }
+
+ function onCOMessage(e) {
+ const comsg = e.data;
+ const coheader = comsg.split('#', 2)[0];
+ const coarguments = comsg.split('#').slice(1);
+ if (coheader === 'PN') {
+ servers[serverID].online = `Online: ${Number(coarguments[0])}/${Number(coarguments[1])}`;
+ oserv.close();
+ return;
+ } if (coheader === 'BD') {
+ servers[serverID].online = 'Banned';
+ servers[serverID].description = coarguments[0];
+ oserv.close();
+ return;
+ }
+ if (serverID === selectedServer) {
+ document.getElementById('serverdescription_content').innerHTML = `<b>${servers[serverID].online}</b><br>${safeTags(servers[serverID].description)}`;
+ }
+ }
+
+ // assign the callbacks
+ oserv.onopen = function (evt) {
+ onCOOpen(evt);
+ };
+
+ oserv.onmessage = function (evt) {
+ onCOMessage(evt);
+ };
+
+ oserv.onerror = function (_evt) {
+ document.getElementById(`server${serverID}`).className = 'unavailable';
+ };
}
function loadServerlist(thelist) {
- localStorage.setItem('masterlist', JSON.stringify(thelist));
- processServerlist(thelist)
+ localStorage.setItem('masterlist', JSON.stringify(thelist));
+ processServerlist(thelist);
}
function cachedServerlist(response) {
- if (!response.ok) {
- document.getElementById('ms_error').style.display = 'block';
- processServerlist(JSON.parse(localStorage.getItem('masterlist')));
- return;
- }
- return response.json();
+ if (!response.ok) {
+ document.getElementById('ms_error').style.display = 'block';
+ processServerlist(JSON.parse(localStorage.getItem('masterlist')));
+ return;
+ }
+ return response.json();
}
function processServerlist(thelist) {
- for (let i = 0; i < thelist.length - 1; i++) {
- const serverEntry = thelist[i];
+ for (let i = 0; i < thelist.length - 1; i++) {
+ const serverEntry = thelist[i];
- servers[i] = serverEntry;
+ servers[i] = serverEntry;
- const ipport = serverEntry.ip + ":" + serverEntry.ws_port;
+ const ipport = `${serverEntry.ip}:${serverEntry.ws_port}`;
- if (serverEntry.ws_port) {
- document.getElementById("masterlist").innerHTML +=
- `<li id="server${i}" onmouseover="setServ(${i})"><p>${safeTags(serverEntry.name)}</p>`
+ if (serverEntry.ws_port) {
+ document.getElementById('masterlist').innerHTML
+ += `<li id="server${i}" onmouseover="setServ(${i})"><p>${safeTags(serverEntry.name)}</p>`
+ `<a class="button" href="client.html?mode=watch&ip=${ipport}">Watch</a>`
+ `<a class="button" href="client.html?mode=join&ip=${ipport}">Join</a></li>`;
- }
- }
- return;
+ }
+ }
}
function processVersion(data) {
- console.debug(data);
- document.getElementById("clientinfo").innerHTML = `Client version: ${version}`;
- document.getElementById("serverinfo").innerHTML = `Master server version: ${data}`;
+ console.debug(data);
+ document.getElementById('clientinfo').innerHTML = `Client version: ${version}`;
+ document.getElementById('serverinfo').innerHTML = `Master server version: ${data}`;
}
diff --git a/webAO/utils/calculateApngLength.js b/webAO/utils/calculateApngLength.js
index 86c2073..932f581 100644
--- a/webAO/utils/calculateApngLength.js
+++ b/webAO/utils/calculateApngLength.js
@@ -1,25 +1,25 @@
- /**
+/**
* Adds up the chunk delays to find out how long a APNG is
* @param {data} apngFile the APNG data
*/
const calculateApngLength = (apngFile) => {
const d = new Uint8Array(apngFile);
- // https://wiki.mozilla.org/APNG_Specification#.60fcTL.60:_The_Frame_Control_Chunk
- let duration = 0;
- for (var i = 0; i < d.length; i++) {
- // Find fcTL header (66 63 54 4C)
- if (d[i] === 0x66
+ // https://wiki.mozilla.org/APNG_Specification#.60fcTL.60:_The_Frame_Control_Chunk
+ let duration = 0;
+ for (let i = 0; i < d.length; i++) {
+ // Find fcTL header (66 63 54 4C)
+ if (d[i] === 0x66
&& d[i + 1] === 0x63
&& d[i + 2] === 0x54
&& d[i + 3] === 0x4C) {
- // numerator and denominator
- let delay = ((d[i + 21] / d[i + 23]) * 1000)
+ // numerator and denominator
+ const delay = ((d[i + 21] / d[i + 23]) * 1000);
- // minimum is 100ms
- duration += delay < 100 ? 100 : delay;
- }
- }
- console.debug(duration);
- return duration * 10;
+ // minimum is 100ms
+ duration += delay < 100 ? 100 : delay;
+ }
+ }
+ console.debug(duration);
+ return duration * 10;
};
export default calculateApngLength;
diff --git a/webAO/utils/fileExists.js b/webAO/utils/fileExists.js
index 3065112..13958e0 100644
--- a/webAO/utils/fileExists.js
+++ b/webAO/utils/fileExists.js
@@ -1,23 +1,18 @@
-
-const fileExists = async (url) => {
- return new Promise((resolve, reject) => {
- const xhr = new XMLHttpRequest();
- xhr.open('HEAD', url);
- xhr.onload = function (e) {
- if (xhr.readyState === 4) {
- if (xhr.status === 200) {
- resolve(true)
- } else {
- reject(false)
- }
+const fileExists = async (url) => new Promise((resolve, reject) => {
+ const xhr = new XMLHttpRequest();
+ xhr.open('HEAD', url);
+ xhr.onload = function (e) {
+ if (xhr.readyState === 4) {
+ if (xhr.status === 200) {
+ resolve(true);
+ } else {
+ reject(false);
}
- };
- xhr.onerror = function (e) {
- resolve(false)
- };
- xhr.send(null);
- })
-
-
-};
+ }
+ };
+ xhr.onerror = function (e) {
+ resolve(false);
+ };
+ xhr.send(null);
+});
export default fileExists;
diff --git a/webAO/utils/getAnimLength.js b/webAO/utils/getAnimLength.js
index 1441548..aa303cf 100644
--- a/webAO/utils/getAnimLength.js
+++ b/webAO/utils/getAnimLength.js
@@ -1,6 +1,6 @@
import calculatorHandler from './calculatorHandler';
import fileExists from './fileExists.js';
-import {requestBuffer} from '../services/request.js';
+import { requestBuffer } from '../services/request.js';
/**
* Gets animation length. If the animation cannot be found, it will
* silently fail and return 0 instead.