Vanessa 2022-10-02 11:16:44 +08:00
parent 1475fd9747
commit 99f9a0d5f0
3 changed files with 45 additions and 62 deletions

View file

@ -55,7 +55,6 @@ export class Gutter {
event.dataTransfer.setDragImage(protyle.wysiwyg.element.querySelector(`[data-node-id="${selectIds[0]}"]`), 0, 0); event.dataTransfer.setDragImage(protyle.wysiwyg.element.querySelector(`[data-node-id="${selectIds[0]}"]`), 0, 0);
} }
event.target.style.opacity = "0.1"; event.target.style.opacity = "0.1";
event.dataTransfer.effectAllowed = "move";
window.siyuan.dragElement = event.target; window.siyuan.dragElement = event.target;
window.siyuan.dragElement.setAttribute("data-selected-ids", selectIds.toString()); window.siyuan.dragElement.setAttribute("data-selected-ids", selectIds.toString());
}); });

View file

@ -604,35 +604,11 @@ export const dropEvent = (protyle: IProtyle, editorElement: HTMLElement) => {
return; return;
} }
const targetElement = editorElement.querySelector(".dragover__bottom") || editorElement.querySelector(".dragover__top") || editorElement.querySelector(".dragover__left") || editorElement.querySelector(".dragover__right"); const targetElement = editorElement.querySelector(".dragover__bottom") || editorElement.querySelector(".dragover__top") || editorElement.querySelector(".dragover__left") || editorElement.querySelector(".dragover__right");
const isBacklink = window.siyuan.dragElement?.getAttribute("data-treetype") === "backlink"; if (window.siyuan.dragElement && (
if (window.siyuan.dragElement && (event.altKey || event.shiftKey) && isBacklink) {
focusByRange(document.caretRangeFromPoint(event.clientX, event.clientY));
const sourceId = window.siyuan.dragElement.getAttribute("data-node-id");
if (event.altKey) {
fetchPost("/api/block/getRefText", {id: sourceId}, (response) => {
insertHTML(`((${sourceId} '${response.data}'))`, protyle);
});
} else {
insertHTML(protyle.lute.SpinBlockDOM(`{{select * from blocks where id='${sourceId}'}}`), protyle);
blockRender(protyle, protyle.wysiwyg.element);
}
} else if (window.siyuan.dragElement && targetElement && (
window.siyuan.dragElement.parentElement.classList.contains("protyle-gutters") || window.siyuan.dragElement.parentElement.classList.contains("protyle-gutters") ||
isBacklink ||
window.siyuan.dragElement.getAttribute("data-type") === "NodeListItem")) { window.siyuan.dragElement.getAttribute("data-type") === "NodeListItem")) {
// gutter 或反链面板拖拽 // gutter 或反链面板拖拽
const sourceId = window.siyuan.dragElement.getAttribute("data-node-id"); const sourceElements: Element[] = [];
let sourceElements: Element[] = [];
if (isBacklink) {
let sourceElement = document.createElement("div");
const domHTML = await fetchSyncPost("/api/block/getBlockDOM", {id: sourceId});
sourceElement.innerHTML = domHTML.data.dom;
sourceElement = sourceElement.firstElementChild as HTMLDivElement;
processRender(sourceElement);
highlightRender(sourceElement);
blockRender(protyle, sourceElement);
sourceElements = [sourceElement];
} else {
const selectedIdsData = window.siyuan.dragElement.getAttribute("data-selected-ids"); const selectedIdsData = window.siyuan.dragElement.getAttribute("data-selected-ids");
const selectedIds = selectedIdsData ? selectedIdsData.split(",") : [window.siyuan.dragElement.getAttribute("data-node-id")]; const selectedIds = selectedIdsData ? selectedIdsData.split(",") : [window.siyuan.dragElement.getAttribute("data-node-id")];
selectedIds.forEach(item => { selectedIds.forEach(item => {
@ -641,10 +617,26 @@ export const dropEvent = (protyle: IProtyle, editorElement: HTMLElement) => {
sourceElements.push(selectElement); sourceElements.push(selectElement);
} }
}); });
}
sourceElements.forEach(item => { sourceElements.forEach(item => {
item.classList.remove("protyle-wysiwyg--select", "protyle-wysiwyg--hl"); item.classList.remove("protyle-wysiwyg--select", "protyle-wysiwyg--hl");
}); });
if (event.altKey) {
focusByRange(document.caretRangeFromPoint(event.clientX, event.clientY));
let html = ''
for (let i = 0; i < selectedIds.length; i++) {
const response = await fetchSyncPost("/api/block/getRefText", {id: selectedIds[i]});
html += `((${selectedIds[i]} '${response.data}')) `
}
insertHTML(html, protyle);
} else if (event.shiftKey) {
focusByRange(document.caretRangeFromPoint(event.clientX, event.clientY));
let html = ''
selectedIds.forEach(item => {
html += `{{select * from blocks where id='${item}'}}\n`
})
insertHTML(protyle.lute.SpinBlockDOM(html), protyle);
blockRender(protyle, protyle.wysiwyg.element);
} else if (targetElement) {
const targetClass = targetElement.className.split(" "); const targetClass = targetElement.className.split(" ");
targetElement.classList.remove("dragover__bottom", "dragover__top", "dragover__left", "dragover__right", "protyle-wysiwyg--select"); targetElement.classList.remove("dragover__bottom", "dragover__top", "dragover__left", "dragover__right", "protyle-wysiwyg--select");
if (targetElement.parentElement.getAttribute("data-type") === "NodeSuperBlock" && if (targetElement.parentElement.getAttribute("data-type") === "NodeSuperBlock" &&
@ -661,16 +653,7 @@ export const dropEvent = (protyle: IProtyle, editorElement: HTMLElement) => {
dragSame(protyle, sourceElements, targetElement, targetClass.includes("dragover__bottom")); dragSame(protyle, sourceElements, targetElement, targetClass.includes("dragover__bottom"));
} }
} }
/// #if !MOBILE
if (isBacklink) {
setTimeout(() => {
// 等待 drag transaction
getAllModels().backlink.forEach(item => {
item.refresh();
});
}, 200);
} }
/// #endif
} else if (window.siyuan.dragElement && window.siyuan.dragElement.getAttribute("data-type") === "navigation-file" && targetElement) { } else if (window.siyuan.dragElement && window.siyuan.dragElement.getAttribute("data-type") === "navigation-file" && targetElement) {
// 文件树拖拽 // 文件树拖拽
fetchPost("/api/filetree/doc2Heading", { fetchPost("/api/filetree/doc2Heading", {
@ -729,7 +712,7 @@ export const dropEvent = (protyle: IProtyle, editorElement: HTMLElement) => {
if (!window.siyuan.dragElement) { if (!window.siyuan.dragElement) {
return; return;
} }
if ((event.shiftKey || event.altKey) && window.siyuan.dragElement.getAttribute("data-treetype") === "backlink") { if (event.shiftKey || event.altKey) {
const targetElement = hasClosestBlock(event.target); const targetElement = hasClosestBlock(event.target);
if (targetElement) { if (targetElement) {
targetElement.classList.remove("dragover__top", "protyle-wysiwyg--select", "dragover__bottom", "dragover__left", "dragover__right"); targetElement.classList.remove("dragover__top", "protyle-wysiwyg--select", "dragover__bottom", "dragover__left", "dragover__right");
@ -777,9 +760,7 @@ export const dropEvent = (protyle: IProtyle, editorElement: HTMLElement) => {
if (window.siyuan.dragElement.parentElement.classList.contains("protyle-gutters") || if (window.siyuan.dragElement.parentElement.classList.contains("protyle-gutters") ||
// 列表项之前的点 // 列表项之前的点
window.siyuan.dragElement.getAttribute("data-type") === "NodeListItem" || window.siyuan.dragElement.getAttribute("data-type") === "NodeListItem") {
// 反向链接
window.siyuan.dragElement.getAttribute("data-treetype") === "backlink") {
// gutter 文档内拖拽限制 // gutter 文档内拖拽限制
// 排除自己及子孙 // 排除自己及子孙
const selectedIdsData = window.siyuan.dragElement.getAttribute("data-selected-ids"); const selectedIdsData = window.siyuan.dragElement.getAttribute("data-selected-ids");

View file

@ -5,6 +5,9 @@ import {onGet} from "./onGet";
import {saveScroll} from "../scroll/saveScroll"; import {saveScroll} from "../scroll/saveScroll";
export const reloadProtyle = (protyle:IProtyle) => { export const reloadProtyle = (protyle:IProtyle) => {
if (protyle.options.backlinkData) {
return;
}
if (window.siyuan.config.editor.displayBookmarkIcon) { if (window.siyuan.config.editor.displayBookmarkIcon) {
protyle.wysiwyg.element.classList.add("protyle-wysiwyg--attr"); protyle.wysiwyg.element.classList.add("protyle-wysiwyg--attr");
} else { } else {