mirror of
https://github.com/9001/copyparty.git
synced 2025-08-17 17:12:13 -06:00
toasty
This commit is contained in:
parent
23b20ff4a6
commit
19f23c686e
|
@ -69,8 +69,8 @@ body {
|
||||||
border-color: #fc0;
|
border-color: #fc0;
|
||||||
}
|
}
|
||||||
#toast.err {
|
#toast.err {
|
||||||
background: #b00;
|
background: #900;
|
||||||
border-color: #f00;
|
border-color: #d06;
|
||||||
}
|
}
|
||||||
#tt.b {
|
#tt.b {
|
||||||
padding: 0 2em;
|
padding: 0 2em;
|
||||||
|
|
|
@ -285,7 +285,7 @@ var mpl = (function () {
|
||||||
r.os_ctl = !r.os_ctl && have_mctl;
|
r.os_ctl = !r.os_ctl && have_mctl;
|
||||||
bcfg_set('au_os_ctl', r.os_ctl);
|
bcfg_set('au_os_ctl', r.os_ctl);
|
||||||
if (!have_mctl)
|
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) {
|
ebi('au_osd_cv').onclick = function (e) {
|
||||||
|
@ -1353,7 +1353,7 @@ function play(tid, is_ev, seek, call_depth) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
catch (ex) {
|
catch (ex) {
|
||||||
alert('playback failed: ' + ex);
|
toast.err(0, 'playback failed: ' + ex);
|
||||||
}
|
}
|
||||||
setclass(oid, 'play');
|
setclass(oid, 'play');
|
||||||
setTimeout(next_song, 500);
|
setTimeout(next_song, 500);
|
||||||
|
@ -1495,7 +1495,7 @@ var fileman = (function () {
|
||||||
ev(e);
|
ev(e);
|
||||||
var sel = msel.getsel();
|
var sel = msel.getsel();
|
||||||
if (sel.length !== 1)
|
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;
|
var src = sel[0].vp;
|
||||||
if (src.endsWith('/'))
|
if (src.endsWith('/'))
|
||||||
|
@ -1507,7 +1507,7 @@ var fileman = (function () {
|
||||||
|
|
||||||
var fn = prompt('new filename:', ofn);
|
var fn = prompt('new filename:', ofn);
|
||||||
if (!fn || fn == ofn)
|
if (!fn || fn == ofn)
|
||||||
return toast.warn(1000, 'rename aborted');
|
return toast.warn(1, 'rename aborted');
|
||||||
|
|
||||||
var dst = base + fn;
|
var dst = base + fn;
|
||||||
|
|
||||||
|
@ -1517,10 +1517,10 @@ var fileman = (function () {
|
||||||
|
|
||||||
if (this.status !== 200) {
|
if (this.status !== 200) {
|
||||||
var msg = this.responseText;
|
var msg = this.responseText;
|
||||||
toast.err(2000, 'rename failed:<br />' + msg);
|
toast.err(9, 'rename failed:\n' + msg);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
toast.ok(2000, 'rename OK');
|
toast.ok(2, 'rename OK');
|
||||||
treectl.goto(get_evpath());
|
treectl.goto(get_evpath());
|
||||||
}
|
}
|
||||||
var xhr = new XMLHttpRequest();
|
var xhr = new XMLHttpRequest();
|
||||||
|
@ -1538,7 +1538,7 @@ var fileman = (function () {
|
||||||
vps.push(sel[a].vp);
|
vps.push(sel[a].vp);
|
||||||
|
|
||||||
if (!sel.length)
|
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')))
|
if (!confirm('===== DANGER =====\nDELETE these ' + vps.length + ' items?\n\n' + vps.join('\n')))
|
||||||
return;
|
return;
|
||||||
|
@ -1551,11 +1551,11 @@ var fileman = (function () {
|
||||||
vp = vps.shift();
|
vp = vps.shift();
|
||||||
|
|
||||||
if (!vp) {
|
if (!vp) {
|
||||||
toast.ok(2000, 'delete OK');
|
toast.ok(2, 'delete OK');
|
||||||
treectl.goto(get_evpath());
|
treectl.goto(get_evpath());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
toast.inf(2000, 'deleting ' + (vps.length + 1) + ' items<br /><br />' + vp);
|
toast.inf(2, 'deleting ' + (vps.length + 1) + ' items\n\n' + vp);
|
||||||
|
|
||||||
xhr.open('GET', vp + '?delete', true);
|
xhr.open('GET', vp + '?delete', true);
|
||||||
xhr.onreadystatechange = delete_cb;
|
xhr.onreadystatechange = delete_cb;
|
||||||
|
@ -1567,7 +1567,7 @@ var fileman = (function () {
|
||||||
|
|
||||||
if (this.status !== 200) {
|
if (this.status !== 200) {
|
||||||
var msg = this.responseText;
|
var msg = this.responseText;
|
||||||
toast.err(2000, 'delete failed:<br />' + msg);
|
toast.err(9, 'delete failed:\n' + msg);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
deleter();
|
deleter();
|
||||||
|
@ -1581,7 +1581,7 @@ var fileman = (function () {
|
||||||
vps = [];
|
vps = [];
|
||||||
|
|
||||||
if (!sel.length)
|
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++) {
|
for (var a = 0; a < sel.length; a++) {
|
||||||
vps.push(sel[a].vp);
|
vps.push(sel[a].vp);
|
||||||
|
@ -1592,7 +1592,7 @@ var fileman = (function () {
|
||||||
cl.add(inv ? 'c2' : 'c1');
|
cl.add(inv ? 'c2' : 'c1');
|
||||||
}
|
}
|
||||||
|
|
||||||
toast.inf(1000, 'cut ' + sel.length + ' items');
|
toast.inf(1, 'cut ' + sel.length + ' items');
|
||||||
jwrite('fman_clip', vps);
|
jwrite('fman_clip', vps);
|
||||||
r.tx(1);
|
r.tx(1);
|
||||||
};
|
};
|
||||||
|
@ -1600,7 +1600,7 @@ var fileman = (function () {
|
||||||
r.paste = function (e) {
|
r.paste = function (e) {
|
||||||
ev(e);
|
ev(e);
|
||||||
if (!r.clip.length)
|
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 = [],
|
var req = [],
|
||||||
exists = [],
|
exists = [],
|
||||||
|
@ -1637,12 +1637,12 @@ var fileman = (function () {
|
||||||
vp = req.shift();
|
vp = req.shift();
|
||||||
|
|
||||||
if (!vp) {
|
if (!vp) {
|
||||||
toast.ok(2000, 'paste OK');
|
toast.ok(2, 'paste OK');
|
||||||
treectl.goto(get_evpath());
|
treectl.goto(get_evpath());
|
||||||
r.tx(srcdir);
|
r.tx(srcdir);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
toast.inf(2000, 'pasting ' + (req.length + 1) + ' items<br /><br />' + vp);
|
toast.inf(2, 'pasting ' + (req.length + 1) + ' items\n\n' + vp);
|
||||||
|
|
||||||
var dst = get_evpath() + vp.split('/').slice(-1)[0];
|
var dst = get_evpath() + vp.split('/').slice(-1)[0];
|
||||||
|
|
||||||
|
@ -1656,7 +1656,7 @@ var fileman = (function () {
|
||||||
|
|
||||||
if (this.status !== 200) {
|
if (this.status !== 200) {
|
||||||
var msg = this.responseText;
|
var msg = this.responseText;
|
||||||
toast.err(2000, 'paste failed:<br />' + msg);
|
toast.err(9, 'paste failed:\n' + msg);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
paster();
|
paster();
|
||||||
|
@ -2535,7 +2535,7 @@ var treectl = (function () {
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (this.status !== 200) {
|
if (this.status !== 200) {
|
||||||
alert("http " + this.status + ": " + this.responseText);
|
toast.err(0, "recvtree, http " + this.status + ": " + this.responseText);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2657,7 +2657,7 @@ var treectl = (function () {
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (this.status !== 200) {
|
if (this.status !== 200) {
|
||||||
alert("http " + this.status + ": " + this.responseText);
|
toast.err(0, "recvls, http " + this.status + ": " + this.responseText);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -52,8 +52,8 @@ html, body {
|
||||||
border-color: #fc0;
|
border-color: #fc0;
|
||||||
}
|
}
|
||||||
#toast.err {
|
#toast.err {
|
||||||
background: #b00;
|
background: #900;
|
||||||
border-color: #f00;
|
border-color: #d06;
|
||||||
}
|
}
|
||||||
#tt.b {
|
#tt.b {
|
||||||
padding: 0 2em;
|
padding: 0 2em;
|
||||||
|
|
|
@ -323,11 +323,11 @@ function save(e) {
|
||||||
save_cls = save_btn.getAttribute('class') + '';
|
save_cls = save_btn.getAttribute('class') + '';
|
||||||
|
|
||||||
if (save_cls.indexOf('disabled') >= 0)
|
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);
|
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'))
|
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;
|
var txt = dom_src.value;
|
||||||
|
|
||||||
|
@ -352,18 +352,15 @@ function save_cb() {
|
||||||
if (this.readyState != XMLHttpRequest.DONE)
|
if (this.readyState != XMLHttpRequest.DONE)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (this.status !== 200) {
|
if (this.status !== 200)
|
||||||
alert('Error! The file was NOT saved.\n\n' + this.status + ": " + (this.responseText + '').replace(/^<pre>/, ""));
|
return alert('Error! The file was NOT saved.\n\n' + this.status + ": " + (this.responseText + '').replace(/^<pre>/, ""));
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var r;
|
var r;
|
||||||
try {
|
try {
|
||||||
r = JSON.parse(this.responseText);
|
r = JSON.parse(this.responseText);
|
||||||
}
|
}
|
||||||
catch (ex) {
|
catch (ex) {
|
||||||
alert('Failed to parse reply from server:\n\n' + this.responseText);
|
return alert('Failed to parse reply from server:\n\n' + this.responseText);
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!r.ok) {
|
if (!r.ok) {
|
||||||
|
@ -438,7 +435,7 @@ function savechk_cb() {
|
||||||
last_modified = this.lastmod;
|
last_modified = this.lastmod;
|
||||||
server_md = this.txt;
|
server_md = this.txt;
|
||||||
draw_md();
|
draw_md();
|
||||||
toast.ok(2000, 'save OK' + (this.ntry ? '<br />attempt ' + this.ntry : ''));
|
toast.ok(2, 'save OK' + (this.ntry ? '\nattempt ' + this.ntry : ''));
|
||||||
modpoll.disabled = false;
|
modpoll.disabled = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -720,7 +717,7 @@ function fmt_table(e) {
|
||||||
|
|
||||||
var ind2 = tab[a].match(re_ind)[0];
|
var ind2 = tab[a].match(re_ind)[0];
|
||||||
if (ind != ind2 && a != 1) // the table can be a list entry or something, ignore [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);
|
var t = tab[a].slice(ind.length);
|
||||||
t = t.replace(re_lpipe, "");
|
t = t.replace(re_lpipe, "");
|
||||||
|
@ -730,7 +727,7 @@ function fmt_table(e) {
|
||||||
if (a == 0)
|
if (a == 0)
|
||||||
ncols = tab[a].length;
|
ncols = tab[a].length;
|
||||||
else if (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
|
// if row has less columns than row2, fill them in
|
||||||
while (tab[a].length < ncols)
|
while (tab[a].length < ncols)
|
||||||
|
@ -747,7 +744,7 @@ function fmt_table(e) {
|
||||||
for (var col = 0; col < tab[1].length; col++) {
|
for (var col = 0; col < tab[1].length; col++) {
|
||||||
var m = tab[1][col].match(re_align);
|
var m = tab[1][col].match(re_align);
|
||||||
if (!m)
|
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[2]) {
|
||||||
if (m[1])
|
if (m[1])
|
||||||
|
@ -835,10 +832,9 @@ function mark_uni(e) {
|
||||||
ptn = new RegExp('([^' + js_uni_whitelist + ']+)', 'g'),
|
ptn = new RegExp('([^' + js_uni_whitelist + ']+)', 'g'),
|
||||||
mod = txt.replace(/\r/g, "").replace(ptn, "\u2588\u2770$1\u2771");
|
mod = txt.replace(/\r/g, "").replace(ptn, "\u2588\u2770$1\u2771");
|
||||||
|
|
||||||
if (txt == mod) {
|
if (txt == mod)
|
||||||
alert('no results; no modifications were made');
|
return toast.inf(5, 'no results; no modifications were made');
|
||||||
return;
|
|
||||||
}
|
|
||||||
dom_src.value = mod;
|
dom_src.value = mod;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -852,10 +848,9 @@ function iter_uni(e) {
|
||||||
re = new RegExp('([^' + js_uni_whitelist + ']+)'),
|
re = new RegExp('([^' + js_uni_whitelist + ']+)'),
|
||||||
m = re.exec(txt.slice(ofs));
|
m = re.exec(txt.slice(ofs));
|
||||||
|
|
||||||
if (!m) {
|
if (!m)
|
||||||
alert('no more hits from cursor onwards');
|
return toast.inf(5, 'no more hits from cursor onwards');
|
||||||
return;
|
|
||||||
}
|
|
||||||
ofs += m.index;
|
ofs += m.index;
|
||||||
|
|
||||||
dom_src.setSelectionRange(ofs, ofs + m[0].length, "forward");
|
dom_src.setSelectionRange(ofs, ofs + m[0].length, "forward");
|
||||||
|
|
|
@ -106,15 +106,12 @@ function md_changed(mde, on_srv) {
|
||||||
|
|
||||||
function save(mde) {
|
function save(mde) {
|
||||||
var save_btn = QS('.editor-toolbar button.save');
|
var save_btn = QS('.editor-toolbar button.save');
|
||||||
if (save_btn.classList.contains('disabled')) {
|
if (save_btn.classList.contains('disabled'))
|
||||||
alert('there is nothing to save');
|
return toast.inf(2, 'no changes');
|
||||||
return;
|
|
||||||
}
|
|
||||||
var force = save_btn.classList.contains('force-save');
|
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')) {
|
if (force && !confirm('confirm that you wish to lose the changes made on the server since you opened this document'))
|
||||||
alert('ok, aborted');
|
return toast.inf(3, 'aborted');
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var txt = mde.value();
|
var txt = mde.value();
|
||||||
|
|
||||||
|
@ -138,18 +135,15 @@ function save_cb() {
|
||||||
if (this.readyState != XMLHttpRequest.DONE)
|
if (this.readyState != XMLHttpRequest.DONE)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (this.status !== 200) {
|
if (this.status !== 200)
|
||||||
alert('Error! The file was NOT saved.\n\n' + this.status + ": " + (this.responseText + '').replace(/^<pre>/, ""));
|
return alert('Error! The file was NOT saved.\n\n' + this.status + ": " + (this.responseText + '').replace(/^<pre>/, ""));
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var r;
|
var r;
|
||||||
try {
|
try {
|
||||||
r = JSON.parse(this.responseText);
|
r = JSON.parse(this.responseText);
|
||||||
}
|
}
|
||||||
catch (ex) {
|
catch (ex) {
|
||||||
alert('Failed to parse reply from server:\n\n' + this.responseText);
|
return alert('Failed to parse reply from server:\n\n' + this.responseText);
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!r.ok) {
|
if (!r.ok) {
|
||||||
|
|
|
@ -1176,10 +1176,6 @@ function up2k_init(subtle) {
|
||||||
}
|
}
|
||||||
|
|
||||||
t.t_hashed = Date.now();
|
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, 2, 'hashing done');
|
||||||
pvis.seth(t.n, 1, '📦 wait');
|
pvis.seth(t.n, 1, '📦 wait');
|
||||||
|
|
|
@ -654,7 +654,6 @@ var toast = (function () {
|
||||||
obj = mknod('div');
|
obj = mknod('div');
|
||||||
|
|
||||||
obj.setAttribute('id', 'toast');
|
obj.setAttribute('id', 'toast');
|
||||||
obj.onclick = r.hide;
|
|
||||||
document.body.appendChild(obj);;
|
document.body.appendChild(obj);;
|
||||||
|
|
||||||
r.hide = function () {
|
r.hide = function () {
|
||||||
|
@ -666,9 +665,9 @@ var toast = (function () {
|
||||||
r.show = function (cl, ms, txt) {
|
r.show = function (cl, ms, txt) {
|
||||||
clearTimeout(te);
|
clearTimeout(te);
|
||||||
if (ms)
|
if (ms)
|
||||||
te = setTimeout(r.hide, ms);
|
te = setTimeout(r.hide, ms * 1000);
|
||||||
|
|
||||||
obj.innerHTML = txt;
|
obj.innerHTML = txt.replace(/\n/g, '<br />\n');
|
||||||
obj.className = cl + ' vis';
|
obj.className = cl + ' vis';
|
||||||
r.visible = true;
|
r.visible = true;
|
||||||
};
|
};
|
||||||
|
@ -686,5 +685,6 @@ var toast = (function () {
|
||||||
r.show('err', ms, txt);
|
r.show('err', ms, txt);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
obj.onclick = r.hide;
|
||||||
return r;
|
return r;
|
||||||
})();
|
})();
|
||||||
|
|
Loading…
Reference in a new issue