Currently translated at 100.0% (142 of 142 strings)
Translated using Weblate (Esperanto)
Currently translated at 100.0% (142 of 142 strings)
Translated using Weblate (Esperanto)
Currently translated at 100.0% (142 of 142 strings)
Translated using Weblate (Esperanto)
Currently translated at 100.0% (533 of 533 strings)
Translated using Weblate (Esperanto)
Currently translated at 100.0% (533 of 533 strings)
Translated using Weblate (Esperanto)
Currently translated at 100.0% (533 of 533 strings)
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: Tirifto <tirifto@noreply.codeberg.org>
Co-authored-by: olivier <olivier@noreply.codeberg.org>
Co-authored-by: Кнⷫѧⷷ̈зⷮьⷬ Кропоткинъ <kropotkin@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/readeck/application/eo/
Translate-URL: https://translate.codeberg.org/projects/readeck/documentation/eo/
Translation: Readeck/Application
Translation: Readeck/Documentation
Currently translated at 14.0% (20 of 142 strings)
Translated using Weblate (Belarusian)
Currently translated at 14.0% (20 of 142 strings)
Translated using Weblate (Belarusian)
Currently translated at 14.0% (20 of 142 strings)
Translated using Weblate (Belarusian)
Currently translated at 100.0% (533 of 533 strings)
Translated using Weblate (Belarusian)
Currently translated at 100.0% (533 of 533 strings)
Translated using Weblate (Belarusian)
Currently translated at 100.0% (533 of 533 strings)
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: olivier <olivier@noreply.codeberg.org>
Co-authored-by: γλωσσολαλιά <glossolalia@noreply.codeberg.org>
Co-authored-by: Кнⷫѧⷷ̈зⷮьⷬ Кропоткинъ <kropotkin@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/readeck/application/be/
Translate-URL: https://translate.codeberg.org/projects/readeck/documentation/be/
Translation: Readeck/Application
Translation: Readeck/Documentation
- missing strings in "about" page, see #744
- use argument indexes in some strings for translators to change the
order when needed or avoid repeating ourselves, see #602
This adds a view to update a bookmark's properties.
When JS is enabled, the view is display in a <dialog> element and the
update takes place with Turbo so all changed properties are updated
once the dialog closes.
This comes with a massive change for api and view routes.
- the PATCH api/bookmark/{id} route was used to update a bookmark and
return turbo frames when the request asked for them.
- this was moved to POST bookmarks/{id} and all bookmark modifications
that can return a turbo stream now take place on this route
- hence, a massive change and simplification of many forms and actions
This validator splits every line (on LF) of a given value and append
the result to the ListField values.
It only works on ListField[string] and trims spaces (and CR) on each
item.
Nothing special except that the elements in .field-h are now aligned
to the start instead of baseline. That way, textarea labels are aligned
to the textarea first line instead of its bottom.
They don't need to be in a fixed position with a z-index; the
backdrop pseudo-element already takes care of that.
.dialog is now centered on the page using flexbox on the backdrop with
a default to 100% and 100vh but it can be overridden when needed.
body:has(.dialog:open) would not work on webkit and is replaced by
body:has(.dialog[open]) (same for .dialog-image and .dialog-video)
dialogs always receive the default font (face and size) and a background
and foreground color so they don't inherit from the element they're in.
All dialog classes are components so we can override their properties.
On remote adapters (wallabag and omnivore), if the remote instance
disappears or result in any type of error, we send an io.EOF so the
import can stop.
Resolves#994
- Renamed "Password" to "Security" in user profile
- Added a section about totp in profile/password
- TOTP activation page
- TOTP removal from profile/password
- Sign out is always possible when any MFA is enabled
This is only the first part. When a totp_secret exists for a user, the
authentication then asks for the code and carries on.
The totp lib can handle 6 or 8 letter codes and sha1, sha256 and sha512.
For maximum compatibility with Google Authenticator though, it sticks
to 6 character and sha1.
- PUT /api/profile/password (was undocumented and not used)
- POST /api/auth
With the introduction of MFA, you can't authenticate with a username
and password anymore. OAuth is now the only way to obtain an access
token.
The password update through the API was not documented so quite safe
to remove.
- removed log noise (not authenticated)
- on /login, go to redirect when a session already exists
- in SessionAuthProvider, clear session when external while forwarded
authentication is disabled