implemented openInAdjacentLeaf #156

This commit is contained in:
Zsolt Viczian
2021-10-04 19:45:18 +02:00
parent fe7f3f58c5
commit 0cccdad13f
5 changed files with 10168 additions and 10136 deletions

View File

@@ -34,7 +34,7 @@ import ExcalidrawPlugin from './main';
import {estimateBounds, ExcalidrawAutomate, repositionElementsToCursor} from './ExcalidrawAutomate';
import { t } from "./lang/helpers";
import { ExcalidrawData, REG_LINKINDEX_HYPERLINK, REGEX_LINK } from "./ExcalidrawData";
import { checkAndCreateFolder, download, getNewUniqueFilepath, splitFolderAndFilename, viewportCoordsToSceneCoords } from "./Utils";
import { checkAndCreateFolder, download, getNewOrAdjacentLeaf, getNewUniqueFilepath, splitFolderAndFilename, viewportCoordsToSceneCoords } from "./Utils";
import { Prompt } from "./Prompt";
import { ClipboardData } from "@zsviczian/excalidraw/types/clipboard";
@@ -264,12 +264,9 @@ export default class ExcalidrawView extends TextFileView {
document.exitFullscreen();
this.zoomToFit();
}
if(lineNum) {
const leaf = ev.shiftKey ? view.app.workspace.createLeafBySplit(view.leaf) : view.leaf;
leaf.openFile(file,{eState: {line: lineNum-1}});
return;
}
view.app.workspace.openLinkText(text,view.file.path,ev.shiftKey);
const leaf = ev.shiftKey ? getNewOrAdjacentLeaf(this.plugin,view.leaf) : view.leaf;
const eState = lineNum ? {eState: {line: lineNum-1}} : {};
leaf.openFile(file,eState);
} catch (e) {
new Notice(e,4000);
}

View File

@@ -1,6 +1,13 @@
import { normalizePath, TAbstractFile, TFolder, Vault } from "obsidian";
import { normalizePath, TAbstractFile, TFolder, Vault, WorkspaceLeaf } from "obsidian";
import { Random } from "roughjs/bin/math";
import { Zoom } from "@zsviczian/excalidraw/types/types";
import ExcalidrawPlugin from "./main";
declare module "obsidian" {
interface Workspace {
getAdjacentLeafInDirection(leaf: WorkspaceLeaf, direction: string): WorkspaceLeaf;
}
}
/**
* Splits a full path including a folderpath and a filename into separate folderpath and filename components
@@ -122,4 +129,15 @@ export const viewportCoordsToSceneCoords = (
const x = (clientX - zoom.translation.x - offsetLeft) * invScale - scrollX;
const y = (clientY - zoom.translation.y - offsetTop) * invScale - scrollY;
return { x, y };
};
};
export const getNewOrAdjacentLeaf = (plugin: ExcalidrawPlugin, leaf: WorkspaceLeaf):WorkspaceLeaf => {
if(plugin.settings.openInAdjacentPane) {
let leafToUse = plugin.app.workspace.getAdjacentLeafInDirection(leaf, "right");
if(!leafToUse){leafToUse = plugin.app.workspace.getAdjacentLeafInDirection(leaf, "left");}
if(!leafToUse){leafToUse = plugin.app.workspace.getAdjacentLeafInDirection(leaf, "bottom");}
if(!leafToUse){leafToUse = plugin.app.workspace.getAdjacentLeafInDirection(leaf, "top");}
return leafToUse;
}
return plugin.app.workspace.createLeafBySplit(leaf);
}

View File

@@ -79,6 +79,11 @@ export default {
"the plugin will open it in a browser. " +
"When Obsidian files change, the matching [[link]] in your drawings will also change. " +
"If you don't want text accidentally changing in your drawings use [[links|with aliases]].",
ADJACENT_PANE_NAME: "Open in adjacent pane",
ADJACENT_PANE_DESC: "When CTRL+SHIFT clicking a link in Excalidraw by default the plugin will open the link in a new pane. " +
"Turning this setting on, Excalidraw will first look for an existing adjacent pane, and try to open the link there. " +
"Excalidraw will first look too the right, then to the left, then down, then up. If no pane is found, Excalidraw will open " +
"a new pane.",
LINK_BRACKETS_NAME: "Show [[brackets]] around links",
LINK_BRACKETS_DESC: "In PREVIEW mode, when parsing Text Elements, place brackets around links. " +
"You can override this setting for a specific drawing by adding '" + FRONTMATTER_KEY_CUSTOM_LINK_BRACKETS +

View File

@@ -18,6 +18,7 @@ export interface ExcalidrawSettings {
displaySVGInPreview: boolean,
width: string,
zoomToFitOnResize: boolean,
openInAdjacentPane: boolean,
showLinkBrackets: boolean,
linkPrefix: string,
urlPrefix: string,
@@ -52,6 +53,7 @@ export const DEFAULT_SETTINGS: ExcalidrawSettings = {
zoomToFitOnResize: true,
linkPrefix: "📍",
urlPrefix: "🌐",
openInAdjacentPane: false,
showLinkBrackets: true,
allowCtrlClick: true,
forceWrap: false,
@@ -203,6 +205,16 @@ export class ExcalidrawSettingTab extends PluginSettingTab {
this.containerEl.createEl('p',{
text: t("LINKS_DESC")});
new Setting(containerEl)
.setName(t("ADJACENT_PANE_NAME"))
.setDesc(t("ADJACENT_PANE_DESC"))
.addToggle(toggle => toggle
.setValue(this.plugin.settings.openInAdjacentPane)
.onChange(async (value) => {
this.plugin.settings.openInAdjacentPane = value;
this.applySettingsUpdate(true);
}));
new Setting(containerEl)
.setName(t("LINK_BRACKETS_NAME"))
.setDesc(t("LINK_BRACKETS_DESC"))

20254
yarn.lock

File diff suppressed because it is too large Load Diff