Vanessa 2024-11-01 09:28:36 +08:00
parent de0b3b8415
commit 641550e1ed
2 changed files with 44 additions and 12 deletions

View file

@ -16,7 +16,12 @@ import {mountHelp, newNotebook} from "../../util/mount";
import {confirmDialog} from "../../dialog/confirmDialog"; import {confirmDialog} from "../../dialog/confirmDialog";
import {isNotCtrl, isOnlyMeta, setStorageVal, updateHotkeyTip} from "../../protyle/util/compatibility"; import {isNotCtrl, isOnlyMeta, setStorageVal, updateHotkeyTip} from "../../protyle/util/compatibility";
import {openFileById} from "../../editor/util"; import {openFileById} from "../../editor/util";
import {hasClosestByAttribute, hasClosestByTag, hasTopClosestByTag} from "../../protyle/util/hasClosest"; import {
hasClosestByAttribute,
hasClosestByClassName,
hasClosestByTag,
hasTopClosestByTag
} from "../../protyle/util/hasClosest";
import {isTouchDevice} from "../../util/functions"; import {isTouchDevice} from "../../util/functions";
import {App} from "../../index"; import {App} from "../../index";
import {refreshFileTree} from "../../dialog/processSystem"; import {refreshFileTree} from "../../dialog/processSystem";
@ -938,20 +943,31 @@ export class Files extends Model {
if (!liElement) { if (!liElement) {
return; return;
} }
let fileHTML = "";
data.files.forEach((item: IFile) => {
fileHTML += this.genFileHTML(item);
});
let nextElement = liElement.nextElementSibling; let nextElement = liElement.nextElementSibling;
if (nextElement && nextElement.tagName === "UL") { if (nextElement && nextElement.tagName === "UL") {
// 文件展开时,刷新 // 文件展开时,刷新
// TODO nextElement.innerHTML = fileHTML; const tempElement = document.createElement("template");
tempElement.innerHTML = fileHTML;
// 保持文件夹展开状态
nextElement.querySelectorAll(":scope > .b3-list-item > .b3-list-item__toggle> .b3-list-item__arrow--open").forEach(item => {
const openLiElement = hasClosestByClassName(item, "b3-list-item")
if (openLiElement) {
const tempOpenLiElement = tempElement.content.querySelector(`.b3-list-item[data-node-id="${openLiElement.getAttribute("data-node-id")}"]`)
tempOpenLiElement.after(openLiElement.nextElementSibling);
tempOpenLiElement.querySelector(".b3-list-item__arrow").classList.add("b3-list-item__arrow--open");
}
});
nextElement.innerHTML = tempElement.innerHTML;
if (typeof scrollTop === "number") { if (typeof scrollTop === "number") {
this.element.scroll({top: scrollTop, behavior: "smooth"}); this.element.scroll({top: scrollTop, behavior: "smooth"});
} }
return; return;
} }
liElement.querySelector(".b3-list-item__arrow").classList.add("b3-list-item__arrow--open"); liElement.querySelector(".b3-list-item__arrow").classList.add("b3-list-item__arrow--open");
let fileHTML = "";
data.files.forEach((item: IFile) => {
fileHTML += this.genFileHTML(item);
});
liElement.insertAdjacentHTML("afterend", `<ul class="file-tree__sliderDown">${fileHTML}</ul>`); liElement.insertAdjacentHTML("afterend", `<ul class="file-tree__sliderDown">${fileHTML}</ul>`);
nextElement = liElement.nextElementSibling; nextElement = liElement.nextElementSibling;
setTimeout(() => { setTimeout(() => {
@ -1204,3 +1220,4 @@ aria-label="${escapeHtml(ariaLabel)}">${getDisplayName(item.name, true, true)}</
return window.siyuan.menus.menu; return window.siyuan.menus.menu;
} }
} }

View file

@ -1,4 +1,4 @@
import {hasClosestByTag, hasTopClosestByTag} from "../../protyle/util/hasClosest"; import {hasClosestByClassName, hasClosestByTag, hasTopClosestByTag} from "../../protyle/util/hasClosest";
import {escapeHtml} from "../../util/escape"; import {escapeHtml} from "../../util/escape";
import {Model} from "../../layout/Model"; import {Model} from "../../layout/Model";
import {Constants} from "../../constants"; import {Constants} from "../../constants";
@ -528,18 +528,33 @@ export class MobileFiles extends Model {
} }
private onLsHTML(data: { files: IFile[], box: string, path: string }) { private onLsHTML(data: { files: IFile[], box: string, path: string }) {
if (data.files.length === 0) {
return;
}
const liElement = this.element.querySelector(`ul[data-url="${data.box}"] li[data-path="${data.path}"]`);
if (!liElement) {
return;
}
let fileHTML = ""; let fileHTML = "";
data.files.forEach((item: IFile) => { data.files.forEach((item: IFile) => {
fileHTML += this.genFileHTML(item); fileHTML += this.genFileHTML(item);
}); });
if (fileHTML === "") {
return;
}
const liElement = this.element.querySelector(`ul[data-url="${data.box}"] li[data-path="${data.path}"]`);
let nextElement = liElement.nextElementSibling; let nextElement = liElement.nextElementSibling;
if (nextElement && nextElement.tagName === "UL") { if (nextElement && nextElement.tagName === "UL") {
// 文件展开时,刷新 // 文件展开时,刷新
nextElement.remove(); const tempElement = document.createElement("template");
tempElement.innerHTML = fileHTML;
// 保持文件夹展开状态
nextElement.querySelectorAll(":scope > .b3-list-item > .b3-list-item__toggle> .b3-list-item__arrow--open").forEach(item => {
const openLiElement = hasClosestByClassName(item, "b3-list-item")
if (openLiElement) {
const tempOpenLiElement = tempElement.content.querySelector(`.b3-list-item[data-node-id="${openLiElement.getAttribute("data-node-id")}"]`)
tempOpenLiElement.after(openLiElement.nextElementSibling);
tempOpenLiElement.querySelector(".b3-list-item__arrow").classList.add("b3-list-item__arrow--open");
}
});
nextElement.innerHTML = tempElement.innerHTML;
return;
} }
liElement.querySelector(".b3-list-item__arrow").classList.add("b3-list-item__arrow--open"); liElement.querySelector(".b3-list-item__arrow").classList.add("b3-list-item__arrow--open");
liElement.insertAdjacentHTML("afterend", `<ul class="file-tree__sliderDown">${fileHTML}</ul>`); liElement.insertAdjacentHTML("afterend", `<ul class="file-tree__sliderDown">${fileHTML}</ul>`);