Skip to content

Commit c559b31

Browse files
committed
fix: block links and heading links don't work as expected
1 parent 4019dad commit c559b31

13 files changed

Lines changed: 128 additions & 80 deletions

File tree

src/view/components/container/column/components/group/components/card/components/card-buttons/helpers/openFileAndJumpToLine.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { MarkdownView, WorkspaceLeaf } from 'obsidian';
22
import { setViewType } from 'src/obsidian/events/workspace/actions/set-view-type';
33
import { LineageView } from 'src/view/view';
4-
import { getExistingRightTabGroup } from 'src/view/components/container/column/components/group/components/card/components/content/event-handlers/helpers/get-existing-right-tab-group';
4+
import { getExistingRightTabGroup } from 'src/view/components/container/column/components/group/components/card/components/content/event-handlers/handle-links/helpers/get-existing-right-tab-group';
55

66
const getLeafFromExistingTabGroup = (view: LineageView) => {
77
const rightTabGroup = getExistingRightTabGroup(view);

src/view/components/container/column/components/group/components/card/components/content/content.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import { markdownPreviewAction } from 'src/view/actions/markdown-preview/markdown-preview-action';
44
import {
55
handleLinks
6-
} from 'src/view/components/container/column/components/group/components/card/components/content/event-handlers/handle-links';
6+
} from 'src/view/components/container/column/components/group/components/card/components/content/event-handlers/handle-links/handle-links';
77
import { ActiveStatus } from 'src/view/components/container/column/components/group/components/active-status.enum';
88
import {
99
getCursorPosition

src/view/components/container/column/components/group/components/card/components/content/event-handlers/handle-links.ts

Lines changed: 0 additions & 68 deletions
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { LineageView } from 'src/view/view';
2+
import { handleLocalBlockLink } from 'src/view/components/container/column/components/group/components/card/components/content/event-handlers/handle-links/block-link/handle-local-block-link';
3+
import { handleGlobalBlockLink } from 'src/view/components/container/column/components/group/components/card/components/content/event-handlers/handle-links/block-link/handle-global-block-link';
4+
5+
export const handleBlockLink = (view: LineageView, link: string) => {
6+
const viewFilePath = view.file!.basename;
7+
const match = /(.*)#\^(\S{4,})$/.exec(link);
8+
if (match) {
9+
const file = match[1];
10+
const id = match[2];
11+
if (!file.trim() || file === viewFilePath) {
12+
handleLocalBlockLink(view, id);
13+
} else {
14+
handleGlobalBlockLink(view, link);
15+
}
16+
}
17+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { LineageView } from 'src/view/view';
2+
3+
export const handleGlobalBlockLink = (view: LineageView, link: string) => {
4+
view.plugin.app.workspace.openLinkText(link, view.file!.basename, 'split');
5+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { LineageView } from 'src/view/view';
2+
import { selectCard } from 'src/view/components/container/column/components/group/components/card/components/content/event-handlers/handle-links/helpers/select-card';
3+
4+
export const handleLocalBlockLink = (view: LineageView, id: string) => {
5+
const element = view.container!.querySelector(
6+
`[data-block-id="^${id}"`,
7+
) as HTMLElement;
8+
if (element) {
9+
const card = element.closest('.lineage-card');
10+
if (card && card.id) {
11+
selectCard(view, card.id);
12+
return true;
13+
}
14+
}
15+
};

src/view/components/container/column/components/group/components/card/components/content/event-handlers/open-file-in-new-split.ts renamed to src/view/components/container/column/components/group/components/card/components/content/event-handlers/handle-links/file-link/open-file-in-new-split.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { LineageView } from 'src/view/view';
2-
import { openFileInExistingRightTabGroup } from 'src/view/components/container/column/components/group/components/card/components/content/event-handlers/helpers/open-file-in-existing-right-tab-group';
2+
import { openFileInExistingRightTabGroup } from 'src/view/components/container/column/components/group/components/card/components/content/event-handlers/handle-links/helpers/open-file-in-existing-right-tab-group';
33

44
export const openFileInNewSplit = (view: LineageView, link: string) => {
55
const path = view.documentStore.getValue().file.path;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { LineageView } from 'src/view/view';
2+
import { openFileInNewSplit } from 'src/view/components/container/column/components/group/components/card/components/content/event-handlers/handle-links/file-link/open-file-in-new-split';
3+
import { handleHeading } from 'src/view/components/container/column/components/group/components/card/components/content/event-handlers/handle-links/heading-link/handle-heading';
4+
import { handleBlockLink } from 'src/view/components/container/column/components/group/components/card/components/content/event-handlers/handle-links/block-link/handle-block-link';
5+
6+
export const handleLinks = (view: LineageView, e: MouseEvent) => {
7+
// eslint-disable-next-line no-undef
8+
if (!(e.target instanceof HTMLAnchorElement)) return;
9+
if (!e.target.hasClass('internal-link')) return;
10+
const link = e.target.dataset.href;
11+
if (!link) return;
12+
if (link.contains('#^')) {
13+
e.stopPropagation();
14+
handleBlockLink(view, link);
15+
} else if (link.contains('#')) {
16+
e.stopPropagation();
17+
handleHeading(view, link);
18+
} else {
19+
e.stopPropagation();
20+
openFileInNewSplit(view, link);
21+
}
22+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { LineageView } from 'src/view/view';
2+
import { handleGlobalBlockLink } from 'src/view/components/container/column/components/group/components/card/components/content/event-handlers/handle-links/block-link/handle-global-block-link';
3+
import { handleLocalHeadingLink } from 'src/view/components/container/column/components/group/components/card/components/content/event-handlers/handle-links/heading-link/handle-local-heading-link';
4+
5+
export const handleHeading = (view: LineageView, link: string) => {
6+
const file = link.split('#')[0];
7+
if (file && file !== view.file!.basename) {
8+
handleGlobalBlockLink(view, link);
9+
} else {
10+
handleLocalHeadingLink(view, link);
11+
}
12+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { LineageView } from 'src/view/view';
2+
import { selectCard } from 'src/view/components/container/column/components/group/components/card/components/content/event-handlers/handle-links/helpers/select-card';
3+
4+
export const handleLocalHeadingLink = (view: LineageView, link: string) => {
5+
const match = /(#.+)$/.exec(link);
6+
if (!match) return;
7+
const headingPart = match[1];
8+
for (let level = 1; level <= 6; level++) {
9+
const headings = Array.from(
10+
view.containerEl.querySelectorAll('h' + level),
11+
) as HTMLHeadingElement[];
12+
const heading = headings.find(
13+
(h) => '#' + h.dataset.heading === headingPart,
14+
);
15+
if (heading) {
16+
const card = heading.closest('.lineage-card');
17+
if (card && card.id) {
18+
selectCard(view, card.id);
19+
break;
20+
}
21+
}
22+
}
23+
};

0 commit comments

Comments
 (0)