drag drop between windows

This commit is contained in:
Til Schmitter 2026-06-02 22:49:58 +02:00
parent ddb50d07b0
commit cba79caa48
2 changed files with 93 additions and 25 deletions

View file

@ -5274,18 +5274,21 @@ var fileman = (function () {
}; };
r.cut = function (e) { r.cut = function (e) {
var useClip = r.clip.length > 0;
var sel = msel.getsel(), var sel = msel.getsel(),
stamp = Date.now(), stamp = Date.now(),
vps = [stamp]; vps = [stamp];
if (!sel.length) if (!useClip && !sel.length)
return toast.err(3, L.fc_emore); return toast.err(3, L.fc_emore);
ev(e); ev(e);
if (clgot(bcut, 'hide')) if (!useClip && clgot(bcut, 'hide'))
return toast.err(3, L.fc_eperm); return toast.err(3, L.fc_eperm);
if(!useClip){
var els = [], griden = thegrid.en; var els = [], griden = thegrid.en;
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);
@ -5309,8 +5312,15 @@ var fileman = (function () {
catch (ex) { } catch (ex) { }
}, 1); }, 1);
r.ccp = false;
r.clip = vps.slice(1); r.clip = vps.slice(1);
}
else {
for (var a = 0; a < r.clip.length; a++) {
vps.push(r.clip[a]);
}
}
r.ccp = false;
try { try {
vps = JSON.stringify(vps); vps = JSON.stringify(vps);
@ -5642,6 +5652,8 @@ var fileman = (function () {
} }
} }
r.render(); r.render();
if(('' + msg).startsWith(window.location.origin))
msg = msg.replace(window.location.origin, "");
if (msg == get_evpath()) if (msg == get_evpath())
treectl.goto(msg); treectl.goto(msg);
}; };
@ -10976,11 +10988,19 @@ var drag = (function() {
}; };
elem.ondrop = function(e) { elem.ondrop = function(e) {
if (!r.enabled) return;
ev(e); ev(e);
if(e.dataTransfer && e.dataTransfer.getData("text/plain").startsWith(window.location.origin)){
currLink = e.dataTransfer.getData("text/plain");
console.log(currLink);
fileman.clip = currLink.split("\n");
}
else{
clmod(elem, "dtarget"); clmod(elem, "dtarget");
clmod(current, "sel", true); clmod(current, "sel", true);
msel.selui(); msel.selui();
fileman.clip = []; fileman.clip = [];
}
fileman.cut(); fileman.cut();
msel.evsel(); msel.evsel();
@ -11003,6 +11023,11 @@ var drag = (function() {
currLink = basenames(e.target.querySelector("td:nth-child(2) a").href.split("?")); currLink = basenames(e.target.querySelector("td:nth-child(2) a").href.split("?"));
current = e.target; current = e.target;
r.no_warn = true; r.no_warn = true;
clmod(current, "sel", true);
msel.selui();
e.dataTransfer.setData("text/plain", r.getFilesString());
} }
catch(ex){ catch(ex){
console.log(e.target) console.log(e.target)
@ -11035,6 +11060,18 @@ var drag = (function() {
current = a.closest("tr"); current = a.closest("tr");
currLink = basenames(a.href.split("?")); currLink = basenames(a.href.split("?"));
r.no_warn = true; r.no_warn = true;
if(!clgot(current, "sel"))
{
msel.so = msel.pr = null;
var trs = QSA('#files tbody tr');
for (var a = 0, aa = trs.length; a < aa; a++)
clmod(trs[a], 'sel', fun);
clmod(current, "sel", true);
msel.selui();
}
e.dataTransfer.setData("text/plain", r.getFilesString());
} }
catch(ex){ catch(ex){
console.log(e.target) console.log(e.target)
@ -11049,6 +11086,19 @@ var drag = (function() {
r.mktarget(f); r.mktarget(f);
} }
}; };
r.getFilesString = function(){
var sel = msel.getsel(),
vps = [];
for (var a = 0; a < sel.length; a++) {
var link = sel[a].vp;
if(!link.startsWith(window.location.origin))
link = window.location.origin + link;
vps.push(link);
}
return vps.join("\n");
};
return r; return r;
})(); })();

View file

@ -1085,6 +1085,9 @@ function up2k_init(subtle) {
} }
} }
function onovercmn(self, e, btn) { function onovercmn(self, e, btn) {
if(e.dataTransfer.getData("text/plain") && e.dataTransfer.getData("text/plain").startsWith(window.location.origin)){
return;
}
try { try {
var ok = false, dt = e.dataTransfer.types; var ok = false, dt = e.dataTransfer.types;
for (var a = 0; a < dt.length; a++) for (var a = 0; a < dt.length; a++)
@ -1146,6 +1149,8 @@ function up2k_init(subtle) {
document.body.ondrop = gotfile; document.body.ondrop = gotfile;
ebi('u2btn').ondrop = gotfile; ebi('u2btn').ondrop = gotfile;
ebi('u2btn').ondragover = onoverbtn; ebi('u2btn').ondragover = onoverbtn;
ebi('wrap').ondrop = gotfile;
ebi('wrap').ondragover = onoverbtn;
var drops = [ebi('up_dz'), ebi('srch_dz')]; var drops = [ebi('up_dz'), ebi('srch_dz')];
for (var a = 0; a < 2; a++) { for (var a = 0; a < 2; a++) {
@ -1188,6 +1193,19 @@ function up2k_init(subtle) {
function gotfile(e) { function gotfile(e) {
ev(e); ev(e);
console.log(e.dataTransfer.getData("text/plain"))
if(e.dataTransfer && e.dataTransfer.getData("text/plain").startsWith(window.location.origin)){
var currLink = e.dataTransfer.getData("text/plain");
console.log(currLink);
fileman.clip = currLink.split("\n");
fileman.cut();
msel.evsel();
fileman.paste(true);
return
}
nenters = 0; nenters = 0;
offdrag.call(this); offdrag.call(this);
// var dz = this && this.getAttribute('id'); // var dz = this && this.getAttribute('id');