Merge pull request #1687 from umap-project/browser-revamp

feat: merge "datalayer browser" and "data browser"
This commit is contained in:
Yohan Boniface 2024-04-16 10:38:28 +02:00 committed by GitHub
commit 05fd33deb7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
149 changed files with 2049 additions and 2302 deletions

View file

@ -21,6 +21,9 @@ a {
text-decoration: none;
color: SeaGreen;
}
button {
cursor: pointer;
}
hr {
clear: both;
width: 100%;
@ -160,6 +163,8 @@ input[type="checkbox"] {
textarea {
height: inherit;
padding: 7px;
min-height: 15rem;
min-height: 6rlh;
}
select {
border: 1px solid #222;
@ -273,12 +278,23 @@ input + .error {
input[type="file"] + .error {
margin-top: 0;
}
input:invalid {
border-color: red;
background-color: darkred;
}
.dark input, .dark textarea {
background-color: #232729;
border-color: #1b1f20;
color: #efefef;
}
.fieldset {
border: 1px solid #222;
margin-bottom: 5px;
border-top-left-radius: 4px;
border-top-right-radius: 4px;
}
.dark .fieldset {
border: 1px solid #222;
}
.fieldset .fields {
visibility: hidden;
opacity: 0;
@ -296,7 +312,7 @@ input[type="file"] + .error {
text-align: left;
display: block;
cursor: pointer;
background-color: #eee;
background-color: var(--color-lightGray);
height: 30px;
line-height: 30px;
margin: 0;
@ -528,7 +544,7 @@ i.info {
background-position: -150px -78px;
}
.umap-delete:before {
background-position: -40px -8px;
background-position: -32px -8px;
}
.umap-edit:before {
background-position: -6px -6px;
@ -542,12 +558,10 @@ i.info {
.permissions-panel,
.umap-upload,
.umap-share,
.umap-edit-container,
.umap-datalayer-container,
.umap-layer-properties-container,
.umap-browse-data,
.umap-facet-search,
.umap-browse-datalayers,
.umap-tilelayer-switcher-container {
padding: 0 10px;
}
@ -663,7 +677,7 @@ input[type=hidden].blur + [type="button"] {
.copiable-input button {
background-repeat: no-repeat;
background-image: url('./img/16.svg');
background-position: -45px -140px;
background-position: -141px -140px;
display: inline;
padding: 0 10px;
height: 32px;
@ -678,105 +692,10 @@ input[type=hidden].blur + [type="button"] {
.leaflet-ui-container {
overflow-x: hidden;
}
#umap-ui-container {
/* Added for playwright to consider the element as non visible */
/* as being out of the visible viewport is not enough */
visibility: hidden;
position: absolute;
bottom: 0;
padding: 0 10px;
border-left: 1px solid var(--color-lightGray);
overflow-x: auto;
z-index: 1010;
background-color: #fff;
opacity: 0.98;
cursor: initial;
}
#umap-ui-container.login-panel {
position: fixed; /* Should not scroll when used in content pages (like home page) */
z-index: 1011; /* Above a map panel if any */
}
#umap-ui-container.dark {
border-left: 1px solid #222;
background-color: var(--color-darkGray);
color: #efefef;
}
#umap-ui-container.fullwidth {
width: 100%;
right: -100%;
z-index: 10000;
padding-left: 0;
padding-right: 0;
}
.umap-caption-bar-enabled #umap-ui-container {
bottom: 46px;
}
.leaflet-top,
.leaflet-right {
transition: all .7s;
}
.umap-ui .leaflet-right {
right: 400px;
}
#umap-ui-container,
#umap-alert-container,
#umap-tooltip-container {
-moz-box-sizing:border-box;
-webkit-box-sizing:border-box;
box-sizing: border-box;
}
#umap-ui-container .umap-popup-content img {
/* See https://github.com/Leaflet/Leaflet/commit/61d746818b99d362108545c151a27f09d60960ee#commitcomment-6061847 */
max-width: 99% !important;
}
#umap-ui-container .umap-popup-content {
max-height: inherit;
}
#umap-ui-container .body {
clear: both;
height: calc(100% - 54px); /* Minus size of toolbox */
}
#umap-ui-container .toolbox {
padding: 5px 10px;
overflow: hidden;
display: flex;
flex-direction: row-reverse;
font-size: 10px;
justify-content: flex-start;
gap: 5px;
}
#umap-ui-container .toolbox li {
color: #2e3436;
line-height: 32px;
cursor: pointer;
float: right;
display: inline;
padding: 0 7px;
border: 1px solid #b6b6b3;
border-radius: 2px;
}
#umap-ui-container.dark .toolbox li {
color: #d3dfeb;
border: 1px solid #202425;
}
#umap-ui-container .toolbox li:hover {
color: #2e3436;
background-color: #d4d4d2;
}
#umap-ui-container.dark .toolbox li:hover {
color: #eeeeec;
background-color: #353c3e;
}
.dark input, .dark textarea {
background-color: #232729;
border-color: #1b1f20;
/*box-shadow: inset 0 0 0 1px #215d9c;*/
color: #efefef;
}
input:invalid {
border-color: red;
background-color: darkred;
}
/* *********** */
@ -897,27 +816,6 @@ input:invalid {
/* *********** */
/* Close link */
/* *********** */
.umap-close-icon {
background-repeat: no-repeat;
background-image: url('./img/16.svg');
background-position: -28px -6px;
display: inline;
padding: 0 10px;
vertical-align: middle;
}
.dark .umap-close-icon {
background-image: url('./img/16-white.svg');
}
.dark .umap-close-link {
border: 1px solid #202425;
color: #eeeeec;
padding: 0 7px;
line-height: 32px;
background-color: var(--color-darkGray);
}
.dark .umap-close-link:hover {
background-color: #2e3436;
}
#umap-alert-container .umap-close-link {
color: #fff;
float: right;
@ -962,35 +860,7 @@ input:invalid {
/* *********** */
/* Mobile */
/* *********** */
@media all and (orientation:landscape) {
.umap-edit-enabled #umap-ui-container {
top: 46px;
}
#umap-ui-container {
width: 400px;
right: -400px;
top: 0;
}
.umap-ui #umap-ui-container {
right: 0;
visibility: visible;
}
}
@media all and (orientation:portrait) {
#umap-ui-container {
height: 50%;
max-height: 400px;
width: 100%;
bottom: 0;
right: -100%;
}
.umap-ui #umap-ui-container {
right: 0;
visibility: visible;
}
.umap-ui .leaflet-right {
right: 0;
}
#umap-alert-container {
width: 100%;
left: 0;

View file

