Commit graph

2218 commits

Author SHA1 Message Date
Yohan Boniface
35189cc9fb wip(importer): use only one submit button and be smarter to guess action 2024-06-14 18:38:30 +02:00
Yohan Boniface
8dd1c4bc7f wip: remove AutoComplete.URL (can't set class properties yet) 2024-06-14 18:38:30 +02:00
Yohan Boniface
1cefd4c9a7 wip: allow to control geodatamine baseUrl from settings 2024-06-14 18:38:30 +02:00
Yohan Boniface
d35e72dab9 wip: add aspoint attribute to geodatamine URL 2024-06-14 18:38:30 +02:00
Yohan Boniface
4e3228d114 feat: allow to create remote data layer from import panel
And make the form conditional.
2024-06-14 18:38:30 +02:00
Yohan Boniface
dbafe19b7f chore: declare ttl property in schema 2024-06-14 18:38:30 +02:00
Yohan Boniface
16fd5d8ca3 wip: typo 2024-06-14 18:38:30 +02:00
Yohan Boniface
342dcbabbe wip: no need for AVAILABLE_IMPORTERS 2024-06-14 18:38:30 +02:00
Yohan Boniface
f5eea1fe3f wip(naming): replace "plugin" by "importer"
We are not ready yet to talk about plugins
2024-06-14 18:38:30 +02:00
Yohan Boniface
93a189497b wip: control plugins from settings 2024-06-14 18:38:29 +02:00
Yohan Boniface
a7a214d7fe wip: deal with boundary types in geodatamine importer 2024-06-14 18:38:29 +02:00
Yohan Boniface
03ce8e90d6 wip: refactor importer 2024-06-14 18:38:29 +02:00
Yohan Boniface
c7cd87ec8a wip: move presets to importer plugins 2024-06-14 18:38:29 +02:00
Yohan Boniface
b657a5e9b3 wip: simpler importer API 2024-06-14 18:38:29 +02:00
Yohan Boniface
1e4de02694 wip: add a basic importer for commune shapes
Mainly wanted to have two improters to play with, in order to
better understand the common part, and thus the API we may define
between them and the importer panel.
2024-06-14 18:38:29 +02:00
Yohan Boniface
5b914c1bd2 wip: make it simpler to create an autocomplete class 2024-06-14 18:38:29 +02:00
Yohan Boniface
e51347e239 wip: very naive geodatamine and communes importers 2024-06-14 18:38:29 +02:00
Yohan Boniface
22ccd61d87 chore: remove empty help entry inclusion 2024-06-14 18:30:32 +02:00
Yohan Boniface
191fb6d853 chore: reviewing labels with Aurélie 2024-06-14 18:24:56 +02:00
Yohan Boniface
59dbde4f32 chore: make browser labels consistent 2024-06-14 18:24:54 +02:00
Yohan Boniface
d407949138 chore: be more explicit on browser modes 2024-06-14 18:24:10 +02:00
Yohan Boniface
e023321ee5
Merge pull request #1895 from umap-project/request-error-alert
fix: display an alert on any request error
2024-06-14 18:22:54 +02:00
Yohan Boniface
713be1538c chore: change alert CSS sizing 2024-06-14 18:21:44 +02:00
David Larlet
eda3823b3a
Merge pull request #1896 from umap-project/better-alerts
chore: overall alerts improvements
2024-06-14 11:51:46 -04:00
Yohan Boniface
7e86bc6db8 wip: do not display alerts from the maps in a content list page 2024-06-14 17:51:42 +02:00
Yohan Boniface
a2ba35cb93
Merge pull request #1894 from umap-project/fix-feature-edit-icon
fix: use correct icon class in edit feature panel
2024-06-14 17:31:42 +02:00
David Larlet
fb1407cdbf
chore: overall alerts improvements 2024-06-14 11:08:59 -04:00
Yohan Boniface
9dc11ec9f9 wip: fix tests after rebase on master 2024-06-14 16:55:36 +02:00
Yohan Boniface
6bdba1d0ed wip: do not use public class fields yet
Browser support is not enough.
2024-06-14 16:55:36 +02:00
Yohan Boniface
f10d345113 wip: use this.rules.getOption directly 2024-06-14 16:55:36 +02:00
Yohan Boniface
907ba09c45 wip: do not use private property yet
Support is not ready for us.
2024-06-14 16:55:36 +02:00
Yohan Boniface
05ea45acd2 wip: use getter/setter for Rule dynamic properties 2024-06-14 16:55:36 +02:00
Yohan Boniface
7367de5545 wip: deal with boolean values in conditional rules 2024-06-14 16:55:36 +02:00
Yohan Boniface
5ec944fce0 wip: deal with gt/lt and numbers in conditional rules 2024-06-14 16:55:36 +02:00
Yohan Boniface
129f46dd6d wip: add minimal tests for conditional rules 2024-06-14 16:55:36 +02:00
Yohan Boniface
d6ae4744a6 wip: make sure we update rule when condition is changed
And make sure we redraw data on map
2024-06-14 16:55:36 +02:00
Yohan Boniface
805c09e34e wip: allow to deactivate a conditional rule from list 2024-06-14 16:55:36 +02:00
Yohan Boniface
a2d04b9ad4 wip: use direct imports instead of L. global 2024-06-14 16:55:36 +02:00
Yohan Boniface
4f8e453012 wip: allow to reorder rules 2024-06-14 16:55:36 +02:00
Yohan Boniface
05eab25da4 feat: very minimal experimental conditional style rules 2024-06-14 16:55:33 +02:00
Yohan Boniface
15de486425 fix: use correct icon class in edit feature panel 2024-06-14 15:31:16 +02:00
Yohan Boniface
d221a98e78 fix: display an alert on any request error
This used to be the case, but was changed by mistake in the
request refactor (swicht from xhr)
2024-06-14 15:24:01 +02:00
b94995120a refactoring(sync): Simplify the design of the sync engine.
Removes the concept of message dispatcher and message sender, all of
it can be done by the syncengine class, making it easier to grasp.
2024-06-14 00:20:59 +02:00
Yohan Boniface
e968261dff wip: fix more tests 2024-06-13 20:53:07 +02:00
Yohan Boniface
897d4f22f4 chore(tests): make sure we send a valid geojson when data is empty 2024-06-13 20:52:28 +02:00
David Larlet
b863beaec9
chore: fix tests 2024-06-13 14:13:42 -04:00
David Larlet
802d5d9d6c
chore: set default language for tests as en-GB 2024-06-13 13:41:00 -04:00
David Larlet
b197e067e8
fix: listen to the correct event for conflicts 2024-06-12 19:06:28 -04:00
David Larlet
8400b55b9d
chore: direct import of the Alert class in modules 2024-06-12 18:30:40 -04:00
David Larlet
cea2aee88f
chore: rename alert choice to conflict + CSS vars 2024-06-12 18:15:28 -04:00
David Larlet
10e398d222
chore: better alerts CSS 2024-06-12 18:03:05 -04:00
David Larlet
6cb1be1fd4
chore: use direct import for ServerRequest in alerts 2024-06-12 18:03:05 -04:00
David Larlet
ddaafa8cda
chore: scroll when the help box is too big 2024-06-12 18:03:05 -04:00
David Larlet
c0ecc39439
chore: uniformize buttons across panels and alerts 2024-06-12 18:03:05 -04:00
David Larlet
e1f91b393d
chore: do not display zoom alert on save 2024-06-12 18:03:05 -04:00
David Larlet
6bbdec49bf
chore: refactor web components with templates 2024-06-12 18:03:04 -04:00
David Larlet
6f715c109b
chore: improve message/choice in case of conflicts 2024-06-12 18:03:04 -04:00
David Larlet
5c2528900e
chore: Use web components to display alerts + a11y roles 2024-06-12 18:03:04 -04:00
Yohan Boniface
8967ab5901 whore: prettier 2024-06-11 14:12:33 +02:00
Yohan Boniface
50ef073d36
Merge pull request #1883 from umap-project/remove-u-keys
chore: remove U.Keys, and refactor global shorcuts
2024-06-07 18:35:49 +02:00
fc2de3fc53 tests(sync): Change the way the websocket server is run in the tests
Using [pytest-xprocess](https://pytest-xprocess.readthedocs.io/) proved
not being as useful as I thought at first, because it was causing
intermitent failures when starting the process.

The code now directly uses `subprocess.popen` calls to start the server.
The tests are grouped together using the following decorator:

`@pytest.mark.xdist_group(name="websockets")`

Tests now need to be run with the `pytest --dist loadgroup` so that all
tests of the same group happen on the same process.

More details on this blogpost:

  https://blog.notmyidea.org/start-a-process-when-using-pytest-xdist.html
2024-06-07 18:21:30 +02:00
98a7a56701 refactor(sync): rename ws.py to websocket_server.py
Hopefully this is clearer :-)
2024-06-07 18:21:30 +02:00
f42498d195 refactor(sync): Sync layers creation with map.createDataLayer utility.
Rather than having it done inside the datalayer itself. This gives us
more control.
2024-06-07 18:21:30 +02:00
149a0c1680 refactor: rename geometrytoFeatures to geoJSONToLeaflet
Because we are dealing with technologies using overlapping vocabulary,
it is easy to get lost. Hopefully this change makes it clear that it
converts geoJSON inputs in Leaflet / uMap objects.
2024-06-07 18:21:30 +02:00
137cc21af2 feat(sync): Add a proxy to the SyncEngine objects.
It is now possible to create proxy objects using `sync_engine.proxy(object)`.
The returned proxy object will automatically inject `metadata` and
`subject` parameters, after looking for them in the `getSyncMetadata`
method (these are only known to the synced objects).

As a result, the calls are now simplified:

```
this.sync.update("key", "value")
```
2024-06-07 18:21:30 +02:00
4e7ac23b53 refactor(sync): remove formbuilder this._redraw() callbacks.
They are now handled in the `render()` call, so there is no more need
for them here.
2024-06-07 18:21:30 +02:00
5247bf77d3 refactor(sync): Remove syncUpdateProperties function.
The function was only used once, so removing it  simplified the whole
flow.
2024-06-07 18:21:30 +02:00
d3730a99ff fix: use array.includes(string) the proper way.
Because this `syncUpdatedProperties` function is only called once, it
didn't trigger any issue in practice (as the check was always returning
true).
2024-06-07 18:21:30 +02:00
d91c86e7fa feat(websockets): run the WS server as a django management command.
This allows to handle the loading of the settings in a consistant way,
and aditionnaly to provide a way to override the `WEBSOCKET_BACK_HOST`
and `WEBSOCKET_BACK_PORT` settings with arg commands `--host` and
`--port`.

