70 lines
3.8 KiB
Markdown
70 lines
3.8 KiB
Markdown
# 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.
|