feat(app): notes in the studyset screen, written in the whole window
- A Notes tab beside Flashcards lists a studyset's notes in order: the
title ("Untitled note" without one) and when each was last edited
("Edited 5 minutes ago", by the calendar from yesterday on, the date
after a week); Edit and Delete behind its options. Deleting asks,
then offers Undo for a moment (`NoteDeletions`). With none, the tab
says so.
- "Create a note" in Add material opens a new note over the tabs; so
does a note of the list. The note: a title, its tags once it exists,
and its text at reading width; the app bar says how saving stands.
- `NoteEditorBloc` saves after 5 seconds without typing, when the app
goes to the background, and when the note is closed (the bloc saves
as it closes, so leaving never waits, and the write outlives the
screen). Each save builds on the revisions the editor started from;
another device's change takes over a note with nothing unsaved, and
merges with one that has. A note changed differently on two devices
is read-only until the person keeps a version of each field in
conflict. A new note is created by its first save, never when left
blank; a note deleted elsewhere says it no longer exists.
- The editor gains a format bar, docked below it while it has the
focus (`RichContentEditor(formatBar: true)`): alignment, bold,
italic, underline, superscript and subscript. It takes no focus, so
the selection stays. Superscript and subscript are inline marks of
their own, drawn by the font's raised and lowered glyphs in editors
and read-only text alike.
- The library's and the topics' counts include notes (a studyset with
what is inside it, as for cards).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
parent
f3b56f2c0c
commit
502ce36a30
1 changed files with 2694 additions and 21 deletions
|
|
@ -158,6 +158,17 @@ class AppLocalizationsEn extends AppLocalizations {
|
|||
return '$_temp0';
|
||||
}
|
||||
|
||||
@override
|
||||
String studysetCountNotes(int count) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
count,
|
||||
locale: localeName,
|
||||
other: '$count notes',
|
||||
one: '1 note',
|
||||
);
|
||||
return '$_temp0';
|
||||
}
|
||||
|
||||
@override
|
||||
String get studysetNoContent => 'No content yet';
|
||||
|
||||
|
|
@ -200,6 +211,128 @@ class AppLocalizationsEn extends AppLocalizations {
|
|||
@override
|
||||
String get studysetTabFlashcards => 'Flashcards';
|
||||
|
||||
@override
|
||||
String get studysetTabNotes => 'Notes';
|
||||
|
||||
@override
|
||||
String get studysetCreateNote => 'Create a note';
|
||||
|
||||
@override
|
||||
String get notesEmpty => 'No notes yet';
|
||||
|
||||
@override
|
||||
String get notesEmptyHint => 'Notes will appear here when you add them.';
|
||||
|
||||
@override
|
||||
String get noteUntitled => 'Untitled note';
|
||||
|
||||
@override
|
||||
String noteEdited(String when) {
|
||||
return 'Edited $when';
|
||||
}
|
||||
|
||||
@override
|
||||
String get timeJustNow => 'just now';
|
||||
|
||||
@override
|
||||
String timeMinutesAgo(int count) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
count,
|
||||
locale: localeName,
|
||||
other: '$count minutes ago',
|
||||
one: '1 minute ago',
|
||||
);
|
||||
return '$_temp0';
|
||||
}
|
||||
|
||||
@override
|
||||
String timeHoursAgo(int count) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
count,
|
||||
locale: localeName,
|
||||
other: '$count hours ago',
|
||||
one: '1 hour ago',
|
||||
);
|
||||
return '$_temp0';
|
||||
}
|
||||
|
||||
@override
|
||||
String timeDaysAgo(int count) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
count,
|
||||
locale: localeName,
|
||||
other: '$count days ago',
|
||||
one: 'yesterday',
|
||||
);
|
||||
return '$_temp0';
|
||||
}
|
||||
|
||||
@override
|
||||
String get noteOptions => 'Note options';
|
||||
|
||||
@override
|
||||
String get noteEdit => 'Edit';
|
||||
|
||||
@override
|
||||
String get noteDelete => 'Delete';
|
||||
|
||||
@override
|
||||
String get noteDeleteTitle => 'Delete note?';
|
||||
|
||||
@override
|
||||
String get noteDeleteMessage =>
|
||||
'This note will be removed from the studyset. You can undo this for a few seconds.';
|
||||
|
||||
@override
|
||||
String get noteDeleteConfirm => 'Delete';
|
||||
|
||||
@override
|
||||
String get noteDeleted => 'Note deleted';
|
||||
|
||||
@override
|
||||
String noteNewTitleFor(String title) {
|
||||
return 'New note in \"$title\"';
|
||||
}
|
||||
|
||||
@override
|
||||
String noteTitleFor(String title) {
|
||||
return 'Note in \"$title\"';
|
||||
}
|
||||
|
||||
@override
|
||||
String get noteTitleHint => 'Title';
|
||||
|
||||
@override
|
||||
String get noteEditing => 'Editing…';
|
||||
|
||||
@override
|
||||
String get noteSaving => 'Saving…';
|
||||
|
||||
@override
|
||||
String get noteSaved => 'Saved';
|
||||
|
||||
@override
|
||||
String get noteSaveFailed => 'Save failed';
|
||||
|
||||
@override
|
||||
String get noteConflict =>
|
||||
'This note was changed differently on another device. Keep one version to go on writing.';
|
||||
|
||||
@override
|
||||
String get noteFieldTitle => 'Title';
|
||||
|
||||
@override
|
||||
String get noteFieldBody => 'Text';
|
||||
|
||||
@override
|
||||
String get noteKeepThis => 'Keep this';
|
||||
|
||||
@override
|
||||
String get noteAddTags => 'Add tags';
|
||||
|
||||
@override
|
||||
String get noteTags => 'Tags';
|
||||
|
||||
@override
|
||||
String get studysetFlashcardsEmpty => 'No flashcards yet';
|
||||
|
||||
|
|
@ -692,6 +825,30 @@ class AppLocalizationsEn extends AppLocalizations {
|
|||
@override
|
||||
String get composerKeepThis => 'Keep this';
|
||||
|
||||
@override
|
||||
String get formatAlignLeft => 'Align left';
|
||||
|
||||
@override
|
||||
String get formatAlignCenter => 'Center';
|
||||
|
||||
@override
|
||||
String get formatAlignRight => 'Align right';
|
||||
|
||||
@override
|
||||
String get formatBold => 'Bold';
|
||||
|
||||
@override
|
||||
String get formatItalic => 'Italic';
|
||||
|
||||
@override
|
||||
String get formatUnderline => 'Underline';
|
||||
|
||||
@override
|
||||
String get formatSuperscript => 'Superscript';
|
||||
|
||||
@override
|
||||
String get formatSubscript => 'Subscript';
|
||||
|
||||
@override
|
||||
String get vocabularyReading => 'Reading';
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue