2807 Commits

Author SHA1 Message Date
David Straub bbffb626dd Create and restore Backups (#1544)
* Add backups: create, download, delete and restore from them

- New Backups section in the admin settings for the stored backups of
  gramps-web-api#1065: create (rate limited, background task), list,
  download and delete, for users with the ManageBackups permission
- Restore from a stored backup or an uploaded archive (.tar): choose the
  parts to restore (data, tree settings, users), preview the changes in
  a dry run, then confirm. Lists added users, who have to reset their
  password, and media objects whose files are missing
- Restoring from Gramps XML moves from the Danger Zone into the same
  upload, which accepts .tar and .gramps (only .gramps on backends
  without backup support, detected via server.backups in the metadata)
- Fix the Celery task name of the Gramps XML restore (restore_backup),
  so a running restore reconnects after a reload

* Make table responsive, use relative dates

* Refresh users after a restore, fix the data-only note

- The user management view reloads its list on db:changed, which a
  restore now also fires when it added users
- Show the note that a restore covers object data only when nothing but
  the data is restored
2026-10-16 14:38:04 +02:00
coolvitto 58de6d9624 Translated using Weblate (Japanese)
Currently translated at 100.0% (453 of 453 strings)

Translation: Gramps/Web
Translate-URL: https://hosted.weblate.org/projects/gramps-project/web/ja/
2026-10-16 10:08:00 +02:00
Michal Várady 7c681452f8 Translated using Weblate (Czech)
Currently translated at 100.0% (453 of 453 strings)

Translation: Gramps/Web
Translate-URL: https://hosted.weblate.org/projects/gramps-project/web/cs/
2026-10-16 10:08:00 +02:00
Jozef Gaal d01e09ea9f Translated using Weblate (Slovak)
Currently translated at 100.0% (453 of 453 strings)

Translation: Gramps/Web
Translate-URL: https://hosted.weblate.org/projects/gramps-project/web/sk/
2026-10-16 10:08:00 +02:00
Pedro Albuquerque 9784df543e Translated using Weblate (Portuguese (Portugal))
Currently translated at 100.0% (453 of 453 strings)

Translation: Gramps/Web
Translate-URL: https://hosted.weblate.org/projects/gramps-project/web/pt_PT/
2026-10-16 10:08:00 +02:00
Stephan Paternotte ee5003acdd Translated using Weblate (Dutch)
Currently translated at 100.0% (453 of 453 strings)

Translation: Gramps/Web
Translate-URL: https://hosted.weblate.org/projects/gramps-project/web/nl/
2026-10-16 10:08:00 +02:00
Aindriú Mac Giolla Eoin 95ebcd7a5d Translated using Weblate (Irish)
Currently translated at 100.0% (453 of 453 strings)

Translation: Gramps/Web
Translate-URL: https://hosted.weblate.org/projects/gramps-project/web/ga/
2026-10-16 10:08:00 +02:00
Milan 06fbb71550 Translated using Weblate (Czech)
Currently translated at 100.0% (453 of 453 strings)

Translation: Gramps/Web
Translate-URL: https://hosted.weblate.org/projects/gramps-project/web/cs/
2026-10-16 10:08:00 +02:00
Mirko Leonhäuser 8d3c56191c Translated using Weblate (German)
Currently translated at 100.0% (453 of 453 strings)

Translation: Gramps/Web
Translate-URL: https://hosted.weblate.org/projects/gramps-project/web/de/
2026-10-16 10:08:00 +02:00
David Straub fbe0829626 Handle task locks and task status, clarify task outcomes in the log (#1535)
- Show a translated message when a dispatch is rejected with a
  task_locked 409, and load the blocking task so its progress shows
- Use the task status field, when the backend reports it, to decide
  which tasks are running; fall back to the Celery state otherwise
- Mark finished tasks in the notification log as completed or failed,
  and show a failed task's error message in its detail dialog
2026-10-16 10:03:10 +02:00
lukasganster 807c620e67 Add profile picture controls (#1525) 2026-10-16 10:02:55 +02:00
lukasganster 112b8cf261 Keep the colour menu above the selected person chip (#1537) 2026-10-16 10:02:30 +02:00
Stephan Paternotte 51641a933d Translated using Weblate (Dutch)
Currently translated at 100.0% (452 of 452 strings)

Translation: Gramps/Web
Translate-URL: https://hosted.weblate.org/projects/gramps-project/web/nl/
2026-10-14 11:18:38 +02:00
Pär Ekholm 3054224b33 Translated using Weblate (Swedish)
Currently translated at 100.0% (452 of 452 strings)

Translation: Gramps/Web
Translate-URL: https://hosted.weblate.org/projects/gramps-project/web/sv/
2026-10-14 11:18:38 +02:00
Milan a067842822 Translated using Weblate (Slovak)
Currently translated at 100.0% (452 of 452 strings)

Translation: Gramps/Web
Translate-URL: https://hosted.weblate.org/projects/gramps-project/web/sk/
2026-10-14 11:18:38 +02:00
Pedro Albuquerque 537bc2362b Translated using Weblate (Portuguese (Portugal))
Currently translated at 100.0% (452 of 452 strings)

Translation: Gramps/Web
Translate-URL: https://hosted.weblate.org/projects/gramps-project/web/pt_PT/
2026-10-14 11:18:38 +02:00
coolvitto 839bf0742d Translated using Weblate (Japanese)
Currently translated at 100.0% (452 of 452 strings)

Translation: Gramps/Web
Translate-URL: https://hosted.weblate.org/projects/gramps-project/web/ja/
2026-10-14 11:18:38 +02:00
Milan 8530aafc37 Translated using Weblate (Czech)
Currently translated at 100.0% (452 of 452 strings)

Translation: Gramps/Web
Translate-URL: https://hosted.weblate.org/projects/gramps-project/web/cs/
2026-10-14 11:18:38 +02:00
Stern b1773af82e Translated using Weblate (Russian)
Currently translated at 100.0% (452 of 452 strings)

Translation: Gramps/Web
Translate-URL: https://hosted.weblate.org/projects/gramps-project/web/ru/
2026-10-14 11:18:38 +02:00
David Straub 5bf7ce9455 Show media archive rate limit on 429 (#1534)
When generating a media archive hits the per-user rate limit, show a
translated message including the configured limit from the metadata
endpoint.
2026-10-14 08:42:38 +02:00
Artur 8a83b0e346 Translated using Weblate (Polish)
Currently translated at 66.6% (300 of 450 strings)

Translation: Gramps/Web
Translate-URL: https://hosted.weblate.org/projects/gramps-project/web/pl/
2026-10-13 09:38:27 +02:00
Aindriú Mac Giolla Eoin 06e9d883c8 Translated using Weblate (Irish)
Currently translated at 100.0% (450 of 450 strings)

Translation: Gramps/Web
Translate-URL: https://hosted.weblate.org/projects/gramps-project/web/ga/
2026-10-13 09:38:27 +02:00
David Straub d5e8b7d551 Save Wikidata buildings as places (#1528)
The Wikidata building box on the map gets a "Save as place" button that
opens the new place form prefilled with the building's name, type
(Building or Farm), coordinates and a Wikidata link. A building with a
tree place at its coordinates shows "Open saved place" instead, which
switches the panel to that place.

The place box on the map shows the place type in its subtitle.
2026-10-13 09:34:11 +02:00
David Straub 9c3c7b9fc0 Fix incorrect key in compgen meta search 2026-10-12 19:50:52 +00:00
David Straub 92ca96c3a4 Fix editing place type and show object save errors (#1527)
* Fix editing place type and show object save errors

The place type edit form kept the 'type' key used to prefill the
selector, which the API rejects for Place objects. Object updates
also ignored API errors, so failed saves were silent.

* Strip stray type key when updating places

Older API versions stored the 'type' key sent by the place type edit
form, which the API now rejects, making those places uneditable.
2026-10-12 21:46:52 +02:00
David Straub a3b3123c46 Show KML and GeoJSON files of the selected place on the map (#1524)
* Show KML and GeoJSON files of the selected place on the map

When a place is selected on the map, the KML and GeoJSON media objects
attached to it are drawn as shapes, lines and points, using the styles
in the file where it has them. A place without coordinates stays
selected and the map fits its files.

The files are listed in the layer switcher while the place is selected
and can be switched off; the setting is saved like that of image
overlays. A hidden file is not downloaded.

* Move place map file loading into a controller

PlaceVectorsController owns the KML and GeoJSON files of the selected
place. Each load aborts the previous one and its downloads, so an older
refresh can no longer overwrite newer files, and a refresh keeps files
whose checksum is unchanged.

Only a 404 closes the selection; other errors keep it. Switching on a
file of a place without coordinates fits the map to the files shown.
A file without description is listed by its Gramps ID.
2026-10-12 21:21:43 +02:00
David Straub 5d68d1c563 Localize base map labels for all Gramps languages (#1522)
The OpenFreeMap styles label places in English, or in Latin and local
script. Labels reading a name now show the name in the Gramps language,
falling back to the local name, in both the light and the dark style.
Regional Gramps language codes are mapped to the languages in the
tiles.

Fixes #1460
2026-10-12 18:29:16 +02:00
David Straub 6a0ae5a216 Localize historical map labels for all Gramps languages (#1521)
Map regional Gramps language codes such as pt_BR and zh_TW to the name
fields used in OpenHistoricalMap tiles. When a Gramps language is set,
places without a name in that language show their local name, without
falling back to the browser languages.
2026-10-12 17:20:32 +02:00
David Straub a13af2136a Fix map slider display glitch on mobile 2026-10-12 14:16:18 +00:00
David Straub 7998a42cc7 Use the same section headings in all create forms (#1519)
* Use the same section headings in all create forms

Section headings in the create views and dialogs were a mix of h3,
h3.label and h4.label. Use h3.label everywhere, which renders as a
section heading on pages and as a compact label in dialogs. The inline
person form in New Family styles it as a label, as it sits under the
view's own section headings.

* Address comment
v26.10.1
2026-10-11 15:16:39 +02:00
David Straub 86f972b6be Allow selecting existing media when creating objects (#1518)
Add a Media section with a selector for existing media objects to the
create forms of objects that have a gallery: person, family, event,
place, source and citation, both as views and as dialogs. The selected
media are saved as media references with the new object.

Part of #1183.
2026-10-11 14:35:37 +02:00
David Straub 50929be6f7 Allow creating places and sources from more selectors (#1517)
Enable inline creation on the place selector of the New Event dialog
and view, the place selector of the event details and place reference
dialogs, and the source selector of the citation details dialog.

The Enclosed By selector of the New Place view allows it too, but not
when the New Place form is itself the create dialog of an object
selector, so that inline creation stays one dialog deep.

Part of #1183.
2026-10-11 09:08:17 +02:00
David Straub c5e7ab96c8 Esc shouldn't close drawer, only popup 2026-10-10 20:32:38 +00:00
David Straub e1649c45a9 Allow creating a new source when adding a citation (#1516)
* Allow creating a new source when adding a citation

Move the new source form into GrampsjsNewSourceMixin, shared by the
New Source view and a new GrampsjsFormNewSource dialog form, and let
the object selector create sources inline. Enable it on the source
selector of the New Citation dialog and view.

Part of #1183.

* Address comment
2026-10-10 22:28:22 +02:00
David Straub 27c62de97a Free the WebGL context of a map removed from the page (#1515)
A map element dropped from the page, such as the map of a place view
when another place is opened, kept its MapLibre map and WebGL context.
Browsers drop the oldest context when too many are active, which
blanked the main map. Fixes #1487.
2026-10-10 22:19:16 +02:00
David Straub 9876c0c8b5 Version -> 26.10.1 2026-10-10 20:06:07 +00:00
David Straub 50b20259e1 Upgrade screen: use md components, add missing translation 2026-10-10 19:54:47 +00:00
David Straub 8d98e5643f Set the MIME type of uploaded geodata files (#1514)
* Set the MIME type of uploaded geodata files

* Set the MIME type when replacing a media file
2026-10-10 21:33:05 +02:00
Pär Ekholm f113defb40 Translated using Weblate (Swedish)
Currently translated at 100.0% (450 of 450 strings)

Translation: Gramps/Web
Translate-URL: https://hosted.weblate.org/projects/gramps-project/web/sv/
2026-10-10 21:14:54 +02:00
Milan 0c513b346f Translated using Weblate (Slovak)
Currently translated at 100.0% (450 of 450 strings)

Translation: Gramps/Web
Translate-URL: https://hosted.weblate.org/projects/gramps-project/web/sk/
2026-10-10 21:14:54 +02:00
Jozef Gaal b95f6d16e3 Translated using Weblate (Slovak)
Currently translated at 100.0% (450 of 450 strings)

Translation: Gramps/Web
Translate-URL: https://hosted.weblate.org/projects/gramps-project/web/sk/
2026-10-10 21:14:54 +02:00
Pedro Albuquerque 83d5f10cbe Translated using Weblate (Portuguese (Portugal))
Currently translated at 100.0% (450 of 450 strings)

Translation: Gramps/Web
Translate-URL: https://hosted.weblate.org/projects/gramps-project/web/pt_PT/
2026-10-10 21:14:54 +02:00
Stephan Paternotte 6696ce6574 Translated using Weblate (Dutch)
Currently translated at 100.0% (450 of 450 strings)

Translation: Gramps/Web
Translate-URL: https://hosted.weblate.org/projects/gramps-project/web/nl/
2026-10-10 21:14:54 +02:00
coolvitto ef20c289eb Translated using Weblate (Japanese)
Currently translated at 100.0% (450 of 450 strings)

Translation: Gramps/Web
Translate-URL: https://hosted.weblate.org/projects/gramps-project/web/ja/
2026-10-10 21:14:54 +02:00
Milan 732a57e02f Translated using Weblate (Czech)
Currently translated at 100.0% (450 of 450 strings)

Translation: Gramps/Web
Translate-URL: https://hosted.weblate.org/projects/gramps-project/web/cs/
2026-10-10 21:14:54 +02:00
Mirko Leonhäuser aeeea5c1df Translated using Weblate (German)
Currently translated at 100.0% (450 of 450 strings)

Translation: Gramps/Web
Translate-URL: https://hosted.weblate.org/projects/gramps-project/web/de/
2026-10-10 21:14:54 +02:00
coolvitto a798bfc8a0 Translated using Weblate (Japanese)
Currently translated at 100.0% (450 of 450 strings)

Translation: Gramps/Web
Translate-URL: https://hosted.weblate.org/projects/gramps-project/web/ja/
2026-10-10 21:14:54 +02:00
scotCW 14b4767d3a Don't delete a place that encloses other places (#1510)
* Don't delete a place that encloses other places

Like Gramps desktop, refuse to delete a place that other places are
enclosed by: Gramps 6.0 would leave those places pointing to a place
that no longer exists. The delete button shows Gramps' own "Cannot
delete place." message instead of the confirmation.

Refs #381

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Check whether deletion is blocked only in the active view

Every retained object view hears edit-mode:delete, so an inactive place
view that encloses others reported a false error whenever another
object was deleted.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Check enclosed places when Delete is clicked, also in the places list

- The app bar asks the view being edited when Delete is clicked, instead
  of a value captured when edit mode began, so the two can't disagree.
- The check fetches the place's backlinks then, as the view's own data
  may be stale.
- A place enclosed by itself, and enclosed places deleted along with
  it, don't block the deletion.
- The places list applies the same check before a bulk delete.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 21:11:51 +02:00
David Straub e70f3a2f3b Link image regions to any object and rework region editing (#1508)
* Link image regions to any object and rework region editing

Image regions can be linked to people, families, events, places,
sources and citations, and an object can have several regions in the
same image. Regions can be moved and resized, drawing works on touch
screens, and Escape cancels a drag or clears the selection.

* Fix label

* Style tweaks

* Address comments
2026-10-09 13:49:27 +02:00
Aindriú Mac Giolla Eoin 5529cb409c Translated using Weblate (Irish)
Currently translated at 100.0% (450 of 450 strings)

Translation: Gramps/Web
Translate-URL: https://hosted.weblate.org/projects/gramps-project/web/ga/
2026-10-08 13:18:28 +02:00