From bf97887e103cb23f12202279751b90d1b64d4006 Mon Sep 17 00:00:00 2001 From: Vishesh Handa Date: Fri, 14 Aug 2020 16:14:00 +0200 Subject: [PATCH] Fix relative Markdown links While implementing Wiki Links, I seem to have accidentally broken them. --- lib/utils/link_resolver.dart | 11 +++++++---- test/link_resolver_test.dart | 9 +++++++++ 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/lib/utils/link_resolver.dart b/lib/utils/link_resolver.dart index 5c678689..765bc7f4 100644 --- a/lib/utils/link_resolver.dart +++ b/lib/utils/link_resolver.dart @@ -9,11 +9,14 @@ class LinkResolver { Note resolve(String link) { var spec = link; - var rootFolder = inputNote.parent.rootFolder; + var folder = inputNote.parent; if (link.startsWith('[[') && link.endsWith(']]') && link.length > 4) { // FIXME: What if the case is different? spec = link.substring(2, link.length - 2).trim(); + + // In the case of Wiki Links we always resolve from the Root Folder + folder = inputNote.parent.rootFolder; } if (link.startsWith('./')) { @@ -24,20 +27,20 @@ class LinkResolver { spec = p.normalize(spec); } - var linkedNote = rootFolder.getNoteWithSpec(spec); + var linkedNote = folder.getNoteWithSpec(spec); if (linkedNote != null) { return linkedNote; } if (!spec.endsWith('.md')) { - linkedNote = rootFolder.getNoteWithSpec(spec + '.md'); + linkedNote = folder.getNoteWithSpec(spec + '.md'); if (linkedNote != null) { return linkedNote; } } if (!spec.endsWith('.txt')) { - linkedNote = rootFolder.getNoteWithSpec(spec + '.txt'); + linkedNote = folder.getNoteWithSpec(spec + '.txt'); if (linkedNote != null) { return linkedNote; } diff --git a/test/link_resolver_test.dart b/test/link_resolver_test.dart index 935b8f6f..8387532e 100644 --- a/test/link_resolver_test.dart +++ b/test/link_resolver_test.dart @@ -18,6 +18,7 @@ void main() { await generateNote(tempDir.path, "Hello.md"); await generateNote(tempDir.path, "Fire.md"); await generateNote(tempDir.path, "Folder/Water.md"); + await generateNote(tempDir.path, "Folder/Sodium.md"); await generateNote(tempDir.path, "Air Bender.md"); await generateNote(tempDir.path, "zeplin.txt"); await generateNote(tempDir.path, "Goat Sim.md"); @@ -109,6 +110,14 @@ void main() { expect(resolvedNote.filePath, p.join(tempDir.path, 'Hello.md')); }); + test('Normal relative link inside a subFolder', () { + var note = rootFolder.getNoteWithSpec('Folder/Water.md'); + var linkResolver = LinkResolver(note); + + var resolvedNote = linkResolver.resolve('./Sodium.md'); + expect(resolvedNote.filePath, p.join(tempDir.path, 'Folder/Sodium.md')); + }); + test('Normal relative link without ./', () { var note = rootFolder.notes[0]; var linkResolver = LinkResolver(note);