1
0
mirror of https://github.com/GitJournal/GitJournal.git synced 2025-07-20 21:25:48 +08:00

Allow opening relative links while are notes

This commit is contained in:
Vishesh Handa
2020-04-02 19:34:54 +02:00
parent cfc38b90b9
commit 9e60a74c19
3 changed files with 64 additions and 16 deletions

@ -349,6 +349,37 @@ class NotesFolderFS with NotesFolderNotifier implements NotesFolder {
return null;
}
Note getNoteWithSpec(String spec) {
var parts = spec.split(p.separator);
var folder = this;
while (parts.length != 1) {
var folderName = parts[0];
bool foundFolder = false;
for (var f in _folders) {
if (f.name == folderName) {
folder = f;
foundFolder = true;
break;
}
}
if (!foundFolder) {
return null;
}
parts.removeAt(0);
}
var fileName = parts[0];
for (var note in folder.notes) {
if (note.fileName == fileName) {
return note;
}
}
return null;
}
@override
NotesFolderConfig get config {
if (Features.perFolderConfig && _config != null) {

@ -25,20 +25,7 @@ Widget buildFolderView(
StandardViewHeader header,
bool showSummary,
) {
var noteSelectionFn = (Note note) async {
var route = MaterialPageRoute(
builder: (context) => NoteEditor.fromNote(note),
);
var showUndoSnackBar = await Navigator.of(context).push(route);
if (showUndoSnackBar != null) {
Fimber.d("Showing an undo snackbar");
var snackBar = buildUndoDeleteSnackbar(context, note);
Scaffold.of(context)
..removeCurrentSnackBar()
..showSnackBar(snackBar);
}
};
var noteSelectionFn = (Note note) => openNoteEditor(context, note);
switch (viewType) {
case FolderViewType.Standard:
@ -72,3 +59,18 @@ Widget buildFolderView(
assert(false, "Code path should never be executed");
return Container();
}
void openNoteEditor(BuildContext context, Note note) async {
var route = MaterialPageRoute(
builder: (context) => NoteEditor.fromNote(note),
);
var showUndoSnackBar = await Navigator.of(context).push(route);
if (showUndoSnackBar != null) {
Fimber.d("Showing an undo snackbar");
var snackBar = buildUndoDeleteSnackbar(context, note);
Scaffold.of(context)
..removeCurrentSnackBar()
..showSnackBar(snackBar);
}
}

@ -1,10 +1,14 @@
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_markdown/flutter_markdown.dart';
import 'package:gitjournal/folder_views/common.dart';
import 'package:gitjournal/utils.dart';
import 'package:provider/provider.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:path/path.dart' as p;
import 'package:gitjournal/core/note.dart';
import 'package:gitjournal/core/notes_folder_fs.dart';
class NoteViewer extends StatelessWidget {
final Note note;
@ -49,8 +53,19 @@ class NoteViewer extends StatelessWidget {
data: note.body,
styleSheet: markdownStyleSheet,
onTapLink: (String link) {
print("Launching " + link);
launch(link);
if (link.startsWith('./')) {
final rootFolder = Provider.of<NotesFolderFS>(context);
var spec = link.substring(2);
var note = rootFolder.getNoteWithSpec(spec);
if (note != null) {
openNoteEditor(context, note);
} else {
showSnackbar(context, "Link '$link' not found");
}
} else {
print("Launching " + link);
launch(link);
}
},
imageDirectory: note.parent.folderPath + p.separator,
),