Skip to content

Commit 1b9b7e1

Browse files
committed
🎨 #15553
1 parent dd3f5cf commit 1b9b7e1

File tree

4 files changed

+23
-9
lines changed

4 files changed

+23
-9
lines changed

app/src/protyle/gutter/index.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,7 @@ export class Gutter {
9494
return true;
9595
}
9696
});
97-
if (avElement.querySelector('.block__icon[data-type="av-sort"]')?.classList.contains("block__icon--active") ||
98-
["template", "created", "updated"].includes(avElement.querySelector(".av__group-title")?.getAttribute("data-dtype"))) {
97+
if (avElement.querySelector('.block__icon[data-type="av-sort"]')?.classList.contains("block__icon--active")) {
9998
event.preventDefault();
10099
event.stopPropagation();
101100
return;

app/src/protyle/render/av/gallery/render.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ const renderGroupGallery = (options: ITableOptions) => {
132132
options.data.view.groups.forEach((group: IAVGallery) => {
133133
if (group.groupHidden === 0) {
134134
avBodyHTML += `${getGroupTitleHTML(group, group.cards.length)}
135-
<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>`;
135+
<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>`;
136136
}
137137
});
138138
if (options.renderAll) {

app/src/protyle/render/av/render.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ export const getGroupTitleHTML = (group: IAVView, counter: number) => {
241241
} else {
242242
nameHTML = group.name;
243243
}
244-
return `<div class="av__group-title" data-dtype="${group.groupKey.type}">
244+
return `<div class="av__group-title">
245245
<div class="av__group-icon" data-type="av-group-fold" data-id="${group.id}">
246246
<svg class="${group.groupFolded ? "" : "av__group-arrow--open"}"><use xlink:href="#iconRight"></use></svg>
247247
</div>
@@ -261,7 +261,7 @@ const renderGroupTable = (options: ITableOptions) => {
261261
options.data.view.groups.forEach((group: IAVTable) => {
262262
if (group.groupHidden === 0) {
263263
avBodyHTML += `${getGroupTitleHTML(group, group.rows.length)}
264-
<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>`;
264+
<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>`;
265265
}
266266
});
267267
if (options.renderAll) {

app/src/protyle/util/editorCommonEvent.ts

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1496,6 +1496,7 @@ export const dropEvent = (protyle: IProtyle, editorElement: HTMLElement) => {
14961496
event.preventDefault();
14971497
return;
14981498
}
1499+
const gutterTypes = gutterType ? gutterType.replace(Constants.SIYUAN_DROP_GUTTER, "").split(Constants.ZWSP) : [];
14991500
const fileTreeIds = (event.dataTransfer.types.includes(Constants.SIYUAN_DROP_FILE) && window.siyuan.dragElement) ? window.siyuan.dragElement.innerText : "";
15001501
if (event.shiftKey || (event.altKey && fileTreeIds.indexOf("-") === -1)) {
15011502
const targetAssetElement = hasClosestBlock(event.target);
@@ -1567,7 +1568,7 @@ export const dropEvent = (protyle: IProtyle, editorElement: HTMLElement) => {
15671568
targetElement = hasTopClosestByAttribute(targetElement, "data-node-id", null);
15681569
}
15691570
} else if (targetElement && targetElement.classList.contains("list")) {
1570-
if (gutterType && gutterType.replace(Constants.SIYUAN_DROP_GUTTER, "").split(Constants.ZWSP)[0] !== "nodelistitem") {
1571+
if (gutterTypes[0] !== "nodelistitem") {
15711572
targetElement = hasClosestBlock(document.elementFromPoint(event.clientX, event.clientY - 6));
15721573
} else {
15731574
targetElement = hasClosestByClassName(document.elementFromPoint(event.clientX, event.clientY - 6), "li");
@@ -1586,10 +1587,25 @@ export const dropEvent = (protyle: IProtyle, editorElement: HTMLElement) => {
15861587
}
15871588
}
15881589
} else if (targetElement && gutterType && gutterType.startsWith(`${Constants.SIYUAN_DROP_GUTTER}NodeAttributeViewRowMenu${Constants.ZWSP}`.toLowerCase())) {
1589-
// 行只能拖拽当前 av 中
15901590
if ((!targetElement.classList.contains("av__row") && !targetElement.classList.contains("av__row--util")) ||
15911591
(window.siyuan.dragElement && !window.siyuan.dragElement.contains(targetElement))) {
1592+
// 行只能拖拽当前 av 中
15921593
targetElement = false;
1594+
} else {
1595+
// 模板、创建时间、更新时间 字段作为分组方式时不允许跨分组拖拽 https://github.com/siyuan-note/siyuan/issues/15553
1596+
const bodyElement = hasClosestByClassName(targetElement, "av__body");
1597+
if (bodyElement && ["template", "created", "updated"].includes(bodyElement.getAttribute("data-dtype"))) {
1598+
const groupID = bodyElement.getAttribute("data-group-id");
1599+
gutterTypes[2].split(",").find(item => {
1600+
if (item && item.split("@")[1] !== groupID) {
1601+
targetElement = false;
1602+
editorElement.querySelectorAll(".dragover__bottom, .dragover__top, .dragover").forEach((item: HTMLElement) => {
1603+
item.classList.remove("dragover__top", "dragover__bottom", "dragover");
1604+
});
1605+
return true;
1606+
}
1607+
});
1608+
}
15931609
}
15941610
} else if (targetElement && gutterType && gutterType.startsWith(`${Constants.SIYUAN_DROP_GUTTER}NodeAttributeView${Constants.ZWSP}GalleryItem${Constants.ZWSP}`.toLowerCase())) {
15951611
// gallery item 只能拖拽当前 av 中
@@ -1718,13 +1734,12 @@ export const dropEvent = (protyle: IProtyle, editorElement: HTMLElement) => {
17181734
disabledPosition = "";
17191735
// gutter 文档内拖拽限制
17201736
// 排除自己及子孙
1721-
const gutterTypes = gutterType.replace(Constants.SIYUAN_DROP_GUTTER, "").split(Constants.ZWSP);
17221737
if (gutterTypes[0] === "nodeattributeview" && gutterTypes[1] === "col" && targetElement.getAttribute("data-id") === gutterTypes[2]) {
17231738
// 表头不能拖到自己上
17241739
clearDragoverElement(dragoverElement);
17251740
return;
17261741
}
1727-
if (gutterTypes[0] === "nodeattributeviewrowmenu" && gutterTypes[2] === targetElement.getAttribute("data-id")) {
1742+
if (gutterTypes[0] === "nodeattributeviewrowmenu" && gutterTypes[2].split("@")[0] === targetElement.getAttribute("data-id")) {
17281743
// 行不能拖到自己上
17291744
clearDragoverElement(dragoverElement);
17301745
return;

0 commit comments

Comments
 (0)