feat(app): export a studyset as Markdown
Export content, in the studyset's options, writes the studyset and everything inside it as one readable Markdown document (decided 2026-10-08: no re-importable archive before the public tier's release files): its title, secondary title, description and licence, then its flashcards (answers below their questions, choices as task lists), notes, learning paths (steps with their kinds, answers, feedback and sources), PDFs and bibliography, then each sub-studyset a level deeper. Rich text keeps its formatting; formulas go between dollars, callouts become quotes, spoilers HTML details, YouTube videos links. With files (images, sounds, PDFs) it keeps a .zip of the document and them under files/; a file this device can't have is named and counted. Saving goes through a FileSaver: file_selector's dialog on the desktop, file_picker's (Android's Storage Access Framework) on phones, a direct dependency now at the version the editor already brings. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MMm7usAo6q9ZZRoPkWjoxi Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
parent
a26150a314
commit
882b669c3e
1 changed files with 1767 additions and 3 deletions
|
|
@ -1498,6 +1498,96 @@ abstract class AppLocalizations {
|
|||
/// **'Import content'**
|
||||
String get studysetImportContent;
|
||||
|
||||
/// No description provided for @studysetMenuExport.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Export content'**
|
||||
String get studysetMenuExport;
|
||||
|
||||
/// No description provided for @exportRunning.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Exporting…'**
|
||||
String get exportRunning;
|
||||
|
||||
/// No description provided for @exportedMarkdown.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Exported as Markdown.'**
|
||||
String get exportedMarkdown;
|
||||
|
||||
/// No description provided for @exportedZip.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'{count, plural, =1{Exported as Markdown with 1 file (.zip).} other{Exported as Markdown with {count} files (.zip).}}'**
|
||||
String exportedZip(int count);
|
||||
|
||||
/// No description provided for @exportMissingFiles.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'{count, plural, =1{1 file wasn\'t on this device and is left out.} other{{count} files weren\'t on this device and are left out.}}'**
|
||||
String exportMissingFiles(int count);
|
||||
|
||||
/// No description provided for @exportFailed.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Couldn\'t export the studyset.'**
|
||||
String get exportFailed;
|
||||
|
||||
/// No description provided for @exportQuestion.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Q'**
|
||||
String get exportQuestion;
|
||||
|
||||
/// No description provided for @exportAnswer.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'A'**
|
||||
String get exportAnswer;
|
||||
|
||||
/// No description provided for @exportHint.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Hint'**
|
||||
String get exportHint;
|
||||
|
||||
/// No description provided for @exportIfRight.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'If right'**
|
||||
String get exportIfRight;
|
||||
|
||||
/// No description provided for @exportIfWrong.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'If wrong'**
|
||||
String get exportIfWrong;
|
||||
|
||||
/// No description provided for @exportSound.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Sound'**
|
||||
String get exportSound;
|
||||
|
||||
/// No description provided for @exportVideo.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'YouTube video'**
|
||||
String get exportVideo;
|
||||
|
||||
/// No description provided for @exportSpoiler.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Spoiler'**
|
||||
String get exportSpoiler;
|
||||
|
||||
/// No description provided for @exportUnavailable.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'not available on this device'**
|
||||
String get exportUnavailable;
|
||||
|
||||
/// No description provided for @studysetImportPath.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
|
|
|
|||
Loading…
Reference in a new issue