@ -17,22 +17,6 @@ input:-moz-placeholder, :-moz-placeholder {
color: #a5a5a5;
}
#umap-ui-container textarea {
height: 100px;
margin-bottom: 14px;
}
#umap-ui-container select {
margin-bottom: 10px;
}
#umap-ui-container.warning .button {
background-color: #c60f13;
border: 1px solid #7f0a0c;
}
#umap-ui-container.warning .button:hover {
background-color: #970b0e;
}
/* **************** */
/* Login icons */
@ -194,9 +178,6 @@ h2.tabs a:hover {
color: #efefef;
text-decoration: underline;
}
body.content #umap-ui-container {
background-color: #fff;
}
/* **************************** */
@ -356,23 +337,24 @@ ul.umap-autocomplete {
height: 36px;
width: 36px;
margin: 3px;
background-position: initial;
}
.icon-view {
.content .icon-view {
background-image: url('./img/icon-view.svg');
}
.icon-share {
.content .icon-share {
background-image: url('./img/icon-share.svg');
}
.icon-edit {
.content .icon-edit {
background-image: url('./img/icon-edit.svg');
}
.icon-download {
.content .icon-download {
background-image: url('./img/icon-download.svg');
}
.icon-duplicate {
.content .icon-duplicate {
background-image: url('./img/icon-duplicate.svg');
}
.icon-delete {
.content .icon-delete {
background-image: url('./img/icon-delete.svg');
}
.table-header {

View file

@ -0,0 +1,112 @@
/* Applied on i and button elements */
.icon {
background-repeat: no-repeat;
display: inline-block;
padding: 0 10px;
vertical-align: middle;
/* Reste default style, in case we apply this class on a button element */
border: none;
background-color: initial;
}
.icon-16 {
background-image: url('../img/16.svg');
height: 24px;
line-height: 24px;
}
.icon + span {
margin-left: 10px;
}
.dark .icon-16 {
background-image: url('../img/16-white.svg');
}
.icon-add {
background-position: -26px -24px;
}
.icon-back {
background-position: -122px -144px;
}
.icon-caption {
background-position: -98px -24px;
}
.icon-close {
background-position: -26px 0px;
}
.icon-delete {
background-position: -121px -49px;
}
.readonly .icon-delete,
.off .icon-delete {
background-position: -121px -122px;
}
.icon-drag {
background-position: -72px -73px;
cursor: move;
float: right;
}
.icon-eye {
background-position: -49px -26px;
}
.off .icon-eye {
background-position: -73px -26px;
}
.icon-edit {
background-position: -51px -49px;
}
.off .icon-edit {
background-position: -51px -73px;
}
.icon-key {
background-position: -144px -121px;
}
.icon-layers {
background-position: -96px -120px;
}
.icon-list {
background-position: -28px -99px;
}
.icon-marker {
background-position: -72px -120px;
}
.icon-polygon {
background-position: -24px -119px;
}
.icon-polyline {
background-position: 0 -119px;
}
.icon-resize {
background-position: -74px -144px;
}
.expanded .icon-resize {
background-position: -50px -144px;
}
.icon-search {
background-position: -27px -120px;
}
.icon-settings {
background-position: -23px -97px;
}
.icon-share {
background-position: 0px -120px;
}
.icon-table {
background-position: -50px -1px;
}
.readonly .icon-table,
.off .icon-table {
background-position: -74px -1px;
}
.remotelayer .icon-table {
display: none !important;
}
.icon-tilelayer {
background-position: -98px -141px;
}
.icon-upload {
background-position: -144px -97px;
}
.icon-zoom {
background-position: -1px -49px;
}
.off .icon-zoom {
background-position: -25px -49px;
}

View file

@ -0,0 +1,140 @@
.panel {
/* Added for playwright to consider the element as non visible */
/* as being out of the visible viewport is not enough */
visibility: hidden;
position: absolute;
bottom: var(--panel-bottom);
overflow-x: auto;
z-index: 1010;
background-color: #fff;
opacity: 0.98;
cursor: initial;
border-radius: 5px;
border: 1px solid var(--color-lightGray);
}
.panel.dark {
border: 1px solid #222;
background-color: var(--color-darkGray);
color: #efefef;
}
.panel.full {
width: initial;
right: -100%;
z-index: 1030;
}
.panel.full.on {
visibility: visible;
right: var(--panel-gutter);
left: var(--panel-gutter);
top: var(--header-height);
height: initial;
max-height: initial;
}
.umap-caption-bar-enabled .panel {
bottom: calc(var(--footer-height) + var(--panel-bottom));
}
.panel {
box-sizing: border-box;
}
.panel .umap-popup-content img {
/* See https://github.com/Leaflet/Leaflet/commit/61d746818b99d362108545c151a27f09d60960ee#commitcomment-6061847 */
max-width: 99% !important;
}
.panel .umap-popup-content {
max-height: inherit;
}
.panel .body {
height: calc(100% - var(--panel-header-height)); /* Minus size of toolbox */
padding: var(--panel-gutter);
}
.panel .toolbox {
padding: 5px 10px;
overflow: hidden;
display: flex;
flex-direction: row-reverse;
font-size: 10px;
justify-content: flex-start;
gap: 5px;
line-height: 2.2em;
background-color: #fff;
position: sticky;
top: 0;
height: var(--panel-header-height);
}
.panel.dark .toolbox {
background-color: var(--color-darkGray);
}
.panel .toolbox li {
cursor: pointer;
display: inline;
padding: 0 2px;
border: 1px solid #b6b6b3;
border-radius: 2px;
}
.panel.dark .toolbox
.panel.dark .toolbox li {
color: #d3dfeb;
border: 1px solid #202425;
}
.panel .toolbox li:hover {
background-color: #d4d4d2;
}
.panel.dark .toolbox li:hover {
background-color: #353c3e;
}
.panel h3 {
line-height: 3;
}
@media all and (orientation:landscape) {
.panel {
top: 0;
margin-top: var(--panel-gutter);
width: var(--panel-width);
}
.panel.condensed {
max-height: 500px;
bottom: initial;
}
.panel.right {
right: calc(0px - var(--panel-width));
}
.panel.left {
left: calc(0px - var(--panel-width));
}
.panel.left.on {
left: calc(var(--panel-gutter) * 2 + var(--control-size));
visibility: visible;
}
.panel.right.on {
right: calc(var(--panel-gutter) * 2 + var(--control-size));
visibility: visible;
}
.umap-edit-enabled .panel {
top: var(--header-height);
}
}
@media all and (orientation:portrait) {
.panel {
height: 50%;
max-height: 400px;
width: 100%;
bottom: 0;
right: -100%;
}
.panel.left {
left: -100%;
}
.panel.on {
right: 0;
left: 0;
visibility: visible;
}
.panel li.umap-resize-link {
display: none;
}
.umap-caption-bar-enabled .panel {
bottom: var(--footer-height);
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
}
}

View file

@ -150,7 +150,7 @@
<path id="path438" d="m9 849.94v4.05c0 0.20708 0.1679 0.375 0.375 0.375h5.25c0.20708 0 0.375-0.16792 0.375-0.375v-4.05c0-0.20708-0.16792-0.375-0.375-0.375h-5.25c-0.2071 0-0.375 0.16792-0.375 0.375z"/>
<path id="save" d="m15.213 842.36h-8.8376c-0.2071 0-0.375 0.1679-0.375 0.37499v11.25c0 0.20708 0.1679 0.375 0.375 0.375h11.25c0.20708 0 0.375-0.16792 0.375-0.375v-8.6766c0-0.0953-0.0363-0.18697-0.1014-0.25648l-2.4124-2.5733c-0.07095-0.0756-0.16995-0.11853-0.2736-0.11853z"/>
</g>
<path id="close" d="m32.354 820.01-0.70703 0.70704 3.6465 3.6465-3.6465 3.6465 0.70703 0.70704 3.6465-3.6465 3.6465 3.6465 0.70703-0.70704-3.6465-3.6465 3.6465-3.6465-0.70703-0.70704-3.6465 3.6465z" color="#000000" fill="#f2f2f2" fill-rule="evenodd" stroke="#999" stroke-width=".18898"/>
<path id="close" d="m32.354 820.01-0.70703 0.70704 3.6465 3.6465-3.6465 3.6465 0.70703 0.70704 3.6465-3.6465 3.6465 3.6465 0.70703-0.70704-3.6465-3.6465 3.6465-3.6465-0.70703-0.70704-3.6465 3.6465z" color="#000000" fill="#f2f2f2" fill-rule="evenodd"/>
<g id="eye" transform="translate(51 843.33)" clip-path="url(#clip0_576_2753)" fill="#f2f2f2">
<path id="path1" d="m9 1c3.06 0 6.26 2.74 7.6 4.03-1.34 1.3-4.54 4.03-7.6 4.03s-6.26-2.73-7.6-4.03c1.34-1.29 4.53-4.03 7.6-4.03zm0-1c-4.5 0-9 5.03-9 5.03s4.5 5.03 9 5.03 9-5.03 9-5.03-4.5-5.03-9-5.03z"/>
<path id="path2" d="m9 3.64c0.77 0 1.39 0.63 1.39 1.39s-0.63001 1.39-1.39 1.39-1.39-0.63-1.39-1.39 0.63-1.39 1.39-1.39zm0-1c-1.32 0-2.39 1.07-2.39 2.39s1.07 2.39 2.39 2.39c1.32 0 2.39-1.07 2.39-2.39s-1.07-2.39-2.39-2.39z"/>
@ -186,5 +186,9 @@
</g>
<path id="path1286" d="m24.352 6.3088h0.03307v-3.6125h-3.7796v3.6125h0.03307zm-3.9787-4.1591h4.2439c0.06157 0 0.12062 0.024461 0.16417 0.068002s0.068 0.1026 0.068 0.16417v4.2439c0 0.061569-0.02445 0.12062-0.068 0.16417-0.04355 0.04355-0.1026 0.067998-0.16417 0.067998h-4.2439c-0.06158 0-0.12063-0.024447-0.16417-0.067998-0.04354-0.04355-0.068-0.10261-0.068-0.16417v-4.2439c0-0.061577 0.02446-0.12063 0.068-0.16417 0.04354-0.043541 0.1026-0.068002 0.16417-0.068002z" fill="#f2f2f2" stroke="#999" stroke-width=".065719"/>
</g>
<path id="path1-67" d="m133.73 963.36-4.7344 4.7344 5.0508 4.6836 1.3594-1.4668-3.5274-3.2695 3.2656-3.2656z" color="#000000" fill="#f2f2f2" fill-rule="evenodd" stroke="#999" stroke-width=".25"/>
<path id="path1-675" d="m87.167 966.62-3.1666-2.9964-3.1666 2.9964-0.83338-0.78858 3.4333-3.2487c0.31298-0.29613 0.82041-0.29613 1.1334 0l3.4332 3.2487zm-6.3333 3.4812 3.1666 2.9964 3.1666-2.9964 0.83336 0.78859-3.4333 3.2487c-0.31297 0.29608-0.82041 0.29608-1.1334 0l-3.4333-3.2487z" clip-rule="evenodd" fill="#efefef" fill-rule="evenodd"/>
<path id="path5" d="m63.167 974.36-3.1666-2.9964-3.1666 2.9964-0.83336-0.78859 3.4333-3.2487c0.31297-0.29608 0.82041-0.29608 1.1334 0l3.4333 3.2487z" fill="#efefef"/>
<path id="path1-675-2" d="m56 963.15 3.4332 3.2487c0.31298 0.29613 0.82041 0.29613 1.1334 0l3.4333-3.2487-0.83338-0.78858-3.1666 2.9964-3.1666-2.9964z" fill="#efefef"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 35 KiB

View file

@ -35,9 +35,7 @@
<path id="path5338" d="m12 903.36c3.866 0 7-3.134 7-7 0-3.866-3.134-7-7-7s-7 3.134-7 7c0 3.866 3.134 7 7 7zm0.15625-2.9687a1.0001 1.0001 0 0 1-0.09375 0 1.0001 1.0001 0 0 1-0.65625-1.8125l1.625-1.2188h-5.0312a1.0001 1.0001 0 1 1 0-2h5l-1.5938-1.1875a1.0001 1.0001 0 1 1 1.1875-1.5937l3.7188 2.7812a1.0044 1.0044 0 0 1 0.15625 1.9063l-3.875 2.9062a1.0001 1.0001 0 0 1-0.4375 0.2188z" fill="#f2f2f2"/>
<path id="path5340" d="m12 913.36c-3.866 0-7 3.134-7 7 0 3.8661 3.134 7.0001 7 7.0001s7-3.134 7-7.0001c0-3.866-3.134-7-7-7zm-0.15625 1.7187a1.2501 1.2501 0 0 1 0.125 0 1.2501 1.2501 0 0 1 1.2812 1.2813v2.75h2.75a1.2501 1.2501 0 1 1 0 2.5h-2.75v2.7501a1.2501 1.2501 0 1 1-2.5 0v-2.7501h-2.75a1.2516 1.2516 0 0 1-0.125-2.5 1.2501 1.2501 0 0 1 0.125 0h2.75v-2.75a1.2501 1.2501 0 0 1 1.0938-1.2813z" fill="#f2f2f2"/>
<path id="table" d="m54 819.36v2h12v-2zm0 3v1h4v-1zm5 0v1h7v-1zm-5 2v1h4v-1zm5 0v1h7v-1zm-5 2v1h4v-1zm5 0v1h7v-1zm-5 2v1h4v-1zm5 0v1h7v-1z" fill="#464646"/>
<g id="close" transform="translate(-4 -172)" fill="#4d4d4d">
<path id="path4384" d="m35.742 999.44 3.0762-3.0762-3.0664-3.0664 1.1914-1.1914 3.0664 3.0664 3.0566-3.0566 1.1719 1.1816-3.0469 3.0566 3.0664 3.0664-1.1914 1.1914-3.0664-3.0664-3.0762 3.0762-1.1816-1.1816" fill="#4d4d4d"/>
</g>
<path id="close-9" d="m32.353 820.01-0.70703 0.70704 3.6465 3.6465-3.6465 3.6465 0.70703 0.70704 3.6465-3.6465 3.6465 3.6465 0.70703-0.70704-3.6465-3.6465 3.6465-3.6465-0.70703-0.70704-3.6465 3.6465z" color="#000000" fill="#4d4d4d" fill-rule="evenodd"/>
<path id="add" d="m11.192 853.36 2e-6 -4.1999-4.1923 1e-5 -3e-6 -1.6267h4.1923v-4.1733l1.6088 7e-3 0.0067 4.1666h4.1923l-3.9e-5 1.6266-4.1922 4e-5 -1.5e-5 4.1999h-1.6155" fill="#4d4d4d"/>
<path id="edit" d="m63.714 866.36-1.1428 1.1429 2.2857 2.2857 1.1428-1.1429zm-1.7143 1.7143-6.2857 6.2857 2.2857 2.2857 6.2857-6.2857zm-6.2857 6.2857-1.7143 4 4-1.7143z" fill="#4d4d4d"/>
<text id="text4457-6" x="39.647079" y="918.79706" fill="#000000" font-family="sans-serif" letter-spacing="0px" word-spacing="0px" style="line-height:0%" xml:space="preserve"><tspan id="tspan4459-6" x="39.647079" y="918.79706" font-family="sans-serif" font-size="30.476px" style="line-height:1.25"> </tspan></text>
@ -177,6 +175,11 @@
<path id="path8303-6" d="m42.545 974.91c0 0.80333-0.65122 1.4546-1.4545 1.4546h-10.182c-0.80332 0-1.4545-0.65122-1.4545-1.4546h13.091z" fill="#464646" stroke-width=".72727"/>
<path id="path16669" d="m36 963.88v8.3163" fill="none" marker-end="url(#Arrow1)" stroke="#464646" stroke-width="1.5"/>
</g>
<path id="copy" d="m58.25 962.61v3.5h4v4h3.5v-7.5zm-4 4v7.5h7.5v-7.5z" fill="#4d4d4d" style="paint-order:fill markers stroke"/>
<path id="copy" d="m154.25 962.61v3.5h4v4h3.5v-7.5zm-4 4v7.5h7.5v-7.5z" fill="#4d4d4d" style="paint-order:fill markers stroke"/>
<path id="path1" d="m134 964.36-4 4 4.2888 3.9769" fill="none" stroke="#4d4d4d" stroke-width="2"/>
<path id="path437" d="m113.38 943.56 0.9072 0.5491c0.1786 0.10817 0.2366 0.34196 0.1294 0.52223-0.0319 0.0535-0.0764 0.0983-0.1294 0.13055l-7.0072 4.2412-7.0071-4.2412c-0.17869-0.10817-0.23664-0.34196-0.12942-0.52222 0.0319-0.0536 0.0763-0.0984 0.12942-0.13056l0.90714-0.5491 6.0999 3.6922zm0 3.578 0.9072 0.5491c0.1786 0.1081 0.2366 0.3419 0.1294 0.5222-0.0319 0.0535-0.0764 0.0983-0.1294 0.1306l-6.6189 4.0061c-0.239 0.1447-0.53753 0.1447-0.77652 0l-6.6188-4.0061c-0.17869-0.1082-0.23664-0.342-0.12942-0.5223 0.0319-0.0536 0.0763-0.0984 0.12942-0.1305l0.90714-0.5491 6.0999 3.6921zm-5.7117-10.575 6.6189 4.0062c0.1786 0.10815 0.2366 0.34196 0.1294 0.52222-0.0319 0.0536-0.0764 0.0984-0.1294 0.13056l-7.0072 4.2412-7.0071-4.2412c-0.17869-0.10815-0.23664-0.34196-0.12942-0.52222 0.0319-0.0536 0.0763-0.0984 0.12942-0.13056l6.6188-4.0062c0.23899-0.14465 0.53752-0.14465 0.77652 0z" fill="#4d4d4d"/>
<path id="path1-675" d="m87.167 966.62-3.1666-2.9964-3.1666 2.9964-0.83338-0.78858 3.4333-3.2487c0.31298-0.29613 0.82041-0.29613 1.1334 0l3.4332 3.2487zm-6.3333 3.4812 3.1666 2.9964 3.1666-2.9964 0.83336 0.78859-3.4333 3.2487c-0.31297 0.29608-0.82041 0.29608-1.1334 0l-3.4333-3.2487z" clip-rule="evenodd" fill="#464646" fill-rule="evenodd"/>
<path id="path5" d="m63.167 974.36-3.1666-2.9964-3.1666 2.9964-0.83336-0.78859 3.4333-3.2487c0.31297-0.29608 0.82041-0.29608 1.1334 0l3.4333 3.2487z" fill="#464646"/>
<path id="path1-675-2" d="m56 963.15 3.4332 3.2487c0.31298 0.29613 0.82041 0.29613 1.1334 0l3.4333-3.2487-0.83338-0.78858-3.1666 2.9964-3.1666-2.9964z" fill="#464646"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 22 KiB

View file

@ -33,7 +33,6 @@
<path id="rect4058-1-2" d="m2.8498 33.337v0.13229 0.79375 0.13229h0.13229 0.34727l-0.42168 3.7042h-0.45475-0.13229v0.13229 0.79375 0.13229h0.13229 0.79375 0.13229v-0.13229-0.42169s3.6292-2.8856 3.6298-2.8856h0.47129 0.13229v-0.13229-0.79375-0.13229h-0.13229-0.79375-0.13229v0.13229 0.21497l-2.6458-0.95086v-0.58703-0.13229h-0.13229-0.79375zm0.26458 0.26458h0.52917v0.52917h-0.52917zm3.7042 1.3229h0.52917v0.52917h-0.52917zm-4.2333 3.4396h0.52917v0.52917h-0.52917z" color="#000000" style="text-decoration-line:none;text-indent:0;text-transform:none"/>
<path id="rect4058-1-2-0" d="m4.9168 40.217h-0.92604-0.13229v0.13229 0.79375 0.13229h0.13229 0.79375 0.13229v-0.13229-0.42167l2.6458-0.1819v0.33898 0.13229h0.13229 0.79375 0.13229v-0.13229-0.79375-0.13229h-0.13229-0.30592l-0.64492-2.1167h0.47129 0.13229v-0.13229-0.79375-0.13229h-0.13229-0.79375-0.1819v0.79375s-2.0671 2.6458-2.1167 2.6458zm2.4309-3.175h0.52917v0.52917h-0.52917zm0.47956 3.175h0.52917v0.52917h-0.52917zm-3.7042 0.26458h0.52917v0.52917h-0.52917z" color="#000000" style="text-decoration-line:none;text-indent:0;text-transform:none"/>
</g>
<path id="download" class="sprite" d="m23.812 26.987c1.7535 0 3.175-1.4215 3.175-3.175 0-1.7535-1.4215-3.175-3.175-3.175-1.7535 0-3.175 1.4215-3.175 3.175 0 1.7535 1.4215 3.175 3.175 3.175zm0-1.3229-1.8521-1.8521h1.3229v-1.5875h1.0583v1.5875h1.3229z" fill="#f2f2f2" stroke="#999" stroke-width=".066146"/>
<g id="multiline" fill="#f2f2f2" stroke="#999" stroke-width=".066146">
<path id="rect4058-9" d="m11.906 29.898v0.13229 0.79375 0.13229h0.13229 0.79375 0.13229v-0.13229-0.09096l2.6458 1.0583v0.35555 0.11576l0.28939 0.0164h0.63665 0.13229v-0.13229-0.79375-0.13229h-0.13229-0.79375-0.13229v0.13229 0.14883l-2.6458-1.0583v-0.41341-0.13229h-0.13229-0.79375zm0.26458 0.26458h0.52917v0.52917h-0.52917zm3.7042 1.3229h0.52917v0.52917h-0.52917z" color="#000000" style="text-decoration-line:none;text-indent:0;text-transform:none"/>
<path id="rect4058-9-5" d="m12.989 32.32v0.35555 0.11576l1.8769 2.927h0.63665 0.13229v0.13229 0.79375 0.13229h-0.13229-0.79375-0.13229v-0.13229-0.79375-0.09922l-1.8769-2.9435h-0.63665-0.13229v-0.13229-0.79375-0.13229h0.13229 0.79375 0.13229v0.13229 0.14883zm-0.26458-0.30591h-0.52917v0.52917h0.52917zm2.6458 3.9688h-0.52917v0.52917h0.52917z" color="#000000" style="text-decoration-line:none;text-indent:0;text-transform:none"/>
@ -58,5 +57,8 @@
</g>
<path id="path1286" d="m24.352 6.3088h0.03307v-3.6125h-3.7796v3.6125h0.03307zm-3.9787-4.1591h4.2439c0.06157 0 0.12062 0.024461 0.16417 0.068002s0.068 0.1026 0.068 0.16417v4.2439c0 0.061569-0.02445 0.12062-0.068 0.16417-0.04355 0.04355-0.1026 0.067998-0.16417 0.067998h-4.2439c-0.06158 0-0.12063-0.024447-0.16417-0.067998-0.04354-0.04355-0.068-0.10261-0.068-0.16417v-4.2439c0-0.061577 0.02446-0.12063 0.068-0.16417 0.04354-0.043541 0.1026-0.068002 0.16417-0.068002z" fill="#f2f2f2" stroke="#999" stroke-width=".065719"/>
</g>
<g id="info" transform="matrix(.33073 0 0 .33073 -11.906 -256.1)" stroke-width=".8">
<path id="path3762" d="m108 838.36a8 8 0 0 0-8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0-8-8zm0 2.5a1.5 1.5 0 0 1 1.5 1.5 1.5 1.5 0 0 1-1.5 1.5 1.5 1.5 0 0 1-1.5-1.5 1.5 1.5 0 0 1 1.5-1.5zm-1 4.5h2v6h-2z" fill="#f2f2f2" stroke="#999" stroke-width=".2"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View file

@ -12,10 +12,6 @@
<text id="text4455" x="49.170559" y="964.36218" font-family="sans-serif" letter-spacing="0px" word-spacing="0px" style="line-height:0%" xml:space="preserve"><tspan id="tspan4457" x="49.170559" y="964.36218" fill="#4d4d4d" font-family="sans-serif" font-size="8px" font-weight="bold" style="line-height:1.25">0</tspan></text>
<text id="text4459" x="65.048965" y="964.36218" font-family="sans-serif" letter-spacing="0px" word-spacing="0px" style="line-height:0%" xml:space="preserve"><tspan id="tspan4461" x="65.048965" y="964.36218" fill="#4d4d4d" font-family="sans-serif" font-size="8px" font-weight="bold" style="line-height:1.25">1</tspan></text>
</g>
<g id="copyleft" class="sprite" transform="matrix(.26458 0 0 .26458 1.5821 -226.06)">
<circle id="circle3841" transform="matrix(.020408 0 0 .020408 74 934.36)" cx="490" cy="490" r="440" fill="none" stroke="#4d4d4d" stroke-width="100"/>
<path id="path3843" d="m83.918 938.75c-2.6531 0-4.8775 1.8572-5.449 4.3469h2.6735c0.48979-1.0612 1.551-1.7959 2.7755-1.7959 1.6939 0 3.0612 1.3673 3.0612 3.0612 0 1.6938-1.3674 3.0612-3.0612 3.0612-1.2245 0-2.2857-0.73467-2.7755-1.7755h-2.6735c0.57142 2.4694 2.7959 4.3266 5.449 4.3266 3.102 0 5.6122-2.5102 5.6122-5.6122 0-3.1021-2.5102-5.6122-5.6122-5.6122z" fill="#4d4d4d"/>
</g>
<g id="markers" class="sprite" transform="matrix(.26458 0 0 .26458 14.287 -226.05)" fill="#4d4d4d">
<path id="rect2985" d="m105.25 934.36c-3.1775 0-6.346 2.1278-7.2539 6.3794 0 2.551 1.8067 7.6679 7.2539 13.62 1.4637-1.5994 2.6694-3.1177 3.644-4.5613-1.4505-2.1639-2.415-4.0873-2.9628-5.7095-0.22599 0.041-0.44225 0.063-0.68112 0.063-2.0056 0-3.644-1.5346-3.644-3.413 0-1.8785 1.6384-3.3811 3.644-3.3811 0.51205 0 0.98854 0.076 1.4303 0.2552 0.64347-0.9222 1.4345-1.6571 2.3158-2.169-1.1444-0.7114-2.4463-1.0845-3.7461-1.0845z"/>
<path id="path3378" d="m111 934.36c-3.0625 0-6.125 2.1277-7 6.383 0 2.5532 1.75 7.6596 7 13.617 5.25-5.9574 7-11.064 7-13.617-0.875-4.2553-3.9375-6.383-7-6.383zm0 2.9788c1.933 0 3.5 1.5241 3.5 3.4042s-1.567 3.4043-3.5 3.4043c-1.933 0-3.5-1.5242-3.5-3.4043s1.567-3.4042 3.5-3.4042z"/>
@ -86,5 +82,8 @@
</g>
<path id="path2378" d="m25.147 1.8521h-4.2439c-0.07035 0-0.13782 0.027946-0.18756 0.077689-0.04974 0.049744-0.07769 0.11721-0.07769 0.18756v4.2439c0 0.070353 0.02795 0.13782 0.07769 0.18756 0.04974 0.049742 0.11721 0.077682 0.18756 0.077682h4.2439c0.07035 0 0.13782-0.02794 0.18756-0.077682 0.04974-0.049742 0.07768-0.11721 0.07768-0.18756v-4.2439c0-0.070349-0.02794-0.13782-0.07768-0.18756-0.04974-0.049743-0.11721-0.077689-0.18756-0.077689zm-0.26524 4.1591h-3.7135v-3.5463h3.7135z" fill="#464646" stroke-width=".26458"/>
</g>
<g id="info" transform="matrix(.33073 0 0 .33073 -11.906 -256.1)" fill="#4d4d4d" stroke-width=".8">
<path id="path3762" d="m108 838.36a8 8 0 0 0-8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0-8-8zm0 2.5a1.5 1.5 0 0 1 1.5 1.5 1.5 1.5 0 0 1-1.5 1.5 1.5 1.5 0 0 1-1.5-1.5 1.5 1.5 0 0 1 1.5-1.5zm-1 4.5h2v6h-2v-6z" fill="#4d4d4d"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 24 KiB

File diff suppressed because it is too large Load diff

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 67 KiB

View file

@ -10,7 +10,7 @@
<path d="M 16.0401,2.3158 H 2.005 v 14.0351 h 14.0351 z" fill="#ffffff" id="path2351" />
</mask>
</defs>
<sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="17.305658" inkscape:cx="54.779771" inkscape:cy="162.69245" 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="21.380532" inkscape:cx="34.119824" inkscape:cy="18.264279" 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,120" id="guide3086" inkscape:locked="false" inkscape:label="" inkscape:color="rgb(0,134,229)" />
@ -54,9 +54,7 @@
<path inkscape:connector-curvature="0" style="fill:#f2f2f2;fill-opacity:1;stroke:none" d="m 12,913.36213 c -3.865993,0 -7,3.134 -7,7 0,3.8661 3.134007,7.0001 7,7.0001 3.865993,0 7,-3.134 7,-7.0001 0,-3.866 -3.134007,-7 -7,-7 z m -0.15625,1.7187 a 1.250125,1.250125 0 0 1 0.125,0 1.250125,1.250125 0 0 1 1.28125,1.2813 v 2.75 H 16 a 1.250125,1.250125 0 1 1 0,2.5 h -2.75 v 2.7501 a 1.250125,1.250125 0 1 1 -2.5,0 v -2.7501 H 8 a 1.2515615,1.2515615 0 0 1 -0.125,-2.5 1.250125,1.250125 0 0 1 0.125,0 h 2.75 v -2.75 a 1.250125,1.250125 0 0 1 1.09375,-1.2813 z" id="path5340" inkscape:export-filename="/home/ybon/Code/js/leaflet-storage/src/img/zoom-grey-16.png" inkscape:export-xdpi="89.996864" inkscape:export-ydpi="89.996864" />
<path style="fill:#464646;fill-opacity:1;fill-rule:nonzero;stroke:none" d="m 54,819.36218 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="" 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,-54.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" />
<g id="close" 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(-3.9999995,-172)">
<path inkscape:connector-curvature="0" id="path4384" style="font-variant:normal;font-stretch:normal;font-size:20px;font-family:Arial;-inkscape-font-specification:Arial;fill:#4d4d4d" d="m 35.742187,999.43835 3.076172,-3.07617 -3.066406,-3.0664 1.191406,-1.19141 3.066407,3.06641 3.05664,-3.05664 1.171875,1.18164 -3.046875,3.05664 3.066406,3.0664 -1.191406,1.19138 L 40,997.54382 36.923828,1000.62 35.742187,999.43835" />
</g>
<path id="close-9" style="color:#000000;fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.188976;stroke-dasharray:none;stroke-opacity:1" d="m 32.353032,820.00818 -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" />
<path inkscape:connector-curvature="0" d="m 11.192241,853.36196 2e-6,-4.19993 -4.192255,1e-5 -3e-6,-1.62667 h 4.192263 v -4.17331 l 1.608812,0.007 0.0067,4.16664 h 4.192255 l -3.9e-5,1.62662 -4.19222,4e-5 -1.5e-5,4.19994 h -1.615475" style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:20px;line-height:125%;font-family:Arial;-inkscape-font-specification:Arial;letter-spacing:0px;word-spacing:0px;fill:#4d4d4d;fill-opacity:1;stroke:none" id="add" />
<path style="fill:#4d4d4d;fill-opacity:1;stroke:none" d="m 63.71429,866.36218 -1.14285,1.14286 2.28571,2.28572 L 66,868.6479 Z M 62,868.07646 l -6.285714,6.28574 2.285715,2.2857 6.285719,-6.28572 z M 55.714286,874.3622 54,878.36219 58.000001,876.6479 Z" id="edit" 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="39.647079" y="918.79706" id="text4457-6"><tspan y="918.79706" x="39.647079" sodipodi:role="line" id="tspan4459-6" style="font-size:30.4762px;line-height:1.25;font-family:sans-serif"> </tspan></text>
@ -196,6 +194,11 @@
<path style="fill:#464646;fill-opacity:1;stroke-width:0.727273" d="m 42.545455,974.90763 c 0,0.80333 -0.651223,1.45455 -1.454546,1.45455 H 30.909091 c -0.803323,0 -1.454546,-0.65122 -1.454546,-1.45455 2.557093,0 9.805435,0 13.09091,0 z" id="path8303-6" />
<path style="fill:none;fill-rule:evenodd;stroke:#464646;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1)" d="m 36,963.87832 v 8.3163" id="path16669" sodipodi:nodetypes="cc" />
</g>
<path id="copy" style="fill:#4d4d4d;paint-order:fill markers stroke" d="m 58.25,962.61218 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:#4d4d4d;paint-order:fill markers stroke" d="m 154.25,962.61218 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 style="fill:none;fill-rule:evenodd;stroke:#4d4d4d;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-dasharray:none" d="m 134,964.36218 -4,4 4.28879,3.97691" id="path1" sodipodi:nodetypes="ccc" />
<path d="m 113.37897,943.55658 0.9072,0.5491 c 0.1786,0.10817 0.2366,0.34196 0.1294,0.52223 -0.0319,0.0535 -0.0764,0.0983 -0.1294,0.13055 l -7.00717,4.24121 -7.00708,-4.24121 c -0.17869,-0.10817 -0.23664,-0.34196 -0.12942,-0.52222 0.0319,-0.0536 0.0763,-0.0984 0.12942,-0.13056 l 0.90714,-0.5491 6.09994,3.69219 z m 0,3.57799 0.9072,0.5491 c 0.1786,0.1081 0.2366,0.3419 0.1294,0.5222 -0.0319,0.0535 -0.0764,0.0983 -0.1294,0.1306 l -6.61891,4.0061 c -0.239,0.1447 -0.53753,0.1447 -0.77652,0 l -6.61882,-4.0061 c -0.17869,-0.1082 -0.23664,-0.342 -0.12942,-0.5223 0.0319,-0.0536 0.0763,-0.0984 0.12942,-0.1305 l 0.90714,-0.5491 6.09994,3.6921 z m -5.71171,-10.57501 6.61891,4.00621 c 0.1786,0.10815 0.2366,0.34196 0.1294,0.52222 -0.0319,0.0536 -0.0764,0.0984 -0.1294,0.13056 l -7.00717,4.24119 -7.00708,-4.24119 c -0.17869,-0.10815 -0.23664,-0.34196 -0.12942,-0.52222 0.0319,-0.0536 0.0763,-0.0984 0.12942,-0.13056 l 6.61882,-4.00621 c 0.23899,-0.14465 0.53752,-0.14465 0.77652,0 z" fill="#4d4d4d" id="path437" style="fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.178;stroke-dasharray:none;stroke-opacity:1" />
<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;fill:#464646;fill-opacity:1" />
<path style="fill:#464646;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:#464646;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" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 44 KiB

View file

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg width="180" height="180" viewBox="0 0 47.624994 47.624994" version="1.1" id="svg2876" inkscape:version="1.3 (0e150ed6c4, 2023-07-21)" sodipodi:docname="24-white.svg" inkscape:export-filename="../24-white.svg" inkscape:export-xdpi="7.52" inkscape:export-ydpi="7.52" 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">
<sodipodi:namedview id="namedview2878" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1" inkscape:document-units="px" showgrid="true" showguides="true" inkscape:zoom="8.6832784" inkscape:cx="145.10648" inkscape:cy="121.84338" inkscape:window-width="1920" inkscape:window-height="1019" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" inkscape:current-layer="layer1">
<svg width="180" height="180" viewBox="0 0 47.624994 47.624994" version="1.1" id="svg2876" inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)" sodipodi:docname="24-white.svg" inkscape:export-filename="../24-white.svg" inkscape:export-xdpi="7.52" inkscape:export-ydpi="7.52" 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">
<sodipodi:namedview id="namedview2878" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1" inkscape:document-units="px" showgrid="true" showguides="true" inkscape:zoom="8.2673128" inkscape:cx="89.569612" inkscape:cy="93.077402" inkscape:window-width="1920" inkscape:window-height="1011" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" inkscape:current-layer="layer1">
<inkscape:grid type="xygrid" id="grid2997" empspacing="4" originx="0" originy="0" spacingy="0.2645833" spacingx="0.2645833" units="px" visible="true" />
<sodipodi:guide position="9.525,47.625" orientation="-1,0" id="guide3404" inkscape:locked="false" inkscape:label="" inkscape:color="rgb(0,134,229)" />
<sodipodi:guide position="0,38.099995" orientation="0,1" id="guide3408" inkscape:locked="false" inkscape:label="" inkscape:color="rgb(0,134,229)" />
@ -54,7 +54,6 @@
<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.0661458;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker:none;enable-background:accumulate" d="m 2.8497553,33.337461 v 0.132292 0.79375 0.132292 h 0.132292 0.347266 l -0.42168,3.704166 h -0.454753 -0.132291 v 0.132292 0.79375 0.132292 h 0.132291 0.79375 0.132292 v -0.132292 -0.421693 c 0,0 3.6291619,-2.885599 3.6297519,-2.885599 h 0.47129 0.132291 v -0.132291 -0.79375 -0.132292 h -0.132291 -0.79375 -0.132292 v 0.132292 0.214974 l -2.645833,-0.95086 v -0.587031 -0.132292 h -0.132292 -0.7937499 z m 0.264584,0.264584 h 0.5291659 v 0.529166 h -0.5291659 z m 3.7041659,1.322916 h 0.529167 v 0.529167 h -0.529167 z m -4.2333329,3.439584 h 0.529167 v 0.529166 h -0.529167 z" id="rect4058-1-2" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccc" />
<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.0661458;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker:none;enable-background:accumulate" d="m 4.9168132,40.216628 h -0.926042 -0.132292 v 0.132292 0.79375 0.132291 h 0.132292 0.79375 0.132292 v -0.132291 -0.421667 l 2.645833,-0.181901 v 0.338984 0.132292 h 0.132292 0.793749 0.132292 v -0.132292 -0.79375 -0.132291 h -0.132292 -0.305924 l -0.644922,-2.116667 h 0.471289 0.132292 v -0.132292 -0.79375 -0.132291 h -0.132292 -0.79375 -0.181901 c 0,0.79375 0,0.79375 0,0.79375 0,0 -2.067057,2.645833 -2.116666,2.645833 z m 2.430859,-3.175 h 0.529167 v 0.529167 h -0.529167 z m 0.479557,3.175 h 0.529167 v 0.529167 h -0.529167 z m -3.704166,0.264583 c 0.529166,0 0,0 0.529166,0 v 0.529167 h -0.529166 z" id="rect4058-1-2-0" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccccccccccc" />
</g>
<path style="fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:0.0661458;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="m 23.812498,26.987496 c 1.753504,0 3.175,-1.4215 3.175,-3.175 0,-1.753499 -1.421496,-3.174999 -3.175,-3.174999 -1.753505,0 -3.175,1.4215 -3.175,3.174999 0,1.7535 1.421495,3.175 3.175,3.175 z m 0,-1.322916 -1.852083,-1.852084 h 1.322916 v -1.587499 h 1.058333 v 1.587499 h 1.322917 z" id="download" class="sprite" />
<g id="multiline">
<path inkscape:connector-curvature="0" 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.0661458;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker:none;enable-background:accumulate" d="m 11.906249,29.898045 v 0.132292 0.79375 0.132292 h 0.132291 0.79375 0.132292 v -0.132292 -0.09096 l 2.645832,1.058334 v 0.355547 0.115755 l 0.289388,0.0164 h 0.636654 0.132292 v -0.132292 -0.79375 -0.132291 h -0.132292 -0.79375 -0.132292 v 0.132291 0.148829 l -2.645832,-1.058334 v -0.413411 -0.132292 h -0.132292 -0.79375 z m 0.264583,0.264584 h 0.529167 v 0.529166 h -0.529167 z m 3.704166,1.322916 h 0.529166 v 0.529167 h -0.529166 z" id="rect4058-9" sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccc" />
<path inkscape:connector-curvature="0" 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.0661458;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker:none;enable-background:accumulate" d="m 12.989387,32.320492 v 0.355547 0.115755 l 1.876888,2.926953 h 0.636653 0.132292 v 0.132292 0.79375 0.132291 h -0.132292 -0.79375 -0.132291 v -0.132291 -0.79375 -0.09922 l -1.876888,-2.94349 h -0.636654 -0.132292 v -0.132291 -0.79375 -0.132292 h 0.132292 0.79375 0.132292 v 0.132292 0.148828 z m -0.264584,-0.305912 h -0.529166 v 0.529167 h 0.529166 z m 2.645834,3.96875 h -0.529167 v 0.529167 h 0.529167 z" id="rect4058-9-5" sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccc" />
@ -79,5 +78,8 @@
</g>
<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>
<g id="info" transform="matrix(0.33072916,0,0,0.33072916,-11.906249,-256.10415)" style="stroke-width:0.8">
<path id="path3762" style="fill:#f2f2f2;fill-opacity:1;stroke:#999999;stroke-width:0.2;stroke-dasharray:none;stroke-opacity:1" d="m 107.99999,838.36217 a 8,8 0 0 0 -7.999998,8 8,8 0 0 0 7.999998,8 8,8 0 0 0 8,-8 8,8 0 0 0 -8,-8 z m 0,2.5 a 1.5,1.5 0 0 1 1.5,1.5 1.5,1.5 0 0 1 -1.5,1.5 1.5,1.5 0 0 1 -1.5,-1.5 1.5,1.5 0 0 1 1.5,-1.5 z m -1,4.5 h 2 v 6 h -2 z" />
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 29 KiB

View file

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg width="180" height="180" viewBox="0 0 47.624999 47.624999" version="1.1" id="svg6237" inkscape:version="1.2.2 (b0a8486541, 2022-12-01)" sodipodi:docname="24.svg" inkscape:export-filename="../24.svg" inkscape:export-xdpi="7.52" inkscape:export-ydpi="7.52" 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">
<sodipodi:namedview id="namedview6239" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1" inkscape:document-units="px" showgrid="true" showguides="true" inkscape:zoom="17.994316" inkscape:cx="76.551951" inkscape:cy="18.089045" inkscape:window-width="1920" inkscape:window-height="1019" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" inkscape:current-layer="layer1">
<inkscape:grid type="xygrid" id="grid6358" empspacing="4" originx="0" originy="0" />
<svg width="180" height="180" viewBox="0 0 47.624999 47.624999" version="1.1" id="svg6237" inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)" sodipodi:docname="24.svg" inkscape:export-filename="../24.svg" inkscape:export-xdpi="7.52" inkscape:export-ydpi="7.52" 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">
<sodipodi:namedview id="namedview6239" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:showpageshadow="2" inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1" inkscape:document-units="px" showgrid="true" showguides="true" inkscape:zoom="11.97607" inkscape:cx="98.404568" inkscape:cy="77.696607" inkscape:window-width="1920" inkscape:window-height="1011" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" inkscape:current-layer="layer1">
<inkscape:grid type="xygrid" id="grid6358" empspacing="4" originx="0" originy="0" spacingy="1" spacingx="1" units="px" visible="true" />
<sodipodi:guide position="9.5249999,47.624999" orientation="-1,0" id="guide6360" inkscape:locked="false" inkscape:label="" inkscape:color="rgb(0,134,229)" />
<sodipodi:guide position="19.05,47.625" orientation="-1,0" id="guide6362" inkscape:locked="false" inkscape:label="" inkscape:color="rgb(0,134,229)" />
<sodipodi:guide position="28.574999,47.625" orientation="-1,0" id="guide6364" inkscape:locked="false" inkscape:label="" inkscape:color="rgb(0,134,229)" />
@ -32,10 +32,6 @@
<text id="text4455" y="964.36218" x="49.170559" style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#4d4d4d;fill-opacity:1;stroke:none" xml:space="preserve"><tspan style="font-weight:bold;font-size:8px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'Sans Bold';fill:#4d4d4d;fill-opacity:1" y="964.36218" x="49.170559" id="tspan4457" sodipodi:role="line">0</tspan></text>
<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:#4d4d4d;fill-opacity:1;stroke:none" x="65.048965" y="964.36218" id="text4459"><tspan sodipodi:role="line" id="tspan4461" x="65.048965" y="964.36218" style="font-weight:bold;font-size:8px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'Sans Bold';fill:#4d4d4d;fill-opacity:1">1</tspan></text>
</g>
<g id="copyleft" transform="matrix(0.26458333,0,0,0.26458333,1.5821002,-226.05539)" class="sprite">
<circle transform="matrix(0.02040816,0,0,0.02040816,74,934.36218)" id="circle3841" r="440" cy="490" cx="490" style="fill:none;stroke:#4d4d4d;stroke-width:100;stroke-opacity:1" />
<path style="fill:#4d4d4d;fill-opacity:1" id="path3843" d="m 83.918365,938.74993 c -2.653058,0 -4.877549,1.85717 -5.448974,4.34692 h 2.673466 c 0.489792,-1.06125 1.551017,-1.79592 2.775508,-1.79592 1.693875,0 3.061225,1.36734 3.061225,3.06125 0,1.69384 -1.36735,3.06117 -3.061225,3.06117 -1.224491,0 -2.285716,-0.73467 -2.775508,-1.7755 h -2.673466 c 0.571425,2.46942 2.795916,4.32658 5.448974,4.32658 3.102041,0 5.612241,-2.51025 5.612241,-5.61225 0,-3.10208 -2.5102,-5.61225 -5.612241,-5.61225 z" inkscape:connector-curvature="0" />
</g>
<g id="markers" transform="matrix(0.26458333,0,0,0.26458333,14.287499,-226.04994)" class="sprite">
<path sodipodi:nodetypes="sccccsssccs" inkscape:connector-curvature="0" id="rect2985" d="m 105.25387,934.36268 c -3.17753,0 -6.346004,2.1278 -7.25387,6.3794 0,2.551 1.806672,7.6679 7.25387,13.6201 1.46368,-1.5994 2.66945,-3.1177 3.64397,-4.5613 -1.4505,-2.1639 -2.41497,-4.0873 -2.96285,-5.7095 -0.22599,0.041 -0.44225,0.063 -0.68112,0.063 -2.0056,0 -3.64396,-1.5346 -3.64396,-3.413 0,-1.8785 1.63836,-3.3811 3.64396,-3.3811 0.51205,0 0.98854,0.076 1.43034,0.2552 0.64347,-0.9222 1.4345,-1.6571 2.31579,-2.169 -1.14444,-0.7114 -2.44633,-1.0845 -3.74613,-1.0845 z" style="fill:#4d4d4d;fill-opacity:1;stroke:none" />
<path id="path3378" d="m 111,934.36218 c -3.0625,0 -6.125,2.1277 -7,6.383 0,2.5532 1.75,7.6596 7,13.617 5.25,-5.9574 7,-11.0638 7,-13.617 -0.875,-4.2553 -3.9375,-6.383 -7,-6.383 z m 0,2.9788 c 1.933,0 3.5,1.5241 3.5,3.4042 0,1.8801 -1.567,3.4043 -3.5,3.4043 -1.93299,0 -3.5,-1.5242 -3.5,-3.4043 0,-1.8801 1.56701,-3.4042 3.5,-3.4042 z" style="fill:#4d4d4d;fill-opacity:1;stroke:none" inkscape:connector-curvature="0" />
@ -106,5 +102,8 @@
</g>
<path d="m 25.146689,1.8520833 h -4.243941 c -0.07035,0 -0.137815,0.027946 -0.187558,0.077689 -0.04974,0.049744 -0.07769,0.1172099 -0.07769,0.1875586 v 4.2439405 c 0,0.070353 0.02795,0.1378215 0.07769,0.1875632 0.04974,0.049742 0.11721,0.077682 0.187558,0.077682 h 4.243941 c 0.07035,0 0.137821,-0.02794 0.187563,-0.077682 0.04974,-0.049742 0.07768,-0.1172105 0.07768,-0.1875632 v -4.2439405 c 0,-0.070349 -0.02794,-0.1378151 -0.07768,-0.1875586 -0.04974,-0.049743 -0.11721,-0.077689 -0.187563,-0.077689 z m -0.265245,4.1590648 h -3.713451 v -3.5463453 h 3.713451 z" fill="#464646" id="path2378" style="stroke-width:0.264583" />
</g>
<g id="info" transform="matrix(0.33072916,0,0,0.33072916,-11.90625,-256.10415)" style="stroke-width:0.8;fill:#4d4d4d;fill-opacity:1">
<path id="path3762" style="fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.8" d="M 108 838.36217 A 8 8 0 0 0 100 846.36217 A 8 8 0 0 0 108 854.36217 A 8 8 0 0 0 116 846.36217 A 8 8 0 0 0 108 838.36217 z M 108 840.86217 A 1.5 1.5 0 0 1 109.5 842.36217 A 1.5 1.5 0 0 1 108 843.86217 A 1.5 1.5 0 0 1 106.5 842.36217 A 1.5 1.5 0 0 1 108 840.86217 z M 107 845.36217 L 109 845.36217 L 109 851.36217 L 107 851.36217 L 107 845.36217 z " />
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 38 KiB

View file

@ -1,5 +1,5 @@
// Uses `L._`` from Leaflet.i18n which we cannot import as a module yet
import { DomUtil, DomEvent } from '../../vendors/leaflet/leaflet-src.esm.js'
import { DomUtil, DomEvent, stamp } from '../../vendors/leaflet/leaflet-src.esm.js'
import { translate } from './i18n.js'
export default class Browser {
constructor(map) {
@ -15,18 +15,27 @@ export default class Browser {
const filter = this.options.filter
if (filter && !feature.matchFilter(filter, this.filterKeys)) return
if (this.options.inBbox && !feature.isOnScreen(this.bounds)) return
const feature_li = DomUtil.create('li', `${feature.getClassName()} feature`),
zoom_to = DomUtil.create('i', 'feature-zoom_to', feature_li),
edit = DomUtil.create('i', 'show-on-edit feature-edit', feature_li),
del = DomUtil.create('i', 'show-on-edit feature-delete', feature_li),
colorBox = DomUtil.create('i', 'feature-color', feature_li),
title = DomUtil.create('span', 'feature-title', feature_li),
symbol = feature._getIconUrl
const row = DomUtil.create('li', `${feature.getClassName()} feature`)
const zoom_to = DomUtil.createButtonIcon(
row,
'icon-zoom',
translate('Bring feature to center')
)
const edit = DomUtil.createButtonIcon(
row,
'show-on-edit icon-edit',
translate('Edit this feature')
)
const del = DomUtil.createButtonIcon(
row,
'show-on-edit icon-delete',
translate('Delete this feature')
)
const colorBox = DomUtil.create('i', 'icon icon-16 feature-color', row)
const title = DomUtil.create('span', 'feature-title', row)
const symbol = feature._getIconUrl
? U.Icon.prototype.formatUrl(feature._getIconUrl(), feature)
: null
zoom_to.title = L._('Bring feature to center')
edit.title = L._('Edit this feature')
del.title = L._('Delete this feature')
title.textContent = feature.getDisplayName() || '—'
const bgcolor = feature.getDynamicOption('color')
colorBox.style.backgroundColor = bgcolor
@ -34,53 +43,31 @@ export default class Browser {
const icon = U.Icon.makeIconElement(symbol, colorBox)
U.Icon.setIconContrast(icon, colorBox, symbol, bgcolor)
}
DomEvent.on(
zoom_to,
'click',
function (e) {
e.callback = L.bind(this.view, this)
this.zoomTo(e)
},
feature
)
DomEvent.on(
title,
'click',
function (e) {
e.callback = L.bind(this.view, this)
this.zoomTo(e)
},
feature
)
const viewFeature = (e) => {
feature.zoomTo({...e, callback: feature.view})
}
DomEvent.on(zoom_to, 'click', viewFeature)
DomEvent.on(title, 'click', viewFeature)
DomEvent.on(edit, 'click', feature.edit, feature)
DomEvent.on(del, 'click', feature.confirmDelete, feature)
// HOTFIX. Remove when this is released:
// https://github.com/Leaflet/Leaflet/pull/9052
DomEvent.disableClickPropagation(feature_li)
parent.appendChild(feature_li)
DomEvent.disableClickPropagation(row)
parent.appendChild(row)
}
datalayerId(datalayer) {
return `browse_data_datalayer_${L.stamp(datalayer)}`
}
onDataLayerChanged(e) {
this.updateDatalayer(e.target)
return `browse_data_datalayer_${stamp(datalayer)}`
}
addDataLayer(datalayer, parent) {
const container = DomUtil.create('div', datalayer.getHidableClass(), parent),
headline = DomUtil.create('h5', '', container),
counter = DomUtil.create('span', 'datalayer-counter', headline)
let className = `datalayer ${datalayer.getHidableClass()}`
if (this.map.panel.mode !== 'condensed') className += ' show-list'
const container = DomUtil.create('div', className, parent),
headline = DomUtil.create('h5', '', container)
container.id = this.datalayerId(datalayer)
datalayer.renderToolbox(headline)
DomUtil.add('span', '', headline, datalayer.options.name)
const ul = DomUtil.create('ul', '', container)
this.updateDatalayer(datalayer)
datalayer.on('datachanged', this.onDataLayerChanged, this)
this.map.ui.once('panel:closed', () => {
datalayer.off('datachanged', this.onDataLayerChanged, this)
})
}
updateDatalayer(datalayer) {
@ -90,16 +77,25 @@ export default class Browser {
// Panel is not open
if (!parent) return
DomUtil.classIf(parent, 'off', !datalayer.isVisible())
const container = parent.querySelector('ul'),
counter = parent.querySelector('.datalayer-counter')
const container = parent.querySelector('ul')
const headline = parent.querySelector('h5')
const toggleList = () => parent.classList.toggle('show-list')
headline.innerHTML = ''
const toggle = DomUtil.create('i', 'icon icon-16 datalayer-toggle-list', headline)
DomEvent.on(toggle, 'click', toggleList)
datalayer.renderToolbox(headline)
const name = DomUtil.create('span', 'datalayer-name', headline)
name.textContent = datalayer.options.name
DomEvent.on(name, 'click', toggleList)
container.innerHTML = ''
datalayer.eachFeature((feature) => this.addFeature(feature, container))
let total = datalayer.count(),
current = container.querySelectorAll('li').length,
count = total == current ? total : `${current}/${total}`
counter.textContent = count
counter.title = L._('Features in this layer: {count}', { count: count })
const counter = DomUtil.create('span', 'datalayer-counter', headline)
counter.textContent = `(${count})`
counter.title = translate(`Features in this layer: ${count}`)
}
onFormChange() {
@ -109,9 +105,12 @@ export default class Browser {
})
}
isOpen() {
return !!document.querySelector('.umap-browser')
}
onMoveEnd() {
const isBrowserOpen = !!document.querySelector('.umap-browse-data')
if (!isBrowserOpen) return
if (!this.isOpen()) return
const isListDynamic = this.options.inBbox
this.map.eachBrowsableDataLayer((datalayer) => {
if (!isListDynamic && !datalayer.hasDynamicData()) return
@ -119,27 +118,29 @@ export default class Browser {
})
}
update() {
if (!this.isOpen()) return
this.dataContainer.innerHTML = ''
this.map.eachBrowsableDataLayer((datalayer) => {
this.addDataLayer(datalayer, this.dataContainer)
})
}
open() {
// Get once but use it for each feature later
this.filterKeys = this.map.getFilterKeys()
const container = DomUtil.create('div', 'umap-browse-data')
const container = DomUtil.create('div')
// HOTFIX. Remove when this is released:
// https://github.com/Leaflet/Leaflet/pull/9052
DomEvent.disableClickPropagation(container)
const title = DomUtil.add(
'h3',
'umap-browse-title',
container,
this.map.getOption('name')
)
DomUtil.createTitle(container, translate('Browse data'), 'icon-layers')
const formContainer = DomUtil.create('div', '', container)
const dataContainer = DomUtil.create('div', 'umap-browse-features', container)
this.dataContainer = DomUtil.create('div', '', container)
const fields = [
['options.filter', { handler: 'Input', placeholder: L._('Filter') }],
['options.inBbox', { handler: 'Switch', label: L._('Current map view') }],
['options.filter', { handler: 'Input', placeholder: translate('Filter') }],
['options.inBbox', { handler: 'Switch', label: translate('Current map view') }],
]
const builder = new U.FormBuilder(this, fields, {
makeDirty: false,
@ -147,13 +148,22 @@ export default class Browser {
})
formContainer.appendChild(builder.build())
this.map.ui.openPanel({
this.map.panel.open({
data: { html: container },
actions: [this.map._aboutLink()],
className: 'umap-browser',
})
this.map.eachBrowsableDataLayer((datalayer) => {
this.addDataLayer(datalayer, dataContainer)
})
this.update()
}
static backButton(map) {
const button = DomUtil.create('li', '')
DomUtil.create('i', 'icon icon-16 icon-back', button)
button.title = translate('Back to browser')
// Fixme: remove me when this is merged and released
// https://github.com/Leaflet/Leaflet/pull/9052
DomEvent.disableClickPropagation(button)
DomEvent.on(button, 'click', map.openBrowser, map)
return button
}
}

View file

@ -1,8 +1,10 @@
import URLs from './urls.js'
import Browser from './browser.js'
import { Panel, EditPanel, FullPanel } from './panel.js'
import * as Utils from './utils.js'
import { SCHEMA } from './schema.js'
import { Request, ServerRequest, RequestError, HTTPError, NOKError } from './request.js'
import Orderable from './orderable.js'
// Import modules and export them to the global scope.
// For the not yet module-compatible JS out there.
@ -15,6 +17,10 @@ window.U = {
HTTPError,
NOKError,
Browser,
Panel,
EditPanel,
FullPanel,
Utils,
SCHEMA,
Orderable,
}

View file

@ -0,0 +1,84 @@
import { DomEvent } from '../../vendors/leaflet/leaflet-src.esm.js'
export default class Orderable {
constructor(parent, onDrop, selector = '.orderable') {
this.parent = parent
this.onCommit = onDrop
this.src = null
this.dst = null
this.els = this.parent.querySelectorAll(selector)
for (let i = 0; i < this.els.length; i++) this.makeDraggable(this.els[i])
}
makeDraggable(node) {
node.draggable = true
DomEvent.on(node, 'dragstart', this.onDragStart, this)
DomEvent.on(node, 'dragenter', this.onDragEnter, this)
DomEvent.on(node, 'dragover', this.onDragOver, this)
DomEvent.on(node, 'dragleave', this.onDragLeave, this)
DomEvent.on(node, 'drop', this.onDrop, this)
DomEvent.on(node, 'dragend', this.onDragEnd, this)
}
nodeIndex(node) {
return Array.prototype.indexOf.call(this.parent.children, node)
}
findTarget(node) {
while (node) {
if (this.nodeIndex(node) !== -1) return node
node = node.parentNode
}
}
onDragStart(e) {
// e.target is the source node.
const realSrc = document.elementFromPoint(e.clientX, e.clientY);
// Only allow drag from the handle
if (!realSrc.classList.contains('icon-drag')) {
e.preventDefault()
return
}
this.src = e.target
this.initialIndex = this.nodeIndex(this.src)
this.src.classList.add('ordering')
e.dataTransfer.effectAllowed = 'move'
e.dataTransfer.setData('text/html', this.src.innerHTML)
}
onDragOver(e) {
DomEvent.stop(e)
if (e.preventDefault) e.preventDefault() // Necessary. Allows us to drop.
e.dataTransfer.dropEffect = 'move'
return false
}
onDragEnter(e) {
DomEvent.stop(e)
// e.target is the current hover target.
const dst = this.findTarget(e.target)
if (!dst || dst === this.src) return
this.dst = dst
const targetIndex = this.nodeIndex(this.dst),
srcIndex = this.nodeIndex(this.src)
if (targetIndex > srcIndex) this.parent.insertBefore(this.dst, this.src)
else this.parent.insertBefore(this.src, this.dst)
}
onDragLeave(e) {
// e.target is previous target element.
}
onDrop(e) {
// e.target is current target element.
if (e.stopPropagation) e.stopPropagation() // Stops the browser from redirecting.
if (!this.dst) return
this.onCommit(this.src, this.dst, this.initialIndex, this.nodeIndex(this.src))
return false
}
onDragEnd(e) {
// e.target is the source node.
this.src.classList.remove('ordering')
}
}

View file

@ -0,0 +1,80 @@
import { DomUtil, DomEvent } from '../../vendors/leaflet/leaflet-src.esm.js'
import { translate } from './i18n.js'
export class Panel {
constructor(map) {
this.parent = map._controlContainer
this.map = map
this.container = DomUtil.create('div', '', this.parent)
this.mode = 'condensed'
this.classname = 'left'
DomEvent.disableClickPropagation(this.container)
DomEvent.on(this.container, 'contextmenu', DomEvent.stopPropagation) // Do not activate our custom context menu.
DomEvent.on(this.container, 'wheel', DomEvent.stopPropagation)
DomEvent.on(this.container, 'MozMousePixelScroll', DomEvent.stopPropagation)
}
open(e) {
this.container.className = `with-transition panel ${this.classname} ${this.mode}`
this.container.innerHTML = ''
const actionsContainer = DomUtil.create('ul', 'toolbox', this.container)
const body = DomUtil.create('div', 'body', this.container)
if (e.data.html.nodeType && e.data.html.nodeType === 1)
body.appendChild(e.data.html)
else body.innerHTML = e.data.html
const closeLink = DomUtil.create('li', 'umap-close-link', actionsContainer)
DomUtil.add('i', 'icon icon-16 icon-close', closeLink)
closeLink.title = translate('Close')
const resizeLink = DomUtil.create('li', 'umap-resize-link', actionsContainer)
DomUtil.add('i', 'icon icon-16 icon-resize', resizeLink)
resizeLink.title = translate('Toggle size')
if (e.actions) {
for (let i = 0; i < e.actions.length; i++) {
actionsContainer.appendChild(e.actions[i])
}
}
if (e.className) DomUtil.addClass(body, e.className)
const promise = new Promise((resolve, reject) => {
DomUtil.addClass(this.container, 'on')
resolve()
})
DomEvent.on(closeLink, 'click', this.close, this)
DomEvent.on(resizeLink, 'click', this.resize, this)
return promise
}
resize() {
if (this.mode === 'expanded') {
this.mode = 'condensed'
this.container.classList.remove('expanded')
this.container.classList.add('condensed')
} else {
this.mode = 'expanded'
this.container.classList.remove('condensed')
this.container.classList.add('expanded')
}
}
close() {
if (DomUtil.hasClass(this.container, 'on')) {
DomUtil.removeClass(this.container, 'on')
this.map.invalidateSize({ pan: false })
this.map.editedFeature = null
}
}
}
export class EditPanel extends Panel {
constructor(map) {
super(map)
this.classname = 'right dark'
}
}
export class FullPanel extends Panel {
constructor(map) {
super(map)
this.classname = 'full dark'
this.mode = 'expanded'
}
}

View file

@ -128,7 +128,6 @@ export class ServerRequest extends Request {
const data = await response.json()
if (data.info) {
this.ui.alert({ content: data.info, level: 'info' })
this.ui.closePanel()
} else if (data.error) {
this.ui.alert({ content: data.error, level: 'error' })
return this._onError(new Error(data.error))

View file

@ -273,6 +273,7 @@ export const SCHEMA = {
['none', translate('None')],
['caption', translate('Caption')],
['databrowser', translate('Data browser')],
['datalayers', translate('Layers')],
['facet', translate('Facet search')],
],
default: 'none',
@ -372,6 +373,12 @@ export const SCHEMA = {
impacts: ['ui'],
label: translate('Allow scroll wheel zoom?'),
},
captionControl: {
type: Boolean,
nullable: true,
label: translate('Display the caption control'),
default: true,
},
searchControl: {
type: Boolean,
impacts: ['ui'],

View file

@ -29,11 +29,35 @@ U.ImportAction = U.BaseAction.extend({
},
})
U.EditLayersAction = U.BaseAction.extend({
options: {
helpMenu: true,
className: 'umap-control-browse dark',
tooltip: L._('Manage layers'),
},
addHooks: function () {
this.map.editDatalayers()
},
})
U.EditCaptionAction = U.BaseAction.extend({
options: {
helpMenu: true,
className: 'umap-control-caption dark',
tooltip: L._('Edit map name and caption'),
},
addHooks: function () {
this.map.editCaption()
},
})
U.EditPropertiesAction = U.BaseAction.extend({
options: {
helpMenu: true,
className: 'update-map-settings dark',
tooltip: L._('Edit map properties'),
tooltip: L._('Map advanced properties'),
},
addHooks: function () {
@ -53,17 +77,6 @@ U.ChangeTileLayerAction = U.BaseAction.extend({
},
})
U.ManageDatalayersAction = U.BaseAction.extend({
options: {
className: 'dark manage-datalayers',
tooltip: L._('Manage layers'),
},
addHooks: function () {
this.map.manageDatalayers()
},
})
U.UpdateExtentAction = U.BaseAction.extend({
options: {
className: 'update-map-extent dark',
@ -279,12 +292,7 @@ U.ContinueLineAction = U.BaseVertexAction.extend({
})
// Leaflet.Toolbar doesn't allow twice same toolbar class…
U.SettingsToolbar = L.Toolbar.Control.extend({
addTo: function (map) {
if (map.options.editMode !== 'advanced') return
L.Toolbar.Control.prototype.addTo.call(this, map)
},
})
U.SettingsToolbar = L.Toolbar.Control.extend({})
U.DrawToolbar = L.Toolbar.Control.extend({
initialize: function (options) {
L.Toolbar.Control.prototype.initialize.call(this, options)
@ -398,26 +406,6 @@ U.EditControl = L.Control.extend({
},
})
/* Share control */
L.Control.Embed = L.Control.extend({
options: {
position: 'topleft',
},
onAdd: function (map) {
const container = L.DomUtil.create('div', 'leaflet-control-embed umap-control')
const shareButton = L.DomUtil.createButton(
'',
container,
L._('Share and download'),
map.share.open,
map.share
)
L.DomEvent.on(shareButton, 'dblclick', L.DomEvent.stopPropagation)
return container
},
})
U.MoreControls = L.Control.extend({
options: {
position: 'topleft',
@ -488,174 +476,79 @@ U.PermanentCreditsControl = L.Control.extend({
},
})
U.DataLayersControl = L.Control.extend({
options: {
position: 'topleft',
},
labels: {
zoomToLayer: L._('Zoom to layer extent'),
toggleLayer: L._('Show/hide layer'),
editLayer: L._('Edit'),
},
L.Control.Button = L.Control.extend({
initialize: function (map, options) {
this.map = map
L.Control.prototype.initialize.call(this, options)
},
_initLayout: function (map) {
const container = (this._container = L.DomUtil.create(
'div',
'leaflet-control-browse umap-control'
)),
actions = L.DomUtil.create('div', 'umap-browse-actions', container)
this._datalayers_container = L.DomUtil.create(
'ul',
'umap-browse-datalayers',
actions
)
L.DomUtil.createButton(
'umap-browse-link',
actions,
L._('Browse data'),
map.openBrowser,
map
)
const toggleButton = L.DomUtil.createButton(
'umap-browse-toggle',
container,
L._('See data layers')
)
L.DomEvent.on(toggleButton, 'click', L.DomEvent.stop)
map.whenReady(function () {
this.update()
}, this)
if (L.Browser.pointer) {
L.DomEvent.disableClickPropagation(container)
L.DomEvent.on(container, 'wheel', L.DomEvent.stopPropagation)
L.DomEvent.on(container, 'MozMousePixelScroll', L.DomEvent.stopPropagation)
}
if (!L.Browser.touch) {
L.DomEvent.on(
container,
{
mouseenter: this.expand,
mouseleave: this.collapse,
},
this
)
} else {
L.DomEvent.on(container, 'click', L.DomEvent.stopPropagation)
L.DomEvent.on(toggleButton, 'click', L.DomEvent.stop).on(
toggleButton,
'click',
this.expand,
this
)
map.on('click', this.collapse, this)
}
return container
getClassName: function () {
return this.options.className
},
onAdd: function (map) {
if (!this._container) this._initLayout(map)
if (map.options.datalayersControl === 'expanded') this.expand()
return this._container
},
onRemove: function (map) {
this.collapse()
},
update: function () {
if (this._datalayers_container && this._map) {
this._datalayers_container.innerHTML = ''
this.map.eachDataLayerReverse(function (datalayer) {
this.addDataLayer(this._datalayers_container, datalayer)
}, this)
}
},
expand: function () {
L.DomUtil.addClass(this._container, 'expanded')
},
collapse: function () {
if (this.map.options.datalayersControl === 'expanded') return
L.DomUtil.removeClass(this._container, 'expanded')
},
addDataLayer: function (container, datalayer, draggable) {
const datalayerLi = L.DomUtil.create('li', '', container)
if (draggable)
L.DomUtil.element(
'i',
{ className: 'drag-handle', title: L._('Drag to reorder') },
datalayerLi
)
datalayer.renderToolbox(datalayerLi)
const title = L.DomUtil.add(
'span',
'layer-title',
datalayerLi,
datalayer.options.name
)
datalayerLi.id = `browse_data_toggle_${L.stamp(datalayer)}`
L.DomUtil.classIf(datalayerLi, 'off', !datalayer.isVisible())
title.textContent = datalayer.options.name
},
newDataLayer: function () {
const datalayer = this.map.createDataLayer({})
datalayer.edit()
},
openPanel: function () {
if (!this.map.editEnabled) return
const container = L.DomUtil.create('ul', 'umap-browse-datalayers')
const title = L.DomUtil.create('h3', '', container)
title.textContent = L._('Manage layers')
this.map.eachDataLayerReverse(function (datalayer) {
this.addDataLayer(container, datalayer, true)
}, this)
const orderable = new U.Orderable(container)
orderable.on(
'drop',
function (e) {
const layer = this.map.datalayers[e.src.dataset.id],
other = this.map.datalayers[e.dst.dataset.id],
minIndex = Math.min(layer.getRank(), other.getRank()),
maxIndex = Math.max(layer.getRank(), other.getRank())
if (e.finalIndex === 0) layer.bringToTop()
else if (e.finalIndex > e.initialIndex) layer.insertBefore(other)
else layer.insertAfter(other)
this.map.eachDataLayerReverse((datalayer) => {
if (datalayer.getRank() >= minIndex && datalayer.getRank() <= maxIndex)
datalayer.isDirty = true
})
this.map.indexDatalayers()
},
const container = L.DomUtil.create('div', `${this.getClassName()} umap-control`)
const button = L.DomUtil.createButton(
'',
container,
this.options.title,
this.onClick,
this
)
L.DomEvent.on(button, 'dblclick', L.DomEvent.stopPropagation)
return container
},
})
const bar = L.DomUtil.create('div', 'button-bar', container)
L.DomUtil.createButton(
'show-on-edit block add-datalayer button',
bar,
L._('Add a layer'),
this.newDataLayer,
this
)
U.DataLayersControl = L.Control.Button.extend({
options: {
position: 'topleft',
className: 'umap-control-browse',
title: L._('See layers'),
},
this.map.ui.openPanel({ data: { html: container }, className: 'dark' })
onClick: function () {
this.map.openBrowser()
},
})
U.CaptionControl = L.Control.Button.extend({
options: {
position: 'topleft',
className: 'umap-control-caption',
title: L._('About'),
},
onClick: function () {
this.map.displayCaption()
},
})
U.StarControl = L.Control.Button.extend({
options: {
position: 'topleft',
title: L._('Star this map'),
},
getClassName: function () {
const status = this.map.options.starred ? ' starred' : ''
return `leaflet-control-star umap-control${status}`
},
onClick: function () {
this.map.star()
},
})
L.Control.Embed = L.Control.Button.extend({
options: {
position: 'topleft',
title: L._('Share and download'),
className: 'leaflet-control-embed umap-control',
},
onClick: function () {
this.map.share.open()
},
})
@ -667,16 +560,31 @@ U.DataLayer.include({
},
renderToolbox: function (container) {
const toggle = L.DomUtil.create('i', 'layer-toggle', container),
zoomTo = L.DomUtil.create('i', 'layer-zoom_to', container),
edit = L.DomUtil.create('i', 'layer-edit show-on-edit', container),
table = L.DomUtil.create('i', 'layer-table-edit show-on-edit', container),
remove = L.DomUtil.create('i', 'layer-delete show-on-edit', container)
zoomTo.title = L._('Zoom to layer extent')
toggle.title = L._('Show/hide layer')
edit.title = L._('Edit')
table.title = L._('Edit properties in a table')
remove.title = L._('Delete layer')
const toggle = L.DomUtil.createButtonIcon(
container,
'icon-eye',
L._('Show/hide layer')
)
const zoomTo = L.DomUtil.createButtonIcon(
container,
'icon-zoom',
L._('Zoom to layer extent')
)
const edit = L.DomUtil.createButtonIcon(
container,
'icon-edit show-on-edit',
L._('Edit')
)
const table = L.DomUtil.createButtonIcon(
container,
'icon-table show-on-edit',
L._('Edit properties in a table')
)
const remove = L.DomUtil.createButtonIcon(
container,
'icon-delete show-on-edit',
L._('Delete layer')
)
if (this.isReadOnly()) {
L.DomUtil.addClass(container, 'readonly')
} else {
@ -689,7 +597,7 @@ U.DataLayer.include({
if (!this.isVisible()) return
if (!confirm(L._('Are you sure you want to delete this layer?'))) return
this._delete()
this.map.ui.closePanel()
this.map.editPanel.close()
},
this
)
@ -698,7 +606,6 @@ U.DataLayer.include({
L.DomEvent.on(zoomTo, 'click', this.zoomTo, this)
L.DomUtil.addClass(container, this.getHidableClass())
L.DomUtil.classIf(container, 'off', !this.isVisible())
container.dataset.id = L.stamp(this)
},
getHidableElements: function () {
@ -745,10 +652,11 @@ const ControlsMixin = {
'search',
'fullscreen',
'embed',
'datalayers',
'caption',
'locate',
'measure',
'editinosm',
'datalayers',
'star',
'tilelayers',
],
@ -801,22 +709,12 @@ const ControlsMixin = {
})
container.appendChild(builder.build())
this.ui.openPanel({ data: { html: container }, actions: [this._aboutLink()] })
},
_aboutLink: function () {
const link = L.DomUtil.create('li', '')
L.DomUtil.create('i', 'umap-icon-16 umap-caption', link)
const label = L.DomUtil.create('span', '', link)
label.textContent = label.title = L._('About')
L.DomEvent.on(link, 'click', this.displayCaption, this)
return link
this.panel.open({ data: { html: container } })
},
displayCaption: function () {
const container = L.DomUtil.create('div', 'umap-caption')
let title = L.DomUtil.create('h3', '', container)
title.textContent = this.options.name
L.DomUtil.createTitle(container, this.options.name, 'icon-caption')
this.permissions.addOwnerLink('h5', container)
if (this.options.description) {
const description = L.DomUtil.create('div', 'umap-map-description', container)
@ -891,21 +789,7 @@ const ControlsMixin = {
`,
urls
)
const browser = L.DomUtil.create('li', '')
L.DomUtil.create('i', 'umap-icon-16 umap-list', browser)
const labelBrowser = L.DomUtil.create('span', '', browser)
labelBrowser.textContent = labelBrowser.title = L._('Browse data')
L.DomEvent.on(browser, 'click', this.openBrowser, this)
const actions = [browser]
if (this.options.facetKey) {
const filter = L.DomUtil.create('li', '')
L.DomUtil.create('i', 'umap-icon-16 umap-add', filter)
const labelFilter = L.DomUtil.create('span', '', filter)
labelFilter.textContent = labelFilter.title = L._('Facet search')
L.DomEvent.on(filter, 'click', this.openFacet, this)
actions.push(filter)
}
this.ui.openPanel({ data: { html: container }, actions: actions })
this.panel.open({ data: { html: container } })
},
renderEditToolbar: function () {
@ -1013,10 +897,7 @@ const ControlsMixin = {
'leaflet-control-edit-disable',
rightContainer,
L.DomUtil.add('span', '', null, L._('View')),
function (e) {
this.disableEdit(e)
this.ui.closePanel()
},
this.disableEdit,
this
)
L.DomEvent.on(
@ -1055,6 +936,48 @@ const ControlsMixin = {
this
)
},
editDatalayers: function () {
if (!this.editEnabled) return
const container = L.DomUtil.create('div')
L.DomUtil.createTitle(container, L._('Manage layers'), 'icon-layers')
const ul = L.DomUtil.create('ul', '', container)
this.eachDataLayerReverse((datalayer) => {
const row = L.DomUtil.create('li', 'orderable', ul)
L.DomUtil.createIcon(row, 'icon-drag', L._('Drag to reorder'))
datalayer.renderToolbox(row)
const title = L.DomUtil.add('span', '', row, datalayer.options.name)
L.DomUtil.classIf(row, 'off', !datalayer.isVisible())
title.textContent = datalayer.options.name
row.dataset.id = L.stamp(datalayer)
})
const onReorder = (src, dst, initialIndex, finalIndex) => {
const layer = this.datalayers[src.dataset.id],
other = this.datalayers[dst.dataset.id],
minIndex = Math.min(layer.getRank(), other.getRank()),
maxIndex = Math.max(layer.getRank(), other.getRank())
if (finalIndex === 0) layer.bringToTop()
else if (finalIndex > initialIndex) layer.insertBefore(other)
else layer.insertAfter(other)
this.eachDataLayerReverse((datalayer) => {
if (datalayer.getRank() >= minIndex && datalayer.getRank() <= maxIndex)
datalayer.isDirty = true
})
this.indexDatalayers()
}
const orderable = new U.Orderable(ul, onReorder)
const bar = L.DomUtil.create('div', 'button-bar', container)
L.DomUtil.createButton(
'show-on-edit block add-datalayer button',
bar,
L._('Add a layer'),
this.newDataLayer,
this
)
this.editPanel.open({ data: { html: container } })
},
}
/* Used in view mode to define the current tilelayer */
@ -1124,11 +1047,10 @@ U.TileLayerChooser = L.Control.extend({
openSwitcher: function (options) {
const container = L.DomUtil.create('div', 'umap-tilelayer-switcher-container')
const title = L.DomUtil.create('h3', '', container)
title.textContent = L._('Change tilelayers')
L.DomUtil.createTitle(container, L._('Change tilelayers'), 'icon-tilelayer')
this._tilelayers_container = L.DomUtil.create('ul', '', container)
this.buildList(options)
this.map.ui.openPanel({
this.map.editPanel.open({
data: { html: container },
className: options.className,
})
@ -1211,29 +1133,6 @@ U.AttributionControl = L.Control.Attribution.extend({
},
})
U.StarControl = L.Control.extend({
options: {
position: 'topleft',
},
onAdd: function (map) {
const status = map.options.starred ? ' starred' : ''
const container = L.DomUtil.create(
'div',
`leaflet-control-star umap-control${status}`
)
const starMapButton = L.DomUtil.createButton(
'',
container,
L._('Star this map'),
map.star,
map
)
L.DomEvent.on(starMapButton, 'dblclick', L.DomEvent.stopPropagation)
return container
},
})
/*
* Take control over L.Control.Locate to be able to
* call start() before adding the control (and thus the button) to the map.
@ -1316,21 +1215,26 @@ U.Search = L.PhotonSearch.extend({
},
formatResult: function (feature, el) {
const self = this
const tools = L.DomUtil.create('span', 'search-result-tools', el),
zoom = L.DomUtil.create('i', 'feature-zoom_to', tools),
edit = L.DomUtil.create('i', 'feature-edit show-on-edit', tools)
zoom.title = L._('Zoom to this place')
edit.title = L._('Save this location as new feature')
const tools = L.DomUtil.create('span', 'search-result-tools', el)
const zoom = L.DomUtil.createButtonIcon(
tools,
'icon-zoom',
L._('Zoom to this place')
)
const edit = L.DomUtil.createButtonIcon(
tools,
'icon-edit',
L._('Save this location as new feature')
)
// We need to use "mousedown" because Leaflet.Photon listen to mousedown
// on el.
L.DomEvent.on(zoom, 'mousedown', (e) => {
L.DomEvent.stop(e)
self.zoomToFeature(feature)
this.zoomToFeature(feature)
})
L.DomEvent.on(edit, 'mousedown', (e) => {
L.DomEvent.stop(e)
const datalayer = self.map.defaultEditDataLayer()
const datalayer = this.map.defaultEditDataLayer()
const layer = datalayer.geojsonToFeatures(feature)
layer.isDirty = true
layer.edit()
@ -1348,7 +1252,7 @@ U.Search = L.PhotonSearch.extend({
onSelected: function (feature) {
this.zoomToFeature(feature)
this.map.ui.closePanel()
this.map.panel.close()
},
})
@ -1358,6 +1262,7 @@ U.SearchControl = L.Control.extend({
},
onAdd: function (map) {
this.map = map
const container = L.DomUtil.create('div', 'leaflet-control-search umap-control')
L.DomEvent.disableClickPropagation(container)
L.DomUtil.createButton(
@ -1366,38 +1271,34 @@ U.SearchControl = L.Control.extend({
L._('Search location'),
(e) => {
L.DomEvent.stop(e)
this.openPanel(map)
this.open()
},
this
)
return container
},
openPanel: function (map) {
open: function () {
const options = {
limit: 10,
noResultLabel: L._('No results'),
}
if (map.options.photonUrl) options.url = map.options.photonUrl
const container = L.DomUtil.create('div', 'umap-search')
if (this.map.options.photonUrl) options.url = this.map.options.photonUrl
const container = L.DomUtil.create('div', '')
const title = L.DomUtil.create('h3', '', container)
title.textContent = L._('Search location')
L.DomUtil.createTitle(container, L._('Search location'), 'icon-search')
const input = L.DomUtil.create('input', 'photon-input', container)
const resultsContainer = L.DomUtil.create('div', 'photon-autocomplete', container)
this.search = new U.Search(map, input, options)
this.search = new U.Search(this.map, input, options)
const id = Math.random()
this.search.on('ajax:send', () => {
map.fire('dataloading', { id: id })
this.map.fire('dataloading', { id: id })
})
this.search.on('ajax:return', () => {
map.fire('dataload', { id: id })
this.map.fire('dataload', { id: id })
})
this.search.resultsContainer = resultsContainer
map.ui.once('panel:ready', () => {
input.focus()
})
map.ui.openPanel({ data: { html: container } })
this.map.panel.open({ data: { html: container } }).then(input.focus)
},
})

View file

@ -117,6 +117,29 @@ L.DomUtil.createLink = (className, container, content, url, target, title) => {
return el
}
L.DomUtil.createIcon = (parent, className, title, size = 16) => {
return L.DomUtil.element(
'i',
{ className: `icon icon-${size} ${className}`, title: title || '' },
parent
)
}
L.DomUtil.createButtonIcon = (parent, className, title, size = 16) => {
return L.DomUtil.element(
'button',
{ className: `icon icon-${size} ${className}`, title: title || '' },
parent
)
}
L.DomUtil.createTitle = (parent, text, className, tag = 'h3') => {
const title = L.DomUtil.create(tag, '', parent)
L.DomUtil.createIcon(title, className)
L.DomUtil.add('span', '', title, text)
return title
}
L.DomUtil.createCopiableInput = (parent, label, value) => {
const wrapper = L.DomUtil.add('div', 'copiable-input', parent)
const labelEl = L.DomUtil.add('label', '', wrapper, label)
@ -531,94 +554,6 @@ U.Help = L.Class.extend({
),
})
U.Orderable = L.Evented.extend({
options: {
selector: 'li',
color: '#374E75',
},
initialize: function (parent, options) {
L.Util.setOptions(this, options)
this.parent = parent
this.src = null
this.dst = null
this.els = this.parent.querySelectorAll(this.options.selector)
for (let i = 0; i < this.els.length; i++) this.makeDraggable(this.els[i])
},
makeDraggable: function (node) {
node.draggable = true
L.DomEvent.on(node, 'dragstart', this.onDragStart, this)
L.DomEvent.on(node, 'dragenter', this.onDragEnter, this)
L.DomEvent.on(node, 'dragover', this.onDragOver, this)
L.DomEvent.on(node, 'dragleave', this.onDragLeave, this)
L.DomEvent.on(node, 'drop', this.onDrop, this)
L.DomEvent.on(node, 'dragend', this.onDragEnd, this)
},
nodeIndex: function (node) {
return Array.prototype.indexOf.call(this.parent.children, node)
},
findTarget: function (node) {
while (node) {
if (this.nodeIndex(node) !== -1) return node
node = node.parentNode
}
},
onDragStart: function (e) {
// e.target is the source node.
this.src = e.target
this.initialIndex = this.nodeIndex(this.src)
this.srcBackgroundColor = this.src.style.backgroundColor
this.src.style.backgroundColor = this.options.color
e.dataTransfer.effectAllowed = 'move'
e.dataTransfer.setData('text/html', this.src.innerHTML)
},
onDragOver: function (e) {
L.DomEvent.stop(e)
if (e.preventDefault) e.preventDefault() // Necessary. Allows us to drop.
e.dataTransfer.dropEffect = 'move'
return false
},
onDragEnter: function (e) {
L.DomEvent.stop(e)
// e.target is the current hover target.
const dst = this.findTarget(e.target)
if (!dst || dst === this.src) return
this.dst = dst
const targetIndex = this.nodeIndex(this.dst),
srcIndex = this.nodeIndex(this.src)
if (targetIndex > srcIndex) this.parent.insertBefore(this.dst, this.src)
else this.parent.insertBefore(this.src, this.dst)
},
onDragLeave: function (e) {
// e.target is previous target element.
},
onDrop: function (e) {
// e.target is current target element.
if (e.stopPropagation) e.stopPropagation() // Stops the browser from redirecting.
if (!this.dst) return
this.fire('drop', {
src: this.src,
initialIndex: this.initialIndex,
finalIndex: this.nodeIndex(this.src),
dst: this.dst,
})
return false
},
onDragEnd: function (e) {
// e.target is the source node.
this.src.style.backgroundColor = this.srcBackgroundColor
},
})
L.LatLng.prototype.isValid = function () {
return (
isFinite(this.lat) &&

View file

@ -96,12 +96,7 @@ U.FeatureMixin = {
edit: function (e) {
if (!this.map.editEnabled || this.isReadOnly()) return
const container = L.DomUtil.create('div', 'umap-feature-container')
L.DomUtil.add(
'h3',
`umap-feature-properties ${this.getClassName()}`,
container,
L._('Feature properties')
)
L.DomUtil.createTitle(container, L._('Feature properties'), this.getClassName())
let builder = new U.FormBuilder(
this,
@ -131,13 +126,13 @@ U.FeatureMixin = {
callback: this._redraw, // In case we have dynamic options…
})
container.appendChild(builder.build())
this.map.ui.once('panel:ready', () => {
builder.helpers['properties.name'].input.focus()
})
this.appendEditFieldsets(container)
const advancedActions = L.DomUtil.createFieldset(container, L._('Advanced actions'))
this.getAdvancedEditActions(advancedActions)
this.map.ui.openPanel({ data: { html: container }, className: 'dark' })
const onLoad = this.map.editPanel.open({ data: { html: container } })
onLoad.then(() => {
builder.helpers['properties.name'].input.focus()
})
this.map.editedFeature = this
if (!this.isOnScreen()) this.zoomTo(e)
},
@ -149,7 +144,7 @@ U.FeatureMixin = {
L._('Delete'),
function (e) {
L.DomEvent.stop(e)
if (this.confirmDelete()) this.map.ui.closePanel()
if (this.confirmDelete()) this.map.editPanel.close()
},
this
)
@ -467,7 +462,7 @@ U.FeatureMixin = {
this.parentClass.prototype.onRemove.call(this, map)
if (this.map.editedFeature === this) {
this.endEdit()
this.map.ui.closePanel()
this.map.editPanel.close()
}
},
@ -759,7 +754,7 @@ U.PathMixin = {
if (this.map.editEnabled) {
if (this.editEnabled()) {
this.endEdit()
this.map.ui.closePanel()
this.map.editPanel.close()
} else {
this.edit(e)
}

View file

@ -1009,9 +1009,6 @@ U.FormBuilder = L.FormBuilder.extend({
case 'iconUrl':
schema.handler = 'IconUrl'
break
case 'datalayersControl':
schema.handler = 'DataLayersControl'
break
case 'licence':
schema.handler = 'LicenceChooser'
break
@ -1039,6 +1036,6 @@ U.FormBuilder = L.FormBuilder.extend({
},
finish: function () {
this.map.ui.closePanel()
this.map.editPanel.close()
},
})

View file

@ -7,7 +7,11 @@ U.Importer = L.Class.extend({
build: function () {
this.container = L.DomUtil.create('div', 'umap-upload')
this.title = L.DomUtil.add('h3', '', this.container, L._('Import data'))
this.title = L.DomUtil.createTitle(
this.container,
L._('Import data'),
'icon-upload'
)
this.presetBox = L.DomUtil.create('div', 'formbox', this.container)
this.presetSelect = L.DomUtil.create('select', '', this.presetBox)
this.fileBox = L.DomUtil.create('div', 'formbox', this.container)
@ -16,7 +20,6 @@ U.Importer = L.Class.extend({
{ type: 'file', multiple: 'multiple', autofocus: true },
this.fileBox
)
this.map.ui.once('panel:closed', () => (this.fileInput.value = null))
this.urlInput = L.DomUtil.element(
'input',
{ type: 'text', placeholder: L._('Provide an URL here') },
@ -117,7 +120,10 @@ U.Importer = L.Class.extend({
open: function () {
if (!this.container) this.build()
this.map.ui.openPanel({ data: { html: this.container }, className: 'dark' })
const onLoad = this.map.editPanel.open({ data: { html: this.container } })
onLoad.then(() => {
this.fileInput.value = null
})
},
openFiles: function () {

View file

@ -56,6 +56,11 @@ U.Map = L.Map.extend({
if (geojson.geometry) this.options.center = this.latLng(geojson.geometry)
this.urls = new U.URLs(this.options.urls)
this.panel = new U.Panel(this)
if (this.hasEditMode()) {
this.editPanel = new U.EditPanel(this)
this.fullPanel = new U.FullPanel(this)
}
this.ui = new U.UI(this._container)
this.ui.on('dataloading', (e) => this.fire('dataloading', e))
this.ui.on('dataload', (e) => this.fire('dataload', e))
@ -140,14 +145,9 @@ U.Map = L.Map.extend({
}
delete this.options.displayDataBrowserOnLoad
}
this.ui.on(
'panel:closed',
function () {
this.invalidateSize({ pan: false })
},
this
)
if (this.options.datalayersControl === 'expanded') {
this.options.onLoadPanel = 'datalayers'
}
let isDirty = false // self status
try {
@ -200,25 +200,24 @@ U.Map = L.Map.extend({
this.initCaptionBar()
if (this.hasEditMode()) {
this.editTools = new U.Editable(this)
this.ui.on(
'panel:closed panel:open',
function () {
this.editedFeature = null
},
this
)
this.renderEditToolbar()
}
this.initShortcuts()
this.onceDataLoaded(function () {
if (L.Util.queryString('share')) this.share.open()
else if (this.options.onLoadPanel === 'databrowser') this.openBrowser()
else if (this.options.onLoadPanel === 'caption') this.displayCaption()
else if (
this.options.onLoadPanel === 'facet' ||
this.options.onLoadPanel === 'datafilters'
)
if (L.Util.queryString('share')) {
this.share.open()
} else if (this.options.onLoadPanel === 'databrowser') {
this.panel.mode = 'expanded'
this.openBrowser()
} else if (this.options.onLoadPanel === 'datalayers') {
this.panel.mode = 'condensed'
this.openBrowser()
} else if (this.options.onLoadPanel === 'caption') {
this.panel.mode = 'condensed'
this.displayCaption()
} else if (['facet', 'datafilters'].includes(this.options.onLoadPanel)) {
this.openFacet()
}
const slug = L.Util.queryString('feature')
if (slug && this.features_index[slug]) this.features_index[slug].view()
if (L.Util.queryString('edit')) {
@ -271,6 +270,7 @@ U.Map = L.Map.extend({
reindexDataLayers: function () {
this.eachDataLayer((datalayer) => datalayer.reindex())
this.onDataLayersChanged()
},
redrawVisibleDataLayers: function () {
@ -302,7 +302,7 @@ U.Map = L.Map.extend({
// Specific case for datalayersControl
// which accepts "expanded" value, on top of true/false/null
if (L.Util.queryString('datalayersControl') === 'expanded') {
L.Util.setFromQueryString(options, 'datalayersControl')
options.onLoadPanel = 'datalayers'
}
},
@ -322,22 +322,26 @@ U.Map = L.Map.extend({
new U.EditControl(this).addTo(this)
new U.DrawToolbar({ map: this }).addTo(this)
const editActions = [
U.ImportAction,
U.EditCaptionAction,
U.EditPropertiesAction,
U.ManageDatalayersAction,
U.EditLayersAction,
U.ChangeTileLayerAction,
U.UpdateExtentAction,
U.UpdatePermsAction,
U.ImportAction,
]
if (this.options.editMode === 'advanced') {
new U.SettingsToolbar({ actions: editActions }).addTo(this)
}
}
this._controls.zoom = new L.Control.Zoom({
zoomInTitle: L._('Zoom in'),
zoomOutTitle: L._('Zoom out'),
})
this._controls.datalayers = new U.DataLayersControl(this)
this._controls.caption = new U.CaptionControl(this)
this._controls.locate = new U.Locate(this, {
strings: {
title: L._('Center map on your location'),
@ -460,7 +464,11 @@ U.Map = L.Map.extend({
if (!pane.dataset || !pane.dataset.id) continue
this.datalayers_index.push(this.datalayers[pane.dataset.id])
}
this.updateDatalayersControl()
this.onDataLayersChanged()
},
onDataLayersChanged: function () {
if (this.browser) this.browser.update()
},
ensurePanesOrder: function () {
@ -489,10 +497,6 @@ U.Map = L.Map.extend({
return this
},
updateDatalayersControl: function () {
if (this._controls.datalayers) this._controls.datalayers.update()
},
backupOptions: function () {
this._backupOptions = L.extend({}, this.options)
this._backupOptions.tilelayer = L.extend({}, this.options.tilelayer)
@ -516,8 +520,13 @@ U.Map = L.Map.extend({
L.DomEvent.stop(e)
this.search()
} else if (e.keyCode === U.Keys.ESC) {
if (this.help.visible()) this.help.hide()
else this.ui.closePanel()
if (this.help.visible()) {
this.help.hide()
} else {
this.panel.close()
this.editPanel.close()
this.fullPanel.close()
}
}
if (!this.hasEditMode()) return
@ -529,7 +538,6 @@ U.Map = L.Map.extend({
} else if (key === U.Keys.E && modifierKey && this.editEnabled && !this.isDirty) {
L.DomEvent.stop(e)
this.disableEdit()
this.ui.closePanel()
}
if (key === U.Keys.S && modifierKey) {
L.DomEvent.stop(e)
@ -767,6 +775,11 @@ U.Map = L.Map.extend({
return new U.DataLayer(this, datalayer)
},
newDataLayer: function () {
const datalayer = this.createDataLayer({})
datalayer.edit()
},
getDefaultOption: function (option) {
return U.SCHEMA[option] && U.SCHEMA[option].default
},
@ -804,10 +817,6 @@ U.Map = L.Map.extend({
})
},
manageDatalayers: function () {
if (this._controls.datalayers) this._controls.datalayers.openPanel()
},
toGeoJSON: function () {
let features = []
this.eachDataLayer((datalayer) => {
@ -951,9 +960,9 @@ U.Map = L.Map.extend({
})
this.ensurePanesOrder()
this.dirty_datalayers = []
this.updateDatalayersControl()
this.initTileLayers()
this.isDirty = false
this.onDataLayersChanged()
},
checkDirty: function () {
@ -1054,7 +1063,7 @@ U.Map = L.Map.extend({
else window.location = data.url
alert.content = data.info || alert.content
this.once('saved', () => this.ui.alert(alert))
this.ui.closePanel()
this.editPanel.close()
this.permissions.save()
}
},
@ -1459,19 +1468,6 @@ U.Map = L.Map.extend({
slideshow.appendChild(slideshowBuilder.build())
},
_editCredits: function (container) {
const credits = L.DomUtil.createFieldset(container, L._('Credits'))
const creditsFields = [
'options.licence',
'options.shortCredit',
'options.longCredit',
'options.permanentCredit',
'options.permanentCreditBackground',
]
const creditsBuilder = new U.FormBuilder(this, creditsFields)
credits.appendChild(creditsBuilder.build())
},
_advancedActions: function (container) {
const advancedActions = L.DomUtil.createFieldset(container, L._('Advanced actions'))
const advancedButtons = L.DomUtil.create('div', 'button-bar half', advancedActions)
@ -1514,18 +1510,37 @@ U.Map = L.Map.extend({
)
},
edit: function () {
editCaption: function () {
if (!this.editEnabled) return
if (this.options.editMode !== 'advanced') return
const container = L.DomUtil.create('div', 'umap-edit-container'),
metadataFields = ['options.name', 'options.description'],
title = L.DomUtil.create('h3', '', container)
title.textContent = L._('Edit map properties')
title.textContent = L._('Edit map details')
const builder = new U.FormBuilder(this, metadataFields, {
className: 'map-metadata',
})
const form = builder.build()
container.appendChild(form)
const credits = L.DomUtil.createFieldset(container, L._('Credits'))
const creditsFields = [
'options.licence',
'options.shortCredit',
'options.longCredit',
'options.permanentCredit',
'options.permanentCreditBackground',
]
const creditsBuilder = new U.FormBuilder(this, creditsFields)
credits.appendChild(creditsBuilder.build())
this.editPanel.open({ data: { html: container } })
},
edit: function () {
if (!this.editEnabled) return
if (this.options.editMode !== 'advanced') return
const container = L.DomUtil.create('div')
L.DomUtil.createTitle(container, L._('Map advanced properties'), 'icon-settings')
this._editControls(container)
this._editShapeProperties(container)
this._editDefaultProperties(container)
@ -1534,10 +1549,9 @@ U.Map = L.Map.extend({
this._editOverlay(container)
this._editBounds(container)
this._editSlideshow(container)
this._editCredits(container)
this._advancedActions(container)
this.ui.openPanel({ data: { html: container }, className: 'dark' })
this.editPanel.open({ data: { html: container }, className: 'dark' })
},
enableEdit: function () {
@ -1554,6 +1568,8 @@ U.Map = L.Map.extend({
this.editedFeature = null
this.editEnabled = false
this.fire('edit:disabled')
this.editPanel.close()
this.fullPanel.close()
},
hasEditMode: function () {
@ -1611,8 +1627,7 @@ U.Map = L.Map.extend({
askForReset: function (e) {
if (!confirm(L._('Are you sure you want to cancel your changes?'))) return
this.reset()
this.disableEdit(e)
this.ui.closePanel()
this.disableEdit()
},
startMarker: function () {
@ -1809,7 +1824,7 @@ U.Map = L.Map.extend({
},
search: function () {
if (this._controls.search) this._controls.search.openPanel(this)
if (this._controls.search) this._controls.search.open()
},
getFilterKeys: function () {

View file

@ -594,6 +594,7 @@ U.DataLayer = L.Evented.extend({
// Automatically, others will be shown manually, and thus will
// be in the "forced visibility" mode
if (this.autoLoaded()) this.map.on('zoomend', this.onZoomEnd, this)
this.on('datachanged', this.map.onDataLayersChanged, this.map)
},
render: function (fields, builder) {
@ -602,7 +603,7 @@ U.DataLayer = L.Evented.extend({
for (let impact of impacts) {
switch (impact) {
case 'ui':
this.map.updateDatalayersControl()
this.map.onDataLayersChanged()
break
case 'data':
if (fields.includes('options.type')) {
@ -845,7 +846,7 @@ U.DataLayer = L.Evented.extend({
if (L.Util.indexOf(this.map.datalayers_index, this) === -1)
this.map.datalayers_index.push(this)
}
this.map.updateDatalayersControl()
this.map.onDataLayersChanged()
},
_dataUrl: function () {
@ -1153,7 +1154,8 @@ U.DataLayer = L.Evented.extend({
delete this.map.datalayers[L.stamp(this)]
this.map.datalayers_index.splice(this.getRank(), 1)
this.parentPane.removeChild(this.pane)
this.map.updateDatalayersControl()
this.map.onDataLayersChanged()
this.off('datachanged', this.map.onDataLayersChanged, this.map)
this.fire('erase')
this._leaflet_events_bk = this._leaflet_events
this.map.off('moveend', this.onMoveEnd, this)
@ -1213,9 +1215,10 @@ U.DataLayer = L.Evented.extend({
},
],
]
const title = L.DomUtil.add('h3', '', container, L._('Layer properties'))
L.DomUtil.createTitle(container, L._('Layer properties'), 'icon-layers')
let builder = new U.FormBuilder(this, metadataFields, {
callback: function (e) {
this.map.onDataLayersChanged()
if (e.helper.field === 'options.type') {
this.edit()
}
@ -1349,7 +1352,7 @@ U.DataLayer = L.Evented.extend({
L._('Delete'),
function () {
this._delete()
this.map.ui.closePanel()
this.map.editPanel.close()
},
this
)
@ -1381,7 +1384,10 @@ U.DataLayer = L.Evented.extend({
'_blank'
)
}
this.map.ui.openPanel({ data: { html: container }, className: 'dark' })
this.map.editPanel.open({
data: { html: container },
actions: [U.Browser.backButton(this.map)],
})
},
getOwnOption: function (option) {

View file

@ -57,9 +57,9 @@ U.MapPermissions = L.Class.extend({
content: L._('Please save the map first'),
level: 'info',
})
const container = L.DomUtil.create('div', 'permissions-panel'),
fields = [],
title = L.DomUtil.create('h3', '', container)
const container = L.DomUtil.create('div', 'permissions-panel')
const fields = []
L.DomUtil.createTitle(container, L._('Update permissions'), 'icon-key')
if (this.isAnonymousMap()) {
if (this.options.anonymous_edit_url) {
const helpText = `${L._('Secret edit link:')}<br>${this.options.anonymous_edit_url
@ -103,7 +103,6 @@ U.MapPermissions = L.Class.extend({
{ handler: 'ManageEditors', label: L._("Map's editors") },
])
}
title.textContent = L._('Update permissions')
const builder = new U.FormBuilder(this, fields)
const form = builder.build()
container.appendChild(form)
@ -127,7 +126,7 @@ U.MapPermissions = L.Class.extend({
this.map.eachDataLayer((datalayer) => {
datalayer.permissions.edit(container)
})
this.map.ui.openPanel({ data: { html: container }, className: 'dark' })
this.map.editPanel.open({ data: { html: container }, className: 'dark' })
},
attach: async function () {
@ -138,7 +137,7 @@ U.MapPermissions = L.Class.extend({
content: L._('Map has been attached to your account'),
level: 'info',
})
this.map.ui.closePanel()
this.map.editPanel.close()
}
},

View file

@ -54,22 +54,10 @@ U.Popup.Panel = U.Popup.extend({
zoomAnimation: false,
},
allButton: function () {
const button = L.DomUtil.create('li', '')
L.DomUtil.create('i', 'umap-icon-16 umap-list', button)
const label = L.DomUtil.create('span', '', button)
label.textContent = label.title = L._('See all')
// Fixme: remove me when this is merged and released
// https://github.com/Leaflet/Leaflet/pull/9052
L.DomEvent.disableClickPropagation(button)
L.DomEvent.on(button, 'click', this.feature.map.openBrowser, this.feature.map)
return button
},
onAdd: function (map) {
map.ui.openPanel({
map.panel.open({
data: { html: this._content },
actions: [this.allButton()],
actions: [U.Browser.backButton(map)],
})
// fire events as in base class Popup.js:onAdd
@ -83,7 +71,7 @@ U.Popup.Panel = U.Popup.extend({
},
onRemove: function (map) {
map.ui.closePanel()
map.panel.close()
// fire events as in base class Popup.js:onRemove
map.fire('popupclose', { popup: this })

View file

@ -44,9 +44,12 @@ U.Share = L.Class.extend({
},
build: function () {
this.container = L.DomUtil.create('div', 'umap-share')
this.title = L.DomUtil.create('h3', '', this.container)
this.title.textContent = L._('Share and download')
this.container = L.DomUtil.create('div', '')
this.title = L.DomUtil.createTitle(
this.container,
L._('Share and download'),
'icon-share'
)
L.DomUtil.createCopiableInput(
this.container,
@ -156,7 +159,7 @@ U.Share = L.Class.extend({
open: function () {
if (!this.container) this.build()
this.map.ui.openPanel({ data: { html: this.container } })
this.map.panel.open({ data: { html: this.container } })
},
format: function (mode) {

View file

@ -94,13 +94,12 @@ U.TableEditor = L.Class.extend({
edit: function () {
const id = 'tableeditor:edit'
this.datalayer.map.fire('dataloading', { id: id })
this.compileProperties()
this.renderHeaders()
this.body.innerHTML = ''
this.datalayer.eachLayer(this.renderRow, this)
const addButton = L.DomUtil.create('li', 'add-property')
L.DomUtil.create('i', 'umap-icon-16 umap-add', addButton)
L.DomUtil.createIcon(addButton, 'icon-add')
const label = L.DomUtil.create('span', '', addButton)
label.textContent = label.title = L._('Add a new property')
const addProperty = function () {
@ -110,11 +109,10 @@ U.TableEditor = L.Class.extend({
this.edit()
}
L.DomEvent.on(addButton, 'click', addProperty, this)
this.datalayer.map.ui.openPanel({
this.datalayer.map.fullPanel.open({
data: { html: this.table },
className: 'umap-table-editor fullwidth dark',
className: 'umap-table-editor',
actions: [addButton],
})
this.datalayer.map.fire('dataload', { id: id })
},
})

View file

@ -13,63 +13,12 @@ U.UI = L.Evented.extend({
L.DomEvent.on(this.container, 'contextmenu', L.DomEvent.stopPropagation) // Do not activate our custom context menu.
L.DomEvent.on(this.container, 'wheel', L.DomEvent.stopPropagation)
L.DomEvent.on(this.container, 'MozMousePixelScroll', L.DomEvent.stopPropagation)
this._panel = L.DomUtil.create('div', '', this.container)
this._panel.id = 'umap-ui-container'
this._alert = L.DomUtil.create('div', 'with-transition', this.container)
this._alert.id = 'umap-alert-container'
this._tooltip = L.DomUtil.create('div', '', this.container)
this._tooltip.id = 'umap-tooltip-container'
},
resetPanelClassName: function () {
this._panel.className = 'with-transition'
},
openPanel: function (e) {
this.fire('panel:open')
// We reset all because we can't know which class has been added
// by previous ui processes...
this.resetPanelClassName()
this._panel.innerHTML = ''
const actionsContainer = L.DomUtil.create('ul', 'toolbox', this._panel)
const body = L.DomUtil.create('div', 'body', this._panel)
if (e.data.html.nodeType && e.data.html.nodeType === 1)
body.appendChild(e.data.html)
else body.innerHTML = e.data.html
const closeLink = L.DomUtil.create('li', 'umap-close-link', actionsContainer)
L.DomUtil.add('i', 'umap-close-icon', closeLink)
const label = L.DomUtil.create('span', '', closeLink)
label.title = label.textContent = L._('Close')
if (e.actions) {
for (let i = 0; i < e.actions.length; i++) {
actionsContainer.appendChild(e.actions[i])
}
}
if (e.className) L.DomUtil.addClass(this._panel, e.className)
if (L.DomUtil.hasClass(this.parent, 'umap-ui')) {
// Already open.
this.fire('panel:ready')
} else {
L.DomEvent.once(
this._panel,
'transitionend',
function (e) {
this.fire('panel:ready')
},
this
)
L.DomUtil.addClass(this.parent, 'umap-ui')
}
L.DomEvent.on(closeLink, 'click', this.closePanel, this)
},
closePanel: function () {
if (L.DomUtil.hasClass(this.parent, 'umap-ui')) {
L.DomUtil.removeClass(this.parent, 'umap-ui')
this.fire('panel:closed')
}
},
alert: function (e) {
if (L.DomUtil.hasClass(this.parent, 'umap-alert')) this.ALERTS.push(e)
else this.popAlert(e)

View file

@ -230,7 +230,7 @@ const locale = {
"Save this location as new feature": "Save this location as new feature",
"Search location": "Search location",
"See all": "ሁሉንም ተመልከት",
"See data layers": "See data layers",
"See layers": "See layers",
"See full screen": "ሙሉውን ስክሪን ተመልከት",
"Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…",
"Shape properties": "Shape properties",

View file

@ -335,7 +335,7 @@
"Secret edit link copied to clipboard!": "Secret edit link copied to clipboard!",
"Secret edit link:": "Secret edit link:",
"See all": "ሁሉንም ተመልከት",
"See data layers": "See data layers",
"See layers": "See layers",
"See full screen": "ሙሉውን ስክሪን ተመልከት",
"See on OpenStreetMap": "See on OpenStreetMap",
"Select data": "Select data",

View file

@ -230,7 +230,7 @@ const locale = {
"Save this location as new feature": "Save this location as new feature",
"Search location": "Search location",
"See all": "See all",
"See data layers": "See data layers",
"See layers": "See layers",
"See full screen": "See full screen",
"Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…",
"Shape properties": "Shape properties",

View file

@ -335,7 +335,7 @@
"Secret edit link copied to clipboard!": "Secret edit link copied to clipboard!",
"Secret edit link:": "Secret edit link:",
"See all": "See all",
"See data layers": "See data layers",
"See layers": "See layers",
"See full screen": "See full screen",
"See on OpenStreetMap": "See on OpenStreetMap",
"Select data": "Select data",

View file

@ -230,7 +230,7 @@ const locale = {
"Save this location as new feature": "Save this location as new feature",
"Search location": "Search location",
"See all": "See all",
"See data layers": "See data layers",
"See layers": "See layers",
"See full screen": "See full screen",
"Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…",
"Shape properties": "Shape properties",

View file

@ -335,7 +335,7 @@
"Secret edit link copied to clipboard!": "Secret edit link copied to clipboard!",
"Secret edit link:": "Secret edit link:",
"See all": "See all",
"See data layers": "See data layers",
"See layers": "See layers",
"See full screen": "See full screen",
"See on OpenStreetMap": "See on OpenStreetMap",
"Select data": "Select data",

View file

@ -230,7 +230,7 @@ const locale = {
"Save this location as new feature": "Save this location as new feature",
"Search location": "Search location",
"See all": "See all",
"See data layers": "See data layers",
"See layers": "See layers",
"See full screen": "Виж на цял екран",
"Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…",
"Shape properties": "Shape properties",

View file

@ -335,7 +335,7 @@
"Secret edit link copied to clipboard!": "Secret edit link copied to clipboard!",
"Secret edit link:": "Secret edit link:",
"See all": "See all",
"See data layers": "See data layers",
"See layers": "See layers",
"See full screen": "Виж на цял екран",
"See on OpenStreetMap": "See on OpenStreetMap",
"Select data": "Select data",

View file

@ -230,7 +230,7 @@ const locale = {
"Save this location as new feature": "Enrollañ al lec'h-mañ evel un elfenn nevez",
"Search location": "Klask ul lec'h",
"See all": "Gwelet pep tra",
"See data layers": "Diskouez ar gwiskadoù",
"See layers": "Diskouez ar gwiskadoù",
"See full screen": "Gwelet e skramm a-bezh",
"Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Diweredekaat evit kuzhat ar gwiskad-mañ ouzh an diaporama, ar merdeer roadennoù...",
"Shape properties": "Perzhioù ar furm",

View file

@ -335,7 +335,7 @@
"Secret edit link copied to clipboard!": "Liamm aozañ kuzh eilet er golver!",
"Secret edit link:": "Liamm aozañ kuzh:",
"See all": "Gwelet pep tra",
"See data layers": "Diskouez ar gwiskadoù",
"See layers": "Diskouez ar gwiskadoù",
"See full screen": "Gwelet e skramm a-bezh",
"See on OpenStreetMap": "Gwelet war OpenStreetMap",
"Select data": "Diuzañ ar roadennoù",

View file

@ -230,7 +230,7 @@ const locale = {
"Save this location as new feature": "Save this location as new feature",
"Search location": "Search location",
"See all": "See all",
"See data layers": "Mostra les capes de dades",
"See layers": "Mostra les capes de dades",
"See full screen": "Mostra-ho a pantalla completa",
"Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…",
"Shape properties": "Shape properties",

View file

@ -335,7 +335,7 @@
"Secret edit link copied to clipboard!": "L'enllaç secret s'ha copiat al porta-retalls!",
"Secret edit link:": "Secret edit link:",
"See all": "See all",
"See data layers": "Mostra les capes de dades",
"See layers": "Mostra les capes de dades",
"See full screen": "Mostra-ho a pantalla completa",
"See on OpenStreetMap": "See on OpenStreetMap",
"Select data": "Select data",

View file

@ -230,7 +230,7 @@ const locale = {
"Save this location as new feature": "Uložit tuto pozici jako nový objekt",
"Search location": "Vyhledat místo na mapě",
"See all": "Zobraz vše",
"See data layers": "Zobrazit datové vrstvy",
"See layers": "Zobrazit datové vrstvy",
"See full screen": "Na celou obrazovku",
"Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Nastavte na false pro ukrytí této vrstvy z prezentace, prohlížeče dat, vyskakovací navigace...",
"Shape properties": "Vlastností tvaru",

View file

@ -335,7 +335,7 @@
"Secret edit link copied to clipboard!": "Tajný odkaz na úpravy do schránky!",
"Secret edit link:": "Tajný odkaz na úpravy:",
"See all": "Zobraz vše",
"See data layers": "Zobrazit datové vrstvy",
"See layers": "Zobrazit datové vrstvy",
"See full screen": "Na celou obrazovku",
"See on OpenStreetMap": "See on OpenStreetMap",
"Select data": "Select data",

View file

@ -230,7 +230,7 @@ const locale = {
"Save this location as new feature": "Gem denne placering som et nyt objekt",
"Search location": "Søg efter placering",
"See all": "Se alle",
"See data layers": "Se datalag",
"See layers": "Se datalag",
"See full screen": "Se i fuld skærm",
"Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Sæt den til false, for at skjule dette lag fra slideshowet, databrowseren, popupnavigeringen…",
"Shape properties": "Figuregenskaber",

View file

@ -335,7 +335,7 @@
"Secret edit link copied to clipboard!": "Secret edit link copied to clipboard!",
"Secret edit link:": "Secret edit link:",
"See all": "Se alle",
"See data layers": "Se datalag",
"See layers": "Se datalag",
"See full screen": "Se i fuld skærm",
"See on OpenStreetMap": "See on OpenStreetMap",
"Select data": "Select data",

View file

@ -230,7 +230,7 @@ const locale = {
"Save this location as new feature": "Diesen Ort als neues Element speichern",
"Search location": "Ort suchen",
"See all": "Alle anzeigen",
"See data layers": "Datenebenen ansehen",
"See layers": "Datenebenen ansehen",
"See full screen": "Vollbildanzeige",
"Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Setze es auf Nein, um diese Ebene in der Diashow, im Datenbrowser, in der Popup-Navigation,... auszublenden.",
"Shape properties": "Formeigenschaften",

View file

@ -335,7 +335,7 @@
"Secret edit link copied to clipboard!": "Geheimer Link zum Bearbeiten der Karte in die Zwischenablage kopiert!",
"Secret edit link:": "Secret edit link:",
"See all": "Alle anzeigen",
"See data layers": "Datenebenen ansehen",
"See layers": "Datenebenen ansehen",
"See full screen": "Vollbildanzeige",
"See on OpenStreetMap": "See on OpenStreetMap",
"Select data": "Wähle Daten aus",

View file

@ -230,7 +230,7 @@ const locale = {
"Save this location as new feature": "Αποθήκευση αυτής της τοποθεσίας ως νέο στοιχείο",
"Search location": "Αναζήτηση τοποθεσίας",
"See all": "Εμφάνιση όλων",
"See data layers": "Εμφάνιση επιπέδων δεδομένων",
"See layers": "Εμφάνιση επιπέδων δεδομένων",
"See full screen": "Εμφάνιση πλήρους οθόνης",
"Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Απενεργοποίηση εάν επιθυμείτε την απόκρυψη του επιπέδου κατά την προβολή των διαφανειών, την περιήγηση δεδομένων, την αναδυόμενη πλοήγηση...",
"Shape properties": "Ιδιότητες σχήματος",

View file

@ -335,7 +335,7 @@
"Secret edit link copied to clipboard!": "Ο μυστικός σύνδεσμος επεξεργασίας αντιγράφηκε στο πρόχειρο!",
"Secret edit link:": "Μυστικός σύνδεσμος επεξεργασίας:",
"See all": "Εμφάνιση όλων",
"See data layers": "Εμφάνιση επιπέδων δεδομένων",
"See layers": "Εμφάνιση επιπέδων δεδομένων",
"See full screen": "Εμφάνιση πλήρους οθόνης",
"See on OpenStreetMap": "See on OpenStreetMap",
"Select data": "Επιλογή δεδομένων",

View file

@ -230,7 +230,7 @@ const locale = {
"Save this location as new feature": "Save this location as new feature",
"Search location": "Search location",
"See all": "See all",
"See data layers": "See data layers",
"See layers": "See layers",
"See full screen": "See full screen",
"Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…",
"Shape properties": "Shape properties",

View file

@ -335,7 +335,7 @@
"Secret edit link copied to clipboard!": "Secret edit link copied to clipboard!",
"Secret edit link:": "Secret edit link:",
"See all": "See all",
"See data layers": "See data layers",
"See layers": "See layers",
"See full screen": "See full screen",
"See on OpenStreetMap": "See on OpenStreetMap",
"Select data": "Select data",

View file

@ -335,7 +335,7 @@
"Secret edit link copied to clipboard!": "Secret edit link copied to clipboard!",
"Secret edit link:": "Secret edit link:",
"See all": "See all",
"See data layers": "See data layers",
"See layers": "See layers",
"See full screen": "See full screen",
"See on OpenStreetMap": "See on OpenStreetMap",
"Select data": "Select data",

View file

@ -230,7 +230,7 @@ const locale = {
"Save this location as new feature": "Guardar esta ubicación como nuevo elemento",
"Search location": "Buscar ubicación",
"See all": "Ver todo",
"See data layers": "Ver capas de datos",
"See layers": "Ver capas de datos",
"See full screen": "Ver pantalla completa",
"Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Establecer en falso para ocultar esta capa de la presentación de diapositivas, el navegador de datos, la navegación emergente...",
"Shape properties": "Propiedades de la figura",

View file

@ -335,7 +335,7 @@
"Secret edit link copied to clipboard!": "Enlace de edición secreto copiado en el portapapeles",
"Secret edit link:": "Enlace secreto de edición:",
"See all": "Ver todo",
"See data layers": "Ver capas de datos",
"See layers": "Ver capas de datos",
"See full screen": "Ver pantalla completa",
"See on OpenStreetMap": "See on OpenStreetMap",
"Select data": "Select data",

View file

@ -230,7 +230,7 @@ const locale = {
"Save this location as new feature": "Salvesta see asukoht uue elemendina",
"Search location": "Asukoha otsing",
"See all": "Näita kõiki",
"See data layers": "Näita andmekihte",
"See layers": "Näita andmekihte",
"See full screen": "Täisekraanvaade",
"Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…",
"Shape properties": "Kujundi omadused",

View file

@ -335,7 +335,7 @@
"Secret edit link copied to clipboard!": "Secret edit link copied to clipboard!",
"Secret edit link:": "Secret edit link:",
"See all": "Näita kõiki",
"See data layers": "Näita andmekihte",
"See layers": "Näita andmekihte",
"See full screen": "Täisekraanvaade",
"See on OpenStreetMap": "See on OpenStreetMap",
"Select data": "Select data",

View file

@ -250,7 +250,7 @@ const locale = {
"Search location": "Search location",
"Secret edit link is:<br>{link}": "Secret edit link is:<br>{link}",
"See all": "See all",
"See data layers": "See data layers",
"See layers": "See layers",
"See full screen": "See full screen",
"Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…",
"Shape properties": "Shape properties",

View file

@ -335,7 +335,7 @@
"Secret edit link copied to clipboard!": "Secret edit link copied to clipboard!",
"Secret edit link:": "Secret edit link:",
"See all": "See all",
"See data layers": "See data layers",
"See layers": "See layers",
"See full screen": "See full screen",
"See on OpenStreetMap": "See on OpenStreetMap",
"Select data": "Select data",

View file

@ -230,7 +230,7 @@ const locale = {
"Save this location as new feature": "این مکان را به عنوان ویژگی جدید ذخیره کنید",
"Search location": "مکان را جستجو کنید",
"See all": "همه را ببین",
"See data layers": "لایه های داده را مشاهده کنید",
"See layers": "لایه های داده را مشاهده کنید",
"See full screen": "تمام صفحه را مشاهده کنید",
"Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "آن را روی غلط/false تنظیم کنید تا این لایه از نمایش اسلاید، مرورگر داده، ناوبری بازشو پنهان شود…",
"Shape properties": "ویژگی های شکل",

View file

@ -335,7 +335,7 @@
"Secret edit link copied to clipboard!": "Secret edit link copied to clipboard!",
"Secret edit link:": "Secret edit link:",
"See all": "همه را ببین",
"See data layers": "لایه های داده را مشاهده کنید",
"See layers": "لایه های داده را مشاهده کنید",
"See full screen": "تمام صفحه را مشاهده کنید",
"See on OpenStreetMap": "See on OpenStreetMap",
"Select data": "داده‌ها را انتخاب کنید",

View file

@ -230,7 +230,7 @@ const locale = {
"Save this location as new feature": "Save this location as new feature",
"Search location": "Search location",
"See all": "Näytä kaikki",
"See data layers": "See data layers",
"See layers": "See layers",
"See full screen": "Katso koko näytöllä",
"Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…",
"Shape properties": "Piirteen ominaisuudet",

View file

@ -335,7 +335,7 @@
"Secret edit link copied to clipboard!": "Secret edit link copied to clipboard!",
"Secret edit link:": "Secret edit link:",
"See all": "Näytä kaikki",
"See data layers": "See data layers",
"See layers": "See layers",
"See full screen": "Katso koko näytöllä",
"See on OpenStreetMap": "See on OpenStreetMap",
"Select data": "Select data",

View file

@ -230,7 +230,7 @@ const locale = {
"Save this location as new feature": "Enregistrer ce lieu comme élément de la carte",
"Search location": "Chercher un lieu",
"See all": "Tout voir",
"See data layers": "Voir les calques",
"See layers": "Voir les calques",
"See full screen": "Voir en plein écran",
"Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Désactiver pour masquer ce calque du diaporama, du navigateur de données…",
"Shape properties": "Propriétés de la forme",

View file

@ -335,7 +335,7 @@
"Secret edit link copied to clipboard!": "Lien d'édition secret copié dans le presse-papier!",
"Secret edit link:": "Lien d'édition secret :",
"See all": "Tout voir",
"See data layers": "Voir les calques",
"See layers": "Voir les calques",
"See full screen": "Voir en plein écran",
"See on OpenStreetMap": "Voir sur OpenStreetMap",
"Select data": "Sélectionner les données",

View file

@ -230,7 +230,7 @@ const locale = {
"Save this location as new feature": "Gardar esta ubicación coma novo elemento",
"Search location": "Procurar localización",
"See all": "Ollar todo",
"See data layers": "Ollar capas de datos",
"See layers": "Ollar capas de datos",
"See full screen": "Ollar pantalla completa",
"Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Axústeo a falso para agochar esta capa da presentación ('slideshow'), o navegador de datos, a navegación da xanela emerxente...",
"Shape properties": "Propiedades da forma",

View file

@ -335,7 +335,7 @@
"Secret edit link copied to clipboard!": "Secret edit link copied to clipboard!",
"Secret edit link:": "Secret edit link:",
"See all": "Ollar todo",
"See data layers": "Ollar capas de datos",
"See layers": "Ollar capas de datos",
"See full screen": "Ollar pantalla completa",
"See on OpenStreetMap": "See on OpenStreetMap",
"Select data": "Select data",

View file

@ -230,7 +230,7 @@ const locale = {
"Save this location as new feature": "לשמור את המיקום הזה כתכונה חדשה",
"Search location": "חיפוש מיקום",
"See all": "להציג הכול",
"See data layers": "להציג שכבות נתונים",
"See layers": "להציג שכבות נתונים",
"See full screen": "הצגת מסך מלא",
"Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "יש להגדיר לשקר כדי להסתיר את השכבה הזאת מהמצגת, דפדפן הנתונים, הניווט המוקפץ…",
"Shape properties": "מאפייני צורה",

View file

@ -335,7 +335,7 @@
"Secret edit link copied to clipboard!": "Secret edit link copied to clipboard!",
"Secret edit link:": "Secret edit link:",
"See all": "להציג הכול",
"See data layers": "להציג שכבות נתונים",
"See layers": "להציג שכבות נתונים",
"See full screen": "הצגת מסך מלא",
"See on OpenStreetMap": "See on OpenStreetMap",
"Select data": "Select data",

View file

@ -230,7 +230,7 @@ const locale = {
"Save this location as new feature": "Save this location as new feature",
"Search location": "Search location",
"See all": "See all",
"See data layers": "Prikaži unesene podatke",
"See layers": "Prikaži unesene podatke",
"See full screen": "See full screen",
"Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…",
"Shape properties": "Shape properties",

View file

@ -335,7 +335,7 @@
"Secret edit link copied to clipboard!": "Secret edit link copied to clipboard!",
"Secret edit link:": "Secret edit link:",
"See all": "See all",
"See data layers": "Prikaži unesene podatke",
"See layers": "Prikaži unesene podatke",
"See full screen": "See full screen",
"See on OpenStreetMap": "See on OpenStreetMap",
"Select data": "Select data",

View file

@ -230,7 +230,7 @@ const locale = {
"Save this location as new feature": "E hely mentése új objektumként",
"Search location": "Hely keresése",
"See all": "Összes megtekintése",
"See data layers": "Adatrétegek megtekintése",
"See layers": "Adatrétegek megtekintése",
"See full screen": "Teljes képernyős nézet megtekintése",
"Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Állítsa hamisra, hogy elrejtse ezt a réteget a diavetítésből, az adatböngészőből, az előugró navigációból stb.",
"Shape properties": "Alakzat tulajdonságai",

View file

@ -335,7 +335,7 @@
"Secret edit link copied to clipboard!": "Titkos szerkesztési link a vágólapra másolva.",
"Secret edit link:": "Titkos szerkesztési link:",
"See all": "Összes megtekintése",
"See data layers": "Adatrétegek megtekintése",
"See layers": "Adatrétegek megtekintése",
"See full screen": "Teljes képernyős nézet megtekintése",
"See on OpenStreetMap": "Megtekintés az OpenStreetMapen",
"Select data": "Select data",

View file

@ -230,7 +230,7 @@ const locale = {
"Save this location as new feature": "Save this location as new feature",
"Search location": "Search location",
"See all": "See all",
"See data layers": "See data layers",
"See layers": "See layers",
"See full screen": "See full screen",
"Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…",
"Shape properties": "Shape properties",

View file

@ -335,7 +335,7 @@
"Secret edit link copied to clipboard!": "Secret edit link copied to clipboard!",
"Secret edit link:": "Secret edit link:",
"See all": "See all",
"See data layers": "See data layers",
"See layers": "See layers",
"See full screen": "See full screen",
"See on OpenStreetMap": "See on OpenStreetMap",
"Select data": "Select data",

View file

@ -230,7 +230,7 @@ const locale = {
"Save this location as new feature": "Vista þessa staðsetningu sem nýja fitju",
"Search location": "Leita að staðsetningu",
"See all": "Sjá allt",
"See data layers": "Skoða gagnalög",
"See layers": "Skoða gagnalög",
"See full screen": "Fylla skjáinn",
"Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Settu þetta sem ósatt til að fela þetta lag úr skyggnusýningu, gagnavafranum, sprettleiðsögn…",
"Shape properties": "Eiginleikar lögunar",

View file

@ -335,7 +335,7 @@
"Secret edit link copied to clipboard!": "Secret edit link copied to clipboard!",
"Secret edit link:": "Secret edit link:",
"See all": "Sjá allt",
"See data layers": "Skoða gagnalög",
"See layers": "Skoða gagnalög",
"See full screen": "Fylla skjáinn",
"See on OpenStreetMap": "See on OpenStreetMap",
"Select data": "Select data",

View file

@ -230,7 +230,7 @@ const locale = {
"Save this location as new feature": "Salva questa posizione come nuovo oggetto",
"Search location": "Cerca un luogo",
"See all": "Vedi tutto",
"See data layers": "Vedi i layer di dati",
"See layers": "Vedi i layer di dati",
"See full screen": "Visualizza a schermo intero",
"Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Impostalo su false per nascondere questo layer dalla presentazione, dal browser dati, dalla navigazione popup...",
"Shape properties": "Proprietà della geometria",

View file

@ -335,7 +335,7 @@
"Secret edit link copied to clipboard!": "Link della modifica segreta copiato in memoria!",
"Secret edit link:": "Link segreto per editare:",
"See all": "Vedi tutto",
"See data layers": "Vedi i layer di dati",
"See layers": "Vedi i layer di dati",
"See full screen": "Visualizza a schermo intero",
"See on OpenStreetMap": "Vedi su OpenStreetMap",
"Select data": "Seleziona i dati",

View file

@ -230,7 +230,7 @@ const locale = {
"Save this location as new feature": "この場所を新しい地物として保存",
"Search location": "地名で検索",
"See all": "すべて表示",
"See data layers": "データレイヤを見る",
"See layers": "データレイヤを見る",
"See full screen": "フルスクリーン表示",
"Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…",
"Shape properties": "シェイプ表示プロパティ",

View file

@ -335,7 +335,7 @@
"Secret edit link copied to clipboard!": "Secret edit link copied to clipboard!",
"Secret edit link:": "Secret edit link:",
"See all": "すべて表示",
"See data layers": "データレイヤを見る",
"See layers": "データレイヤを見る",
"See full screen": "フルスクリーン表示",
"See on OpenStreetMap": "See on OpenStreetMap",
"Select data": "Select data",

View file

@ -230,7 +230,7 @@ const locale = {
"Save this location as new feature": "Save this location as new feature",
"Search location": "Search location",
"See all": "See all",
"See data layers": "See data layers",
"See layers": "See layers",
"See full screen": "See full screen",
"Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…",
"Shape properties": "Shape properties",

View file

@ -335,7 +335,7 @@
"Secret edit link copied to clipboard!": "Secret edit link copied to clipboard!",
"Secret edit link:": "Secret edit link:",
"See all": "See all",
"See data layers": "See data layers",
"See layers": "See layers",
"See full screen": "See full screen",
"See on OpenStreetMap": "See on OpenStreetMap",
"Select data": "Select data",

View file

@ -230,7 +230,7 @@ const locale = {
"Save this location as new feature": "Save this location as new feature",
"Search location": "Search location",
"See all": "Išsaugoti viską",
"See data layers": "See data layers",
"See layers": "See layers",
"See full screen": "Peržiūrėti per visą ekraną",
"Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…",
"Shape properties": "Shape properties",

View file

@ -335,7 +335,7 @@
"Secret edit link copied to clipboard!": "Secret edit link copied to clipboard!",
"Secret edit link:": "Secret edit link:",
"See all": "Išsaugoti viską",
"See data layers": "See data layers",
"See layers": "See layers",
"See full screen": "Peržiūrėti per visą ekraną",
"See on OpenStreetMap": "See on OpenStreetMap",
"Select data": "Select data",

View file

@ -230,7 +230,7 @@ const locale = {
"Save this location as new feature": "Simpan kedudukan ini sebagai sifat baharu",
"Search location": "Kedudukan carian",
"See all": "Lihat semua",
"See data layers": "Lihat lapisan data",
"See layers": "Lihat lapisan data",
"See full screen": "Lihat skrin penuh",
"Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Tetapkan ke 'false' untuk menyembunyikan lapisan ini daripada persembahan slaid, pelayar data, navigasi timbul…",
"Shape properties": "Ciri-ciri bentuk",

View file

@ -335,7 +335,7 @@
"Secret edit link copied to clipboard!": "Pautan suntingan rahsia telah disalin ke papan keratan!",
"Secret edit link:": "Pautan suntingan rahsia:",
"See all": "Lihat semua",
"See data layers": "Lihat lapisan data",
"See layers": "Lihat lapisan data",
"See full screen": "Lihat skrin penuh",
"See on OpenStreetMap": "Lihat di OpenStreetMap",
"Select data": "Pilih data",

View file

@ -230,7 +230,7 @@ const locale = {
"Save this location as new feature": "Sla deze locatie op als nieuw object",
"Search location": "Zoek locatie",
"See all": "Toon alles",
"See data layers": "Bekijk datalagen",
"See layers": "Bekijk datalagen",
"See full screen": "Op volledig scherm weergeven",
"Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Zet op onwaar ('false') om deze laag te verbergen in de slideshow, data verkenner, popup navigatie, ...",
"Shape properties": "Eigenschappen van de vorm",

View file

@ -335,7 +335,7 @@
"Secret edit link copied to clipboard!": "Geheime editeer-link is gekopieerd naar het klembord!",
"Secret edit link:": "Geheime editeer-link",
"See all": "Toon alles",
"See data layers": "Bekijk datalagen",
"See layers": "Bekijk datalagen",
"See full screen": "Op volledig scherm weergeven",
"See on OpenStreetMap": "Bekijk op OpenStreetMap",
"Select data": "Select data",

View file

@ -230,7 +230,7 @@ const locale = {
"Save this location as new feature": "Save this location as new feature",
"Search location": "Search location",
"See all": "See all",
"See data layers": "See data layers",
"See layers": "See layers",
"See full screen": "See full screen",
"Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…",
"Shape properties": "Shape properties",

View file

@ -335,7 +335,7 @@
"Secret edit link copied to clipboard!": "Secret edit link copied to clipboard!",
"Secret edit link:": "Secret edit link:",
"See all": "See all",
"See data layers": "See data layers",
"See layers": "See layers",
"See full screen": "See full screen",
"See on OpenStreetMap": "See on OpenStreetMap",
"Select data": "Select data",

View file

@ -230,7 +230,7 @@ const locale = {
"Save this location as new feature": "Zapisz to miejsce jako nowy obiekt",
"Search location": "Znajdź miejsce",
"See all": "Pokaż wszystko",
"See data layers": "Zobacz wszystkie warstwy danych",
"See layers": "Zobacz wszystkie warstwy danych",
"See full screen": "Pełny ekran",
"Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Ustaw „OFF”, żeby ukryć tę warstwę z pokazu slajdów, przeglądarki danych i okienek nawigacji.",
"Shape properties": "Właściwości kształtu",

View file

@ -335,7 +335,7 @@
"Secret edit link copied to clipboard!": "Tajny odnośnik do edycji skopiowany do schowka!",
"Secret edit link:": "Sekretny odnośnik edycji:",
"See all": "Pokaż wszystko",
"See data layers": "Zobacz wszystkie warstwy danych",
"See layers": "Zobacz wszystkie warstwy danych",
"See full screen": "Pełny ekran",
"See on OpenStreetMap": "See on OpenStreetMap",
"Select data": "Select data",

View file

@ -335,7 +335,7 @@
"Secret edit link copied to clipboard!": "Secret edit link copied to clipboard!",
"Secret edit link:": "Secret edit link:",
"See all": "See all",
"See data layers": "See data layers",
"See layers": "See layers",
"See full screen": "See full screen",
"See on OpenStreetMap": "See on OpenStreetMap",
"Select data": "Select data",

View file

@ -230,7 +230,7 @@ const locale = {
"Save this location as new feature": "Gravar esta localização como novo elemento",
"Search location": "Procurar localização",
"See all": "Ver tudo",
"See data layers": "Ver camadas de dados",
"See layers": "Ver camadas de dados",
"See full screen": "Ver em ecrã total",
"Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Defina como falso para ocultar esta camada da apresentação de slides, o navegador de dados e da navegação do popup…",
"Shape properties": "Propriedades de formas geométricas",

View file

@ -335,7 +335,7 @@
"Secret edit link copied to clipboard!": "Secret edit link copied to clipboard!",
"Secret edit link:": "Secret edit link:",
"See all": "Ver tudo",
"See data layers": "Ver camadas de dados",
"See layers": "Ver camadas de dados",
"See full screen": "Ver em ecrã total",
"See on OpenStreetMap": "See on OpenStreetMap",
"Select data": "Select data",

View file

@ -230,7 +230,7 @@ const locale = {
"Save this location as new feature": "Gravar esta localização como novo elemento",
"Search location": "Procurar localização",
"See all": "Ver tudo",
"See data layers": "Ver camadas de dados",
"See layers": "Ver camadas de dados",
"See full screen": "Ver em ecrã total",
"Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Defina como falso para ocultar esta camada da apresentação de slides, o navegador de dados e da navegação do popup…",
"Shape properties": "Propriedades de formas geométricas",

View file

@ -335,7 +335,7 @@
"Secret edit link copied to clipboard!": "Secret edit link copied to clipboard!",
"Secret edit link:": "Secret edit link:",
"See all": "Ver tudo",
"See data layers": "Ver camadas de dados",
"See layers": "Ver camadas de dados",
"See full screen": "Ver em ecrã total",
"See on OpenStreetMap": "See on OpenStreetMap",
"Select data": "Select data",

View file

@ -230,7 +230,7 @@ const locale = {
"Save this location as new feature": "Gravar esta localização como novo elemento",
"Search location": "Procurar localização",
"See all": "Ver tudo",
"See data layers": "Ver camadas de dados",
"See layers": "Ver camadas de dados",
"See full screen": "Ver em ecrã total",
"Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Defina como falso para ocultar esta camada da apresentação de slides, o navegador de dados e da navegação do popup…",
"Shape properties": "Propriedades de formas geométricas",

View file

@ -335,7 +335,7 @@
"Secret edit link copied to clipboard!": "Secret edit link copied to clipboard!",
"Secret edit link:": "Secret edit link:",
"See all": "Ver tudo",
"See data layers": "Ver camadas de dados",
"See layers": "Ver camadas de dados",
"See full screen": "Ver em ecrã total",
"See on OpenStreetMap": "See on OpenStreetMap",
"Select data": "Select data",

Some files were not shown because too many files have changed in this diff Show more