diff --git a/copyparty/web/browser.css b/copyparty/web/browser.css index 690d629c..96f160d7 100644 --- a/copyparty/web/browser.css +++ b/copyparty/web/browser.css @@ -69,8 +69,8 @@ body { border-color: #fc0; } #toast.err { - background: #b00; - border-color: #f00; + background: #900; + border-color: #d06; } #tt.b { padding: 0 2em; diff --git a/copyparty/web/browser.js b/copyparty/web/browser.js index 772657ed..5967d0fe 100644 --- a/copyparty/web/browser.js +++ b/copyparty/web/browser.js @@ -285,7 +285,7 @@ var mpl = (function () { r.os_ctl = !r.os_ctl && have_mctl; bcfg_set('au_os_ctl', r.os_ctl); if (!have_mctl) - alert('need firefox 82+ or chrome 73+'); + toast.err(5, 'need firefox 82+ or chrome 73+'); }; ebi('au_osd_cv').onclick = function (e) { @@ -1353,7 +1353,7 @@ function play(tid, is_ev, seek, call_depth) { return true; } catch (ex) { - alert('playback failed: ' + ex); + toast.err(0, 'playback failed: ' + ex); } setclass(oid, 'play'); setTimeout(next_song, 500); @@ -1495,7 +1495,7 @@ var fileman = (function () { ev(e); var sel = msel.getsel(); if (sel.length !== 1) - return alert('select exactly 1 item to rename'); + return toast.err(3, 'select exactly 1 item to rename'); var src = sel[0].vp; if (src.endsWith('/')) @@ -1507,7 +1507,7 @@ var fileman = (function () { var fn = prompt('new filename:', ofn); if (!fn || fn == ofn) - return toast.warn(1000, 'rename aborted'); + return toast.warn(1, 'rename aborted'); var dst = base + fn; @@ -1517,10 +1517,10 @@ var fileman = (function () { if (this.status !== 200) { var msg = this.responseText; - toast.err(2000, 'rename failed:
' + msg); + toast.err(9, 'rename failed:\n' + msg); return; } - toast.ok(2000, 'rename OK'); + toast.ok(2, 'rename OK'); treectl.goto(get_evpath()); } var xhr = new XMLHttpRequest(); @@ -1538,7 +1538,7 @@ var fileman = (function () { vps.push(sel[a].vp); if (!sel.length) - return alert('select at least 1 item to delete'); + return toast.err(3, 'select at least 1 item to delete'); if (!confirm('===== DANGER =====\nDELETE these ' + vps.length + ' items?\n\n' + vps.join('\n'))) return; @@ -1551,11 +1551,11 @@ var fileman = (function () { vp = vps.shift(); if (!vp) { - toast.ok(2000, 'delete OK'); + toast.ok(2, 'delete OK'); treectl.goto(get_evpath()); return; } - toast.inf(2000, 'deleting ' + (vps.length + 1) + ' items

' + vp); + toast.inf(2, 'deleting ' + (vps.length + 1) + ' items\n\n' + vp); xhr.open('GET', vp + '?delete', true); xhr.onreadystatechange = delete_cb; @@ -1567,7 +1567,7 @@ var fileman = (function () { if (this.status !== 200) { var msg = this.responseText; - toast.err(2000, 'delete failed:
' + msg); + toast.err(9, 'delete failed:\n' + msg); return; } deleter(); @@ -1581,7 +1581,7 @@ var fileman = (function () { vps = []; if (!sel.length) - return alert('select at least 1 item to cut'); + return toast.err(3, 'select at least 1 item to cut'); for (var a = 0; a < sel.length; a++) { vps.push(sel[a].vp); @@ -1592,7 +1592,7 @@ var fileman = (function () { cl.add(inv ? 'c2' : 'c1'); } - toast.inf(1000, 'cut ' + sel.length + ' items'); + toast.inf(1, 'cut ' + sel.length + ' items'); jwrite('fman_clip', vps); r.tx(1); }; @@ -1600,7 +1600,7 @@ var fileman = (function () { r.paste = function (e) { ev(e); if (!r.clip.length) - return alert('first cut some files/folders to paste\n\nnote: you can cut/paste across different browser tabs'); + return toast.err(5, 'first cut some files/folders to paste\n\nnote: you can cut/paste across different browser tabs'); var req = [], exists = [], @@ -1637,12 +1637,12 @@ var fileman = (function () { vp = req.shift(); if (!vp) { - toast.ok(2000, 'paste OK'); + toast.ok(2, 'paste OK'); treectl.goto(get_evpath()); r.tx(srcdir); return; } - toast.inf(2000, 'pasting ' + (req.length + 1) + ' items

' + vp); + toast.inf(2, 'pasting ' + (req.length + 1) + ' items\n\n' + vp); var dst = get_evpath() + vp.split('/').slice(-1)[0]; @@ -1656,7 +1656,7 @@ var fileman = (function () { if (this.status !== 200) { var msg = this.responseText; - toast.err(2000, 'paste failed:
' + msg); + toast.err(9, 'paste failed:\n' + msg); return; } paster(); @@ -2535,7 +2535,7 @@ var treectl = (function () { return; if (this.status !== 200) { - alert("http " + this.status + ": " + this.responseText); + toast.err(0, "recvtree, http " + this.status + ": " + this.responseText); return; } @@ -2657,7 +2657,7 @@ var treectl = (function () { return; if (this.status !== 200) { - alert("http " + this.status + ": " + this.responseText); + toast.err(0, "recvls, http " + this.status + ": " + this.responseText); return; } diff --git a/copyparty/web/md.css b/copyparty/web/md.css index 6d13194c..ed373361 100644 --- a/copyparty/web/md.css +++ b/copyparty/web/md.css @@ -52,8 +52,8 @@ html, body { border-color: #fc0; } #toast.err { - background: #b00; - border-color: #f00; + background: #900; + border-color: #d06; } #tt.b { padding: 0 2em; diff --git a/copyparty/web/md2.js b/copyparty/web/md2.js index 68f63375..29303414 100644 --- a/copyparty/web/md2.js +++ b/copyparty/web/md2.js @@ -323,11 +323,11 @@ function save(e) { save_cls = save_btn.getAttribute('class') + ''; if (save_cls.indexOf('disabled') >= 0) - return toast.inf(2000, "no changes"); + return toast.inf(2, "no changes"); var force = (save_cls.indexOf('force-save') >= 0); if (force && !confirm('confirm that you wish to lose the changes made on the server since you opened this document')) - return alert('ok, aborted'); + return toast.inf(3, 'aborted'); var txt = dom_src.value; @@ -352,18 +352,15 @@ function save_cb() { if (this.readyState != XMLHttpRequest.DONE) return; - if (this.status !== 200) { - alert('Error! The file was NOT saved.\n\n' + this.status + ": " + (this.responseText + '').replace(/^
/, ""));
-        return;
-    }
+    if (this.status !== 200)
+        return alert('Error!  The file was NOT saved.\n\n' + this.status + ": " + (this.responseText + '').replace(/^
/, ""));
 
     var r;
     try {
         r = JSON.parse(this.responseText);
     }
     catch (ex) {
-        alert('Failed to parse reply from server:\n\n' + this.responseText);
-        return;
+        return alert('Failed to parse reply from server:\n\n' + this.responseText);
     }
 
     if (!r.ok) {
@@ -438,7 +435,7 @@ function savechk_cb() {
     last_modified = this.lastmod;
     server_md = this.txt;
     draw_md();
-    toast.ok(2000, 'save OK' + (this.ntry ? '
attempt ' + this.ntry : '')); + toast.ok(2, 'save OK' + (this.ntry ? '\nattempt ' + this.ntry : '')); modpoll.disabled = false; } @@ -720,7 +717,7 @@ function fmt_table(e) { var ind2 = tab[a].match(re_ind)[0]; if (ind != ind2 && a != 1) // the table can be a list entry or something, ignore [0] - return alert(err + 'indentation mismatch on row#2 and ' + row_name + ',\n' + tab[a]); + return toast.err(7, err + 'indentation mismatch on row#2 and ' + row_name + ',\n' + tab[a]); var t = tab[a].slice(ind.length); t = t.replace(re_lpipe, ""); @@ -730,7 +727,7 @@ function fmt_table(e) { if (a == 0) ncols = tab[a].length; else if (ncols < tab[a].length) - return alert(err + 'num.columns(' + row_name + ') exceeding row#2; ' + ncols + ' < ' + tab[a].length); + return toast.err(7, err + 'num.columns(' + row_name + ') exceeding row#2; ' + ncols + ' < ' + tab[a].length); // if row has less columns than row2, fill them in while (tab[a].length < ncols) @@ -747,7 +744,7 @@ function fmt_table(e) { for (var col = 0; col < tab[1].length; col++) { var m = tab[1][col].match(re_align); if (!m) - return alert(err + 'invalid column specification, row#2, col ' + (col + 1) + ', [' + tab[1][col] + ']'); + return toast.err(7, err + 'invalid column specification, row#2, col ' + (col + 1) + ', [' + tab[1][col] + ']'); if (m[2]) { if (m[1]) @@ -835,10 +832,9 @@ function mark_uni(e) { ptn = new RegExp('([^' + js_uni_whitelist + ']+)', 'g'), mod = txt.replace(/\r/g, "").replace(ptn, "\u2588\u2770$1\u2771"); - if (txt == mod) { - alert('no results; no modifications were made'); - return; - } + if (txt == mod) + return toast.inf(5, 'no results; no modifications were made'); + dom_src.value = mod; } @@ -852,10 +848,9 @@ function iter_uni(e) { re = new RegExp('([^' + js_uni_whitelist + ']+)'), m = re.exec(txt.slice(ofs)); - if (!m) { - alert('no more hits from cursor onwards'); - return; - } + if (!m) + return toast.inf(5, 'no more hits from cursor onwards'); + ofs += m.index; dom_src.setSelectionRange(ofs, ofs + m[0].length, "forward"); diff --git a/copyparty/web/mde.js b/copyparty/web/mde.js index 1c83d457..3030c21c 100644 --- a/copyparty/web/mde.js +++ b/copyparty/web/mde.js @@ -106,15 +106,12 @@ function md_changed(mde, on_srv) { function save(mde) { var save_btn = QS('.editor-toolbar button.save'); - if (save_btn.classList.contains('disabled')) { - alert('there is nothing to save'); - return; - } + if (save_btn.classList.contains('disabled')) + return toast.inf(2, 'no changes'); + var force = save_btn.classList.contains('force-save'); - if (force && !confirm('confirm that you wish to lose the changes made on the server since you opened this document')) { - alert('ok, aborted'); - return; - } + if (force && !confirm('confirm that you wish to lose the changes made on the server since you opened this document')) + return toast.inf(3, 'aborted'); var txt = mde.value(); @@ -138,18 +135,15 @@ function save_cb() { if (this.readyState != XMLHttpRequest.DONE) return; - if (this.status !== 200) { - alert('Error! The file was NOT saved.\n\n' + this.status + ": " + (this.responseText + '').replace(/^
/, ""));
-        return;
-    }
+    if (this.status !== 200)
+        return alert('Error!  The file was NOT saved.\n\n' + this.status + ": " + (this.responseText + '').replace(/^
/, ""));
 
     var r;
     try {
         r = JSON.parse(this.responseText);
     }
     catch (ex) {
-        alert('Failed to parse reply from server:\n\n' + this.responseText);
-        return;
+        return alert('Failed to parse reply from server:\n\n' + this.responseText);
     }
 
     if (!r.ok) {
diff --git a/copyparty/web/up2k.js b/copyparty/web/up2k.js
index c610303c..5a2e4d9d 100644
--- a/copyparty/web/up2k.js
+++ b/copyparty/web/up2k.js
@@ -1176,10 +1176,6 @@ function up2k_init(subtle) {
                 }
 
                 t.t_hashed = Date.now();
-                if (t.n == 0 && window.location.hash == '#dbg') {
-                    var spd = (t.size / ((t.t_hashed - t.t_hashing) / 1000.)) / (1024 * 1024.);
-                    alert('{0} ms, {1} MB/s\n'.format(t.t_hashed - t.t_hashing, spd.toFixed(3)) + t.hash.join('\n'));
-                }
 
                 pvis.seth(t.n, 2, 'hashing done');
                 pvis.seth(t.n, 1, '📦 wait');
diff --git a/copyparty/web/util.js b/copyparty/web/util.js
index 872b361a..6fe18d1a 100644
--- a/copyparty/web/util.js
+++ b/copyparty/web/util.js
@@ -654,7 +654,6 @@ var toast = (function () {
         obj = mknod('div');
 
     obj.setAttribute('id', 'toast');
-    obj.onclick = r.hide;
     document.body.appendChild(obj);;
 
     r.hide = function () {
@@ -666,9 +665,9 @@ var toast = (function () {
     r.show = function (cl, ms, txt) {
         clearTimeout(te);
         if (ms)
-            te = setTimeout(r.hide, ms);
+            te = setTimeout(r.hide, ms * 1000);
 
-        obj.innerHTML = txt;
+        obj.innerHTML = txt.replace(/\n/g, '
\n'); obj.className = cl + ' vis'; r.visible = true; }; @@ -686,5 +685,6 @@ var toast = (function () { r.show('err', ms, txt); }; + obj.onclick = r.hide; return r; })();