From 289182b12ed9a6678e02d89427d8e0f94df2ad49 Mon Sep 17 00:00:00 2001 From: Vishesh Handa Date: Thu, 24 Sep 2020 16:46:24 +0200 Subject: [PATCH] Fix Parent relative links not working Fixes #256 --- changelog.yml | 1 + lib/utils/link_resolver.dart | 20 ++++++++------------ test/link_resolver_test.dart | 8 ++++++++ 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/changelog.yml b/changelog.yml index 43a3018a..d8496e67 100644 --- a/changelog.yml +++ b/changelog.yml @@ -2,6 +2,7 @@ draft: true bugs: - text: "Dark Theme: Render checkboxes in a lighter color" + - text: "Fix Relative Parent links not working - #256" - version: "1.70" date: 2020-09-16 diff --git a/lib/utils/link_resolver.dart b/lib/utils/link_resolver.dart index 36f1712f..8f016fcf 100644 --- a/lib/utils/link_resolver.dart +++ b/lib/utils/link_resolver.dart @@ -28,18 +28,7 @@ class LinkResolver { return resolveWikiLink(wikiLinkTerm); } - var folder = inputNote.parent; - var spec = link; - - if (link.startsWith('./')) { - spec = link.substring(2); - } - - if (spec.contains(p.separator)) { - spec = p.normalize(spec); - } - - return _getNoteWithSpec(folder, spec); + return _getNoteWithSpec(inputNote.parent, link); } Note resolveWikiLink(String term) { @@ -88,6 +77,13 @@ class LinkResolver { } Note _getNoteWithSpec(NotesFolderFS folder, String spec) { + var fullPath = p.normalize(p.join(folder.folderPath, spec)); + if (!fullPath.startsWith(folder.folderPath)) { + folder = folder.rootFolder; + } + + spec = fullPath.substring(folder.folderPath.length + 1); + var linkedNote = folder.getNoteWithSpec(spec); if (linkedNote != null) { return linkedNote; diff --git a/test/link_resolver_test.dart b/test/link_resolver_test.dart index 5018746e..be00ff25 100644 --- a/test/link_resolver_test.dart +++ b/test/link_resolver_test.dart @@ -154,6 +154,14 @@ void main() { expect(resolvedNote.filePath, p.join(tempDir.path, 'Goat Sim.md')); }); + test('Resolve Parent file', () { + var note = rootFolder.getNoteWithSpec('Folder/Water.md'); + var linkResolver = LinkResolver(note); + + var resolvedNote = linkResolver.resolve('../Hello.md'); + expect(resolvedNote.filePath, p.join(tempDir.path, 'Hello.md')); + }); + test('Should resolve Link object', () { var note = rootFolder.getNoteWithSpec('Folder/Water.md'); var linkResolver = LinkResolver(note);