1d4afb5ceSopenharmony_ci(function() { 2d4afb5ceSopenharmony_ci 3d4afb5ceSopenharmony_ci var server_max_size = 0, ws; 4d4afb5ceSopenharmony_ci 5d4afb5ceSopenharmony_ci function san(s) 6d4afb5ceSopenharmony_ci { 7d4afb5ceSopenharmony_ci if (!s) 8d4afb5ceSopenharmony_ci return ""; 9d4afb5ceSopenharmony_ci 10d4afb5ceSopenharmony_ci return s.replace(/&/g, "&"). 11d4afb5ceSopenharmony_ci replace(/\</g, "<"). 12d4afb5ceSopenharmony_ci replace(/\>/g, ">"). 13d4afb5ceSopenharmony_ci replace(/\"/g, """). 14d4afb5ceSopenharmony_ci replace(/%/g, "%"); 15d4afb5ceSopenharmony_ci } 16d4afb5ceSopenharmony_ci 17d4afb5ceSopenharmony_ci function lws_urlencode(s) 18d4afb5ceSopenharmony_ci { 19d4afb5ceSopenharmony_ci return encodeURI(s).replace(/@/g, "%40"); 20d4afb5ceSopenharmony_ci } 21d4afb5ceSopenharmony_ci 22d4afb5ceSopenharmony_ci function trim(num) 23d4afb5ceSopenharmony_ci { 24d4afb5ceSopenharmony_ci var s = num.toString(); 25d4afb5ceSopenharmony_ci 26d4afb5ceSopenharmony_ci if (!s.indexOf(".")) 27d4afb5ceSopenharmony_ci return s; 28d4afb5ceSopenharmony_ci 29d4afb5ceSopenharmony_ci while (s.length && s[s.length - 1] === "0") 30d4afb5ceSopenharmony_ci s = s.substring(0, s.length - 1); 31d4afb5ceSopenharmony_ci 32d4afb5ceSopenharmony_ci if (s[s.length - 1] === ".") 33d4afb5ceSopenharmony_ci s = s.substring(0, s.length - 1); 34d4afb5ceSopenharmony_ci 35d4afb5ceSopenharmony_ci return s; 36d4afb5ceSopenharmony_ci } 37d4afb5ceSopenharmony_ci 38d4afb5ceSopenharmony_ci function humanize(n) 39d4afb5ceSopenharmony_ci { 40d4afb5ceSopenharmony_ci if (n < 1024) 41d4afb5ceSopenharmony_ci return n + "B"; 42d4afb5ceSopenharmony_ci 43d4afb5ceSopenharmony_ci if (n < 1024 * 1024) 44d4afb5ceSopenharmony_ci return trim((n / 1024).toFixed(2)) + "KiB"; 45d4afb5ceSopenharmony_ci 46d4afb5ceSopenharmony_ci if (n < 1024 * 1024 * 1024) 47d4afb5ceSopenharmony_ci return trim((n / (1024 * 1024)).toFixed(2)) + "MiB"; 48d4afb5ceSopenharmony_ci 49d4afb5ceSopenharmony_ci return trim((n / (1024 * 1024 * 1024)).toFixed(2)) + "GiB"; 50d4afb5ceSopenharmony_ci } 51d4afb5ceSopenharmony_ci 52d4afb5ceSopenharmony_ci function da_enter(e) 53d4afb5ceSopenharmony_ci { 54d4afb5ceSopenharmony_ci var da = document.getElementById("da"); 55d4afb5ceSopenharmony_ci 56d4afb5ceSopenharmony_ci e.preventDefault(); 57d4afb5ceSopenharmony_ci da.classList.add("trot"); 58d4afb5ceSopenharmony_ci } 59d4afb5ceSopenharmony_ci 60d4afb5ceSopenharmony_ci function da_leave(e) 61d4afb5ceSopenharmony_ci { 62d4afb5ceSopenharmony_ci var da = document.getElementById("da"); 63d4afb5ceSopenharmony_ci 64d4afb5ceSopenharmony_ci e.preventDefault(); 65d4afb5ceSopenharmony_ci da.classList.remove("trot"); 66d4afb5ceSopenharmony_ci } 67d4afb5ceSopenharmony_ci 68d4afb5ceSopenharmony_ci function da_over(e) 69d4afb5ceSopenharmony_ci { 70d4afb5ceSopenharmony_ci var da = document.getElementById("da"); 71d4afb5ceSopenharmony_ci 72d4afb5ceSopenharmony_ci e.preventDefault(); 73d4afb5ceSopenharmony_ci da.classList.add("trot"); 74d4afb5ceSopenharmony_ci } 75d4afb5ceSopenharmony_ci 76d4afb5ceSopenharmony_ci function clear_errors() { 77d4afb5ceSopenharmony_ci var n, t = document.getElementById("ongoing"); 78d4afb5ceSopenharmony_ci 79d4afb5ceSopenharmony_ci for (n = 0; n < t.rows.length; n++) 80d4afb5ceSopenharmony_ci if (t.rows[n].cells[0].classList.contains("err")) 81d4afb5ceSopenharmony_ci t.deleteRow(n); 82d4afb5ceSopenharmony_ci } 83d4afb5ceSopenharmony_ci 84d4afb5ceSopenharmony_ci function do_upload(file) { 85d4afb5ceSopenharmony_ci var formData = new FormData(); 86d4afb5ceSopenharmony_ci var t = document.getElementById("ongoing"); 87d4afb5ceSopenharmony_ci 88d4afb5ceSopenharmony_ci formData.append("file", file); 89d4afb5ceSopenharmony_ci 90d4afb5ceSopenharmony_ci var row = t.insertRow(0), c1 = row.insertCell(0), 91d4afb5ceSopenharmony_ci c2 = row.insertCell(1), c3 = row.insertCell(2); 92d4afb5ceSopenharmony_ci 93d4afb5ceSopenharmony_ci c1.classList.add("ogn"); 94d4afb5ceSopenharmony_ci c1.classList.add("r"); 95d4afb5ceSopenharmony_ci 96d4afb5ceSopenharmony_ci if (file.size > server_max_size) { 97d4afb5ceSopenharmony_ci c1.innerHTML = "Too Large"; 98d4afb5ceSopenharmony_ci c1.classList.add("err"); 99d4afb5ceSopenharmony_ci } else 100d4afb5ceSopenharmony_ci c1.innerHTML = "<img class=\"working\">"; 101d4afb5ceSopenharmony_ci 102d4afb5ceSopenharmony_ci c2.classList.add("ogn"); 103d4afb5ceSopenharmony_ci c2.classList.add("r"); 104d4afb5ceSopenharmony_ci c2.innerHTML = humanize(file.size); 105d4afb5ceSopenharmony_ci 106d4afb5ceSopenharmony_ci c3.classList.add("ogn"); 107d4afb5ceSopenharmony_ci c3.innerHTML = file.name; 108d4afb5ceSopenharmony_ci 109d4afb5ceSopenharmony_ci if (file.size > server_max_size) 110d4afb5ceSopenharmony_ci return; 111d4afb5ceSopenharmony_ci 112d4afb5ceSopenharmony_ci fetch("upload/" + lws_urlencode(file.name), { 113d4afb5ceSopenharmony_ci method: "POST", 114d4afb5ceSopenharmony_ci body: formData 115d4afb5ceSopenharmony_ci }) 116d4afb5ceSopenharmony_ci .then((e) => { /* this just means we got a response code */ 117d4afb5ceSopenharmony_ci var us = e.url.split("/"), ul = us[us.length - 1], n; 118d4afb5ceSopenharmony_ci 119d4afb5ceSopenharmony_ci for (n = 0; n < t.rows.length; n++) 120d4afb5ceSopenharmony_ci if (ul === lws_urlencode( 121d4afb5ceSopenharmony_ci t.rows[n].cells[2].textContent)) { 122d4afb5ceSopenharmony_ci if (e.ok === true) { 123d4afb5ceSopenharmony_ci t.deleteRow(n); 124d4afb5ceSopenharmony_ci } else { 125d4afb5ceSopenharmony_ci t.rows[n].cells[0].textContent = 126d4afb5ceSopenharmony_ci "Failed " + san(e.status.toString()); 127d4afb5ceSopenharmony_ci t.rows[n].cells[0]. 128d4afb5ceSopenharmony_ci classList.add("err"); 129d4afb5ceSopenharmony_ci } 130d4afb5ceSopenharmony_ci break; 131d4afb5ceSopenharmony_ci } 132d4afb5ceSopenharmony_ci }) 133d4afb5ceSopenharmony_ci .catch((e) => { 134d4afb5ceSopenharmony_ci var us = e.url.split("/"), ul = us[us.length - 1], n; 135d4afb5ceSopenharmony_ci 136d4afb5ceSopenharmony_ci for (n = 0; n < t.rows.length; n++) 137d4afb5ceSopenharmony_ci if (ul === lws_urlencode( 138d4afb5ceSopenharmony_ci t.rows[n].cells[2].textContent)) { 139d4afb5ceSopenharmony_ci t.rows[n].cells[0] = "FAIL"; 140d4afb5ceSopenharmony_ci break; 141d4afb5ceSopenharmony_ci } 142d4afb5ceSopenharmony_ci }); 143d4afb5ceSopenharmony_ci } 144d4afb5ceSopenharmony_ci 145d4afb5ceSopenharmony_ci function da_drop(e) { 146d4afb5ceSopenharmony_ci var da = document.getElementById("da"); 147d4afb5ceSopenharmony_ci 148d4afb5ceSopenharmony_ci e.preventDefault(); 149d4afb5ceSopenharmony_ci da.classList.remove("trot"); 150d4afb5ceSopenharmony_ci 151d4afb5ceSopenharmony_ci clear_errors(); 152d4afb5ceSopenharmony_ci 153d4afb5ceSopenharmony_ci ([...e.dataTransfer.files]).forEach(do_upload); 154d4afb5ceSopenharmony_ci } 155d4afb5ceSopenharmony_ci 156d4afb5ceSopenharmony_ci function upl_button(e) { 157d4afb5ceSopenharmony_ci var fi = document.getElementById("file"); 158d4afb5ceSopenharmony_ci 159d4afb5ceSopenharmony_ci clear_errors(); 160d4afb5ceSopenharmony_ci e.preventDefault(); 161d4afb5ceSopenharmony_ci 162d4afb5ceSopenharmony_ci ([...fi.files]).forEach(do_upload); 163d4afb5ceSopenharmony_ci } 164d4afb5ceSopenharmony_ci 165d4afb5ceSopenharmony_ci function body_drop(e) { 166d4afb5ceSopenharmony_ci e.preventDefault(); 167d4afb5ceSopenharmony_ci } 168d4afb5ceSopenharmony_ci 169d4afb5ceSopenharmony_ci function inp() { 170d4afb5ceSopenharmony_ci var fi = document.getElementById("file"), 171d4afb5ceSopenharmony_ci upl = document.getElementById("upl"); 172d4afb5ceSopenharmony_ci console.log("inp"); 173d4afb5ceSopenharmony_ci upl.disabled = !fi.files.length; 174d4afb5ceSopenharmony_ci } 175d4afb5ceSopenharmony_ci 176d4afb5ceSopenharmony_ci function delfile(e) 177d4afb5ceSopenharmony_ci { 178d4afb5ceSopenharmony_ci e.stopPropagation(); 179d4afb5ceSopenharmony_ci e.preventDefault(); 180d4afb5ceSopenharmony_ci 181d4afb5ceSopenharmony_ci ws.send("{\"del\":\"" + decodeURI(e.target.getAttribute("file")) + 182d4afb5ceSopenharmony_ci "\"}"); 183d4afb5ceSopenharmony_ci } 184d4afb5ceSopenharmony_ci 185d4afb5ceSopenharmony_ci function get_appropriate_ws_url(extra_url) 186d4afb5ceSopenharmony_ci { 187d4afb5ceSopenharmony_ci var pcol; 188d4afb5ceSopenharmony_ci var u = document.URL; 189d4afb5ceSopenharmony_ci 190d4afb5ceSopenharmony_ci /* 191d4afb5ceSopenharmony_ci * We open the websocket encrypted if this page came on an 192d4afb5ceSopenharmony_ci * https:// url itself, otherwise unencrypted 193d4afb5ceSopenharmony_ci */ 194d4afb5ceSopenharmony_ci 195d4afb5ceSopenharmony_ci if (u.substring(0, 5) === "https") { 196d4afb5ceSopenharmony_ci pcol = "wss://"; 197d4afb5ceSopenharmony_ci u = u.substr(8); 198d4afb5ceSopenharmony_ci } else { 199d4afb5ceSopenharmony_ci pcol = "ws://"; 200d4afb5ceSopenharmony_ci if (u.substring(0, 4) === "http") 201d4afb5ceSopenharmony_ci u = u.substr(7); 202d4afb5ceSopenharmony_ci } 203d4afb5ceSopenharmony_ci 204d4afb5ceSopenharmony_ci u = u.split("/"); 205d4afb5ceSopenharmony_ci 206d4afb5ceSopenharmony_ci /* + "/xxx" bit is for IE10 workaround */ 207d4afb5ceSopenharmony_ci 208d4afb5ceSopenharmony_ci return pcol + u[0] + "/" + extra_url; 209d4afb5ceSopenharmony_ci } 210d4afb5ceSopenharmony_ci 211d4afb5ceSopenharmony_ci function new_ws(urlpath, protocol) 212d4afb5ceSopenharmony_ci { 213d4afb5ceSopenharmony_ci return new WebSocket(urlpath, protocol); 214d4afb5ceSopenharmony_ci } 215d4afb5ceSopenharmony_ci 216d4afb5ceSopenharmony_ci document.addEventListener("DOMContentLoaded", function() { 217d4afb5ceSopenharmony_ci var da = document.getElementById("da"), 218d4afb5ceSopenharmony_ci fi = document.getElementById("file"), 219d4afb5ceSopenharmony_ci upl = document.getElementById("upl"); 220d4afb5ceSopenharmony_ci 221d4afb5ceSopenharmony_ci da.addEventListener("dragenter", da_enter, false); 222d4afb5ceSopenharmony_ci da.addEventListener("dragleave", da_leave, false); 223d4afb5ceSopenharmony_ci da.addEventListener("dragover", da_over, false); 224d4afb5ceSopenharmony_ci da.addEventListener("drop", da_drop, false); 225d4afb5ceSopenharmony_ci 226d4afb5ceSopenharmony_ci upl.addEventListener("click", upl_button, false); 227d4afb5ceSopenharmony_ci fi.addEventListener("change", inp, false); 228d4afb5ceSopenharmony_ci 229d4afb5ceSopenharmony_ci window.addEventListener("dragover", body_drop, false); 230d4afb5ceSopenharmony_ci window.addEventListener("drop", body_drop, false); 231d4afb5ceSopenharmony_ci 232d4afb5ceSopenharmony_ci ws = new_ws(get_appropriate_ws_url(""), "lws-deaddrop"); 233d4afb5ceSopenharmony_ci try { 234d4afb5ceSopenharmony_ci ws.onopen = function() { 235d4afb5ceSopenharmony_ci var dd = document.getElementById("ddrop"), 236d4afb5ceSopenharmony_ci da = document.getElementById("da"); 237d4afb5ceSopenharmony_ci 238d4afb5ceSopenharmony_ci dd.classList.remove("noconn"); 239d4afb5ceSopenharmony_ci da.classList.remove("disa"); 240d4afb5ceSopenharmony_ci }; 241d4afb5ceSopenharmony_ci 242d4afb5ceSopenharmony_ci ws.onmessage = function got_packet(msg) { 243d4afb5ceSopenharmony_ci var j = JSON.parse(msg.data), s = "", n, 244d4afb5ceSopenharmony_ci t = document.getElementById("dd-list"); 245d4afb5ceSopenharmony_ci 246d4afb5ceSopenharmony_ci server_max_size = j.max_size; 247d4afb5ceSopenharmony_ci document.getElementById("size").innerHTML = 248d4afb5ceSopenharmony_ci "Server maximum file size " + 249d4afb5ceSopenharmony_ci humanize(j.max_size); 250d4afb5ceSopenharmony_ci 251d4afb5ceSopenharmony_ci s += "<table class=\"nb\">"; 252d4afb5ceSopenharmony_ci for (n = 0; n < j.files.length; n++) { 253d4afb5ceSopenharmony_ci var date = new Date(j.files[n].mtime * 1000); 254d4afb5ceSopenharmony_ci s += "<tr><td class=\"dow r\">" + 255d4afb5ceSopenharmony_ci humanize(j.files[n].size) + 256d4afb5ceSopenharmony_ci "</td><td class=\"dow\">" + 257d4afb5ceSopenharmony_ci date.toDateString() + " " + 258d4afb5ceSopenharmony_ci date.toLocaleTimeString() + 259d4afb5ceSopenharmony_ci "</td><td>"; 260d4afb5ceSopenharmony_ci if (j.files[n].yours === 1) 261d4afb5ceSopenharmony_ci s += "<img id=\"d" + n + 262d4afb5ceSopenharmony_ci "\" class=\"delbtn\" file=\"" + 263d4afb5ceSopenharmony_ci lws_urlencode(san(j.files[n].name)) + "\">"; 264d4afb5ceSopenharmony_ci else 265d4afb5ceSopenharmony_ci s += " "; 266d4afb5ceSopenharmony_ci 267d4afb5ceSopenharmony_ci s += "</td><td class=\"ogn\"><a href=\"get/" + 268d4afb5ceSopenharmony_ci lws_urlencode(san(j.files[n].name)) + 269d4afb5ceSopenharmony_ci "\" download>" + 270d4afb5ceSopenharmony_ci san(j.files[n].name) + "</a></td></tr>"; 271d4afb5ceSopenharmony_ci } 272d4afb5ceSopenharmony_ci s += "</table>"; 273d4afb5ceSopenharmony_ci 274d4afb5ceSopenharmony_ci t.innerHTML = s; 275d4afb5ceSopenharmony_ci 276d4afb5ceSopenharmony_ci for (n = 0; n < j.files.length; n++) { 277d4afb5ceSopenharmony_ci var d = document.getElementById("d" + n); 278d4afb5ceSopenharmony_ci if (d) 279d4afb5ceSopenharmony_ci d.addEventListener("click", 280d4afb5ceSopenharmony_ci delfile, false); 281d4afb5ceSopenharmony_ci } 282d4afb5ceSopenharmony_ci }; 283d4afb5ceSopenharmony_ci 284d4afb5ceSopenharmony_ci ws.onclose = function() { 285d4afb5ceSopenharmony_ci var dd = document.getElementById("ddrop"), 286d4afb5ceSopenharmony_ci da = document.getElementById("da"); 287d4afb5ceSopenharmony_ci 288d4afb5ceSopenharmony_ci dd.classList.add("noconn"); 289d4afb5ceSopenharmony_ci da.classList.add("disa"); 290d4afb5ceSopenharmony_ci }; 291d4afb5ceSopenharmony_ci } catch(exception) { 292d4afb5ceSopenharmony_ci alert("<p>Error " + exception); 293d4afb5ceSopenharmony_ci } 294d4afb5ceSopenharmony_ci 295d4afb5ceSopenharmony_ci }); 296d4afb5ceSopenharmony_ci}()); 297