siyuan/app/src/layout/dock/util.ts
Vanessa 6ad89c12c1 🚨
2023-02-11 21:34:42 +08:00

111 lines
4.6 KiB
TypeScript

import {getAllModels} from "../getAll";
import {Tab} from "../Tab";
import {Graph} from "./Graph";
import {Outline} from "./Outline";
import {switchWnd} from "../util";
import {Backlink} from "./Backlink";
export const openBacklink = (protyle: IProtyle) => {
const backlink = getAllModels().backlink.find(item => {
if (item.blockId === protyle.block.id && item.type === "local") {
item.parent.parent.removeTab(item.parent.id);
return true;
}
});
if (backlink) {
return;
}
const newWnd = protyle.model.parent.parent.split("lr");
const tab = new Tab({
icon: "iconLink",
title: protyle.title.editElement.textContent,
callback(tab: Tab) {
tab.addModel(new Backlink({
type: "local",
tab,
// 通过搜索打开的包含上下文,但不是缩放,因此需要传 rootID https://ld246.com/article/1666786639708
blockId: protyle.block.showAll ? protyle.block.id : protyle.block.rootID,
rootId: protyle.block.rootID,
}));
}
});
newWnd.addTab(tab);
};
export const openGraph = (protyle: IProtyle) => {
const graph = getAllModels().graph.find(item => {
if (item.blockId === protyle.block.id && item.type === "local") {
item.parent.parent.removeTab(item.parent.id);
return true;
}
});
if (graph) {
return;
}
const wnd = protyle.model.parent.parent.split("lr");
const tab = new Tab({
icon: "iconGraph",
title: protyle.title.editElement.textContent,
callback(tab: Tab) {
tab.addModel(new Graph({
type: "local",
tab,
blockId: protyle.block.id,
rootId: protyle.block.rootID,
}));
}
});
wnd.addTab(tab);
};
export const openOutline = (protyle: IProtyle) => {
const outlinePanel = getAllModels().outline.find(item => {
if (item.blockId === protyle.block.rootID && item.type === "local") {
item.parent.parent.removeTab(item.parent.id);
return true;
}
});
if (outlinePanel) {
return;
}
const newWnd = protyle.model.parent.parent.split("lr");
const tab = new Tab({
icon: "iconAlignCenter",
title: protyle.title.editElement.textContent,
callback(tab: Tab) {
tab.addModel(new Outline({
type: "local",
tab,
blockId: protyle.block.rootID,
}));
}
});
newWnd.addTab(tab);
newWnd.element.classList.remove("fn__flex-1");
newWnd.element.style.width = "200px";
switchWnd(newWnd, protyle.model.parent.parent);
};
export const resetFloatDockSize = () => {
if (!window.siyuan.layout.leftDock.pin) {
window.siyuan.layout.leftDock.layout.element.style.top = (1 + document.getElementById("toolbar").clientHeight + document.getElementById("dockTop").clientHeight) + "px";
window.siyuan.layout.leftDock.layout.element.style.bottom = (document.getElementById("status").clientHeight + document.getElementById("dockBottom").clientHeight + 1) + "px";
if (window.siyuan.layout.leftDock.layout.element.style.opacity === "1") {
window.siyuan.layout.leftDock.layout.element.style.left = (window.siyuan.layout.leftDock.element.clientWidth + .5) + "px";
}
}
if (!window.siyuan.layout.rightDock.pin) {
window.siyuan.layout.rightDock.layout.element.style.top = (1 + document.getElementById("toolbar").clientHeight + document.getElementById("dockTop").clientHeight) + "px";
window.siyuan.layout.rightDock.layout.element.style.bottom = (document.getElementById("status").clientHeight + document.getElementById("dockBottom").clientHeight + 1) + "px";
if (window.siyuan.layout.rightDock.layout.element.style.opacity === "1") {
window.siyuan.layout.rightDock.layout.element.style.right = (window.siyuan.layout.rightDock.element.clientWidth + .5) + "px";
}
}
if (!window.siyuan.layout.topDock.pin && window.siyuan.layout.topDock.layout.element.style.opacity === "1") {
window.siyuan.layout.topDock.layout.element.style.top = (document.getElementById("dockTop").clientHeight + document.getElementById("toolbar").clientHeight + 1) + "px";
}
if (!window.siyuan.layout.bottomDock.pin && window.siyuan.layout.bottomDock.layout.element.style.opacity === "1") {
window.siyuan.layout.bottomDock.layout.element.style.bottom = (document.getElementById("dockBottom").clientHeight + document.getElementById("status").clientHeight + 1) + "px";
}
};