Without this change, because of how we are currently loading our
settings, we would require the settings the be exposed by the
`umap.settings.__init__` file.

Previous implementations were exposing these settings, with the
following code:

```python
settings_as_dict = {k: v for k, v in globals().items() if k.isupper()}
  ```
2024-06-07 18:21:30 +02:00
940ae77602 settings: Make the websocket settings clearer.
It is now using `WEBSOCKET_BACK_HOST`, `WEBSOCKET_BACK_PORT` and
`WEBSOCKET_FRONT_URI`.

We need to take in consideration that the "front" WebSocket address
(that clients will connect to) might be different than the "back" ip and
port which are bound in the host.

This happens for instance for reverse proxies, or when running inside
a container.

We considered using a `WEBSOCKET_TLS` setting, to try guessing the
"front" address based on `WEBSOCKET_HOST`, `WEBSOCKET_PORT` and
`WEBSOCKET_TLS`, but as the back and front address can differ, this
would need to introduce a `WEBSOCKET_URI` in any case, so we went with
just using it, and not adding an extra `WEBSOCKET_TLS`.
2024-06-07 18:21:30 +02:00
90780fbf6d fixup: changes after @ybon's review. 2024-06-07 18:21:30 +02:00
50b7188647 fix(sync): sync the reference-version across peers
This allows the merge algorithm to not be lost when receiving changes.
Without this change, the optimistic merge algorithm isn't able to make
the distinction between peers, and features end up duplicated.
2024-06-07 18:21:30 +02:00
516c3d9a0d tests(sync): Add a test ensuring cloned features aren't duplicated
This is currently a bug in the current implementation. Hopefully fixed
in later commits.
2024-06-07 18:21:30 +02:00
b5eee142e7 test(sync): Ensure feature properties are synced 2024-06-07 18:21:30 +02:00
b1a4053b2e chore(sync): remove belongsTo for now
As it requires more discussion, it will happen in a separate
pull-request.
2024-06-07 18:21:30 +02:00
8fc116e7a8 chore(test): remove empty test 2024-06-07 18:21:30 +02:00
dfbdc1f975 chore(test): fix a typo
(but I would really like to see what web socker would look like)
2024-06-07 18:21:30 +02:00
db50c6cdd6 chore(sync): relax some validation logic on the websocket server
Messages are now checked for conformity with the procol we defined, but
stop at the `operation` boundary. Values aren't checked.
2024-06-07 18:21:30 +02:00
bc1dec245b chore(sync): Sync engine now retrieves auth token
It's now it's responsability to get the authentication token from
the http server and pass it to the websocket server, it will make it
possible to redo the roundtrip when getting disconnected.
2024-06-07 18:21:30 +02:00
82ede035d6 chore(sync): use sync=false everywhere to stop propagation
In some cases, you want to stop the propagation of events. The previous
code was using `fromSync=true` and `sync=false` interchangeably. This
makes it use `sync=false` everywhere.
2024-06-07 18:21:30 +02:00
637ab67b93 chore(utils): remove console.log calls 2024-06-07 18:21:30 +02:00
5a565dd2ee fix(schema): dashArray belongs to features as well 2024-06-07 18:21:30 +02:00
10a68a75e4 test(sync): Ensure datalayer properties are synced 2024-06-07 18:21:30 +02:00
d10a7b70f1 test(sync): Ensure map properties are synced
This tests that the name of the map, and that zoom-control visibility is
properly synced over websockets.
2024-06-07 18:21:30 +02:00
6f7dd61023 test(sync): ensure polygon drag-n-drop is synced 2024-06-07 18:21:30 +02:00
ad4d6ac672 test(sync): Ensure polygons and their edits can be synced 2024-06-07 18:21:30 +02:00
5feabd4c14 test(sync): Marker drag-n-drop and delete are synced 2024-06-07 18:21:30 +02:00
80f7efc810 tests(sync): Test that marker sync works properly
This commit handles the start and stop of the websocket server during
the tests, using the xprocess library
2024-06-07 18:21:30 +02:00
d0e2d900f7 chore(tests): Rename "collaboration" tests to "optimistic merge"
As "collaboration" can be mistaken between "websocket" and
"server-merge". This naming makes it explicit.
2024-06-07 18:21:30 +02:00
92676e03ae chore(sync): Add message-dispatcher unit tests 2024-06-07 18:21:30 +02:00
74a1670c9d feat(sync): Add JS unittests for updateObjectValue, and refactor.
The new implementation uses `reduce`, in the hopes of producing a more
readable version than old-style loops and reassignment of object values.
2024-06-07 18:21:30 +02:00
9be613e3ce feat(sync): add tests for the websocket token view 2024-06-07 18:21:30 +02:00
80eaa151de refactor(sync): Remove unnecessary complexity
Because we're relying on the `geoJSONToFeatures` method, we don't need
anymore updaters, the default ones (map, datalayer, feature) are enough.

It also makes the codebase compatible with our eslint configuration.
2024-06-07 18:21:30 +02:00
9e36476abe chore(sync) make the test pass 2024-06-07 18:21:30 +02:00
d5bff22081 fix(sync) only send datalayer options 2024-06-07 18:21:30 +02:00
898a3e93b2 fix(sync): do not call getSyncMetadata if it doesn't exist
This can arise when the form isn't bound to a "syncable" object. We
might want to provide an utility to check an object is *syncable*, or a
specific form to not attempt to sync objects which don't need it.
2024-06-07 18:21:30 +02:00
8e5c434988 feat(sync): Allow the sync of datalayer creation 2024-06-07 18:21:30 +02:00
458d68a4bb fix(sync): allow features geometries to be synced
By defining the `geometry` property in the schema.
2024-06-07 18:21:30 +02:00
1d9b086115 chore(sync): remove useless dependencies from ws.py 2024-06-07 18:21:30 +02:00
def915c561 feat(settings): allow reading socket-related settings from ENV variables 2024-06-07 18:21:30 +02:00
01408254c9 fix(sync): intialize the sync engine before entering edit mode.
Otherwise `this.sync` is not defined.
2024-06-07 18:21:30 +02:00
46207741ff feat(sync): handle syncing of map limitbounds. 2024-06-07 18:21:30 +02:00
9cb87392c0 feat(sync): Avoid syncing remote datalayers' features
They will be synced on their own, and we dont want them to be present
twice on the map.
2024-06-07 18:21:30 +02:00
b99c242648 fix(sync): Initialize tilelayerand remoteData earlier.
It makes it possible to set these values on a remote peer.
2024-06-07 18:21:30 +02:00
059103b66c fix(sync): Allow overlays to sync
`this.options.overlay` is now set during `map.initialize()`, which makes
it possible to be set by incoming websocket operations.
2024-06-07 18:21:30 +02:00
2fafad714e chore(sync): Ensure properties can be updated before doing it.
When receiving a message, this checks the given properties belong to
the "subject" before applying the message.
2024-06-07 18:21:30 +02:00
25ccdde0b0 chore(schema): Add a belongsTo field in the schema.
The goal is to use this as a security measure, to check that the
updated properties belong the the "subject" when receiving sync
operations.
2024-06-07 18:21:30 +02:00
28a359e03f fix(sync): Allow cloning of features
Removing the `id` from the feature when cloning makes it generate a new
one. Without this change, the cloned feature keep the already existing
`id`, and during sync, the original object is lost (replaced by the
clone).

