This commit is contained in:
Vanessa 2024-09-22 19:43:10 +08:00 committed by Daniel
parent 1d2f6d276f
commit 2cf0b09282
No known key found for this signature in database
GPG key ID: 86211BA83DF03017
5 changed files with 81 additions and 32 deletions

View file

@ -3,8 +3,11 @@ import {genUUID} from "../util/genID";
import { import {
fixWndFlex1, fixWndFlex1,
getInstanceById, getInstanceById,
getWndByLayout, JSONToCenter, getWndByLayout,
newModelByInitData, pdfIsLoading, saveLayout, JSONToCenter,
newModelByInitData,
pdfIsLoading,
saveLayout,
setPanelFocus, setPanelFocus,
switchWnd switchWnd
} from "./util"; } from "./util";
@ -20,7 +23,7 @@ import {
} from "../protyle/util/hasClosest"; } from "../protyle/util/hasClosest";
import {Constants} from "../constants"; import {Constants} from "../constants";
/// #if !BROWSER /// #if !BROWSER
import {webFrame, ipcRenderer} from "electron"; import {ipcRenderer, webFrame} from "electron";
import {setModelsHash, setTabPosition} from "../window/setHeader"; import {setModelsHash, setTabPosition} from "../window/setHeader";
/// #endif /// #endif
import {Search} from "../search"; import {Search} from "../search";
@ -198,7 +201,10 @@ export class Wnd {
} }
}); });
let dragleaveTimeout: number; let dragleaveTimeout: number;
let headerDragCounter = 0;
this.headersElement.parentElement.addEventListener("dragleave", function () { this.headersElement.parentElement.addEventListener("dragleave", function () {
headerDragCounter--;
if (headerDragCounter === 0) {
clearTimeout(dragleaveTimeout); clearTimeout(dragleaveTimeout);
// 窗口拖拽到新窗口时,不 drop 无法移除 clone 的元素 // 窗口拖拽到新窗口时,不 drop 无法移除 clone 的元素
dragleaveTimeout = window.setTimeout(() => { dragleaveTimeout = window.setTimeout(() => {
@ -208,6 +214,11 @@ export class Wnd {
}, 1000); }, 1000);
const it = this as HTMLElement; const it = this as HTMLElement;
it.classList.remove("layout-tab-bars--drag"); it.classList.remove("layout-tab-bars--drag");
}
});
this.headersElement.parentElement.addEventListener("dragenter", (event) => {
event.preventDefault();
headerDragCounter++;
}); });
this.headersElement.parentElement.addEventListener("drop", function (event: DragEvent & { this.headersElement.parentElement.addEventListener("drop", function (event: DragEvent & {
target: HTMLElement target: HTMLElement

View file

@ -451,7 +451,9 @@ export class Files extends Model {
event.preventDefault(); event.preventDefault();
return; return;
} }
liElement.classList.remove("dragover__top", "dragover__bottom", "dragover"); this.element.querySelectorAll(".dragover, .dragover__bottom, .dragover__top").forEach((item: HTMLElement) => {
item.classList.remove("dragover", "dragover__bottom", "dragover__top");
});
let gutterType = ""; let gutterType = "";
for (const item of event.dataTransfer.items) { for (const item of event.dataTransfer.items) {
if (item.type.startsWith(Constants.SIYUAN_DROP_GUTTER)) { if (item.type.startsWith(Constants.SIYUAN_DROP_GUTTER)) {
@ -510,10 +512,18 @@ export class Files extends Model {
liElement.classList.add("dragover"); liElement.classList.add("dragover");
event.preventDefault(); event.preventDefault();
}); });
let counter = 0;
this.element.addEventListener("dragleave", () => { this.element.addEventListener("dragleave", () => {
counter--;
if (counter === 0) {
this.element.querySelectorAll(".dragover, .dragover__bottom, .dragover__top").forEach((item: HTMLElement) => { this.element.querySelectorAll(".dragover, .dragover__bottom, .dragover__top").forEach((item: HTMLElement) => {
item.classList.remove("dragover", "dragover__bottom", "dragover__top"); item.classList.remove("dragover", "dragover__bottom", "dragover__top");
}); });
}
});
this.element.addEventListener("dragenter", (event) => {
event.preventDefault();
counter++;
}); });
this.element.addEventListener("drop", async (event: DragEvent & { target: HTMLElement }) => { this.element.addEventListener("drop", async (event: DragEvent & { target: HTMLElement }) => {
const newElement = this.element.querySelector(".dragover, .dragover__bottom, .dragover__top"); const newElement = this.element.querySelector(".dragover, .dragover__bottom, .dragover__top");

View file

@ -264,17 +264,27 @@ class="fn__flex-1 fn__flex${["url", "text", "number", "email", "phone", "block"]
} }
event.preventDefault(); event.preventDefault();
const nodeRect = targetElement.getBoundingClientRect(); const nodeRect = targetElement.getBoundingClientRect();
targetElement.classList.remove("dragover__bottom", "dragover__top"); element.querySelectorAll(".dragover__bottom, .dragover__top").forEach((item: HTMLElement) => {
item.classList.remove("dragover__bottom", "dragover__top");
});
if (event.clientY > nodeRect.top + nodeRect.height / 2) { if (event.clientY > nodeRect.top + nodeRect.height / 2) {
targetElement.classList.add("dragover__bottom"); targetElement.classList.add("dragover__bottom");
} else { } else {
targetElement.classList.add("dragover__top"); targetElement.classList.add("dragover__top");
} }
}); });
let counter = 0
element.addEventListener("dragleave", () => { element.addEventListener("dragleave", () => {
counter--;
if (counter === 0) {
element.querySelectorAll(".dragover__bottom, .dragover__top").forEach((item: HTMLElement) => { element.querySelectorAll(".dragover__bottom, .dragover__top").forEach((item: HTMLElement) => {
item.classList.remove("dragover__bottom", "dragover__top"); item.classList.remove("dragover__bottom", "dragover__top");
}); });
}
});
element.addEventListener("dragenter", (event) => {
event.preventDefault();
counter++;
}); });
element.addEventListener("dragend", () => { element.addEventListener("dragend", () => {
if (window.siyuan.dragElement) { if (window.siyuan.dragElement) {

View file

@ -1,10 +1,9 @@
import {transaction} from "../../wysiwyg/transaction"; import {transaction} from "../../wysiwyg/transaction";
import {fetchPost} from "../../../util/fetch"; import {fetchPost} from "../../../util/fetch";
import {addCol} from "./col"; import {addCol, bindEditEvent, duplicateCol, getColIconByType, getEditHTML} from "./col";
import {bindEditEvent, duplicateCol, getColIconByType, getEditHTML} from "./col";
import {setPosition} from "../../../util/setPosition"; import {setPosition} from "../../../util/setPosition";
import {hasClosestByAttribute, hasClosestByClassName} from "../../util/hasClosest"; import {hasClosestByAttribute, hasClosestByClassName} from "../../util/hasClosest";
import {bindSelectEvent, getSelectHTML, addColOptionOrCell, setColOption, removeCellOption} from "./select"; import {addColOptionOrCell, bindSelectEvent, getSelectHTML, removeCellOption, setColOption} from "./select";
import {addFilter, getFiltersHTML, setFilter} from "./filter"; import {addFilter, getFiltersHTML, setFilter} from "./filter";
import {addSort, bindSortsEvent, getSortsHTML} from "./sort"; import {addSort, bindSortsEvent, getSortsHTML} from "./sort";
import {bindDateEvent, getDateHTML} from "./date"; import {bindDateEvent, getDateHTML} from "./date";
@ -457,7 +456,9 @@ export const openMenuPanel = (options: {
event.preventDefault(); event.preventDefault();
if (dragoverElement && targetElement.isSameNode(dragoverElement)) { if (dragoverElement && targetElement.isSameNode(dragoverElement)) {
const nodeRect = targetElement.getBoundingClientRect(); const nodeRect = targetElement.getBoundingClientRect();
targetElement.classList.remove("dragover__bottom", "dragover__top"); avPanelElement.querySelectorAll(".dragover__bottom, .dragover__top").forEach((item: HTMLElement) => {
item.classList.remove("dragover__bottom", "dragover__top");
});
if (event.clientY > nodeRect.top + nodeRect.height / 2) { if (event.clientY > nodeRect.top + nodeRect.height / 2) {
targetElement.classList.add("dragover__bottom"); targetElement.classList.add("dragover__bottom");
} else { } else {
@ -467,10 +468,18 @@ export const openMenuPanel = (options: {
} }
dragoverElement = targetElement; dragoverElement = targetElement;
}); });
let counter = 0
avPanelElement.addEventListener("dragleave", () => { avPanelElement.addEventListener("dragleave", () => {
counter--;
if (counter === 0) {
avPanelElement.querySelectorAll(".dragover__bottom, .dragover__top").forEach((item: HTMLElement) => { avPanelElement.querySelectorAll(".dragover__bottom, .dragover__top").forEach((item: HTMLElement) => {
item.classList.remove("dragover__bottom", "dragover__top"); item.classList.remove("dragover__bottom", "dragover__top");
}); });
}
});
avPanelElement.addEventListener("dragenter", (event) => {
event.preventDefault();
counter++;
}); });
avPanelElement.addEventListener("dragend", () => { avPanelElement.addEventListener("dragend", () => {
if (window.siyuan.dragElement) { if (window.siyuan.dragElement) {

View file

@ -4,7 +4,8 @@ import {
hasClosestByAttribute, hasClosestByAttribute,
hasClosestByClassName, hasClosestByClassName,
hasClosestByTag, hasClosestByTag,
hasTopClosestByAttribute, isInEmbedBlock hasTopClosestByAttribute,
isInEmbedBlock
} from "./hasClosest"; } from "./hasClosest";
import {Constants} from "../../constants"; import {Constants} from "../../constants";
import {paste} from "./paste"; import {paste} from "./paste";
@ -1371,15 +1372,23 @@ export const dropEvent = (protyle: IProtyle, editorElement: HTMLElement) => {
dragoverElement = targetElement; dragoverElement = targetElement;
} }
}); });
editorElement.addEventListener("dragleave", (event) => { let counter = 0
editorElement.addEventListener("dragleave", (event: DragEvent & { target: HTMLElement }) => {
if (protyle.disabled) { if (protyle.disabled) {
event.preventDefault(); event.preventDefault();
event.stopPropagation(); event.stopPropagation();
return; return;
} }
counter--;
if (counter === 0) {
editorElement.querySelectorAll(".dragover__left, .dragover__right, .dragover__bottom, .dragover__top, .dragover").forEach((item: HTMLElement) => { editorElement.querySelectorAll(".dragover__left, .dragover__right, .dragover__bottom, .dragover__top, .dragover").forEach((item: HTMLElement) => {
item.classList.remove("dragover__top", "dragover__bottom", "dragover__left", "dragover__right", "dragover"); item.classList.remove("dragover__top", "dragover__bottom", "dragover__left", "dragover__right", "dragover");
}); });
}
});
editorElement.addEventListener("dragenter", (event) => {
event.preventDefault();
counter++;
}); });
}; };