feature (move): cross window move

a request for a feature to move things by dnd a file from a window and
land it to another window
This commit is contained in:
MickaelK
2026-04-16 16:38:54 +10:00
parent 7b41409d04
commit 6e6af734d1
3 changed files with 20 additions and 5 deletions
+5 -1
View File
@@ -10,6 +10,7 @@ import componentFilesystem, { init as initFilesystem } from "./filespage/ctrl_fi
import componentSubmenu, { init as initSubmenu } from "./filespage/ctrl_submenu.js";
import componentNewItem, { init as initNewItem } from "./filespage/ctrl_newitem.js";
import componentUpload, { init as initUpload } from "./filespage/ctrl_upload.js";
import componentMove from "./filespage/ctrl_move.js";
import { init as initState } from "./filespage/state_config.js";
import { init as initThing } from "./filespage/thing.js";
@@ -43,7 +44,10 @@ export default WithShell(function(render) {
// feature4: render the upload button
componentUpload(createRender(qs($page, "[is=\"component_upload\"]")));
// feature5: accessibility / skip links
// feature5: move accross windows
componentMove();
// feature6: accessibility / skip links
const $skip = createElement(`<a aria-role="navigation" href="#main">${t("Skip to content")}</a>`);
$skip.onclick = (e) => {
e.preventDefault();
+13 -3
View File
@@ -79,6 +79,8 @@ export const mv = (from, to) => ajax({
export const save = () => rxjs.of(null).pipe(rxjs.delay(1000));
const bc = new BroadcastChannel("filestash::ls::refresh");
export const ls = (path) => {
const lsFromCache = (path) => rxjs.from(fscache().get(path));
const lsFromHttp = (path) => ajax({
@@ -101,9 +103,12 @@ export const ls = (path) => {
lsFromCache(path),
rxjs.merge(
rxjs.of(null),
rxjs.merge(rxjs.of(null), rxjs.fromEvent(window, "keydown").pipe( // "r" shorcut
rxjs.filter((e) => e.keyCode === 82 && !isAlreadyFocused()),
)).pipe(
rxjs.merge(
rxjs.of(null), rxjs.fromEvent(window, "keydown").pipe( // "r" shorcut
rxjs.filter((e) => e.keyCode === 82 && !isAlreadyFocused()),
),
rxjs.fromEvent(bc, "message"),
).pipe(
rxjs.switchMap(() => lsFromHttp(path)),
rxjs.catchError((err) => navigator.onLine ? rxjs.throwError(err) : rxjs.EMPTY),
),
@@ -147,6 +152,11 @@ export const ls = (path) => {
);
};
export const refresh = () => {
window.dispatchEvent(new KeyboardEvent("keydown", { keyCode: 82 }));
bc.postMessage(null);
}
export const search = (term) => ajax({
url: withURLParams(`api/files/search?path=${encodeURIComponent(currentPath())}&q=${encodeURIComponent(term)}`),
responseType: "json"
+2 -1
View File
@@ -358,6 +358,7 @@ var preload = [][]string{
"/assets/" + BUILD_REF + "/pages/connectpage/model_config.js",
"/assets/" + BUILD_REF + "/pages/connectpage/ctrl_form_state.js",
"/assets/" + BUILD_REF + "/pages/filespage/cache.js",
"/assets/" + BUILD_REF + "/pages/filespage/thing.js",
"/assets/" + BUILD_REF + "/pages/filespage/thing.css",
},
@@ -365,13 +366,13 @@ var preload = [][]string{
"/assets/" + BUILD_REF + "/pages/ctrl_filespage.js",
"/assets/" + BUILD_REF + "/pages/ctrl_filespage.css",
"/assets/" + BUILD_REF + "/pages/filespage/model_acl.js",
"/assets/" + BUILD_REF + "/pages/filespage/cache.js",
"/assets/" + BUILD_REF + "/pages/filespage/ctrl_filesystem.js",
"/assets/" + BUILD_REF + "/pages/filespage/ctrl_filesystem.css",
"/assets/" + BUILD_REF + "/pages/filespage/ctrl_upload.js",
"/assets/" + BUILD_REF + "/pages/filespage/ctrl_upload.css",
"/assets/" + BUILD_REF + "/pages/filespage/ctrl_newitem.js",
"/assets/" + BUILD_REF + "/pages/filespage/ctrl_newitem.css",
"/assets/" + BUILD_REF + "/pages/filespage/ctrl_move.js",
},
{
"/assets/" + BUILD_REF + "/pages/filespage/ctrl_submenu.js",