Vanessa 2025-08-14 11:21:48 +08:00
parent dd3f5cfacf
commit 1b9b7e1c83
4 changed files with 23 additions and 9 deletions

View file

@ -94,8 +94,7 @@ export class Gutter {
return true; return true;
} }
}); });
if (avElement.querySelector('.block__icon[data-type="av-sort"]')?.classList.contains("block__icon--active") || if (avElement.querySelector('.block__icon[data-type="av-sort"]')?.classList.contains("block__icon--active")) {
["template", "created", "updated"].includes(avElement.querySelector(".av__group-title")?.getAttribute("data-dtype"))) {
event.preventDefault(); event.preventDefault();
event.stopPropagation(); event.stopPropagation();
return; return;

View file

@ -132,7 +132,7 @@ const renderGroupGallery = (options: ITableOptions) => {
options.data.view.groups.forEach((group: IAVGallery) => { options.data.view.groups.forEach((group: IAVGallery) => {
if (group.groupHidden === 0) { if (group.groupHidden === 0) {
avBodyHTML += `${getGroupTitleHTML(group, group.cards.length)} avBodyHTML += `${getGroupTitleHTML(group, group.cards.length)}
<div data-group-id="${group.id}" data-page-size="${group.pageSize}" data-dtype="${group.groupKey.type}" data-content="${group.groupValue.text.content}" class="av__body${group.groupFolded ? " fn__none" : ""}">${getGalleryHTML(group, options.resetData.selectItemIds, options.resetData.editIds, group.id)}</div>`; <div data-group-id="${group.id}" data-page-size="${group.pageSize}" data-dtype="${group.groupKey.type}" data-content="${group.groupValue.text?.content}" class="av__body${group.groupFolded ? " fn__none" : ""}">${getGalleryHTML(group, options.resetData.selectItemIds, options.resetData.editIds, group.id)}</div>`;
} }
}); });
if (options.renderAll) { if (options.renderAll) {

View file

@ -241,7 +241,7 @@ export const getGroupTitleHTML = (group: IAVView, counter: number) => {
} else { } else {
nameHTML = group.name; nameHTML = group.name;
} }
return `<div class="av__group-title" data-dtype="${group.groupKey.type}"> return `<div class="av__group-title">
<div class="av__group-icon" data-type="av-group-fold" data-id="${group.id}"> <div class="av__group-icon" data-type="av-group-fold" data-id="${group.id}">
<svg class="${group.groupFolded ? "" : "av__group-arrow--open"}"><use xlink:href="#iconRight"></use></svg> <svg class="${group.groupFolded ? "" : "av__group-arrow--open"}"><use xlink:href="#iconRight"></use></svg>
</div> </div>
@ -261,7 +261,7 @@ const renderGroupTable = (options: ITableOptions) => {
options.data.view.groups.forEach((group: IAVTable) => { options.data.view.groups.forEach((group: IAVTable) => {
if (group.groupHidden === 0) { if (group.groupHidden === 0) {
avBodyHTML += `${getGroupTitleHTML(group, group.rows.length)} avBodyHTML += `${getGroupTitleHTML(group, group.rows.length)}
<div data-group-id="${group.id}" data-page-size="${group.pageSize}" data-dtype="${group.groupKey.type}" data-content="${group.groupValue.text.content}" style="float: left" class="av__body${group.groupFolded ? " fn__none" : ""}">${getTableHTMLs(group, options.blockElement)}</div>`; <div data-group-id="${group.id}" data-page-size="${group.pageSize}" data-dtype="${group.groupKey.type}" data-content="${group.groupValue.text?.content}" style="float: left" class="av__body${group.groupFolded ? " fn__none" : ""}">${getTableHTMLs(group, options.blockElement)}</div>`;
} }
}); });
if (options.renderAll) { if (options.renderAll) {

View file

@ -1496,6 +1496,7 @@ export const dropEvent = (protyle: IProtyle, editorElement: HTMLElement) => {
event.preventDefault(); event.preventDefault();
return; return;
} }
const gutterTypes = gutterType ? gutterType.replace(Constants.SIYUAN_DROP_GUTTER, "").split(Constants.ZWSP) : [];
const fileTreeIds = (event.dataTransfer.types.includes(Constants.SIYUAN_DROP_FILE) && window.siyuan.dragElement) ? window.siyuan.dragElement.innerText : ""; const fileTreeIds = (event.dataTransfer.types.includes(Constants.SIYUAN_DROP_FILE) && window.siyuan.dragElement) ? window.siyuan.dragElement.innerText : "";
if (event.shiftKey || (event.altKey && fileTreeIds.indexOf("-") === -1)) { if (event.shiftKey || (event.altKey && fileTreeIds.indexOf("-") === -1)) {
const targetAssetElement = hasClosestBlock(event.target); const targetAssetElement = hasClosestBlock(event.target);
@ -1567,7 +1568,7 @@ export const dropEvent = (protyle: IProtyle, editorElement: HTMLElement) => {
targetElement = hasTopClosestByAttribute(targetElement, "data-node-id", null); targetElement = hasTopClosestByAttribute(targetElement, "data-node-id", null);
} }
} else if (targetElement && targetElement.classList.contains("list")) { } else if (targetElement && targetElement.classList.contains("list")) {
if (gutterType && gutterType.replace(Constants.SIYUAN_DROP_GUTTER, "").split(Constants.ZWSP)[0] !== "nodelistitem") { if (gutterTypes[0] !== "nodelistitem") {
targetElement = hasClosestBlock(document.elementFromPoint(event.clientX, event.clientY - 6)); targetElement = hasClosestBlock(document.elementFromPoint(event.clientX, event.clientY - 6));
} else { } else {
targetElement = hasClosestByClassName(document.elementFromPoint(event.clientX, event.clientY - 6), "li"); targetElement = hasClosestByClassName(document.elementFromPoint(event.clientX, event.clientY - 6), "li");
@ -1586,10 +1587,25 @@ export const dropEvent = (protyle: IProtyle, editorElement: HTMLElement) => {
} }
} }
} else if (targetElement && gutterType && gutterType.startsWith(`${Constants.SIYUAN_DROP_GUTTER}NodeAttributeViewRowMenu${Constants.ZWSP}`.toLowerCase())) { } else if (targetElement && gutterType && gutterType.startsWith(`${Constants.SIYUAN_DROP_GUTTER}NodeAttributeViewRowMenu${Constants.ZWSP}`.toLowerCase())) {
// 行只能拖拽当前 av 中
if ((!targetElement.classList.contains("av__row") && !targetElement.classList.contains("av__row--util")) || if ((!targetElement.classList.contains("av__row") && !targetElement.classList.contains("av__row--util")) ||
(window.siyuan.dragElement && !window.siyuan.dragElement.contains(targetElement))) { (window.siyuan.dragElement && !window.siyuan.dragElement.contains(targetElement))) {
// 行只能拖拽当前 av 中
targetElement = false; targetElement = false;
} else {
// 模板、创建时间、更新时间 字段作为分组方式时不允许跨分组拖拽 https://github.com/siyuan-note/siyuan/issues/15553
const bodyElement = hasClosestByClassName(targetElement, "av__body");
if (bodyElement && ["template", "created", "updated"].includes(bodyElement.getAttribute("data-dtype"))) {
const groupID = bodyElement.getAttribute("data-group-id");
gutterTypes[2].split(",").find(item => {
if (item && item.split("@")[1] !== groupID) {
targetElement = false;
editorElement.querySelectorAll(".dragover__bottom, .dragover__top, .dragover").forEach((item: HTMLElement) => {
item.classList.remove("dragover__top", "dragover__bottom", "dragover");
});
return true;
}
});
}
} }
} else if (targetElement && gutterType && gutterType.startsWith(`${Constants.SIYUAN_DROP_GUTTER}NodeAttributeView${Constants.ZWSP}GalleryItem${Constants.ZWSP}`.toLowerCase())) { } else if (targetElement && gutterType && gutterType.startsWith(`${Constants.SIYUAN_DROP_GUTTER}NodeAttributeView${Constants.ZWSP}GalleryItem${Constants.ZWSP}`.toLowerCase())) {
// gallery item 只能拖拽当前 av 中 // gallery item 只能拖拽当前 av 中
@ -1718,13 +1734,12 @@ export const dropEvent = (protyle: IProtyle, editorElement: HTMLElement) => {
disabledPosition = ""; disabledPosition = "";
// gutter 文档内拖拽限制 // gutter 文档内拖拽限制
// 排除自己及子孙 // 排除自己及子孙
const gutterTypes = gutterType.replace(Constants.SIYUAN_DROP_GUTTER, "").split(Constants.ZWSP);
if (gutterTypes[0] === "nodeattributeview" && gutterTypes[1] === "col" && targetElement.getAttribute("data-id") === gutterTypes[2]) { if (gutterTypes[0] === "nodeattributeview" && gutterTypes[1] === "col" && targetElement.getAttribute("data-id") === gutterTypes[2]) {
// 表头不能拖到自己上 // 表头不能拖到自己上
clearDragoverElement(dragoverElement); clearDragoverElement(dragoverElement);
return; return;
} }
if (gutterTypes[0] === "nodeattributeviewrowmenu" && gutterTypes[2] === targetElement.getAttribute("data-id")) { if (gutterTypes[0] === "nodeattributeviewrowmenu" && gutterTypes[2].split("@")[0] === targetElement.getAttribute("data-id")) {
// 行不能拖到自己上 // 行不能拖到自己上
clearDragoverElement(dragoverElement); clearDragoverElement(dragoverElement);
return; return;