import { Localuser } from "./localuser.js"; import { Contextmenu } from "./contextmenu.js"; import { mobile, getBulkUsers, setTheme } from "./login.js"; async function waitforload() { let res; new Promise(r => { res = r; }); document.addEventListener("DOMContentLoaded", function () { res(); }); await res; } await waitforload(); const users = getBulkUsers(); if (!users.currentuser) { window.location.href = '/login.html'; } var info = users.users[users.currentuser].serverurls; let token = users.users[users.currentuser].token; let READY; let thisuser = new Localuser(users.users[users.currentuser]); thisuser.initwebsocket().then(_ => { thisuser.loaduser(); thisuser.init(); document.getElementById("loading").classList.add("doneloading"); document.getElementById("loading").classList.remove("loading"); console.log("done loading"); }); { const userinfo = document.getElementById("userinfo"); const userdock = document.getElementById("userdock"); userinfo.addEventListener("click", function (event) { const table = document.createElement("table"); for (const thing of Object.values(users.users)) { const specialuser = thing; console.log(specialuser.pfpsrc); const tr = document.createElement("tr"); const td = document.createElement("td"); const userinfo = document.createElement("table"); userinfo.classList.add("switchtable"); const row = document.createElement("tr"); userinfo.append(row); const pfpcell = document.createElement("td"); row.append(pfpcell); const pfp = document.createElement("img"); pfpcell.append(pfp); const usertd = document.createElement("td"); row.append(usertd); const user = document.createElement("div"); usertd.append(user); user.append(specialuser.username); user.append(document.createElement("br")); const span = document.createElement("span"); span.textContent = specialuser.serverurls.wellknown.hostname; user.append(span); span.classList.add("serverURL"); pfp.src = specialuser.pfpsrc; pfp.classList.add("pfp"); td.append(userinfo); tr.append(td); table.append(tr); tr.addEventListener("click", _ => { thisuser.unload(); document.getElementById("loading").classList.remove("doneloading"); document.getElementById("loading").classList.add("loading"); thisuser = new Localuser(specialuser); users["currentuser"] = specialuser.uid; localStorage.setItem("userinfos", JSON.stringify(users)); thisuser.initwebsocket().then(_ => { thisuser.loaduser(); thisuser.init(); document.getElementById("loading").classList.add("doneloading"); document.getElementById("loading").classList.remove("loading"); console.log("done loading"); }); }); } { const tr = document.createElement("tr"); const td = document.createElement("td"); tr.append(td); td.append("Switch accounts ⇌"); td.addEventListener("click", _ => { window.location.href = "/login.html"; }); table.append(tr); } table.classList.add("accountSwitcher"); if (Contextmenu.currentmenu != "") { Contextmenu.currentmenu.remove(); } Contextmenu.currentmenu = table; console.log(table); userdock.before(table); event.stopImmediatePropagation(); }); } { const menu = new Contextmenu("create rightclick"); menu.addbutton("Create channel", function () { thisuser.lookingguild.createchannels(); }, null, _ => { return thisuser.isAdmin(); }); menu.addbutton("Create category", function () { thisuser.lookingguild.createcategory(); }, null, _ => { return thisuser.isAdmin(); }); menu.bind(document.getElementById("channels")); } function editchannelf(channel) { channel.editChannel(); } const pasteimage = document.getElementById("pasteimage"); let replyingto = null; async function enter(event) { const channel = thisuser.channelfocus; channel.typingstart(); if (event.key === "Enter" && !event.shiftKey) { event.preventDefault(); if (channel.editing) { channel.editing.edit((typebox).value); channel.editing = null; } else { replyingto = thisuser.channelfocus.replyingto; let replying = replyingto; if (replyingto) { replyingto.div.classList.remove("replying"); } thisuser.channelfocus.replyingto = null; channel.sendMessage(typebox.value, { attachments: images, replyingto: replying, }); thisuser.channelfocus.makereplybox(); } while (images.length != 0) { images.pop(); pasteimage.removeChild(imageshtml.pop()); } typebox.value = ""; return; } } const typebox = document.getElementById("typebox"); typebox.addEventListener("keyup", enter); typebox.addEventListener("keydown", event => { if (event.key === "Enter" && !event.shiftKey) event.preventDefault(); }); console.log(typebox); typebox.onclick = console.log; let serverz = 0; let serverid = []; let cchanel = 0; function getguildinfo() { const path = window.location.pathname.split("/"); const channel = path[3]; this.ws.send(JSON.stringify({ op: 14, d: { guild_id: path[2], channels: { [channel]: [[0, 99]] } } })); } const images = []; const imageshtml = []; function createunknown(fname, fsize) { const div = document.createElement("table"); div.classList.add("unknownfile"); const nametr = document.createElement("tr"); div.append(nametr); const fileicon = document.createElement("td"); nametr.append(fileicon); fileicon.append("🗎"); fileicon.classList.add("fileicon"); fileicon.rowSpan = 2; const nametd = document.createElement("td"); { nametd.textContent = fname; } nametd.classList.add("filename"); nametr.append(nametd); const sizetr = document.createElement("tr"); const size = document.createElement("td"); sizetr.append(size); size.textContent = "Size:" + filesizehuman(fsize); size.classList.add("filesize"); div.appendChild(sizetr); return div; } function filesizehuman(fsize) { var i = fsize == 0 ? 0 : Math.floor(Math.log(fsize) / Math.log(1024)); return +((fsize / Math.pow(1024, i)).toFixed(2)) * 1 + ' ' + ['Bytes', 'Kilobytes', 'Megabytes', 'Gigabytes', 'Terabytes'][i]; } function createunknownfile(file) { return createunknown(file.name, file.size); } function filetohtml(file) { if (file.type.startsWith('image/')) { const img = document.createElement('img'); const blob = URL.createObjectURL(file); img.src = blob; return img; } else { console.log(file.name); return createunknownfile(file); } } import { File } from "./file.js"; document.addEventListener('paste', async (e) => { Array.from(e.clipboardData.files).forEach(async (f) => { const file = File.initFromBlob(f); e.preventDefault(); const html = file.upHTML(images, f); pasteimage.appendChild(html); images.push(f); imageshtml.push(html); }); }); setTheme(); function userSettings() { thisuser.usersettings.show(); } document.getElementById("settings").onclick = userSettings; let triggered = false; document.getElementById("messagecontainer").addEventListener("scroll", (e) => { const messagecontainer = document.getElementById("messagecontainer"); if (messagecontainer.scrollTop < 2000) { if (!triggered) { thisuser.lookingguild.prevchannel.grabmoremessages().then(() => { triggered = false; if (messagecontainer.scrollTop === 0) { messagecontainer.scrollTop = 1; } }); } triggered = true; } else { if (Math.abs(messagecontainer.scrollHeight - messagecontainer.scrollTop - messagecontainer.clientHeight) < 3) { thisuser.lookingguild.prevchannel.readbottom(); } } // }); if (mobile) { document.getElementById("channelw").onclick = function () { document.getElementById("channels").parentNode.classList.add("collapse"); document.getElementById("servertd").classList.add("collapse"); document.getElementById("servers").classList.add("collapse"); }; document.getElementById("mobileback").textContent = "#"; document.getElementById("mobileback").onclick = function () { document.getElementById("channels").parentNode.classList.remove("collapse"); document.getElementById("servertd").classList.remove("collapse"); document.getElementById("servers").classList.remove("collapse"); }; } /* { const messages=document.getElementById("messages"); let height=messages.clientHeight; // const resizeObserver=new ResizeObserver(()=>{ console.log(messages.scrollTop,messages.clientHeight-height-messages.scrollHeight); messages.scrollTop-=height-messages.scrollHeight; console.log(messages.scrollTop) //if(shouldsnap){ // document.getElementById("messagecontainer").scrollTop = document.getElementById("messagecontainer").scrollHeight; //} height=messages.scrollHeight; }) resizeObserver.observe(messages) } */