diff --git a/copyparty/web/browser.js b/copyparty/web/browser.js index bf9aef00..25961847 100644 --- a/copyparty/web/browser.js +++ b/copyparty/web/browser.js @@ -9759,145 +9759,152 @@ function reload_browser() { } (function() { - var is_selma = false; - var is_drag = false; - var startx, starty; - var selbox = null; + var is_selma = false; + var dragging = false; - var ttimer = null; - var lpdelay = 400; - var mvthresh = 10; + var startx, starty; + var fwrap = null; + var selbox = null; + var ttimer = null; - function unbox() { - qsr('.selbox'); - selbox = null; - is_drag = false; - is_selma = false; - } + var lpdelay = 250; + var mvthresh = 10; - function getpp(e) { - if (e.touches && e.touches.length > 0) { - return { x: e.touches[0].clientX, y: e.touches[0].clientY }; - } - return { x: e.clientX, y: e.clientY }; - } + function unbox() { + qsr('.selbox'); + ebi('gfiles').style.removeProperty('pointer-events') + ebi('wrap').style.removeProperty('user-select') + + if (selbox) { + console.log(selbox) + window.getSelection().removeAllRanges(); + } + + is_selma = false; + dragging = false; + fwrap = null; + selbox = null; + ttimer = null; + } - function sel_toggle(el) { - clmod(el, 'sel', 't'); - var eref = el.getAttribute('ref'); - if (eref) { - var ehidden = ebi(eref); - if (ehidden) { - var tr = ehidden.closest('tr'); - if (tr) clmod(tr, 'sel', 't'); - } - } - } + function getpp(e) { + var touch = (e.touches && e.touches[0]) || e; + return { x: touch.clientX, y: touch.clientY }; + } - function bob(rect1, rect2) { - return !(rect1.right < rect2.left || rect1.left > rect2.right || - rect1.bottom < rect2.top || rect1.top > rect2.bottom); - } + function sel_toggle(el, m) { + clmod(el, 'sel', m); + var eref = el.getAttribute('ref'); + if (eref) { + var ehidden = ebi(eref); + if (ehidden) { + var tr = ehidden.closest('tr'); + if (tr) clmod(tr, 'sel', m); + } + } + } - function sel_start(e) { + function bob(b1, b2) { + return !(b1.right < b2.left || b1.left > b2.right || + b1.bottom < b2.top || b1.top > b2.bottom); + } + + function sel_start(e) { + if (e.button !== 0 && e.type !== 'touchstart') return; if (!thegrid.en || !treectl.dsel) return; + if (e.target.closest('#widget,#ops,.opview,.doc')) return; - var pos = getpp(e); - startx = pos.x; - starty = pos.y; + if (e.target.closest('#gfiles')) + ebi('gfiles').style.userSelect = "none" - if (e.type === 'mousedown') { - if (e.button !== 0) { - unbox(); - return; - } - is_selma = true; - start_drag(pos); - } - else if (e.type === 'touchstart') { - ttimer = setTimeout(function() { - is_selma = true; - start_drag(pos); - }, lpdelay); - } - } + var pos = getpp(e); + startx = pos.x; + starty = pos.y; + is_selma = true; + ttimer = null; + + if (e.type === 'touchstart') { + ttimer = setTimeout(function() { + ttimer = null; + start_drag(); + }, lpdelay); + } + } + + function start_drag() { + if (dragging) return; - function start_drag(pos) { - is_drag = true; - selbox = document.createElement('div'); - selbox.className = 'selbox'; - document.body.appendChild(selbox); - document.body.style.userSelect = 'none'; - } + dragging = true; + selbox = document.createElement('div'); + selbox.className = 'selbox'; + document.body.appendChild(selbox); - function sel_move(e) { - if (!treectl.dsel) return; + ebi('gfiles').style.pointerEvents = 'none'; + } + + function sel_move(e) { + if (!is_selma) return; + var pos = getpp(e); + var dist = Math.sqrt(Math.pow(pos.x - startx, 2) + Math.pow(pos.y - starty, 2)); - var pos = getpp(e); + if (e.type === 'touchmove' && ttimer) { + if (dist > mvthresh) { + clearTimeout(ttimer); + ttimer = null; + is_selma = false; + } + return; + } + if (!dragging && dist > mvthresh && !window.getSelection().toString()) { + if (fwrap = e.target.closest('#wrap')) + fwrap.style.userSelect = 'none'; + else return; + start_drag(); + } - if (ttimer && !is_drag) { - var dist = Math.sqrt(Math.pow(pos.x - startx, 2) + Math.pow(pos.y - starty, 2)); - if (dist > mvthresh) { - clearTimeout(ttimer); - ttimer = null; - } - } + if (!dragging || !selbox) return; + ev(e); - if (!is_drag || !selbox) return; + selbox.style.width = Math.abs(pos.x - startx) + 'px'; + selbox.style.height = Math.abs(pos.y - starty) + 'px'; + selbox.style.left = Math.min(pos.x, startx) + 'px'; + selbox.style.top = Math.min(pos.y, starty) + 'px'; - ev(e); - - var width = Math.abs(pos.x - startx); - var height = Math.abs(pos.y - starty); - var left = Math.min(pos.x, startx); - var top = Math.min(pos.y, starty); - - selbox.style.width = width + 'px'; - selbox.style.height = height + 'px'; - selbox.style.left = left + 'px'; - selbox.style.top = top + 'px'; - - if (IE && window.getSelection) - window.getSelection().removeAllRanges(); - } - - function sel_end(e) { - clearTimeout(ttimer); - ttimer = null; - - if (!is_drag) return; - - if (selbox) { - var sbrect = selbox.getBoundingClientRect(); - var faf = QSA('#ggrid a'); - - for (var a = 0, aa = faf.length; a < aa; a++) - if (bob(sbrect, faf[a].getBoundingClientRect())) - sel_toggle(faf[a]); + if (IE && window.getSelection) + window.getSelection().removeAllRanges(); + } + function sel_end(e) { + clearTimeout(ttimer); + if (dragging && selbox) { + var sbrect = selbox.getBoundingClientRect(); + var faf = QSA('#ggrid a'); + var sadmode = e.shiftKey ? true : e.altKey ? false : "t"; + for (var a = 0, aa = faf.length; a < aa; a++) + if (bob(sbrect, faf[a].getBoundingClientRect())) + sel_toggle(faf[a], sadmode); msel.selui(); - } + ev(e); + } + unbox(); + } - unbox(); - document.body.style.userSelect = 'auto'; - } - - function dsel_init() { + function dsel_init() { window.addEventListener('mousedown', sel_start); window.addEventListener('mousemove', sel_move); window.addEventListener('mouseup', sel_end); - window.addEventListener('touchstart', sel_start, { passive: true }); - window.addEventListener('touchmove', sel_move, { passive: false }); - window.addEventListener('touchend', sel_end, { passive: true }); - - window.addEventListener('dragstart', function(e) { - if (treectl.dsel && (is_selma || is_drag)) { - e.preventDefault(); - } - }); - } + window.addEventListener('touchstart', sel_start, { passive: true }); + window.addEventListener('touchmove', sel_move, { passive: false }); + window.addEventListener('touchend', sel_end, { passive: true }); + window.addEventListener('dragstart', function(e) { + if (treectl.dsel && (is_selma || dragging)) { + e.preventDefault(); + } + }); + } + dsel_init(); })();