Nobody wants to be replaced by a clone.
2024-06-07 18:21:30 +02:00
e4bcb53c6f feat(sync): Sync only when the edition of a feature is over.
It's less spectacular than sending the position as it changes, but takes
less bandwidth and seems good enough.
2024-06-07 18:21:30 +02:00
ce0f3c9d3e fix(sync): Import the data when syncing GeoJSON objects.
Prior to these changes, the data wasn't transmitted over WebSocket, and
even if present it wasn't taken into account.
2024-06-07 18:21:30 +02:00
e24173eb9f fix(sync): Keep features IDs for Polygons and Lines
It wasn't passed previously, so objects where duplicated.
2024-06-07 18:21:30 +02:00
c6ee25b906 feat(sync): Only sync when on edit mode
The is done to save server resources, for accessed maps which
aren't currently being edited.
2024-06-07 18:21:30 +02:00
66eb90ffd1 chore(sync): Move the sync flag in the options
The goal being for it to be hidden for now.

- Add a `is_owner` method on the map and use it in the view
- Remove duplicated line in `global.js`
- Rename `Datalayer` to `DataLayer` everywhere
- Move the sync flag in the map options (next to slideshow)
2024-06-07 18:21:30 +02:00
32a4f3feda feat(sync): Add WebSocket specific settings
`WEBSOCKET_ENABLED`, `WEBSOCKET_HOST`, `WEBSOCKET_PORT` and
`WEBSOCKET_URI` have been added.

They are being transmitted to the client via the `map.options`.
When `WEBSOCKET_ENABLED` is set to `False`, the client doesn't have
the ability to be synced.
2024-06-07 18:21:30 +02:00
5e692d2280 feat(sync): Add a enableSync option.
This changes how the syncEngine works. At the moment, it's always
instanciated, even if no syncing is configured. It just does nothing.

This is to avoid doing `if (engine) engine.update()` calls everywhere
we use it.

You now need to `start()` and `stop()` it.
2024-06-07 18:21:30 +02:00
9a74cc370c feat(sync): initialize datalayers internal objects in the constructor.
Otherwise, an event can come from the websocket, trying to update an
`undefined` property.
2024-06-07 18:21:30 +02:00
b956101d5d feat(sync): sync layer's properties.
This also changes the interface between the synced classes and the sync
engine.

The sync engines only requires two methods now:

- `getSyncMetadata()` which returns all the metadata needed, including
the `engine`.
- `render()` which renders the object, updating the needed parts.
2024-06-07 18:21:30 +02:00
66105127cb feat(sync): Sync features over websockets
Added a new `geometryToFeature` method in `umap.layer.js` which can
update a given geometry if needed.

A new `id` property can also be passed to the features on creation, to
make it possible to have the same features `id` on different peers.
2024-06-07 18:21:30 +02:00
c9abb15dd1 feat(sync): sync map properties over websocket
All keystrokes are currently sent, which is not ideal because it will
use a lot of bandwidth.
2024-06-07 18:21:30 +02:00
698c926997 feat(sync): sync features and map properties
Synced objects now expose different methods, such as:
- `getSyncEngine` which returns the location of the sync object.
- `getMetadata` which returns the associated metadata with the object.

