feat(citation): sources are books and articles, websites or YouTube videos

A source was a book's or an article's parts, however a website or a
video had to be squeezed into them. Adding one to a bibliography or a
step now asks what it is, and its form asks for what cites it: a book
or an article its parts as before; a website the page's link, title,
the site's name, authors and year; a YouTube video its link (checked to
be one), title, channel and year. Websites and videos need their link,
marked as required. A video is cited as APA cites one ("[Video]", a
part of YouTube) and plays in the app where it can, else on YouTube.

The kind is kept in the source's JSON, left out for a book or an
article; a kind this app doesn't know reads as a work. The studyset's
payload goes to schema 6 and a step's to schema 4 for it.

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:
Tizian 「ティツィアーン」 2026-10-12 23:55:39 +02:00
commit 61bf7b2fa0
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64

View file

@ -1282,6 +1282,84 @@ abstract class AppLocalizations {
/// **'Discard'**
String get sourceDiscardConfirm;
/// No description provided for @sourceKind.
///
/// In en, this message translates to:
/// **'Kind of source'**
String get sourceKind;
/// No description provided for @sourceKindWork.
///
/// In en, this message translates to:
/// **'Book or article'**
String get sourceKindWork;
/// No description provided for @sourceKindWebsite.
///
/// In en, this message translates to:
/// **'Website'**
String get sourceKindWebsite;
/// No description provided for @sourceKindVideo.
///
/// In en, this message translates to:
/// **'YouTube video'**
String get sourceKindVideo;
/// No description provided for @sourceWebsiteName.
///
/// In en, this message translates to:
/// **'Website'**
String get sourceWebsiteName;
/// No description provided for @sourceWebsiteNameHint.
///
/// In en, this message translates to:
/// **'Its name, e.g. Wikipedia'**
String get sourceWebsiteNameHint;
/// No description provided for @sourcePageTitleHint.
///
/// In en, this message translates to:
/// **'Title of the page'**
String get sourcePageTitleHint;
/// No description provided for @sourceChannel.
///
/// In en, this message translates to:
/// **'Channel'**
String get sourceChannel;
/// No description provided for @sourceChannelHint.
///
/// In en, this message translates to:
/// **'Who published it on YouTube'**
String get sourceChannelHint;
/// No description provided for @sourceVideoTitleHint.
///
/// In en, this message translates to:
/// **'Title of the video'**
String get sourceVideoTitleHint;
/// No description provided for @sourceVideoLink.
///
/// In en, this message translates to:
/// **'Link to the video'**
String get sourceVideoLink;
/// No description provided for @sourceVideoLinkInvalid.
///
/// In en, this message translates to:
/// **'Not a link to a YouTube video'**
String get sourceVideoLinkInvalid;
/// No description provided for @sourcePlay.
///
/// In en, this message translates to:
/// **'Play video'**
String get sourcePlay;
/// No description provided for @stepConflict.
///
/// In en, this message translates to: