Commit graph

1643 commits

Author SHA1 Message Date
Yohan Boniface
67ec77fd8a fix: broken sortKey help
And move properties to shema.js. Given those keys does not have
a "guessable" handler, let's have a "customHandlers" prop to deal
with those (instead of keeping them outside of the schema…)

fix #2006
2024-07-22 11:09:25 +02:00
Yohan Boniface
d54843bbe2 feat: add {layer} as popup variable (aka extended properties)
fix #2007
2024-07-22 10:41:46 +02:00
David Larlet
9609fafe93
fix: handle the 'auto' value special case for z-index
Fix #1997
2024-07-15 13:33:07 -04:00
Yohan Boniface
abbd0e4803 chore: move layers to modules/
This is a small step in the direction of spliting the data part
and the rendering part.

Basically in modules/data relies the data part, and in modules/rendering
the rendering part, which at some point in the history should be
the only place where we use and inherit from Leaflet, including utils
and such.
2024-07-12 23:21:41 +02:00
David Larlet
f5fd0eb6e9
fix: remove padding from table editor inputs
Also, decrease line-height of header cells
2024-07-12 14:23:54 -04:00
Yohan Boniface
8c58b06ce4 i18n 2024-07-12 18:34:03 +02:00
David Larlet
f40387d5fc
Merge pull request #1968 from umap-project/filter-layer-3
Refactor the table editor including mass actions and filters
2024-07-12 12:18:47 -04:00
David Larlet
f8cb195336
chore: back to this.properties for TableEditor 2024-07-12 12:02:28 -04:00
David Larlet
b63a0f7f2d
chore: better errors on name validation 2024-07-12 11:53:12 -04:00
David Larlet
85a4fda0ed
chore: use datalayer._propertiesIndex directly 2024-07-12 11:51:04 -04:00
David Larlet
238798acc3
chore: clean table editor CSS 2024-07-12 11:41:14 -04:00
David Larlet
7ce5646c54
chore: move computePosition to Positioned base class 2024-07-12 11:37:03 -04:00
Yohan Boniface
b4d13304f0 fix: add back slideshow.setOptions method, called from U.Map 2024-07-12 15:18:52 +02:00
Yohan Boniface
a51cc8102f fix: fix race condition when slideshow is in autostart mode
Given `setViewFromQueryString` is now async, the slideshow may start
before it is run and thus it has called `initCaptionBar`, so let's
call it directly (and it's not linked to query string, so…)
2024-07-12 15:16:42 +02:00
Yohan Boniface
a101309e03 wip: use Input not BlurInput in tableeditor
BlurInput adds a "check" button we don't want here.
2024-07-12 12:31:50 +02:00
Yohan Boniface
96c9bf9413 wip: set contextmenu x/y according to position in window 2024-07-12 12:21:30 +02:00
Yohan Boniface
4a6b271bbe wip: deal with escape in tableeditor input/textarea 2024-07-11 20:39:05 +02:00
Yohan Boniface
9f04f56c7c wip: use position: fixed for input/textarea in tableeditor
so it does not increase the cell width and does not change all
the table size.
Actually, there is still a small size change as we remove the cell
content before adding the input/textarea, but more subtle than before
2024-07-11 20:39:05 +02:00
Yohan Boniface
3fb7be28ec wip: remove old tableeditor class 2024-07-11 20:39:05 +02:00
Yohan Boniface
2f8cda83b6 wip: do not try to read map.fullPanel blindly
It is only defined when user has write permissions.
2024-07-11 20:39:05 +02:00
Yohan Boniface
f1c34f9d27 wip: minimal keyboard navigation in table editor 2024-07-11 20:39:05 +02:00
Yohan Boniface
f62f3b4ab9 wip: make outline appears on click on table editor 2024-07-11 20:39:05 +02:00
Yohan Boniface
1ef416a622 wip: allow to open table "editor" (readonly) for remote data layers 2024-07-11 20:39:05 +02:00
Yohan Boniface
5909630e0e wip: fix bugs and add tests for table editor 2024-07-11 20:39:05 +02:00
Yohan Boniface
9ac3de2b33 wip: (huge) table editor refactor 2024-07-11 20:39:05 +02:00
Yohan Boniface
ae9659620a wip: another attemp to massiverly delete features from a condition 2024-07-11 20:39:05 +02:00
Yohan Boniface
3fa478abac
Merge pull request #1981 from umap-project/autocomplete-datalist
feat: add AutocompleteDatalist and use it for conditional rules
2024-07-10 11:36:59 +02:00
Yohan Boniface
7baa70d1b6 feat: add AutocompleteDatalist and use it for conditional rules 2024-07-10 10:10:53 +02:00
Yohan Boniface
76fbb306fc
Merge pull request #1982 from umap-project/categorized-color
fix: use correct color for categorized/choropleth layers in browser
2024-07-09 15:16:19 +02:00
Yohan Boniface
ed6f0fcdf1
Merge pull request #1979 from umap-project/fix-blurinput
fix: BlurInput was not updating the object in some situations
2024-07-09 15:15:26 +02:00
Yohan Boniface
e3f59850a7 fix: fix preview color for polygons
Use usually set the `color` property, but we want to use the
fillColor if it sets.
2024-07-09 12:47:10 +02:00
Yohan Boniface
00483882a1 fix: use correct color for categorized/choropleth layers in browser 2024-07-09 11:58:29 +02:00
Yohan Boniface
dd9c3ba194 chore: biome 2024-07-09 11:47:34 +02:00
Yohan Boniface
3be274929a fix: BlurInput was not updating the object in some situations
Steps to reproduce:
- click in any BlurInput
- change to any value
- click outside the input => the value will be set to the object
- click again in the input
- change value to the initial
- click outside => the value will not be set

This is because the BlurInput in sync on blur, and it was comparing
the current field value with an "initial" one, only set at build.
This check is made because we don't want to trigger an edit when a
user click in a blurinput and click outside without changing the value.
2024-07-09 10:46:22 +02:00
Yohan Boniface
36b4510e46 fix: make sure panels are above controls
fix #1954
2024-07-05 18:59:13 +02:00
Yohan Boniface
4ae47de8a9
Merge pull request #1958 from umap-project/broken-help
fix: main help button from edit toolbar was broken
2024-07-05 18:51:14 +02:00
Yohan Boniface
207860ecf5 chore: refactor help.button arguments 2024-07-05 18:27:53 +02:00
Yohan Boniface
ec5f8d7b3c
Update umap/static/umap/js/modules/help.js
Co-authored-by: David Larlet <3556+davidbgk@users.noreply.github.com>
2024-07-05 18:19:00 +02:00
Yohan Boniface
257d205690
Merge pull request #1953 from umap-project/categorized-layer
feat: add new type of layer Categorized
2024-07-05 18:18:36 +02:00
Yohan Boniface
1b8b130805 wip: no need for await here 2024-07-05 17:52:35 +02:00
Yohan Boniface
cc6ae95371 wip: make Map.initialize async
We want to be able to await function there.

Specifically, we want to await the data creation when it comes from
the `data` url param, so when we also consume the `feature` url param,
that feature is already on the map so we can open it
2024-07-05 17:52:35 +02:00
Yohan Boniface
49db1f9aaa chore: move share to modules 2024-07-05 17:52:33 +02:00
Yohan Boniface
741fc70a17 wip: simpler syntax for dynamic import in formatters 2024-07-05 17:51:53 +02:00
Yohan Boniface
ca0f771947 wip: move formatters to a module
This mainly allows to dynamically load the third party libraries.

In the same process, those libs have changed:

- tokml => switch to placemarkio fork, more up to date and available
  as ESM
- togpx => switch to geojson-to-gpx, more up to date and available as
  ESM (note: this lib does not export polygons, because they do not
  make sense in GPX world, while the previous was converting them as
  lines before)
2024-07-05 17:51:53 +02:00
Yohan Boniface
f293f9c929 chore: move slideshow to a module 2024-07-05 17:35:08 +02:00
Yohan Boniface
6aa74060ad chore: make explicit that the "show get started dialog" is a special case 2024-07-05 09:52:39 +02:00
David Larlet
8b62aecd31
chore: create a WithTemplate base class
Allows to load a string/template and bind all `data-ref` references to `this.elements`.
2024-07-04 20:11:38 -04:00
Yohan Boniface
6976fd1f63
Merge pull request #1963 from umap-project/overpass-departement
fix: allow to search a French departement in Overpass importer
2024-07-02 22:51:40 +02:00
Yohan Boniface
6cbda1f373
Merge pull request #1964 from umap-project/throttle-search
fix: add throttle in autocomplete
2024-07-02 22:51:09 +02:00
Yohan Boniface
4c1ea8b97f wip: make sure dialog polyfill works 2024-07-02 20:49:14 +02:00
Yohan Boniface
abbd0eef62 fix: add throttle in autocomplete 2024-07-02 19:06:11 +02:00
Yohan Boniface
91badcdb5e wip: rework dialog class 2024-07-02 18:11:22 +02:00
Yohan Boniface
23396ad4df fix: allow to search a French departement in Overpass importer
And make it configurable in the same time.
2024-07-02 10:45:05 +02:00
Yohan Boniface
759dd34ef3 fix: main help button from edit toolbar was broken 2024-07-01 18:58:01 +02:00
Yohan Boniface
186025e0f0 chore: add custom prompt 2024-07-01 18:54:06 +02:00
Yohan Boniface
ce3439f6b5 feat: add new type of layer Categorized
This is like Choropleth, but with categories instead of graduated.

fix #1433
2024-07-01 12:48:46 +02:00
Yohan Boniface
3a10b0c4e0 i18n 2024-06-26 23:18:30 +02:00
David Larlet
3805d7f308
fix: better line-height for importers’ names 2024-06-26 15:43:46 -04:00
David Larlet
b01a194469
Merge pull request #1943 from umap-project/multiple-dataurl-onload
feat: handle multiple dataUrl parameters on map load
2024-06-26 14:22:11 -04:00
David Larlet
84e7f7a0a8
Merge pull request #1944 from umap-project/apply-biome-unsafe-2
chore: apply Biome unsafe changes
2024-06-26 13:21:56 -04:00
David Larlet
31d1c36a48
chore: explicit comment for global isNaN usage 2024-06-26 13:05:24 -04:00
7a7977c5cd fix(sync): do not send messages when loading data from the server
This introduces a `sync=true/false` parameter that can be passed along
when loading data from our own server, in which case we don't want to
send "operation" messages.
2024-06-26 18:59:20 +02:00
0dcedeb525 fix(sync): sync feature layer changes
This commits adds a way to differenciate "end of edit" events that are
triggered rightfully and the one which are triggered during the deletion
of a feature.

Also, directly call the `sync.upsert()` method after the move happened.
2024-06-26 18:59:20 +02:00
4f19824805 fix(sync): pass the correct datalayer uuid 2024-06-26 18:59:20 +02:00
David Larlet
b5cb092cd4
chore: from switch with unique case to if/else 2024-06-26 11:29:20 -04:00
David Larlet
04c50c4453
chore: deal with missing label for url_template 2024-06-26 10:35:46 -04:00
David Larlet
7c2b5839a9
Merge pull request #1942 from umap-project/rational-zindexes
chore: rationalize z-indexes in CSS
2024-06-26 10:10:47 -04:00
David Larlet
d1ded301a5
chore: do not use Number.isNaN in special cases 2024-06-25 21:41:29 -04:00
David Larlet
c61ca9c506
chore: remove the noDelete rule completely 2024-06-25 21:31:37 -04:00
David Larlet
b819c554ee
chore: there is a difference between unset and delete 2024-06-25 20:53:02 -04:00
David Larlet
7a82b6547e
chore: do not use Number.isNaN in special cases 2024-06-25 18:14:34 -04:00
David Larlet
5c88502a2e
chore: set a sync default value on createDataLayer
Rel: https://biomejs.dev/linter/rules/use-default-parameter-last/
2024-06-25 17:23:52 -04:00
David Larlet
445a793c3e
chore: apply Biome unsafe changes
Without `useBlockStatements`
2024-06-25 17:11:17 -04:00
David Larlet
b426d212f0
feat: handle multiple dataUrl parameters on map load 2024-06-25 16:41:39 -04:00
David Larlet
735c9dc6d8
chore: rationalize z-indexes in CSS
Positive side-effect: alerts are now above importers panel.
2024-06-25 14:56:25 -04:00
David Larlet
ef33a26f11
chore: apply Biome safe changes 2024-06-25 10:00:57 -04:00
adc1cf460f Use css variables
Co-authored-by: David Larlet <3556+davidbgk@users.noreply.github.com>
2024-06-25 14:15:23 +02:00
c3a412059a fix: better spacing for the alert box, when activated 2024-06-25 14:15:23 +02:00
David Larlet
0b031dc7cc
fix: Distinction between clearing data vs. layers
Fix #1934
2024-06-24 17:04:33 -04:00
Yohan Boniface
e4af031ca1
Merge pull request #1933 from umap-project/fix-change-datalayer
fix: fix path disappearing when changing its datalayer
2024-06-24 08:32:32 +02:00
Yohan Boniface
d1fd842c1a i18n 2024-06-24 08:16:41 +02:00
Yohan Boniface
8d9bd4aec1 fix: fix path disappearing when changing its datalayer
fix #1931
2024-06-24 08:08:23 +02:00
Yohan Boniface
37c5601609
Merge pull request #1930 from umap-project/feature-panel-querystring
feat: give precedence to feature in query string over onLoadPanel
2024-06-21 22:04:05 +02:00
Yohan Boniface
a8daca425c i18n 2024-06-21 21:59:43 +02:00
Yohan Boniface
82c9ec7d39 feat: give precedence to feature in query string over onLoadPanel
cf #1893
2024-06-21 21:57:34 +02:00
Yohan Boniface
c2fc9ffb57 chore: use button element for "back to browser" action
As we did for other actions in c0ecc39439
2024-06-21 21:53:22 +02:00
Yohan Boniface
02dd29a55f chore: add margin left to radio buttons 2024-06-21 18:03:02 +02:00
Yohan Boniface
e5259b3ffe
Merge pull request #1929 from umap-project/heading-css-size
chore: change heading CSS size
2024-06-21 17:46:44 +02:00
Yohan Boniface
9fabfe08cd
Merge pull request #1922 from umap-project/smaller-headings
chore: smaller headings in descriptions
2024-06-21 16:39:44 +02:00
Yohan Boniface
2b8326bd61
Merge pull request #1928 from umap-project/fix-slideshow-buttons
fix: fix slideshow toolbar position and size
2024-06-21 16:38:28 +02:00
Yohan Boniface
cd69e5fbb0
Merge pull request #1924 from umap-project/popup-min-width
fix: increase popup min-width
2024-06-21 16:38:06 +02:00
Yohan Boniface
5e480627cc
Merge pull request #1923 from umap-project/white-space-description
fix: also use white-space: pre-line on map description
2024-06-21 16:37:43 +02:00
Yohan Boniface
25cd19049e
Merge pull request #1921 from umap-project/fix-layer-labelkey
fix: use layer labelKey if any when filtering features
2024-06-21 16:37:14 +02:00
Yohan Boniface
73493258f1
Merge pull request #1920 from umap-project/fix-overlay-null
chore: do not set overlay=null as default
2024-06-21 16:36:57 +02:00
Yohan Boniface
ebafb6d40a chore: change heading CSS size 2024-06-21 16:35:07 +02:00
Yohan Boniface
7be62f3dab fix: fix slideshow toolbar position and size
broken by c0ecc39439
2024-06-21 16:33:37 +02:00
Yohan Boniface
3037128540 fix: add icon to "edit map details" panel title 2024-06-21 15:14:27 +02:00
Yohan Boniface
36db88f5a6 fix: increase popup min-width
Since fa2bef85d3 popup are smaller,
let's try to have them as before.
2024-06-21 14:55:42 +02:00
Yohan Boniface
25f338f51d fix: also use white-space: pre-line on map description
We removed line breaks management on the JS side so to manage it
in CSS, but this CSS was only active on popup/panels for features.
Let's have a class for this, and add it to the map description to
(about panel).
2024-06-21 14:39:12 +02:00
Yohan Boniface
6f38dcf4d7 fix: this css var has been renamed elsewhere 2024-06-21 14:07:48 +02:00
Yohan Boniface
3ed548b097 chore: smaller headings in descriptions
We already have a h3 as title, both in the popup or in the panel
2024-06-21 14:05:47 +02:00
Yohan Boniface
4fc66da80c fix: use layer labelKey if any when filtering features
fix #1908
2024-06-21 13:35:06 +02:00
Yohan Boniface
5609092cc0 chore: do not set overlay=null as default
FormBuilder will break when reimporting an exported map with this
default value (at the casting to object was only made on the init,
so reimporting will override this to null again).
2024-06-21 11:39:39 +02:00
David Larlet
0edf7cc5d9
i18n 2024-06-20 10:56:04 -04:00
David Larlet
8b2610947a
Merge pull request #1917 from umap-project/1911-better-importers-styles
fix: CSS adjustments for importers
2024-06-20 09:59:40 -04:00
David Larlet
f78320d153
Merge pull request #1916 from umap-project/1913-alert-on-import
fix: display an alert if the import is successful
2024-06-20 09:59:26 -04:00
David Larlet
41abbc90d0
Merge pull request #1914 from umap-project/1912-native-radio-inputs
fix: remove custom styles for radio inputs
2024-06-20 09:59:00 -04:00
David Larlet
0a9f57d2d8
fix: CSS adjustments for importers
Fix #1911
2024-06-18 15:11:58 -04:00
David Larlet
7e6d264796
fix: display an alert if the import is successful
Fix #1913
2024-06-18 14:53:27 -04:00
David Larlet
f1b1abb38f
Merge pull request #1903 from umap-project/set-layername-from-dataset
feat: set layer name when importing from dataset
2024-06-18 14:41:02 -04:00
David Larlet
08f5debd62
fix: remove custom styles for radio inputs
Fix #1912
2024-06-18 14:38:00 -04:00
Yohan Boniface
b977d26eae feat: set layer name when importing from dataset 2024-06-17 11:54:06 +02:00
Yohan Boniface
afcaf2a07a fix: correct way to open files dialgo with ctrl+O 2024-06-17 10:46:46 +02:00
David Larlet
411452ac70
fix: allow first radio input click when second selected 2024-06-14 17:43:00 -04:00
David Larlet
a3afadb677
fix: hide importers section if none is defined 2024-06-14 17:21:09 -04:00
David Larlet
ceab5090a7
fix: explicit import paths for collectstatic hashes 2024-06-14 17:20:16 -04:00
Yohan Boniface
c144c9d958 fix: django cannot run collectstatic with circular imports in modules
alert.js was importing request.js which then imports alert.js

In the process, we moved the post to send the email out of the
alert.js file, and thus tried another pattern to communicate data
between an alert and its caller.
2024-06-14 22:05:56 +02:00
Yohan Boniface
b747b347f4 fix: dialog class should have "window" class to get propert buttons 2024-06-14 20:45:39 +02:00
Yohan Boniface
ca18c5b7df chore: move alert.html inside templates and update translations
When alert.html was in static, Django was creating a new translation
file, while we want it to just add those strings in the backend
po file.
2024-06-14 20:41:53 +02:00
Yohan Boniface
710b0cf1d9
Merge pull request #1857 from umap-project/geodatamine-plugin
Importers for custom external sources
2024-06-14 18:47:45 +02:00
Yohan Boniface
88b7e401c0
Merge pull request #1776 from umap-project/conditional-rules
feat: very minimal experimental conditional style rules
2024-06-14 18:40:37 +02:00
Yohan Boniface
ca16e5b2c9 wip: use new alert API after rebase 2024-06-14 18:40:05 +02:00
Yohan Boniface
e9f9c30639 wip: shorter labels in importer panel 2024-06-14 18:40:05 +02:00
Yohan Boniface
6f0d42d817 wip: re-center radio and checkbox inputs 2024-06-14 18:40:05 +02:00
Yohan Boniface
4ed7c45086 wip: use same label in buttons and title for "Import data"
The control says "Import data", let's keep this for now.
2024-06-14 18:40:05 +02:00
Yohan Boniface
e90ad4b9cd wip: sort themes in GeoDataMine importer 2024-06-14 18:40:05 +02:00
Yohan Boniface
4127ffb891 wip: simplify a bit input CSS height 2024-06-14 18:40:05 +02:00
Yohan Boniface
4f1eb20be9 wip: move importers css to a dedicated file and refactor 2024-06-14 18:40:05 +02:00
Yohan Boniface
017e407758 wip: refactor margin bottom management in caption title 2024-06-14 18:40:05 +02:00
Yohan Boniface
3f6940cd5b wip: make sure importers are always in the same order
Given they are loaded from an import() call, the order they are
added in IMPORTERS in asynchronous, so we cannot rely on this order
2024-06-14 18:40:05 +02:00
Yohan Boniface
c51f8ae5ce wip: close importer dialog on escape in any 2024-06-14 18:40:05 +02:00
Yohan Boniface
460843b900 wip: add icons for importers 2024-06-14 18:40:05 +02:00
Yohan Boniface
115130083d wip: make sure we do not add an invalid overpass URL 2024-06-14 18:40:05 +02:00
Yohan Boniface
a70307ea29 wip: rename presets to datasets 2024-06-14 18:40:05 +02:00
Yohan Boniface
2c9623aff6 wip: refine geodatamine importer 2024-06-14 18:40:05 +02:00
Yohan Boniface
f1901ea84c wip: add margin-bottom on select element 2024-06-14 18:40:04 +02:00
Yohan Boniface
c1ab57d952 wip: add quick help for overpass importer expressions syntax 2024-06-14 18:38:44 +02:00
Yohan Boniface
c599082eca wip: deal with multiple dialog z-index 2024-06-14 18:38:44 +02:00
Yohan Boniface
b7dd771a7f wip: prettier 2024-06-14 18:38:44 +02:00
Yohan Boniface
c3ae3b5770 wip: minimal overpass importer
cf #112
2024-06-14 18:38:44 +02:00
Yohan Boniface
43f7e6a467 feat: allow to set the new layer name at import 2024-06-14 18:38:44 +02:00
Yohan Boniface
3998a88d43 wip: use dt/dd for import formats help box 2024-06-14 18:38:43 +02:00
Yohan Boniface
b0e9bbd86c wip: smaller dialog width 2024-06-14 18:38:30 +02:00
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
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
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
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
David Larlet
b863beaec9
chore: fix tests 2024-06-13 14:13:42 -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
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
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
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
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
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
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
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
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
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