Hooks have been added when features are created or changed, so the
changes can be synced with other peers.
2024-06-07 18:21:30 +02:00
f255c3c8a5 feat(websockets): Authenticate with signed tokens.
Authentication is now done using a signed token provided by the Django
server, sent by the JS client and checked by the WebSocket server.

The token contains a `permissions` key that's checked to ensure the user
has access to the map "room", where events will be shared by the peers.
2024-06-07 18:21:30 +02:00
e2b9b161e6 feat(websockets): First SyncEngine appearance
A new SyncEngine module has been added to the JavaScript code. It aims
to sync the local changes with remote ones. This first implementation
relies on a websocket connection.
2024-06-07 18:21:30 +02:00
1128348db6 feat(WebSockets): Features a WebSocket server.
There is one "room" per map, and the server relays messages to all the
other connected peers.

Messages are checked for compliance with what's allowed as a security
measure. They should also be checked in the clients to avoid potential
attack vectors.
2024-06-07 18:21:30 +02:00
ee3dbb85ca doc: update cookie-related comment 2024-06-07 18:21:30 +02:00
2daeaf12e0 WIP 2024-06-07 18:21:30 +02:00
c1fe86747b feat(settings): Expose settings as a dict.
This makes it possible to use them in standalone scripts, when using
`django.settings.configure(**settings_dict)`.
2024-06-07 18:21:30 +02:00
Yohan Boniface
9d211005b1 chore: remove U.Keys, and refactor global shorcuts 2024-06-06 07:15:49 +02:00
Yohan Boniface
c70951a994 chore: move help to a separate module 2024-06-05 19:42:15 +02:00
Yohan Boniface
b7b39fa2f5 i18n 2024-06-05 10:50:21 +02:00
Yohan Boniface
50d16b633c fix: display layer in naturel order in caption
This was broken in e6b4a54499

fix #1874
2024-06-03 14:57:20 +02:00
Yohan Boniface
88103f284a
Merge pull request #1868 from umap-project/fix-layer-old-storage
fix: support old storage options when importing a umap file
2024-05-30 16:14:45 +02:00
Yohan Boniface
5f5805dc09 fix: support old storage options when importing a umap file 2024-05-30 15:05:45 +02:00
Yohan Boniface
3a12865d62
Merge pull request #1867 from umap-project/catch-xml-error
fix: show message in case of xml parsing error
2024-05-29 20:17:40 +02:00
Yohan Boniface
442928f608
Merge pull request #1865 from umap-project/popup-newlines
fix: refactor new line management in popups
2024-05-29 20:03:27 +02:00
Yohan Boniface
16ab193b5d fix: show message in case of xml parsing error
fix #1866
2024-05-29 11:51:47 +02:00
Yohan Boniface
fa2bef85d3 fix: refactor new line management in popups
Basically, we do not add `<br>` anymore, but instead let the newline
and use the css `white-space: pre-line;`. Also remove new lines after
title.

While doing that change, I needed to reorder regex so the ones needing
a newline before would still have it (bullets points).

I've added tests and removed some to cover those changes.

fix #1854
2024-05-29 10:35:25 +02:00
Yohan Boniface
fe74ffb008 fix: caption title rendering on multiple lines
fix #1853
2024-05-29 08:59:26 +02:00
Yohan Boniface
c10bc27fed fix: panel condensed height should never be bigger than screen 2024-05-24 18:39:11 +02:00
Yohan Boniface
ebf9be296d chore: move importer to modules/ 2024-05-23 19:32:07 +02:00
Yohan Boniface
109545d006 chore: prettier 2024-05-23 18:26:36 +02:00
Yohan Boniface
1836647c00 chore: move autocomplete to modules/ 2024-05-23 15:10:46 +02:00
David Larlet
d6a20b3dda
Merge pull request #1847 from umap-project/ui-to-modules
chore: move ui to dedicated modules
2024-05-22 13:05:32 -04:00
David Larlet
ef705a862e
Merge pull request #1851 from umap-project/audio-video-tags
fix: allow audio and video tags (+attributes) in HTML
2024-05-22 12:52:16 -04:00
David Larlet
5f29b8b0d5
fix: invert star icons when map is starred or not
Fixes #1848
2024-05-22 11:05:44 -04:00
David Larlet
5b624167c0
fix: allow audio and video tags (+attributes) in HTML
Refs https://forum.openstreetmap.fr/t/umap-audio-video-et-panneau-lateral/2804/2
2024-05-22 10:54:24 -04:00
Yohan Boniface
776d92e7cc chore: add minimal dialog class to replace custom made help box 2024-05-22 14:00:53 +02:00
Yohan Boniface
8e446dbe70 chore: move panel.js to ui/ subfolder 2024-05-22 11:50:59 +02:00
Yohan Boniface
2ed9bc65ee chore: move tooltip to a dedicated module 2024-05-22 11:40:48 +02:00
Yohan Boniface
8ddc570e23 chore: move alert to dedicated module 2024-05-22 11:39:16 +02:00
Yohan Boniface
c44e7ec38d 2.3.1 2024-05-17 17:45:55 +02:00
Yohan Boniface
8f17d6848a i18n 2024-05-17 17:44:26 +02:00
Yohan Boniface
6113ac362e
Merge pull request #1837 from umap-project/browser-show-list
fix: always display data in browser unless in "layers" mode
2024-05-17 17:42:32 +02:00
Yohan Boniface
6294886faa
Merge pull request #1829 from umap-project/panel-mode
fix: make explicit default panel modes
2024-05-17 17:39:47 +02:00
Yohan Boniface
06f5b4447f fix: always display data in browser unless in "layers" mode 2024-05-17 17:36:19 +02:00
Yohan Boniface
dfb78b32b3
Merge pull request #1822 from umap-project/switch-dark-color
feat: use accent color for switch and multichoices on dark background
2024-05-17 17:21:51 +02:00
Yohan Boniface
77ed24fb95
Merge pull request #1823 from umap-project/fix-location
fix: error when clicking on the geolocate button
2024-05-17 17:21:33 +02:00
Yohan Boniface
0e24e3041e
Merge pull request #1832 from umap-project/delete-datalayer-propagate
fix: do not close blindly editPanel when deleting a layer
2024-05-17 17:20:36 +02:00
Yohan Boniface
284ef1d7f3 feat: remove defaultPanelMode from now
After discussion, we prefer to go with decent defaults and see
how it goes.
2024-05-17 17:18:05 +02:00
Yohan Boniface
aa67d6d09d
Merge pull request #1834 from umap-project/modifier-shift
fix: do not consider shortcuts if shift is also pressed
2024-05-17 17:04:05 +02:00
Yohan Boniface
cac3c63ac0
Merge pull request #1835 from umap-project/classif-to-toggle
chore: replace DomUtil.classIf by classList.toggle
2024-05-17 17:02:35 +02:00
Yohan Boniface
6327c988ab fix: do not close blindly editPanel when deleting a layer
fix #498
fix #1831
2024-05-17 17:01:47 +02:00
Yohan Boniface
26d4b439cd chore: replace DomUtil.classIf by classList.toggle
cf #1342
2024-05-17 16:51:25 +02:00
Yohan Boniface
630de6d749 fix: do not consider shortcuts if shift is also pressed
fix #1452
2024-05-17 16:08:40 +02:00
Yohan Boniface
26c9f913e3 fix: do not autoclose panel blindly after map save
fix #1139
cf #1831
2024-05-17 15:19:10 +02:00
Yohan Boniface
c860866fe9 feat: add defaultPanelMode setting
cf https://forum.openstreetmap.fr/t/umap-2-3-changement-de-gestion-des-pop-up/23680/3

Trying to make this panel expanded/condenses thing simpler and more intuitive.

It's mode can be set:
- by explicitely setting defaultPanelMode = xxx
- or, if defaultPanelMode is undefined, with sensible default when there is
  an onLoadPanel defined, and to respect previous uMap behaviour
