Yohan Boniface
75457b6d5c
fix: do not fail when trying to read metadata of a missing geojson ( #2592 )
...
Some geojson have been removed by mistake time ago (cf #1003 ), when
someone tries to load a map referencing them, it was until recently just
showing an error message, but since recently we try to get the metadata
from it, and this will crash.
2025-03-28 15:28:13 +01:00
Yohan Boniface
8538db278d
feat: add titles in the text formatting dialog ( #2584 )
...

fix #813
2025-03-28 15:27:30 +01:00
Yohan Boniface
ba9e8ffe9b
chore: apply Biome check ( #2588 )
...
This is mostly imports ordering but there are a couple of subtleties 🐉
There are still 9 errors before we can automatize the check with the CI!
2025-03-28 15:26:52 +01:00
Yohan Boniface
dcf5f1a763
fix: make sure umap.properties.slideshow is defined ( #2583 )
2025-03-28 15:25:19 +01:00
Yohan Boniface
41264e740f
fix: do not fail when trying to read metadata of a missing geojson
...
Some geojson have been removed by mistake time ago (cf #1003 ), when someone
tries to load a map referencing them, it was until recently just
showing an error message, but since recently we try to get the
metadata from it, and this will crash.
2025-03-28 12:58:07 +01:00
Yohan Boniface
953b37a181
fixup: fix tests
2025-03-27 13:14:20 +01:00
Yohan Boniface
9eaf33c118
wip: only show layer selector if there are at least two layers
2025-03-27 13:11:24 +01:00
David Larlet
f2cde6af4e
fixup: positionning of caption bar elements
2025-03-27 13:11:24 +01:00
Yohan Boniface
a4abecbd2c
fixup: only show datalayers with inCaption=true in switcher
2025-03-27 13:11:24 +01:00
Yohan Boniface
254a2018f5
chore: use toggle to switch visibility in datalayer switcher
2025-03-27 13:11:24 +01:00
Yohan Boniface
3df52e002d
wip
2025-03-27 13:11:24 +01:00
David Larlet
82208d618a
chore: apply Biome check
2025-03-26 14:37:56 -04:00
Yohan Boniface
64c7fe1ec9
fix: fix icon and button for version restore
...
Test & Docs / tests (postgresql, 3.10) (push) Has been cancelled
Test & Docs / tests (postgresql, 3.12) (push) Has been cancelled
Test & Docs / lint (push) Has been cancelled
Co-authored-by: David Larlet <david@larlet.fr>
2025-03-26 18:05:01 +01:00
Yohan Boniface
47c5c0a2f0
chore: remove old JS tests
...
Those are not ran since more than one year, so let's trash.
fix #2260
2025-03-19 08:16:38 +01:00
Yohan Boniface
ecca66ccc2
feat: add titles in the text formatting dialog
...
fix #813
2025-03-19 08:14:33 +01:00
Yohan Boniface
360ca100ba
fix: make sure umap.properties.slideshow is defined
2025-03-18 07:35:10 +01:00
Yohan Boniface
54a3aae912
chore: order importers by name instead of id ( #2578 )
2025-03-17 16:46:22 +01:00
Yohan Boniface
9d4069d9ae
chore: order importers by name instead of id
...
Co-authored-by: David Larlet <david@larlet.fr>
2025-03-17 16:44:23 +01:00
Yohan Boniface
167bab70c5
feat: add experimental BAN importer ( #2565 )
...
This importer takes a CSV as input, sends it to the BAN API, and then
paste it into the import textarea, so it can be imported as usual.
https://github.com/user-attachments/assets/c13f8580-5c09-4b35-b092-baac664a57a1
2025-03-17 16:39:55 +01:00
Yohan Boniface
d3ed46356d
feat: add experimental BAN importer
...
This importer takes a CSV as input, sends it to the BAN API, and
then paste it into the import textarea, so it can be imported as usual.
Co-authored-by: David Larlet <david@larlet.fr>
2025-03-17 16:20:57 +01:00
Yohan Boniface
f26536bff3
fix: iconUrl field was broken on older browsers
...
fix #2554
2025-03-14 14:50:47 +01:00
Yohan Boniface
1b058ce862
fixup: hide home button in edit mode ( #2562 )
...
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
The button is already on the edit bar.
Would be nicer to have a css transition (like for the bar itself), but
at least with this change it is not duplicated.
2025-03-13 16:52:41 +01:00
Yohan Boniface
a46430c420
fix: import iconUrl as absolute when possible ( #2563 )
...
This will only cover the cases where the icon is set at the map or at
the layer level, not the one of the marker itself.
cf #2552
2025-03-13 16:52:19 +01:00
Yohan Boniface
05e3f5ce3d
fix: use real redraw for datalayer, instead of hide/show ( #2568 )
...
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
The problem we've tried to fix is, during sync:
- peer A is editing a feature
- peer B changes the datalayer of this feature
- edit panel is closed for peer A
2025-03-12 17:41:18 +01:00
Yohan Boniface
c417e94698
fix(sync): fix tilelayer change not synced ( #2569 )
2025-03-12 17:39:19 +01:00
Yohan Boniface
e20648104b
fix: fix tilelayer change not synced
...
Co-authored-by: Alexis Métaireau <alexis@notmyidea.org>
2025-03-12 13:01:26 +01:00
Yohan Boniface
0c9d5325ba
fix: use real redraw for datalayer, instead of hide/show
...
The problem we've tried to fix is, during sync:
- peer A is editing a feature
- peer B changes the datalayer of this feature
- edit panel is closed for peer A
Co-authored-by: Alexis Métaireau <alexis@notmyidea.org>
2025-03-12 12:23:54 +01:00
Yohan Boniface
90be14ae89
fix: cast value to string before calling trim
...
fix #2566
2025-03-11 21:43:21 +01:00
Yohan Boniface
003b25d5e0
fix: import iconUrl as absolute when possible
...
This will only cover the cases where the icon is set at the map or
at the layer level, not the one of the marker itself.
cf #2552
2025-03-11 16:20:58 +01:00
Yohan Boniface
ef80396784
fixup: hide home button in edit mode
...
The button is already on the edit bar.
Would be nicer to have a css transition, but at least with this
change it is not duplicated.
2025-03-11 15:32:01 +01:00
Yohan Boniface
d85fc648b1
feat: add new "Back to home" icon ( #2551 )
...
Test & Docs / tests (postgresql, 3.10) (push) Has been cancelled
Test & Docs / tests (postgresql, 3.12) (push) Has been cancelled
Test & Docs / lint (push) Has been cancelled

2025-03-10 22:31:42 +01:00
Yohan Boniface
bfb17788a4
chore: new icon, colors and title for search buttons
2025-03-10 19:06:39 +01:00
Yohan Boniface
8599199afa
feat: add more users counts in /stats/
...
Co-authored-by: David Larlet <david@larlet.fr>
2025-03-10 16:38:53 +01:00
Yohan Boniface
7a2bf9fc4c
fixup: let the importer deal with getting the OSM url in search
...
Test & Docs / tests (postgresql, 3.10) (push) Has been cancelled
Test & Docs / tests (postgresql, 3.12) (push) Has been cancelled
Test & Docs / lint (push) Has been cancelled
Co-authored-by: David Larlet <david@larlet.fr>
2025-03-07 17:58:56 +01:00
Yohan Boniface
b3e39bf654
fixup: square buttons in search results
...
Co-authored-by: David Larlet <david@larlet.fr>
2025-03-07 17:40:16 +01:00
Yohan Boniface
89e2a01d60
fixup: do not close panel when clicking on search edit buttons
...
Co-authored-by: David Larlet <david@larlet.fr>
2025-03-07 17:39:42 +01:00
Yohan Boniface
0def3292e1
fix: only display search edit tools in edit mode
...
Co-authored-by: David Larlet <david@larlet.fr>
2025-03-07 17:26:46 +01:00
Yohan Boniface
beae551367
feat: add new "Back to home" icon
...
Co-authored-by: David Larlet <david@larlet.fr>
2025-03-07 17:20:35 +01:00
Yohan Boniface
d4885f386a
i18n
2025-03-07 16:24:11 +01:00
Yohan Boniface
869db90b28
chore: update oauth provider deprecation message
...
Mention that it's important to logout and login again to have the
new provider replace the old one in the session
2025-03-07 16:17:26 +01:00
David Larlet
33cbe1ab71
a11y: turn embeded maps into inert elements ( #2533 )
...
One of the side-effects is to make the content of the map un-focusable
but we also loose the ability to interact with the map itself.
2025-03-07 10:10:29 -05:00
Yohan Boniface
782386bad4
feat: display a target on hover on search results
...
Co-authored-by: David Larlet <david@larlet.fr>
2025-03-06 18:51:58 +01:00
Yohan Boniface
ae5bc9746c
feat: allow to import full geometries from search results
...
Co-authored-by: David Larlet <david@larlet.fr>
2025-03-06 17:03:13 +01:00
Yohan Boniface
a044bfd672
chore: refactor search UX
...
cf #419
2025-03-06 15:48:51 +01:00
Yohan Boniface
188a0d6e98
chore: bump Leaflet.Photon
...
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
To display state in results, cf #419
2025-03-06 09:38:51 +01:00
Yohan Boniface
1981f73212
feat: expose active sessions in stats endpoint
2025-03-05 10:02:42 +01:00
Yohan Boniface
9974852975
2.9.2
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
2025-03-04 15:56:23 +01:00
Yohan Boniface
fb2fd217ab
fix: be defensive when getting the backend name from the session ( #2540 )
...
Seems that in some situation it is not defined.
We have this error in Sentry, but I'm not able to reproduce myself to
get a better context:
https://umap.sentry.io/issues/6351694806/?alert_rule_id=14960738&alert_timestamp=1741028858715&alert_type=email&environment=osmfr¬ification_uuid=2c437997-d14d-4e0f-a62f-55bd19739ad2&project=4506656504020992&referrer=alert_email
2025-03-04 15:51:05 +01:00
Yohan Boniface
3297296d59
fix: measure/drawing tooltip was misplaced
...
Since 70f87d8636
fix #2539
2025-03-04 11:52:06 +01:00
Yohan Boniface
470fc14d6d
fix: be defensive when getting the backend name from the session
...
Seems that in some situation it is not defined.
2025-03-04 11:20:49 +01:00
Yohan Boniface
c0f7e9d50d
2.9.1
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
2025-03-03 18:40:47 +01:00
Yohan Boniface
34259f6234
i18n
2025-03-03 18:39:08 +01:00
Yohan Boniface
284ca8fd9c
chore: be more persuasive in deprecating twitter login backend
...
- always redirect user from map to their profile page when they
used a deprecated backend to log in
- change the Twitter image to make clear it is to be removed
Co-authored-by: David Larlet <david@larlet.fr>
2025-03-03 18:24:23 +01:00
Yohan Boniface
2cf3a4e6a3
fix: honour error status in alerts
...
Co-authored-by: David Larlet <david@larlet.fr>
2025-03-03 16:48:44 +01:00
Yohan Boniface
bc1eaa05c9
chore: use a French quote in translation
...
To prevent escape from Django, as we then use it in a textContent
property for alerts.
Co-authored-by: David Larlet <david@larlet.fr>
2025-03-03 16:47:48 +01:00
Yohan Boniface
ce024d57fd
2.9.0
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
2025-03-03 15:49:27 +01:00
David Larlet
5eab942f25
a11y: switch to better contrasted links ( #2532 )
...
And underline for external links otherwise the new green color is too
close to the text one to clearly identify links.
2025-03-03 09:36:50 -05:00
Yohan Boniface
9e791a0ab4
fix: feature edit status not disabled on hide ( #2534 )
2025-03-03 15:34:49 +01:00
Yohan Boniface
26fe653456
i18n
2025-03-03 15:13:03 +01:00
David Larlet
ea58f93940
a11y: update URLs and (underlined) styles for help
2025-03-03 09:10:37 -05:00
Yohan Boniface
436c083744
fix: feature edit status not disabled on hide
2025-03-03 15:09:34 +01:00
Yohan Boniface
ea00d4fc32
chore: remove _marked_for_deletion pattern
...
We think it's useless now that we use "editable:edited" event everywhere
(vs using the "editable:commit" which was triggered also after a delete,
when closing the edit panel)
2025-03-03 15:09:07 +01:00
David Larlet
abe49cc1ba
a11y: turn embeded maps into inert elements
...
One of the side-effects is to make the content of the map un-focusable but we also loose the ability to interact with the map itself.
2025-02-28 16:18:28 -05:00
David Larlet
4f5d37b676
a11y: switch to better contrasted links
...
And underline for external links otherwise the new green color is too close to the text one to clearly identify links.
2025-02-28 14:05:26 -05:00
David Larlet
949a266437
a11y: set an aria-label for unlabelled search input
2025-02-28 13:58:40 -05:00
Yohan Boniface
48daa0a77f
fix: do not show tooltip with only spaces
...
Test & Docs / tests (postgresql, 3.10) (push) Has been cancelled
Test & Docs / tests (postgresql, 3.12) (push) Has been cancelled
Test & Docs / lint (push) Has been cancelled
Co-authored-by: David Larlet <david@larlet.fr>
2025-02-27 19:28:38 +01:00
Yohan Boniface
ba20f5791c
fix: shift-click on a path should toggle edit
...
This was broken in 4adc558560
Co-authored-by: David Larlet <david@larlet.fr>
2025-02-27 19:21:43 +01:00
Yohan Boniface
0fe2103b71
chore: bump Leaflet.Editable and DOMPurify
2025-02-27 17:12:02 +01:00
Yohan Boniface
14e90a1a0f
feat: add a quick link to layer's permalink ( #2529 )
...
This will open a new page with only this given layer shown.

2025-02-27 15:36:45 +01:00
Yohan Boniface
e919c5f168
fix(sync): make datalayer upsert idempotent ( #2528 )
...
That fix does not really fix the original issue, but it makes it
impactless, and I think it's safer anyway to have upsert idempotent.
The pattern to reproduce is:
- peer A create a synced map, add a datalayer, save it
- peer B loads the map, click on edit
- at this time, peer B have twice the datalayer data, once from the
server AND once from the sync
So a better fix would be to make that peer B send a meaningfull HLC to
peer A I guess.
For this we may save the last HLC is the map properties, or maybe try to
merge the "reference_version" and the HLC.
2025-02-27 15:32:09 +01:00
Yohan Boniface
b1076dcb7b
fix: make sure we sync a line when hitting esc while drawing ( #2526 )
...
I first tried to handle this on Leaflet.Editable side, to make it fire
the "editable:edited" event we use to trigger the sync, but deciding
what to do with a feature on escape needs some decisions that seems hard
to implement in a generic way in Leaflet.Editable.
We call stopDrawing, which then calls cancelDrawing, so here one need to
decide if cancelDrawing should keep the already drawn line (but cancel
the point being drawn) or cancel everything.
This is why I end up making this change in uMap itself.
2025-02-27 15:26:54 +01:00
Yohan Boniface
69ca89a6ba
fix: prevent client to open two websocket connections ( #2524 )
...
To reproduce:
- create a map
- saved it
- change the "syncEnabled" setting to on
- save again
- open another tab with this map
- switch on edit mode
In this case, the second client will try to authenticate:
- once switch on edit mode
- and once receiving the operation message from peer A about the
syncEnabled (which calls render, which calls initSyncEngine in in this
case)
I think we want to keep render to call initSyncEngine, so if a map owner
switch off the syncEnabled setting, this will (should) disconnect the
other peers.
2025-02-27 15:20:16 +01:00
Yohan Boniface
df0faa75aa
feat: add a quick link to layer's permalink
...
This will open a new page with only this given layer shown.
2025-02-26 15:38:48 +01:00
Yohan Boniface
b400ade44b
fix(sync): make datalayer upsert idempotent
...
That fix does not really fix the original issue, but it make it impactless.
The pattern is:
- peer A create a synced map, add a datalayer, save it
- peer B loads the map, click on edit
- at this time, peer B have twice the datalayer data, once from the server
AND once from the sync
So a better fix would be to make that peer B send a meaningfull HLC to
peer A I guess.
For this we may save the last HLC is the map properties, or maybe try
to merge the "reference_version" and the HLC.
2025-02-26 11:55:21 +01:00
Yohan Boniface
dc35039af8
chore: do not try to disconnect ws if not connected
...
cf https://umap.sentry.io/issues/6331841272/
2025-02-26 09:41:03 +01:00
Yohan Boniface
9858fc2190
fix: make sure we sync a line when hitting esc while drawing
...
I first tried to handle this on Leaflet.Editable side, to make
it fire the "editable:edited" event we use to trigger the sync,
but deciding what to do with a feature on escape needs some
decisions that seems hard to implement in a generic way in
Leaflet.Editable.
We call stopDrawing, which then calls cancelDrawing, so here
one need to decide if cancelDrawing should keep the already
drawn line (but cancel the point being drawn) or cancel
everything.
This is why I end up making this change in uMap itself.
2025-02-25 17:17:49 +01:00
Yohan Boniface
5ddd973eae
fix: prevent client to open two websocket connections
...
To reproduce:
- create a map
- saved it
- change the "syncEnabled" setting to on
- save again
- open another tab with this map
- switch on edit mode
In this case, the second client will try to authenticate:
- once switch on edit mode
- and once receiving the operation message from peer A about the
syncEnabled (which calls render, which calls initSyncEngine in
in this case)
I think we want to keep render to call initSyncEngine, so if a map
owner switch off the syncEnabled setting, this will (should) disconnect
the other peers.
2025-02-25 08:33:14 +01:00
Yohan Boniface
ab571925ff
chore: use template for layer advanced buttons
2025-02-24 17:19:46 +01:00
Yohan Boniface
a70e608e42
chore: use template for map advanced buttons
2025-02-24 17:05:54 +01:00
Yohan Boniface
fcac4df30b
chore: use our contexmenu class for inplace toolbar ( #2510 )
...
Test & Docs / tests (postgresql, 3.10) (push) Has been cancelled
Test & Docs / tests (postgresql, 3.12) (push) Has been cancelled
Test & Docs / lint (push) Has been cancelled
And remove Leaflet.Toolbar dependency.
This also teach ContextMenu how to display icons instead of text and how
to render in horizontal orientation instead of vertical.
Before:

After:

We've lost the bottom tip in the process, should I add this to the
ContextMenu class ?
Also, the automatic border for the focused button is a bit noisy imho,
not sure how to deal with that.
2025-02-14 17:25:13 +01:00
Yohan Boniface
b107de3421
fix(sync): wait for websocket full connection ( #2503 )
...
Websocket has now a "connect" method, which is a promise, that yields
"onconnect", so the engine can wait for it before proceding.
2025-02-14 17:22:57 +01:00
Yohan Boniface
b86db00e88
fix(sync): try to reconnect after network error when getting token ( #2502 )
...
Otherwise, if the token request fail, the process will be stopped and we
will never try to reconnect.
2025-02-14 17:22:41 +01:00
Yohan Boniface
244e637acc
chore: sync save state ( #2487 )
...
When a peer save the map, other peers in dirty state should not need to
save the map anymore.
That implementation uses the lastKnownHLC as a reference, but it changes
all dirty states at once. Another impementation could be to have each
object sync its dirty state, but in this case we do not have a HLC per
object as reference, and it also creates more messages.
ping @almet if you're around and wanna have a fresh look. :)
2025-02-14 17:17:59 +01:00
Yohan Boniface
c00de1a457
fix: use default value from schema for non inheritable fields ( #2513 )
...
Eg. moreControl
2025-02-14 17:17:15 +01:00
Yohan Boniface
48b4d61cd0
chore: add an hover on dark context menu buttons
...
Co-authored-by: David Larlet <david@larlet.fr>
2025-02-14 17:16:35 +01:00
Yohan Boniface
b90328f65e
feat: make vertex icons bigger (and round) ( #2506 )
...
Before:

After:

(Size unchanged on mobile)
cf #673
2025-02-14 16:52:54 +01:00
Yohan Boniface
2089d3b0c6
fix: use default value from schema for non inheritable fields
...
Eg. moreControl
Co-authored-by: David Larlet <david@larlet.fr>
2025-02-14 16:44:11 +01:00
Yohan Boniface
52b4244333
chore: add missing default values in schema
2025-02-14 16:03:15 +01:00
Yohan Boniface
1b3852d0e8
i18n
2025-02-14 16:03:05 +01:00
Yohan Boniface
20b1dd6f26
i18n
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
2025-02-14 15:38:31 +01:00
Yohan Boniface
4adc558560
chore: use our contexmenu class for inplace toolbar
...
And remove Leaflet.Toolbar dependency.
This also teach ContextMenu how to display icons instead of
text and how to render in horizontal orientation instead of
vertical.
2025-02-12 14:59:43 +01:00
Yohan Boniface
04966cc068
feat: make the tooltip sticky in hover mode for paths
...
Until now, it was displayed on the path (line or polygon)
"center". So when zoomed in, if the center is not on the
screen, the tooltip will not be visible.
2025-02-11 15:51:43 +01:00
Yohan Boniface
c71a6aafdb
fix: do not display an error for an empty CSV ( #2505 )
...
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
fix #577
fix #2491
fix #1546
2025-02-11 15:00:16 +01:00
Yohan Boniface
008a996bea
feat: make vertex icons bigger (and round)
2025-02-11 14:00:09 +01:00
Yohan Boniface
8e13a15645
fix: do not display an error for an empty CSV
...
fix #577
fix #2491
fix #1546
2025-02-11 13:45:40 +01:00
Yohan Boniface
414cc805c2
fix(sync): wait for websocket full connection
...
Websocket has now a "connect" method, which is a promise,
that yields "onconnect", so the engine can wait for it before
proceding.
2025-02-11 13:26:27 +01:00
Yohan Boniface
1ce491a70c
fix(sync): try to reconnect after network error when getting token
2025-02-11 13:03:06 +01:00
Yohan Boniface
f0e87bab83
Fix broken showLabel=null (on hover) ( #2490 )
...
Broken since c27e675152
2025-02-11 12:14:52 +01:00
Yohan Boniface
c5417178c4
fix: "null" value was not honoured in showLabel field
2025-02-11 11:48:01 +01:00
Yohan Boniface
aea422a247
feat: add title attribute to layers in browser ( #2489 )
...
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
Test & Docs / docs (push) Waiting to run
Usefull when the layer title is truncated because too long.


2025-02-10 17:17:55 +01:00
Yohan Boniface
9b01a4b77a
chore: read datalayer metadata from file if missing in DB
...
When we introduced the DataLayer.settings property, we did not run
a migration for existing datalayers (because there are millions in the
French server).
Now that we simplified the `DataLayer.isLoaded()` logic in the client,
we want to be sure that created DataLayer on the client have full
metadata.
Co-authored-by: David Larlet <david@larlet.fr>
2025-02-10 16:56:15 +01:00
Yohan Boniface
a8e18c167c
chore: no need to reset datalayer._needsFetch after a save
...
It is reset only after loading the layer data.
Co-authored-by: David Larlet <david@larlet.fr>
2025-02-10 16:30:00 +01:00
Yohan Boniface
175e27a535
chore: remove DataLayer._dataloaded in favor of isLoaded()
...
At the end, we only need two states: has this datalayer loaded the
data it should load ? yes / no.
Whether it local or remote data should not be a matter.
2025-02-10 15:44:41 +01:00
Yohan Boniface
ba0582deb1
chore: refactor layer.isLoaded()
2025-02-10 13:13:56 +01:00
Yohan Boniface
9fe744573c
feat: add title attribute to layers in browser
...
Usefull when the layer title is truncated because too long.
2025-02-10 09:41:16 +01:00
Yohan Boniface
64068af393
fix: do not save "null" instead of null for showLabel
2025-02-07 21:56:02 +01:00
Yohan Boniface
6793a6bdc7
fix: do not modify schema while iterating on it
2025-02-07 21:50:11 +01:00
Yohan Boniface
c7681c0304
chore: smaller star button and invert author and dates
...
Also make created/modified lower case on caption.
cf #2424
cf #2442
2025-02-07 19:00:30 +01:00
Yohan Boniface
eca7ad4772
fixup: prevent to reload a datalayer after other peer has saved it
...
The scenario to reproduce is:
- peer A creates a datalayer
- peer B add a marker on that datalayer
- peer B saves the datalayer
Before this fix, after the save, peer A would get a new _referenceVersion
for this datalayer, and the render method would make a hide/show,
which would refetch the data from the server, duplicating it.
So forcing the _loaded to be true in this situation prevent this.
We may want to rework the "_loaded" pattern, maybe with the server
returning in a datalayer metadata the length of the data it get for
this given datalayer, so the client knows if it is worth getting
data for a layer when itself (the client) does not have any.
Co-authored-by: David Larlet <david@larlet.fr>
2025-02-07 17:58:27 +01:00
Yohan Boniface
a172c4abea
fixup: do not try to sync saved state when not in sync mode
...
Co-authored-by: David Larlet <david@larlet.fr>
2025-02-07 17:53:48 +01:00
Yohan Boniface
b8db07a4ce
chore: sync save state
...
When a peer save the map, other peers in dirty state should not need
to save the map anymore.
That implementation uses the lastKnownHLC as a reference, but it changes
all dirty states at once. Another impementation could be to have each
object sync its dirty state, but in this case we do not have a HLC per
object as reference, and it also creates more messages.
Co-authored-by: David Larlet <david@larlet.fr>
2025-02-07 16:47:45 +01:00
Yohan Boniface
76c13a61a6
fixup: do not show empty helpText for editors and owner fields
2025-02-07 15:35:49 +01:00
Yohan Boniface
ad51f674ef
fix: do not import empty features ( #2485 )
2025-02-07 15:26:42 +01:00
Yohan Boniface
009b32c818
fix: do not sync twice a point move
2025-02-07 10:08:58 +01:00
Yohan Boniface
c5ee9fc283
chore: use editable-edited event to sync changes ( #2478 )
...
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
Test & Docs / docs (push) Waiting to run
This is more unified between markers and paths, and it allows paths to
be synced as soon as they have been drawn (instead of when closing the
edit panel, which created a race condition when changing its properties
that were then synced to other while the feature itself was not).
2025-02-07 09:12:45 +01:00
Yohan Boniface
9af74b0a4e
fix: do not import empty features
2025-02-07 09:11:16 +01:00
David Larlet
fb03c6a39e
feat: Expose teams in users’ CSV export ( #2484 )
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
Test & Docs / docs (push) Waiting to run
2025-02-06 11:50:52 -05:00
Yohan Boniface
a1372b5f4d
chore: move DrawToolbar and SettingsToolbar to bar.js module ( #2482 )
...
This also:
- change the "set center and zoom" to be a panel instead of a direct
action (including the "defaultView" setting
- refactor the "get started dialog"
This is a first step to remove our dependency to the unmaintained
Leaflet.Toolbar plugin.



The mockup on figma glues the edit toolbar to the edit panel, but I
didn't not implement this as I don't know how to make it work in
portrait/mobile view. This step is mainly a code refactor.
2025-02-06 17:28:43 +01:00
David Larlet
17b8d73978
feat: Expose teams in users’ CSV export
...
Co-authored-by: Yohan Boniface <yohanboniface@free.fr>
2025-02-06 11:26:47 -05:00
David Larlet
519302b53d
fix: Do not error when escape during marker creation
...
Co-authored-by: Yohan Boniface <yohanboniface@free.fr>
2025-02-06 11:14:58 -05:00
David Larlet
cbe50a0112
fixup: back to original dark grey
...
Co-authored-by: Yohan Boniface <yohanboniface@free.fr>
2025-02-06 11:02:38 -05:00
David Larlet
b214f4109c
fixup: restore help contents and fix button icon
...
Co-authored-by: Yohan Boniface <yohanboniface@free.fr>
2025-02-06 10:28:05 -05:00
David Larlet
e8e06da149
fix: consistent border radius for edit bar
...
Co-authored-by: Yohan Boniface <yohanboniface@free.fr>
2025-02-06 10:05:55 -05:00
David Larlet
0451b4a882
chore: highlight bar buttons according to open panel
...
Co-authored-by: Yohan Boniface <yohanboniface@free.fr>
2025-02-06 10:02:32 -05:00
Yohan Boniface
99db1c82f4
chore: move DrawToolbar and SettingsToolbar to bar.js module
...
This also:
- change the "set center and zoom" to be a panel instead of
a direct action (including the "defaultView" setting
- refactor the "get started dialog"
This is a first step to remove our dependency to the unmaintained
Leaflet.Toolbar plugin.
2025-02-06 12:26:58 +01:00
Yohan Boniface
3e4601c7a3
chore: use logging.debug instead of print for sync debugging
2025-02-05 09:57:58 +01:00
Yohan Boniface
b35740b029
fix: error after deleting a path that was previously moved ( #2479 )
...
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
Test & Docs / docs (push) Waiting to run
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
When moving a path, this will put a once time listener on "moveend". If
we delete this feature, and move the map, we should not execute the
event callback.
A better fix would be to cancel the event listener on delete, but that
is much more work given how we deal with Leaflet events right now.
2025-02-04 18:00:09 +01:00
Yohan Boniface
c985cb3de5
fix: error after deleting a path that was previously moved
...
When moving a path, this will put a once time listener on "moveend".
If we delete this feature, and move the map, we should not execute the
event callback.
A better fix would be to cancel the event listener on delete, but that
is much more work given how we deal with Leaflet events right now.
2025-02-04 17:40:49 +01:00
Yohan Boniface
a48513fcd7
chore: make redis python dep optional ( #2470 )
2025-02-04 16:38:24 +01:00
Yohan Boniface
79352d8a82
chore: use editable-edited event to sync changes
...
This is more unified between markers and paths, and it allows paths to
be synced as soon as they have been drawn (instead of when closing the
edit panel, which created a race condition when changing its properties
that were then synced to other while the feature itself was not).
2025-02-04 16:36:14 +01:00
Yohan Boniface
9606bd864b
fix: center "Plus" button
2025-02-04 11:45:28 +01:00
Yohan Boniface
432a0a182d
i18n
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
Test & Docs / docs (push) Waiting to run
2025-01-31 19:05:22 +01:00
Yohan Boniface
545770dfb9
chore: make redis python dep optional
2025-01-31 18:55:55 +01:00
Yohan Boniface
c5478fa8d3
2.9.0b0
2025-01-31 18:44:01 +01:00
Yohan Boniface
74f81f9894
i18n
2025-01-31 18:37:18 +01:00
Yohan Boniface
1f66377104
fix: show user URL in remote data loading error
...
Instead of the proxied one, which is less readable and actionable for
the user reading the alert message.
2025-01-31 18:25:20 +01:00
Yohan Boniface
a442e56cbc
fixup: use correct delete function for DataLayer
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
Test & Docs / docs (push) Waiting to run
2025-01-31 17:28:09 +01:00
Yohan Boniface
718cc919f8
fix: do not try to backup an undefined geojson ( #2468 )
...
This occurs when a remote data returns an invalid geojson.
2025-01-31 17:18:43 +01:00
Yohan Boniface
aa25398a62
feat: display a more descriptive alert on invalid geojson error ( #2466 )
2025-01-31 17:16:44 +01:00
Yohan Boniface
18ff0de872
fix: clear previous alert timeout when opening a new alert ( #2467 )
...
Otherwise, when an infinite alert replace an alert with a finite
duration, this first alert timeout will close the second alert.
2025-01-31 17:16:27 +01:00
Yohan Boniface
37ecea0799
feat: display a more descriptive alert on invalid geojson error
...
Co-authored-by: David Larlet <david@larlet.fr>
2025-01-31 17:08:35 +01:00
Yohan Boniface
e38e0f162c
fix: do not try to backup an undefined geojson
...
This occurs when a remote data returns an invalid geojson.
Co-authored-by: David Larlet <david@larlet.fr>
2025-01-31 16:47:17 +01:00
Yohan Boniface
bcd69ccb47
fix: clear previous alert timeout when opening a new alert
...
Otherwise, when an infinite alert replace an alert with a finite duration,
this first alert timeout will close the second alert.
Co-authored-by: David Larlet <david@larlet.fr>
2025-01-31 16:42:38 +01:00
Yohan Boniface
2162aaf930
fix: only allow to set a map as sync when it is already saved
2025-01-31 15:45:55 +01:00
Yohan Boniface
3e9982c8cb
Sync show usernames ( #2444 )
...
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
Test & Docs / docs (push) Waiting to run
fix #2267
2025-01-31 06:56:46 +01:00
David Larlet
1eb1f320db
chore: iterate on tooltips design
2025-01-30 14:15:56 -05:00
Yohan Boniface
a18b240c65
fix: catch cluster error at zoom in certain situation
...
Eg. to reproduce: a map with a limitBounds that makes uMap immediately
zoom to fit the bbox.
Co-authored-by: David Larlet <david@larlet.fr>
2025-01-30 18:40:05 +01:00
David Larlet
e6db23d4d3
fix: better buttons positionning for the homepage ( #2463 )
2025-01-30 11:35:40 -05:00
Yohan Boniface
5ae83a571b
feat: add DEPRECATED_AUTHENTICATION_PROVIDERS setting ( #2461 )
...
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
Test & Docs / docs (push) Waiting to run

2025-01-30 17:15:53 +01:00
Yohan Boniface
be1fa55e9b
fix: allow to set choices for a nullablechoices field ( #2462 )
...
fix #2380
2025-01-30 17:14:27 +01:00
David Larlet
ac607370d0
a11y: include site description within page titles ( #2455 )
...
This is not the same as the short `SITE_NAME` which is displayed as the
title of the (home)page for instance.
The plan is to set `SITE_DESCRIPTION` as `uMap OpenStreetMap` for the
OSM instance and `uMap agents publics` for the ANCT one.
2025-01-30 10:45:22 -05:00
David Larlet
44aa914658
a11y: include site description within page titles
...
This is not the same as the short SITE_NAME which is displayed as the title of the (home)page for instance.
2025-01-30 10:36:31 -05:00
David Larlet
0e5cdec97e
fix: better buttons positionning for the homepage
2025-01-30 10:16:09 -05:00
Yohan Boniface
c27e675152
fix: allow to set choices for a nullablechoices field
...
fix #2380
2025-01-30 14:55:11 +01:00
Yohan Boniface
ee1a87cdeb
feat: add DEPRECATED_AUTHENTICATION_PROVIDERS setting
2025-01-30 11:04:02 +01:00
Yohan Boniface
96895feea0
fix: display current configured oauth as icon instead of text ( #2375 )
...
Before:

After:

2025-01-30 11:03:21 +01:00
Yohan Boniface
359b0b41ca
chore: make djlint happy
2025-01-30 09:45:56 +01:00
Yohan Boniface
3aa42d6f0f
feat: soft delete datalayers ( #2459 )
...
When deleting a datalayer, it will now be moved to a state "deleted",
and it will only be deleted for real when running the command `umap
empty_trash`.
This is what we already do for the map itself, but until now if a user
deleted a only a datalayer by mistake (not the map itself) it could not
retrieve it.
2025-01-30 09:19:58 +01:00
Yohan Boniface
f0751ec5dd
fix: correctly parse http link including another http link in the path
...
fix #2457
2025-01-29 20:23:43 +01:00
Yohan Boniface
fd8a1971f8
feat: soft delete datalayers
...
When deleting a datalayer, it will now be moved to a state "deleted", and
it will only be deleted for real when running the command `umap empty_trash`.
This is what we already do for the map itself, but until now if a user
deleted a only a datalayer by mistake (not the map itself) it could not retrieve
it.
2025-01-29 19:08:59 +01:00
Yohan Boniface
a3baf82b7b
chore(templates): use images for oauth providers list
...
Co-authored-by: David Larlet <david@larlet.fr>
2025-01-27 19:04:13 +01:00
Yohan Boniface
70f87d8636
feat: add "accent" mode for tooltip, and use it for peers list
...
Co-authored-by: David Larlet <david@larlet.fr>
2025-01-27 18:43:36 +01:00
Yohan Boniface
bcd21d3697
feat(forms): add a debounce for Input and Textarea fields ( #2445 )
...
fix #2415
I'm a bit afraid this will add more hiccup to the playwright tests,
tough :(
2025-01-27 18:40:11 +01:00
Yohan Boniface
49ea7ed4a5
feat(forms): add a debounce for Input and Textarea fields
...
fix #2415
2025-01-27 17:25:56 +01:00
Yohan Boniface
d20943a487
feat: move star button to caption ( #2442 )
...
fix #2282


2025-01-27 17:18:28 +01:00
Yohan Boniface
250579eaa2
chore: better styling for star button in caption panel
...
Co-authored-by: David Larlet <david@larlet.fr>
2025-01-27 16:50:27 +01:00
Yohan Boniface
60918e6ca5
wip(sync): POC of using Redis for pubsub ( #2426 )
...
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
Test & Docs / docs (push) Waiting to run
## TODO
- [x] add expire to peers registry hash in redis, as for now when the
server closes the connection we have extra users (edit: we cleaned
manually, as HEXPIRE is not available in FOSS version of Redis)
- [x] make that the peer uuid is created by the client, so when it
reconnects, it uses the same, and does not create a new one
- [ ] see if we can use a connection_pool
- [x] use dynamic websocket_uri (that must include the map id)
- [x] integrate Redis in playwright tests
2025-01-27 15:58:30 +01:00
Yohan Boniface
d4afd5646f
feat: allow to define sortKey at layer level ( #2449 )
...
In some situation, we do not want the same sortKey for each layer.
2025-01-27 10:08:53 +01:00
Yohan Boniface
485bd94531
feat: allow to define sortKey at layer level
...
In some situation, we do not want the same sortKey for each layer.
2025-01-26 22:20:19 +01:00
Yohan Boniface
8603774778
chore: do not use hx for non structural headings
2025-01-24 18:52:24 +01:00
Yohan Boniface
8f2bbc6765
fix: re-compute layer settings when type changed
2025-01-24 18:24:33 +01:00
Yohan Boniface
d5efe6b8e2
fix: get COLORS from Utils now that it has been moved there
2025-01-24 18:23:41 +01:00
Yohan Boniface
8111cf5522
fix: add a label for default colors scheme in categorized layer type
2025-01-24 18:22:33 +01:00
Yohan Boniface
609b251303
chore: use datalayer.allProperties() instead of private property
2025-01-24 18:21:29 +01:00
Yohan Boniface
29d70552dd
fix: always index properties when feature properties as changed
...
We want the datalayer index properties to be updated when a user set
a property on the feature, as this property name may not yet be in the
index (which is used later for autocomplete, select…).
2025-01-24 18:19:57 +01:00
Yohan Boniface
ea2bdba270
fix: display a more usefull message when error in remote data ( #2443 )
...
Test & Docs / tests (postgresql, 3.10) (push) Has been cancelled
Test & Docs / tests (postgresql, 3.12) (push) Has been cancelled
Test & Docs / lint (push) Has been cancelled
Test & Docs / docs (push) Has been cancelled
fix #2379

2025-01-24 09:09:14 +01:00
Yohan Boniface
22846acb99
fix: fix circle icon no longer hihlighted ( #2440 )
...
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
Test & Docs / docs (push) Waiting to run
fix #2429
2025-01-23 18:30:23 +01:00
Yohan Boniface
693e775ca8
fix: keep layer visibility after clicking on toggle all ( #2439 )
...
fix #2430
Not exactly sure how to make this DRY. What we want is to mark the layer
visibility as "controlled by user" as soon as they click on a
show/hide/showAll/hideAll button, so we do not try to infer the
visibility from the from/toZoom settings.
2025-01-23 18:29:37 +01:00
Yohan Boniface
62be6450bb
feat(sync): show a very minimal list of connected peers
...
cf #2267
Co-authored-by: David Larlet <david@larlet.fr>
2025-01-23 18:27:47 +01:00
Yohan Boniface
3e3ce0b8f5
fix: better computation of tooltip bottom position
...
Co-authored-by: David Larlet <david@larlet.fr>
2025-01-23 18:08:04 +01:00
Yohan Boniface
476c160fd5
wip(sync): clean stale username from redis
...
We wanted to use the HEXPIRE command, but discovered that this command
is only available since the Redis 7.4 version (the latest), and this version
does not have an OSI compliant licence, so it is generally not installable
through common packages managers. The OSS fork is Valkey, but it still does
not have the HEXPIRE command.
So we decide to clean those keys manually, and in order no do this clean
task at each websocket connection, we only do it when we are the first user
to connect to a given map.
Co-authored-by: David Larlet <david@larlet.fr>
2025-01-23 17:20:21 +01:00
Yohan Boniface
0d5e3047f4
wip(sync): only return peers with an active connection
2025-01-23 17:20:21 +01:00
Yohan Boniface
11fb29c456
wip(sync): log but do not crash when sending fail
...
This should be a race condition when sending to a closed websocket. Let's
log to track them.
2025-01-23 17:20:21 +01:00
Yohan Boniface
ef7c769abe
wip(sync): remove a bit of server prints
2025-01-23 17:20:21 +01:00
Yohan Boniface
82342ea00f
wip(sync): try a better pattern to unsubscribe to pubsub channels
...
When publishing a "STOP", this would unsubscribe every listener of the
channel.
2025-01-23 17:20:21 +01:00
Yohan Boniface
7e42331533
wip(sync): add Redis to CI and configure tests settings
2025-01-23 17:20:21 +01:00
Yohan Boniface
a07ee482ce
wip(sync): use our async_live_server for websocket related PW tests
...
As now both http and ws are on the same domain, let's use one test server
able to serve both.
Co-authored-by: David Larlet <david@larlet.fr>
2025-01-23 17:20:20 +01:00
Yohan Boniface
1bf100d7a8
wip(sync): make the client set its peer id
2025-01-23 17:17:16 +01:00
Yohan Boniface
36d9e9bf06
wip(sync): use the correct URL for websocket
...
Co-authored-by: David Larlet <david@larlet.fr>
2025-01-23 17:17:16 +01:00
Yohan Boniface
acb2e967b8
wip(sync): POC of using Redis for pubsub
...
Co-authored-by: David Larlet <david@larlet.fr>
2025-01-23 17:17:16 +01:00
Yohan Boniface
ab7119e0a4
wip(sync): use Daphne as live_server for tests
...
Also clean dependencies.
We still use the channels live server for our tests, but do not use it
anymore for the actual websocket handling.
2025-01-23 17:17:13 +01:00
Yohan Boniface
460a0c9997
wip(sync): only open listen connections after authentication
2025-01-23 17:16:44 +01:00
Yohan Boniface
698c74b427
wip(sync): only save Peer after authentication
2025-01-23 17:16:44 +01:00
Yohan Boniface
a29eae138e
wip(sync): websocket server with ASGI and PostgreSQL LISTEN/NOTIFY
2025-01-23 17:16:44 +01:00
Yohan Boniface
31546d6ff4
wip(sync): use django-channels to serve websockets
...
Co-authored-by: David Larlet <david@larlet.fr>
2025-01-23 17:16:44 +01:00
Yohan Boniface
83c3a41be5
fix: display a more usefull message when error in remote data
...
fix #2379
2025-01-23 12:04:25 +01:00
Yohan Boniface
48f9afdedd
feat: move star button to caption
...
fix #2282
2025-01-23 11:25:09 +01:00
Yohan Boniface
122d470e31
fix: do not consume ctrl-Z in textarea or input
...
fix #2422
2025-01-21 18:19:16 +01:00
Yohan Boniface
44dbf2f0df
fix: fix circle icon no longer hihlighted
...
fix #2429
2025-01-21 11:46:57 +01:00
Yohan Boniface
f3b11b03bc
fix: keep layer visibility after clicking on toggle all
...
fix #2430
Not exactly sure how to make this DRY. What we want is to mark the
layer visibility as "controlled by user" as soon as they click on a
show/hide/showAll/hideAll button, so we do not try to infer the
visibility from the from/toZoom settings.
2025-01-21 11:33:08 +01:00