From 19d2b39423c3b1e81df02728e4526e0b19e189c2 Mon Sep 17 00:00:00 2001 From: Yohan Boniface Date: Sat, 2 Jun 2018 12:21:40 +0200 Subject: [PATCH] Leaflet.Storage is now integrated inside this repository --- .gitignore | 2 + MANIFEST.in | 1 + Makefile | 26 + package-lock.json | 2465 +++++++++++++++++ package.json | 63 + umap/static/umap/default.css | 569 ++++ umap/static/umap/img/16-white.png | Bin 0 -> 13739 bytes umap/static/umap/img/16-white.svg | 718 +++++ umap/static/umap/img/16.png | Bin 0 -> 11308 bytes umap/static/umap/img/16.svg | 681 +++++ umap/static/umap/img/24-white.png | Bin 0 -> 19034 bytes umap/static/umap/img/24-white.svg | 463 ++++ umap/static/umap/img/24.png | Bin 0 -> 14755 bytes umap/static/umap/img/24.svg | 461 +++ umap/static/umap/img/edit-16.png | Bin 0 -> 430 bytes umap/static/umap/img/icon-bg.png | Bin 0 -> 190 bytes umap/static/umap/img/marker.png | Bin 0 -> 375 bytes umap/static/umap/img/search.gif | Bin 0 -> 1472 bytes .../{autocomplete.js => umap.autocomplete.js} | 0 umap/static/umap/js/umap.controls.js | 1131 ++++++++ umap/static/umap/js/umap.core.js | 521 ++++ umap/static/umap/js/umap.features.js | 1024 +++++++ umap/static/umap/js/umap.forms.js | 666 +++++ umap/static/umap/js/umap.icon.js | 177 ++ umap/static/umap/js/umap.js | 1654 +++++++++++ umap/static/umap/js/umap.layer.js | 1045 +++++++ umap/static/umap/js/umap.popup.js | 218 ++ umap/static/umap/js/umap.slideshow.js | 164 ++ umap/static/umap/js/umap.tableeditor.js | 99 + umap/static/umap/js/umap.ui.js | 176 ++ umap/static/umap/js/umap.xhr.js | 294 ++ umap/static/umap/locale/am_ET.json | 350 +++ umap/static/umap/locale/ar.json | 350 +++ umap/static/umap/locale/ast.json | 350 +++ umap/static/umap/locale/bg.json | 350 +++ umap/static/umap/locale/ca.json | 350 +++ umap/static/umap/locale/cs_CZ.json | 350 +++ umap/static/umap/locale/da.json | 350 +++ umap/static/umap/locale/de.json | 350 +++ umap/static/umap/locale/en.json | 350 +++ umap/static/umap/locale/en_US.json | 350 +++ umap/static/umap/locale/es.json | 350 +++ umap/static/umap/locale/fi.json | 350 +++ umap/static/umap/locale/fr.json | 350 +++ umap/static/umap/locale/gl.json | 350 +++ umap/static/umap/locale/hr.json | 350 +++ umap/static/umap/locale/hu.json | 350 +++ umap/static/umap/locale/id.json | 350 +++ umap/static/umap/locale/it.json | 350 +++ umap/static/umap/locale/ja.json | 350 +++ umap/static/umap/locale/lt.json | 350 +++ umap/static/umap/locale/nl.json | 350 +++ umap/static/umap/locale/pl.json | 350 +++ umap/static/umap/locale/pl_PL.json | 350 +++ umap/static/umap/locale/pt.json | 350 +++ umap/static/umap/locale/pt_BR.json | 350 +++ umap/static/umap/locale/pt_PT.json | 350 +++ umap/static/umap/locale/ru.json | 350 +++ umap/static/umap/locale/si_LK.json | 350 +++ umap/static/umap/locale/sk_SK.json | 350 +++ umap/static/umap/locale/th_TH.json | 350 +++ umap/static/umap/locale/tr.json | 350 +++ umap/static/umap/locale/uk_UA.json | 350 +++ umap/static/umap/locale/vi.json | 350 +++ umap/static/umap/locale/vi_VN.json | 350 +++ umap/static/umap/locale/zh.json | 350 +++ umap/static/umap/locale/zh_CN.json | 350 +++ umap/static/umap/locale/zh_TW.Big5.json | 350 +++ umap/static/umap/locale/zh_TW.json | 350 +++ umap/static/umap/storage.css | 1450 ++++++++++ umap/static/umap/test/.eslintrc | 22 + umap/static/umap/test/Controls.js | 50 + umap/static/umap/test/DataLayer.js | 337 +++ umap/static/umap/test/Feature.js | 236 ++ umap/static/umap/test/Map.js | 302 ++ umap/static/umap/test/Polygon.js | 288 ++ umap/static/umap/test/Polyline.js | 326 +++ umap/static/umap/test/TableEditor.js | 94 + umap/static/umap/test/Util.js | 202 ++ umap/static/umap/test/_pre.js | 301 ++ umap/static/umap/test/index.html | 109 + umap/templates/base.html | 5 +- umap/templates/umap/css.html | 20 +- umap/templates/umap/js.html | 71 +- 84 files changed, 29682 insertions(+), 49 deletions(-) create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 umap/static/umap/default.css create mode 100644 umap/static/umap/img/16-white.png create mode 100644 umap/static/umap/img/16-white.svg create mode 100644 umap/static/umap/img/16.png create mode 100644 umap/static/umap/img/16.svg create mode 100644 umap/static/umap/img/24-white.png create mode 100644 umap/static/umap/img/24-white.svg create mode 100644 umap/static/umap/img/24.png create mode 100644 umap/static/umap/img/24.svg create mode 100644 umap/static/umap/img/edit-16.png create mode 100644 umap/static/umap/img/icon-bg.png create mode 100644 umap/static/umap/img/marker.png create mode 100644 umap/static/umap/img/search.gif rename umap/static/umap/js/{autocomplete.js => umap.autocomplete.js} (100%) create mode 100644 umap/static/umap/js/umap.controls.js create mode 100644 umap/static/umap/js/umap.core.js create mode 100644 umap/static/umap/js/umap.features.js create mode 100644 umap/static/umap/js/umap.forms.js create mode 100644 umap/static/umap/js/umap.icon.js create mode 100644 umap/static/umap/js/umap.js create mode 100644 umap/static/umap/js/umap.layer.js create mode 100644 umap/static/umap/js/umap.popup.js create mode 100644 umap/static/umap/js/umap.slideshow.js create mode 100644 umap/static/umap/js/umap.tableeditor.js create mode 100644 umap/static/umap/js/umap.ui.js create mode 100644 umap/static/umap/js/umap.xhr.js create mode 100644 umap/static/umap/locale/am_ET.json create mode 100644 umap/static/umap/locale/ar.json create mode 100644 umap/static/umap/locale/ast.json create mode 100644 umap/static/umap/locale/bg.json create mode 100644 umap/static/umap/locale/ca.json create mode 100644 umap/static/umap/locale/cs_CZ.json create mode 100644 umap/static/umap/locale/da.json create mode 100644 umap/static/umap/locale/de.json create mode 100644 umap/static/umap/locale/en.json create mode 100644 umap/static/umap/locale/en_US.json create mode 100644 umap/static/umap/locale/es.json create mode 100644 umap/static/umap/locale/fi.json create mode 100644 umap/static/umap/locale/fr.json create mode 100644 umap/static/umap/locale/gl.json create mode 100644 umap/static/umap/locale/hr.json create mode 100644 umap/static/umap/locale/hu.json create mode 100644 umap/static/umap/locale/id.json create mode 100644 umap/static/umap/locale/it.json create mode 100644 umap/static/umap/locale/ja.json create mode 100644 umap/static/umap/locale/lt.json create mode 100644 umap/static/umap/locale/nl.json create mode 100644 umap/static/umap/locale/pl.json create mode 100644 umap/static/umap/locale/pl_PL.json create mode 100644 umap/static/umap/locale/pt.json create mode 100644 umap/static/umap/locale/pt_BR.json create mode 100644 umap/static/umap/locale/pt_PT.json create mode 100644 umap/static/umap/locale/ru.json create mode 100644 umap/static/umap/locale/si_LK.json create mode 100644 umap/static/umap/locale/sk_SK.json create mode 100644 umap/static/umap/locale/th_TH.json create mode 100644 umap/static/umap/locale/tr.json create mode 100644 umap/static/umap/locale/uk_UA.json create mode 100644 umap/static/umap/locale/vi.json create mode 100644 umap/static/umap/locale/vi_VN.json create mode 100644 umap/static/umap/locale/zh.json create mode 100644 umap/static/umap/locale/zh_CN.json create mode 100644 umap/static/umap/locale/zh_TW.Big5.json create mode 100644 umap/static/umap/locale/zh_TW.json create mode 100644 umap/static/umap/storage.css create mode 100644 umap/static/umap/test/.eslintrc create mode 100644 umap/static/umap/test/Controls.js create mode 100644 umap/static/umap/test/DataLayer.js create mode 100644 umap/static/umap/test/Feature.js create mode 100644 umap/static/umap/test/Map.js create mode 100644 umap/static/umap/test/Polygon.js create mode 100644 umap/static/umap/test/Polyline.js create mode 100644 umap/static/umap/test/TableEditor.js create mode 100644 umap/static/umap/test/Util.js create mode 100644 umap/static/umap/test/_pre.js create mode 100644 umap/static/umap/test/index.html diff --git a/.gitignore b/.gitignore index a9a3b7a9..abc0e16e 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,8 @@ docs/_build umap/remote_static .idea tmp/* +node_modules/* +umap/static/umap/vendors ### Python ### # Byte-compiled / optimized / DLL files diff --git a/MANIFEST.in b/MANIFEST.in index f9efab73..ea58a895 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -3,3 +3,4 @@ include requirements.txt recursive-include umap/static * recursive-include umap/templates * recursive-include umap/locale * +recursive-include ui * diff --git a/Makefile b/Makefile index c02b8c8e..6933eee9 100644 --- a/Makefile +++ b/Makefile @@ -6,3 +6,29 @@ compilemessages: django-admin.py compilemessages makemessages: django-admin.py makemessages -a +ui: + mkdir -p umap/static/umap/vendors/leaflet/ && cp -r node_modules/leaflet/dist/** umap/static/umap/vendors/leaflet/ + mkdir -p umap/static/umap/vendors/editable/ && cp -r node_modules/leaflet-editable/src/*.js umap/static/umap/vendors/editable/ + mkdir -p umap/static/umap/vendors/editable/ && cp -r node_modules/leaflet.path.drag/src/*.js umap/static/umap/vendors/editable/ + mkdir -p umap/static/umap/vendors/hash/ && cp -r node_modules/leaflet-hash/*.js umap/static/umap/vendors/hash/ + mkdir -p umap/static/umap/vendors/i18n/ && cp -r node_modules/leaflet-i18n/*.js umap/static/umap/vendors/i18n/ + mkdir -p umap/static/umap/vendors/editinosm/ && cp -r node_modules/leaflet-editinosm/Leaflet.EditInOSM.* umap/static/umap/vendors/editinosm/ + mkdir -p umap/static/umap/vendors/minimap/ && cp -r node_modules/leaflet-minimap/src/** umap/static/umap/vendors/minimap/ + mkdir -p umap/static/umap/vendors/loading/ && cp -r node_modules/leaflet-loading/src/** umap/static/umap/vendors/loading/ + mkdir -p umap/static/umap/vendors/markercluster/ && cp -r node_modules/leaflet.markercluster/dist/** umap/static/umap/vendors/markercluster/ + mkdir -p umap/static/umap/vendors/contextmenu/ && cp -r node_modules/leaflet-contextmenu/dist/** umap/static/umap/vendors/contextmenu/ + mkdir -p umap/static/umap/vendors/heat/ && cp -r node_modules/leaflet.heat/dist/** umap/static/umap/vendors/heat/ + mkdir -p umap/static/umap/vendors/fullscreen/ && cp -r node_modules/leaflet-fullscreen/dist/** umap/static/umap/vendors/fullscreen/ + mkdir -p umap/static/umap/vendors/toolbar/ && cp -r node_modules/leaflet-toolbar/dist/** umap/static/umap/vendors/toolbar/ + mkdir -p umap/static/umap/vendors/formbuilder/ && cp -r node_modules/leaflet-formbuilder/*.js umap/static/umap/vendors/formbuilder/ + mkdir -p umap/static/umap/vendors/measurable/ && cp -r node_modules/leaflet-measurable/Leaflet.Measurable.* umap/static/umap/vendors/measurable/ + mkdir -p umap/static/umap/vendors/photon/ && cp -r node_modules/leaflet.photon/*.js umap/static/umap/vendors/photon/ + mkdir -p umap/static/umap/vendors/csv2geojson/ && cp -r node_modules/csv2geojson/*.js umap/static/umap/vendors/csv2geojson/ + mkdir -p umap/static/umap/vendors/togeojson/ && cp -r node_modules/togeojson/*.js umap/static/umap/vendors/togeojson/ + mkdir -p umap/static/umap/vendors/osmtogeojson/ && cp -r node_modules/osmtogeojson/osmtogeojson.js umap/static/umap/vendors/osmtogeojson/ + mkdir -p umap/static/umap/vendors/georsstogeojson/ && cp -r node_modules/georsstogeojson/GeoRSSToGeoJSON.js umap/static/umap/vendors/georsstogeojson/ + mkdir -p umap/static/umap/vendors/togpx/ && cp -r node_modules/togpx/togpx.js umap/static/umap/vendors/togpx/ + mkdir -p umap/static/umap/vendors/tokml && cp -r node_modules/tokml/tokml.js umap/static/umap/vendors/tokml + + +.PHONY: ui diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..ff0961c3 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2465 @@ +{ + "name": "leaflet-storage", + "version": "0.8.2", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@types/geojson": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-1.0.6.tgz", + "integrity": "sha512-Xqg/lIZMrUd0VRmSRbCAewtwGZiAk3mEUDvV4op1tGl+LvyPcb/MIOSxTl9z+9+J+R4/vpjiCAT4xeKzH9ji1w==", + "optional": true + }, + "JSONStream": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.8.0.tgz", + "integrity": "sha1-78Ri1aW8lOwAf0siVxrNf28q4BM=", + "requires": { + "jsonparse": "0.0.5", + "through": "2.2.7" + } + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "adm-zip": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.2.1.tgz", + "integrity": "sha1-6AHO3rW9mk6Y1pnFwPQjnicx3L8=", + "dev": true + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi-regex": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz", + "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=", + "dev": true + }, + "ansi-styles": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz", + "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=", + "dev": true + }, + "argparse": { + "version": "0.1.16", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz", + "integrity": "sha1-z9AeD7uj1srtBJ+9dY1A9lGW9Xw=", + "dev": true, + "requires": { + "underscore": "1.7.0", + "underscore.string": "2.4.0" + }, + "dependencies": { + "underscore.string": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz", + "integrity": "sha1-jN2PusTi0uoefi6Al8QvRCKA+Fs=", + "dev": true + } + } + }, + "asn1": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz", + "integrity": "sha1-VZvhg3bQik7E2+gId9J4GGObLfc=", + "dev": true, + "optional": true + }, + "assert-plus": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz", + "integrity": "sha1-7nQAlBMALYTOxyGcasgRgS5yMWA=", + "dev": true, + "optional": true + }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true + }, + "async": { + "version": "0.1.22", + "resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz", + "integrity": "sha1-D8GqoIig4+8Ovi2IMbqw3PiEUGE=", + "dev": true + }, + "aws-sign2": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz", + "integrity": "sha1-xXED96F/wDfwLXwuZLYC6iI/fWM=", + "dev": true, + "optional": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base64-js": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.2.tgz", + "integrity": "sha1-Ak8Pcq+iW3X5wO5zzU9V7Bvtl4Q=" + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "bl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.0.3.tgz", + "integrity": "sha1-/FQhoo/UImA2w7OJGmaiW8ZNIm4=", + "dev": true, + "requires": { + "readable-stream": "2.0.6" + } + }, + "boom": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/boom/-/boom-0.4.2.tgz", + "integrity": "sha1-emNune1O/O+xnO9JR6PGffrukRs=", + "dev": true, + "requires": { + "hoek": "0.9.1" + } + }, + "bops": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/bops/-/bops-0.0.6.tgz", + "integrity": "sha1-CC0dVfoB5g29wuvC26N/ZZVUzzo=", + "requires": { + "base64-js": "0.0.2", + "to-utf8": "0.0.1" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer-equal": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.2.tgz", + "integrity": "sha1-7Lt5D1aNQAmKYkK1SAXHWAXrk48=" + }, + "bunker": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/bunker/-/bunker-0.1.2.tgz", + "integrity": "sha1-yImSRkqOKm7ehpMDdfkrWAd++Xw=", + "requires": { + "burrito": "0.2.12" + } + }, + "burrito": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/burrito/-/burrito-0.2.12.tgz", + "integrity": "sha1-0NbmrIHV6ZeJxvpKzLCwAx6lT2s=", + "requires": { + "traverse": "0.5.2", + "uglify-js": "1.1.1" + }, + "dependencies": { + "traverse": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.5.2.tgz", + "integrity": "sha1-4gPFjV9/DjfbbnTArLkpuwm2HYU=" + }, + "uglify-js": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-1.1.1.tgz", + "integrity": "sha1-7nGpfEzv0GoamyBDfzQRiYKqA1s=" + } + } + }, + "caseless": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", + "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", + "dev": true + }, + "chai": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz", + "integrity": "sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=", + "dev": true, + "requires": { + "assertion-error": "1.1.0", + "deep-eql": "0.1.3", + "type-detect": "1.0.0" + } + }, + "chalk": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz", + "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=", + "dev": true, + "requires": { + "ansi-styles": "1.1.0", + "escape-string-regexp": "1.0.5", + "has-ansi": "0.1.0", + "strip-ansi": "0.3.0", + "supports-color": "0.2.0" + } + }, + "charm": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/charm/-/charm-0.1.2.tgz", + "integrity": "sha1-BsIe7RobBq62dVPNxT4jJ0usIpY=" + }, + "coffee-script": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz", + "integrity": "sha1-FQ1rTLUiiUNp7+1qIQHCC8f0pPQ=", + "dev": true + }, + "colors": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", + "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=", + "dev": true + }, + "combined-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz", + "integrity": "sha1-ATfmV7qlp1QcV6w3rF/AfXO03B8=", + "dev": true, + "optional": true, + "requires": { + "delayed-stream": "0.0.5" + } + }, + "commander": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.3.0.tgz", + "integrity": "sha1-/UMOiJgy7DU7ms0d4hfBHLPu+HM=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", + "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.0.6", + "typedarray": "0.0.6" + } + }, + "config-chain": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.11.tgz", + "integrity": "sha1-q6CXR9++TD5w52am5BWG4YWfxvI=", + "dev": true, + "requires": { + "ini": "1.3.5", + "proto-list": "1.2.4" + }, + "dependencies": { + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + } + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cryptiles": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz", + "integrity": "sha1-7ZH/HxetE9N0gohZT4pIoNJvMlw=", + "dev": true, + "optional": true, + "requires": { + "boom": "0.4.2" + } + }, + "csv2geojson": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/csv2geojson/-/csv2geojson-5.0.2.tgz", + "integrity": "sha1-q9ZJ8uxXaJIZrU8Z0zO+dUVrb1k=", + "requires": { + "concat-stream": "1.5.2", + "d3-dsv": "1.0.1", + "optimist": "0.6.1", + "sexagesimal": "0.5.0" + }, + "dependencies": { + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "requires": { + "minimist": "0.0.10", + "wordwrap": "0.0.3" + } + } + } + }, + "ctype": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz", + "integrity": "sha1-gsGMJGH3QRTvFsE1IkrQuRRMoS8=", + "dev": true, + "optional": true + }, + "d3-dsv": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.0.1.tgz", + "integrity": "sha1-1JU0fATLHg0mVXu9xHdcTRGiReo=", + "requires": { + "rw": "1.3.3" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "dateformat": { + "version": "1.0.2-1.2.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz", + "integrity": "sha1-sCIMAt6YYXQztyhRz0fePfLNvuk=", + "dev": true + }, + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true, + "requires": { + "ms": "0.7.1" + } + }, + "deep-eql": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", + "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=", + "dev": true, + "requires": { + "type-detect": "0.1.1" + }, + "dependencies": { + "type-detect": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz", + "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=", + "dev": true + } + } + }, + "deep-equal": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-0.0.0.tgz", + "integrity": "sha1-mWedO70EcVb81FDT0B7rkGhpHoM=" + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + }, + "delayed-stream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz", + "integrity": "sha1-1LH0OpPoKW3+AmlPRoC8N6MTxz8=", + "dev": true, + "optional": true + }, + "diff": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", + "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=", + "dev": true + }, + "difflet": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/difflet/-/difflet-0.2.6.tgz", + "integrity": "sha1-qyOzH1ZJtvqo49KsvTNEZzZcpvo=", + "requires": { + "charm": "0.1.2", + "deep-is": "0.1.3", + "traverse": "0.6.6" + } + }, + "domelementtype": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=" + }, + "domhandler": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.2.1.tgz", + "integrity": "sha1-Wd+dzSJ+gIs2Wuc+H2aErD2Ub8I=", + "requires": { + "domelementtype": "1.3.0" + } + }, + "domutils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.3.0.tgz", + "integrity": "sha1-mtTVm1r2ymhMYv5tdo7xcOcN8ZI=", + "requires": { + "domelementtype": "1.3.0" + } + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "esprima": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", + "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=", + "dev": true + }, + "eventemitter2": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", + "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=", + "dev": true + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true + }, + "extract-zip": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.5.0.tgz", + "integrity": "sha1-ksz22B73Cp+kwXRxFMzvbYaIpsQ=", + "dev": true, + "requires": { + "concat-stream": "1.5.0", + "debug": "0.7.4", + "mkdirp": "0.5.0", + "yauzl": "2.4.1" + }, + "dependencies": { + "concat-stream": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.0.tgz", + "integrity": "sha1-U/fUPFHF5D+ByP3QMyHGMb5o1hE=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.0.6", + "typedarray": "0.0.6" + } + }, + "debug": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz", + "integrity": "sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk=", + "dev": true + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", + "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fd-slicer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", + "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "dev": true, + "requires": { + "pend": "1.2.0" + } + }, + "findup-sync": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz", + "integrity": "sha1-fz56l7gjksZTvwZYm9hRkOk8NoM=", + "dev": true, + "requires": { + "glob": "3.2.11", + "lodash": "2.4.2" + }, + "dependencies": { + "lodash": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", + "dev": true + } + } + }, + "forever-agent": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz", + "integrity": "sha1-bQ4JxJIflKJ/Y9O0nF/v8epMUTA=", + "dev": true + }, + "form-data": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-0.1.4.tgz", + "integrity": "sha1-kavXiKupcCsaq/qLwBAxoqyeOxI=", + "dev": true, + "optional": true, + "requires": { + "async": "0.9.2", + "combined-stream": "0.0.7", + "mime": "1.2.11" + }, + "dependencies": { + "async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", + "dev": true, + "optional": true + } + } + }, + "formatio": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.1.1.tgz", + "integrity": "sha1-XtPM1jZVEJc4NGXZlhmRAOhhYek=", + "dev": true, + "requires": { + "samsam": "1.1.2" + } + }, + "fs-extra": { + "version": "0.26.7", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.26.7.tgz", + "integrity": "sha1-muH92UiXeY7at20JGM9C0MMYT6k=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "2.4.0", + "klaw": "1.3.1", + "path-is-absolute": "1.0.1", + "rimraf": "2.2.8" + }, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + } + } + }, + "generate-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", + "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", + "dev": true + }, + "generate-object-property": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", + "dev": true, + "requires": { + "is-property": "1.0.2" + } + }, + "geojson-area": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/geojson-area/-/geojson-area-0.1.0.tgz", + "integrity": "sha1-1I2AcILPrfSnjfE0m+UPOL8YlK4=", + "requires": { + "wgs84": "0.0.0" + } + }, + "geojson-numeric": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/geojson-numeric/-/geojson-numeric-0.2.0.tgz", + "integrity": "sha1-q5quLqlyekg3B5rP8qqDyHLXLUo=", + "requires": { + "concat-stream": "1.0.1", + "optimist": "0.3.7" + }, + "dependencies": { + "concat-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.0.1.tgz", + "integrity": "sha1-AYsYvBx9BzotyCqkhEI0GixN158=", + "requires": { + "bops": "0.0.6" + } + }, + "optimist": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", + "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=", + "requires": { + "wordwrap": "0.0.3" + } + } + } + }, + "geojson-rewind": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/geojson-rewind/-/geojson-rewind-0.2.0.tgz", + "integrity": "sha1-6lWOnkT/A7hlXQoIt1B43DOhXnk=", + "requires": { + "concat-stream": "1.2.1", + "geojson-area": "0.1.0", + "minimist": "0.0.5" + }, + "dependencies": { + "concat-stream": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.2.1.tgz", + "integrity": "sha1-81EAtsRjeL+6i2uA+fDQzN8T3GA=", + "requires": { + "bops": "0.0.6" + } + }, + "minimist": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.5.tgz", + "integrity": "sha1-16oye87PUY+RBqxrjwA/o7zqhWY=" + } + } + }, + "georsstogeojson": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/georsstogeojson/-/georsstogeojson-0.1.0.tgz", + "integrity": "sha1-9duAeheaK0Z3sJpWsgqdHCT7FlM=", + "requires": { + "xmldom": "0.1.27" + } + }, + "getobject": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", + "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", + "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", + "requires": { + "inherits": "2.0.3", + "minimatch": "0.3.0" + } + }, + "graceful-fs": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", + "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=", + "dev": true + }, + "growl": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", + "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=", + "dev": true + }, + "grunt": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz", + "integrity": "sha1-VpN81RlDJK3/bSB2MYMqnWuk5/A=", + "dev": true, + "requires": { + "async": "0.1.22", + "coffee-script": "1.3.3", + "colors": "0.6.2", + "dateformat": "1.0.2-1.2.3", + "eventemitter2": "0.4.14", + "exit": "0.1.2", + "findup-sync": "0.1.3", + "getobject": "0.1.0", + "glob": "3.1.21", + "grunt-legacy-log": "0.1.3", + "grunt-legacy-util": "0.2.0", + "hooker": "0.2.3", + "iconv-lite": "0.2.11", + "js-yaml": "2.0.5", + "lodash": "0.9.2", + "minimatch": "0.2.14", + "nopt": "1.0.10", + "rimraf": "2.2.8", + "underscore.string": "2.2.1", + "which": "1.0.9" + }, + "dependencies": { + "glob": { + "version": "3.1.21", + "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", + "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", + "dev": true, + "requires": { + "graceful-fs": "1.2.3", + "inherits": "1.0.2", + "minimatch": "0.2.14" + } + }, + "inherits": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", + "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=", + "dev": true + }, + "minimatch": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", + "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", + "dev": true, + "requires": { + "lru-cache": "2.7.3", + "sigmund": "1.0.1" + } + }, + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "requires": { + "abbrev": "1.1.1" + } + } + } + }, + "grunt-cli": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.2.0.tgz", + "integrity": "sha1-VisRnrsGndtGSs4oRVAb6Xs1tqg=", + "dev": true, + "requires": { + "findup-sync": "0.3.0", + "grunt-known-options": "1.1.0", + "nopt": "3.0.6", + "resolve": "1.1.7" + }, + "dependencies": { + "findup-sync": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", + "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", + "dev": true, + "requires": { + "glob": "5.0.15" + } + }, + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.11" + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1.1.1" + } + } + } + }, + "grunt-contrib-concat": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-0.5.1.tgz", + "integrity": "sha1-lTxu/f39LBB6uchQd/LUsk0xzUk=", + "dev": true, + "requires": { + "chalk": "0.5.1", + "source-map": "0.3.0" + } + }, + "grunt-contrib-copy": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-copy/-/grunt-contrib-copy-0.5.0.tgz", + "integrity": "sha1-QQB1rEWlhWuhkbHMclclRQ1KAhU=", + "dev": true + }, + "grunt-known-options": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.0.tgz", + "integrity": "sha1-pCdO6zL6dl2lp6OxcSYXzjsUQUk=", + "dev": true + }, + "grunt-legacy-log": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-0.1.3.tgz", + "integrity": "sha1-7ClCboAwIa9ZAp+H0vnNczWgVTE=", + "dev": true, + "requires": { + "colors": "0.6.2", + "grunt-legacy-log-utils": "0.1.1", + "hooker": "0.2.3", + "lodash": "2.4.2", + "underscore.string": "2.3.3" + }, + "dependencies": { + "lodash": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", + "dev": true + }, + "underscore.string": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz", + "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=", + "dev": true + } + } + }, + "grunt-legacy-log-utils": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-0.1.1.tgz", + "integrity": "sha1-wHBrndkGThFvNvI/5OawSGcsD34=", + "dev": true, + "requires": { + "colors": "0.6.2", + "lodash": "2.4.2", + "underscore.string": "2.3.3" + }, + "dependencies": { + "lodash": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", + "dev": true + }, + "underscore.string": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz", + "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=", + "dev": true + } + } + }, + "grunt-legacy-util": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz", + "integrity": "sha1-kzJIhNv343qf98Am3/RR2UqeVUs=", + "dev": true, + "requires": { + "async": "0.1.22", + "exit": "0.1.2", + "getobject": "0.1.0", + "hooker": "0.2.3", + "lodash": "0.9.2", + "underscore.string": "2.2.1", + "which": "1.0.9" + } + }, + "happen": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/happen/-/happen-0.1.3.tgz", + "integrity": "sha1-NXrHYPq4dFueVracudOvLACfFTk=", + "dev": true + }, + "har-validator": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", + "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "commander": "2.15.1", + "is-my-json-valid": "2.17.2", + "pinkie-promise": "2.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "dev": true + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-ansi": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz", + "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=", + "dev": true, + "requires": { + "ansi-regex": "0.2.1" + } + }, + "hasha": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz", + "integrity": "sha1-eNfL/B5tZjA/55g3NlmEUXsvbuE=", + "dev": true, + "requires": { + "is-stream": "1.1.0", + "pinkie-promise": "2.0.1" + } + }, + "hawk": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-1.0.0.tgz", + "integrity": "sha1-uQuxaYByhUEdp//LjdJZhQLTtS0=", + "dev": true, + "optional": true, + "requires": { + "boom": "0.4.2", + "cryptiles": "0.2.2", + "hoek": "0.9.1", + "sntp": "0.2.4" + } + }, + "hoek": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz", + "integrity": "sha1-PTIkYrrfB3Fup+uFuviAec3c5QU=", + "dev": true + }, + "hooker": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", + "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=", + "dev": true + }, + "htmlparser2": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.5.1.tgz", + "integrity": "sha1-b0L3ZX3RnBP31l3pEYQXOUoL5tA=", + "requires": { + "domelementtype": "1.3.0", + "domhandler": "2.2.1", + "domutils": "1.3.0", + "readable-stream": "1.1.14" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + } + } + }, + "http-signature": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.1.tgz", + "integrity": "sha1-T72sEyVZqoMjEh5UB3nAoBKyfmY=", + "dev": true, + "optional": true, + "requires": { + "asn1": "0.1.11", + "assert-plus": "0.1.5", + "ctype": "0.5.3" + } + }, + "iconv-lite": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz", + "integrity": "sha1-HOYKOleGSiktEyH/RgnKS7llrcg=", + "dev": true + }, + "ieee754": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.11.tgz", + "integrity": "sha512-VhDzCKN7K8ufStx/CLj5/PDTMgph+qwN5Pkd5i0sGnVwk56zJ0lkT8Qzi1xqWLS0Wp29DgDtNeS7v8/wMoZeHg==" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ini": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.1.0.tgz", + "integrity": "sha1-ToCMLOFExsF4iRjgNNZ5e8bPYoE=", + "dev": true + }, + "is-my-ip-valid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", + "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==", + "dev": true + }, + "is-my-json-valid": { + "version": "2.17.2", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz", + "integrity": "sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg==", + "dev": true, + "requires": { + "generate-function": "2.0.0", + "generate-object-property": "1.2.0", + "is-my-ip-valid": "1.0.0", + "jsonpointer": "4.0.1", + "xtend": "4.0.1" + } + }, + "is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "jade": { + "version": "0.26.3", + "resolved": "https://registry.npmjs.org/jade/-/jade-0.26.3.tgz", + "integrity": "sha1-jxDXl32NefL2/4YqgbBRPMslaGw=", + "dev": true, + "requires": { + "commander": "0.6.1", + "mkdirp": "0.3.0" + }, + "dependencies": { + "commander": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-0.6.1.tgz", + "integrity": "sha1-+mihT2qUXVTbvlDYzbMyDp47GgY=", + "dev": true + }, + "mkdirp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz", + "integrity": "sha1-G79asbqCevI1dRQ0kEJkVfSB/h4=", + "dev": true + } + } + }, + "js-yaml": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-2.0.5.tgz", + "integrity": "sha1-olrmUJmZ6X3yeMZxnaEb0Gh3Q6g=", + "dev": true, + "requires": { + "argparse": "0.1.16", + "esprima": "1.0.4" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + }, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true, + "optional": true + } + } + }, + "jsonparse": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-0.0.5.tgz", + "integrity": "sha1-MwVCrT8KZUZlt3jz6y2an6UHrGQ=" + }, + "jsonpointer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", + "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "jxon": { + "version": "2.0.0-beta.5", + "resolved": "https://registry.npmjs.org/jxon/-/jxon-2.0.0-beta.5.tgz", + "integrity": "sha1-O2qUEE+YAe5oL9BWZF/1Rz2bND4=", + "requires": { + "xmldom": "0.1.27" + } + }, + "kew": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/kew/-/kew-0.1.7.tgz", + "integrity": "sha1-CjKoF/8amzsSuMm6z0vE1nmvjnI=", + "dev": true + }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + }, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true, + "optional": true + } + } + }, + "leaflet": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.3.1.tgz", + "integrity": "sha512-adQOIzh+bfdridLM1xIgJ9VnJbAUY3wqs/ueF+ITla+PLQ1z47USdBKUf+iD9FuUA8RtlT6j6hZBfZoA6mW+XQ==" + }, + "leaflet-contextmenu": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/leaflet-contextmenu/-/leaflet-contextmenu-1.4.0.tgz", + "integrity": "sha1-4r2kga8QJggOq6oymX5TH9RPYFw=" + }, + "leaflet-editable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/leaflet-editable/-/leaflet-editable-1.1.0.tgz", + "integrity": "sha1-93dZekCoGic/KHtIn9D+XM1gyNA=" + }, + "leaflet-editinosm": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/leaflet-editinosm/-/leaflet-editinosm-0.2.3.tgz", + "integrity": "sha1-8HFmTEpSe3b3uPm87HRLJIiVwHE=" + }, + "leaflet-formbuilder": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/leaflet-formbuilder/-/leaflet-formbuilder-0.2.3.tgz", + "integrity": "sha1-7ucYzcyMOzABk+U7qASFLAv0l9k=" + }, + "leaflet-fullscreen": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/leaflet-fullscreen/-/leaflet-fullscreen-1.0.2.tgz", + "integrity": "sha1-CcYcS6xF9jsu4Sav2H5c2XZQ/Bs=" + }, + "leaflet-hash": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/leaflet-hash/-/leaflet-hash-0.2.1.tgz", + "integrity": "sha1-w2xxg0fFJDAztXy0uuomEZ2CxwE=" + }, + "leaflet-i18n": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/leaflet-i18n/-/leaflet-i18n-0.3.1.tgz", + "integrity": "sha1-QE513GcE9KI5nRzQXw3R3ReDALU=" + }, + "leaflet-loading": { + "version": "0.1.24", + "resolved": "https://registry.npmjs.org/leaflet-loading/-/leaflet-loading-0.1.24.tgz", + "integrity": "sha1-6v38GIcY6xPTz3uSJsTAaxbpKRk=" + }, + "leaflet-measurable": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/leaflet-measurable/-/leaflet-measurable-0.0.5.tgz", + "integrity": "sha1-A6dXfcxqVYWEo1lldjX47WnnJX8=" + }, + "leaflet-minimap": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/leaflet-minimap/-/leaflet-minimap-3.6.1.tgz", + "integrity": "sha1-KkP/Oz2UekWgrPS978llBbZzpsY=" + }, + "leaflet-toolbar": { + "version": "github:umap-project/Leaflet.toolbar#a730bbe3baf402cdf8337e3271081bfa4ff1a75b" + }, + "leaflet.heat": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/leaflet.heat/-/leaflet.heat-0.2.0.tgz", + "integrity": "sha1-EJ2M9Ybwre5B8Fr/Ax4np3/swik=" + }, + "leaflet.markercluster": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/leaflet.markercluster/-/leaflet.markercluster-1.3.0.tgz", + "integrity": "sha512-bHBaI8kTaLrZxI/ZP7pnNaS8WCKKz98BU1//B5OH9b/kTk6IriduvDtMFGlGBYYr/ymuXCB9lO7HsGBr5dSw5w==" + }, + "leaflet.path.drag": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/leaflet.path.drag/-/leaflet.path.drag-0.0.6.tgz", + "integrity": "sha1-bZw68LnXsDJUSuFr/eaI8BYFFKA=" + }, + "leaflet.photon": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/leaflet.photon/-/leaflet.photon-0.7.3.tgz", + "integrity": "sha1-0U170y6tfkAqF/O+1HKoDxym+UY=" + }, + "lodash": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz", + "integrity": "sha1-jzSZxSRdNG1oLlsNO0B2fgnxqSw=", + "dev": true + }, + "lolex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-1.3.2.tgz", + "integrity": "sha1-fD2mL/yzDw9agKJWbKJORdigHzE=", + "dev": true + }, + "lru-cache": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", + "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=" + }, + "mime": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz", + "integrity": "sha1-WCA+7Ybjpe8XrtK32evUfwpg3RA=", + "dev": true + }, + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "dev": true + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "dev": true, + "requires": { + "mime-db": "1.33.0" + } + }, + "minimatch": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", + "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", + "requires": { + "lru-cache": "2.7.3", + "sigmund": "1.0.1" + } + }, + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + } + } + }, + "mocha": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-2.5.3.tgz", + "integrity": "sha1-FhvlvetJZ3HrmzV0UFC2IrWu/Fg=", + "dev": true, + "requires": { + "commander": "2.3.0", + "debug": "2.2.0", + "diff": "1.4.0", + "escape-string-regexp": "1.0.2", + "glob": "3.2.11", + "growl": "1.9.2", + "jade": "0.26.3", + "mkdirp": "0.5.1", + "supports-color": "1.2.0", + "to-iso-string": "0.0.2" + }, + "dependencies": { + "escape-string-regexp": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz", + "integrity": "sha1-Tbwv5nTnGUnK8/smlc5/LcHZqNE=", + "dev": true + }, + "supports-color": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.2.0.tgz", + "integrity": "sha1-/x7R5hFp0Gs88tWI4YixjYhH4X4=", + "dev": true + } + } + }, + "mocha-phantomjs": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mocha-phantomjs/-/mocha-phantomjs-4.1.0.tgz", + "integrity": "sha1-x14WYS4aavCtjSgeOi/vSdVeUFs=", + "dev": true, + "requires": { + "commander": "2.15.1", + "mocha-phantomjs-core": "1.3.1", + "phantomjs": "1.9.7-15" + }, + "dependencies": { + "commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "dev": true + }, + "mkdirp": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", + "integrity": "sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc=", + "dev": true + }, + "phantomjs": { + "version": "1.9.7-15", + "resolved": "https://registry.npmjs.org/phantomjs/-/phantomjs-1.9.7-15.tgz", + "integrity": "sha1-Czp85jBIaoO+kf9Ogy7uIOlxEVs=", + "dev": true, + "requires": { + "adm-zip": "0.2.1", + "kew": "0.1.7", + "mkdirp": "0.3.5", + "ncp": "0.4.2", + "npmconf": "0.0.24", + "progress": "1.1.8", + "request": "2.36.0", + "request-progress": "0.3.1", + "rimraf": "2.2.8", + "which": "1.0.9" + } + } + } + }, + "mocha-phantomjs-core": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mocha-phantomjs-core/-/mocha-phantomjs-core-1.3.1.tgz", + "integrity": "sha1-WGU4yNcfqN6QxBpGrMBIHB+4Phg=", + "dev": true + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true + }, + "ncp": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-0.4.2.tgz", + "integrity": "sha1-q8xsvT7C7Spyn/bnwfqPAXhKhXQ=", + "dev": true + }, + "node-uuid": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", + "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=", + "dev": true + }, + "nopt": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-2.2.1.tgz", + "integrity": "sha1-KqCbfRdoSHs7ianFqlIzW/8Lrqc=", + "requires": { + "abbrev": "1.1.1" + } + }, + "npmconf": { + "version": "0.0.24", + "resolved": "https://registry.npmjs.org/npmconf/-/npmconf-0.0.24.tgz", + "integrity": "sha1-t4h1sIjMw8Cvo+zrPOMkSxtSOQw=", + "dev": true, + "requires": { + "config-chain": "1.1.11", + "inherits": "1.0.2", + "ini": "1.1.0", + "mkdirp": "0.3.5", + "nopt": "2.2.1", + "once": "1.1.1", + "osenv": "0.0.3", + "semver": "1.1.4" + }, + "dependencies": { + "inherits": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", + "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=", + "dev": true + }, + "mkdirp": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", + "integrity": "sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc=", + "dev": true + }, + "once": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/once/-/once-1.1.1.tgz", + "integrity": "sha1-nbV0kzzLCMOnYU0VQDLAnqbzOec=", + "dev": true + } + } + }, + "oauth-sign": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.3.0.tgz", + "integrity": "sha1-y1QPk7srIqfVlBaRoojWDo6pOG4=", + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "optimist": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.4.0.tgz", + "integrity": "sha1-y47Dfy/jqphky2eidSUOfhliCiU=", + "dev": true, + "requires": { + "wordwrap": "0.0.3" + } + }, + "osenv": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.0.3.tgz", + "integrity": "sha1-zWrY3bKQkVrZ4idlV2Al1BHynLY=", + "dev": true + }, + "osm-polygon-features": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/osm-polygon-features/-/osm-polygon-features-0.9.2.tgz", + "integrity": "sha1-IK5BEwxIbkmjsqPCtYoUGcSYZ3g=" + }, + "osmtogeojson": { + "version": "3.0.0-beta.3", + "resolved": "https://registry.npmjs.org/osmtogeojson/-/osmtogeojson-3.0.0-beta.3.tgz", + "integrity": "sha512-8abt3HLjlMzR1QwlnqnJTRPo7P+lOTf3VMIp1lmGvKno4Il+6LLFuWwohyDs8tPZjaUGuCjK0YjRkapsBMjH1Q==", + "requires": { + "@types/geojson": "1.0.6", + "JSONStream": "0.8.0", + "concat-stream": "1.0.1", + "geojson-numeric": "0.2.0", + "geojson-rewind": "0.2.0", + "htmlparser2": "3.5.1", + "optimist": "0.3.7", + "osm-polygon-features": "0.9.2", + "tiny-osmpbf": "0.1.0", + "xmldom": "0.1.27" + }, + "dependencies": { + "concat-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.0.1.tgz", + "integrity": "sha1-AYsYvBx9BzotyCqkhEI0GixN158=", + "requires": { + "bops": "0.0.6" + } + }, + "optimist": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", + "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=", + "requires": { + "wordwrap": "0.0.3" + } + } + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "pbf": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.1.0.tgz", + "integrity": "sha512-/hYJmIsTmh7fMkHAWWXJ5b8IKLWdjdlAFb3IHkRBn1XUhIYBChVGfVwmHEAV3UfXTxsP/AKfYTXTS/dCPxJd5w==", + "requires": { + "ieee754": "1.1.11", + "resolve-protobuf-schema": "2.0.0" + } + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "phantomjs": { + "version": "1.9.20", + "resolved": "https://registry.npmjs.org/phantomjs/-/phantomjs-1.9.20.tgz", + "integrity": "sha1-RCSsog4U0lXAsIia9va4lz2hDg0=", + "dev": true, + "requires": { + "extract-zip": "1.5.0", + "fs-extra": "0.26.7", + "hasha": "2.2.0", + "kew": "0.7.0", + "progress": "1.1.8", + "request": "2.67.0", + "request-progress": "2.0.1", + "which": "1.2.14" + }, + "dependencies": { + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "dev": true + }, + "async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", + "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", + "dev": true, + "requires": { + "lodash": "4.17.10" + } + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "dev": true + }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "combined-stream": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "dev": true, + "requires": { + "boom": "2.10.1" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-1.0.1.tgz", + "integrity": "sha1-rjFduaSQf6BlUCMEpm13M0de43w=", + "dev": true, + "requires": { + "async": "2.6.1", + "combined-stream": "1.0.6", + "mime-types": "2.1.18" + } + }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "dev": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "dev": true + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "dev": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.1", + "sshpk": "1.14.1" + } + }, + "kew": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz", + "integrity": "sha1-edk9LTM2PW/dKXCzNdkUGtWR15s=", + "dev": true + }, + "lodash": { + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true + }, + "qs": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-5.2.1.tgz", + "integrity": "sha1-gB/uAw4LlFDWOFrcSKTMVbRK7fw=", + "dev": true + }, + "request": { + "version": "2.67.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.67.0.tgz", + "integrity": "sha1-ivdHgOK/EeoK6aqWXBHxGv0nJ0I=", + "dev": true, + "requires": { + "aws-sign2": "0.6.0", + "bl": "1.0.3", + "caseless": "0.11.0", + "combined-stream": "1.0.6", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "1.0.1", + "har-validator": "2.0.6", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.18", + "node-uuid": "1.4.8", + "oauth-sign": "0.8.2", + "qs": "5.2.1", + "stringstream": "0.0.6", + "tough-cookie": "2.2.2", + "tunnel-agent": "0.4.3" + } + }, + "request-progress": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-2.0.1.tgz", + "integrity": "sha1-XTa7V5YcZzqlt4jbyBQf3yO0Tgg=", + "dev": true, + "requires": { + "throttleit": "1.0.0" + } + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "throttleit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", + "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=", + "dev": true + }, + "tough-cookie": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.2.2.tgz", + "integrity": "sha1-yDoYMPTl7wuT7yo0iOck+N4Basc=", + "dev": true + }, + "which": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", + "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", + "dev": true, + "requires": { + "isexe": "2.0.0" + } + } + } + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "2.0.4" + } + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" + }, + "progress": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", + "dev": true + }, + "proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", + "dev": true + }, + "protocol-buffers-schema": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-2.2.0.tgz", + "integrity": "sha1-0pxs1z+2VZePtpiWkRgNuEQRn2E=" + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true, + "optional": true + }, + "qs": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/qs/-/qs-0.6.6.tgz", + "integrity": "sha1-bgFQmP9RlouKPIGQAdXyyJvEsQc=", + "dev": true + }, + "readable-stream": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" + } + }, + "request": { + "version": "2.36.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.36.0.tgz", + "integrity": "sha1-KMbAQmLHuf/dIbklU3RRfubZQ/U=", + "dev": true, + "requires": { + "aws-sign2": "0.5.0", + "forever-agent": "0.5.2", + "form-data": "0.1.4", + "hawk": "1.0.0", + "http-signature": "0.10.1", + "json-stringify-safe": "5.0.1", + "mime": "1.2.11", + "node-uuid": "1.4.8", + "oauth-sign": "0.3.0", + "qs": "0.6.6", + "tough-cookie": "2.3.4", + "tunnel-agent": "0.4.3" + } + }, + "request-progress": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-0.3.1.tgz", + "integrity": "sha1-ByHBBdipasayzossia4tXs/Pazo=", + "dev": true, + "requires": { + "throttleit": "0.0.2" + } + }, + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + }, + "resolve-protobuf-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.0.0.tgz", + "integrity": "sha1-5nsGKmfwLRG9aIbnDv2niEB+D7Q=", + "requires": { + "protocol-buffers-schema": "2.2.0" + } + }, + "rimraf": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", + "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", + "dev": true + }, + "runforcover": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/runforcover/-/runforcover-0.0.2.tgz", + "integrity": "sha1-NE8FfY1F0zrrxsyCIEZ49pxIV8w=", + "requires": { + "bunker": "0.1.2" + } + }, + "rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=" + }, + "samsam": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.1.2.tgz", + "integrity": "sha1-vsEf3IOp/aBjQBIQ5AF2wwJNFWc=", + "dev": true + }, + "semver": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-1.1.4.tgz", + "integrity": "sha1-LlpOcrqwNHLMl/cnU7RQiRLvVUA=", + "dev": true + }, + "sexagesimal": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/sexagesimal/-/sexagesimal-0.5.0.tgz", + "integrity": "sha1-nYFb0r3dY0tiW6aFG/j+dKWtPvM=" + }, + "sigmund": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=" + }, + "sinon": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-1.17.7.tgz", + "integrity": "sha1-RUKk9JugxFwF6y6d2dID4rjv4L8=", + "dev": true, + "requires": { + "formatio": "1.1.1", + "lolex": "1.3.2", + "samsam": "1.1.2", + "util": "0.10.3" + } + }, + "slide": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=" + }, + "sntp": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz", + "integrity": "sha1-+4hfGLDzqtGJ+CSGJTa87ux1CQA=", + "dev": true, + "optional": true, + "requires": { + "hoek": "0.9.1" + } + }, + "source-map": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.3.0.tgz", + "integrity": "sha1-hYb7mloAXltQHiHNGLbyG0V60fk=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + }, + "sshpk": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", + "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", + "dev": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "dev": true + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "stringstream": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", + "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==", + "dev": true + }, + "strip-ansi": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz", + "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=", + "dev": true, + "requires": { + "ansi-regex": "0.2.1" + } + }, + "strxml": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/strxml/-/strxml-0.0.0.tgz", + "integrity": "sha1-j/UxTIyHTbBVBnN2GoHk0/JEFFw=", + "requires": { + "tap": "0.4.13" + } + }, + "supports-color": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz", + "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=", + "dev": true + }, + "tap": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/tap/-/tap-0.4.13.tgz", + "integrity": "sha1-OYYTTWdZcn/CIj5hEm7rhyQ6zLw=", + "requires": { + "buffer-equal": "0.0.2", + "deep-equal": "0.0.0", + "difflet": "0.2.6", + "glob": "3.2.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "nopt": "2.2.1", + "runforcover": "0.0.2", + "slide": "1.1.6", + "yamlish": "0.0.7" + } + }, + "throttleit": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz", + "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=", + "dev": true + }, + "through": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/through/-/through-2.2.7.tgz", + "integrity": "sha1-bo4hIAGR1OtqmfbwEN9Gqhxusr0=" + }, + "tiny-inflate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.2.tgz", + "integrity": "sha1-k9nez/yIBb1X6uQxDwt0Xptvs6c=" + }, + "tiny-osmpbf": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/tiny-osmpbf/-/tiny-osmpbf-0.1.0.tgz", + "integrity": "sha1-ColXFxE+vmquNjxL5e76js2vuSc=", + "requires": { + "pbf": "3.1.0", + "tiny-inflate": "1.0.2" + } + }, + "to-iso-string": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/to-iso-string/-/to-iso-string-0.0.2.tgz", + "integrity": "sha1-TcGeZk38y+Jb2NtQiwDG2hWCVdE=", + "dev": true + }, + "to-utf8": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/to-utf8/-/to-utf8-0.0.1.tgz", + "integrity": "sha1-0Xrqcv8vujm55DYBvns/9y4ImFI=" + }, + "togeojson": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/togeojson/-/togeojson-0.16.0.tgz", + "integrity": "sha1-q1cp5PjJkg5tpfCP2CSQodFqym0=", + "requires": { + "concat-stream": "1.5.2", + "minimist": "1.2.0", + "xmldom": "0.1.27" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + } + } + }, + "togpx": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/togpx/-/togpx-0.5.4.tgz", + "integrity": "sha1-sz27BUHfBL1rpPULhtqVNCS7d3M=", + "requires": { + "concat-stream": "1.0.1", + "jxon": "2.0.0-beta.5", + "optimist": "0.3.7", + "xmldom": "0.1.27" + }, + "dependencies": { + "concat-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.0.1.tgz", + "integrity": "sha1-AYsYvBx9BzotyCqkhEI0GixN158=", + "requires": { + "bops": "0.0.6" + } + }, + "optimist": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", + "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=", + "requires": { + "wordwrap": "0.0.3" + } + } + } + }, + "tokml": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/tokml/-/tokml-0.4.0.tgz", + "integrity": "sha1-fAMhtCRmPKMYegpBny37z5DaNyo=", + "requires": { + "minimist": "0.1.0", + "rw": "0.0.4", + "strxml": "0.0.0" + }, + "dependencies": { + "minimist": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.1.0.tgz", + "integrity": "sha1-md9lelJXTCHJBXSX33QnkLK0wN4=" + }, + "rw": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/rw/-/rw-0.0.4.tgz", + "integrity": "sha1-3iex7VuRdXcuqiKnlmJRC9BZjEw=" + } + } + }, + "tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "dev": true, + "optional": true, + "requires": { + "punycode": "1.4.1" + } + }, + "traverse": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", + "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=" + }, + "tunnel-agent": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", + "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", + "dev": true + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, + "optional": true + }, + "type-detect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz", + "integrity": "sha1-diIXzAbbJY7EiQihKY6LlRIejqI=", + "dev": true + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "uglify-js": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.2.5.tgz", + "integrity": "sha1-puAqcNg5eSuXgEiLe4sYTAlcmcc=", + "dev": true, + "requires": { + "optimist": "0.3.7", + "source-map": "0.1.43" + }, + "dependencies": { + "optimist": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", + "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=", + "dev": true, + "requires": { + "wordwrap": "0.0.3" + } + }, + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "underscore": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", + "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=", + "dev": true + }, + "underscore.string": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz", + "integrity": "sha1-18D6KvXVoaZ/QlPa7pgTLnM/Dxk=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "wgs84": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/wgs84/-/wgs84-0.0.0.tgz", + "integrity": "sha1-NP3FVZF7blfPKigu0ENxDASc3HY=" + }, + "which": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz", + "integrity": "sha1-RgwdoPgQED0DIam2M6+eV15kSG8=", + "dev": true + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "xmldom": { + "version": "0.1.27", + "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz", + "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=" + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + }, + "yamlish": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/yamlish/-/yamlish-0.0.7.tgz", + "integrity": "sha1-tK+aHcxjYYhzw9bkUewyE8OaV/s=" + }, + "yauzl": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", + "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", + "dev": true, + "requires": { + "fd-slicer": "1.0.1" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 00000000..1f242064 --- /dev/null +++ b/package.json @@ -0,0 +1,63 @@ +{ + "name": "leaflet-storage", + "version": "0.8.2", + "description": "Manage map and features with Leaflet and expose them for backend storage through an API.", + "directories": { + "test": "test" + }, + "devDependencies": { + "chai": "^3.3.0", + "grunt": "^0.4.4", + "grunt-cli": "^1.2.0", + "grunt-contrib-concat": "^0.5.1", + "grunt-contrib-copy": "^0.5.0", + "happen": "~0.1.3", + "mocha": "^2.3.3", + "mocha-phantomjs": "^4.0.1", + "optimist": "~0.4.0", + "phantomjs": "^1.9.18", + "sinon": "^1.10.3", + "uglify-js": "~2.2.3" + }, + "scripts": { + "test": "firefox test/index.html", + "build": "grunt" + }, + "repository": { + "type": "git", + "url": "git://github.com/umap-project/Leaflet.Storage.git" + }, + "keywords": [ + "leaflet" + ], + "author": "Yohan Boniface", + "license": "WTFPL", + "bugs": { + "url": "https://github.com/umap-project/Leaflet.Storage/issues" + }, + "homepage": "http://wiki.openstreetmap.org/wiki/UMap", + "dependencies": { + "csv2geojson": "5.0.2", + "georsstogeojson": "^0.1.0", + "leaflet": "1.3.1", + "leaflet-contextmenu": "^1.4.0", + "leaflet-editable": "^1.1.0", + "leaflet-editinosm": "0.2.3", + "leaflet-formbuilder": "0.2.3", + "leaflet-fullscreen": "1.0.2", + "leaflet-hash": "0.2.1", + "leaflet-i18n": "0.3.1", + "leaflet-loading": "0.1.24", + "leaflet-measurable": "0.0.5", + "leaflet-minimap": "^3.6.1", + "leaflet-toolbar": "umap-project/Leaflet.toolbar", + "leaflet.heat": "0.2.0", + "leaflet.markercluster": "^1.3.0", + "leaflet.path.drag": "0.0.6", + "leaflet.photon": "0.7.3", + "osmtogeojson": "^3.0.0-beta.3", + "togeojson": "0.16.0", + "togpx": "^0.5.4", + "tokml": "0.4.0" + } +} diff --git a/umap/static/umap/default.css b/umap/static/umap/default.css new file mode 100644 index 00000000..f798045a --- /dev/null +++ b/umap/static/umap/default.css @@ -0,0 +1,569 @@ +div, ul, li, a, section, nav, +h1, h2, h3, h4, h5, h6, label, +hr, input, textarea { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding: 0; + margin: 0; +} + +/* *********** */ +/* forms */ +/* *********** */ +input[type="text"], input[type="password"], input[type="date"], +input[type="datetime"], input[type="email"], input[type="number"], +input[type="search"], input[type="tel"], input[type="time"], +input[type="url"], textarea { + background-color: white; + border: 1px solid #CCCCCC; + border-radius: 2px 2px 2px 2px; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1) inset; + color: rgba(0, 0, 0, 0.75); + display: block; + font-family: inherit; + font-size: 14px; + height: 32px; + margin: 0 0 14px; + padding: 7px; + width: 100%; +} +input[type="range"] { + margin-top: 10px; + margin-bottom: 5px; + width: 100%; +} +input[type="checkbox"] { + margin: 0 5px; + vertical-align: middle; +} +textarea { + height: inherit; + padding: 7px; +} +select { + width: 100%; + height: 28px; + line-height: 28px; + color: #efefef; + border: 1px solid #222; + background-color: #393F3F; + margin-top: 5px; +} +select[multiple="multiple"] { + height: auto; +} +.button, input[type="submit"] { + display: block; + margin-bottom: 14px; + text-align: center; + border-radius: 2px; + font-weight: normal; + cursor: pointer; + padding: 7px; + width: 100%; + min-height: 32px; + line-height: 32px; + border: none; + text-decoration: none; +} +.dark .button { + background-color: #2a2e30; + color: #eeeeec; + border: 1px solid #1b1f20; +} +.dark .button:hover, .dark input[type="submit"]:hover { + background-color: #2e3436; +} +.help-text, .helptext { + display: block; + padding: 7px 7px; + margin-bottom: 14px; + background: #393F3F; + color: #ddd; + font-size: 10px; + border-radius: 0 2px; +} +input + .help-text { + margin-top: -14px; +} +.formbox { + min-height: 36px; + line-height: 28px; + margin-bottom: 14px; +} +.formbox.with-switch { + padding-top: 2px; +} +.formbox select { + width: calc(100% - 14px); +} +label { + display: block; + font-size: 12px; + line-height: 21px; + width: 100%; +} +input[type="checkbox"] + label { + display: inline; + padding: 0 14px; +} +select + .error, +input + .error { + display: block; + padding: 7px 7px; + margin-top: -14px; + margin-bottom: 14px; + background: #ddd; + color: #fff; + background-color: #cc0000; + font-size: 11px; + border-radius: 0 2px; +} +input[type="file"] + .error { + margin-top: 0; +} +.fieldset { + border: 1px solid #222; + margin-bottom: 5px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} +.fieldset .fields { + visibility: hidden; + opacity: 0; + transition: visibility 0s, opacity 0.5s linear; + height: 0; + overflow: hidden; +} +.fieldset.toggle.on .fields { + visibility: visible; + opacity: 1; + height: initial; + padding: 10px; +} +.fieldset.toggle .legend { + text-align: center; + display: block; + cursor: pointer; + background-color: #232729; + height: 30px; + line-height: 30px; + color: #fff; + margin: 0; + font-family: fira_sanslight; + font-size: 1.2em; + padding: 0 5px; +} +/* Switch */ +input.switch:empty { + display: none; +} +input.switch:empty ~ label { + white-space: nowrap; + position: relative; + float: left; + line-height: 2em; + height: 2em; + text-indent: 6em; + margin: 0.2em 0; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-shadow: 0 1px rgba(0, 0, 0, 0.1); + width: 80px; +} +input.switch:empty ~ label:before, +input.switch:empty ~ label:after { + position: absolute; + display: block; + top: 0; + bottom: 0; + left: 0; + content: ' '; + width: 6em; + -webkit-transition: all 100ms ease-in; + transition: all 100ms ease-in; + color: #c9c9c7; + font-weight: bold; + background-color: #ededed; +} +.dark input.switch:empty ~ label:before, +.dark input.switch:empty ~ label:after { + background-color: #272c2e; +} +input.switch:empty ~ label:after { + width: 3em; + margin-left: 0.1em; + background-color: #ededed; + content: "OFF"; + text-indent: 3.5em; + border: 1px solid #374E75; + font-weight: bold; +} +.dark input.switch:empty ~ label:after { + border: 1px solid #202425; + background-color: #2c3233; +} +input.switch:checked:empty ~ label:after { + content: ' '; +} +.dark input.switch:checked ~ label:before, +input.switch:checked ~ label:before { + background-color: #215d9c; + content: "ON"; + text-indent: 0.7em; + text-align: left; + font-weight: bold; +} +input.switch:checked ~ label:after { + margin-left: 3em; +} +.button-bar { + margin-top: 5px; +} +.storage-multiplechoice input[type='radio'] { + display: none; +} +.storage-multiplechoice label { + border: 1px solid #374E75; + cursor: pointer; + background-color: #c9c9c7; + height: 30px; + line-height: 30px; + text-align: center; + width: calc(100% / 3); + display: inline-block; +} +.storage-multiplechoice.by4 label { + width: calc(100% / 4); +} +.dark .storage-multiplechoice label { + border: 1px solid black; + background-color: #2c3233; +} +.storage-multiplechoice input[type='radio']:checked + label { + background-color: #215d9c; + box-shadow: inset 0 0 6px 0px #2c3233; + color: #ededed; +} +.inheritable .header, +.inheritable { + clear: both; + overflow: hidden; +} +.inheritable .header { + margin-bottom: 5px; +} +.inheritable .header label { + padding-top: 6px; +} +.inheritable + .inheritable { + border-top: 1px solid #222; + padding-top: 5px; + margin-top: 5px; +} +.inheritable .define, +.inheritable .undefine { + float: right; + width: initial; + min-height: 18px; + line-height: 18px; + margin-bottom: 0; +} +.inheritable .quick-actions { + float: right; +} +.inheritable .quick-actions .formbox { + margin-bottom: 0; +} +.inheritable .quick-actions input { + width: 100px; + margin-right: 5px; +} +.inheritable .define, +.inheritable.undefined .undefine, +.inheritable.undefined .show-on-defined { + display: none; +} +.inheritable.undefined .define { + display: block; +} +i.info { + background-repeat: no-repeat; + background-image: url("../../src/img/16.png"); + background-position: -170px -50px; + display: inline-block; + margin-left: 5px; + vertical-align: middle; + width: 16px; + height: 18px; +} +.dark i.info { + background-image: url("../../src/img/16-white.png"); +} +.with-transition { + /*transition: top .7s, right .7s, left .7s, width .7s, visibility .7s;*/ + transition: all .7s; +} + + + +/* *********** */ +/* Panel */ +/* *********** */ +.leaflet-ui-container { + overflow-x: hidden; +} +#storage-ui-container { + width: 400px; + position: fixed; + top: 0; + bottom: 0; + right: -400px; + padding: 0 20px 40px 20px; + border-left: 1px solid #ddd; + overflow-x: auto; + z-index: 1010; + background-color: #fff; + opacity: 0.98; + cursor: initial; +} +#storage-ui-container.dark { + border-left: 1px solid #222; + background-color: #323737; + color: #efefef; +} +#storage-ui-container.fullwidth { + width: 100%; + z-index: 10000; + padding-left: 0; + padding-right: 0; + transition: all .7s; +} +.storage-edit-enabled #storage-ui-container { + top: 46px; +} +.storage-caption-bar-enabled #storage-ui-container { + bottom: 46px; +} +.storage-ui #storage-ui-container { + right: 0; +} +.leaflet-top, +.leaflet-right { + transition: all .7s; +} +.storage-ui .leaflet-right { + right: 400px; +} +#storage-ui-container, +#storage-alert-container, +#storage-tooltip-container { + -moz-box-sizing:border-box; + -webkit-box-sizing:border-box; + box-sizing: border-box; +} +#storage-ui-container .storage-popup-content img { + /* See https://github.com/Leaflet/Leaflet/commit/61d746818b99d362108545c151a27f09d60960ee#commitcomment-6061847 */ + max-width: 99% !important; +} +#storage-ui-container .storage-popup-content { + max-height: inherit; +} +#storage-ui-container .body { + clear: both; + height: calc(100% - 46px); /* Minus size of toolbox */ +} +#storage-ui-container .toolbox { + padding: 5px 0; + overflow: hidden; +} +#storage-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; +} +#storage-ui-container.dark .toolbox li { + color: #d3dfeb; + border: 1px solid #202425; +} +#storage-ui-container .toolbox li:hover { + color: #2e3436; + background-color: #d4d4d2; +} +#storage-ui-container.dark .toolbox li:hover { + color: #eeeeec; + background-color: #353c3e; +} +#storage-ui-container .toolbox li + li { + margin-right: 5px; + margin-left: 5px; +} +.dark input, .dark textarea { + background-color: #232729; + border-color: #1b1f20; + /*box-shadow: inset 0 0 0 1px #215d9c;*/ + color: #efefef; +} + +/* *********** */ +/* Alerts */ +/* *********** */ +#storage-alert-container { + min-height: 46px; + line-height: 46px; + padding-left: 10px; + width: calc(100% - 500px); + position: absolute; + top: -46px; + left: 250px; /* Keep save/cancel button accessible. */ + right: 250px; + box-shadow: 0 1px 7px #999999; + visibility: hidden; + background: none repeat scroll 0 0 rgba(20, 22, 23, 0.8); + font-weight: bold; + color: #fff; + font-size: 0.8em; + z-index: 1002; + border-radius: 2px; +} +#storage-alert-container.error { + background-color: #c60f13; +} +.storage-alert #storage-alert-container { + visibility: visible; + top: 23px; +} +.storage-alert .storage-action { + margin-left: 10px; + background-color: #fff; + color: #999; + padding: 5px; + border-radius: 4px; +} +.storage-alert .storage-action:hover { + color: #000; +} +.storage-alert .error .storage-action { + background-color: #666; + color: #eee; +} +.storage-alert .error .storage-action:hover { + color: #fff; +} + +/* *********** */ +/* Tooltip */ +/* *********** */ +#storage-tooltip-container { + line-height: 20px; + padding: 5px 10px; + width: auto; + position: absolute; + box-shadow: 0 1px 7px #999999; + display: none; + background-color: rgba(40, 40, 40, 0.8); + color: #eeeeec; + font-size: 0.8em; + border-radius: 2px; + z-index: 1004; + font-weight: normal; + max-width: 300px; +} +.storage-tooltip #storage-tooltip-container { + display: block; +} +#storage-tooltip-container.tooltip-top:after { + top: 100%; + left: calc(50% - 11px); + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none; + border-top-color: rgba(30, 30, 30, 0.8); + border-width: 11px; + margin-left: calc(-50% + 21px); +} +#storage-tooltip-container.tooltip.tooltip-left:after { + left: 100%; + top: 50%; + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none; + border-color: rgba(136, 183, 213, 0); + border-left-color: #333; + border-width: 11px; + margin-top: -10px; +} + + + +/* *********** */ +/* Close link */ +/* *********** */ +.storage-close-icon { + background-repeat: no-repeat; + background-image: url("../../src/img/16.png"); + background-position: -52px -9px; + display: inline; + padding: 0 10px; + vertical-align: middle; +} +.dark .storage-close-icon { + background-image: url("../../src/img/16-white.png"); +} +.dark .storage-close-link { + border: 1px solid #202425; + color: #eeeeec; + padding: 0 7px; + line-height: 32px; + background-color: #323737; +} +.dark .storage-close-link:hover { + background-color: #2e3436; +} +.storage-alert .storage-close-link { + color: #fff; + float: right; + padding-right: 10px; +} +.storage-alert .storage-close-icon { + background-position: -128px -90px; +} + + +/* *********** */ +/* Mobile */ +/* *********** */ +@media all and (orientation:portrait) { + .storage-ui #storage-ui-container { + height: 50%; + max-height: 400px; + width: 100%; + top: inherit!important; + bottom: 0; + right: 0; + left: 0; + } + .storage-ui .leaflet-right { + right: 0; + } + #storage-alert-container { + width: 100%; + left: 0; + right: 0; + } +} diff --git a/umap/static/umap/img/16-white.png b/umap/static/umap/img/16-white.png new file mode 100644 index 0000000000000000000000000000000000000000..afdd15aa753a95e23018be49630f6bcb1fd5cd90 GIT binary patch literal 13739 zcmbt*cRZEx-~KHb8BvtTY}g}PHf0?$j=ht;NA|9S2xTO@2q9#TW0mTVkeyBT-ef;- z-`_vaKhN{W?>R3Lj&tt&bAR5~`+8s3b-z$oRUjpzAwm#@R7vqZ8osWaeG=lsznTv= zW8lmA$FfRVgz)euvA7nf%$gb`7?FQet1x-#mcr!_E2u)bDPM#kU#naGKgI~b!R5a}vo z^!KTlfV_EJ@(&@~2g#Mr$vL)IA;+>_W)&5muIFij~FqOMIuFZfAzHdCzD%#Cf4u1^(tBcW#3{^yUk!HmWw6mhNJZZk7q zM6)L-g}gf8&@D>!Ud+p-seLp~(sSu>Z%vBf(xvx!hzz-+hDKNH_V#usZdw6Ht5{jd zpu=h(#%qmAR#p~0?dJ1|HR38N&ux9;OX=6IUz-Ptj1Rs4etVJOsjU}kt7c*Gfmu{k zlm4prC>xCLQ1mK0MG6BGM$)iS*D3kptmCZ3U<&?7=lBi;iYX<{tC;`GG9 zBZsRP9&2ng-Dz}WJI||BMgqD~4jHr!927tQHAn$is(Mb_3|c3CYf_S5`blqdGFA80_v`6EG>> z%WuSWueNEodR%N$?_2n(sOV(iPl>syLA`H9;B?FDFlLpvuRiJ&SUzQZ*U-@LXl<;% zQB6r{zw-^3;Z+hE0h_&vFV9X%CW4Mg7h_(&d^tZcF~Jtc{NSLv@ARIHqGC&GYaB}u zt0g_+B0`IMUqgJ~_^{2Qv>loCGXKy&RY)o4I_9;q<}MnB!@B%KkLQwU z#cyx*7#C4TUGc4#%qc2b4H;f(xOVw6AM=eHH~ObGj-t^A7nnZW5EDC0sIIQo<>TYi zY0r>4Ep0Rt`|2RncCfo*zdBsC7G75;z7leQ;$(1yKKa$F&v)6`?c6;*D@81S#>aeU znVQ=1O{2wnOcN{^RXwlS@gBd+!1Qe}N?-JwgV0ha33X}k+`fI5e3Y;H;zrQn@OXcc zN=_T%+jz9u77(#Qk%X6grBl$SSJ>}c&}T5aCPK$<0K5NrNXQ2*ZSCV83%(b~ zJ1zEzF}ND92p%Q z$a~|)BWX*^>|0XiRW3x*&NAfk$UpfmyNV(28l#I>O1U6Fs}i0ASjc#Rv6@R4=#Ah(6?Y$1d(x{=f&CnS z+p8iQwroTwDx9CNj|0I7o#7of2EU{yVptx^VJMXAMec?Q%TisKK^N zBjgnx@}t7$fI+sUIldb+v^d_|yL~>`P3ddJjkwlK0#cf7szM!Nlv=v@{<+{B z>1kWf{QbspQE4{H2p8$UnT5s0Qn%w;6#Nb zS*fw6T{unX$M^41JUl$(K|70mFW=t_D^f(E4h&^vp7@VcyE-c+5mdYWc(29ooK8d` z%bCflb6IvsT;fgJ44R>}@|?)Dp$lg83M$)8B3Njg-L1wbHvPiLf(mmF9+V(%xL}fs zd|a!=MxiDv0J{~49D8$?eXeC%7qajL>J?06bhI=tvx zaNpC_(Fy#W^qEeE?KVL7FeMdLqLGHiYcE*l{e^{votl~&?r}jURn?2*2d?T~@bYG~ z*or!LRyZ^YxwV)s-8|&D}sa|rE4h1`yGQKNEzf}`y=p2k!PDyqFNXD#Pfnpo92g!8Jhww#>YlRmrS zA7Tk`z&y{x!qn~to%kQDPd4AKm$_s1HDurcbI*0=xP|M^A8)a+G+GO#NGYnRB_3Vp zjBAxeI32sRzPcJoWV_oM9^Z`?Bb<19YtreZ@N4qTVCN*XL96SC05V=%(mir2fTU>c z|FSCkq+4vlaO?JMuB+!|Sh=}P?gD;|D+-=?$q?Rsz=mhw-#!+2xN;{-o?_Om=3&`j zha$b*aHZqH6gFl}(r?#6$rKi=O-LyzuUBl1Z zYze5WwPU;>kApQ^em*|mu;%CXMPx$or{DwEXy`9}|`&-_dapadXdVzl$LDB|McbkBc3fA9+uPa>eH3m8X0i78z2EZsXLxca}y(GsO-19{NixAtTO_77;9F%@~E5;R_MfVAP$eZq?7Jf=w;{^Zu z^{ZiWa-!CmK4OK^F;J#Yj@P3NG zGj8(pm#I^JkD|pMBhsd_Eoe3(Au%yOS3SKy)tQ-@t!37o4b%3**GQE3l1Sdae=pHz zx5J89BaCA=xnh|auNuEe-GQ3w29v+UvHEhX8{q)&0!7pFF zknJq=SZ{uLMqoYA+bb^UJXR-~SE_+h($VR6LoF;Jl#cGyKV3)Ekp~EU`rXH~I&5xo z3JOvNy1Lfs5`Me7T*J`)4z3~@Du@oKiHgUGbAP^KCSiN-((Kj?TpZQ1oV#sCWOGkE*mEk z;ho{}ZxkdF5VjG9Cng74r)yr-PR@AWbcun5P5&of^3^ zil(-ZS8f`VrZ+>jZJl&+^b(VjYD5GDJ(Rs>5B^QXH22!=)KhUAdDrjMzMx>SLRxI> zG5cF{rs4qy+wa%c*DVzF$`NV8K}~&qeZq%-avr20$R3nt(edG4=j#0H3c>JYkl@?D(tJmX?JpDvCh@rp=OnGHq`mN< zG*Lf@(H88ita^97*C%F(p8uU47`3Y~=uEx4wGJB_g){MQW6Gi_7$@eiAN%dwNH#i8 zXbt9^E+E#b9=eqPQDMH~>1pxZeujm<`s5*M7JNxb~K7j_hA5Eh}SK>MI!7JUBQ=E-}ZdI@g~OKy~(n01U_QiXP{i(DHHt zqzO)!G2(A8ONPJOa;at8u7_1)AXVYOQdE4aMQ2rso%rtC3sp+nUMP8!$(V= zsD)9k#2GiAT&tOrB1tGc$=9!6^BY{{L`2d$LSbr6-{JxsP%f+@B_mV&SX87+@Y_*t z$rBTIfoZSYiAql6W?XADjtkB;f{B}m5?5^tTeg%G^epSWk;iJe(Tr8l|Lz1cr_VKd zh_zE{hTyor-~wEHHQkuZuq0aYqCBAFuWtjY&ueAG#p-h1N7Q$W}f!z!m4chOO7 zeD^ik@cFfdyFtQdxI-z&+q*Zp<9mo8+1o2`R_rQ78LLJwF!4o9l>jd^bhNt4oOQIYoz>bhN>{E*oYK-7n{)&CShU zs4x>Rj5h{#MmrT~vEKwPyqq2krx*}OO-oB_U~C-VHd^b!CUvqAlbfBJYwB8KR3@tV zS(+uf{JO9cB_ix5S>5qq5Q=1n>^@1y%Z(BJ29^mdG^ zvf^XUx|^n<;i3LvJtlh4K{Y%gBKc;-4Lf^#DZV5XlepIMF!WFu`3-l^(?AAW>eCOo zxrxruR}9R|CJQ_~JaiFh=D64M^YhnCztoO8z0b_Nv9?s)n9imB<$&<%!N_7A}KO6VDm} zv!b!Kp&`cpV0$46JvRg`&|kJC7rDqm8R2*R`gLuh=Z_?_%cT%pC(0#_G}XkU)Kty| zd#{0F)1cep;ztwTUQnDu!J0S}Hx4>PM@B^*xAzt3N~x-;702E%->M!L{pq=L%~+@W z83CCmaE5Jq4a#EAK1ob0fXB}nw|cFC&*O5wz6XLx5Rv;u1{v~Qps?fkczDNIavEco zc(Oj^c~_o%WwUYsG+k1w?*F?*c)n zGMq4Gs>`y<(D1*_q>%=;3ixmT|1Ixxh6Xn~)%= zl&56}r>vTtlM`saIvLELq_W9nSgA4$(%4tfkKRhp*|s|faq#o=6F3Z47AhRp7HII?WOG<&u`xzSanWBg==5-05Kt>!UrS5t z*OvGwyl~^$MzIc115y@fghspNG&H1dimMgm=PxV7&w6Y*U7M8h5Y3rJvRA47@b3VTR)+ZaQDkOm)@utt&Dk-)43;JFo z(rlzH%Tdq(I;B9T+ElTyuyBS6Gs;6WP4xhtXHOGiIYg z17#`R86?Xl0h4JM{tev+4<2L>uY{uWmW4rpdskjw{&2h&8p6juJCE}SXs`#+W3zkr z&&z}t=I4ug?QhN)28z&LWWl=LJf_R)+3MMy?=p9TbCuQCAH;-^n}M=<_)^~d{uyb6 zIhX2idtnPVtIInGPJ$}iof%o$n8J?#{Q2|XcJ{V2!cF}24oDtCOw&8eNrJhmO+{3hawA1Y2UrXG;O9q z*^d8g@?~!lG=T~hwR9uT{Y^`iR1x05mRC%8ASS;T?;Ll$bB!i0HkRljtq3_a149gK zNI&_P*Gk5ns$!s2bmO$B(^TigOp1l8>jUXy=7Jl|-D_=T+-hW)<7CJ~@T27Uf7uAg zyU-HUn=pXTV<2qT%gTXu#lbL1v-Mq)ElN^h=H=(#N}rt_gOS^SJfr|&jB6!9&gqoH z$kK>XQ89Y2Q=pAZcw$CXb01s31HI~{{FH0@oHg?20UMyjFxk1cD8hY};sGfX;iV59 z_X+oH0gakMLe9fN+ob!g)?jF^Uw4J2w)DhE*nD}4w-*u?W)4kPuh!i*zGva3sO#Tv z6v)_Xc5@4h>1L28{iZzwjJOl`nx5e9jTCjRxF2l)S#YPH_8H6RvXN&Hb+@?(wbsaE zTw7k8lQZkQH|jOM3=o+PDokD3l>1j(WJAnrb(vsd59z0n4dgZd@e++_BI~e&a4=WK zjXv|(3nZuD85$YYJp!F5=zdSTKx)NL9kj1s5t5Ssq6?Pe;PS~j!sf#k?>-~n#jhhN#Uc(4CUwf>A&&t`=T;jISMd=J9ES)Pyf1}2 z3=R(R+`fH#lv6LUtq%i9{L zJ)H1!>bQ(iXkUilNm}ei$g5uiaYz)Jx z9ph&CcdN4F>rJqD)(x6}bq1=*V6_|7HjZAyI$Q$rN-O~-xDSkgq0y?HM%Tk*N9Ng= z^|_s;0Y6yIyAr?=`mUz8*<+*Rv$_}DPn3VY1V3ks^6J%eoZpzjolI63O;h9f zD3FIRkmj3Xqb&^zb$)J%1D~1qEF1jvTD*k|dL|bWOvttSw<8MDe3<*`U{=j2F(}+V z*jd^JmghM)Hz&m~uTrSb`GyTpR*~)aN3(qT+*;M3!xC$Dtd#18K6pP3(E8p(n{*l~ zx2-J>05LO0zfi{)bWCCxIyLeBz9vIx@48L5zv0m?KVs$JC@_Vl^`8H5Z%NUv#jp;N`)rs2kgAamtLVOHp9NUd@^Xde`j17)Lkj9Jgwtp&%-BdnmHD@(lGbq%4fN{ z!?_v*I0l_dS_5nwCc%GJ;&BLXr>h1Eog*V3@Bc{>`+suUmc+mUH9l*0YV)MxRXNwo z!DI30>sZ(4v{*+{BBI)EJZiD;lP=rfxJ9!@+#_W2MG`_@(E^)RAiRW|wx$Y#Q^xHO zacQ;y2@#QhtesnpI4)F7(=opFC-wz>wNJ@oZ$SSZCYrT4iqoAw`v$`vG?;GJCo8Iwhb3Ny$0vGkY{ z?0`<3y0nCZo#=RYRsda-QId*hwaWUU0c%z`d>E4A^Uj2HQb2>=m>w++^up( z!rwLm$Nfdd*L!ssqNi@)G)=nnqF%RJL(Mh&j~9Scl7dfiZJi;pO=3^aWF_;KRC*c;RDVA^Hk$=t!Uxy!Pmji`~!UIm!7?UEd|Dl0_R zGaH}BvhyRz722~b0F&5HK(Gr<_X?8-)KOa^(T6PATEs{^nk&24p=y|5!M(NsJ%dRA zBcP()%8+2f7@#h`JHyJ-@(PZ(Ld3?iXU}5Ji3~m3Z+o*uir@U?O`C7MNq0{tKz|*~ zM+0FYAtB&xzLY7*6M>6gsGFxX=~Q*y6LXvzKZt*k_MZk^lANQXqb1P6{A)p7VS%kA zRJHg9htd4Zb$$^U>33I53^O9^qo?rC;{!}Tcu1l3c@ExdB>KMfftP}_LteenJeIJo z8qPYRF318GK@I7wv?Uf1KXy= z@pjKHsGu-U;n$m-M)B9d?&0Qy{*t9rKx*p0A=d+X*qD;Ca*xt$Vgw4J652E8B20H> z0C#~Hn9TlwAJ8CZPmg@~@S)BPh|sV3d7H+-Rj@$f(b4GSu^;&xa3BH3#%W(3-ti}# zFhLq>%=+TH@1C4rX4Rman>bZ{(Rl6-yNHN)+V@8nfO4iF+xGRO*#gFkOV~I5c*GCw z9&3_kZ|8yjJpe*{cIx3CH_}7Mqyd|d8t)-ZFr3~V?pt{_!E@jsat7NzWt`6@`U7e? zJpyuQyN@kk7(*(sD;B`j#-Qd;(G6D*V1}(O}hmR-QofqK=w!w_jGs!jd zd#;Y;l@705-v|Q!Hprc5U(%~j$P_d!;&eF}7in@GA*RJX*z~PuL8K|aTc;!{gTsAr z3*O#A$nd!qHQhxl9-^M7B^Q@2cr2nz- zMdm#6Zhl^bPO@7xt%C+R7tET{uH#T)Ahj0&b&)k=P6_=0=Apo?zcbO%Gr4UrRvw4X z?PCL?JTU>+I=7OzwuT%kZ;Xi8uj3OCC?BZot8(Z~%nB|Crq3~)cQR>S-3w5IURqq-T=w+SR8&-40~+xjc?H6&2xLNbfbx9rFErFJHjbKU zON@ah{9)8CiUua0fXdVQAs{H&=k7jyk--**?FDEhjKL+yWkRM4?FF>)-Ad58M6$Ka z%La9DyuVh_F->p5v6IOvs%}NyrVA$XNmug(;SGSUn1+TXkSDHn7qJOoKay+9Dy6)y zaU|BD|Je^@&(z*tEw*B_#wX;l=O<*2#s!zj5i;P%=357o2tB1-mlvrYRq*7Qr(DL0 z=vBLz$tfu*$${cUA$#xM8i9)_&@+pPrYAvV28Eqb3{oZyo-0FTxcDUDK$W~T^Nr{P zZGOMQBJUuCQkFG*aG1IqB{Y-|pn55Nj>1uBIPss=7y5w(cf7#pJ|>t~V$i<%ay?mg z6$jy?P7E}cFS}iqR=S>YY#iYr31T}_d^ba-&Cj!4!?E!o*ZC3vCu*VoDdV)Du!J&O zeN|rG0xQVr=^x_9hX4H0>#eH`NBb75=5oaG64GyzvK0d&hP zB=h&*eJ-YN;AI7I_HjH5A@6!rBL2nI=*gN7XYefz%9yjggIX{yJP67eSgKNf-L63S zJ-dBiOjWi;K}JTVk!1Q(Kh{RT1abLN<#6X3%CN|}f#%%+Z9b4iCSDcIroIH^3 zPR{ZGz7Tgcl5n9v&Q4DsgADo57545MA$>X=v zWeNA6n-q6e3_3V#ps;9E2Fb;Xl3%xu!m2m8H*eINnD!n;ipfxZ_mR)iD9v)*`htVX z-khbI26+lUuW!)>gpibW=7ra%I=gG*8CPj(Q~Tjsu*J1bLrUSDPC#V^nj8+gyz zV%rzmm-^75pCFrIps8s->C@1b7pJx1g@QCq^er;q_hjo zgTr+&J0l6?N*#2ws|Xb0BL|^jMpPcnndk4nRf_(Z3jTm0RJ_bjUh4ljP58eA4gdSE zK9t+``_X3V@e?PJa2XCuaCKasCRC+(MBtCiz2)Je&50_&E0A9V1Uj%MC59d14B| z!b}9V!a+?<%?skE6fo%KGm|h5I(feItZgAkm{RkDWpf`jb5#Y;5h`|}QA>ymU`}M? zzrT?`K?AA#V{E=}T;BfpcOVI4VNEOP#68pkt85D)YJoq#TVci1uNHR8@NL`1o3bt7 z@p-AE=3Hon8|qIoS-BC$)=!h-oqIUz)|gSJ%=nYs`V)|h2%3s(r3QsTM{$5XfRqgl)q>i50 zA{`Fa`b;=YZkzcFJ}cFO3`q%00e1aAQ}0}s+!vt&T%=IPuN}k~hY#^~ccTp-u+=Mn zy=#|o{fOgg7&nr}h&Sj16#`*u(DSgk zuPla?lT<20(Y_#nB#_5;nFQ4saSvWz0gs`_r?tC$ib-9eM$q-w>7i5EBC)v=RAvw6^xnEFf+JjN4*H zT__*EpJ|qASC}f#6P-{8ys!#9BaYX!mq(QkyE^FmRE1Xk* z0-z*yp0Sk;@~lx15u}E5Au{k!b9#Zd_gSGnQK zkXQETX}i{?9i6}OUAuQ^qNEhI_O^P|q(~tTL4h;Tovl20HlXiu=3u~oT)7>>dGX>! zlf>9qFm{6K)@`}lGGg|wxeEhs&ev9Xt{ocHIuvZ`Gszhc046o-|=M$=0i(B<~* zPe4Bv702-mi`3yx6uYl+KHFWObIa^Ml;1fXUDIxr(tT7@4-7sMT?+x`Y2+<)#NXp_ zvp5zc-s>?Z5^PWyJuR||Wlvaij_+PWLzpn)R=8&zcB;n5S_JH1N0@}Dfm0awW+}wn z1)YdjHMeX5nuIedDX#)Fe@n=;Ox;w7zOSiCp~ZgXM>L(^9yBEi#*Kjj379&*K-GSB z7%W|X_3G7M2v{s)UsB%#x(`nj!^fTfEk;VmJp>UF1cK>O5rCvA9vEK!R90mLCUZEZ{FU zveElMd@;hAV9_8G<>$McAo+eLL(I$RKD3q``w9c?wx`gmcVWXeDkbG|L7{R0c20pY zUz#3xu&`b==DQ?y7H$H>VW`I~-HC~bIW5Fa*@}ba{g_N*TV2(_V2BK#ltzFaVG5B3 zNR-nkufUWE{qxv+OTMX#T6l!K=NhV>RjcU-Ns!}qAV0fdo|XwHSGlYaEJI72iET^S zgm}nV*pNHXnezN(vJtoQ-s>3Fh*&9N5cIil?l^;<9(UvB&5XzwFOoi~vrZ%G+S(PC zkRrjU@0uzLJU(dV(D^iRH=3A1&`zsEnWw&YwT*qW-Ga{*QYk)Sw{G34gbm+$cDx-x z1#Y0xXi0j0D-!)Gr?djFXBVL%T!)i(1B#vyvMMQokEE&UnpX|?uw@UkWe?5HvO#KW zZNJFOu!Zj$3C9t2E(No1{g^)zhrF~aF6&tkCv7So_oahit1R+sMx=y(ZpbtcYG)IOmGVQXz{b*Y#{Nl5_Zu*P>| zB$*011hx2X?!&C}%q}X-6jhdOZ{nrrY!<-9px1+k?_zIWGMVH*#`0sXT3suv*?H(a zp`hXX1m7!Y$*~FoEa=HYaR}LsjJt{+<6p>*FB@K&O37&6eILI`i@kDLwi54e4Bp$* zAe};kY`cwficM!>RVY*jJQ-HVrkybU_WAD=?Em-w`#e1$cU}vvsQ{{B*)p@a4kFAR zgWqzAhjEFTPB}@>cM#Hsb>FKWg-lg50o%r@F`@@j?QKN){YKSry>)Bs?F>(=(@!?k zIm7|mT?(3@b2KJEE~>IWGLscTHl&cTUw(E#|7gXE&=QXR?Sz=h1p&B;(N?lP;ue#bJfF&LHQYHdaPV(=F;7R^UY>r!wEGXO8jn1 + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/umap/static/umap/img/16.png b/umap/static/umap/img/16.png new file mode 100644 index 0000000000000000000000000000000000000000..5aa09823629fdea4a36f619f72f7de3f14e8160f GIT binary patch literal 11308 zcmbVybyO5kx9=H-kOl!kQb9l(9gq%nlmtP*Ria<5Ih1B-IB5QZSo!unUmeP zdi4e^)xBpKz~$Ea&@eH ztorKPFWg>a1V^5H6&F8$zQg0P)aQ-2~wNwA$Pt23o znezJj`p-LOyg0$@kE=V8!?zb%vK0ihQ`gv0JgaL3$^5w~4HB4~6QhNW~mZDd0)UcBfvJT!E3KrUKy zt7Ud}_6=S193OBpN%l`1TV9#lIf&jpI=-5Zp+l}^8o0!k5SvjneDe_xcReqKZZB2P zv<7uaJ_(g~ne(Y7dGzSfOe~XNW~z&dkR>KAE-qR)&q^TMRaiu%6Y(04|9;!TLeXRZ zzt5yAYx~}ojh=;-RYeW$AYxn+#@s?Md~j%OaO>7|fP99Ue`RAn#$PL0bnhMO^--N0 zH`>mdnwsuex@RRORs<}Ke85=B9k)M0FpOy(*??L!o^Oz@E(3q##trej?}tAh4*DNW z^*R6b%S-w~FsXDI9ECqE?%lh0MlX|-lcl7k8y7bBBDhbHX6i`y8YU$tJ4#DSbKNmD zt*pb`#G7y?SW-m*D$(z zf#+r3?M!_JAQG`Ajm?qL38ewwIy*TK7P{!2e=+5;I}2y`{kly!4AIc&D2y!+`qa&z zEhDIxsYvJ!0xiG&u1IdyTZSWcKP@mcgEbFhYxH*;->}f@=)ZThv^tLl2L}~kECJaW zpMQ&0PXvtZfGdcv&5N0#5#v=6pB_>kfuAHJncWRnUe2uFNOqV=vam^8czYx6OgJ6j z=jSKl_GW&vG<^H^ZO7lzdieWyKLIR%A^DgkJW-}XcRmvam9u(MGBS?Lq}apLV!A1A z8ChGO6k2|`Aj=sqmXEPYF=Y0upWw*ubFSw(rzvD^tc=?e$}@DBZS0)impvVO_;tn$ zuW&#gPJ;25IM-3mrYE@emM^)*@7|fsZ|*&gb*5yza|P}+r40!-*rWQu zu6fFHltt?r+yhmeffcO=rv>`-^mHEn?1NEPPg5f?tisY`Jt2Qa6zhdanJZT&UnlLK zMJ2eEDlzI%tnt*(j&bA}ilMBnZr`pDeqb90TB3)}Z+!YmH6TUL%ggXQT!W*TzP`Aj zAuPcGbywJ)sS_ zrRmO>ZK>g$=Gf?9%E3verWRW}k>3jd;gEz;Osm0Iv)F#2pl^Xy^5btmj|!2hfL^#( z?d{FVOxT?K{Du5RE}I8~poP$0S$r=0!K{Ckfcu3rar0HiYUt*>3rq;NKv_YAIFo6Sp7iHn)x$U5IKY zyxQPp?(NDge*1Rh4YBSDra$*y+!?XaGz+J+1uC6^5}SoC78aJNDyB6_$14AqAMkiX zt+du;kv#4)QCDxfc#cz~F3V3SKw5fwwL(U><#pRULrc*!W2qL&+CmOHFWnGWmROmt zt}bf_2Zu&5J-^MamZNX3Mv~#&?FXW4i)3i{PE9kkN^a1$j`**aixSWA-ZyZumk;*~ zJpUMBh)KIb+j6~wB`u$eK;Y}Gldnqe@9$r7mNJ|5l3meJ`o0o(Ge__B7N+>$;hEjo z@IeK~n;RHh&R<@BJ(kTr~^lEJ}rNKib5DCF2w(zu=M&=|k_tdkCH$Y~u4fOFcm zxuY`0vV|NtCnK|i0=D(DT0_;IQygQ=%ge`aE!m2zTXf01M9tJRK?ECjYxkpzAjY~l znHd&FR%-*#r%8KKcxBZOG%XK0+NI!`JT?82jQUL2OWiV|AOslq*qM)&b34aiGPAiS zaJo;zQheAfeePcC%m`y#8@Gn=D8hyst0ph|d1%mdK*}}Ap#COWx4`$d=$ZEyvRRfZ z6WZ*AR4zP=|McmTHF6hOE#6*2TJ}7~Ei1x*8i^NJ_PW3?hJ659%0)vH17=U%*cVdvQN0;iV8kM{w z_I=?zaUEeZ*R+NBD-Io#Xre@(SdxL$={}*@9YTY?&>d2nghwxf4hGADi+MB4B1vt8 z^CGM)Esq*9jsl}%jM_by@kg0lq`;$Ep;*pcGjiUZEy}FcXFdllbw5V@eNoZ)9A(!1 z`y|!vbF~^m{$$v~moHyd9nHp`Sawiqp${xRkzj4v1Q9_TEum4iPXN|??#q_G<{)CX zDL>!w#IHN6zoI?L)&w{vCnae+Ej+3#DZNfC+jVu^KHVn?_<@U9Cp*_E(*FIsj3j`H zib@fPlQHmRQ@?-zzVkBI?a&6R)##5lYl=Dp0hWX>PtG!h9BmCpj`m#_o_M}JH2~X= zqqLONlR+tW?Zet{42!eEBGN2NQ3JcerRnn6C&QxTi$Mx&iJ2C<%Dq-Crvpxo zcA`7yH5>RH#mUxIU>Q;yWidA|ZP@r`= zd5vMCw_$Vd?(7Urj)90kWO4g@aHwW@_>mj0e0+>YS7+ye)WG@$5r{|@7Z&KeYc2dY z7kjGxT{}xm%I|i(HW5wEN>4wSANgRP1IoN+J}KsXX99F$A|f0p_ffpnRPWwXnaN!x z#x8a7bj9GyC3Sy<-6rZ-jIDzC**Q3v?ocr3zkd7H`R8m~+`y<=dHuWh@1qInGOLNS z99NtPiqB(?Y4KL3e9ym1fWtH##pm?q`yMN+WA++j&5@C6QtV=6Yj^ZADg+t(*nrdJ zO(ZU!Y^3u2bQ}7w2xtYb^YX~*O4L&KZa7Ai{X<*2x&y8x_gZc_HX&N@aQiL5sp!_V zgCicZzd&Sn3G9et<9qNJXQ!*1*zPKe=@MJr(k=~XpwH`Ty}4J!Z^ z55k(r0zT&@)ln{MFD`UvP^WZ0>QO!@a{nZtoi6J=>zOQSx^c&|JyjLmiK}I6nN6_@ z(a^zNcG!4!{`%T{iZw~Gu~Dn!lTpJS3174Hy|AW2U}U@Vu$Vs^10tx;U1}Og-RpLi zs;hx$&|b|AmhMalP+UOdM|#RJFnxu$4vR}<4X^;mzjqD_Mj6-wt9`uW7-3+ z-eb(pnl(oYU|;3#vthOTEmteEysuvUcnouBZ0tS9<-4a!8a6bG%&Y126xY#e1wn6N z=N_GWT*?<^8x}NT8%_JP%`R0XQaN86XV;y2DM#{ByUv|&t#c-#S5yb^=A(u3LdPV4 zp^pSq35qdtQA`u6<_U_tdyTC#Un}@BaVRJGYPTO7B1?NpQ)%iWH4>w8VRwy;hD?CO zmQffyH1@I134=zR<>k^k=9K5Cru~2(QdYh&_5m)k(r5l#FrQky+wZ3%5P#^Z`PbIg zvMGlJITe&SdubYr!NN)lr4|ej|22ICq5EZ8T-8Ola6x2wV62U zuI_H`VRK4q0DBq-(4AwhD*dX)``jAwm7=T&rurxWhZ59Dzv8Y1vsXjV_MTJ;e!cB^ zM(hr3U}AmF%xGp>QWAw7pSNP8lS7o`54IqLa&55k9Q*v?MsRR&V+oN7aY)<3zivlz z>kV<=%#r)y5Rc!dGrVfxXW4>GDmc!OGq$E>j$`$#M4Gj8g+B-seVbw{8MRe+8=Jg#&!i+;@a~mI9JCr6gH&Q!i%w68J;nfV)*EdRV zU)VX|0EAxua3SmzQkJba_L<^ODO~ONZ$B$@ef{;~jCEZ8Sp!Y!9Do0j*r7g?sa+9U zBzDZtGIFw{CdOGDRqz6zzOlLK8Y-XJ7;Ei70Zbg(zLd~E$y7H{eR0M9FydsBjEu~I zJ3)=Yih0eZ6)8r?WKyhE4gBUD92xoLBcHJ-xv2+&`qGM4 zLln7BUej(m%4JK3P_qR7Nj~z$Xoai-f@PP)v|WjZL=!G)WLK0T;^iqACZFA4xuj&KVo-F4Gazc-X4%z zM9TU|bZPVMA9V<3xv@n(AIjDfrfI!ss2Q%}I#hJ0(L3V58X;tA@0*&AF9X(`t?g_Q zz`NgFF528WvpWDcN~Od3S)=+3qeJ63!8HV$`FB^e-v5E0|Mx!pKPkLl>|tcWqhB|i zvck7t=jZ1ysb46st*W{*%Cxw&o+}1x6ogiu0Rh|O3Np%n9+#Jw7cDIwAO~fnB?347?#}Z1KsDcnG~Ei?13Ec zS&nlFtShm8N8D#k%XddevV+v%%+{H=1O7*kIuZrxbr%nnUf}CW63ELqTL5oeEUo}) za%wtR%)E*~j8!&hBP2og$cwc`ngAPl)CqgbIZz3K8`seq>e}!Y6I=*X#c+9%15VSz zvDyrU<&t)#Aun&9GVl9XMDvLqkRg#R$j!ZLN53`Te&^1eM4*lEg88meElPBE zjCc|gh1^Y!;qEqcb8l0Zz}kNpxp$UoQ3#ZxHcQS6pj^QMNl+pVwPAY= z&GWf=oDU=8IT^N1Dfr5Z9lQ$pQy9!4>wHJBl zMcpx?rm(QXN0u||@}`;Pa4F9vyU*4LQkRB=SkDzO6|npvRE4&RTW4e$RA;|QUT%{46~L<*eDRsM z<2D%aV2f%a@XfVR$Z^JB1yu-aK4wz8jRLf_wK2UoeFmiA_OhVl@?5(OjeZZ9k&*~Q zlD8yYjM!ihaT8s&LP`%{w$|<>n|su*#_+|LeR;}};!7;9p4?oj=qYhrSZWGCxY_>X zti6%3v1^ag4(DX(s?w{ljSgBc(#;n8>vG=rZ@N~V5MW>mx1R^})3HfTy8?gk<>2VJ zk`Ts+4NlAN+Sm(=M#?7PRJ5zJq>9MBer4Z?qeDtkw@{<~!o9uM7XcN5G(9cN;P|_i zF}zQj_nl-Zvuu%^1QD5Ur+F@$#aUA zo@h^Kc!84`@;|D3&ZlJ%*e2I7)*JkJ2zbtqM{r3!TNOQ#HV_C6x}|rn2aV$MK_*OmBUg1QSxVGEo$h>fOb4) zAfI)m>0o8^+8YKsxt|PSfBV#GW*>`Ofysk$_VwL-EtnZ(H)tEpl{_&rq7LgG?CO8h zvrY~d+fVC%?UwboJRw;wH7%2vtxL_&lT#~_6-VIh(RwvP`F~1N?5sxxpW8R5<_%xJ6g`7br9@hoS$YOF8NNYsqFXRVcl!4b|0%^3_sYu0nrybxSG;=r`e%1`F`-`LL(Cm zdEjL5Vumtsjk)ON^u$}FEG4&6lvwPio9WX3qJ$WU@S^QaD}zuq1aH-moX>Pi&!om{ z<~gB(rkL_T43!`vB(%rYLOe@H3vL-0_=NPAiD{y5?|gVjhGm^SvC2$sJ>5s;n0abC z1q_XH^-h0$uy}b>0C;v~DuvF$rK&nPSZ$8{4Vl|n0FUU0&x+oBjE$JUFpWtPFK-I} zDOf;`1Tzu~qzc4@A%2#WI^KSh`*1=K${9>}tL5s``d1Zgcg_;RXt5!H9+w~dz3K7= z-J57>v{cS=HWOoUOexvjyIj~9m)MI`Hd_!j_VxBYI|S;pA0O+SJ>{OV+fc=a>2kWq zoOtE5wd-xa6xYwDrco<*J9rN-}rMB{5j`RXfY`O_HUPVm5l~N1 zEO$oi6XYOp_rV)zrc1jH9V}PkltQcMY+%upuAYiGxS4)^{QA|a_xNOFWF*+1zJo_8 ze2QsN+v&a5_u=6zHmXONpv-m7ikAe{D%GVz@!%uH=EjC2qrT{}dVMS|vmvNQsD617aJai3Et2QqxX=NUtyikJwydo8LN--&>!o@~bQaB~?xfu6~v$bu#vvFGl=`yN!6cQ$R|mLfV#^ifY5v)s+Zd zmzAwq0D9CW5;_+nP`Y-1nnG{8@ZQYKZ0HGxOo`v`{yd@O+v)vlP;aKWth31k_B7hY zfW=KTtK??SDCb6K>F~jr;lAb#Nwx;o7BTn7S#}F%dEfa6uM!QLt_yA5PH3;_D%q7U z58LwzyvV#S$awT1M%-b68XOu7Z#9pxTz7Do*FyUR7>|kM#Y0K@xD3V%A@>!41T>dv z>|K4hP>bC#`}nX;OoF-9&6Y%2 z|J(|33Tm8;yzDy`9H8RZG#Ed!EuehCia{^+5#jIxHeHFkCo$m5Rdh4**7%^Y=$V6W z-MgSD{v^GjjbHh2t<_r8q|CM! zv@?yQg(b3{yd^e#|L>lYrKRQ6t&4vpKy;;26t3Ws?`WJ)q2>iqEaiH(g=3TE@YX?l zJQqhL>I|>2KsNET1Tcp(x<&F~xu~m(!rXO*gZ|5#AG0F%f4BNB5Y`=?oO0^wM(^nB zU$Qyc-%1!``3~_;11RRe(IdQ?Flpx2kw;tWT$M69oBF)M;ukMEhprP1s~7Q*PN-m! z057?Df=SzU_fcY`C1oH$Mar2tR4fQtzw$={EA+(N>IIiZ(%0QsZVnPbr8zWS;W)0cgt#7ov9o(F;+7ii|(2xupP*tMm+ z$TGA^KBK!7DhyV)Gzam+%7TLJLyb1E&eAAky+nkE%>woPk2a<^ZjdDz)a)&!%RrgR zt?ucY4+ei2VJTtKm&U$N7PqX+$@!v{B3>*ZDtb7+9Kb_2J+b2VeK{9u3ALI+V0V(Z z)l^nJCV-@%djhM)LF_LQ-fznu)`jYSucIXdU|1U)8_I3;#t{IZTw$p|0E*Q7-}kyS z>Ye*|Q!r^KB-2{LB^WoiSC^s8_9Z@^s6z-7$D&TJLS*D&plJzg(4oule{sZGp3clY z98>Gu+>1^kk*H@+Oi&t*)vtGQ zg{+|xWP^A~8oqYPC*+RGK`Z06GGXg&tTpRjIM#m`WM!9^UtZjuOK9d$O<^5e`a)>G z>)=qlyy6YxMA9pkooAzIqMVijYNz|2ufIEmO6ctAv2G*$fXjCtr0~b{WvA4S84Jfa zW5R4ZkT$xKY@8fVZ5vbHJlkEPV&!%g7zycEo$JVa9$K5C_U!N!)tHW)i}LB zH@mpH9wcxnY_Bu&-Q@KC1UZPOvBiY6?Wc!{sXr|Kwayjp^grRF6n$y0(t)oSp9QIwH3Fj*dfp1rki#L zU!nRtDEXusv3o|$%+QwY%L|&%gZxm8@Nhg9K}}_TTNmOl9wrvQEiH|F9@DKQtgOgP zRg9Em(4eS*Vor`oE0APBm)%U)yp8BxV91_O&tm^gV1FN9)iKp4`yyG&zT&^E3e$4 zXsbos5(0oap$3n{Y#JVYS=0?q1`_8K0_acyYaKR?ZVs)N!w4C2w_5~$eUH0({Wc8Qu`a79N<_Zp}|g0C$3uDa?^H zoTtOWX0JR608A}Jzzxfr`N;a&koGsx-0zMzvrb-Javzl%SZS)a`}4ify7D$>xk7v+ zOdM(KDp;zUFf=mC58vnz6hZuzp~(@q|HzMVaT$f;%`lRU-8whCv%Dxh-%Kz}oD=mz`9l$dFwRrI5s!jaRyh>Co#=FHW}*91q`_xDF*I(rKYq$>Wjq z@Vo}GQ$P|0H>d))Cl3UXy`r7hE;5g@Q$4b}kR1xQYABPkk_g%6j(x#^sTw*QTEvYR zm4WgZSrS$aH68IIsXtg~$SGj@=s-}n);$VA+3*f=c-2+Gj;Q``P~*3suERniR0_HR z!b|IB&Nzy@VK8SYY)l16dZomi)AGruty(3UuF&x1bye2!!u?yldO(Bi57I|r;sc(7(f#+CbpRs1Ey<`5Zi-zRWey7Em!%viS;5ClRf(6o`_CAl z3|Q7zh&bF0MTi<{zBEZ54A>+p!J!1|GjJCtqk3-{8waN5W8fj+20Z~Y&m!S|PW=tA zpsXudO~{@26-CPt^}e);{b0G8hvXhO-YShee>xT$BTP=m88kVUpfb7b{KW6wTZTP$ZkSuO18k;~BA;zMrWWsj0z1 zLvD?f6sRpq%q3&Yz@?;AE4InjJIsELRlB?y;K&VLTRZ(LP85*Oe2nTXgS?TmbT~9f zmeVRFF>xRua&S8g!YdWxR?7=$PAFj`oHG2+K>vAk;tyoY3Kk*1^I}%%L+htjPckw- z@Jnvm`Yv`KH8eC>=wvB#tu~)1Dvb09gDkv~r;)kKqg9zj_3itvOz%5O~ z_iClKUa4TBA=sDBj5UKD7fi?a2!X{}$H{yE<0;M%v!(`)g zOBSfmYhEa#oaRrT8+{Zr1T)II5i)4COb8n;=6SW!%D8dJ`~4ckJr=^*vQ?jr@@B#E zF`mfPPpn)9v0?g!@rv~scsV&aB*Gc}w`Q2wSmGY8_{_4kmP;YvaAd~It%bhcZ%3Xt zFeOg@mnM&}FljZvD9`k!pq@u{snEcdFl^pK*1e! zE{f)C`F)(8tA~fOcgG9<9f-dY{tOiK#II!5jA;sr6 zq@J@bP!jzm?5I5a+fSVA)?L$~4olgemx1-Rj|l+PV@j$*{y< zt*11&BdD_1k@XC(nx;V*rw2YhKE0*ZDvE!5uTu;S4i-<=c-wopyNf}tC_&o$J59?R z0-*8n@#QzSoJGu{zfO@o_=v`a5-``_@C+f73|#BRjNipL-^<6O+kY@2ZF!$j>50L7 zSaum2A8(kL_fZ;zw}Zd^0^}6~WI3yzlAKQ6^UWTbk1uW7ry3~GQSI>PykXBl!izJI(OFkUDYyf50Rer)C z@OG9@5{o{x&ivYL;Jx#~#4WmY=Aw*_Z#@LHxfO8k#Qg(b$z7=V(~;D?dHeQP4+Il* z0JYY-`V9%?ZiRaL(KsFi*1%<;=~)?Ih(#Y$O`ig+Y*FjdsGTg8$m5F66o~>Y@!DK( zSP*_}E_8K5!}6;ykhi?(E|QnK6{Kk1IROIt0YAA;6rbwEk4|It+t zh`1QjW*6Ck77g`g01#xmfAc#BY}mdqdR5fO4Q`R9DP)^w46A_8*)D;-m{?YIgV#7q_HCQVzRD^-PCL1{_#Qoo$U|p z+`b+^%I9gpUX(58^WQ-w5is--WBgPpN>8N_IE9P@cHzV-DPZeQv6pCVEaDvt3+56!PpA^EEpk!hkCM zRYc3^KkDdt0rTkBRcJA|f` + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/umap/static/umap/img/24-white.png b/umap/static/umap/img/24-white.png new file mode 100644 index 0000000000000000000000000000000000000000..f5bf14e20eb0f01875606255e7f30520befbbca4 GIT binary patch literal 19034 zcmb4rcR1C5`1c1{B~+5V!?CGsk%Ug>A$#w=_lUlUBr7XBbVx$>9))bOvnyneva+As z@4BA-m$20R9`EdS(b; zF1X7+)FgsO0FlKD_?g&6QP&+_|LOdR6KJV>2*0HEc%b8<;cVsMZR%!;czb*E**e*~ zo13~=@;SR%r*25nAP5ukQ0|_lPug0#ua4%}L3`8UOtNVxwO1(p0~r~E9Kn?8pP|_# zU#V=aPQDYibtrpNZd)mQ$#&wMtwYM2+xd=|-a+Bd@1Ncyss2e5iJp>qKtXP*L-@vY zuV(-F)a2`{4x#2?;ie;B28No&jD-ciS^t@`27adh*TdzSj8i#+DaQ-8wcS`v9`1zkdf2M{% z6RN}>k=VWPG=$ttI5ko}r{uF)37xa8?fC4})N%jEk32&%6I5<(9sT``B6h>?`StYl zE?V_xob0GojnPk5IcIj2I#h2@Se2#g*Lv6to}g?hnA)q@8QPK3q9#g$oN75%y&p&l3-8rm8f zP9OSi|87tq%4)f3o#`-MYN_Pw>zl8Vm&41;TX}M{-}HoaUet4Cm@-{OAzgYlV7r%A zL^f)}#@?P5JG87)+m$!8+_$oOSkr=PuXLRJ(s;B{S9r9y?%zA$Z`z&6%e=6#U~OPo zke_ec-QS=2i$~kQ;COo|PxZ!=lijhZ%h-TAuk}M)PtS_nZugaKg@Td4VPuRmX>oBm zORE0&N6j5(>cyrkgs5M~#fh}HxAP-NYOfVPH@Cio{piQVun&eD}g!%5kzX zGCCsSD7&V{SNrkfkxe+Cs@C@QenRntxt`=(&hT7(o@JAYLGNwOW)^C4ZC)ZFp}QH^ z`JLhKXA^<%6B83EcW&RVm+;=0iVl;_C@Qb4JdBXb) zcN6o<%XcD{hw^4uqjX2?AK)=dO9%BV4dh6ZUAjbjjfN(rwUkF6PMQPjF$BN9K^yti zE20gvvh0<Ox(DFK0jQbH;$Ate7EtzGOcHH(^~ zQXR%e#Kgp&4h#$w?_((z`_j9|R(BtCc6Ju;CW;6O3KmpX`$z{j?T%C`TsNPrbevO& zW;l7Eqw}2#G0{zAyLt2Ezd6y3wed3P(s73~I1*ZnhK7iLsi8IzvpFpd&B~F!3J;|! z-VgP*xA9IF1YXD7^X|DIa}j&H?Pej3OwU_x_K*)FE13s}hm;ra@gr$$q+lb@eR+N< z+QQOugj9>2LtR~+|9NQW*S*9=__Z}?Ko?lC}?EGG0&bS~Nm3lYOuQqRDmAJv^EOFf7w7zKpZhTj$Oj;Hltc$sxj zwRJy(FbZYssM>Xff#EJY3(K#2$f{q#B`D7P15?#F5g;r77 z*e~D8x*zt0;O&>V(oZ}R?M_w2>>-lG&HeXBXo#2@#~mu0eBR%kUs#B|eDPv!PTmoF zT<6T_sMiC&q_D%o!>-!y98E5B>z+5R(!oK#vbnG&m9QAG?7XACj4$~VD!=>E>z=^E zFi@2uWWIpLy0IUsy}CE~?BL+Q{OZ-KjU<;YJ=)lK;_vU@4X41Us;qpnX)@_Xn69Ed zs!GeSzP@giu2R)KR9aqD<-EGI6x?Z%qJ#>>mpNkkaEn}a^pB*pdhwXCP-<@~0qf-9 z?rIw$DV@*Zq;r#@gx}5*+4YMLs*JyPC-F0idMtf=)!N#sezd=-dN=6w`1eKze|PDN zhzS2ZSmZ%c0spoh)zs8nc@_&@#e}BCjz1+IH7# zgm0M$WIM#s%WMrsvo^PBn(()Tk=f5g!fx{&{$HaR&lch8<*~4`)}_%8N|-Z#FzWugP7twY7883uL6EDvC-<0YYM82MOQ4eQPIR%}h$tR`gz$+NCf| zhSG6(=?35N2Z@EPy**Ojvy=V0RFFJ@i^Ol zBIS-fk5$=$i}7xR9Lw3~j&=bhwXyOz4%I}F+qWqW4-QVsKYiLtdj9-*(^RSDqyOv~ zD)dfbwlg{{t|rCDQ=}^8+Eg4xf;4w$!{m>T!{+UBzK#b93`>#>$;!B^zhwO;}KiaDS(r z7)zD&{2Ce)FcYigZcPjuiM;w>TieHgFn zQs8C1!pfS83eSDD4%4d1Md&5|h$P{Uw#v#%I^el916yMlD>&m-w2_WnGK zW0x8qDSxfV_6tB)L*Ux?lF1#v6Y6|TaTXR9Gi+w2v5U87hIG)A?c`h5Mgqx7m!l>B zDi#~hH^TQL&rq|p!l{L|#e(Q23RW(z6<1ls>}jVkMGr@H1=W(@^4$1{O~r&EoQrzC zrk6ypdz*z&y1Vz8Qjo2a(~L4|dU<_aY6zM+efq_}AA7C*p>OUv3ne>b54FlJ{==!B zu@Jv}<2hW>vsMeCX)+UuVB%-7&buok@<`H*-)iA(XjoXmmoHz6%IX%}YMfTK2evPAvWG`)K2ow+I z!0~uH)XFtta~nrlSy_Vz& zz0dLZaI8sKw{Y~HBR}-H3TTA9f8v#({fka~|L!xau`4E+tfW<_Rj|RGIr;JmJ^hJ~ zqGAUT;_^5uRT-65EinYZDNIRFCox@~NH?-?JTEU&-aKDECmdF886rv6{Hl*(K14pp z^ft|9^RjXDKt8z_(qC0orJ7${95!IXgR^xTVP&2dL!|gRc9Q~+_M~z(xfUY35WmQny*<`Jj!`LvE8g>3y@gD+(z9d!{FnC z|Ng_}&sb!98{bI6gd2?0tS~b(vudF9Q9xmj620ut$39g2t;T9Vj_3f^uVDh(awpya zz+_Lu{*1q%q@<+PC(q?};9%*J~(|nEOehmZqzU%s{b=A|;)7)7eiv;K9<~CTB)r_GY7HaADZXcIq zLEC?QGZFrM&?g?+)xl??$~K;zioJomJ(UV>jw%X^+6pn zc*o)^%}i{M`s>-^h=^_H_lM184Y}?2G_SDsBGv?@)O;x#L^H z!d~GzJRANDr~bbD1~qOAH9(pimsS1$J4#DMtjTbZmXZ6_-GH5&=)~OSFD`llu}X%v z{YM0yK`-Gob>r&QzlwlGVUvEG%r}Ud`}Y02&NPreOGn4`0$9^0GxaFWP?_Sj>AL+Q zDD#=PTQ@_fCMPGo``!r771Hu*tElwFcXTKw0F}HF(e@ds_sMWB(JPG9E8H{j_dgo_ z`0-=vm!X%z{~wQLvM5vOXmuSO(P&Ip^<4fv6CX}4E3Ejyv@ zto2;2XID9pv?!NJJ~AU6y6QizSsq8Y~`G{UgX z>x6}kZT{)ow{JTyK9|J}2y)xp`q^@D`SRsrKK;s%rf+xsd5rY5D;>s#*f}^B?P6k~ zH2XrE$^=mUfbhZvIUrR*JG*1X{8S(IoP~7~uPeyOO|_Led{Sh44UnU7-nUU-J4pmL zu2WOW_wT$v3BmnXITm7GPEN(T0U^)!^TTdD_?^n{RI`xS6bU!9Rs$8>M@9eh=TFwS zxHv{-GuEI;F+I#w(?Z?@Gfh&}E5zKjtk0mC1K!X@Id{WTg|&*1kgtg+?hWDH(JLC>go9 zxMUY#T}#oT{40CtwXrMW))N`U0q*49>DPImSyw;BUUAb%qJYvUTj!^1npuyAr| zZzgqGZ~?mH#YHj}`weP6^4}L0u5ZIXBD{b9zBcTFk3eq^Y8x9*w{Jd5bZAm{+W^j& z|7Wh9-&;KMw=ct;J9myIV7Bam{aqe&l6im>(x60``I0-3D-sst_E3GlQ3>gwtx zs2h2KzP}h$O3TU~+_LKV_t3>Ir z>ii}9bF#9sKIG(>SIOseN_nm6oQ4oz`<0WEbJkJHLx=z#T$`$KSENhbZ94~PP~nby z;DAxxrT4T7Dw0j9Qa_uBawVWSpm~>e#&JjsP&mT-`}fA9G-h1)C?7w5d;}{@q_{4_ zq(4KdUpYhaz%!{{0xI=4{<1(FYb+d>%E;*G=~s>2>l749(Jx>6af^!|dX4E&N%phC zcj2&ItZ(q@d9>7?ZooE_3T1bBqbG^?HVSO2Z1|R3= z=b33~_r4l>PkT}}4?&acKfis_Q7>N}VmmErJyr{=PV3*jo4=1Rc#m(k!b#QIACm${ zE92OH4-M$qn>TM3|NHO1W2AX(%zLGsF^F!b8IP=*{*{#uqlJWNg8NL?fpgF0DJ8p+ zVTTXbt7h+xLs5-Bm48Qn5thk%ette}r2L#KNJFkb#c8i!Yzro+*#HTwh}f~m)gao4 z1`iikTr{d~rMz!!Y;1OHY`^lfe6fVV95|i#(a}-=FHx1Cg|37kxFtjI7Sn#TNs4UL zNF$YvK3oPRIl0zUQ27QL7PfbHcO!r{?n42T_N;P>np1@0eh6rXl2o&ChCHIJ>ohSI zjU9v)7T{1ePC?Q#<xb6K%L5{Sj@y3P#m{y)Q&R*~xjdKjj`hxqewsaI{c=k(QEj@4W^98a6gI`Me=1 zd=o_ivwQdM4e2D_92psDv+mDm&|r@{xOwyD^^nles9m`e=oCMpHZm?OF6Py(3eOl) zg%Z;%iscOW*u1}c`@|At#(SU(_1oW0Aq%~aLf+QY94H0^9FJ7LglZ?~wf6loRMaP` zIRgQ}o$*g#H(|`p%rY1S&03YlN`b0M$SOAZP2A%S#pKfg%X6Q`jgeysr*oK=`ds>v z3;|G{LmJkw4#$)yg{4AdP!$?zDe>*?0R_ebMeHC>p_jLZho&DU@iRG`USg+(9UnKh zzhm`8J^aB@SlS<;@=#f)G&KeNgTHqam2>Ssi^4v`)Xq>CVl7K6sXVT27LRg5{nfsbYXjYUeOl<>3BeAd6a-&82tVF z_l+=j@qpfxJBe`LSHA{^kY6AmI1Gh{$K#8Ljf2C-qJo0S@3VUZ)8-#_%f4bjzAXij zBNc8+Ry;;iON#+y#sJGtp8ImpDNJE2Z^M2FfBN((Eiv;F&C4nY4{<|#U*Cf`zlPHo zmAuJsGc%{8?XI3spEqyczI_~pLAQMQVr1{+^u%l+`$3o_Zxs}99e)1e##=`G-eFn= zyVa5>mMx)|2jN1l!666n>wGflcd05Kuo0Gj@L(E{$#lku1L*0(G4Jc0Q1V`0l{TPw zp1peYs@_TdLEca@sOjkk2aB1E#FsA{+LVn?aC37vQFRq}LPgu{9mr7_fd$4*mAkL9 z*_FT@<|sVrgxJ{HiU~Q-)Jq~AeSH~m>FK?AGJwK77Snv-%SP5q%8^MLd1qK0U8g;t z$*$)pM4y&TJM9C=_5Uefo*5hKS`8SG>F(Vp4`yqg!rl1|ic>KyCTrMk_eE)GskwN1 zRPAXRC`iXK!c%yFwn(LcQF#8XK24JjYUB|S5&0wEF-ETtMdzC%;_H7X=DDJ|5t-Nk z>Pgh!zkd?}E?Lefiv8W*wjLQ9qn+|~0`2_tNM_R2|5X+ypHEv$t8qxXx&5bE+so@I z&>PxdFHgea^HXl6YcMM2=I8H6@$(y3gYZwAT|NDCHjsc7s6dK+4&hIx>*(#{pV zXv3-~4fHh47AYZ+H)nbzn!tFUVs)(eMl|5>yy9a1Of0IrrEeoB1v6Wx5gcMt}|(F z3`p;712#<;dEKid{9>5j4ie#?ENe zM=kD;S_RV%!mAF#`h@-4e(3y+Mc?!`vl2oAg4{GfZ2hsZv2!S_H(62-R4k)wbaeH& z$U98_AZQwy(m|)e>$_PdpZ~*O1<);gi<$XnieR)>L1AH0(P@RdndRG^4^-zOIlRl+ z+D6O(yk*AsT2K2|vRU6nsc=rEWl+z-0)eh5M#aEzYV+`6r@dF*Nyvy@p)H6|rc}8V z1>rleO;j_0%2kzF^-iEs2|IU=em}GjO2)8V#RsXSSc!cIc+6TZm9`fanC3%c<5^-@ zD&dGpg`Oiol;UaM#q>NveedFzu?Y!SUOqmf0!^+np14j573`Zk_M_L3PXPyiKafcu zZxwyM_~(9@rEbcbH~+r85j0l66i9U~GK$dYeuj#FH!Ga*01< zseXtSJ^9^}%pbVjE8>i7eUHLbErk_aJ6-2p445+&)ZK3f+l$gl41T*#^v`e7Gm z)WLo;HD0HndeR6;R~LLbuf>XShsIK%=x0-k$%kg3kj;pgeN_R4^MC#LaduNAOazY% zoFn&COn!Y!d%JZx$h(r=rHvuvVl4tQ@fc@>J|4r`?n;ocs1Jwg3r)NRYOd%0w6}5f zz~4(#bjKzX=CFiYVPK#q>c2-taL4N+t z+&=?%hL4#j%mIoU2 z6NiQq8%7=43EX{k*WjNEEXk61Ol>me(C^8U)0hLcjR@dN!c0s*e!@}Q1~rf%Sfqa& z#N>Rvydi49Ghf=w{&32^`0i9S1}bU}=qQ_HY?}8n`7u^j?DoQ`L1awNFn;0Wf2;Kh z8`qrhxDxCbf;otpuOJyzFV7s}I@$J3JV7q;D{Wj=R8?)FZ`MP+J+6uK#F7i8Vh&%S zvEt1FJ4l>}mx~tPXL2k9Hs!Y)!-*EktrnhGgV_L1?o#|FdK;$ zLe&cqLr zqVu0F`r@^_>XnTf42+IyfhOpA<;s;?pbH$WwME<*BYmDmE!6rc=Kp2^sHvOY#h+eA zII){9bo+zgj(HlECg6St___xwvETJ(8uaoJH8pidcQ>uDbHp_2dECzpF|f_fXz1ys zt}F#C7Zenb*;Py^-@SWR`jMjI8w3$f?KOJ*xS|G1+cyyA3GwljBcq~DbzyV80Dx=( z7JYxv?ud5X)UMb?&|3$KrmNR# z`$0t8;L4k)E1z_Dyz(``pqM*94L<-H}v` zC^g>#NQiH)(bK2@tOpFo34s7(VaJK`1z^KegdXDM5}XJbKSK%Y`y?<_ehP57)Edob$U)FnI&ArLUfR0iciAiY} z=xL84Ovd}cjhx|Zp|Bog%=5L1#Q#2*1X$;eIFX<;#~(T)TOzK5j!i0#61c-2*U+1vf&3 z8*Tq5`PGm&)d6@MgW@1fRRlo))j$|Gj3})3_8&>rbW17vi_LN9pRGe(uAnPs z11`>>18U6MR}OZ~KagVoB_>jGCZMhBs6gHJK&GRZMWb?nr5e{wZhTT$qP|E%@T?rv zAAXw1-2dhXC|yRZ%Km^LIGYZbRyovE^6+tPyd4ruE`*DK@KwnqB^9Uu#gY_i%8YU> zV_m!yKEl%-JlDGH;4P|PiGwdJG_(2WI z`2Z$A9zVDX-B0k)l8QYVb4bE$VX3D#@dz5s*ayuIgop#dkNc=;8{t$DFO(I*){k7} z)asrdCF!#9`a#_!h37|%Ox)ZB=3ufgLjI-kr=3cdg-{hmPHyh+RsiC&>#C{JF9ZqN zUA1q}UBCETE=!FKm&zr;Ib%_(HaIyc$y*JJp+^LUN_yvrEA-M+fjRSIckqyVhA$1+ zLL_706;ue&4n`v8dm%9=5XT6UM5RiA8OjkNdSAW?krA8{f((+gBk13HN=iyE?fqO_ z1i(kXLPs~{C{{3H2i}=aclrY@5Gmp!xEzZA{>?iBQ0~U4HSYKaa z>Af^v`%g%A`QM>Yj^vnkdv5w>_N{xMnKCR{euRmi-#Jc`D-y>AKpI*6paa5{ubHwo z^*k*$_Rk~P4s*mIelXAP{S!q~-90==HiWh))iQt91wHZ{Q{4bLB-OrFhbQ#bH*0Uu zPn^<$*yWu#_D?gI3uDV0n-c1_$gw+FSwe-f_wPH~Iyms0OEB*=x$+*ey>101@Cvv{ zV@>^6ZV!GOTP@(Bd}OPkF(k;ynE4PaiX16kb0?>b*z+a|5bK)kUBKn$&;=i*3Om{n zZp{`QK;t+$znYxbXfX@JxXjF;;UTvZ{@8Qt9x#4TvViHAP2I$XLm_+ug1;chN!@aq zswOTv0N;lXgoZOKCdU&dB~*=p6Fuabav~!mJ$$_G%oA_9f z?P`9TncyEuXMxmSdXT_5LIglNdJ05u?&`H`nSb{8$v8porM@Tzb@nbG^}LW6Ph=Eu z%Mq0LvtEH7Qnc-Lgk08)6Ps^U=6jQwjVN8Jjb`!m!`WsJ)a&T>DEidbZ{GOi-C76j zHC10vk0Bqf82yzif(!_#4<)s=hq}Ob_QsjD{WM8JO?wam&HU7IzuGU*b6>!d=dF8P zm{G9^b>vs!jK#|cNj#=blPiH-cAlrZ%Th=;I66AoLX?9Tl$NuMj0_`Lu#AI~Lt@|x zYd_r!th9%X zj#ga)aC}w^Y@VNRLM8fTmR3PDE|u7~mtof$jEtSCCdFbEJv^UBn^HkJ=mhn`;v~P@ z=C&7HmnV$R*T_J^o5g*T5F0DlQnC<06D;77;cAPxyfJ-KPb>KC)Yt^fHb?zR2i=jG z88As2pNxQ{vWtAO=zRU`+%s2UyNc~g6Web4T>j^o==NmJAb?#ZSK42Nh&e#APabi7`t4xo)#pFNvWl*pZ`Wje; z`F$1(5pa{e^(Fn#n`F{dZHPEy$GP@P0I)ovdm#slvE^ZI&9u}NLm0#5SV|_>+1r<; z@UZ0r4#LKR%O2NZMfq<+pqH6ipNME`80-f{r*ab9|BuI+zR#MZJite`?o#tLuevrU z!yQn!YP}}~l>R4E3h=#Alk4&?-;AMUj}&l&)}?A9n$+K6vA*i)7O|*^3rM1+Ju!0% z2;BNk0OtNrOB)bM4BNKN^53rw|xpX1Rm!hC^86n)9*h@GbQdg{D`5>R5tQ|B#Y<1s< zi57uPD?!X$h>*I_c{iH~r19|aRpw!_C?Lf=8H?5uxR$5S$^Y^MTcfb*Au$gS`Kz)o zTEbgMLrqtFGK^J;l8^2a`Ac%PDL#6%eLY-mANLI*6aK7(8edjC14~FizE;8h=U$({ zXXhE+bMc%Jpm{E|Eu-lqT5v=kJZKA}iTs@p=HOGYI(jCEjTxvA`Qil+J&2~4!58oM z!%H`fock#ntxAL<+)@Jlrzp=75;&WP&fM$aU)851V~w;;x$%crWf^cxaJH^vck1sq zUO>EYW5iC2&XN?>BMX=-)n%YEPC~_n#(kSgsJfPDwc=7H@cyO3ZBU1Sz)Y!_xM$ zva;l7gk+~_z|b+pJe*+fWzu5X3BG6b`^e?>hQb98TWMc2(H^44qO*9Mj@JZX&YQ(wZ2R6O_jO*90pCAL~ zzSwtC@ZrNsGUM65_OXzQeVv`*P`iUTK==zEO43wN2s^FYY}BvzSRQ1K2(1NsX7;M= zDUr-2lZW73RXJjFbLBPA#yA2m$xE@|k4Yi7@7(dE30_}1-a4*?UwEo^=3??kade28 zzQyjK#HGfI5tmowX4&x>1dxne2R+pmDmSUjE7m6J^p{*WL#8^nk7Z>$cq;Uyh#A0$ zkctNS(S(ZYETWDB{O$xf*ks_B2OV&Eew=4cO{jiP0(l}^U0JzUY*6#}3%JO8V8OSh zfxA~heamWxy0hC+fzE4qPp(};qt0!R1lT zgQ<|?M2z2!VCn2K>xsD+qjj+u@wml|=WkN+T_chZ0 zKhrngKw7Z4Ei8QM1mQwsaMfFpVA(8}M|@S+Tg*x%Uv1`$tj&q?O^*lzlFz&=F`_Muvtb7W(@7 zWw(04z#a{~O#3b)CZG27f{Yw0u~5!P4@Y4i^K|op z61NF~rN@xS(kEiR!_$pH65=sc?fx6&&|+2r1*#zeR3!8qsu=+$6Xmwi{Lox7VgKlM zm##ftd@7XOqrgMi50XYZU_TuIhw6R)Jl!wr3YxgVAp=vIqc{cmk;?XKa!S#mxOo}# z0!JX7-0en-Ks4eLOMaC=rhEH%gcyQ(=tRpV){r%vEz)2G>S+4)3%m{UaF-Yvsu(gaE$0SI^n=^Ywj@4j$1@FgN89 z$df+aC|^!A)8R?{DmG5lRbT)?+=I019+B_criHru5Lg@923e>oZw_>@ zk$Rr)|18JvHQ7wNa3Hd%-gWWq3mz$|5tO{Ovrbi+_ww>BTp`+UuWtJEgZ(MkautXg z9uu^QZ>Evdq04-StEOQnLUjIR8BykW@v`zuNfa0HZ-yvYQT-MQCPLfJnJlCL85(ZJDkegc;eYno#KzI_q$gc? z`mdJ?Dt+0_H@(}>o0E@ExIps*FQSF_0<_{6=Q^sUq*%scU6FP*{nqo3AH0_ zdxTJx6v{_&k&cdztr8ucVhuEeOdp4l(qF_AXp5CHX1gji`t6(A;^rn}wf$I8=*G&s zcqi77j~4`Jn`a4F8L=K{?Xc1K!Od^BMmRFJgJq)Tj&%}w@xHBp4<-Lw(`Ht4so6Vz z&<44(MEBAELR{zY3QfT9vZ=RhU=lefaR9wz3*%n71H}6$Yu)br{lcewUkD zTk&bK;Jo+0pt#uPRsFp&ey{@UMF6f+6`reFRgD+95>`|YSgpU(AU=n!fgdkb=rvUC z4@#L=P3jvI2L=Wz?8aAdM+NgD;)LtKQIzo#asaf)Mg?&r&1NO_3ol9tWnXM3YXMB* z=i%{4H{R4jA;G3^B1kQ_<+j@Q>Fp^>mgtP9WQj^N(EK=}L_h4&`4Cg(&mOXvzgnuMKZMwds}aO;tAMQCxGbNz z!4z^q1O2(w;TD99Z+LfpsVFahCGq6Adh)1>h&ht9O>Hl|uD>=BgJ!(o(l=0Wl1x6> zvwhq|%v^>XN09&J3(g~E4)e)SWeqvLL|QiSIfAEK<(KcNCsKyIbEoreH?efT$<5vE z2X>G-qA6p|FJL?PP8I6m-%Z$g8a&--)pYTMCy=DV!sSVTjho3R>SB^3$0CUPzQ3!B zYt=cmAxe;kGJ-hWmB&EjLM5)~Bcjet1&K4{+Y9>^&1Ib1-kH-;w#V5d7qSid!2x@-qbWA%T_XHv~7QxH`pIuH}LE~`E~^sDH#s=M&R3u*G^ zS@BB)R`3yomFn-_edh&Kd!t8fFQjgjDlENeOR_0|>9QE*r?j70G);#q1^1HGRlw>p z2GPCd@Fon0okG_R*aq}bx4$`iRtJcV5LDaBm2X-1i}?+zx0b*v3;Ic8BF}cU0ZKI;@8_I1cyh>{gyasOcG4LEc{4 z%-G?Y-G#}|7prWCa=qZBII*6{>BYALS7z3H(aX+aQFTObDVqJ4$|)vrB%}MDhT#f5zZC?Cj=2uH3HP-mCo%8&_ie* zp``HMMp=%3-xz&@!C>UTQ2;?bD0*{@0%=wus;Pj$$Gb;H`Eo2Z7nss4$4g-OFvcYR zc!|cMbK<#(nXNoFqWuVGn{Ifuzx1JM5%B+3)9fFGIpmh@C`62MkfI~c| z7rJ|Tb{;)^SmPv9jLDaOyAAx9GSPCD_HF%iHYQ&sF(HAs32glmKD>Y`z-EwFm42wK zJiXMJ0cnX(6zRr$M0L|Mh2uH~1`bea1MtRFXK3{1)^mALU;a}=%%E%SU}JH>V$@DKdvKax#}rf*sh%B!*$QP?W+`1uyF9a~H+ zSEC?G4uo%gwzj9-_&($ppF`y3-X_UXe`3rSjwl&pAzD>6Xma0v6CViwhxx{_WbelW9YVaLe%%B<<-M*|y|a5A2^kYYU5dG%E0O?A<{yLVZA@ zp_36tq!kXqz5MWZKKZ{5$n%>v)Ym5x5E7~auw#zL%-B_oirl$FZ`2szD~LFNdlFz~ z_Ui_)R&#@H(&xGfDJivAn(?CUE1)1QJ58DfCuS_ONNR~|;;61Za0&TjGm!0qw8alz zKre>^p*-%n=7!D7E4HAr`d~k-b7N14#Qo*sfmX&MSqV?Ug&0ND$<1IUg^Z)E2H&-L zd~jQ18w{jkQ&S~=Ch9vKOaK#_x^n_J;4B>^^S}(7oY_S|a1Oj6HKYIM#8!%2whM*z z3TP6lB~0h8ZRC644(PcHssZz|6`?F74BmiM!w-S9V%>oSUj{4|YdkzUTC~&3%-;UJ z**3?RIpiZJ56>D5^;&jO2qL1vDIgyObwG0L()>|B(!u)`=!B zO~*_iKk}khN8$&oT-UEm!6vch^Z$W>-75jQVAE%EfSwr~94cwmqhhfbpbv*IBbdLD zR^bx%B$eb`w5AHJNgyvBNtQ<`H&;yJ|NiBV{dPq*BTdM%%TOc^gUEouJPyGw|Jqvx z@~@~$)Yz`}uH`!fog+HXW^N)c5jk~q6Kty!QDCJ8WAz{xRnbd7nW_XG@z42eUx?|O zX9x>1^K-2N&+xo>Su93*T?K{AXKzn+s3K`BA;*#AZp|gXT?u9xUyJ|Hxo|;TM3@rs z;e%N$o$N|T7w@kFi4K%UJ%IeChNa~KjVcOXpySpo=;T%6m7+Zgd6!pOFTB0boCH$H zP}ZBQEjB}cQb?0Y0c0_Yj#y+tGtsGXN*{x1M#&Akj<}bC*VB*Q^MEGNa$4j*MRLAP>LI~@3nGGPrgpD+460pN zx=TwW`xRgwM4*DM-Eaaz%MVGOc_)Bb@_fKXX{ypue{7xWeyvu%cLpCITJC_@yUDeh@Ui2&zj1A&4~ zk0)^i;t42Qd;3XU$Zc(c)>2nq+!YECcUBEds8{mlC9+wHyMO)=uh+!~%k1y0UI6{$ zC?gGm495PovjYRB4o*&YhX)5s3&1`y#^m3=Ehgrh4k|I8jJ`fCRP;nEOG{n<59V*< z;GIb8_l~5b#OTw+Nyg`6i`& zjXafwudS^XJ9)1lBM9l{A*2`-^Km+)NHvBQ3-@Y^1L(3QW zj2r6(VTfiNvfc$nL0}x8H{w9+>V<37HA~vj%vZw?rQTxW-C#!bZKuTtm?DznOPV~? z590vUxea+KeYnJ$35o9!2=Ok%k?~nkebv*@aEArRh~Y|*j_tJga`;N-jN+N4Zj~|$ zf!WF8;twDEtVTcTX6~te%$oa5$T*CrbIGJouTbToqM}cj>6`|xoKzkb-QAk)GYy)sJbsevUmX`z*B#G7KK^~Cwi{90e$6~I-OiL~b z#F<7YbUYCBa|O%&`F;LE*b6YmNJp18zrH@5m;8BK62^mHYs34!MPq3+Up1Tp#KnbC zxO^;j;r?@3*DBd8qLn%d7r2w&x`~%5!sUb!m}KKP;$q!uX?JYf`t#=@MT9@ub4TG+ z-W&Wz0mT5osI_k#g47?~*4p|J*j0J?_uDkR7gT+&dOycZ2tn=ZhfpRApvri6@fg*M zj>QQP9SgYV3!Z< z_u3GZ^xg?mSaRpwS!PS-fe#FOb#%nQ_LDa-xX@yD#oc<+G!W)S^f@><_#be+{G`Tt z!8fDn67%t8HkZDsPcS5G3@P9uvGl%4C?ri7id|T21#EtgNF+FabB8LjiK|h8hvp*6 z07AJf&lx~>4*m=F_k1c4c%&CUh4N{AC& zLYmL?gsA-m+XC9&a;``_zk?aU44uN!;-kaEoqlfk1RE3GJw037nF2Rd&TdyNm6pR+1c4A zAjLvxR6N%2nq~Cbs072siqji6CduV7#0|sga#Rqcp@}!v`V$vW^ zrCVxdws?Q|%RlSsHEAtv?IXOW2sFY2&Em0W#?h}9LRiWhH)cUC#r89FcXj!(o_a** zLK$gU_nPhL?R8vRUvG%{Sp9wcMumXlYdM%q*@x0-1zBM#S*qP}nSzlSDC5o##MxsN z`8>S5xLD~WNTDk2!;}jn~?h9oNjJ}eq#`y|{Bvk~c*ogj< zv9+}gff34OJjlSDl~1nsf-mu2lgl`q<4HXULCg20r6pEq4f66P=D6#uLB)?z}?ocZ6-J~~6A^*{}@AC2U2SGUWyOKIZh9s#3Q_&arETs@NMR?)8 zdr#%bL-4`#fO;FZ`AL|k+X!oW2m^6xifk-Zm6a+MqogmhkN;!R0sfeA;o0XnMI4F$ zv!{>rfXQ(x&*1`K8LPQ__ipWrT};3=k!EIfQgU)~ocYcii??}h3D9sk_4JcfTVfBe zDYr6j`)<{nmI=$_V_F}6t&->A=aHGC}|V literal 0 HcmV?d00001 diff --git a/umap/static/umap/img/24-white.svg b/umap/static/umap/img/24-white.svg new file mode 100644 index 00000000..96865a43 --- /dev/null +++ b/umap/static/umap/img/24-white.svg @@ -0,0 +1,463 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/umap/static/umap/img/24.png b/umap/static/umap/img/24.png new file mode 100644 index 0000000000000000000000000000000000000000..bfac46bef523ceec9ba104e1e8e99fcc11784a33 GIT binary patch literal 14755 zcmb7rc{Eh<-~SzZ_Mwp7M3O!GE=|^up^%*nLS!e)lrSnpL&jPdO7=Col7vB0)+{AM z)-s{7J|EBTpWh$f=bY!c=S+_29(U$*-=FvUwcW(4W(F*byo?Y8u^1U5QQ+r?;}-)R z_%|{8$N~JI3Dh&PVgN@Z!%Zys{e-`vZ6G+m>i7kVa<|G4@dvD)Ejsl#Do1U~w@O2`KHX|7*Dp6{yHS7LnuRFEE__4tM{XFh-1lqg zHMcLB4-|W4TF6n+F+`u5w{g>Pw!-QgV~@C3i92DKaME2Jq0X-VaJbPtXK929X46_( zTdRb8E;34F)BdN+(kS2ds|x8q>Dd!uc~@mu+Y-tzmqh1Jy-ipt8#Z*-OzVtM)a zyowHT@4uZpfefNo)|PC<7l&{9Po89;IV;YQD8y-@g%Nqfph)OBr>>=eL5~6y zCLH{8T3+wPRm$$xid`IgYuCR1d-v|$BWRyP*M-YA&)PV* z*8lrEkHB)1pFR$(sz<+B5tAwS4HmlCgoWDnc4v~w1NIHE4jfA7G^@sE5yCfR-Xs|+ z|8p1#Vq~ZyZ7Inhs>;+G(9oEfuV2%780|j4Sc$;m zHy}CX0be@*+Sv^qjoI?!#d)k>$VTl6bt3=L6TTQD)VVrCylNs(%xN#~bwkEbE8b9) z^_I8y-aFsD($}vS*@xYr{n&G)N&x`@1CjoUYmWSdFJ8DjcDH59q^xUgkI%1nKjNNc znX_38q3Zlz?4_NN(hSob+qwj^e@|?Aesm&U5Hg1k)5g2Brpew#-8ocNf(D@~b1qv) z;Q~&UuCOys%DUwDo(OG`;E_pKlI9KG?MU(owh#U@4Q&-)xHoi4G9yNspOtaZ8UIo z$`pGY_L$n;f9re-lg}|M2sOkXeBe{U6!0`q>+}*$5|xH{^Yr93rod$#o2>*O;9SIq7hfX(m=3fo?t zs7*&PeQFG3hdZ!2JKbDDHIaDCxJAB7ppu&0z*V*4UG_he@9y5mZ@7|jTDApN4cpb)^(4@Dj9}-MWO*fj{IU)98+tX=86Lnfh%BE_LB9-H|F*!MTdTniO z=&yB^WG(8&)tBFD%4q*JTZ&Td;}eS5WFM$12GgCNl11#cPc`74JsT1&FoBhYRFBs~ zB+9{|?d?-MjB&>Jrj80L{>~}0>8R@3ij|fYcS}(F@J?KG+PBo@lSW)pHosfhU6nEG z(VOU1W!6dgh$M;6sblh&!3L6L6`pEdUte#WZXgsD6%h&wsNCJ%N9_HdfNP}Va97G- zz6^^YX3BqmJ6W<4kz276SU9|NW@(RQstA|moJBH=?ug-6a2l}=Cq`D{Hh((Hh1q~@ z?~H!(#89+!uSu)2uy9`V@327MPky5P(^rQV)jk*oGD72lLt3-?M}CijTGL9rrd*+C zxQvW;dkYJ=tfXYNIz(^Oz}|B0`t@i>N5?}B__QGskM`QVY}~}DV370chi^)$&+qom@Ycib8JUDDU!M8Hx z;~Jq~UVk||r9YmPem`FAmQU-ihM_{Y zM}Q@uXZxUx*flFwB<^1URWjCWj{HK>r<`7{FboVAQJB4EX{k_NT#Rle*Y`>t_aFIi zbBV8)kR7z2?q&}x%}^o~gnM{inWernX%Y=V-?T5OtNYvA*Vk9=){{If-F-1l+R%x$ zCh-!u)v|~JJ{V4p{MGJu(}LMkadSso6za3OA^8I9OrocK^9nI%;C!f*$0OzPyAE0X zwb&(hs8SR(&X%IHRZ=T2zU&br71|GT?6kDB4kn+~y7|zVrIKU8B5nTQVO`|n=9Vol zE90+U$gndrT@)4*6B~iq)6SLF)YRmDR(roRTv%e3rTD7k`SUqbbUR~gj>Q+nwOL4e zO_oJLNR*J15n*bqCfF%|`r!uM?`7vz>MEZnls&ib;)+1C7<-QmOYz;js2deHb-DbN zlM`2MZ2swK=5760scC3vNFlrQ6d65bJ^VXj&gMZPL-tlzulnn|yDyYGMN=03=H=xT z!g5&W(l$3YE&KZWkLGULF*`FsuOY?c(+Z?@i$Z+?&{3eruqvuf0_WK)|3;jBvUOq( z7ooE-T{#}jH0)>J-%`-;2Nf&N6v&T=`_vFO%y4V~26vd6o{qZ5H?M>qTzsVDHlbF} zGwk`7dud8So8JGozXmO&dH8R>AA9a~LN39TNlcefwdAj#5FQed%A&@-?&=$_uE z;+0b8&V`-%D)J$TuQ3$tW+Nk`UOq_X?HD~S*1c-w%8}WiW7FGraZJ|KJgchb1**d| zwRJ2D$^`+Qs(}F>k_BP`@H)4`r0%n$av4h9NDN%`S~>eW~u5*QV6O~8LGYO5N$0% zNO`bs=@;angTd$bJ-H&rky!2P>)TXu_vic8a5A{k!{mDh#rX_(Nx#-@q?G*@`qD2h zUNqmHvWDIeT3h#JL4g}|&BST&Zm-{4Nn9dvnrq5WKOVrOqS|Sl4Y(iHxK`VQH%rXi zLpeA^DZq1opza894u9F+-mbhLM(mRZXo?NHB;e!Y!UZ2Tot~a1Cy+HS#TZJMICs3- z%XSVMQ5OeCm-a{5r>aq6)wXy7lRo$ za1pPHG?Z}a8Z&=R2x#=m>fkwlH|?8$7fW}cev&%8v#HANVLf!X^iBKp_UPXs$i6LP zZBk=UlT6&AG)Q!-X>;k(#IZY_`%Wlca*3H2DA@19^ZrxDQ?TV*$7&CVvQSX9g7^BQw z=zh-ESj?1(iuoebFn4psMyc1NIC*i%DYcc0nNA2%&}Er+Fr_%a;xF2CJN;eO9L&-}^OJU;AcH>2ju?9y)b;3NQTnM`&92xTAu~HxhrW*b< z=yFd9EZ7KzmOmX$Y{WosA^;?Ai4jh<*6jJc^lW!`*8ztr>C}F9sDqAHEMWYWNW3}s~ULPci=lL%L6(;;&4g=o!eNFwSsDtaq5*JL#g)b_m z&S(wd4=+8<$5Yk}MO|4-OeYWoDGTE$HeI+v%;(9;<%ffbuOAxY{d0b7K#{0E>gkMa z-d~0i=5Ycr0qCl&ZFp>UL@;$6Hbk^w9v`la5#kuGfb{F!3?+78{xA%$2-2c&D@Kl7 z&M9uz8YmYt)!KVHLGOiYQJtZLS+#%2gHSYa+!@*HM#sWPIX86zWCant- zT2DY*0S`r|*i*ePb}4iJ`18-b*efsLqCRyfA7awhIQ$e`0Orh>KeW?~`}_n&cj?7d znYZ+t#&SIST0SQht_-cu5ciQ_r%qzm@E@mSHQoDg#!#p^{(}1j1r=AzlB>v|`z|~? zi?0t;KjI`T2jO~;voE+CpTeAm+Eu{G^_C@O2XkwUvxCMl>Owx?9y5kmy+4OZ!Bb|y zn6LybDH0kq6y@MPrbLB}Q@2}oW}UF;=u zI-u(UJ2PDg$FMz=(6#>V+pnFysnK$~#(eey8L?kai@idA_Ok-a=T4eV0~PQOfDyl2 zyd|NV%&0E`iJn9D!QT=l^41bm?06VW3V8O;VTjg*PsjMU$Cal@c#7PHR`V-aHTzVs<~;Tyy?m3 z?<;VIpi%odQDGMj&&`za6=u&=v^jMqe<)NEbA|0d6_Q5vRq#JVn~qf6x^-*U`FX>Z zohn(k_@aT4#D+8J2hk{jmGDIw`Bxs^#x@rPh4Tr?lNXWMt>!zhPk0$$Ii4IE;d=LE zYb&dpkNxu=N+$m|0TjZN)6qcOo>>h}mX;&Aw{f%C@$vD#QvJJ$1pZ-o0cJ=&%|{knARstGxJ!1wf-~u?SJ;NPG{gYH?#T z&)1I1R`MQ=br|aB+v_R)&C6{%2A5zE|o6Pb~T){lRW-Xc38-XWB6^g z&8jdW;;KZjFnr)9x~ry)8Y13A$70bWqaR_r&FpmWd^}VmwPJ?2^%#k`bUUTk zYX|o6n!-=z@medj)U7$Yv8^t=TJE);B#4RYX33a<-SRI0DQ8>DxHo35n1UGxmYghH}4b&f~y*tm`_~3e3|=$YqbNu zsUiQSETD^BUEhBn?HVcId>ZDN9LB`u$ft~7#mYT4Ge(YGAj`V+SG)hXwb(?&m$jh2 z`-iommaVJYLlScRRlki)PYZ|^FhPIw3LODSKqBsRG6X#Ix!$(tI!-9SQ_$%4;5Vlt zSh{Rjg|nsQkIY0l8d>V{$^;7A+oL5-M{dZ!PsrXaeEnL|h37-M_h=bj_`x{6F15l2 zi*uS+)?#CQeNtWdG`0GCCozFO_HD~_gScIgLnU?9r8{^2D0R7CIv?F}r0$cWXv751 zRnI(%xy}|2c6Sa*vm5(1)oL*N$$@h!Y6fA!TEfkt0}EELCX za7+=uSG`dA?*FEwqGFv!1j+rm%DFth^HDdN1Sh(q-<;6>+W9C-vR2%T|lM9VwHYOL2!J$ zi_|mJ46Ad@_}$*?>MOcVUAE**NkSye!Rx1_*z&}eRGkAv`)=YThnVaC4h|o=RgX)d z^VaPjat;px9f2+?vviiLEA^fhEnnz`+y0E5f={xG!w;R4{wa47V*&&>Q5~}#Ula#Y zb^{op-+Kr0h+PSIT;kG2#4d$BiwS-BN$#2Fwr)gCCM(?n=iG zmo>zUjg4)T;BL8-$n8nu8+0b1jU9ro+x6n$>uc*!wfO>gB5tz;s_-DGBzht+i&sW8 zUEZuMgG!5ePwc@LQPnd8;$%=^;ycN|}r(x|RFtNIL3OeQ^su5xmJ?B%g7b#(M&d?n}$ z&sa;Ox3;$KN)mvu)P`?j?(9MS<;BEY2t0*xaHdcBhrv#Q?YqvH(Dgd7T)Ys-Z6eaV zNse^79;BVbrLm?~3j&TFraG;r5qU%VaH6@wS|O0{+nvXiSWg4-9}bQTbg_F>Z)BKq z$sTd+9!e@IY<9%5BFj#AmIvv>cYjv#TYYO#bcWmLf*!UoD?2-oaSJD3VFff3#!fZl zUrCYoHi*7!VqO9YjTgv41gr4m@LDl_q!|M`g#kh9oBTFdQo zsi3px2#7%@b?*!6@toiH&vePm<}~LTsea3oO%su> z8Y7BBSR|qx=#%bQB)fQ*I?(+`I1}H8KqS~XXOa$UePB`GL(xlX{3~OXel%CpQAd%B zfvRG*RGrt5ieGEWe6dR&{y|pGN31&lTbDTzCmt+G(R`ZcIq8OW0$Q;$RaeI<>zoTZ z89t1HOt4F0=tFyn`Wp;@DxKoiJIQIGrtpk9^F2`^lVX)W)Tp)j(v^>yZYTH#l^ofq zR}R@+@l1jcgqXaCpNBF|a&tE(bbY@KmC(k%jbR`5B}Q5TQjzvz>H5~3y=5!Ucuw8>4>u7L$%#MuQq9fj3x5ve$%bm_9g-?Llm-hxAgl! z|Mv8_59hHu814a?7-U(pTPQBL!7*A8(VdhH(_F>A&;fvvwo`$~5BvR`lWn^MipJtP z;!x-7H5+|exwd^Kl8j28pakC%0S}>uqD_!V$eYN*VZeDkAk5QkG(>CsYUNwQYn2Jr z%V{q>)grZLU7)mE^<`d@af4g=uJcE$PaT2e?*HN4PO-hZ`c#C1y1u4hhd}2e@Hv?v z`r-&b<)!9mUJM%ygS~P8?ei7m3eXK)#-|By-$CoA^xl*jyja;yf%X|XxsgHDfota= zws)-C-?BGgHa1R99YWA?C!Bk%mNvF|QN}D)bawD9aj!ViUM=Qu|CCon$C&wHsHOJ$ zr%#{c&SppK1wX!et|&btqas&3YWE^2m-}8>oL~=fDJd&I{24Vq&$7I-SWr-4cV*;c zu@@Lj1#jN`E5hwnu&4B_;85If3k-hap0rMe@9PHE21^HX zpQW9hMl#;--hqk@_1qFbVJG(@+fO9V81U<+qLwSb_2as}eWMmbP5{_ksCCa`}glp<0`D5k;BAr*{yoHAS0LYlymRjD@DRT6n2wwWOce9pKA`S(8vY_uh)Ne2 zHdMMXlOt@<8+J(1G@Ee_f78)J>!Z>)|A(R!o+q3Zk_wVOk%{yf(stVq*$a#$(zDhh zB^Cyef32a{ITIrz)xTu0WgZ3{@Z^igUq4D87LA6L3Kx+v1v^_O3lfn(4m2}Q5Uj3G z8=z;Nm`QZ^w(7mn@FEpkir$%0WA6HAWlRZ$=u7Npu1VB;XZ=jWy9-^eMlJhIjAl3f z>V5G5s~s5BKHHo5#*e3SHXX&1Rh-^@Gs{7ad;tZS0I>irz8o*(3=O?!yo#1D38Wp5PmuK?VRYdK4d`F-6uf{9GMZi z(sXbNgj3bwmJ2)q$pymTr!>Zx(ox;Lje**C{x*xP#`GCLA=bugG7mDBrAE^=oC={b zGs+FRxoeO~L`1~Qc_1df@|tw0+9On)(7Ql>gjD3zWxGahgushPzkK&mtlcF7+~(C|t=%~)dSA`6)kTQl%Z^i@cS zU>%>~y|2cvz7kvYN9qDZkZKAkv~sEVQ0m`Pz}XXUsWj~JZHZ&2Q^>!BGyw9(qp8Ws z_B50r^_)E9PKjFDh*6V6dYieP9mD0Vg>1cKVbiH%5>!L#GDwxN?bwb9Z`i!m8-MDFx-ee_4TdF z!4JJ2u*W-;$PQ{~L@_&Yi2;)Qd^0=+i#{H0P?=N5VE|;uKCIC7BCdyMO{F?S;pGbV z?2=Q5X=-B1PN20F#;(|^(ZNqGH*4R+*4*GXx>Q}U!ihswY)@NyA_}_kPu=6Of`IZ= zJSt)k8NA=7ediVsSi~TJKezV|rl5ZkaEC!+5>zz1F)QE1WIML?6nuQ>4*D=@D#Sgu z*z4E;t{*Ywee%4OkA2w7@CflMWd#V*D@~*6zSheS`cP`@o#j7Tg(HNMgCwGqQ_mjg z(&~_oNI_dBW$)wQpSxI32?g2vZ4%`f*kY=sfRPVCw&Mm8xlgC+r(es4E%Ga;Gb@yg= zgP28-Cv~+`!YYV4q8?x;LJ&tH4c7CNf;j!GWTK}QJRNpUydVJLyc-d*A6`{x4pw;W zt+W4$V*`;6p8J8w7xc<<>^gSoH2QF$v5l~l1RP_(gWatu&Q#X9YOj%EhtK2VFG)l^ znbUN{kxCAakJ09t?$j3OQXF^&iwu2E%O-E)TzTp5`s*Z^+*tssZ;wlx&j7$93mbPD z+Y(Z<8{DD03fl{{VV$EDc_9B8xoE&Rcx5^jfSryPV3;Wygz%M@m**Qv@Ih7vh}3(` zUsQf4sghYBR39(I-L=la@^j}QOb)UK4!$!Nql(7yr*X(1vYr|{0F$vJzU%uD41?SB z=&dhRl#*w5d%t{t@tw*C`81l?w?@c1didHP(Gpf9^E>_R`a55nIX99uOsZOHWdVo) z>n;l4{%17*pZ>=!@NGSr2P|S*v6qG@N1_d|G9Cd2*Hd0YuLsbW-`}O-DOjd1GBHf^ z&6>QwiDmoko<2S&dq;w@H7eBNIotLdA!plB z<*qIEQNV3p;?(&tG*y=?r-axoY)0x<;`P$&WsA-89p$3;|DA#MGx4vhEqKIwBM{3p zzsH{etLoE_?nmST9T|fC(u0YZ(V8-ku?mO12rvo}>Znx~^e*@y4V(oD=>RMQt`=UF3Dk|BR~AJe*`m-8Ix=wz&* zk}271+yhU3IHG62M#J^7Xr?(HYo@|HpBFjxHG6q^`BIMDk&eHN7}UzNSEl0J&l@8& z7#@k(<;Da~PEBP`H*}|Zs46XdW?UpwkN=%eeTp~W9PX`3fmGzlIs$tQ^q-*TrU ze(@SQOvr%*#(nqx3?*uYpP5^XBZ{)b1k<(?ae9-$Rj)W(aPw0gh)&Q!smE>#YD6&d z_gg#9EH0YgeB;euA%9=s0#Jb9@VvCnsVmWT3Kx-tO?D=IQMLB|I0|V}chYL-S9aHw z&F6e7hJH5>Ew%sxK&10OrQpPqh^z?i{}4n&bq}!^r^(kj3XM{S0SQDh*r5aLp7gU* zcae%ya*sntzU}dWbS&y6Yi;1gbRf- zr&czziThRTKk|)V=^-XrI#Z$ZmYnkBKfrl#{K;MV>J^1)^&H6pp&mRNwbQ0y8Pj@9 z?QhgA(IA@Pn0)-k#_Fmjoy-9XA206*n~W_n)D0W7b{tmb{&c`aiQpIP1*!O>p+)k+ zw8h7@>4u=ZZL!*+_R?s*M7{-y{yjzNtv5{_!QJm zC09~dc*ghrW>!{Kc_sw~O>qp*0|~ehngj2&!Rp>d|FQoxJbZ^>*I*>E_%_<*aiGjJ zn?~9}3anKRxq?@dfVKG{QdOrG$!)PoZ0M5>g}aF_FG^f9Meb!6H}Tnjpg1+EZ4+Em zrQO<2ZZn0mDs-42W9a=&5UKxShZcePD-HpWNg2Bm>@M&{?IfdDR`Ec>{7GVKRY{45 z!HA+?$h#|N>Fp);lX$n9TzLF4i^I#<3+R#^dEvQd37X1N>a}kZcbZ`cbrB$dXRZ5! z?xsGX2srJRm(fP_gG@kN*9j^jN6*3m5G^D=vz z(rEVlaRcI(Bfo$uFw++fro&fedWZ@*)R@N3vayK?Cv+c5u9flzX&JHTj*iFJ=yybG z^}ZU*m6esyUoCy#z^+&z?pyl=J(Pvz7$Zj@qW@39v^HFVqA6dA*W_Tbr6%K)1T=^7 zS?-^dcdZ_`hxSy3@*AWiGbdGm6%dWcN;MP>39RFWpn-t_CYPOqr(+dQQOyXsn2#a} zk@VSz1wiB7SF>#QRE*%luvCX7p8FZE73F`*C;T3thPwLXuJPX=k7RE@N;+ySa^OR{ ztAoR(pVvFXeW7UU6Zf&t;Jm^yV}?w5cU?Ln89$XdA&Ow>1UKLWG)46f=%#xB!P64= z?-hI15^#-xj?6Q6h2>xmUwiRV|6^0w_!XaI1PV}Md|YXnuIiarmI`0|pHieQc z8RHBE^5f#-;%i7Nm>spY(e+gE+JIwXCQl9@>`@}_j|7odff{z4k9xBcJfi3%T%f-= z&qdtt_gNl5Y6>2~mDhx3b4|59LJ-$NmiL+~T1tKC#~sc<>X_Ri?>F|0Re)mtFo;b9 z?u!^%Df&fsRfvIxu3W(8>Qy;v-4|pFXgmSSdP*;cc@DAoV%J!r-sOHAJ_Q6Eu9aj5 zaAKaqzQIBA3x~?$gvZc+?pI`spGQTv4=4^C70p-~AMok2fiw^8pRj!{i3KNML7mT} z=tBAGI~iz8+v~~jN8POVwRY*@(}Iae?cTFa=a21TXSTkJ$ey2BIs(YL-mVw82&Ji3 zv*-0+hANEQ2%jKKW>eD+k<&ReAAIi=pr87^TR-1jWwGLB0XBidtzGfFFjrcL69U%v z#eU!puwDtI(3VKjqm!v$iWXeCw=^RwE$xoTI{V-sLxXUN_X;vWFv3#|vzC@Gkwhxs zl-j6-p5wCS$P__p{|BhjX^YzP@zMeZy2`=m1sC@qjShJQMf1U?fijdM@TnHm@r4mR1d&Y45TcuH88Tt-R%RCcsGbZlXO zkdLq7ue}T8U{s%Zl=iG&je}MQ)!Lv~!CKmIE56Crm{R4HHRf)qubvrhd#egf_`(Kj z9ScoPVjoU^mD;UjYNvcvW4GEbjeOt$VY^*bRC(_T7yO+4tAqTz0_If)t}N=13_^)& z7fYu-zaK7@SwymJ|8osR7|W6OATF3qC(%8t*ny^{|4X9j!abNX-rZJ(L4+BheoZ16 zjuF2b8ccUdmETdCu+O%7hZWkddGX@=HmH9#)ChdI9rz8-9kVeq3PRL-ac;1%K3k`7 z?J0F2Rmi)2zyS#JdTb#U>Z~avKoz|;d3=yhe|8`J2F&?t&0FGrK&hJ?+1zEwb_YZ) z(^K$lCQWtk7mfKXjE`ki9M>z_K%-2Y+b|-x~-CycP z%BK$N@%maJQXrd-VpA`l2EwlbrZ#a&jbMeruHPFe4|!uaQa6o5SyPP*=>mK5fX>^F zm&8kdrqA?)kZzHWBjV0iHYel0OGT{+qqj)=?}YI zS6t{XnoYC6;po)izn1OO#M!wxZdH7XWmTdPHuCxNrZ&7SBjA_6!~*dO1;nwU&MM#T zg)j!G32_E!M_MSuT}*5;qW?uANWVDMY_#ufpVHd*29U7YY$A4)`_5TOZK~gw(ArP& zcIl{VgUH^ukhU9X1NxLnQLpJX*zq8-V^%UL86a-e0j6RofB8f2#H9y7LK)jF3!3}O zy3!#ApVmWGN)SN8<4@ICe~2?_FOI$ZIK3eMX(01JT^~5JM8$zS5J{{OKI~ZRwLbps z+c%H=S{2}a0=ba}Y80#V%4%rw%KDYD9w-*vU;u^Lk8K6T8bbgw-$a`YxY=d|$1;T! zote;@;)TF&@q*F@C;@0QIkFmnRwmw{>D8$LzM1B?axwJa;iE^hXp$WyTJq-Ue3>M6 z35AI03!l?=vpe#OfsRBAIGu;kw)s)p_|qvpv-DN6nEuWBvp2IymQYQW1r>y74wl<; zZ%O{6w+Vu%BGj)w+IHUZ*N&d~@0ecV%2?|;*0nwAf!a}`~IxVP`%2@*)T>y%@ zzPOk)0Z_qZFhy8?G2SEz9+8;yMMic&oX=-LZtO;Q5n4M)b;Jw0d=hnHC zeYR1-e|~f)xXk0GoW47b#igSX+(v9UVRLdG=0iFU*iG;hZAjtsDQNDz#6nZlH$FM! z7n<=KOZRl2p9|NTXq5#i%p{N@h)P`29Di5=8|Mw!gE4?WteL4a2n6@BEiM#zW!bg( z4$=H(U41sYK#Y`M?Qpus{sV>9&d2L;>uFv>s&Ee1RuR%cE+CTd7vI(&K*Hi9kc~ZL9`H+VIRwG{`9Iy-)Pj$4*g74Ne+|$TuB5$m6g^cH z04*m(9HFbG$Teasy}~ThTt&L1HM*@$gZth0s%~P*_Op1bBS^pX-6}8837Fsr5X1cZ zUN{fLx+Jq52I#7jla3^BQnbbO>)W?V0}Uk_X+N=gG@ix0&d$oR&xhUe^0M{f(Z^t; znOp9ru`=ntM%@Y#^0E(Q6?xwT=_0v@^0e+6JN?R}c(+*KDdj(hj#1c6(xaS}it#s* zlua#I*-g?}M03$j6e2>O!R4*C>}C{{&tY-0a|pX+)?c$t|C>g^iEd7J+zq!#Uy93O z0r>m`BBCl~>JHS?Qmv%p-2$!mTpB?@3 z<#8G+j}>TOIzbP;$a@FRSVotkox$!}BJfD#!8lHOJ>@ve0#?R*%Ifpk`x;{qi zT#ES_DcCi^rX$2>zH$$H*iAeE^*ZFo(8~#QF5$`sz#RE#Z)UNO4WjXaN%|VlYC35< zuGp)&#`d_Foj?FHbUa&5=WKycV`F29fF?)@v_Vi>kFCc*R(%Tl4~ucWrMxl4HQmO+ zSYY+dKF6sS?gS%lxsev2CywF* zNkqZS0ozADJfBXqgX9fh3TM%SXyuY@tW2J=@8rOlKhIkOZAv(|@4KCMg2so-19?G8 z#clr2zgg%DbhT<{)qZMt_z$}IZ!LOYG7dXlNgY8>tJ{dKo#yJ}e~NuiiUxsh)Fnk)%Ctr_UPSR{h5oGPk~deP(X73*Wur&$Ws# zbw}1ExbWmRU)z2@7`f8io>1HU-FZCfljw?zx1Y{3nX;Y_ti7@A{l}u8>-e1*L|AX% zzC9Q*qsey+GmgD<4R5O6K-!IW(YlsHksC=#3SleGLf!|t**!OMXT$FpYeB!|;12Z8 zk(z=rGPw`eL=yOGE+bMizmIENlh`r_!iD$k$qXhCe~Dw?QC3kY(OSH4_1okB-c_T2 zH=3HP(dP{BB>N_MW&j5B^L0fmtGXxZ;>EWUgFK$EwbKr`JKczpz8)SW-hS___m zLswwGJvwHO$loJ64R~*>f5@xavFHZu&%x;J-+@GsL6IkF%0Ihya8VDCIZKf7%R}Ab zfEYxyfgW=JYI97UX80O-;^S9y@JewV2qVu_{P_OAIR3DRub4hS_36B24P}6A!2KGg zXuezeE}!$4FR_YS9iGdkF-gg9{1(t}zZntcbNyx%iLdHX0}w3Zqn5sP&GVVaIJ{b@ zDqPy?O!ob&4%dR_{3i6D42r*X{w*i2XPDNJS&TQ~v0zJKxjF5s>TP(t zFVkG*Nzzv_jFBgo8j60lbNG6y2=@$z1-j^EIiA)mY%!Ba^vbrabBZ5*6YKNFLI0SO zn8HlTOHak!(-<@a6L~L^;huCyuW#|`d`{JQ9q9K9)G|zB;RgE95+oF;ld;7K2KoWK zk!Nb%icqjQB$NmQ(m3E|nJ?N{n}Hyehsb+bCDWE041bvVYm${s1MiBww?!%{fCdV3 zb_T{x=A_S>?Q1{3q^E%xz@E!c9F0OK+(HDiW;$|(FHv@O3CP3v6x!cR5P&g*KYsk6 z2f(@4_!W!1EBL!bO-+=h?^VNYKj%WM&kLMDT!>@$QwTIC{iM9btF`cUDgiH=UXnlp zMtMK%J$6Y(1o;fL%t83_JpG}ja?Iv3&vESO;N}As%*3#u(^4HGv~pvL zrj2#tn#z_nw?T?k){Rt_L)DoJ5Ml}QHD*ibsL{byKKCFXhWEKW0%+HzE>KEodYDDN7gH5_QdX+MhLIMU``1(5D45W!rG^q=e{=8#lNV0v+#**=1~DQMZ!aZN)E;l>kY) z_NTY&40nK+{AV>f>Nnxw>7tHb%ge@p(^IjmG;(HRTh^IP!q#VMUzC@xF^y+&K~*-! zwryd5emK1wX8rs7W1Rg5o;HE`7-UduElV4yt1s<~~x!2yKlIgQM*TOMei9?OR%BVgScuhLua}dBtQXroh2L{1aXWQ!o z!m9&`KzW{KcJ=|Dq0h_ZzyHurzRoEMro@aNqjI09#e8@22hfEZsmHYjr16DG)WtyT zIw4{vTEJI?n@=cpOc}^8;|FAey9l@8GSV26542zfJY`Ay_K?w6*pNzc@=O#|ak^Ap zOF5?I&f^0die7>M?8T{#rp3I2Jg-l|ZCTigb@ARe;PC^Y1vF_6Bs!nL#tp`{mS2>O zxskh-ShS%hsM}0-_Y^G~7b1YmA5gn~1vt@EZ&bJ*tzAf~`=F(Nwn7^7tJ#sRQx{zV ztvWMa0xFC-EUf0`%a?avu56F*`*$BlnB&0Cg)}_y?ivycd#FAUhe$B-J7B+Knk#m= zT6TVqKY#@ja%3z^_seySaqpOe&J$QU^=P1d5UmvQAbv+A3sQaooe_c`jLJQp+8tW> zV6>0mNW>tPASUS5GImR}>e`>* f|KIVCL_SK=i7X_^uC;;(Dj}oGX2=RX=llN!HYHPP literal 0 HcmV?d00001 diff --git a/umap/static/umap/img/24.svg b/umap/static/umap/img/24.svg new file mode 100644 index 00000000..083830c9 --- /dev/null +++ b/umap/static/umap/img/24.svg @@ -0,0 +1,461 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/umap/static/umap/img/edit-16.png b/umap/static/umap/img/edit-16.png new file mode 100644 index 0000000000000000000000000000000000000000..bfe389cbf921136dbc8e77e4b69339a86424036d GIT binary patch literal 430 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf2=n zD-dSmmtT}V`<;yx0|TSBr;B5V zMeo$hd;ORk1rB`t&o?bAePwTF=fWidTTPqVZtqq9C^~`tgW;QgYaxg1#bQ&AopQVH zkUMi@z=_Hl*~vMZcHg|8QfAgYbK^M<#W&BcACh{wcm3*D-W(6BHicU?ey{U);R!I# z_Mc>79Np>6u{_PJ;M`q{=f752vADRbl2$F0zhSc3Z2zW(tMoi4^)D4YQdqNS6?202 z_P@L#mrZKhRc$*Ky{O>(S9H!)T|(^3f$DhnwgY91@g=+Ow*R>~lS?d7FjMTK4{M=} z{K{9cjPgSvtjj} zKfW&K!XIWfg{>~-n8WzpA!PMczDX*Tajg&6vrqL(O}CK?uikqvTXIT&P<>+LABND< Wb(eoME35~GErX}4pUXO@geCx)Sg;2G literal 0 HcmV?d00001 diff --git a/umap/static/umap/img/icon-bg.png b/umap/static/umap/img/icon-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..1f7144b370666e386d7f98458d0c0742f217c768 GIT binary patch literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V8<6ZZI=>f4u_bxCyDx`7I;J! zGca%qgD@k*tT_@uLG}_)Usv|Kj1pYBvMo#wg+L+664!_l=ltB<)VvY~=c3falGGH1 z^30M91$R&1fbd2>aiAhKPZ!4!iOb18-rm2@H?Z~e_Fin2m?6=@!n|Sv>+Hkl=h<4T b*fKM$XkmTuxN>z9PzQsjtDnm{r-UW|;H@<6 literal 0 HcmV?d00001 diff --git a/umap/static/umap/img/marker.png b/umap/static/umap/img/marker.png new file mode 100644 index 0000000000000000000000000000000000000000..3119b80698167f0e2bd7e329dcd73dddf0d5f08b GIT binary patch literal 375 zcmeAS@N?(olHy`uVBq!ia0vp^QXtI11|(N{`J4k%jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=f!eQwFr$;k>RU;@a7Xh1&)vK31nTYVP`N+*{fmW0{0VFum=qeCpLi9iy*!&b=}NZJPGi~X z8<$yTN61y)SlYCsX4$0Or)oaRto*?wp*72(C4ZIU;)RcsC+^YrvSz5!a#U|{>~{&- zRDC#ai^ikRx*Btmj1A0A%j&XS2zsj!R{2_R<;&8q2bP7cv=)h+Ah{&LPU3~sr2jLs z_?(0;DcyZz@4@L9^?ZrQw=7qwYj1e2TY8@D&Gww*Rkhu{sydqMAM@p3pA6Q#k+1~@ O0fVQjpUXO@geCxxBa<=! literal 0 HcmV?d00001 diff --git a/umap/static/umap/img/search.gif b/umap/static/umap/img/search.gif new file mode 100644 index 0000000000000000000000000000000000000000..c2bf64c0ada8ef2ce5c1e5c25b5bd20d1ba4f2e2 GIT binary patch literal 1472 zcmZ?wbhEHblwy!#XkcUjg8%>jEB@#9a}5c0b_{Se(lcNN2`l~+bS_FwEJ;mKD9FSz{sEj(g!kufyue2f92`7TuK!_w>&Q1wJi7-GeKlh_tP26t&(_W zA9$;s{jTb9rrdS*TeGG_EPBY6V)Lu&Xp*`{jZtOL`AyDiv$n@LGh#E>9b_)!y+zDh z>^j#h`|+kfvP)uOa%d6nu2nq0cX8L8`f7TcGj@5!I^!8hX1>pp-}p>8#j~RFw`1#` z%%WE-o!W0`m;DSC19}A0%@DKy&uTI83NhZXyzEqC*A0iIM<*oI~;jV`^io6pa8z_~pd%FB33)|x3FD9q^I?WBvp1#{v1gqI@Aa`?ISX4RXRLJJN zyY2^QCYp3f7wfI$G}Zn#VWaiptyPVI%i8` z_3DE*=lQ(u8rt0{vYPQUH?MP@!kH7FSEZSsV_Gl2>SK~!;>L29B}Fz;pWJR{GM!rq zG!=V#Ko}auDRrY}{koDx?LCnReW|Bfa}OCUus;3d`>o~gu9VFGotd{IR?s6xHPfv* z|3uU)pQ%@#cAaJ8!sb#)#^7JR&7FBiCoGul~v0oTF&!5v35pm^yWF% z73-q^2$?AMTiA$H?@rc~WM-SKyL@BS!MbUS+_7d1S8xb$KC0g67k)6ea`T!>FLkGs z%7(C&^MbkK3?J#0?y3{o{(52m%bP9Ai(Z<$h)q4NFnOA_-NIwHh0>lRx*CX_3&fhf zz$UZZe^eRZ#g%io>hinLgipOH>3%CZw|}KTutl z@*u1xLvzLAIa_XVZ92!hg13lcM$5v)zFX;e?Yp-qSshn-UAj8&UdQT&DY{s W@-$Ah!$0#<=A;Xt^sC3kU=08>NK0b? literal 0 HcmV?d00001 diff --git a/umap/static/umap/js/autocomplete.js b/umap/static/umap/js/umap.autocomplete.js similarity index 100% rename from umap/static/umap/js/autocomplete.js rename to umap/static/umap/js/umap.autocomplete.js diff --git a/umap/static/umap/js/umap.controls.js b/umap/static/umap/js/umap.controls.js new file mode 100644 index 00000000..0f6aad8b --- /dev/null +++ b/umap/static/umap/js/umap.controls.js @@ -0,0 +1,1131 @@ +L.Storage.BaseAction = L.ToolbarAction.extend({ + + initialize: function (map) { + this.map = map; + this.options.toolbarIcon = { + className: this.options.className, + tooltip: this.options.tooltip + }; + L.ToolbarAction.prototype.initialize.call(this); + if (this.options.helpMenu && !this.map.helpMenuActions[this.options.className]) this.map.helpMenuActions[this.options.className] = this; + } + +}); + +L.Storage.ImportAction = L.Storage.BaseAction.extend({ + + options: { + helpMenu: true, + className: 'upload-data dark', + tooltip: L._('Import data') + ' (Ctrl+I)' + }, + + addHooks: function () { + this.map.importPanel(); + } + +}); + +L.Storage.EditPropertiesAction = L.Storage.BaseAction.extend({ + + options: { + helpMenu: true, + className: 'update-map-settings dark', + tooltip: L._('Edit map settings') + }, + + addHooks: function () { + this.map.edit(); + } + +}); + +L.Storage.ChangeTileLayerAction = L.Storage.BaseAction.extend({ + + options: { + helpMenu: true, + className: 'dark update-map-tilelayers', + tooltip: L._('Change tilelayers') + }, + + addHooks: function () { + this.map.updateTileLayers(); + } + +}); + +L.Storage.ManageDatalayersAction = L.Storage.BaseAction.extend({ + + options: { + className: 'dark manage-datalayers', + tooltip: L._('Manage layers') + }, + + addHooks: function () { + this.map.manageDatalayers(); + } + +}); + +L.Storage.UpdateExtentAction = L.Storage.BaseAction.extend({ + + options: { + className: 'update-map-extent dark', + tooltip: L._('Save this center and zoom') + }, + + addHooks: function () { + this.map.updateExtent(); + } + +}); + +L.Storage.UpdatePermsAction = L.Storage.BaseAction.extend({ + + options: { + className: 'update-map-permissions dark', + tooltip: L._('Update permissions and editors') + }, + + addHooks: function () { + this.map.updatePermissions(); + } + +}); + +L.Storage.DrawMarkerAction = L.Storage.BaseAction.extend({ + + options: { + helpMenu: true, + className: 'storage-draw-marker dark', + tooltip: L._('Draw a marker') + }, + + addHooks: function () { + this.map.startMarker(); + } + +}); + +L.Storage.DrawPolylineAction = L.Storage.BaseAction.extend({ + + options: { + helpMenu: true, + className: 'storage-draw-polyline dark', + tooltip: L._('Draw a polyline') + }, + + addHooks: function () { + this.map.startPolyline(); + } + +}); + +L.Storage.DrawPolygonAction = L.Storage.BaseAction.extend({ + + options: { + helpMenu: true, + className: 'storage-draw-polygon dark', + tooltip: L._('Draw a polygon') + }, + + addHooks: function () { + this.map.startPolygon(); + } + +}); + +L.Storage.AddPolylineShapeAction = L.Storage.BaseAction.extend({ + + options: { + className: 'storage-draw-polyline-multi dark', + tooltip: L._('Add a line to the current multi') + }, + + addHooks: function () { + this.map.editedFeature.editor.newShape(); + } + +}); + +L.Storage.AddPolygonShapeAction = L.S.AddPolylineShapeAction.extend({ + + options: { + className: 'storage-draw-polygon-multi dark', + tooltip: L._('Add a polygon to the current multi') + } + +}); + +L.Storage.BaseFeatureAction = L.ToolbarAction.extend({ + + initialize: function (map, feature, latlng) { + this.map = map; + this.feature = feature; + this.latlng = latlng; + L.ToolbarAction.prototype.initialize.call(this); + this.postInit(); + }, + + postInit: function () {}, + + hideToolbar: function () { + this.map.removeLayer(this.toolbar); + }, + + addHooks: function () { + this.onClick({latlng: this.latlng}); + this.hideToolbar(); + } + +}); + +L.Storage.CreateHoleAction = L.S.BaseFeatureAction.extend({ + + options: { + toolbarIcon: { + className: 'storage-new-hole', + tooltip: L._('Start a hole here') + } + }, + + onClick: function (e) { + this.feature.startHole(e); + } + +}); + +L.Storage.ToggleEditAction = L.S.BaseFeatureAction.extend({ + + options: { + toolbarIcon: { + className: 'storage-toggle-edit', + tooltip: L._('Toggle edit mode (shift-click)') + } + }, + + onClick: function (e) { + if (this.feature._toggleEditing) this.feature._toggleEditing(e); // Path + else this.feature.edit(e); // Marker + } + +}); + +L.Storage.DeleteFeatureAction = L.S.BaseFeatureAction.extend({ + + options: { + toolbarIcon: { + className: 'storage-delete-all', + tooltip: L._('Delete this feature') + } + }, + + postInit: function () { + if (!this.feature.isMulti()) this.options.toolbarIcon.className = 'storage-delete-one-of-one'; + }, + + onClick: function (e) { + this.feature.confirmDelete(e); + } + +}); + +L.Storage.DeleteShapeAction = L.S.BaseFeatureAction.extend({ + + options: { + toolbarIcon: { + className: 'storage-delete-one-of-multi', + tooltip: L._('Delete this shape') + } + }, + + onClick: function (e) { + this.feature.enableEdit().deleteShapeAt(e.latlng); + } + +}); + +L.Storage.ExtractShapeFromMultiAction = L.S.BaseFeatureAction.extend({ + + options: { + toolbarIcon: { + className: 'storage-extract-shape-from-multi', + tooltip: L._('Extract shape to separate feature') + } + }, + + onClick: function (e) { + this.feature.isolateShape(e.latlng); + } + +}); + +L.Storage.BaseVertexAction = L.S.BaseFeatureAction.extend({ + + initialize: function (map, feature, latlng, vertex) { + this.vertex = vertex; + L.S.BaseFeatureAction.prototype.initialize.call(this, map, feature, latlng); + } + +}); + +L.Storage.DeleteVertexAction = L.S.BaseVertexAction.extend({ + + options: { + toolbarIcon: { + className: 'storage-delete-vertex', + tooltip: L._('Delete this vertex (Alt-click)') + } + }, + + onClick: function () { + this.vertex.delete(); + } + +}); + +L.Storage.SplitLineAction = L.S.BaseVertexAction.extend({ + + options: { + toolbarIcon: { + className: 'storage-split-line', + tooltip: L._('Split line') + } + }, + + onClick: function () { + this.vertex.split(); + } + +}); + +L.Storage.ContinueLineAction = L.S.BaseVertexAction.extend({ + + options: { + toolbarIcon: { + className: 'storage-continue-line', + tooltip: L._('Continue line') + } + }, + + onClick: function () { + this.vertex.continue(); + } + +}); + +// Leaflet.Toolbar doesn't allow twice same toolbar class… +L.Storage.SettingsToolbar = L.Toolbar.Control.extend({}); +L.Storage.DrawToolbar = L.Toolbar.Control.extend({ + + initialize: function (options) { + L.Toolbar.Control.prototype.initialize.call(this, options); + this.map = this.options.map; + this.map.on('seteditedfeature', this.redraw, this); + }, + + appendToContainer: function (container) { + this.options.actions = []; + if (this.map.options.enableMarkerDraw) { + this.options.actions.push(L.S.DrawMarkerAction); + } + if (this.map.options.enablePolylineDraw) { + this.options.actions.push(L.S.DrawPolylineAction); + if (this.map.editedFeature && this.map.editedFeature instanceof L.S.Polyline) { + this.options.actions.push(L.S.AddPolylineShapeAction); + } + } + if (this.map.options.enablePolygonDraw) { + this.options.actions.push(L.S.DrawPolygonAction); + if (this.map.editedFeature && this.map.editedFeature instanceof L.S.Polygon) { + this.options.actions.push(L.S.AddPolygonShapeAction); + } + } + L.Toolbar.Control.prototype.appendToContainer.call(this, container); + }, + + redraw: function () { + var container = this._control.getContainer(); + container.innerHTML = ''; + this.appendToContainer(container); + } + +}); + + +L.Storage.EditControl = L.Control.extend({ + + options: { + position: 'topright' + }, + + onAdd: function (map) { + var container = L.DomUtil.create('div', 'leaflet-control-edit-enable storage-control'), + edit = L.DomUtil.create('a', '', container); + edit.href = '#'; + edit.title = L._('Enable editing') + ' (Ctrl-E)'; + + L.DomEvent + .addListener(edit, 'click', L.DomEvent.stop) + .addListener(edit, 'click', map.enableEdit, map); + return container; + } + +}); + +/* Share control */ +L.Control.Embed = L.Control.extend({ + + options: { + position: 'topleft' + }, + + onAdd: function (map) { + var container = L.DomUtil.create('div', 'leaflet-control-embed storage-control'); + + var link = L.DomUtil.create('a', '', container); + link.href = '#'; + link.title = L._('Embed and share this map'); + + L.DomEvent + .on(link, 'click', L.DomEvent.stop) + .on(link, 'click', map.renderShareBox, map) + .on(link, 'dblclick', L.DomEvent.stopPropagation); + + return container; + } +}); + +L.Storage.MoreControls = L.Control.extend({ + + options: { + position: 'topleft' + }, + + onAdd: function () { + var container = L.DomUtil.create('div', ''), + more = L.DomUtil.create('a', 'storage-control-more storage-control-text', container), + less = L.DomUtil.create('a', 'storage-control-less storage-control-text', container); + more.href = '#'; + more.title = L._('More controls'); + + L.DomEvent + .on(more, 'click', L.DomEvent.stop) + .on(more, 'click', this.toggle, this); + + less.href = '#'; + less.title = L._('Hide controls'); + + L.DomEvent + .on(less, 'click', L.DomEvent.stop) + .on(less, 'click', this.toggle, this); + + return container; + }, + + toggle: function () { + var pos = this.getPosition(), + corner = this._map._controlCorners[pos], + className = 'storage-more-controls'; + if (L.DomUtil.hasClass(corner, className)) L.DomUtil.removeClass(corner, className); + else L.DomUtil.addClass(corner, className); + } + +}); + + +L.Storage.DataLayersControl = L.Control.extend({ + + options: { + position: 'topleft' + }, + + labels: { + zoomToLayer: L._('Zoom to layer extent'), + toggleLayer: L._('Show/hide layer'), + editLayer: L._('Edit') + }, + + initialize: function (map, options) { + this.map = map; + L.Control.prototype.initialize.call(this, options); + }, + + _initLayout: function (map) { + var container = this._container = L.DomUtil.create('div', 'leaflet-control-browse storage-control'), + actions = L.DomUtil.create('div', 'storage-browse-actions', container); + this._datalayers_container = L.DomUtil.create('ul', 'storage-browse-datalayers', actions); + + var link = L.DomUtil.create('a', 'storage-browse-link', actions); + link.href = '#'; + link.title = link.innerHTML = L._('Browse data'); + + var toggle = L.DomUtil.create('a', 'storage-browse-toggle', container); + toggle.href = '#'; + + L.DomEvent + .on(toggle, 'click', L.DomEvent.stop); + + L.DomEvent + .on(link, 'click', L.DomEvent.stop) + .on(link, 'click', map.openBrowser, map); + + map.whenReady(function () { + this.update(); + }, this); + + if (!L.Browser.touch) { + L.DomEvent.disableClickPropagation(container); + L.DomEvent.on(container, 'mousewheel', L.DomEvent.stopPropagation); + L.DomEvent.on(container, 'MozMousePixelScroll', L.DomEvent.stopPropagation); + L.DomEvent.on(container, { + mouseenter: this.expand, + mouseleave: this.collapse + }, this); + } else { + L.DomEvent.on(container, 'click', L.DomEvent.stopPropagation); + L.DomEvent.on(toggle, 'click', L.DomEvent.stop) + .on(toggle, 'click', this.expand, this); + map.on('click', this.collapse, this); + } + + return container; + }, + + 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) { + var datalayerLi = L.DomUtil.create('li', '', container); + if (draggable) L.DomUtil.element('i', {className: 'drag-handle', title: L._('Drag to reorder')}, datalayerLi); + datalayer.renderToolbox(datalayerLi); + var 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.innerHTML = datalayer.options.name; + }, + + newDataLayer: function () { + var datalayer = this.map.createDataLayer({}); + datalayer.edit(); + }, + + openPanel: function () { + if (!this.map.editEnabled) return; + var container = L.DomUtil.create('ul', 'storage-browse-datalayers'); + this.map.eachDataLayerReverse(function (datalayer) { + this.addDataLayer(container, datalayer, true); + }, this); + var orderable = new L.S.Orderable(container); + orderable.on('drop', function (e) { + var layer = this.map.datalayers[e.src.dataset.id], + other = this.map.datalayers[e.dst.dataset.id], + minIndex = Math.min(e.initialIndex, e.finalIndex); + if (e.finalIndex === 0) layer.bringToTop(); + else if (e.finalIndex > e.initialIndex) layer.insertBefore(other); + else layer.insertAfter(other); + this.map.eachDataLayerReverse(function (datalayer) { + if (datalayer.getRank() >= minIndex) datalayer.isDirty = true; + }); + this.map.indexDatalayers(); + }, this); + + var bar = L.DomUtil.create('div', 'button-bar', container), + add = L.DomUtil.create('a', 'show-on-edit block add-datalayer button', bar); + add.href = '#'; + add.innerHTML = add.title = L._('Add a layer'); + + L.DomEvent + .on(add, 'click', L.DomEvent.stop) + .on(add, 'click', this.newDataLayer, this); + + this.map.ui.openPanel({data: {html: container}, className: 'dark'}); + } + +}); + +L.Storage.DataLayer.include({ + + renderToolbox: function (container) { + var 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'); + L.DomEvent.on(toggle, 'click', this.toggle, this); + L.DomEvent.on(zoomTo, 'click', this.zoomTo, this); + L.DomEvent.on(edit, 'click', this.edit, this); + L.DomEvent.on(table, 'click', this.tableEdit, this); + L.DomEvent.on(remove, 'click', function () { + if (!this.isVisible()) return; + if (!confirm(L._('Are you sure you want to delete this layer?'))) return; + this._delete(); + this.map.ui.closePanel(); + }, this); + L.DomUtil.addClass(container, this.getHidableClass()); + L.DomUtil.classIf(container, 'off', !this.isVisible()); + container.dataset.id = L.stamp(this); + }, + + getHidableElements: function () { + return document.querySelectorAll('.' + this.getHidableClass()); + }, + + getHidableClass: function () { + return 'show_with_datalayer_' + L.stamp(this); + }, + + propagateRemote: function () { + var els = this.getHidableElements(); + for (var i = 0; i < els.length; i++) { + L.DomUtil.classIf(els[i], 'remotelayer', this.isRemoteLayer()); + } + }, + + propagateHide: function () { + var els = this.getHidableElements(); + for (var i = 0; i < els.length; i++) { + L.DomUtil.addClass(els[i], 'off'); + } + }, + + propagateShow: function () { + this.onceLoaded(function () { + var els = this.getHidableElements(); + for (var i = 0; i < els.length; i++) { + L.DomUtil.removeClass(els[i], 'off'); + } + }, this); + } + +}); + +L.Storage.DataLayer.addInitHook(function () { + this.on('hide', this.propagateHide); + this.on('show', this.propagateShow); + this.propagateShow(); +}); + + +L.Storage.Map.include({ + + _openBrowser: function () { + var browserContainer = L.DomUtil.create('div', 'storage-browse-data'), + title = L.DomUtil.add('h3', 'storage-browse-title', browserContainer, this.options.name), + filter = L.DomUtil.create('input', '', browserContainer), + filterValue = '', + featuresContainer = L.DomUtil.create('div', 'storage-browse-features', browserContainer), + filterKeys = (this.options.filterKey || this.options.sortKey || 'name').split(','); + filter.type = 'text'; + filter.placeholder = L._('Filter…'); + + var addFeature = function (feature) { + var feature_li = L.DomUtil.create('li', feature.getClassName() + ' feature'), + zoom_to = L.DomUtil.create('i', 'feature-zoom_to', feature_li), + edit = L.DomUtil.create('i', 'show-on-edit feature-edit', feature_li), + color = L.DomUtil.create('i', 'feature-color', feature_li), + title = L.DomUtil.create('span', 'feature-title', feature_li), + symbol = feature._getIconUrl ? L.S.Icon.prototype.formatUrl(feature._getIconUrl(), feature): null; + zoom_to.title = L._('Bring feature to center'); + edit.title = L._('Edit this feature'); + title.innerHTML = feature.getDisplayName() || '—'; + color.style.backgroundColor = feature.getOption('color'); + if (symbol) { + color.style.backgroundImage = 'url(' + symbol + ')'; + } + L.DomEvent.on(zoom_to, 'click', function (e) { + e.callback = this.view; + this.bringToCenter(e); + }, feature); + L.DomEvent.on(title, 'click', function (e) { + e.callback = this.view + this.bringToCenter(e); + }, feature); + L.DomEvent.on(edit, 'click', function () { + this.edit(); + }, feature); + return feature_li; + }; + + var append = function (datalayer) { + var container = L.DomUtil.create('div', datalayer.getHidableClass(), featuresContainer), + headline = L.DomUtil.create('h5', '', container); + container.id = 'browse_data_datalayer_' + datalayer.storage_id; + datalayer.renderToolbox(headline); + L.DomUtil.add('span', '', headline, datalayer.options.name); + var ul = L.DomUtil.create('ul', '', container); + L.DomUtil.classIf(container, 'off', !datalayer.isVisible()); + + var build = function () { + ul.innerHTML = ''; + datalayer.eachFeature(function (feature) { + if (filterValue && !feature.matchFilter(filterValue, filterKeys)) return; + ul.appendChild(addFeature(feature)); + }); + }; + build(); + datalayer.on('datachanged', build); + datalayer.map.ui.once('panel:closed', function () { + datalayer.off('datachanged', build); + }); + datalayer.map.ui.once('panel:ready', function () { + datalayer.map.ui.once('panel:ready', function () { + datalayer.off('datachanged', build); + }); + }); + }; + + var appendAll = function () { + featuresContainer.innerHTML = ''; + filterValue = filter.value; + this.eachBrowsableDataLayer(function (datalayer) { + append(datalayer); + }); + }; + L.bind(appendAll, this)(); + L.DomEvent.on(filter, 'input', appendAll, this); + var link = L.DomUtil.create('li', ''); + L.DomUtil.create('i', 'storage-icon-16 storage-caption', link); + var label = L.DomUtil.create('span', '', link); + label.innerHTML = label.title = L._('About'); + L.DomEvent.on(link, 'click', this.displayCaption, this); + this.ui.openPanel({data: {html: browserContainer}, actions: [link]}); + } + +}); + + + +L.Storage.TileLayerControl = L.Control.extend({ + options: { + position: 'topleft' + }, + + onAdd: function () { + var container = L.DomUtil.create('div', 'leaflet-control-tilelayers storage-control'); + + var link = L.DomUtil.create('a', '', container); + link.href = '#'; + link.title = L._('Change map background'); + + L.DomEvent + .on(link, 'click', L.DomEvent.stop) + .on(link, 'click', this.openSwitcher, this) + .on(link, 'dblclick', L.DomEvent.stopPropagation); + + return container; + }, + + openSwitcher: function (options) { + this._tilelayers_container = L.DomUtil.create('ul', 'storage-tilelayer-switcher-container'); + this.buildList(options); + }, + + buildList: function (options) { + this._map.eachTileLayer(function (tilelayer) { + this.addTileLayerElement(tilelayer, options); + }, this); + this._map.ui.openPanel({data: {html: this._tilelayers_container}, className: options.className}); + }, + + addTileLayerElement: function (tilelayer, options) { + var selectedClass = this._map.hasLayer(tilelayer) ? 'selected' : '', + el = L.DomUtil.create('li', selectedClass, this._tilelayers_container), + img = L.DomUtil.create('img', '', el), + name = L.DomUtil.create('div', '', el); + img.src = L.Util.template(tilelayer.options.url_template, this._map.demoTileInfos); + name.innerHTML = tilelayer.options.name; + L.DomEvent.on(el, 'click', function () { + this._map.selectTileLayer(tilelayer); + this._map.ui.closePanel(); + if (options && options.callback) options.callback(tilelayer); + }, this); + } + + +}); + +L.S.AttributionControl = L.Control.Attribution.extend({ + + options: { + prefix: '' + }, + + _update: function () { + L.Control.Attribution.prototype._update.call(this); + if (this._map.options.shortCredit) { + L.DomUtil.add('span', '', this._container, ' — ' + L.Util.toHTML(this._map.options.shortCredit)); + } + var link = L.DomUtil.add('a', '', this._container, ' — ' + L._('About')); + L.DomEvent + .on(link, 'click', L.DomEvent.stop) + .on(link, 'click', this._map.displayCaption, this._map) + .on(link, 'dblclick', L.DomEvent.stop); + if (window.top === window.self) { + // We are not in iframe mode + var home = L.DomUtil.add('a', '', this._container, ' — ' + L._('Home')); + home.href = '/'; + } + } + +}); + + +L.Storage.LocateControl = L.Control.extend({ + + options: { + position: 'topleft' + }, + + onAdd: function (map) { + var container = L.DomUtil.create('div', 'leaflet-control-locate storage-control'), + link = L.DomUtil.create('a', '', container); + link.href = '#'; + link.title = L._('Center map on your location'); + var fn = function () { + map.locate({ + setView: true, + enableHighAccuracy: true + }); + }; + + L.DomEvent + .on(link, 'click', L.DomEvent.stop) + .on(link, 'click', fn, map) + .on(link, 'dblclick', L.DomEvent.stopPropagation); + + return container; + } +}); + + +L.Storage.Search = L.PhotonSearch.extend({ + + onBlur: function (e) { + // Overrided because we don't want to hide the results on blur. + this.fire('blur'); + }, + + formatResult: function (feature, el) { + var self = this; + var 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'); + // We need to use "mousedown" because Leaflet.Photon listen to mousedown + // on el. + L.DomEvent.on(zoom, 'mousedown', function (e) { + L.DomEvent.stop(e); + self.zoomToFeature(feature); + }); + L.DomEvent.on(edit, 'mousedown', function (e) { + L.DomEvent.stop(e); + var datalayer = self.map.defaultDataLayer(); + var layer = datalayer.geojsonToFeatures(feature); + layer.isDirty = true; + layer.edit(); + }); + this._formatResult(feature, el); + }, + + zoomToFeature: function (feature) { + var zoom = Math.max(this.map.getZoom(), 16); // Never unzoom. + this.map.setView([feature.geometry.coordinates[1], feature.geometry.coordinates[0]], zoom); + }, + + onSelected: function (feature) { + this.zoomToFeature(feature); + this.map.ui.closePanel(); + } + +}); + +L.Storage.SearchControl = L.Control.extend({ + + options: { + position: 'topleft', + }, + + onAdd: function (map) { + var container = L.DomUtil.create('div', 'leaflet-control-search storage-control'), + self = this; + + L.DomEvent.disableClickPropagation(container); + var link = L.DomUtil.create('a', '', container); + link.href = '#'; + L.DomEvent.on(link, 'click', function (e) { + L.DomEvent.stop(e); + self.openPanel(map); + }); + return container; + }, + + openPanel: function (map) { + var options = { + limit: 10, + noResultLabel: L._('No results'), + } + if (map.options.photonUrl) options.url = map.options.photonUrl; + var container = L.DomUtil.create('div', ''); + + var title = L.DomUtil.create('h3', '', container); + title.textContent = L._('Search location'); + var input = L.DomUtil.create('input', 'photon-input', container); + var resultsContainer = L.DomUtil.create('div', 'photon-autocomplete', container); + this.search = new L.S.Search(map, input, options); + var id = Math.random(); + this.search.on('ajax:send', function () { + map.fire('dataloading', {id: id}); + }); + this.search.on('ajax:return', function () { + map.fire('dataload', {id: id}); + }); + this.search.resultsContainer = resultsContainer; + map.ui.once('panel:ready', function () { + input.focus(); + }); + map.ui.openPanel({data: {html: container}}); + } + +}); + + +L.Control.MiniMap.include({ + + initialize: function (layer, options) { + L.Util.setOptions(this, options); + this._layer = this._cloneLayer(layer); + }, + + onMainMapBaseLayerChange: function (e) { + var layer = this._cloneLayer(e.layer); + if (this._miniMap.hasLayer(this._layer)) { + this._miniMap.removeLayer(this._layer); + } + this._layer = layer; + this._miniMap.addLayer(this._layer); + }, + + _cloneLayer: function (layer) { + return new L.TileLayer(layer._url, L.Util.extend({}, layer.options)); + } + +}); + + +L.Control.Loading.include({ + + onAdd: function (map) { + this._container = L.DomUtil.create('div', 'storage-loader', map._controlContainer); + map.on('baselayerchange', this._layerAdd, this); + this._addMapListeners(map); + this._map = map; + }, + + _showIndicator: function () { + L.DomUtil.addClass(this._map._container, 'storage-loading'); + }, + + _hideIndicator: function() { + L.DomUtil.removeClass(this._map._container, 'storage-loading'); + } + +}); + + +/* +* Make it dynamic +*/ +L.S.ContextMenu = L.Map.ContextMenu.extend({ + + _createItems: function (e) { + this._map.setContextMenuItems(e); + L.Map.ContextMenu.prototype._createItems.call(this); + }, + + _showAtPoint: function (pt, e) { + this._items = []; + this._container.innerHTML = ''; + this._createItems(e); + L.Map.ContextMenu.prototype._showAtPoint.call(this, pt, e); + } + +}); + +L.S.IframeExporter = L.Class.extend({ + includes: [L.Mixin.Events], + + options: { + includeFullScreenLink: true, + currentView: false, + keepCurrentDatalayers: false + }, + + queryString: { + scaleControl: false, + miniMap: false, + scrollWheelZoom: false, + zoomControl: true, + allowEdit: false, + moreControl: true, + searchControl: null, + tilelayersControl: null, + embedControl: null, + datalayersControl: true, + onLoadPanel: 'none', + captionBar: false + }, + + dimensions: { + width: '100%', + height: '300px' + }, + + initialize: function (map) { + this.map = map; + this.baseUrl = window.location.protocol + '//' + window.location.host + window.location.pathname; + // Use map default, not generic default + this.queryString.onLoadPanel = this.map.options.onLoadPanel; + }, + + getMap: function () { + return this.map; + }, + + build: function () { + var datalayers = []; + if (this.options.keepCurrentDatalayers) { + this.map.eachDataLayer(function (datalayer) { + if (datalayer.isVisible() && datalayer.storage_id) { + datalayers.push(datalayer.storage_id); + } + }); + this.queryString.datalayers = datalayers.join(','); + } else { + delete this.queryString.datalayers; + } + var currentView = this.options.currentView ? window.location.hash : '', + iframeUrl = this.baseUrl + '?' + this.map.xhr.buildQueryString(this.queryString) + currentView, + code = ''; + if (this.options.includeFullScreenLink) { + code += '

' + L._('See full screen') + '

'; + } + return code; + } + +}); + +L.S.Editable = L.Editable.extend({ + + initialize: function (map, options) { + L.Editable.prototype.initialize.call(this, map, options); + this.on('editable:drawing:start editable:drawing:click', this.drawingTooltip); + this.on('editable:drawing:end', this.closeTooltip); + // Layer for items added by users + this.on('editable:drawing:cancel', function (e) { + if (e.layer._latlngs && e.layer._latlngs.length < e.layer.editor.MIN_VERTEX) e.layer.del(); + if (e.layer instanceof L.S.Marker) e.layer.del(); + }); + this.on('editable:drawing:commit', function (e) { + e.layer.isDirty = true; + if (this.map.editedFeature !== e.layer) e.layer.edit(e); + }); + this.on('editable:editing', function (e) { + var layer = e.layer; + layer.isDirty = true; + if (layer._tooltip && layer.isTooltipOpen()) { + layer._tooltip.setLatLng(layer.getCenter()); + layer._tooltip.update(); + } + }); + this.on('editable:vertex:ctrlclick', function (e) { + var index = e.vertex.getIndex(); + if (index === 0 || index === e.vertex.getLastIndex() && e.vertex.continue) e.vertex.continue(); + }); + this.on('editable:vertex:altclick', function (e) { + if (e.vertex.editor.vertexCanBeDeleted(e.vertex)) e.vertex.delete(); + }); + this.on('editable:vertex:rawclick', this.onVertexRawClick); + }, + + createPolyline: function (latlngs) { + return new L.Storage.Polyline(this.map, latlngs); + }, + + createPolygon: function (latlngs) { + var polygon = new L.Storage.Polygon(this.map, latlngs); + return polygon; + }, + + createMarker: function (latlng) { + return new L.Storage.Marker(this.map, latlng); + }, + + connectCreatedToMap: function (layer) { + // Overrided from Leaflet.Editable + var datalayer = this.map.defaultDataLayer(); + datalayer.addLayer(layer); + layer.isDirty = true; + return layer; + }, + + drawingTooltip: function (e) { + var content; + if (e.layer instanceof L.Marker) content = L._('Click to add a marker'); + else if (e.layer instanceof L.Polyline) { + if (!e.layer.editor._drawnLatLngs.length) { + if (e.layer instanceof L.Polygon) content = L._('Click to start drawing a polygon'); + else if (e.layer instanceof L.Polyline) content = L._('Click to start drawing a line'); + } else if (e.layer.editor._drawnLatLngs.length < e.layer.editor.MIN_VERTEX) { + content = L._('Click to continue drawing'); + } else { + content = L._('Click last point to finish shape'); + } + } + if (content) this.map.ui.tooltip({content: content}); + }, + + closeTooltip: function () { + this.map.ui.closeTooltip(); + }, + + onVertexRawClick: function (e) { + e.layer.onVertexRawClick(e); + L.DomEvent.stop(e); + e.cancel(); + } + +}); diff --git a/umap/static/umap/js/umap.core.js b/umap/static/umap/js/umap.core.js new file mode 100644 index 00000000..3dd091c5 --- /dev/null +++ b/umap/static/umap/js/umap.core.js @@ -0,0 +1,521 @@ +/* Poor man pub/sub handler, enough for now */ + +L.StorageSingleton = L.Evented.extend({}); +L.Storage = new L.StorageSingleton(); +L.S = L.Storage; +L.Storage.Map = L.Map.extend({}); + +/* +* Utils +*/ +L.Util.queryString = function (name, fallback) { + var decode = function (s) { return decodeURIComponent(s.replace(/\+/g, ' ')); }; + var qs = window.location.search.slice(1).split('&'), qa = {}; + for (var i in qs) { + var key = qs[i].split('='); + if (!key) continue; + qa[decode(key[0])] = key[1] ? decode(key[1]) : 1; + } + return qa[name] || fallback; +}; + +L.Util.booleanFromQueryString = function (name) { + var value = L.Util.queryString(name); + return value === '1' || value === 'true'; +}; + +L.Util.setFromQueryString = function (options, name) { + var value = L.Util.queryString(name); + if (typeof value !== 'undefined') options[name] = value; +}; + +L.Util.setBooleanFromQueryString = function (options, name) { + var value = L.Util.queryString(name); + if (typeof value !== 'undefined') options[name] = value == '1' || value == 'true'; +}; +L.Util.setNullableBooleanFromQueryString = function (options, name) { + var value = L.Util.queryString(name); + if (typeof value !== 'undefined') { + if (value === 'null') value = null; + else if (value === '0' || value === 'false') value = false; + else value = true; + options[name] = value; + } +}; +L.Util.escapeHTML = function (s) { + s = s? s.toString() : ''; + return s.replace(/$1'); + r = r.replace(/^## (.*)/gm, '

$1

'); + r = r.replace(/^# (.*)/gm, '

$1

'); + r = r.replace(/^---/gm, '
'); + + // bold, italics + r = r.replace(/\*\*(.*?)\*\*/g, '$1'); + r = r.replace(/\*(.*?)\*/g, '$1'); + + // unordered lists + r = r.replace(/^\*\* (.*)/gm, '
    • $1
'); + r = r.replace(/^\* (.*)/gm, '
  • $1
'); + for (ii = 0; ii < 3; ii++) r = r.replace(new RegExp('' + newline + '
    ', 'g'), newline); + + // links + r = r.replace(/(\[\[http)/g, '[[h_t_t_p'); // Escape for avoiding clash between [[http://xxx]] and http://xxx + r = r.replace(/({{http)/g, '{{h_t_t_p'); + r = r.replace(/(https?:[^ \<)\n]*)/g, '$1'); + r = r.replace(/\[\[(h_t_t_ps?:[^\]|]*?)\]\]/g, '$1'); + r = r.replace(/\[\[(h_t_t_ps?:[^|]*?)\|(.*?)\]\]/g, '$2'); + r = r.replace(/\[\[([^\]|]*?)\]\]/g, '$1'); + r = r.replace(/\[\[([^|]*?)\|(.*?)\]\]/g, '$2'); + + // iframe + r = r.replace(/{{{(h_t_t_ps?[^ |]*)}}}/g, ''); + r = r.replace(/{{{(h_t_t_ps?[^ |]*)\|(\d*)(px)?}}}/g, ''); + r = r.replace(/{{{(h_t_t_ps?[^ |]*)\|(\d*)(px)?\*(\d*)(px)?}}}/g, ''); + + // images + r = r.replace(/{{([^\]|]*?)}}/g, ''); + r = r.replace(/{{([^|]*?)\|(\d*?)}}/g, ''); + + //Unescape http + r = r.replace(/(h_t_t_p)/g, 'http'); + + // Preserver line breaks + if (newline) r = r.replace(new RegExp(newline + '(?=[^]+)', 'g'), '
    ' + newline); + + return r; +}; +L.Util.isObject = function (what) { + return typeof what === 'object' && what !== null; +}; +L.Util.CopyJSON = function (geojson) { + return JSON.parse(JSON.stringify(geojson)); +}; +L.Util.detectFileType = function (f) { + var filename = f.name ? escape(f.name.toLowerCase()) : ''; + function ext(_) { + return filename.indexOf(_) !== -1; + } + if (f.type === 'application/vnd.google-earth.kml+xml' || ext('.kml')) { + return 'kml'; + } + if (ext('.gpx')) return 'gpx'; + if (ext('.geojson') || ext('.json')) return 'geojson'; + if (f.type === 'text/csv' || ext('.csv') || ext('.tsv') || ext('.dsv')) { + return 'csv'; + } + if (ext('.xml') || ext('.osm')) return 'osm'; + if (ext('.umap')) return 'umap'; +}; + +L.Util.usableOption = function (options, option) { + return typeof options[option] !== 'undefined' && options[option] !== '' && options[option] !== null; +}; + +L.Util.greedyTemplate = function (str, data, ignore) { + // Don't throw error if some key is missing + return str.replace(/\{ *([\w_\:]+) *\}/g, function (str, key) { + var value = data[key]; + if (value === undefined) { + if (ignore) value = str; + else value = ''; + } + return value; + }); +}; + +L.Util.sortFeatures = function (features, sortKey) { + var sortKeys = (sortKey || 'name').split(','); + + var sort = function (a, b, i) { + var sortKey = sortKeys[i], score, + valA = a.properties[sortKey] || '', + valB = b.properties[sortKey] || ''; + if (!valA) { + score = -1; + } else if (!valB) { + score = 1; + } else { + score = valA.toString().toLowerCase().localeCompare(valB.toString().toLowerCase()); + } + if (score === 0 && sortKeys[i + 1]) return sort(a, b, i + 1); + return score; + }; + + features.sort(function (a, b) { + if (!a.properties || !b.properties) { + return 0; + } + return sort(a, b, 0); + }); + + + return features; +}; + +L.Util.flattenCoordinates = function (coords) { + while (coords[0] && typeof coords[0][0] !== 'number') coords = coords[0]; + return coords; +}; + +L.DomUtil.add = function (tagName, className, container, content) { + var el = L.DomUtil.create(tagName, className, container); + if (content) { + if (content.nodeType && content.nodeType === 1) { + el.appendChild(content); + } + else { + el.innerHTML = content; + } + } + return el; +}; + +L.DomUtil.createFieldset = function (container, legend, options) { + options = options || {}; + var fieldset = L.DomUtil.create('div', 'fieldset toggle', container); + var legendEl = L.DomUtil.add('h5', 'legend style_options_toggle', fieldset, legend); + var fieldsEl = L.DomUtil.add('div', 'fields with-transition', fieldset); + L.DomEvent.on(legendEl, 'click', function () { + if (L.DomUtil.hasClass(fieldset, 'on')) { + L.DomUtil.removeClass(fieldset, 'on'); + } else { + L.DomUtil.addClass(fieldset, 'on'); + if (options.callback) options.callback.call(options.context || this); + } + }); + return fieldsEl; +}; + +L.DomUtil.classIf = function (el, className, bool) { + if (bool) L.DomUtil.addClass(el, className); + else L.DomUtil.removeClass(el, className); +}; + + +L.DomUtil.element = function (what, attrs, parent) { + var el = document.createElement(what); + for (var attr in attrs) { + el[attr] = attrs[attr]; + } + if (typeof parent !== 'undefined') { + parent.appendChild(el); + } + return el; +}; + + +L.DomUtil.before = function (target, el) { + target.parentNode.insertBefore(el, target); + return el; +}; + +L.DomUtil.after = function (target, el) +{ + target.parentNode.insertBefore(el, target.nextSibling); + return el; +}; + +L.DomUtil.RGBRegex = /rgb *\( *([0-9]{1,3}) *, *([0-9]{1,3}) *, *([0-9]{1,3}) *\)/; + +L.DomUtil.TextColorFromBackgroundColor = function (el) { + var out = '#000000'; + if (!window.getComputedStyle) {return out;} + var rgb = window.getComputedStyle(el).getPropertyValue('background-color'); + rgb = L.DomUtil.RGBRegex.exec(rgb); + if (!rgb || rgb.length !== 4) {return out;} + rgb = parseInt(rgb[1], 10) + parseInt(rgb[2], 10) + parseInt(rgb[3], 10); + if (rgb < (255 * 3 / 2)) { + out = '#ffffff'; + } + return out; +}; +L.DomEvent.once = function (el, types, fn, context) { + // cf https://github.com/Leaflet/Leaflet/pull/3528#issuecomment-134551575 + + if (typeof types === 'object') { + for (var type in types) { + L.DomEvent.once(el, type, types[type], fn); + } + return L.DomEvent; + } + + var handler = L.bind(function () { + L.DomEvent + .off(el, types, fn, context) + .off(el, types, handler, context); + }, L.DomEvent); + + // add a listener that's executed once and removed after that + return L.DomEvent + .on(el, types, fn, context) + .on(el, types, handler, context); +}; + + +/* +* Global events +*/ +L.S.Keys = { + LEFT: 37, + UP: 38, + RIGHT: 39, + DOWN: 40, + TAB: 9, + ENTER: 13, + ESC: 27, + APPLE: 91, + SHIFT: 16, + ALT: 17, + CTRL: 18, + E: 69, + F: 70, + H: 72, + I: 73, + L: 76, + M: 77, + P: 80, + S: 83, + Z: 90 +}; + + +L.Storage.Help = L.Class.extend({ + + initialize: function (map) { + this.map = map; + this.box = L.DomUtil.create('div', 'storage-help-box with-transition dark', document.body); + var closeLink = L.DomUtil.create('a', 'storage-close-link', this.box); + closeLink.href = '#'; + L.DomUtil.add('i', 'storage-close-icon', closeLink); + var label = L.DomUtil.create('span', '', closeLink); + label.title = label.innerHTML = L._('Close'); + this.content = L.DomUtil.create('div', 'storage-help-content', this.box); + L.DomEvent.on(closeLink, 'click', this.hide, this); + }, + + onKeyDown: function (e) { + var key = e.keyCode, + ESC = 27; + if (key === ESC) { + this.hide(); + } + }, + + show: function () { + this.content.innerHTML = ''; + for (var i = 0, name; i < arguments.length; i++) { + name = arguments[i]; + L.DomUtil.add('div', 'storage-help-entry', this.content, this.resolve(name)); + } + L.DomUtil.addClass(document.body, 'storage-help-on'); + }, + + hide: function () { + L.DomUtil.removeClass(document.body, 'storage-help-on'); + }, + + visible: function () { + return L.DomUtil.hasClass(document.body, 'storage-help-on') + }, + + resolve: function (name) { + return typeof this[name] === 'function' ? this[name]() : this[name]; + }, + + button: function (container, entries) { + var helpButton = L.DomUtil.create('a', 'storage-help-button', container); + helpButton.href = '#'; + if (entries) { + L.DomEvent + .on(helpButton, 'click', L.DomEvent.stop) + .on(helpButton, 'click', function (e) { + var args = typeof entries === 'string' ? [entries] : entries; + this.show.apply(this, args); + }, this); + } + return helpButton; + }, + + edit: function () { + var container = L.DomUtil.create('div', ''), + self = this, + title = L.DomUtil.create('h3', '', container), + actionsContainer = L.DomUtil.create('ul', 'storage-edit-actions', container); + var addAction = function (action) { + var actionContainer = L.DomUtil.add('li', '', actionsContainer); + L.DomUtil.add('i', action.options.className, actionContainer), + L.DomUtil.add('span', '', actionContainer, action.options.tooltip); + L.DomEvent.on(actionContainer, 'click', action.addHooks, action); + L.DomEvent.on(actionContainer, 'click', self.hide, self); + }; + title.innerHTML = L._('Where do we go from here?'); + for (var id in this.map.helpMenuActions) { + addAction(this.map.helpMenuActions[id]); + } + return container; + }, + + importFormats: function () { + var container = L.DomUtil.create('div'); + L.DomUtil.add('h3', '', container, 'GeojSON'); + L.DomUtil.add('p', '', container, L._('All properties are imported.')); + L.DomUtil.add('h3', '', container, 'GPX'); + L.DomUtil.add('p', '', container, L._('Properties imported:') + 'name, desc'); + L.DomUtil.add('h3', '', container, 'KML'); + L.DomUtil.add('p', '', container, L._('Properties imported:') + 'name, description'); + L.DomUtil.add('h3', '', container, 'CSV'); + L.DomUtil.add('p', '', container, L._('Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.')); + L.DomUtil.add('h3', '', container, 'uMap'); + L.DomUtil.add('p', '', container, L._('Imports all umap data, including layers and settings.')); + return container; + }, + + textFormatting: function () { + var container = L.DomUtil.create('div'), + title = L.DomUtil.add('h3', '', container, L._('Text formatting')), + elements = L.DomUtil.create('ul', '', container); + L.DomUtil.add('li', '', elements, L._('*simple star for italic*')); + L.DomUtil.add('li', '', elements, L._('**double star for bold**')); + L.DomUtil.add('li', '', elements, L._('# one hash for main heading')); + L.DomUtil.add('li', '', elements, L._('## two hashes for second heading')); + L.DomUtil.add('li', '', elements, L._('### three hashes for third heading')); + L.DomUtil.add('li', '', elements, L._('Simple link: [[http://example.com]]')); + L.DomUtil.add('li', '', elements, L._('Link with text: [[http://example.com|text of the link]]')); + L.DomUtil.add('li', '', elements, L._('Image: {{http://image.url.com}}')); + L.DomUtil.add('li', '', elements, L._('Image with custom width (in px): {{http://image.url.com|width}}')); + L.DomUtil.add('li', '', elements, L._('Iframe: {{{http://iframe.url.com}}}')); + L.DomUtil.add('li', '', elements, L._('Iframe with custom height (in px): {{{http://iframe.url.com|height}}}')); + L.DomUtil.add('li', '', elements, L._('Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}')); + L.DomUtil.add('li', '', elements, L._('--- for an horizontal rule')); + return container; + }, + + dynamicProperties: function () { + var container = L.DomUtil.create('div'); + L.DomUtil.add('h3', '', container, L._('Dynamic properties')); + L.DomUtil.add('p', '', container, L._('Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.')); + return container; + }, + + formatURL: L._('Supported variables that will be dynamically replaced') + ': {bbox}, {lat}, {lng}, {zoom}, {east}, {north}..., {left}, {top}...', + formatIconURL: L._('You can use feature properties as variables: ex.: with "http://myserver.org/images/{name}.png", the {name} variable will be replaced by the "name" value of each markers.'), + colorValue: L._('Must be a valid CSS value (eg.: DarkBlue or #123456)'), + smoothFactor: L._('How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)'), + dashArray: L._('A comma separated list of numbers that defines the stroke dash pattern. Ex.: "5, 10, 15".'), + zoomTo: L._('Zoom level for automatic zooms'), + labelKey: L._('The name of the property to use as feature label (ex.: "nom")'), + stroke: L._('Whether to display or not polygons paths.'), + fill: L._('Whether to fill polygons with color.'), + fillColor: L._('Optional. Same as color if not set.'), + shortCredit: L._('Will be displayed in the bottom right corner of the map'), + longCredit: L._('Will be visible in the caption of the map'), + sortKey: L._('Property to use for sorting features'), + filterKey: L._('Comma separated list of properties to use when filtering features'), + interactive: L._('If false, the polygon will act as a part of the underlying map.'), + outlink: L._('Define link to open in a new window on polygon click.'), + dynamicRemoteData: L._('Fetch data each time map view changes.'), + proxyRemoteData: L._('To use if remote server doesn\'t allow cross domain (slower)'), + browsable: L._('Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…') +}); + + +L.Storage.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 (var 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) { + if (e.preventDefault) e.preventDefault(); // Necessary. Allows us to drop. + e.dataTransfer.dropEffect = 'move'; + return false; + }, + + onDragEnter: function (e) { + // e.target is the current hover target. + var dst = this.findTarget(e.target); + if (!dst || dst === this.src) return; + this.dst = dst; + var 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; + } + +}); diff --git a/umap/static/umap/js/umap.features.js b/umap/static/umap/js/umap.features.js new file mode 100644 index 00000000..acbdb314 --- /dev/null +++ b/umap/static/umap/js/umap.features.js @@ -0,0 +1,1024 @@ +L.Storage.FeatureMixin = { + + staticOptions: {}, + + initialize: function (map, latlng, options) { + this.map = map; + if(typeof options === 'undefined') { + options = {}; + } + // DataLayer the marker belongs to + this.datalayer = options.datalayer || null; + this.properties = {_storage_options: {}}; + if (options.geojson) { + this.populate(options.geojson); + } + var isDirty = false, + self = this; + try { + Object.defineProperty(this, 'isDirty', { + get: function () { + return isDirty; + }, + set: function (status) { + if (!isDirty && status) { + self.fire('isdirty'); + } + isDirty = status; + if (self.datalayer) { + self.datalayer.isDirty = status; + } + } + }); + } + catch (e) { + // Certainly IE8, which has a limited version of defineProperty + } + this.preInit(); + this.addInteractions(); + this.parentClass.prototype.initialize.call(this, latlng, options); + }, + + preInit: function () {}, + + isReadOnly: function () { + return this.datalayer && this.datalayer.isRemoteLayer(); + }, + + view: function(e) { + if (this.map.editEnabled) return; + var outlink = this.properties._storage_options.outlink, + target = this.properties._storage_options.outlinkTarget + if (outlink) { + switch (target) { + case 'self': + window.location = outlink; + break; + case 'parent': + window.top.location = outlink; + break; + default: + var win = window.open(this.properties._storage_options.outlink); + } + return; + } + if (this.map.slideshow) this.map.slideshow.current = this; + this.attachPopup(); + this.openPopup(e && e.latlng || this.getCenter()); + }, + + openPopup: function () { + if (this.map.editEnabled) return; + this.parentClass.prototype.openPopup.apply(this, arguments); + }, + + edit: function(e) { + if(!this.map.editEnabled || this.isReadOnly()) return; + var container = L.DomUtil.create('div'); + + var builder = new L.S.FormBuilder(this, ['datalayer'], { + callback: function () {this.edit(e);} // removeLayer step will close the edit panel, let's reopen it + }); + container.appendChild(builder.build()); + + var properties = [], property; + for (var i = 0; i < this.datalayer._propertiesIndex.length; i++) { + property = this.datalayer._propertiesIndex[i]; + if (L.Util.indexOf(['name', 'description'], property) !== -1) {continue;} + properties.push(['properties.' + property, {label: property}]); + } + // We always want name and description for now (properties management to come) + properties.unshift('properties.description'); + properties.unshift('properties.name'); + builder = new L.S.FormBuilder(this, properties, + { + id: 'storage-feature-properties', + callback: this.resetTooltip + } + ); + container.appendChild(builder.build()); + this.appendEditFieldsets(container); + var advancedActions = L.DomUtil.createFieldset(container, L._('Advanced actions')); + this.getAdvancedEditActions(advancedActions); + this.map.ui.openPanel({data: {html: container}, className: 'dark'}); + this.map.editedFeature = this; + if (!this.isOnScreen()) this.bringToCenter(e); + }, + + getAdvancedEditActions: function (container) { + var deleteLink = L.DomUtil.create('a', 'button storage-delete', container); + deleteLink.href = '#'; + deleteLink.innerHTML = L._('Delete'); + L.DomEvent.on(deleteLink, 'click', function (e) { + L.DomEvent.stop(e); + if (this.confirmDelete()) this.map.ui.closePanel(); + }, this); + }, + + appendEditFieldsets: function (container) { + var optionsFields = this.getShapeOptions(); + var builder = new L.S.FormBuilder(this, optionsFields, { + id: 'storage-feature-shape-properties', + callback: this._redraw + }); + var shapeProperties = L.DomUtil.createFieldset(container, L._('Shape properties')); + shapeProperties.appendChild(builder.build()); + + var advancedOptions = this.getAdvancedOptions(); + var builder = new L.S.FormBuilder(this, advancedOptions, { + id: 'storage-feature-advanced-properties', + callback: this._redraw + }); + var advancedProperties = L.DomUtil.createFieldset(container, L._('Advanced properties')); + advancedProperties.appendChild(builder.build()); + + var interactionOptions = this.getInteractionOptions(); + builder = new L.S.FormBuilder(this, interactionOptions, { + callback: this._redraw + }); + var popupFieldset = L.DomUtil.createFieldset(container, L._('Interaction options')); + popupFieldset.appendChild(builder.build()); + + }, + + getInteractionOptions: function () { + return [ + 'properties._storage_options.popupTemplate', + 'properties._storage_options.showLabel', + 'properties._storage_options.labelDirection', + 'properties._storage_options.labelHover', + 'properties._storage_options.labelInteractive' + ]; + }, + + endEdit: function () {}, + + getDisplayName: function (fallback) { + if (fallback === undefined) fallback = this.datalayer.options.name; + var key = this.getOption('labelKey') || 'name'; + return this.properties[key] || this.properties.title || fallback; + }, + + hasPopupFooter: function () { + if (L.Browser.ielt9) return false; + if (this.datalayer.isRemoteLayer() && this.datalayer.options.remoteData.dynamic) return false; + return this.map.options.displayPopupFooter; + }, + + getPopupClass: function () { + return L.Storage.Popup[this.getOption('popupTemplate')] || L.Storage.Popup; + }, + + attachPopup: function () { + var Class = this.getPopupClass(); + this.bindPopup(new Class(this)); + }, + + confirmDelete: function () { + if (confirm(L._('Are you sure you want to delete the feature?'))) { + this.del(); + return true; + } + return false; + }, + + del: function () { + this.isDirty = true; + this.map.closePopup(); + if (this.datalayer) { + this.datalayer.removeLayer(this); + this.disconnectFromDataLayer(this.datalayer); + } + }, + + connectToDataLayer: function (datalayer) { + this.datalayer = datalayer; + this.options.renderer = this.datalayer.renderer; + }, + + disconnectFromDataLayer: function (datalayer) { + if (this.datalayer === datalayer) { + this.datalayer = null; + } + }, + + populate: function (feature) { + this.properties = L.extend({}, feature.properties); + this.properties._storage_options = L.extend({}, this.properties._storage_options); + // Retrocompat + if (this.properties._storage_options.clickable === false) { + this.properties._storage_options.interactive = false; + delete this.properties._storage_options.clickable; + } + }, + + changeDataLayer: function(datalayer) { + if(this.datalayer) { + this.datalayer.isDirty = true; + this.datalayer.removeLayer(this); + } + datalayer.addLayer(this); + datalayer.isDirty = true; + this._redraw(); + }, + + getOption: function (option, fallback) { + var value = fallback || null; + if (typeof this.staticOptions[option] !== 'undefined') { + value = this.staticOptions[option]; + } + else if (L.Util.usableOption(this.properties._storage_options, option)) { + value = this.properties._storage_options[option]; + } + else if (this.datalayer) { + value = this.datalayer.getOption(option); + } + else { + value = this.map.getOption(option); + } + return value; + }, + + bringToCenter: function (e) { + e = e || {}; + var latlng = e.latlng || this.getCenter(); + this.map.setView(latlng, e.zoomTo || this.map.getZoom()); + if (e.callback) e.callback.call(this); + }, + + zoomTo: function (e) { + e = e || {}; + var easing = e.easing !== undefined ? e.easing : this.map.options.easing; + if (easing) this.flyTo(); + else this.bringToCenter({zoomTo: this.getBestZoom(), callback: e.callback}); + }, + + getBestZoom: function () { + return this.getOption('zoomTo'); + }, + + flyTo: function () { + this.map.flyTo(this.getCenter(), this.getBestZoom()); + }, + + getNext: function () { + return this.datalayer.getNextFeature(this); + }, + + getPrevious: function () { + return this.datalayer.getPreviousFeature(this); + }, + + cloneProperties: function () { + var properties = L.extend({}, this.properties); + properties._storage_options = L.extend({}, properties._storage_options); + if (Object.keys && Object.keys(properties._storage_options).length === 0) { + delete properties._storage_options; // It can make a difference on big data sets + } + return properties; + }, + + deleteProperty: function (property) { + delete this.properties[property]; + this.makeDirty(); + }, + + renameProperty: function (from, to) { + this.properties[to] = this.properties[from]; + this.deleteProperty(from); + }, + + toGeoJSON: function () { + var geojson = this.parentClass.prototype.toGeoJSON.call(this); + geojson.properties = this.cloneProperties(); + return geojson; + }, + + addInteractions: function () { + this.on('contextmenu editable:vertex:contextmenu', this._showContextMenu, this); + this.on('click', this._onClick); + }, + + _onClick: function (e) { + if (this.map.measureTools && this.map.measureTools.enabled()) return; + this._popupHandlersAdded = true; // Prevent leaflet from managing event + if(!this.map.editEnabled) { + this.view(e); + } else if (!this.isReadOnly()) { + if(e.originalEvent.shiftKey) { + if(this._toggleEditing) + this._toggleEditing(e); + else + this.edit(e); + } + else { + new L.Toolbar.Popup(e.latlng, { + className: 'leaflet-inplace-toolbar', + anchor: this.getPopupToolbarAnchor(), + actions: this.getInplaceToolbarActions(e) + }).addTo(this.map, this, e.latlng); + } + } + L.DomEvent.stop(e); + }, + + getPopupToolbarAnchor: function () { + return [0, 0]; + }, + + getInplaceToolbarActions: function (e) { + return [L.S.ToggleEditAction, L.S.DeleteFeatureAction]; + }, + + _showContextMenu: function (e) { + L.DomEvent.stop(e); + var pt = this.map.mouseEventToContainerPoint(e.originalEvent); + e.relatedTarget = this; + this.map.contextmenu.showAt(pt, e); + }, + + makeDirty: function () { + this.isDirty = true; + }, + + getMap: function () { + return this.map; + }, + + getContextMenuItems: function (e) { + var items = []; + if (this.map.editEnabled && !this.isReadOnly()) { + items = items.concat(this.getContextMenuEditItems(e)); + } + return items; + }, + + getContextMenuEditItems: function () { + var items = ['-']; + if (this.map.editedFeature !== this) { + items.push( + { + text: L._('Edit this feature'), + callback: this.edit, + context: this, + iconCls: 'storage-edit' + } + ); + } + items = items.concat( + { + text: L._('Edit feature\'s layer'), + callback: this.datalayer.edit, + context: this.datalayer, + iconCls: 'storage-edit' + }, + { + text: L._('Delete this feature'), + callback: this.confirmDelete, + context: this, + iconCls: 'storage-delete' + } + ); + return items; + }, + + onRemove: function (map) { + this.parentClass.prototype.onRemove.call(this, map); + if (this.map.editedFeature === this) { + this.endEdit(); + this.map.ui.closePanel(); + } + }, + + resetTooltip: function () { + var displayName = this.getDisplayName(null), + options = { + permanent: !this.getOption('labelHover'), + direction: this.getOption('labelDirection'), + interactive: this.getOption('labelInteractive') + }; + this.unbindTooltip(); + if (this.getOption('showLabel') && displayName) this.bindTooltip(L.Util.escapeHTML(displayName), options); + }, + + matchFilter: function (filter, keys) { + filter = filter.toLowerCase(); + for (var i = 0; i < keys.length; i++) { + if ((this.properties[keys[i]] || '').toLowerCase().indexOf(filter) !== -1) return true; + } + return false; + }, + + onVertexRawClick: function (e) { + new L.Toolbar.Popup(e.latlng, { + className: 'leaflet-inplace-toolbar', + actions: this.getVertexActions(e) + }).addTo(this.map, this, e.latlng, e.vertex); + }, + + getVertexActions: function () { + return [L.S.DeleteVertexAction]; + }, + + isMulti: function () { + return false; + } + +}; + +L.Storage.Marker = L.Marker.extend({ + parentClass: L.Marker, + includes: [L.Storage.FeatureMixin, L.Mixin.Events], + + preInit: function () { + this.setIcon(this.getIcon()); + }, + + addInteractions: function () { + L.Storage.FeatureMixin.addInteractions.call(this); + this.on('dragend', function (e) { + this.isDirty = true; + this.edit(e); + }, this); + if (!this.isReadOnly()) this.on('mouseover', this._enableDragging); + this.on('mouseout', this._onMouseOut); + this._popupHandlersAdded = true; // prevent Leaflet from binding event on bindPopup + }, + + _onMouseOut: function () { + if(this.dragging && this.dragging._draggable && !this.dragging._draggable._moving) { + // Do not disable if the mouse went out while dragging + this._disableDragging(); + } + }, + + _enableDragging: function () { + // TODO: start dragging after 1 second on mouse down + if(this.map.editEnabled) { + if (!this.editEnabled()) this.enableEdit(); + // Enabling dragging on the marker override the Draggable._OnDown + // event, which, as it stopPropagation, refrain the call of + // _onDown with map-pane element, which is responsible to + // set the _moved to false, and thus to enable the click. + // We should find a cleaner way to handle this. + this.map.dragging._draggable._moved = false; + } + }, + + _disableDragging: function () { + if(this.map.editEnabled) { + if (this.editor && this.editor.drawing) return; // when creating a new marker, the mouse can trigger the mouseover/mouseout event + // do not listen to them + this.disableEdit(); + } + }, + + _redraw: function() { + if (this.datalayer && this.datalayer.isVisible()) { + this._initIcon(); + this.update(); + } + }, + + _initIcon: function () { + this.options.icon = this.getIcon(); + L.Marker.prototype._initIcon.call(this); + this.resetTooltip(); + }, + + disconnectFromDataLayer: function (datalayer) { + this.options.icon.datalayer = null; + L.Storage.FeatureMixin.disconnectFromDataLayer.call(this, datalayer); + }, + + _getIconUrl: function (name) { + if (typeof name === 'undefined') name = 'icon'; + return this.getOption(name + 'Url'); + }, + + getIconClass: function () { + return this.getOption('iconClass'); + }, + + getIcon: function () { + var Class = L.Storage.Icon[this.getIconClass()] || L.Storage.Icon.Default; + return new Class(this.map, {feature: this}); + }, + + getCenter: function () { + return this._latlng; + }, + + getClassName: function () { + return 'marker'; + }, + + getShapeOptions: function () { + return [ + 'properties._storage_options.color', + 'properties._storage_options.iconClass', + 'properties._storage_options.iconUrl' + ]; + }, + + getAdvancedOptions: function () { + return [ + 'properties._storage_options.zoomTo' + ]; + }, + + appendEditFieldsets: function (container) { + L.Storage.FeatureMixin.appendEditFieldsets.call(this, container); + var coordinatesOptions = [ + ['_latlng.lat', {handler: 'FloatInput', label: L._('Latitude')}], + ['_latlng.lng', {handler: 'FloatInput', label: L._('Longitude')}] + ]; + var builder = new L.S.FormBuilder(this, coordinatesOptions, { + callback: function () { + this._redraw(); + this.bringToCenter(); + }, + callbackContext: this + }); + var fieldset = L.DomUtil.createFieldset(container, L._('Coordinates')); + fieldset.appendChild(builder.build()); + }, + + bringToCenter: function (e) { + if (this.datalayer.isClustered() && !this._icon) { + // callback is mandatory for zoomToShowLayer + this.datalayer.layer.zoomToShowLayer(this, e.callback || function (){}); + } else { + L.Storage.FeatureMixin.bringToCenter.call(this, e); + } + }, + + isOnScreen: function () { + var bounds = this.map.getBounds(); + return bounds.contains(this._latlng); + }, + + getPopupToolbarAnchor: function () { + return this.options.icon.options.popupAnchor; + } + +}); + + +L.Storage.PathMixin = { + + connectToDataLayer: function (datalayer) { + L.S.FeatureMixin.connectToDataLayer.call(this, datalayer); + // We keep markers on their own layer on top of the paths. + this.options.pane = this.datalayer.pane; + }, + + edit: function (e) { + if(this.map.editEnabled) { + if (!this.editEnabled()) this.enableEdit(); + L.Storage.FeatureMixin.edit.call(this, e); + } + }, + + _toggleEditing: function(e) { + if(this.map.editEnabled) { + if(this.editEnabled()) { + this.endEdit(); + this.map.ui.closePanel(); + } + else { + this.edit(e); + } + } + // FIXME: disable when disabling global edit + L.DomEvent.stop(e); + }, + + styleOptions: [ + 'smoothFactor', + 'color', + 'opacity', + 'stroke', + 'weight', + 'fill', + 'fillColor', + 'fillOpacity', + 'dashArray', + 'interactive' + ], + + getShapeOptions: function () { + return [ + 'properties._storage_options.color', + 'properties._storage_options.opacity', + 'properties._storage_options.weight' + ]; + }, + + getAdvancedOptions: function () { + return [ + 'properties._storage_options.smoothFactor', + 'properties._storage_options.dashArray', + 'properties._storage_options.zoomTo' + ]; + }, + + setStyle: function (options) { + options = options || {}; + var option; + for (var idx in this.styleOptions) { + option = this.styleOptions[idx]; + options[option] = this.getOption(option); + } + if (options.interactive) this.options.pointerEvents = 'visiblePainted'; + else this.options.pointerEvents = 'stroke'; + this.parentClass.prototype.setStyle.call(this, options); + }, + + _redraw: function () { + this.setStyle(); + this.resetTooltip(); + }, + + onAdd: function (map) { + this._container = null; + this.setStyle(); + // Show tooltip again when Leaflet.label allow static label on path. + // cf https://github.com/Leaflet/Leaflet/pull/3952 + // this.map.on('showmeasure', this.showMeasureTooltip, this); + // this.map.on('hidemeasure', this.removeTooltip, this); + this.parentClass.prototype.onAdd.call(this, map); + if (this.editing && this.editing.enabled()) this.editing.addHooks(); + this.resetTooltip(); + }, + + onRemove: function (map) { + // this.map.off('showmeasure', this.showMeasureTooltip, this); + // this.map.off('hidemeasure', this.removeTooltip, this); + if (this.editing && this.editing.enabled()) this.editing.removeHooks(); + L.S.FeatureMixin.onRemove.call(this, map); + }, + + getBestZoom: function () { + if (this.options.zoomTo) return this.options.zoomTo; + var bounds = this.getBounds(); + return this.map.getBoundsZoom(bounds, true); + }, + + endEdit: function () { + this.disableEdit(); + L.S.FeatureMixin.endEdit.call(this); + }, + + _onMouseOver: function () { + if (this.map.measureTools && this.map.measureTools.enabled()) { + this.map.ui.tooltip({content: this.getMeasure(), anchor: this}); + } else if (this.map.editEnabled && !this.map.editedFeature) { + this.map.ui.tooltip({content: L._('Click to edit'), anchor: this}); + } + }, + + addInteractions: function () { + L.S.FeatureMixin.addInteractions.call(this); + this.on('mouseover', this._onMouseOver); + this.on('edit', this.makeDirty); + this.on('drag editable:drag', this._onDrag); + }, + + _onDrag: function () { + if (this._tooltip) this._tooltip.setLatLng(this.getCenter()); + }, + + transferShape: function (at, to) { + var shape = this.enableEdit().deleteShapeAt(at); + this.disableEdit(); + if (!shape) return; + to.enableEdit().appendShape(shape); + if (!this._latlngs.length || !this._latlngs[0].length) this.del(); + }, + + isolateShape: function (at) { + if (!this.isMulti()) return; + var shape = this.enableEdit().deleteShapeAt(at); + this.disableEdit(); + if (!shape) return; + var properties = this.cloneProperties(); + var other = new (this instanceof L.S.Polyline ? L.S.Polyline : L.S.Polygon)(this.map, shape, {geojson: {properties: properties}}); + this.datalayer.addLayer(other); + other.edit(); + return other; + }, + + getContextMenuItems: function (e) { + var items = L.S.FeatureMixin.getContextMenuItems.call(this, e); + items.push({ + text: L._('Display measure'), + callback: function () { + this.map.ui.alert({content: this.getMeasure(), level: 'info'}) + }, + context: this + }) + if (this.map.editEnabled && !this.isReadOnly() && this.isMulti()) { + items = items.concat(this.getContextMenuMultiItems(e)); + } + return items; + }, + + getContextMenuMultiItems: function (e) { + var items = ['-', { + text: L._('Remove shape from the multi'), + callback: function () { + this.enableEdit().deleteShapeAt(e.latlng); + }, + context: this + }]; + var shape = this.shapeAt(e.latlng); + if (this._latlngs.indexOf(shape) > 0) { + items.push({ + text: L._('Make main shape'), + callback: function () { + this.enableEdit().deleteShape(shape); + this.editor.prependShape(shape); + }, + context: this + }); + } + return items; + }, + + getContextMenuEditItems: function (e) { + var items = L.S.FeatureMixin.getContextMenuEditItems.call(this, e); + items.push({ + text: L._('Clone this feature'), + callback: this.clone, + context: this + }); + if (this.map.editedFeature && this.isSameClass(this.map.editedFeature) && this.map.editedFeature !== this) { + items.push({ + text: L._('Transfer shape to edited feature'), + callback: function () { + this.transferShape(e.latlng, this.map.editedFeature); + }, + context: this + }); + } + if (this.isMulti()) { + items.push({ + text: L._('Extract shape to separate feature'), + callback: function () { + this.isolateShape(e.latlng, this.map.editedFeature); + }, + context: this + }); + } + return items; + }, + + getInplaceToolbarActions: function (e) { + var items = L.S.FeatureMixin.getInplaceToolbarActions.call(this, e); + if (this.isMulti()) { + items.push(L.S.DeleteShapeAction); + items.push(L.S.ExtractShapeFromMultiAction); + } + return items; + }, + + isOnScreen: function () { + var bounds = this.map.getBounds(); + return bounds.overlaps(this.getBounds()); + }, + + clone: function () { + var layer = this.datalayer.geojsonToFeatures(this.toGeoJSON()); + layer.isDirty = true; + layer.edit(); + return layer; + }, + +}; + +L.Storage.Polyline = L.Polyline.extend({ + parentClass: L.Polyline, + includes: [L.Storage.FeatureMixin, L.Storage.PathMixin, L.Mixin.Events], + + staticOptions: { + stroke: true, + fill: false + }, + + isSameClass: function (other) { + return other instanceof L.S.Polyline; + }, + + getClassName: function () { + return 'polyline'; + }, + + getMeasure: function () { + var length = L.GeoUtil.lineLength(this.map, this._defaultShape()); + return L.GeoUtil.readableDistance(length, this.map.measureTools.getMeasureUnit()); + }, + + getContextMenuEditItems: function (e) { + var items = L.S.PathMixin.getContextMenuEditItems.call(this, e), + vertexClicked = e.vertex, index; + if (!this.isMulti()) { + items.push({ + text: L._('Transform to polygon'), + callback: this.toPolygon, + context: this + }); + } + if (vertexClicked) { + index = e.vertex.getIndex(); + if (index !== 0 && index !== e.vertex.getLastIndex()) { + items.push({ + text: L._('Split line'), + callback: e.vertex.split, + context: e.vertex + }); + } else if (index === 0 || index === e.vertex.getLastIndex()) { + items.push({ + text: L._('Continue line (Ctrl-click)'), + callback: e.vertex.continue, + context: e.vertex.continue + }); + } + } + return items; + }, + + getContextMenuMultiItems: function (e) { + var items = L.S.PathMixin.getContextMenuMultiItems.call(this, e); + items.push({ + text: L._('Merge lines'), + callback: this.mergeShapes, + context: this + }); + return items; + }, + + toPolygon: function () { + var geojson = this.toGeoJSON(); + geojson.geometry.type = 'Polygon'; + geojson.geometry.coordinates = [L.Util.flattenCoordinates(geojson.geometry.coordinates)]; + var polygon = this.datalayer.geojsonToFeatures(geojson); + polygon.edit(); + this.del(); + }, + + getAdvancedEditActions: function (container) { + L.Storage.FeatureMixin.getAdvancedEditActions.call(this, container); + var toPolygon = L.DomUtil.create('a', 'button storage-to-polygon', container); + toPolygon.href = '#'; + toPolygon.innerHTML = L._('Transform to polygon'); + L.DomEvent.on(toPolygon, 'click', this.toPolygon, this); + }, + + _mergeShapes: function (from, to) { + var toLeft = to[0], + toRight = to[to.length - 1], + fromLeft = from[0], + fromRight = from[from.length - 1], + l2ldistance = toLeft.distanceTo(fromLeft), + l2rdistance = toLeft.distanceTo(fromRight), + r2ldistance = toRight.distanceTo(fromLeft), + r2rdistance = toRight.distanceTo(fromRight), + toMerge; + if (l2rdistance < Math.min(l2ldistance, r2ldistance, r2rdistance)) { + toMerge = [from, to]; + } else if (r2ldistance < Math.min(l2ldistance, l2rdistance, r2rdistance)) { + toMerge = [to, from]; + } else if (r2rdistance < Math.min(l2ldistance, l2rdistance, r2ldistance)) { + from.reverse(); + toMerge = [to, from]; + } else { + from.reverse(); + toMerge = [from, to]; + } + var a = toMerge[0], + b = toMerge[1], + p1 = this.map.latLngToContainerPoint(a[a.length - 1]), + p2 = this.map.latLngToContainerPoint(b[0]), + tolerance = 5; // px on screen + if (Math.abs(p1.x - p2.x) <= tolerance && Math.abs(p1.y - p2.y) <= tolerance) { + a.pop(); + } + return a.concat(b); + }, + + mergeShapes: function () { + if (!this.isMulti()) return; + var latlngs = this.getLatLngs(); + if (!latlngs.length) return; + while (latlngs.length > 1) { + latlngs.splice(0, 2, this._mergeShapes(latlngs[1], latlngs[0])); + } + this.setLatLngs(latlngs[0]); + if (!this.editEnabled()) this.edit(); + this.editor.reset(); + this.isDirty = true; + }, + + isMulti: function () { + return !L.LineUtil.isFlat(this._latlngs) && this._latlngs.length > 1; + }, + + getVertexActions: function (e) { + var actions = L.S.FeatureMixin.getVertexActions.call(this, e), + index = e.vertex.getIndex(); + if (index === 0 || index === e.vertex.getLastIndex()) actions.push(L.S.ContinueLineAction); + else actions.push(L.S.SplitLineAction); + return actions; + } + +}); + +L.Storage.Polygon = L.Polygon.extend({ + parentClass: L.Polygon, + includes: [L.Storage.FeatureMixin, L.Storage.PathMixin, L.Mixin.Events], + + isSameClass: function (other) { + return other instanceof L.S.Polygon; + }, + + getClassName: function () { + return 'polygon'; + }, + + getShapeOptions: function () { + var options = L.Storage.PathMixin.getShapeOptions(); + options.push('properties._storage_options.stroke', + 'properties._storage_options.fill', + 'properties._storage_options.fillColor', + 'properties._storage_options.fillOpacity' + ); + return options; + }, + + getInteractionOptions: function () { + var options = [ + ['properties._storage_options.interactive', {handler: 'Switch', label: L._('Allow interactions'), helpEntries: 'interactive', inheritable: true}], + ['properties._storage_options.outlink', {label: L._('Link to…'), helpEntries: 'outlink', placeholder: 'http://...', inheritable: true}], + ['properties._storage_options.outlinkTarget', {handler: 'OutlinkTarget', label: L._('Open link in…'), inheritable: true}] + ]; + return options.concat(L.Storage.FeatureMixin.getInteractionOptions()); + }, + + getMeasure: function () { + var area = L.GeoUtil.geodesicArea(this._defaultShape()); + return L.GeoUtil.readableArea(area, this.map.measureTools.getMeasureUnit()); + }, + + getContextMenuEditItems: function (e) { + var items = L.S.PathMixin.getContextMenuEditItems.call(this, e), + shape = this.shapeAt(e.latlng); + // No multi and no holes. + if (shape && !this.isMulti() && (L.LineUtil.isFlat(shape) || shape.length === 1)) { + items.push({ + text: L._('Transform to lines'), + callback: this.toPolyline, + context: this + }); + } + items.push({ + text: L._('Start a hole here'), + callback: this.startHole, + context: this + }); + return items; + }, + + startHole: function (e) { + this.enableEdit().newHole(e.latlng); + }, + + toPolyline: function () { + var geojson = this.toGeoJSON(); + geojson.geometry.type = 'LineString'; + geojson.geometry.coordinates = L.Util.flattenCoordinates(geojson.geometry.coordinates); + var polyline = this.datalayer.geojsonToFeatures(geojson); + polyline.edit(); + this.del(); + }, + + getAdvancedEditActions: function (container) { + L.Storage.FeatureMixin.getAdvancedEditActions.call(this, container); + var toPolyline = L.DomUtil.create('a', 'button storage-to-polyline', container); + toPolyline.href = '#'; + toPolyline.innerHTML = L._('Transform to lines'); + L.DomEvent.on(toPolyline, 'click', this.toPolyline, this); + }, + + isMulti: function () { + // Change me when Leaflet#3279 is merged. + return !L.LineUtil.isFlat(this._latlngs) && !L.LineUtil.isFlat(this._latlngs[0]) && this._latlngs.length > 1; + }, + + getInplaceToolbarActions: function (e) { + var items = L.S.PathMixin.getInplaceToolbarActions.call(this, e); + items.push(L.S.CreateHoleAction); + return items; + } + +}); diff --git a/umap/static/umap/js/umap.forms.js b/umap/static/umap/js/umap.forms.js new file mode 100644 index 00000000..c4fb8c39 --- /dev/null +++ b/umap/static/umap/js/umap.forms.js @@ -0,0 +1,666 @@ +L.FormBuilder.Element.include({ + + getParentNode: function () { + if (this.options.wrapper) { + return L.DomUtil.create(this.options.wrapper, this.options.wrapperClass || '', this.form); + } + var className = 'formbox'; + if (this.options.inheritable) { + className += this.get(true) === undefined ? ' inheritable undefined' : ' inheritable '; + } + this.wrapper = L.DomUtil.create('div', className, this.form); + this.header = L.DomUtil.create('div', 'header', this.wrapper); + if (this.options.inheritable) { + var undefine = L.DomUtil.add('a', 'button undefine', this.header, L._('clear')); + var define = L.DomUtil.add('a', 'button define', this.header, L._('define')); + L.DomEvent.on(define, 'click', function (e) { + L.DomEvent.stop(e); + this.fetch(); + this.fire('define'); + L.DomUtil.removeClass(this.wrapper, 'undefined'); + }, this); + L.DomEvent.on(undefine, 'click', function (e) { + L.DomEvent.stop(e); + L.DomUtil.addClass(this.wrapper, 'undefined'); + this.clear(); + this.sync(); + }, this); + } + this.quickContainer = L.DomUtil.create('span', 'quick-actions show-on-defined', this.header); + this.extendedContainer = L.DomUtil.create('div', 'show-on-defined', this.wrapper); + return this.extendedContainer; + }, + + getLabelParent: function () { + return this.header; + }, + + clear: function () { + this.input.value = ''; + }, + + get: function (own) { + if (!this.options.inheritable || own) return this.builder.getter(this.field); + var path = this.field.split('.'), + key = path[path.length - 1]; + return this.obj.getOption(key); + }, + + buildLabel: function () { + if (this.options.label) { + this.label = L.DomUtil.create('label', '', this.getLabelParent()); + this.label.innerHTML = this.label.title = this.options.label; + if (this.options.helpEntries) this.builder.map.help.button(this.label, this.options.helpEntries); + else if (this.options.helpText) { + var info = L.DomUtil.create('i', 'info', this.label); + L.DomEvent.on(info, 'mouseover', function () { + this.builder.map.ui.tooltip({anchor: info, content: this.options.helpText, position: 'top'}); + }, this); + } + } + } + +}); + +L.FormBuilder.Select.include({ + + clear: function () { + this.select.value = ''; + } + +}); + +L.FormBuilder.CheckBox.include({ + + value: function () { + return L.DomUtil.hasClass(this.wrapper, 'undefined') ? undefined : this.input.checked; + }, + + clear: function () { + this.fetch(); + } + +}); + +L.FormBuilder.ColorPicker = L.FormBuilder.Input.extend({ + + colors: [ + 'Black', 'Navy', 'DarkBlue', 'MediumBlue', 'Blue', 'DarkGreen', + 'Green', 'Teal', 'DarkCyan', 'DeepSkyBlue', 'DarkTurquoise', + 'MediumSpringGreen', 'Lime', 'SpringGreen', 'Aqua', 'Cyan', + 'MidnightBlue', 'DodgerBlue', 'LightSeaGreen', 'ForestGreen', + 'SeaGreen', 'DarkSlateGray', 'DarkSlateGrey', 'LimeGreen', + 'MediumSeaGreen', 'Turquoise', 'RoyalBlue', 'SteelBlue', + 'DarkSlateBlue', 'MediumTurquoise', 'Indigo', 'DarkOliveGreen', + 'CadetBlue', 'CornflowerBlue', 'MediumAquaMarine', 'DimGray', + 'DimGrey', 'SlateBlue', 'OliveDrab', 'SlateGray', 'SlateGrey', + 'LightSlateGray', 'LightSlateGrey', 'MediumSlateBlue', 'LawnGreen', + 'Chartreuse', 'Aquamarine', 'Maroon', 'Purple', 'Olive', 'Gray', + 'Grey', 'SkyBlue', 'LightSkyBlue', 'BlueViolet', 'DarkRed', + 'DarkMagenta', 'SaddleBrown', 'DarkSeaGreen', 'LightGreen', + 'MediumPurple', 'DarkViolet', 'PaleGreen', 'DarkOrchid', + 'YellowGreen', 'Sienna', 'Brown', 'DarkGray', 'DarkGrey', + 'LightBlue', 'GreenYellow', 'PaleTurquoise', 'LightSteelBlue', + 'PowderBlue', 'FireBrick', 'DarkGoldenRod', 'MediumOrchid', + 'RosyBrown', 'DarkKhaki', 'Silver', 'MediumVioletRed', 'IndianRed', + 'Peru', 'Chocolate', 'Tan', 'LightGray', 'LightGrey', 'Thistle', + 'Orchid', 'GoldenRod', 'PaleVioletRed', 'Crimson', 'Gainsboro', + 'Plum', 'BurlyWood', 'LightCyan', 'Lavender', 'DarkSalmon', + 'Violet', 'PaleGoldenRod', 'LightCoral', 'Khaki', 'AliceBlue', + 'HoneyDew', 'Azure', 'SandyBrown', 'Wheat', 'Beige', 'WhiteSmoke', + 'MintCream', 'GhostWhite', 'Salmon', 'AntiqueWhite', 'Linen', + 'LightGoldenRodYellow', 'OldLace', 'Red', 'Fuchsia', 'Magenta', + 'DeepPink', 'OrangeRed', 'Tomato', 'HotPink', 'Coral', 'DarkOrange', + 'LightSalmon', 'Orange', 'LightPink', 'Pink', 'Gold', 'PeachPuff', + 'NavajoWhite', 'Moccasin', 'Bisque', 'MistyRose', 'BlanchedAlmond', + 'PapayaWhip', 'LavenderBlush', 'SeaShell', 'Cornsilk', + 'LemonChiffon', 'FloralWhite', 'Snow', 'Yellow', 'LightYellow', + 'Ivory', 'White' + ], + + getParentNode: function () { + L.FormBuilder.CheckBox.prototype.getParentNode.call(this); + return this.quickContainer; + }, + + build: function () { + L.FormBuilder.Input.prototype.build.call(this); + this.input.placeholder = this.options.placeholder || L._('Inherit'); + this.container = L.DomUtil.create('div', 'storage-color-picker', this.extendedContainer); + this.container.style.display = 'none'; + for (var idx in this.colors) { + this.addColor(this.colors[idx]); + } + this.spreadColor(); + this.input.autocomplete = 'off'; + L.DomEvent.on(this.input, 'focus', this.onFocus, this); + L.DomEvent.on(this.input, 'blur', this.onBlur, this); + L.DomEvent.on(this.input, 'change', this.sync, this); + this.on('define', this.onFocus); + }, + + onFocus: function () { + this.container.style.display = 'block'; + this.spreadColor(); + }, + + onBlur: function () { + var self = this, + closePicker = function () { + self.container.style.display = 'none'; + }; + // We must leave time for the click to be listened. + window.setTimeout(closePicker, 100); + }, + + sync: function () { + this.spreadColor(); + L.FormBuilder.Input.prototype.sync.call(this); + }, + + spreadColor: function () { + if (this.input.value) this.input.style.backgroundColor = this.input.value; + else this.input.style.backgroundColor = 'inherit'; + }, + + addColor: function (colorName) { + var span = L.DomUtil.create('span', '', this.container); + span.style.backgroundColor = span.title = colorName; + var updateColorInput = function () { + this.input.value = colorName; + this.sync(); + this.container.style.display = 'none'; + }; + L.DomEvent.on(span, 'mousedown', updateColorInput, this); + } + +}); + +L.FormBuilder.TextColorPicker = L.FormBuilder.ColorPicker.extend({ + colors: [ + 'Black', 'DarkSlateGrey', 'DimGrey', 'SlateGrey', 'LightSlateGrey', + 'Grey', 'DarkGrey', 'LightGrey', 'White' + ] + +}); + +L.FormBuilder.IconClassSwitcher = L.FormBuilder.Select.extend({ + + selectOptions: [ + ['Default', L._('Default')], + ['Circle', L._('Circle')], + ['Drop', L._('Drop')], + ['Ball', L._('Ball')] + ] + +}); + +L.FormBuilder.PopupTemplate = L.FormBuilder.Select.extend({ + + selectOptions: [ + ['Default', L._('Name and description')], + ['Large', L._('Name and description (large)')], + ['Table', L._('Table')], + ['GeoRSSImage', L._('GeoRSS (title + image)')], + ['GeoRSSLink', L._('GeoRSS (only link)')], + ['SimplePanel', L._('Side panel')] + ], + + toJS: function () { + var value = L.FormBuilder.Select.prototype.toJS.apply(this); + if (value === 'table') { value = 'Table'; } + return value; + } + +}); + +L.FormBuilder.LayerTypeChooser = L.FormBuilder.Select.extend({ + + selectOptions: [ + ['Default', L._('Default')], + ['Cluster', L._('Clustered')], + ['Heat', L._('Heatmap')] + ] + +}); + +L.FormBuilder.SlideshowDelay = L.FormBuilder.IntSelect.extend({ + + getOptions: function () { + var options = []; + for (var i = 1; i < 30; i++) { + options.push([i * 1000, L._('{delay} seconds', {delay: i})]); + } + return options; + } + +}); + +L.FormBuilder.DataLayerSwitcher = L.FormBuilder.Select.extend({ + + getOptions: function () { + var options = []; + this.builder.map.eachDataLayerReverse(function (datalayer) { + if(datalayer.isLoaded() && !datalayer.isRemoteLayer() && datalayer.canBrowse()) { + options.push([L.stamp(datalayer), datalayer.getName()]); + } + }); + return options; + }, + + toHTML: function () { + return L.stamp(this.obj.datalayer); + }, + + toJS: function () { + return this.builder.map.datalayers[this.value()]; + }, + + set: function () { + this.builder.map.lastUsedDataLayer = this.toJS(); + this.obj.changeDataLayer(this.toJS()); + } + +}); + +L.FormBuilder.onLoadPanel = L.FormBuilder.Select.extend({ + + selectOptions: [ + ['none', L._('None')], + ['caption', L._('Caption')], + ['databrowser', L._('Data browser')] + ] + +}); + +L.FormBuilder.DataFormat = L.FormBuilder.Select.extend({ + + selectOptions: [ + [undefined, L._('Choose the data format')], + ['geojson', 'geojson'], + ['osm', 'osm'], + ['csv', 'csv'], + ['gpx', 'gpx'], + ['kml', 'kml'], + ['georss', 'georss'] + ] + +}); + +L.FormBuilder.LabelDirection = L.FormBuilder.Select.extend({ + + selectOptions: [ + ['auto', L._('Automatic')], + ['left', L._('On the left')], + ['right', L._('On the right')], + ['top', L._('On the top')], + ['bottom', L._('On the bottom')] + ] + +}); + +L.FormBuilder.LicenceChooser = L.FormBuilder.Select.extend({ + + getOptions: function () { + var licences = [], + licencesList = this.builder.obj.options.licences, + licence; + for (var i in licencesList) { + licence = licencesList[i]; + licences.push([i, licence.name]); + } + return licences; + }, + + toHTML: function () { + return this.get().name; + }, + + toJS: function () { + return this.builder.obj.options.licences[this.value()]; + } + +}); + +L.FormBuilder.NullableBoolean = L.FormBuilder.Select.extend({ + selectOptions: [ + [undefined, L._('inherit')], + [true, L._('yes')], + [false, L._('no')] + ], + + toJS: function () { + var value = this.value(); + switch (value) { + case 'true': + case true: + value = true; + break; + case 'false': + case false: + value = false; + break; + default: + value = undefined; + } + return value; + } + +}); + +L.FormBuilder.IconUrl = L.FormBuilder.Input.extend({ + + type: function () { + return 'hidden'; + }, + + build: function () { + L.FormBuilder.Input.prototype.build.call(this); + this.parentContainer = L.DomUtil.create('div', 'storage-form-iconfield', this.parentNode); + this.buttonsContainer = L.DomUtil.create('div', '', this.parentContainer); + this.pictogramsContainer = L.DomUtil.create('div', 'storage-pictogram-list', this.parentContainer); + this.input.type = 'hidden'; + this.input.placeholder = L._('Url'); + this.udpatePreview(); + this.on('define', this.fetchIconList); + }, + + udpatePreview: function () { + if (this.value() && this.value().indexOf('{') === -1) { // Do not try to render URL with variables + var img = L.DomUtil.create('img', '', L.DomUtil.create('div', 'storage-icon-choice', this.buttonsContainer)); + img.src = this.value(); + L.DomEvent.on(img, 'click', this.fetchIconList, this); + } + this.button = L.DomUtil.create('a', '', this.buttonsContainer); + this.button.innerHTML = this.value() ? L._('Change symbol') : L._('Add symbol'); + this.button.href = '#'; + L.DomEvent + .on(this.button, 'click', L.DomEvent.stop) + .on(this.button, 'click', this.fetchIconList, this); + }, + + addIconPreview: function (pictogram) { + var baseClass = 'storage-icon-choice', + value = pictogram.src, + className = value === this.value() ? baseClass + ' selected' : baseClass, + container = L.DomUtil.create('div', className, this.pictogramsContainer), + img = L.DomUtil.create('img', '', container); + img.src = value; + if (pictogram.name && pictogram.attribution) { + img.title = pictogram.name + ' — © ' + pictogram.attribution; + } + L.DomEvent.on(container, 'click', function (e) { + this.input.value = value; + this.sync(); + this.unselectAll(this.pictogramsContainer); + L.DomUtil.addClass(container, 'selected'); + this.pictogramsContainer.innerHTML = ''; + this.udpatePreview(); + }, this); + }, + + clear: function () { + this.input.value = ''; + this.unselectAll(this.pictogramsContainer); + this.sync(); + this.pictogramsContainer.innerHTML = ''; + this.udpatePreview(); + }, + + buildIconList: function (data) { + this.pictogramsContainer.innerHTML = ''; + this.buttonsContainer.innerHTML = ''; + for (var idx in data.pictogram_list) { + this.addIconPreview(data.pictogram_list[idx]); + } + var cancelButton = L.DomUtil.create('a', '', this.pictogramsContainer); + cancelButton.innerHTML = L._('Cancel'); + cancelButton.href = '#'; + cancelButton.style.display = 'block'; + cancelButton.style.clear = 'both'; + L.DomEvent + .on(cancelButton, 'click', L.DomEvent.stop) + .on(cancelButton, 'click', function (e) { + this.pictogramsContainer.innerHTML = ''; + this.udpatePreview(); + }, this); + var customButton = L.DomUtil.create('a', '', this.pictogramsContainer); + customButton.innerHTML = L._('Set URL'); + customButton.href = '#'; + customButton.style.display = 'block'; + customButton.style.clear = 'both'; + this.builder.map.help.button(customButton, 'formatIconURL'); + L.DomEvent + .on(customButton, 'click', L.DomEvent.stop) + .on(customButton, 'click', function (e) { + this.input.type = 'url'; + this.pictogramsContainer.innerHTML = ''; + }, this); + }, + + fetchIconList: function (e) { + this.builder.map.get(this.builder.map.options.urls.pictogram_list_json, { + callback: this.buildIconList, + context: this + }); + }, + + unselectAll: function (container) { + var els = container.querySelectorAll('div.selected'); + for (var el in els) { + if (els.hasOwnProperty(el)) L.DomUtil.removeClass(els[el], 'selected'); + } + } + +}); + +L.FormBuilder.Url = L.FormBuilder.Input.extend({ + + type: function () { + return 'url'; + } + +}); + +L.FormBuilder.Switch = L.FormBuilder.CheckBox.extend({ + + getParentNode: function () { + L.FormBuilder.CheckBox.prototype.getParentNode.call(this); + if (this.options.inheritable) return this.quickContainer; + return this.extendedContainer; + }, + + build: function () { + L.FormBuilder.CheckBox.prototype.build.apply(this); + if (this.options.inheritable) this.label = L.DomUtil.create('label', '', this.input.parentNode); + else this.input.parentNode.appendChild(this.label); + L.DomUtil.addClass(this.input.parentNode, 'with-switch'); + var id = (this.builder.options.id || Date.now()) + '.' + this.name; + this.label.setAttribute('for', id); + L.DomUtil.addClass(this.input, 'switch'); + this.input.id = id; + } + +}); + +L.FormBuilder.MultiChoice = L.FormBuilder.Element.extend({ + + default: 'null', + className: 'storage-multiplechoice', + + clear: function () { + var checked = this.container.querySelector('input[type="radio"]:checked'); + if (checked) checked.checked = false; + }, + + fetch: function () { + var value = this.backup = this.toHTML(); + if (value === null || value === undefined) value = this.default; + this.container.querySelector('input[type="radio"][value="' + value + '"]').checked = true; + }, + + value: function () { + var checked = this.container.querySelector('input[type="radio"]:checked'); + if (checked) return checked.value; + }, + + getChoices: function () { + return this.options.choices || this.choices; + }, + + build: function () { + var choices = this.getChoices(); + this.container = L.DomUtil.create('div', this.className + ' by' + choices.length, this.parentNode); + for (var i = 0; i < choices.length; i++) { + this.addChoice(choices[i][0], choices[i][1], i); + } + this.fetch(); + }, + + addChoice: function (value, label, counter) { + var input = L.DomUtil.create('input', '', this.container); + label = L.DomUtil.add('label', '', this.container, label); + input.type = 'radio'; + input.name = this.name; + input.value = value; + var id = Date.now() + '.' + this.name + '.' + counter; + label.setAttribute('for', id); + input.id = id; + L.DomEvent.on(input, 'change', this.sync, this); + } + +}); + +L.FormBuilder.ControlChoice = L.FormBuilder.MultiChoice.extend({ + + default: 'null', + + choices: [ + [true, L._('always')], + [false, L._('never')], + ['null', L._('hidden')] + ], + + toJS: function () { + var value = this.value(); + switch (value) { + case 'true': + case true: + value = true; + break; + case 'false': + case false: + value = false; + break; + default: + value = null; + } + return value; + } + +}); + +L.FormBuilder.DataLayersControl = L.FormBuilder.ControlChoice.extend({ + + choices: [ + [true, L._('collapsed')], + ['expanded', L._('expanded')], + [false, L._('never')], + ['null', L._('hidden')] + ], + + toJS: function () { + var value = this.value(); + if (value !== 'expanded') value = L.FormBuilder.ControlChoice.prototype.toJS.call(this); + return value; + } + +}); + +L.FormBuilder.OutlinkTarget = L.FormBuilder.MultiChoice.extend({ + + default: 'blank', + + choices: [ + ['blank', L._('new window')], + ['self', L._('iframe')], + ['parent', L._('parent window')] + ] + +}); + +L.FormBuilder.Range = L.FormBuilder.Input.extend({ + + type: function () { + return 'range'; + }, + + value: function () { + return L.DomUtil.hasClass(this.wrapper, 'undefined') ? undefined : this.input.value; + } + +}); + +L.Storage.FormBuilder = L.FormBuilder.extend({ + + options: { + className: 'storage-form' + }, + + defaultOptions: { + name: {label: L._('name')}, + description: {label: L._('description'), handler: 'Textarea', helpEntries: 'textFormatting'}, + color: {handler: 'ColorPicker', label: L._('color'), helpEntries: 'colorValue', inheritable: true}, + opacity: {handler: 'Range', min: 0.1, max: 1, step: 0.1, label: L._('opacity'), inheritable: true}, + stroke: {handler: 'Switch', label: L._('stroke'), helpEntries: 'stroke', inheritable: true}, + weight: {handler: 'Range', min: 1, max: 20, step: 1, label: L._('weight'), inheritable: true}, + fill: {handler: 'Switch', label: L._('fill'), helpEntries: 'fill', inheritable: true}, + fillColor: {handler: 'ColorPicker', label: L._('fill color'), helpEntries: 'fillColor', inheritable: true}, + fillOpacity: {handler: 'Range', min: 0.1, max: 1, step: 0.1, label: L._('fill opacity'), inheritable: true}, + smoothFactor: {handler: 'Range', min: 0, max: 10, step: 0.5, label: L._('Simplify'), helpEntries: 'smoothFactor', inheritable: true}, + dashArray: {label: L._('dash array'), helpEntries: 'dashArray', inheritable: true}, + iconClass: {handler: 'IconClassSwitcher', label: L._('Icon shape'), inheritable: true}, + iconUrl: {handler: 'IconUrl', label: L._('Icon symbol'), inheritable: true}, + popupTemplate: {handler: 'PopupTemplate', label: L._('Popup style'), inheritable: true}, + popupContentTemplate: {label: L._('Popup content template'), handler: 'Textarea', helpEntries: ['dynamicProperties', 'textFormatting'], placeholder: '# {name}', inheritable: true}, + datalayer: {handler: 'DataLayerSwitcher', label: L._('Choose the layer of the feature')}, + moreControl: {handler: 'Switch', label: L._('Do you want to display the «more» control?')}, + scrollWheelZoom: {handler: 'Switch', label: L._('Allow scroll wheel zoom?')}, + miniMap: {handler: 'Switch', label: L._('Do you want to display a minimap?')}, + scaleControl: {handler: 'Switch', label: L._('Do you want to display the scale control?')}, + onLoadPanel: {handler: 'onLoadPanel', label: L._('Do you want to display a panel on load?')}, + displayPopupFooter: {handler: 'Switch', label: L._('Do you want to display popup footer?')}, + captionBar: {handler: 'Switch', label: L._('Do you want to display a caption bar?')}, + zoomTo: {handler: 'IntInput', placeholder: L._('Inherit'), helpEntries: 'zoomTo', label: L._('Default zoom level'), inheritable: true}, + showLabel: {handler: 'Switch', label: L._('Display label'), inheritable: true}, + labelHover: {handler: 'Switch', label: L._('Only display label on mouse hover'), inheritable: true}, + labelDirection: {handler: 'LabelDirection', label: L._('Label direction'), inheritable: true}, + labelInteractive: {handler: 'Switch', label: L._('Labels are clickable'), inheritable: true}, + labelKey: {helpEntries: 'labelKey', placeholder: L._('Default: name'), label: L._('Label key'), inheritable: true}, + zoomControl: {handler: 'ControlChoice', label: L._('Display the zoom control')}, + searchControl: {handler: 'ControlChoice', label: L._('Display the search control')}, + fullscreenControl: {handler: 'ControlChoice', label: L._('Display the fullscreen control')}, + embedControl: {handler: 'ControlChoice', label: L._('Display the embed control')}, + locateControl: {handler: 'ControlChoice', label: L._('Display the locate control')}, + measureControl: {handler: 'ControlChoice', label: L._('Display the measure control')}, + tilelayersControl: {handler: 'ControlChoice', label: L._('Display the tile layers control')}, + editinosmControl: {handler: 'ControlChoice', label: L._('Display the control to open OpenStreetMap editor')}, + datalayersControl: {handler: 'DataLayersControl', label: L._('Display the data layers control')}, + }, + + initialize: function (obj, fields, options) { + this.map = obj.getMap(); + L.FormBuilder.prototype.initialize.call(this, obj, fields, options); + this.on('finish', this.finish); + }, + + setter: function (field, value) { + L.FormBuilder.prototype.setter.call(this, field, value); + this.obj.isDirty = true; + }, + + finish: function () { + this.map.ui.closePanel(); + } + +}); diff --git a/umap/static/umap/js/umap.icon.js b/umap/static/umap/js/umap.icon.js new file mode 100644 index 00000000..dbf50ab6 --- /dev/null +++ b/umap/static/umap/js/umap.icon.js @@ -0,0 +1,177 @@ +L.Storage.Icon = L.DivIcon.extend({ + initialize: function(map, options) { + this.map = map; + var default_options = { + iconSize: null, // Made in css + iconUrl: this.map.getDefaultOption('iconUrl'), + feature: null + }; + options = L.Util.extend({}, default_options, options); + L.Icon.prototype.initialize.call(this, options); + this.feature = this.options.feature; + if (this.feature && this.feature.isReadOnly()) { + this.options.className += ' readonly'; + } + }, + + _getIconUrl: function (name) { + var url; + if(this.feature && this.feature._getIconUrl(name)) url = this.feature._getIconUrl(name); + else url = this.options[name + 'Url']; + return this.formatUrl(url, this.feature); + }, + + _getColor: function () { + var color; + if(this.feature) color = this.feature.getOption('color'); + else if (this.options.color) color = this.options.color; + else color = this.map.getDefaultOption('color'); + return color; + }, + + formatUrl: function (url, feature) { + return L.Util.greedyTemplate(url || '', feature ? feature.properties : {}); + } + +}); + +L.Storage.Icon.Default = L.Storage.Icon.extend({ + default_options: { + iconAnchor: new L.Point(16, 40), + popupAnchor: new L.Point(0, -40), + tooltipAnchor: new L.Point(16, -24), + className: 'storage-div-icon' + }, + + initialize: function(map, options) { + options = L.Util.extend({}, this.default_options, options); + L.Storage.Icon.prototype.initialize.call(this, map, options); + }, + + _setColor: function() { + var color = this._getColor(); + this.elements.container.style.backgroundColor = color; + this.elements.arrow.style.borderTopColor = color; + }, + + createIcon: function() { + this.elements = {}; + this.elements.main = L.DomUtil.create('div'); + this.elements.container = L.DomUtil.create('div', 'icon_container', this.elements.main); + this.elements.arrow = L.DomUtil.create('div', 'icon_arrow', this.elements.main); + this.elements.img = L.DomUtil.create('img', null, this.elements.container); + var src = this._getIconUrl('icon'); + if (src) this.elements.img.src = src; + this._setColor(); + this._setIconStyles(this.elements.main, 'icon'); + return this.elements.main; + } + +}); + +L.Storage.Icon.Circle = L.Storage.Icon.extend({ + initialize: function(map, options) { + var default_options = { + iconAnchor: new L.Point(6, 6), + popupAnchor: new L.Point(0, -6), + tooltipAnchor: new L.Point(6, 0), + className: 'storage-circle-icon' + }; + options = L.Util.extend({}, default_options, options); + L.Storage.Icon.prototype.initialize.call(this, map, options); + }, + + _setColor: function() { + this.elements.main.style.backgroundColor = this._getColor(); + }, + + createIcon: function() { + this.elements = {}; + this.elements.main = L.DomUtil.create('div'); + this.elements.main.innerHTML = ' '; + this._setColor(); + this._setIconStyles(this.elements.main, 'icon'); + return this.elements.main; + } + +}); + +L.Storage.Icon.Drop = L.Storage.Icon.Default.extend({ + default_options: { + iconAnchor: new L.Point(16, 42), + popupAnchor: new L.Point(0, -42), + tooltipAnchor: new L.Point(16, -24), + className: 'storage-drop-icon' + } +}); + +L.Storage.Icon.Ball = L.Storage.Icon.Default.extend({ + default_options: { + iconAnchor: new L.Point(8, 30), + popupAnchor: new L.Point(0, -28), + tooltipAnchor: new L.Point(8, -23), + className: 'storage-ball-icon' + }, + + createIcon: function() { + this.elements = {}; + this.elements.main = L.DomUtil.create('div'); + this.elements.container = L.DomUtil.create('div', 'icon_container', this.elements.main); + this.elements.arrow = L.DomUtil.create('div', 'icon_arrow', this.elements.main); + this._setColor(); + this._setIconStyles(this.elements.main, 'icon'); + return this.elements.main; + }, + + _setColor: function() { + var color = this._getColor('color'), + background; + if (L.Browser.ielt9) { + background = color; + } + else if (L.Browser.webkit) { + background = '-webkit-gradient( radial, 6 38%, 0, 6 38%, 8, from(white), to(' + color + ') )'; + } + else { + background = 'radial-gradient(circle at 6px 38% , white -4px, ' + color + ' 8px) repeat scroll 0 0 transparent'; + } + this.elements.container.style.background = background; + } + +}); + +var _CACHE_COLOR = {}; +L.Storage.Icon.Cluster = L.DivIcon.extend({ + options: { + iconSize: [40, 40] + }, + + initialize: function (datalayer, cluster) { + this.datalayer = datalayer; + this.cluster = cluster; + }, + + createIcon: function () { + var container = L.DomUtil.create('div', 'leaflet-marker-icon marker-cluster'), + div = L.DomUtil.create('div', '', container), + span = L.DomUtil.create('span', '', div), + backgroundColor = this.datalayer.getColor(), + color; + span.innerHTML = this.cluster.getChildCount(); + div.style.backgroundColor = backgroundColor; + if (this.datalayer.options.cluster && this.datalayer.options.cluster.textColor) { + color = this.datalayer.options.cluster.textColor; + } + if (!color) { + if (typeof _CACHE_COLOR[backgroundColor] === 'undefined') { + color = L.DomUtil.TextColorFromBackgroundColor(div); + _CACHE_COLOR[backgroundColor] = color; + } else { + color = _CACHE_COLOR[backgroundColor]; + } + } + div.style.color = color; + return container; + } + +}); diff --git a/umap/static/umap/js/umap.js b/umap/static/umap/js/umap.js new file mode 100644 index 00000000..400d8f85 --- /dev/null +++ b/umap/static/umap/js/umap.js @@ -0,0 +1,1654 @@ +L.Map.mergeOptions({ + base_layers: null, + overlay_layers: null, + datalayers: [], + center: [4, 50], + zoom: 6, + hash: true, + default_color: 'DarkBlue', + default_smoothFactor: 1.0, + default_opacity: 0.5, + default_fillOpacity: 0.3, + default_stroke: true, + default_fill: true, + default_weight: 3, + default_iconClass: 'Default', + default_zoomTo: 16, + default_popupContentTemplate: '# {name}\n{description}', + default_interactive: true, + default_labelDirection: 'auto', + attributionControl: false, + allowEdit: true, + embedControl: true, + zoomControl: true, + datalayersControl: true, + searchControl: true, + editInOSMControl: false, + editInOSMControlOptions: false, + scaleControl: true, + noControl: false, // Do not render any control. + miniMap: false, + name: '', + description: '', + displayPopupFooter: false, + demoTileInfos: {s: 'a', z: 9, x: 265, y: 181}, + licences: [], + licence: '', + enableMarkerDraw: true, + enablePolygonDraw: true, + enablePolylineDraw: true, + limitBounds: {}, + importPresets: [ + // {url: 'http://localhost:8019/en/datalayer/1502/', label: 'Simplified World Countries', format: 'geojson'} + ], + moreControl: true, + captionBar: false, + slideshow: {}, + clickable: true, + easing: true +}); + +L.Storage.Map.include({ + + HIDDABLE_CONTROLS: ['zoom', 'search', 'fullscreen', 'embed', 'locate', 'measure', 'tilelayers', 'editinosm', 'datalayers'], + + initialize: function (el, geojson) { + + if (geojson.properties && geojson.properties.locale) L.setLocale(geojson.properties.locale); + + // Don't let default autocreation of controls + var zoomControl = typeof geojson.properties.zoomControl !== 'undefined' ? geojson.properties.zoomControl : true; + geojson.properties.zoomControl = false; + var fullscreenControl = typeof geojson.properties.fullscreenControl !== 'undefined' ? geojson.properties.fullscreenControl : true; + geojson.properties.fullscreenControl = false; + L.Util.setBooleanFromQueryString(geojson.properties, 'scrollWheelZoom'); + L.Map.prototype.initialize.call(this, el, geojson.properties); + + this.ui = new L.S.UI(this._container); + this.xhr = new L.S.Xhr(this.ui); + this.xhr.on('dataloding', function (e) { + this.fire('dataloding', e); + }); + this.xhr.on('datalaod', function (e) { + this.fire('datalaod', e); + }); + + this.initLoader(); + this.name = this.options.name; + this.description = this.options.description; + this.demoTileInfos = this.options.demoTileInfos; + if (geojson.geometry) this.options.center = geojson.geometry; + this.options.zoomControl = zoomControl; + this.options.fullscreenControl = fullscreenControl; + L.Util.setBooleanFromQueryString(this.options, 'moreControl'); + L.Util.setBooleanFromQueryString(this.options, 'scaleControl'); + L.Util.setBooleanFromQueryString(this.options, 'miniMap'); + L.Util.setBooleanFromQueryString(this.options, 'allowEdit'); + L.Util.setBooleanFromQueryString(this.options, 'displayDataBrowserOnLoad'); + L.Util.setBooleanFromQueryString(this.options, 'displayCaptionOnLoad'); + L.Util.setBooleanFromQueryString(this.options, 'captionBar'); + for (var i = 0; i < this.HIDDABLE_CONTROLS.length; i++) { + L.Util.setNullableBooleanFromQueryString(this.options, this.HIDDABLE_CONTROLS[i] + 'Control'); + } + this.datalayersOnLoad = L.Util.queryString('datalayers'); + this.options.onLoadPanel = L.Util.queryString('onLoadPanel', this.options.onLoadPanel); + if (this.datalayersOnLoad) this.datalayersOnLoad = this.datalayersOnLoad.toString().split(','); + + if (L.Browser.ielt9) this.options.allowEdit = false; // TODO include ie9 + + var editedFeature = null, + self = this; + try { + Object.defineProperty(this, 'editedFeature', { + get: function () { + return editedFeature; + }, + set: function (feature) { + if (editedFeature && editedFeature !== feature) { + editedFeature.endEdit(); + } + editedFeature = feature; + self.fire('seteditedfeature'); + } + }); + } + catch (e) { + // Certainly IE8, which has a limited version of defineProperty + } + + if (this.options.hash) this.addHash(); + this.initCenter(); + this.handleLimitBounds(); + + this.initTileLayers(this.options.tilelayers); + + // Global storage for retrieving datalayers + this.datalayers = {}; + this.datalayers_index = []; + this.dirty_datalayers = []; + + // Retrocompat + if (this.options.slideshow && this.options.slideshow.delay && this.options.slideshow.active === undefined) this.options.slideshow.active = true; + + this.initControls(); + + // create datalayers + this.initDatalayers(); + + if (this.options.displayCaptionOnLoad) { + // Retrocompat + if (!this.options.onLoadPanel) { + this.options.onLoadPanel = 'caption'; + } + delete this.options.displayCaptionOnLoad; + } + if (this.options.displayDataBrowserOnLoad) { + // Retrocompat + if (!this.options.onLoadPanel) { + this.options.onLoadPanel = 'databrowser'; + } + delete this.options.displayDataBrowserOnLoad; + } + this.onceDatalayersLoaded(function () { + if (this.options.onLoadPanel === 'databrowser') this.openBrowser(); + else if (this.options.onLoadPanel === 'caption') this.displayCaption(); + }); + + this.ui.on('panel:closed', function () { + this.invalidateSize({pan: false}); + }, this); + + var isDirty = false; // global status + try { + Object.defineProperty(this, 'isDirty', { + get: function () { + return isDirty || this.dirty_datalayers.length; + }, + set: function (status) { + if (!isDirty && status) self.fire('isdirty'); + isDirty = status; + self.checkDirty(); + } + }); + } + catch (e) { + // Certainly IE8, which has a limited version of defineProperty + } + this.on('baselayerchange', function (e) { + if (this._controls.miniMap) this._controls.miniMap.onMainMapBaseLayerChange(e); + }, this); + + // Creation mode + if (!this.options.storage_id) { + this.isDirty = true; + this.options.name = L._('Untitled map'); + this.options.allowEdit = true; + var datalayer = this.createDataLayer(); + datalayer.connectToMap(); + this.enableEdit(); + var dataUrl = L.Util.queryString('dataUrl', null), + dataFormat = L.Util.queryString('dataFormat', 'geojson'); + if (dataUrl) { + dataUrl = decodeURIComponent(dataUrl); + dataUrl = this.localizeUrl(dataUrl); + dataUrl = this.proxyUrl(dataUrl); + datalayer.importFromUrl(dataUrl, dataFormat); + } + } + + this.help = new L.Storage.Help(this); + this.slideshow = new L.S.Slideshow(this, this.options.slideshow); + this.initCaptionBar(); + if (this.options.allowEdit) { + this.editTools = new L.S.Editable(this); + this.ui.on('panel:closed panel:open', function () { + this.editedFeature = null; + }, this); + this.initEditBar(); + } + this.initShortcuts(); + + + window.onbeforeunload = function (e) { + var msg = L._('You have unsaved changes.'); + if (self.isDirty) { + e.returnValue = msg; + return msg; + } + }; + this.backup(); + this.initContextMenu(); + this.on('click contextmenu.show', this.closeInplaceToolbar); + }, + + initControls: function () { + this.helpMenuActions = {}; + this._controls = {}; + + if (this.options.allowEdit && !this.options.noControl) { + new L.Storage.EditControl(this).addTo(this); + + new L.S.DrawToolbar({map: this}).addTo(this); + + var editActions = [ + L.S.ImportAction, + L.S.EditPropertiesAction, + L.S.ChangeTileLayerAction, + L.S.ManageDatalayersAction, + L.S.UpdateExtentAction + ]; + if (this.options.urls.map_update_permissions) editActions.push(L.Storage.UpdatePermsAction); + new L.S.SettingsToolbar({actions: editActions}).addTo(this); + } + this._controls.zoom = new L.Control.Zoom({zoomInTitle: L._('Zoom in'), zoomOutTitle: L._('Zoom out')}); + this._controls.datalayers = new L.Storage.DataLayersControl(this); + this._controls.locate = new L.S.LocateControl(); + this._controls.fullscreen = new L.Control.Fullscreen({title: {'false': L._('View Fullscreen'), 'true': L._('Exit Fullscreen')}}); + this._controls.search = new L.Storage.SearchControl(); + this._controls.embed = new L.Control.Embed(this, this.options.embedOptions); + this._controls.tilelayers = new L.Storage.TileLayerControl(); + this._controls.editinosm = new L.Control.EditInOSM({ + position: 'topleft', + widgetOptions: {helpText: L._('Open this map extent in a map editor to provide more accurate data to OpenStreetMap')} + }); + this._controls.measure = (new L.MeasureControl()).initHandler(this); + this._controls.more = new L.S.MoreControls(); + this._controls.scale = L.control.scale(); + if (this.options.scrollWheelZoom) this.scrollWheelZoom.enable(); + else this.scrollWheelZoom.disable(); + this.renderControls(); + }, + + renderControls: function () { + L.DomUtil.classIf(document.body, 'storage-caption-bar-enabled', this.options.captionBar || (this.options.slideshow && this.options.slideshow.active)); + L.DomUtil.classIf(document.body, 'storage-slideshow-enabled', this.options.slideshow && this.options.slideshow.active); + for (var i in this._controls) { + this.removeControl(this._controls[i]); + } + if (this.options.noControl) return; + + this._controls.attribution = (new L.S.AttributionControl()).addTo(this); + if (this.options.miniMap && !this.options.noControl) { + this.whenReady(function () { + if (this.selected_tilelayer) { + this._controls.miniMap = new L.Control.MiniMap(this.selected_tilelayer).addTo(this); + this._controls.miniMap._miniMap.invalidateSize(); + } + }); + } + var name, status, control; + for (var i = 0; i < this.HIDDABLE_CONTROLS.length; i++) { + name = this.HIDDABLE_CONTROLS[i]; + status = this.options[name + 'Control']; + if (status === false) continue; + control = this._controls[name]; + control.addTo(this); + if (status === undefined || status === null) L.DomUtil.addClass(control._container, 'display-on-more'); + else L.DomUtil.removeClass(control._container, 'display-on-more'); + } + if (this.options.moreControl) this._controls.more.addTo(this); + if (this.options.scaleControl) this._controls.scale.addTo(this); + }, + + initDatalayers: function () { + var toload = 0, datalayer, seen = 0, self = this; + var loaded = function () { + self.datalayersLoaded = true; + self.fire('datalayersloaded'); + }; + var decrementToLoad = function () { + toload--; + if (toload === 0) loaded(); + }; + for (var j = 0; j < this.options.datalayers.length; j++) { + toload++; + seen++; + datalayer = this.createDataLayer(this.options.datalayers[j]); + if (datalayer.displayedOnLoad()) datalayer.onceLoaded(decrementToLoad); + else decrementToLoad(); + } + if (seen === 0) loaded(); // no datalayer + }, + + indexDatalayers: function () { + var panes = this.getPane('overlayPane'), + pane; + this.datalayers_index = []; + for (var i = 0; i < panes.children.length; i++) { + pane = panes.children[i]; + if (!pane.dataset || !pane.dataset.id) continue; + this.datalayers_index.push(this.datalayers[pane.dataset.id]); + } + this.updateDatalayersControl(); + }, + + ensurePanesOrder: function () { + this.eachDataLayer(function (datalayer) { + datalayer.bringToTop(); + }); + }, + + onceDatalayersLoaded: function (callback, context) { + if (this.datalayersLoaded) { + callback.call(context || this, this); + } else { + this.once('datalayersloaded', callback, context); + } + 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); + this._backupOptions.limitBounds = L.extend({}, this.options.limitBounds); + }, + + resetOptions: function () { + this.options = L.extend({}, this._backupOptions); + this.options.tilelayer = L.extend({}, this._backupOptions.tilelayer); + }, + + initShortcuts: function () { + var globalShortcuts = function (e) { + var key = e.keyCode, + modifierKey = e.ctrlKey || e.metaKey; + + /* Generic shortcuts */ + if (key === L.S.Keys.F && modifierKey) { + L.DomEvent.stop(e); + this.search(); + } else if (e.keyCode === L.S.Keys.ESC) { + if (this.help.visible()) this.help.hide(); + else this.ui.closePanel(); + } + + if (!this.options.allowEdit) return; + + /* Edit mode only shortcuts */ + if (key === L.S.Keys.E && modifierKey && !this.editEnabled) { + L.DomEvent.stop(e); + this.enableEdit(); + } else if (key === L.S.Keys.E && modifierKey && this.editEnabled && !this.isDirty) { + L.DomEvent.stop(e); + this.disableEdit(); + this.ui.closePanel(); + } + if (key === L.S.Keys.S && modifierKey) { + L.DomEvent.stop(e); + if (this.isDirty) { + this.save(); + } + } + if (key === L.S.Keys.Z && modifierKey && this.isDirty) { + L.DomEvent.stop(e); + this.askForReset(); + } + if (key === L.S.Keys.M && modifierKey && this.editEnabled) { + L.DomEvent.stop(e); + this.editTools.startMarker(); + } + if (key === L.S.Keys.P && modifierKey && this.editEnabled) { + L.DomEvent.stop(e); + this.editTools.startPolygon(); + } + if (key === L.S.Keys.L && modifierKey && this.editEnabled) { + L.DomEvent.stop(e); + this.editTools.startPolyline(); + } + if (key === L.S.Keys.I && modifierKey && this.editEnabled) { + L.DomEvent.stop(e); + this.importPanel(); + } + if (key === L.S.Keys.H && modifierKey && this.editEnabled) { + L.DomEvent.stop(e); + this.help.show('edit'); + } + if (e.keyCode === L.S.Keys.ESC) { + if (this.editEnabled) this.editTools.stopDrawing(); + if (this.measureTools.enabled()) this.measureTools.stopDrawing(); + } + }; + L.DomEvent.addListener(document, 'keydown', globalShortcuts, this); + }, + + initTileLayers: function () { + this.tilelayers = []; + for(var i in this.options.tilelayers) { + if(this.options.tilelayers.hasOwnProperty(i)) { + this.tilelayers.push(this.createTileLayer(this.options.tilelayers[i])); + if (this.options.tilelayer && this.options.tilelayer.url_template === this.options.tilelayers[i].url_template) { + // Keep control over the displayed attribution for non custom tilelayers + this.options.tilelayer.attribution = this.options.tilelayers[i].attribution; + } + } + } + if (this.options.tilelayer && this.options.tilelayer.url_template && this.options.tilelayer.attribution) { + this.customTilelayer = this.createTileLayer(this.options.tilelayer); + this.selectTileLayer(this.customTilelayer); + } else { + this.selectTileLayer(this.tilelayers[0]); + } + }, + + createTileLayer: function (tilelayer) { + return new L.TileLayer(tilelayer.url_template, tilelayer); + }, + + selectTileLayer: function (tilelayer) { + if (tilelayer === this.selected_tilelayer) { return; } + try { + this.addLayer(tilelayer); + this.fire('baselayerchange', {layer: tilelayer}); + if (this.selected_tilelayer) { + this.removeLayer(this.selected_tilelayer); + } + this.selected_tilelayer = tilelayer; + if (!isNaN(this.selected_tilelayer.options.minZoom) && this.getZoom() < this.selected_tilelayer.options.minZoom) { + this.setZoom(this.selected_tilelayer.options.minZoom); + } + if (!isNaN(this.selected_tilelayer.options.maxZoom) && this.getZoom() > this.selected_tilelayer.options.maxZoom) { + this.setZoom(this.selected_tilelayer.options.maxZoom); + } + } catch (e) { + this.removeLayer(tilelayer); + this.ui.alert({content: L._('Error in the tilelayer URL') + ': ' + tilelayer._url, level: 'error'}); + // Users can put tilelayer URLs by hand, and if they add wrong {variable}, + // Leaflet throw an error, and then the map is no more editable + } + }, + + eachTileLayer: function (method, context) { + var urls = []; + for (var i in this.tilelayers) { + if (this.tilelayers.hasOwnProperty(i)) { + method.call(context, this.tilelayers[i]); + urls.push(this.tilelayers[i]._url); + } + } + if (this.customTilelayer && (Array.prototype.indexOf && urls.indexOf(this.customTilelayer._url) === -1)) { + method.call(context || this, this.customTilelayer); + } + }, + + initCenter: function () { + if (this.options.hash && this._hash.parseHash(location.hash)) { + // FIXME An invalid hash will cause the load to fail + this._hash.update(); + } + else if(this.options.locate && this.options.locate.setView) { + // Prevent from making two setViews at init + // which is not very fluid... + this.locate(this.options.locate); + } + else { + this.options.center = this.latLng(this.options.center); + this.setView(this.options.center, this.options.zoom); + } + }, + + latLng: function(a, b, c) { + // manage geojson case and call original method + if (!(a instanceof L.LatLng) && a.coordinates) { + // Guess it's a geojson + a = [a.coordinates[1], a.coordinates[0]]; + } + return L.latLng(a, b, c); + }, + + handleLimitBounds: function () { + var south = parseFloat(this.options.limitBounds.south), + west = parseFloat(this.options.limitBounds.west), + north = parseFloat(this.options.limitBounds.north), + east = parseFloat(this.options.limitBounds.east); + if (!isNaN(south) && !isNaN(west) && !isNaN(north) && !isNaN(east)) { + var bounds = L.latLngBounds([[south, west], [north, east]]); + this.options.minZoom = this.getBoundsZoom(bounds, false); + try { + this.setMaxBounds(bounds); + } catch (e) { + // Unusable bounds, like -2 -2 -2 -2? + console.error('Error limiting bounds', e); + } + } else { + this.options.minZoom = 0; + this.setMaxBounds(); + } + }, + + setMaxBounds: function (bounds) { + // Hack. Remove me when fix is released: + // https://github.com/Leaflet/Leaflet/pull/4494 + bounds = L.latLngBounds(bounds); + + if (!bounds.isValid()) { + this.options.maxBounds = null; + return this.off('moveend', this._panInsideMaxBounds); + } + return L.Map.prototype.setMaxBounds.call(this, bounds); + }, + + createDataLayer: function(datalayer) { + datalayer = datalayer || {name: L._('Layer') + ' ' + (this.datalayers_index.length + 1)}; + return new L.Storage.DataLayer(this, datalayer); + }, + + getDefaultOption: function (option) { + return this.options['default_' + option] || null; + }, + + getOption: function (option) { + if (L.Util.usableOption(this.options, option)) return this.options[option]; + else return this.getDefaultOption(option); + }, + + updateExtent: function() { + this.options.center = this.getCenter(); + this.options.zoom = this.getZoom(); + this.isDirty = true; + this.ui.alert({content: L._('The zoom and center have been setted.'), 'level': 'info'}); + }, + + updateTileLayers: function () { + var self = this, + callback = function (tilelayer) { + self.options.tilelayer = tilelayer.toJSON(); + self.isDirty = true; + }; + if (this._controls.tilelayers) this._controls.tilelayers.openSwitcher({callback: callback, className: 'dark'}); + }, + + manageDatalayers: function () { + if (this._controls.datalayers) this._controls.datalayers.openPanel(); + }, + + renderShareBox: function () { + var container = L.DomUtil.create('div', 'storage-share'), + embedTitle = L.DomUtil.add('h4', '', container, L._('Embed the map')), + iframe = L.DomUtil.create('textarea', 'storage-share-iframe', container), + option; + var UIFields = [ + ['dimensions.width', {handler: 'Input', label: L._('width')}], + ['dimensions.height', {handler: 'Input', label: L._('height')}], + ['options.includeFullScreenLink', {handler: 'Switch', label: L._('Include full screen link?')}], + ['options.currentView', {handler: 'Switch', label: L._('Current view instead of default map view?')}], + ['options.keepCurrentDatalayers', {handler: 'Switch', label: L._('Keep current visible layers')}], + 'queryString.moreControl', + 'queryString.scrollWheelZoom', + 'queryString.miniMap', + 'queryString.scaleControl', + 'queryString.onLoadPanel', + 'queryString.captionBar' + ]; + for (var i = 0; i < this.HIDDABLE_CONTROLS.length; i++) { + UIFields.push('queryString.' + this.HIDDABLE_CONTROLS[i] + 'Control'); + } + var iframeExporter = new L.S.IframeExporter(this); + var buildIframeCode = function () { + iframe.innerHTML = iframeExporter.build(); + }; + buildIframeCode(); + var builder = new L.S.FormBuilder(iframeExporter, UIFields, { + callback: buildIframeCode + }); + var iframeOptions = L.DomUtil.createFieldset(container, L._('Iframe export options')); + iframeOptions.appendChild(builder.build()); + if (this.options.shortUrl) { + L.DomUtil.create('hr', '', container); + L.DomUtil.add('h4', '', container, L._('Short URL')); + var shortUrl = L.DomUtil.create('input', 'storage-short-url', container); + shortUrl.type = 'text'; + shortUrl.value = this.options.shortUrl; + } + L.DomUtil.create('hr', '', container); + L.DomUtil.add('h4', '', container, L._('Download data')); + var typeInput = L.DomUtil.create('select', '', container); + typeInput.name = 'format'; + var exportCaveat = L.DomUtil.add('small', 'help-text', container, L._('Only visible features will be downloaded.')); + exportCaveat.id = 'export_caveat_text'; + var toggleCaveat = function () { + if (typeInput.value === 'umap') exportCaveat.style.display = 'none'; + else exportCaveat.style.display = 'inherit'; + } + L.DomEvent.on(typeInput, 'change', toggleCaveat); + var types = { + geojson: { + formatter: function (map) {return JSON.stringify(map.toGeoJSON(), null, 2);}, + ext: '.geojson', + filetype: 'application/json' + }, + gpx: { + formatter: function (map) {return togpx(map.toGeoJSON());}, + ext: '.gpx', + filetype: 'application/xml' + }, + kml: { + formatter: function (map) {return tokml(map.toGeoJSON());}, + ext: '.kml', + filetype: 'application/vnd.google-earth.kml+xml' + }, + umap: { + name: L._('Full map data'), + formatter: function (map) {return map.serialize();}, + ext: '.umap', + filetype: 'application/json', + selected: true + } + }; + for (var key in types) { + if (types.hasOwnProperty(key)) { + option = L.DomUtil.create('option', '', typeInput); + option.value = key; + option.innerHTML = types[key].name || key; + if (types[key].selected) option.selected = true; + } + } + toggleCaveat(); + var download = L.DomUtil.create('a', 'button', container); + download.innerHTML = L._('Download data'); + L.DomEvent.on(download, 'click', function () { + var type = types[typeInput.value], + content = type.formatter(this), + name = this.options.name || 'data'; + name = name.replace(/[^a-z0-9]/gi, '_').toLowerCase(); + download.download = name + type.ext; + window.URL = window.URL || window.webkitURL; + var blob = new Blob([content], {type: type.filetype}); + download.href = window.URL.createObjectURL(blob); + }, this); + this.ui.openPanel({data: {html: container}}); + }, + + toGeoJSON: function () { + var features = []; + this.eachDataLayer(function (datalayer) { + if (datalayer.isVisible()) { + features = features.concat(datalayer.featuresToGeoJSON()); + } + }); + var geojson = { + type: 'FeatureCollection', + features: features + }; + return geojson; + }, + + updatePermissions: function () { + if (!this.options.storage_id) return this.ui.alert({content: L._('Please save the map before'), level: 'info'}); + var url = L.Util.template(this.options.urls.map_update_permissions, {'map_id': this.options.storage_id}); + this.get(url, { + listen_form: {'id': 'map_edit'}, + className: 'dark' + }); + }, + + importPanel: function () { + var container = L.DomUtil.create('div', 'storage-upload'), + title = L.DomUtil.create('h4', '', container), + presetBox = L.DomUtil.create('div', 'formbox', container), + presetSelect = L.DomUtil.create('select', '', presetBox), + fileBox = L.DomUtil.create('div', 'formbox', container), + fileInput = L.DomUtil.create('input', '', fileBox), + urlInput = L.DomUtil.create('input', '', container), + rawInput = L.DomUtil.create('textarea', '', container), + typeLabel = L.DomUtil.create('label', '', container), + layerLabel = L.DomUtil.create('label', '', container), + clearLabel = L.DomUtil.create('label', '', container), + submitInput = L.DomUtil.create('input', '', container), + map = this, option, + types = ['geojson', 'csv', 'gpx', 'kml', 'osm', 'georss', 'umap']; + title.innerHTML = L._('Import data'); + fileInput.type = 'file'; + fileInput.multiple = 'multiple'; + submitInput.type = 'button'; + submitInput.value = L._('Import'); + submitInput.className = 'button'; + typeLabel.innerHTML = L._('Choose the format of the data to import'); + this.help.button(typeLabel, 'importFormats'); + var typeInput = L.DomUtil.create('select', '', typeLabel); + typeInput.name = 'format'; + layerLabel.innerHTML = L._('Choose the layer to import in'); + var layerInput = L.DomUtil.create('select', '', layerLabel); + layerInput.name = 'datalayer'; + urlInput.type = 'text'; + urlInput.placeholder = L._('Provide an URL here'); + rawInput.placeholder = L._('Paste here your data'); + clearLabel.textContent = L._('Replace layer content'); + var clearFlag = L.DomUtil.create('input', '', clearLabel); + clearFlag.type = 'checkbox'; + clearFlag.name = 'clear'; + this.eachDataLayerReverse(function (datalayer) { + if (datalayer.isLoaded()) { + var id = L.stamp(datalayer); + option = L.DomUtil.create('option', '', layerInput); + option.value = id; + option.innerHTML = datalayer.options.name; + } + }); + L.DomUtil.element('option', {value: '', innerHTML: L._('Import in a new layer')}, layerInput); + L.DomUtil.element('option', {value: '', innerHTML: L._('Choose the data format')}, typeInput); + for (var i = 0; i < types.length; i++) { + option = L.DomUtil.create('option', '', typeInput); + option.value = option.innerHTML = types[i]; + } + if (this.options.importPresets.length) { + var noPreset = L.DomUtil.create('option', '', presetSelect); + noPreset.value = noPreset.innerHTML = L._('Choose a preset'); + for (var j = 0; j < this.options.importPresets.length; j++) { + option = L.DomUtil.create('option', '', presetSelect); + option.value = this.options.importPresets[j].url; + option.innerHTML = this.options.importPresets[j].label; + } + } else { + presetBox.style.display = 'none'; + } + + var submit = function () { + var type = typeInput.value, + layerId = layerInput[layerInput.selectedIndex].value, + layer; + if (type === 'umap') { + this.once('postsync', function () { + this.setView(this.latLng(this.options.center), this.options.zoom); + }); + } + if (layerId) layer = map.datalayers[layerId]; + if (layer && clearFlag.checked) layer.empty(); + if (fileInput.files.length) { + var file; + for (var i = 0, file; file = fileInput.files[i]; i++) { + type = type || L.Util.detectFileType(file); + if (!type) { + this.ui.alert({content: L._('Unable to detect format of file {filename}', {filename: file.name}), level: 'error'}); + continue; + } + if (type === 'umap') { + this.importFromFile(file, 'umap'); + } else { + var importLayer = layer; + if (!layer) importLayer = this.createDataLayer({name: file.name}); + importLayer.importFromFile(file, type); + } + } + } else { + if (!type) return this.ui.alert({content: L._('Please choose a format'), level: 'error'}); + if (rawInput.value && type === 'umap') { + try { + this.importRaw(rawInput.value, type); + } catch (e) { + this.ui.alert({content: L._('Invalid umap data'), level: 'error'}); + console.error(e); + } + } else { + if (!layer) layer = this.createDataLayer(); + if (rawInput.value) layer.importRaw(rawInput.value, type); + else if (urlInput.value) layer.importFromUrl(urlInput.value, type); + else if (presetSelect.selectedIndex > 0) layer.importFromUrl(presetSelect[presetSelect.selectedIndex].value, type); + } + } + }; + L.DomEvent.on(submitInput, 'click', submit, this); + L.DomEvent.on(fileInput, 'change', function (e) { + var type = '', newType; + for (var i = 0; i < e.target.files.length; i++) { + newType = L.Util.detectFileType(e.target.files[i]); + if (!type && newType) type = newType; + if (type && newType !== type) { + type = ''; + break; + } + } + typeInput.value = type; + }, this); + this.ui.openPanel({data: {html: container}, className: 'dark'}); + }, + + importRaw: function(rawData) { + var importedData = JSON.parse(rawData); + + var mustReindex = false; + + for (var i = 0; i < this.editableOptions.length; i++) { + var option = this.editableOptions[i]; + if (typeof importedData.properties[option] !== 'undefined') { + this.options[option] = importedData.properties[option]; + if (option === 'sortKey') mustReindex = true; + } + } + + if (importedData.geometry) this.options.center = this.latLng(importedData.geometry); + var self = this; + importedData.layers.forEach( function (geojson) { + var dataLayer = self.createDataLayer(); + dataLayer.fromUmapGeoJSON(geojson); + }); + + this.initTileLayers(); + this.renderControls(); + this.handleLimitBounds(); + this.eachDataLayer(function (datalayer) { + if (mustReindex) datalayer.reindex(); + datalayer.redraw(); + }); + this.fire('postsync'); + this.isDirty = true; + }, + + importFromFile: function (file) { + var reader = new FileReader(); + reader.readAsText(file); + var self = this; + reader.onload = function (e) { + var rawData = e.target.result; + try { + self.importRaw(rawData); + } catch (e) { + console.error('Error importing data', e); + self.ui.alert({content: L._('Invalid umap data in {filename}', {filename: file.name}), level: 'error'}); + } + }; + }, + + openBrowser: function () { + this.onceDatalayersLoaded(function () { + this._openBrowser(); + }); + }, + + displayCaption: function () { + var container = L.DomUtil.create('div', 'storage-caption'), + title = L.DomUtil.create('h3', '', container); + title.innerHTML = this.options.name; + if (this.options.author && this.options.author.name && this.options.author.link) { + var authorContainer = L.DomUtil.add('h5', 'storage-map-author', container, L._('by') + ' '), + author = L.DomUtil.create('a'); + author.href = this.options.author.link; + author.innerHTML = this.options.author.name; + authorContainer.appendChild(author); + } + if (this.options.description) { + var description = L.DomUtil.create('div', 'storage-map-description', container); + description.innerHTML = L.Util.toHTML(this.options.description); + } + var datalayerContainer = L.DomUtil.create('div', 'datalayer-container', container); + this.eachBrowsableDataLayer(function (datalayer) { + var p = L.DomUtil.create('p', '', datalayerContainer), + color = L.DomUtil.create('span', 'datalayer-color', p), + headline = L.DomUtil.create('strong', '', p), + description = L.DomUtil.create('span', '', p); + datalayer.onceLoaded(function () { + color.style.backgroundColor = this.getColor(); + if (datalayer.options.description) { + description.innerHTML = L.Util.toHTML(datalayer.options.description); + } + }); + datalayer.renderToolbox(headline); + L.DomUtil.add('span', '', headline, datalayer.options.name + ' '); + }); + var creditsContainer = L.DomUtil.create('div', 'credits-container', container), + credits = L.DomUtil.createFieldset(creditsContainer, L._('Credits')); + title = L.DomUtil.add('h5', '', credits, L._('User content credits')); + if (this.options.shortCredit || this.options.longCredit) { + L.DomUtil.add('p', '', credits, L.Util.toHTML(this.options.longCredit || this.options.shortCredit)); + } + if (this.options.licence) { + var licence = L.DomUtil.add('p', '', credits, L._('Map user content has been published under licence') + ' '), + link = L.DomUtil.add('a', '', licence, this.options.licence.name); + link.href = this.options.licence.url; + } else { + L.DomUtil.add('p', '', credits, L._('No licence has been set')); + } + L.DomUtil.create('hr', '', credits); + title = L.DomUtil.create('h5', '', credits); + title.innerHTML = L._('Map background credits'); + var tilelayerCredit = L.DomUtil.create('p', '', credits), + name = L.DomUtil.create('strong', '', tilelayerCredit), + attribution = L.DomUtil.create('span', '', tilelayerCredit); + name.innerHTML = this.selected_tilelayer.options.name + ' '; + attribution.innerHTML = this.selected_tilelayer.getAttribution(); + L.DomUtil.create('hr', '', credits); + var umapCredit = L.DomUtil.create('p', '', credits), + urls = { + leaflet: 'http://leafletjs.com', + django: 'https://www.djangoproject.com', + umap: 'http://wiki.openstreetmap.org/wiki/UMap' + }; + umapCredit.innerHTML = L._('Powered by Leaflet and Django, glued by uMap project.', urls); + var browser = L.DomUtil.create('li', ''); + L.DomUtil.create('i', 'storage-icon-16 storage-list', browser); + var label = L.DomUtil.create('span', '', browser); + label.innerHTML = label.title = L._('Browse data'); + L.DomEvent.on(browser, 'click', this.openBrowser, this); + this.ui.openPanel({data: {html: container}, actions: [browser]}); + }, + + eachDataLayer: function (method, context) { + for (var i = 0; i < this.datalayers_index.length; i++) { + method.call(context, this.datalayers_index[i]); + } + }, + + eachDataLayerReverse: function (method, context, filter) { + for (var i = this.datalayers_index.length - 1; i >= 0; i--) { + if (filter && !filter.call(context, this.datalayers_index[i])) continue; + method.call(context, this.datalayers_index[i]); + } + }, + + eachBrowsableDataLayer: function (method, context, filter) { + this.eachDataLayerReverse(method, context, function (d) { return d.allowBrowse(); }); + }, + + findDataLayer: function (method, context) { + for (var i = this.datalayers_index.length - 1; i >= 0; i--) { + if (method.call(context, this.datalayers_index[i])) return this.datalayers_index[i]; + } + }, + + backup: function () { + this.backupOptions(); + this._datalayers_index_bk = [].concat(this.datalayers_index); + }, + + reset: function () { + if (this.editTools) this.editTools.stopDrawing(); + this.resetOptions(); + this.datalayers_index = [].concat(this._datalayers_index_bk); + this.dirty_datalayers.slice().forEach(function (datalayer) { + if (datalayer.isDeleted) datalayer.connectToMap(); + datalayer.reset(); + }); + this.ensurePanesOrder(); + this.dirty_datalayers = []; + this.updateDatalayersControl(); + this.initTileLayers(); + this.isDirty = false; + }, + + checkDirty: function () { + L.DomUtil.classIf(this._container, 'storage-is-dirty', this.isDirty); + }, + + addDirtyDatalayer: function (datalayer) { + if (this.dirty_datalayers.indexOf(datalayer) === -1) { + this.dirty_datalayers.push(datalayer); + this.isDirty = true; + } + }, + + removeDirtyDatalayer: function (datalayer) { + if (this.dirty_datalayers.indexOf(datalayer) !== -1) { + this.dirty_datalayers.splice(this.dirty_datalayers.indexOf(datalayer), 1); + this.checkDirty(); + } + }, + + continueSaving: function () { + if (this.dirty_datalayers.length) this.dirty_datalayers[0].save(); + else this.fire('saved'); + }, + + editableOptions: [ + 'zoom', + 'scrollWheelZoom', + 'scaleControl', + 'moreControl', + 'miniMap', + 'displayPopupFooter', + 'onLoadPanel', + 'tilelayersControl', + 'name', + 'description', + 'licence', + 'tilelayer', + 'limitBounds', + 'color', + 'iconClass', + 'iconUrl', + 'smoothFactor', + 'opacity', + 'weight', + 'fill', + 'fillColor', + 'fillOpacity', + 'dashArray', + 'popupTemplate', + 'popupContentTemplate', + 'zoomTo', + 'captionBar', + 'slideshow', + 'sortKey', + 'filterKey', + 'showLabel', + 'labelDirection', + 'labelHover', + 'labelInteractive', + 'shortCredit', + 'longCredit', + 'zoomControl', + 'datalayersControl', + 'searchControl', + 'locateControl', + 'fullscreenControl', + 'editinosmControl', + 'embedControl', + 'measureControl', + 'tilelayersControl', + 'easing' + ], + + exportOptions: function () { + var properties = {}; + for (var i = this.editableOptions.length - 1; i >= 0; i--) { + if (typeof this.options[this.editableOptions[i]] !== 'undefined') { + properties[this.editableOptions[i]] = this.options[this.editableOptions[i]]; + } + } + return properties; + }, + + serialize: function () { + var umapfile = { + type: 'umap', + properties: this.exportOptions(), + geometry: this.geometry(), + layers: [] + }; + + this.eachDataLayer(function (datalayer) { + umapfile.layers.push(datalayer.umapGeoJSON()); + }); + + return JSON.stringify(umapfile, null, 2); + }, + + save: function () { + if (!this.isDirty) return; + var geojson = { + type: 'Feature', + geometry: this.geometry(), + properties: this.exportOptions() + }; + this.backup(); + var formData = new FormData(); + formData.append('name', this.options.name); + formData.append('center', JSON.stringify(this.geometry())); + formData.append('settings', JSON.stringify(geojson)); + this.post(this.getSaveUrl(), { + data: formData, + callback: function (data) { + var duration = 3000; + if (!this.options.storage_id) { + duration = 100000; // we want a longer message at map creation (TODO UGLY) + this.options.storage_id = data.id; + if (history && history.pushState) history.pushState({}, this.options.name, data.url); + else window.location = data.url; + } + if (data.info) msg = data.info; + else msg = L._('Map has been saved!'); + this.once('saved', function () { + this.isDirty = false; + this.ui.alert({content: msg, level: 'info', duration: duration}); + }); + this.ui.closePanel(); + this.continueSaving(); + }, + context: this + }); + }, + + getEditUrl: function() { + return L.Util.template(this.options.urls.map_update, {'map_id': this.options.storage_id}); + }, + + getCreateUrl: function() { + return L.Util.template(this.options.urls.map_create); + }, + + getSaveUrl: function () { + return (this.options.storage_id && this.getEditUrl()) || this.getCreateUrl(); + }, + + geometry: function() { + /* Return a GeoJSON geometry Object */ + var latlng = this.latLng(this.options.center || this.getCenter()); + return { + type: 'Point', + coordinates: [ + latlng.lng, + latlng.lat + ] + }; + }, + + defaultDataLayer: function () { + var datalayer, fallback; + datalayer = this.lastUsedDataLayer; + if (datalayer && !datalayer.isRemoteLayer() && datalayer.canBrowse() && datalayer.isVisible()) { + return datalayer; + } + datalayer = this.findDataLayer(function (datalayer) { + if (!datalayer.isRemoteLayer() && datalayer.canBrowse()) { + fallback = datalayer; + if (datalayer.isVisible()) return true; + } + }); + if (datalayer) return datalayer; + if (fallback) { + // No datalayer visible, let's force one + this.addLayer(fallback.layer); + return fallback; + } + return this.createDataLayer(); + }, + + getDataLayerByStorageId: function (storage_id) { + return this.findDataLayer(function (d) { return d.storage_id == storage_id; }); + }, + + edit: function () { + if(!this.editEnabled) return; + var container = L.DomUtil.create('div'), + metadataFields = [ + 'options.name', + 'options.description' + ], + title = L.DomUtil.create('h4', '', container); + title.innerHTML = L._('Edit map properties'); + var builder = new L.S.FormBuilder(this, metadataFields); + var form = builder.build(); + container.appendChild(form); + var UIFields = []; + for (var i = 0; i < this.HIDDABLE_CONTROLS.length; i++) { + UIFields.push('options.' + this.HIDDABLE_CONTROLS[i] + 'Control'); + } + UIFields = UIFields.concat([ + 'options.moreControl', + 'options.scrollWheelZoom', + 'options.miniMap', + 'options.scaleControl', + 'options.onLoadPanel', + 'options.displayPopupFooter', + 'options.captionBar' + ]); + builder = new L.S.FormBuilder(this, UIFields, { + callback: this.renderControls, + callbackContext: this + }); + var controlsOptions = L.DomUtil.createFieldset(container, L._('User interface options')); + controlsOptions.appendChild(builder.build()); + + var shapeOptions = [ + 'options.color', + 'options.iconClass', + 'options.iconUrl', + 'options.opacity', + 'options.weight', + 'options.fill', + 'options.fillColor', + 'options.fillOpacity' + ]; + + builder = new L.S.FormBuilder(this, shapeOptions, { + callback: function (e) { + this.eachDataLayer(function (datalayer) { + datalayer.redraw(); + }); + } + }); + var defaultShapeProperties = L.DomUtil.createFieldset(container, L._('Default shape properties')); + defaultShapeProperties.appendChild(builder.build()); + + var optionsFields = [ + 'options.smoothFactor', + 'options.dashArray', + 'options.zoomTo', + ['options.easing', {handler: 'Switch', label: L._('Advanced transition')}], + 'options.labelKey', + ['options.sortKey', {handler: 'BlurInput', helpEntries: 'sortKey', placeholder: L._('Default: name'), label: L._('Sort key'), inheritable: true}], + ['options.filterKey', {handler: 'Input', helpEntries: 'filterKey', placeholder: L._('Default: name'), label: L._('Filter keys'), inheritable: true}] + ]; + + builder = new L.S.FormBuilder(this, optionsFields, { + callback: function (e) { + this.eachDataLayer(function (datalayer) { + if (e.helper.field === 'options.sortKey') datalayer.reindex(); + datalayer.redraw(); + }); + } + }); + var defaultProperties = L.DomUtil.createFieldset(container, L._('Default properties')); + defaultProperties.appendChild(builder.build()); + + var popupFields = [ + 'options.popupTemplate', + 'options.popupContentTemplate', + 'options.showLabel', + 'options.labelDirection', + 'options.labelHover', + 'options.labelInteractive' + ]; + builder = new L.S.FormBuilder(this, popupFields, { + callback: function (e) { + if (e.helper.field === 'options.popupTemplate' || e.helper.field === 'options.popupContentTemplate') return; + this.eachDataLayer(function (datalayer) { + datalayer.redraw(); + }) + } + }); + var popupFieldset = L.DomUtil.createFieldset(container, L._('Default interaction options')); + popupFieldset.appendChild(builder.build()); + + if (!L.Util.isObject(this.options.tilelayer)) { + this.options.tilelayer = {}; + } + var tilelayerFields = [ + ['options.tilelayer.name', {handler: 'BlurInput', placeholder: L._('display name')}], + ['options.tilelayer.url_template', {handler: 'BlurInput', helpText: L._('Supported scheme') + ': http://{s}.domain.com/{z}/{x}/{y}.png', placeholder: 'url'}], + ['options.tilelayer.maxZoom', {handler: 'BlurIntInput', placeholder: L._('max zoom')}], + ['options.tilelayer.minZoom', {handler: 'BlurIntInput', placeholder: L._('min zoom')}], + ['options.tilelayer.attribution', {handler: 'BlurInput', placeholder: L._('attribution')}], + ['options.tilelayer.tms', {handler: 'Switch', label: L._('TMS format')}] + ]; + var customTilelayer = L.DomUtil.createFieldset(container, L._('Custom background')); + builder = new L.S.FormBuilder(this, tilelayerFields, { + callback: this.initTileLayers, + callbackContext: this + }); + customTilelayer.appendChild(builder.build()); + + if (!L.Util.isObject(this.options.limitBounds)) { + this.options.limitBounds = {}; + } + var limitBounds = L.DomUtil.createFieldset(container, L._('Limit bounds')); + var boundsFields = [ + ['options.limitBounds.south', {handler: 'BlurFloatInput', placeholder: L._('max South')}], + ['options.limitBounds.west', {handler: 'BlurFloatInput', placeholder: L._('max West')}], + ['options.limitBounds.north', {handler: 'BlurFloatInput', placeholder: L._('max North')}], + ['options.limitBounds.east', {handler: 'BlurFloatInput', placeholder: L._('max East')}] + ]; + var boundsBuilder = new L.S.FormBuilder(this, boundsFields, { + callback: this.handleLimitBounds, + callbackContext: this + }); + limitBounds.appendChild(boundsBuilder.build()); + var boundsButtons = L.DomUtil.create('div', 'button-bar', limitBounds); + var setCurrentButton = L.DomUtil.add('a', 'button half', boundsButtons, L._('Use current bounds')); + setCurrentButton.href = '#'; + L.DomEvent.on(setCurrentButton, 'click', function () { + var bounds = this.getBounds(); + this.options.limitBounds.south = L.Util.formatNum(bounds.getSouth()); + this.options.limitBounds.west = L.Util.formatNum(bounds.getWest()); + this.options.limitBounds.north = L.Util.formatNum(bounds.getNorth()); + this.options.limitBounds.east = L.Util.formatNum(bounds.getEast()); + boundsBuilder.fetchAll(); + this.isDirty = true; + this.handleLimitBounds(); + }, this); + var emptyBounds = L.DomUtil.add('a', 'button half', boundsButtons, L._('Empty')); + emptyBounds.href = '#'; + L.DomEvent.on(emptyBounds, 'click', function () { + this.options.limitBounds.south = null; + this.options.limitBounds.west = null; + this.options.limitBounds.north = null; + this.options.limitBounds.east = null; + boundsBuilder.fetchAll(); + this.isDirty = true; + this.handleLimitBounds(); + }, this); + + var slideshow = L.DomUtil.createFieldset(container, L._('Slideshow')); + var slideshowFields = [ + ['options.slideshow.active', {handler: 'Switch', label: L._('Activate slideshow mode')}], + ['options.slideshow.delay', {handler: 'SlideshowDelay', helpText: L._('Delay between two transitions when in play mode')}], + ['options.slideshow.easing', {handler: 'Switch', label: L._('Smart transitions'), inheritable: true}], + ['options.slideshow.autoplay', {handler: 'Switch', label: L._('Autostart when map is loaded')}] + ]; + var slideshowHandler = function () { + this.slideshow.setOptions(this.options.slideshow); + this.renderControls(); + }; + var slideshowBuilder = new L.S.FormBuilder(this, slideshowFields, { + callback: slideshowHandler, + callbackContext: this + }); + slideshow.appendChild(slideshowBuilder.build()); + + var credits = L.DomUtil.createFieldset(container, L._('Credits')); + var creditsFields = [ + ['options.licence', {handler: 'LicenceChooser', label: L._('licence')}], + ['options.shortCredit', {handler: 'Input', label: L._('Short credits'), helpEntries: ['shortCredit', 'textFormatting']}], + ['options.longCredit', {handler: 'Textarea', label: L._('Long credits'), helpEntries: ['longCredit', 'textFormatting']}] + ]; + var creditsBuilder = new L.S.FormBuilder(this, creditsFields, { + callback: function () {this._controls.attribution._update();}, + callbackContext: this + }); + credits.appendChild(creditsBuilder.build()); + + var advancedActions = L.DomUtil.createFieldset(container, L._('Advanced actions')); + var advancedButtons = L.DomUtil.create('div', 'button-bar', advancedActions); + var del = L.DomUtil.create('a', 'button third storage-delete', advancedButtons); + del.href = '#'; + del.innerHTML = L._('Delete'); + L.DomEvent + .on(del, 'click', L.DomEvent.stop) + .on(del, 'click', this.del, this); + var clone = L.DomUtil.create('a', 'button third storage-clone', advancedButtons); + clone.href = '#'; + clone.innerHTML = L._('Clone'); + clone.title = L._('Clone this map'); + L.DomEvent + .on(clone, 'click', L.DomEvent.stop) + .on(clone, 'click', this.clone, this); + var empty = L.DomUtil.create('a', 'button third storage-empty', advancedButtons); + empty.href = '#'; + empty.innerHTML = L._('Empty'); + empty.title = L._('Delete all layers'); + L.DomEvent + .on(empty, 'click', L.DomEvent.stop) + .on(empty, 'click', this.empty, this); + this.ui.openPanel({data: {html: container}, className: 'dark'}); + }, + + enableEdit: function() { + L.DomUtil.addClass(document.body, 'storage-edit-enabled'); + this.editEnabled = true; + this.fire('edit:enabled'); + }, + + disableEdit: function() { + if (this.isDirty) return; + L.DomUtil.removeClass(document.body, 'storage-edit-enabled'); + this.editedFeature = null; + this.editEnabled = false; + this.fire('edit:disabled'); + }, + + getDisplayName: function () { + return this.options.name || L._('Untitled map'); + }, + + initCaptionBar: function () { + var container = L.DomUtil.create('div', 'storage-caption-bar', this._controlContainer), + name = L.DomUtil.create('h3', '', container); + L.DomEvent.disableClickPropagation(container); + if (this.options.author && this.options.author.name && this.options.author.link) { + var authorContainer = L.DomUtil.add('span', 'storage-map-author', container, ' ' + L._('by') + ' '), + author = L.DomUtil.create('a'); + author.href = this.options.author.link; + author.innerHTML = this.options.author.name; + authorContainer.appendChild(author); + } + var about = L.DomUtil.add('a', 'storage-about-link', container, ' — ' + L._('About')); + about.href = '#'; + L.DomEvent.on(about, 'click', this.displayCaption, this); + var browser = L.DomUtil.add('a', 'storage-open-browser-link', container, ' | ' + L._('Browse data')); + browser.href = '#'; + L.DomEvent.on(browser, 'click', L.DomEvent.stop) + .on(browser, 'click', this.openBrowser, this); + var setName = function () { + name.innerHTML = this.getDisplayName(); + }; + L.bind(setName, this)(); + this.on('postsync', L.bind(setName, this)); + this.onceDatalayersLoaded(function () { + this.slideshow.renderToolbox(container); + }); + }, + + initEditBar: function () { + var container = L.DomUtil.create('div', 'storage-main-edit-toolbox with-transition dark', this._controlContainer), + title = L.DomUtil.add('h3', '', container, L._('Editing') + ' '), + name = L.DomUtil.create('a', 'storage-click-to-edit', title), + setName = function () { + name.innerHTML = this.getDisplayName(); + }; + L.bind(setName, this)(); + L.DomEvent.on(name, 'click', this.edit, this); + this.on('postsync', L.bind(setName, this)); + this.help.button(title, 'edit'); + var save = L.DomUtil.create('a', 'leaflet-control-edit-save button', container); + save.href = '#'; + save.title = L._('Save current edits') + ' (Ctrl-S)'; + save.innerHTML = L._('Save'); + var cancel = L.DomUtil.create('a', 'leaflet-control-edit-cancel button', container); + cancel.href = '#'; + cancel.title = L._('Cancel edits'); + cancel.innerHTML = L._('Cancel'); + var disable = L.DomUtil.create('a', 'leaflet-control-edit-disable', container); + disable.href = '#'; + disable.title = disable.innerHTML = L._('Disable editing'); + + + L.DomEvent + .addListener(disable, 'click', L.DomEvent.stop) + .addListener(disable, 'click', function (e) { + this.disableEdit(e); + this.ui.closePanel(); + }, this); + + L.DomEvent + .addListener(save, 'click', L.DomEvent.stop) + .addListener(save, 'click', this.save, this); + + L.DomEvent + .addListener(cancel, 'click', L.DomEvent.stop) + .addListener(cancel, 'click', this.askForReset, this); + }, + + askForReset: function (e) { + if (!confirm(L._('Are you sure you want to cancel your changes?'))) return; + this.reset(); + this.disableEdit(e); + this.ui.closePanel(); + }, + + startMarker: function () { + return this.editTools.startMarker(); + }, + + startPolyline: function () { + return this.editTools.startPolyline(); + }, + + startPolygon: function () { + return this.editTools.startPolygon(); + }, + + del: function () { + if (confirm(L._('Are you sure you want to delete this map?'))) { + var url = L.Util.template(this.options.urls.map_delete, {'map_id': this.options.storage_id}); + this.post(url); + } + }, + + clone: function () { + if (confirm(L._('Are you sure you want to clone this map and all its datalayers?'))) { + var url = L.Util.template(this.options.urls.map_clone, {'map_id': this.options.storage_id}); + this.post(url); + } + }, + + empty: function () { + this.eachDataLayerReverse(function (datalayer) { + datalayer._delete(); + }); + }, + + initLoader: function () { + this.loader = new L.Control.Loading(); + this.loader.onAdd(this); + }, + + post: function (url, options) { + options = options || {}; + options.listener = this; + this.xhr.post(url, options); + }, + + get: function (url, options) { + options = options || {}; + options.listener = this; + this.xhr.get(url, options); + }, + + ajax: function (options) { + options.listener = this; + this.xhr._ajax(options); + }, + + initContextMenu: function () { + this.contextmenu = new L.S.ContextMenu(this); + this.contextmenu.enable(); + }, + + setContextMenuItems: function (e) { + var items = []; + if (this._zoom !== this.getMaxZoom()) { + items.push({ + text: L._('Zoom in'), + callback: function () {this.zoomIn();} + }); + } + if (this._zoom !== this.getMinZoom()) { + items.push({ + text: L._('Zoom out'), + callback: function () {this.zoomOut();} + }); + } + if (e && e.relatedTarget) { + if (e.relatedTarget.getContextMenuItems) { + items = items.concat(e.relatedTarget.getContextMenuItems(e)); + } + } + if (this.options.allowEdit) { + items.push('-'); + if (this.editEnabled) { + if (!this.isDirty) { + items.push({ + text: L._('Stop editing') + ' (Ctrl+E)', + callback: this.disableEdit + }); + } + if (this.options.enableMarkerDraw) { + items.push( + { + text: L._('Draw a marker') + ' (Ctrl-M)', + callback: this.startMarker, + context: this + }); + } + if (this.options.enablePolylineDraw) { + items.push( + { + text: L._('Draw a polygon') + ' (Ctrl-P)', + callback: this.startPolygon, + context: this + }); + } + if (this.options.enablePolygonDraw) { + items.push( + { + text: L._('Draw a line') + ' (Ctrl-L)', + callback: this.startPolyline, + context: this + }); + } + items.push('-'); + items.push({ + text: L._('Help'), + callback: function () { this.help.show('edit');} + }); + } else { + items.push({ + text: L._('Start editing') + ' (Ctrl+E)', + callback: this.enableEdit + }); + } + } + items.push('-', + { + text: L._('Browse data'), + callback: this.openBrowser + }, + { + text: L._('About'), + callback: this.displayCaption + }, + { + text: L._('Search location'), + callback: this.search + } + ); + if (this.options.urls.routing) { + items.push('-', + { + text: L._('Directions from here'), + callback: this.openExternalRouting + } + ); + } + this.options.contextmenuItems = items; + }, + + openExternalRouting: function (e) { + var url = this.options.urls.routing; + if (url) { + var params = { + lat: e.latlng.lat, + lng: e.latlng.lng, + locale: L.locale, + zoom: this.getZoom() + }; + window.open(L.Util.template(url, params)); + } + return; + }, + + getMap: function () { + return this; + }, + + getGeoContext: function () { + var context = { + bbox: this.getBounds().toBBoxString(), + north: this.getBounds().getNorthEast().lat, + east: this.getBounds().getNorthEast().lng, + south: this.getBounds().getSouthWest().lat, + west: this.getBounds().getSouthWest().lng, + lat: this.getCenter().lat, + lng: this.getCenter().lng, + zoom: this.getZoom() + }; + context.left = context.west; + context.bottom = context.south; + context.right = context.east; + context.top = context.north; + return context; + }, + + localizeUrl: function (url) { + return L.Util.greedyTemplate(url, this.getGeoContext(), true); + }, + + proxyUrl: function (url) { + if (this.options.urls.ajax_proxy) { + url = L.Util.template(this.options.urls.ajax_proxy, {url: encodeURIComponent(url)}); + } + return url; + }, + + closeInplaceToolbar: function () { + var toolbar = this._toolbars[L.Toolbar.Popup._toolbar_class_id]; + if (toolbar) toolbar.remove(); + }, + + search: function () { + if (this._controls.search) this._controls.search.openPanel(this); + } + +}); diff --git a/umap/static/umap/js/umap.layer.js b/umap/static/umap/js/umap.layer.js new file mode 100644 index 00000000..e4fd6e37 --- /dev/null +++ b/umap/static/umap/js/umap.layer.js @@ -0,0 +1,1045 @@ +L.S.Layer = { + canBrowse: true, + + getFeatures: function () { + return this._layers; + }, + + getEditableOptions: function () {return [];}, + + postUpdate: function () {} + +}; + +L.S.Layer.Default = L.FeatureGroup.extend({ + _type: 'Default', + includes: [L.S.Layer], + + initialize: function (datalayer) { + this.datalayer = datalayer; + L.FeatureGroup.prototype.initialize.call(this); + } + +}); + + +L.S.Layer.Cluster = L.MarkerClusterGroup.extend({ + _type: 'Cluster', + includes: [L.S.Layer], + + initialize: function (datalayer) { + this.datalayer = datalayer; + var options = { + polygonOptions: { + color: this.datalayer.getColor() + }, + iconCreateFunction: function (cluster) { + return new L.Storage.Icon.Cluster(datalayer, cluster); + } + }; + if (this.datalayer.options.cluster && this.datalayer.options.cluster.radius) { + options.maxClusterRadius = this.datalayer.options.cluster.radius; + } + L.MarkerClusterGroup.prototype.initialize.call(this, options); + }, + + getEditableOptions: function () { + if (!L.Util.isObject(this.datalayer.options.cluster)) { + this.datalayer.options.cluster = {}; + } + return [ + ['options.cluster.radius', {handler: 'BlurIntInput', placeholder: L._('Clustering radius'), helpText: L._('Override clustering radius (default 80)')}], + ['options.cluster.textColor', {handler: 'TextColorPicker', placeholder: L._('Auto'), helpText: L._('Text color for the cluster label')}], + ]; + + }, + + postUpdate: function (e) { + if (e.helper.field === 'options.cluster.radius') { + // No way to reset radius of an already instanciated MarkerClusterGroup... + this.datalayer.resetLayer(true); + return; + } + if (e.helper.field === 'options.color') { + this.options.polygonOptions.color = this.datalayer.getColor(); + } + } + +}); + +L.S.Layer.Heat = L.HeatLayer.extend({ + _type: 'Heat', + includes: [L.S.Layer], + canBrowse: false, + + initialize: function (datalayer) { + this.datalayer = datalayer; + L.HeatLayer.prototype.initialize.call(this, [], this.datalayer.options.heat); + }, + + addLayer: function (layer) { + if (layer instanceof L.Marker) { + var latlng = layer.getLatLng(), alt; + if (this.datalayer.options.heat && this.datalayer.options.heat.intensityProperty) { + alt = parseFloat(layer.properties[this.datalayer.options.heat.intensityProperty || 0]); + latlng = new L.LatLng(latlng.lat, latlng.lng, alt); + } + this.addLatLng(latlng); + } + }, + + clearLayers: function () { + this.setLatLngs([]); + }, + + redraw: function () { + // setlalngs call _redraw through setAnimFrame, thus async, so this + // can ends with race condition if we remove the layer very faslty after. + // Remove me when https://github.com/Leaflet/Leaflet.heat/pull/53 is released. + if (!this._map) return; + L.HeatLayer.prototype.redraw.call(this); + }, + + getFeatures: function () { + return {}; + }, + + getBounds: function () { + return L.latLngBounds(this._latlngs); + }, + + getEditableOptions: function () { + if (!L.Util.isObject(this.datalayer.options.heat)) { + this.datalayer.options.heat = {}; + } + return [ + ['options.heat.radius', {handler: 'BlurIntInput', placeholder: L._('Heatmap radius'), helpText: L._('Override heatmap radius (default 25)')}], + ['options.heat.intensityProperty', {handler: 'BlurInput', placeholder: L._('Heatmap intensity property'), helpText: L._('Optional intensity property for heatmap')}] + ]; + + }, + + postUpdate: function (e) { + if (e.helper.field === 'options.heat.intensityProperty') { + this.datalayer.resetLayer(true); // We need to repopulate the latlngs + return; + } + if (e.helper.field === 'options.heat.radius') { + this.options.radius = this.datalayer.options.heat.radius; + } + this._updateOptions(); + } + +}); + +L.Storage.DataLayer = L.Class.extend({ + + includes: [L.Mixin.Events], + + options: { + displayOnLoad: true, + browsable: true + }, + + initialize: function (map, data) { + this.map = map; + this._index = Array(); + this._layers = {}; + this._geojson = null; + this._propertiesIndex = []; + + this.parentPane = this.map.getPane('overlayPane'); + this.pane = this.map.createPane('datalayer' + L.stamp(this), this.parentPane); + this.pane.dataset.id = L.stamp(this); + this.renderer = L.svg({pane: this.pane}); + + var isDirty = false, + isDeleted = false, + self = this; + try { + Object.defineProperty(this, 'isDirty', { + get: function () { + return isDirty; + }, + set: function (status) { + if (!isDirty && status) self.fire('dirty'); + isDirty = status; + if (status) { + self.map.addDirtyDatalayer(self); + // A layer can be made dirty by indirect action (like dragging layers) + // we need to have it loaded before saving it. + if (!self.isLoaded()) self.fetchData(); + } else { + self.map.removeDirtyDatalayer(self); + self.isDeleted = false; + } + } + }); + } + catch (e) { + // Certainly IE8, which has a limited version of defineProperty + } + try { + Object.defineProperty(this, 'isDeleted', { + get: function () { + return isDeleted; + }, + set: function (status) { + if (!isDeleted && status) self.fire('deleted'); + isDeleted = status; + if (status) self.isDirty = status; + } + }); + } + catch (e) { + // Certainly IE8, which has a limited version of defineProperty + } + this.setStorageId(data.id); + this.setOptions(data); + this.backupOptions(); + this.connectToMap(); + if (this.displayedOnLoad()) this.show(); + if (!this.storage_id) this.isDirty = true; + this.onceLoaded(function () { + this.map.on('moveend', this.fetchRemoteData, this); + }); + }, + + displayedOnLoad: function () { + return ((this.map.datalayersOnLoad && this.storage_id && this.map.datalayersOnLoad.indexOf(this.storage_id.toString()) !== -1) || + (!this.map.datalayersOnLoad && this.options.displayOnLoad)); + }, + + insertBefore: function (other) { + if (!other) return; + this.parentPane.insertBefore(this.pane, other.pane); + }, + + insertAfter: function (other) { + if (!other) return; + this.parentPane.insertBefore(this.pane, other.pane.nextSibling); + }, + + bringToTop: function () { + this.parentPane.appendChild(this.pane); + }, + + resetLayer: function (force) { + if (this.layer && this.options.type === this.layer._type && !force) return; + var visible = this.isVisible(); + if (this.layer) this.layer.clearLayers(); + if (visible) this.map.removeLayer(this.layer); + var Class = L.S.Layer[this.options.type] || L.S.Layer.Default; + this.layer = new Class(this); + this.eachLayer(function (layer) { + this.layer.addLayer(layer); + }); + if (visible) this.map.addLayer(this.layer); + this.propagateRemote(); + }, + + eachLayer: function (method, context) { + for (var i in this._layers) { + method.call(context || this, this._layers[i]); + } + return this; + }, + + eachFeature: function (method, context) { + if (this.layer && this.layer.canBrowse) { + for (var i = 0; i < this._index.length; i++) { + method.call(context || this, this._layers[this._index[i]]); + } + } + return this; + }, + + fetchData: function () { + if (!this.storage_id) return; + this.map.get(this._dataUrl(), { + callback: function (geojson, response) { + this._etag = response.getResponseHeader('ETag'); + this.fromUmapGeoJSON(geojson); + this.backupOptions(); + this.fire('loaded'); + }, + context: this + }); + }, + + fromGeoJSON: function (geojson) { + this.addData(geojson); + this._geojson = geojson; + this.fire('dataloaded'); + this.fire('datachanged'); + }, + + fromUmapGeoJSON: function (geojson) { + if (geojson._storage) this.setOptions(geojson._storage); + if (this.isRemoteLayer()) this.fetchRemoteData(); + else this.fromGeoJSON(geojson); + this._loaded = true; + }, + + clear: function () { + this.layer.clearLayers(); + this._layers = {}; + this._index = Array(); + if (this._geojson) { + this.backupData(); + this._geojson = null; + } + }, + + backupData: function () { + this._geojson_bk = L.Util.CopyJSON(this._geojson); + }, + + reindex: function () { + var features = []; + this.eachFeature(function (feature) { + features.push(feature); + }); + L.Util.sortFeatures(features, this.map.getOption('sortKey')); + this._index = []; + for (var i = 0; i < features.length; i++) { + this._index.push(L.Util.stamp(features[i])); + } + }, + + fetchRemoteData: function () { + if (!this.isRemoteLayer()) return; + var from = parseInt(this.options.remoteData.from, 10), + to = parseInt(this.options.remoteData.to, 10); + if ((!isNaN(from) && this.map.getZoom() < from) || + (!isNaN(to) && this.map.getZoom() > to) ) { + this.clear(); + return; + } + if (!this.options.remoteData.dynamic && this.hasDataLoaded()) return; + if (!this.isVisible()) return; + var self = this, + url = this.map.localizeUrl(this.options.remoteData.url); + if (this.options.remoteData.proxy) url = this.map.proxyUrl(url); + this.map.ajax({ + uri: url, + verb: 'GET', + callback: function (raw) { + self.clear(); + self.rawToGeoJSON(raw, self.options.remoteData.format, function (geojson) {self.fromGeoJSON(geojson);}); + } + }); + }, + + onceLoaded: function (callback, context) { + if (this.isLoaded()) callback.call(context || this, this); + else this.once('loaded', callback, context); + return this; + }, + + onceDataLoaded: function (callback, context) { + if (this.hasDataLoaded()) callback.call(context || this, this); + else this.once('dataloaded', callback, context); + return this; + }, + + isLoaded: function () { + return !this.storage_id || this._loaded; + }, + + hasDataLoaded: function () { + return !this.storage_id || this._geojson !== null; + }, + + setStorageId: function (id) { + // Datalayer is null when listening creation form + if (!this.storage_id && id) this.storage_id = id; + }, + + backupOptions: function () { + this._backupOptions = L.Util.CopyJSON(this.options); + }, + + resetOptions: function () { + this.options = L.Util.CopyJSON(this._backupOptions); + }, + + setOptions: function (options) { + this.options = L.Util.CopyJSON(L.Storage.DataLayer.prototype.options); // Start from fresh. + this.updateOptions(options); + }, + + updateOptions: function (options) { + L.Util.setOptions(this, options); + this.resetLayer(); + }, + + connectToMap: function () { + var id = L.stamp(this); + if (!this.map.datalayers[id]) { + this.map.datalayers[id] = this; + if (L.Util.indexOf(this.map.datalayers_index, this) === -1) this.map.datalayers_index.push(this); + } + this.map.updateDatalayersControl(); + }, + + _dataUrl: function() { + var template = this.map.options.urls.datalayer_view; + return L.Util.template(template, {'pk': this.storage_id, 'map_id': this.map.options.storage_id}); + }, + + isRemoteLayer: function () { + return !!(this.options.remoteData && this.options.remoteData.url && this.options.remoteData.format); + }, + + isClustered: function () { + return this.options.type === 'Cluster'; + }, + + addLayer: function (feature) { + var id = L.stamp(feature); + feature.connectToDataLayer(this); + this._index.push(id); + this._layers[id] = feature; + this.layer.addLayer(feature); + this.indexProperties(feature); + if (this.hasDataLoaded()) this.fire('datachanged'); + }, + + removeLayer: function (feature) { + var id = L.stamp(feature); + feature.disconnectFromDataLayer(this); + this._index.splice(this._index.indexOf(id), 1); + delete this._layers[id]; + this.layer.removeLayer(feature); + if (this.hasDataLoaded()) this.fire('datachanged'); + }, + + indexProperties: function (feature) { + for (var i in feature.properties) if (typeof feature.properties[i] !== 'object') this.indexProperty(i); + }, + + indexProperty: function (name) { + if (!name) return; + if (name.indexOf('_') === 0) return; + if (L.Util.indexOf(this._propertiesIndex, name) !== -1) return; + this._propertiesIndex.push(name); + }, + + deindexProperty: function (name) { + var idx = this._propertiesIndex.indexOf(name); + if (idx !== -1) this._propertiesIndex.splice(idx, 1); + }, + + addData: function (geojson) { + try { + // Do not fail if remote data is somehow invalid, + // otherwise the layer becomes uneditable. + this.geojsonToFeatures(geojson); + } catch (err) { + console.error(err); + } + }, + + addRawData: function (c, type) { + var self = this; + this.rawToGeoJSON(c, type, function (geojson) { + self.addData(geojson); + }); + }, + + rawToGeoJSON: function (c, type, callback) { + var self = this; + var toDom = function (x) { + return (new DOMParser()).parseFromString(x, 'text/xml'); + }; + + // TODO add a duck typing guessType + if (type === 'csv') { + csv2geojson.csv2geojson(c, { + delimiter: 'auto', + includeLatLon: false + }, function(err, result) { + if (err) { + var message; + if (err.type === 'Error') { + message = err.message; + } else { + message = L._('{count} errors during import: {message}', {count: err.length, message: err[0].message}); + } + self.map.ui.alert({content: message, level: 'error', duration: 10000}); + console.log(err); + } + if (result && result.features.length) { + callback(result); + } + }); + } else if (type === 'gpx') { + callback(toGeoJSON.gpx(toDom(c))); + } else if (type === 'georss') { + callback(GeoRSSToGeoJSON(toDom(c))); + } else if (type === 'kml') { + callback(toGeoJSON.kml(toDom(c))); + } else if (type === 'osm') { + var d; + try { + d = JSON.parse(c); + } catch (e) { + d = toDom(c); + } + callback(osmtogeojson(d)); + } else if (type === 'geojson') { + try { + var gj = JSON.parse(c); + callback(gj); + } catch(err) { + self.map.ui.alert({content: 'Invalid JSON file: ' + err}); + return; + } + } + }, + + geojsonToFeatures: function (geojson) { + if (!geojson) return; + var features = geojson instanceof Array ? geojson : geojson.features, + i, len, latlng, latlngs; + + if (features) { + L.Util.sortFeatures(features, this.map.getOption('sortKey')); + for (i = 0, len = features.length; i < len; i++) { + this.geojsonToFeatures(features[i]); + } + return this; + } + + var geometry = geojson.type === 'Feature' ? geojson.geometry : geojson; + if (!geometry) return; // null geometry is valid geojson. + var coords = geometry.coordinates, + layer, tmp; + + switch (geometry.type) { + case 'Point': + try { + latlng = L.GeoJSON.coordsToLatLng(coords); + } catch (e) { + console.error('Invalid latlng object from', coords); + break; + } + layer = this._pointToLayer(geojson, latlng); + break; + + case 'MultiLineString': + case 'LineString': + latlngs = L.GeoJSON.coordsToLatLngs(coords, geometry.type === 'LineString' ? 0 : 1); + if (!latlngs.length) break; + layer = this._lineToLayer(geojson, latlngs); + break; + + case 'MultiPolygon': + case 'Polygon': + latlngs = L.GeoJSON.coordsToLatLngs(coords, geometry.type === 'Polygon' ? 1 : 2); + layer = this._polygonToLayer(geojson, latlngs); + break; + case 'GeometryCollection': + return this.geojsonToFeatures(geometry.geometries); + + default: + this.map.ui.alert({content: L._('Skipping unkown geometry.type: {type}', {type: geometry.type}), level: 'error'}); + } + if (layer) { + this.addLayer(layer); + return layer; + } + }, + + _pointToLayer: function(geojson, latlng) { + return new L.Storage.Marker( + this.map, + latlng, + {'geojson': geojson, 'datalayer': this} + ); + }, + + _lineToLayer: function(geojson, latlngs) { + return new L.Storage.Polyline( + this.map, + latlngs, + {'geojson': geojson, 'datalayer': this, color: null} + ); + }, + + _polygonToLayer: function(geojson, latlngs) { + // Ensure no empty hole + // for (var i = latlngs.length - 1; i > 0; i--) { + // if (!latlngs.slice()[i].length) latlngs.splice(i, 1); + // } + return new L.Storage.Polygon( + this.map, + latlngs, + {'geojson': geojson, 'datalayer': this} + ); + }, + + importRaw: function (raw, type) { + this.addRawData(raw, type); + this.isDirty = true; + this.zoomTo(); + }, + + importFromFiles: function (files, type) { + for (var i = 0, f; f = files[i]; i++) { + this.importFromFile(f, type); + } + }, + + importFromFile: function (f, type) { + var reader = new FileReader(), + self = this; + type = type || L.Util.detectFileType(f); + reader.readAsText(f); + reader.onload = function (e) { + self.importRaw(e.target.result, type); + }; + }, + + importFromUrl: function (url, type) { + url = this.map.localizeUrl(url); + var self = this; + this.map.xhr._ajax({verb: 'GET', uri: url, callback: function (data) { + self.importRaw(data, type); + }}); + }, + + getEditUrl: function() { + return L.Util.template(this.map.options.urls.datalayer_update, {'map_id': this.map.options.storage_id, 'pk': this.storage_id}); + }, + + getCreateUrl: function() { + return L.Util.template(this.map.options.urls.datalayer_create, {'map_id': this.map.options.storage_id}); + }, + + getSaveUrl: function () { + return (this.storage_id && this.getEditUrl()) || this.getCreateUrl(); + }, + + getColor: function () { + return this.options.color || this.map.getOption('color'); + }, + + getDeleteUrl: function () { + return L.Util.template(this.map.options.urls.datalayer_delete, {'pk': this.storage_id, 'map_id': this.map.options.storage_id}); + + }, + + getVersionsUrl: function () { + return L.Util.template(this.map.options.urls.datalayer_versions, {'pk': this.storage_id, 'map_id': this.map.options.storage_id}); + }, + + getVersionUrl: function (name) { + return L.Util.template(this.map.options.urls.datalayer_version, {'pk': this.storage_id, 'map_id': this.map.options.storage_id, name: name}); + }, + + _delete: function () { + this.isDeleted = true; + this.erase(); + }, + + empty: function () { + if (this.isRemoteLayer()) return; + this.clear(); + this.isDirty = true; + }, + + clone: function () { + var options = L.Util.CopyJSON(this.options); + options.name = L._('Clone of {name}', {name: this.options.name}); + delete options.id; + var geojson = L.Util.CopyJSON(this._geojson), + datalayer = this.map.createDataLayer(options); + datalayer.fromGeoJSON(geojson); + return datalayer; + }, + + erase: function () { + this.hide(); + delete this.map.datalayers[L.stamp(this)]; + this.map.datalayers_index.splice(this.getRank(), 1); + this.parentPane.removeChild(this.pane); + this.map.updateDatalayersControl(); + this.fire('erase'); + this._leaflet_events_bk = this._leaflet_events; + this.off(); + this.clear(); + delete this._loaded; + }, + + reset: function () { + if (!this.storage_id) this.erase(); + + this.resetOptions(); + this.parentPane.appendChild(this.pane); + if (this._leaflet_events_bk && !this._leaflet_events) { + this._leaflet_events = this._leaflet_events_bk; + } + this.clear(); + this.hide(); + if (this.isRemoteLayer()) this.fetchRemoteData(); + else if (this._geojson_bk) this.fromGeoJSON(this._geojson_bk); + this._loaded = true; + this.show(); + this.isDirty = false; + }, + + redraw: function () { + this.hide(); + this.show(); + }, + + edit: function () { + if(!this.map.editEnabled || !this.isLoaded()) {return;} + var container = L.DomUtil.create('div'), + metadataFields = [ + 'options.name', + 'options.description', + ['options.type', {handler: 'LayerTypeChooser', label: L._('Type of layer')}], + ['options.displayOnLoad', {label: L._('Display on load'), handler: 'Switch'}], + ['options.browsable', {label: L._('Data is browsable'), handler: 'Switch', helpEntries: 'browsable'}] + ]; + var title = L.DomUtil.add('h3', '', container, L._('Layer properties')); + var builder = new L.S.FormBuilder(this, metadataFields, { + callback: function (e) { + this.map.updateDatalayersControl(); + if (e.helper.field === 'options.type') { + this.resetLayer(); + this.edit(); + } + } + }); + container.appendChild(builder.build()); + + var shapeOptions = [ + 'options.color', + 'options.iconClass', + 'options.iconUrl', + 'options.opacity', + 'options.stroke', + 'options.weight', + 'options.fill', + 'options.fillColor', + 'options.fillOpacity', + ]; + + shapeOptions = shapeOptions.concat(this.layer.getEditableOptions()); + + var redrawCallback = function (field) { + this.hide(); + this.layer.postUpdate(field); + this.show(); + }; + + builder = new L.S.FormBuilder(this, shapeOptions, { + id: 'datalayer-advanced-properties', + callback: redrawCallback + }); + var shapeProperties = L.DomUtil.createFieldset(container, L._('Shape properties')); + shapeProperties.appendChild(builder.build()); + + var optionsFields = [ + 'options.smoothFactor', + 'options.dashArray', + 'options.zoomTo', + 'options.labelKey' + ]; + + optionsFields = optionsFields.concat(this.layer.getEditableOptions()); + + builder = new L.S.FormBuilder(this, optionsFields, { + id: 'datalayer-advanced-properties', + callback: redrawCallback + }); + var advancedProperties = L.DomUtil.createFieldset(container, L._('Advanced properties')); + advancedProperties.appendChild(builder.build()); + + var popupFields = [ + 'options.popupTemplate', + 'options.popupContentTemplate', + 'options.showLabel', + 'options.labelDirection', + 'options.labelHover', + 'options.labelInteractive', + ]; + builder = new L.S.FormBuilder(this, popupFields, {callback: redrawCallback}); + var popupFieldset = L.DomUtil.createFieldset(container, L._('Interaction options')); + popupFieldset.appendChild(builder.build()); + + if (!L.Util.isObject(this.options.remoteData)) { + this.options.remoteData = {}; + } + var remoteDataFields = [ + ['options.remoteData.url', {handler: 'Url', label: L._('Url'), helpEntries: 'formatURL'}], + ['options.remoteData.format', {handler: 'DataFormat', label: L._('Format')}], + ['options.remoteData.from', {label: L._('From zoom'), helpText: L._('Optionnal.')}], + ['options.remoteData.to', {label: L._('To zoom'), helpText: L._('Optionnal.')}], + ['options.remoteData.dynamic', {handler: 'Switch', label: L._('Dynamic'), helpEntries: 'dynamicRemoteData'}], + ['options.remoteData.licence', {label: L._('Licence'), helpText: L._('Please be sure the licence is compliant with your use.')}] + ]; + if (this.map.options.urls.ajax_proxy) { + remoteDataFields.push(['options.remoteData.proxy', {handler: 'Switch', label: L._('Proxy request'), helpEntries: 'proxyRemoteData'}]); + } + + var remoteDataContainer = L.DomUtil.createFieldset(container, L._('Remote data')); + builder = new L.S.FormBuilder(this, remoteDataFields); + remoteDataContainer.appendChild(builder.build()); + + if (this.map.options.urls.datalayer_versions) this.buildVersionsFieldset(container); + + var advancedActions = L.DomUtil.createFieldset(container, L._('Advanced actions')); + var advancedButtons = L.DomUtil.create('div', 'button-bar', advancedActions); + var deleteLink = L.DomUtil.create('a', 'button third delete_datalayer_button storage-delete', advancedButtons); + deleteLink.innerHTML = L._('Delete'); + deleteLink.href = '#'; + L.DomEvent.on(deleteLink, 'click', L.DomEvent.stop) + .on(deleteLink, 'click', function () { + this._delete(); + this.map.ui.closePanel(); + }, this); + if (!this.isRemoteLayer()) { + var emptyLink = L.DomUtil.create('a', 'button third storage-empty', advancedButtons); + emptyLink.innerHTML = L._('Empty'); + emptyLink.href = '#'; + L.DomEvent.on(emptyLink, 'click', L.DomEvent.stop) + .on(emptyLink, 'click', this.empty, this); + } + var cloneLink = L.DomUtil.create('a', 'button third storage-clone', advancedButtons); + cloneLink.innerHTML = L._('Clone'); + cloneLink.href = '#'; + L.DomEvent.on(cloneLink, 'click', L.DomEvent.stop) + .on(cloneLink, 'click', function () { + var datalayer = this.clone(); + datalayer.edit(); + }, this); + this.map.ui.openPanel({data: {html: container}, className: 'dark'}); + + }, + + getOption: function (option) { + if (L.Util.usableOption(this.options, option)) return this.options[option]; + else return this.map.getOption(option); + }, + + buildVersionsFieldset: function (container) { + + var appendVersion = function (data) { + var date = new Date(parseInt(data.at, 10)); + var content = date.toLocaleFormat() + ' (' + parseInt(data.size) / 1000 + 'Kb)'; + var el = L.DomUtil.create('div', 'storage-datalayer-version', versionsContainer); + var a = L.DomUtil.create('a', '', el); + L.DomUtil.add('span', '', el, content); + a.href = '#'; + a.title = L._('Restore this version'); + L.DomEvent.on(a, 'click', L.DomEvent.stop) + .on(a, 'click', function () { + this.restore(data.name); + }, this); + }; + + var versionsContainer = L.DomUtil.createFieldset(container, L._('Versions'), {callback: function () { + this.map.xhr.get(this.getVersionsUrl(), { + callback: function (data) { + for (var i = 0; i < data.versions.length; i++) { + appendVersion.call(this, data.versions[i]); + }; + }, + context: this + }); + }, context: this}); + }, + + restore: function (version) { + if (!this.map.editEnabled) return; + if (!confirm(L._('Are you sure you want to restore this version?'))) return; + this.map.xhr.get(this.getVersionUrl(version), { + callback: function (geojson) { + if (geojson._storage) this.setOptions(geojson._storage); + this.empty(); + if (this.isRemoteLayer()) this.fetchRemoteData(); + else this.addData(geojson); + this.isDirty = true; + }, + context: this + }) + }, + + featuresToGeoJSON: function () { + var features = []; + this.eachLayer(function (layer) { + features.push(layer.toGeoJSON()); + }); + return features; + }, + + show: function () { + if(!this.isLoaded()) this.fetchData(); + this.map.addLayer(this.layer); + this.fire('show'); + }, + + hide: function () { + this.map.removeLayer(this.layer); + this.fire('hide'); + }, + + toggle: function () { + if (!this.isVisible()) this.show(); + else this.hide(); + }, + + zoomTo: function () { + if (!this.isVisible()) return; + var bounds = this.layer.getBounds(); + if (bounds.isValid()) this.map.fitBounds(bounds); + }, + + allowBrowse: function () { + return !!this.options.browsable && this.canBrowse() && this.isVisible() && this._index.length; + }, + + isVisible: function () { + return this.map.hasLayer(this.layer); + }, + + canBrowse: function () { + return this.layer && this.layer.canBrowse; + }, + + getFeatureByIndex: function (index) { + if (index === -1) index = this._index.length - 1; + var id = this._index[index]; + return this._layers[id]; + }, + + getNextFeature: function (feature) { + var id = this._index.indexOf(L.stamp(feature)), + nextId = this._index[id + 1]; + return nextId? this._layers[nextId]: this.getNextBrowsable().getFeatureByIndex(0); + }, + + getPreviousFeature: function (feature) { + if (this._index <= 1) { return null; } + var id = this._index.indexOf(L.stamp(feature)), + previousId = this._index[id - 1]; + return previousId? this._layers[previousId]: this.getPreviousBrowsable().getFeatureByIndex(-1); + }, + + getPreviousBrowsable: function () { + var id = this.getRank(), next, index = this.map.datalayers_index; + while(id = index[++id] ? id : 0, next = index[id]) { + if (next === this || next.allowBrowse()) break; + } + return next; + }, + + getNextBrowsable: function () { + var id = this.getRank(), prev, index = this.map.datalayers_index; + while(id = index[--id] ? id : index.length - 1, prev = index[id]) { + if (prev === this || prev.allowBrowse()) break; + } + return prev; + }, + + umapGeoJSON: function () { + return { + type: 'FeatureCollection', + features: this.isRemoteLayer() ? [] : this.featuresToGeoJSON(), + _storage: this.options + }; + }, + + metadata: function () { + return { + id: this.storage_id, + name: this.options.name, + displayOnLoad: this.options.displayOnLoad + } + }, + + getRank: function () { + return this.map.datalayers_index.indexOf(this); + }, + + save: function () { + if (this.isDeleted) return this.saveDelete(); + if (!this.isLoaded()) {return;} + var geojson = this.umapGeoJSON(); + var formData = new FormData(); + formData.append('name', this.options.name); + formData.append('display_on_load', !!this.options.displayOnLoad); + formData.append('rank', this.getRank()); + // Filename support is shaky, don't do it for now. + var blob = new Blob([JSON.stringify(geojson)], {type: 'application/json'}); + formData.append('geojson', blob); + this.map.post(this.getSaveUrl(), { + data: formData, + callback: function (data, response) { + this._geojson = geojson; + this._etag = response.getResponseHeader('ETag'); + this.setStorageId(data.id); + this.updateOptions(data); + this.backupOptions(); + this.connectToMap(); + this._loaded = true; + this.redraw(); // Needed for reordering features + this.isDirty = false; + this.map.continueSaving(); + }, + context: this, + headers: {'If-Match': this._etag || ''} + }); + }, + + saveDelete: function () { + var callback = function () { + this.isDirty = false; + this.map.continueSaving(); + } + if (!this.storage_id) return callback.call(this); + this.map.xhr.post(this.getDeleteUrl(), { + callback: callback, + context: this + }); + }, + + getMap: function () { + return this.map; + }, + + getName: function () { + return this.options.name || L._('Untitled layer'); + }, + + tableEdit: function () { + if (this.isRemoteLayer() || !this.isVisible()) return; + var editor = new L.S.TableEditor(this); + editor.edit(); + } + +}); + +L.TileLayer.include({ + + toJSON: function () { + return { + minZoom: this.options.minZoom, + maxZoom: this.options.maxZoom, + attribution: this.options.attribution, + url_template: this._url, + name: this.options.name, + tms: this.options.tms + }; + }, + + getAttribution: function () { + return L.Util.toHTML(this.options.attribution); + } + +}); diff --git a/umap/static/umap/js/umap.popup.js b/umap/static/umap/js/umap.popup.js new file mode 100644 index 00000000..cf28c981 --- /dev/null +++ b/umap/static/umap/js/umap.popup.js @@ -0,0 +1,218 @@ +L.S.Popup = L.Popup.extend({ + + options: { + parseTemplate: true + }, + + initialize: function (feature) { + this.feature = feature; + this.container = L.DomUtil.create('div', 'storage-popup'); + this.format(); + L.Popup.prototype.initialize.call(this, {}, feature); + this.setContent(this.container); + }, + + hasFooter: function () { + return this.feature.hasPopupFooter(); + }, + + renderTitle: function () {}, + + renderBody: function () { + var template = this.feature.getOption('popupContentTemplate'), + container = L.DomUtil.create('div', ''), + content, properties, center; + if (this.options.parseTemplate) { + // Include context properties + properties = this.feature.map.getGeoContext(); + center = this.feature.getCenter(); + properties.lat = center.lat; + properties.lon = center.lng; + properties.lng = center.lng; + if (typeof this.feature.getMeasure !== 'undefined') { + properties.measure = this.feature.getMeasure(); + } + properties = L.extend(properties, this.feature.properties); + // Resolve properties inside description + properties.description = L.Util.greedyTemplate(this.feature.properties.description || '', properties); + content = L.Util.greedyTemplate(template, properties); + } + content = L.Util.toHTML(content); + container.innerHTML = content; + var els = container.querySelectorAll('img,iframe'); + for (var i = 0; i < els.length; i++) { + this.onElementLoaded(els[i]); + } + if (!els.length && container.textContent.replace('\n', '') === '') { + container.innerHTML = ''; + L.DomUtil.add('h3', '', container, this.feature.getDisplayName()); + } + return container; + }, + + renderFooter: function () { + if (this.hasFooter()) { + var footer = L.DomUtil.create('ul', 'storage-popup-footer', this.container), + previousLi = L.DomUtil.create('li', 'previous', footer), + zoomLi = L.DomUtil.create('li', 'zoom', footer), + nextLi = L.DomUtil.create('li', 'next', footer), + next = this.feature.getNext(), + prev = this.feature.getPrevious(); + if (next) { + nextLi.title = L._('Go to «{feature}»', {feature: next.properties.name || L._('next')}); + } + if (prev) { + previousLi.title = L._('Go to «{feature}»', {feature: prev.properties.name || L._('previous')}); + } + zoomLi.title = L._('Zoom to this feature'); + L.DomEvent.on(nextLi, 'click', function () { + if (next) next.bringToCenter({zoomTo: next.getOption('zoomTo'), callback: next.view}); + }); + L.DomEvent.on(previousLi, 'click', function () { + if (prev) prev.bringToCenter({zoomTo: prev.getOption('zoomTo'), callback: prev.view}); + }); + L.DomEvent.on(zoomLi, 'click', function () { + this.bringToCenter({zoomTo: this.getOption('zoomTo')}); + }, this.feature); + } + }, + + format: function () { + var title = this.renderTitle(); + if (title) this.container.appendChild(title); + var body = this.renderBody(); + if (body) L.DomUtil.add('div', 'storage-popup-content', this.container, body); + this.renderFooter(); + }, + + onElementLoaded: function (el) { + L.DomEvent.on(el, 'load', function () { + this._updateLayout(); + this._updatePosition(); + this._adjustPan(); + }, this); + } + +}); + +L.S.Popup.Large = L.S.Popup.extend({ + options: { + maxWidth: 500, + className: 'storage-popup-large' + } +}); + +L.S.Popup.BaseWithTitle = L.S.Popup.extend({ + + renderTitle: function () { + var title; + if (this.feature.getDisplayName()) { + title = L.DomUtil.create('h3', 'popup-title'); + title.innerHTML = L.Util.escapeHTML(this.feature.getDisplayName()); + } + return title; + } + +}); + +L.S.Popup.Table = L.S.Popup.BaseWithTitle.extend({ + + formatRow: function (key, value) { + if (value.indexOf('http') === 0) { + value = '' + value + ''; + } + return value; + }, + + addRow: function (container, key, value) { + var tr = L.DomUtil.create('tr', '', container); + L.DomUtil.add('th', '', tr, key); + L.DomUtil.add('td', '', tr, this.formatRow(key, value)); + }, + + renderBody: function () { + var table = L.DomUtil.create('table'); + + for (var key in this.feature.properties) { + if (typeof this.feature.properties[key] === 'object' || key === 'name') continue; + // TODO, manage links (url, mailto, wikipedia...) + this.addRow(table, key, L.Util.escapeHTML(this.feature.properties[key]).trim()); + } + return table; + } + +}); + +L.S.Popup.table = L.S.Popup.Table; // backward compatibility + +L.S.Popup.GeoRSSImage = L.S.Popup.BaseWithTitle.extend({ + + options: { + minWidth: 300, + maxWidth: 500, + className: 'storage-popup-large storage-georss-image' + }, + + renderBody: function () { + var container = L.DomUtil.create('a'); + container.href = this.feature.properties.link; + container.target = '_blank'; + if (this.feature.properties.img) { + var img = L.DomUtil.create('img', '', container); + img.src = this.feature.properties.img; + // Sadly, we are unable to override this from JS the clean way + // See https://github.com/Leaflet/Leaflet/commit/61d746818b99d362108545c151a27f09d60960ee#commitcomment-6061847 + img.style.maxWidth = this.options.maxWidth + 'px'; + img.style.maxHeight = this.options.maxWidth + 'px'; + this.onElementLoaded(img); + } + return container; + } + +}); + +L.S.Popup.GeoRSSLink = L.S.Popup.extend({ + + options: { + className: 'storage-georss-link' + }, + + renderBody: function () { + var title = this.renderTitle(this), + a = L.DomUtil.add('a'); + a.href = this.feature.properties.link; + a.target = '_blank'; + a.appendChild(title); + return a; + } +}); + +L.S.Popup.SimplePanel = L.S.Popup.extend({ + + options: { + zoomAnimation: false + }, + + allButton: function () { + var button = L.DomUtil.create('li', ''); + L.DomUtil.create('i', 'storage-icon-16 storage-list', button); + var label = L.DomUtil.create('span', '', button); + label.innerHTML = label.title = L._('See all'); + L.DomEvent.on(button, 'click', this.feature.map.openBrowser, this.feature.map); + return button; + }, + + update: function () { + this.feature.map.ui.openPanel({data: {html: this._content}, actions: [this.allButton()]}); + }, + + onRemove: function (map) { + map.ui.closePanel(); + L.S.Popup.prototype.onRemove.call(this, map); + }, + + _initLayout: function () {this._container = L.DomUtil.create('span');}, + _updateLayout: function () {}, + _updatePosition: function () {}, + _adjustPan: function () {} +}); diff --git a/umap/static/umap/js/umap.slideshow.js b/umap/static/umap/js/umap.slideshow.js new file mode 100644 index 00000000..96f260a0 --- /dev/null +++ b/umap/static/umap/js/umap.slideshow.js @@ -0,0 +1,164 @@ +L.S.Slideshow = L.Class.extend({ + + statics: { + CLASSNAME: 'storage-slideshow-active' + }, + + options: { + delay: 5000, + autoplay: false + }, + + initialize: function (map, options) { + this.setOptions(options); + this.map = map; + this._id = null; + var current = null, // current feature + self = this; + try { + Object.defineProperty(this, 'current', { + get: function () { + if (!current) { + var datalayer = this.defaultDatalayer(); + if (datalayer) current = datalayer.getFeatureByIndex(0); + } + return current; + }, + set: function (feature) { + current = feature; + } + }); + } + catch (e) { + // Certainly IE8, which has a limited version of defineProperty + } + try { + Object.defineProperty(this, 'next', { + get: function () { + if (!current) { + return self.current; + } + return current.getNext(); + } + }); + } + catch (e) { + // Certainly IE8, which has a limited version of defineProperty + } + if (this.options.autoplay) { + this.map.onceDatalayersLoaded(function () { + this.play(); + }, this); + } + this.map.on('edit:enabled', function () { + this.stop(); + }, this); + }, + + setOptions: function (options) { + L.setOptions(this, options); + this.timeSpinner(); + }, + + defaultDatalayer: function () { + return this.map.findDataLayer(function (d) { return d.allowBrowse(); }); + }, + + timeSpinner: function () { + var time = parseInt(this.options.delay, 10); + if (!time) return; + var css = 'rotation ' + time / 1000 + 's infinite linear', + spinners = document.querySelectorAll('.storage-slideshow-toolbox .play .spinner'); + for (var i = 0; i < spinners.length; i++) { + spinners[i].style.animation = css; + spinners[i].style['-webkit-animation'] = css; + spinners[i].style['-moz-animation'] = css; + spinners[i].style['-o-animation'] = css; + } + }, + + resetSpinners: function () { + // Make that animnation is coordinated with user actions + var spinners = document.querySelectorAll('.storage-slideshow-toolbox .play .spinner'), + el, newOne; + for (var i = 0; i < spinners.length; i++) { + el = spinners[i]; + newOne = el.cloneNode(true); + el.parentNode.replaceChild(newOne, el); + } + }, + + play: function () { + if (this._id) return; + if (this.map.editEnabled) return; + L.DomUtil.addClass(document.body, L.S.Slideshow.CLASSNAME); + this._id = window.setInterval(L.bind(this.loop, this), this.options.delay); + this.resetSpinners(); + this.loop(); + }, + + loop: function () { + this.current = this.next; + this.step(); + }, + + pause: function () { + if (this._id) { + L.DomUtil.removeClass(document.body, L.S.Slideshow.CLASSNAME); + window.clearInterval(this._id); + this._id = null; + } + }, + + stop: function () { + this.pause(); + this.current = null; + }, + + forward: function () { + this.pause(); + this.current = this.next; + this.step(); + }, + + backward: function () { + this.pause(); + if (this.current) this.current = this.current.getPrevious(); + this.step(); + }, + + step: function () { + if(!this.current) return this.stop(); + this.current.zoomTo({easing: this.options.easing}); + this.current.view(); + }, + + renderToolbox: function (container) { + var box = L.DomUtil.create('ul', 'storage-slideshow-toolbox'), + play = L.DomUtil.create('li', 'play', box), + stop = L.DomUtil.create('li', 'stop', box), + prev = L.DomUtil.create('li', 'prev', box), + next = L.DomUtil.create('li', 'next', box); + L.DomUtil.create('div', 'spinner', play); + play.title = L._('Start slideshow'); + stop.title = L._('Stop slideshow'); + next.title = L._('Zoom to the next'); + prev.title = L._('Zoom to the previous'); + var toggle = function () { + if (this._id) this.pause(); + else this.play(); + }; + L.DomEvent.on(play, 'click', L.DomEvent.stop) + .on(play, 'click', toggle, this); + L.DomEvent.on(stop, 'click', L.DomEvent.stop) + .on(stop, 'click', this.stop, this); + L.DomEvent.on(prev, 'click', L.DomEvent.stop) + .on(prev, 'click', this.backward, this); + L.DomEvent.on(next, 'click', L.DomEvent.stop) + .on(next, 'click', this.forward, this); + container.appendChild(box); + this.timeSpinner(); + return box; + } + +}); diff --git a/umap/static/umap/js/umap.tableeditor.js b/umap/static/umap/js/umap.tableeditor.js new file mode 100644 index 00000000..86e256e9 --- /dev/null +++ b/umap/static/umap/js/umap.tableeditor.js @@ -0,0 +1,99 @@ +L.S.TableEditor = L.Class.extend({ + + initialize: function (datalayer) { + this.datalayer = datalayer; + this.table = L.DomUtil.create('div', 'table'); + this.header = L.DomUtil.create('div', 'thead', this.table); + this.body = L.DomUtil.create('div', 'tbody', this.table); + this.resetProperties(); + }, + + renderHeaders: function () { + this.header.innerHTML = ''; + for (var i = 0; i < this.properties.length; i++) { + this.renderHeader(this.properties[i]); + } + }, + + renderHeader: function (property) { + var container = L.DomUtil.create('div', 'tcell', this.header), + title = L.DomUtil.add('span', '', container, property), + del = L.DomUtil.create('i', 'storage-delete', container), + rename = L.DomUtil.create('i', 'storage-edit', container); + del.title = L._('Delete this property on all the features'); + rename.title = L._('Rename this property on all the features'); + var doDelete = function () { + if (confirm(L._('Are you sure you want to delete this property on all the features?'))) { + this.datalayer.eachLayer(function (feature) { + feature.deleteProperty(property); + }); + this.datalayer.deindexProperty(property); + this.resetProperties(); + this.edit(); + } + }; + var doRename = function () { + var newName = prompt(L._('Please enter the new name of this property'), property); + if (!newName) return; + this.datalayer.eachLayer(function (feature) { + feature.renameProperty(property, newName); + }); + this.datalayer.deindexProperty(property); + this.datalayer.indexProperty(newName); + this.resetProperties(); + this.edit(); + }; + L.DomEvent.on(del, 'click', doDelete, this); + L.DomEvent.on(rename, 'click', doRename, this); + }, + + renderRow: function (feature) { + var builder = new L.S.FormBuilder(feature, this.field_properties, + { + id: 'storage-feature-properties_' + L.stamp(feature), + className: 'trow', + callback: feature.resetTooltip + } + ); + this.body.appendChild(builder.build()); + }, + + compileProperties: function () { + if (this.properties.length === 0) this.properties = ['name']; + // description is a forced textarea, don't edit it in a text input, or you lose cariage returns + if (this.properties.indexOf('description') !== -1) this.properties.splice(this.properties.indexOf('description'), 1); + this.properties.sort(); + this.field_properties = []; + for (var i = 0; i < this.properties.length; i++) { + this.field_properties.push(['properties.' + this.properties[i], {wrapper: 'div', wrapperClass: 'tcell'}]); + } + }, + + resetProperties: function () { + this.properties = this.datalayer._propertiesIndex; + }, + + edit: function () { + var id = 'tableeditor:edit'; + this.datalayer.map.fire('dataloading', {id: id}); + this.compileProperties(); + this.renderHeaders(); + this.body.innerHTML = ''; + this.datalayer.eachLayer(this.renderRow, this); + var addButton = L.DomUtil.create('li', 'add-property'); + L.DomUtil.create('i', 'storage-icon-16 storage-add', addButton); + var label = L.DomUtil.create('span', '', addButton); + label.innerHTML = label.title = L._('Add a new property'); + var addProperty = function () { + var newName = prompt(L._('Please enter the name of the property')); + if (!newName) return; + this.datalayer.indexProperty(newName); + this.edit(); + }; + L.DomEvent.on(addButton, 'click', addProperty, this); + var className = (this.properties.length > 2) ? 'storage-table-editor fullwidth dark' : 'storage-table-editor dark'; + this.datalayer.map.ui.openPanel({data: {html: this.table}, className: className, actions: [addButton]}); + this.datalayer.map.fire('dataload', {id: id}); + } + +}); diff --git a/umap/static/umap/js/umap.ui.js b/umap/static/umap/js/umap.ui.js new file mode 100644 index 00000000..089bc592 --- /dev/null +++ b/umap/static/umap/js/umap.ui.js @@ -0,0 +1,176 @@ +/* +* Modals +*/ +L.S.UI = L.Evented.extend({ + + ALERTS: Array(), + ALERT_ID: null, + TOOLTIP_ID: null, + + initialize: function (parent) { + this.parent = parent; + this.container = L.DomUtil.create('div', 'leaflet-ui-container', this.parent); + L.DomEvent.disableClickPropagation(this.container); + L.DomEvent.on(this.container, 'contextmenu', L.DomEvent.stopPropagation); // Do not activate our custom context menu. + L.DomEvent.on(this.container, 'mousewheel', L.DomEvent.stopPropagation); + L.DomEvent.on(this.container, 'MozMousePixelScroll', L.DomEvent.stopPropagation); + this._panel = L.DomUtil.create('div', '', this.container); + this._panel.id = 'storage-ui-container'; + this._alert = L.DomUtil.create('div', 'with-transition', this.container); + this._alert.id = 'storage-alert-container'; + this._tooltip = L.DomUtil.create('div', '', this.container); + this._tooltip.id = 'storage-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 = ''; + var actionsContainer = L.DomUtil.create('ul', 'toolbox', this._panel); + var 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; + var closeLink = L.DomUtil.create('li', 'storage-close-link', actionsContainer); + L.DomUtil.add('i', 'storage-close-icon', closeLink); + var label = L.DomUtil.create('span', '', closeLink); + label.title = label.innerHTML = L._('Close'); + if (e.actions) { + for (var 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, 'storage-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, 'storage-ui'); + } + L.DomEvent.on(closeLink, 'click', this.closePanel, this); + }, + + closePanel: function () { + this.resetPanelClassName(); + L.DomUtil.removeClass(this.parent, 'storage-ui'); + this.fire('panel:closed'); + }, + + alert: function (e) { + if (L.DomUtil.hasClass(this.parent, 'storage-alert')) this.ALERTS.push(e); + else this.popAlert(e); + }, + + popAlert: function (e) { + var self = this; + if(!e) { + if (this.ALERTS.length) e = this.ALERTS.pop(); + else return; + } + var timeoutID, + level_class = e.level && e.level == 'info'? 'info': 'error'; + this._alert.innerHTML = ''; + L.DomUtil.addClass(this.parent, 'storage-alert'); + L.DomUtil.addClass(this._alert, level_class); + var close = function () { + if (timeoutID !== this.ALERT_ID) { return;} // Another alert has been forced + this._alert.innerHTML = ''; + L.DomUtil.removeClass(this.parent, 'storage-alert'); + L.DomUtil.removeClass(this._alert, level_class); + if (timeoutID) window.clearTimeout(timeoutID); + this.popAlert(); + }; + var closeLink = L.DomUtil.create('a', 'storage-close-link', this._alert); + closeLink.href = '#'; + L.DomUtil.add('i', 'storage-close-icon', closeLink); + var label = L.DomUtil.create('span', '', closeLink); + label.title = label.innerHTML = L._('Close'); + L.DomEvent.on(closeLink, 'click', L.DomEvent.stop) + .on(closeLink, 'click', close, this); + L.DomUtil.add('div', '', this._alert, e.content); + if (e.actions) { + var action, el; + for (var i = 0; i < e.actions.length; i++) { + action = e.actions[i]; + el = L.DomUtil.element('a', {'className': 'storage-action'}, this._alert); + el.href = '#'; + el.innerHTML = action.label; + L.DomEvent.on(el, 'click', L.DomEvent.stop) + .on(el, 'click', close, this); + if (action.callback) L.DomEvent.on(el, 'click', action.callback, action.callbackContext || this.map); + } + } + self.ALERT_ID = timeoutID = window.setTimeout(L.bind(close, this), e.duration || 3000); + }, + + tooltip: function (e) { + this.TOOLTIP_ID = Math.random(); + var id = this.TOOLTIP_ID; + L.DomUtil.addClass(this.parent, 'storage-tooltip'); + if (e.anchor && e.position === 'top') this.anchorTooltipTop(e.anchor); + else if (e.anchor && e.position === 'left') this.anchorTooltipLeft(e.anchor); + else this.anchorTooltipAbsolute(); + this._tooltip.innerHTML = e.content; + function closeIt () { this.closeTooltip(id); } + if (e.anchor) L.DomEvent.once(e.anchor, 'mouseout', closeIt, this); + if (e.duration !== Infinity) window.setTimeout(L.bind(closeIt, this), e.duration || 3000); + }, + + anchorTooltipAbsolute: function () { + this._tooltip.className = ''; + var left = this.parent.offsetLeft + (this.parent.clientWidth / 2) - (this._tooltip.clientWidth / 2), + top = this.parent.offsetTop + 75; + this.setTooltipPosition({top: top, left: left}); + }, + + anchorTooltipTop: function (el) { + this._tooltip.className = 'tooltip-top'; + var coords = this.getPosition(el); + this.setTooltipPosition({left: coords.left - 10, bottom: this.getDocHeight() - coords.top + 11}); + }, + + anchorTooltipLeft: function (el) { + this._tooltip.className = 'tooltip-left'; + var coords = this.getPosition(el); + this.setTooltipPosition({top: coords.top, right: document.documentElement.offsetWidth - coords.left + 11}); + }, + + closeTooltip: function (id) { + if (id && id !== this.TOOLTIP_ID) return; + this._tooltip.innerHTML = ''; + L.DomUtil.removeClass(this.parent, 'storage-tooltip'); + }, + + getPosition: function (el) { + return el.getBoundingClientRect(); + }, + + setTooltipPosition: function (coords) { + if (coords.left) this._tooltip.style.left = coords.left + 'px'; + else this._tooltip.style.left = 'initial'; + if (coords.right) this._tooltip.style.right = coords.right + 'px'; + else this._tooltip.style.right = 'initial'; + if (coords.top) this._tooltip.style.top = coords.top + 'px'; + else this._tooltip.style.top = 'initial'; + if (coords.bottom) this._tooltip.style.bottom = coords.bottom + 'px'; + else this._tooltip.style.bottom = 'initial'; + }, + + getDocHeight: function () { + var D = document; + return Math.max( + D.body.scrollHeight, D.documentElement.scrollHeight, + D.body.offsetHeight, D.documentElement.offsetHeight, + D.body.clientHeight, D.documentElement.clientHeight + ); + }, + +}); diff --git a/umap/static/umap/js/umap.xhr.js b/umap/static/umap/js/umap.xhr.js new file mode 100644 index 00000000..2de8deea --- /dev/null +++ b/umap/static/umap/js/umap.xhr.js @@ -0,0 +1,294 @@ +L.Storage.Xhr = L.Evented.extend({ + + initialize: function (ui) { + this.ui = ui; + }, + + _wrapper: function () { + var wrapper; + if (window.XMLHttpRequest === undefined) { + wrapper = function() { + try { + return new window.ActiveXObject('Microsoft.XMLHTTP.6.0'); + } + catch (e1) { + try { + return new window.ActiveXObject('Microsoft.XMLHTTP.3.0'); + } + catch (e2) { + throw new Error('XMLHttpRequest is not supported'); + } + } + }; + } + else { + wrapper = window.XMLHttpRequest; + } + return new wrapper(); + }, + + _ajax: function (settings) { + var xhr = this._wrapper(), id = Math.random(), self = this; + this.fire('dataloading', {id: id}); + var loaded = function () {self.fire('dataload', {id: id});}; + + try { + xhr.open(settings.verb, settings.uri, true); + } catch (err) { + // Unknown protocol? + this.ui.alert({content: L._('Error while fetching {url}', {url: settings.uri}), level: 'error'}); + loaded(); + return + } + + if (settings.uri.indexOf('http') !== 0 || settings.uri.indexOf(window.location.origin) === 0) { + // "X-" mode headers cause the request to be in preflight mode, + // we don"t want that by default for CORS requests + xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); + } + if (settings.headers) { + for (var name in settings.headers) { + xhr.setRequestHeader(name, settings.headers[name]); + } + } + + + xhr.onreadystatechange = function() { + if (xhr.readyState === 4) { + console.log(xhr.status) + if (xhr.status == 200) { + settings.callback.call(settings.context || xhr, xhr.responseText, xhr); + } + else if (xhr.status === 403) { + self.ui.alert({content: L._('Action not allowed :('), level: 'error'}); + } + else if (xhr.status === 412) { + var msg = L._('Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.'); + var actions = [ + { + label: L._('Save anyway'), + callback: function () { + delete settings.headers['If-Match']; + self._ajax(settings); + }, + callbackContext: self + }, + { + label: L._('Cancel') + } + ]; + self.ui.alert({content: msg, level: 'error', duration: 100000, actions: actions}); + } + else { + if (xhr.status !== 0) { // 0 === request cut by user + self.ui.alert({'content': L._('Problem in the response'), 'level': 'error'}); + } + } + loaded(); + } + }; + + try { + xhr.send(settings.data); + } catch (e) { + // Pass + loaded(); + console.error('Bad Request', e); + } + }, + + // supports only JSON as response data type + _json: function (verb, uri, options) { + var args = arguments, + self = this; + var default_options = { + 'async': true, + 'callback': null, + 'responseType': 'text', + 'data': null, + 'listen_form': null // optional form to listen in default callback + }; + var settings = L.Util.extend({}, default_options, options); + + if (verb === 'POST') { + // find a way not to make this django specific + var token = document.cookie.replace(/(?:(?:^|.*;\s*)csrftoken\s*\=\s*([^;]*).*$)|^.*$/, '$1'); + if (token) { + settings.headers = settings.headers || {}; + settings.headers['X-CSRFToken'] = token; + } + } + + var callback = function(responseText, response) { + var data; + try { + data = JSON.parse(responseText); + } + catch (err) { + console.log(err); + self.ui.alert({content: L._('Problem in the response format'), level: 'error'}); + return; + } + if (data.errors) { + console.log(data.errors); + self.ui.alert({content: L._('An error occured'), level: 'error'}); + } else if (data.login_required) { + // login_required should be an URL for the login form + if (settings.login_callback) settings.login_callback(data); + else self.login(data, args); + } + else { + if (settings.callback) L.bind(settings.callback, settings.context || this)(data, response); + else self.default_callback(data, settings, response); + } + }; + + this._ajax({ + verb: verb, + uri: uri, + data: settings.data, + callback: callback, + headers: settings.headers, + listener: settings.listener + }); + }, + + get: function(uri, options) { + this._json('GET', uri, options); + }, + + post: function(uri, options) { + this._json('POST', uri, options); + }, + + submit_form: function(form_id, options) { + if(typeof options === 'undefined') options = {}; + var form = L.DomUtil.get(form_id); + var formData = new FormData(form); + if(options.extraFormData) formData.append(options.extraFormData); + options.data = formData; + this.post(form.action, options); + return false; + }, + + listen_form: function (form_id, options) { + var form = L.DomUtil.get(form_id), self = this; + if (!form) return; + L.DomEvent + .on(form, 'submit', L.DomEvent.stopPropagation) + .on(form, 'submit', L.DomEvent.preventDefault) + .on(form, 'submit', function () { + self.submit_form(form_id, options); + }); + }, + + listen_link: function (link_id, options) { + var link = L.DomUtil.get(link_id), self = this; + if (link) { + L.DomEvent + .on(link, 'click', L.DomEvent.stop) + .on(link, 'click', function () { + if (options.confirm && !confirm(options.confirm)) { return;} + self.get(link.href, options); + }); + } + }, + + default_callback: function (data, options) { + // default callback, to avoid boilerplate + if (data.redirect) { + var newPath = data.redirect; + if (window.location.pathname == newPath) window.location.reload(); // Keep the hash, so the current view + else window.location = newPath; + } + else 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'}); + } + else if (data.html) { + var ui_options = {'data': data}, + listen_options; + if (options.className) ui_options.className = options.className; + this.ui.openPanel(ui_options); + // To low boilerplate, if there is a form, listen it + if (options.listen_form) { + // Listen form again + listen_options = L.Util.extend({}, options, options.listen_form.options); + this.listen_form(options.listen_form.id, listen_options); + } + if (options.listen_link) { + for (var i=0, l=options.listen_link.length; iLeaflet and Django, glued by uMap project.": "በ ሊፍሌት እየታገዘ በ ጃንጎ ታግዞ በ uMap ፕሮጀክት አማካኝነት የቀረበ", + "Zoom level for automatic zooms": "አውቶማቲክ ዙሞች የሚጎሉበት መጠን", + "Do you want to display the «more» control?": "የ «ተጨማሪ» መቆጣጠሪያውን ማሳየት ትፈልጋለህ", + "Auto": "አውቶ", + "Default: name": "ዲፎልት፡ ስም", + "Property to use for sorting features": "ፊችሮችን ለመደርደር የሚጥቀምበት ባህርይ", + "Slideshow": "ስላይድሾው", + "Start slideshow": "ስላይድሾውን አስጀምር", + "Stop slideshow": "ስላይድሾውን አስቁም", + "Text color for the cluster label": "የክላስተሩን ሌብ ፅሑፍ ከለር", + "Zoom to the next": "ወደ ሚቀጥለው አጉላ", + "Zoom to the previous": "ቀደም ወዳለው አጉላ", + "Add a new property": "አዲስ ባህርይ ጨምር", + "Are you sure you want to delete this property on all the features?": "እርግጠኛ ነህ ይህንንባህርይ ከሁሉም ፊቸሮች ላይ መሰረዝ ትችላለህ", + "Close": "ዝጋ", + "Delete this property on all the features": "በሁሉም ፊቸሮች ላይ ይህንን ባህርይ ሰርዝ", + "Edit properties in a table": "በሰንጠረዡ ውስጥ ያሉትን ባህርያት አርም", + "Please enter the name of the property": "እባክዎ የባህርይውን ስም ያስገቡ", + "Please enter the new name of this property": "እባክዎን አዲሱን የባህርይውን ስም ያስገቡ", + "Rename this property on all the features": "በሁሉም ፊቸሮች ይህንን ያባህርይ መጠሪያ ያሻሽሉ", + "If false, the polygon will act as a part of the underlying map.": "ስህተት ከሆነ ፖሊጎኑ ከስር እንደተነጠፈ ካርታ ያገለግላል", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "|ፍሬሙ ከተሻሻለ ቁመት ጋር (በፒክሰል)፡ {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "|ፍሬም፡ {{{http://iframe.url.com}}}", + "See all": "ሁሉንም ተመልከት", + "Dynamic properties": "ዳይናሚክ ባህርያት", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "በቅንፎች መሀከል የፊቸር ባህርያት ያላቸው ቦታያዦችን ተጠቀም፣ ለምሳሌ {name} ዳይናሚካሊ በተቀራራቢ ዋጋችወ ይተካሉ", + "Long credits": "ክሬዲቶች በመጫን ላይ", + "No licence has been set": "ምንም ፈቃድ አልተሰጠም", + "Popup content template": "የፖፕ-አፕ ኮንቴንት ተምሳሌ", + "Short credits": "አጭር ክሬዲት", + "Will be displayed in the bottom right corner of the map": "ከታች በቀኝ ኮርነሩ ላይ ይታያል", + "Will be visible in the caption of the map": "በካርታው ካፕሽን ላይ እንዲታይ ይደረጋል", + "Map has been saved!": "ካርታው ተቀምጧል/ድኗል", + "Save anyway": "ለማንኛውም አስቀምጥ/አድን", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "ውይ! ሌላ ሰው መረጃውን ሳያርመው አይቀርም። ለማንኛውም ማዳን/ማስቀመጥ ይቻላል፣ ነገር ግን የሌሎች እርማቶች ይሰረዛሉ", + "Comma separated list of properties to use when filtering features": "ፊቸሮችን በሚያጣሩበት ጊዜ ሊጠቀሙ የሚችሏቸው በኮማ የተከፋፈሉ የባህርያት ዝርዝር", + "Keep current visible layers": "በወቅቱ የሚታየውን ሌየር አቆይ", + "Coordinates": "ኮርዲኔቶች", + "Latitude": "ላቲትዩድ", + "Longitude": "ሎንጊትዩድ", + "Continue line (Ctrl-click)": "መስመሩን ቀጥል", + "Start a hole here": "እዚህ ጋር ቀዳዳ ጀምር", + "Click last point to finish shape": "ቅርፁን ለማስጨረስ የመጨረሻውን ነጥብ ጠቅ ያድርጉ", + "Click to add a marker": "መለያ ለመጨመር ጠቅ አድርግ", + "Click to continue drawing": "መሳል ለመቀጠል ጠቅ አድርግ", + "Click to start drawing a line": "መስመር ለመሳል ጠቅ አድርግ", + "Click to start drawing a polygon": "ፖሊጎን ለመሳል ጠቅ አድርግ", + "Import in a new layer": "አዲስ ሌየር አምጣ", + "Layer": "ሌየር", + "Please choose a format": "እባክዎ ፎርማት ይምረጡ", + "Imports all umap data, including layers and settings.": "ሌየር እና ሁኔታዎቹን ጨምሮ ሁሉንም የዩማፕ መረጃ ያመጣል", + "Invalid umap data": "ያልተፈቀደ የዩማፕ መረጃ", + "Invalid umap data in {filename}": "ያልተፈቀደ የዩማፕ መረጃ በ {filename} ውስጥ", + "Add a line to the current multi": "ላሁኑ ብዝሀ መስመር ጨምር", + "Add a polygon to the current multi": "ላሁኑ ብዝሀ ፖሊጎን ጨምር", + "Click to edit": "ለማረም ጠቅ አድርግ", + "Continue line": "መስመሩን ቀጥል", + "Delete this shape": "ይህንን ቅርፅ ሰርዝ", + "Make main shape": "ዋና ቅርፅ አድርግ", + "Merge lines": "መስመሮችን ቀላቅል", + "Remove shape from the multi": "ከብዝሀው ላይ ቅርፁን አስወግድ", + "Transfer shape to edited feature": "ቅርፁን ወደ ታረመ ፊቸር አስተላልፍ", + "next": "ቀጥሎ", + "previous": "ቀድሞ", + "Measure distances": "ርቀቶችን ለካ", + "NM": "ኤን.ኤም.", + "kilometers": "ኪሎሜትሮች", + "km": "ኪ.ሜ.", + "mi": "ማ.", + "miles": "ማይሎች", + "nautical miles": "ናውቲካል ማይል", + "{area} acres": "{area} ሄክታሮች", + "{area} ha": "{area} ሄ.", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} ኤን.ኤም.", + "{distance} km": "{distance} ኪ.ሜ.", + "{distance} m": "{distance} ሜ.", + "{distance} miles": "{distance} ማይሎች", + "{distance} yd": "{distance} ያርድ", + "Are you sure you want to restore this version?": "እርግጠኛ ነዎት ወደዚህኛው እትም መመለስ ይልጋሉ?", + "Extract shape to separate feature": "ፊቸሩን ለመለየት ቅርፁን ነጥለህ አውጣ", + "Layer properties": "የሌየር ባህርያት", + "Restore this version": "ይህንን እትም መልስ", + "Versions": "እትሞች", + "You have unsaved changes.": "ያልዳኑ/ያልተቀመጡ ለውጦች አሉ", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "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…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/ar.json b/umap/static/umap/locale/ar.json new file mode 100644 index 00000000..4918b268 --- /dev/null +++ b/umap/static/umap/locale/ar.json @@ -0,0 +1,350 @@ +{ + "About": "About", + "Action not allowed :(": "Action not allowed :(", + "Add a layer": "Add a layer", + "Add symbol": "Add symbol", + "Advanced actions": "Advanced actions", + "Advanced properties": "Advanced properties", + "Allow scroll wheel zoom?": "Allow scroll wheel zoom?", + "An error occured": "An error occured", + "Are you sure you want to cancel your changes?": "Are you sure you want to cancel your changes?", + "Are you sure you want to clone this map and all its datalayers?": "Are you sure you want to clone this map and all its datalayers?", + "Are you sure you want to delete the feature?": "Are you sure you want to delete the feature?", + "Are you sure you want to delete this map?": "Are you sure you want to delete this map?", + "Ball": "Ball", + "Bring feature to center": "Bring feature to center", + "Browse data": "Browse data", + "Cancel": "Cancel", + "Cancel edits": "Cancel edits", + "Center map on your location": "Center map on your location", + "Change map background": "Change map background", + "Change symbol": "Change symbol", + "Change tilelayers": "Change tilelayers", + "Choose the format of the data to import": "Choose the format of the data to import", + "Choose the layer of the feature": "Choose the layer of the feature", + "Choose the layer to import in": "Choose the layer to import in", + "Circle": "Circle", + "Clone this map": "Clone this map", + "Default": "Default", + "Delete": "Delete", + "Delete this feature": "Delete this feature", + "Disable editing": "Disable editing", + "Display on load": "Display on load", + "Do you want to display a minimap?": "Do you want to display a minimap?", + "Do you want to display popup footer?": "Do you want to display popup footer?", + "Do you want to display the scale control?": "Do you want to display the scale control?", + "Download data": "Download data", + "Draw a line": "Draw a line", + "Draw a marker": "Draw a marker", + "Draw a polygon": "Draw a polygon", + "Draw a polyline": "Draw a polyline", + "Drop": "Drop", + "Dynamic": "Dynamic", + "Edit": "Edit", + "Edit feature's layer": "Edit feature's layer", + "Edit map properties": "Edit map properties", + "Edit map settings": "Edit map settings", + "Edit this feature": "Edit this feature", + "Embed and share this map": "Embed and share this map", + "Enable editing": "Enable editing", + "Format": "Format", + "From zoom": "From zoom", + "Go to «{feature}»": "Go to «{feature}»", + "Hide controls": "Hide controls", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)", + "Import": "Import", + "Import data": "Import data", + "Inherit": "Inherit", + "Licence": "Licence", + "Map background credits": "Map background credits", + "Map user content has been published under licence": "Map user content has been published under licence", + "More controls": "More controls", + "Optional. Same as color if not set.": "Optional. Same as color if not set.", + "Optionnal.": "Optionnal.", + "Paste here your data": "Paste here your data", + "Please be sure the licence is compliant with your use.": "Please be sure the licence is compliant with your use.", + "Problem in the response": "Problem in the response", + "Problem in the response format": "Problem in the response format", + "Provide an URL here": "Provide an URL here", + "Remote data": "Remote data", + "Save": "Save", + "Save current edits": "Save current edits", + "Save this center and zoom": "Save this center and zoom", + "Show/hide layer": "Show/hide layer", + "Start editing": "Start editing", + "Stop editing": "Stop editing", + "The zoom and center have been setted.": "The zoom and center have been setted.", + "To zoom": "To zoom", + "Untitled layer": "Untitled layer", + "Untitled map": "Untitled map", + "Update permissions and editors": "Update permissions and editors", + "Url": "Url", + "User content credits": "User content credits", + "Where do we go from here?": "Where do we go from here?", + "Zoom in": "Zoom in", + "Zoom out": "Zoom out", + "Zoom to layer extent": "Zoom to layer extent", + "Zoom to this feature": "Zoom to this feature", + "color": "color", + "dash array": "dash array", + "description": "description", + "fill": "fill", + "fill color": "fill color", + "fill opacity": "fill opacity", + "inherit": "inherit", + "licence": "licence", + "name": "name", + "no": "no", + "opacity": "opacity", + "stroke": "stroke", + "weight": "weight", + "yes": "yes", + "Editing": "Editing", + "Embed the map": "Embed the map", + "Short URL": "Short URL", + "# one hash for main heading": "# one hash for main heading", + "## two hashes for second heading": "## two hashes for second heading", + "### three hashes for third heading": "### three hashes for third heading", + "**double star for bold**": "**double star for bold**", + "*simple star for italic*": "*simple star for italic*", + "--- for an horizontal rule": "--- for an horizontal rule", + "All properties are imported.": "All properties are imported.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Custom background", + "Help": "Help", + "Image: {{http://image.url.com}}": "Image: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link with text: [[http://example.com|text of the link]]", + "Properties imported:": "Properties imported:", + "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]", + "Supported scheme": "Supported scheme", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "Text formatting", + "attribution": "attribution", + "display name": "display name", + "max zoom": "max zoom", + "min zoom": "min zoom", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "Please save the map before", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Transform to polygon", + "Transform to lines": "Transform to lines", + "Choose the data format": "Choose the data format", + "Error in the tilelayer URL": "Error in the tilelayer URL", + "Directions from here": "Directions from here", + "Choose a preset": "Choose a preset", + "Limit bounds": "Limit bounds", + "Use current bounds": "Use current bounds", + "max East": "max East", + "max North": "max North", + "max South": "max South", + "max West": "max West", + "TMS format": "TMS format", + "Credits": "Credits", + "Only visible features will be downloaded.": "Only visible features will be downloaded.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "Default properties", + "User interface options": "User interface options", + "Image with custom width (in px): {{http://image.url.com|width}}": "Image with custom width (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Current view instead of default map view?", + "Iframe export options": "Iframe export options", + "Include full screen link?": "Include full screen link?", + "See full screen": "See full screen", + "height": "height", + "width": "width", + "Clustered": "Clustered", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (only link)", + "GeoRSS (title + image)": "GeoRSS (title + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Name and description", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Proxy request", + "Table": "Table", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "Type of layer", + "Filter…": "Filter…", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Caption", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Do you want to display a caption bar?", + "Do you want to display a panel on load?": "Do you want to display a panel on load?", + "None": "None", + "by": "by", + "Name and description (large)": "Name and description (large)", + "Empty": "Empty", + "Split line": "Split line", + "Clone": "Clone", + "Clone of {name}": "Clone of {name}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Do you want to display the «more» control?", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Close", + "Delete this property on all the features": "Delete this property on all the features", + "Edit properties in a table": "Edit properties in a table", + "Please enter the name of the property": "Please enter the name of the property", + "Please enter the new name of this property": "Please enter the new name of this property", + "Rename this property on all the features": "Rename this property on all the features", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordinates", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Layer", + "Please choose a format": "Please choose a format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Measure distances", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "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…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/ast.json b/umap/static/umap/locale/ast.json new file mode 100644 index 00000000..4918b268 --- /dev/null +++ b/umap/static/umap/locale/ast.json @@ -0,0 +1,350 @@ +{ + "About": "About", + "Action not allowed :(": "Action not allowed :(", + "Add a layer": "Add a layer", + "Add symbol": "Add symbol", + "Advanced actions": "Advanced actions", + "Advanced properties": "Advanced properties", + "Allow scroll wheel zoom?": "Allow scroll wheel zoom?", + "An error occured": "An error occured", + "Are you sure you want to cancel your changes?": "Are you sure you want to cancel your changes?", + "Are you sure you want to clone this map and all its datalayers?": "Are you sure you want to clone this map and all its datalayers?", + "Are you sure you want to delete the feature?": "Are you sure you want to delete the feature?", + "Are you sure you want to delete this map?": "Are you sure you want to delete this map?", + "Ball": "Ball", + "Bring feature to center": "Bring feature to center", + "Browse data": "Browse data", + "Cancel": "Cancel", + "Cancel edits": "Cancel edits", + "Center map on your location": "Center map on your location", + "Change map background": "Change map background", + "Change symbol": "Change symbol", + "Change tilelayers": "Change tilelayers", + "Choose the format of the data to import": "Choose the format of the data to import", + "Choose the layer of the feature": "Choose the layer of the feature", + "Choose the layer to import in": "Choose the layer to import in", + "Circle": "Circle", + "Clone this map": "Clone this map", + "Default": "Default", + "Delete": "Delete", + "Delete this feature": "Delete this feature", + "Disable editing": "Disable editing", + "Display on load": "Display on load", + "Do you want to display a minimap?": "Do you want to display a minimap?", + "Do you want to display popup footer?": "Do you want to display popup footer?", + "Do you want to display the scale control?": "Do you want to display the scale control?", + "Download data": "Download data", + "Draw a line": "Draw a line", + "Draw a marker": "Draw a marker", + "Draw a polygon": "Draw a polygon", + "Draw a polyline": "Draw a polyline", + "Drop": "Drop", + "Dynamic": "Dynamic", + "Edit": "Edit", + "Edit feature's layer": "Edit feature's layer", + "Edit map properties": "Edit map properties", + "Edit map settings": "Edit map settings", + "Edit this feature": "Edit this feature", + "Embed and share this map": "Embed and share this map", + "Enable editing": "Enable editing", + "Format": "Format", + "From zoom": "From zoom", + "Go to «{feature}»": "Go to «{feature}»", + "Hide controls": "Hide controls", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)", + "Import": "Import", + "Import data": "Import data", + "Inherit": "Inherit", + "Licence": "Licence", + "Map background credits": "Map background credits", + "Map user content has been published under licence": "Map user content has been published under licence", + "More controls": "More controls", + "Optional. Same as color if not set.": "Optional. Same as color if not set.", + "Optionnal.": "Optionnal.", + "Paste here your data": "Paste here your data", + "Please be sure the licence is compliant with your use.": "Please be sure the licence is compliant with your use.", + "Problem in the response": "Problem in the response", + "Problem in the response format": "Problem in the response format", + "Provide an URL here": "Provide an URL here", + "Remote data": "Remote data", + "Save": "Save", + "Save current edits": "Save current edits", + "Save this center and zoom": "Save this center and zoom", + "Show/hide layer": "Show/hide layer", + "Start editing": "Start editing", + "Stop editing": "Stop editing", + "The zoom and center have been setted.": "The zoom and center have been setted.", + "To zoom": "To zoom", + "Untitled layer": "Untitled layer", + "Untitled map": "Untitled map", + "Update permissions and editors": "Update permissions and editors", + "Url": "Url", + "User content credits": "User content credits", + "Where do we go from here?": "Where do we go from here?", + "Zoom in": "Zoom in", + "Zoom out": "Zoom out", + "Zoom to layer extent": "Zoom to layer extent", + "Zoom to this feature": "Zoom to this feature", + "color": "color", + "dash array": "dash array", + "description": "description", + "fill": "fill", + "fill color": "fill color", + "fill opacity": "fill opacity", + "inherit": "inherit", + "licence": "licence", + "name": "name", + "no": "no", + "opacity": "opacity", + "stroke": "stroke", + "weight": "weight", + "yes": "yes", + "Editing": "Editing", + "Embed the map": "Embed the map", + "Short URL": "Short URL", + "# one hash for main heading": "# one hash for main heading", + "## two hashes for second heading": "## two hashes for second heading", + "### three hashes for third heading": "### three hashes for third heading", + "**double star for bold**": "**double star for bold**", + "*simple star for italic*": "*simple star for italic*", + "--- for an horizontal rule": "--- for an horizontal rule", + "All properties are imported.": "All properties are imported.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Custom background", + "Help": "Help", + "Image: {{http://image.url.com}}": "Image: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link with text: [[http://example.com|text of the link]]", + "Properties imported:": "Properties imported:", + "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]", + "Supported scheme": "Supported scheme", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "Text formatting", + "attribution": "attribution", + "display name": "display name", + "max zoom": "max zoom", + "min zoom": "min zoom", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "Please save the map before", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Transform to polygon", + "Transform to lines": "Transform to lines", + "Choose the data format": "Choose the data format", + "Error in the tilelayer URL": "Error in the tilelayer URL", + "Directions from here": "Directions from here", + "Choose a preset": "Choose a preset", + "Limit bounds": "Limit bounds", + "Use current bounds": "Use current bounds", + "max East": "max East", + "max North": "max North", + "max South": "max South", + "max West": "max West", + "TMS format": "TMS format", + "Credits": "Credits", + "Only visible features will be downloaded.": "Only visible features will be downloaded.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "Default properties", + "User interface options": "User interface options", + "Image with custom width (in px): {{http://image.url.com|width}}": "Image with custom width (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Current view instead of default map view?", + "Iframe export options": "Iframe export options", + "Include full screen link?": "Include full screen link?", + "See full screen": "See full screen", + "height": "height", + "width": "width", + "Clustered": "Clustered", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (only link)", + "GeoRSS (title + image)": "GeoRSS (title + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Name and description", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Proxy request", + "Table": "Table", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "Type of layer", + "Filter…": "Filter…", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Caption", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Do you want to display a caption bar?", + "Do you want to display a panel on load?": "Do you want to display a panel on load?", + "None": "None", + "by": "by", + "Name and description (large)": "Name and description (large)", + "Empty": "Empty", + "Split line": "Split line", + "Clone": "Clone", + "Clone of {name}": "Clone of {name}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Do you want to display the «more» control?", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Close", + "Delete this property on all the features": "Delete this property on all the features", + "Edit properties in a table": "Edit properties in a table", + "Please enter the name of the property": "Please enter the name of the property", + "Please enter the new name of this property": "Please enter the new name of this property", + "Rename this property on all the features": "Rename this property on all the features", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordinates", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Layer", + "Please choose a format": "Please choose a format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Measure distances", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "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…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/bg.json b/umap/static/umap/locale/bg.json new file mode 100644 index 00000000..7586e2c3 --- /dev/null +++ b/umap/static/umap/locale/bg.json @@ -0,0 +1,350 @@ +{ + "About": "относно", + "Action not allowed :(": " Не позволено действие", + "Add a layer": "Добавете слой", + "Add symbol": "Добави символ", + "Advanced actions": "Разширено действия", + "Advanced properties": "Разширени свойства", + "Allow scroll wheel zoom?": "Позволете скрол колело мащабиране?", + "An error occured": "Възникна грешка", + "Are you sure you want to cancel your changes?": "Наистина ли искате да отмените вашите промени?", + "Are you sure you want to clone this map and all its datalayers?": "Наистина ли искате да клонирате тази карта и всички негови слоеве данни ?", + "Are you sure you want to delete the feature?": "Сигурни ли сте, че искате да изтриете тази функция?", + "Are you sure you want to delete this map?": "Сигурни ли сте, че искате да изтриете тази карта?", + "Ball": "топка", + "Bring feature to center": "Bring feature to center", + "Browse data": "Преглед данни", + "Cancel": "Отмени", + "Cancel edits": "Отмени редакциите", + "Center map on your location": "Center map on your location", + "Change map background": "Промяна фона на картата", + "Change symbol": "Промяна символ", + "Change tilelayers": "Променете слоевете ", + "Choose the format of the data to import": "Изберете формат на данните за внос", + "Choose the layer of the feature": "Изберете слой на функцията", + "Choose the layer to import in": "Избери слой за внасяне в", + "Circle": "окръжност", + "Clone this map": "клонира тази карта", + "Default": "по подразбиране", + "Delete": "Изтрий", + "Delete this feature": "Изтриване на тази функция", + "Disable editing": "Забранете редакция", + "Display on load": "Дисплей на зареждане", + "Do you want to display a minimap?": "Искате ли да се покаже миникартата?", + "Do you want to display popup footer?": "Искате ли да се покаже изскачащ колонтитул?", + "Do you want to display the scale control?": "Искате ли да се показва мащаб контрола?", + "Download data": "Изтегляне на данни", + "Draw a line": "Начертайте линия", + "Draw a marker": "Начертайте маркер", + "Draw a polygon": "Начертайте полигон", + "Draw a polyline": "Начертайте полилиния", + "Drop": "Drop", + "Dynamic": "динамичен", + "Edit": "Редактиране", + "Edit feature's layer": "Редактиране функцията на слоя", + "Edit map properties": "Редактирай свойствата на картата", + "Edit map settings": "Редактиране на настройките на картата", + "Edit this feature": "Редактирайте тази характеристика", + "Embed and share this map": "Вграждане и споделяне тази карта", + "Enable editing": "Разрешаване на редактирането", + "Format": "формат", + "From zoom": "От мащабиране", + "Go to «{feature}»": "Go to «{feature}»", + "Hide controls": "Скрий контролите", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "Колко да опрости полилинията на всяко ниво увеличение (повече = по-добра производителност и по-гладко на вид, по-малко = по-точно)", + "Import": "внасяне", + "Import data": "Внасям данни", + "Inherit": "Наследи", + "Licence": "Лиценз", + "Map background credits": "Map background credits", + "Map user content has been published under licence": "Map user content has been published under licence", + "More controls": "Още контроли", + "Optional. Same as color if not set.": "По избор Същото като цвят, ако не е настроена.", + "Optionnal.": "По избор", + "Paste here your data": "Залепете тук вашите данни", + "Please be sure the licence is compliant with your use.": "Моля, бъдете сигурни, че лицензът е съвместим с вашата употреба.", + "Problem in the response": "Проблем в отзивите", + "Problem in the response format": "Проблем във формата на отговор", + "Provide an URL here": "Представете URL тук", + "Remote data": "отдалечена база данни", + "Save": "запазвам", + "Save current edits": "Запиши текущите редакции", + "Save this center and zoom": "Запази този център и размер", + "Show/hide layer": "Покажи / скрий слой", + "Start editing": "Започнете редактиране", + "Stop editing": "Спри редактирането", + "The zoom and center have been setted.": "The zoom and center have been setted.", + "To zoom": "За да увеличите", + "Untitled layer": "Неозаглавен слой", + "Untitled map": "Неозаглавена карта", + "Update permissions and editors": "Актуализиране на разрешения и редактори", + "Url": "URL адрес", + "User content credits": "User content credits", + "Where do we go from here?": "Къде да отидем от тук?", + "Zoom in": "Zoom in", + "Zoom out": "Намаляване на мащаба", + "Zoom to layer extent": "Zoom to layer extent", + "Zoom to this feature": "Увеличаване на тази характеристика", + "color": "цвят", + "dash array": "dash array", + "description": "описание", + "fill": "запълни", + "fill color": "попълнете цвят", + "fill opacity": "попълнете непрозрачност", + "inherit": "наследи", + "licence": "лиценз", + "name": "име", + "no": "не", + "opacity": "непрозрачност", + "stroke": "stroke", + "weight": "тегло", + "yes": "да", + "Editing": "За редактиране", + "Embed the map": "Вграждане на карта", + "Short URL": "Кратко URL", + "# one hash for main heading": "# един хеш за главната позиция", + "## two hashes for second heading": "двата хешове за втората таблица ", + "### three hashes for third heading": "# # # Три хеша за трета позиция", + "**double star for bold**": "двойна звезда за удебеление", + "*simple star for italic*": "* проста звезда за курсив *", + "--- for an horizontal rule": "---за хоризонтална линия", + "All properties are imported.": "Всички свойства са внесени.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Потребителски фон", + "Help": "Помощ", + "Image: {{http://image.url.com}}": "изображение: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Връзка с текст: [[http://example.com|текст на връзката]]", + "Properties imported:": "Внесени свойства:", + "Simple link: [[http://example.com]]": "проста връзка:[[http://example.com]]", + "Supported scheme": "Поддържана схема", + "Supported variables that will be dynamically replaced": "Поддържаните променливи, които ще бъдат динамично заменени", + "Text formatting": "форматиране на текст", + "attribution": "приписване", + "display name": "показвано име", + "max zoom": "максимум мащабиране", + "min zoom": "минимално мащабиране", + "Skipping unkown geometry.type: {type}": ":Пропускане на неизвестна тип геометрия: {type}", + "Please save the map before": "Моля, запазете картата преди", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Трансформация на полигон", + "Transform to lines": "Трансформация на линии", + "Choose the data format": "Изберете формата на данните", + "Error in the tilelayer URL": "Грешка в URL адреса на слоя", + "Directions from here": "Упътвания от тук", + "Choose a preset": "Изберете предварително зададен", + "Limit bounds": "Limit bounds", + "Use current bounds": "Use current bounds", + "max East": "максимум Източен", + "max North": "максимум Северен", + "max South": "максимум Южен", + "max West": "максимум Западна", + "TMS format": "TMS формат", + "Credits": "приемам като достоверен", + "Only visible features will be downloaded.": "Само видими функции ще бъдат изтеглени.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Отворете тази карта в степен редактор на карта, за да предостави по-точни данни,OpenStreetMap", + "Default properties": "По подразбиране свойства", + "User interface options": "Опции на потребителския интерфейс", + "Image with custom width (in px): {{http://image.url.com|width}}": "Изображение с поръчкова ширина (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Текущ изглед, вместо по подразбиране вижте карта?", + "Iframe export options": "вградена рамка,възможности за износ", + "Include full screen link?": "Включи пълна връзка на екрана?", + "See full screen": "Виж на цял екран", + "height": "височина", + "width": "широчина", + "Clustered": "Клъстер", + "Clustering radius": "радиус на клъстери", + "GeoRSS (only link)": "GeoRSS (само за връзка)", + "GeoRSS (title + image)": "GeoRSS (заглавие + изображение)", + "Heatmap": "Топлинна карта", + "Heatmap radius": "радиус на Топлинна карта", + "Name and description": "Име и описание", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Proxy request", + "Table": "Table", + "To use if remote server doesn't allow cross domain (slower)": "За да се използва, ако отдалечен сървър не позволява кръстосан домейн (по-бавно)", + "Type of layer": "Вид на слой", + "Filter…": "Филтър ...", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Надпис", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Искате ли да се покаже надпис бар?", + "Do you want to display a panel on load?": "Искате ли да се покаже панел на зареждане?", + "None": "Нищо", + "by": "чрез", + "Name and description (large)": "Наименование и описание (голям)", + "Empty": "Празно", + "Split line": "Split line", + "Clone": "Клонинг", + "Clone of {name}": "Клонинг на {име}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Do you want to display the «more» control?", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Close", + "Delete this property on all the features": "Delete this property on all the features", + "Edit properties in a table": "Edit properties in a table", + "Please enter the name of the property": "Please enter the name of the property", + "Please enter the new name of this property": "Please enter the new name of this property", + "Rename this property on all the features": "Rename this property on all the features", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordinates", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Layer", + "Please choose a format": "Please choose a format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Измерва разстояния", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "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…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/ca.json b/umap/static/umap/locale/ca.json new file mode 100644 index 00000000..55625204 --- /dev/null +++ b/umap/static/umap/locale/ca.json @@ -0,0 +1,350 @@ +{ + "About": "Quant a", + "Action not allowed :(": "Acció no permesa :(", + "Add a layer": "Afegeix una capa", + "Add symbol": "Afegeix un símbol", + "Advanced actions": "Opcions avançades", + "Advanced properties": "Propietats avançades", + "Allow scroll wheel zoom?": "Voleu permetre el zoom amb la roda de desplaçament?", + "An error occured": "S'ha produït un error", + "Are you sure you want to cancel your changes?": "Esteu segur de voler cancel·lar els canvis?", + "Are you sure you want to clone this map and all its datalayers?": "Esteu segur de voler clonar aquest mapa i totes les capes de dades?", + "Are you sure you want to delete the feature?": "Segur que voleu suprimir la característica?", + "Are you sure you want to delete this map?": "Esteu segur de voler suprimir aquest mapa?", + "Ball": "Bola", + "Bring feature to center": "Bring feature to center", + "Browse data": "Explora les dades", + "Cancel": "Cancel·la", + "Cancel edits": "Cancel·la les edicions", + "Center map on your location": "Centra el mapa a la vostra ubicació", + "Change map background": "Canvia el fons del mapa", + "Change symbol": "Canvia el símbol", + "Change tilelayers": "Canvia les capes de tessel·les", + "Choose the format of the data to import": "Trieu el format de les dades a importar", + "Choose the layer of the feature": "Trieu la capa de la característica", + "Choose the layer to import in": "Trieu la capa que on voleu importar", + "Circle": "Cercle", + "Clone this map": "Clona aquest mapa", + "Default": "Per defecte", + "Delete": "Suprimeix", + "Delete this feature": "Suprimeix aquesta característica", + "Disable editing": "Inhabilita l'edició", + "Display on load": "Mostrar en carregar", + "Do you want to display a minimap?": "Voleu mostrar un minimapa?", + "Do you want to display popup footer?": "Voleu mostrar un peu emergent?", + "Do you want to display the scale control?": "Voleu mostrar el control d'escala?", + "Download data": "Baixa les dades", + "Draw a line": "Dibuixa una línia", + "Draw a marker": "Dibuixa un marcador", + "Draw a polygon": "Dibuixa un polígon", + "Draw a polyline": "Dibuixa una polilínia", + "Drop": "Deixar", + "Dynamic": "Dinàmic", + "Edit": "Edita", + "Edit feature's layer": "Edita la capa de la característica", + "Edit map properties": "Edita les propietats del mapa", + "Edit map settings": "Edita els paràmetres del mapa", + "Edit this feature": "Edita aquesta característica", + "Embed and share this map": "Incrusta i comparteix aquest mapa", + "Enable editing": "Habilita l'edició", + "Format": "Format", + "From zoom": "Del zoom", + "Go to «{feature}»": "Vés a «{feature}»", + "Hide controls": "Amaga els controls", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)", + "Import": "Importa", + "Import data": "Importa dades", + "Inherit": "Hereta", + "Licence": "Llicència", + "Map background credits": "Crèdits del fons del mapa", + "Map user content has been published under licence": "El contingut de l'usuari del mapa s'ha publicat sota la llicència", + "More controls": "Més controls", + "Optional. Same as color if not set.": "Opcional. El mateix color si no s'estableix.", + "Optionnal.": "Opcional", + "Paste here your data": "Enganxeu aquí les vostres dades", + "Please be sure the licence is compliant with your use.": "Assegureu-vos que la llicència és compatible amb l'ús que en feu.", + "Problem in the response": "Hi ha un problema en la resposta", + "Problem in the response format": "Hi ha un problema en el format de resposta", + "Provide an URL here": "Proporcioneu un URL aquí", + "Remote data": "Dades remotes", + "Save": "Desa", + "Save current edits": "Desa les edicions actuals", + "Save this center and zoom": "Desa aquest centre i escala", + "Show/hide layer": "Mostra/amaga la capa", + "Start editing": "Inicia l'edició", + "Stop editing": "Atura l'edició", + "The zoom and center have been setted.": "S'han establert l'escala i el centre.", + "To zoom": "A l'escala", + "Untitled layer": "Capa sense títol", + "Untitled map": "Mapa sense títol", + "Update permissions and editors": "Actualitza els permisos i editors", + "Url": "URL", + "User content credits": "Crèdits dels continguts de l'usuari", + "Where do we go from here?": "On anem des d'aquí?", + "Zoom in": "Apropa't", + "Zoom out": "Allunya't", + "Zoom to layer extent": "Zoom to layer extent", + "Zoom to this feature": "Fes zoom a aquesta característica", + "color": "color", + "dash array": "dash array", + "description": "descripció", + "fill": "emplena", + "fill color": "emplena el color", + "fill opacity": "opacitat d'emplenament", + "inherit": "heretat", + "licence": "llicència", + "name": "nom", + "no": "no", + "opacity": "opacitat", + "stroke": "stroke", + "weight": "pes", + "yes": "sí", + "Editing": "Edició", + "Embed the map": "Incrusta el mapa", + "Short URL": "URL curt", + "# one hash for main heading": "# one hash for main heading", + "## two hashes for second heading": "## dos coixinets per a capçalera secundària", + "### three hashes for third heading": "### three hashes for third heading", + "**double star for bold**": "**doble asteric per a negreta**", + "*simple star for italic*": "*un asterisc per a cursiva*", + "--- for an horizontal rule": "--- per a una línia horitzontal", + "All properties are imported.": "S'han importat totes les propietats", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Fons personalitzat", + "Help": "Ajuda", + "Image: {{http://image.url.com}}": "Imatge: {{http://imatge.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Enllaceu amb el text: [[http://exemple.com|text de l'enllaç]]", + "Properties imported:": "Propietats importades:", + "Simple link: [[http://example.com]]": "Enllaç simple: [[http://exemple.com]]", + "Supported scheme": "Esquema suportat", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "Format del text", + "attribution": "atribució", + "display name": "mostra el nom", + "max zoom": "escala màxima", + "min zoom": "escala mínima", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "Deseu el mapa abans", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Transforma a polígon", + "Transform to lines": "Transforma a línies", + "Choose the data format": "Trieu el format de dades", + "Error in the tilelayer URL": "Hi ha un error en l'URL de la cap de tessel·les", + "Directions from here": "Direccions des d'aquí", + "Choose a preset": "Choose a preset", + "Limit bounds": "Límits", + "Use current bounds": "Usa els límits actuals", + "max East": "Est màxim", + "max North": "Nord màxim", + "max South": "Sud màxim", + "max West": "Oest màxim", + "TMS format": "Format TMS", + "Credits": "Crèdits", + "Only visible features will be downloaded.": "Only visible features will be downloaded.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "Propietats predeterminades", + "User interface options": "Opcions de la interfície d'usuari", + "Image with custom width (in px): {{http://image.url.com|width}}": "Imatge amb amplada personalitzada (en px): {{http://imatge.url.com|amplada}}", + "Current view instead of default map view?": "Voleu la visualització actual en comptes de la visualització predeterminada?", + "Iframe export options": "Opcions de l'exportació iframe", + "Include full screen link?": "Voleu incloure l'enllaç a pantalla completa?", + "See full screen": "Mostra-ho a pantalla completa", + "height": "alçada", + "width": "amplada", + "Clustered": "Clustered", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (només enllaç)", + "GeoRSS (title + image)": "GeoRSS (títol i imatge)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Nom i descripció", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Petició proxy", + "Table": "Taula", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "Tipus de capa", + "Filter…": "Filtre...", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Llegenda", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Voleu mostrar la barra de llegenda?", + "Do you want to display a panel on load?": "Voleu mostrar el quandre en carregar?", + "None": "Cap", + "by": "per", + "Name and description (large)": "Nom i descripció (gran)", + "Empty": "Buit", + "Split line": "Split line", + "Clone": "Clona", + "Clone of {name}": "Clona de {name}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Do you want to display the «more» control?", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Presentació", + "Start slideshow": "Inicia la presentació", + "Stop slideshow": "Atura la presentació", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Tanca", + "Delete this property on all the features": "Suprimeix aquesta propietat a totes les característiques", + "Edit properties in a table": "Edita les propietats en una taula", + "Please enter the name of the property": "Introduïu el nom de la propietat", + "Please enter the new name of this property": "Introduïu el nom d'aquesta propietat", + "Rename this property on all the features": "Canvia el nom d'aquesta propietat en totes les característiques", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "S'ha desat el mapa!", + "Save anyway": "Desa-ho igualment", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordenades", + "Latitude": "Latitud", + "Longitude": "Longitud", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Feu clic per a afegir una marca", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Capa", + "Please choose a format": "Please choose a format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Mesura distàncies", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "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…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/cs_CZ.json b/umap/static/umap/locale/cs_CZ.json new file mode 100644 index 00000000..0641d46f --- /dev/null +++ b/umap/static/umap/locale/cs_CZ.json @@ -0,0 +1,350 @@ +{ + "About": "O mapě", + "Action not allowed :(": "Akce nepovolena :(", + "Add a layer": "Přidat vrstvu", + "Add symbol": "Přidat symbol", + "Advanced actions": "Pokročilé akce", + "Advanced properties": "Pokročilé vlastnosti", + "Allow scroll wheel zoom?": "Povolit přibližování kolečkem myši?", + "An error occured": "Došlo k chybě", + "Are you sure you want to cancel your changes?": "Jste si jisti že chcete stornovat vaše úpravy?", + "Are you sure you want to clone this map and all its datalayers?": "Určitě chcete vytvořit kopii celé této mapy a všech jejich vrstev?", + "Are you sure you want to delete the feature?": "Určitě chcete vymazat tento objekt?", + "Are you sure you want to delete this map?": "Jste si jisti, že chcete vymazat tuto celou mapu?", + "Ball": "špendlík", + "Bring feature to center": "Centruj mapu na objektu", + "Browse data": "Prohlížet data", + "Cancel": "Storno", + "Cancel edits": "Stornovat úpravy", + "Center map on your location": "Přemístit se na mapě na vaši polohu", + "Change map background": "Změnit pozadí mapy", + "Change symbol": "Změnit symbol značky", + "Change tilelayers": "Změnit pozadí mapy", + "Choose the format of the data to import": "Zvolte v jakém formátu jsou importovaná data ", + "Choose the layer of the feature": "Zvolte vrstvu do které objekt patří", + "Choose the layer to import in": "Zvolte vrstvu, do které se bude importovat", + "Circle": "Kruh", + "Clone this map": "Vytvořit vlastní kopii této mapy", + "Default": "Výchozí", + "Delete": "Vymazat", + "Delete this feature": "Vymazat objekt", + "Disable editing": "Zakázat úpravy", + "Display on load": "Zobrazit na startu", + "Do you want to display a minimap?": "Chcete zobrazit minimapu?", + "Do you want to display popup footer?": "Chcete v bublině zobrazit navigační panel?", + "Do you want to display the scale control?": "Chcete zobrazit měřítko mapy?", + "Download data": "Stáhnout data", + "Draw a line": "Nakreslit jednoduchou čáru", + "Draw a marker": "Umístit značku místa", + "Draw a polygon": "Vyznačit oblast", + "Draw a polyline": "Nakreslit čáru", + "Drop": "Pustit", + "Dynamic": "Dynamicky", + "Edit": "Upravit", + "Edit feature's layer": "Upravit vrstvu objektu", + "Edit map properties": "Nastavení mapy", + "Edit map settings": "Nastavení mapy", + "Edit this feature": "Upravit tento objekt", + "Embed and share this map": "Sílet mapu nebo ji vložit do jiného webu", + "Enable editing": "Povolit úpravy", + "Format": "Formát", + "From zoom": "Maximální oddálení", + "Go to «{feature}»": "Jdi na \"{feature}\"", + "Hide controls": "Skrýt ovládací prvky", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "Jak moc zahlazovat a zjednodušovat při oddálení (větší = rychlejší odezva a plynulejší vzhled, menší = přesnější)", + "Import": "Importovat", + "Import data": "Import dat", + "Inherit": "výchozí", + "Licence": "Licence", + "Map background credits": "Autorství pozadí mapy", + "Map user content has been published under licence": "Uživatelská data jsou zveřejněna pod licencí", + "More controls": "Více ovládacích prvků", + "Optional. Same as color if not set.": "Nepovinné. Stejné jako barva, pokud není nastaveno.", + "Optionnal.": "Nepovinné.", + "Paste here your data": "Sem vložte vaše data", + "Please be sure the licence is compliant with your use.": "Prosíme ujistěte se, že licence je ve shodě s tím jak mapu používáte.", + "Problem in the response": "Problém při odpovědi", + "Problem in the response format": "Problém ve formátu odpovědi", + "Provide an URL here": "Sem vložte odkaz", + "Remote data": "Vzdálená data", + "Save": "Ulož", + "Save current edits": "Ulož nedávné změny", + "Save this center and zoom": "Ulož tuto pozici mapy a její přiblížení", + "Show/hide layer": "Skrytí/zobrazení vrstvy", + "Start editing": "Začít editaci", + "Stop editing": "Přerušit úpravy", + "The zoom and center have been setted.": "Přiblížení a střed mapy byly nastaveny", + "To zoom": "Maximální přiblížení", + "Untitled layer": "Nepojmenovaná vrstva", + "Untitled map": "Mapa bez názvu", + "Update permissions and editors": "Nastavení přístupu a práva editace", + "Url": "Url", + "User content credits": "Autorství uživatelského obsahu", + "Where do we go from here?": "Co všechno teď můžete udělat?", + "Zoom in": "Přiblížit", + "Zoom out": "Oddálit", + "Zoom to layer extent": "Přizpůsobit přiblížení vrstvě", + "Zoom to this feature": "Přiblížit na tento objekt", + "color": "barva", + "dash array": "styl přerušované čáry", + "description": "popis", + "fill": "výplň", + "fill color": "barva výplně", + "fill opacity": "průhlednost výplně", + "inherit": "výchozí", + "licence": "licence", + "name": "název", + "no": "ne", + "opacity": "průhlednost", + "stroke": "linka", + "weight": "šířka linky", + "yes": "ano", + "Editing": "Upravujete", + "Embed the map": "Vložit mapu do jiného webu", + "Short URL": "Krátký odkaz", + "# one hash for main heading": "# jedna mřížka pro hlavní nadpis", + "## two hashes for second heading": "## dvě mřížky pro nadpis druhé úrovně", + "### three hashes for third heading": "### podnadpis třetí úrovně", + "**double star for bold**": "**vše mezi dvěma hvězdičkami je tučně**", + "*simple star for italic*": "*vše mezi hvězdičkami bude kurzívou*", + "--- for an horizontal rule": "--- vytvoří vodorovnou linku", + "All properties are imported.": "Všechny vlastnosti jsou importovány.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Hodnoty oddělené čárkou, tabulátorem, nebo středníkem. předpokládá se SRS WGS84 a jsou importovány jen polohy bodů. Import hledá záhlaví sloupců začínající na \"lat\" nebo \"lon\" a ty považuje za souřadnice (na velikosti písmen nesejde). Ostatní sloupce jsou importovány jako vlastnosti.", + "Custom background": "Vlastní pozadí", + "Help": "Nápověda", + "Image: {{http://image.url.com}}": "Obrázek: {{http://priklad.cz/obrazek.jpg}}", + "Link with text: [[http://example.com|text of the link]]": "Odkaz: [[http://priklad.cz/stranka|text odkazu]]", + "Properties imported:": "Importované vlastnosti:", + "Simple link: [[http://example.com]]": "Jednoduchý odkaz: [[http://priklad.cz]]", + "Supported scheme": "Podporované schéma", + "Supported variables that will be dynamically replaced": "Podporované proměnné, které budou automaticky nahrazeny", + "Text formatting": "Formátování textu", + "attribution": "autorství", + "display name": "zobrazit název", + "max zoom": "maximální přiblížení", + "min zoom": "maximální oddálení", + "Skipping unkown geometry.type: {type}": "Přeskakuji neznámý typ geometrie: {type}", + "Please save the map before": "Prosíme, uložte nejdříve mapu", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "Můžete používat vlastnosti objektů jako proměnné, např. v \"http://myserver.org/images/{name}.png\" je {name} nahrazeno hodnotou \"name\" každého objektu.", + "Transform to polygon": "Převést na polygon", + "Transform to lines": "Převést na čáry", + "Choose the data format": "Vyberte formát dat", + "Error in the tilelayer URL": "Chyba v URL vrstvy dlaždic", + "Directions from here": "Navigovat odsud", + "Choose a preset": "Zvolte přednastavení", + "Limit bounds": "Hranice zobrazení", + "Use current bounds": "Použít současné hranice", + "max East": "maximálně na Východ", + "max North": "maximálně na Sever", + "max South": "maximálně na Jih", + "max West": "maximálně na Západ", + "TMS format": "formát TMS", + "Credits": "Autorství", + "Only visible features will be downloaded.": "Budou staženy jen viditelné objekty", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Otevři tuto oblast v editoru OpenStreetMap. Toto vám umožní editovat přímo základní mapová data a přispět tak v tvorbě svobodné mapy pro všechny.", + "Default properties": "Výchozí vlastnosti", + "User interface options": "Nastavení ovládacích prvků mapy", + "Image with custom width (in px): {{http://image.url.com|width}}": "Obrázek s vlastní šířkou (v px): {{http://obrazek.url.com|šířka}}", + "Current view instead of default map view?": "Současný pohled namísto výchozího?", + "Iframe export options": "Možnosti exportu pro iframe", + "Include full screen link?": "Zahrnout odkaz na celou obrazovku?", + "See full screen": "Na celou obrazovku", + "height": "výška", + "width": "šířka", + "Clustered": "Shluková", + "Clustering radius": "Poloměr shlukování", + "GeoRSS (only link)": "GeoRSS (jen odkaz)", + "GeoRSS (title + image)": "GeoRSS (titulek + obrázek)", + "Heatmap": "Teplotní mapa", + "Heatmap radius": "Poloměr teplotní mapy", + "Name and description": "Jméno a popis", + "Override clustering radius (default 80)": "Přepsat shlukovací poloměr (výchozí hodnota 80)", + "Override heatmap radius (default 25)": "Přepsat poloměr teplotní mapy (výchozí hodnota 25)", + "Proxy request": "Požadavky přes proxy", + "Table": "Tabulka", + "To use if remote server doesn't allow cross domain (slower)": "Pro případ že vzdálený server neumožňuje cross domain (pomalejší)", + "Type of layer": "Druh vrstvy", + "Filter…": "Filter ...", + "Heatmap intensity property": "Vlastnost pro intenzitu teplotní mapy", + "Optional intensity property for heatmap": "Volitelná vlastnost pro výpočet intenzity v teplotní mapě", + "Caption": "Popisek", + "Data browser": "Prohlížeč dat", + "Do you want to display a caption bar?": "Chcete zobrazit panel s popiskem?", + "Do you want to display a panel on load?": "Chcete při načtení zobrazit panel?", + "None": "Žádný", + "by": "od", + "Name and description (large)": "Jméno a popis (velké)", + "Empty": "Vyprázdnit", + "Split line": "Rozdělit čáru", + "Clone": "Klonovat", + "Clone of {name}": "Klon objektu {name}", + "Side panel": "Boční panel", + "Powered by Leaflet and Django, glued by uMap project.": "Sestaveno z Leaflet a Django, propojených pomocí projektu uMap.", + "Zoom level for automatic zooms": "Úroveň přiblížení pro automatické přiblížení", + "Do you want to display the «more» control?": "Přejete si zobrazovat ovládací prvek «více»?", + "Auto": "Automatická", + "Default: name": "Výchozí: name (název objektu)", + "Property to use for sorting features": "Vlastnost použitá pro řazení objektů", + "Slideshow": "Prezentace", + "Start slideshow": "Spustit prezentaci", + "Stop slideshow": "Zastavit prezentaci", + "Text color for the cluster label": "Barva textu popisku shluku", + "Zoom to the next": "Skočit na následující", + "Zoom to the previous": "Skočit na předchozí", + "Add a new property": "Přidat novou vlastnost", + "Are you sure you want to delete this property on all the features?": "Určitě chcete smazat tuto vlastnost na všech objektech?", + "Close": "Zavřít", + "Delete this property on all the features": "Smazat tuto vlastnost na všech objektech", + "Edit properties in a table": "Upravit vlastnosti v tabulce", + "Please enter the name of the property": "Zadejte prosím název vlastnosti", + "Please enter the new name of this property": "Zadejte prosím nový název této vlastnosti", + "Rename this property on all the features": "Přejmenovat tuto vlastnost na všech objektech", + "If false, the polygon will act as a part of the underlying map.": "Pokud je vypnuto, polygon se bude chovat jako součást mapového podkladu.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe s vlastní výškou (v px): {{{http://iframe.url.com|výška}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "Zobraz vše", + "Dynamic properties": "Dynamické vlastnosti", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Použijte zástupný text s vlastnostmi objektů mezi složenými závorkami, např. {name} — budou dynamicky nahrazeny odpovídajícími hodnotami.", + "Long credits": "Dlouhý text autorství", + "No licence has been set": "Nebyla nastavena licence", + "Popup content template": "Šablona obsahu bubliny", + "Short credits": "Krátký text autorství", + "Will be displayed in the bottom right corner of the map": "Bude zobrazeno s mapou napravo dole", + "Will be visible in the caption of the map": "Bude zobrazeno v popisu mapy", + "Map has been saved!": "Mapa byla uložena", + "Save anyway": "I tak uložit", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Ojoj! Někdo jiný mezitím také upravil data. Můžete je uložit bez ohledu na to, ale smažete tak jeho změny.", + "Comma separated list of properties to use when filtering features": "Čárkami oddělený seznam vlastností pro filtrování objektů", + "Keep current visible layers": "Použít aktuální zobrazení vrstev", + "Coordinates": "Souřadnice", + "Latitude": "Sev. šířka", + "Longitude": "Délka", + "Continue line (Ctrl-click)": "Pokračovat v čáře (Ctrl-klik)", + "Start a hole here": "Začít tady díru", + "Click last point to finish shape": "Klikněte na poslední bod pro dokončení tvaru", + "Click to add a marker": "Kliknutím přidáš značku", + "Click to continue drawing": "Kliknutím můžeš pokračovat v kreslení", + "Click to start drawing a line": "Klikněte pro začátek kreslení čáry", + "Click to start drawing a polygon": "Klikněte pro začátek kreslení polygonu", + "Import in a new layer": "Importovat do nové vrstvy", + "Layer": "Vrstva", + "Please choose a format": "Zvolte formát", + "Imports all umap data, including layers and settings.": "Importuje všechy data umapy, včetně vrstev a nastavení", + "Invalid umap data": "Neplatná data umapy", + "Invalid umap data in {filename}": "Neplatná data umapy v souboru {filename}", + "Add a line to the current multi": "Přidat čáru k současnému multi", + "Add a polygon to the current multi": "Přidat polygon k současnému multi", + "Click to edit": "Klikněte pro úpravy", + "Continue line": "Pokračovat v čáře", + "Delete this shape": "Smazat tento tvar", + "Make main shape": "Učinit hlavním tvarem", + "Merge lines": "Spojit čáry", + "Remove shape from the multi": "Odebrat tvar z multi", + "Transfer shape to edited feature": "Přenést tvar do editovaného objektu", + "next": "další", + "previous": "předchozí", + "Measure distances": "Měřit vzdálenost", + "NM": "NM", + "kilometers": "kilometrů", + "km": "km", + "mi": "mi", + "miles": "mil", + "nautical miles": "námořních mil", + "{area} acres": "{area} akrů", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} mil", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Opravdu si přejete obnovit tuto verzi?", + "Extract shape to separate feature": "Vyjmout tvar do samostatného objektu", + "Layer properties": "Vlastnosti vrstvy", + "Restore this version": "Obnovit tuto verzi", + "Versions": "Verze", + "You have unsaved changes.": "Máte neuložené změny.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "Čárkami oddělený seznam čísel, který popisuje vzorek přerušované čáry. Např. «5, 10, 15».", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Výchozí přiblížení", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Smazat tento bod (Alt-klik)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Tvar ikony", + "Icon symbol": "Symbol ikony", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Platný název v CSS (např.: Red, Blue nebo #123456)", + "No results": "Žádné výsledky", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "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…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/da.json b/umap/static/umap/locale/da.json new file mode 100644 index 00000000..1c66c653 --- /dev/null +++ b/umap/static/umap/locale/da.json @@ -0,0 +1,350 @@ +{ + "About": "Om", + "Action not allowed :(": "Denne funktion er ikke tilladt :(", + "Add a layer": "Tilføj et lag", + "Add symbol": "Tilføj symbol", + "Advanced actions": "Avanceret funktioner", + "Advanced properties": "Avanceret indstillinger", + "Allow scroll wheel zoom?": "Tillad scrool mus zoom?", + "An error occured": "Der opstod en fejl", + "Are you sure you want to cancel your changes?": "Er du sikker på du vil fortryde dine ændringer?", + "Are you sure you want to clone this map and all its datalayers?": "Er du sikker på du vil klone dette kort og alle geodatalagene?", + "Are you sure you want to delete the feature?": "Er du sikker på at du vil slette dette objekt?", + "Are you sure you want to delete this map?": "Er du sikker på at du vil slette dette kort?", + "Ball": "Kugle", + "Bring feature to center": "Centrerer objekterne", + "Browse data": "Browse geodata", + "Cancel": "Fortryd", + "Cancel edits": "Fortryd redigeringer", + "Center map on your location": "Centrer kort på din placering", + "Change map background": "Skift kortbaggrund", + "Change symbol": "Skift symbol", + "Change tilelayers": "Skift kortlag", + "Choose the format of the data to import": "Vælg format af geodata der skal importeres", + "Choose the layer of the feature": "Vælg lag for objektet", + "Choose the layer to import in": "Vælg lag der skal importeres", + "Circle": "Cirkel", + "Clone this map": "Klon dette kort", + "Default": "Standard", + "Delete": "Slet", + "Delete this feature": "Slet dette objekt", + "Disable editing": "Deaktiver redigering", + "Display on load": "Vis ved indlæsning", + "Do you want to display a minimap?": "Vil du vise et miniaturekort?", + "Do you want to display popup footer?": "Vil du vise popup noten?", + "Do you want to display the scale control?": "Vil du vise skala kontrolpanelet?", + "Download data": "Download geodata", + "Draw a line": "Tegn en linje", + "Draw a marker": "Tegn en markør", + "Draw a polygon": "Tegn en polygon", + "Draw a polyline": "Tegn en polygonlinje", + "Drop": "Drop", + "Dynamic": "Dynamisk", + "Edit": "Redigere", + "Edit feature's layer": "Ret objekt lag", + "Edit map properties": "Ret kortindstillinger", + "Edit map settings": "Kortredigerings indstillinger", + "Edit this feature": "Ret dette objekt", + "Embed and share this map": "Indlejre og del dette kort", + "Enable editing": "Aktiver redigering", + "Format": "Format", + "From zoom": "Fra zoom", + "Go to «{feature}»": "Gå til «{feature}»", + "Hide controls": "Skjul kontrolpanel", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "Hvor meget linjen skal forenkles på hvert zoom niveau. (Mere = hurtigere og lettere udseende, mindre = mere præcist)", + "Import": "Import", + "Import data": "Importer geodata", + "Inherit": "Nedarve", + "Licence": "Licens", + "Map background credits": "Baggrundskort kreditering", + "Map user content has been published under licence": "Kortindholdet er udgivet under licensen", + "More controls": "Vis flere kontrolpaneler", + "Optional. Same as color if not set.": "Valgfrit. Uden ændring samme farve. ", + "Optionnal.": "Valgfrit.", + "Paste here your data": "Indsæt dine geodata her", + "Please be sure the licence is compliant with your use.": "Vær sikker på at licensen er kompatibel med din brug.", + "Problem in the response": "Problem med responsen", + "Problem in the response format": "Der er et problem med det kaldte format", + "Provide an URL here": "Indsæt en URL her", + "Remote data": "Fjernudbudt geodata", + "Save": "Gem", + "Save current edits": "Gem nuværende rettelser", + "Save this center and zoom": "Gem med dette center og zoom", + "Show/hide layer": "Vis/skjul lag", + "Start editing": "Start redigering", + "Stop editing": "Stop redigering", + "The zoom and center have been setted.": "Zoom og center er blevet justeret.", + "To zoom": "For at zoome", + "Untitled layer": "Unavngivet lag", + "Untitled map": "Unavngivet kort", + "Update permissions and editors": "Opdaterer indstillinger og redaktører", + "Url": "URL", + "User content credits": "Brugerindholds kredit", + "Where do we go from here?": "Hvor skal vi gå til fra her?", + "Zoom in": "Zoom ind", + "Zoom out": "Zoom ud", + "Zoom to layer extent": "Zoom hen til lag indhold", + "Zoom to this feature": "Zoom ind til dette objekt", + "color": "farver", + "dash array": "stiplet kasse", + "description": "beskrivelse", + "fill": "fyld", + "fill color": "udfyldningsfarve", + "fill opacity": "Fyldnings opacitet", + "inherit": "nedarve", + "licence": "licens", + "name": "Navn", + "no": "nej", + "opacity": "opacitet", + "stroke": "stroke i typografi", + "weight": "vægtning", + "yes": "ja", + "Editing": "Redigere", + "Embed the map": "Indlejring af kortet", + "Short URL": "Kort URL", + "# one hash for main heading": "# et hashtag for hovedoverskrift", + "## two hashes for second heading": "## to hashtag for anden overskrift", + "### three hashes for third heading": "### tre hashtag for tredje overskriftsniveau", + "**double star for bold**": "**dobbelt stjerne for fed skrift**", + "*simple star for italic*": "*enkelt stjerne for kursiv*", + "--- for an horizontal rule": "--- for vandret regel", + "All properties are imported.": "Alle objekter er blevet importeret.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Komma, tabulering eller semikolon adskiller værdier. SRS WGS84 er standard. Kun punkt geometri er importeret. Importen vil kigge efter kolonner der indeholder varianter af «lat» eller «lon» i begyndelsen af overskriften. Disse er store/små ufølsomme. Alle andre kolonner vil blive importeret som objekter.", + "Custom background": "Tilpas baggrund", + "Help": "Hjælp", + "Image: {{http://image.url.com}}": "Billede: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link med tekst: [[http://example.com|tekst for linket her]]", + "Properties imported:": "Objekter importeret:", + "Simple link: [[http://example.com]]": "Simpelt link: [[http://example.com]]", + "Supported scheme": "Understøttet skema", + "Supported variables that will be dynamically replaced": "Understøttede variabler som vil blive dynamisk erstattet", + "Text formatting": "Tekstformatering", + "attribution": "navngivelse", + "display name": "visningsnavn", + "max zoom": "max zoom", + "min zoom": "min zoom", + "Skipping unkown geometry.type: {type}": "Spring ukendt geometry.type: {type} over", + "Please save the map before": "Gem kortet først før du går videre", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "Du kan bruge objekt egenskaberne som variabler: fx med \"http://myserver.org/images/{name}.png\", og {name} variblen vil blive erstattet med navnet for hver markør.", + "Transform to polygon": "Transformere til polygon", + "Transform to lines": "Transformere til linjer", + "Choose the data format": "Vælg geodata format", + "Error in the tilelayer URL": "Fejl i tile-lags URLen", + "Directions from here": "Kørselsvejledning fra her", + "Choose a preset": "Vælg en forudindstillet indstilling", + "Limit bounds": "Geografisk afgræsning", + "Use current bounds": "Brug nuværende grænser", + "max East": "max Øst", + "max North": "max Nord", + "max South": "max Syd", + "max West": "max Vest", + "TMS format": "TMS format", + "Credits": "Kreditering", + "Only visible features will be downloaded.": "Kun synlige objekter vil blive downloadet.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Åbn dette kort i en korteditor for at gøre geodata endnu bedre i OpenStreetMap", + "Default properties": "Standard indstillinger", + "User interface options": "Brugergrænseflade indstillinger", + "Image with custom width (in px): {{http://image.url.com|width}}": "Billede med bredde (i px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Nuværende kortudsnit i stedet for standard kortudsnit?", + "Iframe export options": "Iframe eksportmuligheder", + "Include full screen link?": "Inkluderer fuldskærm link?", + "See full screen": "Se i fuld skærmstørrelse", + "height": "højde", + "width": "bredde", + "Clustered": "Klynge", + "Clustering radius": "Klynge radius", + "GeoRSS (only link)": "GeoRSS (kun link)", + "GeoRSS (title + image)": "GeoRSS (titel + billede)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Navn og beskrivelse", + "Override clustering radius (default 80)": "Overskriv klynge radius (standard 80)", + "Override heatmap radius (default 25)": "Overskriv heatmap radius (standard 25)", + "Proxy request": "Proxy forespørgsel", + "Table": "Tabel", + "To use if remote server doesn't allow cross domain (slower)": "Brug denne hvis remote server ikke tillader krydsdomæne (sløvere)", + "Type of layer": "Type af lag", + "Filter…": "Filter…", + "Heatmap intensity property": "Heatmap intensitet egenskaber", + "Optional intensity property for heatmap": "Valgfrie intensitets egenskaber for heatmap", + "Caption": "Billedtekst", + "Data browser": "Geodata browser", + "Do you want to display a caption bar?": "Vil du vise en billedtekst?", + "Do you want to display a panel on load?": "Vil du vise et panel ved indlæsning?", + "None": "Ingen", + "by": "af", + "Name and description (large)": "Navn og beskrivelse (meget tekst)", + "Empty": "Tomt", + "Split line": "Spilt linjen op", + "Clone": "Klone", + "Clone of {name}": "Klone af {name}", + "Side panel": "Sidepanel", + "Powered by Leaflet and Django, glued by uMap project.": "Håndteret af Leaflet og Django, flettet ind i uMap projektet.", + "Zoom level for automatic zooms": "Zoomniveau for automatisk zoomniveauer", + "Do you want to display the «more» control?": "Vil du vise mere af kontrolpanel?", + "Auto": "Auto", + "Default: name": "Standardnavn:", + "Property to use for sorting features": "Egenskab til brug for at sortere objekter\n", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Tekstfarve for klynge label", + "Zoom to the next": "Zoom hen til næste", + "Zoom to the previous": "Zoom hen til forrige", + "Add a new property": "Tilføj en ny egenskab", + "Are you sure you want to delete this property on all the features?": "Er du sikker på du vil slette denne egenskab for alle objekter?", + "Close": "Luk", + "Delete this property on all the features": "Slet denne egenskab for alle objekter", + "Edit properties in a table": "Ret egenskaberne i en tabel", + "Please enter the name of the property": "Vær venlig at indtaste navnet for egenskaben", + "Please enter the new name of this property": "Vær venlig at indtaste et nyt navn for denne egenskab", + "Rename this property on all the features": "Omdøb denne egenskab for alle objekter", + "If false, the polygon will act as a part of the underlying map.": "Hvis falsk så vil polygonen opfører sig som en del af det underliggende kort.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe med brugerdefineret højde (i px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "Se alle", + "Dynamic properties": "Dynamiske egenskaber", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Brug pladsholdere med objekt egenskaberne mellem tuborgklammer fx {navn} så vil de dynamatisk blive erstattet med de tilhørende værdier. ", + "Long credits": "Lang kreditering", + "No licence has been set": "Ingen licens angivet", + "Popup content template": "Popul indholdsskabelon", + "Short credits": "Kort kreditering", + "Will be displayed in the bottom right corner of the map": "Vil blive vist nede i højre hjørne af kortet", + "Will be visible in the caption of the map": "Vil blive synlig i tekstfeltet på kortet", + "Map has been saved!": "Kortet er blevet gemt!", + "Save anyway": "Gem alligevel", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Oops! Det ser ud til at nogen har rettet i data. Du kan godt gemme alligevel, men dette vil så overskrive de ændringer de andre har lavet.", + "Comma separated list of properties to use when filtering features": "Kommasepareret list af alle egenskaberne til brug ved filteret objekter.", + "Keep current visible layers": "Behold nuværende synlige lag", + "Coordinates": "Koordinater", + "Latitude": "Længdegrader", + "Longitude": "Breddegrader", + "Continue line (Ctrl-click)": "Fortsæt linje (Kontrol-klik)", + "Start a hole here": "Start et hul her", + "Click last point to finish shape": "Klik på det det sidste punkt for at færdigegøre", + "Click to add a marker": "Klik for at tilføje en markør", + "Click to continue drawing": "Klik for at fortsætte indtegning", + "Click to start drawing a line": "Klik for at starte med at indtegne en linje", + "Click to start drawing a polygon": "Klik for at starte indtegning af polygon", + "Import in a new layer": "Importerer i et nyt lag", + "Layer": "Lag", + "Please choose a format": "Vælg venligst et format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Mål afstand", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "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…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/de.json b/umap/static/umap/locale/de.json new file mode 100644 index 00000000..e15b33c0 --- /dev/null +++ b/umap/static/umap/locale/de.json @@ -0,0 +1,350 @@ +{ + "About": "Über", + "Action not allowed :(": "Aktion nicht erlaubt :(", + "Add a layer": "Ebene hinzufügen", + "Add symbol": "Symbol hinzufügen", + "Advanced actions": "Erweiterte Aktionen", + "Advanced properties": "Erweiterte Eigenschaften", + "Allow scroll wheel zoom?": "Möchtest du Zoomen mit dem Mausrad erlauben?", + "An error occured": "Es ist ein Fehler aufgetreten.", + "Are you sure you want to cancel your changes?": "Willst du deine Änderungen wirklich abbrechen?", + "Are you sure you want to clone this map and all its datalayers?": "Möchtest du die Karte und ihre Datenebenen wirklich duplizieren?", + "Are you sure you want to delete the feature?": "Möchtest du dieses Element wirklich löschen?", + "Are you sure you want to delete this map?": "Willst du diese Karte wirklich löschen?", + "Ball": "Stecknadel", + "Bring feature to center": "Auf Element zentrieren", + "Browse data": "Daten anzeigen", + "Cancel": "Abbrechen", + "Cancel edits": "Bearbeitungen abbrechen", + "Center map on your location": "Die Karte auf deinem Standort ausrichten", + "Change map background": "Hintergrundkarte ändern", + "Change symbol": "Symbol ändern", + "Change tilelayers": "Hintergrundkarte ändern", + "Choose the format of the data to import": "Wähle das Datenformat für den Import", + "Choose the layer of the feature": "Wähle die Ebene für das Element", + "Choose the layer to import in": "Wähle die Ebene, in die importiert werden soll", + "Circle": "Kreis", + "Clone this map": "Dupliziere diese Karte", + "Default": "Standard", + "Delete": "Löschen", + "Delete this feature": "Dieses Element löschen", + "Disable editing": "Bearbeiten deaktivieren", + "Display on load": "Beim Seitenaufruf anzeigen.", + "Do you want to display a minimap?": "Möchtest du eine Übersichtskarte anzeigen?", + "Do you want to display popup footer?": "Möchtest du eine Fußzeile im Popup anzeigen?", + "Do you want to display the scale control?": "Möchtest du die Maßstabsleiste anzeigen?", + "Download data": "Daten herunterladen", + "Draw a line": "Eine Linie zeichnen", + "Draw a marker": "Einen Marker zeichnen", + "Draw a polygon": "Eine Fläche zeichnen", + "Draw a polyline": "Eine Linie zeichnen", + "Drop": "Tropfen", + "Dynamic": "Dynamisch", + "Edit": "Bearbeiten", + "Edit feature's layer": "Elementebene bearbeiten", + "Edit map properties": "Karteneigenschaften bearbeiten", + "Edit map settings": "Karteneinstellungen bearbeiten", + "Edit this feature": "Dieses Element bearbeiten", + "Embed and share this map": "Teile und binde diese Karte ein.", + "Enable editing": "Bearbeiten aktivieren", + "Format": "Format", + "From zoom": "Von Zoomstufe", + "Go to «{feature}»": "Gehe zu „{feature}“", + "Hide controls": "Schaltflächen ausblenden", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "Wie stark Linien mit jeder Zoomstufe vereinfacht werden (mehr = bessere Performance und glatteres Aussehen, weniger = präziser)", + "Import": "Importieren", + "Import data": "Daten importieren", + "Inherit": "erben", + "Licence": "Lizenz", + "Map background credits": "Credits der Hintergrundkarte", + "Map user content has been published under licence": "Der Benutzerinhalt wurde veröffentlicht unter der Lizenz", + "More controls": "Mehr Schaltflächen", + "Optional. Same as color if not set.": "Optional. Gleich wie Farbe, falls nicht ausgefüllt.", + "Optionnal.": "Optional", + "Paste here your data": "Füge deine Daten hier ein", + "Please be sure the licence is compliant with your use.": "Stelle bitte sicher, dass die Lizenz mit deiner Verwendung kompatibel ist.", + "Problem in the response": "Fehlerhafte Serverantwort", + "Problem in the response format": "Ungültiges Format der Serverantwort", + "Provide an URL here": "Hier eine URL angeben", + "Remote data": "Ausgelagerte Daten", + "Save": "Speichern", + "Save current edits": "Aktuelle Änderungen speichern", + "Save this center and zoom": "Aktuelle Position und Zoomstufe speichern", + "Show/hide layer": "Ebene Einblenden/Ausblenden", + "Start editing": "Beginne mit der Bearbeitung", + "Stop editing": "Bearbeiten beenden", + "The zoom and center have been setted.": "Zoomstufe und Mittelpunkt wurden gespeichert.", + "To zoom": "Bis Zoomstufe", + "Untitled layer": "unbenannte Ebene", + "Untitled map": "Unbenannte Karte", + "Update permissions and editors": "Berechtigungen und Bearbeiter ändern", + "Url": "URL", + "User content credits": "Credits der Benutzerinhalte", + "Where do we go from here?": "Wie geht es weiter?", + "Zoom in": "Hineinzoomen", + "Zoom out": "Herauszoomen", + "Zoom to layer extent": "Auf Ebenenausdehnung zommen", + "Zoom to this feature": "Auf dieses Element zoomen", + "color": "Farbe", + "dash array": "Linienart", + "description": "Beschreibung", + "fill": "Füllung", + "fill color": "Farbe der Füllung", + "fill opacity": "Deckkraft der Füllung", + "inherit": "erben", + "licence": "Lizenz", + "name": "Name", + "no": "Nein", + "opacity": "Deckkraft", + "stroke": "Umrisslinie", + "weight": "Stärke", + "yes": "Ja", + "Editing": "Bearbeiten", + "Embed the map": "Karte einbinden", + "Short URL": "Kurze URL", + "# one hash for main heading": "# Eine Raute für große Überschrift", + "## two hashes for second heading": "## Zwei Rauten für mittlere Überschrift", + "### three hashes for third heading": "### Drei Rauten für kleine Überschrift", + "**double star for bold**": "**Zwei Sterne für Fett**", + "*simple star for italic*": "*Ein Stern für Kursiv*", + "--- for an horizontal rule": "--- Für eine horizontale Linie", + "All properties are imported.": "Alle Merkmale wurden importiert.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Komma-, tabulator-, oder semikolongetrennte Werte. SRS WGS84 ist impliziert. Nur Punktgeometrien werden importiert. Beim Import wird nach Spaltenüberschriften mit jeder Nennung von „lat“ und „lon“ am Anfang der Überschrift gesucht (ohne Beachtung von Groß-/Kleinschreibung). Alle anderen Spalten werden als Merkmale importiert.", + "Custom background": "Benutzerdefinierter Hintergrund", + "Help": "Hilfe", + "Image: {{http://image.url.com}}": "Bild: {{http://bild.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link mit Text: [[http://beispiel.com|Text für den Link]]", + "Properties imported:": "Importierte Merkmale:", + "Simple link: [[http://example.com]]": "Einfacher Link: [[http://beispiel.com]]", + "Supported scheme": "Unterstütztes Schema", + "Supported variables that will be dynamically replaced": "Unterstützte Variablen, welche dynamisch ersetzt werden", + "Text formatting": "Textformatierung", + "attribution": "Copyright-Hinweis", + "display name": "Name anzeigen", + "max zoom": "höchste Zoomstufe", + "min zoom": "kleinste Zoomstufe", + "Skipping unkown geometry.type: {type}": "Überspringe unbekannten Geometrietyp: {type}", + "Please save the map before": "Bitte zuerst die Karte speichern", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "Du kannst variable Elementeigenschaften verwenden: z.B.: bei „http://myserver.org/images/{name}.png“, wird die {name}-Variable ersetzt durch den „name“-Wert des jeweiligen Markers.", + "Transform to polygon": "In Fläche umwandeln", + "Transform to lines": "In Linien umwandeln", + "Choose the data format": "Wähle das Datenformat", + "Error in the tilelayer URL": "Fehler in der Kachelebenen-URL", + "Directions from here": "Route von hier", + "Choose a preset": "Wähle eine Vorlage", + "Limit bounds": "Kartenverschiebung begrenzen", + "Use current bounds": "Nutze aktuelle Kartenansicht", + "max East": "Östliche Begrenzung", + "max North": "Nördliche Begrenzung", + "max South": "Südliche Begrenzung", + "max West": "Westliche Begrenzung", + "TMS format": "TMS-Format", + "Credits": "Credits", + "Only visible features will be downloaded.": "Nur eingeblendete Elemente werden heruntergeladen.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Diesen Kartenauschnitt in einem Karten-Editor öffnen, um genauere Daten für OpenStreetMap bereitzustellen.", + "Default properties": "Standardeigenschaften", + "User interface options": "Einstellungen Benutzeroberfläche", + "Image with custom width (in px): {{http://image.url.com|width}}": "Bild mit benutzerdefinierter Breite (in Pixel): {{http://bild.url.com|Breite}}", + "Current view instead of default map view?": "Aktuelle Kartenansicht anstatt der Standard-Kartenansicht verwenden?", + "Iframe export options": "Iframe Exportoptionen", + "Include full screen link?": "Link für Vollbildanzeige einbeziehen?", + "See full screen": "Vollbildanzeige", + "height": "Höhe", + "width": "Breite", + "Clustered": "Gruppiert", + "Clustering radius": "Gruppierungsradius", + "GeoRSS (only link)": "GeoRSS (nur Link)", + "GeoRSS (title + image)": "GeoRSS (Titel + Bild)", + "Heatmap": "Heatmap", + "Heatmap radius": "Radius der Heatmap", + "Name and description": "Name und Beschreibung", + "Override clustering radius (default 80)": "Gruppierungsradius überschreiben (Standard: 80)", + "Override heatmap radius (default 25)": "Heatmapradius überschreiben (Standard: 25)", + "Proxy request": "Proxyanforderung", + "Table": "Tabelle", + "To use if remote server doesn't allow cross domain (slower)": "Zu nutzen wenn der Zielserver kein Cross-Origin Resource Sharing (CORS) erlaubt (langsamer).", + "Type of layer": "Ebenentyp", + "Filter…": "Elemente filtern...", + "Heatmap intensity property": "Heatmap-Intensität", + "Optional intensity property for heatmap": "Optionale Intensitätseigenschaft für die Heatmap", + "Caption": "Überschrift", + "Data browser": "Datenbrowser", + "Do you want to display a caption bar?": "Mächtest du eine Überschrift (Fußzeile) anzeigen?", + "Do you want to display a panel on load?": "Möchtest du beim Seitenaufruf eine Seitenleiste anzeigen?", + "None": "Keine", + "by": "von", + "Name and description (large)": "Name und Beschreibung (groß)", + "Empty": "Leeren", + "Split line": "Linie teilen", + "Clone": "Duplizieren", + "Clone of {name}": "Duplikat von {name}", + "Side panel": "Seitenleiste", + "Powered by Leaflet and Django, glued by uMap project.": "Bereitgestellt von Leaflet und Django, zusammengebastelt vom uMap Projekt.", + "Zoom level for automatic zooms": "Zommstufe für automatischen Zoom", + "Do you want to display the «more» control?": "Möchtest du die „Mehr“-Schaltfläche anzeigen?", + "Auto": "Automatisch", + "Default: name": "Standard: Name", + "Property to use for sorting features": "Merkmal, welches für Sortierfunktionen verwendet werden soll", + "Slideshow": "Diashow", + "Start slideshow": "Diashow starten", + "Stop slideshow": "Diashow beenden", + "Text color for the cluster label": "Textfarbe für die Gruppierungsbezeichnung", + "Zoom to the next": "Zum nächsten zoomen", + "Zoom to the previous": "Zum vorherigen zoomen", + "Add a new property": "Ein Merkmal hinzufügen", + "Are you sure you want to delete this property on all the features?": "Bist du sicher, dass du dieses Merkmal bei allen Elementen löschen willst?", + "Close": "Schließen", + "Delete this property on all the features": "Dieses Merkmal bei allen Elementen löschen", + "Edit properties in a table": "Merkmale in einer Tabelle bearbeiten", + "Please enter the name of the property": "Bitte gib den Namen des Merkmals ein", + "Please enter the new name of this property": "Bitte gib den neuen Namen des Merkmals ein", + "Rename this property on all the features": "Dieses Merkmal bei allen Elementen umbenennen", + "If false, the polygon will act as a part of the underlying map.": "Wenn auf Nein gesetzt, dann verhält sich die Fläche als Teil der hinterlegten Karte.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe mit benutzerdefinierter Höhe (in Pixel): {{{http://iframe.url.com|Höhe}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "Alle anzeigen", + "Dynamic properties": "Dynamische Merkmale", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Nutze Platzhalter mit Elementmerkmalen innerhalb der Klammern, z.B. {name}, sie werden dynamisch durch die entsprechenden Werte ersetzt.", + "Long credits": "Lange Credits", + "No licence has been set": "Keine Lizenz ausgewählt", + "Popup content template": "Popup Vorlage", + "Short credits": "Kurze Credits", + "Will be displayed in the bottom right corner of the map": "Wird in rechten unteren Ecke der Karte angezeigt", + "Will be visible in the caption of the map": "Wird in der Überschrift der Karte angezeigt", + "Map has been saved!": "Karte gespeichert!", + "Save anyway": "Trotzdem speichern", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Hoppla! Jemand anders hat die Daten bearbeitet. Du kannst trotzdem speichern, aber dies wird Änderungen, welche andere Personen vorgenommen haben, löschen.", + "Comma separated list of properties to use when filtering features": "Kommagetrennte Liste der Merkmale, welche beim Filtern von Elementen verwendet werden sollen", + "Keep current visible layers": "Aktuell eingeblendete Ebenen übernehmen?", + "Coordinates": "Koordinaten", + "Latitude": "Geogr. Breite", + "Longitude": "Geogr. Länge", + "Continue line (Ctrl-click)": "Linie weiterzeichnen (Strg+klick)", + "Start a hole here": "Hier ein Loch beginnen", + "Click last point to finish shape": "Kllicke den letzten Punkt an, um die Form abzuschließen", + "Click to add a marker": "Klicke, um einen Marker hinzuzufügen", + "Click to continue drawing": "Klicke, um weiter zu zeichnen", + "Click to start drawing a line": "Klicke, um eine Linie zu zeichnen", + "Click to start drawing a polygon": "Klicke, um eine Fläche zu zeichnen", + "Import in a new layer": "In eine neue Ebene importieren", + "Layer": "Ebene", + "Please choose a format": "Bitte wähle ein Format", + "Imports all umap data, including layers and settings.": "Importiert alle uMap-Daten inklusive Ebenen und Einstellungen", + "Invalid umap data": "Ungütige uMap-Daten", + "Invalid umap data in {filename}": "Ungültige uMap-Daten in {filename}", + "Add a line to the current multi": "Linie zur vorhandene Gruppe hinzufügen", + "Add a polygon to the current multi": "Fläche zur vorhandene Gruppe hinzufügen", + "Click to edit": "Zum Bearbeiten klicken", + "Continue line": "Linie fortführen", + "Delete this shape": "Diese Form löchen", + "Make main shape": "Hauptform erstellen", + "Merge lines": "Linien zusammenführen", + "Remove shape from the multi": "Form aus der Gruppe löschen", + "Transfer shape to edited feature": "Überführe Form zu Element bearbeiten", + "next": "weiter", + "previous": "zurück", + "Measure distances": "Entfernungen messen", + "NM": "sm", + "kilometers": "Kilometer", + "km": "km", + "mi": "mi", + "miles": "Meilen", + "nautical miles": "Seemeilen", + "{area} acres": "{area} Acre", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} sm", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} Meilen", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Bist du sicher, dass du diese Version wiederherstellen willst?", + "Extract shape to separate feature": "Extrahiere Form zu getrennten Element", + "Layer properties": "Ebeneneigenschaften", + "Restore this version": "Diese Version wiederherstellen", + "Versions": "Versionen", + "You have unsaved changes.": "Es gibt ungespeicherte Änderungen.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "Eine kommagetrente Zahlenfolge, die die Linienart (Strichmuster) der Kontur definiert, z.B.: \"5, 10, 15\".", + "Advanced transition": "Erweiterter Übergang", + "Allow interactions": "Interaktionen erlauben", + "Autostart when map is loaded": "Automatischer Start, wenn Karte geladen ist", + "Default interaction options": "Standard-Interaktionsoptionen", + "Default shape properties": "Standard-Formeigenschaften", + "Default zoom level": "Standard-Zoomstufe", + "Define link to open in a new window on polygon click.": "Definiere einen externen Link, der sich beim Klick auf die Fläche in einem neuen Fenster öffnet.", + "Delete this vertex (Alt-click)": "Diesen Eckpunkt löschen (Alt-Klick)", + "Display the control to open OpenStreetMap editor": "Den Button zum OpenStreetMap editor anzeigen", + "Display the data layers control": "Datenebenensteuerung anzeigen", + "Display the embed control": "Eingebettete Steuerung anzeigen", + "Display the fullscreen control": "Vollbildsteuerung anzeigen", + "Display the locate control": "Den Ortungsbutton anzeigen.", + "Display the measure control": "Messsteuerung anzeigen", + "Display the search control": "Suchsteuerung anzeigen", + "Display the tile layers control": "Kachelebenensteuerung anzeigen", + "Display the zoom control": "Zoomsteuerung anzeigen", + "Exit Fullscreen": "Vollbild beenden", + "Fetch data each time map view changes.": "Daten jedes Mal abrufen, wenn sich die Kartenansicht ändert.", + "Filter keys": "Schlüssel filtern", + "Icon shape": "Bildzeichenform", + "Icon symbol": "Bildzeichensymbol", + "Interaction options": "Interaktionsoptionen", + "Label key": "Anzeigeschlüssel", + "Link to…": "Verlinke zu...", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Muss ein gültiger CSS-Wert sein (z.B.: DarkBlue oder #123456)", + "No results": "Keine Ergebnisse", + "Popup style": "Popupstil", + "Replace layer content": "Ebeneninhalt ersetzen", + "Save this location as new feature": "Diesen Ort als neue Funktion speichern", + "Search location": "Ort suchen", + "Set URL": "URL festlegen", + "Shape properties": "Formeigenschaften", + "Simplify": "Vereinfachen", + "Sort key": "Sortierschlüssel", + "The name of the property to use as feature label (ex.: \"nom\")": "Den Name des Merkmals als Elementbezeichnung verwenden (z.B.: \"Name\")", + "Toggle edit mode (shift-click)": "Bearbeitungsmodus umschalten (Umschalt-Klick)", + "View Fullscreen": "Vollbild ansehen", + "Whether to display or not polygons paths.": "Umrisslinie von Flächen anzeigen oder nicht anzeigen.", + "Whether to fill polygons with color.": "Ob Flächen mit Farbe gefüllt werden.", + "Zoom to this place": "Auf diesen Ort zoomen", + "always": "immer", + "clear": "leeren", + "define": "festlegen", + "hidden": "ausgeblendet", + "never": "nie", + "Automatic": "Automatisch", + "Clone this feature": "Diese Funktion klonen", + "Display label": "Beschriftung anzeigen", + "Drag to reorder": "Ziehen zum Neuanordnen", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe mit benutzerdefinierter Höhe und Breite (in Pixel): {{{http://iframe.url.com|Höhe*Breite}}}", + "Labels are clickable": "Beschriftungen sind klickbar", + "Label direction": "Beschriftungsrichtung", + "Manage layers": "Ebenen verwalten", + "On the bottom": "An der Unterseite", + "On the left": "An der linken Seite", + "On the right": "An der rechten Seite", + "On the top": "An der Oberseite", + "Only display label on mouse hover": "Beschriftung nur beim Überfahren mit der Maus anzeigen", + "Open link in…": "Link öffnen in…", + "Unable to detect format of file {filename}": "Format der Datei {filename} kann nicht erkannt werden", + "collapsed": "eingeklappt", + "expanded": "ausgeklappt", + "iframe": "iframe", + "new window": "neues Fenster", + "parent window": "übergeordnetes Fenster", + "{count} errors during import: {message}": "{count} Fehler während dem Import: {message}", + "Are you sure you want to delete this layer?": "Bist du sicher, dass du diese Ebene löschen willst?", + "Delete layer": "Ebene löschen", + "Error while fetching {url}": "Fehler beim Abrufen von {url}", + "Home": "Startseite", + "Delete all layers": "Alle Ebenen löschen", + "Full map data": "Vollständige Kartendaten", + "Smart transitions": "Weiche Übergänge", + "Activate slideshow mode": "Diashowmodus aktivieren", + "Data is browsable": "Daten sind durchsuchbar", + "Delay between two transitions when in play mode": "Verzögerung zwischen zwei Übergängen im Abspielmodus", + "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 Slideshow, im Datenbrowser, in der Popup-Navigation,... auszublenden.", + "{delay} seconds": "{delay} Sekunden", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/en.json b/umap/static/umap/locale/en.json new file mode 100644 index 00000000..4918b268 --- /dev/null +++ b/umap/static/umap/locale/en.json @@ -0,0 +1,350 @@ +{ + "About": "About", + "Action not allowed :(": "Action not allowed :(", + "Add a layer": "Add a layer", + "Add symbol": "Add symbol", + "Advanced actions": "Advanced actions", + "Advanced properties": "Advanced properties", + "Allow scroll wheel zoom?": "Allow scroll wheel zoom?", + "An error occured": "An error occured", + "Are you sure you want to cancel your changes?": "Are you sure you want to cancel your changes?", + "Are you sure you want to clone this map and all its datalayers?": "Are you sure you want to clone this map and all its datalayers?", + "Are you sure you want to delete the feature?": "Are you sure you want to delete the feature?", + "Are you sure you want to delete this map?": "Are you sure you want to delete this map?", + "Ball": "Ball", + "Bring feature to center": "Bring feature to center", + "Browse data": "Browse data", + "Cancel": "Cancel", + "Cancel edits": "Cancel edits", + "Center map on your location": "Center map on your location", + "Change map background": "Change map background", + "Change symbol": "Change symbol", + "Change tilelayers": "Change tilelayers", + "Choose the format of the data to import": "Choose the format of the data to import", + "Choose the layer of the feature": "Choose the layer of the feature", + "Choose the layer to import in": "Choose the layer to import in", + "Circle": "Circle", + "Clone this map": "Clone this map", + "Default": "Default", + "Delete": "Delete", + "Delete this feature": "Delete this feature", + "Disable editing": "Disable editing", + "Display on load": "Display on load", + "Do you want to display a minimap?": "Do you want to display a minimap?", + "Do you want to display popup footer?": "Do you want to display popup footer?", + "Do you want to display the scale control?": "Do you want to display the scale control?", + "Download data": "Download data", + "Draw a line": "Draw a line", + "Draw a marker": "Draw a marker", + "Draw a polygon": "Draw a polygon", + "Draw a polyline": "Draw a polyline", + "Drop": "Drop", + "Dynamic": "Dynamic", + "Edit": "Edit", + "Edit feature's layer": "Edit feature's layer", + "Edit map properties": "Edit map properties", + "Edit map settings": "Edit map settings", + "Edit this feature": "Edit this feature", + "Embed and share this map": "Embed and share this map", + "Enable editing": "Enable editing", + "Format": "Format", + "From zoom": "From zoom", + "Go to «{feature}»": "Go to «{feature}»", + "Hide controls": "Hide controls", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)", + "Import": "Import", + "Import data": "Import data", + "Inherit": "Inherit", + "Licence": "Licence", + "Map background credits": "Map background credits", + "Map user content has been published under licence": "Map user content has been published under licence", + "More controls": "More controls", + "Optional. Same as color if not set.": "Optional. Same as color if not set.", + "Optionnal.": "Optionnal.", + "Paste here your data": "Paste here your data", + "Please be sure the licence is compliant with your use.": "Please be sure the licence is compliant with your use.", + "Problem in the response": "Problem in the response", + "Problem in the response format": "Problem in the response format", + "Provide an URL here": "Provide an URL here", + "Remote data": "Remote data", + "Save": "Save", + "Save current edits": "Save current edits", + "Save this center and zoom": "Save this center and zoom", + "Show/hide layer": "Show/hide layer", + "Start editing": "Start editing", + "Stop editing": "Stop editing", + "The zoom and center have been setted.": "The zoom and center have been setted.", + "To zoom": "To zoom", + "Untitled layer": "Untitled layer", + "Untitled map": "Untitled map", + "Update permissions and editors": "Update permissions and editors", + "Url": "Url", + "User content credits": "User content credits", + "Where do we go from here?": "Where do we go from here?", + "Zoom in": "Zoom in", + "Zoom out": "Zoom out", + "Zoom to layer extent": "Zoom to layer extent", + "Zoom to this feature": "Zoom to this feature", + "color": "color", + "dash array": "dash array", + "description": "description", + "fill": "fill", + "fill color": "fill color", + "fill opacity": "fill opacity", + "inherit": "inherit", + "licence": "licence", + "name": "name", + "no": "no", + "opacity": "opacity", + "stroke": "stroke", + "weight": "weight", + "yes": "yes", + "Editing": "Editing", + "Embed the map": "Embed the map", + "Short URL": "Short URL", + "# one hash for main heading": "# one hash for main heading", + "## two hashes for second heading": "## two hashes for second heading", + "### three hashes for third heading": "### three hashes for third heading", + "**double star for bold**": "**double star for bold**", + "*simple star for italic*": "*simple star for italic*", + "--- for an horizontal rule": "--- for an horizontal rule", + "All properties are imported.": "All properties are imported.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Custom background", + "Help": "Help", + "Image: {{http://image.url.com}}": "Image: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link with text: [[http://example.com|text of the link]]", + "Properties imported:": "Properties imported:", + "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]", + "Supported scheme": "Supported scheme", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "Text formatting", + "attribution": "attribution", + "display name": "display name", + "max zoom": "max zoom", + "min zoom": "min zoom", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "Please save the map before", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Transform to polygon", + "Transform to lines": "Transform to lines", + "Choose the data format": "Choose the data format", + "Error in the tilelayer URL": "Error in the tilelayer URL", + "Directions from here": "Directions from here", + "Choose a preset": "Choose a preset", + "Limit bounds": "Limit bounds", + "Use current bounds": "Use current bounds", + "max East": "max East", + "max North": "max North", + "max South": "max South", + "max West": "max West", + "TMS format": "TMS format", + "Credits": "Credits", + "Only visible features will be downloaded.": "Only visible features will be downloaded.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "Default properties", + "User interface options": "User interface options", + "Image with custom width (in px): {{http://image.url.com|width}}": "Image with custom width (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Current view instead of default map view?", + "Iframe export options": "Iframe export options", + "Include full screen link?": "Include full screen link?", + "See full screen": "See full screen", + "height": "height", + "width": "width", + "Clustered": "Clustered", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (only link)", + "GeoRSS (title + image)": "GeoRSS (title + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Name and description", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Proxy request", + "Table": "Table", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "Type of layer", + "Filter…": "Filter…", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Caption", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Do you want to display a caption bar?", + "Do you want to display a panel on load?": "Do you want to display a panel on load?", + "None": "None", + "by": "by", + "Name and description (large)": "Name and description (large)", + "Empty": "Empty", + "Split line": "Split line", + "Clone": "Clone", + "Clone of {name}": "Clone of {name}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Do you want to display the «more» control?", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Close", + "Delete this property on all the features": "Delete this property on all the features", + "Edit properties in a table": "Edit properties in a table", + "Please enter the name of the property": "Please enter the name of the property", + "Please enter the new name of this property": "Please enter the new name of this property", + "Rename this property on all the features": "Rename this property on all the features", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordinates", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Layer", + "Please choose a format": "Please choose a format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Measure distances", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "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…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/en_US.json b/umap/static/umap/locale/en_US.json new file mode 100644 index 00000000..53616ff2 --- /dev/null +++ b/umap/static/umap/locale/en_US.json @@ -0,0 +1,350 @@ +{ + "About": "About", + "Action not allowed :(": "Action not allowed :(", + "Add a layer": "New layer", + "Add symbol": "Add symbol", + "Advanced actions": "Actions", + "Advanced properties": "Appearance", + "Allow scroll wheel zoom?": "Allow scroll wheel zoom?", + "An error occured": "An error occurred", + "Are you sure you want to cancel your changes?": "Are you sure you want to abandon your changes?", + "Are you sure you want to clone this map and all its datalayers?": "Are you sure you want to clone this map and all its layers and features?", + "Are you sure you want to delete the feature?": "Are you sure you want to delete this feature?", + "Are you sure you want to delete this map?": "Are you sure you want to delete this map?", + "Ball": "Ball", + "Bring feature to center": "Bring feature to center", + "Browse data": "Browse data", + "Cancel": "Cancel", + "Cancel edits": "Cancel edits", + "Center map on your location": "Center map on your location", + "Change map background": "Change basemap", + "Change symbol": "Change symbol", + "Change tilelayers": "Set map background", + "Choose the format of the data to import": "Data format:", + "Choose the layer of the feature": "Layer", + "Choose the layer to import in": "Import into layer:", + "Circle": "Circle", + "Clone this map": "Clone this map", + "Default": "Default", + "Delete": "Delete", + "Delete this feature": "Delete this feature", + "Disable editing": "Finish editing", + "Display on load": "Display on load", + "Do you want to display a minimap?": "Display minimap", + "Do you want to display popup footer?": "Display navigation controls on popups", + "Do you want to display the scale control?": "Display scale", + "Download data": "Download data", + "Draw a line": "Draw a line", + "Draw a marker": "Draw a marker", + "Draw a polygon": "Draw a polygon", + "Draw a polyline": "Draw a line", + "Drop": "Drop", + "Dynamic": "Dynamic", + "Edit": "Edit", + "Edit feature's layer": "Layer properties", + "Edit map properties": "Map properties", + "Edit map settings": "Map properties", + "Edit this feature": "Edit this feature", + "Embed and share this map": "Embed and share this map", + "Enable editing": "Edit map", + "Format": "Format", + "From zoom": "From zoom", + "Go to «{feature}»": "Go to {feature}", + "Hide controls": "Hide controls", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)", + "Import": "Import", + "Import data": "Import data", + "Inherit": "Inherit", + "Licence": "Licence", + "Map background credits": "Basemap credits", + "Map user content has been published under licence": "Map user content has been published under licence", + "More controls": "More controls", + "Optional. Same as color if not set.": "Optional. Same as color if not set.", + "Optionnal.": "Optional.", + "Paste here your data": "Or paste data here", + "Please be sure the licence is compliant with your use.": "Please be sure the licence is compliant with your use.", + "Problem in the response": "There was an error receiving your data.", + "Problem in the response format": "Problem in the response format", + "Provide an URL here": "http://...", + "Remote data": "Remote data", + "Save": "Save", + "Save current edits": "Save current edits", + "Save this center and zoom": "Save this center and zoom", + "Show/hide layer": "Show/hide layer", + "Start editing": "Start editing", + "Stop editing": "Stop editing", + "The zoom and center have been setted.": "Zoom and center saved.", + "To zoom": "To zoom", + "Untitled layer": "Untitled layer", + "Untitled map": "Untitled map", + "Update permissions and editors": "Map permissions", + "Url": "Url", + "User content credits": "User content credits", + "Where do we go from here?": "Where do we go from here?", + "Zoom in": "Zoom in", + "Zoom out": "Zoom out", + "Zoom to layer extent": "Zoom to layer", + "Zoom to this feature": "Zoom to this feature", + "color": "color", + "dash array": "dash array", + "description": "description", + "fill": "fill", + "fill color": "fill color", + "fill opacity": "fill opacity", + "inherit": "inherit", + "licence": "licence", + "name": "name", + "no": "no", + "opacity": "opacity", + "stroke": "stroke", + "weight": "width", + "yes": "yes", + "Editing": "Editing", + "Embed the map": "Embed map", + "Short URL": "Short URL", + "# one hash for main heading": "# one hash for main heading", + "## two hashes for second heading": "## two hashes for second heading", + "### three hashes for third heading": "### three hashes for third heading", + "**double star for bold**": "**double star for bold**", + "*simple star for italic*": "*simple star for italic*", + "--- for an horizontal rule": "--- for an horizontal rule", + "All properties are imported.": "All properties are imported.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Custom basemap", + "Help": "Help", + "Image: {{http://image.url.com}}": "Image: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link with text: [[http://example.com|text of the link]]", + "Properties imported:": "Properties imported:", + "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]", + "Supported scheme": "Supported scheme", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "Text formatting", + "attribution": "attribution", + "display name": "display name", + "max zoom": "max zoom", + "min zoom": "min zoom", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "Please save the map before", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Convert to polygon", + "Transform to lines": "Transform to lines", + "Choose the data format": "Choose...", + "Error in the tilelayer URL": "Error in the tilelayer URL", + "Directions from here": "Directions from here", + "Choose a preset": "Choose a preset", + "Limit bounds": "Limit bounds", + "Use current bounds": "Use current bounds", + "max East": "max East", + "max North": "max North", + "max South": "max South", + "max West": "max West", + "TMS format": "TMS format", + "Credits": "Credits", + "Only visible features will be downloaded.": "Only visible features will be downloaded.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "Layer defaults", + "User interface options": "User interface", + "Image with custom width (in px): {{http://image.url.com|width}}": "Image with custom width (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Current view instead of default map view?", + "Iframe export options": "Iframe export options", + "Include full screen link?": "Include full screen link?", + "See full screen": "See full screen", + "height": "height", + "width": "width", + "Clustered": "Clustered", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (only link)", + "GeoRSS (title + image)": "GeoRSS (title + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Name and description", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Use proxy", + "Table": "Table", + "To use if remote server doesn't allow cross domain (slower)": "Use if the remote server doesn't support CORS (slower)", + "Type of layer": "Type of layer", + "Filter…": "Filter…", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Caption", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Display caption bar", + "Do you want to display a panel on load?": "Display side panel", + "None": "None", + "by": "by", + "Name and description (large)": "Name and description (large)", + "Empty": "Empty", + "Split line": "Split line", + "Clone": "Clone", + "Clone of {name}": "Clone of {name}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Show \"more\" map controls", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Close", + "Delete this property on all the features": "Delete this property on all features", + "Edit properties in a table": "Edit properties in a table", + "Please enter the name of the property": "Please enter the name of the property", + "Please enter the new name of this property": "Please enter the new name of this property", + "Rename this property on all the features": "Rename this property on all features", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Warning! Someone else seems to have edited the data. If you save now, you will erase any changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordinates", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Layer", + "Please choose a format": "Please choose a format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Measure distances", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "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…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/es.json b/umap/static/umap/locale/es.json new file mode 100644 index 00000000..82d5b8b4 --- /dev/null +++ b/umap/static/umap/locale/es.json @@ -0,0 +1,350 @@ +{ + "About": "Acerca de", + "Action not allowed :(": "Acción no permitida :(", + "Add a layer": "Añadir una capa", + "Add symbol": "Añadir un símbolo", + "Advanced actions": "Acciones avanzadas", + "Advanced properties": "Propiedades avanzadas", + "Allow scroll wheel zoom?": "¿Permitir acercar con la rueda central del ratón?", + "An error occured": "Ocurrió un error", + "Are you sure you want to cancel your changes?": "¿Está seguro que quiere cancelar sus cambios?", + "Are you sure you want to clone this map and all its datalayers?": "¿Está seguro que quiere clonar este mapa y todas sus capas de datos?", + "Are you sure you want to delete the feature?": "¿Está seguro que quiere eliminar este elemento?", + "Are you sure you want to delete this map?": "¿Está seguro que quiere eliminar este mapa?", + "Ball": "Bola", + "Bring feature to center": "Llevar al centro el elemento", + "Browse data": "Navegar los datos", + "Cancel": "Cancelar", + "Cancel edits": "Cancelar las ediciones", + "Center map on your location": "Centrar el mapa en su ubicación", + "Change map background": "Cambiar mapa de fondo", + "Change symbol": "Cambiar símbolo", + "Change tilelayers": "Cambiar capas de teselas", + "Choose the format of the data to import": "Elegir el formato de los datos a importar", + "Choose the layer of the feature": "Elegir la capa del elemento", + "Choose the layer to import in": "Elegir la capa a la que se importa", + "Circle": "Círculo", + "Clone this map": "Clonar este mapa", + "Default": "Predeterminado", + "Delete": "Eliminar", + "Delete this feature": "Eliminar este elemento", + "Disable editing": "Deshabilitar la edición", + "Display on load": "Mostrar al cargar", + "Do you want to display a minimap?": "¿Quiere mostrar un mini-mapa?", + "Do you want to display popup footer?": "¿Quiere mostrar la ventana emergente en el pie de página?", + "Do you want to display the scale control?": "¿Quiere mostrar el control de escala?", + "Download data": "Descargar datos", + "Draw a line": "Dibuja una línea", + "Draw a marker": "Dibuja un marcador", + "Draw a polygon": "Dibuja un polígono", + "Draw a polyline": "Dibuja una polilínea", + "Drop": "Gota", + "Dynamic": "Dinámico", + "Edit": "Editar", + "Edit feature's layer": "Editar la capa del elemento", + "Edit map properties": "Editar propiedades del mapa", + "Edit map settings": "Editar ajustes del mapa", + "Edit this feature": "Editar este elemento", + "Embed and share this map": "Embeber y compartir este mapa", + "Enable editing": "Habilitar la edición", + "Format": "Formato", + "From zoom": "Desde el acercamiento", + "Go to «{feature}»": "Ir a «{feature}»", + "Hide controls": "Ocultar controles", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "Cuánto se simplificará la polilínea en cada nivel de acercamiento (más = mejor comportamiento y apariencia más suave, menos = más preciso)", + "Import": "Importar", + "Import data": "Importar datos", + "Inherit": "Heredar", + "Licence": "Licencia", + "Map background credits": "Créditos del mapa de fondo", + "Map user content has been published under licence": "El contenido del mapa del usuario ha sido publicados bajo la licencia", + "More controls": "Más controles", + "Optional. Same as color if not set.": "Opcional. El mismo color si no se establece.", + "Optionnal.": "Opcional.", + "Paste here your data": "Pegue aquí sus datos", + "Please be sure the licence is compliant with your use.": "Asegúrase que la licencia sea compatible con el uso que le va a dar.", + "Problem in the response": "Problema en la respuesta", + "Problem in the response format": "Problema con el formato de respuesta", + "Provide an URL here": " Proporcione una URL aquí", + "Remote data": "Datos remotos", + "Save": "Guardar", + "Save current edits": "Guardar las ediciones actuales", + "Save this center and zoom": "Guardar este centrado y acercamiento", + "Show/hide layer": "Mostrar/ocultar capa", + "Start editing": "Comenzar a editar", + "Stop editing": "Parar de editar", + "The zoom and center have been setted.": "El acercamiento y el centrado han sido establecidos.", + "To zoom": "Para el acercamiento", + "Untitled layer": "Capa sin título", + "Untitled map": "Mapa sin título", + "Update permissions and editors": "Actualizar permisos y editores", + "Url": "Url", + "User content credits": "Créditos del contenido del usuario", + "Where do we go from here?": "¿A dónde vamos a partir de aquí?", + "Zoom in": "Acercar", + "Zoom out": "Alejar", + "Zoom to layer extent": "Acercamiento al nivel de la capa", + "Zoom to this feature": "Acercamiento a este elemento", + "color": "color", + "dash array": "matriz de guiones", + "description": "Descripción", + "fill": "rellenar", + "fill color": "color de relleno", + "fill opacity": "rellenar la opacidad", + "inherit": "heredar", + "licence": "licencia", + "name": "Nombre", + "no": "no", + "opacity": "opacidad", + "stroke": "trazo", + "weight": "peso", + "yes": "si", + "Editing": "Editando", + "Embed the map": "Embeber el mapa", + "Short URL": "URL corta", + "# one hash for main heading": "# una almohadilla para el encabezado principal", + "## two hashes for second heading": "## dos almohadillas para el encabezado secundario", + "### three hashes for third heading": "### tres almohadillas para el encabezado ternario", + "**double star for bold**": "**dos asteriscos para negrita**", + "*simple star for italic*": "*un asterisco para cursiva*", + "--- for an horizontal rule": "--- para una línea horizontal", + "All properties are imported.": "Todas las propiedades son importadas.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Valores separados por coma, tabulación o punto y coma. Se presupone formato SRS WGS84. Sólo se importan geometrías de punto. El importador buscará, en las cabeceras de cada columna, cualquier mención de «lat» y «lon» al comienzo de la cabecera, en mayúsculas o minúsculas. Todas las columnas restantes son importadas como propiedades.", + "Custom background": "Fondo personalizado", + "Help": "Ayuda", + "Image: {{http://image.url.com}}": "Imagen: {{http://imagen.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Enlace con texto: [[http://ejemplo.com|texto del enlace]]", + "Properties imported:": "Propiedades importadas: ", + "Simple link: [[http://example.com]]": "Enlace simple: [[http://ejemplo.com]]", + "Supported scheme": "Esquema soportado", + "Supported variables that will be dynamically replaced": "Variables soportadas que serán reemplazadas dinámicamente", + "Text formatting": "Formato de texto", + "attribution": "atribución", + "display name": "mostrar nombre", + "max zoom": "acercamiento máximo", + "min zoom": "acercamiento mínimo", + "Skipping unkown geometry.type: {type}": "Ignorando tipo de geometría desconocida: {type}", + "Please save the map before": "Guarde antes el mapa", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "Puede utilizar las propiedades del elemento como variables. Ej.: con \"http://miservidor.org/images/{name}.png\", la variable {name} será reemplazada con el valor \"name\" de cada uno de los marcadores.", + "Transform to polygon": "Transformar a polígono", + "Transform to lines": "Transformar a líneas", + "Choose the data format": "Elegir el formato de datos", + "Error in the tilelayer URL": "Error en la URL del la capa de teselas", + "Directions from here": "Direcciones desde aquí", + "Choose a preset": "Elegir un preestablecido", + "Limit bounds": "Limitar los límites", + "Use current bounds": "Utilizar límites actuales", + "max East": "máximo Este", + "max North": "máximo Norte", + "max South": "máximo Sur", + "max West": "máximo Oeste", + "TMS format": "formato TMS", + "Credits": "Créditos", + "Only visible features will be downloaded.": "Sólo los elementos visibles se descargarán.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Abre la extensión de este mapa en un editor de mapas para proveer datos más precisos a OpenStreetMap", + "Default properties": "Propiedades predeterminadas", + "User interface options": "Opciones de la interface de usuario", + "Image with custom width (in px): {{http://image.url.com|width}}": "Imagen con anchura personalizada (en píxeles): {{http://imagen.url.com|anchura}}", + "Current view instead of default map view?": "¿Vista actual en lugar de la vista predeterminada?", + "Iframe export options": "Opciones de exportación del iframe", + "Include full screen link?": "¿Incluir el enlace de pantalla completa?", + "See full screen": "Ver pantalla completa", + "height": "altura", + "width": "anchura", + "Clustered": "Agrupados", + "Clustering radius": "Radio de agrupación", + "GeoRSS (only link)": "georss (sólo enlace)", + "GeoRSS (title + image)": "georss (título + imagen)", + "Heatmap": "Mapa de calor", + "Heatmap radius": "Radio del mapa de calor", + "Name and description": "nombre y descripción", + "Override clustering radius (default 80)": "Sobrescribir el radio de agrupación (predeterminado 80)", + "Override heatmap radius (default 25)": "Sobreescribir el radio del mapa de calor (predeterminado 25)", + "Proxy request": "Petición a proxy", + "Table": "tabla", + "To use if remote server doesn't allow cross domain (slower)": "Para utilizar si el servidor remoto no permite dominios cruzados (más lento)", + "Type of layer": "Tipo de capa", + "Filter…": "Filtro...", + "Heatmap intensity property": "Propiedad intensidad del mapa de calor", + "Optional intensity property for heatmap": "Propiedad intensidad opcional para el mapa de calor", + "Caption": "subtítulo", + "Data browser": "navegador de datos", + "Do you want to display a caption bar?": "¿Quiere mostrar la barra de subtítulos?", + "Do you want to display a panel on load?": "¿Quiere mostrar un panel al cargar?", + "None": "ninguno", + "by": "por", + "Name and description (large)": "nombre y descripción (larga) ", + "Empty": "Vaciar", + "Split line": "Linea de división", + "Clone": "Clonar", + "Clone of {name}": "Clón de {name}", + "Side panel": "panel lateral", + "Powered by Leaflet and Django, glued by uMap project.": "Impulsado por Leaflet y Django, pegado por proyecto uMap.", + "Zoom level for automatic zooms": "Nivel de acercamiento para acercamientos automáticos", + "Do you want to display the «more» control?": "¿Quiere mostrar el control «más»?", + "Auto": "Automático", + "Default: name": "Predeterminado: nombre", + "Property to use for sorting features": "Propiedad para ordenar los elementos", + "Slideshow": "Presentación de diapositivas", + "Start slideshow": "Iniciar presentación de diapositivas", + "Stop slideshow": "Parar presentación de diapositivas", + "Text color for the cluster label": "Color del texto para la etiqueta clúster", + "Zoom to the next": "Acercamiento al siguiente", + "Zoom to the previous": "Acercamiento al anterior", + "Add a new property": "Añadir una nueva propiedad", + "Are you sure you want to delete this property on all the features?": "¿Esta seguro que quiere eliminar esta propiedad en todos los elementos?", + "Close": "Cerrar", + "Delete this property on all the features": "Eliminar esta propiedad en todos los elementos", + "Edit properties in a table": "Editar propiedades en una tabla", + "Please enter the name of the property": "Introduzca el nombre de la propiedad", + "Please enter the new name of this property": "Introduzca el nuevo nombre de esta propiedad", + "Rename this property on all the features": "Renombrar esta propiedad en todos los elementos", + "If false, the polygon will act as a part of the underlying map.": "Si falso, el polígono actuará como una parte del mapa subyacente.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe con altura personalizada (en píxeles): {{{http://iframe.url.com|altura}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "Ver todo", + "Dynamic properties": "Propiedades dinámicas", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Utilizar marcadores de posición con propiedades del elemento entre paréntesis, ejemplo {name}, serán reemplazados dinámicamente por los valores correspondientes.", + "Long credits": "créditos largo", + "No licence has been set": "Ninguna licencia se ha establecido", + "Popup content template": "plantilla del contenido de la ventana emergente", + "Short credits": "créditos corto", + "Will be displayed in the bottom right corner of the map": "Se mostrará en la esquina inferior izquierda del mapa", + "Will be visible in the caption of the map": "Será visible en el subtítulo del mapa", + "Map has been saved!": "¡Se ha guardado el mapa!", + "Save anyway": "Guardar de todos modos", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "¡Oops! Alguien parece haber editado los datos. Puedes guardar de todos modos, pero esto va a borrar los cambios realizados por otros.", + "Comma separated list of properties to use when filtering features": "Lista de propiedades separado por comas para utilizar el filtrado de elementos", + "Keep current visible layers": "Guardar capas visibles actuales", + "Coordinates": "Coordenadas", + "Latitude": "Latitud", + "Longitude": "Longitud", + "Continue line (Ctrl-click)": "Línea continuada (Ctrl-clic)", + "Start a hole here": "Iniciar un agujero aquí", + "Click last point to finish shape": "Haga clic en el último punto para terminar la forma", + "Click to add a marker": "Haga clic para añadir un marcador", + "Click to continue drawing": "Haga clic para seguir dibujando", + "Click to start drawing a line": "Haga clic para empezar a dibujar una línea", + "Click to start drawing a polygon": "Haga clic para empezar a dibujar un polígono", + "Import in a new layer": "Importar en una nueva capa", + "Layer": "Capa", + "Please choose a format": "Elije un formato", + "Imports all umap data, including layers and settings.": "Importar todos los datos umap, incluyendo capas y ajustes.", + "Invalid umap data": "Dato umap inválido", + "Invalid umap data in {filename}": "Dato umap inválido en {filename}", + "Add a line to the current multi": "Añadir una línea para el multi actual", + "Add a polygon to the current multi": "Añadir un polígono para el multi actual", + "Click to edit": "Clic para editar", + "Continue line": "Línea continua", + "Delete this shape": "Eliminar esta forma", + "Make main shape": "Hacer la forma principal", + "Merge lines": "Combinar líneas", + "Remove shape from the multi": "Quitar la forma del multi", + "Transfer shape to edited feature": "Transferir la forma al elemento editada", + "next": "siguiente", + "previous": "anterior", + "Measure distances": "Medir distancias", + "NM": "NM", + "kilometers": "kilómetros", + "km": "km", + "mi": "mi", + "miles": "millas", + "nautical miles": "millas naúticas", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} millas", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "¿Está seguro que quiere restaurar esta versión?", + "Extract shape to separate feature": "Extraer la forma al elemento separado", + "Layer properties": "Propiedades de la capa", + "Restore this version": "Restaurar esta versión", + "Versions": "Versiones", + "You have unsaved changes.": "Tiene cambios no guardados.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "Una lista separada por comas que define el patrón de trazos de guión. Ej.: \"5, 10, 15\".", + "Advanced transition": "Transición avanzada", + "Allow interactions": "Permitir interacciones", + "Autostart when map is loaded": "Autocomenzar cuando el mapa esté cargado", + "Default interaction options": "Opciones de interacción predeterminados", + "Default shape properties": "Propiedades de formas predeterminados", + "Default zoom level": "Nivel de acercamiento predeterminado", + "Define link to open in a new window on polygon click.": "Defina un enlace para abrir en un nueva ventana al hacer clic en el polígono.", + "Delete this vertex (Alt-click)": "Eliminar este vértice (Alt-clic)", + "Display the control to open OpenStreetMap editor": "Mostrar el control para abrir el editor OpenStreetMap", + "Display the data layers control": "Mostrrar el control de la capa de datos", + "Display the embed control": "Mostrar el control de embebido", + "Display the fullscreen control": "Mostrar el control de pantalla completa", + "Display the locate control": "Mostrar el control de ubicación", + "Display the measure control": "Mostrar el control de medida", + "Display the search control": "Mostrar el control de búsqueda", + "Display the tile layers control": "Mostrar el control de capas de teselas", + "Display the zoom control": "Mostrar el control de acercamiento", + "Exit Fullscreen": "Salir de la pantalla completa", + "Fetch data each time map view changes.": "Traer datos cada vez que la vista del mapa cambia.", + "Filter keys": "Claves de filtrado", + "Icon shape": "Icono de la forma", + "Icon symbol": "Icono del símbolo", + "Interaction options": "Opciones de interacción", + "Label key": "Etiqueta de la clave", + "Link to…": "Enlace a...", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Debe ser un valor CSS válido (por ej.: DarkBlue o #123456)", + "No results": "Sin resultado", + "Popup style": "Estilo de ventana emergente", + "Replace layer content": "Reemplaza el contenido de la capa", + "Save this location as new feature": "Guardar esta ubicación como nuevo elemento", + "Search location": "Buscar ubicación", + "Set URL": "Establecer URL", + "Shape properties": "Propiedades de la forma", + "Simplify": "Simplifica", + "Sort key": "Orden de la clave", + "The name of the property to use as feature label (ex.: \"nom\")": "El nombre de la propiedad a usar como etiqueta del elemento (ej.: «nom»)", + "Toggle edit mode (shift-click)": "Conmuta el modo edición (shift-clic)", + "View Fullscreen": "Ver en pantalla completa", + "Whether to display or not polygons paths.": "Si desea mostrar o no el trayecto de los polígonos.", + "Whether to fill polygons with color.": "Si desea rellenar los polígonos con color.", + "Zoom to this place": "Acercamiento a este lugar", + "always": "siempre", + "clear": "limpiar", + "define": "define", + "hidden": "oculta", + "never": "nunca", + "Automatic": "Automático", + "Clone this feature": "Clonar este elemento", + "Display label": "Mostrar etiqueta", + "Drag to reorder": "Arrastrar para reordenar", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe con alto y ancho (en px) personalizado: {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Las etiquetas se podrán hacer clic", + "Label direction": "Dirección de la etiqueta", + "Manage layers": "Gestionar capas", + "On the bottom": "En la parte inferior", + "On the left": "A la izquierda", + "On the right": "A la derecha", + "On the top": "En la parte superior", + "Only display label on mouse hover": "Sólo mostrar la etiqueta al pasar el ratón", + "Open link in…": "Abrir enlace en...", + "Unable to detect format of file {filename}": "No se puede detectar el formato de archivo {filename}", + "collapsed": "contraído", + "expanded": "expandido", + "iframe": "iframe", + "new window": "nueva ventana", + "parent window": "ventana padre", + "{count} errors during import: {message}": "{count} errores durante la importación: {message}", + "Are you sure you want to delete this layer?": "¿Está seguro que quiere borrar esta capa?", + "Delete layer": "Borrar capa", + "Error while fetching {url}": "Error al recuperar {url}", + "Home": "Inicio", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "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…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/fi.json b/umap/static/umap/locale/fi.json new file mode 100644 index 00000000..9726b95d --- /dev/null +++ b/umap/static/umap/locale/fi.json @@ -0,0 +1,350 @@ +{ + "About": "Tietoja", + "Action not allowed :(": "Toimenpide ei ole sallittu :(", + "Add a layer": "Lisää kerros", + "Add symbol": "Lisää symboli", + "Advanced actions": "Lisätoiminnot", + "Advanced properties": "Lisäominaisuudet", + "Allow scroll wheel zoom?": "Salli zoomaus hiiren rullalla? ", + "An error occured": "Hups! Virhe on tapahtunut...", + "Are you sure you want to cancel your changes?": "Oletko _ihan_ varma, että haluat peruuttaa muutoksesi?", + "Are you sure you want to clone this map and all its datalayers?": "Oletko varma että haluat kloonata tämän kartan ja kaikki sen data-kerrokset?", + "Are you sure you want to delete the feature?": "Oletko varma että haluat poistaa piirteen?", + "Are you sure you want to delete this map?": "Oletko ihan täysin varma, että haluat poistaa tämän kartan? Poistettua karttaa ei voi palauttaa.", + "Ball": "Pallo", + "Bring feature to center": "Tuo piirre keskelle", + "Browse data": "Selaa tietoja", + "Cancel": "Peruuta", + "Cancel edits": "Peruuta muokkaukset", + "Center map on your location": "Keskitä kartta sijaintiisi", + "Change map background": "Vaihda taustakarttaa", + "Change symbol": "Vaihda symboli", + "Change tilelayers": "Muuta karttavaihtoehtoja", + "Choose the format of the data to import": "Valitse tuotavien tietojen formaatti", + "Choose the layer of the feature": "Valitse piirteen kerros", + "Choose the layer to import in": "Valitse kerros johon tieto tuodaan", + "Circle": "Ympyrä", + "Clone this map": "Kloonaa tämä kartta", + "Default": "Oletusarvo", + "Delete": "Poista", + "Delete this feature": "Poista tämä piirre", + "Disable editing": "Lopeta kartan muokaaminen", + "Display on load": "Näytä ladattaessa", + "Do you want to display a minimap?": "Haluatko aktivoida minikartan?", + "Do you want to display popup footer?": "Haluatko näyttää ponnahdusikkunan alatunnisteen?", + "Do you want to display the scale control?": "Näytetäänkö mittakaavaohjain? ", + "Download data": "Lataa tietoja", + "Draw a line": "Piirrä viiva", + "Draw a marker": "Piirrä karttamerkki", + "Draw a polygon": "Piirrä monikulmio", + "Draw a polyline": "Piirrä monisegmenttinen viiva", + "Drop": "Pisara", + "Dynamic": "Dynaaminen", + "Edit": "Muokkaa", + "Edit feature's layer": "Muokkaa piirteen kerrosta", + "Edit map properties": "Muokkaa kartan ominaisuuksia", + "Edit map settings": "Muokkaa kartta-asetuksia", + "Edit this feature": "Muokkaa tätä piirrettä", + "Embed and share this map": "Jaa tämä kartta tai käytä sitä muualla", + "Enable editing": "Aktivoi kartan muokkaus", + "Format": "Formaatti", + "From zoom": "Zoomaustasolta", + "Go to «{feature}»": "Mene piirteeseen «{feature}»", + "Hide controls": "Piilota ohjaimet", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "Kuinka paljon viivaa yleistetäänkullakin zoomaustasolla (enemmän = parempi suorituskyky, vähemmän = suurempi tarkkuus)", + "Import": "Tuo", + "Import data": "Tuo tietoja", + "Inherit": "Peri", + "Licence": "Lisenssi", + "Map background credits": "Taustakartan tekijämerkinnät", + "Map user content has been published under licence": "Kartan käyttäjien luomat tiedot on julkaistu lisenssillä", + "More controls": "Lisää ohjaimia", + "Optional. Same as color if not set.": "Valinnainen. Sama kuin väri jos ei asetettu. ", + "Optionnal.": "Valinnainen.", + "Paste here your data": "Liitä tiedot tähän", + "Please be sure the licence is compliant with your use.": "Huomioithan että valitsemasi lisenssi on yhteensopiva käyttösi kanssa.", + "Problem in the response": "Ongelma vastauksessa", + "Problem in the response format": "Ongelma vastauksen muodossa", + "Provide an URL here": "Syötä verkko-osoite tänne", + "Remote data": "Etä-tiedot", + "Save": "Tallenna", + "Save current edits": "Tallenna tämänhetkiset muokkaukset", + "Save this center and zoom": "Tallenna tämä kartan keskitys ja zoomaustaso", + "Show/hide layer": "Näytä/piilota kerros", + "Start editing": "Aloita muokkaus", + "Stop editing": "Lopeta muokkaus", + "The zoom and center have been setted.": "Kartan keskitys ja zoomaustaso on asetettu.", + "To zoom": "Zoomaukseen", + "Untitled layer": "Nimeämätön kerros", + "Untitled map": "Nimeämätön kartta", + "Update permissions and editors": "Päivitä oikeudet ja editori", + "Url": "URL", + "User content credits": "Käyttäjien luoman tiedon tuottajat:", + "Where do we go from here?": "Minnekäs sitten?", + "Zoom in": "Lähennä", + "Zoom out": "Loitonna", + "Zoom to layer extent": "Zoomaa tason laajuuteen", + "Zoom to this feature": "Kohdenna tähän piirteeseen", + "color": "väri", + "dash array": "katkoviivatyyppilista", + "description": "kuvaus", + "fill": "täyttö", + "fill color": "täyteväri", + "fill opacity": "täytön läpinäkyvyys", + "inherit": "peri", + "licence": "lisenssi", + "name": "nimi", + "no": "ei", + "opacity": "läpikuultavuus", + "stroke": "sivallus", + "weight": "paksuus", + "yes": "kyllä", + "Editing": "Muokkauksessa ", + "Embed the map": "Liitä kartta", + "Short URL": "Lyhyt URL", + "# one hash for main heading": "# yksi risuaita tekee päätason otsikon ", + "## two hashes for second heading": "## kaksi risuaitaa tekee kakkostason otsikon ", + "### three hashes for third heading": "### kolme risuaitaa tekee kolmostason otsikon ", + "**double star for bold**": "**tuplatähti lihavoi**", + "*simple star for italic*": "*yksi tähti kursivoi*", + "--- for an horizontal rule": "--- luo vaakasuoran erottimen kuplan halki", + "All properties are imported.": "Kaikki omainaisuudet tuodaan.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Pilkku-, tabulaattori- tai puolipiste-erotettuja arvoja. Koordinaattijärjestemänä WGS84. Vain pistegeometriat tuodaan uMapiin. Tietue-tuonti etsii «lat»- ja «lon»-alkavia sarakeotsikoita. Kaikki muut sarakkeet tuodaan ominaisuustietoina. ", + "Custom background": "Räätälöity tausta", + "Help": "Apua", + "Image: {{http://image.url.com}}": "Kuva: {{http://kuva.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Hyperlinkki tekstillä: [[http://esimerkkisaitti.fi|linkin teksti]]", + "Properties imported:": "Tuodut ominaisuudet:", + "Simple link: [[http://example.com]]": "Yksinkertainen linkki: [[http://esimerkki.fi]]", + "Supported scheme": "Tuettu muoto", + "Supported variables that will be dynamically replaced": "Tuetut muuttujat, jotka korvataan dynaamisesti", + "Text formatting": "Tekstin muotoilu", + "attribution": "Viittaukset tausta-aineiston lisenssiin", + "display name": "näytettävä nimi", + "max zoom": "suurin zoomaustaso", + "min zoom": "pienin zoomaustaso", + "Skipping unkown geometry.type: {type}": "Ohitetaan tuntematon geometry.type: {type}", + "Please save the map before": "Ole hyvä ja tallenna kartta ensin", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "Piirteiden ominaisuuksia voi käyttää muuttujina: Esimeriksi \"http://myserver.org/images/{name}.png\" :n {name}-muuttuja korvataan kunkin karttamerkin name-kentän arvolla.", + "Transform to polygon": "Muunna monikulmioksi", + "Transform to lines": "Muunna viivoiksi", + "Choose the data format": "Valitse päivämäärän muoto", + "Error in the tilelayer URL": "Virhe karttalaattojen URL:ssä", + "Directions from here": "Ohjeet täältä", + "Choose a preset": "Valitse", + "Limit bounds": "Alueen rajaus", + "Use current bounds": "Käytä nykyistä rajausta", + "max East": "itäraja", + "max North": "pohjoisraja", + "max South": "eteläraja", + "max West": "länsiraja", + "TMS format": "TMS-formaatti", + "Credits": "Tunnustukset", + "Only visible features will be downloaded.": "Vain näkyvät piirteet ladataan.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Avaa rajauksen mukainen alue editorissa parantaaksesi OpenStreetMapin tietosisältöä.", + "Default properties": "Oletusasetukset", + "User interface options": "Käyttäjän käyttöliittymäoptiot", + "Image with custom width (in px): {{http://image.url.com|width}}": "Kuva määrätyn leveyisenä (pikseleinä): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Nykyinen näkymä oletuskarttanäkymän asemesta?", + "Iframe export options": "Iframe-vientiasetukset", + "Include full screen link?": "Sisällytä koko näyttö -linkki?", + "See full screen": "Katso koko näytöllä", + "height": "korkeus", + "width": "leveys", + "Clustered": "Klusteroituna", + "Clustering radius": "Klusterointisäde", + "GeoRSS (only link)": "GeoRSS (vain linkki)", + "GeoRSS (title + image)": "GeoRSS (otsikko + kuva)", + "Heatmap": "Lämpökartta", + "Heatmap radius": "Lämpökartan säde", + "Name and description": "Nimi ja kuvaus", + "Override clustering radius (default 80)": "Ohita klusterointisäde (oletus on 80)", + "Override heatmap radius (default 25)": "Ohita lämpökartan säde (oletus on 25)", + "Proxy request": "Välityspalvelinpyyntö", + "Table": "Taulukko", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "Datakerroksen tyyppi", + "Filter…": "Suodata...", + "Heatmap intensity property": "Lämpökartan vahvuusominaisuus", + "Optional intensity property for heatmap": "Valinnainen lämpökartan vahvuusominaisuus", + "Caption": "Kuvateksti", + "Data browser": "Dataselain", + "Do you want to display a caption bar?": "Haluatko näyttää otsikkopalkin?", + "Do you want to display a panel on load?": "Haluatko näyttää paneelin ladattaessa?", + "None": "Ei mitään", + "by": "taholta", + "Name and description (large)": "Nimi ja kuvaus (suuri)", + "Empty": "Tyhjä", + "Split line": "Pilko/katkaise viiva", + "Clone": "Kloonaa", + "Clone of {name}": "{name}n klooni", + "Side panel": "Sivupaneeli", + "Powered by Leaflet and Django, glued by uMap project.": "Konepellin alla hyrrää Leaflet ja Django; uMap-projektin kasaan liimaamana.", + "Zoom level for automatic zooms": "Zoomaustaso automaattisessa zoomauksessa", + "Do you want to display the «more» control?": "Haluatko näyttää «lisää»-ohjaimen?", + "Auto": "Automaattinen", + "Default: name": "Oletus: nimi", + "Property to use for sorting features": "Ominaisuus jonka mukaan piirteet järjestetään", + "Slideshow": "Kuvaesitys", + "Start slideshow": "Aloita kuvaesitys", + "Stop slideshow": "Lopeta kuvaesitys", + "Text color for the cluster label": "Tekstin väri klusterietiketissä", + "Zoom to the next": "Kohdenna seuraavaan", + "Zoom to the previous": "Kohdenna edelliseen", + "Add a new property": "Lisää uusi ominaisuus", + "Are you sure you want to delete this property on all the features?": "Oletko varma että haluat poistaa tämän ominaisuuden kaikista piirteistä?", + "Close": "Sulje", + "Delete this property on all the features": "Poista tämä ominaisuus kaikista piirteistä", + "Edit properties in a table": "Muokkaa ominaisuuksia taulukossa", + "Please enter the name of the property": "Kirjoita ominaisuuden nimi", + "Please enter the new name of this property": "Kirjoita ominaisuuden uusi nimi", + "Rename this property on all the features": "Uudelleen nimeä tämä ominaisuus kaikissa piirteissä", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe määrätyn korkuisena (pikseleinä): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "Näytä kaikki", + "Dynamic properties": "Dynaamiset ominaisuudet", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Pitkät tekijätiedot", + "No licence has been set": "Lisenssiä ei ole määritetty", + "Popup content template": "Ponnahdusikkunan sisällön sapluuna", + "Short credits": "Lyhyet tekijätiedot", + "Will be displayed in the bottom right corner of the map": "Näytetään kartan oikeassa alakulmassa", + "Will be visible in the caption of the map": "Näytetään kartan kuvatekstinä", + "Map has been saved!": "Kartta on tallennettu!", + "Save anyway": "Tallenna joka tapauksessa", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Hupsankeikkaa! Joku muu on näemmä muokannut tietoja. Voit tallentaa joka tapauksessa, mutta tallentamisesi poistaa muiden muokkaukset.", + "Comma separated list of properties to use when filtering features": "Pilkkueroteltu lista käytettävistä ominaisuuksista piirteitä suodatettaessa.", + "Keep current visible layers": "Pidä nyt näkyvät datakerrokset", + "Coordinates": "Koordinaatit", + "Latitude": "Leveysaste", + "Longitude": "Pituusaste", + "Continue line (Ctrl-click)": "Jatka viivaa (Ctrl+Klikkaus)", + "Start a hole here": "Aloita reikä tässä", + "Click last point to finish shape": "Klikkaa viimeistä pistettä täydentääksesi muodon", + "Click to add a marker": "Klikkaa lisätäksesi karttamerkki", + "Click to continue drawing": "Klikkaa jatkaaksesi piirtämistä", + "Click to start drawing a line": "Klikkaa aloittaaksesi viivan piirtäminen", + "Click to start drawing a polygon": "Klikkaa aloittaaksesi monikulmion piirtäminen", + "Import in a new layer": "Tuo uuteen kerrokseen", + "Layer": "Kerros", + "Please choose a format": "Valitse formaatti", + "Imports all umap data, including layers and settings.": "Tuo kaikki karttatiedot, mukaan lukien datatasot ja asetukset.", + "Invalid umap data": "Virheellistä uMap-dataa", + "Invalid umap data in {filename}": "Virheellistä uMap-dataa {filename}:ssa", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Klikkaa muokataksesi", + "Continue line": "Jatka viivaa", + "Delete this shape": "Poista tämä muoto", + "Make main shape": "Luo päämuoto", + "Merge lines": "Yhdistä rivit", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Siirrä muoto muokatuksi piirteeksi.", + "next": "seuraava", + "previous": "edellinen", + "Measure distances": "Mittaa etäisyyksiä", + "NM": "mpk", + "kilometers": "kilometriä", + "km": "km", + "mi": "mi", + "miles": "mailia", + "nautical miles": "meripeninkulmaa", + "{area} acres": "{area} eekkeriä", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} mpk", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} mailia", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Oletko varma että haluat palauttaa tämän version?", + "Extract shape to separate feature": "Irroita muoto erilliseksi piirteeksi.", + "Layer properties": "Datakerroksen ominaisuudet", + "Restore this version": "Palauta tämä versio", + "Versions": "Versiot", + "You have unsaved changes.": "Sinulla on tallentamattomia muutoksia.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Ikonin muoto", + "Icon symbol": "Ikonin symboli", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Linkitä kohteeseen...", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "Ei tuloksia", + "Popup style": "Ponnahdusikkunan tyyli", + "Replace layer content": "Korvaa kerroksen sisältö", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Aseta URL", + "Shape properties": "Piirteen ominaisuudet", + "Simplify": "Yksinkertaista", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Kohdenna tähän paikkaan", + "always": "aina", + "clear": "clear", + "define": "määritä", + "hidden": "piilotettu", + "never": "ei koskaan", + "Automatic": "Automaattinen", + "Clone this feature": "Kloonaa tämä piirre", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Hallitse kerroksia", + "On the bottom": "Alhaalla", + "On the left": "Vasemmalla", + "On the right": "Oikealla", + "On the top": "Ylhäällä", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "laajennettu", + "iframe": "iframe", + "new window": "uusi ikkuna", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Poista kerros", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Alku", + "Delete all layers": "Poista kaikki kerrokset", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "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…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/fr.json b/umap/static/umap/locale/fr.json new file mode 100644 index 00000000..c8f2b946 --- /dev/null +++ b/umap/static/umap/locale/fr.json @@ -0,0 +1,350 @@ +{ + "About": "À propos", + "Action not allowed :(": "Action non autorisée :(", + "Add a layer": "Ajouter un calque", + "Add symbol": "Ajouter un symbole", + "Advanced actions": "Actions avancées", + "Advanced properties": "Propriétés avancées", + "Allow scroll wheel zoom?": "Autoriser le zoom avec la molette ?", + "An error occured": "Une erreur est survenue", + "Are you sure you want to cancel your changes?": "Êtes-vous sûr de vouloir annuler vos modifications ?", + "Are you sure you want to clone this map and all its datalayers?": "Êtes-vous sûr de vouloir cloner cette carte et ses calques de données?", + "Are you sure you want to delete the feature?": "Êtes-vous sûr de vouloir supprimer cet élément?", + "Are you sure you want to delete this map?": "Êtes-vous sûr de vouloir supprimer cette carte?", + "Ball": "Épingle", + "Bring feature to center": "Centrer la carte sur cet élément", + "Browse data": "Visualiser les données", + "Cancel": "Annuler", + "Cancel edits": "Annuler les modifications", + "Center map on your location": "Centrer la carte sur votre position", + "Change map background": "Changer le fond de carte", + "Change symbol": "Changer le pictogramme", + "Change tilelayers": "Changer le fond de carte", + "Choose the format of the data to import": "Choisir le format des données pour l'import", + "Choose the layer of the feature": "Choisir le calque de l'élément", + "Choose the layer to import in": "Choisir le calque de données pour l'import", + "Circle": "Cercle", + "Clone this map": "Cloner cette carte", + "Default": "Par défaut", + "Delete": "Supprimer", + "Delete this feature": "Supprimer cet élément", + "Disable editing": "Désactiver l'édition", + "Display on load": "Afficher au chargement", + "Do you want to display a minimap?": "Voulez-vous afficher une mini carte de situation?", + "Do you want to display popup footer?": "Voulez-vous afficher les boutons de navigation en bas des popups?", + "Do you want to display the scale control?": "Voulez-vous afficher l'échelle de la carte?", + "Download data": "Télécharger les données", + "Draw a line": "Dessiner une ligne", + "Draw a marker": "Ajouter un marqueur", + "Draw a polygon": "Dessiner un polygone", + "Draw a polyline": "Dessiner une ligne", + "Drop": "Goutte", + "Dynamic": "Dynamique", + "Edit": "Éditer", + "Edit feature's layer": "Éditer le calque de l'élément", + "Edit map properties": "Éditer les propriétés de la carte", + "Edit map settings": "Éditer les paramètres", + "Edit this feature": "Éditer cet élément", + "Embed and share this map": "Exporter et partager la carte", + "Enable editing": "Activer l'édition", + "Format": "Format", + "From zoom": "À partir du zoom", + "Go to «{feature}»": "Naviguer jusqu'à «{feature}»", + "Hide controls": "Masquer les outils", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "Valeur de simplification des lignes pour chaque niveau de zoom (grand nombre = meilleure performance, petit nombre = plus précis)", + "Import": "Importer", + "Import data": "Importer des données", + "Inherit": "Hériter", + "Licence": "Licence", + "Map background credits": "Crédits pour le fond de carte", + "Map user content has been published under licence": "Les contenus sur la carte ont été publiés avec la licence", + "More controls": "Plus d'outils", + "Optional. Same as color if not set.": "Optionnel. La couleur principale sera utilisée si laissé vide.", + "Optionnal.": "Optionnel.", + "Paste here your data": "Collez vos données ici", + "Please be sure the licence is compliant with your use.": "Pensez à vérifier que la licence de ces données vous autorise à les utiliser.", + "Problem in the response": "Problème dans la réponse du serveur", + "Problem in the response format": "Problème dans le format de la réponse", + "Provide an URL here": "Renseigner une URL", + "Remote data": "Données distantes", + "Save": "Enregistrer", + "Save current edits": "Enregistrer les changements courants", + "Save this center and zoom": "Enregistrer le zoom et le centre actuels", + "Show/hide layer": "Montrer/masquer un calque", + "Start editing": "Passer en mode édition", + "Stop editing": "Quitter le mode édition", + "The zoom and center have been setted.": "Le zoom et le centre ont été enregistrés.", + "To zoom": "Jusqu'au zoom", + "Untitled layer": "Calque sans nom", + "Untitled map": "Carte sans nom", + "Update permissions and editors": "Changer les permissions et les éditeurs", + "Url": "URL", + "User content credits": "Crédit pour le contenu utilisateur", + "Where do we go from here?": "C'est par où pour aller plus loin?", + "Zoom in": "Zoomer", + "Zoom out": "Dézoomer", + "Zoom to layer extent": "Zoomer jusqu'à voir les données du calque", + "Zoom to this feature": "Zoomer sur cet élément", + "color": "Couleur", + "dash array": "traitillé", + "description": "description", + "fill": "remplissage", + "fill color": "couleur de remplissage", + "fill opacity": "opacité du remplissage", + "inherit": "hériter", + "licence": "licence", + "name": "nom", + "no": "non", + "opacity": "opacité", + "stroke": "trait", + "weight": "épaisseur", + "yes": "oui", + "Editing": "Edition en cours", + "Embed the map": "Intégrer la carte dans une iframe", + "Short URL": "URL courte", + "# one hash for main heading": "# un dièse pour titre 1", + "## two hashes for second heading": "## deux dièses pour titre 2", + "### three hashes for third heading": "### trois dièses pour titre 3", + "**double star for bold**": "**double astérisque pour gras**", + "*simple star for italic*": "*simple astérisque pour italique*", + "--- for an horizontal rule": "--- pour un séparateur horizontal", + "All properties are imported.": "Toutes les propriétés sont importées.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Virgule, tabulation ou point-virgule pour séparer des valeurs. SRS WGS84 est implicite. Seuls les points géométriques sont importés. L'importation se référera au titre dans les entêtes de colonnes de «lat» et «lon» au début de l'en-tête, et est insensible à la casse. Toutes les autres colonne sont importées en tant que propriétés.", + "Custom background": "Fond de carte personnalisé", + "Help": "Aide", + "Image: {{http://image.url.com}}": "Image: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Lien avec texte: [[http://exemple.fr|texte du lien]]", + "Properties imported:": "Propriétés importées:", + "Simple link: [[http://example.com]]": "Lien simple: [[https://exemple.fr]]", + "Supported scheme": "Schéma supporté", + "Supported variables that will be dynamically replaced": "Variables qui seront automatiquement remplacées", + "Text formatting": "Mise en forme du texte", + "attribution": "attribution", + "display name": "nom", + "max zoom": "zoom max", + "min zoom": "zoom min", + "Skipping unkown geometry.type: {type}": "Le type de géométrie suivant a été ignoré : {type}", + "Please save the map before": "Vous devez d'abord enregistrer la carte", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "Vous pouvez utiliser des propriétés des marqueurs comme variables : par exemple avec \"http://myserver.org/images/{name}.png\", la variable {name} sera remplacée par la valeur du \"name\" de chacun des marqueurs.", + "Transform to polygon": "Transformer en polygone", + "Transform to lines": "Transformer en lignes", + "Choose the data format": "Choisir le format des données", + "Error in the tilelayer URL": "Erreur dans l'URL du fond de carte", + "Directions from here": "Itinéraire à partir de ce lieu", + "Choose a preset": "Choisir dans les présélections", + "Limit bounds": "Limites géographiques", + "Use current bounds": "Utiliser la vue courante", + "max East": "limite est", + "max North": "limite nord", + "max South": "limite sud", + "max West": "limite ouest", + "TMS format": "format de type TMS", + "Credits": "Crédits", + "Only visible features will be downloaded.": "Seuls les éléments visibles seront téléchargés.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Ouvrir cette carte dans un éditeur OpenStreetMap pour améliorer les données", + "Default properties": "Propriétés par défaut", + "User interface options": "Options d'interface", + "Image with custom width (in px): {{http://image.url.com|width}}": "Image avec largeur (en pixels) : {{http://image.url.com|largeur}}", + "Current view instead of default map view?": "Vue courante plutôt que la vue par défaut ?", + "Iframe export options": "Options d'export de l'iframe", + "Include full screen link?": "Inclure le lien \"plein écran\" ?", + "See full screen": "Voir en plein écran", + "height": "hauteur", + "width": "largeur", + "Clustered": "Avec cluster", + "Clustering radius": "Rayon du cluster", + "GeoRSS (only link)": "GeoRSS (lien seul)", + "GeoRSS (title + image)": "GeoRSS (titre + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Rayon de heatmap", + "Name and description": "Nom et description", + "Override clustering radius (default 80)": "Valeur de rayon personnalisée pour le cluster (par défaut: 80)", + "Override heatmap radius (default 25)": "Valeur de rayon personnalisée pour la heatmap (par défaut: 80)", + "Proxy request": "Avec proxy", + "Table": "Tableau", + "To use if remote server doesn't allow cross domain (slower)": "Cocher si le serveur distant n'autorise pas le cross domain (plus lent)", + "Type of layer": "Type de calque", + "Filter…": "Filtrer…", + "Heatmap intensity property": "Propriété pour l'intensité de la heatmap", + "Optional intensity property for heatmap": "Propriété optionnelle à utiliser pour calculer l'intensité de la heatmap", + "Caption": "Légende", + "Data browser": "Visualiseur de données", + "Do you want to display a caption bar?": "Voulez-vous afficher une barre de légende", + "Do you want to display a panel on load?": "Voulez-vous afficher un panneau latéral au chargement?", + "None": "Aucun", + "by": "par", + "Name and description (large)": "Nom et description (large)", + "Empty": "Vider", + "Split line": "Scinder la ligne", + "Clone": "Cloner", + "Clone of {name}": "Clone de {name}", + "Side panel": "Panneau latéral", + "Powered by Leaflet and Django, glued by uMap project.": "Propulsé par Leaflet et Django, mis en musique par uMap project.", + "Zoom level for automatic zooms": "Niveau de zoom automatique", + "Do you want to display the «more» control?": "Voulez-vous afficher le bouton «Plus»?", + "Auto": "Auto", + "Default: name": "Par défaut: name", + "Property to use for sorting features": "Propriété utilisée pour trier les éléments", + "Slideshow": "Diaporama", + "Start slideshow": "Commencer", + "Stop slideshow": "Arrêter", + "Text color for the cluster label": "Couleur du texte du cluster", + "Zoom to the next": "Suivant", + "Zoom to the previous": "Précédent", + "Add a new property": "Ajouter une propriété", + "Are you sure you want to delete this property on all the features?": "Supprimer la propriété sur tous les éléments ?", + "Close": "Fermer", + "Delete this property on all the features": "Supprimer cette propriété", + "Edit properties in a table": "Éditer dans un tableau", + "Please enter the name of the property": "Merci d'entrer le nom de la propriété", + "Please enter the new name of this property": "Veuillez entrer le nouveau nom de la propriété", + "Rename this property on all the features": "Renommer la propriété", + "If false, the polygon will act as a part of the underlying map.": "Choisir «non» pour que le polygone se comporte comme faisant partie du fond de carte.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe avec hauteur (en pixels): {{{http://iframe.url.com|hauteur}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "Tout voir", + "Dynamic properties": "Propriétés dynamiques", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Utilisez des variables avec les noms de propriétés de vos éléments entre accolades, ex. {name}, elles seront remplacées dynamiquement par les valeurs correspondantes.", + "Long credits": "Crédit", + "No licence has been set": "Aucune licence définie", + "Popup content template": "Gabarit du contenu de la popup", + "Short credits": "Crédit court", + "Will be displayed in the bottom right corner of the map": "S'affiche dans le coin en bas à droite de la carte", + "Will be visible in the caption of the map": "Sera visible dans la légende de la carte", + "Map has been saved!": "La carte a été sauvegardée!", + "Save anyway": "Continuer", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Aïe! Quelqu'un d'autre semble avoir modifié la carte. Vous pouvez continuer l'enregistrement, mais ses données seront perdues.", + "Comma separated list of properties to use when filtering features": "Propriétés à utiliser pour filtrer les éléments (séparées par des virgules)", + "Keep current visible layers": "Garder les calques visibles actuellement", + "Coordinates": "Coordonnées", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue la ligne (Ctrl-clic)", + "Start a hole here": "Ajouter un tracé intérieur", + "Click last point to finish shape": "Cliquer sur le dernier point pour finir le tracé", + "Click to add a marker": "Cliquer pour ajouter le marqueur", + "Click to continue drawing": "Cliquer pour continuer le tracé", + "Click to start drawing a line": "Cliquer pour commencer une ligne", + "Click to start drawing a polygon": "Cliquer pour commencer un polygone", + "Import in a new layer": "Importer dans un nouveau calque", + "Layer": "Calque", + "Please choose a format": "Merci de choisir un format", + "Imports all umap data, including layers and settings.": "Importer toutes les données de la carte, y compris les couches et les propriétés", + "Invalid umap data": "Données uMap invalides", + "Invalid umap data in {filename}": "Les données du fichier {filename} ne sont pas valides comme format uMap", + "Add a line to the current multi": "Ajouter une ligne au groupe courant", + "Add a polygon to the current multi": "Ajouter un polygon au groupe courant", + "Click to edit": "Cliquer pour modifier", + "Continue line": "Continuer la ligne", + "Delete this shape": "Supprimer ce tracé", + "Make main shape": "Tracé principal", + "Merge lines": "Fusionner les lignes", + "Remove shape from the multi": "Extraire le tracé du groupe", + "Transfer shape to edited feature": "Adjoindre le tracé au groupe courant", + "next": "suivant", + "previous": "précédent", + "Measure distances": "Mesurer les distances", + "NM": "NM", + "kilometers": "kilomètres", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "miles nautiques", + "{area} acres": "{area} hectares", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Êtes-vous sûr de vouloir restaurer cette version?", + "Extract shape to separate feature": "Extraire la forme", + "Layer properties": "Propriétés de la couche", + "Restore this version": "Restaurer cette version", + "Versions": "Versions", + "You have unsaved changes.": "Vous avez des changements non sauvegardés.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "Liste de nombre séparés par une virgule, définissant les tirets et espace. Ex.: \"5, 10, 15\".", + "Advanced transition": "Transition avancée", + "Allow interactions": "Autoriser les interactions", + "Autostart when map is loaded": "Lancer au chargement de la carte", + "Default interaction options": "Options d'interaction par défaut", + "Default shape properties": "Propriétés de forme par défaut", + "Default zoom level": "Niveau de zoom par défaut", + "Define link to open in a new window on polygon click.": "Définit un lien à ouvrir dans une nouvelle fenêtre au clic sur le polygone.", + "Delete this vertex (Alt-click)": "Supprimer ce point (Alt-clic)", + "Display the control to open OpenStreetMap editor": "Afficher le bouton pour ouvrir l'éditeur d'OpenStreetMap", + "Display the data layers control": "Afficher le bouton d''accès rapide aux couches de données", + "Display the embed control": "Afficher le bouton de partage", + "Display the fullscreen control": "Afficher le bouton de plein écran", + "Display the locate control": "Afficher le bouton de localisation", + "Display the measure control": "Afficher le bouton de mesures", + "Display the search control": "Afficher le bouton de recherche", + "Display the tile layers control": "Afficher le bouton permettant de changer le fond de carte", + "Display the zoom control": "Afficher les boutons de zoom", + "Exit Fullscreen": "Quitter le plein écran", + "Fetch data each time map view changes.": "Récupère les données à chaque fois que la vue de la carte change.", + "Filter keys": "Clés de filtre", + "Icon shape": "Forme de l'icône", + "Icon symbol": "Image de l'icône", + "Interaction options": "Options d'interaction", + "Label key": "Clé pour le libellé", + "Link to…": "Lien vers…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Doit être une valeur CSS valide (ex.: DarkBlue ou #123456)", + "No results": "Aucun résultat", + "Popup style": "Style de popup", + "Replace layer content": "Remplacer le contenu du calque", + "Save this location as new feature": "Enregistrer ce lieu comme élément de la carte", + "Search location": "Chercher un lieu", + "Set URL": "Définir l'URL", + "Shape properties": "Propriétés de la forme", + "Simplify": "Simplifier", + "Sort key": "Clé de tri", + "The name of the property to use as feature label (ex.: \"nom\")": "Le nom de la propriété à utiliser comme libellé des éléments (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Alterner le mode édition (shift-clic)", + "View Fullscreen": "Voir en plein écran", + "Whether to display or not polygons paths.": "Afficher les contours des polygones.", + "Whether to fill polygons with color.": "Remplir les polygones avec de la couleur.", + "Zoom to this place": "Zoomer vers ce lieu", + "always": "toujours", + "clear": "effacer", + "define": "définir", + "hidden": "caché", + "never": "jamais", + "Automatic": "Automatique", + "Clone this feature": "Dupliquer", + "Display label": "Afficher une étiquette", + "Drag to reorder": "Glisser pour réordonner", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe avec hauteur et largeur (en px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Étiquette cliquable", + "Label direction": "Direction de l'étiquette", + "Manage layers": "Gérer les calques", + "On the bottom": "Bas", + "On the left": "Gauche", + "On the right": "Droite", + "On the top": "Haut", + "Only display label on mouse hover": "Afficher seulement au survol", + "Open link in…": "Ouvrir le lien dans…", + "Unable to detect format of file {filename}": "Impossible de détecter le format du fichier {filename}", + "collapsed": "fermé", + "expanded": "ouvert", + "iframe": "iframe", + "new window": "nouvelle fenêtre", + "parent window": "fenêtre parente", + "{count} errors during import: {message}": "{count} erreurs pendant l'import: {message}", + "Are you sure you want to delete this layer?": "Voulez-vous vraiment supprimer ce calque?", + "Delete layer": "Supprimer le calque", + "Error while fetching {url}": "Erreur en appelant l'URL {url}", + "Home": "Accueil", + "Delete all layers": "Supprimer tous les calques", + "Full map data": "Données complètes de la carte", + "Smart transitions": "Transitions animées", + "Activate slideshow mode": "Activer le mode diaporama", + "Data is browsable": "Données naviguables", + "Delay between two transitions when in play mode": "Délai entre les transitions en mode lecture", + "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…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Afficher les dimensions" +} \ No newline at end of file diff --git a/umap/static/umap/locale/gl.json b/umap/static/umap/locale/gl.json new file mode 100644 index 00000000..0c1d947a --- /dev/null +++ b/umap/static/umap/locale/gl.json @@ -0,0 +1,350 @@ +{ + "About": "Acerca de", + "Action not allowed :(": "Acción non permitida :(", + "Add a layer": "Engade unha capa", + "Add symbol": "Engade unha icona", + "Advanced actions": "Accións avanzadas", + "Advanced properties": "Propiedades avanzadas", + "Allow scroll wheel zoom?": "Permitir o zoom coa roda do rato?", + "An error occured": "Houbo un erro", + "Are you sure you want to cancel your changes?": "Estás seguro/a de que queres cancelar os teus cambios?", + "Are you sure you want to clone this map and all its datalayers?": "Estás seguro/a de que queres clonar este mapa e as súas capas de datos?", + "Are you sure you want to delete the feature?": "Estás seguro/a de que queres borrar este obxecto?", + "Are you sure you want to delete this map?": "Estás seguro/a de que queres eliminar o mapa?", + "Ball": "Pelota", + "Bring feature to center": "Move o obxecto ao centro", + "Browse data": "Navegar polos datos", + "Cancel": "Cancelar", + "Cancel edits": "Cancelar edicións", + "Center map on your location": "Centrar o mapa na túa localización", + "Change map background": "Cambiar o mapa de fondo", + "Change symbol": "Cambiar a icona", + "Change tilelayers": "Cambiar as capas de teselas", + "Choose the format of the data to import": "Elixe o formato dos datos a importar", + "Choose the layer of the feature": "Elixe a capa do obxecto", + "Choose the layer to import in": "Elixe a capa na que queres importar", + "Circle": "Círculo", + "Clone this map": "Clonar este mapa", + "Default": "Por defecto", + "Delete": "Eliminar", + "Delete this feature": "Borrar este obxecto", + "Disable editing": "Desabilitar a edición", + "Display on load": "Amosar na carga", + "Do you want to display a minimap?": "Queres amosar un minimapa?", + "Do you want to display popup footer?": "Queres amosar un pé de páxina emerxente?", + "Do you want to display the scale control?": "Queres amosar o control de escala?", + "Download data": "Descargar datos", + "Draw a line": "Debuxa unha liña", + "Draw a marker": "Debuxa un marcador", + "Draw a polygon": "Debuxa un polígono", + "Draw a polyline": "Debuxa unha liña múltiple", + "Drop": "Gota", + "Dynamic": "Dinámica", + "Edit": "Editar", + "Edit feature's layer": "Edita a capa do obxecto", + "Edit map properties": "Edita as propiedades do mapa", + "Edit map settings": "Edita a configuración do mapa", + "Edit this feature": "Edita este obxecto", + "Embed and share this map": "Incorporar e compartir este mapa", + "Enable editing": "Activar a edición", + "Format": "Formato", + "From zoom": "Dende o zoom", + "Go to «{feature}»": "Ir a «{feature}»", + "Hide controls": "Ocultar os controis", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)", + "Import": "Importar", + "Import data": "Importar datos", + "Inherit": "Inherit", + "Licence": "Licenza", + "Map background credits": "Map background credits", + "Map user content has been published under licence": "Map user content has been published under licence", + "More controls": "Máis controis", + "Optional. Same as color if not set.": "Optional. Same as color if not set.", + "Optionnal.": "Opcional.", + "Paste here your data": "Paste here your data", + "Please be sure the licence is compliant with your use.": "Please be sure the licence is compliant with your use.", + "Problem in the response": "Problem in the response", + "Problem in the response format": "Problem in the response format", + "Provide an URL here": "Provide an URL here", + "Remote data": "Datos remotos", + "Save": "Gardar", + "Save current edits": "Save current edits", + "Save this center and zoom": "Save this center and zoom", + "Show/hide layer": "Show/hide layer", + "Start editing": "Comezar a editar", + "Stop editing": "Stop editing", + "The zoom and center have been setted.": "The zoom and center have been setted.", + "To zoom": "To zoom", + "Untitled layer": "Capa sen título", + "Untitled map": "Mapa sen título", + "Update permissions and editors": "Update permissions and editors", + "Url": "URL", + "User content credits": "Créditos dos contidos do usuario", + "Where do we go from here?": "Where do we go from here?", + "Zoom in": "Zoom in", + "Zoom out": "Zoom out", + "Zoom to layer extent": "Zoom to layer extent", + "Zoom to this feature": "Zoom to this feature", + "color": "cor", + "dash array": "dash array", + "description": "description", + "fill": "fill", + "fill color": "fill color", + "fill opacity": "fill opacity", + "inherit": "inherit", + "licence": "licence", + "name": "nome", + "no": "non", + "opacity": "opacity", + "stroke": "stroke", + "weight": "weight", + "yes": "Si", + "Editing": "Editando", + "Embed the map": "Incorporar o mapa", + "Short URL": "URL curta", + "# one hash for main heading": "# one hash for main heading", + "## two hashes for second heading": "## two hashes for second heading", + "### three hashes for third heading": "### three hashes for third heading", + "**double star for bold**": "**double star for bold**", + "*simple star for italic*": "*simple star for italic*", + "--- for an horizontal rule": "--- for an horizontal rule", + "All properties are imported.": "All properties are imported.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Custom background", + "Help": "Axuda", + "Image: {{http://image.url.com}}": "Imaxe: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link with text: [[http://example.com|text of the link]]", + "Properties imported:": "Propiedades importadas:", + "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]", + "Supported scheme": "Supported scheme", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "Text formatting", + "attribution": "attribution", + "display name": "amosar o nome", + "max zoom": "zoom máximo", + "min zoom": "zoom mínimo", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "Por favor: garde antes o mapa", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Transformar en polígono", + "Transform to lines": "Transformar en liñas", + "Choose the data format": "Escolla o formato de datos", + "Error in the tilelayer URL": "Error in the tilelayer URL", + "Directions from here": "Directions from here", + "Choose a preset": "Escolla un predefinido", + "Limit bounds": "Limit bounds", + "Use current bounds": "Utilice os límites actuais", + "max East": "max East", + "max North": "max North", + "max South": "max South", + "max West": "max West", + "TMS format": "TMS format", + "Credits": "Credits", + "Only visible features will be downloaded.": "Only visible features will be downloaded.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "Default properties", + "User interface options": "User interface options", + "Image with custom width (in px): {{http://image.url.com|width}}": "Image with custom width (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Current view instead of default map view?", + "Iframe export options": "Iframe export options", + "Include full screen link?": "Include full screen link?", + "See full screen": "Ver pantalla completa", + "height": "altura", + "width": "width", + "Clustered": "Clustered", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (only link)", + "GeoRSS (title + image)": "GeoRSS (title + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Name and description", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Proxy request", + "Table": "Táboa", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "Type of layer", + "Filter…": "Filtro...", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Caption", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Do you want to display a caption bar?", + "Do you want to display a panel on load?": "Do you want to display a panel on load?", + "None": "None", + "by": "por", + "Name and description (large)": "Name and description (large)", + "Empty": "Baleiro", + "Split line": "Split line", + "Clone": "Clonar", + "Clone of {name}": "Clonado de {name}", + "Side panel": "Panel lateral", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Do you want to display the «more» control?", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Close", + "Delete this property on all the features": "Delete this property on all the features", + "Edit properties in a table": "Edit properties in a table", + "Please enter the name of the property": "Please enter the name of the property", + "Please enter the new name of this property": "Please enter the new name of this property", + "Rename this property on all the features": "Rename this property on all the features", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordinates", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Layer", + "Please choose a format": "Please choose a format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Measure distances", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "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…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/hr.json b/umap/static/umap/locale/hr.json new file mode 100644 index 00000000..a3b9b927 --- /dev/null +++ b/umap/static/umap/locale/hr.json @@ -0,0 +1,350 @@ +{ + "About": "Više o", + "Action not allowed :(": "Akcija nije dozvoljena :(", + "Add a layer": "Dodaj sloj", + "Add symbol": "Dodavanje simbola", + "Advanced actions": "Napredne akcije", + "Advanced properties": "Napredne postavke", + "Allow scroll wheel zoom?": "Dopustiti uvećanje kotačićem?", + "An error occured": "Desila se greška", + "Are you sure you want to cancel your changes?": "Are you sure you want to cancel your changes?", + "Are you sure you want to clone this map and all its datalayers?": "Are you sure you want to clone this map and all its datalayers?", + "Are you sure you want to delete the feature?": "Jeste li sigurni da želite obrisati ovaj element?", + "Are you sure you want to delete this map?": "Are you sure you want to delete this map?", + "Ball": "Lopta", + "Bring feature to center": "Dovedi element na centar", + "Browse data": "Browse data", + "Cancel": "Odustani", + "Cancel edits": "Cancel edits", + "Center map on your location": "Center map on your location", + "Change map background": "Promjeni pozadinu karte", + "Change symbol": "Promjeni simbol", + "Change tilelayers": "Change tilelayers", + "Choose the format of the data to import": "Choose the format of the data to import", + "Choose the layer of the feature": "Choose the layer of the feature", + "Choose the layer to import in": "Odaberi sloj za uvoz", + "Circle": "Kružnica", + "Clone this map": "Poduplaj ovu kartu", + "Default": "Default", + "Delete": "Obriši", + "Delete this feature": "Brisanje ovog elementa", + "Disable editing": "Disable editing", + "Display on load": "Prikaži kod učitavanja", + "Do you want to display a minimap?": "Želite li prikazati malu kartu?", + "Do you want to display popup footer?": "Želite li prikazati skočni prozor u podnožju?", + "Do you want to display the scale control?": "Do you want to display the scale control?", + "Download data": "Preuzimanje podataka", + "Draw a line": "Crtanje linije", + "Draw a marker": "Crtanje oznake", + "Draw a polygon": "Crtanje površine", + "Draw a polyline": "Crtanje izlomljene linije", + "Drop": "Drop", + "Dynamic": "Dynamic", + "Edit": "Urediti", + "Edit feature's layer": "Edit feature's layer", + "Edit map properties": "Edit map properties", + "Edit map settings": "Edit map settings", + "Edit this feature": "Edit this feature", + "Embed and share this map": "Embed and share this map", + "Enable editing": "Enable editing", + "Format": "Format", + "From zoom": "Od uvećanja", + "Go to «{feature}»": "Go to «{feature}»", + "Hide controls": "Sakrij kontrole", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)", + "Import": "Uvoz", + "Import data": "Uvoz podataka", + "Inherit": "Naslijedi", + "Licence": "Licence", + "Map background credits": "Map background credits", + "Map user content has been published under licence": "Map user content has been published under licence", + "More controls": "More controls", + "Optional. Same as color if not set.": "Optional. Same as color if not set.", + "Optionnal.": "Optionnal.", + "Paste here your data": "Paste here your data", + "Please be sure the licence is compliant with your use.": "Please be sure the licence is compliant with your use.", + "Problem in the response": "Problem in the response", + "Problem in the response format": "Problem in the response format", + "Provide an URL here": "Ovdje upišite URL", + "Remote data": "Udaljeni podaci", + "Save": "Spremi", + "Save current edits": "Save current edits", + "Save this center and zoom": "Save this center and zoom", + "Show/hide layer": "Prikaži/sakrij sloj", + "Start editing": "Start editing", + "Stop editing": "Zaustavi uređivanje", + "The zoom and center have been setted.": "The zoom and center have been setted.", + "To zoom": "Do uvećanja", + "Untitled layer": "Bezimeni sloj", + "Untitled map": "Bezimena karta", + "Update permissions and editors": "Ažuriraj dozvole i urednike", + "Url": "Url", + "User content credits": "Zasluge za sadržaj", + "Where do we go from here?": "Where do we go from here?", + "Zoom in": "Zoom in", + "Zoom out": "Zoom out", + "Zoom to layer extent": "Zoom to layer extent", + "Zoom to this feature": "Zoom to this feature", + "color": "boja", + "dash array": "dash array", + "description": "opis", + "fill": "ispuna", + "fill color": "boja ispune", + "fill opacity": "prozirnost ispune", + "inherit": "naslijedi", + "licence": "licenca", + "name": "ime", + "no": "ne", + "opacity": "prozirnost", + "stroke": "potez", + "weight": "debljina", + "yes": "Da", + "Editing": "Uređivanje", + "Embed the map": "Ugradi kartu", + "Short URL": "Kratki URL", + "# one hash for main heading": "# jedne ljestve za glavni naslov", + "## two hashes for second heading": "### dva puta ljestve za treću razinu naslova", + "### three hashes for third heading": "### tri puta ljestve za treću razinu naslova", + "**double star for bold**": "**dvije zvijezdice za podebljano**", + "*simple star for italic*": "*zvijezdica za kurziv*", + "--- for an horizontal rule": "--- za horizontalnu crtu", + "All properties are imported.": "Sve postavke su uvezene.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Posebna pozadina", + "Help": "Pomoć", + "Image: {{http://image.url.com}}": "slika {{http://slika.url.hr}}", + "Link with text: [[http://example.com|text of the link]]": "Link sa tekstom: [[http://primjer.hr|tekst linka]]", + "Properties imported:": "Properties imported:", + "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]", + "Supported scheme": "Supported scheme", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "Formatiranje teksta", + "attribution": "attribution", + "display name": "display name", + "max zoom": "maksimalno uvećanje", + "min zoom": "minimalno uvećanje", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "Please save the map before", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Transform to polygon", + "Transform to lines": "Transform to lines", + "Choose the data format": "Choose the data format", + "Error in the tilelayer URL": "Error in the tilelayer URL", + "Directions from here": "Directions from here", + "Choose a preset": "Choose a preset", + "Limit bounds": "Limit bounds", + "Use current bounds": "Use current bounds", + "max East": "max East", + "max North": "max North", + "max South": "max South", + "max West": "max West", + "TMS format": "TMS format", + "Credits": "Credits", + "Only visible features will be downloaded.": "Only visible features will be downloaded.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "Default properties", + "User interface options": "User interface options", + "Image with custom width (in px): {{http://image.url.com|width}}": "Image with custom width (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Current view instead of default map view?", + "Iframe export options": "Iframe export options", + "Include full screen link?": "Include full screen link?", + "See full screen": "See full screen", + "height": "height", + "width": "width", + "Clustered": "Clustered", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (only link)", + "GeoRSS (title + image)": "GeoRSS (title + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Name and description", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Proxy request", + "Table": "Table", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "Type of layer", + "Filter…": "Filter…", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Caption", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Do you want to display a caption bar?", + "Do you want to display a panel on load?": "Do you want to display a panel on load?", + "None": "None", + "by": "by", + "Name and description (large)": "Name and description (large)", + "Empty": "Empty", + "Split line": "Split line", + "Clone": "Clone", + "Clone of {name}": "Clone of {name}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Do you want to display the «more» control?", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Close", + "Delete this property on all the features": "Delete this property on all the features", + "Edit properties in a table": "Edit properties in a table", + "Please enter the name of the property": "Please enter the name of the property", + "Please enter the new name of this property": "Please enter the new name of this property", + "Rename this property on all the features": "Rename this property on all the features", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordinates", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Layer", + "Please choose a format": "Please choose a format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Izmjeri udaljenosti", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "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…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/hu.json b/umap/static/umap/locale/hu.json new file mode 100644 index 00000000..4918b268 --- /dev/null +++ b/umap/static/umap/locale/hu.json @@ -0,0 +1,350 @@ +{ + "About": "About", + "Action not allowed :(": "Action not allowed :(", + "Add a layer": "Add a layer", + "Add symbol": "Add symbol", + "Advanced actions": "Advanced actions", + "Advanced properties": "Advanced properties", + "Allow scroll wheel zoom?": "Allow scroll wheel zoom?", + "An error occured": "An error occured", + "Are you sure you want to cancel your changes?": "Are you sure you want to cancel your changes?", + "Are you sure you want to clone this map and all its datalayers?": "Are you sure you want to clone this map and all its datalayers?", + "Are you sure you want to delete the feature?": "Are you sure you want to delete the feature?", + "Are you sure you want to delete this map?": "Are you sure you want to delete this map?", + "Ball": "Ball", + "Bring feature to center": "Bring feature to center", + "Browse data": "Browse data", + "Cancel": "Cancel", + "Cancel edits": "Cancel edits", + "Center map on your location": "Center map on your location", + "Change map background": "Change map background", + "Change symbol": "Change symbol", + "Change tilelayers": "Change tilelayers", + "Choose the format of the data to import": "Choose the format of the data to import", + "Choose the layer of the feature": "Choose the layer of the feature", + "Choose the layer to import in": "Choose the layer to import in", + "Circle": "Circle", + "Clone this map": "Clone this map", + "Default": "Default", + "Delete": "Delete", + "Delete this feature": "Delete this feature", + "Disable editing": "Disable editing", + "Display on load": "Display on load", + "Do you want to display a minimap?": "Do you want to display a minimap?", + "Do you want to display popup footer?": "Do you want to display popup footer?", + "Do you want to display the scale control?": "Do you want to display the scale control?", + "Download data": "Download data", + "Draw a line": "Draw a line", + "Draw a marker": "Draw a marker", + "Draw a polygon": "Draw a polygon", + "Draw a polyline": "Draw a polyline", + "Drop": "Drop", + "Dynamic": "Dynamic", + "Edit": "Edit", + "Edit feature's layer": "Edit feature's layer", + "Edit map properties": "Edit map properties", + "Edit map settings": "Edit map settings", + "Edit this feature": "Edit this feature", + "Embed and share this map": "Embed and share this map", + "Enable editing": "Enable editing", + "Format": "Format", + "From zoom": "From zoom", + "Go to «{feature}»": "Go to «{feature}»", + "Hide controls": "Hide controls", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)", + "Import": "Import", + "Import data": "Import data", + "Inherit": "Inherit", + "Licence": "Licence", + "Map background credits": "Map background credits", + "Map user content has been published under licence": "Map user content has been published under licence", + "More controls": "More controls", + "Optional. Same as color if not set.": "Optional. Same as color if not set.", + "Optionnal.": "Optionnal.", + "Paste here your data": "Paste here your data", + "Please be sure the licence is compliant with your use.": "Please be sure the licence is compliant with your use.", + "Problem in the response": "Problem in the response", + "Problem in the response format": "Problem in the response format", + "Provide an URL here": "Provide an URL here", + "Remote data": "Remote data", + "Save": "Save", + "Save current edits": "Save current edits", + "Save this center and zoom": "Save this center and zoom", + "Show/hide layer": "Show/hide layer", + "Start editing": "Start editing", + "Stop editing": "Stop editing", + "The zoom and center have been setted.": "The zoom and center have been setted.", + "To zoom": "To zoom", + "Untitled layer": "Untitled layer", + "Untitled map": "Untitled map", + "Update permissions and editors": "Update permissions and editors", + "Url": "Url", + "User content credits": "User content credits", + "Where do we go from here?": "Where do we go from here?", + "Zoom in": "Zoom in", + "Zoom out": "Zoom out", + "Zoom to layer extent": "Zoom to layer extent", + "Zoom to this feature": "Zoom to this feature", + "color": "color", + "dash array": "dash array", + "description": "description", + "fill": "fill", + "fill color": "fill color", + "fill opacity": "fill opacity", + "inherit": "inherit", + "licence": "licence", + "name": "name", + "no": "no", + "opacity": "opacity", + "stroke": "stroke", + "weight": "weight", + "yes": "yes", + "Editing": "Editing", + "Embed the map": "Embed the map", + "Short URL": "Short URL", + "# one hash for main heading": "# one hash for main heading", + "## two hashes for second heading": "## two hashes for second heading", + "### three hashes for third heading": "### three hashes for third heading", + "**double star for bold**": "**double star for bold**", + "*simple star for italic*": "*simple star for italic*", + "--- for an horizontal rule": "--- for an horizontal rule", + "All properties are imported.": "All properties are imported.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Custom background", + "Help": "Help", + "Image: {{http://image.url.com}}": "Image: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link with text: [[http://example.com|text of the link]]", + "Properties imported:": "Properties imported:", + "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]", + "Supported scheme": "Supported scheme", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "Text formatting", + "attribution": "attribution", + "display name": "display name", + "max zoom": "max zoom", + "min zoom": "min zoom", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "Please save the map before", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Transform to polygon", + "Transform to lines": "Transform to lines", + "Choose the data format": "Choose the data format", + "Error in the tilelayer URL": "Error in the tilelayer URL", + "Directions from here": "Directions from here", + "Choose a preset": "Choose a preset", + "Limit bounds": "Limit bounds", + "Use current bounds": "Use current bounds", + "max East": "max East", + "max North": "max North", + "max South": "max South", + "max West": "max West", + "TMS format": "TMS format", + "Credits": "Credits", + "Only visible features will be downloaded.": "Only visible features will be downloaded.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "Default properties", + "User interface options": "User interface options", + "Image with custom width (in px): {{http://image.url.com|width}}": "Image with custom width (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Current view instead of default map view?", + "Iframe export options": "Iframe export options", + "Include full screen link?": "Include full screen link?", + "See full screen": "See full screen", + "height": "height", + "width": "width", + "Clustered": "Clustered", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (only link)", + "GeoRSS (title + image)": "GeoRSS (title + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Name and description", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Proxy request", + "Table": "Table", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "Type of layer", + "Filter…": "Filter…", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Caption", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Do you want to display a caption bar?", + "Do you want to display a panel on load?": "Do you want to display a panel on load?", + "None": "None", + "by": "by", + "Name and description (large)": "Name and description (large)", + "Empty": "Empty", + "Split line": "Split line", + "Clone": "Clone", + "Clone of {name}": "Clone of {name}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Do you want to display the «more» control?", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Close", + "Delete this property on all the features": "Delete this property on all the features", + "Edit properties in a table": "Edit properties in a table", + "Please enter the name of the property": "Please enter the name of the property", + "Please enter the new name of this property": "Please enter the new name of this property", + "Rename this property on all the features": "Rename this property on all the features", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordinates", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Layer", + "Please choose a format": "Please choose a format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Measure distances", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "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…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/id.json b/umap/static/umap/locale/id.json new file mode 100644 index 00000000..4918b268 --- /dev/null +++ b/umap/static/umap/locale/id.json @@ -0,0 +1,350 @@ +{ + "About": "About", + "Action not allowed :(": "Action not allowed :(", + "Add a layer": "Add a layer", + "Add symbol": "Add symbol", + "Advanced actions": "Advanced actions", + "Advanced properties": "Advanced properties", + "Allow scroll wheel zoom?": "Allow scroll wheel zoom?", + "An error occured": "An error occured", + "Are you sure you want to cancel your changes?": "Are you sure you want to cancel your changes?", + "Are you sure you want to clone this map and all its datalayers?": "Are you sure you want to clone this map and all its datalayers?", + "Are you sure you want to delete the feature?": "Are you sure you want to delete the feature?", + "Are you sure you want to delete this map?": "Are you sure you want to delete this map?", + "Ball": "Ball", + "Bring feature to center": "Bring feature to center", + "Browse data": "Browse data", + "Cancel": "Cancel", + "Cancel edits": "Cancel edits", + "Center map on your location": "Center map on your location", + "Change map background": "Change map background", + "Change symbol": "Change symbol", + "Change tilelayers": "Change tilelayers", + "Choose the format of the data to import": "Choose the format of the data to import", + "Choose the layer of the feature": "Choose the layer of the feature", + "Choose the layer to import in": "Choose the layer to import in", + "Circle": "Circle", + "Clone this map": "Clone this map", + "Default": "Default", + "Delete": "Delete", + "Delete this feature": "Delete this feature", + "Disable editing": "Disable editing", + "Display on load": "Display on load", + "Do you want to display a minimap?": "Do you want to display a minimap?", + "Do you want to display popup footer?": "Do you want to display popup footer?", + "Do you want to display the scale control?": "Do you want to display the scale control?", + "Download data": "Download data", + "Draw a line": "Draw a line", + "Draw a marker": "Draw a marker", + "Draw a polygon": "Draw a polygon", + "Draw a polyline": "Draw a polyline", + "Drop": "Drop", + "Dynamic": "Dynamic", + "Edit": "Edit", + "Edit feature's layer": "Edit feature's layer", + "Edit map properties": "Edit map properties", + "Edit map settings": "Edit map settings", + "Edit this feature": "Edit this feature", + "Embed and share this map": "Embed and share this map", + "Enable editing": "Enable editing", + "Format": "Format", + "From zoom": "From zoom", + "Go to «{feature}»": "Go to «{feature}»", + "Hide controls": "Hide controls", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)", + "Import": "Import", + "Import data": "Import data", + "Inherit": "Inherit", + "Licence": "Licence", + "Map background credits": "Map background credits", + "Map user content has been published under licence": "Map user content has been published under licence", + "More controls": "More controls", + "Optional. Same as color if not set.": "Optional. Same as color if not set.", + "Optionnal.": "Optionnal.", + "Paste here your data": "Paste here your data", + "Please be sure the licence is compliant with your use.": "Please be sure the licence is compliant with your use.", + "Problem in the response": "Problem in the response", + "Problem in the response format": "Problem in the response format", + "Provide an URL here": "Provide an URL here", + "Remote data": "Remote data", + "Save": "Save", + "Save current edits": "Save current edits", + "Save this center and zoom": "Save this center and zoom", + "Show/hide layer": "Show/hide layer", + "Start editing": "Start editing", + "Stop editing": "Stop editing", + "The zoom and center have been setted.": "The zoom and center have been setted.", + "To zoom": "To zoom", + "Untitled layer": "Untitled layer", + "Untitled map": "Untitled map", + "Update permissions and editors": "Update permissions and editors", + "Url": "Url", + "User content credits": "User content credits", + "Where do we go from here?": "Where do we go from here?", + "Zoom in": "Zoom in", + "Zoom out": "Zoom out", + "Zoom to layer extent": "Zoom to layer extent", + "Zoom to this feature": "Zoom to this feature", + "color": "color", + "dash array": "dash array", + "description": "description", + "fill": "fill", + "fill color": "fill color", + "fill opacity": "fill opacity", + "inherit": "inherit", + "licence": "licence", + "name": "name", + "no": "no", + "opacity": "opacity", + "stroke": "stroke", + "weight": "weight", + "yes": "yes", + "Editing": "Editing", + "Embed the map": "Embed the map", + "Short URL": "Short URL", + "# one hash for main heading": "# one hash for main heading", + "## two hashes for second heading": "## two hashes for second heading", + "### three hashes for third heading": "### three hashes for third heading", + "**double star for bold**": "**double star for bold**", + "*simple star for italic*": "*simple star for italic*", + "--- for an horizontal rule": "--- for an horizontal rule", + "All properties are imported.": "All properties are imported.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Custom background", + "Help": "Help", + "Image: {{http://image.url.com}}": "Image: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link with text: [[http://example.com|text of the link]]", + "Properties imported:": "Properties imported:", + "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]", + "Supported scheme": "Supported scheme", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "Text formatting", + "attribution": "attribution", + "display name": "display name", + "max zoom": "max zoom", + "min zoom": "min zoom", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "Please save the map before", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Transform to polygon", + "Transform to lines": "Transform to lines", + "Choose the data format": "Choose the data format", + "Error in the tilelayer URL": "Error in the tilelayer URL", + "Directions from here": "Directions from here", + "Choose a preset": "Choose a preset", + "Limit bounds": "Limit bounds", + "Use current bounds": "Use current bounds", + "max East": "max East", + "max North": "max North", + "max South": "max South", + "max West": "max West", + "TMS format": "TMS format", + "Credits": "Credits", + "Only visible features will be downloaded.": "Only visible features will be downloaded.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "Default properties", + "User interface options": "User interface options", + "Image with custom width (in px): {{http://image.url.com|width}}": "Image with custom width (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Current view instead of default map view?", + "Iframe export options": "Iframe export options", + "Include full screen link?": "Include full screen link?", + "See full screen": "See full screen", + "height": "height", + "width": "width", + "Clustered": "Clustered", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (only link)", + "GeoRSS (title + image)": "GeoRSS (title + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Name and description", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Proxy request", + "Table": "Table", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "Type of layer", + "Filter…": "Filter…", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Caption", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Do you want to display a caption bar?", + "Do you want to display a panel on load?": "Do you want to display a panel on load?", + "None": "None", + "by": "by", + "Name and description (large)": "Name and description (large)", + "Empty": "Empty", + "Split line": "Split line", + "Clone": "Clone", + "Clone of {name}": "Clone of {name}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Do you want to display the «more» control?", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Close", + "Delete this property on all the features": "Delete this property on all the features", + "Edit properties in a table": "Edit properties in a table", + "Please enter the name of the property": "Please enter the name of the property", + "Please enter the new name of this property": "Please enter the new name of this property", + "Rename this property on all the features": "Rename this property on all the features", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordinates", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Layer", + "Please choose a format": "Please choose a format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Measure distances", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "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…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/it.json b/umap/static/umap/locale/it.json new file mode 100644 index 00000000..11a2be41 --- /dev/null +++ b/umap/static/umap/locale/it.json @@ -0,0 +1,350 @@ +{ + "About": "Informazioni", + "Action not allowed :(": "Azione non permessa :(", + "Add a layer": "Aggiungi un layer", + "Add symbol": "Aggiungi un simbolo", + "Advanced actions": "Azioni avanzate", + "Advanced properties": "Proprietà avanzate", + "Allow scroll wheel zoom?": "Abilitare la rotellina del mouse per lo zoom?", + "An error occured": "Si è verificato un errore", + "Are you sure you want to cancel your changes?": "Si vuole realmente annullare le modifiche fatte?", + "Are you sure you want to clone this map and all its datalayers?": "Confermi di duplicare questa mappa e tutti i suoi livelli?", + "Are you sure you want to delete the feature?": "Si è sicuri di voler cancellare questa geometria?", + "Are you sure you want to delete this map?": "Si è certi di voler eliminare questa mappa?", + "Ball": "Palla", + "Bring feature to center": "Porta la geometria al centro", + "Browse data": "Visualizza i dati", + "Cancel": "Annulla", + "Cancel edits": "Annulla le modifiche", + "Center map on your location": "Centra la mappa sulla tua posizione", + "Change map background": "Cambia la mappa di sfondo", + "Change symbol": "Cambia il simbolo", + "Change tilelayers": "Cambia i livelli di sfondo", + "Choose the format of the data to import": "Seleziona il formato dei dati da importare", + "Choose the layer of the feature": "Scegli il layer della geometria", + "Choose the layer to import in": "Seleziona su quale livello fare l'importazione", + "Circle": "Cerchio", + "Clone this map": "Duplica questa mappa", + "Default": "Predefinito", + "Delete": "Cancella", + "Delete this feature": "Cancella questa geometria", + "Disable editing": "Disabilita la modifica", + "Display on load": "Mostra durante il caricamento", + "Do you want to display a minimap?": "Visualizzare una mappa panoramica?", + "Do you want to display popup footer?": "Visualizzare la finestra di popup a piè pagina?", + "Do you want to display the scale control?": "Visualizzare la scala?", + "Download data": "Download dei dati", + "Draw a line": "Disegna una linea", + "Draw a marker": "Aggiungi un marcatore", + "Draw a polygon": "Disegna un poligono", + "Draw a polyline": "Disegna una polilinea", + "Drop": "Goccia", + "Dynamic": "Dinamico", + "Edit": "Modifica", + "Edit feature's layer": "Modifica le geometrie del layer", + "Edit map properties": "Modifica le proprietà della mappa", + "Edit map settings": "Modifica le impostazioni della mappa", + "Edit this feature": "Modifica questa geometria", + "Embed and share this map": "Includi e condividi questa mappa", + "Enable editing": "Abilita la modifica", + "Format": "Formato", + "From zoom": "Dallo zoom", + "Go to «{feature}»": "Vai a «{feature}»", + "Hide controls": "Nascondi controlli", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "Quanto vuoi semplificare la polilinea per ogni zoom (più = maggiori perfromance a aspetto più semplificato, meno = maggior dettaglio)", + "Import": "Importa", + "Import data": "Importa dati", + "Inherit": "Eredita", + "Licence": "Licenza", + "Map background credits": "Riconoscimenti per la mappa di sfondo", + "Map user content has been published under licence": "I contenuti della mappa sono rilasciati secondo la licenza", + "More controls": "Maggiori controlli", + "Optional. Same as color if not set.": "Opzionale. Stesso colore se non assegnato.", + "Optionnal.": "Opzionale", + "Paste here your data": "Incolla i tuoi dati qui", + "Please be sure the licence is compliant with your use.": "Si prega di verificare che la licenza è compatibile con quella in uso.", + "Problem in the response": "Problema nella risposta", + "Problem in the response format": "Problema nel formato della risposta", + "Provide an URL here": "Aggiungi una URL qui", + "Remote data": "Dati remoti", + "Save": "Salva", + "Save current edits": "Salva le modifiche effettuate", + "Save this center and zoom": "Salva il centro e lo zoom", + "Show/hide layer": "Mostra/nascondi layer", + "Start editing": "Avvia modifica", + "Stop editing": "Ferma la modifica", + "The zoom and center have been setted.": "Il livello di zoom e il centro sono stati impostati.", + "To zoom": "Allo zoom", + "Untitled layer": "Layer senza nome", + "Untitled map": "Mappa senza nome", + "Update permissions and editors": "Cambia i permessi e gli editori", + "Url": "Url", + "User content credits": "Riconoscimenti ai contenuti utente", + "Where do we go from here?": "Da dove ci spostiamo da qui?", + "Zoom in": "Ingrandisci", + "Zoom out": "Rimpicciolisci", + "Zoom to layer extent": "Zoom alla larghezza massima del layer", + "Zoom to this feature": "Zoom su questa geometria", + "color": "colore", + "dash array": "tratteggio", + "description": "descrizione", + "fill": "riempimento", + "fill color": "colore di riempimento", + "fill opacity": "opacità riempimento", + "inherit": "eredita", + "licence": "licenza", + "name": "nome", + "no": "non", + "opacity": "opacità", + "stroke": "tratto", + "weight": "peso", + "yes": "sì", + "Editing": "Modifica", + "Embed the map": "Includi la mappa", + "Short URL": "URL breve", + "# one hash for main heading": "# un cancelleto per l'intestazione principale", + "## two hashes for second heading": "## due cancelletti per le intestazioni di secondo livello", + "### three hashes for third heading": "### tre cancelletti per intestazione di terzo livello", + "**double star for bold**": "**due asterischi per il testo marcato**", + "*simple star for italic*": "*asterisco per l'italico*", + "--- for an horizontal rule": "--- per una linea orizzontale", + "All properties are imported.": "Tutte le proprietà sono state importate.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Valori separati da virgola, tabulatore o punto e virgola. Il sistema di riferimento spaziale implementato è WGS84. Vengono importati solo punti. La funzione di importazione va a cercare nell'intestazione le colonne «lat» e «lon» indifferentemente se scritte in maiuscolo o minuscolo. Tutte le altre colonne sono importate come proprietà.", + "Custom background": "Sfondo personalizzato", + "Help": "Aiuto", + "Image: {{http://image.url.com}}": "Immagini: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link con testo: [[http://example.com|testo del link]]", + "Properties imported:": "Proprietà importate:", + "Simple link: [[http://example.com]]": "Link semplice: [[http://example.com]]", + "Supported scheme": "Schema supportato", + "Supported variables that will be dynamically replaced": "Variabili supportate che verranno cambiate dinamicamente", + "Text formatting": "Formattazione testo", + "attribution": "attribuzione", + "display name": "visualizza il nome", + "max zoom": "zoom massimo", + "min zoom": "zoom minimo", + "Skipping unkown geometry.type: {type}": "Ignorare le geometrie sconosciute di tipo: {type}", + "Please save the map before": "Per favore, prima, salva la mappa", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "Puoi utilizzare le proprietà come fossero variabili: ad esempio, in \"http://myserver.org/images/{name}.png\", la variabile {name} verrà sostituita con il valore di \"name\" presente in ognuno dei marker.", + "Transform to polygon": "Trasforma in poligono", + "Transform to lines": "Trasforma in linee", + "Choose the data format": "Scegli il formato dati", + "Error in the tilelayer URL": "Errore nell'URL nel servizio di tile", + "Directions from here": "Indicazioni stradali da qui", + "Choose a preset": "Seleziona una preimpostazione", + "Limit bounds": "Limiti di confine", + "Use current bounds": "Utilizza l'area in uso", + "max East": "max Est", + "max North": "max Nord", + "max South": "max Sud", + "max West": "max Ovest", + "TMS format": "formato TMS", + "Credits": "Ringraziamenti", + "Only visible features will be downloaded.": "Saranno scaricate solo le geoemtrie visibili.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Apri quest'area della mappa nell'editor in modo da fornire dati più accurati in OpenStreeetMap", + "Default properties": "Proprietà preimpostate", + "User interface options": "Opzioni interfaccia utente", + "Image with custom width (in px): {{http://image.url.com|width}}": "Immagine con larghezza personalizzata (width) (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Vista attuale invece che quella della mappa preimpostata?", + "Iframe export options": "opzioni di esportazione iframe", + "Include full screen link?": "inserire link per la vista a schemo intero?", + "See full screen": "Visualizza a schermo intero", + "height": "altezza", + "width": "larghezza", + "Clustered": "Raggruppata", + "Clustering radius": "Raggio del raggruppamento", + "GeoRSS (only link)": "GeoRSS (solo il link)", + "GeoRSS (title + image)": "GeoRSS (titolo + immagine)", + "Heatmap": "Mappa di densità (heatmap)", + "Heatmap radius": "Raggio mappa di densità", + "Name and description": "Nome e descrizione", + "Override clustering radius (default 80)": "Sovrascrivi raggio di raggruppamento (predefinito 80)", + "Override heatmap radius (default 25)": "Sovrascrivi raggio mappa di intensità (predefinito 25)", + "Proxy request": "Richiesta proxy", + "Table": "Tabella", + "To use if remote server doesn't allow cross domain (slower)": "Da utilizzare se il server remoto non permette l'accesso incrociato ai domini (lento)", + "Type of layer": "Tipo di layer", + "Filter…": "Filtro...", + "Heatmap intensity property": "Proprietà intensità mappa di densità", + "Optional intensity property for heatmap": "Proprietà opzionale per la mappa di densità", + "Caption": "Didascalia", + "Data browser": "Visualizza i dati", + "Do you want to display a caption bar?": "Visualizza una didascalia?", + "Do you want to display a panel on load?": "Visualizza un panello al caricamento?", + "None": "Nulla", + "by": "di", + "Name and description (large)": "Nome e descrizione (lunga)", + "Empty": "Vuoto", + "Split line": "Dividi linea", + "Clone": "Clona", + "Clone of {name}": "Clone di {name}", + "Side panel": "Pannello laterale", + "Powered by Leaflet and Django, glued by uMap project.": "Basato su Leaflet e Django, uniti nel progetto uMap.", + "Zoom level for automatic zooms": "Livelli di zoom per zoom automatici", + "Do you want to display the «more» control?": "Vuoi visualizzare il controllo \"altro\"?", + "Auto": "Auto", + "Default: name": "Predefinito: nome", + "Property to use for sorting features": "Proprietà da utilizzare per ordinare gli oggetti", + "Slideshow": "Slideshow", + "Start slideshow": "Avvia slideshow", + "Stop slideshow": "Ferma slideshow", + "Text color for the cluster label": "Colore di testo per l'etichetta del raggruppamento", + "Zoom to the next": "Zoom sul prossimo", + "Zoom to the previous": "Zoom sul precedente", + "Add a new property": "Aggiungi una nuova proprietà", + "Are you sure you want to delete this property on all the features?": "Si è sicuri di voler cancellare questa proprietà per ogni geometria?", + "Close": "Chiudi", + "Delete this property on all the features": "Cancella questa proprietà in tutte le geometrie", + "Edit properties in a table": "Modifica le proprietà in una tabella", + "Please enter the name of the property": "Inserire il nome della proprietà", + "Please enter the new name of this property": "Inserire il nuovo nome per questa proprietà", + "Rename this property on all the features": "Rinomina questa proprietà in tutti gli oggetti", + "If false, the polygon will act as a part of the underlying map.": "Se falso, il poligono agirà come parte della mappa sottostante.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe con altezza (in px) personalizzata: {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "Vedi tutto", + "Dynamic properties": "Proprietà dinamiche", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Specificando le proprietà degli oggetti attraverso le parentesi graffe es. {name} queste saranno automaticamente sostituite con i valore corrispondenti", + "Long credits": "Ringraziamenti estesi", + "No licence has been set": "Non è ancora stata impostata una licenza", + "Popup content template": "Template del contenuto del popup", + "Short credits": "Mostra i ringraziamenti ", + "Will be displayed in the bottom right corner of the map": "Sarà visualizzato in un angolo in basso a destra sulla mappa ", + "Will be visible in the caption of the map": "Sarà visibile nella didascalia della mappa", + "Map has been saved!": "La mappa è stata salvata", + "Save anyway": "Salva comunque", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "OPS! Qualcun altro sembra aver modificato i dati. È possibile comunque salvare, ma questo cancellerà le modifiche apportate da altri.", + "Comma separated list of properties to use when filtering features": "Lista di proprietà separate da virgola da utilizzare per filtrare le geometrie", + "Keep current visible layers": "Mantieni i livelli attualmente visibili", + "Coordinates": "Coordinate", + "Latitude": "Latitudine", + "Longitude": "Longitudine", + "Continue line (Ctrl-click)": "Continua linea (Ctrl-click)", + "Start a hole here": "Comincia un buco qui", + "Click last point to finish shape": "Click su ultimo punto per completare la geometria", + "Click to add a marker": "Clicca per aggiungere un marcatore", + "Click to continue drawing": "Clic per continuare a disegnare", + "Click to start drawing a line": "Clic per iniziare a disegnare una linea", + "Click to start drawing a polygon": "Clicca per iniziare a disegnare un poligono", + "Import in a new layer": "Importa in un nuovo layer", + "Layer": "Layer", + "Please choose a format": "Scegliere un formato", + "Imports all umap data, including layers and settings.": "importa tutti i dati di umap compresi layer e le impostazioni", + "Invalid umap data": "dati di umap non validi", + "Invalid umap data in {filename}": "dati umap non validi nel file {filename}", + "Add a line to the current multi": "Aggiungi una linea a quelle correnti", + "Add a polygon to the current multi": "Aggiungi un poligono a quell correnti", + "Click to edit": "Clic per la modifica", + "Continue line": "Linea continua", + "Delete this shape": "Cancella questa geometria", + "Make main shape": "Genera geometria generale", + "Merge lines": "Unisci linee", + "Remove shape from the multi": "Rimuovi geometria dalle altre", + "Transfer shape to edited feature": "Trasforma la geometria in una modificabile", + "next": "prossimo", + "previous": "precedente", + "Measure distances": "Misuratore di distanze", + "NM": "NM", + "kilometers": "chilometri", + "km": "km", + "mi": "mi", + "miles": "miglia", + "nautical miles": "miglie nautiche", + "{area} acres": "{area} acri", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miglia", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Si vuole veramente ripristinare questa versione?", + "Extract shape to separate feature": "Dividi la geometria in geometrie separate", + "Layer properties": "Proprietà del layer", + "Restore this version": "Ripristina questa versione", + "Versions": "Versioni", + "You have unsaved changes.": "Ci sono delle modifiche che non sono state ancora salvate.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "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…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/ja.json b/umap/static/umap/locale/ja.json new file mode 100644 index 00000000..8fecaee3 --- /dev/null +++ b/umap/static/umap/locale/ja.json @@ -0,0 +1,350 @@ +{ + "About": "概要", + "Action not allowed :(": "そのアクションは禁止されています :(", + "Add a layer": "レイヤ追加", + "Add symbol": "シンボルを追加", + "Advanced actions": "拡張アクション", + "Advanced properties": "拡張プロパティ", + "Allow scroll wheel zoom?": "マウスホイールでのスクロールを許可?", + "An error occured": "エラーが発生しました", + "Are you sure you want to cancel your changes?": "本当に編集内容を破棄しますか?", + "Are you sure you want to clone this map and all its datalayers?": "すべてのデータレイヤを含むマップ全体を複製してよいですか?", + "Are you sure you want to delete the feature?": "地物を削除してよいですか?", + "Are you sure you want to delete this map?": "本当にこのマップを削除してよいですか?", + "Ball": "まち針", + "Bring feature to center": "この地物を中心に表示", + "Browse data": "データ内容表示", + "Cancel": "キャンセル", + "Cancel edits": "編集を破棄", + "Center map on your location": "閲覧者の位置をマップの中心に設定", + "Change map background": "背景地図を変更", + "Change symbol": "シンボル変更", + "Change tilelayers": "タイルレイヤの変更", + "Choose the format of the data to import": "インポートデータ形式を選択", + "Choose the layer of the feature": "地物のレイヤを選択", + "Choose the layer to import in": "インポート対象レイヤ選択", + "Circle": "円形", + "Clone this map": "マップを複製", + "Default": "デフォルト", + "Delete": "削除", + "Delete this feature": "地物を削除", + "Disable editing": "編集を終了", + "Display on load": "読み込み時に表示", + "Do you want to display a minimap?": "ミニマップを表示しますか?", + "Do you want to display popup footer?": "フッタをポップアップしますか?", + "Do you want to display the scale control?": "縮尺を表示しますか?", + "Download data": "データダウンロード", + "Draw a line": "ラインを描く", + "Draw a marker": "マーカーを配置", + "Draw a polygon": "ポリゴンを描く", + "Draw a polyline": "ポリゴンを描く", + "Drop": "しずく型", + "Dynamic": "ダイナミック", + "Edit": "編集", + "Edit feature's layer": "地物レイヤー編集", + "Edit map properties": "マッププロパティを編集", + "Edit map settings": "マップ設定を編集", + "Edit this feature": "地物を編集", + "Embed and share this map": "サイトへのマップ埋め込みと共有", + "Enable editing": "編集を有効化", + "Format": "フォーマット", + "From zoom": "表示開始するズームレベル", + "Go to «{feature}»": "«{feature}»を表示", + "Hide controls": "操作パネルを非表示", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "各ズームレベルでのポリゴン簡略化 (more = パフォーマンスと滑らかさ重視, less = 正確さ重視)", + "Import": "インポート", + "Import data": "データインポート", + "Inherit": "属性継承", + "Licence": "ライセンス", + "Map background credits": "背景地図クレジット", + "Map user content has been published under licence": "マップユーザコンテンツのライセンス", + "More controls": "詳細操作パネル", + "Optional. Same as color if not set.": "オプション。設定がない場合、色指定と同様", + "Optionnal.": "オプション", + "Paste here your data": "手持ちのデータからペースト", + "Please be sure the licence is compliant with your use.": "利用目的に沿ったライセンスを選択するようにしてください", + "Problem in the response": "レスポンスに問題があります", + "Problem in the response format": "レスポンス形式に問題があります", + "Provide an URL here": "URLを入力してください", + "Remote data": "サイト外のデータ", + "Save": "保存", + "Save current edits": "編集内容を保存", + "Save this center and zoom": "地図中心点とズームレベルを保存", + "Show/hide layer": "レイヤ表示/非表示", + "Start editing": "編集開始", + "Stop editing": "編集中断", + "The zoom and center have been setted.": "ズームと地図中心点の設定完了", + "To zoom": "非表示にするズームレベル", + "Untitled layer": "名称未定レイヤ", + "Untitled map": "名称未定マップ", + "Update permissions and editors": "権限設定とエディタを更新", + "Url": "URL", + "User content credits": "ユーザ作成データのクレジット", + "Where do we go from here?": "ここからどこへ向かいますか?", + "Zoom in": "ズームイン", + "Zoom out": "ズームアウト", + "Zoom to layer extent": "データがある位置を表示", + "Zoom to this feature": "この地物にズーム", + "color": "色", + "dash array": "破線表示", + "description": "概要", + "fill": "塗りつぶし", + "fill color": "塗りつぶし色", + "fill opacity": "塗りつぶし透過度", + "inherit": "属性継承", + "licence": "ライセンス", + "name": "名称", + "no": "いいえ", + "opacity": "透過度", + "stroke": "ストローク", + "weight": "線の太さ", + "yes": "はい", + "Editing": "編集", + "Embed the map": "マップ埋め込み", + "Short URL": "短縮URL", + "# one hash for main heading": "# ハッシュ1つで主な見出し", + "## two hashes for second heading": "## ハッシュ2つで第二見出し", + "### three hashes for third heading": "### ハッシュ3つで第三見出し", + "**double star for bold**": "**アスタリスク2つで太字**", + "*simple star for italic*": "*アスタリスク1つでイタリック体*", + "--- for an horizontal rule": "--- 横方向の罫線", + "All properties are imported.": "すべてのプロパティがインポートされました。", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "カンマ、タブ、セミコロンなどで区切られた値。SRSはWGS84が適用されます。ポイントのジオメトリのみがインポート対象です。インポートを行なう際は、カラムの先頭行を対象に «lat» と «lon» という文字列が検索されます。検索は行の最初から順に行われ、大文字と小文字は区別されません。その他のすべてのカラムは、プロパティとしてインポートされます。", + "Custom background": "独自背景", + "Help": "ヘルプ", + "Image: {{http://image.url.com}}": "画像: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "テキストとリンク: [[http://example.com|リンクのテキスト]]", + "Properties imported:": "インポートされたプロパティ:", + "Simple link: [[http://example.com]]": "シンプルリンク: [[http://example.com]]", + "Supported scheme": "対応スキーマ", + "Supported variables that will be dynamically replaced": "対応する動的な変数", + "Text formatting": "テキスト形式", + "attribution": "著作権表示", + "display name": "表示名", + "max zoom": "最大ズーム", + "min zoom": "最小ズーム", + "Skipping unkown geometry.type: {type}": "不明なジオメトリタイプ {type}をスキップしました", + "Please save the map before": "いちどマップの保存を行ってください", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "地物のプロパティを変数として扱うことが可能です。例: \"http://myserver.org/images/{name}.png\" であれば、{name}の部分はそれぞれのマーカーの \"name\" の値へ自動的に変換されます。", + "Transform to polygon": "ポリゴンへ変換", + "Transform to lines": "ラインへ変換", + "Choose the data format": "データ形式選択", + "Error in the tilelayer URL": "タイルレイヤのURLに誤りがあります", + "Directions from here": "ここからの距離", + "Choose a preset": "プリセット選択", + "Limit bounds": "表示範囲の制限", + "Use current bounds": "現在の表示範囲を利用", + "max East": "東端", + "max North": "北端", + "max South": "南端", + "max West": "西端", + "TMS format": "TMSフォーマット", + "Credits": "制作", + "Only visible features will be downloaded.": "表示中の地物のみがダウンロードされます。", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "現在表示中の領域をエディタで編集し、より正確なデータをOpenStreetMapへ書き込む", + "Default properties": "標準のプロパティ", + "User interface options": "ユーザインターフェースオプション", + "Image with custom width (in px): {{http://image.url.com|width}}": "画像の横幅カスタム値 (px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "デフォルトのマップ表示から現在の表示に切り替えますか?", + "Iframe export options": "Iframeエクスポートオプション", + "Include full screen link?": "フルスクリーンのリンクを含める?", + "See full screen": "フルスクリーン表示", + "height": "縦幅", + "width": "横幅", + "Clustered": "クラスタ化", + "Clustering radius": "クラスタ包括半径", + "GeoRSS (only link)": "GeoRSS (リンクのみ)", + "GeoRSS (title + image)": "GeoRSS (タイトル+画像)", + "Heatmap": "ヒートマップ", + "Heatmap radius": "ヒートマップ包括半径", + "Name and description": "名称・概要", + "Override clustering radius (default 80)": "クラスタ包括半径を上書き (基本値 80)", + "Override heatmap radius (default 25)": "ヒートマップ包括半径を上書き (基本値 25)", + "Proxy request": "プロキシリクエスト", + "Table": "テーブル", + "To use if remote server doesn't allow cross domain (slower)": "外部サーバがクロスドメインを許可していない場合に使用します (処理速度低下)", + "Type of layer": "レイヤタイプ", + "Filter…": "フィルタ...", + "Heatmap intensity property": "ヒートマップ強調設定", + "Optional intensity property for heatmap": "ヒートマップ強調表示オプション", + "Caption": "表題", + "Data browser": "データブラウザ", + "Do you want to display a caption bar?": "表題を表示しますか?", + "Do you want to display a panel on load?": "読み込み時にパネルを表示しますか?", + "None": "なし", + "by": "by", + "Name and description (large)": "名称・概要 (大)", + "Empty": "内容なし", + "Split line": "ラインを分割", + "Clone": "複製", + "Clone of {name}": "{name}の複製", + "Side panel": "サイドパネル", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "自動ズーム時のズームレベル", + "Do you want to display the «more» control?": "«more»操作パネルを表示しますか?", + "Auto": "自動", + "Default: name": "デフォルト: 名称", + "Property to use for sorting features": "地物並び替え時のプロパティ", + "Slideshow": "スライドショー", + "Start slideshow": "スライドショーを開始", + "Stop slideshow": "スライドショーを停止", + "Text color for the cluster label": "クラスタラベルのテキスト色", + "Zoom to the next": "次にズーム", + "Zoom to the previous": "前にズーム", + "Add a new property": "プロパティ追加", + "Are you sure you want to delete this property on all the features?": "すべての地物からこのプロパティを削除します。よろしいですか?", + "Close": "閉じる", + "Delete this property on all the features": "すべての地物からこのプロパティを削除", + "Edit properties in a table": "表形式でプロパティを編集", + "Please enter the name of the property": "プロパティの名称を入力してください", + "Please enter the new name of this property": "このプロパティに新しい名称を付与してください", + "Rename this property on all the features": "すべての地物に対してこのプロパティ名を変更", + "If false, the polygon will act as a part of the underlying map.": "無効にした場合、ポリゴンは背景地図の一部として動作します。", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframeの縦幅を指定(ピクセル): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "すべて表示", + "Dynamic properties": "動的なプロパティ", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "波括弧で地物プロパティをくくると(例: {name})、対応する値に動的に置き換えられます。", + "Long credits": "正式なクレジット", + "No licence has been set": "ライセンス指定がありません", + "Popup content template": "ポップアップコンテンツのテンプレート", + "Short credits": "短縮表示板クレジット", + "Will be displayed in the bottom right corner of the map": "地図の右下に表示されます", + "Will be visible in the caption of the map": "地図の脚注として表示されます", + "Map has been saved!": "地図の保存完了", + "Save anyway": "保存を再実行", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "おおおっと! 他の誰かがデータを編集したようです。あなたの編集内容をもう一度保存することもできますが、その場合、他の誰かが行った編集は削除されます。", + "Comma separated list of properties to use when filtering features": "地物をフィルタする際に利用する、カンマで区切ったプロパティのリスト", + "Keep current visible layers": "現在表示しているレイヤを保持", + "Coordinates": "位置情報", + "Latitude": "緯度", + "Longitude": "経度", + "Continue line (Ctrl-click)": "ラインを延長(Ctrl-クリック)", + "Start a hole here": "この部分に穴を作成", + "Click last point to finish shape": "クリックでシェイプの作成を終了", + "Click to add a marker": "クリックでマーカー追加", + "Click to continue drawing": "クリックで描画を継続", + "Click to start drawing a line": "クリックでラインの描画開始", + "Click to start drawing a polygon": "クリックでポリゴンの描画開始", + "Import in a new layer": "新規レイヤをインポート", + "Layer": "レイヤ", + "Please choose a format": "フォーマットを指定してください", + "Imports all umap data, including layers and settings.": "umapのデータをすべてインポート(レイヤ、設定を含む)", + "Invalid umap data": "不正なumapデータ", + "Invalid umap data in {filename}": "{filename} に不正なumapデータ", + "Add a line to the current multi": "現在のマルチにラインを追加", + "Add a polygon to the current multi": "現在のマルチにポリゴンを追加", + "Click to edit": "クリックで編集", + "Continue line": "ラインを延長", + "Delete this shape": "このシェイプを削除", + "Make main shape": "メインシェイプを作成", + "Merge lines": "ラインを結合", + "Remove shape from the multi": "マルチからシェイプを削除", + "Transfer shape to edited feature": "シェイプを編集済み地物へ変換", + "next": "次へ", + "previous": "前へ", + "Measure distances": "距離を計測", + "NM": "NM", + "kilometers": "キロメートル", + "km": "(km)", + "mi": "(マイル)", + "miles": "マイル", + "nautical miles": "海里", + "{area} acres": "{area} エイカー", + "{area} ha": "{area} ヘクタール", + "{area} m²": "{area} m²", + "{area} mi²": "{area} 平方マイル", + "{area} yd²": "{area} 平方ヤード", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} マイル", + "{distance} yd": "{distance} ヤード", + "Are you sure you want to restore this version?": "本当にこのバージョンを復元してよいですか?", + "Extract shape to separate feature": "シェイプを複数の地物に変換", + "Layer properties": "レイヤープロパティ", + "Restore this version": "このバージョンを復元する", + "Versions": "バージョン", + "You have unsaved changes.": "編集が保存されていません", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "カンマで数字を区切り、ストロークの破線パターンを指定。 例: \"5, 10, 15\"", + "Advanced transition": "拡張トランジション", + "Allow interactions": "インタラクションを許可", + "Autostart when map is loaded": "マップ読み込み時に自動で開始", + "Default interaction options": "標準のポップアップオプション", + "Default shape properties": "標準のシェイプ表示プロパティ", + "Default zoom level": "標準ズームレベル", + "Define link to open in a new window on polygon click.": "ポリゴンクリック時にリンクを新しいウィンドウで開く", + "Delete this vertex (Alt-click)": "このポイントを削除(Altを押しながらクリック)", + "Display the control to open OpenStreetMap editor": "OpenStreetMapエディタを起動するパネルを表示", + "Display the data layers control": "データレイヤ操作パネルを表示", + "Display the embed control": "サイトへのマップ埋め込みパネルを表示", + "Display the fullscreen control": "フルスクリーンパネルを表示", + "Display the locate control": "現在地パネルを表示", + "Display the measure control": "縮尺パネルを表示", + "Display the search control": "検索パネルを表示", + "Display the tile layers control": "タイルレイヤパネルを表示", + "Display the zoom control": "ズーム変更パネルを表示", + "Exit Fullscreen": "フルスクリーン表示を解除", + "Fetch data each time map view changes.": "地図表示が変更されたらデータを再取得する", + "Filter keys": "フィルタに使うキー", + "Icon shape": "アイコン形状", + "Icon symbol": "アイコンシンボル", + "Interaction options": "ポップアップオプション", + "Label key": "ラベル表示するキー", + "Link to…": "リンク", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "CSSで有効な値を指定してください (例: DarkBlue, #123456など)", + "No results": "検索結果なし", + "Popup style": "ポップアップスタイル", + "Replace layer content": "レイヤ内容を差し替える", + "Save this location as new feature": "この場所を新しい地物として保存", + "Search location": "地名で検索", + "Set URL": "URLを設定", + "Shape properties": "シェイプ表示プロパティ", + "Simplify": "簡略化", + "Sort key": "並び替えに使うキー", + "The name of the property to use as feature label (ex.: \"nom\")": "地物のラベルとして用いるプロパティ名を入力する", + "Toggle edit mode (shift-click)": "編集モードを切り替える(シフトキーを押しながらクリック)", + "View Fullscreen": "フルスクリーン表示", + "Whether to display or not polygons paths.": "ポリゴンの外周線を表示するかどうか", + "Whether to fill polygons with color.": "ポリゴンを塗りつぶすかどうか", + "Zoom to this place": "この場所にズーム", + "always": "常時", + "clear": "クリア", + "define": "指定", + "hidden": "隠す", + "never": "表示しない", + "Automatic": "自動", + "Clone this feature": "この地物を複製", + "Display label": "ラベルを表示", + "Drag to reorder": "ドラッグして並べ替える", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframeの縦幅および横幅を指定(ピクセル): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "ラベルをクリックしてポップアップを表示", + "Label direction": "ラベルの位置", + "Manage layers": "レイヤ管理", + "On the bottom": "下寄せ", + "On the left": "左寄せ", + "On the right": "右寄せ", + "On the top": "上寄せ", + "Only display label on mouse hover": "カーソルを乗せたときにラベルを表示", + "Open link in…": "リンクの開き方", + "Unable to detect format of file {filename}": "ファイル形式を認識できません {filename}", + "collapsed": "ボタン", + "expanded": "リスト", + "iframe": "iframe", + "new window": "新規ウィンドウ", + "parent window": "親ウィンドウ", + "{count} errors during import: {message}": "インポートで {count} 個のエラー: {message}", + "Are you sure you want to delete this layer?": "本当にこのレイヤを削除してよいですか?", + "Delete layer": "レイヤを削除", + "Error while fetching {url}": "{url} の取得エラー", + "Home": "ホーム", + "Delete all layers": "すべてのレイヤを削除", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "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…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/lt.json b/umap/static/umap/locale/lt.json new file mode 100644 index 00000000..e4613a26 --- /dev/null +++ b/umap/static/umap/locale/lt.json @@ -0,0 +1,350 @@ +{ + "About": "Apie", + "Action not allowed :(": "Veiksmas nėra leidžiamas :(", + "Add a layer": "Pridėti sluoksnį", + "Add symbol": "Pridėti simbolį", + "Advanced actions": "Sudėtingesni veiksmai", + "Advanced properties": "Sudėtingesni nustatymai", + "Allow scroll wheel zoom?": "Leisti pelės ratuko veiksmus?", + "An error occured": "Įvyko klaida", + "Are you sure you want to cancel your changes?": "Ar tikrai nori atšaukti savo pakeitimus?", + "Are you sure you want to clone this map and all its datalayers?": "Ar tikrai norite nukopijuoti šį žemėlapį ir visus jo duomenų sluoksnius?", + "Are you sure you want to delete the feature?": "Ar tikrai norite ištrinti šį objektą?", + "Are you sure you want to delete this map?": "Ar Jūs tikrai norite ištrinti šį žemėlapį?", + "Ball": "Rutulys", + "Bring feature to center": "Pastumti objektą į centrą", + "Browse data": "Peržiūrėti duomenis", + "Cancel": "Atšaukti", + "Cancel edits": "Atšaukti pakeitimus", + "Center map on your location": "Centruoti pagal Jūsų vietovę", + "Change map background": "Keisti žemėlapio foną", + "Change symbol": "Pakeisti simbolį", + "Change tilelayers": "Pakeisti sluoksnius", + "Choose the format of the data to import": "Pasirinkite importuojamų uomenų formatą", + "Choose the layer of the feature": "Pasirinkite objekto sluoksnį", + "Choose the layer to import in": "Pasirinkite sluoksnį importavimui", + "Circle": "Apskritimas", + "Clone this map": "Klonuoti šį žemėlapį", + "Default": "Pagal nutylėjimą", + "Delete": "Trinti", + "Delete this feature": "Ištrinti šį objektą", + "Disable editing": "Uždrausti redagavimą", + "Display on load": "Rodyti pasikrovus", + "Do you want to display a minimap?": "Ar norite rodyti mini žemėlapį?", + "Do you want to display popup footer?": "Ar norite rodyti iškylančio lango paraštę?", + "Do you want to display the scale control?": "Ar norite rodyti žemėlapio skalės valdymą?", + "Download data": "Atsisiųsti duomenis", + "Draw a line": "Piešti liniją", + "Draw a marker": "Padėti žymeklį", + "Draw a polygon": "Piešti poligoną", + "Draw a polyline": "Piešti linijas", + "Drop": "Atmesti", + "Dynamic": "Dinaminis", + "Edit": "Redaguoti", + "Edit feature's layer": "Redaguoti objekto sluoksnį", + "Edit map properties": "Keisti žemėlapio nustatymus", + "Edit map settings": "Keisti žemėlapio nustatymus", + "Edit this feature": "Redaguoti šį objektą", + "Embed and share this map": "Įkelti ir dalintis šiuo žemėlapiu", + "Enable editing": "Leisti redaguoti", + "Format": "Formatas", + "From zoom": "Mažiausias mastelis", + "Go to «{feature}»": "Eiti į «{feature}»", + "Hide controls": "Slėpti mygtukus", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "Kaip stipriai supaprastinti linijas kiekviename mastelyje (daugiau - diesnis greitis ir lygesnis vaizdas, mažiau - tikslesnis atvaizdavimas)", + "Import": "Importuoti", + "Import data": "Importuoti duomenis", + "Inherit": "Paveldėti", + "Licence": "Licenzija", + "Map background credits": "Žemėlapio fono naudojimo sąlygos", + "Map user content has been published under licence": "Vartotojo turinys buvo publikuotas pagal licenziją", + "More controls": "Daugiau valdymo mygtukų", + "Optional. Same as color if not set.": "Neprivalomas. Toks pats kaip ir spalva, jei nenustatyta.", + "Optionnal.": "Neprivalomas.", + "Paste here your data": "Įklijuokite Jūsų duomenis čia", + "Please be sure the licence is compliant with your use.": "Prašom pasitikrinti ar licezija tikrai tinka Jūsų poreikiams.", + "Problem in the response": "Klaida atsakyme", + "Problem in the response format": "Klaida atsakymo formate", + "Provide an URL here": "Įvęskite adresą", + "Remote data": "Išoriniai duomenys", + "Save": "Išsaugoti", + "Save current edits": "Išsaugoti pakeitimus", + "Save this center and zoom": "Išsaugoti šį centrą ar mastelį.", + "Show/hide layer": "Rodyti/slėpti sluoksnį", + "Start editing": "Pradėti redagavimą", + "Stop editing": "Baigti redagavimą", + "The zoom and center have been setted.": "Šis mastelis ir centras išsaugoti.", + "To zoom": "Padidinti", + "Untitled layer": "Bevardis sluoksnis", + "Untitled map": "Be pavadinimo", + "Update permissions and editors": "Atnaujinti leidimus ir redaguotojus", + "Url": "Url", + "User content credits": "Vartotojo duomenų sąlygos", + "Where do we go from here?": "Kur norite eiti iš čia?", + "Zoom in": "Padidinti mastelį", + "Zoom out": "Didinti", + "Zoom to layer extent": "Išdidinti iki sluoksnio ribų", + "Zoom to this feature": "Išdidinti šį objektą", + "color": "spalva", + "dash array": "brūkšnių masyvas", + "description": "aprašymas", + "fill": "užpildyti", + "fill color": "ploto spalva", + "fill opacity": "ploto skaidrumas", + "inherit": "paveldėti", + "licence": "licenzija", + "name": "vardas", + "no": "ne", + "opacity": "nepermatomumas", + "stroke": "brūkšnys", + "weight": "svoris", + "yes": "taip", + "Editing": "Redaguojama", + "Embed the map": "Įsikelti šį žemėlapį", + "Short URL": "Trumpas URL", + "# one hash for main heading": "# viena grotelė pagrindinei antraštei", + "## two hashes for second heading": "## dvi grotelės antraštei", + "### three hashes for third heading": "### trys grotelės trečio lygio pastraipai", + "**double star for bold**": "**dviguba žvaigždutė paryškintam tekstui**", + "*simple star for italic*": "*viena žvaigždutė pasvyriajam tekstui*", + "--- for an horizontal rule": "--- horizontaliai linijai", + "All properties are imported.": "Visi objektai importuoti.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Kableliu, tab'u arba kabliataškiu atskirtos reikšmės. SRS WGS84 yra palaikomas. Tik taškai yra importuoti. Importuojant bus patikrintos stulpelių antraštės ieškant pavadinimų \"lat\" ir \"lon\". Visi kiti stulpeliai bus įtraukti kaip papildomi atributai.", + "Custom background": "Pritaikytas fonas", + "Help": "Pagalba", + "Image: {{http://image.url.com}}": "Paveikslas: {{http://image.url.com/image.jpeg}}", + "Link with text: [[http://example.com|text of the link]]": "Nuoroda tekstui:: [[http://example.com|nuorodos tekstas]]", + "Properties imported:": "Importuoti objektai:", + "Simple link: [[http://example.com]]": "Paprasta nuoroda: [[http://example.com]]", + "Supported scheme": "Palaikoma struktūra", + "Supported variables that will be dynamically replaced": "Palaikomi kintamieji bus automatiškai perrašyti", + "Text formatting": "Teksto formatavimas", + "attribution": "atributai", + "display name": "rodyti pavadinimą", + "max zoom": "didžiausias mastelis", + "min zoom": "mažiausias mastelis", + "Skipping unkown geometry.type: {type}": "Praleidžiamas nežinomas geometrijos tipas: {type}", + "Please save the map before": "Prašom išsaugoti žemėlapį prieš", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "Jūs galite naudoti objektų atributus kaip kintamuosius, pvz.: tekste \"http://myserver.org/images/{name}.png\" {name} bus automatiškai pakeistas į žymeklio reikšmę 'name'.", + "Transform to polygon": "Transformuoti į poligoną", + "Transform to lines": "Transformuoti į linijas", + "Choose the data format": "Pasirinkite duomenų formatą", + "Error in the tilelayer URL": "Klaida tile-sluoksnio URL", + "Directions from here": "Nuorodos iš šio taško", + "Choose a preset": "Pasirinkite šabloną", + "Limit bounds": "Nustatyti ribas", + "Use current bounds": "Naudoti dabartines ribas", + "max East": "max Rytų", + "max North": "max Šiaurės", + "max South": "max Pietų", + "max West": "max Vakarų", + "TMS format": "TMS formatas", + "Credits": "Apie kūrėjus", + "Only visible features will be downloaded.": "Tik matomi objektai bus atsiųsti.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Atidaryti šį plotą duomenų redagavimui per OpenStreetMap", + "Default properties": "Nustatymai pagal nutylėjimą", + "User interface options": "Vartotojo sąsajos nustatymai", + "Image with custom width (in px): {{http://image.url.com|width}}": "Paveikslo plotis (pikseliais): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Naudoti esamą vaizdą vietoje standartinio?", + "Iframe export options": "Iframe export nustatymai", + "Include full screen link?": "Įtraukti nuorodą į viso ekrano vaizdą?", + "See full screen": "Peržiūrėti per visą ekraną", + "height": "aukštis", + "width": "plotis", + "Clustered": "Sugrupuota", + "Clustering radius": "Grupavimo spindulys", + "GeoRSS (only link)": "GeoRSS (tik nuoroda)", + "GeoRSS (title + image)": "GeoRSS (pavadinimas + paveikslas)", + "Heatmap": "Tankio žemėlapis", + "Heatmap radius": "Tankio žemėlapio spindulys", + "Name and description": "Vardas ir aprašymas", + "Override clustering radius (default 80)": "Perrašyti grupavimo spindulį (pagal nutylėjimą 80)", + "Override heatmap radius (default 25)": "Perrašyti tankio žemėlapio spindulį (pagal nutylėjimą 25)", + "Proxy request": "Proxy užklausa", + "Table": "Lentelė", + "To use if remote server doesn't allow cross domain (slower)": "Naudoti jei serveris neleidžia cross domain užklausų (lėtesnis sprendimas)", + "Type of layer": "Sluoksnio tipas", + "Filter…": "Filtruoti...", + "Heatmap intensity property": "Tankio žemėlpaio faktorius", + "Optional intensity property for heatmap": "Papildomas intensyvumo faktorius", + "Caption": "Antraštė", + "Data browser": "Duomenų naršyklė", + "Do you want to display a caption bar?": "Ar norite rodyti antraštę?", + "Do you want to display a panel on load?": "Ar norite rodyti panelę kraunantis?", + "None": "Nieko", + "by": "pagal", + "Name and description (large)": "Pavadinimas ir aprašymas (ilgas)", + "Empty": "Tuščias", + "Split line": "Padalinti liniją", + "Clone": "Kopijuoti", + "Clone of {name}": "{name} kopija", + "Side panel": "Šoninis skydelis", + "Powered by Leaflet and Django, glued by uMap project.": "Pagaminta naudojant Leaflet ir Django, apjungta pagal uMap projektą.", + "Zoom level for automatic zooms": "Priartinimo lygis automatiniui režimui", + "Do you want to display the «more» control?": "Ar norite rodyti nuorodą \"daugiau\"?", + "Auto": "Automatiškai", + "Default: name": "Pagal nutylėjimą: name", + "Property to use for sorting features": "Savybės pavadinimas rūšiavimui", + "Slideshow": "Peržiūra", + "Start slideshow": "Pradėti peržiūrą", + "Stop slideshow": "Stabdyti peržiūrą", + "Text color for the cluster label": "Teksto spalva klasterio pavadinimui", + "Zoom to the next": "Priartinti sekantį", + "Zoom to the previous": "Priartinti ankstesnį", + "Add a new property": "Pridėti naują savybę", + "Are you sure you want to delete this property on all the features?": "Ar tikrai norite pašalinti šią savybę visiem objektams?", + "Close": "Uždaryti", + "Delete this property on all the features": "Pašalinti šį parametrą visuose objektuose", + "Edit properties in a table": "Redaguoti savybes lentelėje", + "Please enter the name of the property": "Įveskite, prašom, savybės pavadinimą", + "Please enter the new name of this property": "Įveskite, prašom, naują savybės pavadinimą", + "Rename this property on all the features": "Pervadinti šią savybę visuose objektuose", + "If false, the polygon will act as a part of the underlying map.": "Jei false, poligonas bus pagrindinio žemėlapio dalis.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe su nurodytu aukščiu (pikseliais): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "Išsaugoti viską", + "Dynamic properties": "Dinaminės savybės", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Objekto savybės tarp laužtinių skliaustų, pvz. {name}, bus automatiškai pakeisto atitinkamomis reikšmėmis.", + "Long credits": "Apie kūrėjus", + "No licence has been set": "Nenustatyta licenzija", + "Popup content template": "Popup'o turinio šablonas", + "Short credits": "Trumpai apie kūrėjus", + "Will be displayed in the bottom right corner of the map": "Bus rodomas apatiniame dešiniame žemėlapio kampe", + "Will be visible in the caption of the map": "Bus matoma žemėlapio antraštėje", + "Map has been saved!": "Žemėlapis išsaugotas!", + "Save anyway": "Išsaugoti bet kuriuo atveju", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Dėmesio! Kažkas kitas jau paredagavo šiuos duomenis. Jūs galite išsaugoti, bet tuomet bus prarasti kiti pakeitimai.", + "Comma separated list of properties to use when filtering features": "Kableliu atskirtas savybių sąrašas naudojamas objektų filtrui", + "Keep current visible layers": "Esamus sluoksnius palikti matomais", + "Coordinates": "Koordinatės", + "Latitude": "Platuma", + "Longitude": "Ilguma", + "Continue line (Ctrl-click)": "Tęsti liniją (Ctrl klavišas)", + "Start a hole here": "Piešti skylę čia", + "Click last point to finish shape": "Paspauskite ant paskutinio taško kad baigti piešimą", + "Click to add a marker": "Paspauskite kad pridėti žymeklį", + "Click to continue drawing": "Paspauskite kad tęsti piešimą", + "Click to start drawing a line": "Paspauskite ir pradėsite piešti liniją", + "Click to start drawing a polygon": "Paspauskite ir pradėsite priešti poligoną", + "Import in a new layer": "Importuoti naują sluoksnį", + "Layer": "Sluoksnis", + "Please choose a format": "Pasirinkite formatą", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Matuoti atstumus", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "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…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/nl.json b/umap/static/umap/locale/nl.json new file mode 100644 index 00000000..28ea5da1 --- /dev/null +++ b/umap/static/umap/locale/nl.json @@ -0,0 +1,350 @@ +{ + "About": "Over", + "Action not allowed :(": "Handeling niet toegestaan :(", + "Add a layer": "Laag toevoegen", + "Add symbol": "Symbool toevoegen", + "Advanced actions": "Geavanceerde acties", + "Advanced properties": "Geavanceerde eigenschappen", + "Allow scroll wheel zoom?": "Zoomen met scrollwieltje toestaan?", + "An error occured": "Er is een fout opgetreden", + "Are you sure you want to cancel your changes?": "Ben je zeker dat je je wijzigingen wil annuleren?", + "Are you sure you want to clone this map and all its datalayers?": "Ben je zeker dat je deze kaart en alle gegevenslagen wil klonen?", + "Are you sure you want to delete the feature?": "Ben je zeker dat je het object wil verwijderen?", + "Are you sure you want to delete this map?": "Ben je zeker dat je deze kaart wil verwijderen?", + "Ball": "Kopspeld", + "Bring feature to center": "Object in het midden zetten", + "Browse data": "Gegevens doorbladeren", + "Cancel": "Annuleren", + "Cancel edits": "Bewerkingen annuleren", + "Center map on your location": "Centreer kaart op je locatie", + "Change map background": "Verander kaartachtergrond", + "Change symbol": "Symbool veranderen", + "Change tilelayers": "Andere kaartachtergrond instellen", + "Choose the format of the data to import": "Kies het formaat van de te importeren gegevens", + "Choose the layer of the feature": "Kies de laag van het object", + "Choose the layer to import in": "Kies de laag om in te importeren", + "Circle": "Cirkel", + "Clone this map": "Deze kaart klonen", + "Default": "Standaard", + "Delete": "Verwijderen", + "Delete this feature": "Dit object verwijderen", + "Disable editing": "Bewerken uitschakelen", + "Display on load": "Tonen bij laden", + "Do you want to display a minimap?": "Wil je een minikaartje tonen?", + "Do you want to display popup footer?": "Wil je een popup-footer tonen?", + "Do you want to display the scale control?": "Wil je het schaal-besturingselement tonen?", + "Download data": "Gegevens downloaden", + "Draw a line": "Teken een lijn", + "Draw a marker": "Teken een punt", + "Draw a polygon": "Teken een veelhoek", + "Draw a polyline": "Teken een veelhoek", + "Drop": "Drop", + "Dynamic": "Dynamisch", + "Edit": "Bewerken", + "Edit feature's layer": "Objectlaag bewerken", + "Edit map properties": "Kaarteigenschappen wijzigen", + "Edit map settings": "Kaartinstellingen aanpassen", + "Edit this feature": "Dit object bewerken", + "Embed and share this map": "Deze kaart insluiten en delen", + "Enable editing": "Bewerken inschakelen", + "Format": "Formaat", + "From zoom": "Van zoom", + "Go to «{feature}»": "Ga naar «{feature}»", + "Hide controls": "Verberg besturingselementen", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "Graad van vereenvoudiging van een veelhoek, per zoomniveau. (Hogere waarde = betere prestaties, lagere waarde = getrouwere precisie)", + "Import": "Importeer", + "Import data": "Gegevens importeren", + "Inherit": "Overerving", + "Licence": "Licentie", + "Map background credits": "Bronvermelding kaartachtergrond", + "Map user content has been published under licence": "Inhoud toegevoegd aan deze kaart wordt gepubliceerd onder deze licentievoorwaarden", + "More controls": "Meer instelknoppen", + "Optional. Same as color if not set.": "Optioneel. Gelijk aan kleur indien niet ingesteld", + "Optionnal.": "Optioneel", + "Paste here your data": "Plak hier uw gegevens", + "Please be sure the licence is compliant with your use.": "Zorg er aub voor dat je je aan de licentievoorwaarden houdt", + "Problem in the response": "Probleem met het antwoord gekregen van de server", + "Problem in the response format": "Probleem met het formaat van het antwoord van de server", + "Provide an URL here": "Geef hier een URL-adres op", + "Remote data": "Data van elders", + "Save": "Opslaan", + "Save current edits": "Huidige bewerkingen opslaan", + "Save this center and zoom": "Bewaar deze positie op de kaart en het zoomniveau", + "Show/hide layer": "Laat tonen/verbergen", + "Start editing": "Starten met editeren", + "Stop editing": "Stop met editeren", + "The zoom and center have been setted.": "Het zoomniveau en de positie op de kaarten zijn ingesteld", + "To zoom": "Tot zoomniveau", + "Untitled layer": "Laag zonder naam", + "Untitled map": "Kaart zonder naam", + "Update permissions and editors": "Bijwerken van permissies en bewerkers", + "Url": "URL", + "User content credits": "Gebruikersinhoud bronvermelding", + "Where do we go from here?": "Waar gaan we nu heen?", + "Zoom in": "Inzoomen", + "Zoom out": "Uitzoomen", + "Zoom to layer extent": "Zodanig zoomen dat alle data in venster past", + "Zoom to this feature": "Op dit object inzoomen", + "color": "kleur", + "dash array": "soort stippellijn", + "description": "beschrijving", + "fill": "opvullen", + "fill color": "opvulkleur", + "fill opacity": "(on)doorzichtigheid van inkleuring", + "inherit": "overerven", + "licence": "licentie", + "name": "naam", + "no": "neen", + "opacity": "ondoorzichtigheid", + "stroke": "lijndikte", + "weight": "weight", + "yes": "ja", + "Editing": "Bewerken", + "Embed the map": "Kaart inbedden", + "Short URL": "Korte URL", + "# one hash for main heading": "# een hekje voor hoofding 1", + "## two hashes for second heading": "## twee hekjes voor hoofding 2", + "### three hashes for third heading": "### twee hekjes voor hoofding 3", + "**double star for bold**": "**Twee sterretjes voor vet**", + "*simple star for italic*": "*Enkel sterretje voor cursief*", + "--- for an horizontal rule": "--- voor een horizontale scheidingslijn", + "All properties are imported.": "Alle eigenschappen zijn geïmporteerd", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Komma-, tabulator- of puntkomma-gescheiden waardes, SRS WGS84 wordt verondersteld. Enkel puntgeometrieën wordne geímporteerd. Bij het importeren wordt gekeken naar kolomkoppen die met «lat» of «lon» beginnen. Alle andere kolommen worden als eigenschappen geïmporteerd", + "Custom background": "Custom background", + "Help": "Help", + "Image: {{http://image.url.com}}": "Image: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link with text: [[http://example.com|text of the link]]", + "Properties imported:": "Properties imported:", + "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]", + "Supported scheme": "Supported scheme", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "Text formatting", + "attribution": "attribution", + "display name": "display name", + "max zoom": "max zoom", + "min zoom": "min zoom", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "Please save the map before", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "Objecteigenschappen kunnen gebruikt worden als variabelen. Bv in het geval van \"http://myserver.org/images/{name}.png\", zal de {name}-variabele worden vervangen door de waarde in \"name\" van elk van de markers.", + "Transform to polygon": "Omzetten naar veelhoed", + "Transform to lines": "Omzetten naar lijnen", + "Choose the data format": "Gegevensformaat selecteren", + "Error in the tilelayer URL": "Er is een fout opgetreden met de achtergrondtegels", + "Directions from here": "Wegbeschrijving vanaf hier", + "Choose a preset": "Kies een voorkeuzeinstelling", + "Limit bounds": "Gebied begrenzen", + "Use current bounds": "Begrensd gebied instellen op wat nu te zien is", + "max East": "maximale oostwaarde", + "max North": "maximale noordwaarde", + "max South": "maximale zuidwaarde", + "max West": "maximale westwaarde", + "TMS format": "TMS-formaat", + "Credits": "Bronvermelding", + "Only visible features will be downloaded.": "Enkel zichtbare objecten zullen worden geëxporteerd", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open dit gedeelte van de kaart in een editor, zodat u de kaartgegeven in Openstreetmap zelf kan bijwerken.", + "Default properties": "Standaardeigenschappen", + "User interface options": "Gebruikersinterfaceopties", + "Image with custom width (in px): {{http://image.url.com|width}}": "Beeld met standaardbreedte (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Huidig zicht in plaats van standaard kaartaanzicht", + "Iframe export options": "Iframe exporteeropties", + "Include full screen link?": "Include full screen link?", + "See full screen": "Op volledig scherm weergeven", + "height": "hoogte", + "width": "breedte", + "Clustered": "Bij elkaar gevoegd", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (only link)", + "GeoRSS (title + image)": "GeoRSS (title + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Name and description", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Proxy request", + "Table": "Table", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "Type of layer", + "Filter…": "Filter…", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Caption", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Do you want to display a caption bar?", + "Do you want to display a panel on load?": "Do you want to display a panel on load?", + "None": "None", + "by": "by", + "Name and description (large)": "Name and description (large)", + "Empty": "Empty", + "Split line": "Split line", + "Clone": "Clone", + "Clone of {name}": "Clone of {name}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Do you want to display the «more» control?", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Close", + "Delete this property on all the features": "Delete this property on all the features", + "Edit properties in a table": "Edit properties in a table", + "Please enter the name of the property": "Please enter the name of the property", + "Please enter the new name of this property": "Please enter the new name of this property", + "Rename this property on all the features": "Rename this property on all the features", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordinates", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Layer", + "Please choose a format": "Please choose a format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Afstanden meten", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "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…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/pl.json b/umap/static/umap/locale/pl.json new file mode 100644 index 00000000..be645525 --- /dev/null +++ b/umap/static/umap/locale/pl.json @@ -0,0 +1,350 @@ +{ + "About": "Informacje", + "Action not allowed :(": "Operacja niedozwolona :(", + "Add a layer": "Dodaj warstwę", + "Add symbol": "Dodaj symbol", + "Advanced actions": "Zaawansowane operacje", + "Advanced properties": "Zaawansowane właściwości", + "Allow scroll wheel zoom?": "Pozwalać na przybliżanie kółkiem?", + "An error occured": "Wystąpił błąd", + "Are you sure you want to cancel your changes?": "Na pewno chcesz porzucić swoje zmiany?", + "Are you sure you want to clone this map and all its datalayers?": "Na pewno chcesz sklonować tą mapę razem z jej warstwami?", + "Are you sure you want to delete the feature?": "Na pewno chcesz usunąć obiekt?", + "Are you sure you want to delete this map?": "Na pewno chcesz usunąć tą mapę?", + "Ball": "Piłka", + "Bring feature to center": "Przenieś obiekt do środka", + "Browse data": "Przeglądaj dane", + "Cancel": "Anuluj", + "Cancel edits": "Anuluj edycje", + "Center map on your location": "Wyśrodkuje mapę na twojej lokalizacji", + "Change map background": "Zmień podkład mapy", + "Change symbol": "Zmień symbol", + "Change tilelayers": "Zmień podkład", + "Choose the format of the data to import": "Wybierz format importowanych danych", + "Choose the layer of the feature": "Wybierz warstwę obiektu", + "Choose the layer to import in": "Wybierz warstwę docelową", + "Circle": "Kółko", + "Clone this map": "Sklonuj mapę", + "Default": "Domyślne", + "Delete": "Usuń", + "Delete this feature": "Usuń ten obiekt", + "Disable editing": "Wyłącz edytor", + "Display on load": "Wyświetl przy ładowaniu", + "Do you want to display a minimap?": "Chcesz wyświetlać małą mapę?", + "Do you want to display popup footer?": "Chcesz wyświetlacz stopkę dymka?", + "Do you want to display the scale control?": "Chcesz wyświetlać kontrolkę ze skalą?", + "Download data": "Pobierz dane", + "Draw a line": "Rysuj linię", + "Draw a marker": "Dodaj znacznik", + "Draw a polygon": "Rysuj obszar", + "Draw a polyline": "Rysuj linię", + "Drop": "Wyrzuć", + "Dynamic": "Dynamiczne", + "Edit": "Edytuj", + "Edit feature's layer": "Edytuj warstwę z obiektami", + "Edit map properties": "Edytuj właściwości mapy", + "Edit map settings": "Edytuj ustawienia mapy", + "Edit this feature": "Edytuj ten obiekt", + "Embed and share this map": "Osadź i udostępnij tą mapę", + "Enable editing": "Włącz edytor", + "Format": "Format", + "From zoom": "Od przybliżenia", + "Go to «{feature}»": "Idź do «{feature}»", + "Hide controls": "Ukryj przyciski", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "Jak bardzo uprościć obszar na każdym poziomie przybliżenia (więcej = większa wydajność i gładki wygląd, mniej = większa dokładność)", + "Import": "Importuj", + "Import data": "Importuj dane", + "Inherit": "Dziedziczne", + "Licence": "Licencja", + "Map background credits": "Źródło tła mapy", + "Map user content has been published under licence": "Zawartość mapy użytkownika została opublikowana pod licencją", + "More controls": "Więcej przycisków", + "Optional. Same as color if not set.": "Opcjonalne. Taki sam jak kolor jeśli nie podano.", + "Optionnal.": "Opcjonalne.", + "Paste here your data": "Wklej tutaj swoje dane", + "Please be sure the licence is compliant with your use.": "Upewnij się czy licencja jest zgodna z twoim użyciem.", + "Problem in the response": "Problem z odpowiedzią", + "Problem in the response format": "Problem z formatem odpowiedzi", + "Provide an URL here": "Wprowadź tutaj adres URL", + "Remote data": "Zdalne dane", + "Save": "Zapisz", + "Save current edits": "Zapisz obecne edycje", + "Save this center and zoom": "Zapisz obecną pozycję i przybliżenie", + "Show/hide layer": "Pokaż/ukryj warstwę", + "Start editing": "Rozpocznij edycję", + "Stop editing": "Zakończ edycję", + "The zoom and center have been setted.": "Przybliżenie i środek zostały ustawione.", + "To zoom": "Przybliżać", + "Untitled layer": "Warstwa bez nazwy", + "Untitled map": "Mapa bez nazwy", + "Update permissions and editors": "Aktualizuj uprawnienia i edytory", + "Url": "Adres URL", + "User content credits": "Źródło treści użytkownika", + "Where do we go from here?": "Gdzie można stąd pojechać?", + "Zoom in": "Przybliż", + "Zoom out": "Oddal", + "Zoom to layer extent": "Przybliż do warstwy", + "Zoom to this feature": "Przybliż to tego obiektu", + "color": "kolor", + "dash array": "przerywana linia", + "description": "opis", + "fill": "wypełnienie", + "fill color": "kolor wypełnienia", + "fill opacity": "stopień wypełnienia", + "inherit": "dziedziczny", + "licence": "licencja", + "name": "nazwa", + "no": "nie", + "opacity": "przeźroczystość", + "stroke": "obramowanie", + "weight": "waga", + "yes": "tak", + "Editing": "Edycja", + "Embed the map": "Osadź mapę na stronie", + "Short URL": "Krótki adres URL", + "# one hash for main heading": "# jeden krzyżyk - nagłówek pierwszego poziomu", + "## two hashes for second heading": "# dwa krzyżyki - nagłówek drugiego poziomu", + "### three hashes for third heading": "# trzy krzyżyki - nagłówek trzeciego poziomu", + "**double star for bold**": "**podwójna gwiazdka do pogrubienia**", + "*simple star for italic*": "*pojedyncza gwiazdka do pochylenia*", + "--- for an horizontal rule": "--- dla poziomej linii", + "All properties are imported.": "Zaimportowano wszystkie właściwości", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Wartości powinny być oddzielone przecinkiem, średnikiem lub znakiem tabulacji. Układ współrzędnych WGS84 jest wymagany. Tylko geometrie typu Punkt zostaną zaimportowane. Import sprawdzi nagłówki kolumn czy zawierają \"lat\" i \"lon\" na początku nagłówka, wielkość liter nie ma znaczenia. Wszystkie inne kolumny zostaną zaimportowane jako właściwości tych punktów.", + "Custom background": "Własne tło", + "Help": "Pomoc", + "Image: {{http://image.url.com}}": "Obrazek: {{http://obrazek.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link z tekstem: [[http://przyklad.pl|tekst zamiast linku]]", + "Properties imported:": "Zaimportowane właściwości:", + "Simple link: [[http://example.com]]": "Prosty link: [[http://przyklad.pl]]", + "Supported scheme": "Obsługiwany schemat", + "Supported variables that will be dynamically replaced": "Obsługiwane zmienne zostaną dynamicznie zamienione", + "Text formatting": "Formatowanie tekstu", + "attribution": "oznaczenie autorstwa", + "display name": "wyświetl nazwę", + "max zoom": "maksymalne powiększenie", + "min zoom": "minimalne powiększenie", + "Skipping unkown geometry.type: {type}": "Pomijanie nieznanego geometry.type: {type}", + "Please save the map before": "Proszę najpierw zapisać mapę", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "Możesz używać właściwości obiektu jako zmiennych np. z \"http://myserver.org/images/{name}.png\", zmienna {name} zostanie zastąpiona przez wartość \"name\" dla każdego znacznika.", + "Transform to polygon": "Przekształć w wielokąt", + "Transform to lines": "Przekształć na linie", + "Choose the data format": "Wybierz format danych", + "Error in the tilelayer URL": "Błąd w adresie URL podkładu", + "Directions from here": " Kierunki stąd", + "Choose a preset": "Wybierz szablon", + "Limit bounds": "Limit granic", + "Use current bounds": "Użyj bieżących granic", + "max East": "granica wschodnia", + "max North": "granica północna", + "max South": "granica południowa", + "max West": "granica zachodnia", + "TMS format": "Format TMS", + "Credits": "Źródło", + "Only visible features will be downloaded.": "Tylko widoczne obiekty zostaną pobrane.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Otwórz ten zakres mapy w edytorze, by wprowadzić do OpenStreetMap dokładniejsze dane", + "Default properties": "Domyślne właściwości", + "User interface options": "Opcje interfejsu", + "Image with custom width (in px): {{http://image.url.com|width}}": "Obrazek z własną szerokością (w pikselach) {{http://obrazek.url.com|szerokość}}", + "Current view instead of default map view?": "Obecny widok mapy zamiast domyślnego?", + "Iframe export options": "Opcje eksportu Iframe", + "Include full screen link?": "Dołączyć link do pełnego ekranu?", + "See full screen": "Pełny ekran", + "height": "wysokość", + "width": "szerokość", + "Clustered": "Zgrupowane", + "Clustering radius": "Promień grupowania", + "GeoRSS (only link)": "GeoRSS (tylko link)", + "GeoRSS (title + image)": "GeoRSS (tytuł i obrazek)", + "Heatmap": "Mapa cieplna", + "Heatmap radius": "Promień mapy cieplnej", + "Name and description": "Nazwa i opis", + "Override clustering radius (default 80)": "Nadpisz promień grupowania (domyślnie 80)", + "Override heatmap radius (default 25)": "Nadpisz promień mapy cieplnej (domyślnie 25)", + "Proxy request": "Żądanie proxy", + "Table": "Tabela", + "To use if remote server doesn't allow cross domain (slower)": "Używaj jeśli zdalny serwer nie zezwala na cross domain (wolne)", + "Type of layer": "Typ warstwy", + "Filter…": "Filtr...", + "Heatmap intensity property": "Intensywność mapy cieplnej", + "Optional intensity property for heatmap": "Opcjonalna intensywności mapy cieplnej", + "Caption": "Podpis", + "Data browser": "Przeglądanie danych", + "Do you want to display a caption bar?": "Chcesz wyświetlić pasek z nagłówkiem?", + "Do you want to display a panel on load?": "Chcesz wyświetlić panel po załadowaniu?", + "None": "Brak", + "by": " ", + "Name and description (large)": "Nazwa i opis (duże)", + "Empty": "Wyczyść", + "Split line": "Podziel linię", + "Clone": "Klonowanie", + "Clone of {name}": "Sklonowane z {name}", + "Side panel": "Panel boczny", + "Powered by Leaflet and Django, glued by uMap project.": "Zasilany przez Leaflet i Django, sklejony przez projekt uMap.", + "Zoom level for automatic zooms": "Poziom automatycznych przybliżeń", + "Do you want to display the «more» control?": "Chcesz wyświetlić «więcej» kontrolek?", + "Auto": "Auto", + "Default: name": "Domyślnie: name", + "Property to use for sorting features": "Właściwość do sortowania elementów", + "Slideshow": "Pokaz slajdów", + "Start slideshow": "Rozpocznij pokaz", + "Stop slideshow": "Zakończ pokaz", + "Text color for the cluster label": "Kolor tekstu dla etykiety grupy", + "Zoom to the next": "Przybliż do następnego", + "Zoom to the previous": "Przybliż do poprzedniego", + "Add a new property": "Dodaj nową właściwość", + "Are you sure you want to delete this property on all the features?": "Na pewno chcesz usunąć tę właściwość we wszystkich obiektach?", + "Close": "Zamknij", + "Delete this property on all the features": "Usuń tę właściwość ze wszystkich obiektów", + "Edit properties in a table": "Edytuj właściwości w tabeli", + "Please enter the name of the property": "Podaj nazwę właściwości", + "Please enter the new name of this property": "Podaj nową nazwę tej właściwości", + "Rename this property on all the features": "Zmień nazwę tej właściwości we wszystkich obiektach", + "If false, the polygon will act as a part of the underlying map.": "Jeżeli fałsz, wielokąt będzie zachowywał się jak część mapy zasadniczej.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Ramka z podaną szerokością (w pikselach) {{{http://url.com|szerokość}}}", + "Iframe: {{{http://iframe.url.com}}}": "Ramka: {{{http://iframe.url.com}}}", + "See all": "Pokaż wszystko", + "Dynamic properties": "Właściwości dynamiczne", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Długie źródło", + "No licence has been set": "Nie wybrano licencji", + "Popup content template": "Szablon treści dymka", + "Short credits": "Krótkie źródło", + "Will be displayed in the bottom right corner of the map": "Będzie wyświetlone w prawym dolnym rogu mapy", + "Will be visible in the caption of the map": "Będzie widoczne w nagłówku mapy", + "Map has been saved!": "Mapa została zapisana!", + "Save anyway": "Zapisz mimo wszystko", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Ups! Ktoś jeszcze edytował dane. Możesz mimo wszystko zapisać, ale to uszkodzi zmiany dokonane przez innych.", + "Comma separated list of properties to use when filtering features": "Lista właściwości oddzielona przecinkiem do używania przy sortowaniu obiektów", + "Keep current visible layers": "Zachowaj obecnie widoczne warstwy", + "Coordinates": "Koordynaty", + "Latitude": "Szerokość geograficzna", + "Longitude": "Długość geograficzna", + "Continue line (Ctrl-click)": "Dokończ linię (Ctrl+kliknij)", + "Start a hole here": "Zacznij dziurę tutaj", + "Click last point to finish shape": "Kliknij w ostatni punkt aby zakończyć rysowanie", + "Click to add a marker": "Kliknij aby dodać znacznik", + "Click to continue drawing": "Kliknij aby kontynuować rysowanie", + "Click to start drawing a line": "Kliknij aby zacząć rysować linię", + "Click to start drawing a polygon": "Kliknij aby zacząć rysować obszar", + "Import in a new layer": "Importuj do nowej warstwy", + "Layer": "Warstwa", + "Please choose a format": "Wybierz format", + "Imports all umap data, including layers and settings.": "Import wszystkich danych umap, razem z warstwami i ustawieniami.", + "Invalid umap data": "Niepoprawne dane umap", + "Invalid umap data in {filename}": "Niepoprawne dane umap w {filename}", + "Add a line to the current multi": "Dodaj linie do wybranego multipoligonu", + "Add a polygon to the current multi": "Dodaj poligon do wybranego multipoligonu", + "Click to edit": "Kliknij aby edytować", + "Continue line": "Dokończ linię", + "Delete this shape": "Usuń tę figurę", + "Make main shape": "Narysuj główny kształt", + "Merge lines": "Połącz linie", + "Remove shape from the multi": "Usuń obiekt z wybranego multipoligonu", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "następne", + "previous": "poprzednie", + "Measure distances": "Oblicz odległości", + "NM": "Mm", + "kilometers": "kilometry", + "km": "km", + "mi": "mi", + "miles": "mile", + "nautical miles": "mile morskie", + "{area} acres": "{area} akry", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} Mm", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} mile", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Na pewno chcesz przywrócić tą wersję?", + "Extract shape to separate feature": "Wydziel kształt jako odrębny obiekt", + "Layer properties": "Ustawienia warstwy", + "Restore this version": "Przywróć tą wersję", + "Versions": "Wersje", + "You have unsaved changes.": "Masz niezapisane zmiany.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Zezwalaj na interakcję", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Domyślne ustawienia interakcji", + "Default shape properties": "Domyślne właściwości kształtu", + "Default zoom level": "Domyślne przybliżenie", + "Define link to open in a new window on polygon click.": "Ustaw odnośnik, który otworzy się w nowym oknie po kliknięciu w wielokąt.", + "Delete this vertex (Alt-click)": "Usuń ten wierzchołek (Alt + klik)", + "Display the control to open OpenStreetMap editor": "Wyświetlaj panel otwierający edytor OSM", + "Display the data layers control": "Wyświetlaj panel warstw z danymi", + "Display the embed control": "Wyświetlaj panel sterujący osadzaniem", + "Display the fullscreen control": "Wyświetlaj panel widoku pełnoekranowego", + "Display the locate control": "Display the locate control", + "Display the measure control": "Wyświetlaj panel miarek", + "Display the search control": "Wyświetlaj panel wyszukiwania", + "Display the tile layers control": "Wyświetlaj panel warstw kafelków", + "Display the zoom control": "Wyświetlaj panel sterujący powiększeniem", + "Exit Fullscreen": "Zamknij pełny ekran", + "Fetch data each time map view changes.": "Załaduj dane za każdym razem gdy zmienia się widok mapy.", + "Filter keys": "Filter keys", + "Icon shape": "Kształt ikony", + "Icon symbol": "Symbol ikony", + "Interaction options": "Opcje interakcji", + "Label key": "Label key", + "Link to…": "Łącze do...", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Musi być prawidłową wartością CSS (np. DarkBlue lub #123456)", + "No results": "Brak wyników", + "Popup style": "Styl wyskakującego okienka", + "Replace layer content": "Zamień zawartość warstwy", + "Save this location as new feature": "Zapisz to miejsce jako nowy obiekt", + "Search location": "Znajdź miejsce", + "Set URL": "Ustaw URL", + "Shape properties": "Właściwości kształtu", + "Simplify": "Uprość", + "Sort key": "Klucz sortowania", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Przełącz tryb edycji (Shift+klik)", + "View Fullscreen": "Włącz tryb pełnoekranowy", + "Whether to display or not polygons paths.": "Czy wyświetlić obrysy obszarów", + "Whether to fill polygons with color.": "Czy wypełnić obszary kolorem", + "Zoom to this place": "Przybliż do tego miejsca", + "always": "zawsze", + "clear": "wyczyść", + "define": "określ", + "hidden": "ukryte", + "never": "nigdy", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Wyświetl etykietę", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Kierunek etykiety", + "Manage layers": "Usuń warstwę", + "On the bottom": "Na dole", + "On the left": "Po lewej", + "On the right": "Po prawej", + "On the top": "Na górze", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "nowe okno", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Czy jesteś pewien, że chcesz usunąć tą warstwę?", + "Delete layer": "Usuń warstwę", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Usuń wszystkie warstwy", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Aktywuj pokaz slajdów", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "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…", + "{delay} seconds": "{opóźnienie} w sekundach", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/pl_PL.json b/umap/static/umap/locale/pl_PL.json new file mode 100644 index 00000000..4918b268 --- /dev/null +++ b/umap/static/umap/locale/pl_PL.json @@ -0,0 +1,350 @@ +{ + "About": "About", + "Action not allowed :(": "Action not allowed :(", + "Add a layer": "Add a layer", + "Add symbol": "Add symbol", + "Advanced actions": "Advanced actions", + "Advanced properties": "Advanced properties", + "Allow scroll wheel zoom?": "Allow scroll wheel zoom?", + "An error occured": "An error occured", + "Are you sure you want to cancel your changes?": "Are you sure you want to cancel your changes?", + "Are you sure you want to clone this map and all its datalayers?": "Are you sure you want to clone this map and all its datalayers?", + "Are you sure you want to delete the feature?": "Are you sure you want to delete the feature?", + "Are you sure you want to delete this map?": "Are you sure you want to delete this map?", + "Ball": "Ball", + "Bring feature to center": "Bring feature to center", + "Browse data": "Browse data", + "Cancel": "Cancel", + "Cancel edits": "Cancel edits", + "Center map on your location": "Center map on your location", + "Change map background": "Change map background", + "Change symbol": "Change symbol", + "Change tilelayers": "Change tilelayers", + "Choose the format of the data to import": "Choose the format of the data to import", + "Choose the layer of the feature": "Choose the layer of the feature", + "Choose the layer to import in": "Choose the layer to import in", + "Circle": "Circle", + "Clone this map": "Clone this map", + "Default": "Default", + "Delete": "Delete", + "Delete this feature": "Delete this feature", + "Disable editing": "Disable editing", + "Display on load": "Display on load", + "Do you want to display a minimap?": "Do you want to display a minimap?", + "Do you want to display popup footer?": "Do you want to display popup footer?", + "Do you want to display the scale control?": "Do you want to display the scale control?", + "Download data": "Download data", + "Draw a line": "Draw a line", + "Draw a marker": "Draw a marker", + "Draw a polygon": "Draw a polygon", + "Draw a polyline": "Draw a polyline", + "Drop": "Drop", + "Dynamic": "Dynamic", + "Edit": "Edit", + "Edit feature's layer": "Edit feature's layer", + "Edit map properties": "Edit map properties", + "Edit map settings": "Edit map settings", + "Edit this feature": "Edit this feature", + "Embed and share this map": "Embed and share this map", + "Enable editing": "Enable editing", + "Format": "Format", + "From zoom": "From zoom", + "Go to «{feature}»": "Go to «{feature}»", + "Hide controls": "Hide controls", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)", + "Import": "Import", + "Import data": "Import data", + "Inherit": "Inherit", + "Licence": "Licence", + "Map background credits": "Map background credits", + "Map user content has been published under licence": "Map user content has been published under licence", + "More controls": "More controls", + "Optional. Same as color if not set.": "Optional. Same as color if not set.", + "Optionnal.": "Optionnal.", + "Paste here your data": "Paste here your data", + "Please be sure the licence is compliant with your use.": "Please be sure the licence is compliant with your use.", + "Problem in the response": "Problem in the response", + "Problem in the response format": "Problem in the response format", + "Provide an URL here": "Provide an URL here", + "Remote data": "Remote data", + "Save": "Save", + "Save current edits": "Save current edits", + "Save this center and zoom": "Save this center and zoom", + "Show/hide layer": "Show/hide layer", + "Start editing": "Start editing", + "Stop editing": "Stop editing", + "The zoom and center have been setted.": "The zoom and center have been setted.", + "To zoom": "To zoom", + "Untitled layer": "Untitled layer", + "Untitled map": "Untitled map", + "Update permissions and editors": "Update permissions and editors", + "Url": "Url", + "User content credits": "User content credits", + "Where do we go from here?": "Where do we go from here?", + "Zoom in": "Zoom in", + "Zoom out": "Zoom out", + "Zoom to layer extent": "Zoom to layer extent", + "Zoom to this feature": "Zoom to this feature", + "color": "color", + "dash array": "dash array", + "description": "description", + "fill": "fill", + "fill color": "fill color", + "fill opacity": "fill opacity", + "inherit": "inherit", + "licence": "licence", + "name": "name", + "no": "no", + "opacity": "opacity", + "stroke": "stroke", + "weight": "weight", + "yes": "yes", + "Editing": "Editing", + "Embed the map": "Embed the map", + "Short URL": "Short URL", + "# one hash for main heading": "# one hash for main heading", + "## two hashes for second heading": "## two hashes for second heading", + "### three hashes for third heading": "### three hashes for third heading", + "**double star for bold**": "**double star for bold**", + "*simple star for italic*": "*simple star for italic*", + "--- for an horizontal rule": "--- for an horizontal rule", + "All properties are imported.": "All properties are imported.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Custom background", + "Help": "Help", + "Image: {{http://image.url.com}}": "Image: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link with text: [[http://example.com|text of the link]]", + "Properties imported:": "Properties imported:", + "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]", + "Supported scheme": "Supported scheme", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "Text formatting", + "attribution": "attribution", + "display name": "display name", + "max zoom": "max zoom", + "min zoom": "min zoom", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "Please save the map before", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Transform to polygon", + "Transform to lines": "Transform to lines", + "Choose the data format": "Choose the data format", + "Error in the tilelayer URL": "Error in the tilelayer URL", + "Directions from here": "Directions from here", + "Choose a preset": "Choose a preset", + "Limit bounds": "Limit bounds", + "Use current bounds": "Use current bounds", + "max East": "max East", + "max North": "max North", + "max South": "max South", + "max West": "max West", + "TMS format": "TMS format", + "Credits": "Credits", + "Only visible features will be downloaded.": "Only visible features will be downloaded.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "Default properties", + "User interface options": "User interface options", + "Image with custom width (in px): {{http://image.url.com|width}}": "Image with custom width (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Current view instead of default map view?", + "Iframe export options": "Iframe export options", + "Include full screen link?": "Include full screen link?", + "See full screen": "See full screen", + "height": "height", + "width": "width", + "Clustered": "Clustered", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (only link)", + "GeoRSS (title + image)": "GeoRSS (title + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Name and description", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Proxy request", + "Table": "Table", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "Type of layer", + "Filter…": "Filter…", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Caption", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Do you want to display a caption bar?", + "Do you want to display a panel on load?": "Do you want to display a panel on load?", + "None": "None", + "by": "by", + "Name and description (large)": "Name and description (large)", + "Empty": "Empty", + "Split line": "Split line", + "Clone": "Clone", + "Clone of {name}": "Clone of {name}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Do you want to display the «more» control?", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Close", + "Delete this property on all the features": "Delete this property on all the features", + "Edit properties in a table": "Edit properties in a table", + "Please enter the name of the property": "Please enter the name of the property", + "Please enter the new name of this property": "Please enter the new name of this property", + "Rename this property on all the features": "Rename this property on all the features", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordinates", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Layer", + "Please choose a format": "Please choose a format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Measure distances", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "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…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/pt.json b/umap/static/umap/locale/pt.json new file mode 100644 index 00000000..63c619b6 --- /dev/null +++ b/umap/static/umap/locale/pt.json @@ -0,0 +1,350 @@ +{ + "About": "Sobre", + "Action not allowed :(": "Ação não permitida :(", + "Add a layer": "Adicionar camada", + "Add symbol": "Adicionar símbolo", + "Advanced actions": "Ações avançadas", + "Advanced properties": "Propriedades avançadas", + "Allow scroll wheel zoom?": "Permitir zoom com roda do rato?", + "An error occured": "Ocorreu um erro", + "Are you sure you want to cancel your changes?": "Tem a certeza que quer cancelar as suas alterações?", + "Are you sure you want to clone this map and all its datalayers?": "Tem a certeza que quer clonar este mapa, incluindo todas as camadas de dados?", + "Are you sure you want to delete the feature?": "Tem a certeza que quer eliminar o elemento?", + "Are you sure you want to delete this map?": "Tem a certeza que quer eliminar este mapa?", + "Ball": "Bola", + "Bring feature to center": "Centrar elemento", + "Browse data": "Explorar dados", + "Cancel": "Cancelar", + "Cancel edits": "Cancelar edições", + "Center map on your location": "Centrar mapa na sua localização", + "Change map background": "Mudar fundo do mapa", + "Change symbol": "Alterar símbolo", + "Change tilelayers": "Alterar camadas de telas", + "Choose the format of the data to import": "Escolha o formato dos dados para importação", + "Choose the layer of the feature": "Escolha a camada do elemento", + "Choose the layer to import in": "Escolha a camada para destino da importação", + "Circle": "Círculo", + "Clone this map": "Clonar este mapa", + "Default": "Padrão", + "Delete": "Eliminar", + "Delete this feature": "Eliminar este elemento", + "Disable editing": "Desativar edição", + "Display on load": "Mostrar ao carregar", + "Do you want to display a minimap?": "Pretende mostrar um mini-mapa?", + "Do you want to display popup footer?": "Pretende mostrar um popup no rodapé?", + "Do you want to display the scale control?": "Pretende mostrar o controlo de escala?", + "Download data": "Descarregar dados", + "Draw a line": "Desenhar uma linha", + "Draw a marker": "Desenhar um marco", + "Draw a polygon": "Desenhar um polígono", + "Draw a polyline": "Desenhar uma polilinha", + "Drop": "Largar", + "Dynamic": "Dinâmico", + "Edit": "Editar", + "Edit feature's layer": "Editar camada do elemento", + "Edit map properties": "Editar propriedades do mapa", + "Edit map settings": "Editar definições do mapa", + "Edit this feature": "Editar este elemento", + "Embed and share this map": "Exportar e partilhar este mapa", + "Enable editing": "Ativar edição", + "Format": "Formato", + "From zoom": "Do zoom", + "Go to «{feature}»": "Ir a «{feature}»", + "Hide controls": "Ocultar controlos", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "Por quanto simplificar a polilinha em cada nível de aproximação (mais = melhor desempenho e aspeto mais suave, menos = mais preciso)", + "Import": "Importar", + "Import data": "Importar dados", + "Inherit": "Inherit", + "Licence": "Licença", + "Map background credits": "Créditos do fundo do mapa", + "Map user content has been published under licence": "O conteúdo do mapa foi publicado sob a licença", + "More controls": "Mais controlos", + "Optional. Same as color if not set.": "Opcional. Igual à cor se não for definido.", + "Optionnal.": "Opcional.", + "Paste here your data": "Cole aqui os seus dados", + "Please be sure the licence is compliant with your use.": "Por favor tenha a certeza que a utilização está conforme a licença.", + "Problem in the response": "Problema na resposta do servidor", + "Problem in the response format": "Problema no formato da resposta", + "Provide an URL here": "Forneça um URL aqui", + "Remote data": "Dados remotos", + "Save": "Gravar", + "Save current edits": "Gravar edições atuais", + "Save this center and zoom": "Gravar este centro e aproximar", + "Show/hide layer": "Mostrar/ocultar camada", + "Start editing": "Começar a editar", + "Stop editing": "Parar edição", + "The zoom and center have been setted.": "O centro e a aproximação foram definidos.", + "To zoom": "Para aproximar", + "Untitled layer": "Camada sem nome", + "Untitled map": "Mapa sem nome", + "Update permissions and editors": "Alterar permisões e editores", + "Url": "URL", + "User content credits": "Créditos do conteúdo do utilizador", + "Where do we go from here?": "Para onde vamos a partir daqui?", + "Zoom in": "Aproximar", + "Zoom out": "Afastar", + "Zoom to layer extent": "Aproximar ao tamanho da camada", + "Zoom to this feature": "Aproximar a este elemento", + "color": "cor", + "dash array": "série de traços", + "description": "descrição", + "fill": "preenchimento", + "fill color": "cor do preenchimento", + "fill opacity": "opacidade do preenchimento", + "inherit": "herdado", + "licence": "licença", + "name": "nome", + "no": "não", + "opacity": "opacidade", + "stroke": "traço", + "weight": "espessura", + "yes": "sim", + "Editing": "A editar", + "Embed the map": "Embeber o mapa", + "Short URL": "URL curto", + "# one hash for main heading": "# um cardinal para o cabeçalho principal", + "## two hashes for second heading": "## dois cardinais para o segundo cabeçalho", + "### three hashes for third heading": "### três cardinais para o terceiro cabeçalho", + "**double star for bold**": "**dois asteriscos duplos para negrito**", + "*simple star for italic*": "**um asterisco duplos para itálico**", + "--- for an horizontal rule": "--- para uma régua horizontal", + "All properties are imported.": "Foram importadas todas as propriedades.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Fundo personalizado", + "Help": "Ajuda", + "Image: {{http://image.url.com}}": "Imagem: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link com texto: [[http://example.com|texto do link]]", + "Properties imported:": "Propriedades importadas:", + "Simple link: [[http://example.com]]": "Link simples: [[http://example.com]]", + "Supported scheme": "Esquema suportado", + "Supported variables that will be dynamically replaced": "Variáveis suportadas que serão substituídas de forma dinâmica", + "Text formatting": "Formatação do texto", + "attribution": "atribuição", + "display name": "mostrar nome", + "max zoom": "aproximação máxima", + "min zoom": "aproximação mínima", + "Skipping unkown geometry.type: {type}": "A ignorar tipo de geometria desconhecido: {type}", + "Please save the map before": "Pro favor grave antes o mapa", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Transformar em polígono", + "Transform to lines": "Transformar em linha", + "Choose the data format": "Escolha o formato dos dados", + "Error in the tilelayer URL": "Erro no URL de telas", + "Directions from here": "Direções a partir daqui", + "Choose a preset": "Escolha um modelo", + "Limit bounds": "Extremos dos limites", + "Use current bounds": "Usar extremos atuais", + "max East": "Este máx.", + "max North": "Norte máx.", + "max South": "Sul máx.", + "max West": "Oeste máx.", + "TMS format": "Formato TMS", + "Credits": "Créditos", + "Only visible features will be downloaded.": "Apenas os elementos visíveis serão descarregados.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "Propriedades padrão", + "User interface options": "Opções da interface de utilizador", + "Image with custom width (in px): {{http://image.url.com|width}}": "Imagem com largura personalizada (em px): {{http://imagem.url.com|largura}}", + "Current view instead of default map view?": "Vista atual em ves da vista padrão do mapa?", + "Iframe export options": "Opções de exportação Iframe", + "Include full screen link?": "Incluir link de encrã total?", + "See full screen": "Ver em ecrã total", + "height": "altura", + "width": "largura", + "Clustered": "Clustered", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (apenas o link)", + "GeoRSS (title + image)": "GeoRSS (título + imagem)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Nome e descrição", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Pedido proxy", + "Table": "Tabela", + "To use if remote server doesn't allow cross domain (slower)": "Para usar caso o servidor remoto não permitir domínios cruzados (mais lento)", + "Type of layer": "Tipo de camada", + "Filter…": "Filtrar...", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Cabeçalho", + "Data browser": "Navegador de dados", + "Do you want to display a caption bar?": "Quer mostrar uma barra de cabeçalho?", + "Do you want to display a panel on load?": "Quer mostrar um painel ao carregar?", + "None": "Nenhum", + "by": "por", + "Name and description (large)": "Nome e descrição (extenso)", + "Empty": "Vazio", + "Split line": "Linha de separação", + "Clone": "Clone", + "Clone of {name}": "Clone de {name}", + "Side panel": "Painel lateral", + "Powered by Leaflet and Django, glued by uMap project.": "Criado com Leaflet e Django pelo projeto uMap.", + "Zoom level for automatic zooms": "Nível de aproximação para aproximações automáticas", + "Do you want to display the «more» control?": "Quer mostrar o controlo «mais»?", + "Auto": "Auto", + "Default: name": "Padrão: nome", + "Property to use for sorting features": "Propriedade a usar para ordenar elementos", + "Slideshow": "Apresentação", + "Start slideshow": "Iniciar apresentação", + "Stop slideshow": "Parar apresentação", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Aproximar para o seguinte", + "Zoom to the previous": "Aproximar para o anterior", + "Add a new property": "Adicionar uma nova propriedade", + "Are you sure you want to delete this property on all the features?": "Tem a certeza que quer eliminar esta propriedade em todos os elementos?", + "Close": "Fechar", + "Delete this property on all the features": "Eliminar esta propriedade em todos os elementos", + "Edit properties in a table": "Editar propriedades numa tabela", + "Please enter the name of the property": "Por favor introduza o nome da propriedade", + "Please enter the new name of this property": "Por favor introduza um novo nome desta propriedade", + "Rename this property on all the features": "Alterar nome desta propriedade em todos os elementos", + "If false, the polygon will act as a part of the underlying map.": "Se desativado, o polígono agirá como parte do mapa de baixo.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe com altura personalizada (em px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "Ver tudo", + "Dynamic properties": "Propriedades dinâmicas", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Créditos por extenso", + "No licence has been set": "Não foi definida nenhuma licença", + "Popup content template": "Modelo de conteúdo do popup", + "Short credits": "Créditos resumidos", + "Will be displayed in the bottom right corner of the map": "Será mostrado no fundo à direita do mapa", + "Will be visible in the caption of the map": "Será visível no cabeçalho do mapa", + "Map has been saved!": "O mapa foi gravado!", + "Save anyway": "Gravar mesmo assim", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Ops! Parece que alguém editou os dados. Pode gravar mesmo assim, mas isso irá eliminar as alterações feitas por outros.", + "Comma separated list of properties to use when filtering features": "Lista separada por vírgulas de propriedades a usar ao filtrar elementos", + "Keep current visible layers": "Manter camadas atualmente visíveis", + "Coordinates": "Coordenadas", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continuar linnha (Ctrl-clique)", + "Start a hole here": "Começar um buraco aqui", + "Click last point to finish shape": "Clique no último ponto para terminar a forma geométrica", + "Click to add a marker": "Clique para adicionar um marcador", + "Click to continue drawing": "Clique para continuar a desenhar", + "Click to start drawing a line": "Clique para começar a desenhar uma linha", + "Click to start drawing a polygon": "Clique para começar a desenhar um polígono", + "Import in a new layer": "Importar uma nova camada", + "Layer": "Camada", + "Please choose a format": "Por favor escolha um formato", + "Imports all umap data, including layers and settings.": "Importa todos os dados uMap, incluindo camadas e definições.", + "Invalid umap data": "Dados uMap inválidos", + "Invalid umap data in {filename}": "Dados uMap inválidos em {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Clique para editar", + "Continue line": "Continuar linha", + "Delete this shape": "Eliminar esta forma geométrica", + "Make main shape": "Fazer forma geométrica principal", + "Merge lines": "Fundir linhas", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transferir a forma geométrica para o elemento editado", + "next": "seguinte", + "previous": "anterior", + "Measure distances": "Medir distâncias", + "NM": "MN", + "kilometers": "quilómetros", + "km": "km", + "mi": "mi", + "miles": "milhas", + "nautical miles": "milhas náuticas", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} MN", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} milhas", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Tem a certeza que quer restaurar esta versão?", + "Extract shape to separate feature": "Extrair forma geométrica para separar o elemento", + "Layer properties": "Propriedades da camada", + "Restore this version": "Restaurar esta versão", + "Versions": "Versões", + "You have unsaved changes.": "Tem alterações por gravar", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "Lista de números separada por vírgulas que define o padrão do traço. Por exemplo \"5, 10, 15\".", + "Advanced transition": "Transição avançada", + "Allow interactions": "Permitir interações", + "Autostart when map is loaded": "Reproduzir automaticamente ao carregar o mapa", + "Default interaction options": "Opções padrão de interação", + "Default shape properties": "Propriedades padrão de formas geométricas", + "Default zoom level": "Nível de aproximação padrão", + "Define link to open in a new window on polygon click.": "Definir link para abrir numa nova janela ao clicar no polígono.", + "Delete this vertex (Alt-click)": "Eliminar este vértice (Alt-clique)", + "Display the control to open OpenStreetMap editor": "Mostrar o controlo para abrir o editor OpenStreetMap", + "Display the data layers control": "Mostrar o controlo das camadas de dados", + "Display the embed control": "Mostrar o controlo de embeber", + "Display the fullscreen control": "Mostrar o controlo de ecrã total", + "Display the locate control": "Mostrar o controlo de localizar", + "Display the measure control": "Mostrar o controlo de medição", + "Display the search control": "Mostrar o controlo de pesquisa", + "Display the tile layers control": "Mostrar o controlo de camadas de telas", + "Display the zoom control": "Mostrar o controlo de aproximar e afastar", + "Exit Fullscreen": "Sair de Ecrã Total", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filtrar chaves", + "Icon shape": "Forma do ícone", + "Icon symbol": "Símbolo do ícone", + "Interaction options": "Opções de interação", + "Label key": "Chave da etiqueta", + "Link to…": "Link para...", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Tem de ser um valor CSS válido (p.ex.: DarkBlue ou #123456)", + "No results": "Sem resultados", + "Popup style": "Estilo do popup", + "Replace layer content": "Substituir o conteúdo da camada", + "Save this location as new feature": "Gravar esta localização como novo elemento", + "Search location": "Procurar localização", + "Set URL": "Definir URL", + "Shape properties": "Propriedades de formas geométricas", + "Simplify": "Simplificar", + "Sort key": "Chave de ordenação", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Alternar modo de editar (shift-clique)", + "View Fullscreen": "Ver em Ecrã Total", + "Whether to display or not polygons paths.": "Se mostrar ou não os caminhos dos polígonos.", + "Whether to fill polygons with color.": "Se mostrar ou não os polígonos preenchidos a cor.", + "Zoom to this place": "Aproximar para este local", + "always": "sempre", + "clear": "limpar", + "define": "definir", + "hidden": "oculto", + "never": "nunca", + "Automatic": "Automático", + "Clone this feature": "Clonar este elemento", + "Display label": "Mostrar etiqueta", + "Drag to reorder": "Arrastar para reordenar", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe com altura e largura personalizados (em px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Etiquetas são clicáveis", + "Label direction": "Direção da etiqueta", + "Manage layers": "Gerir camadas", + "On the bottom": "No fundo", + "On the left": "Na esquerda", + "On the right": "Na direita", + "On the top": "No topo", + "Only display label on mouse hover": "Apenas mostrar a etiqueta ao passar com o rato", + "Open link in…": "Abrir link numa...", + "Unable to detect format of file {filename}": "Não foi possível detetar o formato do ficheiro {filename}", + "collapsed": "colapsado", + "expanded": "expandido", + "iframe": "iframe", + "new window": "nova janela", + "parent window": "janela pai", + "{count} errors during import: {message}": "{count} erros ao importar: {message}", + "Are you sure you want to delete this layer?": "Tem a certeza que quer eliminar esta camada?", + "Delete layer": "Eliminar camada", + "Error while fetching {url}": "Erro ao processar {url}", + "Home": "Início", + "Delete all layers": "Eliminar todas as camadas", + "Full map data": "Todos os dados do mapa", + "Smart transitions": "Transições inteligentes", + "Activate slideshow mode": "Ativar modo de apresentação", + "Data is browsable": "Os dados são navegáveis", + "Delay between two transitions when in play mode": "Atraso entre 2 transições ao reproduzir a apresentação", + "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…", + "{delay} seconds": "{delay} segundos", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/pt_BR.json b/umap/static/umap/locale/pt_BR.json new file mode 100644 index 00000000..4918b268 --- /dev/null +++ b/umap/static/umap/locale/pt_BR.json @@ -0,0 +1,350 @@ +{ + "About": "About", + "Action not allowed :(": "Action not allowed :(", + "Add a layer": "Add a layer", + "Add symbol": "Add symbol", + "Advanced actions": "Advanced actions", + "Advanced properties": "Advanced properties", + "Allow scroll wheel zoom?": "Allow scroll wheel zoom?", + "An error occured": "An error occured", + "Are you sure you want to cancel your changes?": "Are you sure you want to cancel your changes?", + "Are you sure you want to clone this map and all its datalayers?": "Are you sure you want to clone this map and all its datalayers?", + "Are you sure you want to delete the feature?": "Are you sure you want to delete the feature?", + "Are you sure you want to delete this map?": "Are you sure you want to delete this map?", + "Ball": "Ball", + "Bring feature to center": "Bring feature to center", + "Browse data": "Browse data", + "Cancel": "Cancel", + "Cancel edits": "Cancel edits", + "Center map on your location": "Center map on your location", + "Change map background": "Change map background", + "Change symbol": "Change symbol", + "Change tilelayers": "Change tilelayers", + "Choose the format of the data to import": "Choose the format of the data to import", + "Choose the layer of the feature": "Choose the layer of the feature", + "Choose the layer to import in": "Choose the layer to import in", + "Circle": "Circle", + "Clone this map": "Clone this map", + "Default": "Default", + "Delete": "Delete", + "Delete this feature": "Delete this feature", + "Disable editing": "Disable editing", + "Display on load": "Display on load", + "Do you want to display a minimap?": "Do you want to display a minimap?", + "Do you want to display popup footer?": "Do you want to display popup footer?", + "Do you want to display the scale control?": "Do you want to display the scale control?", + "Download data": "Download data", + "Draw a line": "Draw a line", + "Draw a marker": "Draw a marker", + "Draw a polygon": "Draw a polygon", + "Draw a polyline": "Draw a polyline", + "Drop": "Drop", + "Dynamic": "Dynamic", + "Edit": "Edit", + "Edit feature's layer": "Edit feature's layer", + "Edit map properties": "Edit map properties", + "Edit map settings": "Edit map settings", + "Edit this feature": "Edit this feature", + "Embed and share this map": "Embed and share this map", + "Enable editing": "Enable editing", + "Format": "Format", + "From zoom": "From zoom", + "Go to «{feature}»": "Go to «{feature}»", + "Hide controls": "Hide controls", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)", + "Import": "Import", + "Import data": "Import data", + "Inherit": "Inherit", + "Licence": "Licence", + "Map background credits": "Map background credits", + "Map user content has been published under licence": "Map user content has been published under licence", + "More controls": "More controls", + "Optional. Same as color if not set.": "Optional. Same as color if not set.", + "Optionnal.": "Optionnal.", + "Paste here your data": "Paste here your data", + "Please be sure the licence is compliant with your use.": "Please be sure the licence is compliant with your use.", + "Problem in the response": "Problem in the response", + "Problem in the response format": "Problem in the response format", + "Provide an URL here": "Provide an URL here", + "Remote data": "Remote data", + "Save": "Save", + "Save current edits": "Save current edits", + "Save this center and zoom": "Save this center and zoom", + "Show/hide layer": "Show/hide layer", + "Start editing": "Start editing", + "Stop editing": "Stop editing", + "The zoom and center have been setted.": "The zoom and center have been setted.", + "To zoom": "To zoom", + "Untitled layer": "Untitled layer", + "Untitled map": "Untitled map", + "Update permissions and editors": "Update permissions and editors", + "Url": "Url", + "User content credits": "User content credits", + "Where do we go from here?": "Where do we go from here?", + "Zoom in": "Zoom in", + "Zoom out": "Zoom out", + "Zoom to layer extent": "Zoom to layer extent", + "Zoom to this feature": "Zoom to this feature", + "color": "color", + "dash array": "dash array", + "description": "description", + "fill": "fill", + "fill color": "fill color", + "fill opacity": "fill opacity", + "inherit": "inherit", + "licence": "licence", + "name": "name", + "no": "no", + "opacity": "opacity", + "stroke": "stroke", + "weight": "weight", + "yes": "yes", + "Editing": "Editing", + "Embed the map": "Embed the map", + "Short URL": "Short URL", + "# one hash for main heading": "# one hash for main heading", + "## two hashes for second heading": "## two hashes for second heading", + "### three hashes for third heading": "### three hashes for third heading", + "**double star for bold**": "**double star for bold**", + "*simple star for italic*": "*simple star for italic*", + "--- for an horizontal rule": "--- for an horizontal rule", + "All properties are imported.": "All properties are imported.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Custom background", + "Help": "Help", + "Image: {{http://image.url.com}}": "Image: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link with text: [[http://example.com|text of the link]]", + "Properties imported:": "Properties imported:", + "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]", + "Supported scheme": "Supported scheme", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "Text formatting", + "attribution": "attribution", + "display name": "display name", + "max zoom": "max zoom", + "min zoom": "min zoom", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "Please save the map before", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Transform to polygon", + "Transform to lines": "Transform to lines", + "Choose the data format": "Choose the data format", + "Error in the tilelayer URL": "Error in the tilelayer URL", + "Directions from here": "Directions from here", + "Choose a preset": "Choose a preset", + "Limit bounds": "Limit bounds", + "Use current bounds": "Use current bounds", + "max East": "max East", + "max North": "max North", + "max South": "max South", + "max West": "max West", + "TMS format": "TMS format", + "Credits": "Credits", + "Only visible features will be downloaded.": "Only visible features will be downloaded.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "Default properties", + "User interface options": "User interface options", + "Image with custom width (in px): {{http://image.url.com|width}}": "Image with custom width (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Current view instead of default map view?", + "Iframe export options": "Iframe export options", + "Include full screen link?": "Include full screen link?", + "See full screen": "See full screen", + "height": "height", + "width": "width", + "Clustered": "Clustered", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (only link)", + "GeoRSS (title + image)": "GeoRSS (title + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Name and description", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Proxy request", + "Table": "Table", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "Type of layer", + "Filter…": "Filter…", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Caption", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Do you want to display a caption bar?", + "Do you want to display a panel on load?": "Do you want to display a panel on load?", + "None": "None", + "by": "by", + "Name and description (large)": "Name and description (large)", + "Empty": "Empty", + "Split line": "Split line", + "Clone": "Clone", + "Clone of {name}": "Clone of {name}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Do you want to display the «more» control?", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Close", + "Delete this property on all the features": "Delete this property on all the features", + "Edit properties in a table": "Edit properties in a table", + "Please enter the name of the property": "Please enter the name of the property", + "Please enter the new name of this property": "Please enter the new name of this property", + "Rename this property on all the features": "Rename this property on all the features", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordinates", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Layer", + "Please choose a format": "Please choose a format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Measure distances", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "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…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/pt_PT.json b/umap/static/umap/locale/pt_PT.json new file mode 100644 index 00000000..4918b268 --- /dev/null +++ b/umap/static/umap/locale/pt_PT.json @@ -0,0 +1,350 @@ +{ + "About": "About", + "Action not allowed :(": "Action not allowed :(", + "Add a layer": "Add a layer", + "Add symbol": "Add symbol", + "Advanced actions": "Advanced actions", + "Advanced properties": "Advanced properties", + "Allow scroll wheel zoom?": "Allow scroll wheel zoom?", + "An error occured": "An error occured", + "Are you sure you want to cancel your changes?": "Are you sure you want to cancel your changes?", + "Are you sure you want to clone this map and all its datalayers?": "Are you sure you want to clone this map and all its datalayers?", + "Are you sure you want to delete the feature?": "Are you sure you want to delete the feature?", + "Are you sure you want to delete this map?": "Are you sure you want to delete this map?", + "Ball": "Ball", + "Bring feature to center": "Bring feature to center", + "Browse data": "Browse data", + "Cancel": "Cancel", + "Cancel edits": "Cancel edits", + "Center map on your location": "Center map on your location", + "Change map background": "Change map background", + "Change symbol": "Change symbol", + "Change tilelayers": "Change tilelayers", + "Choose the format of the data to import": "Choose the format of the data to import", + "Choose the layer of the feature": "Choose the layer of the feature", + "Choose the layer to import in": "Choose the layer to import in", + "Circle": "Circle", + "Clone this map": "Clone this map", + "Default": "Default", + "Delete": "Delete", + "Delete this feature": "Delete this feature", + "Disable editing": "Disable editing", + "Display on load": "Display on load", + "Do you want to display a minimap?": "Do you want to display a minimap?", + "Do you want to display popup footer?": "Do you want to display popup footer?", + "Do you want to display the scale control?": "Do you want to display the scale control?", + "Download data": "Download data", + "Draw a line": "Draw a line", + "Draw a marker": "Draw a marker", + "Draw a polygon": "Draw a polygon", + "Draw a polyline": "Draw a polyline", + "Drop": "Drop", + "Dynamic": "Dynamic", + "Edit": "Edit", + "Edit feature's layer": "Edit feature's layer", + "Edit map properties": "Edit map properties", + "Edit map settings": "Edit map settings", + "Edit this feature": "Edit this feature", + "Embed and share this map": "Embed and share this map", + "Enable editing": "Enable editing", + "Format": "Format", + "From zoom": "From zoom", + "Go to «{feature}»": "Go to «{feature}»", + "Hide controls": "Hide controls", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)", + "Import": "Import", + "Import data": "Import data", + "Inherit": "Inherit", + "Licence": "Licence", + "Map background credits": "Map background credits", + "Map user content has been published under licence": "Map user content has been published under licence", + "More controls": "More controls", + "Optional. Same as color if not set.": "Optional. Same as color if not set.", + "Optionnal.": "Optionnal.", + "Paste here your data": "Paste here your data", + "Please be sure the licence is compliant with your use.": "Please be sure the licence is compliant with your use.", + "Problem in the response": "Problem in the response", + "Problem in the response format": "Problem in the response format", + "Provide an URL here": "Provide an URL here", + "Remote data": "Remote data", + "Save": "Save", + "Save current edits": "Save current edits", + "Save this center and zoom": "Save this center and zoom", + "Show/hide layer": "Show/hide layer", + "Start editing": "Start editing", + "Stop editing": "Stop editing", + "The zoom and center have been setted.": "The zoom and center have been setted.", + "To zoom": "To zoom", + "Untitled layer": "Untitled layer", + "Untitled map": "Untitled map", + "Update permissions and editors": "Update permissions and editors", + "Url": "Url", + "User content credits": "User content credits", + "Where do we go from here?": "Where do we go from here?", + "Zoom in": "Zoom in", + "Zoom out": "Zoom out", + "Zoom to layer extent": "Zoom to layer extent", + "Zoom to this feature": "Zoom to this feature", + "color": "color", + "dash array": "dash array", + "description": "description", + "fill": "fill", + "fill color": "fill color", + "fill opacity": "fill opacity", + "inherit": "inherit", + "licence": "licence", + "name": "name", + "no": "no", + "opacity": "opacity", + "stroke": "stroke", + "weight": "weight", + "yes": "yes", + "Editing": "Editing", + "Embed the map": "Embed the map", + "Short URL": "Short URL", + "# one hash for main heading": "# one hash for main heading", + "## two hashes for second heading": "## two hashes for second heading", + "### three hashes for third heading": "### three hashes for third heading", + "**double star for bold**": "**double star for bold**", + "*simple star for italic*": "*simple star for italic*", + "--- for an horizontal rule": "--- for an horizontal rule", + "All properties are imported.": "All properties are imported.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Custom background", + "Help": "Help", + "Image: {{http://image.url.com}}": "Image: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link with text: [[http://example.com|text of the link]]", + "Properties imported:": "Properties imported:", + "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]", + "Supported scheme": "Supported scheme", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "Text formatting", + "attribution": "attribution", + "display name": "display name", + "max zoom": "max zoom", + "min zoom": "min zoom", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "Please save the map before", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Transform to polygon", + "Transform to lines": "Transform to lines", + "Choose the data format": "Choose the data format", + "Error in the tilelayer URL": "Error in the tilelayer URL", + "Directions from here": "Directions from here", + "Choose a preset": "Choose a preset", + "Limit bounds": "Limit bounds", + "Use current bounds": "Use current bounds", + "max East": "max East", + "max North": "max North", + "max South": "max South", + "max West": "max West", + "TMS format": "TMS format", + "Credits": "Credits", + "Only visible features will be downloaded.": "Only visible features will be downloaded.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "Default properties", + "User interface options": "User interface options", + "Image with custom width (in px): {{http://image.url.com|width}}": "Image with custom width (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Current view instead of default map view?", + "Iframe export options": "Iframe export options", + "Include full screen link?": "Include full screen link?", + "See full screen": "See full screen", + "height": "height", + "width": "width", + "Clustered": "Clustered", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (only link)", + "GeoRSS (title + image)": "GeoRSS (title + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Name and description", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Proxy request", + "Table": "Table", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "Type of layer", + "Filter…": "Filter…", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Caption", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Do you want to display a caption bar?", + "Do you want to display a panel on load?": "Do you want to display a panel on load?", + "None": "None", + "by": "by", + "Name and description (large)": "Name and description (large)", + "Empty": "Empty", + "Split line": "Split line", + "Clone": "Clone", + "Clone of {name}": "Clone of {name}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Do you want to display the «more» control?", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Close", + "Delete this property on all the features": "Delete this property on all the features", + "Edit properties in a table": "Edit properties in a table", + "Please enter the name of the property": "Please enter the name of the property", + "Please enter the new name of this property": "Please enter the new name of this property", + "Rename this property on all the features": "Rename this property on all the features", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordinates", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Layer", + "Please choose a format": "Please choose a format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Measure distances", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "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…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/ru.json b/umap/static/umap/locale/ru.json new file mode 100644 index 00000000..d90f22d1 --- /dev/null +++ b/umap/static/umap/locale/ru.json @@ -0,0 +1,350 @@ +{ + "About": "Подробней", + "Action not allowed :(": "Действие недоступно :(", + "Add a layer": "Добавить слой", + "Add symbol": "Добавить изображение", + "Advanced actions": "Дополнительные действия", + "Advanced properties": "Дополнительные свойства", + "Allow scroll wheel zoom?": "Разрешить изменение масштаба колесом мыши?", + "An error occured": "Произошла ошибка", + "Are you sure you want to cancel your changes?": "Вы уверены, что хотите отменить сделанные изменения?", + "Are you sure you want to clone this map and all its datalayers?": "Вы уверены, что хотите скопировать эту карту и все её слои данных?", + "Are you sure you want to delete the feature?": "Вы уверены, что хотите удалить объект?", + "Are you sure you want to delete this map?": "Вы уверены, что хотите удалить карту?", + "Ball": "Булавка", + "Bring feature to center": "Поместить объект в центр", + "Browse data": "Просмотр данных", + "Cancel": "Отменить", + "Cancel edits": "Отменить правки", + "Center map on your location": "Переместить карту в ваше местоположение", + "Change map background": "Изменить подложку карты", + "Change symbol": "Изменить иконку", + "Change tilelayers": "Выбрать подложку", + "Choose the format of the data to import": "Выберите формат данных для импорта", + "Choose the layer of the feature": "Выберите слой для объекта", + "Choose the layer to import in": "Выбрать слой для импорта в него", + "Circle": "Кружок", + "Clone this map": "Создать копию карты", + "Default": "По умолчанию", + "Delete": "Удалить", + "Delete this feature": "Удалить объект", + "Disable editing": "Отключить редактирование", + "Display on load": "Показывать при загрузке", + "Do you want to display a minimap?": "Показывать миникарту?", + "Do you want to display popup footer?": "Хотите использовать всплывающую подсказку снизу?", + "Do you want to display the scale control?": "Показывать шкалу расстояний?", + "Download data": "Скачать данные", + "Draw a line": "Нарисовать линию", + "Draw a marker": "Добавить метку", + "Draw a polygon": "Нарисовать полигон", + "Draw a polyline": "Нарисовать линию", + "Drop": "Капля", + "Dynamic": "Динамический", + "Edit": "Редактировать", + "Edit feature's layer": "Изменить слой объекта", + "Edit map properties": "Редактировать свойства карты", + "Edit map settings": "Изменить свойства карты", + "Edit this feature": "Редактировать объект", + "Embed and share this map": "Встроить карту или поделиться ей", + "Enable editing": "Разрешить редактирование", + "Format": "Формат", + "From zoom": "С масштаба", + "Go to «{feature}»": "Перейти к «{feature}»", + "Hide controls": "Убрать элементы управления", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "Насколько сильно упрощать линии на каждом масштабе (больше значение — больше скорость, но выглядит хуже; меньше значение — более гладкое отображение)", + "Import": "Импорт", + "Import data": "Импортировать данные", + "Inherit": "Наследовать", + "Licence": "Лицензия", + "Map background credits": "Права на фоновый слой карты", + "Map user content has been published under licence": "Пользовательские данные опубликованы под лицензией", + "More controls": "Другие элементы управления", + "Optional. Same as color if not set.": "Дополнительно. Если не выбрано, то как цвет.", + "Optionnal.": "Дополнительно.", + "Paste here your data": "Вставить данные сюда", + "Please be sure the licence is compliant with your use.": "Убедитесь, что лицензия соответствует правилам использования.", + "Problem in the response": "Проблема с ответом", + "Problem in the response format": "Формат ответа не распознан", + "Provide an URL here": "Укажите ссылку здесь", + "Remote data": "Данные с удаленного сервера", + "Save": "Сохранить", + "Save current edits": "Сохранить текущие правки", + "Save this center and zoom": "Сохранить это положение и масштаб", + "Show/hide layer": "Показать/скрыть слой", + "Start editing": "Начать редактирование", + "Stop editing": "Завершить редактирование", + "The zoom and center have been setted.": "Масштаб и положение установлены", + "To zoom": "Масштабировать", + "Untitled layer": "Слой без названия", + "Untitled map": "Безымянная карта", + "Update permissions and editors": "Настроить права редактирования", + "Url": "Ссылка", + "User content credits": "Права на пользовательские данные", + "Where do we go from here?": "Что можно сделать с картой?", + "Zoom in": "Увеличить масштаб", + "Zoom out": "Уменьшить масштаб", + "Zoom to layer extent": "Масштабировать до границ слоя", + "Zoom to this feature": "Приблизиться к этому объекту", + "color": "цвет", + "dash array": "штрихи", + "description": "описание", + "fill": "заливка", + "fill color": "цвет заливки", + "fill opacity": "Непрозрачность заливки", + "inherit": "наследовать", + "licence": "лицензия", + "name": "название", + "no": "нет", + "opacity": "непрозрачность", + "stroke": "штрихи", + "weight": "толщина", + "yes": "да", + "Editing": "Редактируем", + "Embed the map": "Встроить карту", + "Short URL": "Короткая ссылка", + "# one hash for main heading": "# один шарп — заголовок", + "## two hashes for second heading": "## два шарпа — подзаголовок", + "### three hashes for third heading": "### три шарпа — подзаголовок 3-го уровня", + "**double star for bold**": "**двойные звёздочки — полужирный**", + "*simple star for italic*": "*звёздочки — курсив*", + "--- for an horizontal rule": "--- — горизонтальная линия", + "All properties are imported.": "Все свойства импортированы.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "В качестве разделителя используются запятые, табуляции и точки с запятой. Применяется датум WGS84. Импорт просматривает заголовок на наличие полей «lat» и «lon», регистр не имеет значения. Все остальные поля импортируются как свойства.", + "Custom background": "Пользовательская подложка карты", + "Help": "Помощь", + "Image: {{http://image.url.com}}": "Изображение: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Ссылка с текстом: [[http://example.com|текст для ссылки]]", + "Properties imported:": "Импортированы свойства:", + "Simple link: [[http://example.com]]": "Простая ссылка: [[http://example.com]]", + "Supported scheme": "Поддерживаемая схема", + "Supported variables that will be dynamically replaced": "Поддерживаемые переменные для автоматической замены", + "Text formatting": "Форматирование текста", + "attribution": "назначенные свойства", + "display name": "отображаемое название", + "max zoom": "максимальный масштаб", + "min zoom": "минимальный масштаб", + "Skipping unkown geometry.type: {type}": "Пропущено неизвестное свойство geometry.type: {type}", + "Please save the map before": "Пожалуйста, сначала сохраните карту", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "Вы можете использовать свойства объектов как переменные. Например, в \"http://myserver.org/images/{name}.png\", переменная {name} будет заменена значением поля \"названия\" каждой метки на карте.", + "Transform to polygon": "Преобразовать в полигон", + "Transform to lines": "Преобразовать в линию", + "Choose the data format": "Выберите формат данных", + "Error in the tilelayer URL": "Ошибка в ссылке на слой карты", + "Directions from here": "Навигация отсюда", + "Choose a preset": "Выберите шаблон", + "Limit bounds": "Установить границы", + "Use current bounds": "Использовать текущие границы", + "max East": "Восток", + "max North": "Север", + "max South": "Юг", + "max West": "Запад", + "TMS format": "Формат TMS", + "Credits": "Авторские права", + "Only visible features will be downloaded.": "Будут загружены только отображаемые объекты.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Откройте эту часть карты в редакторе OpenStreetMap, чтобы улучшить данные", + "Default properties": "Свойства по умолчанию", + "User interface options": "Настройка интерфейса", + "Image with custom width (in px): {{http://image.url.com|width}}": "Изображение с указанием ширины (в пикселях): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Использовать текущий вид вместо карты по умолчанию?", + "Iframe export options": "Свойства экспорта для Iframe", + "Include full screen link?": "Включить ссылку на полноэкранный вид?", + "See full screen": "Смотреть в полноэкранном режиме", + "height": "высота", + "width": "ширина", + "Clustered": "Кластеризованный", + "Clustering radius": "Радиус кластеризации", + "GeoRSS (only link)": "GeoRSS (только ссылка)", + "GeoRSS (title + image)": "GeoRSS (заголовок и изображение)", + "Heatmap": "Тепловая карта", + "Heatmap radius": "Радиус для тепловой карты", + "Name and description": "Название и описание", + "Override clustering radius (default 80)": "Переопределить радиус кластеризации (по умолчанию 80)", + "Override heatmap radius (default 25)": "Переопределить радиус для тепловой карты (по умолчанию 25)", + "Proxy request": "Проксировать запрос", + "Table": "Таблица", + "To use if remote server doesn't allow cross domain (slower)": "Если удалённый сервер не позволяет кросс-домен (медленно)", + "Type of layer": "Тип слоя", + "Filter…": "Фильтр...", + "Heatmap intensity property": "Свойство интенсивности тепловой карты", + "Optional intensity property for heatmap": "Дополнительные свойства интенсивности тепловой карты", + "Caption": "Заголовок", + "Data browser": "Просмотр данных", + "Do you want to display a caption bar?": "Показывать строку заголовка?", + "Do you want to display a panel on load?": "Показывать панель управления при загрузке?", + "None": "Нет", + "by": "от", + "Name and description (large)": "Название и описание (большие)", + "Empty": "Очистить", + "Split line": "Разделить линию", + "Clone": "Создать копию", + "Clone of {name}": "Копия {name}", + "Side panel": "Боковая панель", + "Powered by Leaflet and Django, glued by uMap project.": "Работает на Leaflet и Django, объединённые проектом uMap.", + "Zoom level for automatic zooms": "Масштабировать слой автоматически", + "Do you want to display the «more» control?": "Показывать кнопку «Ещё»?", + "Auto": "Автоматически", + "Default: name": "По умолчанию: название", + "Property to use for sorting features": "Свойство для сортировки объектов", + "Slideshow": "Слайдшоу", + "Start slideshow": "Начать слайдшоу", + "Stop slideshow": "Остановить слайдшоу", + "Text color for the cluster label": "Цвет текста для меток кластера", + "Zoom to the next": "Приблизиться к следующему", + "Zoom to the previous": "Приблизиться к предыдущему", + "Add a new property": "Добавить новое свойство", + "Are you sure you want to delete this property on all the features?": "Вы уверены, что хотите удалить это свойство у всех объектов?", + "Close": "Закрыть", + "Delete this property on all the features": "Удалить это свойство у всех объектов", + "Edit properties in a table": "Редактировать свойства в таблице", + "Please enter the name of the property": "Введите название свойства", + "Please enter the new name of this property": "Введите новое название свойства", + "Rename this property on all the features": "Переименовать это свойство у всех объектов", + "If false, the polygon will act as a part of the underlying map.": "Если нет, тогда полигон будет выглядеть как часть карты", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe с указанием высоты (в пикселях): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "Посмотреть все", + "Dynamic properties": "Динамические свойства", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Используйте переменные в скобках со свойствами объектов, например, {name}, они будут автоматически заменены соответствующими значениями.", + "Long credits": "Полное описание прав", + "No licence has been set": "Лицензия не была указана", + "Popup content template": "Шаблон всплывающей подсказки", + "Short credits": "Краткое описание прав", + "Will be displayed in the bottom right corner of the map": "Будет показано в правом нижнем углу карты", + "Will be visible in the caption of the map": "Будет показано в заголовке карты", + "Map has been saved!": "Карта сохранена!", + "Save anyway": "Сохранить в любом случае", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Упс! Похоже, кто-то другой тоже редактирует эти данные. Вы можете сохранить свои правки, но это уничтожит правки другого участника.", + "Comma separated list of properties to use when filtering features": "Список свойств, разделённых запятыми, для использования при фильтрации", + "Keep current visible layers": "Оставить текущие видимые слои", + "Coordinates": "Координаты", + "Latitude": "Широта", + "Longitude": "Долгота", + "Continue line (Ctrl-click)": "Продолжить линию (Ctrl-click)", + "Start a hole here": "Начать отверстие отсюда", + "Click last point to finish shape": "Щёлкните на последней точке, чтобы завершить", + "Click to add a marker": "Щёлкните, чтобы добавить метку", + "Click to continue drawing": "Щёлкайте, чтобы продолжить рисование", + "Click to start drawing a line": "Щёлкните, чтобы начать рисование линии", + "Click to start drawing a polygon": "Щёлкните, чтобы начать рисование полигона", + "Import in a new layer": "Импортировать в новый слой", + "Layer": "Слой", + "Please choose a format": "Пожалуйста, выберите формат", + "Imports all umap data, including layers and settings.": "Импортировать все данные uMap, включая слои и настройки.", + "Invalid umap data": "Неверные данные uMap", + "Invalid umap data in {filename}": "Неверные данные uMap в файле {filename}", + "Add a line to the current multi": "Добавить линию к текущему мультиполигону", + "Add a polygon to the current multi": "Добавить полигон к текущему мультиполигону", + "Click to edit": "Щёлкните, чтобы изменить", + "Continue line": "Продолжить линию", + "Delete this shape": "Удалить эту фигуру", + "Make main shape": "Сделать главной фигурой", + "Merge lines": "Соединить линии", + "Remove shape from the multi": "Удалить фигуру из мультиполигона", + "Transfer shape to edited feature": "Перенести фигуру на редактируемый объект", + "next": "следующий", + "previous": "предыдущий", + "Measure distances": "Измерить расстояние", + "NM": "ММ", + "kilometers": "километров", + "km": "км", + "mi": "М", + "miles": "миль", + "nautical miles": "морских миль", + "{area} acres": "{area} акров", + "{area} ha": "{area} гектар", + "{area} m²": "{area} м²", + "{area} mi²": "{area} М²", + "{area} yd²": "{area} ярд²", + "{distance} NM": "{distance} ММ", + "{distance} km": "{distance} км", + "{distance} m": "{distance} м", + "{distance} miles": "{distance} миль", + "{distance} yd": "{distance} ярдов", + "Are you sure you want to restore this version?": "Вы уверены, что хотите восстановить эту версию?", + "Extract shape to separate feature": "Извлечь фигуру в отдельный объект", + "Layer properties": "Свойства слоя", + "Restore this version": "Восстановить эту версию", + "Versions": "Версии", + "You have unsaved changes.": "У вас есть несохранённые изменения", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "Список значений, определяющих штрихи линии. Напр. «5, 10, 15».", + "Advanced transition": "Дополнительные преобразования", + "Allow interactions": "Разрешить взаимодействие", + "Autostart when map is loaded": "Автозапуск при открытии карты", + "Default interaction options": "Параметры интерактивности по умолчанию", + "Default shape properties": "Параметры фигуры по умолчанию", + "Default zoom level": "Масштаб по умолчанию", + "Define link to open in a new window on polygon click.": "Задайте адрес для открытия его в новом окне по клику на полигон.", + "Delete this vertex (Alt-click)": "Удалить эту точку (Alt-клик)", + "Display the control to open OpenStreetMap editor": "Отображать кнопку редактора OpenStreetMap", + "Display the data layers control": "Отображать кнопку управления слоями данных", + "Display the embed control": "Отображать кнопку встраивания", + "Display the fullscreen control": "Отображать кнопку полноэкранного режима", + "Display the locate control": "Отображать кнопку определения местоположения", + "Display the measure control": "Отображать линейку", + "Display the search control": "Отображать строку поиска", + "Display the tile layers control": "Отображать кнопку управления слоями подложки", + "Display the zoom control": "Отображать кнопку масштабирования", + "Exit Fullscreen": "Выйти из полноэкранного режима", + "Fetch data each time map view changes.": "Запрашивать данные при каждом изменении отображения карты", + "Filter keys": "Кнопки фильтра", + "Icon shape": "Форма иконки", + "Icon symbol": "Символ иконки", + "Interaction options": "Параметры взаимодействия", + "Label key": "Кнопка метки", + "Link to…": "Связать с...", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Должен быть в формате CSS (напр., DarkBlue или #123456)", + "No results": "Нет данных", + "Popup style": "Стиль всплывающего окна", + "Replace layer content": "Заменить содержимое слоя", + "Save this location as new feature": "Сохранить это местоположение как новый объект", + "Search location": "Поиск местоположения", + "Set URL": "Задать ссылку", + "Shape properties": "Свойства фигуры", + "Simplify": "Упростить", + "Sort key": "Кнопка сортировки", + "The name of the property to use as feature label (ex.: \"nom\")": "Название свойства в качестве метки объекта (напр., «Номер»)", + "Toggle edit mode (shift-click)": "Переключиться в режим редактирования (shift-click)", + "View Fullscreen": "Полноэкранный режим", + "Whether to display or not polygons paths.": "Показывать или нет контур полигона.", + "Whether to fill polygons with color.": "Заполнять или нет полигон заливкой цветом", + "Zoom to this place": "Приблизить объект", + "always": "всегда", + "clear": "очистить", + "define": "обозначить", + "hidden": "скрыт", + "never": "никогда", + "Automatic": "Автоматически", + "Clone this feature": "Скопировать фигуру", + "Display label": "Отображать метку", + "Drag to reorder": "Перетащите для изменения порядка", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe с заданной высотой и шириной (в px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Метки можно нажимать", + "Label direction": "Направление метки", + "Manage layers": "Управление слоями", + "On the bottom": "Внизу", + "On the left": "Слева", + "On the right": "Справа", + "On the top": "Вверху", + "Only display label on mouse hover": "Показывать только при наведении мыши", + "Open link in…": "Открыть ссылку в ...", + "Unable to detect format of file {filename}": "Невозможно определить формат файла {filename}", + "collapsed": "Свёрнуто", + "expanded": "Развёрнуто", + "iframe": "Iframe", + "new window": "Новое окно", + "parent window": "Родительское окно", + "{count} errors during import: {message}": "{count} ошибок во время импорта: {message}", + "Are you sure you want to delete this layer?": "Вы уверены что хотите удалить этот слой?", + "Delete layer": "Удалить слой", + "Error while fetching {url}": "Ошибка при обработке {url}", + "Home": "Заглавная", + "Delete all layers": "Удалить все слои", + "Full map data": "Все данные карты", + "Smart transitions": "Интеллектуальные преобразования", + "Activate slideshow mode": "Включить режим слайдшоу", + "Data is browsable": "Данные можно просматривать", + "Delay between two transitions when in play mode": "Задержка между двумя переходами в режиме проигрывания", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "Сбросьте, чтобы скрыть слой из слайдшоу, просмотра данных и всплывающей навигации...", + "{delay} seconds": "{delay} секунд", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/si_LK.json b/umap/static/umap/locale/si_LK.json new file mode 100644 index 00000000..4918b268 --- /dev/null +++ b/umap/static/umap/locale/si_LK.json @@ -0,0 +1,350 @@ +{ + "About": "About", + "Action not allowed :(": "Action not allowed :(", + "Add a layer": "Add a layer", + "Add symbol": "Add symbol", + "Advanced actions": "Advanced actions", + "Advanced properties": "Advanced properties", + "Allow scroll wheel zoom?": "Allow scroll wheel zoom?", + "An error occured": "An error occured", + "Are you sure you want to cancel your changes?": "Are you sure you want to cancel your changes?", + "Are you sure you want to clone this map and all its datalayers?": "Are you sure you want to clone this map and all its datalayers?", + "Are you sure you want to delete the feature?": "Are you sure you want to delete the feature?", + "Are you sure you want to delete this map?": "Are you sure you want to delete this map?", + "Ball": "Ball", + "Bring feature to center": "Bring feature to center", + "Browse data": "Browse data", + "Cancel": "Cancel", + "Cancel edits": "Cancel edits", + "Center map on your location": "Center map on your location", + "Change map background": "Change map background", + "Change symbol": "Change symbol", + "Change tilelayers": "Change tilelayers", + "Choose the format of the data to import": "Choose the format of the data to import", + "Choose the layer of the feature": "Choose the layer of the feature", + "Choose the layer to import in": "Choose the layer to import in", + "Circle": "Circle", + "Clone this map": "Clone this map", + "Default": "Default", + "Delete": "Delete", + "Delete this feature": "Delete this feature", + "Disable editing": "Disable editing", + "Display on load": "Display on load", + "Do you want to display a minimap?": "Do you want to display a minimap?", + "Do you want to display popup footer?": "Do you want to display popup footer?", + "Do you want to display the scale control?": "Do you want to display the scale control?", + "Download data": "Download data", + "Draw a line": "Draw a line", + "Draw a marker": "Draw a marker", + "Draw a polygon": "Draw a polygon", + "Draw a polyline": "Draw a polyline", + "Drop": "Drop", + "Dynamic": "Dynamic", + "Edit": "Edit", + "Edit feature's layer": "Edit feature's layer", + "Edit map properties": "Edit map properties", + "Edit map settings": "Edit map settings", + "Edit this feature": "Edit this feature", + "Embed and share this map": "Embed and share this map", + "Enable editing": "Enable editing", + "Format": "Format", + "From zoom": "From zoom", + "Go to «{feature}»": "Go to «{feature}»", + "Hide controls": "Hide controls", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)", + "Import": "Import", + "Import data": "Import data", + "Inherit": "Inherit", + "Licence": "Licence", + "Map background credits": "Map background credits", + "Map user content has been published under licence": "Map user content has been published under licence", + "More controls": "More controls", + "Optional. Same as color if not set.": "Optional. Same as color if not set.", + "Optionnal.": "Optionnal.", + "Paste here your data": "Paste here your data", + "Please be sure the licence is compliant with your use.": "Please be sure the licence is compliant with your use.", + "Problem in the response": "Problem in the response", + "Problem in the response format": "Problem in the response format", + "Provide an URL here": "Provide an URL here", + "Remote data": "Remote data", + "Save": "Save", + "Save current edits": "Save current edits", + "Save this center and zoom": "Save this center and zoom", + "Show/hide layer": "Show/hide layer", + "Start editing": "Start editing", + "Stop editing": "Stop editing", + "The zoom and center have been setted.": "The zoom and center have been setted.", + "To zoom": "To zoom", + "Untitled layer": "Untitled layer", + "Untitled map": "Untitled map", + "Update permissions and editors": "Update permissions and editors", + "Url": "Url", + "User content credits": "User content credits", + "Where do we go from here?": "Where do we go from here?", + "Zoom in": "Zoom in", + "Zoom out": "Zoom out", + "Zoom to layer extent": "Zoom to layer extent", + "Zoom to this feature": "Zoom to this feature", + "color": "color", + "dash array": "dash array", + "description": "description", + "fill": "fill", + "fill color": "fill color", + "fill opacity": "fill opacity", + "inherit": "inherit", + "licence": "licence", + "name": "name", + "no": "no", + "opacity": "opacity", + "stroke": "stroke", + "weight": "weight", + "yes": "yes", + "Editing": "Editing", + "Embed the map": "Embed the map", + "Short URL": "Short URL", + "# one hash for main heading": "# one hash for main heading", + "## two hashes for second heading": "## two hashes for second heading", + "### three hashes for third heading": "### three hashes for third heading", + "**double star for bold**": "**double star for bold**", + "*simple star for italic*": "*simple star for italic*", + "--- for an horizontal rule": "--- for an horizontal rule", + "All properties are imported.": "All properties are imported.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Custom background", + "Help": "Help", + "Image: {{http://image.url.com}}": "Image: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link with text: [[http://example.com|text of the link]]", + "Properties imported:": "Properties imported:", + "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]", + "Supported scheme": "Supported scheme", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "Text formatting", + "attribution": "attribution", + "display name": "display name", + "max zoom": "max zoom", + "min zoom": "min zoom", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "Please save the map before", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Transform to polygon", + "Transform to lines": "Transform to lines", + "Choose the data format": "Choose the data format", + "Error in the tilelayer URL": "Error in the tilelayer URL", + "Directions from here": "Directions from here", + "Choose a preset": "Choose a preset", + "Limit bounds": "Limit bounds", + "Use current bounds": "Use current bounds", + "max East": "max East", + "max North": "max North", + "max South": "max South", + "max West": "max West", + "TMS format": "TMS format", + "Credits": "Credits", + "Only visible features will be downloaded.": "Only visible features will be downloaded.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "Default properties", + "User interface options": "User interface options", + "Image with custom width (in px): {{http://image.url.com|width}}": "Image with custom width (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Current view instead of default map view?", + "Iframe export options": "Iframe export options", + "Include full screen link?": "Include full screen link?", + "See full screen": "See full screen", + "height": "height", + "width": "width", + "Clustered": "Clustered", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (only link)", + "GeoRSS (title + image)": "GeoRSS (title + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Name and description", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Proxy request", + "Table": "Table", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "Type of layer", + "Filter…": "Filter…", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Caption", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Do you want to display a caption bar?", + "Do you want to display a panel on load?": "Do you want to display a panel on load?", + "None": "None", + "by": "by", + "Name and description (large)": "Name and description (large)", + "Empty": "Empty", + "Split line": "Split line", + "Clone": "Clone", + "Clone of {name}": "Clone of {name}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Do you want to display the «more» control?", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Close", + "Delete this property on all the features": "Delete this property on all the features", + "Edit properties in a table": "Edit properties in a table", + "Please enter the name of the property": "Please enter the name of the property", + "Please enter the new name of this property": "Please enter the new name of this property", + "Rename this property on all the features": "Rename this property on all the features", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordinates", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Layer", + "Please choose a format": "Please choose a format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Measure distances", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "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…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/sk_SK.json b/umap/static/umap/locale/sk_SK.json new file mode 100644 index 00000000..7747a88e --- /dev/null +++ b/umap/static/umap/locale/sk_SK.json @@ -0,0 +1,350 @@ +{ + "About": "O uMap", + "Action not allowed :(": "Akcia nie je povolená :(", + "Add a layer": "Pridať vrstvu", + "Add symbol": "Pridať symbol", + "Advanced actions": "Pokročilé akcie", + "Advanced properties": "Pokročilé vlastnosti", + "Allow scroll wheel zoom?": "Povoliť približovanie kolieskom myši?", + "An error occured": "Nastala chyba", + "Are you sure you want to cancel your changes?": "Ste si istí že chcete zrušiť vaše úpravy?", + "Are you sure you want to clone this map and all its datalayers?": "Určite chcete vytvoriť kópiu celej tejto mapy a všetkých jej vrstiev?", + "Are you sure you want to delete the feature?": "Určite chcete vymazať tento objekt?", + "Are you sure you want to delete this map?": "Ste si istí, že chcete vymazať túto mapu?", + "Ball": "Špendlík", + "Bring feature to center": "Vycentruj mapu na objekt", + "Browse data": "Prezerať údaje", + "Cancel": "Zrušiť", + "Cancel edits": "Zrušiť zmeny", + "Center map on your location": "Vycentrovať mapu na vašu polohu", + "Change map background": "Zmeniť pozadie mapy", + "Change symbol": "Zmeniť symbol", + "Change tilelayers": "Zmeniť pozadie mapy", + "Choose the format of the data to import": "Zvoľte v akom formáte sú importované údaje", + "Choose the layer of the feature": "Zvoľte vrstvu do ktorej objekt patrí", + "Choose the layer to import in": "Zvoľte vrstvu, do ktorej sa bude importovať", + "Circle": "Kruh", + "Clone this map": "Vytvoriť kópiu tejto mapy", + "Default": "Predvolené", + "Delete": "Vymazať", + "Delete this feature": "Vymazať tento objekt", + "Disable editing": "Zakázať úpravy", + "Display on load": "Zobraziť pri štarte", + "Do you want to display a minimap?": "Chcete zobraziť minimapu?", + "Do you want to display popup footer?": "Chcete zobraziť v bubline navigačný panel?", + "Do you want to display the scale control?": "Chcete zobraziť mierku mapy?", + "Download data": "Stiahnuť údaje", + "Draw a line": "Nakresliť jednoduchú čiaru", + "Draw a marker": "Nakresliť značku miesta", + "Draw a polygon": "Nakresliť polygon", + "Draw a polyline": "Nakresliť krivku", + "Drop": "Pustiť", + "Dynamic": "Dynamicky", + "Edit": "Upraviť", + "Edit feature's layer": "Upraviť vrstvu objektu", + "Edit map properties": "Upraviť vlastnosti mapy", + "Edit map settings": "Upraviť nastavenia mapy", + "Edit this feature": "Upraviť tento objekt", + "Embed and share this map": "Zdieľaj alebo vlož mapu do iného webu", + "Enable editing": "Povoliť úpravy", + "Format": "Formát", + "From zoom": "Max. oddialenie", + "Go to «{feature}»": "Prejsť na «{feature}»", + "Hide controls": "Skryť ovládacie prvky", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "Ako veľmi vyhladzovať a zjednodušovať pri oddialeni (väčšie = rýchlejša odozva a plynulejší vzhľad, menšie = presnejšie)", + "Import": "Importovať", + "Import data": "Import údajov", + "Inherit": "Predvolené", + "Licence": "Licencia", + "Map background credits": "Autor mapy pozadia", + "Map user content has been published under licence": "Použivateľské údaje sú zverejnené pod licenciou", + "More controls": "Viac ovládacích prvkov", + "Optional. Same as color if not set.": "Nepovinné. Rovnaké ako farba, ak nie je nastavené.", + "Optionnal.": "Nepovinné", + "Paste here your data": "Sem vložte vaše údaje", + "Please be sure the licence is compliant with your use.": "Prosíme uistite sa, že licencia je v zhode s tým ako mapu používate.", + "Problem in the response": "Problém v odpovedi", + "Problem in the response format": "Problém vo formáte odpovede", + "Provide an URL here": "Sem vložte odkaz URL", + "Remote data": "Vzdialené údaje", + "Save": "Uložiť", + "Save current edits": "Uložiť nedávne zmeny", + "Save this center and zoom": "Uložiť túto pozíciu mapy a jej priblíženie", + "Show/hide layer": "Ukázať/skryť vrstvu", + "Start editing": "Začať úpravy", + "Stop editing": "Ukončiť úpravy", + "The zoom and center have been setted.": "Priblíženie a stred mapy boli nastavené", + "To zoom": "Max. priblíženie", + "Untitled layer": "Nepomenovaná vrstva", + "Untitled map": "Nepomenovaná mapa", + "Update permissions and editors": "Nastaviť prístupové práva a prispievateľov", + "Url": "URL", + "User content credits": "Autor používateľského obsahu", + "Where do we go from here?": "Kam sa dá odtiaľto dostať?", + "Zoom in": "Priblížiť", + "Zoom out": "Oddialiť", + "Zoom to layer extent": "Prispôsobiť priblíženie vrstve", + "Zoom to this feature": "Priblížiť na tento objekt", + "color": "farba", + "dash array": "štýl prerušovanej čiary", + "description": "popis", + "fill": "výplň", + "fill color": "farba výplne", + "fill opacity": "priehľadnosť výplne", + "inherit": "predvolené", + "licence": "licencia", + "name": "názov", + "no": "nie", + "opacity": "priehľadnosť", + "stroke": "linka", + "weight": "šírka linky", + "yes": "áno", + "Editing": "Upravujete", + "Embed the map": "Vložiť mapu na iný web", + "Short URL": "Krátky odkaz URL", + "# one hash for main heading": "# jedna mriežka pre hlavný nadpis", + "## two hashes for second heading": "## dve mriežky pre nadpis druhej úrovne", + "### three hashes for third heading": "## tri mriežky pre nadpis tretej úrovne", + "**double star for bold**": "**všetko medzi dvoma hviezdičkami je tučně**", + "*simple star for italic*": "*všetko medzi hviezdičkami bude kurzívou*", + "--- for an horizontal rule": "--- vytvorí vodorovnú linku", + "All properties are imported.": "Všetky vlastnosti sú naimportované.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Hodnoty oddelené čiarkou, tabulátorom, alebo bodkočiarkou. Predpokladá sa SRS WGS84 a sú importované iba polohy bodov. Import hľadá záhlavie stĺpcov začínajúcich na \"lat\" a \"lon\" a tie považuje za súradnice (na veľkosti písmien nezáleži). Ostatné stĺpce sú importované ako vlastnosti.", + "Custom background": "Vlastné pozadie", + "Help": "Nápoveda", + "Image: {{http://image.url.com}}": "Obrázok: {{http://url.obrazka.sk}}", + "Link with text: [[http://example.com|text of the link]]": "Odkaz s textom: [[http://priklad.sk|text odkazu]]", + "Properties imported:": "Importované vlastnosti:", + "Simple link: [[http://example.com]]": "Jednoduchý odkaz: [[http://priklad.sk]]", + "Supported scheme": "Podporovaná schéma", + "Supported variables that will be dynamically replaced": "Podporované premenné, ktoré budú automaticky nahradené", + "Text formatting": "Formátovanie textu", + "attribution": "autorstvo", + "display name": "zobraziť názov", + "max zoom": "max. priblíženie", + "min zoom": "max. oddialenie", + "Skipping unkown geometry.type: {type}": "Preskakujem neznáme geometry.type: {type}", + "Please save the map before": "Prosím, najprv uložte mapu", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "Môžete používať vlastnosti objektu ako premenné, napr. v \"http://mojserver.sk/obrazky/{name}.png\" je {name} nahradené hodnotou \"name\" každého objektu.", + "Transform to polygon": "Transformuj na mnohouholník", + "Transform to lines": "Transformuj na čiary", + "Choose the data format": "Zvoľte formát údajov", + "Error in the tilelayer URL": "Chyba URL dlaždicovej vrstvy", + "Directions from here": "Navigovať odtiaľto", + "Choose a preset": "Vyberte predvoľbu", + "Limit bounds": "Obmedziť hranice", + "Use current bounds": "Použiť aktuálne hranice", + "max East": "max. Východ", + "max North": "max. Sever", + "max South": "max. Juh", + "max West": "max. Západ", + "TMS format": "Formát TMS", + "Credits": "Poďakovania", + "Only visible features will be downloaded.": "Stiahnuté budú len viditeľné objekty.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Otvoriť túto mapovú oblasť v mapovom editore pre presnenie dát v OpenStreetMap", + "Default properties": "Predvolené vlastnosti", + "User interface options": "Možnosti používateľského rozhrania", + "Image with custom width (in px): {{http://image.url.com|width}}": "Obraz s vlastnou šírkou (v pixeloch): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Aktuálne zobrazenie namiesto štandardného zobrazenia mapy?", + "Iframe export options": "Možnosti Iframe exportu", + "Include full screen link?": "Zahrnúť odkaz na celú obrazovku?", + "See full screen": "Na celú obrazovku", + "height": "Výška", + "width": "Šírka", + "Clustered": "Zhluková", + "Clustering radius": "Polomer zhlukovania", + "GeoRSS (only link)": "GeoRSS (iba odkaz)", + "GeoRSS (title + image)": "GeoRSS (názov + obrázok)", + "Heatmap": "Teplotná mapa", + "Heatmap radius": "Polomer teplotnej mapy", + "Name and description": "Názov a popis", + "Override clustering radius (default 80)": "Prepísať polomer zhlukovania (predvolené 80)", + "Override heatmap radius (default 25)": "Prepísať polomer teplotnej mapy (predvolené 25)", + "Proxy request": "Požiadavky cez proxy", + "Table": "Tabuľka", + "To use if remote server doesn't allow cross domain (slower)": "Použiť keď vzdialený server nepovoľuje cross-domain (pomalšie)", + "Type of layer": "Typ vrstvy", + "Filter…": "Filter…", + "Heatmap intensity property": "Vlastnosti intenzity heatmapy", + "Optional intensity property for heatmap": "Voliteľné vlastnosti intenzity pre heatmapu", + "Caption": "Nadpis", + "Data browser": "Prehliadač", + "Do you want to display a caption bar?": "Chcete zobraziť lištu s nadpismi?", + "Do you want to display a panel on load?": "Prajete si zobraziť panel pri štarte?", + "None": "Žiadny", + "by": "od", + "Name and description (large)": "Názov a popis (veľký)", + "Empty": "Vyprázdniť", + "Split line": "Rozdelit čiaru", + "Clone": "Vytvoriť kópiu", + "Clone of {name}": "Kópia {name}", + "Side panel": "Bočný panel", + "Powered by Leaflet and Django, glued by uMap project.": "Zostavené z Leaflet a Django, prepojené pomocou projektu uMap.", + "Zoom level for automatic zooms": "Úroveň priblíženia pre automatické približovanie", + "Do you want to display the «more» control?": "Prajete si zobrazit «viac» nastavení?", + "Auto": "Automatická", + "Default: name": "Štandardná hodnota: názov", + "Property to use for sorting features": "Vlastnosť použitá pre radenie objektov", + "Slideshow": "Prezentácia", + "Start slideshow": "Spustiť prezentáciu", + "Stop slideshow": "Zastaviť prezentáciu", + "Text color for the cluster label": "Farba textu pre popis zhluku", + "Zoom to the next": "Priblížiť k ďalšiemu", + "Zoom to the previous": "Priblížiť k predošlému", + "Add a new property": "Pridať novú vlastnosť", + "Are you sure you want to delete this property on all the features?": "Ste si istí že chcete vymazať túto vlastnosť na všetkých objektoch?", + "Close": "Zatvoriť", + "Delete this property on all the features": "Vymazať túto vlastnosť na všetkých objektoch", + "Edit properties in a table": "Upraviť vlastnosti v tabuľke", + "Please enter the name of the property": "Prosím, zadajte názov vlastnosti", + "Please enter the new name of this property": "Prosím, zadajte nový názov tejto vlastnosti", + "Rename this property on all the features": "Premenovať túto vlastnosť na všetkých objektoch", + "If false, the polygon will act as a part of the underlying map.": "Ak je vypnuté, polygón sa bude správať ako súčasť mapového podkladu.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe s vlastnou výškou (v px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "Zobraziť všetko", + "Dynamic properties": "Dynamické vlastnosti", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Použite zástupné znaky s vlastnosťami objektov medzi zloženými zátvorkami, napr. {name}, a budú dynamicky nahradené zodpovedajúcimi hodnotami.", + "Long credits": "Dlhý text autorstva", + "No licence has been set": "Nebola nastavená žiadna licencia", + "Popup content template": "Šablóna obsahu bubliny", + "Short credits": "Krátky text autorstva", + "Will be displayed in the bottom right corner of the map": "Bude zobrazené s mapou vpravo dole", + "Will be visible in the caption of the map": "Bude zobrazené v nadpise mapy", + "Map has been saved!": "Mapa bola uložená!", + "Save anyway": "Uložiť napriek tomu", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Ojoj! Niekto iný medzitým taktiež upravil údaje. Môžete ich napriek tomu uložiť, ale zmažete tak jeho zmeny.", + "Comma separated list of properties to use when filtering features": "Čiarkami oddelený zoznam vlastností pre filtrovanie objektov", + "Keep current visible layers": "Použiť pre aktuálne zobrazenie vrstiev", + "Coordinates": "Súradnice", + "Latitude": "Zem. šírka", + "Longitude": "Zem. dĺžka", + "Continue line (Ctrl-click)": "Pokračovať v čiare (Ctrl+klik)", + "Start a hole here": "Tu začať dieru", + "Click last point to finish shape": "Kliknite na posledný bod pre dokončenie tvaru", + "Click to add a marker": "Kliknutím pridáte značku", + "Click to continue drawing": "Kliknutím môžete pokračovať v kreslení", + "Click to start drawing a line": "Kliknutím začnete kresliť čiaru", + "Click to start drawing a polygon": "Kliknutím začnete kresliť polygón", + "Import in a new layer": "Importovať do novej vrstvy", + "Layer": "Vrstva", + "Please choose a format": "Prosím, zvoľte formát", + "Imports all umap data, including layers and settings.": "Importuje všetky údaje umapy, vrátane vrstiev a nastavení.", + "Invalid umap data": "Neplatné údaje umapy", + "Invalid umap data in {filename}": "Neplatné údaje umapy v súbore {filename}", + "Add a line to the current multi": "Pridať čiaru k aktuálnemu multi", + "Add a polygon to the current multi": "Pridať polygón k aktuálnemu multi", + "Click to edit": "Kliknutím upravte", + "Continue line": "Pokračovať v čiare", + "Delete this shape": "Vymazať tento tvar", + "Make main shape": "Urobiť hlavným tvarom", + "Merge lines": "Spojiť čiary", + "Remove shape from the multi": "Odobrať tvar z multi", + "Transfer shape to edited feature": "Preniesť tvar do upravovaného objektu", + "next": "ďalší", + "previous": "predchádzajúci", + "Measure distances": "Merať vzdialenosť", + "NM": "NM", + "kilometers": "kilometrov", + "km": "km", + "mi": "mi", + "miles": "míľ", + "nautical miles": "námorných míľ", + "{area} acres": "{area} akrov", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} míľ", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Určite chcete obnoviť túto verziu?", + "Extract shape to separate feature": "Vyňať tvar do samostatného objektu", + "Layer properties": "Vlastnosti vrstvy", + "Restore this version": "Obnoviť túto verziu", + "Versions": "Verzie", + "You have unsaved changes.": "Máte neuložené zmeny.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "Čiarkami oddelený zoznam čísel, ktorý popisuje vzor prerušovanej čiary. Napr. \"5, 10, 15\".", + "Advanced transition": "Pokročilý prechod", + "Allow interactions": "Povoliť interakcie", + "Autostart when map is loaded": "Aut. spustenie pri načítaní mapy", + "Default interaction options": "Predvolené možnosti interakcie", + "Default shape properties": "Predvolené vlastnosti tvaru", + "Default zoom level": "Predvolené priblíženie", + "Define link to open in a new window on polygon click.": "Definujte odkaz na otvorenie, ktorý otvorí nové okno po kliknutí na polygón.", + "Delete this vertex (Alt-click)": "Vymazať tento bod (Alt+klik)", + "Display the control to open OpenStreetMap editor": "Zobraziť ovládanie na otvorenie editora OpenStreetMap", + "Display the data layers control": "Zobraziť ovládanie údajov vrstiev", + "Display the embed control": "Zobraziť ovládanie vkladania", + "Display the fullscreen control": "Zobraziť ovládanie celej obrazovky", + "Display the locate control": "Zobraziť ovládanie polohy", + "Display the measure control": "Zobraziť ovládanie merania", + "Display the search control": "Zobraziť ovládanie vyhľadávania", + "Display the tile layers control": "Zobraziť ovládanie dlaždíc vrstiev", + "Display the zoom control": "Zobraziť ovládanie priblíženia", + "Exit Fullscreen": "Ukončiť režim celej obrazovky", + "Fetch data each time map view changes.": "Načítanie údajov pri každej zmene zobrazenia mapy.", + "Filter keys": "Kľúče filtra", + "Icon shape": "Tvar ikony", + "Icon symbol": "Symbol ikony", + "Interaction options": "Možnosti interakcie", + "Label key": "Kľúč popisu", + "Link to…": "Odkaz na…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Musí byť platná hodnota CSS (napr.: DarkBlue or #123456)", + "No results": "Žiadne výsledky", + "Popup style": "Štýl bubliny", + "Replace layer content": "Nahradiť obsah vrstvy", + "Save this location as new feature": "Uložiť túto polohu ako nový objekt", + "Search location": "Vyhľadať polohu", + "Set URL": "Nastaviť URL", + "Shape properties": "Vlastnosti tvaru", + "Simplify": "Zjednodušiť", + "Sort key": "Kľúč radenia", + "The name of the property to use as feature label (ex.: \"nom\")": "Názov vlastnosti používať ako popis objektu (napr.: \"nom\")", + "Toggle edit mode (shift-click)": "Prepnúť režim úprav (Shift+klik)", + "View Fullscreen": "Zobraziť na celú obrazovky", + "Whether to display or not polygons paths.": "Či sa má alebo nemá zobraziť cesty polygónov.", + "Whether to fill polygons with color.": "Či sa má vyplniť polygón farbou.", + "Zoom to this place": "Priblížiť na toto miesto", + "always": "vždy", + "clear": "vyčistiť", + "define": "definovať", + "hidden": "skryté", + "never": "nikdy", + "Automatic": "Automaticky", + "Clone this feature": "Vytvoriť kópiu objektu", + "Display label": "Zobraziť popis", + "Drag to reorder": "Presunutím zmeníte poradie", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe s vlastnou výškou a šírkou (v px): {{{http://iframe.url.com|height*widht}}}", + "Labels are clickable": "Popis je klikateľný", + "Label direction": "Orientácia popisu", + "Manage layers": "Nastavenie vrstiev", + "On the bottom": "V spodnej časti", + "On the left": "Naľavo", + "On the right": "Napravo", + "On the top": "V hornej časti", + "Only display label on mouse hover": "Zobraziť popis iba pri prejdení myšou", + "Open link in…": "Otvoriť odkaz v…", + "Unable to detect format of file {filename}": "Nepodarilo sa rozpoznať formát súboru {filename}", + "collapsed": "zbalené", + "expanded": "rozbalené", + "iframe": "iframe", + "new window": "nové okno", + "parent window": "nadradené okno", + "{count} errors during import: {message}": "Počet chýb počas importu {count}: {message}", + "Are you sure you want to delete this layer?": "Určite chcete vymazať túto vrstvu?", + "Delete layer": "Vymazať vrstvu", + "Error while fetching {url}": "Vyskytla sa chyba počas načítania {url}", + "Home": "Domov", + "Delete all layers": "Vymazať všetky vrstvy", + "Full map data": "Údaje celej mapy", + "Smart transitions": "Chytré prechody", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "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…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/th_TH.json b/umap/static/umap/locale/th_TH.json new file mode 100644 index 00000000..4918b268 --- /dev/null +++ b/umap/static/umap/locale/th_TH.json @@ -0,0 +1,350 @@ +{ + "About": "About", + "Action not allowed :(": "Action not allowed :(", + "Add a layer": "Add a layer", + "Add symbol": "Add symbol", + "Advanced actions": "Advanced actions", + "Advanced properties": "Advanced properties", + "Allow scroll wheel zoom?": "Allow scroll wheel zoom?", + "An error occured": "An error occured", + "Are you sure you want to cancel your changes?": "Are you sure you want to cancel your changes?", + "Are you sure you want to clone this map and all its datalayers?": "Are you sure you want to clone this map and all its datalayers?", + "Are you sure you want to delete the feature?": "Are you sure you want to delete the feature?", + "Are you sure you want to delete this map?": "Are you sure you want to delete this map?", + "Ball": "Ball", + "Bring feature to center": "Bring feature to center", + "Browse data": "Browse data", + "Cancel": "Cancel", + "Cancel edits": "Cancel edits", + "Center map on your location": "Center map on your location", + "Change map background": "Change map background", + "Change symbol": "Change symbol", + "Change tilelayers": "Change tilelayers", + "Choose the format of the data to import": "Choose the format of the data to import", + "Choose the layer of the feature": "Choose the layer of the feature", + "Choose the layer to import in": "Choose the layer to import in", + "Circle": "Circle", + "Clone this map": "Clone this map", + "Default": "Default", + "Delete": "Delete", + "Delete this feature": "Delete this feature", + "Disable editing": "Disable editing", + "Display on load": "Display on load", + "Do you want to display a minimap?": "Do you want to display a minimap?", + "Do you want to display popup footer?": "Do you want to display popup footer?", + "Do you want to display the scale control?": "Do you want to display the scale control?", + "Download data": "Download data", + "Draw a line": "Draw a line", + "Draw a marker": "Draw a marker", + "Draw a polygon": "Draw a polygon", + "Draw a polyline": "Draw a polyline", + "Drop": "Drop", + "Dynamic": "Dynamic", + "Edit": "Edit", + "Edit feature's layer": "Edit feature's layer", + "Edit map properties": "Edit map properties", + "Edit map settings": "Edit map settings", + "Edit this feature": "Edit this feature", + "Embed and share this map": "Embed and share this map", + "Enable editing": "Enable editing", + "Format": "Format", + "From zoom": "From zoom", + "Go to «{feature}»": "Go to «{feature}»", + "Hide controls": "Hide controls", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)", + "Import": "Import", + "Import data": "Import data", + "Inherit": "Inherit", + "Licence": "Licence", + "Map background credits": "Map background credits", + "Map user content has been published under licence": "Map user content has been published under licence", + "More controls": "More controls", + "Optional. Same as color if not set.": "Optional. Same as color if not set.", + "Optionnal.": "Optionnal.", + "Paste here your data": "Paste here your data", + "Please be sure the licence is compliant with your use.": "Please be sure the licence is compliant with your use.", + "Problem in the response": "Problem in the response", + "Problem in the response format": "Problem in the response format", + "Provide an URL here": "Provide an URL here", + "Remote data": "Remote data", + "Save": "Save", + "Save current edits": "Save current edits", + "Save this center and zoom": "Save this center and zoom", + "Show/hide layer": "Show/hide layer", + "Start editing": "Start editing", + "Stop editing": "Stop editing", + "The zoom and center have been setted.": "The zoom and center have been setted.", + "To zoom": "To zoom", + "Untitled layer": "Untitled layer", + "Untitled map": "Untitled map", + "Update permissions and editors": "Update permissions and editors", + "Url": "Url", + "User content credits": "User content credits", + "Where do we go from here?": "Where do we go from here?", + "Zoom in": "Zoom in", + "Zoom out": "Zoom out", + "Zoom to layer extent": "Zoom to layer extent", + "Zoom to this feature": "Zoom to this feature", + "color": "color", + "dash array": "dash array", + "description": "description", + "fill": "fill", + "fill color": "fill color", + "fill opacity": "fill opacity", + "inherit": "inherit", + "licence": "licence", + "name": "name", + "no": "no", + "opacity": "opacity", + "stroke": "stroke", + "weight": "weight", + "yes": "yes", + "Editing": "Editing", + "Embed the map": "Embed the map", + "Short URL": "Short URL", + "# one hash for main heading": "# one hash for main heading", + "## two hashes for second heading": "## two hashes for second heading", + "### three hashes for third heading": "### three hashes for third heading", + "**double star for bold**": "**double star for bold**", + "*simple star for italic*": "*simple star for italic*", + "--- for an horizontal rule": "--- for an horizontal rule", + "All properties are imported.": "All properties are imported.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Custom background", + "Help": "Help", + "Image: {{http://image.url.com}}": "Image: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link with text: [[http://example.com|text of the link]]", + "Properties imported:": "Properties imported:", + "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]", + "Supported scheme": "Supported scheme", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "Text formatting", + "attribution": "attribution", + "display name": "display name", + "max zoom": "max zoom", + "min zoom": "min zoom", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "Please save the map before", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Transform to polygon", + "Transform to lines": "Transform to lines", + "Choose the data format": "Choose the data format", + "Error in the tilelayer URL": "Error in the tilelayer URL", + "Directions from here": "Directions from here", + "Choose a preset": "Choose a preset", + "Limit bounds": "Limit bounds", + "Use current bounds": "Use current bounds", + "max East": "max East", + "max North": "max North", + "max South": "max South", + "max West": "max West", + "TMS format": "TMS format", + "Credits": "Credits", + "Only visible features will be downloaded.": "Only visible features will be downloaded.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "Default properties", + "User interface options": "User interface options", + "Image with custom width (in px): {{http://image.url.com|width}}": "Image with custom width (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Current view instead of default map view?", + "Iframe export options": "Iframe export options", + "Include full screen link?": "Include full screen link?", + "See full screen": "See full screen", + "height": "height", + "width": "width", + "Clustered": "Clustered", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (only link)", + "GeoRSS (title + image)": "GeoRSS (title + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Name and description", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Proxy request", + "Table": "Table", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "Type of layer", + "Filter…": "Filter…", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Caption", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Do you want to display a caption bar?", + "Do you want to display a panel on load?": "Do you want to display a panel on load?", + "None": "None", + "by": "by", + "Name and description (large)": "Name and description (large)", + "Empty": "Empty", + "Split line": "Split line", + "Clone": "Clone", + "Clone of {name}": "Clone of {name}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Do you want to display the «more» control?", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Close", + "Delete this property on all the features": "Delete this property on all the features", + "Edit properties in a table": "Edit properties in a table", + "Please enter the name of the property": "Please enter the name of the property", + "Please enter the new name of this property": "Please enter the new name of this property", + "Rename this property on all the features": "Rename this property on all the features", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordinates", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Layer", + "Please choose a format": "Please choose a format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Measure distances", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "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…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/tr.json b/umap/static/umap/locale/tr.json new file mode 100644 index 00000000..4918b268 --- /dev/null +++ b/umap/static/umap/locale/tr.json @@ -0,0 +1,350 @@ +{ + "About": "About", + "Action not allowed :(": "Action not allowed :(", + "Add a layer": "Add a layer", + "Add symbol": "Add symbol", + "Advanced actions": "Advanced actions", + "Advanced properties": "Advanced properties", + "Allow scroll wheel zoom?": "Allow scroll wheel zoom?", + "An error occured": "An error occured", + "Are you sure you want to cancel your changes?": "Are you sure you want to cancel your changes?", + "Are you sure you want to clone this map and all its datalayers?": "Are you sure you want to clone this map and all its datalayers?", + "Are you sure you want to delete the feature?": "Are you sure you want to delete the feature?", + "Are you sure you want to delete this map?": "Are you sure you want to delete this map?", + "Ball": "Ball", + "Bring feature to center": "Bring feature to center", + "Browse data": "Browse data", + "Cancel": "Cancel", + "Cancel edits": "Cancel edits", + "Center map on your location": "Center map on your location", + "Change map background": "Change map background", + "Change symbol": "Change symbol", + "Change tilelayers": "Change tilelayers", + "Choose the format of the data to import": "Choose the format of the data to import", + "Choose the layer of the feature": "Choose the layer of the feature", + "Choose the layer to import in": "Choose the layer to import in", + "Circle": "Circle", + "Clone this map": "Clone this map", + "Default": "Default", + "Delete": "Delete", + "Delete this feature": "Delete this feature", + "Disable editing": "Disable editing", + "Display on load": "Display on load", + "Do you want to display a minimap?": "Do you want to display a minimap?", + "Do you want to display popup footer?": "Do you want to display popup footer?", + "Do you want to display the scale control?": "Do you want to display the scale control?", + "Download data": "Download data", + "Draw a line": "Draw a line", + "Draw a marker": "Draw a marker", + "Draw a polygon": "Draw a polygon", + "Draw a polyline": "Draw a polyline", + "Drop": "Drop", + "Dynamic": "Dynamic", + "Edit": "Edit", + "Edit feature's layer": "Edit feature's layer", + "Edit map properties": "Edit map properties", + "Edit map settings": "Edit map settings", + "Edit this feature": "Edit this feature", + "Embed and share this map": "Embed and share this map", + "Enable editing": "Enable editing", + "Format": "Format", + "From zoom": "From zoom", + "Go to «{feature}»": "Go to «{feature}»", + "Hide controls": "Hide controls", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)", + "Import": "Import", + "Import data": "Import data", + "Inherit": "Inherit", + "Licence": "Licence", + "Map background credits": "Map background credits", + "Map user content has been published under licence": "Map user content has been published under licence", + "More controls": "More controls", + "Optional. Same as color if not set.": "Optional. Same as color if not set.", + "Optionnal.": "Optionnal.", + "Paste here your data": "Paste here your data", + "Please be sure the licence is compliant with your use.": "Please be sure the licence is compliant with your use.", + "Problem in the response": "Problem in the response", + "Problem in the response format": "Problem in the response format", + "Provide an URL here": "Provide an URL here", + "Remote data": "Remote data", + "Save": "Save", + "Save current edits": "Save current edits", + "Save this center and zoom": "Save this center and zoom", + "Show/hide layer": "Show/hide layer", + "Start editing": "Start editing", + "Stop editing": "Stop editing", + "The zoom and center have been setted.": "The zoom and center have been setted.", + "To zoom": "To zoom", + "Untitled layer": "Untitled layer", + "Untitled map": "Untitled map", + "Update permissions and editors": "Update permissions and editors", + "Url": "Url", + "User content credits": "User content credits", + "Where do we go from here?": "Where do we go from here?", + "Zoom in": "Zoom in", + "Zoom out": "Zoom out", + "Zoom to layer extent": "Zoom to layer extent", + "Zoom to this feature": "Zoom to this feature", + "color": "color", + "dash array": "dash array", + "description": "description", + "fill": "fill", + "fill color": "fill color", + "fill opacity": "fill opacity", + "inherit": "inherit", + "licence": "licence", + "name": "name", + "no": "no", + "opacity": "opacity", + "stroke": "stroke", + "weight": "weight", + "yes": "yes", + "Editing": "Editing", + "Embed the map": "Embed the map", + "Short URL": "Short URL", + "# one hash for main heading": "# one hash for main heading", + "## two hashes for second heading": "## two hashes for second heading", + "### three hashes for third heading": "### three hashes for third heading", + "**double star for bold**": "**double star for bold**", + "*simple star for italic*": "*simple star for italic*", + "--- for an horizontal rule": "--- for an horizontal rule", + "All properties are imported.": "All properties are imported.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Custom background", + "Help": "Help", + "Image: {{http://image.url.com}}": "Image: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link with text: [[http://example.com|text of the link]]", + "Properties imported:": "Properties imported:", + "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]", + "Supported scheme": "Supported scheme", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "Text formatting", + "attribution": "attribution", + "display name": "display name", + "max zoom": "max zoom", + "min zoom": "min zoom", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "Please save the map before", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Transform to polygon", + "Transform to lines": "Transform to lines", + "Choose the data format": "Choose the data format", + "Error in the tilelayer URL": "Error in the tilelayer URL", + "Directions from here": "Directions from here", + "Choose a preset": "Choose a preset", + "Limit bounds": "Limit bounds", + "Use current bounds": "Use current bounds", + "max East": "max East", + "max North": "max North", + "max South": "max South", + "max West": "max West", + "TMS format": "TMS format", + "Credits": "Credits", + "Only visible features will be downloaded.": "Only visible features will be downloaded.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "Default properties", + "User interface options": "User interface options", + "Image with custom width (in px): {{http://image.url.com|width}}": "Image with custom width (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Current view instead of default map view?", + "Iframe export options": "Iframe export options", + "Include full screen link?": "Include full screen link?", + "See full screen": "See full screen", + "height": "height", + "width": "width", + "Clustered": "Clustered", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (only link)", + "GeoRSS (title + image)": "GeoRSS (title + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Name and description", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Proxy request", + "Table": "Table", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "Type of layer", + "Filter…": "Filter…", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Caption", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Do you want to display a caption bar?", + "Do you want to display a panel on load?": "Do you want to display a panel on load?", + "None": "None", + "by": "by", + "Name and description (large)": "Name and description (large)", + "Empty": "Empty", + "Split line": "Split line", + "Clone": "Clone", + "Clone of {name}": "Clone of {name}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Do you want to display the «more» control?", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Close", + "Delete this property on all the features": "Delete this property on all the features", + "Edit properties in a table": "Edit properties in a table", + "Please enter the name of the property": "Please enter the name of the property", + "Please enter the new name of this property": "Please enter the new name of this property", + "Rename this property on all the features": "Rename this property on all the features", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordinates", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Layer", + "Please choose a format": "Please choose a format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Measure distances", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "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…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/uk_UA.json b/umap/static/umap/locale/uk_UA.json new file mode 100644 index 00000000..f63f8b19 --- /dev/null +++ b/umap/static/umap/locale/uk_UA.json @@ -0,0 +1,350 @@ +{ + "About": "Про це", + "Action not allowed :(": "Дія недоступна :(", + "Add a layer": "Додати шар", + "Add symbol": "Додати зображення", + "Advanced actions": "Додаткові дії", + "Advanced properties": "Розширенні параметри", + "Allow scroll wheel zoom?": "Дозволити зміну масштабу колесом миші?", + "An error occured": "Виникла помилка", + "Are you sure you want to cancel your changes?": "Ви впевнені, що хочете скасувати зроблені зміни?", + "Are you sure you want to clone this map and all its datalayers?": "Ви впевнені, що бажаєте скопіювати цю мапу з її усіма даними", + "Are you sure you want to delete the feature?": "Ви впевнені, що хочете вилучити об’єкт?", + "Are you sure you want to delete this map?": "Ви впевнені, що хочете вилучити мапу?", + "Ball": "Шпилька", + "Bring feature to center": "Помістити об’єкт в центр", + "Browse data": "Огляд даних", + "Cancel": "Скасувати", + "Cancel edits": "Скасувати правки", + "Center map on your location": "Центрувати мапу за Вашим місцем розташування", + "Change map background": "Змінити фонову мапу", + "Change symbol": "Змінити зображення", + "Change tilelayers": "Вибрати фонові шари", + "Choose the format of the data to import": "Виберіть формат даних для імпорту", + "Choose the layer of the feature": "Виберіть шар для об’єкта", + "Choose the layer to import in": "Виберіть шар для імпорту в нього", + "Circle": "Коло", + "Clone this map": "Створити копію мапи", + "Default": "За умовчанням", + "Delete": "Видалити", + "Delete this feature": "Вилучити цей об’єкт", + "Disable editing": "Вимкнути редагування", + "Display on load": "Відображати при завантаженні", + "Do you want to display a minimap?": "Показувати мінімапу?", + "Do you want to display popup footer?": "Хочете використовувати спливаючу підказку знизу?", + "Do you want to display the scale control?": "Показувати шкалу відстаней?", + "Download data": "Звантажити дані", + "Draw a line": "Намалювати лінію", + "Draw a marker": "Додати позначку", + "Draw a polygon": "Намалювати багатокутник", + "Draw a polyline": "Намалювати лінію", + "Drop": "Крапля", + "Dynamic": "Динамічний", + "Edit": "Редагувати", + "Edit feature's layer": "Змінити шар об’єкту", + "Edit map properties": "Редагуємо властивості мапи", + "Edit map settings": "Змінити властивості мапи", + "Edit this feature": "Редагувати цей об’єкт", + "Embed and share this map": "Вбудувати мапу та поділитися нею", + "Enable editing": "Задіяти редагування", + "Format": "Формат", + "From zoom": "З масштабу", + "Go to «{feature}»": "Перейти до «{feature}»", + "Hide controls": "Прибрати елементи управління", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "Наскільки сильно спрощувати лінії на кожному масштабі (більше значення — більша швидкість, але виглядає гірше; менше значення — більш гладке відображення)", + "Import": "Імпорт", + "Import data": "Імпорт даних", + "Inherit": "Успадковувати", + "Licence": "Ліцензія", + "Map background credits": "Права/подяки на фонову мапу", + "Map user content has been published under licence": "Картографічні дані користувача опубліковані згідно ліцензії", + "More controls": "Інші елементи управління", + "Optional. Same as color if not set.": "Додатково. Якщо не вибрано, то як колір.", + "Optionnal.": "Додатково.", + "Paste here your data": "Вставити Ваші дані сюди", + "Please be sure the licence is compliant with your use.": "Переконайтеся, що ліцензія відповідає правилам використання.", + "Problem in the response": "Проблема з відповіддю", + "Problem in the response format": "Формат відповіді не розпізнано", + "Provide an URL here": "Вкажіть посилання тут", + "Remote data": "Віддалені дані", + "Save": "Зберегти", + "Save current edits": "Зберегти поточні правки", + "Save this center and zoom": "Зберегти такі центрування та масштаб", + "Show/hide layer": "Показати/приховати шар", + "Start editing": "Почати редагування", + "Stop editing": "Зупинити редагування", + "The zoom and center have been setted.": "Масштаб й центрування виставлені", + "To zoom": "Масштабувати", + "Untitled layer": "Шар без назви", + "Untitled map": "Безіменна мапа", + "Update permissions and editors": "Налаштувати привілеї та редакторів", + "Url": "Посилання", + "User content credits": "Права/подяки на користувацькі дані", + "Where do we go from here?": "Що можна зробити з мапою далі?", + "Zoom in": "Збільшити масштаб", + "Zoom out": "Зменшити масштаб", + "Zoom to layer extent": "Масштабувати до кордонів шару", + "Zoom to this feature": "Наблизитися до цього об’єкта", + "color": "колір", + "dash array": "штрихи", + "description": "опис", + "fill": "заливка", + "fill color": "колір заливки", + "fill opacity": "Непрозорість заливки", + "inherit": "успадковувати", + "licence": "ліцензія", + "name": "назва", + "no": "ні", + "opacity": "непрозорість", + "stroke": "штрихи", + "weight": "товщина", + "yes": "так", + "Editing": "Редагуємо ", + "Embed the map": "Вбудувати мапу", + "Short URL": "Коротке посилання", + "# one hash for main heading": "# один знак решітки — основний заголовок", + "## two hashes for second heading": "## два знаки решітки — підзаголовок", + "### three hashes for third heading": "### три знаки решітки — підзаголовок підзаголовка", + "**double star for bold**": "**подвійні зірочки — жирний**", + "*simple star for italic*": "*одинарні зірочки — курсив*", + "--- for an horizontal rule": "--- горизонтальна лінія", + "All properties are imported.": "Усі властивості імпортовані.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Як роздільник використовуються коми, табуляції і крапки з комою. Застосовується датум WGS84. Імпорт переглядає заголовок на наявність полів „lat“ та „lon“, регістр не має значення. Усі інші поля імпортуються як властивості.", + "Custom background": "Користувацька фонова мапа", + "Help": "Допомога", + "Image: {{http://image.url.com}}": "Зображення: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Посилання з текстом: [[http://example.com|текст для посилання]]", + "Properties imported:": "Імпортовані властивості: ", + "Simple link: [[http://example.com]]": "Просте посилання: [[http://example.com]]", + "Supported scheme": "Підтримувана схема", + "Supported variables that will be dynamically replaced": "Підтримувані змінні для автоматичної заміни", + "Text formatting": "Форматування тексту", + "attribution": "призначені властивості", + "display name": "відображувана назва", + "max zoom": "максимальний масштаб", + "min zoom": "мінімальний масштаб", + "Skipping unkown geometry.type: {type}": "Пропущена невідома властивість geometry.type: {type}", + "Please save the map before": "Будь ласка, спочатку збережіть мапу", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "Ви можете використовувати властивості об’єктів як змінні. Наприклад, в „http://myserver.org/images/{name}.png“, змінна {name} буде замінена значенням поля „name“ кожної позначки на мапі.", + "Transform to polygon": "Перетворити на багатокутник", + "Transform to lines": "Перетворити на лінію", + "Choose the data format": "Виберіть формат даних", + "Error in the tilelayer URL": "Помилка в посиланні на шар мапи", + "Directions from here": "Навігація звідси", + "Choose a preset": "Виберіть шаблон", + "Limit bounds": "Встановлення меж", + "Use current bounds": "Використовувати поточні межі", + "max East": "макс. на схід", + "max North": "макс. на північ", + "max South": "макс. на південь", + "max West": "макс. на захід", + "TMS format": "Формат TMS", + "Credits": "Авторські права / подяки", + "Only visible features will be downloaded.": "Будуть завантажені лише відображувані об’єкти.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Відкрийте цю частину мапи у редакторі OpenStreetMap, щоб поліпшити дані", + "Default properties": "Властивості за умовчанням", + "User interface options": "Налаштування інтерфейсу", + "Image with custom width (in px): {{http://image.url.com|width}}": "Зображення із зазначенням ширини (в пікселях): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Поточний вид замість виду мапи за умовчанням?", + "Iframe export options": "Властивості експорту для Iframe", + "Include full screen link?": "Долучити посилання на повноекранний вид?", + "See full screen": "Дивитися в повноекранному режимі", + "height": "висота", + "width": "ширина", + "Clustered": "Кластеризованний", + "Clustering radius": "Радіус кластеризації", + "GeoRSS (only link)": "GeoRSS (лише посилання)", + "GeoRSS (title + image)": "GeoRSS (заголовок та зображення)", + "Heatmap": "Теплова мапа", + "Heatmap radius": "Радіус для теплової мапи", + "Name and description": "Назва та опис", + "Override clustering radius (default 80)": "Перевизначити радіус кластеризації (за умовчанням 80)", + "Override heatmap radius (default 25)": "Перевизначити радіус для теплової мапи (за умовчанням 25)", + "Proxy request": "Запит проксі", + "Table": "Таблиця", + "To use if remote server doesn't allow cross domain (slower)": "Якщо віддалений сервер не дозволяє крос-домен (повільно)", + "Type of layer": "Тип шару", + "Filter…": "Відбір…", + "Heatmap intensity property": "Властивість інтенсивності теплової мапи", + "Optional intensity property for heatmap": "Додаткові властивості інтенсивності теплової мапи", + "Caption": "Заголовок", + "Data browser": "Оглядач даних", + "Do you want to display a caption bar?": "Показувати рядок заголовку?", + "Do you want to display a panel on load?": "Показувати панель керування при завантаженні?", + "None": "Ні", + "by": "від", + "Name and description (large)": "Назва та опис (розширено)", + "Empty": "Очистити", + "Split line": "Розділити лінію", + "Clone": "Створити копію", + "Clone of {name}": "Копія {name}", + "Side panel": "Бічна панель", + "Powered by Leaflet and Django, glued by uMap project.": "Працює на Leaflet та Django, об’єднані проектом uMap.", + "Zoom level for automatic zooms": "Рівень масштабу для автоматичного масштабування", + "Do you want to display the «more» control?": "Показувати кнопку „Більше“?", + "Auto": "Автоматично", + "Default: name": "За умовчанням: назва", + "Property to use for sorting features": "Властивість для сортування об’єктів", + "Slideshow": "Слайдшоу", + "Start slideshow": "Почати слайдшоу", + "Stop slideshow": "Зупинити слайдшоу", + "Text color for the cluster label": "Колір тексту для позначок кластера", + "Zoom to the next": "Наблизитися до наступного", + "Zoom to the previous": "Наблизитися до попереднього", + "Add a new property": "Додати нову властивість", + "Are you sure you want to delete this property on all the features?": "Ви впевнені, що хочете вилучити цю властивість у всіх об’єктів?", + "Close": "Зачинити", + "Delete this property on all the features": "Вилучити цю властивість у всіх об’єктів", + "Edit properties in a table": "Редагувати властивості в таблиці", + "Please enter the name of the property": "Будь ласка, введіть назву властивості", + "Please enter the new name of this property": "Будь ласка, введіть нову назву властивості", + "Rename this property on all the features": "Перейменувати цю властивість у всіх об’єктів", + "If false, the polygon will act as a part of the underlying map.": "Якщо ні, тоді багатокутник буде виглядати як частина мапи", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe із зазначенням висоти (в пікселях): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "Переглянути усе", + "Dynamic properties": "Динамічні властивості", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Використовуйте змінні в дужках з властивостями об’єктів, наприклад, {name}, вони будуть автоматично замінені відповідними значеннями.", + "Long credits": "Повний опис прав/подяки", + "No licence has been set": "Ліцензія не була зазначена", + "Popup content template": "Шаблон спливаючої підказки", + "Short credits": "Короткий опис прав/подяки", + "Will be displayed in the bottom right corner of the map": "Буде показано в правому нижньому кутку мапи", + "Will be visible in the caption of the map": "Буде показано у заголовку мапи", + "Map has been saved!": "Мапу збережено!", + "Save anyway": "Зберегти в будь-якому випадку", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Упс! Схоже, хтось інший теж редагує ці дані. Ви можете зберегти свої правки, але це знищить правки іншого учасника.", + "Comma separated list of properties to use when filtering features": "Список властивостей, розділених комами, для використання при фільтрації", + "Keep current visible layers": "Залишити поточні видимі шари", + "Coordinates": "Координати", + "Latitude": "Широта", + "Longitude": "Довгота", + "Continue line (Ctrl-click)": "Продовжити лінію (Ctrl + клацання)", + "Start a hole here": "Почати отвір звідси", + "Click last point to finish shape": "Клацніть на останній точці, щоб завершити", + "Click to add a marker": "Клацніть, щоб додати позначку", + "Click to continue drawing": "Клацайте, щоб продовжити малювання", + "Click to start drawing a line": "Клацайте, щоб продовжити малювання", + "Click to start drawing a polygon": "Клацніть, щоб почати малювання багатокутника", + "Import in a new layer": "Імпортувати в новий шар", + "Layer": "Шар", + "Please choose a format": "Будь ласка, виберіть формат", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Виміряти відстань", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "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…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/vi.json b/umap/static/umap/locale/vi.json new file mode 100644 index 00000000..abc32900 --- /dev/null +++ b/umap/static/umap/locale/vi.json @@ -0,0 +1,350 @@ +{ + "About": "Về", + "Action not allowed :(": "Hoạt động này không được phép", + "Add a layer": "Thêm một layer", + "Add symbol": "Thêm một symbol", + "Advanced actions": "Hoat động nâng cao", + "Advanced properties": "Thuộc tính nâng cao", + "Allow scroll wheel zoom?": "Cho phép thu phóng bằng chuột giữa?", + "An error occured": "Có lỗi", + "Are you sure you want to cancel your changes?": "Bạn có chắc muốn hủy các thay đổi?", + "Are you sure you want to clone this map and all its datalayers?": "Bạn có chắc muốn sao chép bản đồ này và các layer dữ liệu đi kèm với nó?", + "Are you sure you want to delete the feature?": "Bạn có chắc muốn xóa đối tượng này?", + "Are you sure you want to delete this map?": "Bạn có chắc muốn xóa bản đồ này?", + "Ball": "Bóng", + "Bring feature to center": "Đặt đối tượng vào giữa", + "Browse data": "Mở dữ liệu", + "Cancel": "Hủy", + "Cancel edits": "Hủy các chỉnh sửa", + "Center map on your location": "Tạo bản đồ với vị trí của bạn", + "Change map background": "Thay đổi bản đồ nền", + "Change symbol": "Thay đỏi symbol", + "Change tilelayers": "Thay đổi titlelayer", + "Choose the format of the data to import": "Chọn định dạng tập tin", + "Choose the layer of the feature": "Chọn lớp chức năng", + "Choose the layer to import in": "Chọn lớp cần nhập vào", + "Circle": "Vòng tròn", + "Clone this map": "Sao bản đồ này", + "Default": "Mặc định", + "Delete": "Xóa", + "Delete this feature": "Xóa chức năng này", + "Disable editing": "Tắt chỉnh sửa", + "Display on load": "Hiển thị khi tải", + "Do you want to display a minimap?": "Bạn có muốn hiện thị bản đồ nhỏ hay không?", + "Do you want to display popup footer?": "Bạn có muốn hiển thị thông báo ở dưới hay không?", + "Do you want to display the scale control?": "Bạn có muốn hiện thị bảng mở rộng hay không?", + "Download data": "Tải dữ liệu", + "Draw a line": "Vẽ đường thẳng", + "Draw a marker": "Vẽ điểm", + "Draw a polygon": "Vẽ đa giác", + "Draw a polyline": "Vẽ nhiều đường", + "Drop": "Bỏ", + "Dynamic": "Động", + "Edit": "Sửa", + "Edit feature's layer": "Chỉnh sửa lớp", + "Edit map properties": "Chỉnh sửa thuộc tính bản đồ", + "Edit map settings": "Tin chỉnh bản đồ", + "Edit this feature": "Sửa chức năng này", + "Embed and share this map": "Nhúng và chia sẽ bản đồ này", + "Enable editing": "Bật chức năng chỉnh sửa", + "Format": "Định dạng", + "From zoom": "Phóng to từ", + "Go to «{feature}»": "Tới «{feature}»", + "Hide controls": "Dấu bảng điều khiển", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)", + "Import": "Import", + "Import data": "Import data", + "Inherit": "Inherit", + "Licence": "Licence", + "Map background credits": "Map background credits", + "Map user content has been published under licence": "Map user content has been published under licence", + "More controls": "More controls", + "Optional. Same as color if not set.": "Optional. Same as color if not set.", + "Optionnal.": "Optionnal.", + "Paste here your data": "Paste here your data", + "Please be sure the licence is compliant with your use.": "Please be sure the licence is compliant with your use.", + "Problem in the response": "Problem in the response", + "Problem in the response format": "Problem in the response format", + "Provide an URL here": "Provide an URL here", + "Remote data": "Remote data", + "Save": "Save", + "Save current edits": "Save current edits", + "Save this center and zoom": "Save this center and zoom", + "Show/hide layer": "Show/hide layer", + "Start editing": "Start editing", + "Stop editing": "Stop editing", + "The zoom and center have been setted.": "The zoom and center have been setted.", + "To zoom": "To zoom", + "Untitled layer": "Untitled layer", + "Untitled map": "Untitled map", + "Update permissions and editors": "Update permissions and editors", + "Url": "Url", + "User content credits": "User content credits", + "Where do we go from here?": "Where do we go from here?", + "Zoom in": "Zoom in", + "Zoom out": "Zoom out", + "Zoom to layer extent": "Zoom to layer extent", + "Zoom to this feature": "Zoom to this feature", + "color": "color", + "dash array": "dash array", + "description": "description", + "fill": "fill", + "fill color": "fill color", + "fill opacity": "fill opacity", + "inherit": "inherit", + "licence": "licence", + "name": "name", + "no": "no", + "opacity": "opacity", + "stroke": "stroke", + "weight": "weight", + "yes": "yes", + "Editing": "Editing", + "Embed the map": "Embed the map", + "Short URL": "Short URL", + "# one hash for main heading": "# one hash for main heading", + "## two hashes for second heading": "## two hashes for second heading", + "### three hashes for third heading": "### three hashes for third heading", + "**double star for bold**": "**double star for bold**", + "*simple star for italic*": "*simple star for italic*", + "--- for an horizontal rule": "--- for an horizontal rule", + "All properties are imported.": "All properties are imported.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Custom background", + "Help": "Help", + "Image: {{http://image.url.com}}": "Image: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link with text: [[http://example.com|text of the link]]", + "Properties imported:": "Properties imported:", + "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]", + "Supported scheme": "Supported scheme", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "Text formatting", + "attribution": "attribution", + "display name": "display name", + "max zoom": "max zoom", + "min zoom": "min zoom", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "Please save the map before", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Transform to polygon", + "Transform to lines": "Transform to lines", + "Choose the data format": "Choose the data format", + "Error in the tilelayer URL": "Error in the tilelayer URL", + "Directions from here": "Directions from here", + "Choose a preset": "Choose a preset", + "Limit bounds": "Limit bounds", + "Use current bounds": "Use current bounds", + "max East": "max East", + "max North": "max North", + "max South": "max South", + "max West": "max West", + "TMS format": "TMS format", + "Credits": "Credits", + "Only visible features will be downloaded.": "Only visible features will be downloaded.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "Default properties", + "User interface options": "User interface options", + "Image with custom width (in px): {{http://image.url.com|width}}": "Image with custom width (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Current view instead of default map view?", + "Iframe export options": "Iframe export options", + "Include full screen link?": "Include full screen link?", + "See full screen": "See full screen", + "height": "height", + "width": "width", + "Clustered": "Clustered", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (only link)", + "GeoRSS (title + image)": "GeoRSS (title + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Name and description", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Proxy request", + "Table": "Table", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "Type of layer", + "Filter…": "Filter…", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Caption", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Do you want to display a caption bar?", + "Do you want to display a panel on load?": "Do you want to display a panel on load?", + "None": "None", + "by": "by", + "Name and description (large)": "Name and description (large)", + "Empty": "Empty", + "Split line": "Split line", + "Clone": "Clone", + "Clone of {name}": "Clone of {name}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Do you want to display the «more» control?", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Close", + "Delete this property on all the features": "Delete this property on all the features", + "Edit properties in a table": "Edit properties in a table", + "Please enter the name of the property": "Please enter the name of the property", + "Please enter the new name of this property": "Please enter the new name of this property", + "Rename this property on all the features": "Rename this property on all the features", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordinates", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Layer", + "Please choose a format": "Hãy chọn một định dạng", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Measure distances", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "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…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/vi_VN.json b/umap/static/umap/locale/vi_VN.json new file mode 100644 index 00000000..4918b268 --- /dev/null +++ b/umap/static/umap/locale/vi_VN.json @@ -0,0 +1,350 @@ +{ + "About": "About", + "Action not allowed :(": "Action not allowed :(", + "Add a layer": "Add a layer", + "Add symbol": "Add symbol", + "Advanced actions": "Advanced actions", + "Advanced properties": "Advanced properties", + "Allow scroll wheel zoom?": "Allow scroll wheel zoom?", + "An error occured": "An error occured", + "Are you sure you want to cancel your changes?": "Are you sure you want to cancel your changes?", + "Are you sure you want to clone this map and all its datalayers?": "Are you sure you want to clone this map and all its datalayers?", + "Are you sure you want to delete the feature?": "Are you sure you want to delete the feature?", + "Are you sure you want to delete this map?": "Are you sure you want to delete this map?", + "Ball": "Ball", + "Bring feature to center": "Bring feature to center", + "Browse data": "Browse data", + "Cancel": "Cancel", + "Cancel edits": "Cancel edits", + "Center map on your location": "Center map on your location", + "Change map background": "Change map background", + "Change symbol": "Change symbol", + "Change tilelayers": "Change tilelayers", + "Choose the format of the data to import": "Choose the format of the data to import", + "Choose the layer of the feature": "Choose the layer of the feature", + "Choose the layer to import in": "Choose the layer to import in", + "Circle": "Circle", + "Clone this map": "Clone this map", + "Default": "Default", + "Delete": "Delete", + "Delete this feature": "Delete this feature", + "Disable editing": "Disable editing", + "Display on load": "Display on load", + "Do you want to display a minimap?": "Do you want to display a minimap?", + "Do you want to display popup footer?": "Do you want to display popup footer?", + "Do you want to display the scale control?": "Do you want to display the scale control?", + "Download data": "Download data", + "Draw a line": "Draw a line", + "Draw a marker": "Draw a marker", + "Draw a polygon": "Draw a polygon", + "Draw a polyline": "Draw a polyline", + "Drop": "Drop", + "Dynamic": "Dynamic", + "Edit": "Edit", + "Edit feature's layer": "Edit feature's layer", + "Edit map properties": "Edit map properties", + "Edit map settings": "Edit map settings", + "Edit this feature": "Edit this feature", + "Embed and share this map": "Embed and share this map", + "Enable editing": "Enable editing", + "Format": "Format", + "From zoom": "From zoom", + "Go to «{feature}»": "Go to «{feature}»", + "Hide controls": "Hide controls", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)", + "Import": "Import", + "Import data": "Import data", + "Inherit": "Inherit", + "Licence": "Licence", + "Map background credits": "Map background credits", + "Map user content has been published under licence": "Map user content has been published under licence", + "More controls": "More controls", + "Optional. Same as color if not set.": "Optional. Same as color if not set.", + "Optionnal.": "Optionnal.", + "Paste here your data": "Paste here your data", + "Please be sure the licence is compliant with your use.": "Please be sure the licence is compliant with your use.", + "Problem in the response": "Problem in the response", + "Problem in the response format": "Problem in the response format", + "Provide an URL here": "Provide an URL here", + "Remote data": "Remote data", + "Save": "Save", + "Save current edits": "Save current edits", + "Save this center and zoom": "Save this center and zoom", + "Show/hide layer": "Show/hide layer", + "Start editing": "Start editing", + "Stop editing": "Stop editing", + "The zoom and center have been setted.": "The zoom and center have been setted.", + "To zoom": "To zoom", + "Untitled layer": "Untitled layer", + "Untitled map": "Untitled map", + "Update permissions and editors": "Update permissions and editors", + "Url": "Url", + "User content credits": "User content credits", + "Where do we go from here?": "Where do we go from here?", + "Zoom in": "Zoom in", + "Zoom out": "Zoom out", + "Zoom to layer extent": "Zoom to layer extent", + "Zoom to this feature": "Zoom to this feature", + "color": "color", + "dash array": "dash array", + "description": "description", + "fill": "fill", + "fill color": "fill color", + "fill opacity": "fill opacity", + "inherit": "inherit", + "licence": "licence", + "name": "name", + "no": "no", + "opacity": "opacity", + "stroke": "stroke", + "weight": "weight", + "yes": "yes", + "Editing": "Editing", + "Embed the map": "Embed the map", + "Short URL": "Short URL", + "# one hash for main heading": "# one hash for main heading", + "## two hashes for second heading": "## two hashes for second heading", + "### three hashes for third heading": "### three hashes for third heading", + "**double star for bold**": "**double star for bold**", + "*simple star for italic*": "*simple star for italic*", + "--- for an horizontal rule": "--- for an horizontal rule", + "All properties are imported.": "All properties are imported.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Custom background", + "Help": "Help", + "Image: {{http://image.url.com}}": "Image: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link with text: [[http://example.com|text of the link]]", + "Properties imported:": "Properties imported:", + "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]", + "Supported scheme": "Supported scheme", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "Text formatting", + "attribution": "attribution", + "display name": "display name", + "max zoom": "max zoom", + "min zoom": "min zoom", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "Please save the map before", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Transform to polygon", + "Transform to lines": "Transform to lines", + "Choose the data format": "Choose the data format", + "Error in the tilelayer URL": "Error in the tilelayer URL", + "Directions from here": "Directions from here", + "Choose a preset": "Choose a preset", + "Limit bounds": "Limit bounds", + "Use current bounds": "Use current bounds", + "max East": "max East", + "max North": "max North", + "max South": "max South", + "max West": "max West", + "TMS format": "TMS format", + "Credits": "Credits", + "Only visible features will be downloaded.": "Only visible features will be downloaded.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "Default properties", + "User interface options": "User interface options", + "Image with custom width (in px): {{http://image.url.com|width}}": "Image with custom width (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Current view instead of default map view?", + "Iframe export options": "Iframe export options", + "Include full screen link?": "Include full screen link?", + "See full screen": "See full screen", + "height": "height", + "width": "width", + "Clustered": "Clustered", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (only link)", + "GeoRSS (title + image)": "GeoRSS (title + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Name and description", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Proxy request", + "Table": "Table", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "Type of layer", + "Filter…": "Filter…", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Caption", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Do you want to display a caption bar?", + "Do you want to display a panel on load?": "Do you want to display a panel on load?", + "None": "None", + "by": "by", + "Name and description (large)": "Name and description (large)", + "Empty": "Empty", + "Split line": "Split line", + "Clone": "Clone", + "Clone of {name}": "Clone of {name}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Do you want to display the «more» control?", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Close", + "Delete this property on all the features": "Delete this property on all the features", + "Edit properties in a table": "Edit properties in a table", + "Please enter the name of the property": "Please enter the name of the property", + "Please enter the new name of this property": "Please enter the new name of this property", + "Rename this property on all the features": "Rename this property on all the features", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordinates", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Layer", + "Please choose a format": "Please choose a format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Measure distances", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "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…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/zh.json b/umap/static/umap/locale/zh.json new file mode 100644 index 00000000..6f233210 --- /dev/null +++ b/umap/static/umap/locale/zh.json @@ -0,0 +1,350 @@ +{ + "About": "关于", + "Action not allowed :(": "操作不允许", + "Add a layer": "增加图层", + "Add symbol": "增加符号", + "Advanced actions": "高级操作", + "Advanced properties": "高级属性", + "Allow scroll wheel zoom?": "是否允许滚轮缩放?", + "An error occured": "发生错误", + "Are you sure you want to cancel your changes?": "是否确定取消改变?", + "Are you sure you want to clone this map and all its datalayers?": "是否确定复制这个地图及其所有数据图层?", + "Are you sure you want to delete the feature?": "是否确定删除该要素?", + "Are you sure you want to delete this map?": "是否确定删除地图?", + "Ball": "Ball", + "Bring feature to center": "移到以对象为中心", + "Browse data": "浏览数据", + "Cancel": "取消", + "Cancel edits": "取消编辑", + "Center map on your location": "Center map on your location", + "Change map background": "改变地图背景", + "Change symbol": "改变符号", + "Change tilelayers": "改变瓦片图层", + "Choose the format of the data to import": "选择导入的数据格式", + "Choose the layer of the feature": "选择要素的图层", + "Choose the layer to import in": "选择导入的图层", + "Circle": "圆", + "Clone this map": "复制地图", + "Default": "默认", + "Delete": "删除", + "Delete this feature": "删除对象", + "Disable editing": "不可编辑", + "Display on load": "加载时显示", + "Do you want to display a minimap?": "是否想显示鹰眼图?", + "Do you want to display popup footer?": "你是否想要显示页脚?", + "Do you want to display the scale control?": "是否显示比例尺控件?", + "Download data": "下载数据", + "Draw a line": "画线", + "Draw a marker": "画标记", + "Draw a polygon": "画多边形", + "Draw a polyline": "画线", + "Drop": "Drop", + "Dynamic": "动态", + "Edit": "编辑", + "Edit feature's layer": "编辑要素图层", + "Edit map properties": "编辑地图属性", + "Edit map settings": "编辑地图设置", + "Edit this feature": "编辑该要素", + "Embed and share this map": "嵌入与分享地图", + "Enable editing": "可编辑", + "Format": "格式", + "From zoom": "From zoom", + "Go to «{feature}»": "转到«{feature}»", + "Hide controls": "隐藏控件", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)", + "Import": "导入", + "Import data": "导入数据", + "Inherit": "继承", + "Licence": "许可证", + "Map background credits": "Map background credits", + "Map user content has been published under licence": "Map user content has been published under licence", + "More controls": "更多控件", + "Optional. Same as color if not set.": "Optional. Same as color if not set.", + "Optionnal.": "Optionnal.", + "Paste here your data": "粘贴", + "Please be sure the licence is compliant with your use.": "Please be sure the licence is compliant with your use.", + "Problem in the response": "响应错误", + "Problem in the response format": "响应内容格式问题", + "Provide an URL here": "提供URL", + "Remote data": "远程数据", + "Save": "保存", + "Save current edits": "保存当前编辑内容", + "Save this center and zoom": "保存地图中心与比例尺", + "Show/hide layer": "显示/隐藏图层", + "Start editing": "开始编辑", + "Stop editing": "结束编辑", + "The zoom and center have been setted.": "缩放比例尺与中心设置完成", + "To zoom": "放大", + "Untitled layer": "未命名图层", + "Untitled map": "未命名地图", + "Update permissions and editors": "更新权限与编辑员", + "Url": "Url", + "User content credits": "用户内容信用", + "Where do we go from here?": "Where do we go from here?", + "Zoom in": "缩小", + "Zoom out": "放大", + "Zoom to layer extent": "缩放到图层范围", + "Zoom to this feature": "缩放到该对象", + "color": "颜色", + "dash array": "dash array", + "description": "描述", + "fill": "填充", + "fill color": "填充色", + "fill opacity": "透明", + "inherit": "inherit", + "licence": "licence", + "name": "名称", + "no": "否", + "opacity": "不透明度", + "stroke": "画笔", + "weight": "weight", + "yes": "是", + "Editing": "编辑", + "Embed the map": "嵌入地图", + "Short URL": "Short URL", + "# one hash for main heading": "# 一个井号表示一级标题", + "## two hashes for second heading": "## 两个井号表示二级标题", + "### three hashes for third heading": "### 三个井号表示三级标题", + "**double star for bold**": "**两个星号表示粗体**", + "*simple star for italic*": "*一个星号表示斜体*", + "--- for an horizontal rule": "--- for an horizontal rule", + "All properties are imported.": "属性已导入。", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "自定义背景", + "Help": "帮助", + "Image: {{http://image.url.com}}": "图片: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link with text: [[http://example.com|text of the link]]", + "Properties imported:": "Properties imported:", + "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]", + "Supported scheme": "Supported scheme", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "文本格式", + "attribution": "属性", + "display name": "显示名称", + "max zoom": "最大缩放等级", + "min zoom": "最小缩放等级", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "请先保存地图", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "转换为多边形", + "Transform to lines": "转换为线", + "Choose the data format": "选择数据格式", + "Error in the tilelayer URL": "瓦片图层URL错误", + "Directions from here": "方向", + "Choose a preset": "Choose a preset", + "Limit bounds": "限制外包框", + "Use current bounds": "使用当前范围", + "max East": "东", + "max North": "北", + "max South": "南", + "max West": "西", + "TMS format": "TMS格式", + "Credits": "Credits", + "Only visible features will be downloaded.": "Only visible features will be downloaded.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "默认属性", + "User interface options": "用户接口选项", + "Image with custom width (in px): {{http://image.url.com|width}}": "Image with custom width (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "使用当前视口替换默认地图视口?", + "Iframe export options": "Iframe export options", + "Include full screen link?": "Include full screen link?", + "See full screen": "全屏", + "height": "高", + "width": "宽", + "Clustered": "Clustered", + "Clustering radius": "聚类半径", + "GeoRSS (only link)": "GeoRSS (only link)", + "GeoRSS (title + image)": "GeoRSS (title + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "名称与描述", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Proxy request", + "Table": "表格", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "图层类型", + "Filter…": "Filter…", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Caption", + "Data browser": "数据浏览器", + "Do you want to display a caption bar?": "Do you want to display a caption bar?", + "Do you want to display a panel on load?": "Do you want to display a panel on load?", + "None": "空", + "by": "by", + "Name and description (large)": "Name and description (large)", + "Empty": "空", + "Split line": "打断线", + "Clone": "复制", + "Clone of {name}": "Clone of {name}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "是否显示 «more» 控件?", + "Auto": "自动", + "Default: name": "默认:名称", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "幻灯秀", + "Start slideshow": "开始幻灯秀", + "Stop slideshow": "结束幻灯秀", + "Text color for the cluster label": "标注文本颜色", + "Zoom to the next": "下一个", + "Zoom to the previous": "上一个", + "Add a new property": "添加属性", + "Are you sure you want to delete this property on all the features?": "是否确定删除全部要素的该属性?", + "Close": "关闭", + "Delete this property on all the features": "删除全部要素的该属性", + "Edit properties in a table": "在表格中编辑属性", + "Please enter the name of the property": "请输入属性名称", + "Please enter the new name of this property": "请输入属性的新名称", + "Rename this property on all the features": "重命名全部要素的该属性", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "查看全部", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "坐标", + "Latitude": "纬度", + "Longitude": "经度", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "导入一个新图层", + "Layer": "图层", + "Please choose a format": "请选择一种格式", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "测距", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "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…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/zh_CN.json b/umap/static/umap/locale/zh_CN.json new file mode 100644 index 00000000..4918b268 --- /dev/null +++ b/umap/static/umap/locale/zh_CN.json @@ -0,0 +1,350 @@ +{ + "About": "About", + "Action not allowed :(": "Action not allowed :(", + "Add a layer": "Add a layer", + "Add symbol": "Add symbol", + "Advanced actions": "Advanced actions", + "Advanced properties": "Advanced properties", + "Allow scroll wheel zoom?": "Allow scroll wheel zoom?", + "An error occured": "An error occured", + "Are you sure you want to cancel your changes?": "Are you sure you want to cancel your changes?", + "Are you sure you want to clone this map and all its datalayers?": "Are you sure you want to clone this map and all its datalayers?", + "Are you sure you want to delete the feature?": "Are you sure you want to delete the feature?", + "Are you sure you want to delete this map?": "Are you sure you want to delete this map?", + "Ball": "Ball", + "Bring feature to center": "Bring feature to center", + "Browse data": "Browse data", + "Cancel": "Cancel", + "Cancel edits": "Cancel edits", + "Center map on your location": "Center map on your location", + "Change map background": "Change map background", + "Change symbol": "Change symbol", + "Change tilelayers": "Change tilelayers", + "Choose the format of the data to import": "Choose the format of the data to import", + "Choose the layer of the feature": "Choose the layer of the feature", + "Choose the layer to import in": "Choose the layer to import in", + "Circle": "Circle", + "Clone this map": "Clone this map", + "Default": "Default", + "Delete": "Delete", + "Delete this feature": "Delete this feature", + "Disable editing": "Disable editing", + "Display on load": "Display on load", + "Do you want to display a minimap?": "Do you want to display a minimap?", + "Do you want to display popup footer?": "Do you want to display popup footer?", + "Do you want to display the scale control?": "Do you want to display the scale control?", + "Download data": "Download data", + "Draw a line": "Draw a line", + "Draw a marker": "Draw a marker", + "Draw a polygon": "Draw a polygon", + "Draw a polyline": "Draw a polyline", + "Drop": "Drop", + "Dynamic": "Dynamic", + "Edit": "Edit", + "Edit feature's layer": "Edit feature's layer", + "Edit map properties": "Edit map properties", + "Edit map settings": "Edit map settings", + "Edit this feature": "Edit this feature", + "Embed and share this map": "Embed and share this map", + "Enable editing": "Enable editing", + "Format": "Format", + "From zoom": "From zoom", + "Go to «{feature}»": "Go to «{feature}»", + "Hide controls": "Hide controls", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)", + "Import": "Import", + "Import data": "Import data", + "Inherit": "Inherit", + "Licence": "Licence", + "Map background credits": "Map background credits", + "Map user content has been published under licence": "Map user content has been published under licence", + "More controls": "More controls", + "Optional. Same as color if not set.": "Optional. Same as color if not set.", + "Optionnal.": "Optionnal.", + "Paste here your data": "Paste here your data", + "Please be sure the licence is compliant with your use.": "Please be sure the licence is compliant with your use.", + "Problem in the response": "Problem in the response", + "Problem in the response format": "Problem in the response format", + "Provide an URL here": "Provide an URL here", + "Remote data": "Remote data", + "Save": "Save", + "Save current edits": "Save current edits", + "Save this center and zoom": "Save this center and zoom", + "Show/hide layer": "Show/hide layer", + "Start editing": "Start editing", + "Stop editing": "Stop editing", + "The zoom and center have been setted.": "The zoom and center have been setted.", + "To zoom": "To zoom", + "Untitled layer": "Untitled layer", + "Untitled map": "Untitled map", + "Update permissions and editors": "Update permissions and editors", + "Url": "Url", + "User content credits": "User content credits", + "Where do we go from here?": "Where do we go from here?", + "Zoom in": "Zoom in", + "Zoom out": "Zoom out", + "Zoom to layer extent": "Zoom to layer extent", + "Zoom to this feature": "Zoom to this feature", + "color": "color", + "dash array": "dash array", + "description": "description", + "fill": "fill", + "fill color": "fill color", + "fill opacity": "fill opacity", + "inherit": "inherit", + "licence": "licence", + "name": "name", + "no": "no", + "opacity": "opacity", + "stroke": "stroke", + "weight": "weight", + "yes": "yes", + "Editing": "Editing", + "Embed the map": "Embed the map", + "Short URL": "Short URL", + "# one hash for main heading": "# one hash for main heading", + "## two hashes for second heading": "## two hashes for second heading", + "### three hashes for third heading": "### three hashes for third heading", + "**double star for bold**": "**double star for bold**", + "*simple star for italic*": "*simple star for italic*", + "--- for an horizontal rule": "--- for an horizontal rule", + "All properties are imported.": "All properties are imported.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Custom background", + "Help": "Help", + "Image: {{http://image.url.com}}": "Image: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link with text: [[http://example.com|text of the link]]", + "Properties imported:": "Properties imported:", + "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]", + "Supported scheme": "Supported scheme", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "Text formatting", + "attribution": "attribution", + "display name": "display name", + "max zoom": "max zoom", + "min zoom": "min zoom", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "Please save the map before", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Transform to polygon", + "Transform to lines": "Transform to lines", + "Choose the data format": "Choose the data format", + "Error in the tilelayer URL": "Error in the tilelayer URL", + "Directions from here": "Directions from here", + "Choose a preset": "Choose a preset", + "Limit bounds": "Limit bounds", + "Use current bounds": "Use current bounds", + "max East": "max East", + "max North": "max North", + "max South": "max South", + "max West": "max West", + "TMS format": "TMS format", + "Credits": "Credits", + "Only visible features will be downloaded.": "Only visible features will be downloaded.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "Default properties", + "User interface options": "User interface options", + "Image with custom width (in px): {{http://image.url.com|width}}": "Image with custom width (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Current view instead of default map view?", + "Iframe export options": "Iframe export options", + "Include full screen link?": "Include full screen link?", + "See full screen": "See full screen", + "height": "height", + "width": "width", + "Clustered": "Clustered", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (only link)", + "GeoRSS (title + image)": "GeoRSS (title + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Name and description", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Proxy request", + "Table": "Table", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "Type of layer", + "Filter…": "Filter…", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Caption", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Do you want to display a caption bar?", + "Do you want to display a panel on load?": "Do you want to display a panel on load?", + "None": "None", + "by": "by", + "Name and description (large)": "Name and description (large)", + "Empty": "Empty", + "Split line": "Split line", + "Clone": "Clone", + "Clone of {name}": "Clone of {name}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Do you want to display the «more» control?", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Close", + "Delete this property on all the features": "Delete this property on all the features", + "Edit properties in a table": "Edit properties in a table", + "Please enter the name of the property": "Please enter the name of the property", + "Please enter the new name of this property": "Please enter the new name of this property", + "Rename this property on all the features": "Rename this property on all the features", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordinates", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Layer", + "Please choose a format": "Please choose a format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Measure distances", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "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…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/zh_TW.Big5.json b/umap/static/umap/locale/zh_TW.Big5.json new file mode 100644 index 00000000..4918b268 --- /dev/null +++ b/umap/static/umap/locale/zh_TW.Big5.json @@ -0,0 +1,350 @@ +{ + "About": "About", + "Action not allowed :(": "Action not allowed :(", + "Add a layer": "Add a layer", + "Add symbol": "Add symbol", + "Advanced actions": "Advanced actions", + "Advanced properties": "Advanced properties", + "Allow scroll wheel zoom?": "Allow scroll wheel zoom?", + "An error occured": "An error occured", + "Are you sure you want to cancel your changes?": "Are you sure you want to cancel your changes?", + "Are you sure you want to clone this map and all its datalayers?": "Are you sure you want to clone this map and all its datalayers?", + "Are you sure you want to delete the feature?": "Are you sure you want to delete the feature?", + "Are you sure you want to delete this map?": "Are you sure you want to delete this map?", + "Ball": "Ball", + "Bring feature to center": "Bring feature to center", + "Browse data": "Browse data", + "Cancel": "Cancel", + "Cancel edits": "Cancel edits", + "Center map on your location": "Center map on your location", + "Change map background": "Change map background", + "Change symbol": "Change symbol", + "Change tilelayers": "Change tilelayers", + "Choose the format of the data to import": "Choose the format of the data to import", + "Choose the layer of the feature": "Choose the layer of the feature", + "Choose the layer to import in": "Choose the layer to import in", + "Circle": "Circle", + "Clone this map": "Clone this map", + "Default": "Default", + "Delete": "Delete", + "Delete this feature": "Delete this feature", + "Disable editing": "Disable editing", + "Display on load": "Display on load", + "Do you want to display a minimap?": "Do you want to display a minimap?", + "Do you want to display popup footer?": "Do you want to display popup footer?", + "Do you want to display the scale control?": "Do you want to display the scale control?", + "Download data": "Download data", + "Draw a line": "Draw a line", + "Draw a marker": "Draw a marker", + "Draw a polygon": "Draw a polygon", + "Draw a polyline": "Draw a polyline", + "Drop": "Drop", + "Dynamic": "Dynamic", + "Edit": "Edit", + "Edit feature's layer": "Edit feature's layer", + "Edit map properties": "Edit map properties", + "Edit map settings": "Edit map settings", + "Edit this feature": "Edit this feature", + "Embed and share this map": "Embed and share this map", + "Enable editing": "Enable editing", + "Format": "Format", + "From zoom": "From zoom", + "Go to «{feature}»": "Go to «{feature}»", + "Hide controls": "Hide controls", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)", + "Import": "Import", + "Import data": "Import data", + "Inherit": "Inherit", + "Licence": "Licence", + "Map background credits": "Map background credits", + "Map user content has been published under licence": "Map user content has been published under licence", + "More controls": "More controls", + "Optional. Same as color if not set.": "Optional. Same as color if not set.", + "Optionnal.": "Optionnal.", + "Paste here your data": "Paste here your data", + "Please be sure the licence is compliant with your use.": "Please be sure the licence is compliant with your use.", + "Problem in the response": "Problem in the response", + "Problem in the response format": "Problem in the response format", + "Provide an URL here": "Provide an URL here", + "Remote data": "Remote data", + "Save": "Save", + "Save current edits": "Save current edits", + "Save this center and zoom": "Save this center and zoom", + "Show/hide layer": "Show/hide layer", + "Start editing": "Start editing", + "Stop editing": "Stop editing", + "The zoom and center have been setted.": "The zoom and center have been setted.", + "To zoom": "To zoom", + "Untitled layer": "Untitled layer", + "Untitled map": "Untitled map", + "Update permissions and editors": "Update permissions and editors", + "Url": "Url", + "User content credits": "User content credits", + "Where do we go from here?": "Where do we go from here?", + "Zoom in": "Zoom in", + "Zoom out": "Zoom out", + "Zoom to layer extent": "Zoom to layer extent", + "Zoom to this feature": "Zoom to this feature", + "color": "color", + "dash array": "dash array", + "description": "description", + "fill": "fill", + "fill color": "fill color", + "fill opacity": "fill opacity", + "inherit": "inherit", + "licence": "licence", + "name": "name", + "no": "no", + "opacity": "opacity", + "stroke": "stroke", + "weight": "weight", + "yes": "yes", + "Editing": "Editing", + "Embed the map": "Embed the map", + "Short URL": "Short URL", + "# one hash for main heading": "# one hash for main heading", + "## two hashes for second heading": "## two hashes for second heading", + "### three hashes for third heading": "### three hashes for third heading", + "**double star for bold**": "**double star for bold**", + "*simple star for italic*": "*simple star for italic*", + "--- for an horizontal rule": "--- for an horizontal rule", + "All properties are imported.": "All properties are imported.", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.", + "Custom background": "Custom background", + "Help": "Help", + "Image: {{http://image.url.com}}": "Image: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "Link with text: [[http://example.com|text of the link]]", + "Properties imported:": "Properties imported:", + "Simple link: [[http://example.com]]": "Simple link: [[http://example.com]]", + "Supported scheme": "Supported scheme", + "Supported variables that will be dynamically replaced": "Supported variables that will be dynamically replaced", + "Text formatting": "Text formatting", + "attribution": "attribution", + "display name": "display name", + "max zoom": "max zoom", + "min zoom": "min zoom", + "Skipping unkown geometry.type: {type}": "Skipping unkown geometry.type: {type}", + "Please save the map before": "Please save the map before", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.", + "Transform to polygon": "Transform to polygon", + "Transform to lines": "Transform to lines", + "Choose the data format": "Choose the data format", + "Error in the tilelayer URL": "Error in the tilelayer URL", + "Directions from here": "Directions from here", + "Choose a preset": "Choose a preset", + "Limit bounds": "Limit bounds", + "Use current bounds": "Use current bounds", + "max East": "max East", + "max North": "max North", + "max South": "max South", + "max West": "max West", + "TMS format": "TMS format", + "Credits": "Credits", + "Only visible features will be downloaded.": "Only visible features will be downloaded.", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "Open this map extent in a map editor to provide more accurate data to OpenStreetMap", + "Default properties": "Default properties", + "User interface options": "User interface options", + "Image with custom width (in px): {{http://image.url.com|width}}": "Image with custom width (in px): {{http://image.url.com|width}}", + "Current view instead of default map view?": "Current view instead of default map view?", + "Iframe export options": "Iframe export options", + "Include full screen link?": "Include full screen link?", + "See full screen": "See full screen", + "height": "height", + "width": "width", + "Clustered": "Clustered", + "Clustering radius": "Clustering radius", + "GeoRSS (only link)": "GeoRSS (only link)", + "GeoRSS (title + image)": "GeoRSS (title + image)", + "Heatmap": "Heatmap", + "Heatmap radius": "Heatmap radius", + "Name and description": "Name and description", + "Override clustering radius (default 80)": "Override clustering radius (default 80)", + "Override heatmap radius (default 25)": "Override heatmap radius (default 25)", + "Proxy request": "Proxy request", + "Table": "Table", + "To use if remote server doesn't allow cross domain (slower)": "To use if remote server doesn't allow cross domain (slower)", + "Type of layer": "Type of layer", + "Filter…": "Filter…", + "Heatmap intensity property": "Heatmap intensity property", + "Optional intensity property for heatmap": "Optional intensity property for heatmap", + "Caption": "Caption", + "Data browser": "Data browser", + "Do you want to display a caption bar?": "Do you want to display a caption bar?", + "Do you want to display a panel on load?": "Do you want to display a panel on load?", + "None": "None", + "by": "by", + "Name and description (large)": "Name and description (large)", + "Empty": "Empty", + "Split line": "Split line", + "Clone": "Clone", + "Clone of {name}": "Clone of {name}", + "Side panel": "Side panel", + "Powered by Leaflet and Django, glued by uMap project.": "Powered by Leaflet and Django, glued by uMap project.", + "Zoom level for automatic zooms": "Zoom level for automatic zooms", + "Do you want to display the «more» control?": "Do you want to display the «more» control?", + "Auto": "Auto", + "Default: name": "Default: name", + "Property to use for sorting features": "Property to use for sorting features", + "Slideshow": "Slideshow", + "Start slideshow": "Start slideshow", + "Stop slideshow": "Stop slideshow", + "Text color for the cluster label": "Text color for the cluster label", + "Zoom to the next": "Zoom to the next", + "Zoom to the previous": "Zoom to the previous", + "Add a new property": "Add a new property", + "Are you sure you want to delete this property on all the features?": "Are you sure you want to delete this property on all the features?", + "Close": "Close", + "Delete this property on all the features": "Delete this property on all the features", + "Edit properties in a table": "Edit properties in a table", + "Please enter the name of the property": "Please enter the name of the property", + "Please enter the new name of this property": "Please enter the new name of this property", + "Rename this property on all the features": "Rename this property on all the features", + "If false, the polygon will act as a part of the underlying map.": "If false, the polygon will act as a part of the underlying map.", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "See all", + "Dynamic properties": "Dynamic properties", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.", + "Long credits": "Long credits", + "No licence has been set": "No licence has been set", + "Popup content template": "Popup content template", + "Short credits": "Short credits", + "Will be displayed in the bottom right corner of the map": "Will be displayed in the bottom right corner of the map", + "Will be visible in the caption of the map": "Will be visible in the caption of the map", + "Map has been saved!": "Map has been saved!", + "Save anyway": "Save anyway", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.", + "Comma separated list of properties to use when filtering features": "Comma separated list of properties to use when filtering features", + "Keep current visible layers": "Keep current visible layers", + "Coordinates": "Coordinates", + "Latitude": "Latitude", + "Longitude": "Longitude", + "Continue line (Ctrl-click)": "Continue line (Ctrl-click)", + "Start a hole here": "Start a hole here", + "Click last point to finish shape": "Click last point to finish shape", + "Click to add a marker": "Click to add a marker", + "Click to continue drawing": "Click to continue drawing", + "Click to start drawing a line": "Click to start drawing a line", + "Click to start drawing a polygon": "Click to start drawing a polygon", + "Import in a new layer": "Import in a new layer", + "Layer": "Layer", + "Please choose a format": "Please choose a format", + "Imports all umap data, including layers and settings.": "Imports all umap data, including layers and settings.", + "Invalid umap data": "Invalid umap data", + "Invalid umap data in {filename}": "Invalid umap data in {filename}", + "Add a line to the current multi": "Add a line to the current multi", + "Add a polygon to the current multi": "Add a polygon to the current multi", + "Click to edit": "Click to edit", + "Continue line": "Continue line", + "Delete this shape": "Delete this shape", + "Make main shape": "Make main shape", + "Merge lines": "Merge lines", + "Remove shape from the multi": "Remove shape from the multi", + "Transfer shape to edited feature": "Transfer shape to edited feature", + "next": "next", + "previous": "previous", + "Measure distances": "Measure distances", + "NM": "NM", + "kilometers": "kilometers", + "km": "km", + "mi": "mi", + "miles": "miles", + "nautical miles": "nautical miles", + "{area} acres": "{area} acres", + "{area} ha": "{area} ha", + "{area} m²": "{area} m²", + "{area} mi²": "{area} mi²", + "{area} yd²": "{area} yd²", + "{distance} NM": "{distance} NM", + "{distance} km": "{distance} km", + "{distance} m": "{distance} m", + "{distance} miles": "{distance} miles", + "{distance} yd": "{distance} yd", + "Are you sure you want to restore this version?": "Are you sure you want to restore this version?", + "Extract shape to separate feature": "Extract shape to separate feature", + "Layer properties": "Layer properties", + "Restore this version": "Restore this version", + "Versions": "Versions", + "You have unsaved changes.": "You have unsaved changes.", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".", + "Advanced transition": "Advanced transition", + "Allow interactions": "Allow interactions", + "Autostart when map is loaded": "Autostart when map is loaded", + "Default interaction options": "Default interaction options", + "Default shape properties": "Default shape properties", + "Default zoom level": "Default zoom level", + "Define link to open in a new window on polygon click.": "Define link to open in a new window on polygon click.", + "Delete this vertex (Alt-click)": "Delete this vertex (Alt-click)", + "Display the control to open OpenStreetMap editor": "Display the control to open OpenStreetMap editor", + "Display the data layers control": "Display the data layers control", + "Display the embed control": "Display the embed control", + "Display the fullscreen control": "Display the fullscreen control", + "Display the locate control": "Display the locate control", + "Display the measure control": "Display the measure control", + "Display the search control": "Display the search control", + "Display the tile layers control": "Display the tile layers control", + "Display the zoom control": "Display the zoom control", + "Exit Fullscreen": "Exit Fullscreen", + "Fetch data each time map view changes.": "Fetch data each time map view changes.", + "Filter keys": "Filter keys", + "Icon shape": "Icon shape", + "Icon symbol": "Icon symbol", + "Interaction options": "Interaction options", + "Label key": "Label key", + "Link to…": "Link to…", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "Must be a valid CSS value (eg.: DarkBlue or #123456)", + "No results": "No results", + "Popup style": "Popup style", + "Replace layer content": "Replace layer content", + "Save this location as new feature": "Save this location as new feature", + "Search location": "Search location", + "Set URL": "Set URL", + "Shape properties": "Shape properties", + "Simplify": "Simplify", + "Sort key": "Sort key", + "The name of the property to use as feature label (ex.: \"nom\")": "The name of the property to use as feature label (ex.: \"nom\")", + "Toggle edit mode (shift-click)": "Toggle edit mode (shift-click)", + "View Fullscreen": "View Fullscreen", + "Whether to display or not polygons paths.": "Whether to display or not polygons paths.", + "Whether to fill polygons with color.": "Whether to fill polygons with color.", + "Zoom to this place": "Zoom to this place", + "always": "always", + "clear": "clear", + "define": "define", + "hidden": "hidden", + "never": "never", + "Automatic": "Automatic", + "Clone this feature": "Clone this feature", + "Display label": "Display label", + "Drag to reorder": "Drag to reorder", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "Labels are clickable", + "Label direction": "Label direction", + "Manage layers": "Manage layers", + "On the bottom": "On the bottom", + "On the left": "On the left", + "On the right": "On the right", + "On the top": "On the top", + "Only display label on mouse hover": "Only display label on mouse hover", + "Open link in…": "Open link in…", + "Unable to detect format of file {filename}": "Unable to detect format of file {filename}", + "collapsed": "collapsed", + "expanded": "expanded", + "iframe": "iframe", + "new window": "new window", + "parent window": "parent window", + "{count} errors during import: {message}": "{count} errors during import: {message}", + "Are you sure you want to delete this layer?": "Are you sure you want to delete this layer?", + "Delete layer": "Delete layer", + "Error while fetching {url}": "Error while fetching {url}", + "Home": "Home", + "Delete all layers": "Delete all layers", + "Full map data": "Full map data", + "Smart transitions": "Smart transitions", + "Activate slideshow mode": "Activate slideshow mode", + "Data is browsable": "Data is browsable", + "Delay between two transitions when in play mode": "Delay between two transitions when in play mode", + "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…", + "{delay} seconds": "{delay} seconds", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/locale/zh_TW.json b/umap/static/umap/locale/zh_TW.json new file mode 100644 index 00000000..6b7b4188 --- /dev/null +++ b/umap/static/umap/locale/zh_TW.json @@ -0,0 +1,350 @@ +{ + "About": "關於", + "Action not allowed :(": "行為不被允許:(", + "Add a layer": "新增圖層", + "Add symbol": "新增圖示", + "Advanced actions": "進階動作", + "Advanced properties": "進階屬性", + "Allow scroll wheel zoom?": "允許捲動放大?", + "An error occured": "發生錯誤", + "Are you sure you want to cancel your changes?": "您確定要取消您所做的變更?", + "Are you sure you want to clone this map and all its datalayers?": "您確定要複製此地圖及所有資料圖層?", + "Are you sure you want to delete the feature?": "您確定要刪除該圖徵?", + "Are you sure you want to delete this map?": "您確定要刪除此地圖?", + "Ball": "球", + "Bring feature to center": "將圖徵置中", + "Browse data": "瀏覽資料", + "Cancel": "取消", + "Cancel edits": "取消編輯", + "Center map on your location": "將您的位置設為地圖中心", + "Change map background": "更改地圖背景", + "Change symbol": "更改圖示", + "Change tilelayers": "改變地圖磚圖層", + "Choose the format of the data to import": "選擇匯入的資料格式", + "Choose the layer of the feature": "選擇圖徵的圖層", + "Choose the layer to import in": "選擇匯入圖層", + "Circle": "圓圈", + "Clone this map": "複製此地圖", + "Default": "預設", + "Delete": "刪除", + "Delete this feature": "刪除此圖徵", + "Disable editing": "停用編輯功能", + "Display on load": "載入時顯示", + "Do you want to display a minimap?": "您想要顯示小型地圖嗎?", + "Do you want to display popup footer?": "您是否要顯示註腳彈出?", + "Do you want to display the scale control?": "您是否要顯示尺標?", + "Download data": "下載資料", + "Draw a line": "描繪線條", + "Draw a marker": "描繪標記", + "Draw a polygon": "描繪多邊形", + "Draw a polyline": "描繪折線", + "Drop": "中止", + "Dynamic": "動態", + "Edit": "編輯", + "Edit feature's layer": "編輯圖徵的圖層", + "Edit map properties": "編輯地圖屬性", + "Edit map settings": "編輯地圖設定值", + "Edit this feature": "編輯此圖徵", + "Embed and share this map": "將地圖內嵌並分享", + "Enable editing": "啟用編輯功能", + "Format": "格式", + "From zoom": "由縮放大小", + "Go to «{feature}»": "轉至 «{feature}»", + "Hide controls": "隱藏控制列", + "How much to simplify the polyline on each zoom level (more = better performance and smoother look, less = more accurate)": "在不同縮放比例下,多邊形的精簡程度 (精簡越多有較好的效率、多邊形越平滑,精簡越少圖形越精確)", + "Import": "匯入", + "Import data": "匯入資料", + "Inherit": "繼承", + "Licence": "授權", + "Map background credits": "地圖背景取自", + "Map user content has been published under licence": "使用者地圖資訊內容已經以以下授權發佈", + "More controls": "更多控制項目", + "Optional. Same as color if not set.": "可選,若您未選取顏色,則採用預設值", + "Optionnal.": "選填", + "Paste here your data": "在此貼入資料", + "Please be sure the licence is compliant with your use.": "請再次確認所選的授權方式符合您的需求", + "Problem in the response": "回應出現錯誤", + "Problem in the response format": "回應的格式出現錯誤", + "Provide an URL here": "提供 URL網址", + "Remote data": "遠端資料", + "Save": "儲存", + "Save current edits": "儲存近期的變更", + "Save this center and zoom": "保存地圖中心點位置與縮放大小", + "Show/hide layer": "顯示/隱藏圖層", + "Start editing": "開始編輯", + "Stop editing": "停止編輯", + "The zoom and center have been setted.": "已完成置中及切換功能設定", + "To zoom": "至縮放大小", + "Untitled layer": "未命名圖層", + "Untitled map": "未命名地圖", + "Update permissions and editors": "更新可編輯權限及編輯者", + "Url": "網址", + "User content credits": "使用者內容清單", + "Where do we go from here?": "我們要去哪裡?", + "Zoom in": "放大", + "Zoom out": "縮小", + "Zoom to layer extent": "切換至圖層範圍", + "Zoom to this feature": "縮放至圖徵範圍", + "color": "色彩", + "dash array": "虛線排列", + "description": "描述", + "fill": "填入", + "fill color": "填入色彩", + "fill opacity": "填入不透明度", + "inherit": "繼承", + "licence": "授權", + "name": "名稱", + "no": "否", + "opacity": "不透明度", + "stroke": "筆畫粗細", + "weight": "寬度", + "yes": "是", + "Editing": "編輯", + "Embed the map": "嵌入地圖", + "Short URL": "短網址", + "# one hash for main heading": "單個 # 代表主標題", + "## two hashes for second heading": "兩個 # 代表次標題", + "### three hashes for third heading": "三個 # 代表第三標題", + "**double star for bold**": "** 重複兩次星號代表粗體 **", + "*simple star for italic*": "*單個星號代表斜體*", + "--- for an horizontal rule": "-- 代表水平線", + "All properties are imported.": "所有物件皆已匯入", + "Comma, tab or semi-colon separated values. SRS WGS84 is implied. Only Point geometries are imported. The import will look at the column headers for any mention of «lat» and «lon» at the begining of the header, case insensitive. All other column are imported as properties.": "使用逗號、定位鍵或是分號分隔的地理數據。預設座標系為 SRS WGS84。只會匯入地理座標點。匯入時抓取 «lat» 與 «lon» 開頭的欄位資料,不分大小寫。其他欄位則歸入屬性資料。", + "Custom background": "自訂背景", + "Help": "幫助", + "Image: {{http://image.url.com}}": "圖像: {{http://image.url.com}}", + "Link with text: [[http://example.com|text of the link]]": "帶有超連結的文字: [[http://example.com|text of the link]]", + "Properties imported:": "屬性匯入完成", + "Simple link: [[http://example.com]]": "簡單連結: [[http://example.com]]", + "Supported scheme": "支援的模板", + "Supported variables that will be dynamically replaced": "支援的物件將直接動態轉換", + "Text formatting": "文字格式", + "attribution": "表彰", + "display name": "顯示名稱", + "max zoom": "放到最大", + "min zoom": "縮至最小", + "Skipping unkown geometry.type: {type}": "略過未知的地理資料格式 geometry.type: {type}", + "Please save the map before": "請先儲存您的地圖", + "You can use feature properties as variables: ex.: with \"http://myserver.org/images/{name}.png\", the {name} variable will be replaced by the \"name\" value of each markers.": "您可以圖徵屬性作為變數使用:例如 \"http://myserver.org/images/{name}.png\", 這裡 {name} 是個變數,會以圖標的 \"name\" 值來取代。", + "Transform to polygon": "轉換為多邊形", + "Transform to lines": "轉換為線條", + "Choose the data format": "選擇資料格式", + "Error in the tilelayer URL": "地圖磚圖層 URL 錯誤", + "Directions from here": "從此處開始導航", + "Choose a preset": "選擇一種預設值", + "Limit bounds": "限制範圍", + "Use current bounds": "使用目前範圍", + "max East": "最東方", + "max North": "最北方", + "max South": "最南方", + "max West": "最西方", + "TMS format": "TMS 格式", + "Credits": "工作人員名單", + "Only visible features will be downloaded.": "只有可見的圖徵會被下載", + "Open this map extent in a map editor to provide more accurate data to OpenStreetMap": "在地圖編輯器中打開此地圖,提供更多準確資料給 OpenStreetMap", + "Default properties": "預設屬性", + "User interface options": "使用者界面選項", + "Image with custom width (in px): {{http://image.url.com|width}}": "自訂圖像的寬度(像素): {{http://image.url.com|width}}", + "Current view instead of default map view?": "將目前視點設為預設視點?", + "Iframe export options": "Iframe 匯出選項", + "Include full screen link?": "是否包含全螢幕的連結?", + "See full screen": "觀看全螢幕", + "height": "高度", + "width": "寬度", + "Clustered": "群集後", + "Clustering radius": "群集分析半徑", + "GeoRSS (only link)": "GeoRSS (只有連結)", + "GeoRSS (title + image)": "GeoRSS (標題與圖片)", + "Heatmap": "熱點圖", + "Heatmap radius": "熱點圖半徑", + "Name and description": "名稱與說明", + "Override clustering radius (default 80)": "覆蓋群集分析半徑 (預設80)", + "Override heatmap radius (default 25)": "覆蓋指定熱圖 heatmap 半徑 (預設 25)", + "Proxy request": "使用代理請求", + "Table": "表格", + "To use if remote server doesn't allow cross domain (slower)": "如果遠端伺服器不允許跨網域存取時使用 (效率較差)", + "Type of layer": "圖層類型", + "Filter…": "篩選器", + "Heatmap intensity property": "熱點圖強度屬性", + "Optional intensity property for heatmap": "選用的熱圖 heatmap 強度屬性", + "Caption": "標題", + "Data browser": "資料檢視器", + "Do you want to display a caption bar?": "您是否要顯示標題列?", + "Do you want to display a panel on load?": "您是否要顯示", + "None": "以上皆非", + "by": "由", + "Name and description (large)": "名稱和敘述(大型)", + "Empty": "空白", + "Split line": "分隔線", + "Clone": "複製", + "Clone of {name}": "複製 {name}", + "Side panel": "側邊框", + "Powered by Leaflet and Django, glued by uMap project.": "使用 LeafletDjango 技術﹐由 uMap 計畫 整合。", + "Zoom level for automatic zooms": "自動縮放的比例大小", + "Do you want to display the «more» control?": "您是否要顯示 《更多》?", + "Auto": "自動", + "Default: name": "預設: name", + "Property to use for sorting features": "排序圖徵所使用的屬性", + "Slideshow": "投影片", + "Start slideshow": "開啟投影片", + "Stop slideshow": "中止投影片", + "Text color for the cluster label": "叢集標籤的文字顏色", + "Zoom to the next": "切換至下一頁", + "Zoom to the previous": "切換至前一頁", + "Add a new property": "新增屬性", + "Are you sure you want to delete this property on all the features?": "您確定要刪除所有圖徵中的此項屬性?", + "Close": "關閉", + "Delete this property on all the features": "從所有圖徵中刪除此屬性", + "Edit properties in a table": "在表格中編輯屬性", + "Please enter the name of the property": "請輸入物件名稱", + "Please enter the new name of this property": "請輸入新的物件名稱", + "Rename this property on all the features": "在所有特徵中重新命名該物件", + "If false, the polygon will act as a part of the underlying map.": "選擇「否」時,多邊形物件會被當成為底圖的一部分。", + "Iframe with custom height (in px): {{{http://iframe.url.com|height}}}": "自訂 iframe 高度 (以 px 為單位): {{{http://iframe.url.com|height}}}", + "Iframe: {{{http://iframe.url.com}}}": "Iframe: {{{http://iframe.url.com}}}", + "See all": "觀看完整內容", + "Dynamic properties": "動態屬性", + "Use placeholders with feature properties between brackets, eg. {name}, they will be dynamically replaced by the corresponding values.": "以圖徵的屬性加上括弧作為標記,例如 {name},這樣子就可以動態被取代成對應的數值。", + "Long credits": "詳細工作人員名單", + "No licence has been set": "尚未設定授權條例", + "Popup content template": "彈出內文範本", + "Short credits": "簡短工作人員名單", + "Will be displayed in the bottom right corner of the map": "將會顯示在地圖的右下角", + "Will be visible in the caption of the map": "標題將出現在地圖上", + "Map has been saved!": "地圖儲存已完成", + "Save anyway": "通通都儲存吧!", + "Woops! Someone else seems to have edited the data. You can save anyway, but this will erase the changes made by others.": "糟糕,好像有人正在進行編輯,您仍可儲存資料,但您做的變更將被他人修改取代。", + "Comma separated list of properties to use when filtering features": "以逗號分開列出篩選時要使用的屬性", + "Keep current visible layers": "保留目前可見圖層", + "Coordinates": "座標", + "Latitude": "緯度", + "Longitude": "經度", + "Continue line (Ctrl-click)": "連續線(Ctrl+點擊鍵)", + "Start a hole here": "開始一個凹洞", + "Click last point to finish shape": "點下最後一點後完成外形", + "Click to add a marker": "點選以新增標記", + "Click to continue drawing": "點擊以繼續繪製", + "Click to start drawing a line": "點擊以開始繪製直線", + "Click to start drawing a polygon": "點選開始繪製多邊形", + "Import in a new layer": "匯入至新圖層", + "Layer": "圖層", + "Please choose a format": "請選擇地圖格式", + "Imports all umap data, including layers and settings.": "匯入所有 umap 資料,包含圖層與設定。", + "Invalid umap data": "無效的 umap 資料", + "Invalid umap data in {filename}": "無效的 umap 資料於檔案 {filename}", + "Add a line to the current multi": "新增線段", + "Add a polygon to the current multi": "新增多邊形", + "Click to edit": "點擊開始編輯", + "Continue line": "連續線段", + "Delete this shape": "刪除外形", + "Make main shape": "設為主要外形", + "Merge lines": "合併線段", + "Remove shape from the multi": "移除外形", + "Transfer shape to edited feature": "將外形加到編輯中的特徵", + "next": "下一個", + "previous": "前一個", + "Measure distances": "測量距離", + "NM": "NM", + "kilometers": "公里", + "km": "km", + "mi": "mi", + "miles": "英里", + "nautical miles": "海浬", + "{area} acres": "{area} 弧線", + "{area} ha": "{area} ha", + "{area} m²": "{area} 平方公尺", + "{area} mi²": "{area} 平方英哩", + "{area} yd²": "{area} 平方英呎", + "{distance} NM": "{距離} NM", + "{distance} km": "{距離} km", + "{distance} m": "{distance} 公尺", + "{distance} miles": "{distance} 英哩", + "{distance} yd": "{distance} 英呎", + "Are you sure you want to restore this version?": "您確定要回復此一版本嗎?", + "Extract shape to separate feature": "由外形分離出圖徵", + "Layer properties": "圖層屬性", + "Restore this version": "回復此版本", + "Versions": "版本", + "You have unsaved changes.": "您有變更尚未儲存", + "A comma separated list of numbers that defines the stroke dash pattern. Ex.: \"5, 10, 15\".": "用逗號來分隔一列列的虛線模式,例如:\"5, 10, 15\"。", + "Advanced transition": "進階轉換", + "Allow interactions": "允許互動", + "Autostart when map is loaded": "當讀取地圖時自動啟動", + "Default interaction options": "預設互動選項", + "Default shape properties": "預設形狀屬性", + "Default zoom level": "預設縮放等級", + "Define link to open in a new window on polygon click.": "指定點多邊形連結時開新視窗。", + "Delete this vertex (Alt-click)": "刪除頂點 (Alt-click)", + "Display the control to open OpenStreetMap editor": "顯示開啟開放街圖編輯器的按鍵", + "Display the data layers control": "顯示資料圖層鍵", + "Display the embed control": "顯示嵌入鍵", + "Display the fullscreen control": "顯示全螢幕鍵", + "Display the locate control": "顯示定位鍵", + "Display the measure control": "顯示比例尺鍵", + "Display the search control": "顯示搜尋鍵", + "Display the tile layers control": "顯示圖層鍵", + "Display the zoom control": "顯示縮放鍵", + "Exit Fullscreen": "結束全螢幕模式", + "Fetch data each time map view changes.": "每次地圖檢視改變時截取資料。", + "Filter keys": "篩選鍵", + "Icon shape": "圖示圖形", + "Icon symbol": "圖示標誌", + "Interaction options": "互動選項", + "Label key": "標籤鍵", + "Link to…": "連結至...", + "Must be a valid CSS value (eg.: DarkBlue or #123456)": "必須是有效的 CSS 值 (例如:DarkBlue 或是 #123456)", + "No results": "沒有結果", + "Popup style": "彈出視窗樣式", + "Replace layer content": "取代圖層內容", + "Save this location as new feature": "將地點存為新的圖徵", + "Search location": "搜尋地點", + "Set URL": "設定網址", + "Shape properties": "形狀屬性", + "Simplify": "簡化", + "Sort key": "排序鍵", + "The name of the property to use as feature label (ex.: \"nom\")": "用作圖徵標籤的屬性名稱 (例如:“nom”)", + "Toggle edit mode (shift-click)": "切換編輯模式 (shift-click)", + "View Fullscreen": "以全屏幕模式顯示", + "Whether to display or not polygons paths.": "是否顯示多邊形的路徑。", + "Whether to fill polygons with color.": "是否將多邊形填入色彩。", + "Zoom to this place": "縮放到這個地方", + "always": "經常", + "clear": "清除", + "define": "定義", + "hidden": "隱藏", + "never": "永不", + "Automatic": "自動", + "Clone this feature": "複製此項目", + "Display label": "顯示標籤", + "Drag to reorder": "拖拽以排序", + "Iframe with custom height and width (in px): {{{http://iframe.url.com|height*width}}}": "自訂 iframe 高度和寬度 (以 px 為單位):{{{http://iframe.url.com|height*width}}}", + "Labels are clickable": "標籤可點擊", + "Label direction": "標籤方向", + "Manage layers": "管理圖層", + "On the bottom": "在底部", + "On the left": "在左側", + "On the right": "在右側", + "On the top": "在頂部", + "Only display label on mouse hover": "僅在滑鼠移至標籤時顯示", + "Open link in…": "開啓連結於...", + "Unable to detect format of file {filename}": "無法偵測 {filename} 的檔案格式", + "collapsed": "收起", + "expanded": "展開", + "iframe": "iframe", + "new window": "新視窗", + "parent window": "父視窗", + "{count} errors during import: {message}": "於匯入時發生 {count} 項錯誤: {message}", + "Are you sure you want to delete this layer?": "你確定要刪除這個圖層嗎?", + "Delete layer": "刪除圖層", + "Error while fetching {url}": "擷取網址時發生錯誤 {url}", + "Home": "首頁", + "Delete all layers": "刪除所有圖層", + "Full map data": "全部地圖資料", + "Smart transitions": "智慧轉換", + "Activate slideshow mode": "開啟幻燈片模式", + "Data is browsable": "資料是可檢視的", + "Delay between two transitions when in play mode": "播放模式下兩個轉換間會延遲", + "Set it to false to hide this layer from the slideshow, the data browser, the popup navigation…": "設定為假時,在幻燈片時、資料檢視器和彈出式導航中可將此圖層隱藏...", + "{delay} seconds": "{delay} 秒", + "Display measure": "Display measure" +} \ No newline at end of file diff --git a/umap/static/umap/storage.css b/umap/static/umap/storage.css new file mode 100644 index 00000000..21563569 --- /dev/null +++ b/umap/static/umap/storage.css @@ -0,0 +1,1450 @@ +/* *********** */ +/* Map details */ +/* *********** */ +#map { + height: 100%; + width: 100%; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; +} + +.clearafter:after { + visibility: hidden; + display: block; + font-size: 0; + content: " "; + clear: both; + height: 0; +} + +/* *********** */ +/* Controls */ +/* *********** */ + +.leaflet-control-zoom, +.storage-control { + background: none no-repeat scroll center center #F8F8F9; + border-radius: 4px; + border: 1px solid #bbb; +} +.leaflet-control-fullscreen a:hover, +.leaflet-control-fullscreen a { + height: 36px; + width: 36px; + background-size: 36px 68px; +} +.leaflet-fullscreen-on .leaflet-control-fullscreen a { + background-position: 0 -32px; +} +.leaflet-measure-control a, +.storage-control a { + background-position: 50% 50%; + background-repeat: no-repeat; + display: block; + height: 36px; + width: 36px; + line-height: 36px; + background-image: url("../img/24.png"); +} +.leaflet-control.display-on-more, +a.storage-control-less { + display: none; +} +.storage-control-more, +.storage-control-less { + background-image: url("../img/16-white.png"); + background-position: -160px -210px; +} +.storage-more-controls .display-on-more, +.storage-more-controls .storage-control-less { + display: block; +} +.storage-more-controls .storage-control-more { + display: none; +} +.leaflet-control-embed a { + background-position: -82px -122px; +} +.leaflet-control-tilelayers a { + background-position: -82px -2px; +} +.leaflet-control-home a { + background-position: -122px -82px; +} +.leaflet-control-locate a { + background-position: -2px -122px; +} +.leaflet-control-search a { + background-position: -42px -122px; + display: block; +} +.leaflet-control-search a.loading { + background-image: url("../img/search.gif"); +} +a.storage-control-text { + float: right; + margin: 0; + width: 36px; + height: 23px; + line-height: 23px; + border: 1px solid #444; + border-radius: 2px; + background-color: #666; + color: #f8f8f8; + text-align: center; + font-size: 0.8em; +} +.leaflet-control-edit-enable a { + background-image: url("../img/24-white.png"); + background-position: -1px -1px; + background-color: #353c3e; +} + + + + +/* ***************** */ +/* Search panel */ +/* ***************** */ +ul.photon-autocomplete { + position: absolute; + background-color: white; + z-index: 1000; + display: none; +} +.photon-autocomplete li { + min-height: 40px; + line-height: 1em; + padding: 5px 10px; + overflow: hidden; + white-space: nowrap; + font-size: 1em; + border-left: 4px solid #efefef; +} +.photon-autocomplete li strong { + display: block; +} +.photon-autocomplete li.on { + border-left: 4px solid #2980b9; + cursor: pointer; +} +.photon-autocomplete li.photon-no-result { + text-align: center; + color: #666; + font-size: 0.9em; + line-height: 40px; +} +.photon-autocomplete .photon-feedback { + display: block; + text-align: right; + font-size: 0.8em; + padding: 3px; + color: #999; + border-top: 1px solid #eee; +} +.search-result-tools { + float: right; + display: block; +} + + + +/* *********** */ +/* Draw */ +/* *********** */ +.leaflet-drawing-icon, +.leaflet-editable-drawing { + cursor: crosshair; +} +.leaflet-control-toolbar > li > .leaflet-toolbar-icon, +.storage-toolbar a, +.storage-toolbar a:hover { + height: 40px; + width: 40px; + display: none; + margin-top: 0; + vertical-align: top; + border-bottom: none; + background-color: #323737; + border-right: 1px solid #eee; + background-repeat: no-repeat; + background-image: url("../img/24.png"); + background-size: auto auto; +} +.leaflet-control-toolbar li .leaflet-toolbar-icon.dark { + background-image: url("../img/24-white.png"); +} +.leaflet-control-toolbar .leaflet-toolbar-icon.dark:hover { + background-color: #353c3e; +} +.storage-toolbar { + margin-top: 0; +} +.update-map-extent, +.leaflet-container .storage-toolbar .update-map-extent { + background-position: 0 -40px; +} +.storage-toolbar .update-map-tilelayers, +.update-map-tilelayers { + background-position: -80px 0; +} +.manage-datalayers { + background-position: -40px -80px; +} +.storage-toolbar .update-map-permissions, +.update-map-permissions { + background-position: -40px -40px; +} +.storage-toolbar .upload-data, +.upload-data { + background-position: -160px 0; +} +.storage-toolbar .update-map-settings, +.update-map-settings { + background-position: -120px 0; +} +.storage-draw-marker, +.storage-toolbar .storage-draw-marker { + background-position: -160px -40px; +} +.storage-draw-polyline, +.storage-toolbar .storage-draw-polyline { + background-position: -120px -40px; +} +.storage-draw-polyline-multi, +.storage-toolbar .storage-draw-polyline-multi { + background-position: -42px -162px; +} +.storage-draw-polygon, +.storage-toolbar .storage-draw-polygon { + background-position: -80px -40px; +} +.storage-draw-polygon-multi, +.storage-toolbar .storage-draw-polygon-multi { + background-position: -2px -162px; +} +.storage-edit-enabled .leaflet-control-toolbar > li > .leaflet-toolbar-icon, +.storage-edit-enabled .storage-toolbar a { + display: block; +} + + +/* ********************************* */ +/* Third party plugin override */ +/* ********************************* */ + +.leaflet-control-edit-in-osm .leaflet-control-edit-in-osm-toggle { + background-image: url('../img/24.png'); + background-position: -121px -121px; +} +.leaflet-measure-control, +.leaflet-control-edit-in-osm { + border: 1px solid #bbb; + border-radius: 4px; + box-shadow: none; +} +.leaflet-measure-control a { + background-position: -1px -81px; +} +.leaflet-control .leaflet-measure-toggle { + display: inline-block; + vertical-align: middle; +} + + +/* ********************************* */ +/* Help Lightbox */ +/* ********************************* */ +.storage-help-box { + z-index: 10001; + position: absolute; + margin: 0 calc(50% - 500px/2); + width: 500px; + padding: 40px 20px; + border: 1px solid #222; + background-color: #323737; + color: #efefef; + font-size: 0.8em; + visibility: hidden; + top: -100%; +} +.storage-help-box .storage-close-link { + float: right; +} +.storage-help-button { + display: inline-block; + width: 16px; + height: 16px; + margin-left: 5px; + background-position: -12px -12px; + background-repeat: no-repeat; + background-image: url("../img/16.png"); + vertical-align: middle; +} +.dark .storage-help-button { + background-image: url("../img/16-white.png"); +} +.storage-help-on .storage-help-box { + visibility: visible; + top: 100px; +} +.storage-help-entry + .storage-help-entry { + margin-top: 10px; + border-top: 1px solid #aaa; + padding-top: 10px; +} + + +/* ********************************* */ +/* Edit main toolbox */ +/* ********************************* */ + +.leaflet-container a.leaflet-control-edit-save, +.leaflet-container a.leaflet-control-edit-cancel, +.leaflet-container a.leaflet-control-edit-disable { + display: block; + height: 36px; + line-height: 36px; + color: #efefef; + border: none; + font-size: 11px; + margin-left: 10px; + float: right; +} +.leaflet-container a.leaflet-control-edit-cancel, +.leaflet-container a.leaflet-control-edit-save { + color: #f8f8f8; + width: auto; + height: 36px; + line-height: 36px; + min-height: 36px; + padding: 0 10px; + min-width: 100px; +} +.leaflet-container a.leaflet-control-edit-cancel { + background-color: #C60F13; +} +.leaflet-container a.leaflet-control-edit-save { + opacity: 0.5; + cursor: not-allowed; + background-color: #215d9c; +} +.storage-is-dirty a.leaflet-control-edit-save { + opacity: 1; + cursor: pointer; +} +.leaflet-container a.leaflet-control-edit-save, +.leaflet-container a.leaflet-control-edit-cancel, +.leaflet-container a.leaflet-control-edit-disable, +.storage-edit-enabled .leaflet-control-edit-enable { + display: none; +} +.storage-edit-enabled a.leaflet-control-edit-save, +.storage-edit-enabled a.leaflet-control-edit-disable, +.storage-edit-enabled .storage-is-dirty a.leaflet-control-edit-cancel { + display: inline-block; +} +.storage-is-dirty a.leaflet-control-edit-disable { + display: none; +} +.storage-click-to-edit { + color: #4a90d9; + font-weight: bold; +} +.storage-click-to-edit:after { + content: "\00a0"; + background-repeat: no-repeat; + background-position: center center; + cursor: pointer; + width: 26px; + height: 100%; + display: inline-block; + background-position: -82px -82px; +} +.storage-click-to-edit:hover:after { + background-image: url("../img/16.png"); +} +.dark .storage-click-to-edit:hover:after { + background-image: url("../img/16-white.png"); +} +.storage-caption-bar { + display: none; +} +.storage-main-edit-toolbox { + top: -46px; + position: absolute; + width: 100%; + left: 0; + right: 0; + height: 46px; + background-color: #323737; + padding: 5px; + text-align: left; + line-height: 36px; + cursor: auto; + border-bottom: 1px solid #222; + z-index: 1000; + opacity: 0.98; + color: #efefef; +} +.storage-edit-enabled .storage-main-edit-toolbox { + top: 0; +} +.storage-edit-enabled .storage-caption-bar { + display: none; +} +.storage-caption-bar h3, +.storage-main-edit-toolbox h3 { + display: inline; +} +.storage-edit-enabled .leaflet-top { + top: 48px; +} +.storage-caption-bar-enabled .storage-caption-bar { + display: block; + height: 46px; + background-color: #fff; + width: 100%; + position: absolute; + left: 0; + bottom: 0; + right: 0; + padding: 0 0 0 5px; + text-align: left; + line-height: 46px; + cursor: auto; + border-top: 1px solid #ddd; + opacity: 0.93; + z-index: 1000; +} +.storage-caption-bar-enabled .leaflet-bottom { + bottom: 46px; +} +.storage-help { + font-style: italic; +} +.storage-slideshow-toolbox { + float: right; + display: none; +} +.storage-slideshow-enabled .storage-slideshow-toolbox { + display: inline-block; +} +.storage-slideshow-toolbox li { + display: inline-block; + cursor: pointer; + font-size: 1.5em; + background-color: #464646; + color: #fff; + height: 46px; + width: 70px; + line-height: 46px; + vertical-align: middle; + text-align: center; +} +.storage-slideshow-toolbox li + li { + border-left: 1px solid #aaa; +} +.storage-slideshow-toolbox li:hover { + background-color: #666; +} +.storage-slideshow-active .storage-slideshow-toolbox .play, +.storage-slideshow-toolbox .play { + width: 100px; + text-align: left; + padding-left: 20px; +} +.storage-slideshow-toolbox .play:after { + content: ' ▶'; +} +.storage-slideshow-active .storage-slideshow-toolbox .play:after { + content: ' ❚❚'; +} +.storage-slideshow-toolbox .stop:before { + content: '■'; +} +.storage-slideshow-toolbox .next:before { + content: '➡'; +} +.storage-slideshow-toolbox .prev:before { + content: '⬅'; +} +.storage-slideshow-toolbox .play div { + height: 20px; + width: 20px; + margin: 0px auto; + position: relative; + top: 5px; + -webkit-animation: rotation 5s infinite linear; + -moz-animation: rotation 5s infinite linear; + -o-animation: rotation 5s infinite linear; + animation: rotation 5s infinite linear; + border-left: 3px solid rgba(255,255,239,.15); + border-right: 3px solid rgba(255,255,255,.15); + border-bottom: 3px solid rgba(255,255,255,.15); + border-top: 3px solid rgba(255,255,255,.8); + border-radius:100%; + display: inline-block; + visibility: hidden; +} +@-webkit-keyframes rotation { + from {-webkit-transform: rotate(0deg);} + to {-webkit-transform: rotate(359deg);} +} +@-moz-keyframes rotation { + from {-moz-transform: rotate(0deg);} + to {-moz-transform: rotate(359deg);} +} +@-o-keyframes rotation { + from {-o-transform: rotate(0deg);} + to {-o-transform: rotate(359deg);} +} +@keyframes rotation { + from {transform: rotate(0deg);} + to {transform: rotate(359deg);} +} +.storage-slideshow-active .storage-slideshow-toolbox .play .spinner { + visibility: visible; +} +.storage-datalayer-version { + padding: 5px 0; + border-bottom: 1px solid #202425; +} +.storage-datalayer-version a { + display: inline-block; + width: 20px; + height: 20px; + margin-left: 5px; + background-position: -209px -130px; + background-repeat: no-repeat; + background-image: url("../img/16-white.png"); + vertical-align: middle; + margin-right: 5px; + border: 1px solid #202425; + background-color: #2c3233; +} + + + +/* ********************************* */ +/* Datalayers Control */ +/* ********************************* */ + +.leaflet-control-browse .storage-browse-toggle { + background-image: url("../img/24.png"); + width: 36px; + height: 36px; + background-position: -41px -81px; +} +.leaflet-control-browse .storage-browse-actions { + background-color: #fff; + padding: 10px; + display: none; + line-height: 24px; + border-radius: 2px; +} +.leaflet-control-browse .storage-browse-datalayers { + max-height: 10em; + overflow-y: auto; +} +.search-result-tools i, +.leaflet-inplace-toolbar a, +.storage-browse-features i, +.storage-caption i, +.storage-browse-datalayers i { + background-repeat: no-repeat; + background-image: url("../../src/img/16.png"); + display: inline; + padding: 0 10px; + cursor: pointer; + height: 24px; + line-height: 24px; + vertical-align: middle; +} +.dark .storage-browse-datalayers i { + background-image: url("../../src/img/16-white.png"); +} +.storage-browse-datalayers li[draggable] .drag-handle { + float: right; + background-position: -130px -130px; + margin-right: 5px; + cursor: move; +} +.leaflet-inplace-toolbar a { + background-image: url("../../src/img/16-white.png"); + background-color: #323737!important; +} +.leaflet-toolbar-tip { + background-color: #323737; +} +.leaflet-inplace-toolbar a:hover { + background-color: #353c3e!important; +} +.leaflet-control-browse .storage-browse-datalayers .off i { + cursor: inherit; +} +.layer-toggle { + background-position: -90px -51px; +} +.off .layer-toggle { + background-position: -130px -51px; +} +.feature-zoom_to { + background-position: -10px -88px; +} +.layer-zoom_to { + background-position: -10px -91px; +} +.layer-table-edit { + background-position: -90px -10px; +} +.layer-delete { + background-position: -209px -90px; +} +.feature-edit, +.layer-edit { + background-position: -90px -89px; +} +.storage-toggle-edit { + background-position: -85px -85px; +} +.off .layer-table-edit { + background-position: -129px -10px; +} +.off .layer-edit { + background-position: -90px -129px; +} +.off .layer-zoom_to { + background-position: -50px -91px; +} +.off .layer-delete { + background-position: -209px -208px; +} +.storage-new-hole { + background-position: -125px -165px; +} +.storage-delete-all { + background-position: -204px -85px; +} +.storage-delete-one-of-multi { + background-position: -165px -125px; +} +.storage-delete-one-of-one { + background-position: -204px -86px; +} +.storage-delete-vertex { + background-position: -205px -165px; +} +.storage-continue-line { + background-position: -165px -5px; +} +.storage-split-line { + background-position: -205px -45px; +} +.storage-extract-shape-from-multi{ + background-position: -205px -5px; +} +.storage-browse-features .feature-title, +.leaflet-control-browse .storage-browse-actions .layer-title { + width: inherit; + cursor: inherit; + padding-left: 6px; +} +.storage-browse-features .feature-title { + font-size: 12px; + cursor: pointer; +} +.leaflet-control-browse .storage-browse-actions .off .layer-title { + color: rgb(179, 179, 179); +} +.leaflet-control-browse.expanded > a { + display: none; +} +.leaflet-control-browse.expanded .storage-browse-actions { + display: block; +} +.leaflet-control-browse a.storage-browse-link { + background-image: none; + background-color: rgb(68, 68, 68); + color: white; + display: block; + height: 24px; + line-height: 24px; + margin-top: 14px; + padding: 0 5px; + text-align: right; + min-width: 160px; + width: 100%; + border-radius: 2px; +} +a.add-datalayer:before, +.leaflet-control-browse a.storage-browse-link:before { + background-image: url("../img/16.png"); + background-repeat: no-repeat; + background-position: -92px -168px; + width: 24px; + height: 24px; + content: " "; + display: block; + float: left; +} +a.add-datalayer:before { + background-position: -45px -45px; +} +a.add-datalayer:hover, +.leaflet-control-browse a.storage-browse-link:hover { + background-color: rgb(99, 99, 99); +} +.storage-browse-data .off .feature { + display: none; +} + + +/* ********************************* */ +/* Features browser panel */ +/* ********************************* */ + +.storage-browse-features > div { + border: 1px solid #d3d3d3; + margin-bottom: 14px; + border-radius: 2px; +} +.storage-browse-features h5 { + height: 30px; + line-height: 30px; + background-color: #eeeee0; + margin-bottom: 0; + color: #666; + overflow: hidden; + padding-left: 5px; +} +.storage-browse-features h5 span { + margin-left: 10px; +} +.storage-browse-features li { + padding: 2px 0; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.storage-browse-features li:nth-child(even) { + background-color: #f8f8f3; +} +.storage-browse-features .feature-color { + box-shadow: 0 0 4px 0 black inset; + background-size: 70% 70%; + border: 4px solid #f8f8f3; + cursor: inherit; + -moz-box-sizing:border-box; + -webkit-box-sizing:border-box; + box-sizing: border-box; + background-position: center; + display: inline-block; + padding: 0; + width: 24px; +} +.storage-browse-features .polygon .feature-color, +.storage-browse-features .polyline .feature-color { + box-shadow: 0 0 4px 0 black inset; + background-image: url("../img/24.png"); + background-size: 500%; +} +.storage-browse-features .polyline .feature-color { + background-position: -48px -16px; +} +.storage-browse-features .polygon .feature-color { + background-position: -32px -16px; +} +.show-on-edit { + display: none!important; +} +.storage-edit-enabled .show-on-edit { + display: inline-block!important; +} +.storage-edit-enabled .show-on-edit.inline { + display: inline!important; +} +.storage-edit-enabled .show-on-edit.block { + display: block!important; +} + +.storage-browse-description { + font-size: 0.9em; + margin-bottom: 14px; +} + + +/* ********************************* */ +/* Table Editor */ +/* ********************************* */ +#storage-ui-container.storage-table-editor { + padding-left: 0; + padding-right: 0; +} +#storage-ui-container.storage-table-editor .toolbox li { + float: left; +} + +.storage-table-editor .storage-close-link { + right: auto; + left: 20px; +} +.storage-table-editor .table { + display: table; + width: 100%; + white-space: nowrap; + table-layout: fixed; +} +.storage-table-editor .tbody { + display: table-row-group; +} +.storage-table-editor .thead, +.storage-table-editor .trow { + display: table-row; +} +.storage-table-editor .tcell { + display: table-cell; + width: 200px; +} +.storage-table-editor .thead { + text-align: center; + height: 48px; + line-height: 48px; + background-color: #2c3133; +} +.storage-table-editor .thead .tcell { + border-left: 1px solid #0b0c0c; +} +.storage-table-editor .tbody .trow input { + margin: 0; + border-right: none; + display: inline; +} +.storage-table-editor .tbody .trow + .trow input { + border-top: none; +} +.storage-table-editor .thead i { + display: none; + width: 50%; + cursor: pointer; + padding: 10px 0; + height: 24px; + line-height: 24px; +} +.storage-table-editor .thead i:before { + width: 40px; +} +.storage-table-editor .thead .tcell:hover i { + display: inline-block; +} +.storage-table-editor .thead .tcell i:hover { + background-color: #33393b; +} +.storage-table-editor .thead .tcell:hover span { + display: none; +} +.remotelayer .layer-table-edit { + display: none !important; +} + +/* ********************************* */ +/* Icons */ +/* ********************************* */ +.storage-icon-16 { + background-repeat: no-repeat; + background-image: url("../../src/img/16.png"); + display: inline; + padding: 0 10px; +} +.storage-add { + background-position: -12px -49px; +} +.storage-list { + background-position: -52px -168px; +} +.storage-list-white { + background-position: -92px -168px; +} +.storage-caption { + background-position: -170px -49px; +} + +/* ********************************* */ +/* Tilelayer switcher */ +/* ********************************* */ + +.storage-tilelayer-switcher-container { + margin-top: 10px; +} +.storage-tilelayer-switcher-container li { + border: 1px solid rgb(116, 116, 116); + border-radius: 4px 4px 4px 4px; + margin-bottom: 14px; + overflow: hidden; + position: relative; + width: 256px; + cursor: pointer; + height: 200px; + margin-left: auto; + margin-right: auto; +} +.storage-tilelayer-switcher-container li div { + background-color: rgb(116, 116, 116); + bottom: 0; + color: rgb(247, 246, 241); + height: 56px; + line-height: 56px; + opacity: 0.9; + padding-left: 10px; + position: absolute; + width: 100%; + text-align: center; +} +.storage-tilelayer-switcher-container li:hover div:before, +.storage-tilelayer-switcher-container .selected div:before { + content: "✓"; + font-size: 1.3em; + line-height: 56px; + padding-right: 7px; + position: absolute; + left: 7px; +} +.storage-tilelayer-switcher-container li img { + display: block; + max-width: 100%; +} + +/* ********************************* */ +/* Caption */ +/* ********************************* */ +.datalayer-color { + display: inline-block; + width: 16px; + height: 16px; + margin-right: 10px; + border: 1px solid #000; + background-color: transparent; + vertical-align: middle; +} + + +/* ********************************* */ +/* Popup */ +/* ********************************* */ +.storage-popup { + display: flex; + flex-flow: column nowrap; + height:100%; +} + +.storage-popup-footer { + background-color: rgb(68, 68, 68); + color: white; + display: table; + width: 100%; + margin-top: auto; + min-width: 99px; + border-radius: 2px; + max-height: 24px; +} +.storage-popup-footer li { + line-height: 24px; + height: 24px; + display: table-cell; + width: 33.3%; + cursor: pointer; + text-align: center; +} +.storage-popup-footer li:before { + display: inline-block; + width: 16px; + height: 16px; + margin-left: 5px; + background-repeat: no-repeat; + background-image: url("../img/16.png"); + vertical-align: middle; + content: " "; +} +.storage-popup-footer li.zoom:before { + background-position: -12px -170px; +} +.storage-popup-footer li.previous:before { + background-position: -52px -130px; +} +.storage-popup-footer li.next:before { + background-position: -12px -130px; +} + + +/* ************* */ +/* Marker's Icon */ +/* ************* */ +.storage-div-icon .icon_container { + background-color: white; + border-radius: 4px 4px 4px 4px; + height: 32px; + width: 32px; + box-shadow: 7px 10px 8px -5px black; + opacity: 0.9; + background-color: #2470b5; + text-align: center; + line-height: 32px; +} +.storage-div-icon .icon_container img { + vertical-align: middle; + max-width: 24px!important; /* leaflet.css has !important, so... */ +} +.storage-div-icon .icon_arrow { + border-left: 8px solid transparent; + border-right: 8px solid transparent; + border-top: 8px solid #2270b5; + height: 0; + left: 8px; + position: relative; + width: 0; + opacity: 0.9; + /*box-shadow: 4px 8px 6px -3px black;*/ +} +.storage-drop-icon .icon_arrow { + border-left: 10px solid transparent; + border-right: 10px solid transparent; + border-top: 16px solid #2270B5; + height: 0; + left: 6px; + position: relative; + top: -4px; + width: 0; +} +.storage-drop-icon .icon_container { + background-color: #2470B5; + border-radius: 16px 16px 16px 16px; + box-shadow: 6px 13px 8px -4px black; + height: 32px; + line-height: 32px; + opacity: 0.9; + text-align: center; + width: 32px; +} +.storage-drop-icon .icon_container img { + vertical-align: middle; + max-width: 24px !important; +} +.storage-circle-icon { + border: 1px solid white; + border-radius: 10px 10px 10px 10px; + height: 12px; + width: 12px; +} +.storage-ball-icon .icon_container { + background-color: darkblue; + background: radial-gradient(circle at 6px 38% , white -4px, darkblue 8px) repeat scroll 0 0 transparent; + border-radius: 8px 8px 8px 8px; + box-shadow: 1px 21px 6px -3px black; + height: 16px; + opacity: 0.9; + text-align: center; + width: 16px; +} +.storage-ball-icon .icon_arrow { + background-color: black; + height: 16px; + left: 7px; + opacity: 0.9; + position: relative; + top: -1px; + width: 2px; +} +.storage-edit-enabled .readonly { + cursor: not-allowed; +} + + +/* ********************************* */ +/* Forms utils */ +/* ********************************* */ + +.storage-delete:before, .storage-empty:before, .storage-to-polygon:before, +.storage-clone:before, .storage-edit:before, +.storage-to-polyline:before { + background-repeat: no-repeat; + text-indent: 38px; + height: 24px; + line-height: 24px; + display: inline-block; + background-image: url("../img/24.png"); + vertical-align: bottom; + content: " "; +} +.dark .storage-delete:before, .dark .storage-empty:before, +.dark .storage-to-polygon:before, +.dark .storage-clone:before, +.dark .storage-edit:before, +.dark .storage-to-polyline:before { + background-image: url("../img/24-white.png"); + vertical-align: middle; +} +.storage-to-polygon:before { + background-position: -80px -48px; +} +.storage-to-polyline:before { + background-position: -120px -48px; +} +.storage-clone:before { + background-position: -160px -88px; +} +.storage-delete:before { + background-position: -40px -8px; +} +.storage-edit:before { + background-position: -6px -6px; +} +.storage-empty:before { + background-position: -160px -126px; +} +.storage-edit-actions { + padding-top: 5px; + clear: both; +} +.storage-edit-actions li { + height: 36px; + line-height: 36px; + cursor: pointer; + margin-bottom: 5px; + border-radius: 2px; + border: 1px solid #222; +} +.storage-edit-actions li i { + background-image: url("../img/24-white.png"); + background-repeat: no-repeat; + display: table-cell; + width: 36px; + height: 36px; +} +.storage-edit-actions li span { + display: table-cell; + vertical-align: middle; +} +.storage-edit-actions li:hover { + background-color: #353c3e; +} +.storage-form-iconfield { + position: relative; + overflow: hidden; + padding-bottom: 5px; + padding-top: 5px; + line-height: 30px; +} +.storage-icon-list, .storage-pictogram-list { + clear: both; +} +.storage-icon-choice { + display: block; + float: left; + width: 30px; + height: 30px; + line-height: 30px; + position: relative; + cursor: pointer; + background-image: url("../img/icon-bg.png"); + text-align: center; + box-shadow: 0 0 4px 0 black inset; + margin-bottom: 5px; + margin-right: 5px; +} +.storage-icon-choice img { + vertical-align: middle; + max-width: 24px; +} +.storage-icon-choice:hover, +.storage-icon-choice.selected, +.storage-color-picker span:hover { + box-shadow: 0 0 4px 0 black; +} +.storage-icon-choice .leaflet-marker-icon { + bottom: 0; + left: 30px; + position: absolute; +} +.storage-color-picker { + clear: both; + margin-bottom: 20px; + overflow: hidden; + display: none; +} +.storage-color-picker span { + width: 20px; + height: 20px; + display: block; + padding: 0; + margin: 0; + cursor: pointer; + float: left; +} + +/* ********************************* */ +/* Ajax loader */ +/* ********************************* */ +.storage-loading .storage-loader +{ + display: block; + -webkit-animation: shift-rightwards 3s ease-in-out infinite; + -moz-animation: shift-rightwards 3s ease-in-out infinite; + -ms-animation: shift-rightwards 3s ease-in-out infinite; + -o-animation: shift-rightwards 3s ease-in-out infinite; + animation: shift-rightwards 3s ease-in-out infinite; + -webkit-animation-delay: .2s; + -moz-animation-delay: .2s; + -o-animation-delay: .2s; + animation-delay: .2s; +} +.storage-loader +{ + position: absolute; + display: none; + top: 0; + left: 0; + right: 0; + height: 4px; + z-index: 10100; + background-color: DarkRed; + -webkit-transform: translateX(100%); + -moz-transform: translateX(100%); + -o-transform: translateX(100%); + transform: translateX(100%); +} + +@-webkit-keyframes shift-rightwards +{ + 0% + { + -webkit-transform:translateX(-100%); + -moz-transform:translateX(-100%); + -o-transform:translateX(-100%); + transform:translateX(-100%); + } + + 40% + { + -webkit-transform:translateX(0%); + -moz-transform:translateX(0%); + -o-transform:translateX(0%); + transform:translateX(0%); + } + + 60% + { + -webkit-transform:translateX(0%); + -moz-transform:translateX(0%); + -o-transform:translateX(0%); + transform:translateX(0%); + } + + 100% + { + -webkit-transform:translateX(100%); + -moz-transform:translateX(100%); + -o-transform:translateX(100%); + transform:translateX(100%); + } + +} +@-moz-keyframes shift-rightwards +{ + 0% + { + -webkit-transform:translateX(-100%); + -moz-transform:translateX(-100%); + -o-transform:translateX(-100%); + transform:translateX(-100%); + } + + 40% + { + -webkit-transform:translateX(0%); + -moz-transform:translateX(0%); + -o-transform:translateX(0%); + transform:translateX(0%); + } + + 60% + { + -webkit-transform:translateX(0%); + -moz-transform:translateX(0%); + -o-transform:translateX(0%); + transform:translateX(0%); + } + + 100% + { + -webkit-transform:translateX(100%); + -moz-transform:translateX(100%); + -o-transform:translateX(100%); + transform:translateX(100%); + } + +} +@-o-keyframes shift-rightwards +{ + 0% + { + -webkit-transform:translateX(-100%); + -moz-transform:translateX(-100%); + -o-transform:translateX(-100%); + transform:translateX(-100%); + } + + 40% + { + -webkit-transform:translateX(0%); + -moz-transform:translateX(0%); + -o-transform:translateX(0%); + transform:translateX(0%); + } + + 60% + { + -webkit-transform:translateX(0%); + -moz-transform:translateX(0%); + -o-transform:translateX(0%); + transform:translateX(0%); + } + + 100% + { + -webkit-transform:translateX(100%); + -moz-transform:translateX(100%); + -o-transform:translateX(100%); + transform:translateX(100%); + } + +} +@keyframes shift-rightwards +{ + 0% + { + -webkit-transform:translateX(-100%); + -moz-transform:translateX(-100%); + -o-transform:translateX(-100%); + transform:translateX(-100%); + } + + 40% + { + -webkit-transform:translateX(0%); + -moz-transform:translateX(0%); + -o-transform:translateX(0%); + transform:translateX(0%); + } + + 60% + { + -webkit-transform:translateX(0%); + -moz-transform:translateX(0%); + -o-transform:translateX(0%); + transform:translateX(0%); + } + + 100% + { + -webkit-transform:translateX(100%); + -moz-transform:translateX(100%); + -o-transform:translateX(100%); + transform:translateX(100%); + } +} + +/* *************************** */ +/* Overriding leaflet defaults */ +/* *************************** */ + +.leaflet-control-zoom a, .leaflet-control-zoom a:hover { + height: 36px; + width: 36px; + line-height: 36px; +} +.leaflet-container .leaflet-control-zoom { + margin-left: 10px; +} +.leaflet-top { + z-index: 1001; +} +.leaflet-popup-content { + min-width: 100px; + line-height: inherit; +} +.leaflet-popup-content-wrapper, .leaflet-popup-tip { + box-shadow: 0 1px 6px rgba(0, 0, 0, 0.4); +} +.leaflet-popup-content-wrapper { + border-radius: 4px; +} +.storage-popup-content { + max-height: 500px; + flex-grow: 1; + overflow-y: auto; + overflow-x: hidden; + margin-bottom: 14px; +} +.storage-popup-content iframe { + min-width: 300px; +} +.leaflet-popup-content h3 { + margin-bottom: 0; +} +.leaflet-control-toolbar, +.leaflet-bar { + box-shadow: none; +} +.marker-cluster { + background-color: white; + width: 40px; + height: 40px; +} +.leaflet-contextmenu-icon { + display: none; +} +.storage-popup-content img, +.storage-popup-content iframe { + max-width: 300px !important; +} +.storage-popup-large iframe, +.storage-popup-large img { + /* See https://github.com/Leaflet/Leaflet/commit/61d746818b99d362108545c151a27f09d60960ee#commitcomment-6061847 */ + max-width: 500px !important; +} +.storage-georss-link .popup-title { + text-align: center; +} +.leaflet-inplace-toolbar { + z-index: 10000!important; +} + +/* ****** */ +/* Mobile */ +/* ****** */ + +@media all and (max-width: 480px) { + + .leaflet-control-layers-expanded label { + display: inline-block; + margin-right: 10px; + } + + .leaflet-control-layers-expanded { + margin-left: 10px; + } +} + +/* ****** */ +/* Print */ +/* ****** */ + +@media print { + + .leaflet-control-container { + display: none; + } +} diff --git a/umap/static/umap/test/.eslintrc b/umap/static/umap/test/.eslintrc new file mode 100644 index 00000000..08d92416 --- /dev/null +++ b/umap/static/umap/test/.eslintrc @@ -0,0 +1,22 @@ +{ + "globals": { + "describe": true, + "happen": true, + "assert": true, + "before": true, + "after": true, + "it": true, + "sinon": true, + "qs": true, + "enableEdit": true, + "disableEdit": true, + "changeInputValue": true, + "resetMap": true, + "initMap": true, + "clickCancel": true, + "map": true, + "qs": true, + "qsa": true, + "qst": true + } +} diff --git a/umap/static/umap/test/Controls.js b/umap/static/umap/test/Controls.js new file mode 100644 index 00000000..0e45aeee --- /dev/null +++ b/umap/static/umap/test/Controls.js @@ -0,0 +1,50 @@ +describe('L.Storage.Controls', function(){ + + before(function () { + this.server = sinon.fakeServer.create(); + this.server.respondWith('/datalayer/62/', JSON.stringify(RESPONSES.datalayer62_GET)); + this.map = initMap({storage_id: 99}); + this.server.respond(); + this.datalayer = this.map.getDataLayerByStorageId(62); + }); + after(function () { + this.server.restore(); + resetMap(); + }); + + describe('#databrowser()', function(){ + + it('should be opened at datalayer button click', function() { + var button = qs('.storage-browse-actions .storage-browse-link'); + assert.ok(button); + happen.click(button); + assert.ok(qs('#storage-ui-container .storage-browse-data')); + }); + + it('should contain datalayer section', function() { + assert.ok(qs('#browse_data_datalayer_62')); + }); + + it('should contain datalayer\'s features list', function() { + assert.equal(qsa('#browse_data_datalayer_62 ul li').length, 3); + }); + + it('should redraw datalayer\'s features list at feature delete', function() { + var oldConfirm = window.confirm; + window.confirm = function () {return true;}; + enableEdit(); + happen.once(qs('path[fill="DarkBlue"]'), {type: 'contextmenu'}); + happen.click(qs('.leaflet-contextmenu .storage-delete')); + assert.equal(qsa('#browse_data_datalayer_62 ul li').length, 2); + window.confirm = oldConfirm; + }); + + it('should redraw datalayer\'s features list on edit cancel', function() { + clickCancel(); + happen.click(qs('.storage-browse-actions .storage-browse-link')); + assert.equal(qsa('#browse_data_datalayer_62 ul li').length, 3); + }); + + }); + +}); diff --git a/umap/static/umap/test/DataLayer.js b/umap/static/umap/test/DataLayer.js new file mode 100644 index 00000000..808824fa --- /dev/null +++ b/umap/static/umap/test/DataLayer.js @@ -0,0 +1,337 @@ +describe('L.DataLayer', function () { + var path = '/map/99/datalayer/edit/62/'; + + before(function () { + this.server = sinon.fakeServer.create(); + this.server.respondWith('GET', '/datalayer/62/', JSON.stringify(RESPONSES.datalayer62_GET)); + this.map = initMap({storage_id: 99}); + this.datalayer = this.map.getDataLayerByStorageId(62); + this.server.respond(); + enableEdit(); + }); + after(function () { + this.server.restore(); + resetMap(); + }); + + describe('#init()', function () { + + it('should be added in datalayers index', function () { + assert.notEqual(this.map.datalayers_index.indexOf(this.datalayer), -1); + }); + + }); + + describe('#edit()', function () { + var editButton, form, input, forceButton; + + it('row in control should be active', function () { + assert.notOk(qs('.leaflet-control-browse #browse_data_toggle_' + L.stamp(this.datalayer) + '.off')); + }); + + it('should have edit button', function () { + editButton = qs('#browse_data_toggle_' + L.stamp(this.datalayer) + ' .layer-edit'); + assert.ok(editButton); + }); + + it('should have toggle visibility element', function () { + assert.ok(qs('.leaflet-control-browse i.layer-toggle')); + }); + + it('should exist only one datalayer', function () { + assert.equal(qsa('.leaflet-control-browse i.layer-toggle').length, 1); + }); + + it('should build a form on edit button click', function () { + happen.click(editButton); + form = qs('form.storage-form'); + input = qs('form.storage-form input[name="name"]'); + assert.ok(form); + assert.ok(input); + }); + + it('should update name on input change', function () { + var new_name = 'This is a new name'; + input.value = new_name; + happen.once(input, {type: 'input'}); + assert.equal(this.datalayer.options.name, new_name); + }); + + it('should have made datalayer dirty', function () { + assert.ok(this.datalayer.isDirty); + assert.notEqual(this.map.dirty_datalayers.indexOf(this.datalayer), -1); + }); + + it('should have made Map dirty', function () { + assert.ok(this.map.isDirty); + }); + + it('should call datalayer.save on save button click', function (done) { + sinon.spy(this.datalayer, 'save'); + this.server.flush(); + this.server.respondWith('POST', '/map/99/update/settings/', JSON.stringify({id: 99})); + this.server.respondWith('POST', '/map/99/datalayer/update/62/', JSON.stringify(defaultDatalayerData())); + clickSave(); + this.server.respond(); + this.server.respond(); + assert(this.datalayer.save.calledOnce); + this.datalayer.save.restore(); + done(); + }); + + it('should show alert if server respond 412', function () { + cleanAlert(); + this.server.flush(); + this.server.respondWith('POST', '/map/99/update/settings/', JSON.stringify({id: 99})); + // this.server.respondWith('POST', '/map/99/datalayer/update/62/', [412, {}, '']); + this.server.respondWith('POST', '/map/99/datalayer/update/62/', function (request) { + console.log('YESYESYEYESYEYEYEYSES') + request.respond() + }); + happen.click(editButton); + input = qs('form.storage-form input[name="name"]'); + input.value = 'a new name'; + happen.once(input, {type: 'input'}); + clickSave(); + this.server.respond(); + console.log('between responses') + this.server.respond(); + console.log(this.map._container.classList) + assert(L.DomUtil.hasClass(this.map._container, 'storage-alert')); + assert.notEqual(this.map.dirty_datalayers.indexOf(this.datalayer), -1); + forceButton = qs('#storage-alert-container .storage-action'); + assert.ok(forceButton); + }); + + it('should save anyway on force save button click', function () { + sinon.spy(this.map, 'continueSaving'); + happen.click(forceButton); + this.server.flush(); + this.server.respond('POST', '/map/99/datalayer/update/62/', JSON.stringify(defaultDatalayerData())); + assert.notOk(qs('#storage-alert-container .storage-action')); + assert(this.map.continueSaving.calledOnce); + this.map.continueSaving.restore(); + assert.equal(this.map.dirty_datalayers.indexOf(this.datalayer), -1); + }); + + }); + + describe('#save() new', function () { + var newLayerButton, form, input, newDatalayer, editButton, manageButton; + + it('should have a manage datalayers action', function () { + enableEdit(); + manageButton = qs('.manage-datalayers'); + assert.ok(manageButton); + happen.click(manageButton); + }); + + it('should have a new layer button', function () { + newLayerButton = qs('#storage-ui-container .add-datalayer'); + assert.ok(newLayerButton); + }); + + it('should build a form on new layer button click', function () { + happen.click(newLayerButton); + form = qs('form.storage-form'); + input = qs('form.storage-form input[name="name"]'); + assert.ok(form); + assert.ok(input); + }); + + it('should have an empty name', function () { + assert.notOk(input.value); + }); + + it('should have created a new datalayer', function () { + assert.equal(this.map.datalayers_index.length, 2); + newDatalayer = this.map.datalayers_index[1]; + }); + + it('should have made Map dirty', function () { + assert.ok(this.map.isDirty); + }); + + it('should update name on input change', function () { + var new_name = 'This is a new name'; + input.value = new_name; + happen.once(input, {type: 'input'}); + assert.equal(newDatalayer.options.name, new_name); + }); + + it('should set storage_id on save callback', function () { + assert.notOk(newDatalayer.storage_id); + this.server.flush(); + this.server.respondWith('POST', '/map/99/update/settings/', JSON.stringify({id: 99})); + this.server.respondWith('POST', '/map/99/datalayer/create/', JSON.stringify(defaultDatalayerData({id: 63}))); + clickSave(); + this.server.respond(); + this.server.respond(); // First respond will then trigger another Xhr request (continueSaving) + assert.equal(newDatalayer.storage_id, 63); + }); + + it('should have unset map dirty', function () { + assert.notOk(this.map.isDirty); + }); + + it('should have edit button', function () { + editButton = qs('#browse_data_toggle_' + L.stamp(newDatalayer) + ' .layer-edit'); + assert.ok(editButton); + }); + + it('should call update if we edit again', function () { + happen.click(editButton); + assert.notOk(this.map.isDirty); + input = qs('form.storage-form input[name="name"]'); + input.value = 'a new name again but we don\'t care which'; + happen.once(input, {type: 'input'}); + assert.ok(this.map.isDirty); + var response = function (request) { + return request.respond(200, {}, JSON.stringify(defaultDatalayerData({pk: 63}))); + }; + var spy = sinon.spy(response); + this.server.flush(); + this.server.respondWith('POST', '/map/99/update/settings/', JSON.stringify({id: 99})); + this.server.respondWith('POST', '/map/99/datalayer/update/63/', spy); + clickSave(); + this.server.respond(); + this.server.respond(); + assert.ok(spy.calledOnce); + }); + + }); + + describe('#iconClassChange()', function () { + + it('should change icon class', function () { + happen.click(qs('[data-id="' + this.datalayer._leaflet_id +'"] .layer-edit')); + changeSelectValue(qs('form#datalayer-advanced-properties select[name=iconClass]'), 'Circle'); + assert.notOk(qs('div.storage-div-icon')); + assert.ok(qs('div.storage-circle-icon')); + clickCancel(); + }); + + }); + + describe('#show/hide', function () { + + it('should hide features on hide', function () { + assert.ok(qs('div.storage-div-icon')); + assert.ok(qs('path[fill="none"]')); + this.datalayer.hide(); + assert.notOk(qs('div.storage-div-icon')); + assert.notOk(qs('path[fill="none"]')); + }); + + it('should show features on show', function () { + assert.notOk(qs('div.storage-div-icon')); + assert.notOk(qs('path[fill="none"]')); + this.datalayer.show(); + assert.ok(qs('div.storage-div-icon')); + assert.ok(qs('path[fill="none"]')); + }); + + }); + + describe('#clone()', function () { + + it('should clone everything but the id and the name', function () { + enableEdit(); + var clone = this.datalayer.clone(); + assert.notOk(clone.storage_id); + assert.notEqual(clone.options.name, this.datalayer.name); + assert.ok(clone.options.name); + assert.equal(clone.options.color, this.datalayer.options.color); + assert.equal(clone.options.stroke, this.datalayer.options.stroke); + clone._delete(); + clickSave(); + }); + + }); + + describe('#restore()', function () { + var oldConfirm, + newConfirm = function () { + return true; + }; + + before(function () { + oldConfirm = window.confirm; + window.confirm = newConfirm; + }); + after(function () { + window.confirm = oldConfirm; + }); + + it('should restore everything', function () { + enableEdit(); + var geojson = L.Util.CopyJSON(RESPONSES.datalayer62_GET); + geojson.features.push({ + 'geometry': { + 'type': 'Point', + 'coordinates': [-1.274658203125, 50.57634993749885] + }, + 'type': 'Feature', + 'id': 1807, + 'properties': {_storage_options: {}, name: 'new point from restore'} + }); + geojson._storage.color = 'Chocolate'; + this.server.respondWith('GET', '/datalayer/62/olderversion.geojson', JSON.stringify(geojson)); + sinon.spy(window, 'confirm'); + this.datalayer.restore('olderversion.geojson'); + this.server.respond(); + assert(window.confirm.calledOnce); + window.confirm.restore(); + assert.equal(this.datalayer.storage_id, 62); + assert.ok(this.datalayer.isDirty); + assert.equal(this.datalayer._index.length, 4); + assert.ok(qs('path[fill="Chocolate"]')); + }); + + it('should revert anything on cancel click', function () { + clickCancel(); + assert.equal(this.datalayer._index.length, 3); + assert.notOk(qs('path[fill="Chocolate"]')); + }); + + }); + + describe('#delete()', function () { + var deleteLink, deletePath = '/map/99/datalayer/delete/62/'; + + it('should have a delete link in update form', function () { + enableEdit(); + happen.click(qs('#browse_data_toggle_' + L.stamp(this.datalayer) + ' .layer-edit')); + deleteLink = qs('a.delete_datalayer_button'); + assert.ok(deleteLink); + }); + + it('should delete features on datalayer delete', function () { + happen.click(deleteLink); + assert.notOk(qs('div.icon_container')); + }); + + it('should have set map dirty', function () { + assert.ok(this.map.isDirty); + }); + + it('should delete layer control row on delete', function () { + assert.notOk(qs('.leaflet-control-browse #browse_data_toggle_' + L.stamp(this.datalayer))); + }); + + it('should be removed from map.datalayers_index', function () { + assert.equal(this.map.datalayers_index.indexOf(this.datalayer), -1); + }); + + it('should be removed from map.datalayers', function () { + assert.notOk(this.map.datalayers[L.stamp(this.datalayer)]); + }); + + it('should be visible again on edit cancel', function () { + clickCancel(); + assert.ok(qs('div.icon_container')); + }); + + }); + +}); diff --git a/umap/static/umap/test/Feature.js b/umap/static/umap/test/Feature.js new file mode 100644 index 00000000..41409456 --- /dev/null +++ b/umap/static/umap/test/Feature.js @@ -0,0 +1,236 @@ +describe('L.Storage.FeatureMixin', function () { + + before(function () { + this.server = sinon.fakeServer.create(); + this.server.respondWith('GET', '/datalayer/62/', JSON.stringify(RESPONSES.datalayer62_GET)); + this.map = initMap({storage_id: 99}); + this.datalayer = this.map.getDataLayerByStorageId(62); + this.server.respond(); + }); + after(function () { + this.server.restore(); + resetMap(); + }); + + describe('#edit()', function () { + var link; + + it('should have datalayer features created', function () { + assert.equal(document.querySelectorAll('#map > .leaflet-map-pane > .leaflet-overlay-pane path.leaflet-interactive').length, 2); + assert.ok(qs('path[fill="none"]')); // Polyline + assert.ok(qs('path[fill="DarkBlue"]')); // Polygon + }); + + it('should take into account styles changes made in the datalayer', function () { + enableEdit(); + happen.click(qs('#browse_data_toggle_' + L.stamp(this.datalayer) + ' .layer-edit')); + var colorInput = qs('form#datalayer-advanced-properties input[name=color]'); + changeInputValue(colorInput, 'DarkRed'); + assert.ok(qs('path[fill="none"]')); // Polyline fill is unchanged + assert.notOk(qs('path[fill="DarkBlue"]')); + assert.ok(qs('path[fill="DarkRed"]')); + }); + + it('should open a popup toolbar on feature click', function () { + enableEdit(); + happen.click(qs('path[fill="DarkRed"]')); + var toolbar = qs('ul.leaflet-inplace-toolbar'); + assert.ok(toolbar); + link = qs('a.storage-toggle-edit', toolbar); + assert.ok(link); + }); + + it('should open a form on popup toolbar toggle edit click', function () { + happen.click(link); + var form = qs('form#storage-feature-properties'); + var input = qs('form#storage-feature-properties input[name="name"]'); + assert.ok(form); + assert.ok(input); + }); + + it('should not handle _storage_options has normal property', function () { + assert.notOk(qs('form#storage-feature-properties input[name="_storage_options"]')); + }); + + it('should give precedence to feature style over datalayer styles', function () { + var input = qs('#storage-ui-container form input[name="color"]'); + assert.ok(input); + changeInputValue(input, 'DarkGreen'); + assert.notOk(qs('path[fill="DarkRed"]')); + assert.notOk(qs('path[fill="DarkBlue"]')); + assert.ok(qs('path[fill="DarkGreen"]')); + assert.ok(qs('path[fill="none"]')); // Polyline fill is unchanged + }); + + it('should remove stroke if set to no', function () { + assert.notOk(qs('path[stroke="none"]')); + var defineButton = qs('#storage-feature-shape-properties .formbox:nth-child(4) .define'); + happen.click(defineButton); + var input = qs('#storage-feature-shape-properties input[name="stroke"]'); + assert.ok(input); + input.checked = false; + console.log(input, input.checked) + happen.once(input, {type: 'change'}); + assert.ok(qs('path[stroke="none"]')); + assert.ok(qs('path[fill="none"]')); // Polyline fill is unchanged + }); + + it('should not override already set style on features', function () { + happen.click(qs('#browse_data_toggle_' + L.stamp(this.datalayer) + ' .layer-edit')); + changeInputValue(qs('#storage-ui-container form input[name=color]'), 'Chocolate'); + assert.notOk(qs('path[fill="DarkBlue"]')); + assert.notOk(qs('path[fill="DarkRed"]')); + assert.notOk(qs('path[fill="Chocolate"]')); + assert.ok(qs('path[fill="DarkGreen"]')); + assert.ok(qs('path[fill="none"]')); // Polyline fill is unchanged + }); + + it('should reset style on cancel click', function () { + clickCancel(); + assert.ok(qs('path[fill="none"]')); // Polyline fill is unchanged + assert.ok(qs('path[fill="DarkBlue"]')); + assert.notOk(qs('path[fill="DarkRed"]')); + }); + + it('should set map.editedFeature on edit', function () { + enableEdit(); + assert.notOk(this.map.editedFeature); + happen.click(qs('path[fill="DarkBlue"]')); + happen.click(qs('ul.leaflet-inplace-toolbar a.storage-toggle-edit')); + assert.ok(this.map.editedFeature); + disableEdit(); + }); + + it('should reset map.editedFeature on panel open', function (done) { + enableEdit(); + assert.notOk(this.map.editedFeature); + happen.click(qs('path[fill="DarkBlue"]')); + happen.click(qs('ul.leaflet-inplace-toolbar a.storage-toggle-edit')); + assert.ok(this.map.editedFeature); + this.map.displayCaption(); + window.setTimeout(function () { + assert.notOk(this.map.editedFeature); + disableEdit(); + done(); + }, 1001); // CSS transition time. + }); + + }); + + describe('#utils()', function () { + var poly, marker; + function setFeatures (datalayer) { + datalayer.eachLayer(function (layer) { + if (!poly && layer instanceof L.Polygon) { + poly = layer; + } + if (!marker && layer instanceof L.Marker) { + marker = layer; + } + }); + } + it('should generate a valid geojson', function () { + setFeatures(this.datalayer); + assert.ok(poly); + console.log(poly.toGeoJSON().geometry); + assert.deepEqual(poly.toGeoJSON().geometry, {'type': 'Polygon', 'coordinates': [[[11.25, 53.585984], [10.151367, 52.975108], [12.689209, 52.167194], [14.084473, 53.199452], [12.634277, 53.618579], [11.25, 53.585984], [11.25, 53.585984]]]}); + // Ensure original latlngs has not been modified + assert.equal(poly.getLatLngs()[0].length, 6); + }); + + it('should remove empty _storage_options from exported geojson', function () { + setFeatures(this.datalayer); + assert.ok(poly); + assert.deepEqual(poly.toGeoJSON().properties, {name: 'name poly'}); + assert.ok(marker); + assert.deepEqual(marker.toGeoJSON().properties, {_storage_options: {color: 'OliveDrab'}, name: 'test'}); + }); + + }); + + describe('#changeDataLayer()', function () { + + it('should change style on datalayer select change', function () { + enableEdit(); + happen.click(qs('.manage-datalayers')); + happen.click(qs('#storage-ui-container .add-datalayer')); + changeInputValue(qs('form.storage-form input[name="name"]'), 'New layer'); + changeInputValue(qs('form#datalayer-advanced-properties input[name=color]'), 'MediumAquaMarine'); + happen.click(qs('path[fill="DarkBlue"]')); + happen.click(qs('ul.leaflet-inplace-toolbar a.storage-toggle-edit')); + var select = qs('select[name=datalayer]'); + select.selectedIndex = 0; + happen.once(select, {type: 'change'}); + assert.ok(qs('path[fill="none"]')); // Polyline fill is unchanged + assert.notOk(qs('path[fill="DarkBlue"]')); + assert.ok(qs('path[fill="MediumAquaMarine"]')); + clickCancel(); + }); + + }); + + describe('#openPopup()', function () { + + it('should open a popup on click', function () { + assert.notOk(qs('.leaflet-popup-content')); + happen.click(qs('path[fill="DarkBlue"]')); + var title = qs('.leaflet-popup-content'); + assert.ok(title); + assert.ok(title.innerHTML.indexOf('name poly')); + }); + + }); + + describe('#properties()', function () { + + it('should rename property', function () { + var poly = this.datalayer._lineToLayer({}, [[0, 0], [0, 1], [0, 2]]); + poly.properties.prop1 = 'xxx'; + poly.renameProperty('prop1', 'prop2'); + assert.equal(poly.properties.prop2, 'xxx'); + assert.ok(typeof poly.properties.prop1 === 'undefined'); + }); + + it('should not create property when renaming', function () { + var poly = this.datalayer._lineToLayer({}, [[0, 0], [0, 1], [0, 2]]); + delete poly.properties.prop2; // Make sure it doesn't exist + poly.renameProperty('prop1', 'prop2'); + assert.ok(typeof poly.properties.prop2 === 'undefined'); + }); + + it('should delete property', function () { + var poly = this.datalayer._lineToLayer({}, [[0, 0], [0, 1], [0, 2]]); + poly.properties.prop = 'xxx'; + assert.equal(poly.properties.prop, 'xxx'); + poly.deleteProperty('prop'); + assert.ok(typeof poly.properties.prop === 'undefined'); + }); + + }); + + describe('#matchFilter()', function () { + var poly; + + it('should filter on properties', function () { + poly = this.datalayer._lineToLayer({}, [[0, 0], [0, 1], [0, 2]]); + poly.properties.name = 'mooring'; + assert.ok(poly.matchFilter('moo', ['name'])); + assert.notOk(poly.matchFilter('foo', ['name'])); + }); + + it('should be case unsensitive', function () { + assert.ok(poly.matchFilter('Moo', ['name'])); + }); + + it('should match also in the middle of a string', function () { + assert.ok(poly.matchFilter('oor', ['name'])); + }); + + it('should handle multiproperties', function () { + poly.properties.city = 'Teulada'; + assert.ok(poly.matchFilter('eul', ['name', 'city', 'foo'])); + }); + + }); + +}); diff --git a/umap/static/umap/test/Map.js b/umap/static/umap/test/Map.js new file mode 100644 index 00000000..289adece --- /dev/null +++ b/umap/static/umap/test/Map.js @@ -0,0 +1,302 @@ +describe('L.Storage.Map', function(){ + + before(function () { + this.server = sinon.fakeServer.create(); + this.server.respondWith('/datalayer/62/', JSON.stringify(RESPONSES.datalayer62_GET)); + this.options = { + storage_id: 99 + }; + this.map = initMap({storage_id: 99}); + this.server.respond(); + this.datalayer = this.map.getDataLayerByStorageId(62); + }); + after(function () { + this.server.restore(); + clickCancel(); + resetMap(); + }); + + describe('#init()', function(){ + + it('should be initialized', function(){ + assert.equal(this.map.options.storage_id, 99); + }); + + it('should have created the edit button', function(){ + assert.ok(qs('div.leaflet-control-edit-enable')); + }); + + it('should have datalayer control div', function(){ + assert.ok(qs('div.leaflet-control-browse')); + }); + + it('should have datalayer actions div', function(){ + assert.ok(qs('div.storage-browse-actions')); + }); + + it('should have icon container div', function(){ + assert.ok(qs('div.icon_container')); + }); + + it('should hide icon container div when hiding datalayer', function() { + var el = qs('.leaflet-control-browse #browse_data_toggle_' + L.stamp(this.datalayer) + ' .layer-toggle'); + happen.click(el); + assert.notOk(qs('div.icon_container')); + }); + + it('enable edit on click on toggle button', function () { + var el = qs('div.leaflet-control-edit-enable a'); + happen.click(el); + assert.isTrue(L.DomUtil.hasClass(document.body, 'storage-edit-enabled')); + }); + + it('should have only one datalayer in its index', function () { + assert.equal(this.map.datalayers_index.length, 1); + }); + }); + + describe('#editMetadata()', function () { + var form, input; + + it('should build a form on editMetadata control click', function (done) { + var button = qs('a.update-map-settings'); + assert.ok(button); + happen.click(button); + form = qs('form.storage-form'); + input = qs('form[class="storage-form"] input[name="name"]'); + assert.ok(form); + assert.ok(input); + done(); + }); + + it('should update map name on input change', function () { + var new_name = 'This is a new name'; + input.value = new_name; + happen.once(input, {type: 'input'}); + assert.equal(this.map.options.name, new_name); + }); + + it('should have made Map dirty', function () { + assert.ok(this.map.isDirty); + }); + + it('should have added dirty class on map container', function () { + assert.ok(L.DomUtil.hasClass(this.map._container, 'storage-is-dirty')); + }); + + }); + + describe('#delete()', function () { + var path = '/map/99/delete/', + oldConfirm, + newConfirm = function () { + return true; + }; + + before(function () { + oldConfirm = window.confirm; + window.confirm = newConfirm; + }); + after(function () { + window.confirm = oldConfirm; + }); + + it('should ask for confirmation on delete link click', function (done) { + var button = qs('a.update-map-settings'); + assert.ok(button, 'update map info button exists'); + happen.click(button); + var deleteLink = qs('a.storage-delete'); + assert.ok(deleteLink, 'delete map button exists'); + sinon.spy(window, 'confirm'); + this.server.respondWith('POST', path, JSON.stringify({redirect: '#'})); + happen.click(deleteLink); + this.server.respond(); + assert(window.confirm.calledOnce); + window.confirm.restore(); + done(); + }); + + }); + + describe('#importData()', function () { + var fileInput, textarea, submit, formatSelect, layerSelect, clearFlag; + + it('should build a form on click', function () { + happen.click(qs('a.upload-data')); + fileInput = qs('.storage-upload input[type="file"]'); + textarea = qs('.storage-upload textarea'); + submit = qs('.storage-upload input[type="button"]'); + formatSelect = qs('.storage-upload select[name="format"]'); + layerSelect = qs('.storage-upload select[name="datalayer"]'); + assert.ok(fileInput); + assert.ok(submit); + assert.ok(textarea); + assert.ok(formatSelect); + assert.ok(layerSelect); + }); + + it('should import geojson from textarea', function () { + this.datalayer.empty() + assert.equal(this.datalayer._index.length, 0); + textarea.value = '{"type": "FeatureCollection", "features": [{"geometry": {"type": "Point", "coordinates": [6.922931671142578, 47.481161607175736]}, "type": "Feature", "properties": {"color": "", "name": "Chez R\u00e9my", "description": ""}}, {"geometry": {"type": "LineString", "coordinates": [[2.4609375, 48.88639177703194], [2.48291015625, 48.76343113791796], [2.164306640625, 48.719961222646276]]}, "type": "Feature", "properties": {"color": "", "name": "P\u00e9rif", "description": ""}}]}'; + changeSelectValue(formatSelect, 'geojson'); + happen.click(submit); + assert.equal(this.datalayer._index.length, 2); + }); + + it('should import kml from textarea', function () { + this.datalayer.empty() + happen.click(qs('a.upload-data')); + textarea = qs('.storage-upload textarea'); + submit = qs('.storage-upload input[type="button"]'); + formatSelect = qs('.storage-upload select[name="format"]'); + assert.equal(this.datalayer._index.length, 0); + textarea.value = kml_example; + changeSelectValue(formatSelect, 'kml'); + happen.click(submit); + assert.equal(this.datalayer._index.length, 3); + }); + + it('should import gpx from textarea', function () { + this.datalayer.empty() + happen.click(qs('a.upload-data')); + textarea = qs('.storage-upload textarea'); + submit = qs('.storage-upload input[type="button"]'); + formatSelect = qs('.storage-upload select[name="format"]'); + assert.equal(this.datalayer._index.length, 0); + textarea.value = gpx_example; + changeSelectValue(formatSelect, 'gpx'); + happen.click(submit); + assert.equal(this.datalayer._index.length, 2); + }); + + it('should import csv from textarea', function () { + this.datalayer.empty() + happen.click(qs('a.upload-data')); + textarea = qs('.storage-upload textarea'); + submit = qs('.storage-upload input[type="button"]'); + formatSelect = qs('.storage-upload select[name="format"]'); + assert.equal(this.datalayer._index.length, 0); + textarea.value = csv_example; + changeSelectValue(formatSelect, 'csv'); + happen.click(submit); + assert.equal(this.datalayer._index.length, 1); + }); + + it('should replace content if asked so', function () { + happen.click(qs('a.upload-data')); + textarea = qs('.storage-upload textarea'); + submit = qs('.storage-upload input[type="button"]'); + formatSelect = qs('.storage-upload select[name="format"]'); + clearFlag = qs('.storage-upload input[name="clear"]'); + clearFlag.checked = true; + assert.equal(this.datalayer._index.length, 1); + textarea.value = csv_example; + changeSelectValue(formatSelect, 'csv'); + happen.click(submit); + assert.equal(this.datalayer._index.length, 1); + }); + + + it('should import GeometryCollection from textarea', function () { + this.datalayer.empty() + textarea.value = '{"type": "GeometryCollection","geometries": [{"type": "Point","coordinates": [-80.66080570220947,35.04939206472683]},{"type": "Polygon","coordinates": [[[-80.66458225250244,35.04496519190309],[-80.66344499588013,35.04603679820616],[-80.66258668899536,35.045580049697556],[-80.66387414932251,35.044280059194946],[-80.66458225250244,35.04496519190309]]]},{"type": "LineString","coordinates": [[-80.66237211227417,35.05950973022538],[-80.66269397735596,35.0592638296087],[-80.66284418106079,35.05893010615862],[-80.66308021545409,35.05833291342246],[-80.66359519958496,35.057753281001425],[-80.66387414932251,35.05740198662245],[-80.66441059112549,35.05703312589789],[-80.66486120223999,35.056787217822475],[-80.66541910171509,35.05650617911516],[-80.66563367843628,35.05631296444281],[-80.66601991653441,35.055891403570705],[-80.66619157791138,35.05545227534804],[-80.66619157791138,35.05517123204622],[-80.66625595092773,35.05489018777713],[-80.6662130355835,35.054222703761525],[-80.6662130355835,35.05392409072499],[-80.66595554351807,35.05290528508858],[-80.66569805145262,35.052044560077285],[-80.66550493240356,35.0514824490509],[-80.665762424469,35.05048117920187],[-80.66617012023926,35.04972582715769],[-80.66651344299316,35.049286665781096],[-80.66692113876343,35.0485313026898],[-80.66700696945189,35.048215102112344],[-80.66707134246826,35.04777593261294],[-80.66704988479614,35.04738946150025],[-80.66696405410767,35.04698542156371],[-80.66681385040283,35.046353007216055],[-80.66659927368164,35.04596652937105],[-80.66640615463257,35.04561518428889],[-80.6659984588623,35.045193568195565],[-80.66552639007568,35.044877354697526],[-80.6649899482727,35.04454357245502],[-80.66449642181396,35.04417465365292],[-80.66385269165039,35.04387600387859],[-80.66303730010986,35.043717894732545]]}]}'; + formatSelect = qs('.storage-upload select[name="format"]'); + changeSelectValue(formatSelect, 'geojson'); + happen.click(submit); + assert.equal(this.datalayer._index.length, 3); + }); + + it('should import multipolygon', function () { + this.datalayer.empty() + textarea.value = '{"type": "Feature", "properties": { "name": "Some states" }, "geometry": { "type": "MultiPolygon", "coordinates": [[[[-109, 36], [-109, 40], [-102, 37], [-109, 36]], [[-108, 39], [-107, 37], [-104, 37], [-108, 39]]], [[[-119, 42], [-120, 39], [-114, 41], [-119, 42]]]] }}'; + changeSelectValue(formatSelect, 'geojson'); + happen.click(submit); + assert.equal(this.datalayer._index.length, 1); + var layer = this.datalayer.getFeatureByIndex(0); + assert.equal(layer._latlngs.length, 2); // Two shapes. + assert.equal(layer._latlngs[0].length, 2); // Hole. + }); + + it('should import multipolyline', function () { + this.datalayer.empty() + textarea.value = '{"type": "FeatureCollection", "features": [{ "type": "Feature", "properties": {}, "geometry": { "type": "MultiLineString", "coordinates": [[[-108, 46], [-113, 43]], [[-112, 45], [-115, 44]]] } }]}'; + changeSelectValue(formatSelect, 'geojson'); + happen.click(submit); + assert.equal(this.datalayer._index.length, 1); + var layer = this.datalayer.getFeatureByIndex(0); + assert.equal(layer._latlngs.length, 2); // Two shapes. + }); + + it('should import raw umap data from textarea', function () { + //Right now, the import function will try to save and reload. Stop this from happening. + var disabledSaveFunction = this.map.save; + this.map.save = function(){}; + happen.click(qs('a.upload-data')); + var initialLayerCount = Object.keys(this.map.datalayers).length; + formatSelect = qs('.storage-upload select[name="format"]'); + textarea = qs('.storage-upload textarea'); + textarea.value = '{ "type": "umap", "geometry": { "type": "Point", "coordinates": [3.0528, 50.6269] }, "properties": { "storage_id": 666, "longCredit": "the illustrious mapmaker", "shortCredit": "the mapmaker", "slideshow": {}, "captionBar": true, "dashArray": "5,5", "fillOpacity": "0.5", "fillColor": "Crimson", "fill": true, "weight": "2", "opacity": "0.9", "smoothFactor": "1", "iconClass": "Drop", "color": "Red", "limitBounds": {}, "tilelayer": { "maxZoom": 18, "url_template": "http://{s}.tile.stamen.com/watercolor/{z}/{x}/{y}.jpg", "minZoom": 0, "attribution": "Map tiles by [[http://stamen.com|Stamen Design]], under [[http://creativecommons.org/licenses/by/3.0|CC BY 3.0]]. Data by [[http://openstreetmap.org|OpenStreetMap]], under [[http://creativecommons.org/licenses/by-sa/3.0|CC BY SA]].", "name": "Watercolor" }, "licence": { "url": "", "name": "No licence set" }, "description": "Map description", "name": "Imported map", "tilelayersControl": true, "onLoadPanel": "caption", "displayPopupFooter": true, "miniMap": true, "moreControl": true, "scaleControl": true, "zoomControl": true, "scrollWheelZoom": true, "datalayersControl": true, "zoom": 6 }, "layers": [{ "type": "FeatureCollection", "features": [{ "type": "Feature", "geometry": { "type": "Polygon", "coordinates": [ [ [4.2939, 50.8893], [4.2441, 50.8196], [4.3869, 50.7642], [4.4813, 50.7929], [4.413, 50.9119], [4.2939, 50.8893] ] ] }, "properties": { "name": "Bruxelles", "description": "polygon" } }, { "type": "Feature", "geometry": { "type": "Point", "coordinates": [3.0528, 50.6269] }, "properties": { "_storage_options": { "color": "Orange" }, "name": "Lille", "description": "une ville" } }], "_storage": { "displayOnLoad": true, "name": "Cities", "id": 108, "remoteData": {}, "description": "A layer with some cities", "color": "Navy", "iconClass": "Drop", "smoothFactor": "1", "dashArray": "5,1", "fillOpacity": "0.5", "fillColor": "Blue", "fill": true } }, { "type": "FeatureCollection", "features": [{ "type": "Feature", "geometry": { "type": "LineString", "coordinates": [ [1.7715, 50.9255], [1.6589, 50.9696], [1.4941, 51.0128], [1.4199, 51.0638], [1.2881, 51.1104] ] }, "properties": { "_storage_options": { "weight": "4" }, "name": "tunnel sous la Manche" } }], "_storage": { "displayOnLoad": true, "name": "Tunnels", "id": 109, "remoteData": {} } }]}'; + formatSelect.value = 'umap'; + submit = qs('.storage-upload input[type="button"]'); + happen.click(submit); + assert.equal(Object.keys(this.map.datalayers).length, initialLayerCount + 2); + assert.equal(this.map.options.name, "Imported map"); + var foundFirstLayer = false; + var foundSecondLayer = false; + for (var idx in this.map.datalayers) { + var datalayer = this.map.datalayers[idx]; + if (datalayer.options.name === "Cities") { + foundFirstLayer = true; + assert.equal(datalayer._index.length, 2); + } + if (datalayer.options.name === "Tunnels") { + foundSecondLayer = true; + assert.equal(datalayer._index.length, 1); + } + } + assert.equal(foundFirstLayer, true); + assert.equal(foundSecondLayer, true); + + }); + + it('should only import options on the whitelist (umap format import)', function () { + assert.equal(this.map.options.storage_id, 99); + }); + + it('should update title bar (umap format import)', function () { + var title = qs("#map div.storage-main-edit-toolbox h3 a.storage-click-to-edit"); + assert.equal(title.innerHTML, "Imported map"); + }); + + it('should reinitialize controls (umap format import)', function () { + var minimap = qs("#map div.leaflet-control-container div.leaflet-control-minimap"); + assert.ok(minimap); + }); + + it('should update the tilelayer switcher control (umap format import)', function () { + //The tilelayer in the imported data isn't in the tilelayer list (set in _pre.js), there should be no selection on the tilelayer switcher + var selectedLayer = qs(".storage-tilelayer-switcher-container li.selected"); + assert.equal(selectedLayer, null); + }); + + it('should set the tilelayer (umap format import)', function () { + assert.equal(this.map.selected_tilelayer._url, "http://{s}.tile.stamen.com/watercolor/{z}/{x}/{y}.jpg"); + }); + + }); + + describe('#localizeUrl()', function () { + + it('should replace known variables', function () { + assert.equal(this.map.localizeUrl('http://example.org/{zoom}'), 'http://example.org/' + this.map.getZoom()); + }); + + it('should keep unknown variables', function () { + assert.equal(this.map.localizeUrl('http://example.org/{unkown}'), 'http://example.org/{unkown}'); + }); + + }); + + +}); diff --git a/umap/static/umap/test/Polygon.js b/umap/static/umap/test/Polygon.js new file mode 100644 index 00000000..58519010 --- /dev/null +++ b/umap/static/umap/test/Polygon.js @@ -0,0 +1,288 @@ +describe('L.Storage.Polygon', function () { + var p2ll, map; + + before(function () { + this.map = map = initMap({storage_id: 99}); + enableEdit(); + p2ll = function (x, y) { + return map.containerPointToLatLng([x, y]); + }; + this.datalayer = this.map.createDataLayer(); + this.datalayer.connectToMap();; + }); + + after(function () { + clickCancel(); + resetMap(); + }); + + afterEach(function () { + this.datalayer.empty(); + }); + + describe('#isMulti()', function () { + + it('should return false for basic Polygon', function () { + var layer = new L.S.Polygon(this.map, [[1, 2], [3, 4], [5, 6]], {datalayer: this.datalayer}); + assert.notOk(layer.isMulti()) + }); + + it('should return false for nested basic Polygon', function () { + var latlngs = [ + [[p2ll(100, 150), p2ll(150, 200), p2ll(200, 100)]] + ], + layer = new L.S.Polygon(this.map, latlngs, {datalayer: this.datalayer}); + assert.notOk(layer.isMulti()) + }); + + it('should return false for simple Polygon with hole', function () { + var layer = new L.S.Polygon(this.map, [[[1, 2], [3, 4], [5, 6]], [[7, 8], [9, 10], [11, 12]]], {datalayer: this.datalayer}); + assert.notOk(layer.isMulti()) + }); + + it('should return true for multi Polygon', function () { + var latLngs = [ + [ + [[1, 2], [3, 4], [5, 6]] + ], + [ + [[7, 8], [9, 10], [11, 12]] + ] + ]; + var layer = new L.S.Polygon(this.map, latLngs, {datalayer: this.datalayer}); + assert.ok(layer.isMulti()) + }); + + it('should return true for multi Polygon with hole', function () { + var latLngs = [ + [[[10, 20], [30, 40], [50, 60]]], + [[[0, 10], [10, 10], [10, 0]], [[2, 3], [2, 4], [3, 4]]] + ]; + var layer = new L.S.Polygon(this.map, latLngs, {datalayer: this.datalayer}); + assert.ok(layer.isMulti()) + }); + + }); + + describe('#contextmenu', function () { + + afterEach(function () { + // Make sure contextmenu is hidden + happen.once(document, {type: 'keydown', keyCode: 27}); + }); + + describe('#in edit mode', function () { + + it('should allow to remove shape when multi', function () { + var latlngs = [ + [[p2ll(100, 150), p2ll(150, 200), p2ll(200, 100)]], + [[p2ll(300, 350), p2ll(350, 400), p2ll(400, 300)]] + ], + layer = new L.S.Polygon(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + happen.once(layer._path, {type: 'contextmenu'}); + assert.equal(qst('Remove shape from the multi'), 1); + }); + + it('should not allow to remove shape when not multi', function () { + var latlngs = [ + [[p2ll(100, 150), p2ll(150, 200), p2ll(200, 100)]] + ], + layer = new L.S.Polygon(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + happen.once(layer._path, {type: 'contextmenu'}); + assert.notOk(qst('Remove shape from the multi')); + }); + + it('should not allow to isolate shape when not multi', function () { + var latlngs = [ + [[p2ll(100, 150), p2ll(150, 200), p2ll(200, 100)]] + ], + layer = new L.S.Polygon(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + happen.once(layer._path, {type: 'contextmenu'}); + assert.notOk(qst('Extract shape to separate feature')); + }); + + it('should allow to isolate shape when multi', function () { + var latlngs = [ + [[p2ll(100, 150), p2ll(150, 200), p2ll(200, 100)]], + [[p2ll(300, 350), p2ll(350, 400), p2ll(400, 300)]] + ], + layer = new L.S.Polygon(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + happen.once(layer._path, {type: 'contextmenu'}); + assert.ok(qst('Extract shape to separate feature')); + }); + + it('should not allow to transform to lines when multi', function () { + var latlngs = [ + [[p2ll(100, 150), p2ll(150, 200), p2ll(200, 100)]], + [[p2ll(300, 350), p2ll(350, 400), p2ll(400, 300)]] + ], + layer = new L.S.Polygon(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + happen.once(layer._path, {type: 'contextmenu'}); + assert.notOk(qst('Transform to lines')); + }); + + it('should not allow to transform to lines when hole', function () { + var latlngs = [ + [ + [p2ll(100, 150), p2ll(150, 200), p2ll(200, 100)], + [p2ll(120, 150), p2ll(150, 180), p2ll(180, 120)] + ] + ], + layer = new L.S.Polygon(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + happen.once(layer._path, {type: 'contextmenu'}); + assert.notOk(qst('Transform to lines')); + }); + + it('should allow to transform to lines when not multi', function () { + var latlngs = [ + [[p2ll(100, 150), p2ll(150, 200), p2ll(200, 100)]] + ]; + new L.S.Polygon(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + happen.at('contextmenu', 150, 150); + assert.equal(qst('Transform to lines'), 1); + }); + + it('should not allow to transfer shape when not editedFeature', function () { + new L.S.Polygon(this.map, [p2ll(100, 150), p2ll(100, 200), p2ll(200, 150)], {datalayer: this.datalayer}).addTo(this.datalayer); + happen.at('contextmenu', 110, 160); + assert.equal(qst('Delete this feature'), 1); // Make sure we have right clicked on the polygon. + assert.notOk(qst('Transfer shape to edited feature')); + }); + + it('should not allow to transfer shape when editedFeature is not a polygon', function () { + var layer = new L.S.Polygon(this.map, [p2ll(100, 150), p2ll(100, 200), p2ll(200, 150)], {datalayer: this.datalayer}).addTo(this.datalayer), + other = new L.S.Polyline(this.map, [p2ll(200, 250), p2ll(200, 300)], {datalayer: this.datalayer}).addTo(this.datalayer); + other.edit(); + happen.once(layer._path, {type: 'contextmenu'}); + assert.equal(qst('Delete this feature'), 1); // Make sure we have right clicked on the polygon. + assert.notOk(qst('Transfer shape to edited feature')); + }); + + it('should allow to transfer shape when another polygon is edited', function (done) { + this.datalayer.empty(); + var layer = new L.S.Polygon(this.map, [p2ll(200, 300), p2ll(300, 200), p2ll(200, 100)], {datalayer: this.datalayer}).addTo(this.datalayer); + layer.edit(); // This moves the map to put "other" at the center. + var other = new L.S.Polygon(this.map, [p2ll(100, 150), p2ll(100, 200), p2ll(200, 150)], {datalayer: this.datalayer}).addTo(this.datalayer); + happen.once(other._path, {type: 'contextmenu'}); + assert.equal(qst('Transfer shape to edited feature'), 1); + done(); + }); + + }); + + }); + + describe('#addShape', function () { + + it('"add shape" control should not be visible by default', function () { + assert.notOk(qs('.storage-draw-polygon-multi')); + }); + + it('"add shape" control should be visible when editing a Polygon', function () { + var layer = new L.S.Polygon(this.map, [p2ll(100, 100), p2ll(100, 200)], {datalayer: this.datalayer}).addTo(this.datalayer); + layer.edit(); + assert.ok(qs('.storage-draw-polygon-multi')); + }); + + it('"add shape" control should extend the same multi', function () { + var layer = new L.S.Polygon(this.map, [p2ll(100, 150), p2ll(150, 200), p2ll(200, 100)], {datalayer: this.datalayer}).addTo(this.datalayer); + layer.edit(); + assert.notOk(layer.isMulti()); + happen.click(qs('.storage-draw-polygon-multi')); + happen.at('mousedown', 300, 300); + happen.at('mouseup', 300, 300); + happen.at('mousedown', 350, 300); + happen.at('mouseup', 350, 300); + happen.at('click', 350, 300); + assert.ok(layer.isMulti()); + assert.equal(this.datalayer._index.length, 1); + }); + + }); + + describe('#transferShape', function () { + + it('should transfer simple polygon shape to another polygon', function () { + var latlngs = [p2ll(100, 150), p2ll(100, 200), p2ll(200, 100)], + layer = new L.S.Polygon(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer), + other = new L.S.Polygon(this.map, [p2ll(200, 350), p2ll(200, 300), p2ll(300, 200)], {datalayer: this.datalayer}).addTo(this.datalayer); + assert.ok(this.map.hasLayer(layer)); + layer.transferShape(p2ll(150, 150), other); + assert.equal(other._latlngs.length, 2); + assert.deepEqual(other._latlngs[1][0], latlngs); + assert.notOk(this.map.hasLayer(layer)); + }); + + it('should transfer multipolygon shape to another polygon', function () { + var latlngs = [ + [ + [p2ll(100, 150), p2ll(100, 200), p2ll(200, 100)], + [p2ll(120, 150), p2ll(150, 180), p2ll(180, 120)] + ], + [[p2ll(200, 300), p2ll(300, 200)]] + ], + layer = new L.S.Polygon(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer), + other = new L.S.Polygon(this.map, [p2ll(200, 350), p2ll(200, 300), p2ll(300, 200)], {datalayer: this.datalayer}).addTo(this.datalayer); + assert.ok(this.map.hasLayer(layer)); + layer.transferShape(p2ll(150, 150), other); + assert.equal(other._latlngs.length, 2); + assert.deepEqual(other._latlngs[1][0], latlngs[0][0]); + assert.ok(this.map.hasLayer(layer)); + assert.equal(layer._latlngs.length, 1); + }); + + }); + + describe('#isolateShape', function () { + + it('should not allow to isolate simple polygon', function () { + var latlngs = [p2ll(100, 150), p2ll(100, 200), p2ll(200, 100)], + layer = new L.S.Polygon(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + assert.equal(this.datalayer._index.length, 1); + assert.ok(this.map.hasLayer(layer)); + layer.isolateShape(p2ll(150, 150)); + assert.equal(layer._latlngs[0].length, 3); + assert.equal(this.datalayer._index.length, 1); + }); + + it('should isolate multipolygon shape', function () { + var latlngs = [ + [ + [p2ll(100, 150), p2ll(100, 200), p2ll(200, 100)], + [p2ll(120, 150), p2ll(150, 180), p2ll(180, 120)] + ], + [[p2ll(200, 300), p2ll(300, 200)]] + ], + layer = new L.S.Polygon(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + assert.equal(this.datalayer._index.length, 1); + assert.ok(this.map.hasLayer(layer)); + var other = layer.isolateShape(p2ll(150, 150)); + assert.equal(this.datalayer._index.length, 2); + assert.equal(other._latlngs.length, 2); + assert.deepEqual(other._latlngs[0], latlngs[0][0]); + assert.ok(this.map.hasLayer(layer)); + assert.ok(this.map.hasLayer(other)); + assert.equal(layer._latlngs.length, 1); + other.remove(); + }); + + }); + + describe('#clone', function () { + + it('should clone polygon', function () { + var latlngs = [p2ll(100, 150), p2ll(100, 200), p2ll(200, 100)], + layer = new L.S.Polygon(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + assert.equal(this.datalayer._index.length, 1); + other = layer.clone(); + assert.ok(this.map.hasLayer(other)); + assert.equal(this.datalayer._index.length, 2); + // Must not be the same reference + assert.notEqual(layer._latlngs, other._latlngs); + assert.equal(L.Util.formatNum(layer._latlngs[0][0].lat), other._latlngs[0][0].lat); + assert.equal(L.Util.formatNum(layer._latlngs[0][0].lng), other._latlngs[0][0].lng); + }); + + }); + +}); diff --git a/umap/static/umap/test/Polyline.js b/umap/static/umap/test/Polyline.js new file mode 100644 index 00000000..c54ed7c5 --- /dev/null +++ b/umap/static/umap/test/Polyline.js @@ -0,0 +1,326 @@ +describe('L.Storage.Polyline', function () { + var p2ll, map; + + before(function () { + this.map = map = initMap({storage_id: 99}); + enableEdit(); + p2ll = function (x, y) { + return map.containerPointToLatLng([x, y]); + }; + this.datalayer = this.map.createDataLayer(); + this.datalayer.connectToMap();; + }); + + after(function () { + clickCancel(); + resetMap(); + }); + + afterEach(function () { + this.datalayer.empty(); + }); + + describe('#isMulti()', function () { + + it('should return false for basic Polyline', function () { + var layer = new L.S.Polyline(this.map, [[1, 2], [3, 4], [5, 6]], {datalayer: this.datalayer}); + assert.notOk(layer.isMulti()) + }); + + it('should return false for nested basic Polyline', function () { + var layer = new L.S.Polyline(this.map, [[[1, 2], [3, 4], [5, 6]]], {datalayer: this.datalayer}); + assert.notOk(layer.isMulti()) + }); + + it('should return true for multi Polyline', function () { + var latLngs = [ + [ + [[1, 2], [3, 4], [5, 6]] + ], + [ + [[7, 8], [9, 10], [11, 12]] + ] + ]; + var layer = new L.S.Polyline(this.map, latLngs, {datalayer: this.datalayer}); + assert.ok(layer.isMulti()) + }); + + }); + + describe('#contextmenu', function () { + + afterEach(function () { + // Make sure contextmenu is hidden. + happen.once(document, {type: 'keydown', keyCode: 27}); + }); + + describe('#in edit mode', function () { + + it('should allow to remove shape when multi', function () { + var latlngs = [ + [p2ll(100, 100), p2ll(100, 200)], + [p2ll(300, 350), p2ll(350, 400), p2ll(400, 300)] + ], + layer = new L.S.Polyline(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + happen.once(layer._path, {type: 'contextmenu'}) + assert.equal(qst('Remove shape from the multi'), 1); + }); + + it('should not allow to remove shape when not multi', function () { + var latlngs = [ + [p2ll(100, 100), p2ll(100, 200)] + ], + layer = new L.S.Polyline(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + happen.once(layer._path, {type: 'contextmenu'}) + assert.notOk(qst('Remove shape from the multi')); + }); + + it('should not allow to isolate shape when not multi', function () { + var latlngs = [ + [p2ll(100, 100), p2ll(100, 200)] + ], + layer = new L.S.Polyline(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + happen.once(layer._path, {type: 'contextmenu'}) + assert.notOk(qst('Extract shape to separate feature')); + }); + + it('should allow to isolate shape when multi', function () { + var latlngs = [ + [p2ll(100, 150), p2ll(100, 200)], + [p2ll(300, 350), p2ll(350, 400), p2ll(400, 300)] + ], + layer = new L.S.Polyline(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + happen.once(layer._path, {type: 'contextmenu'}); + assert.ok(qst('Extract shape to separate feature')); + }); + + it('should not allow to transform to polygon when multi', function () { + var latlngs = [ + [p2ll(100, 150), p2ll(100, 200)], + [p2ll(300, 350), p2ll(350, 400), p2ll(400, 300)] + ], + layer = new L.S.Polyline(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + happen.once(layer._path, {type: 'contextmenu'}); + assert.notOk(qst('Transform to polygon')); + }); + + it('should allow to transform to polygon when not multi', function () { + var latlngs = [p2ll(100, 150), p2ll(100, 200), p2ll(200, 100)], + layer = new L.S.Polyline(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + happen.once(layer._path, {type: 'contextmenu'}); + assert.equal(qst('Transform to polygon'), 1); + }); + + it('should not allow to transfer shape when not editedFeature', function () { + var layer = new L.S.Polyline(this.map, [p2ll(100, 150), p2ll(100, 200)], {datalayer: this.datalayer}).addTo(this.datalayer); + happen.once(layer._path, {type: 'contextmenu'}); + assert.notOk(qst('Transfer shape to edited feature')); + }); + + it('should not allow to transfer shape when editedFeature is not a line', function () { + var layer = new L.S.Polyline(this.map, [p2ll(100, 150), p2ll(100, 200)], {datalayer: this.datalayer}).addTo(this.datalayer), + other = new L.S.Polygon(this.map, [p2ll(200, 300), p2ll(300, 200), p2ll(200, 100)], {datalayer: this.datalayer}).addTo(this.datalayer); + other.edit(); + happen.once(layer._path, {type: 'contextmenu'}); + assert.notOk(qst('Transfer shape to edited feature')); + }); + + it('should allow to transfer shape when another line is edited', function () { + var layer = new L.S.Polyline(this.map, [p2ll(100, 150), p2ll(100, 200), p2ll(200, 100)], {datalayer: this.datalayer}).addTo(this.datalayer), + other = new L.S.Polyline(this.map, [p2ll(200, 300), p2ll(300, 200)], {datalayer: this.datalayer}).addTo(this.datalayer); + other.edit(); + happen.once(layer._path, {type: 'contextmenu'}); + assert.equal(qst('Transfer shape to edited feature'), 1); + }); + + it('should allow to merge lines when multi', function () { + var latlngs = [ + [p2ll(100, 100), p2ll(100, 200)], + [p2ll(300, 350), p2ll(350, 400), p2ll(400, 300)] + ], + layer = new L.S.Polyline(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + happen.once(layer._path, {type: 'contextmenu'}) + assert.equal(qst('Merge lines'), 1); + }); + + it('should not allow to merge lines when not multi', function () { + var latlngs = [ + [p2ll(100, 100), p2ll(100, 200)] + ], + layer = new L.S.Polyline(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + happen.once(layer._path, {type: 'contextmenu'}) + assert.notOk(qst('Merge lines')); + }); + + it('should allow to split lines when clicking on vertex', function () { + var latlngs = [ + [p2ll(300, 350), p2ll(350, 400), p2ll(400, 300)] + ], + layer = new L.S.Polyline(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + layer.enableEdit(); + happen.at('contextmenu', 350, 400); + assert.equal(qst('Split line'), 1); + }); + + it('should not allow to split lines when clicking on first vertex', function () { + var latlngs = [ + [p2ll(300, 350), p2ll(350, 400), p2ll(400, 300)] + ], + layer = new L.S.Polyline(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + layer.enableEdit(); + happen.at('contextmenu', 300, 350); + assert.equal(qst('Delete this feature'), 1); // Make sure we have clicked on the vertex. + assert.notOk(qst('Split line')); + }); + + it('should not allow to split lines when clicking on last vertex', function () { + var latlngs = [ + [p2ll(300, 350), p2ll(350, 400), p2ll(400, 300)] + ], + layer = new L.S.Polyline(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + layer.enableEdit(); + happen.at('contextmenu', 400, 300); + assert.equal(qst('Delete this feature'), 1); // Make sure we have clicked on the vertex. + assert.notOk(qst('Split line')); + }); + + }); + + }); + + describe('#addShape', function () { + + it('"add shape" control should not be visible by default', function () { + assert.notOk(qs('.storage-draw-polyline-multi')); + }); + + it('"add shape" control should be visible when editing a Polyline', function () { + var layer = new L.S.Polyline(this.map, [p2ll(100, 100), p2ll(100, 200)], {datalayer: this.datalayer}).addTo(this.datalayer); + layer.edit(); + assert.ok(qs('.storage-draw-polyline-multi')); + }); + + it('"add shape" control should extend the same multi', function () { + var layer = new L.S.Polyline(this.map, [p2ll(100, 100), p2ll(100, 200)], {datalayer: this.datalayer}).addTo(this.datalayer); + layer.edit(); + assert.notOk(layer.isMulti()); + happen.click(qs('.storage-draw-polyline-multi')); + happen.at('mousemove', 300, 300); + happen.at('click', 300, 300); + happen.at('mousemove', 350, 300); + happen.at('click', 350, 300); + happen.at('click', 350, 300); + assert.ok(layer.isMulti()); + assert.equal(this.datalayer._index.length, 1); + }); + + }); + + describe('#transferShape', function () { + + it('should transfer simple line shape to another line', function () { + var latlngs = [p2ll(100, 150), p2ll(100, 200), p2ll(200, 100)], + layer = new L.S.Polyline(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer), + other = new L.S.Polyline(this.map, [p2ll(200, 300), p2ll(300, 200)], {datalayer: this.datalayer}).addTo(this.datalayer); + assert.ok(this.map.hasLayer(layer)); + layer.transferShape(p2ll(150, 150), other); + assert.equal(other._latlngs.length, 2); + assert.deepEqual(other._latlngs[1], latlngs); + assert.notOk(this.map.hasLayer(layer)); + }); + + it('should transfer multi line shape to another line', function () { + var latlngs = [ + [p2ll(100, 150), p2ll(100, 200), p2ll(200, 100)], + [p2ll(200, 300), p2ll(300, 200)] + ], + layer = new L.S.Polyline(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer), + other = new L.S.Polyline(this.map, [p2ll(250, 300), p2ll(350, 200)], {datalayer: this.datalayer}).addTo(this.datalayer); + assert.ok(this.map.hasLayer(layer)); + layer.transferShape(p2ll(150, 150), other); + assert.equal(other._latlngs.length, 2); + assert.deepEqual(other._latlngs[1], latlngs[0]); + assert.ok(this.map.hasLayer(layer)); + assert.equal(layer._latlngs.length, 1); + }); + + }); + + describe('#mergeShapes', function () { + + it('should remove duplicated join point when merging', function () { + var latlngs = [ + [[0, 0], [0, 1]], + [[0, 1], [0, 2]], + ], + layer = new L.S.Polyline(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + layer.mergeShapes(); + layer.disableEdit(); // Remove vertex from latlngs to compare them. + assert.deepEqual(layer.getLatLngs(), [L.latLng([0, 0]), L.latLng([0, 1]), L.latLng([0, 2])]); + assert(this.map.isDirty); + }); + + it('should revert candidate if first point is closer', function () { + var latlngs = [ + [[0, 0], [0, 1]], + [[0, 2], [0, 1]], + ], + layer = new L.S.Polyline(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + layer.mergeShapes(); + layer.disableEdit(); + assert.deepEqual(layer.getLatLngs(), [L.latLng([0, 0]), L.latLng([0, 1]), L.latLng([0, 2])]); + }); + + }); + + + describe('#isolateShape', function () { + + it('should not allow to isolate simple line', function () { + var latlngs = [p2ll(100, 150), p2ll(100, 200), p2ll(200, 100)], + layer = new L.S.Polyline(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + assert.equal(this.datalayer._index.length, 1); + assert.ok(this.map.hasLayer(layer)); + layer.isolateShape(p2ll(150, 150)); + assert.equal(layer._latlngs.length, 3); + assert.equal(this.datalayer._index.length, 1); + }); + + it('should isolate multipolyline shape', function () { + var latlngs = [ + [p2ll(100, 150), p2ll(100, 200), p2ll(200, 100)], + [[p2ll(200, 300), p2ll(300, 200)]] + ], + layer = new L.S.Polyline(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + assert.equal(this.datalayer._index.length, 1); + assert.ok(this.map.hasLayer(layer)); + var other = layer.isolateShape(p2ll(150, 150)); + assert.equal(this.datalayer._index.length, 2); + assert.equal(other._latlngs.length, 3); + assert.deepEqual(other._latlngs, latlngs[0]); + assert.ok(this.map.hasLayer(layer)); + assert.ok(this.map.hasLayer(other)); + assert.equal(layer._latlngs.length, 1); + other.remove(); + }); + + }); + + describe('#clone', function () { + + it('should clone polyline', function () { + var latlngs = [p2ll(100, 150), p2ll(100, 200), p2ll(200, 100)], + layer = new L.S.Polyline(this.map, latlngs, {datalayer: this.datalayer}).addTo(this.datalayer); + assert.equal(this.datalayer._index.length, 1); + other = layer.clone(); + assert.ok(this.map.hasLayer(other)); + assert.equal(this.datalayer._index.length, 2); + // Must not be the same reference + assert.notEqual(layer._latlngs, other._latlngs); + assert.equal(L.Util.formatNum(layer._latlngs[0].lat), other._latlngs[0].lat); + assert.equal(L.Util.formatNum(layer._latlngs[0].lng), other._latlngs[0].lng); + }); + + }); + +}); diff --git a/umap/static/umap/test/TableEditor.js b/umap/static/umap/test/TableEditor.js new file mode 100644 index 00000000..cd202df4 --- /dev/null +++ b/umap/static/umap/test/TableEditor.js @@ -0,0 +1,94 @@ +describe('L.TableEditor', function () { + var path = '/map/99/datalayer/edit/62/'; + + before(function () { + this.server = sinon.fakeServer.create(); + this.server.respondWith('GET', '/datalayer/62/', JSON.stringify(RESPONSES.datalayer62_GET)); + this.map = initMap({storage_id: 99}); + this.datalayer = this.map.getDataLayerByStorageId(62); + this.server.respond(); + enableEdit(); + }); + after(function () { + clickCancel(); + this.server.restore(); + resetMap(); + }); + + describe('#open()', function () { + var button; + + it('should exist table click on edit mode', function () { + button = qs('#browse_data_toggle_' + L.stamp(this.datalayer) + ' .layer-table-edit'); + expect(button).to.be.ok; + }); + + it('should open table button click', function () { + happen.click(button); + expect(qs('#storage-ui-container div.table')).to.be.ok; + expect(qsa('#storage-ui-container div.table form').length).to.eql(3); // One per feature. + expect(qsa('#storage-ui-container div.table input').length).to.eql(3); // One per feature and per property. + }); + + }); + describe('#properties()', function () { + var feature; + + before(function () { + var firstIndex = this.datalayer._index[0]; + feature = this.datalayer._layers[firstIndex]; + }); + + it('should create new property column', function () { + var newPrompt = function () { + return 'newprop'; + }; + var oldPrompt = window.prompt; + window.prompt = newPrompt; + var button = qs('#storage-ui-container .add-property'); + expect(button).to.be.ok; + happen.click(button); + expect(qsa('#storage-ui-container div.table input').length).to.eql(6); // One per feature and per property. + window.prompt = oldPrompt; + }); + + it('should populate feature property on fill', function () { + var input = qs('form#storage-feature-properties_' + L.stamp(feature) + ' input[name=newprop]'); + changeInputValue(input, 'the value'); + expect(feature.properties.newprop).to.eql('the value'); + }); + + it('should update property name on update click', function () { + var newPrompt = function () { + return 'newname'; + }; + var oldPrompt = window.prompt; + window.prompt = newPrompt; + var button = qs('#storage-ui-container div.thead div.tcell:last-of-type .storage-edit'); + expect(button).to.be.ok; + happen.click(button); + expect(qsa('#storage-ui-container div.table input').length).to.eql(6); + expect(feature.properties.newprop).to.be.undefined; + expect(feature.properties.newname).to.eql('the value'); + window.prompt = oldPrompt; + }); + + it('should update property on delete click', function () { + var oldConfirm, + newConfirm = function () { + return true; + }; + oldConfirm = window.confirm; + window.confirm = newConfirm; + var button = qs('#storage-ui-container div.thead div.tcell:last-of-type .storage-delete'); + expect(button).to.be.ok; + happen.click(button); + FEATURE = feature; + expect(qsa('#storage-ui-container div.table input').length).to.eql(3); + expect(feature.properties.newname).to.be.undefined; + window.confirm = oldConfirm; + }); + + }); + +}); diff --git a/umap/static/umap/test/Util.js b/umap/static/umap/test/Util.js new file mode 100644 index 00000000..ba2fa618 --- /dev/null +++ b/umap/static/umap/test/Util.js @@ -0,0 +1,202 @@ +describe('L.Util', function () { + + describe('#toHTML()', function () { + + it('should handle title', function () { + assert.equal(L.Util.toHTML('# A title'), '

    A title

    '); + }); + + it('should handle title in the middle of the content', function () { + assert.equal(L.Util.toHTML('A phrase\n## A title'), 'A phrase
    \n

    A title

    '); + }); + + it('should handle hr', function () { + assert.equal(L.Util.toHTML('---'), '
    '); + }); + + it('should handle bold', function () { + assert.equal(L.Util.toHTML('Some **bold**'), 'Some bold'); + }); + + it('should handle italic', function () { + assert.equal(L.Util.toHTML('Some *italic*'), 'Some italic'); + }); + + it('should handle newlines', function () { + assert.equal(L.Util.toHTML('two\nlines'), 'two
    \nlines'); + }); + + it('should not change last newline', function () { + assert.equal(L.Util.toHTML('two\nlines\n'), 'two
    \nlines\n'); + }); + + it('should handle two successive newlines', function () { + assert.equal(L.Util.toHTML('two\n\nlines\n'), 'two
    \n
    \nlines\n'); + }); + + it('should handle links without formatting', function () { + assert.equal(L.Util.toHTML('A simple http://osm.org link'), 'A simple http://osm.org link'); + }); + + it('should handle simple link in title', function () { + assert.equal(L.Util.toHTML('# http://osm.org'), '

    http://osm.org

    '); + }); + + it('should handle links with url parameter', function () { + assert.equal(L.Util.toHTML('A simple https://osm.org/?url=https%3A//anotherurl.com link'), 'A simple https://osm.org/?url=https%3A//anotherurl.com link'); + }); + + it('should handle simple link inside parenthesis', function () { + assert.equal(L.Util.toHTML('A simple link (http://osm.org)'), 'A simple link (http://osm.org)'); + }); + + it('should handle simple link with formatting', function () { + assert.equal(L.Util.toHTML('A simple [[http://osm.org]] link'), 'A simple http://osm.org link'); + }); + + it('should handle simple link with formatting and content', function () { + assert.equal(L.Util.toHTML('A simple [[http://osm.org|link]]'), 'A simple link'); + }); + + it('should handle simple link followed by a carriage return', function () { + assert.equal(L.Util.toHTML('A simple link http://osm.org\nAnother line'), 'A simple link http://osm.org
    \nAnother line'); + }); + + it('should handle image', function () { + assert.equal(L.Util.toHTML('A simple image: {{http://osm.org/pouet.png}}'), 'A simple image: '); + }); + + it('should handle image without text', function () { + assert.equal(L.Util.toHTML('{{http://osm.org/pouet.png}}'), ''); + }); + + it('should handle image with width', function () { + assert.equal(L.Util.toHTML('A simple image: {{http://osm.org/pouet.png|100}}'), 'A simple image: '); + }); + + it('should handle iframe', function () { + assert.equal(L.Util.toHTML('A simple iframe: {{{http://osm.org/pouet.html}}}'), 'A simple iframe: '); + }); + + it('should handle iframe with height', function () { + assert.equal(L.Util.toHTML('A simple iframe: {{{http://osm.org/pouet.html|200}}}'), 'A simple iframe: '); + }); + + it('should handle iframe with height and width', function () { + assert.equal(L.Util.toHTML('A simple iframe: {{{http://osm.org/pouet.html|200*400}}}'), 'A simple iframe: '); + }); + + it('should handle iframe with height with px', function () { + assert.equal(L.Util.toHTML('A simple iframe: {{{http://osm.org/pouet.html|200px}}}'), 'A simple iframe: '); + }); + + it('should handle iframe with url parameter', function () { + assert.equal(L.Util.toHTML('A simple iframe: {{{https://osm.org/?url=https%3A//anotherurl.com}}}'), 'A simple iframe: '); + }); + + }); + + describe('#escapeHTML', function () { + + it('should escape HTML tags', function () { + assert.equal(L.Util.escapeHTML(''), '<a href="pouet">'); + }); + + it('should not fail with int value', function () { + assert.equal(L.Util.escapeHTML(25), '25'); + }); + + it('should not fail with null value', function () { + assert.equal(L.Util.escapeHTML(null), ''); + }); + + }); + + describe('#greedyTemplate', function () { + + it('should replace simple props', function () { + assert.equal(L.Util.greedyTemplate('A phrase with a {variable}.', {variable: 'thing'}), 'A phrase with a thing.'); + }); + + it('should not fail when missing key', function () { + assert.equal(L.Util.greedyTemplate('A phrase with a {missing}', {}), 'A phrase with a '); + }); + + it('should process brakets in brakets', function () { + assert.equal(L.Util.greedyTemplate('A phrase with a {{{variable}}}.', {variable: 'value'}), 'A phrase with a {{value}}.'); + }); + + it('should not process http links', function () { + assert.equal(L.Util.greedyTemplate('A phrase with a {{{http://iframeurl.com}}}.', {'http://iframeurl.com': 'value'}), 'A phrase with a {{{http://iframeurl.com}}}.'); + }); + + it('should not accept dash', function () { + assert.equal(L.Util.greedyTemplate('A phrase with a {var-iable}.', {'var-iable': 'value'}), 'A phrase with a {var-iable}.'); + }); + + it('should accept colon', function () { + assert.equal(L.Util.greedyTemplate('A phrase with a {variable:fr}.', {'variable:fr': 'value'}), 'A phrase with a value.'); + }); + + it('should replace even with ignore if key is found', function () { + assert.equal(L.Util.greedyTemplate('A phrase with a {variable:fr}.', {'variable:fr': 'value'}, true), 'A phrase with a value.'); + }); + + it('should keep string when using ignore if key is not found', function () { + assert.equal(L.Util.greedyTemplate('A phrase with a {variable:fr}.', {}, true), 'A phrase with a {variable:fr}.'); + }); + + }); + + describe('#TextColorFromBackgroundColor', function () { + + it('should output white for black', function () { + document.body.style.backgroundColor = 'black'; + assert.equal(L.DomUtil.TextColorFromBackgroundColor(document.body), '#ffffff'); + }); + + it('should output white for brown', function () { + document.body.style.backgroundColor = 'brown'; + assert.equal(L.DomUtil.TextColorFromBackgroundColor(document.body), '#ffffff'); + }); + + it('should output black for white', function () { + document.body.style.backgroundColor = 'white'; + assert.equal(L.DomUtil.TextColorFromBackgroundColor(document.body), '#000000'); + }); + + it('should output black for tan', function () { + document.body.style.backgroundColor = 'tan'; + assert.equal(L.DomUtil.TextColorFromBackgroundColor(document.body), '#000000'); + }); + + it('should output black by default', function () { + document.body.style.backgroundColor = 'transparent'; + assert.equal(L.DomUtil.TextColorFromBackgroundColor(document.body), '#000000'); + }); + + }); + + + describe('#flattenCoordinates()', function () { + + it('should not alter already flat coords', function () { + var coords = [[1, 2], [3, 4]]; + assert.deepEqual(L.Util.flattenCoordinates(coords), coords); + }) + + it('should flatten nested coords', function () { + var coords = [[[1, 2], [3, 4]]]; + assert.deepEqual(L.Util.flattenCoordinates(coords), coords[0]); + coords = [[[[1, 2], [3, 4]]]]; + assert.deepEqual(L.Util.flattenCoordinates(coords), coords[0][0]); + }) + + it('should not fail on empty coords', function () { + var coords = []; + assert.deepEqual(L.Util.flattenCoordinates(coords), coords); + }) + + }); + +}); diff --git a/umap/static/umap/test/_pre.js b/umap/static/umap/test/_pre.js new file mode 100644 index 00000000..b5d766a7 --- /dev/null +++ b/umap/static/umap/test/_pre.js @@ -0,0 +1,301 @@ +var qs = function (selector, element) {return (element || document).querySelector(selector);}; +var qsa = function (selector) {return document.querySelectorAll(selector);}; +var qst = function (text, parent) { + // find element by its text content + var r = document.evaluate("descendant::*[contains(text(),'" + text + "')]", parent || qs('#map'), null, XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null), count = 0; + while(r.iterateNext()) console.log(++count); + return count; +}; +happen.at = function (what, x, y, props) { + this.once(document.elementFromPoint(x, y), L.Util.extend({ + type: what, + clientX: x, + clientY: y, + screenX: x, + screenY: y, + which: 1, + button: 0 + }, props || {})); +}; +var resetMap = function () { + var mapElement = qs('#map'); + mapElement.innerHTML = 'Done'; + delete mapElement._leaflet_id; + document.body.className = ''; +}; +var enableEdit = function () { + happen.click(qs('div.leaflet-control-edit-enable a')); +}; +var disableEdit = function () { + happen.click(qs('a.leaflet-control-edit-disable')); +}; +var clickSave = function () { + console.log(qs('a.leaflet-control-edit-save').classList) + happen.click(qs('a.leaflet-control-edit-save')); +}; +var clickCancel = function () { + var _confirm = window.confirm; + window.confirm = function (text) { + return true; + }; + happen.click(qs('a.leaflet-control-edit-cancel')); + happen.once(document.body, {type: 'keypress', keyCode: 13}); + window.confirm = _confirm; +}; +var changeInputValue = function (input, value) { + input.value = value; + happen.once(input, {type: 'input'}); +}; +var changeSelectValue = function (path_or_select, value) { + if (typeof path_or_select === 'string') path_or_select = qs(path_or_select); + var found = false; + for (var i = 0; i < path_or_select.length; i++) { + if (path_or_select.options[i].value === value) { + path_or_select.options[i].selected = true; + found = true; + } + } + happen.once(path_or_select, {type: 'change'}); + if (!found) throw new Error('Value ' + value + 'not found in select ' + path_or_select); + return path_or_select; +} +var cleanAlert = function () { + L.DomUtil.removeClass(qs('#map'), 'storage-alert'); + L.DomUtil.get('storage-alert-container').innerHTML = ''; + UI_ALERT_ID = null; // Prevent setTimeout to be called +}; +var defaultDatalayerData = function (custom) { + var _default = { + icon_class: 'Default', + name: 'Elephants', + displayOnLoad: true, + id: 62, + pictogram_url: null, + opacity: null, + weight: null, + fillColor: '', + color: '', + stroke: true, + smoothFactor: null, + dashArray: '', + fillOpacity: null, + fill: true + }; + return L.extend({}, _default, custom); +}; + +function initMap (options) { + default_options = { + "geometry": { + "type": "Point", + "coordinates": [5.0592041015625, 52.05924589011585] + }, + "type": "Feature", + "properties": { + "storage_id": 42, + "datalayers": [], + "urls": { + "map": "/map/{slug}_{pk}", + "datalayer_view": "/datalayer/{pk}/", + "map_update": "/map/{map_id}/update/settings/", + "map_old_url": "/map/{username}/{slug}/", + "map_clone": "/map/{map_id}/update/clone/", + "map_short_url": "/m/{pk}/", + "map_anonymous_edit_url": "/map/anonymous-edit/{signature}", + "map_new": "/map/new/", + "datalayer_update": "/map/{map_id}/datalayer/update/{pk}/", + "map_delete": "/map/{map_id}/update/delete/", + "map_create": "/map/create/", + "logout": "/logout/", + "datalayer_create": "/map/{map_id}/datalayer/create/", + "login_popup_end": "/login/popupd/", + "login": "/login/", + "datalayer_delete": "/map/{map_id}/datalayer/delete/{pk}/", + "datalayer_versions": "/map/{map_id}/datalayer/{pk}/versions/", + "datalayer_version": "/datalayer/{pk}/{name}", + "pictogram_list_json": "/pictogram/json/", + "map_update_permissions": "/map/{map_id}/update/permissions/" + }, + "default_iconUrl": "../src/img/marker.png", + "zoom": 6, + "tilelayers": [ + { + "attribution": "\u00a9 OSM Contributors", + "name": "OpenStreetMap", + "url_template": "http://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png", + "minZoom": 0, + "maxZoom": 18, + "id": 1, + "selected": true + }, + { + "attribution": "HOT and friends", + "name": "HOT OSM-fr server", + "url_template": "http://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png", + "rank": 99, + "minZoom": 0, + "maxZoom": 20, + "id": 2 + }], + "tilelayer": { + "attribution": "HOT and friends", + "name": "HOT OSM-fr server", + "url_template": "http://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png", + "rank": 99, + "minZoom": 0, + "maxZoom": 20, + "id": 2 + }, + "licences": { + "No licence set": { + "url": "", + "name": "No licence set" + }, + "Licence ouverte/Open Licence": { + "url": "http://www.data.gouv.fr/Licence-Ouverte-Open-Licence", + "name": "Licence ouverte/Open Licence" + }, + "WTFPL": { + "url": "http://www.wtfpl.net/", + "name": "WTFPL" + }, + "ODbl": { + "url": "http://opendatacommons.org/licenses/odbl/", + "name": "ODbl" + } + }, + "name": "name of the map", + "description": "The description of the map", + "allowEdit": true, + "moreControl": true, + "scaleControl": true, + "miniMap": true, + "datalayersControl": true, + "displayCaptionOnLoad": false, + "displayPopupFooter": false, + "displayDataBrowserOnLoad": false + } + }; + default_options.properties.datalayers.push(defaultDatalayerData()); + options.properties = L.extend({}, default_options.properties, options); + return new L.Storage.Map("map", options); +} + +var RESPONSES = { + 'datalayer62_GET': { + "crs": null, + "type": "FeatureCollection", + "_storage": defaultDatalayerData(), + "features": [{ + "geometry": { + "type": "Point", + "coordinates": [-0.274658203125, 52.57634993749885] + }, + "type": "Feature", + "id": 1807, + "properties": {_storage_options: {color: "OliveDrab"}, name: "test"} + }, + { + "geometry": { + "type": "LineString", + "coordinates": [[-0.5712890625, 54.47642158429295], [0.439453125, 54.610254981579146], [1.724853515625, 53.44880683542759], [4.163818359375, 53.98839506479995], [5.306396484375, 53.533778184257805], [6.591796875, 53.70971358510174], [7.042236328124999, 53.35055131839989]] + }, + "type": "Feature", + "id": 20, "properties": {"_storage_options": {"fill": false}, "name": "test"} + }, + { + "geometry": { + "type": "Polygon", + "coordinates": [[[11.25, 53.585983654559804], [10.1513671875, 52.9751081817353], [12.689208984375, 52.16719363541221], [14.084472656249998, 53.199451902831555], [12.63427734375, 53.61857936489517], [11.25, 53.585983654559804], [11.25, 53.585983654559804]]] + }, + "type": "Feature", + "id": 76, + "properties": {name: "name poly"} + }] + } +}; + + +sinon.fakeServer.getRequest = function (path, method) { + var request; + for (var i=0, l=this.requests.length; i' + +''+ +'Simple point'+ +'Here is a simple description.'+ +''+ +'-122.0822035425683,37.42228990140251,0'+ +''+ +''+ +''+ +'Simple path'+ +'Simple description'+ +''+ +'-112.2550785337791,36.07954952145647,2357 -112.2549277039738,36.08117083492122,2357 -112.2552505069063,36.08260761307279,2357'+ +''+ +''+ +''+ +'Simple polygon'+ +'A description.'+ +''+ +''+ +''+ +''+ +' -77.05788457660967,38.87253259892824,100 '+ +' -77.05465973756702,38.87291016281703,100 '+ +' -77.05315536854791,38.87053267794386,100 '+ +' -77.05788457660967,38.87253259892824,100 '+ +''+ +''+ +''+ +''+ +''+ +''; + +var gpx_example = '' + +' 1374Simple PointSimple description' + +' ' + +' Simple path' + +' Simple description' + +' ' + +' ' + +' ' + +' ' + +' ' + +' ' + +''; + +var csv_example = 'Foo,Latitude,Longitude,title,description\n' + +'bar,41.34,122.86,a point somewhere,the description of this point'; + +// Make Sinon log readable +sinon.format = function (what) { + if (typeof what === 'object') { + return JSON.stringify(what, null, 4); + } else if (typeof what === "undefined") { + return ''; + } else { + return what.toString(); + } +}; diff --git a/umap/static/umap/test/index.html b/umap/static/umap/test/index.html new file mode 100644 index 00000000..0a147d45 --- /dev/null +++ b/umap/static/umap/test/index.html @@ -0,0 +1,109 @@ + + + Leaflet.Storage Tests + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + diff --git a/umap/templates/base.html b/umap/templates/base.html index f6f1be68..273d407e 100644 --- a/umap/templates/base.html +++ b/umap/templates/base.html @@ -6,7 +6,7 @@ {% compress css %} - + @@ -17,9 +17,6 @@ {% block extra_head %} {% endblock extra_head %} - {% compress js %} - - {% endcompress js %} diff --git a/umap/templates/umap/css.html b/umap/templates/umap/css.html index 5ff289d7..d9d27af3 100644 --- a/umap/templates/umap/css.html +++ b/umap/templates/umap/css.html @@ -1,10 +1,10 @@ - - - - - - - - - - + + + + + + + + + + diff --git a/umap/templates/umap/js.html b/umap/templates/umap/js.html index 79e6cb2d..e86d51ff 100644 --- a/umap/templates/umap/js.html +++ b/umap/templates/umap/js.html @@ -1,42 +1,43 @@ {% load compress %} {% compress js %} - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + {% endcompress %} {% if locale %} - + {% endif %} {% compress js %} - - - - - - - - - - - - + + + + + + + + + + + + + {% endcompress %}