"use strict";
let main, windows;
let defaultLocation = '/welcome';
let token = "";
let domain = "";
let dest = "";
function createWelcomeWindow() {
let win = document.createElement("div");
win.id = "welcome-win";
win.innerHTML = `
Welcome to Locutus!
Login`;
while (windows.lastChild) windows.removeChild(windows.lastChild);
windows.appendChild(win);
}
function createChatWindow() {
let win = document.createElement("div");
win.id = "chat-win";
win.innerHTML = `
Test Message
`;
win.getElementById("sendMessage").addEventListener("keyup", (evt) => {
if (evt.keyCode === 13) {
evt.preventDefault();
//TODO: Send Message
}
});
main.appendChild(win);
}
async function sendEvent(message) {
let res = await fetch(dest, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `usimp ${token}`,
},
body: message
});
let result = await res;
alert(result.message);
}
function createLoginWindow() {
let win = document.createElement("div");
win.id = "login-win";
win.innerHTML = `
Login to USIMP Account
`;
win.getElementsByTagName("form")[0].addEventListener("submit", (evt) => {
evt.preventDefault();
let form = evt.target;
for (let e of form) e.disabled = true;
for (let d of form.getElementsByTagName("div")) {
form.removeChild(d);
}
function formError(msg) {
let div = document.createElement("div");
div.classList.add("error");
div.innerText = msg;
form.appendChild(div);
}
usimp.lookup(form.domain.value)
.then(res => {
if (res.ok) {
res.json()
.then(data => {
console.log(data["domain"]);
let domainServer = usimp.chooseDomainServer(data["domain_servers"]);
console.log(domainServer);
dest = "http://" + domainServer.host + ':' + domainServer.protocols.http + "/"
usimp.login(domainServer, data["domain"].id, form.elements["account"].value, form.elements["password"].value)
.then(res => res.json())
.then(data => {
token = data.token;
console.log(data.token);
})
})
.catch(reason => {
console.error(reason);
formError("Could not communicate with USIMP domain");
})
} else {
document.getElementsByName("domain")[0].setAttribute("invalid", "invalid");
formError("Invalid USIMP domain");
}
})
.catch(reason => {
document.getElementsByName("domain")[0].setAttribute("invalid", "invalid");
formError("Invalid USIMP domain");
})
.finally(() => {
for (let e of form) e.disabled = false;
});
});
while (windows.lastChild) windows.removeChild(windows.lastChild);
windows.appendChild(win);
document.getElementsByName("domain")[0].addEventListener("input", (evt) => {
evt.target.removeAttribute("invalid");
});
document.getElementsByName("account")[0].focus();
}
function handleHash(hash) {
if (hash[0] === '#') hash = hash.substr(1);
switch (hash) {
case "/welcome": createWelcomeWindow(); break;
case "/login": createLoginWindow(); break;
default:
console.warn(`Invalid url hash #${hash}`);
history.replaceState(null, null, `#${defaultLocation}`);
handleHash(defaultLocation)
return;
}
let url = new URL(document.URL);
url.hash = hash;
location.href = url.toString();
}
function handleUrl(url) {
handleHash(new URL(url).hash);
}
window.addEventListener("DOMContentLoaded", (evt) => {
main = document.getElementsByTagName("main")[0];
windows = document.getElementById("windows");
// Remove