|
1 | 1 | (function() { |
2 | 2 |
|
3 | | - var server_max_size = 0, ws; |
| 3 | + var server_max_size = 0, username = "", ws; |
4 | 4 |
|
5 | 5 | function san(s) |
6 | 6 | { |
|
14 | 14 | replace(/%/g, "%"); |
15 | 15 | } |
16 | 16 |
|
| 17 | + function pad(n) { |
| 18 | + return n < 10 ? '0' + n : n; |
| 19 | + } |
| 20 | + |
17 | 21 | function lws_urlencode(s) |
18 | 22 | { |
19 | 23 | return encodeURI(s).replace(/@/g, "%40"); |
|
64 | 68 | { |
65 | 69 | var da = document.getElementById("da"); |
66 | 70 |
|
67 | | - e.preventDefault(); |
| 71 | + e.preventDefault(); |
68 | 72 | da.classList.remove("trot"); |
69 | 73 | } |
70 | 74 |
|
71 | 75 | function da_over(e) |
72 | 76 | { |
73 | 77 | var da = document.getElementById("da"); |
74 | 78 |
|
75 | | - e.preventDefault(); |
| 79 | + e.preventDefault(); |
76 | 80 | da.classList.add("trot"); |
77 | 81 | } |
78 | 82 |
|
|
84 | 88 | t.deleteRow(n); |
85 | 89 | } |
86 | 90 |
|
87 | | - function do_upload(file) { |
88 | | - var formData = new FormData(); |
| 91 | + /* |
| 92 | + * Generic uploader: takes FormData, a display name and a display size |
| 93 | + */ |
| 94 | + function _do_upload(formData, displayName, displaySize) { |
89 | 95 | var t = document.getElementById("ongoing"); |
90 | | - |
91 | | - formData.append("file", file); |
92 | | - |
93 | 96 | var row = t.insertRow(0), c1 = row.insertCell(0), |
94 | | - c2 = row.insertCell(1), c3 = row.insertCell(2); |
| 97 | + c2 = row.insertCell(1), c3 = row.insertCell(2); |
95 | 98 |
|
96 | 99 | c1.classList.add("ogn"); |
97 | 100 | c1.classList.add("r"); |
98 | 101 |
|
99 | | - if (file.size > server_max_size) { |
| 102 | + if (displaySize > server_max_size) { |
100 | 103 | c1.innerHTML = "Too Large"; |
101 | 104 | c1.classList.add("err"); |
102 | 105 | } else |
103 | 106 | c1.innerHTML = "<img class=\"working\">"; |
104 | 107 |
|
105 | 108 | c2.classList.add("ogn"); |
106 | 109 | c2.classList.add("r"); |
107 | | - c2.innerHTML = humanize(file.size); |
| 110 | + c2.innerHTML = humanize(displaySize); |
108 | 111 |
|
109 | 112 | c3.classList.add("ogn"); |
110 | | - c3.innerHTML = san(file.name); |
| 113 | + c3.innerHTML = san(displayName); |
111 | 114 |
|
112 | | - if (file.size > server_max_size) |
| 115 | + if (displaySize > server_max_size) |
113 | 116 | return; |
114 | 117 |
|
115 | | - fetch("upload/" + lws_urlencode(file.name), { |
| 118 | + fetch("upload/" + lws_urlencode(displayName), { |
116 | 119 | method: "POST", |
117 | 120 | body: formData |
118 | 121 | }) |
119 | | - .then((e) => { /* this just means we got a response code */ |
| 122 | + .then((e) => { /* this just means we got a response code */ |
120 | 123 | var us = e.url.split("/"), ul = us[us.length - 1], n; |
121 | 124 |
|
122 | 125 | for (n = 0; n < t.rows.length; n++) |
|
145 | 148 | }); |
146 | 149 | } |
147 | 150 |
|
| 151 | + function do_upload(file) { |
| 152 | + var formData = new FormData(); |
| 153 | + formData.append("file", file); |
| 154 | + _do_upload(formData, file.name, file.size); |
| 155 | + } |
| 156 | + |
148 | 157 | function da_drop(e) { |
149 | 158 | var da = document.getElementById("da"); |
150 | 159 |
|
151 | | - e.preventDefault(); |
| 160 | + e.preventDefault(); |
152 | 161 | da.classList.remove("trot"); |
153 | 162 |
|
154 | 163 | clear_errors(); |
|
165 | 174 | ([...fi.files]).forEach(do_upload); |
166 | 175 | } |
167 | 176 |
|
| 177 | + function upl_text_button(e) { |
| 178 | + var content = document.getElementById("text_content"), |
| 179 | + d = new Date(), |
| 180 | + ts = d.getFullYear() + '-' + pad(d.getMonth() + 1) + '-' + |
| 181 | + pad(d.getDate()) + '_' + pad(d.getHours()) + '-' + |
| 182 | + pad(d.getMinutes()) + '-' + pad(d.getSeconds()), |
| 183 | + generated_filename = ts + (username ? '_' + username : '') + '.txt', |
| 184 | + formData = new FormData(), blob; |
| 185 | + |
| 186 | + e.preventDefault(); |
| 187 | + clear_errors(); |
| 188 | + |
| 189 | + blob = new Blob([content.value], { type: "text/plain" }); |
| 190 | + formData.append("file", blob, generated_filename); |
| 191 | + |
| 192 | + _do_upload(formData, generated_filename, blob.size); |
| 193 | + content.value = ""; |
| 194 | + text_inp(); // Manually update button state after clearing |
| 195 | + } |
| 196 | + |
168 | 197 | function body_drop(e) { |
169 | 198 | e.preventDefault(); |
170 | 199 | } |
171 | 200 |
|
172 | | - function inp() { |
| 201 | + function file_inp() { |
173 | 202 | var fi = document.getElementById("file"), |
174 | 203 | upl = document.getElementById("upl"); |
175 | | - console.log("inp"); |
176 | 204 | upl.disabled = !fi.files.length; |
177 | 205 | } |
178 | 206 |
|
| 207 | + function text_inp() { |
| 208 | + var content = document.getElementById("text_content"), |
| 209 | + upl_text = document.getElementById("upl_text"); |
| 210 | + upl_text.disabled = !content.value.length; |
| 211 | + } |
| 212 | + |
179 | 213 | function delfile(e) |
180 | 214 | { |
181 | 215 | e.stopPropagation(); |
|
218 | 252 |
|
219 | 253 | document.addEventListener("DOMContentLoaded", function() { |
220 | 254 | var da = document.getElementById("da"), |
221 | | - fi = document.getElementById("file"), |
222 | | - upl = document.getElementById("upl"); |
| 255 | + fi = document.getElementById("file"), |
| 256 | + upl = document.getElementById("upl"), |
| 257 | + text_content = document.getElementById("text_content"), |
| 258 | + upl_text = document.getElementById("upl_text"); |
223 | 259 |
|
224 | 260 | da.addEventListener("dragenter", da_enter, false); |
225 | 261 | da.addEventListener("dragleave", da_leave, false); |
226 | 262 | da.addEventListener("dragover", da_over, false); |
227 | 263 | da.addEventListener("drop", da_drop, false); |
228 | 264 |
|
229 | | - upl.addEventListener("click", upl_button, false); |
230 | | - fi.addEventListener("change", inp, false); |
| 265 | + upl.addEventListener("click", upl_button, false); |
| 266 | + fi.addEventListener("change", file_inp, false); |
| 267 | + |
| 268 | + upl_text.addEventListener("click", upl_text_button, false); |
| 269 | + text_content.addEventListener("input", text_inp, false); |
231 | 270 |
|
232 | 271 | window.addEventListener("dragover", body_drop, false); |
233 | 272 | window.addEventListener("drop", body_drop, false); |
|
246 | 285 | var j = JSON.parse(msg.data), s = "", n, |
247 | 286 | t = document.getElementById("dd-list"); |
248 | 287 |
|
| 288 | + username = j.user || ""; |
249 | 289 | server_max_size = j.max_size; |
250 | 290 | document.getElementById("size").innerHTML = |
251 | 291 | "Server maximum file size " + |
|
274 | 314 | } |
275 | 315 | s += "</table>"; |
276 | 316 |
|
277 | | - t.innerHTML = san(s); |
| 317 | + t.innerHTML = s; |
278 | 318 |
|
279 | 319 | for (n = 0; n < j.files.length; n++) { |
280 | 320 | var d = document.getElementById("d" + n); |
|
297 | 337 |
|
298 | 338 | }); |
299 | 339 | }()); |
| 340 | + |
0 commit comments