3.8 KiB
Projekte
Projects of a preset: the first is Forschung (a research project: sources, citations,
notes; Radar and Schreiben follow). In the navigation (nav.js, section and group projekte,
flag side): a tab beside Home · Lesen · Hören on a phone, at the foot of the sidebar and of
the wide bar above Suche · Abos & Quellen. The search moved out of the phone's tab bar: a
magnifier in the bar on top (suche is a footer section; the apps' section bars show it).
End-to-end encrypted
Like the books (docs/library.md): a project's data ({name, description}) and every item's
data are AES-GCM blobs with the user's key (32-crypto.js, iv hex, ciphertext base64). The
server stores them and knows only: a project exists, its preset, archived, and what an item
points to — kind + ref (a book's, episode's or article's id, never its title).
Items
| kind | ref | data |
|---|---|---|
paper |
– | {key, csl, note, doi} (CSL-JSON from doi.org) |
book |
book id | {key, csl, note, type} (CSL from the book's meta) |
episode |
episode id | {key, csl, note, podcast, feed, position} (position: seconds, "ab 12:34") |
article |
feeds item id | {key, csl, note} |
note |
– | {title, body (Markdown), folder} |
A book, episode or article is in a project once (adding again answers existing: true).
key is the citation key for [@key] / [@key, S. 12] in notes: first author's family name
(or the podcast's), year, first word of the title — unique in the project, editable.
Notes: Markdown (headings, lists, quotes, bold/italic, links); the view shows citations as "(Amodio & Jost 2007, S. 3)" and a list of the works cited. Saved as one types (0.9 s). Export: BibTeX and CSL-JSON of the sources (all or the chosen kind).
Linking from elsewhere
DioraProjects.link(kind, ref, info) opens the sheet "Mit Projekt verknüpfen" (the projects,
the ones it is in ticked, + Neues Projekt). Called from the book sheet (library, apps), the
article reader (◇ in its bar), the episode sheet and the player (apps, native-podcast.js).
DioraProjects.of(kind, ref) → [{id, name}] the projects it's in; onChange(fn) after changes.
Desktop: a window of its own
The project's menu (⋯) has "In neuem Fenster öffnen" when dioraDesktop.openWindow is there:
the desktop opens the page with ?project=<id>; projects.js then shows only that project
(html.prj-solo hides the navigation and the dock).
Writing and conflicts
Every write sends base_iv (the IV it changed). Changed elsewhere since: 409 with the current
state. A note's text then goes beside it as a copy "(Konflikt)"; other data reloads.
API (signed in)
GET /projects/→{projects: [{id, preset, data_ct, data_iv, archived, position, items, …}], links: [{project, kind, ref}], presets}POST /projects/create/{preset, data_ct, data_iv}→{project}GET /projects/<id>/→{project, items: [{id, kind, ref, data_ct, data_iv, created_at, updated_at}]}POST /projects/<id>/{data_ct, data_iv, base_iv}and/or{archived}/{position}POST /projects/<id>/delete/POST /projects/<id>/items/add/{kind, ref?, data_ct, data_iv}→{item, existing}POST /projects/items/<id>/{data_ct, data_iv, base_iv}→{item}(409{item}when stale)POST /projects/items/<id>/delete/GET /projects/doi/?q=<DOI | doi.org link | arXiv link or id>→{doi, csl}— fetched from doi.org (Crossref, DataCite …) as CSL-JSON, cached a week, nothing else kept.
Next
Radar (the weekly digests and new papers with lesen / später / verwerfen / → Quellen; who fetches the papers is open), papers as books (a paper's PDF into the library, its highlights into the project's notes), Schreiben (drafts with the bibliography in a citation style), the projects in the search, more presets.