- or, if defaultPanelMode is unset, and some feature opens in the panel, it
  will be set to expanded (here again to respect previous behaviour
- then, when user change it manually (by clicking on the toggle button), then
  we should never change it automatically, and respect the previous mode when
  reopening the panel

(We are only talking about the left panel, here.)
2024-05-16 19:48:19 +02:00
Yohan Boniface
3a19b921a7 chore: prettier 2024-05-16 12:18:07 +02:00
Yohan Boniface
571154e4f3 fix: error when clicking on the geolocate button
fix #1812
2024-05-15 15:17:50 +02:00
Yohan Boniface
00ad05bb82 feat: use accent color for switch and multichoices on dark background 2024-05-14 18:59:05 +02:00
Yohan Boniface
9e2a29002a Apply suggestions from code review
Co-authored-by: David Larlet <3556+davidbgk@users.noreply.github.com>
2024-05-14 17:35:33 +02:00
Yohan Boniface
e6b4a54499 fix: show non visible layers in caption
fix #1820
2024-05-14 16:26:00 +02:00
Yohan Boniface
c58196b285 chore: move caption to its own module 2024-05-14 16:00:26 +02:00
Yohan Boniface
71a8aafeba 2.3.0 2024-05-09 18:08:08 +02:00
Yohan Boniface
6b3da97d73 i18n 2024-05-09 18:07:13 +02:00
Yohan Boniface
0ce1971b4e
Merge pull request #1794 from umap-project/integrate-facets
feat: integrate facets into browser filters
2024-05-09 17:57:15 +02:00
Yohan Boniface
eb1a0bae25
Merge pull request #1808 from umap-project/panel-height-with-footer-bar
fix: adapt panel expanded height when map has a caption bar
2024-05-09 17:56:39 +02:00
Yohan Boniface
5b4bf9d416
Merge pull request #1804 from umap-project/edit-layer-on-esc
fix: open edit panel when pressing ESC while drawing, if valid
2024-05-09 17:45:25 +02:00
Yohan Boniface
b5da347a67 fix: adapt panel expanded height when map has a caption bar
cf #1788
2024-05-09 17:07:33 +02:00
Yohan Boniface
58588761d5 fix: open edit panel when pressing ESC while drawing, if valid 2024-05-09 16:43:01 +02:00
Yohan Boniface
84b904c71d fix: really focus on search input after showing the panel
fix #1806
2024-05-09 16:36:05 +02:00
Yohan Boniface
4ebbf8ed11
Merge pull request #1805 from umap-project/fix-continue-line
fix: do not try to render drawinTooltip on drawing start
2024-05-09 16:01:57 +02:00
Yohan Boniface
6c5bdf8670 wip: add integration test to make sure filters are kept when closing panel 2024-05-09 15:57:14 +02:00
Yohan Boniface
f06461967a fix: do not try to render drawinTooltip on drawing start
The event does not contain latlng, so we cannot compute the
line length yet.
2024-05-09 13:32:39 +02:00
Yohan Boniface
b0b740f9b5 wip: fix CSS selector to determine if browser is open or not 2024-05-08 19:37:28 +02:00
Yohan Boniface
86ae6bb816 wip: better way of computing isMin/MaxModified in facets fields 2024-05-08 19:27:23 +02:00
Yohan Boniface
53458053a7 wip: properly deal with old onLoadPanel 'facet' value
We need to replace it, so the new value is saved and used
elsewhere (eg. in the "UI options" form)
2024-05-08 19:07:13 +02:00
Yohan Boniface
369f798839
Merge pull request #1790 from umap-project/panel-expanded-mobile
fix: allow panel expanded mode in mobile
2024-05-08 18:56:41 +02:00
Yohan Boniface
99effc880b wip: rename facet by filters in user facing labels 2024-05-08 18:46:47 +02:00
Yohan Boniface
0741d2a943 wip: add min/max attributes to minmax filters inputs 2024-05-08 18:40:40 +02:00
Yohan Boniface
76c719f3b1 wip: add a reset button to filters form in browser 2024-05-08 18:40:00 +02:00
Yohan Boniface
46088f3213 wip: highlight modified inputs instead of fieldset in filters 2024-05-07 20:32:40 +02:00
Yohan Boniface
63d936a069 wip: review form style with Aurelie 2024-05-07 20:26:13 +02:00
Yohan Boniface
fa1752c992 fix: keep current selected date/number value when reopening browser 2024-05-07 16:39:28 +02:00
Yohan Boniface
8ef8ad538e wip: one const per line 2024-05-07 15:43:27 +02:00
David Larlet
dcad0e1bb2
Merge pull request #1801 from umap-project/1796-add-purify-attributes
fix: allow `dir` and `title` attributes
2024-05-07 09:40:27 -04:00
Yohan Boniface
2f3e7d03ab chore: fix tests after fieldset refactor 2024-05-07 13:29:03 +02:00
Yohan Boniface
b450acf81d chore: prettier 2024-05-07 12:31:28 +02:00
Yohan Boniface
cd48267cf2 wip: remove unused code 2024-05-07 12:29:48 +02:00
Yohan Boniface
ba0ba1a85d wip: add a badge on filters title and datalayers icon when active 2024-05-07 12:28:13 +02:00
Yohan Boniface
43755c81fa fix: only set date/number facets selected if values have changed
For displaying the badge, we need to know when custom values have
been set. Also, this prevent useless facet checks when user has
changed one value then changed it back to default.
2024-05-07 12:23:17 +02:00
Yohan Boniface
701b00f4f7 wip: do not override selected values when recomputing facets 2024-05-07 12:21:31 +02:00
Yohan Boniface
d805653e3c wip: make explicit in browser.build that we set mode only if defined 2024-05-07 12:20:40 +02:00
David Larlet
5b9746066c
fix: allow dir and title attributes
Fix #1796
2024-05-06 18:26:05 -04:00
Yohan Boniface
0b98ef2f9d wip: replace fake fieldset by proper details/summary tags 2024-05-03 18:53:05 +02:00
Yohan Boniface
406198882a wip: add filter icon for filters button 2024-05-03 18:48:26 +02:00
Yohan Boniface
f78e95b088 wip: remove tabs from browser 2024-05-03 16:06:51 +02:00
Yohan Boniface
aa78b13f8e feat: integrate facets into browser filters 2024-05-03 12:53:06 +02:00
David Larlet
8679c0ded8
Merge pull request #1792 from umap-project/fix-title-html
fix: do not add title to button if content is a DOM node
2024-05-02 11:34:46 -04:00
Yohan Boniface
916da8be94 fix: do not add title to button if content is a DOM node 2024-05-02 17:14:48 +02:00
Yohan Boniface
f1a8180a29
Merge pull request #1789 from umap-project/panel-responsive
Add max-width to panel in landscape mode
2024-05-02 16:41:23 +02:00
Yohan Boniface
e688ce8f57 chore: try to change Playwright expect timeout
Some tests randomly fail in the CI because of timeout a bit short.
2024-05-02 14:30:54 +02:00
Yohan Boniface
c40b01fc48 fix: add max-width to panel in landscape mode
In some situation in mobile (eg. when the keyboard is used), the
screen is still considered as landscape, but it is very small, so
make sure the panel does not overflow on the right.

cf #1788
2024-05-02 12:26:36 +02:00
Yohan Boniface
51d5095d2c fix: allow panel expanded mode in mobile 2024-05-02 12:24:36 +02:00
David Larlet
49b240a3db
2.2.2 2024-05-01 14:08:56 -04:00
David Larlet
c05282f19c
2.2.1 2024-05-01 13:36:00 -04:00
David Larlet
2c1cd46167
fix: no .mjs extension for JS modules
It requires a special nginx configuration that we want to avoid for all instances deployments:

```
include mime.types;
types {
  application/javascript mjs;
}
```
2024-05-01 13:27:45 -04:00
Yohan Boniface
dc69ec55c8 2.2.0 2024-05-01 18:05:44 +02:00
Yohan Boniface
55dc083866 i18n 2024-05-01 18:04:01 +02:00
Yohan Boniface
0f798d4cc6
Merge pull request #1774 from umap-project/browser-tabs
feat: add browser tabs submenu
2024-05-01 17:54:22 +02:00
Yohan Boniface
85e2a8ef5b
Merge pull request #1785 from umap-project/fix-modifier-macos
fix: deal with the modifier key under macOS
2024-05-01 17:51:58 +02:00
Yohan Boniface
5bfc65167a wip: refactor credits css in caption 2024-05-01 17:48:35 +02:00
Yohan Boniface
6cc34d1f97 wip: change flat tags colors (in browser/caption/iconUrl field) 2024-05-01 17:43:20 +02:00
Yohan Boniface
4e7f1e43c0 wip: make owner closer to title in caption box 2024-05-01 17:43:20 +02:00
Yohan Boniface
00a3c2fe34 wip: change tabs rendering in browser and iconUrl form field 2024-05-01 17:43:20 +02:00
Yohan Boniface
b550c93b87 wip: move owner link above tabs in caption 2024-05-01 17:43:20 +02:00
Yohan Boniface
d013d6b0e3 wip: add browser tabs submenu 2024-05-01 17:43:20 +02:00
David Larlet
d00c394a99
fix: deal with the modifier key under macOS 2024-05-01 11:40:37 -04:00
Yohan Boniface
cd10a6259f
Merge pull request #1784 from umap-project/fix-alert-anonymous
fix: make sure to display anonymous edit link even if email is not configured
2024-05-01 17:07:57 +02:00
Yohan Boniface
713214e258
Merge pull request #1782 from umap-project/fix-caption
fix: ensure tilelayer attribution with smart text is displayed as HMTL
2024-05-01 17:05:24 +02:00
Yohan Boniface
0002b22f5c chore: skip failing test for now
This test was relying on changing DEFAULT_FROM_EMAIL in the test,
but given this setting is used at load from urls.py, it has no
effect.
2024-05-01 16:57:46 +02:00
Yohan Boniface
596004c8c0
Merge pull request #1783 from umap-project/fix-name-click
fix: open caption form when clicking on map name, not advanced props
2024-05-01 16:28:40 +02:00
Yohan Boniface
fedb083612 chore: be more explicit on what HTML we allow when escaping 2024-05-01 16:26:38 +02:00
Yohan Boniface
200ee6ea10 chore: fix formatting 2024-05-01 16:26:38 +02:00
Yohan Boniface
c3516516cd chore: change DomUtil.element signature 2024-05-01 16:26:37 +02:00
Yohan Boniface
8c20397209 fix: make sure to display anonymous edit link even if email is not configured 2024-05-01 15:43:10 +02:00
Yohan Boniface
757cc1ee6c fix: open caption form when clicking on map name, not advanced props 2024-05-01 15:31:32 +02:00
Yohan Boniface
dccb93c8a8 fix: make sure we escape all innerHTML calls 2024-04-30 23:19:19 +02:00
Yohan Boniface
cdb46752a9 fix: ensure tilelayer attribution with smart text is displayed as HMTL 2024-04-30 20:02:13 +02:00
Yohan Boniface
acb5a68755 fix: fix back button in the layer edit form 2024-04-25 10:56:51 +02:00
Yohan Boniface
6a48d641c9 2.2.0b0 2024-04-24 21:29:21 +02:00
Yohan Boniface
453056cb15 feat: remove Map.description
The field was not populated since years, and we already have the
info inside the JSONB `settings`.
2024-04-24 16:39:59 +02:00
Yohan Boniface
52ab531362
Merge pull request #1751 from umap-project/browse-data-expanded
make that "browse data" opens the browser in expanded mode
2024-04-19 17:39:26 +02:00
David Larlet
dc40addef4
Merge pull request #1766 from umap-project/redraw-popup-on-marker-change
fix: redraw popup on marker’s modifications
2024-04-19 11:34:04 -04:00
David Larlet
dd69efb45b
chore: set default navigation timeout for CI 2024-04-19 11:33:38 -04:00
David Larlet
788c638f3d
fix: redraw popup on marker’s modifications 2024-04-19 11:24:06 -04:00
David Larlet
d8c2e14b42
Merge pull request #1763 from umap-project/flammermann-facet-date
Date and number support for facets
2024-04-19 10:58:02 -04:00
David Larlet
c5507fbafe
fix: tests with iso dates and explicit days 2024-04-19 10:27:32 -04:00
Yohan Boniface
65e226ff1c
Merge pull request #1753 from umap-project/msg-no-csv-header
feat: display a message when importer cannot find lat/lng columns
2024-04-19 16:05:04 +02:00
David Larlet
5232d77382
Merge pull request #1765 from umap-project/ci-mock-osm-tiles
Mock OSM tiles requests in Playwright for speed
2024-04-19 09:54:39 -04:00
Yohan Boniface
a1d78437d5 chore: use translate instead of L._ in facets module 2024-04-19 13:19:20 +02:00
Yohan Boniface
37e0582b30 chore: try to parse naive dates as UTC 2024-04-19 13:15:53 +02:00