Compare commits

...

27 commits

Author SHA1 Message Date
Yohan Boniface
97ff26b6e8 fix: make that renderUI also recompute scrollWheelZoom
Some checks are pending
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
Otherwise it does not change the behaviour when changing the setting.
2024-12-05 18:39:40 +01:00
Yohan Boniface
b7649a5e47
fix: Avoid map-panning on mobile using two fingers navigation (#2340)
If scrollWheelZoom option is false we deactivate leaflet dragging
options only on mobile
2024-12-05 18:38:08 +01:00
Yohan Boniface
92431d3b83
fix: do not redraw tilelayers each time a map property is changed (#2342) 2024-12-05 18:32:47 +01:00
Yohan Boniface
20b2290d00 fix: do not redraw tilelayers each time a map property is changed 2024-12-05 18:32:05 +01:00
Yohan Boniface
f4814797d7
feat: open importers in a dialog instead of in the form (#2327)
![image](https://github.com/user-attachments/assets/bdc8d7ef-874a-419c-9f02-47aff06081f3)

cf #2302
2024-12-05 18:27:18 +01:00
Yohan Boniface
0b818e8b75
feat: add a disabled/active mode to the submit button of import panel (#2341)
cf #2302

Warning: I removed the historic `width: 100%` on all buttons, who knows
where this will break? :p

Disabled:


![image](https://github.com/user-attachments/assets/000ff44b-bd6e-485b-b27f-39b0a189bf56)

Form valid:


![image](https://github.com/user-attachments/assets/afdbd4b6-7168-4dff-b314-e6556a289369)
2024-12-05 18:04:09 +01:00
Yohan Boniface
b692cb0cd1 chore: rename Importer.isValid to Importer.canSubmit
We are not really checking the validity of the form.
2024-12-05 18:03:30 +01:00
David Larlet
1f13c6ef00 docs-users: Update importers-related tutorial 2024-12-05 18:00:41 +01:00
Yohan Boniface
a9b13c709d feat(importer): check "copy" as default action
Let's make it simpler for new comers, and advanced users will know
where to click to change the behaviour.
2024-12-05 18:00:34 +01:00
Yohan Boniface
50efbc25be feat: add a disabled/active mode to the submit button of import panel
cf #2302
2024-12-05 18:00:26 +01:00
Yohan Boniface
d99fe70e36 feat: display importers in a dialog instead of direclty in the form
The goal is to keep the form smaller, specifically to keep the
submit button visible as much as possible.
2024-12-05 17:59:03 +01:00
Yohan Boniface
d64cdae987 chore: make that Importer extends WithTemplate
Another step is needed to use this.elements instead of this.qs
2024-12-05 17:59:03 +01:00
Yohan Boniface
da86020a0b feat: add icon-magic in 16-white.svg 2024-12-05 17:59:03 +01:00
Yohan Boniface
7f3726ddd1
feat: display an image from Panoramax in OSM template when tag is defined (#2338)
![Screenshot From 2024-12-05
11-45-05](https://github.com/user-attachments/assets/97949b2f-4716-4d56-bb2e-ce481b932dcb)

I initially just wanted to work on that simple Panoramax feature, but
faced a bunch of bugs!

- one bad var remaining since whatever refactor (and no tests for this
popup template!)
- title was duplicated, since whatever refactor (and not tests for
this…)
- title text was in black on blue background
2024-12-05 17:36:07 +01:00
Yohan Boniface
2c601e483d
feat: allow to configure the default label keys per instance (#2291)
fix #2289

Let's add "nom" in OSM France and ANCT instances, then, to make users
experience smoother (a lot of imported data contains a "nom" column, and
no "name" nor "title").
2024-12-05 17:35:48 +01:00
Yohan Boniface
171aba6676
feat: add basic autocompletion on inputs expecting a field name (#2281)
Eg. the labelKey or filterKey input.
2024-12-05 17:32:27 +01:00
Yohan Boniface
b7c77b9c9f
feat: make expression persistent in the overpass importer (#2339)
In other words: fill in the "tags" input with the latest typed
expression.

Otherwise, when making tries with overpass imports, one have to type it
again and again (it's available through the autocomplete, though, but
it's not obvious and it's less friendly IMHO).
2024-12-05 17:31:14 +01:00
Yohan Boniface
82853f7ade chore: add very minimal test for OSM popup template 2024-12-05 17:29:30 +01:00
Florent Triquet
acbdfda581 fix: Avoid map-panning on mobile using two fingers navigation
If scrollWheelZoom option is false we deactivate leaflet dragging options only on mobile
2024-12-05 14:11:05 +01:00
Yohan Boniface
e012d57e5c feat: make expression persistent in the overpass importer
In other words: fill in the "tags" input with the latest
typed expression.

Otherwise, when making tries with overpass imports, one have to
type it again and again (it's available through the autocomplete,
though, but it's not obvious and it's less friendly IMHO).
2024-12-05 12:42:21 +01:00
Yohan Boniface
6a0bc9443b feat: display an image from Panoramax in OSM template when tag is defined 2024-12-05 11:57:48 +01:00
Yohan Boniface
4949fcb4a4 feat: try to guess RGB from color name when element is not in DOM
We often need to compute the text/icon constrast color, but often
the element is not yet in the DOM, so we can't get the background
easily. Let's have a fallback for that instead of trying to have
"load" events everywhere.
2024-12-05 11:53:01 +01:00
Yohan Boniface
430dede0dd fix: fix broken OSM template 2024-12-05 11:46:52 +01:00
Yohan Boniface
d9c04c7d0a fix: do not render normal popup title in OSM template 2024-12-05 11:46:26 +01:00
Yohan Boniface
1a88c11289 fix: don't show default label if another is found in features edit 2024-12-02 12:58:19 +01:00
Yohan Boniface
78d6699a81 feat: allow to configure the default label keys per instance
fix #2289
2024-12-02 12:58:19 +01:00
Yohan Boniface
4acb20f3bb feat: add basic autocompletion on inputs expecting a field name
Eg. the labelKey or filterKey input.
2024-11-19 13:59:55 +01:00
28 changed files with 331 additions and 127 deletions

View file

@ -47,7 +47,7 @@ Voici un bref passage en revu des différents imports proposés et pour finir l
## 1. Importer le contour dune commune
Cliquez sur loutil dimportation en bas de la barre de droite, puis descendez jusquau cadre « Assistants dimport ».
Cliquez sur loutil dimportation en bas de la barre de droite, puis cliquez sur le lien « Assistants dimport ».
Cliquez sur « Communes France » et sélectionnez la commune souhaitée dans une liste déroulante. Une fois la commune sélectionnée, le format est reconnu automatiquement (geojson) puis le type de calque (cliquer sur « ? » pour savoir quel choix opérer)
@ -64,7 +64,7 @@ Une fois cet import réalisé, tout est réglable : couleur de contour, de fond,
## 2. Importer les contours des départements ou des régions
Cliquez sur loutil dimportation en bas de la barre de droite, puis descendez jusquau cadre « Assistants dimport ».
Cliquez sur loutil dimportation en bas de la barre de droite, puis cliquez sur le lien « Assistants dimport ».
Cliquez sur « Contours nationaux » puis soit départements, soit régions et enfin le type de calque (voir supra lexplication). Tous les départements sont importés :
@ -72,7 +72,7 @@ Cliquez sur « Contours nationaux » puis soit départements, soit régions et
## 3. Importer un point dintérêt issu de GeoDataMine
Cliquez sur loutil dimportation en bas de la barre de droite, puis descendez jusquau cadre « Assistants dimport ».
Cliquez sur loutil dimportation en bas de la barre de droite, puis cliquez sur le lien « Assistants dimport ».
Cliquez sur « GeoDataMine (thèmes OSM) » et sélectionnez les informations souhaitées, routes, bâtiments, commerces, services publics, …
Par exemple, en sélectionnant les points deau potable de la CA du Grand Avignon, puis « Copier dans un calque »

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 MiB

After

Width:  |  Height:  |  Size: 734 KiB

View file

@ -175,11 +175,6 @@ UMAP_EXTRA_URLS = {
}
```
#### UMAP_KEEP_VERSIONS
How many datalayer versions to keep. 10 by default.
#### UMAP_DEFAULT_EDIT_STATUS
Define the map default edit status.
@ -270,6 +265,16 @@ Available importers:
- `communesfr`: download French communes boundaries, from https://geo.api.gouv.fr/
- `datasets`: define URLs you want to promote to users, with a `name` and a `format`
#### UMAP_KEEP_VERSIONS
How many datalayer versions to keep. 10 by default.
#### UMAP_LABEL_KEYS
List of properties to consider as "Feature label" (to show in popup or in browser).
UMAP_LABEL_KEYS = ["name", "title"]
#### UMAP_MAPS_PER_PAGE
How many maps to show in maps list, like search or home page.

View file

@ -273,6 +273,7 @@ UMAP_HOME_FEED = "latest"
UMAP_IMPORTERS = {}
UMAP_HOST_INFOS = {}
UMAP_PURGATORY_ROOT = "/tmp/umappurgatory"
UMAP_LABEL_KEYS = ["name", "title"]
UMAP_READONLY = env("UMAP_READONLY", default=False)
UMAP_GZIP = True

View file

@ -157,6 +157,9 @@ dt {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.grid-container.by4 {
grid-template-columns: repeat(4, minmax(0, 1fr));
}
.grid-container > * {
text-align: center;
}

View file

@ -78,8 +78,7 @@ input[type="submit"] {
border-radius: 2px;
font-weight: normal;
cursor: pointer;
padding: 7px;
width: 100%;
padding: 7px 14px;
min-height: 32px;
line-height: 32px;
border: none;
@ -92,6 +91,12 @@ input[type="submit"] {
color: var(--text-color);
border: 1px solid #1b1f20;
}
.dark .button.primary:not([disabled]),
.dark [type="button"].primary:not([disabled]) {
background-color: var(--color-brightCyan);
color: var(--color-dark);
border: 1px solid #1b1f20;
}
.dark .button:hover,
.dark [type="button"]:hover,
.dark input[type="submit"]:hover {
@ -100,6 +105,11 @@ input[type="submit"] {
.dark a {
color: var(--text-color);
}
.dark [type="button"][disabled],
.dark input[type="submit"][disabled] {
background-color: var(--color-mediumGray);
cursor: not-allowed;
}
button.flat,
[type="button"].flat,
.dark [type="button"].flat {
@ -602,3 +612,6 @@ input[type=hidden].blur + [type="button"] {
input.highlightable:not(:placeholder-shown) {
border: 1px solid var(--color-brightCyan);
}
.umap-upload [type=url] {
margin-bottom: 0;
}

View file

@ -110,6 +110,9 @@ html[dir="rtl"] .icon {
.icon-list {
background-position: var(--tile) calc(var(--tile) * 4);
}
.icon-magic {
background-position: calc(var(--tile) * 7) 0;
}
.icon-marker {
background-position: calc(var(--tile) * 3) calc(var(--tile) * 5);
}

View file

@ -1,4 +1,4 @@
<svg id="svg2" width="168" height="168" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<svg id="svg2" width="192" height="192" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<defs id="defs4">
<clipPath id="clip0_241_10857">
<rect id="rect586" width="18.05" height="19.01" fill="#fff"/>
@ -12,6 +12,9 @@
<mask id="mask0_181_11916" x="2" y="2" width="15" height="15" maskUnits="userSpaceOnUse">
<path id="path1259" d="m16.04 2.3158h-14.035v14.035h14.035z" fill="#fff"/>
</mask>
<clipPath id="clip0_2695_1939">
<rect id="rect1" width="20" height="20" fill="#fff"/>
</clipPath>
</defs>
<metadata id="metadata7">
<rdf:RDF>
@ -202,5 +205,8 @@
<path id="path6-6" d="m8.5 9.3501h-3v2.39"/>
<path id="path7-2" d="m5.5 9.3501h3v2.39"/>
</g>
<g id="g2-67" transform="translate(170.12 814.31)" clip-path="url(#clip0_2695_1939)">
<path id="path1-5" d="m8.8453 14.83c-0.28116 0.6439-1.1722 0.6439-1.4533 0l-0.73138-1.6751c-0.65086-1.4907-1.8224-2.6774-3.2837-3.326l-2.0131-0.89358c-0.64004-0.28408-0.64004-1.2152 0-1.4993l1.9502-0.86569c1.4989-0.66535 2.6914-1.8959 3.3312-3.4375l0.74086-1.7852c0.27491-0.66247 1.1902-0.66247 1.4652 0l0.74083 1.7852c0.63972 1.5416 1.8322 2.7722 3.3311 3.4375l1.9503 0.86569c0.64 0.2841 0.64 1.2152 0 1.4993l-2.0131 0.89358c-1.4613 0.64864-2.6328 1.8353-3.2837 3.326zm-5.0624-6.6444c1.9049 0.84555 3.4537 2.2354 4.3357 4.1478 0.88202-1.9124 2.4308-3.3022 4.3356-4.1478-1.9276-0.85565-3.4813-2.3132-4.3356-4.2596-0.85434 1.9463-2.4081 3.4039-4.3357 4.2596zm12.385 10.723 0.2057-0.4714c0.3667-0.8405 1.0271-1.5098 1.8511-1.8758l0.6336-0.2816c0.3428-0.1523 0.3428-0.6504 0-0.8026l-0.5981-0.2658c-0.8453-0.3755-1.5175-1.0695-1.8779-1.9386l-0.2112-0.5094c-0.1473-0.355-0.6381-0.355-0.7853 0l-0.2112 0.5094c-0.3603 0.8691-1.0326 1.5631-1.8778 1.9386l-0.5983 0.2658c-0.3427 0.1522-0.3427 0.6503 0 0.8026l0.6337 0.2816c0.8241 0.366 1.4844 1.0353 1.8511 1.8758l0.2057 0.4714c0.1505 0.3451 0.6283 0.3451 0.7789 0zm-0.8557-3.0358 0.4687-0.4655 0.459 0.4655-0.459 0.4524z" fill="#efefef"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 42 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg width="168" height="168" id="svg2" version="1.1" inkscape:version="1.4 (e7c3feb100, 2024-10-09)" sodipodi:docname="16-white.svg" inkscape:export-filename="16-white.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
<svg width="192" height="192" id="svg2" version="1.1" inkscape:version="1.4 (e7c3feb100, 2024-10-09)" sodipodi:docname="16-white.svg" inkscape:export-filename="16-white.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
<defs id="defs4">
<clipPath id="clip0_241_10857">
<rect width="18.049999" height="19.01" fill="#ffffff" id="rect586" x="0" y="0" />
@ -13,23 +13,15 @@
<rect width="18" height="12.79" fill="#ffffff" id="rect4" x="0" y="0" />
</clipPath>
<mask id="mask0_181_11916" maskUnits="userSpaceOnUse" x="2" y="2" width="15" height="15">
<path d="M 16.0401,2.3158 H 2.005 v 14.0351 h 14.0351 z" fill="#ffffff" id="path1259" />
<path d="m 16.0401,2.3158 h -14.0351 v 14.0351 h 14.0351 z" fill="#ffffff" id="path1259" />
</mask>
<clipPath id="clip0_2695_1939">
<rect width="20" height="20" fill="#ffffff" id="rect1" x="0" y="0" />
</clipPath>
</defs>
<sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="11.587678" inkscape:cx="79.049488" inkscape:cy="68.779959" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="true" inkscape:window-width="1920" inkscape:window-height="1011" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" showguides="true" inkscape:guide-bbox="true" inkscape:snap-grids="true" inkscape:snap-to-guides="true" inkscape:showpageshadow="2" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1">
<sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="14.041122" inkscape:cx="165.15774" inkscape:cy="24.998002" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="true" inkscape:window-width="1920" inkscape:window-height="1011" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" showguides="true" inkscape:guide-bbox="true" inkscape:snap-grids="true" inkscape:snap-to-guides="true" inkscape:showpageshadow="2" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1">
<inkscape:grid type="xygrid" id="grid3004" empspacing="4" visible="true" enabled="true" snapvisiblegridlinesonly="true" originx="0" originy="0" spacingy="1" spacingx="1" units="px" />
<sodipodi:guide orientation="-1,0" position="24,168" id="guide3084" inkscape:locked="false" inkscape:label="" inkscape:color="rgb(0,134,229)" />
<sodipodi:guide orientation="0,1" position="0,96" id="guide3086" inkscape:locked="false" inkscape:label="" inkscape:color="rgb(0,134,229)" />
<sodipodi:guide orientation="-1,0" position="48,168" id="guide3088" inkscape:locked="false" inkscape:label="" inkscape:color="rgb(0,134,229)" />
<sodipodi:guide orientation="0,1" position="0,72" id="guide3090" inkscape:locked="false" inkscape:label="" inkscape:color="rgb(0,134,229)" />
<sodipodi:guide orientation="-1,0" position="72,168" id="guide14621" inkscape:locked="false" inkscape:label="" inkscape:color="rgb(0,134,229)" />
<sodipodi:guide orientation="0,1" position="0,48" id="guide17864" inkscape:locked="false" />
<sodipodi:guide orientation="0,1" position="0,120" id="guide3026" inkscape:locked="false" inkscape:label="" inkscape:color="rgb(0,134,229)" />
<sodipodi:guide orientation="-1,0" position="96,168" id="guide3028" inkscape:locked="false" inkscape:label="" inkscape:color="rgb(0,134,229)" />
<sodipodi:guide position="120,168" orientation="-1,0" id="guide4869" inkscape:label="" inkscape:color="rgb(0,0,255)" inkscape:locked="false" />
<sodipodi:guide position="0,144" orientation="0,1" id="guide5766" inkscape:locked="false" inkscape:label="" inkscape:color="rgb(0,134,229)" />
<sodipodi:guide position="144,104" orientation="1,0" id="guide1" inkscape:locked="false" />
<sodipodi:guide position="0,24" orientation="0,1" id="guide5005" inkscape:label="" inkscape:locked="false" inkscape:color="rgb(0,134,229)" />
<inkscape:grid id="grid1" units="px" originx="0" originy="0" spacingx="24" spacingy="24" empcolor="#203fff" empopacity="0.85490196" color="#3f3fff" opacity="0.1254902" empspacing="1" enabled="true" visible="true" />
</sodipodi:namedview>
<metadata id="metadata7">
<rdf:RDF>
@ -40,23 +32,23 @@
</rdf:RDF>
</metadata>
<g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" transform="translate(0,-812.36218)">
<path style="fill:#f2f2f2;fill-opacity:1;stroke-width:0.25;paint-order:fill markers stroke;stroke:#999999;stroke-opacity:1" d="m 106.58891,43.849359 c -3.10089,-0.58252 -5.52944,-2.863466 -6.31937,-5.935298 -0.23482,-0.913171 -0.294235,-2.2415 -0.14177,-3.169542 0.51108,-3.110805 2.83364,-5.667956 5.86284,-6.455008 3.72982,-0.969088 7.59776,0.861664 9.2444,4.375508 0.52616,1.122793 0.76105,2.331963 0.7086,3.647677 -0.0496,1.245447 -0.28677,2.18265 -0.82249,3.250829 -1.04984,2.093266 -2.88939,3.559535 -5.24807,4.183141 -0.49134,0.129903 -0.73215,0.154443 -1.68896,0.172114 -0.81094,0.01498 -1.24691,-0.004 -1.59518,-0.06942 z m 2.43966,-5.8477 v -3.046165 h -1.02544 -1.02544 v 3.046165 3.046164 h 1.02544 1.02544 z m -0.53434,-4.563852 c 0.33094,-0.09915 0.70763,-0.444612 0.87372,-0.801282 0.4662,-1.001185 -0.2615,-2.144718 -1.36482,-2.144718 -0.44164,0 -0.73107,0.12392 -1.06527,0.456086 -0.42453,0.421956 -0.54914,0.937689 -0.37666,1.558908 0.0814,0.293275 0.60383,0.829099 0.89905,0.922151 0.28553,0.09 0.74987,0.09398 1.03398,0.0089 z" id="path6" transform="translate(0,812.36218)" />
<path style="fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:0.25;stroke-opacity:1;paint-order:fill markers stroke" d="m 106.58891,43.849359 c -3.10089,-0.58252 -5.52944,-2.863466 -6.31937,-5.935298 -0.23482,-0.913171 -0.294235,-2.2415 -0.14177,-3.169542 0.51108,-3.110805 2.83364,-5.667956 5.86284,-6.455008 3.72982,-0.969088 7.59776,0.861664 9.2444,4.375508 0.52616,1.122793 0.76105,2.331963 0.7086,3.647677 -0.0496,1.245447 -0.28677,2.18265 -0.82249,3.250829 -1.04984,2.093266 -2.88939,3.559535 -5.24807,4.183141 -0.49134,0.129903 -0.73215,0.154443 -1.68896,0.172114 -0.81094,0.01498 -1.24691,-0.004 -1.59518,-0.06942 z m 2.43966,-5.8477 v -3.046165 h -1.02544 -1.02544 v 3.046165 3.046164 h 1.02544 1.02544 z m -0.53434,-4.563852 c 0.33094,-0.09915 0.70763,-0.444612 0.87372,-0.801282 0.4662,-1.001185 -0.2615,-2.144718 -1.36482,-2.144718 -0.44164,0 -0.73107,0.12392 -1.06527,0.456086 -0.42453,0.421956 -0.54914,0.937689 -0.37666,1.558908 0.0814,0.293275 0.60383,0.829099 0.89905,0.922151 0.28553,0.09 0.74987,0.09398 1.03398,0.0089 z" id="path6" transform="translate(0,812.36218)" />
<text xml:space="preserve" style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none" x="5.7867966" y="897.80786" id="text4457"><tspan y="897.80786" x="5.7867966" sodipodi:role="line" id="tspan4459" style="font-size:40px;line-height:1.25;font-family:sans-serif"> </tspan></text>
<g id="g3001" transform="translate(-23.255701,-119.38651)">
<path style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#f2f2f2;fill-opacity:1;fill-rule:nonzero;stroke:#999999;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 35.255701,935.74851 c -4.412356,0 -8.00014,3.58778 -8.00014,8.00014 0,4.41235 3.587784,8.00014 8.00014,8.00014 4.412356,0 8.00014,-3.58779 8.00014,-8.00014 0,-4.41236 -3.587784,-8.00014 -8.00014,-8.00014 z m 0,1.00028 c 3.871916,0 6.99986,3.12794 6.99986,6.99986 0,3.87191 -3.127944,6.99986 -6.99986,6.99986 -3.871916,0 -6.999861,-3.12795 -6.999861,-6.99986 0,-3.87192 3.127945,-6.99986 6.999861,-6.99986 z" id="path3014" inkscape:connector-curvature="0" />
<g id="text3784" style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#4d4d4d;fill-opacity:1;stroke:none" transform="translate(27.255701,-100.61365)">
<path inkscape:connector-curvature="0" id="path3789" style="font-weight:bold;font-size:12px;-inkscape-font-specification:'Sans Bold';fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 9,1046.0464 H 6.6301966 v -0.3223 c 0,-0.3596 0.072207,-0.6775 0.2166302,-0.9539 0.1444174,-0.2807 0.4485749,-0.636 0.9124728,-1.0658 l 0.4201314,-0.3816 c 0.249449,-0.228 0.4310681,-0.4429 0.5448577,-0.6446 0.1181576,-0.2019 0.1772384,-0.4036 0.177243,-0.6053 -4.6e-6,-0.3071 -0.1050376,-0.5462 -0.3150985,-0.7171 -0.2100697,-0.1756 -0.5032861,-0.2632 -0.87965,-0.2632 -0.3544889,0 -0.7374207,0.075 -1.1487968,0.2237 -0.4113804,0.1446 -0.840264,0.3618 -1.2866522,0.6513 v -2.0659 c 0.5295391,-0.184 1.0131273,-0.32 1.4507661,-0.4077 0.437634,-0.088 0.8599531,-0.1317 1.2669587,-0.1317 1.0678292,0 1.8818328,0.2194 2.442012,0.6579 0.560169,0.4341 0.840256,1.0702 0.840263,1.9078 -7e-6,0.4298 -0.08535,0.8159 -0.256017,1.158 -0.170685,0.3377 -0.461713,0.7017 -0.873085,1.092 l -0.4201313,0.375 c -0.297598,0.272 -0.4923463,0.4913 -0.5842451,0.658 -0.091909,0.1622 -0.1378603,0.342 -0.1378556,0.5394 v 0.296 m -2.3698034,0.9739 H 9 v 2.342 H 6.6301966 v -2.342" sodipodi:nodetypes="ccsccccccsccccsccccccccccccc" />
<path inkscape:connector-curvature="0" id="path3789" style="font-weight:bold;font-size:12px;-inkscape-font-specification:'Sans Bold';fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="m 9,1046.0464 h -2.3698034 v -0.3223 c 0,-0.3596 0.072207,-0.6775 0.2166302,-0.9539 0.1444174,-0.2807 0.4485749,-0.636 0.9124728,-1.0658 l 0.4201314,-0.3816 c 0.249449,-0.228 0.4310681,-0.4429 0.5448577,-0.6446 0.1181576,-0.2019 0.1772384,-0.4036 0.177243,-0.6053 -4.6e-6,-0.3071 -0.1050376,-0.5462 -0.3150985,-0.7171 -0.2100697,-0.1756 -0.5032861,-0.2632 -0.87965,-0.2632 -0.3544889,0 -0.7374207,0.075 -1.1487968,0.2237 -0.4113804,0.1446 -0.840264,0.3618 -1.2866522,0.6513 v -2.0659 c 0.5295391,-0.184 1.0131273,-0.32 1.4507661,-0.4077 0.437634,-0.088 0.8599531,-0.1317 1.2669587,-0.1317 1.0678292,0 1.8818328,0.2194 2.442012,0.6579 0.560169,0.4341 0.840256,1.0702 0.840263,1.9078 -7e-6,0.4298 -0.08535,0.8159 -0.256017,1.158 -0.170685,0.3377 -0.461713,0.7017 -0.873085,1.092 l -0.4201313,0.375 c -0.297598,0.272 -0.4923463,0.4913 -0.5842451,0.658 -0.091909,0.1622 -0.1378603,0.342 -0.1378556,0.5394 v 0.296 m -2.3698034,0.9739 h 2.3698034 v 2.342 h -2.3698034 v -2.342" sodipodi:nodetypes="ccsccccccsccccsccccccccccccc" />
</g>
</g>
<path style="fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none" d="m 78,819.36214 v 2 h 12 v -2 z m 0,3 v 1 h 4 v -1 z m 5,0 v 1 h 7 v -1 z m -5,2 v 1 h 4 v -1 z m 5,0 v 1 h 7 v -1 z m -5,2 v 1 h 4 v -1 z m 5,0 v 1 h 7 v -1 z m -5,2 v 1 h 4 v -1 z m 5,0 v 1 h 7 v -1 z" id="table" inkscape:connector-curvature="0" inkscape:label="table" inkscape:export-filename="/home/ybon/Code/js/leaflet-storage/src/img/browse-data.png" inkscape:export-xdpi="89.996864" inkscape:export-ydpi="89.996864" />
<path style="fill:#f2f2f2;fill-opacity:1;fill-rule:nonzero;stroke:none" d="m 35,843.36202 v 4 h -4 v 2 h 4 v 4 h 2 v -4 h 4 v -2 h -4 v -4 z" id="rect5280" inkscape:export-filename="/home/ybon/Code/js/leaflet-storage/src/img/add-layer-grey-18.png" inkscape:export-xdpi="89.996864" inkscape:export-ydpi="89.996864" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccccccccccc" />
<path style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker:none;enable-background:accumulate" d="m 13.517525,866.362 c -2.466762,0 -4.48249,2.0158 -4.48249,4.4826 0,0.8297 0.233748,1.5964 0.63035,2.26462 l -3.66537,3.66532 1.587549,1.5876 3.66537,-3.66542 c 0.668139,0.3966 1.434831,0.6303 2.264591,0.6303 2.466762,0 4.48249,-2.0157 4.48249,-4.48242 0,-2.4668 -2.015728,-4.4826 -4.48249,-4.4826 z m 0,1.4943 c 1.659256,0 2.988326,1.329 2.988326,2.9883 0,1.6592 -1.32907,2.98832 -2.988326,2.98832 -1.659256,0 -2.988326,-1.32912 -2.988326,-2.98832 0,-1.6593 1.32907,-2.9883 2.988326,-2.9883 z m 0,1.4941 c -0.816354,0 -1.494163,0.6779 -1.494163,1.4942 0,0.8163 0.677809,1.4942 1.494163,1.4942 0.816354,0 1.494163,-0.6779 1.494163,-1.4942 0,-0.8163 -0.677809,-1.4942 -1.494163,-1.4942 z" id="path4354" inkscape:export-filename="/home/ybon/Code/js/leaflet-storage/src/img/zoom_to.png" inkscape:export-xdpi="89.996864" inkscape:export-ydpi="89.996864" inkscape:connector-curvature="0" />
<path id="path4392" d="m 37.51751,866.36205 c -2.466762,0 -4.482491,2.0157 -4.482491,4.4825 0,0.8298 0.233749,1.5964 0.630351,2.2645 L 30,876.77459 l 1.587549,1.5875 3.665369,-3.66544 c 0.668139,0.39662 1.434831,0.63042 2.264592,0.63042 2.466762,0 4.48249,-2.01572 4.48249,-4.48252 0,-2.4668 -2.015728,-4.4825 -4.48249,-4.4825 z m 0,1.4942 c 1.659256,0 2.988327,1.329 2.988327,2.9883 0,1.6593 -1.329071,2.9883 -2.988327,2.9883 -1.659256,0 -2.988327,-1.329 -2.988327,-2.9883 0,-1.6593 1.329071,-2.9883 2.988327,-2.9883 z m 0,1.4941 c -0.816355,0 -1.494164,0.6779 -1.494164,1.4942 0,0.8163 0.677809,1.4942 1.494164,1.4942 0.816355,0 1.494163,-0.6779 1.494163,-1.4942 0,-0.8163 -0.677808,-1.4942 -1.494163,-1.4942 z" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#b3b3b3;fill-opacity:1;stroke:none;stroke-width:3;marker:none;enable-background:accumulate" inkscape:connector-curvature="0" inkscape:export-filename="/home/ybon/Code/js/leaflet-storage/src/img/zoom_to-off.png" inkscape:export-xdpi="89.996864" inkscape:export-ydpi="89.996864" />
<path id="path4392" d="m 37.51751,866.36205 c -2.466762,0 -4.482491,2.0157 -4.482491,4.4825 0,0.8298 0.233749,1.5964 0.630351,2.2645 l -3.66537,3.66554 1.587549,1.5875 3.665369,-3.66544 c 0.668139,0.39662 1.434831,0.63042 2.264592,0.63042 2.466762,0 4.48249,-2.01572 4.48249,-4.48252 0,-2.4668 -2.015728,-4.4825 -4.48249,-4.4825 z m 0,1.4942 c 1.659256,0 2.988327,1.329 2.988327,2.9883 0,1.6593 -1.329071,2.9883 -2.988327,2.9883 -1.659256,0 -2.988327,-1.329 -2.988327,-2.9883 0,-1.6593 1.329071,-2.9883 2.988327,-2.9883 z m 0,1.4941 c -0.816355,0 -1.494164,0.6779 -1.494164,1.4942 0,0.8163 0.677809,1.4942 1.494164,1.4942 0.816355,0 1.494163,-0.6779 1.494163,-1.4942 0,-0.8163 -0.677808,-1.4942 -1.494163,-1.4942 z" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#b3b3b3;fill-opacity:1;stroke:none;stroke-width:3;marker:none;enable-background:accumulate" inkscape:connector-curvature="0" inkscape:export-filename="/home/ybon/Code/js/leaflet-storage/src/img/zoom_to-off.png" inkscape:export-xdpi="89.996864" inkscape:export-ydpi="89.996864" />
<path style="fill:#f2f2f2;fill-opacity:1;fill-rule:nonzero;stroke:none" d="m 54,819.36214 v 2 h 12 v -2 z m 0,3 v 1 h 4 v -1 z m 5,0 v 1 h 7 v -1 z m -5,2 v 1 h 4 v -1 z m 5,0 v 1 h 7 v -1 z m -5,2 v 1 h 4 v -1 z m 5,0 v 1 h 7 v -1 z m -5,2 v 1 h 4 v -1 z m 5,0 v 1 h 7 v -1 z" id="table-5" inkscape:connector-curvature="0" inkscape:label="table" inkscape:export-filename="/home/ybon/Code/js/leaflet-storage/src/img/browse-data.png" inkscape:export-xdpi="89.996864" inkscape:export-ydpi="89.996864" />
<g transform="translate(32,-48.000118)" style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#4d4d4d;fill-opacity:1;stroke:none" id="text3784-6" />
<path style="fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="m 63.71429,866.36213 -1.14285,1.14286 2.28571,2.28572 L 66,868.64785 Z M 62,868.07641 l -6.285714,6.28574 2.285715,2.2857 6.285719,-6.28572 z M 55.714286,874.36215 54,878.36214 l 4.000001,-1.71429 z" id="path3684" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccccccccc" />
<path style="fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="m 63.71429,866.36213 -1.14285,1.14286 2.28571,2.28572 1.14285,-1.14286 z m -1.71429,1.71428 -6.285714,6.28574 2.285715,2.2857 6.285719,-6.28572 z m -6.285714,6.28574 -1.714286,3.99999 4.000001,-1.71429 z" id="path3684" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccccccccc" />
<text xml:space="preserve" style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none" x="41.647079" y="916.79706" id="text4457-6"><tspan y="916.79706" x="41.647079" sodipodi:role="line" id="tspan4459-6" style="font-size:30.4762px;line-height:1.25;font-family:sans-serif"> </tspan></text>
<path style="fill:#b3b3b3;fill-opacity:1;stroke:none" d="m 63.71429,890.36216 -1.14285,1.1428 2.28571,2.2858 L 66,892.64786 Z M 62,892.07646 55.714286,898.36218 58,900.64788 l 6.28572,-6.2857 z m -6.285714,6.28572 -1.714286,4 4,-1.7143 z" id="path3684-2" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccccccccc" />
<path style="fill:#b3b3b3;fill-opacity:1;stroke:none" d="m 63.71429,890.36216 -1.14285,1.1428 2.28571,2.2858 1.14285,-1.1429 z m -1.71429,1.7143 -6.285714,6.28572 2.285714,2.2857 6.28572,-6.2857 z m -6.285714,6.28572 -1.714286,4 4,-1.7143 z" id="path3684-2" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccccccccc" />
<g id="g4717" transform="translate(-54.789185,-114.477)">
<path style="fill:#f2f2f2;fill-opacity:1;fill-rule:evenodd;stroke:#999999;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="m 141.26953,173.42383 -6.75586,2.67969 0.95313,6.3457 5.87109,3.12695 4.14844,-7.87305 z m -1.44726,2.48828 2.99023,1.60156 -0.5918,2.43164 -3.35742,1.50391 -1.73828,-3.81055 z" transform="translate(-1.210815,854.83918)" id="path3862" inkscape:connector-curvature="0" />
</g>
@ -82,7 +74,7 @@
<path inkscape:connector-curvature="0" id="path4353-1-6-1-3-3-9" transform="matrix(1.9000195,0,0,1.9000195,-245.02393,606.04174)" d="m 222.11328,179.64258 -1.04883,1.04883 1.58203,1.58007 -1.58203,1.58204 1.04883,1.04687 1.58203,-1.58008 1.58008,1.58008 1.04883,-1.04687 -1.58203,-1.58204 1.58203,-1.58007 -1.04883,-1.04883 -1.58008,1.58008 z" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#f2f2f2;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.81628;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
</g>
</g>
<path style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#f2f2f2;fill-opacity:1;fill-rule:evenodd;stroke:#999999;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 108.14555,816.36218 v 3.8267 H 112 v -3.8267 z m 0.51755,4.35174 -1.24591,2.31321 1.16687,0.61848 1.24404,-2.31507 z m -1.86888,3.47168 -0.27666,0.51571 h -2.42597 v 2.24408 L 100,831.00938 l 1.36261,1.3528 3.86198,-3.83417 h 2.72145 v -3.6959 l 0.015,-0.028 -0.015,-0.008 v -0.0953 h -0.17879 l -0.97303,-0.51571 z" id="path4873" inkscape:connector-curvature="0" />
<path style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#f2f2f2;fill-opacity:1;fill-rule:evenodd;stroke:#999999;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 108.14555,816.36218 v 3.8267 h 3.85445 v -3.8267 z m 0.51755,4.35174 -1.24591,2.31321 1.16687,0.61848 1.24404,-2.31507 z m -1.86888,3.47168 -0.27666,0.51571 h -2.42597 v 2.24408 l -4.09159,4.06399 1.36261,1.3528 3.86198,-3.83417 h 2.72145 v -3.6959 l 0.015,-0.028 -0.015,-0.008 v -0.0953 h -0.17879 l -0.97303,-0.51571 z" id="path4873" inkscape:connector-curvature="0" />
<g id="g4244" transform="matrix(0.51357238,-0.54309229,0.54309229,0.51357238,-518.0199,506.22551)">
<path style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#f2f2f2;fill-opacity:1;fill-rule:nonzero;stroke:#999999;stroke-width:0.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 220.49219,133.52344 c -0.33017,0.01 -0.66239,0.0456 -0.99414,0.10742 -2.22487,0.41425 -4.02666,1.95747 -4.83203,4.00976 l -0.87696,-1.8164 a 0.50004998,0.50004998 0 0 0 -0.83398,-0.11328 0.50004998,0.50004998 0 0 0 -0.0664,0.54883 l 1.45899,3.01953 a 0.50004998,0.50004998 0 0 0 0.60742,0.25586 l 2.84375,-0.94532 a 0.50028339,0.50028339 0 1 0 -0.31641,-0.94922 l -2.00195,0.66797 c 0.61312,-1.89015 2.20733,-3.32407 4.20117,-3.69531 2.24744,-0.41845 4.51458,0.59912 5.69531,2.55664 1.18073,1.95754 1.02202,4.43774 -0.39648,6.23047 -1.41851,1.79275 -3.79606,2.51535 -5.97266,1.81641 a 0.50004998,0.50004998 0 1 0 -0.30469,0.95117 c 2.57038,0.82539 5.38736,-0.0294 7.0625,-2.14649 0.4188,-0.52924 0.74532,-1.11137 0.97657,-1.7207 0.69373,-1.828 0.53599,-3.91467 -0.50977,-5.64844 -1.22005,-2.02271 -3.42908,-3.19767 -5.74023,-3.1289 z" transform="matrix(0.91921787,0.9720541,-0.9720541,0.91921787,152.1356,647.93271)" id="path4240" inkscape:connector-curvature="0" />
</g>
@ -153,53 +145,53 @@
<path id="polygon" style="fill:#f2f2f2;fill-opacity:1;fill-rule:evenodd;stroke:#999999;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" d="m 29,888.36218 v 2 h 0.927734 l -0.855468,12 h -1.072266 v 2 h 2 v -1.19922 l 8,-1.60156 v 0.80078 h 2 v -2 h -0.777344 l 1.554688,-7 h 1.222656 v -2 h -2 v 0.72656 l -9,-2.45312 v -1.27344 z" />
<path id="marker" d="m 84,936.36218 c -2.625,0 -5.25,1.70216 -6,5.1064 0,2.04256 1.5,6.12768 6,10.8936 4.5,-4.76592 6,-8.85104 6,-10.8936 -0.75,-3.40424 -3.375,-5.1064 -6,-5.1064 z m 0,2.38304 c 1.656857,0 3,1.21928 3,2.72336 0,1.50408 -1.343143,2.72344 -3,2.72344 -1.656848,0 -3,-1.21936 -3,-2.72344 0,-1.50408 1.343152,-2.72336 3,-2.72336 z" style="fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" inkscape:connector-curvature="0" />
<g transform="matrix(0.16294606,0,0,0.16295934,27.835262,912.23132)" id="settings" style="fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:1.49736;stroke-miterlimit:4;stroke-dasharray:none" class="sprite">
<path inkscape:connector-curvature="0" d="M 98.762,43.652 C 98.576,42.266 97.281,41.07 95.886,40.993 l -6.172,-0.337 c -1.395,-0.076 -2.899,-1.224 -3.341,-2.55 l -2.28,-5.518 c -0.629,-1.249 -0.379,-3.121 0.553,-4.161 l 4.122,-4.6 c 0.933,-1.042 0.962,-2.77 0.066,-3.842 l -8.813,-8.813 c -1.073,-0.897 -2.803,-0.867 -3.845,0.065 l -4.598,4.122 c -1.039,0.934 -2.915,1.182 -4.161,0.551 l -5.521,-2.279 c -1.324,-0.442 -2.472,-1.945 -2.549,-3.34 L 59.01,4.121 C 58.933,2.725 57.738,1.43 56.351,1.243 c 0,0 -3.252,-0.44 -6.248,-0.44 -2.991,0 -6.243,0.44 -6.243,0.44 -1.386,0.188 -2.582,1.483 -2.658,2.878 l -0.338,6.17 c -0.076,1.396 -1.224,2.898 -2.551,3.34 l -5.517,2.279 c -1.249,0.631 -3.122,0.382 -4.161,-0.551 l -4.601,-4.122 c -1.042,-0.932 -2.769,-0.962 -3.842,-0.065 l -8.813,8.813 c -0.897,1.073 -0.867,2.801 0.066,3.842 l 4.122,4.6 c 0.933,1.041 1.182,2.913 0.551,4.161 l -2.279,5.518 c -0.442,1.326 -1.946,2.474 -3.34,2.55 l -6.17,0.337 c -1.396,0.077 -2.691,1.272 -2.879,2.659 0,0 -0.439,3.253 -0.439,6.243 0,2.99 0.44,6.24 0.44,6.24 0.188,1.389 1.483,2.582 2.879,2.659 l 6.169,0.339 c 1.396,0.075 2.898,1.225 3.341,2.549 l 2.278,5.517 c 0.631,1.248 0.381,3.122 -0.551,4.163 l -4.122,4.598 c -0.933,1.042 -0.963,2.771 -0.066,3.845 l 8.814,8.813 c 1.073,0.896 2.801,0.866 3.842,-0.066 l 4.6,-4.122 c 1.041,-0.932 2.913,-1.182 4.161,-0.553 l 5.517,2.28 c 1.327,0.441 2.475,1.946 2.55,3.343 l 0.338,6.168 c 0.076,1.395 1.272,2.692 2.658,2.88 0,0 3.252,0.439 6.244,0.439 2.996,0 6.25,-0.439 6.25,-0.439 1.385,-0.188 2.58,-1.485 2.657,-2.88 L 59.347,89.5 c 0.077,-1.396 1.225,-2.901 2.551,-3.343 l 5.517,-2.28 c 1.248,-0.629 3.122,-0.379 4.163,0.553 l 4.598,4.122 c 1.042,0.933 2.771,0.964 3.843,0.067 l 8.815,-8.814 C 89.73,78.732 89.7,77.002 88.768,75.96 l -4.122,-4.598 c -0.932,-1.041 -1.182,-2.915 -0.553,-4.163 l 2.28,-5.517 c 0.441,-1.324 1.946,-2.474 3.341,-2.549 l 6.172,-0.339 c 1.395,-0.077 2.692,-1.271 2.876,-2.659 0,0 0.441,-3.25 0.441,-6.24 0,-2.99 -0.441,-6.243 -0.441,-6.243 z M 50.104,62.361 c -6.886,0 -12.468,-5.585 -12.468,-12.467 0,-6.885 5.582,-12.467 12.468,-12.467 6.89,0 12.475,5.582 12.475,12.467 -10e-4,6.882 -5.586,12.467 -12.475,12.467 z" id="path27812" style="fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:1.49736;stroke-miterlimit:4;stroke-dasharray:none" />
<path inkscape:connector-curvature="0" d="m 98.762,43.652 c -0.186,-1.386 -1.481,-2.582 -2.876,-2.659 l -6.172,-0.337 c -1.395,-0.076 -2.899,-1.224 -3.341,-2.55 l -2.28,-5.518 c -0.629,-1.249 -0.379,-3.121 0.553,-4.161 l 4.122,-4.6 c 0.933,-1.042 0.962,-2.77 0.066,-3.842 l -8.813,-8.813 c -1.073,-0.897 -2.803,-0.867 -3.845,0.065 l -4.598,4.122 c -1.039,0.934 -2.915,1.182 -4.161,0.551 l -5.521,-2.279 c -1.324,-0.442 -2.472,-1.945 -2.549,-3.34 l -0.337,-6.17 c -0.077,-1.396 -1.272,-2.691 -2.659,-2.878 0,0 -3.252,-0.44 -6.248,-0.44 -2.991,0 -6.243,0.44 -6.243,0.44 -1.386,0.188 -2.582,1.483 -2.658,2.878 l -0.338,6.17 c -0.076,1.396 -1.224,2.898 -2.551,3.34 l -5.517,2.279 c -1.249,0.631 -3.122,0.382 -4.161,-0.551 l -4.601,-4.122 c -1.042,-0.932 -2.769,-0.962 -3.842,-0.065 l -8.813,8.813 c -0.897,1.073 -0.867,2.801 0.066,3.842 l 4.122,4.6 c 0.933,1.041 1.182,2.913 0.551,4.161 l -2.279,5.518 c -0.442,1.326 -1.946,2.474 -3.34,2.55 l -6.17,0.337 c -1.396,0.077 -2.691,1.272 -2.879,2.659 0,0 -0.439,3.253 -0.439,6.243 0,2.99 0.44,6.24 0.44,6.24 0.188,1.389 1.483,2.582 2.879,2.659 l 6.169,0.339 c 1.396,0.075 2.898,1.225 3.341,2.549 l 2.278,5.517 c 0.631,1.248 0.381,3.122 -0.551,4.163 l -4.122,4.598 c -0.933,1.042 -0.963,2.771 -0.066,3.845 l 8.814,8.813 c 1.073,0.896 2.801,0.866 3.842,-0.066 l 4.6,-4.122 c 1.041,-0.932 2.913,-1.182 4.161,-0.553 l 5.517,2.28 c 1.327,0.441 2.475,1.946 2.55,3.343 l 0.338,6.168 c 0.076,1.395 1.272,2.692 2.658,2.88 0,0 3.252,0.439 6.244,0.439 2.996,0 6.25,-0.439 6.25,-0.439 1.385,-0.188 2.58,-1.485 2.657,-2.88 l 0.337,-6.168 c 0.077,-1.396 1.225,-2.901 2.551,-3.343 l 5.517,-2.28 c 1.248,-0.629 3.122,-0.379 4.163,0.553 l 4.598,4.122 c 1.042,0.933 2.771,0.964 3.843,0.067 l 8.815,-8.814 c 0.896,-1.073 0.866,-2.803 -0.066,-3.845 l -4.122,-4.598 c -0.932,-1.041 -1.182,-2.915 -0.553,-4.163 l 2.28,-5.517 c 0.441,-1.324 1.946,-2.474 3.341,-2.549 l 6.172,-0.339 c 1.395,-0.077 2.692,-1.271 2.876,-2.659 0,0 0.441,-3.25 0.441,-6.24 0,-2.99 -0.441,-6.243 -0.441,-6.243 z m -48.658,18.709 c -6.886,0 -12.468,-5.585 -12.468,-12.467 0,-6.885 5.582,-12.467 12.468,-12.467 6.89,0 12.475,5.582 12.475,12.467 -10e-4,6.882 -5.586,12.467 -12.475,12.467 z" id="path27812" style="fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:1.49736;stroke-miterlimit:4;stroke-dasharray:none" />
</g>
<g clip-path="url(#clip0_241_10857)" id="undo" transform="matrix(0.71300568,0,0,0.66260978,53.493751,938.13028)" style="fill:none;stroke:#f2f2f2;stroke-width:1.45488;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1">
<path d="M 1.07001,4.41003 H 10.49 c 0.9234,-0.0066 1.8391,0.16957 2.6941,0.5184 0.8551,0.34883 1.6327,0.8634 2.288,1.51407 0.6553,0.65067 1.1754,1.42458 1.5303,2.27713 0.3549,0.85256 0.5376,1.76697 0.5376,2.69037 0.0067,0.9277 -0.1712,1.8474 -0.5231,2.7058 -0.3519,0.8583 -0.871,1.6382 -1.527,2.2941 -0.656,0.656 -1.4358,1.1751 -2.2941,1.527 -0.8584,0.352 -1.7781,0.5298 -2.7058,0.5231 H 1.07001" stroke="#f2f2f2" stroke-miterlimit="10" id="path580" style="fill:none;stroke:#f2f2f2;stroke-width:1.45486;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
<path d="M 4.75002,8.44998 0.710022,4.39998 4.75002,0.349976" stroke="#f2f2f2" stroke-miterlimit="10" id="path582" style="fill:none;stroke:#f2f2f2;stroke-width:1.45486;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
<path d="m 1.07001,4.41003 h 9.41999 c 0.9234,-0.0066 1.8391,0.16957 2.6941,0.5184 0.8551,0.34883 1.6327,0.8634 2.288,1.51407 0.6553,0.65067 1.1754,1.42458 1.5303,2.27713 0.3549,0.85256 0.5376,1.76697 0.5376,2.69037 0.0067,0.9277 -0.1712,1.8474 -0.5231,2.7058 -0.3519,0.8583 -0.871,1.6382 -1.527,2.2941 -0.656,0.656 -1.4358,1.1751 -2.2941,1.527 -0.8584,0.352 -1.7781,0.5298 -2.7058,0.5231 h -9.41999" stroke="#f2f2f2" stroke-miterlimit="10" id="path580" style="fill:none;stroke:#f2f2f2;stroke-width:1.45486;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
<path d="m 4.75002,8.44998 -4.039998,-4.05 4.039998,-4.050004" stroke="#f2f2f2" stroke-miterlimit="10" id="path582" style="fill:none;stroke:#f2f2f2;stroke-width:1.45486;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" />
</g>
<g id="g1" transform="translate(144,-24.00004)">
<path d="m 9,849.93721 v 4.04997 c 0,0.20708 0.167895,0.375 0.375,0.375 h 5.25 c 0.207075,0 0.375,-0.16792 0.375,-0.375 v -4.04997 c 0,-0.20708 -0.167925,-0.375 -0.375,-0.375 h -5.25 c -0.207105,0 -0.375,0.16792 -0.375,0.375 z" stroke="#f2f2f2" id="path438" style="fill:none;stroke:#999999;stroke-width:0.999997;stroke-opacity:1" />
<path d="M 15.21255,842.36218 H 6.375 c -0.207105,0 -0.375,0.1679 -0.375,0.37499 v 11.24993 c 0,0.20708 0.167895,0.375 0.375,0.375 h 11.25 c 0.207075,0 0.375,-0.16792 0.375,-0.375 v -8.67664 c 0,-0.0953 -0.0363,-0.18697 -0.1014,-0.25648 l -2.41245,-2.57327 c -0.07095,-0.0756 -0.16995,-0.11853 -0.2736,-0.11853 z" stroke="#f2f2f2" id="save" style="fill:none;stroke:#999999;stroke-width:0.999997;stroke-opacity:1" />
<path d="m 15.21255,842.36218 h -8.83755 c -0.207105,0 -0.375,0.1679 -0.375,0.37499 v 11.24993 c 0,0.20708 0.167895,0.375 0.375,0.375 h 11.25 c 0.207075,0 0.375,-0.16792 0.375,-0.375 v -8.67664 c 0,-0.0953 -0.0363,-0.18697 -0.1014,-0.25648 l -2.41245,-2.57327 c -0.07095,-0.0756 -0.16995,-0.11853 -0.2736,-0.11853 z" stroke="#f2f2f2" id="save" style="fill:none;stroke:#999999;stroke-width:0.999997;stroke-opacity:1" />
</g>
<path id="close" style="color:#000000;fill:#f2f2f2;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.188976;stroke-dasharray:none;stroke-opacity:1" d="m 32.353516,820.00866 -0.707032,0.70704 3.646485,3.64648 -3.646485,3.64648 0.707032,0.70704 L 36,825.06921 l 3.646484,3.64649 0.707032,-0.70704 -3.646485,-3.64648 3.646485,-3.64648 -0.707032,-0.70704 L 36,823.65515 Z" />
<path id="close" style="color:#000000;fill:#f2f2f2;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.188976;stroke-dasharray:none;stroke-opacity:1" d="m 32.353516,820.00866 -0.707032,0.70704 3.646485,3.64648 -3.646485,3.64648 0.707032,0.70704 3.646484,-3.64649 3.646484,3.64649 0.707032,-0.70704 -3.646485,-3.64648 3.646485,-3.64648 -0.707032,-0.70704 -3.646484,3.64649 z" />
<g clip-path="url(#clip0_576_2753)" id="eye" transform="translate(51,843.33202)">
<path d="m 9,1 c 3.06,0 6.26,2.74 7.6,4.03 C 15.26,6.33 12.06,9.06 9,9.06 5.94,9.06 2.74,6.33 1.4,5.03 2.74,3.74 5.93,1 9,1 Z M 9,0 C 4.5,0 0,5.03 0,5.03 c 0,0 4.5,5.03 9,5.03 4.5,0 9,-5.03 9,-5.03 C 18,5.03 13.5,0 9,0 Z" fill="#f2f2f2" id="path1" />
<path d="m 9,1 c 3.06,0 6.26,2.74 7.6,4.03 -1.34,1.3 -4.54,4.03 -7.6,4.03 -3.06,0 -6.26,-2.73 -7.6,-4.03 1.34,-1.29 4.53,-4.03 7.6,-4.03 z m 0,-1 c -4.5,0 -9,5.03 -9,5.03 0,0 4.5,5.03 9,5.03 4.5,0 9,-5.03 9,-5.03 0,0 -4.5,-5.03 -9,-5.03 z" fill="#f2f2f2" id="path1" />
<path d="m 8.99999,3.64001 c 0.77,0 1.39001,0.63 1.39001,1.39 0,0.76 -0.63001,1.39 -1.39001,1.39 -0.76,0 -1.39,-0.63 -1.39,-1.39 0,-0.76 0.63,-1.39 1.39,-1.39 z m 0,-1 c -1.32,0 -2.39,1.07 -2.39,2.39 0,1.32 1.07,2.39 2.39,2.39 1.32001,0 2.39001,-1.07 2.39001,-2.39 0,-1.32 -1.07,-2.39 -2.39001,-2.39 z" fill="#f2f2f2" id="path2" />
</g>
<g clip-path="url(#clip0_588_799)" id="eye-closed" transform="translate(75,841.96201)">
<path d="m 9,2.36001 c 3.06,0 6.26,2.74 7.6,4.03 -1.34,1.3 -4.54,4.02999 -7.6,4.02999 -3.06,0 -6.26,-2.72999 -7.6,-4.01999 1.34,-1.3 4.54,-4.03 7.6,-4.03 m 0,-1 c -4.5,-0.01 -9,5.03 -9,5.03 0,0 4.5,5.02999 9,5.02999 4.5,0 9,-5.02999 9,-5.02999 0,0 -4.5,-5.03 -9,-5.03 z" fill="#f2f2f2" id="path1-6" style="fill:#b3b3b3;fill-opacity:1" />
<path d="m 8.99999,5 c 0.77,0 1.39001,0.63 1.39001,1.39 0,0.76 -0.63001,1.39 -1.39001,1.39 -0.76,0 -1.39,-0.63 -1.39,-1.39 0,-0.76 0.63,-1.39 1.39,-1.39 z m 0,-1 c -1.32,0 -2.39,1.07 -2.39,2.39 0,1.32 1.07,2.39 2.39,2.39 C 10.32,8.78 11.39,7.71 11.39,6.39 11.39,5.07 10.32,4 8.99999,4 Z" fill="#f2f2f2" id="path2-7" style="fill:#b3b3b3;fill-opacity:1" />
<path d="M 16.8,0.400024 1.19995,12.4" stroke="#f2f2f2" stroke-miterlimit="10" id="path3" />
<path d="M 16.8,0.400024 1.19995,12.4" stroke="#f2f2f2" stroke-miterlimit="10" id="path4" style="stroke:#b3b3b3;stroke-opacity:1" />
<path d="m 8.99999,5 c 0.77,0 1.39001,0.63 1.39001,1.39 0,0.76 -0.63001,1.39 -1.39001,1.39 -0.76,0 -1.39,-0.63 -1.39,-1.39 0,-0.76 0.63,-1.39 1.39,-1.39 z m 0,-1 c -1.32,0 -2.39,1.07 -2.39,2.39 0,1.32 1.07,2.39 2.39,2.39 1.32001,0 2.39001,-1.07 2.39001,-2.39 0,-1.32 -1.07,-2.39 -2.39001,-2.39 z" fill="#f2f2f2" id="path2-7" style="fill:#b3b3b3;fill-opacity:1" />
<path d="m 16.8,0.400024 -15.60005,11.999976" stroke="#f2f2f2" stroke-miterlimit="10" id="path3" />
<path d="m 16.8,0.400024 -15.60005,11.999976" stroke="#f2f2f2" stroke-miterlimit="10" id="path4" style="stroke:#b3b3b3;stroke-opacity:1" />
</g>
<g id="g2" transform="translate(144)">
<path d="m 9,849.93721 v 4.04997 c 0,0.20708 0.167895,0.375 0.375,0.375 h 5.25 c 0.207075,0 0.375,-0.16792 0.375,-0.375 v -4.04997 c 0,-0.20708 -0.167925,-0.375 -0.375,-0.375 h -5.25 c -0.207105,0 -0.375,0.16792 -0.375,0.375 z" stroke="#f2f2f2" id="path438-6" style="fill:none;stroke:#42ece6;stroke-width:0.999997;stroke-opacity:1" />
<path d="M 15.21255,842.36218 H 6.375 c -0.207105,0 -0.375,0.1679 -0.375,0.37499 v 11.24993 c 0,0.20708 0.167895,0.375 0.375,0.375 h 11.25 c 0.207075,0 0.375,-0.16792 0.375,-0.375 v -8.67664 c 0,-0.0953 -0.0363,-0.18697 -0.1014,-0.25648 l -2.41245,-2.57327 c -0.07095,-0.0756 -0.16995,-0.11853 -0.2736,-0.11853 z" stroke="#f2f2f2" id="save-7" style="fill:none;stroke:#42ece6;stroke-width:0.999997;stroke-opacity:1" />
<path d="m 15.21255,842.36218 h -8.83755 c -0.207105,0 -0.375,0.1679 -0.375,0.37499 v 11.24993 c 0,0.20708 0.167895,0.375 0.375,0.375 h 11.25 c 0.207075,0 0.375,-0.16792 0.375,-0.375 v -8.67664 c 0,-0.0953 -0.0363,-0.18697 -0.1014,-0.25648 l -2.41245,-2.57327 c -0.07095,-0.0756 -0.16995,-0.11853 -0.2736,-0.11853 z" stroke="#f2f2f2" id="save-7" style="fill:none;stroke:#42ece6;stroke-width:0.999997;stroke-opacity:1" />
</g>
<path style="fill:#f2f2f2;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.177;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="m 156,875.36218 6,-6 h -12 z" id="arrow-down" inkscape:connector-curvature="0" sodipodi:nodetypes="cccc" />
<path style="fill:#f2f2f2;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.177;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="m 159,896.36218 -6,-6 v 12 z" id="arrow-right" inkscape:connector-curvature="0" sodipodi:nodetypes="cccc" />
<path id="permissions" class="sprite" d="m 151.39636,940.36205 c -2.24289,-0.005 -4.05758,1.79327 -4.06262,4.00014 0.005,2.21175 1.81973,3.9966 4.06262,4.00014 1.49552,-0.002 2.79821,-0.80916 3.50023,-2.00007 h 1.64589 l 1.31254,-1.27088 1.00005,0.95837 0.95837,-0.93753 0.97921,0.95838 1.00005,-0.95838 0.97921,0.95838 1.7084,-1.6459 c 0.24596,-0.25014 0.25203,-0.43892 0,-0.68752 l -1.39588,-1.37504 h -8.16683 c -0.69828,-1.20226 -2.01522,-2.00317 -3.52088,-2.00007 z m -1.77089,2.91689 c 0.58953,-0.003 1.05806,0.47235 1.06254,1.06254 -0.004,0.58196 -0.47273,1.05714 -1.06254,1.06253 -0.59953,-0.006 -1.08889,-0.48057 -1.08338,-1.06253 -0.005,-0.59019 0.48385,-1.06537 1.08338,-1.06254 z" fill="#f2f2f2" stroke="#999999" stroke-width="0.166673" />
<path id="import" class="sprite" d="m 156.0004,912.44554 c -4.37271,0 -7.91753,3.54481 -7.91753,7.91753 0,4.37272 3.54482,7.91752 7.91753,7.91752 4.37272,0 7.91752,-3.5448 7.91752,-7.91752 0,-4.37272 -3.5448,-7.91753 -7.91752,-7.91753 z m 0,3.29893 4.6186,4.6186 h -3.29893 v 3.95876 h -2.63909 v -3.95876 h -3.29893 z" fill="#f2f2f2" stroke="#999999" stroke-width="0.164949" />
<g id="tilelayers" transform="matrix(2.5261037,0,0,2.5463653,48.310583,954.88883)" style="stroke-width:0.993545">
<path d="m 25.978244,7.8843707 h 0.03307 V 7.8512977 4.3049501 4.2718771 h -0.03307 -3.713453 -0.03307 v 0.033073 3.5463476 0.033073 h 0.03307 z M 21.999543,3.7253064 h 4.243946 c 0.06157,0 0.120623,0.024461 0.164173,0.068001 0.04352,0.04354 0.068,0.1025948 0.068,0.1641713 v 4.2439425 c 0,0.061569 -0.02447,0.1206236 -0.068,0.164174 -0.04355,0.04355 -0.102605,0.067998 -0.164173,0.067998 h -4.243946 c -0.06158,0 -0.120628,-0.024448 -0.164171,-0.067998 -0.04354,-0.04355 -0.068,-0.1026054 -0.068,-0.164174 V 3.9574787 c 0,-0.061577 0.02446,-0.1206315 0.068,-0.1641713 0.04354,-0.04354 0.102595,-0.068001 0.164171,-0.068001 z" fill="#f2f2f2" stroke="#999999" stroke-width="0.0657188" id="path1257" />
<path d="m 25.978244,7.8843707 h 0.03307 v -0.033073 -3.5463476 -0.033073 h -0.03307 -3.713453 -0.03307 v 0.033073 3.5463476 0.033073 h 0.03307 z m -3.978701,-4.1590643 h 4.243946 c 0.06157,0 0.120623,0.024461 0.164173,0.068001 0.04352,0.04354 0.068,0.1025948 0.068,0.1641713 v 4.2439425 c 0,0.061569 -0.02447,0.1206236 -0.068,0.164174 -0.04355,0.04355 -0.102605,0.067998 -0.164173,0.067998 h -4.243946 c -0.06158,0 -0.120628,-0.024448 -0.164171,-0.067998 -0.04354,-0.04355 -0.068,-0.1026054 -0.068,-0.164174 v -4.2439425 c 0,-0.061577 0.02446,-0.1206315 0.068,-0.1641713 0.04354,-0.04354 0.102595,-0.068001 0.164171,-0.068001 z" fill="#f2f2f2" stroke="#999999" stroke-width="0.0657188" id="path1257" />
<g mask="url(#mask0_181_11916)" id="g1284" transform="matrix(0.2645833,0,0,0.2645833,20.108331,2.1166664)" style="stroke-width:0.993545">
<path d="M 16.0401,2.3158 H 2.005 v 14.0351 h 14.0351 z" fill="#d5ecbe" id="path1262" style="stroke-width:0.992312" />
<path d="M 2.37597,3.42857 C 2.64371,3.11619 2.99113,2.88224 3.38126,2.75161 3.7714,2.62098 4.18964,2.59855 4.59151,2.68672 c 0.32391,0.15649 0.58536,0.41794 0.74185,0.74185 0.37093,0.72181 0,1.26316 0,2.21554 C 5.25316,7.36842 6.33587,7.72933 6.06519,9.33334 5.98499,9.90476 5.72434,10.7769 5.33336,10.807 4.71181,10.8672 4.39101,8.80201 3.11782,8.59148 c -0.39097,-0.06015 -0.47117,0.11028 -0.74185,0 -1.05263,-0.401 -1.523811,-3.65915 0,-5.16291 z" fill="#e9daab" id="path1264" style="stroke-width:0.992312" />
<path d="M 7.1779,16.3509 C 5.42352,14.6266 5.01249,14.5965 5.01249,14.1353 4.85209,13.1328 6.75685,12.8421 7.22803,11.178 7.55886,10.005 6.75685,9.61404 6.48617,7.48873 6.32577,6.2356 6.08517,4.27068 7.22803,3.05765 8.37089,1.84462 10.3659,1.88472 11.6591,2.3158 c 1.0647,0.38986 1.9867,1.09245 2.6451,2.01558 0.6584,0.92314 1.0223,2.02371 1.0441,3.15735 0,1.24311 -0.6817,1.65413 -0.7318,3.68927 0.0605,0.7372 0.0605,1.4782 0,2.2155 -0.1546,1.1225 -0.6763,2.1624 -1.4837,2.9574 C 11.629,17.6942 9.22302,18.0451 7.90973,17.0927 7.75936,16.9825 7.83956,17.0426 7.1779,16.3509 Z" fill="#bcd8af" id="path1266" style="stroke-width:0.992312" />
<path d="m 16.0401,2.3158 h -14.0351 v 14.0351 h 14.0351 z" fill="#d5ecbe" id="path1262" style="stroke-width:0.992312" />
<path d="m 2.37597,3.42857 c 0.26774,-0.31238 0.61516,-0.54633 1.00529,-0.67696 0.39014,-0.13063 0.80838,-0.15306 1.21025,-0.06489 0.32391,0.15649 0.58536,0.41794 0.74185,0.74185 0.37093,0.72181 0,1.26316 0,2.21554 -0.0802,1.72431 1.00251,2.08522 0.73183,3.68923 -0.0802,0.57142 -0.34085,1.44356 -0.73183,1.47366 -0.62155,0.0602 -0.94235,-2.00499 -2.21554,-2.21552 -0.39097,-0.06015 -0.47117,0.11028 -0.74185,0 -1.05263,-0.401 -1.523811,-3.65915 0,-5.16291 z" fill="#e9daab" id="path1264" style="stroke-width:0.992312" />
<path d="m 7.1779,16.3509 c -1.75438,-1.7243 -2.16541,-1.7544 -2.16541,-2.2156 -0.1604,-1.0025 1.74436,-1.2932 2.21554,-2.9573 0.33083,-1.173 -0.47118,-1.56396 -0.74186,-3.68927 -0.1604,-1.25313 -0.401,-3.21805 0.74186,-4.43108 1.14286,-1.21303 3.13787,-1.17293 4.43107,-0.74185 1.0647,0.38986 1.9867,1.09245 2.6451,2.01558 0.6584,0.92314 1.0223,2.02371 1.0441,3.15735 0,1.24311 -0.6817,1.65413 -0.7318,3.68927 0.0605,0.7372 0.0605,1.4782 0,2.2155 -0.1546,1.1225 -0.6763,2.1624 -1.4837,2.9574 -1.5038,1.3433 -3.90978,1.6942 -5.22307,0.7418 -0.15037,-0.1102 -0.07017,-0.0501 -0.73183,-0.7418 z" fill="#bcd8af" id="path1266" style="stroke-width:0.992312" />
<path d="m 14.1956,9.33332 c -0.4303,0.37544 -0.6966,0.90438 -0.7419,1.47368 0,0.1203 0,1.213 0.7419,1.4837 0.2937,0.0714 0.6033,0.036 0.8733,-0.0999 0.27,-0.1359 0.4828,-0.3635 0.6004,-0.6419 0.066,-0.2429 0.066,-0.499 0,-0.7419 -0.1604,-1.38345 0.3007,-2.00501 0,-2.21553 -0.3008,-0.21053 -1.0928,0.35087 -1.4737,0.74185 z" fill="#ebe9d6" id="path1268" style="stroke-width:0.992312" />
<path d="m 14.1955,15.2381 c 0.2874,0.0123 0.5733,-0.0483 0.831,-0.1763 0.2577,-0.1279 0.4788,-0.3191 0.6427,-0.5555 0.2005,-0.3308 0.4411,-1.0526 0,-1.4837 -0.2062,-0.1739 -0.4672,-0.2693 -0.7369,-0.2693 -0.2696,0 -0.5306,0.0954 -0.7368,0.2693 0,0 -1.4837,0.7418 -1.4837,1.4837 0,0.7418 1.4837,0.7318 1.4837,0.7318 z" fill="#f3ecdd" id="path1270" style="stroke-width:0.992312" />
<path d="M 7.90976,1.57394 C 6.01502,2.89725 5.6441,3.86968 5.69422,4.53134 c 0.0802,1.0025 1.09273,1.37343 1.48371,3.00752 0.19537,0.72559 0.19537,1.48994 0,2.21553 -0.58145,1.85461 -2.51629,1.88471 -3.69925,3.68921 -0.6679,1.11 -0.92678,2.4186 -0.73183,3.6993" stroke="#dfa170" stroke-width="0.745158" stroke-miterlimit="10" id="path1272" style="fill:none" />
<path d="m 7.90976,1.57394 c -1.89474,1.32331 -2.26566,2.29574 -2.21554,2.9574 0.0802,1.0025 1.09273,1.37343 1.48371,3.00752 0.19537,0.72559 0.19537,1.48994 0,2.21553 -0.58145,1.85461 -2.51629,1.88471 -3.69925,3.68921 -0.6679,1.11 -0.92678,2.4186 -0.73183,3.6993" stroke="#dfa170" stroke-width="0.745158" stroke-miterlimit="10" id="path1272" style="fill:none" />
<path d="m 5.33325,1.94485 c 1.5732,1.61744 2.60339,3.68483 2.94737,5.91479 0.13097,0.73271 0.13097,1.48283 0,2.21556 -0.33083,1.7042 -1.30326,2.3559 -2.21554,4.4311 -0.31515,0.713 -0.56025,1.455 -0.73183,2.2155" stroke="#e0859b" stroke-width="0.248386" stroke-miterlimit="10" id="path1274" style="fill:none" />
<path d="m 10.4963,14.5063 c -1.84462,-1.0025 -1.7143,-5.53387 0,-6.64665 0.5915,-0.38096 1.1328,-0.21053 1.4837,-0.74186 0.5213,-0.802 -0.411,-1.69423 0,-2.95739 0.2306,-0.72181 0.8922,-1.52381 1.4737,-1.47369 1.0025,0.0802 2.1253,2.5564 1.4737,4.43108 -0.5314,1.56391 -1.9148,1.51379 -2.2156,3.00751 -0.3408,1.6441 1.2732,2.6266 0.7419,3.6892 -0.3395,0.4362 -0.8182,0.7428 -1.3564,0.8687 -0.5382,0.1259 -1.1033,0.0634 -1.601,-0.1769 z" fill="#ade3ea" id="path1276" style="stroke-width:0.992312" />
<path d="M 7.90971,2.31578 C 7.51873,3.22806 8.12023,4.46115 8.65156,4.53132 9.18289,4.6015 9.31322,3.87969 10.1353,3.78947 c 0.401,0 0.5213,0.1203 0.7318,0 0.5013,-0.27068 0.6115,-1.62406 0,-2.21554 C 10.6274,1.41713 10.3579,1.31164 10.0755,1.26409 9.79306,1.21654 9.50385,1.22797 9.22606,1.29765 8.94826,1.36734 8.6879,1.49377 8.46135,1.66899 8.23481,1.84421 8.04699,2.06443 7.90971,2.31578 Z" fill="#748ec2" id="path1278" style="stroke-width:0.992312" />
<path d="M 10.1354,5.27317 C 9.82458,5.57392 9.25315,6.1253 9.3935,6.74686 c 0.09023,0.401 0.45113,0.78195 0.7419,0.74185 0.2907,-0.0401 0.2907,-0.57143 0.7318,-0.74185 0.4411,-0.17043 0.5113,0.11027 0.7418,0 0.5314,-0.24061 0.6116,-1.92482 0,-2.21554 -0.6115,-0.29073 -1.2431,0.4812 -1.4736,0.74185 z" fill="#f3ecdd" id="path1280" style="stroke-width:0.992312" />
<path d="M 3.47861,3.78948 C 3.74929,3.62908 4.79189,4.33083 4.96232,5.27319 5.13275,6.21555 4.14027,7.58898 3.47861,7.48873 3.1966,7.37627 2.96599,7.16372 2.83095,6.8918 2.69592,6.61988 2.66595,6.30769 2.74678,6.01504 3.01746,5.46367 4.20042,5.57394 4.22047,5.28321 4.24052,4.99249 3.70919,5.01254 3.47861,4.53133 c -0.1203,-0.27067 -0.14035,-0.65162 0,-0.74185 z" fill="#cfd7c8" id="path1282" style="stroke-width:0.992312" />
<path d="m 7.90971,2.31578 c -0.39098,0.91228 0.21052,2.14537 0.74185,2.21554 0.53133,0.07018 0.66166,-0.65163 1.48374,-0.74185 0.401,0 0.5213,0.1203 0.7318,0 0.5013,-0.27068 0.6115,-1.62406 0,-2.21554 -0.2397,-0.1568 -0.5092,-0.26229 -0.7916,-0.30984 -0.28244,-0.04755 -0.57165,-0.03612 -0.84944,0.03356 -0.2778,0.06969 -0.53816,0.19612 -0.76471,0.37134 -0.22654,0.17522 -0.41436,0.39544 -0.55164,0.64679 z" fill="#748ec2" id="path1278" style="stroke-width:0.992312" />
<path d="m 10.1354,5.27317 c -0.31082,0.30075 -0.88225,0.85213 -0.7419,1.47369 0.09023,0.401 0.45113,0.78195 0.7419,0.74185 0.2907,-0.0401 0.2907,-0.57143 0.7318,-0.74185 0.4411,-0.17043 0.5113,0.11027 0.7418,0 0.5314,-0.24061 0.6116,-1.92482 0,-2.21554 -0.6115,-0.29073 -1.2431,0.4812 -1.4736,0.74185 z" fill="#f3ecdd" id="path1280" style="stroke-width:0.992312" />
<path d="m 3.47861,3.78948 c 0.27068,-0.1604 1.31328,0.54135 1.48371,1.48371 0.17043,0.94236 -0.82205,2.31579 -1.48371,2.21554 -0.28201,-0.11246 -0.51262,-0.32501 -0.64766,-0.59693 -0.13503,-0.27192 -0.165,-0.58411 -0.08417,-0.87676 0.27068,-0.55137 1.45364,-0.4411 1.47369,-0.73183 0.02005,-0.29072 -0.51128,-0.27067 -0.74186,-0.75188 -0.1203,-0.27067 -0.14035,-0.65162 0,-0.74185 z" fill="#cfd7c8" id="path1282" style="stroke-width:0.992312" />
</g>
<path d="m 24.352274,6.3088036 h 0.03307 V 6.2757306 2.7293857 2.6963127 h -0.03307 -3.713451 -0.03307 v 0.033073 3.5463449 0.033073 h 0.03307 z M 20.373578,2.1497393 h 4.24394 c 0.06157,0 0.120624,0.024461 0.164174,0.068002 0.04355,0.043541 0.068,0.102595 0.068,0.1641723 v 4.2439399 c 0,0.061569 -0.02445,0.1206236 -0.068,0.164174 -0.04355,0.04355 -0.102605,0.067998 -0.164174,0.067998 h -4.24394 c -0.06158,0 -0.120631,-0.024447 -0.164172,-0.067998 -0.04354,-0.04355 -0.068,-0.1026054 -0.068,-0.164174 V 2.3819136 c 0,-0.061577 0.02446,-0.1206315 0.068,-0.1641723 0.04354,-0.043541 0.102595,-0.068002 0.164172,-0.068002 z" fill="#f2f2f2" stroke="#999999" stroke-width="0.0657188" id="path1286" />
<path d="m 24.352274,6.3088036 h 0.03307 v -0.033073 -3.5463449 -0.033073 h -0.03307 -3.713451 -0.03307 v 0.033073 3.5463449 0.033073 h 0.03307 z m -3.978696,-4.1590643 h 4.24394 c 0.06157,0 0.120624,0.024461 0.164174,0.068002 0.04355,0.043541 0.068,0.102595 0.068,0.1641723 v 4.2439399 c 0,0.061569 -0.02445,0.1206236 -0.068,0.164174 -0.04355,0.04355 -0.102605,0.067998 -0.164174,0.067998 h -4.24394 c -0.06158,0 -0.120631,-0.024447 -0.164172,-0.067998 -0.04354,-0.04355 -0.068,-0.1026054 -0.068,-0.164174 v -4.2439399 c 0,-0.061577 0.02446,-0.1206315 0.068,-0.1641723 0.04354,-0.043541 0.102595,-0.068002 0.164172,-0.068002 z" fill="#f2f2f2" stroke="#999999" stroke-width="0.0657188" id="path1286" />
</g>
<path style="color:#000000;fill:#f2f2f2;fill-rule:evenodd;fill-opacity:1;stroke:#999999;stroke-opacity:1;stroke-width:0.25;stroke-dasharray:none" d="m 133.73437,963.36133 -4.73437,4.73437 5.05078,4.6836 1.35938,-1.4668 -3.52735,-3.26953 3.26563,-3.26563 z" id="path1-67" />
<path style="color:#000000;fill:#f2f2f2;fill-opacity:1;fill-rule:evenodd;stroke:#999999;stroke-width:0.25;stroke-dasharray:none;stroke-opacity:1" d="m 133.73437,963.36133 -4.73437,4.73437 5.05078,4.6836 1.35938,-1.4668 -3.52735,-3.26953 3.26563,-3.26563 z" id="path1-67" />
<path fill-rule="evenodd" clip-rule="evenodd" d="m 87.166638,966.62162 -3.166579,-2.99638 -3.166613,2.99638 -0.833375,-0.78858 3.4333,-3.24873 c 0.312979,-0.29613 0.82041,-0.29613 1.133389,0 l 3.43324,3.24873 z m -6.333275,3.48122 3.166626,2.99639 3.166649,-2.99639 0.833362,0.78859 -3.433322,3.24872 c -0.312968,0.29608 -0.820411,0.29608 -1.133378,0 l -3.4333,-3.24872 z" fill="#efefef" id="path1-675" style="stroke-width:0.999996" />
<path style="fill:#efefef;fill-opacity:1;stroke-width:0.999996" d="m 63.166637,974.36218 -3.166626,-2.99639 -3.166649,2.99639 -0.833362,-0.78859 3.433322,-3.24872 c 0.312968,-0.29608 0.820411,-0.29608 1.133378,0 l 3.4333,3.24872 z" id="path5" />
<path style="fill:#efefef;fill-opacity:1;stroke-width:0.999996" d="m 56.000071,963.15076 3.43324,3.24873 c 0.312979,0.29613 0.82041,0.29613 1.133389,0 l 3.4333,-3.24873 -0.833375,-0.78858 -3.166613,2.99638 -3.166579,-2.99638 z" id="path1-675-2" />
@ -208,7 +200,7 @@
<path style="fill:#f2f2f2;stroke:#999999;stroke-width:0.25;paint-order:fill markers stroke" d="m 8.1902877,37.423896 c -0.4872187,-0.174113 -0.7923051,-0.442073 -0.9946703,-0.873627 l -0.1907982,-0.406887 -1.3702708,-0.0034 c -1.4982701,-0.0037 -1.5910875,-0.03214 -1.5406237,-0.47225 l 0.026557,-0.23161 1.4211632,-0.02255 1.4211632,-0.02255 0.1982698,-0.389502 c 0.347892,-0.683434 0.8634941,-1.009111 1.592299,-1.005764 0.7177082,0.0033 1.3415151,0.432422 1.6290831,1.120669 l 0.116359,0.278485 h 4.65745 c 4.520341,0 4.659962,0.0047 4.742759,0.159402 0.1159,0.216562 0.107667,0.300926 -0.04419,0.452784 -0.114657,0.114657 -0.660626,0.129501 -4.763204,0.129501 h -4.633703 l -0.104975,0.290304 c -0.152574,0.421935 -0.6274874,0.844474 -1.1103021,0.987854 -0.4962156,0.147361 -0.6614998,0.148792 -1.0523644,0.0091 z m 0.9689602,-0.845129 c 0.6980003,-0.331223 0.6980003,-1.377155 0,-1.708378 -0.3515556,-0.166824 -0.4925823,-0.168492 -0.8270409,-0.0098 -0.3376099,0.160207 -0.5444962,0.513326 -0.5444962,0.929363 0,0.368008 0.1600657,0.606145 0.5356626,0.796928 0.3157622,0.16039 0.4841923,0.158752 0.8358745,-0.0081 z" id="path8" transform="translate(0,812.36218)" />
<path style="fill:#f2f2f2;stroke:#999999;stroke-width:0.25;paint-order:fill markers stroke" d="m 12.773494,42.243521 c -0.4045,-0.187277 -0.732456,-0.526846 -0.902897,-0.934868 l -0.128748,-0.308213 -3.8106837,-0.02143 -3.8106834,-0.02142 -0.026557,-0.23161 c -0.055311,-0.482381 -0.1677415,-0.468805 3.8892984,-0.469606 l 3.7189457,-7.33e-4 0.21287,-0.431917 c 0.651632,-1.322166 2.472575,-1.284611 3.125651,0.06446 l 0.178591,0.36892 h 2.297219 c 2.258426,0 2.298803,0.003 2.391007,0.175244 0.06808,0.127207 0.06936,0.228859 0.0047,0.370843 l -0.08912,0.1956 h -2.305381 -2.30538 l -0.15493,0.350241 c -0.387132,0.875164 -1.437261,1.286451 -2.283867,0.894485 z m 1.063202,-0.700358 c 0.378023,-0.157949 0.544298,-0.425794 0.541165,-0.871741 -0.004,-0.573585 -0.363385,-0.908772 -0.974299,-0.908772 -0.312041,0 -0.40386,0.04292 -0.649922,0.303826 -0.257768,0.273313 -0.282484,0.339859 -0.246104,0.662621 0.04524,0.401361 0.228194,0.651219 0.595596,0.813394 0.317179,0.140006 0.399909,0.140082 0.733564,6.68e-4 z" id="path9" transform="translate(0,812.36218)" />
<path style="color:#000000;fill:#f2f2f2;fill-opacity:1;fill-rule:evenodd;stroke:#999999;stroke-width:0.25;stroke-dasharray:none;stroke-opacity:1" d="m 154.67579,963.53902 4.73437,4.73437 -5.05078,4.6836 -1.35938,-1.4668 3.52735,-3.26953 -3.26563,-3.26563 z" id="path1-67-5" />
<path id="copy" style="fill:#f2f2f2;paint-order:fill markers stroke;fill-opacity:1" d="m 58,914.36218 v 3.5 h 4 v 4 h 3.5 v -7.5 z m -4,4 v 7.5 h 7.5 v -7.5 z" />
<path id="copy" style="fill:#f2f2f2;fill-opacity:1;paint-order:fill markers stroke" d="m 58,914.36218 v 3.5 h 4 v 4 h 3.5 v -7.5 z m -4,4 v 7.5 h 7.5 v -7.5 z" />
<g id="g1-5" transform="translate(0.1,0.1)">
<g id="g24">
<path d="m 12,912.36218 c -4.4182692,0 -8,3.58172 -8,8 0.00463,1.61557 0.4982915,3.19189 1.4160156,4.52148 0.1980248,0.28729 0.4146342,0.56131 0.6484375,0.82032 1.5128357,1.68659 3.6698868,2.65261 5.9355469,2.6582 2.266949,-0.006 4.424914,-0.97357 5.9375,-2.66211 0.23535,-0.26077 0.45327,-0.53676 0.652344,-0.82617 0.913769,-1.32754 1.405284,-2.9001 1.410156,-4.51172 0,-4.41828 -3.58173,-8 -8,-8 z m -5.3242188,12.50586 c 1.3285496,-1.56088 3.274489,-2.46104 5.3242188,-2.46289 2.050412,10e-4 3.997179,0.90149 5.326172,2.46289 0,0 -0.0035,-0.003 0.0059,0.006 0,0 -0.537098,0.5762 -0.839844,0.82812 -0.175326,0.14821 -0.35784,0.2877 -0.546874,0.41797 -0.06626,0.0467 -0.133328,0.0923 -0.201172,0.13672 -0.244804,0.15763 -0.499205,0.29983 -0.761719,0.42578 -0.931874,0.44366 -1.950332,0.67577 -2.982422,0.67969 -0.618083,-0.005 -1.232807,-0.0915 -1.828125,-0.25781 -0.6753225,-0.18416 -1.3192066,-0.46858 -1.9101562,-0.84375 -0.0685,-0.0444 -0.1362192,-0.09 -0.203125,-0.13672 -0.00521,-0.004 -0.010422,-0.008 -0.015625,-0.0117 -0.1876607,-0.12974 -0.3688672,-0.26858 -0.5429688,-0.41602 -0.2997188,-0.24977 -0.5780329,-0.52416 -0.8320313,-0.82031 m -0.5917968,-0.81445 c -0.6976631,-1.10814 -1.0705109,-2.38976 -1.0761719,-3.69922 0,-3.86599 3.1340146,-7 7,-7 l -4.1e-5,-1.6e-4 c 3.865985,0 7,3.13401 7,7 -0.0054,1.30234 -0.374061,2.57734 -1.064453,3.68164 -1.516341,-1.67935 -3.672913,-2.63806 -5.935547,-2.63867 -2.2612709,0.008 -4.4133749,0.97341 -5.9238281,2.65625" style="fill:#f2f2f2;stroke:#999999;stroke-width:0.2;paint-order:fill markers stroke" id="path24" sodipodi:nodetypes="scccccccsccccccccccccccccccccccc" />
@ -224,5 +216,8 @@
<path d="m 8.5,9.3501 h -3 v 2.39" stroke="#323737" stroke-width="0.7" stroke-linecap="round" stroke-linejoin="round" id="path6-6" style="stroke:#999999;stroke-opacity:1" />
<path d="m 5.5,9.3501 h 3 v 2.39" stroke="#323737" stroke-width="0.7" stroke-linecap="round" stroke-linejoin="round" id="path7-2" style="stroke:#999999;stroke-opacity:1" />
</g>
<g clip-path="url(#clip0_2695_1939)" id="g2-67" transform="translate(170.11621,814.31159)">
<path d="m 8.84533,14.8298 c -0.28116,0.6439 -1.1722,0.6439 -1.45333,0 l -0.73138,-1.6751 c -0.65086,-1.4907 -1.82238,-2.6774 -3.2837,-3.32604 l -2.0131,-0.89358 c -0.64004,-0.28408 -0.64004,-1.21518 0,-1.49928 l 1.95022,-0.86569 c 1.4989,-0.66535 2.69143,-1.89594 3.33118,-3.43751 l 0.74086,-1.78516 c 0.27491,-0.662471 1.19025,-0.662472 1.46517,0 l 0.74083,1.78517 c 0.63972,1.54156 1.83222,2.77215 3.33112,3.4375 l 1.9503,0.86569 c 0.64,0.2841 0.64,1.2152 0,1.49928 l -2.0131,0.89358 c -1.4613,0.64864 -2.6328,1.83534 -3.28374,3.32604 z m -5.06236,-6.64435 c 1.90486,0.84555 3.45371,2.23535 4.33568,4.14775 0.88202,-1.9124 2.43085,-3.3022 4.33565,-4.14775 -1.9276,-0.85565 -3.4813,-2.31323 -4.33564,-4.25955 -0.85434,1.94633 -2.4081,3.4039 -4.33569,4.25955 z m 12.38483,10.72295 0.2057,-0.4714 c 0.3667,-0.8405 1.0271,-1.5098 1.8511,-1.8758 l 0.6336,-0.2816 c 0.3428,-0.1523 0.3428,-0.6504 0,-0.8026 l -0.5981,-0.2658 c -0.8453,-0.3755 -1.5175,-1.0695 -1.8779,-1.9386 l -0.2112,-0.5094 c -0.1473,-0.355 -0.6381,-0.355 -0.7853,0 l -0.2112,0.5094 c -0.3603,0.8691 -1.0326,1.5631 -1.8778,1.9386 l -0.5983,0.2658 c -0.3427,0.1522 -0.3427,0.6503 0,0.8026 l 0.6337,0.2816 c 0.8241,0.366 1.4844,1.0353 1.8511,1.8758 l 0.2057,0.4714 c 0.1505,0.3451 0.6283,0.3451 0.7789,0 z m -0.8557,-3.0358 0.4687,-0.4655 0.459,0.4655 -0.459,0.4524 z" fill="#efefef" id="path1-5" />
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 74 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 43 KiB

View file

@ -165,7 +165,9 @@ class Feature {
}
getSlug() {
return this.properties[this._umap.getProperty('slugKey') || 'name'] || ''
return (
this.properties[this._umap.getProperty('slugKey') || U.DEFAULT_LABEL_KEY] || ''
)
}
getPermalink() {
@ -234,15 +236,23 @@ class Feature {
container.appendChild(builder.build())
const properties = []
let labelKeyFound = undefined
for (const property of this.datalayer._propertiesIndex) {
if (['name', 'description'].includes(property)) {
if (!labelKeyFound && U.LABEL_KEYS.includes(property)) {
labelKeyFound = property
continue
}
if (property === 'description') {
continue
}
properties.push([`properties.${property}`, { label: property }])
}
// We always want name and description for now (properties management to come)
properties.unshift('properties.description')
properties.unshift('properties.name')
if (!labelKeyFound) {
labelKeyFound = U.DEFAULT_LABEL_KEY
}
properties.unshift([`properties.${labelKeyFound}`, { label: labelKeyFound }])
builder = new U.FormBuilder(this, properties, {
id: 'umap-feature-properties',
})
@ -255,7 +265,7 @@ class Feature {
this.getAdvancedEditActions(advancedActions)
const onLoad = this._umap.editPanel.open({ content: container })
onLoad.then(() => {
builder.helpers['properties.name'].input.focus()
builder.helpers[`properties.${labelKeyFound}`].input.focus()
})
this._umap.editedFeature = this
if (!this.ui.isOnScreen(this._umap._leafletMap.getBounds())) this.zoomTo(event)
@ -316,19 +326,21 @@ class Feature {
endEdit() {}
getDisplayName(fallback) {
const key = this.getOption('labelKey') || 'name'
getDisplayName() {
const keys = U.LABEL_KEYS.slice() // Copy.
const labelKey = this.getOption('labelKey')
// Variables mode.
if (Utils.hasVar(key)) {
return Utils.greedyTemplate(key, this.extendedProperties())
if (labelKey) {
if (Utils.hasVar(labelKey)) {
return Utils.greedyTemplate(labelKey, this.extendedProperties())
}
// Simple mode.
return (
this.properties[key] ||
this.properties.title ||
fallback ||
this.datalayer.getName()
)
keys.unshift(labelKey)
}
for (const key of keys) {
const value = this.properties[key]
if (value) return value
}
return this.datalayer.getName()
}
hasPopupFooter() {

View file

@ -289,7 +289,7 @@ export class DataLayer extends ServerStored {
reindex() {
const features = Object.values(this._features)
Utils.sortFeatures(features, this._umap.getProperty('sortKey'), U.lang)
this.sortFeatures(features)
this._index = features.map((feature) => stamp(feature))
}
@ -428,6 +428,10 @@ export class DataLayer extends ServerStored {
if (idx !== -1) this._propertiesIndex.splice(idx, 1)
}
allProperties() {
return this._propertiesIndex
}
sortedValues(property) {
return Object.values(this._features)
.map((feature) => feature.properties[property])
@ -446,6 +450,11 @@ export class DataLayer extends ServerStored {
}
}
sortFeatures(collection) {
const sortKeys = this._umap.getProperty('sortKey') || U.DEFAULT_LABEL_KEY
return Utils.sortFeatures(collection, sortKeys, U.lang)
}
makeFeatures(geojson = {}, sync = true) {
if (geojson.type === 'Feature' || geojson.coordinates) {
geojson = [geojson]
@ -454,7 +463,7 @@ export class DataLayer extends ServerStored {
? geojson
: geojson.features || geojson.geometries
if (!collection) return
Utils.sortFeatures(collection, this._umap.getProperty('sortKey'), U.lang)
this.sortFeatures(collection)
for (const feature of collection) {
this.makeFeature(feature, sync)
}

View file

@ -1,5 +1,5 @@
import { uMapAlert as Alert } from '../components/alerts/alert.js'
import { AjaxAutocomplete, AjaxAutocompleteMultiple } from './autocomplete.js'
import { AjaxAutocomplete, AjaxAutocompleteMultiple, AutocompleteDatalist } from './autocomplete.js'
import Help from './help.js'
import { ServerRequest } from './request.js'
import { SCHEMA } from './schema.js'
@ -17,6 +17,7 @@ window.U = {
Alert,
AjaxAutocomplete,
AjaxAutocompleteMultiple,
AutocompleteDatalist,
Help,
Icon,
LAYER_TYPES,

View file

@ -6,17 +6,14 @@ import Dialog from './ui/dialog.js'
import * as Utils from './utils.js'
const TEMPLATE = `
<div class="umap-upload">
<h3><i class="icon icon-16 icon-upload"></i><span>${translate('Import data')}</span></h3>
<fieldset class="formbox">
<legend class="counter">${translate('Choose data')}</legend>
<input type="file" multiple autofocus onchange />
<input class="highlightable" type="url" placeholder="${translate('Provide an URL here')}" onchange />
<textarea onchange placeholder="${translate('Paste your data here')}"></textarea>
<div class="importers" hidden>
<h4>${translate('Import helpers:')}</h4>
<ul class="grid-container">
</ul>
</div>
<input class="highlightable" type="url" placeholder="${translate('Provide an URL here')}" onchange />
<button class="flat importers" hidden data-ref="importersButton"><i class="icon icon-16 icon-magic"></i>${translate('Import helpers')}</button>
</fieldset>
<fieldset class="formbox">
<legend class="counter" data-help="importFormats">${translate(
@ -36,28 +33,40 @@ const TEMPLATE = `
<fieldset id="import-mode" class="formbox">
<legend class="counter" data-help="importMode">${translate('Choose import mode')}</legend>
<label>
<input type="radio" name="action" value="copy" />
<input type="radio" name="action" value="copy" checked onchange />
${translate('Copy into the layer')}
</label>
<label>
<input type="radio" name="action" value="link" />
<input type="radio" name="action" value="link" onchange />
${translate('Link to the layer as remote data')}
</label>
</fieldset>
<input type="button" class="button" name="submit" value="${translate('Import data')}" />
<input type="button" class="button primary" name="submit" value="${translate('Import data')}" disabled />
</div>
`
export default class Importer {
const GRID_TEMPLATE = `
<div>
<h3><i class="icon icon-16 icon-magic"></i>${translate('Import helpers')}</h3>
<p>${translate('Import helpers will fill the URL field for you.')}</p>
<ul class="grid-container by4" data-ref="grid"></ul>
</div>
`
export default class Importer extends Utils.WithTemplate {
constructor(umap) {
super()
this._umap = umap
this.TYPES = ['geojson', 'csv', 'gpx', 'kml', 'osm', 'georss', 'umap']
this.IMPORTERS = []
this.loadImporters()
this.dialog = new Dialog()
this.dialog = new Dialog({ className: 'importers dark' })
}
loadImporters() {
for (const [name, config] of Object.entries(this._umap.properties.importers || {})) {
for (const [name, config] of Object.entries(
this._umap.properties.importers || {}
)) {
const register = (mod) => {
this.IMPORTERS.push(new mod.Importer(this._umap, config))
}
@ -112,6 +121,11 @@ export default class Importer {
return this.qs('textarea').value
}
set raw(value) {
this.qs('textarea').value = value
this.onChange()
}
get clear() {
return Boolean(this.qs('[name=clear]').checked)
}
@ -144,20 +158,26 @@ export default class Importer {
)
}
build() {
this.container = DomUtil.create('div', 'umap-upload')
this.container.innerHTML = TEMPLATE
if (this.IMPORTERS.length) {
const parent = this.container.querySelector('.importers ul')
showImporters() {
if (!this.IMPORTERS.length) return
const [element, { grid }] = Utils.loadTemplateWithRefs(GRID_TEMPLATE)
for (const plugin of this.IMPORTERS.sort((a, b) => (a.id > b.id ? 1 : -1))) {
L.DomUtil.createButton(
plugin.id,
DomUtil.element({ tagName: 'li', parent }),
plugin.name,
() => plugin.open(this)
const button = Utils.loadTemplate(
`<li><button type="button" class="${plugin.id}">${plugin.name}</button></li>`
)
button.addEventListener('click', () => plugin.open(this))
grid.appendChild(button)
}
this.qs('.importers').toggleAttribute('hidden', false)
this.dialog.open({ template: element, cancel: false, accept: false })
}
build() {
this.container = this.loadTemplate(TEMPLATE)
if (this.IMPORTERS.length) {
// TODO use this.elements instead of this.qs
const button = this.qs('[data-ref=importersButton]')
button.addEventListener('click', () => this.showImporters())
button.toggleAttribute('hidden', false)
}
for (const type of this.TYPES) {
DomUtil.element({
@ -168,7 +188,7 @@ export default class Importer {
})
}
this._umap.help.parse(this.container)
DomEvent.on(this.qs('[name=submit]'), 'click', this.submit, this)
this.qs('[name=submit]').addEventListener('click', () => this.submit())
DomEvent.on(this.qs('[type=file]'), 'change', this.onFileChange, this)
for (const element of this.container.querySelectorAll('[onchange]')) {
DomEvent.on(element, 'change', this.onChange, this)
@ -183,6 +203,7 @@ export default class Importer {
)
this.qs('[name=layer-name]').toggleAttribute('hidden', Boolean(this.layerId))
this.qs('#clear').toggleAttribute('hidden', !this.layerId)
this.qs('[name=submit').toggleAttribute('disabled', !this.canSubmit())
}
onFileChange(e) {
@ -204,6 +225,7 @@ export default class Importer {
this.url = null
this.format = undefined
this.layerName = null
this.raw = null
const layerSelect = this.qs('[name="layer-id"]')
layerSelect.innerHTML = ''
this._umap.eachDataLayerReverse((datalayer) => {
@ -236,6 +258,17 @@ export default class Importer {
this.qs('[type=file]').showPicker()
}
canSubmit() {
if (!this.format) return false
const hasFiles = Boolean(this.files.length)
const hasRaw = Boolean(this.raw)
const hasUrl = Boolean(this.url)
const hasAction = Boolean(this.action)
if (!hasFiles && !hasRaw && !hasUrl) return false
if (this.url) return hasAction
return true
}
submit() {
let hasErrors
if (this.format === 'umap') {

View file

@ -53,11 +53,15 @@ export class Importer {
'https://photon.komoot.io/api?q={q}&layer=county&layer=city&layer=state'
this.id = 'overpass'
this.boundaryChoice = null
this.expression = null
}
async open(importer) {
const container = DomUtil.create('div')
container.innerHTML = TEMPLATE
if (this.expression) {
container.querySelector('[name=tags]').value = this.expression
}
this.autocomplete = new Autocomplete(container.querySelector('#area'), {
url: this.searchUrl,
placeholder: translate(
@ -80,6 +84,7 @@ export class Importer {
Alert.error(translate('Expression is empty'))
return
}
this.expression = form.tags
let tags = form.tags
if (!tags.startsWith('[')) tags = `[${tags}]`
let area = '{south},{west},{north},{east}'

View file

@ -96,8 +96,6 @@ const ControlsMixin = {
this._controls.more = new U.MoreControls()
this._controls.scale = L.control.scale()
this._controls.permanentCredit = new U.PermanentCreditsControl(this)
if (this.options.scrollWheelZoom) this.scrollWheelZoom.enable()
else this.scrollWheelZoom.disable()
this._umap.drop = new U.DropControl(this)
this._controls.tilelayers = new U.TileLayerControl(this)
},
@ -279,12 +277,18 @@ export const LeafletMap = BaseMap.extend({
this.initControls()
// Needs locate control and hash to exist
this.initCenter()
this.initTileLayers()
this.renderUI()
},
renderUI: function () {
setOptions(this, this._umap.properties)
this.initTileLayers()
if (this.options.scrollWheelZoom) {
this.scrollWheelZoom.enable()
} else {
this.scrollWheelZoom.disable()
this.options.dragging = !L.Browser.mobile
}
// Needs tilelayer to exist for minimap
this.renderControls()
this.handleLimitBounds()

View file

@ -115,7 +115,9 @@ class Table extends TitleMixin(PopupTemplate) {
const table = document.createElement('table')
for (const key in feature.properties) {
if (typeof feature.properties[key] === 'object' || key === 'name') continue
if (typeof feature.properties[key] === 'object' || U.LABEL_KEYS.includes(key)) {
continue
}
table.appendChild(this.makeRow(feature, key))
}
return table
@ -150,6 +152,19 @@ class GeoRSSLink extends PopupTemplate {
}
class OSM extends TitleMixin(PopupTemplate) {
renderTitle(feature) {
const title = DomUtil.add('h3', 'popup-title')
const color = feature.getPreviewColor()
title.style.backgroundColor = color
const iconUrl = feature.getDynamicOption('iconUrl')
const icon = Icon.makeElement(iconUrl, title)
DomUtil.addClass(icon, 'icon')
Icon.setContrast(icon, title, iconUrl, color)
if (DomUtil.contrastedColor(title, color)) title.style.color = 'white'
DomUtil.add('span', '', title, this.getName(feature))
return title
}
getName(feature) {
const props = feature.properties
const locale = getLocale()
@ -160,15 +175,6 @@ class OSM extends TitleMixin(PopupTemplate) {
renderBody(feature) {
const props = feature.properties
const body = document.createElement('div')
const title = DomUtil.add('h3', 'popup-title', container)
const color = feature.getPreviewColor()
title.style.backgroundColor = color
const iconUrl = feature.getDynamicOption('iconUrl')
const icon = Icon.makeElement(iconUrl, title)
DomUtil.addClass(icon, 'icon')
Icon.setContrast(icon, title, iconUrl, color)
if (DomUtil.contrastedColor(title, color)) title.style.color = 'white'
DomUtil.add('span', '', title, this.getName(feature))
const street = props['addr:street']
if (street) {
const row = DomUtil.add('address', 'address', body)
@ -205,6 +211,13 @@ class OSM extends TitleMixin(PopupTemplate) {
Utils.loadTemplate(`<div><a href="mailto:${email}">${email}</a></div>`)
)
}
if (props.panoramax) {
body.appendChild(
Utils.loadTemplate(
`<div><img src="https://api.panoramax.xyz/api/pictures/${props.panoramax}/sd.jpg" /></div>`
)
)
}
const id = props['@id'] || props.id
if (id) {
body.appendChild(

View file

@ -75,7 +75,7 @@ const FeatureMixin = {
resetTooltip: function () {
if (!this.feature.hasGeom()) return
const displayName = this.feature.getDisplayName(null)
const displayName = this.feature.getDisplayName()
let showLabel = this.feature.getOption('showLabel')
const oldLabelHover = this.feature.getOption('labelHover')

View file

@ -105,7 +105,7 @@ export default class TableEditor extends WithTemplate {
resetProperties() {
this.properties = this.datalayer._propertiesIndex
if (this.properties.length === 0) {
this.properties = ['name', 'description']
this.properties = [U.DEFAULT_LABEL_KEY, 'description']
}
}

View file

@ -71,6 +71,10 @@ export default class Umap extends ServerStored {
// To be used in javascript APIs
if (geojson.properties.lang) U.lang = geojson.properties.lang
// Make it available to utils, without needing a reference to `Umap`.
U.LABEL_KEYS = geojson.properties.defaultLabelKeys || []
U.DEFAULT_LABEL_KEY = U.LABEL_KEYS[0] || 'name'
this.setPropertiesFromQueryString()
// Needed for actions labels
@ -684,7 +688,7 @@ export default class Umap extends ServerStored {
}
allProperties() {
return [].concat(...this.datalayersIndex.map((dl) => dl._propertiesIndex))
return [].concat(...this.datalayersIndex.map((dl) => dl.allProperties()))
}
sortedValues(property) {

View file

@ -292,7 +292,7 @@ export function naturalSort(a, b, lang) {
}
export function sortFeatures(features, sortKey, lang) {
const sortKeys = (sortKey || 'name').split(',')
const sortKeys = sortKey.split(',')
const sort = (a, b, i) => {
let sortKey = sortKeys[i]

View file

@ -170,22 +170,43 @@ L.DomUtil.contrastWCAG21 = (rgb) => {
const contrast = (whiteLum + 0.05) / (lum + 0.05)
return contrast > 3 ? 1 : 0
}
L.DomUtil.colorNameToHex = (str) => {
const ctx = document.createElement('canvas').getContext('2d')
ctx.fillStyle = str
return ctx.fillStyle
}
L.DomUtil.hexToRGB = (hex) => {
return hex
.replace(
/^#?([a-f\d])([a-f\d])([a-f\d])$/i,
(m, r, g, b) => `#${r}${r}${g}${g}${b}${b}`
)
.substring(1)
.match(/.{2}/g)
.map((x) => Number.parseInt(x, 16))
}
const _CACHE_CONSTRAST = {}
L.DomUtil.contrastedColor = (el, bgcolor) => {
// Return 0 for black and 1 for white
// bgcolor is a human color, it can be a any keyword (purple…)
if (typeof _CACHE_CONSTRAST[bgcolor] !== 'undefined') return _CACHE_CONSTRAST[bgcolor]
let out = 0
let rgb = window.getComputedStyle(el).getPropertyValue('background-color')
rgb = L.DomUtil.RGBRegex.exec(rgb)
if (!rgb || rgb.length !== 4) return out
if (rgb && rgb.length === 4) {
rgb = [
Number.parseInt(rgb[1], 10),
Number.parseInt(rgb[2], 10),
Number.parseInt(rgb[3], 10),
]
out = L.DomUtil.contrastWCAG21(rgb)
} else {
// The element may not yet be added to the DOM, so let's try
// another way
const hex = L.DomUtil.colorNameToHex(bgcolor)
rgb = L.DomUtil.hexToRGB(hex)
}
if (!rgb) return 1
const out = L.DomUtil.contrastWCAG21(rgb)
if (bgcolor) _CACHE_CONSTRAST[bgcolor] = out
return out
}

View file

@ -448,6 +448,17 @@ L.FormBuilder.BlurInput.include({
},
})
// Adds an autocomplete using all available user defined properties
L.FormBuilder.PropertyInput = L.FormBuilder.BlurInput.extend({
build: function () {
L.FormBuilder.BlurInput.prototype.build.call(this)
const autocomplete = new U.AutocompleteDatalist(this.input)
// Will be used on Umap and DataLayer
const properties = this.builder.obj.allProperties()
autocomplete.suggestions = properties
},
})
L.FormBuilder.IconUrl = L.FormBuilder.BlurInput.extend({
type: () => 'hidden',
@ -1110,10 +1121,11 @@ U.FormBuilder = L.FormBuilder.extend({
},
customHandlers: {
sortKey: 'BlurInput',
sortKey: 'PropertyInput',
easing: 'Switch',
facetKey: 'BlurInput',
slugKey: 'BlurInput',
facetKey: 'PropertyInput',
slugKey: 'PropertyInput',
labelKey: 'PropertyInput',
},
computeDefaultOptions: function () {

View file

@ -15,7 +15,12 @@ DATALAYER_DATA = {
"features": [
{
"type": "Feature",
"properties": {"name": "one point in france", "foo": "point", "bar": "one"},
"properties": {
"name": "one point in france",
"foo": "point",
"bar": "one",
"label": "this is label one",
},
"geometry": {"type": "Point", "coordinates": [3.339844, 46.920255]},
},
{
@ -24,6 +29,7 @@ DATALAYER_DATA = {
"name": "one polygon in greenland",
"foo": "polygon",
"bar": "two",
"label": "this is label two",
},
"geometry": {
"type": "Polygon",
@ -44,6 +50,7 @@ DATALAYER_DATA = {
"name": "one line in new zeland",
"foo": "line",
"bar": "three",
"label": "this is label three",
},
"geometry": {
"type": "LineString",
@ -476,3 +483,11 @@ def test_main_toolbox_toggle_all_layers(live_server, map, page):
# Should hidden again all layers
expect(page.locator(".datalayer.off")).to_have_count(3)
expect(markers).to_have_count(0)
def test_honour_the_label_fields_settings(live_server, map, page, bootstrap, settings):
settings.UMAP_LABEL_KEYS = ["label", "name"]
page.goto(f"{live_server.url}{map.get_absolute_url()}")
expect(page.locator(".panel").get_by_text("this is label one")).to_be_visible()
expect(page.locator(".panel").get_by_text("this is label two")).to_be_visible()
expect(page.locator(".panel").get_by_text("this is label three")).to_be_visible()

View file

@ -607,6 +607,7 @@ def test_overpass_import_with_bbox(page, live_server, tilelayer, settings):
}
page.goto(f"{live_server.url}/map/new/")
page.get_by_role("link", name="Import data").click()
page.get_by_role("button", name="Import helpers").click()
page.get_by_role("button", name="Overpass").click()
page.get_by_placeholder("amenity=drinking_water").fill("building")
page.get_by_role("button", name="Choose this data").click()
@ -657,6 +658,7 @@ def test_overpass_import_retains_boundary(page, live_server, tilelayer, settings
page.route(re.compile("https://foobar.io/api.*"), handle)
page.goto(f"{live_server.url}/map/new/")
page.get_by_role("link", name="Import data").click()
page.get_by_role("button", name="Import helpers").click()
page.get_by_role("button", name="Overpass").click()
page.get_by_placeholder("amenity=drinking_water").fill("building")
page.get_by_placeholder("Type area name, or let empty").click()
@ -669,6 +671,7 @@ def test_overpass_import_retains_boundary(page, live_server, tilelayer, settings
expect(page.get_by_placeholder("Provide an URL here")).to_have_value(
"https://my.overpass.io/interpreter?data=[out:json];nwr[building](area:3601393025);out geom;"
)
page.get_by_role("button", name="Import helpers").click()
page.get_by_role("button", name="Overpass").click()
expect(page.locator("#area")).to_contain_text(
"Bray-sur-Seine, Seine-et-Marne, Île-de-France, France"
@ -710,6 +713,7 @@ def test_import_from_datasets(page, live_server, tilelayer, settings):
page.goto(f"{live_server.url}/map/new/")
expect(page.locator(".leaflet-marker-icon")).to_be_hidden()
page.get_by_role("link", name="Import data").click()
page.get_by_role("button", name="Import helpers").click()
page.get_by_role("button", name="Datasets").click()
page.get_by_role("dialog").get_by_role("combobox").select_option(
"https://remote.org/data.json"

View file

@ -0,0 +1,44 @@
import pytest
from playwright.sync_api import expect
from ..base import DataLayerFactory
pytestmark = pytest.mark.django_db
OSM_DATA = {
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {"type": "Point", "coordinates": [2.49, 48.79]},
"properties": {
"amenity": "restaurant",
"cuisine": "italian",
"name": "A Casa di Nonna",
"panoramax": "d811b398-d930-4cf8-95a2-0c29c34d9fca",
"phone": "+33 1 48 89 54 12",
"takeaway:covid19": "yes",
"wheelchair": "no",
"id": "node/1130849864",
},
"id": "AzMjk",
},
],
"_umap_options": {
"popupTemplate": "OSM",
},
}
def test_openstreetmap_popup(live_server, map, page):
DataLayerFactory(map=map, data=OSM_DATA)
page.goto(f"{live_server.url}{map.get_absolute_url()}#18/48.79/2.49")
expect(page.locator(".umap-icon-active")).to_be_hidden()
page.locator(".leaflet-marker-icon").click()
expect(page.get_by_role("heading", name="A Casa di Nonna")).to_be_visible()
expect(page.get_by_text("+33 1 48 89 54 12")).to_be_visible()
img = page.locator(".umap-popup-content img")
expect(img).to_have_attribute(
"src",
"https://api.panoramax.xyz/api/pictures/d811b398-d930-4cf8-95a2-0c29c34d9fca/sd.jpg",
)

View file

@ -609,6 +609,7 @@ class MapDetailMixin(SessionMixin):
"websocketEnabled": settings.WEBSOCKET_ENABLED,
"websocketURI": settings.WEBSOCKET_FRONT_URI,
"importers": settings.UMAP_IMPORTERS,
"defaultLabelKeys": settings.UMAP_LABEL_KEYS,
}
created = bool(getattr(self, "object", None))
if (created and self.object.owner) or (not created and not user.is_anonymous):