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:
lib
@ -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,
|
||||
),
|
||||
|
Reference in New Issue
Block a user