Merge develop

This commit is contained in:
Pieter Vander Vennet 2024-09-17 02:36:38 +02:00
commit 5a9f8f0a0a
62 changed files with 4448 additions and 710 deletions

25
.versionrc.json Normal file
View file

@ -0,0 +1,25 @@
{
"types": [
{"type": "feat", "section": "Features"},
{"type": "fix", "section": "Bug Fixes"},
{"type": "themes", "section": "Theme improvements"},
{"type": "UX",
"section": "User experience improvements"
},
{
"type": "UI",
"section": "User interface improvements"
},
{"type": "Search",
"section": "Search related features"
},
{"type": "chore", "hidden": true},
{"type": "docs", "hidden": true},
{"type": "style", "hidden": true},
{"type": "refactor", "hidden": true},
{"type": "perf", "hidden": true},
{"type": "test", "hidden": true}
],
"commitUrlFormat": "https://github.com/USERNAME/REPOSITORY_NAME/commits{{hash}}",
"compareUrlFormat": "https://github.com/USERNAME/REPOSITORY_NAME/compare/{{previousTag}}...{{currentTag}}"
}

631
CHANGELOG.md Normal file
View file

@ -0,0 +1,631 @@
# Changelog
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
### [0.46.8](https://github.com/USERNAME/REPOSITORY_NAME/compare/v0.46.7...v0.46.8) (2024-09-13)
### Theme improvements
* improve note theme, fix [#2088](https://github.com/pietervdvn/MapComplete/issues/2088) ([e8099b9](https://github.com/USERNAME/REPOSITORY_NAME/commitse8099b9081ae25ff37f2b7a491f9301a29772080))
* update safe_loops svg ([70117ac](https://github.com/USERNAME/REPOSITORY_NAME/commits70117ac6874ec860a6f2497c2230d29248de71a7))
### 0.46.7 (2024-09-13)
### Features
* add bike_parking=safe_loops ([e4de3d8](https://github.com/USERNAME/REPOSITORY_NAME/commitse4de3d8e5f2b8e6002e68dba20ac659f57a3c8cc))
* add color for streets with no cycleways ([5d52462](https://github.com/USERNAME/REPOSITORY_NAME/commits5d524629b46d3e2e1d059f9db3010609e05ffb61))
* add prettier config ([d3f453a](https://github.com/USERNAME/REPOSITORY_NAME/commitsd3f453a4fb3f7eaac9031026dc95bff0a076dec3))
* Add printer cartridges to recycling ([28d6637](https://github.com/USERNAME/REPOSITORY_NAME/commits28d66373680dda160b4b899621c5c89aa1c52143))
* **themes:** add osm community index as a layer ([e85cf43](https://github.com/USERNAME/REPOSITORY_NAME/commitse85cf43ffbf9de86491a2d3aaa4b7f0a52082843))
* **themes:** add questionHint to give extra information about a question ([d7fe3a0](https://github.com/USERNAME/REPOSITORY_NAME/commitsd7fe3a056ef74d85f3d4e310a6e053b244b659f8))
### Bug Fixes
* _actually_ fix [#1706](https://github.com/pietervdvn/MapComplete/issues/1706) ([6577007](https://github.com/USERNAME/REPOSITORY_NAME/commits6577007717910bf46086490da8e9d549b63f1891))
* _actually_ run the *.spec.ts-tests... ([82a860c](https://github.com/USERNAME/REPOSITORY_NAME/commits82a860cbf5bad2ab1b4d9b806e9f18e4d5cbc054))
* [#1093](https://github.com/pietervdvn/MapComplete/issues/1093) ([5a6ed7b](https://github.com/USERNAME/REPOSITORY_NAME/commits5a6ed7bf21aaaf677c05e572afacd53443eb2d59))
* [#1685](https://github.com/pietervdvn/MapComplete/issues/1685), fix oopsie ([d96fe61](https://github.com/USERNAME/REPOSITORY_NAME/commitsd96fe614624771bed99c418bbc9bb4f09ce7bd3a))
* a freeform key will mimick a mapping if appropriate (and avoid the 'addExtraTags') ([68ea4e3](https://github.com/USERNAME/REPOSITORY_NAME/commits68ea4e3d9f255e989cf158159b434ed6bfc6f55a))
* actually allow to login via prominent login button ([4be49a0](https://github.com/USERNAME/REPOSITORY_NAME/commits4be49a0561531c729d9d46d5e99571056d2492df))
* actually apply preferred background layer ([b69c2de](https://github.com/USERNAME/REPOSITORY_NAME/commitsb69c2de3f41e7737ceec919214f0748634d9dfd3))
* actually attempt to login when login button is pressed ([f1de8a3](https://github.com/USERNAME/REPOSITORY_NAME/commitsf1de8a3d9dafad4860ebb380c113ff2f253d13db))
* actually deploy on the production repo ([ca89956](https://github.com/USERNAME/REPOSITORY_NAME/commitsca899561d55626b9c2c14f90d60d01c8c1276823))
* actually include _all_ features ([8f7b731](https://github.com/USERNAME/REPOSITORY_NAME/commits8f7b731d29ca7daec1063a6833716e86333b0ffd))
* actually load geojson layers; formatting ([cbc4e6e](https://github.com/USERNAME/REPOSITORY_NAME/commitscbc4e6eb15a2a6d7f9693a24f35839886b4f3544))
* actually open usersettings when license is clicked ([c10fecb](https://github.com/USERNAME/REPOSITORY_NAME/commitsc10fecb7e8293190b07a2fc3ff90b6f830a75103))
* actually pass the initial coordinate in the locationInput element, fix [#1486](https://github.com/pietervdvn/MapComplete/issues/1486) ([68e07d7](https://github.com/USERNAME/REPOSITORY_NAME/commits68e07d7d7beca5b4ea26b9fc6ff964014d28af4b))
* Actually show errors in custom themes now ([6a79dde](https://github.com/USERNAME/REPOSITORY_NAME/commits6a79dde743264c272e461614ae718044d90a7080))
* actually show HD image for nearby streetview imager, add loading indicator ([8b6ee87](https://github.com/USERNAME/REPOSITORY_NAME/commits8b6ee877f08a584df7d3bc8706292b6eeb11f030))
* actually show polygon_centroid ([5a957d5](https://github.com/USERNAME/REPOSITORY_NAME/commits5a957d56c73771a1fa2560dbd8755a7eebe36285))
* actually show tags on changes when the user has enough changesets ([d702134](https://github.com/USERNAME/REPOSITORY_NAME/commitsd7021344e890bede888ea3412270420e033207f7))
* actually upload new themes ([6446586](https://github.com/USERNAME/REPOSITORY_NAME/commits6446586ac581fa3994e58dba62a365afde7d5937))
* add 'maxspeed=20' to living street ([fd9c48b](https://github.com/USERNAME/REPOSITORY_NAME/commitsfd9c48b5b56fe7a08e3532cad777246b82b3a073))
* add 'onbeforeunload' if images are uploading, see [#1841](https://github.com/pietervdvn/MapComplete/issues/1841) ([ce7bc8f](https://github.com/USERNAME/REPOSITORY_NAME/commitsce7bc8fb6cc373e96179e57395818d6e6befd942))
* add 'self' to connect-src ([3bca130](https://github.com/USERNAME/REPOSITORY_NAME/commits3bca1305b504ba08203a09916fe849365eca0458))
* add all global layers to CSP ([93630bd](https://github.com/USERNAME/REPOSITORY_NAME/commits93630bd1db9e71f5e62619b2d02aaf18b42222f6))
* add all needed urls again ([ce1855b](https://github.com/USERNAME/REPOSITORY_NAME/commitsce1855b2bd322044f9710a4dab38287298ad5fc6))
* add all vector layers to CSP ([2736740](https://github.com/USERNAME/REPOSITORY_NAME/commits2736740cd0d777450f8da7eea76f1defa7993944))
* add awaitAnimationFrame to fix non-working questions ([d744fd3](https://github.com/USERNAME/REPOSITORY_NAME/commitsd744fd3a42bedb64de7de1562b6f4ee31ba9d254))
* Add button to go back to the map when showing that a point is deleted, fix [#1417](https://github.com/pietervdvn/MapComplete/issues/1417) ([55903d4](https://github.com/USERNAME/REPOSITORY_NAME/commits55903d45f933ebbfd7971a14296fe2dac1b6fa96))
* add carto vector layers again ([5e2a989](https://github.com/USERNAME/REPOSITORY_NAME/commits5e2a98924c2a0efdb1f75a213efe7114df5e0cae))
* add check for missing 'noopener' attributes; add missing noopener attributes ([6e8617c](https://github.com/USERNAME/REPOSITORY_NAME/commits6e8617c93fd0fde8f0b27c035625e68d143f9b58))
* add check that no changeset is opened without actually having changes ([2843b01](https://github.com/USERNAME/REPOSITORY_NAME/commits2843b01586fd40a2e0d4dc92861b9d001d1684d3))
* add correct attribution for maptiler bg layer ([c90b334](https://github.com/USERNAME/REPOSITORY_NAME/commitsc90b334678ac44346d82302599647236b3c0df09))
* add default value for setStatus ([eede2d1](https://github.com/USERNAME/REPOSITORY_NAME/commitseede2d17dd411a3b27295a9efab8cb69df3b57c2))
* add dutch translation ([a55b84d](https://github.com/USERNAME/REPOSITORY_NAME/commitsa55b84dba18564e0959bd709b0da0e5b228d3ca0))
* add execute permissions to build script ([5567869](https://github.com/USERNAME/REPOSITORY_NAME/commits5567869bb4ede7a56c174b960aff734de06ea67f))
* add extra refresh:layeroverview in order to fix the favourites theme icons ([c65ccdb](https://github.com/USERNAME/REPOSITORY_NAME/commitsc65ccdbc240ad5406189e48bd92c40569d19bc3c))
* add glow effect to bench theme for selected object ([75b1a46](https://github.com/USERNAME/REPOSITORY_NAME/commits75b1a467e0307cee94a0af9e482a3ab5e8ac4ccd))
* add glow effect when dropping an image in the file selector; fix [#1496](https://github.com/pietervdvn/MapComplete/issues/1496) ([426620a](https://github.com/USERNAME/REPOSITORY_NAME/commits426620a76c4a6ca86181dec73da90d076f73c9aa))
* add language picker in settings page if logged out, fix [#1505](https://github.com/pietervdvn/MapComplete/issues/1505) ([a7ff3b8](https://github.com/USERNAME/REPOSITORY_NAME/commitsa7ff3b86faa90e70d3496f973c72b0265f993708))
* add links and overpass link to cafe_pub ([41b6eea](https://github.com/USERNAME/REPOSITORY_NAME/commits41b6eea430cbb6f504deb7a3e4fb5cf493004d6f))
* add maxzoom to osm.carto-layer, see [#1664](https://github.com/pietervdvn/MapComplete/issues/1664)$ ([5f918b6](https://github.com/USERNAME/REPOSITORY_NAME/commits5f918b607b9034c5a8ce6bcdd003caf8efe1466b))
* add missing assets ([f2b8c0d](https://github.com/USERNAME/REPOSITORY_NAME/commitsf2b8c0db0f80bf503f2b4332d66cbede0736f82a))
* add missing tag ([c5300a3](https://github.com/USERNAME/REPOSITORY_NAME/commitsc5300a3fd5b46e611a4604ad9c0483f823396dda))
* add new items works again, fix [#1593](https://github.com/pietervdvn/MapComplete/issues/1593) ([c527427](https://github.com/USERNAME/REPOSITORY_NAME/commitsc527427f70990006b9c71ef472bbe45d2c9bff70))
* add safety check to not overuse the OSM-api ([4602df3](https://github.com/USERNAME/REPOSITORY_NAME/commits4602df30469b57a57b9b8e1b8c6cc5c70ff901d7))
* add script integrity, add check to validate that script integrity is always in place ([08bbbca](https://github.com/USERNAME/REPOSITORY_NAME/commits08bbbcabc402abcf328274bb2990d59b47580376))
* add selection indicator to artwork ([ec99ab2](https://github.com/USERNAME/REPOSITORY_NAME/commitsec99ab24f806e8d43ae89ab8f33f570f43ce59fb))
* add support for legacy iconSize to fix some custom themes, see [#1494](https://github.com/pietervdvn/MapComplete/issues/1494) ([200361b](https://github.com/USERNAME/REPOSITORY_NAME/commits200361bf8dcd17f47574539137b2c42cb745143a))
* add text on cancel button ([1208e09](https://github.com/USERNAME/REPOSITORY_NAME/commits1208e095cf3fe87a2c9948a0c6666705c14c5e52))
* add the minimap again ([e83b8cb](https://github.com/USERNAME/REPOSITORY_NAME/commitse83b8cb19183b53c4d6b24b4f621900fd14280fa))
* addnewpoint-dialog works again ([8ed0a32](https://github.com/USERNAME/REPOSITORY_NAME/commits8ed0a32d153d4a434602c86a85eaf02881f6d480))
* alias 'urls' as 'website', fix [#246](https://github.com/pietervdvn/MapComplete/issues/246) ([87e79b8](https://github.com/USERNAME/REPOSITORY_NAME/commits87e79b8e8c981f5b0daa105097c514273ce6be3e))
* allow selection of the first radiobutton ([8fafd0a](https://github.com/USERNAME/REPOSITORY_NAME/commits8fafd0a8a5701323c6e25210ac6310dc418e31eb))
* allow to delete freeform values in more cases ([9b78838](https://github.com/USERNAME/REPOSITORY_NAME/commits9b78838745f41f3e42f158c9959c695e4160e7e8))
* allow to link multiple mapillary-images ([286fe72](https://github.com/USERNAME/REPOSITORY_NAME/commits286fe729359db1ec36328768a6a7662a9e951ce8))
* allow to move (non-snapped) points again after fixing [#1809](https://github.com/pietervdvn/MapComplete/issues/1809) ([77f07f5](https://github.com/USERNAME/REPOSITORY_NAME/commits77f07f55ecf9140c1c556fb4147c7d5cb74b0645))
* alltags shows objects as JSON instead as [object Object] ([1df28ab](https://github.com/USERNAME/REPOSITORY_NAME/commits1df28ab50199310928974a07809b65e854df1525))
* also copy png assets ([8f32916](https://github.com/USERNAME/REPOSITORY_NAME/commits8f32916454b63939d63c7496f7ba7b30f6f038cc))
* also show location info on shake if GPS is disabled ([4c5d24a](https://github.com/USERNAME/REPOSITORY_NAME/commits4c5d24a0a7dacc393c0a4328c99b5e5e08058b0b))
* always allow www.openstreetmap.org ([6b4be12](https://github.com/USERNAME/REPOSITORY_NAME/commits6b4be1200c60664bbbee87f9f8f8e3d821a277c3))
* always link to the wiki when tags are shown ([8dfef62](https://github.com/USERNAME/REPOSITORY_NAME/commits8dfef624323b8b93098150115d93f4089b846fb2))
* attempt to fix build ([0e8c3b1](https://github.com/USERNAME/REPOSITORY_NAME/commits0e8c3b10626f6f37e54b8ef96c11fb5dc113fe7a))
* attempt to fix build ([0e760b9](https://github.com/USERNAME/REPOSITORY_NAME/commits0e760b908c4955300b9d329f6d7eb9fb475713d3))
* attributes to answered questions didn't automatically show, questions which became available are now shown if they become avaible because of a tag change. Fix [#1587](https://github.com/pietervdvn/MapComplete/issues/1587) ([7de0af1](https://github.com/USERNAME/REPOSITORY_NAME/commits7de0af15f100815288fea4fdb13f3e845bc79088))
* await 'country' to be loaded ([3c5bde1](https://github.com/USERNAME/REPOSITORY_NAME/commits3c5bde1ae3ff3ed1aa72bb1463a4690e16f941e6))
* background layer csp fixe ([713e53c](https://github.com/USERNAME/REPOSITORY_NAME/commits713e53c41a840ae1e66cb9a36e06e0e9361285bd))
* better error handling and handling of changes ([7813653](https://github.com/USERNAME/REPOSITORY_NAME/commits78136532651ebcea6a2d2d94e42b2775bb9e92e3))
* better select available levels ([7b73578](https://github.com/USERNAME/REPOSITORY_NAME/commits7b73578f88b09ee65f923c363a884d91f20d2fae))
* broken titleIcons (fix [#1344](https://github.com/pietervdvn/MapComplete/issues/1344)) ([bdcf8a2](https://github.com/USERNAME/REPOSITORY_NAME/commitsbdcf8a26014b01e8128ece897e4b98286722d0e4))
* browser specific bug which caused the file selector to open twice on chromium; fix [#1771](https://github.com/pietervdvn/MapComplete/issues/1771) ([9893e43](https://github.com/USERNAME/REPOSITORY_NAME/commits9893e433f3bb43fbea80beb2a73ea4e271a01491))
* bug submitted comments on notes twice ([5be4b9d](https://github.com/USERNAME/REPOSITORY_NAME/commits5be4b9d1fb1e5a5e2cb03e314d4d65370aa44957))
* build ([cef7e01](https://github.com/USERNAME/REPOSITORY_NAME/commitscef7e01a2e7855d214d4a5ca75fc032a2b1d123a))
* build ([8556196](https://github.com/USERNAME/REPOSITORY_NAME/commits8556196acec5652ab39baaaa14ac911cb6dc5a15))
* build ([dbca260](https://github.com/USERNAME/REPOSITORY_NAME/commitsdbca2601324cd79d5d2d7d0398d002565d8825de))
* build ([2a21040](https://github.com/USERNAME/REPOSITORY_NAME/commits2a2104055185e1f9fa8f1cad620606b690527a0c))
* build ([29ee113](https://github.com/USERNAME/REPOSITORY_NAME/commits29ee113e30c11edc670331f1fb67f41e08f9ab50))
* build, some metatagging errors ([0d529e7](https://github.com/USERNAME/REPOSITORY_NAME/commits0d529e7cca4f044ab4c5fd4491e3704678598862))
* build; subtle bug ([5644c7a](https://github.com/USERNAME/REPOSITORY_NAME/commits5644c7a8b87a0fb17e846a4c370ac432cc03ca15))
* bypass missing favourites in custom theme loader ([6f59e46](https://github.com/USERNAME/REPOSITORY_NAME/commits6f59e46befd0ba1df57066400f3d2bbf00166f5b))
* charging station theme uses anchor too ([39024eb](https://github.com/USERNAME/REPOSITORY_NAME/commits39024eb5f3f68b5dba6b10d8dcf07fe2c5c67fbc))
* charging_station.protojson ([f042ca4](https://github.com/USERNAME/REPOSITORY_NAME/commitsf042ca40701e269a02254289a35acd43aaed05b0))
* chromium browsers don't handle spaces in `tel:`-links well ([4168ef0](https://github.com/USERNAME/REPOSITORY_NAME/commits4168ef01e333784f738fafa15d1eb7d7c4c527c7))
* cleanup merge ([e160510](https://github.com/USERNAME/REPOSITORY_NAME/commitse16051025a0f7c827c90db7251596be0c5e902c9))
* cleanup of wikipedia panel, fix [#1570](https://github.com/pietervdvn/MapComplete/issues/1570) ([203f24f](https://github.com/USERNAME/REPOSITORY_NAME/commits203f24fca01047edd2f01ed541fc93841ac1f17d))
* clicking the magnifying icon actually works now ([5478711](https://github.com/USERNAME/REPOSITORY_NAME/commits5478711bed8806d4cd5ae0ffe69ab64f3293fa69))
* compilation warning ([5851531](https://github.com/USERNAME/REPOSITORY_NAME/commits5851531306b2cb2cebfb459e5c5bef284b8c3e94))
* correct 'sync repo' step ([ecd84c2](https://github.com/USERNAME/REPOSITORY_NAME/commitsecd84c2cf6174bddad5d1759caeeeea761e1b9f1))
* correct CSP header for iOs/safari ([54868de](https://github.com/USERNAME/REPOSITORY_NAME/commits54868debec137c57b8dd45024332854150cc8f0f))
* correct default access assumption ([ea06152](https://github.com/USERNAME/REPOSITORY_NAME/commitsea061524737b343bec120356b8822d185cdefd85))
* correct default sed param for BSD sed flavor ([46fe1c5](https://github.com/USERNAME/REPOSITORY_NAME/commits46fe1c5795a110c541ed97548c426b205705ff2d))
* correct faulty name ([0952200](https://github.com/USERNAME/REPOSITORY_NAME/commits09522004db01453dcdb9a26670c3d7ef6f4e1eee))
* correct filters ([4d2d541](https://github.com/USERNAME/REPOSITORY_NAME/commits4d2d54175ca5b4af5a258bf7d1b89debab9f8f8e))
* correct maybe missing option in etymology layer ([a8ecab4](https://github.com/USERNAME/REPOSITORY_NAME/commitsa8ecab4d794c219301d636594933520c87fd8d75))
* correct merge conflict ([e6d8401](https://github.com/USERNAME/REPOSITORY_NAME/commitse6d84019a579daed01a34cf67825689511fd9c0a))
* correct minzoom on all themes ([bde5878](https://github.com/USERNAME/REPOSITORY_NAME/commitsbde5878fedae0eac20db8bb4c6eca81f904e20fd))
* correct sed command to be OSX compatible ([e21eb65](https://github.com/USERNAME/REPOSITORY_NAME/commitse21eb6596ee85471b8cbbd6776fa65647786bfda))
* correct typings ([2f17e6e](https://github.com/USERNAME/REPOSITORY_NAME/commits2f17e6e53259193c06d1764188a1a9602fbd97bb))
* Correctly calculate available levels, reselect last_click automatically ([4c962ea](https://github.com/USERNAME/REPOSITORY_NAME/commits4c962eab21af8146d9d57f7d12cd08cdd4a642d6))
* correctly escape markdown ([4d01d81](https://github.com/USERNAME/REPOSITORY_NAME/commits4d01d81e1e87ca5a18b6d0fd7b9f232c77cda936))
* correctly flatten special cases ([7ba0e73](https://github.com/USERNAME/REPOSITORY_NAME/commits7ba0e736a87492bc64e5f73811a6c790851c59d9))
* correctly flatten special cases ([593d7bd](https://github.com/USERNAME/REPOSITORY_NAME/commits593d7bd07ac520875c5acfcab5df364fb04dd77c))
* correctly interpret 'hideInAnswer'-conditions, recalculate them dynamically ([37dc6a7](https://github.com/USERNAME/REPOSITORY_NAME/commits37dc6a71616fc9510d1bf6e814060390dd329629))
* correctly optimize 'key=A&key!=B' into 'key=A' ([d8a5f3c](https://github.com/USERNAME/REPOSITORY_NAME/commitsd8a5f3c2be985c4fcbedfda09564ae5d02e6e5b4))
* correctly replace fields in filterview ([ae491f4](https://github.com/USERNAME/REPOSITORY_NAME/commitsae491f491652798344273d18fb42f1d27108ba4b))
* crash in new note flow, spotted by [@thibaultmolleman](https://github.com/thibaultmolleman) ([3e49929](https://github.com/USERNAME/REPOSITORY_NAME/commits3e49929f253f8ae1f945d9df4eb3398b39030a43))
* css-generate script; loading of stylesheet in style_test, add small buttons to style_test ([6bed170](https://github.com/USERNAME/REPOSITORY_NAME/commits6bed170910cdf6fd2ca68eb9d1b65779287afa5d))
* CSV download ([c1bce7a](https://github.com/USERNAME/REPOSITORY_NAME/commitsc1bce7abc76984ddb84f112d1b7367e5822d5763))
* decent PDF-export ([de20b00](https://github.com/USERNAME/REPOSITORY_NAME/commitsde20b00b8f8af6796cbab060262d85a5ab171c5d))
* direction input does not scroll anymore when dragged, fix [#1468](https://github.com/pietervdvn/MapComplete/issues/1468) ([102892e](https://github.com/USERNAME/REPOSITORY_NAME/commits102892ec774501b2811179b333217fb81efe33bb))
* disable 'delete'-button if no reason is selected, fix [#1631](https://github.com/pietervdvn/MapComplete/issues/1631) ([6b6b1e3](https://github.com/USERNAME/REPOSITORY_NAME/commits6b6b1e32862c7021cff99c2b340a50ae5822cf60))
* disable check ([b2e7b7d](https://github.com/USERNAME/REPOSITORY_NAME/commitsb2e7b7d221a6dbc12f73505522a5d29bd6d36244))
* disable rotation on mobile if the user enabled this ([93a30fd](https://github.com/USERNAME/REPOSITORY_NAME/commits93a30fdba5edfd91c19050013aa4f58123ce127c))
* don't attempt to show an osm wiki page as image, fix [#1776](https://github.com/pietervdvn/MapComplete/issues/1776) ([7dc43f9](https://github.com/USERNAME/REPOSITORY_NAME/commits7dc43f933e84b73f99935ceba4638fe85e376c94))
* don't count layers if they are not shown by default, fix [#1840](https://github.com/pietervdvn/MapComplete/issues/1840) ([d848171](https://github.com/USERNAME/REPOSITORY_NAME/commitsd848171c3d795e31a73b10d687b475de30e8f39c))
* don't crash if 't' is undefined ([b1c4097](https://github.com/USERNAME/REPOSITORY_NAME/commitsb1c4097cb480785d2e644a3da072055d1778a17c))
* don't crash if no features nearby ([b6a4cc1](https://github.com/USERNAME/REPOSITORY_NAME/commitsb6a4cc11bdf25c4cf09e55ad802eb0d460311c9d))
* don't crash if no features nearby ([c2001f1](https://github.com/USERNAME/REPOSITORY_NAME/commitsc2001f17a55937bbc09e52d730828c9234bf30ef))
* don't measure compass if alpha is null, fix [#1787](https://github.com/pietervdvn/MapComplete/issues/1787) ([3461ed6](https://github.com/USERNAME/REPOSITORY_NAME/commits3461ed60990fc91e399ef3c4cd082029db2059dd))
* don't move the map after we jumped to the current GPS location ([f31b025](https://github.com/USERNAME/REPOSITORY_NAME/commitsf31b025b8dba7218576c58ef6bc2b3101052beb7))
* don't set invalid coordinates ([fbc3bce](https://github.com/USERNAME/REPOSITORY_NAME/commitsfbc3bce5109ffa95491b792d4c7870167f9915ba))
* don't show both counts and summary at the same time ([d6dbeca](https://github.com/USERNAME/REPOSITORY_NAME/commitsd6dbecace26b9dc52da61d19b767469190a0e8be))
* don't show duplicate entry of default baselayer if already added ([7ef1628](https://github.com/USERNAME/REPOSITORY_NAME/commits7ef1628d87f32240746251b3e7b4bfdfdbebf6cb))
* Don't show item if there is no label ([7edc730](https://github.com/USERNAME/REPOSITORY_NAME/commits7edc7302bbb6f0884e6652a429e00705f64413bb))
* don't show preset_type special vis if no presets are given ([cf3b414](https://github.com/USERNAME/REPOSITORY_NAME/commitscf3b4145ff68871a2040b15ccb6d030b59c448ad))
* don't show radiobuttons if only one option is available ([8e68ca0](https://github.com/USERNAME/REPOSITORY_NAME/commits8e68ca03ab33cf91df83f1e1d2750723cfb0370b))
* don't store location 0,0 to prevent movement or cursor in addNew-dialog ([c19317b](https://github.com/USERNAME/REPOSITORY_NAME/commitsc19317bd04a10db89ecbb95eda9b3156f50c395b))
* don't throw an error if there is no parent element which can be scrolled ([3166918](https://github.com/USERNAME/REPOSITORY_NAME/commits3166918551aab57bdf0777e7bd378003779f8c10))
* drag & drop for file selector ([5be24db](https://github.com/USERNAME/REPOSITORY_NAME/commits5be24dbef1647cd2c6c869d86ea5b37f0e072106))
* dynamic filtering with non-string values ([58b94c3](https://github.com/USERNAME/REPOSITORY_NAME/commits58b94c38e50c5a9c66ac248fe8117b19bac7d05a))
* effectively show `contact:website` in title icons ([0027299](https://github.com/USERNAME/REPOSITORY_NAME/commits0027299a3e373e9cd19deec0b93dd7a7599ff78a))
* emit warning for invalid suggestions ([56ba426](https://github.com/USERNAME/REPOSITORY_NAME/commits56ba426ab5bb2f10ac38776728a67ff4558e0cfa))
* enable editing questions (and settings) again (oopsie) ([d079ba9](https://github.com/USERNAME/REPOSITORY_NAME/commitsd079ba91aa29395262b8084f811eec26e51750b9))
* enable external data sources from the ELI ([5ea0804](https://github.com/USERNAME/REPOSITORY_NAME/commits5ea08040d7ec40abaabf849ef20771c1a5112637))
* enable login on index screen ([aface6a](https://github.com/USERNAME/REPOSITORY_NAME/commitsaface6aea7f1774b62c9218e64cd65bf77b97c0b))
* enable rainbow question again, fix [#1453](https://github.com/pietervdvn/MapComplete/issues/1453) ([af447a9](https://github.com/USERNAME/REPOSITORY_NAME/commitsaf447a948f3d425565afe5620a97123111d6bf91))
* enable settings again, fix [#1815](https://github.com/pietervdvn/MapComplete/issues/1815) ([a118c29](https://github.com/USERNAME/REPOSITORY_NAME/commitsa118c295d641852584bbd16f07c419a3fa896591))
* error server properly names files, add status endpoint ([37c1d46](https://github.com/USERNAME/REPOSITORY_NAME/commits37c1d46dd43a9d75326a4f9187d4bb3846b4a211))
* escape special characters for wikipedia search, might improve [#1500](https://github.com/pietervdvn/MapComplete/issues/1500) ([ec94253](https://github.com/USERNAME/REPOSITORY_NAME/commitsec94253d6c5ef38ee5d5d1c7bc25fff53cd6be82))
* etymology theme now supports multi-apply again, uses lower zoom level for multiselect ([90869a1](https://github.com/USERNAME/REPOSITORY_NAME/commits90869a1c985d992063656d89fe0d95b73184304a))
* Expose all templates ([09a3e7f](https://github.com/USERNAME/REPOSITORY_NAME/commits09a3e7fba1464835bfad061110f4352d9a47e173))
* facade gardens: restore forgottne rendering ([f8fa184](https://github.com/USERNAME/REPOSITORY_NAME/commitsf8fa1841e4df8627a18ee57c7c2cb943176557be))
* fill in freeform value if already set ([e0527e9](https://github.com/USERNAME/REPOSITORY_NAME/commitse0527e964702427014220e2978680e3e6a7cc774))
* fix [#1471](https://github.com/pietervdvn/MapComplete/issues/1471): add option to bench for 'does probably not have an artwork' ([91892d5](https://github.com/USERNAME/REPOSITORY_NAME/commits91892d50c5a5c5071838c8a38a24c60f1f7ed717))
* fix [#1477](https://github.com/pietervdvn/MapComplete/issues/1477). Setting the background caused a map.resize(), which in turn caused the coordinates to be set to 0,0, which caused the location-correction to kick in, moving the location input towards null island ([d95d96f](https://github.com/USERNAME/REPOSITORY_NAME/commitsd95d96fb1ba1a8886f05b118c0650a4af1ae5dd7))
* fix [#1503](https://github.com/pietervdvn/MapComplete/issues/1503), fix [#1571](https://github.com/pietervdvn/MapComplete/issues/1571) ([382f965](https://github.com/USERNAME/REPOSITORY_NAME/commits382f96596ed474bef086d64cabb748257416f2de))
* fix [#1506](https://github.com/pietervdvn/MapComplete/issues/1506), language-URL-parameter works again and is properly documented ([2942a2d](https://github.com/USERNAME/REPOSITORY_NAME/commits2942a2dae77d7c79b3af47b0c518342fa6c87454))
* fix [#1528](https://github.com/pietervdvn/MapComplete/issues/1528): from weblate to theme files did not properly sync ([3c08c12](https://github.com/USERNAME/REPOSITORY_NAME/commits3c08c1297423d74348aa83e5932a7fbd94c260e5))
* fix [#1529](https://github.com/pietervdvn/MapComplete/issues/1529) ([05bf79f](https://github.com/USERNAME/REPOSITORY_NAME/commits05bf79f7616af06aefea8e9f095e2b467d84a5d7))
* fix [#1532](https://github.com/pietervdvn/MapComplete/issues/1532) ([5d00f3c](https://github.com/USERNAME/REPOSITORY_NAME/commits5d00f3cc6a75a22732ec7ffa63d9335d9d75853c))
* fix [#1580](https://github.com/pietervdvn/MapComplete/issues/1580) ([56934b7](https://github.com/USERNAME/REPOSITORY_NAME/commits56934b79f6911da6d182c4e3f28bbd6749932c3e))
* fix [#1596](https://github.com/pietervdvn/MapComplete/issues/1596) ([0727a22](https://github.com/USERNAME/REPOSITORY_NAME/commits0727a228fd8bf9b7dd7ecc5b42d9225eab00bae7))
* fix [#1627](https://github.com/pietervdvn/MapComplete/issues/1627) ([e37f908](https://github.com/USERNAME/REPOSITORY_NAME/commitse37f90855fb3b1fd59d19506aca0e2ccc6a12fb2))
* fix [#1675](https://github.com/pietervdvn/MapComplete/issues/1675) ([65250d7](https://github.com/USERNAME/REPOSITORY_NAME/commits65250d77beec81f9d336302c4b185dcd14518917))
* fix [#1684](https://github.com/pietervdvn/MapComplete/issues/1684); add 'openid' to auth-tokens (will be needed in the future for geovisio integration) ([0a82dd0](https://github.com/USERNAME/REPOSITORY_NAME/commits0a82dd0edfd67c18b2c59c903d506cbb0d46ffc1))
* fix [#1713](https://github.com/pietervdvn/MapComplete/issues/1713) ([2720f5d](https://github.com/USERNAME/REPOSITORY_NAME/commits2720f5dd19deb2ebdcf1eae2229e2fbdd0adc4dd))
* fix [#1779](https://github.com/pietervdvn/MapComplete/issues/1779), add check to prevent similar errors ([417dc16](https://github.com/USERNAME/REPOSITORY_NAME/commits417dc1633e05b1b4776449eb245739232dea975e))
* fix [#1813](https://github.com/pietervdvn/MapComplete/issues/1813). For some reason, importing a .js-file suddenly fails, so ported it to typescript ([cab414e](https://github.com/USERNAME/REPOSITORY_NAME/commitscab414e80895933b4ae874be5fd77b90b8c13f3f))
* fix [#1817](https://github.com/pietervdvn/MapComplete/issues/1817), some more improvements to the loading screen ([6394ee8](https://github.com/USERNAME/REPOSITORY_NAME/commits6394ee8e6800d2cd23d30383ffea9629964c4dc9))
* fix [#1844](https://github.com/pietervdvn/MapComplete/issues/1844) ([e11442e](https://github.com/USERNAME/REPOSITORY_NAME/commitse11442e1009465e8bc3e8823e8d66fe44fb5f9c2))
* fix [#1883](https://github.com/pietervdvn/MapComplete/issues/1883); display underground railway lines in a subtler rendering ([b3299cd](https://github.com/USERNAME/REPOSITORY_NAME/commitsb3299cdd733152820e30c18463e551059654d3fb))
* fix [#1906](https://github.com/pietervdvn/MapComplete/issues/1906) ([3ab1d15](https://github.com/USERNAME/REPOSITORY_NAME/commits3ab1d1591fde7e31efe4e6186af78b71987c1498))
* fix [#1917](https://github.com/pietervdvn/MapComplete/issues/1917) ([8c65448](https://github.com/USERNAME/REPOSITORY_NAME/commits8c6544883469d9634fca285b600fa05706dcdbfa))
* fix [#1917](https://github.com/pietervdvn/MapComplete/issues/1917) ([903a11d](https://github.com/USERNAME/REPOSITORY_NAME/commits903a11d4e7c832ad46d3afd4ed9786df6e6d1331))
* fix anonymous reviews; fix [#1868](https://github.com/pietervdvn/MapComplete/issues/1868) ([073cd69](https://github.com/USERNAME/REPOSITORY_NAME/commits073cd692e456ae63999bfc2770d0c204dc8a1793))
* fix back-button on the 404-page, remove some obsolete classes ([006f695](https://github.com/USERNAME/REPOSITORY_NAME/commits006f69561a08a1c3a3577ada83e9b3954d8332f2))
* fix bug icon ([1fea2b5](https://github.com/USERNAME/REPOSITORY_NAME/commits1fea2b56be82e8a9a5db2683ee55a5a81ec7e7f2))
* fix bug with incorrect translation context for themes ([368f9ad](https://github.com/USERNAME/REPOSITORY_NAME/commits368f9ad0c83eaeb40d4f7ae293d73d11714271e0))
* fix build ([0d705b9](https://github.com/USERNAME/REPOSITORY_NAME/commits0d705b97277a7c6cba5a57d071aeaace1a24fc5a))
* fix crash in studio ([b18d575](https://github.com/USERNAME/REPOSITORY_NAME/commitsb18d575ade434ec51a33684ff365ede7b93cfa79))
* fix dissappearing items to apply ([a935c03](https://github.com/USERNAME/REPOSITORY_NAME/commitsa935c03631614390a1ab43248f51e6ba0eb26956))
* fix domain name ([301f00f](https://github.com/USERNAME/REPOSITORY_NAME/commits301f00f6aef727981e2faa73e2093710ac25c337))
* fix file drag and drop, allow entire featurePopup for file drop ([859faea](https://github.com/USERNAME/REPOSITORY_NAME/commits859faead7fd8c6fa5ae73b70e41a753f34dfd5ff))
* fix icons in mappings which use a builtin svg ([ab28fbe](https://github.com/USERNAME/REPOSITORY_NAME/commitsab28fbe35c97de56e765bc3b35277489aebb1872))
* fix incorrectly linked translation in privacy policy ([e2aaa7d](https://github.com/USERNAME/REPOSITORY_NAME/commitse2aaa7d435ee91d20a62e8380300ec27418e93c1))
* fix link image action ([ce55b4c](https://github.com/USERNAME/REPOSITORY_NAME/commitsce55b4c7d8659044b93a03afaaa37d272a6b48ab))
* fix maps ([e48571a](https://github.com/USERNAME/REPOSITORY_NAME/commitse48571a80a03418d5c0c61304dbb166a67740ddc))
* fix move dialog ([084cd86](https://github.com/USERNAME/REPOSITORY_NAME/commits084cd86b71bbc26e3b7542a5f16ecc1715275a50))
* fix multi-visualisation ([872e36d](https://github.com/USERNAME/REPOSITORY_NAME/commits872e36dffa6810f599e06778010f8b00056b976c))
* fix nearby drinking water fountain detection ([13ebcff](https://github.com/USERNAME/REPOSITORY_NAME/commits13ebcffab102fdcda6263c22cdd12bc22a6f86f7))
* fix nearby drinking water fountain detection ([a5276eb](https://github.com/USERNAME/REPOSITORY_NAME/commitsa5276eb4e67ed939e5b34ad7ffca61d6e41d679d))
* fix query:licenses ([e0ee3ed](https://github.com/USERNAME/REPOSITORY_NAME/commitse0ee3edf71388614a1bc07dc43aaf18def1a630e))
* fix rainbow crossings theme ([5b29177](https://github.com/USERNAME/REPOSITORY_NAME/commits5b291777be5a1aa4826ba894af76dbf4c09b9a7c))
* fix reverse tabnabbing in most cases, add rel=noopener to most links to untrusted content ([d9b8257](https://github.com/USERNAME/REPOSITORY_NAME/commitsd9b8257e47f7c2e2ce06e4a0fcad8830764dae8e))
* fix scrolling for 'addNewPoint' ([637cebe](https://github.com/USERNAME/REPOSITORY_NAME/commits637cebefc7685d64ae5286c2a5f63afb3193a2db))
* fix scrolling for 'addNewPoint' ([f697d29](https://github.com/USERNAME/REPOSITORY_NAME/commitsf697d292a3ab6bf3114d5f7055c908203efbc8e0))
* fix settings menu ([2b728fd](https://github.com/USERNAME/REPOSITORY_NAME/commits2b728fdf8bd6effce1682119f7f0d67a13d1c97d))
* fix styling of translate button in titles ([0a8164c](https://github.com/USERNAME/REPOSITORY_NAME/commits0a8164c378ca4aaa1e34dc3bbd4e2741e5bc6318))
* fix tests; use OAuth client id from dedicated MapComplete account ([fc9dd46](https://github.com/USERNAME/REPOSITORY_NAME/commitsfc9dd462399a3b7ed8959c38c4a97f24895f9ca8))
* fix translate icon, fix [#1832](https://github.com/pietervdvn/MapComplete/issues/1832) ([064c601](https://github.com/USERNAME/REPOSITORY_NAME/commits064c60163c19e55d098e1b1061cf3b8df3dcf782))
* fix UK-Addresses themes again ([370b200](https://github.com/USERNAME/REPOSITORY_NAME/commits370b200bb33f26db448e5d3feda2107f2224d232))
* fix updating of styles ([650c1a6](https://github.com/USERNAME/REPOSITORY_NAME/commits650c1a675c783179482338f449ca1202246916a0))
* fix validation of question input; remove some obsolete logging; stabilize output of generate:translations wrt newlines ([1f39ba9](https://github.com/USERNAME/REPOSITORY_NAME/commits1f39ba9ab50f63e04be89f676aa82c04d5bb2f94))
* fixes to etymology: load wikidata on mobile (which uses m.wikidata.org, tripping the CSP); fix 'upload image of the streetsign' parameters ([480956d](https://github.com/USERNAME/REPOSITORY_NAME/commits480956d45dc767c77848ba32b176af373e73060a))
* force downloading (without cache) before uploading ([b85b2ac](https://github.com/USERNAME/REPOSITORY_NAME/commitsb85b2ace0b373aeae1b9cef8e748ddea7cd3ca5c))
* force redrawing the questions in a questionbox to avoid rendering artefacts and unselectable items ([f7e2dc7](https://github.com/USERNAME/REPOSITORY_NAME/commitsf7e2dc7457f366d9cf4722beccfe6b16467ab435))
* generate layeroverview ([ce654cb](https://github.com/USERNAME/REPOSITORY_NAME/commitsce654cbcf9d7164121ee539836c3f7775d93365d))
* generate layeroverview ([e71a1c7](https://github.com/USERNAME/REPOSITORY_NAME/commitse71a1c7a3d011b921c6ff08dcc54f93dd84971dc))
* generateCSP ([a612d4e](https://github.com/USERNAME/REPOSITORY_NAME/commitsa612d4e1c2f6469c7b2d1fc66c8fc416ccdcac1a))
* generating layeroverview; performance: do not try to download ratings if no ratings element is present ([fc62d41](https://github.com/USERNAME/REPOSITORY_NAME/commitsfc62d41e1b832278bb0c846ffcaa971273419730))
* giving a review is possible again ([0879ff9](https://github.com/USERNAME/REPOSITORY_NAME/commits0879ff97ed4b0b5de572dbf50cc45433b60423f2))
* giving a review is possible again ([a75fc0d](https://github.com/USERNAME/REPOSITORY_NAME/commitsa75fc0d21550495ea2e579922af9b27b2b2a6e22))
* gps-icon should turn into an arrow again ([ef93ad1](https://github.com/USERNAME/REPOSITORY_NAME/commitsef93ad126f5c6b973fb2f66c368522ebdee07543))
* handle NBSP in svg ([4190bf7](https://github.com/USERNAME/REPOSITORY_NAME/commits4190bf79339330601b4d6d426c45cfc6e431ef61))
* hash would not clear because the update method unregistered itself ([8dd7f34](https://github.com/USERNAME/REPOSITORY_NAME/commits8dd7f34ad733080e9e5e648a91942528d96857ed))
* hidden theme link not working ([d5e128b](https://github.com/USERNAME/REPOSITORY_NAME/commitsd5e128b1ed71fb7be7402bbe4ed86edcd6e5a6b0))
* hide 'addnewpoint'-icon when closing the dialog ([499ad85](https://github.com/USERNAME/REPOSITORY_NAME/commits499ad85f1efd0aefd2cf757198eaef5af037c7ee))
* hide some elements of the UI if they are disabled by a featureSwitch ([17503d5](https://github.com/USERNAME/REPOSITORY_NAME/commits17503d5bfb63c5c03968c96f15c2c5a674a3ede3))
* hide tag_apply_button when applied ([622df2d](https://github.com/USERNAME/REPOSITORY_NAME/commits622df2df19ce4fa7049447995194d0f28b91d59f))
* icons for rental in cyclofix theme ([02064a2](https://github.com/USERNAME/REPOSITORY_NAME/commits02064a2d8078b07aeb9e282700018c86638c4683))
* ifnot-value would show up together with the 'if'-value ([15f1a93](https://github.com/USERNAME/REPOSITORY_NAME/commits15f1a9362c624d3fec9680efa3e38edf912cbaf1))
* import ([98ca6aa](https://github.com/USERNAME/REPOSITORY_NAME/commits98ca6aa8aaac923b57d12f52b41f5ee13412b0a2))
* improve background layer switching code, might improve [#1481](https://github.com/pietervdvn/MapComplete/issues/1481) ([33fa11f](https://github.com/USERNAME/REPOSITORY_NAME/commits33fa11fc1728f017644977be2181c25441a76e18))
* improve deployscript for hetzner ([dcd02e9](https://github.com/USERNAME/REPOSITORY_NAME/commitsdcd02e9ad772346bc3f69ebd9563af80ea30810e))
* improve error message ([7f6c1f0](https://github.com/USERNAME/REPOSITORY_NAME/commits7f6c1f06e23cb249d2eadda9be08b1cafc680d30))
* improve first-sentence ([7aee442](https://github.com/USERNAME/REPOSITORY_NAME/commits7aee442ae49a7a68821917de9580ce9e62105edf))
* improve functionality of GRB-theme (WIP) ([b86e291](https://github.com/USERNAME/REPOSITORY_NAME/commitsb86e2910baba5fe37cf5c0f53a64966c85d159ce))
* improve optimization; add tests ([595503c](https://github.com/USERNAME/REPOSITORY_NAME/commits595503cfc35c8db3cb4ee4b28f82b7c91ee75dff))
* improve parsing of possible mapillary values ([3d54a83](https://github.com/USERNAME/REPOSITORY_NAME/commits3d54a8392be94a369bf388dad0f83f60fb5a5474))
* improve PDF-output functionality ([215286a](https://github.com/USERNAME/REPOSITORY_NAME/commits215286a5af46c58a197bf85b9561c26eff5bd8fe))
* include 'source' and tile URLs from vector tile sources into CSP, see [#1652](https://github.com/pietervdvn/MapComplete/issues/1652) ([09504e1](https://github.com/USERNAME/REPOSITORY_NAME/commits09504e18ecb4b85ceb6562fcdb0e21034e496ad8))
* include japanese dot as sentence separator ([d2c6689](https://github.com/USERNAME/REPOSITORY_NAME/commitsd2c668922b7ac5dc682461c6789fbbdb37fad8c3))
* include lod-proxy in CSp ([087c099](https://github.com/USERNAME/REPOSITORY_NAME/commits087c099e2e633237b00748ee5d3dbba454999881))
* incorrect path in error message ([5da8952](https://github.com/USERNAME/REPOSITORY_NAME/commits5da895276c5d5447bea7094d81d371e99458ff7e))
* **index:** search got confused as it didn't have an id for the list items ([6f42884](https://github.com/USERNAME/REPOSITORY_NAME/commits6f4288476eebf7b0e8af6177bff066d06f3823dc))
* init indexedFeatureStore with a default map as to fix crash upon loading if a pending change is present ([377c411](https://github.com/USERNAME/REPOSITORY_NAME/commits377c411143c577752014842bbc205093c9ebfdc4))
* initialize user settings with a strict value to be able to override it ([57e0093](https://github.com/USERNAME/REPOSITORY_NAME/commits57e0093e478f541c46145a72dbfb9fc70d467633))
* interpret missing level tag as 'level=0' ([5d8b422](https://github.com/USERNAME/REPOSITORY_NAME/commits5d8b42216236d49b6bcf328e8a009884f697e312))
* keep map mouse-interactive when panning with arrow keys, some CSS-tweaks ([512bb4c](https://github.com/USERNAME/REPOSITORY_NAME/commits512bb4c00e1fed39927c8bd40aaef378db64d648))
* layers now compile again ([1c99173](https://github.com/USERNAME/REPOSITORY_NAME/commits1c99173f32112b332ce38f926623fa2c27f89ab8))
* lines with opacity have colour again ([f0d9365](https://github.com/USERNAME/REPOSITORY_NAME/commitsf0d9365e06eb533f0bf0a47c21ce58834fc5cabd))
* load element if set in the hash ([9090dda](https://github.com/USERNAME/REPOSITORY_NAME/commits9090dda6889a4e4eda33b9d634fb22da3aedadd8))
* load translations for PDF-export internally ([d103911](https://github.com/USERNAME/REPOSITORY_NAME/commitsd103911d143803c9e0373a673110009a785f94da))
* loading oneway arrows on multiple layers; fix nullpointer ([1678427](https://github.com/USERNAME/REPOSITORY_NAME/commits16784270ce45560520d4e9b19d81bd04da7033ee))
* long domain names cause horizontal scroll with taghints ([eb47c4d](https://github.com/USERNAME/REPOSITORY_NAME/commitseb47c4d5b9a0379cc87b773c73638965fb247ee8))
* make levelselector clickable again, fix [#1416](https://github.com/pietervdvn/MapComplete/issues/1416) ([8b5daef](https://github.com/USERNAME/REPOSITORY_NAME/commits8b5daefc9063c818eeea6e044167787feb31d4b5))
* make sure that a 'hidden' tagRendering cannot be accidentally selected ([5585f02](https://github.com/USERNAME/REPOSITORY_NAME/commits5585f02cad0c737f99c16433d7a61f3a5f3743d3))
* make sure that the passed-in-location of the map is respected, prevents random jumps in the location input ([5c01f6a](https://github.com/USERNAME/REPOSITORY_NAME/commits5c01f6ada95ab1410310d4f084f593b6f561cc53))
* make sure the background is always below the rendered layers ([2769747](https://github.com/USERNAME/REPOSITORY_NAME/commits2769747737964a509897ccce4702a9ea9ebefcd8))
* make text a translation ([418e0cd](https://github.com/USERNAME/REPOSITORY_NAME/commits418e0cd149f1af50527e1f1f2c6fbec254779681))
* make top and bottom panels click-through ([0db6a89](https://github.com/USERNAME/REPOSITORY_NAME/commits0db6a8977716e33bfa775bd731e994bf9facf0c9))
* maproulette endpoints ([bbf6d62](https://github.com/USERNAME/REPOSITORY_NAME/commitsbbf6d62c866950476ee34ff735352d8cc38daa7a))
* maproulette import flow ([5f7cc35](https://github.com/USERNAME/REPOSITORY_NAME/commits5f7cc351c9fb3743ab1cba65327611f730440ec5))
* maproulette item ([b6b77da](https://github.com/USERNAME/REPOSITORY_NAME/commitsb6b77daef78bdc111530ec1fb17820c4fb042e57))
* markers can rotate again ([5e453d5](https://github.com/USERNAME/REPOSITORY_NAME/commits5e453d5cf19fb63ef7516ad11e53aad4e0006bdc))
* markers now appear correctly on PNG exports ([e5b3e15](https://github.com/USERNAME/REPOSITORY_NAME/commitse5b3e15c43672933fc3f1f6a59960514961ce377))
* MC would crash if a pending change was present; remember preferences in order to reuse the changeset ([f2375f4](https://github.com/USERNAME/REPOSITORY_NAME/commitsf2375f4877316193132f4ae4189ef5b65e7ef710))
* metatagging of width theme ([c4ff70c](https://github.com/USERNAME/REPOSITORY_NAME/commitsc4ff70ce656e941574a31120f3971375ecc7ba4c))
* minimap takes to much space ([037c593](https://github.com/USERNAME/REPOSITORY_NAME/commits037c593f61b3adfd4ac314aef063e20049ce3cb7))
* missing commas in elevator.json ([229e605](https://github.com/USERNAME/REPOSITORY_NAME/commits229e60538b4d9002875a63ad877324941dd4647d))
* Move image preview below FloatOver, the popup otherwise hides the image preview ([df1fef2](https://github.com/USERNAME/REPOSITORY_NAME/commitsdf1fef28c02b08a1ba13e4fbd8bc6f15d6c7913c))
* move lastClick to bottom anchor ([beea00c](https://github.com/USERNAME/REPOSITORY_NAME/commitsbeea00cbf079ad0c109c78d2828b7359479f0717))
* multianswer with a free textfield did not activate ([649ed1f](https://github.com/USERNAME/REPOSITORY_NAME/commits649ed1f53a7948bafda45aab36ed214d1808b51e))
* multianswer would not accept last option ([6f5c71e](https://github.com/USERNAME/REPOSITORY_NAME/commits6f5c71ed5a17147d5fc8c9da9f194a61f18fbb30))
* no more duplicate link showing up, avoid crash ([7be01d5](https://github.com/USERNAME/REPOSITORY_NAME/commits7be01d5b8f789576b8b74bf07824ed660d9339a1))
* normalization of URLs, formatting, stabilize inputHelper ([441c4df](https://github.com/USERNAME/REPOSITORY_NAME/commits441c4df4f6d3e26cf866418e5ddaea90bedd2c6a))
* only check browserLanguage if navigator is defined; fixes tests ([a1fa3b4](https://github.com/USERNAME/REPOSITORY_NAME/commitsa1fa3b494259d7cc8f4873af31d5c9a987cef972))
* only show 'newly created' if version number is 1 or unset ([1a78ecb](https://github.com/USERNAME/REPOSITORY_NAME/commits1a78ecb85806db67f6e51e39a0882c038589a058))
* only show fixmes on high zoom level (performance), add the option to remove a fixme ([2f5091a](https://github.com/USERNAME/REPOSITORY_NAME/commits2f5091a8cb484681d69db0ea6578dd7d26eacef7))
* only show website icon if a website is known ([46244b8](https://github.com/USERNAME/REPOSITORY_NAME/commits46244b8345c0005f3b3648a3379149d243cfe897))
* open correct menu if set in hash ([7a95334](https://github.com/USERNAME/REPOSITORY_NAME/commits7a953348824f6d601c16a0e632aac8353e0283fb))
* open settings again ([894d857](https://github.com/USERNAME/REPOSITORY_NAME/commits894d857cdc35864bbd778925ef84a042d6e04aaa))
* opening the popup if defined in the hash ([196d76d](https://github.com/USERNAME/REPOSITORY_NAME/commits196d76d9dc8736667956ad803cf5aed15f3b682e))
* ordering of baselayers ([8379a89](https://github.com/USERNAME/REPOSITORY_NAME/commits8379a894d0fc826e33d24d05b3e44852556a60b1))
* output tailwind into 'public/css/' instead of 'css/' ([a1f5032](https://github.com/USERNAME/REPOSITORY_NAME/commitsa1f50322321d878d823ac3fc70021683dbb6ab69))
* overpass feature source will redownload if the layers to download have changed ([bae4974](https://github.com/USERNAME/REPOSITORY_NAME/commitsbae49744d95e350f7b4c1b031b8e4a178879deea))
* overpass feature source will redownload if the layers to download have changed ([7ed5307](https://github.com/USERNAME/REPOSITORY_NAME/commits7ed53076fe206f0e260d329844eb1d8898206b01))
* pass along initial coordinates with the location input, prevents flashing of the ocean; fix [#1469](https://github.com/pietervdvn/MapComplete/issues/1469) ([790c276](https://github.com/USERNAME/REPOSITORY_NAME/commits790c2767e2dfbdca65f56ec95bf3cd69a98e4301))
* pass properties of snapping feature in newPointInput to render correctly ([c80085d](https://github.com/USERNAME/REPOSITORY_NAME/commitsc80085dfda58c9eb73fda466d8d81731095f1672))
* personal theme crashed due to unset defaultIcon ([6075b01](https://github.com/USERNAME/REPOSITORY_NAME/commits6075b016485808352ae84a12d5b872482693411a))
* png correctly outputs all markers now ([905f796](https://github.com/USERNAME/REPOSITORY_NAME/commits905f796baa26b8eedc177ce7f58353331e432535))
* precise location input picks correct location (and not the previous click) ([6d337e8](https://github.com/USERNAME/REPOSITORY_NAME/commits6d337e877589f49ed1b4b1dc60ae232dd6634342))
* preciseInputPicker will show correct icon if snapped or not snapped to a wall ([9870391](https://github.com/USERNAME/REPOSITORY_NAME/commits98703914ca48afefb614e1f19eb15663ab3280b7))
* presets will now also show if the layer doesn't have a name and is shown ([3f18ce7](https://github.com/USERNAME/REPOSITORY_NAME/commits3f18ce7fd387a4f60db5863cfa4f759eaf34edff))
* pressing enter would ignore input ([95c41d6](https://github.com/USERNAME/REPOSITORY_NAME/commits95c41d672ee7f5556645925d09610f0bf36ee1c0))
* probably fix black area outlines ([0bd9e1e](https://github.com/USERNAME/REPOSITORY_NAME/commits0bd9e1e667e659cf1b856e2aece94696089b9a20))
* properly add 'self' to connect-src ([441a9a5](https://github.com/USERNAME/REPOSITORY_NAME/commits441a9a5ed9e5b6a37356e0f15967f66799419572))
* properly add 'self' to connect-src (take 2) ([c823e74](https://github.com/USERNAME/REPOSITORY_NAME/commitsc823e745a3e0b562ddfdb489541182ed17449336))
* properly show hidden themes, drop 'custom theme generator'-button, drop 'professional services' button ([93adfd3](https://github.com/USERNAME/REPOSITORY_NAME/commits93adfd3da592cbf2f177123802f69a7c4fc72637))
* questions are shown if the condition is met, fix [#1630](https://github.com/pietervdvn/MapComplete/issues/1630) ([8500276](https://github.com/USERNAME/REPOSITORY_NAME/commits85002766a8d3b8d0d4ad31410437bad72ae7ca03))
* questions now appear when reselecting an item ([0c5e88d](https://github.com/USERNAME/REPOSITORY_NAME/commits0c5e88df7b5bdad82bf2e67b45aa817e29ca4fde))
* questions of charging stations are now shown separately again ([fe9afb4](https://github.com/USERNAME/REPOSITORY_NAME/commitsfe9afb415ff68c0b8e35fcb41fc68330a41a2b08))
* questions of charging stations are now shown separately again ([30af019](https://github.com/USERNAME/REPOSITORY_NAME/commits30af019cdfe8dea845e92645d0ec859e439a2b90))
* re-enable generate command ([13a35b9](https://github.com/USERNAME/REPOSITORY_NAME/commits13a35b94202ef775598fc7130b60b8839cef514a))
* re-enable reservation question ([cebd428](https://github.com/USERNAME/REPOSITORY_NAME/commitscebd428e9ec58b708637ae34055a5c689e3004cd))
* re-enable speed and heading in GPS-cursor ([ff47d75](https://github.com/USERNAME/REPOSITORY_NAME/commitsff47d75d41fc1fd4f576cd483150fe27cb3942d3))
* readd missing files ([7d802d4](https://github.com/USERNAME/REPOSITORY_NAME/commits7d802d418bd52bf29b147c245e548a7704e2d45f))
* redraw line layers on background change ([6e5fcde](https://github.com/USERNAME/REPOSITORY_NAME/commits6e5fcdef205d4616305d2bca39a1904d60954003))
* reinstantiate uploads ([871d511](https://github.com/USERNAME/REPOSITORY_NAME/commits871d511616ae48055095e8c3485db762adc6b140))
* remember map rotation setting ([c764839](https://github.com/USERNAME/REPOSITORY_NAME/commitsc764839fdcefff316b9458067e462f282a2fe7d5))
* remember previous, externally loaded themes ([b61c0a1](https://github.com/USERNAME/REPOSITORY_NAME/commitsb61c0a11807585a1832ff410be362e74ae2a810b))
* remove 'icons.defaults' from favourite layers, cleanup of various small typing errors ([e8569ec](https://github.com/USERNAME/REPOSITORY_NAME/commitse8569ec5404e632ebae0c71b040c1d9a9b891583))
* remove all html-attributes from shortDescriptions in the theme overview ([39572f4](https://github.com/USERNAME/REPOSITORY_NAME/commits39572f4767f270a4a5a40d8973ae9824ac3a43d1))
* remove empty license files, fix [#1135](https://github.com/pietervdvn/MapComplete/issues/1135) ([2eabfea](https://github.com/USERNAME/REPOSITORY_NAME/commits2eabfea8af22a3810487cdacd68d850f4432e624))
* remove ghost bike translations from translation files and resync them, should fix the build ([0487497](https://github.com/USERNAME/REPOSITORY_NAME/commits0487497e17ace04d381d2c9d43b02f8032874e2f))
* Remove isOpen from defaults ([11b8c61](https://github.com/USERNAME/REPOSITORY_NAME/commits11b8c619c165f6d66fed03061ad9afa052a7a096))
* remove no longer needed translation ([0e893f7](https://github.com/USERNAME/REPOSITORY_NAME/commits0e893f7903d68f37936c9b87883ffdc31b9ff088))
* remove no longer needed translations ([3c74a94](https://github.com/USERNAME/REPOSITORY_NAME/commits3c74a94eee676a8ff0fc2b0b85f1bf8d7487d216))
* remove trailing ';' for opening hours, as spotted by Midgard ([36b086e](https://github.com/USERNAME/REPOSITORY_NAME/commits36b086e4141e70253e68aec59d099638d46d14af))
* remove unneeded translation download, fix PDF-export ([1930f7b](https://github.com/USERNAME/REPOSITORY_NAME/commits1930f7bb53f4d477c2529471b478db77ddcc012b))
* remove unneeded URL parameter ([365d573](https://github.com/USERNAME/REPOSITORY_NAME/commits365d573b7c0d36bfa675cc637e6223abe770f3a0))
* remove unused property ([99b0135](https://github.com/USERNAME/REPOSITORY_NAME/commits99b0135fa9b44639189a1c9e690cf5829010c6e7))
* rendering of 'inline' was not dynamic ([60d825d](https://github.com/USERNAME/REPOSITORY_NAME/commits60d825de3c94afad79351f492c691af3d2109f60))
* rendering of indoor room icons ([6235e23](https://github.com/USERNAME/REPOSITORY_NAME/commits6235e231922b64adba86b012422175347a9887c1))
* replace all mentions of 'mapcomplete.osm.be' with 'mapcomplete.org' ([7321004](https://github.com/USERNAME/REPOSITORY_NAME/commits7321004c19212b0849394b9d541583e52e4ec5e6))
* reset translations ([ad952fc](https://github.com/USERNAME/REPOSITORY_NAME/commitsad952fcaf284b1669cee4657389cf36a52ee334c))
* resize svgs ([89186c8](https://github.com/USERNAME/REPOSITORY_NAME/commits89186c8610185e56bf9afa78b2765c45b2a939bd))
* restore loading of custom themes ([bcb2ecf](https://github.com/USERNAME/REPOSITORY_NAME/commitsbcb2ecf6ab6c372cd41dd79780b027c79cb4a49e))
* reviews need an uncertainty ([bc96288](https://github.com/USERNAME/REPOSITORY_NAME/commitsbc96288d3d75f24fb12620d050f472029c5df135))
* rotation of the GPS-marker ([bbc7698](https://github.com/USERNAME/REPOSITORY_NAME/commitsbbc7698b1281ad654c00c54bf58b9de7ba1e71e6))
* safari-specific fixes ([059ef2c](https://github.com/USERNAME/REPOSITORY_NAME/commits059ef2c1bc2ea5fb377a0f1e253652c0c243e250))
* schemaBasedArray ([a7599f6](https://github.com/USERNAME/REPOSITORY_NAME/commitsa7599f6d7f5a061cb1971ee8170f9f039ea2e2de))
* set share capability to 'no' if running from console, fixes tests ([af7bc0f](https://github.com/USERNAME/REPOSITORY_NAME/commitsaf7bc0f7ce686147608256e1c5dd0a9d24388945))
* setting the language does not overwrite the user setting anymore ([c6283ac](https://github.com/USERNAME/REPOSITORY_NAME/commitsc6283ac7205f69c1a42e8cf16e5f4f1ab2c239f8))
* share button ([84cbd2f](https://github.com/USERNAME/REPOSITORY_NAME/commits84cbd2fbc00d3d9e386a3b485dd4fa61c8000722))
* show add new point fullscreen again ([aad31f6](https://github.com/USERNAME/REPOSITORY_NAME/commitsaad31f649e733d108c63297aa6d25bf87ac73c34))
* show preferred languages (according to OSM) in usersettings ([0ea103f](https://github.com/USERNAME/REPOSITORY_NAME/commits0ea103f24780ef2c6ba191cbd4891716bb2d86f6))
* show tags that will be applied if setting is 'full' ([0b82661](https://github.com/USERNAME/REPOSITORY_NAME/commits0b826612e93c0b120f99b6927c57c13b60c2835f))
* show tags that will be deleted with strikethrough in TagHint ([15a481f](https://github.com/USERNAME/REPOSITORY_NAME/commits15a481f864b4afb7b650fd150f0ce7d46c9d1e78))
* size of new element picker map ([#1701](https://github.com/pietervdvn/MapComplete/issues/1701)), add debug info about GPS ([9407ed3](https://github.com/USERNAME/REPOSITORY_NAME/commits9407ed35b109660a9b23c2b71fd15f3ecf1dc0d0))
* small bug in script ([795d6d2](https://github.com/USERNAME/REPOSITORY_NAME/commits795d6d2e072d13c1d64259ac8ff960d618c2deba))
* small CSS fix ([1b8970b](https://github.com/USERNAME/REPOSITORY_NAME/commits1b8970b34aae337edfe5567315cc36319add1ff7))
* SPDX-compliance ([6c4b464](https://github.com/USERNAME/REPOSITORY_NAME/commits6c4b464f14ed2851980da34e12df355cb8137ba7))
* special loginbutton now actually works ([6a4def6](https://github.com/USERNAME/REPOSITORY_NAME/commits6a4def67ca97b55beb26445a0ddb713149527cc5))
* stabilize change injector ([efdff63](https://github.com/USERNAME/REPOSITORY_NAME/commitsefdff6335f5075f74156b5b1258ae69ab058705b))
* stabilize opening hours, make delete clickable again ([cc60d2a](https://github.com/USERNAME/REPOSITORY_NAME/commitscc60d2a5fbae3a14d63aa859fa02e2b09e1e48f9))
* stabilize rendering of linelayers ([055e5a8](https://github.com/USERNAME/REPOSITORY_NAME/commits055e5a801b60276cdfcf31870fae29e6af30521b))
* style issue, types ([5932dc7](https://github.com/USERNAME/REPOSITORY_NAME/commits5932dc7ad4b532c45d6e6bff95f46f6cb26645b2))
* style of tabbedGroup-elements needed an 'important' to work in production ([5a2e54b](https://github.com/USERNAME/REPOSITORY_NAME/commits5a2e54b00a86b4ac0f91b69aa55ff3c36939e8ab))
* style tweaks to link feature ([bd71645](https://github.com/USERNAME/REPOSITORY_NAME/commitsbd71645c04e819a28c355da5c898293092b51068))
* styling issues; refactoring: remove 'SearchAndGo' ([0e81b65](https://github.com/USERNAME/REPOSITORY_NAME/commits0e81b653631a97699ba07ce5d34b61bc4422a5d1))
* styling of OH input, fix [#1489](https://github.com/pietervdvn/MapComplete/issues/1489) ([064f875](https://github.com/USERNAME/REPOSITORY_NAME/commits064f87537f450e40b76d936d7793ea9036b2b181))
* styling of PH-input in OpeningHoursInput, fix [#1422](https://github.com/pietervdvn/MapComplete/issues/1422) ([a9c25d3](https://github.com/USERNAME/REPOSITORY_NAME/commitsa9c25d378a709e3ac7b4a76919ae10cf405dacec))
* substitute name ([408e782](https://github.com/USERNAME/REPOSITORY_NAME/commits408e7826269dc30d97f89e6e1fd097dae69b7923))
* substituteKeys works correctly if newline is in the text, fix 'send email to report broken'-button by porting it to svelte ([b4f65bf](https://github.com/USERNAME/REPOSITORY_NAME/commitsb4f65bf2f7ce2a6993906076353acc11a1d64d94))
* subtleLink should not open in a new tab ([61c417c](https://github.com/USERNAME/REPOSITORY_NAME/commits61c417c546e828dbed2356c35eebfe4cf2ef403d))
* Support contact:email and contact:phone in icons ([7bcefe5](https://github.com/USERNAME/REPOSITORY_NAME/commits7bcefe527ce080b3f7b7c48fdd1a828289b126c3))
* svg image generation script ([f9b1e9b](https://github.com/USERNAME/REPOSITORY_NAME/commitsf9b1e9b2de8f4aa657272d714385c1c7fbfdb3b3))
* temporarily only warn for incomplete translations ([adb5d89](https://github.com/USERNAME/REPOSITORY_NAME/commitsadb5d892fb39cdf63ea65d95ef5079f0efed6324))
* tests ([238de89](https://github.com/USERNAME/REPOSITORY_NAME/commits238de89ad54fd0c8c0d4bf75f49282d7921f21a2))
* tests ([841be16](https://github.com/USERNAME/REPOSITORY_NAME/commits841be16dffd8219713a1bc00b9a8409195a8f82d))
* tests ([1d54356](https://github.com/USERNAME/REPOSITORY_NAME/commits1d543563d702f6af424e1df041191632126ed805))
* tests ([2a73c43](https://github.com/USERNAME/REPOSITORY_NAME/commits2a73c43a5fc652f7d91c8d89cf47d0ce8853ee62))
* the search bar on the theme index was not clickable on wide screens as the 'centermessage' hovered over it invisibly ([af7672a](https://github.com/USERNAME/REPOSITORY_NAME/commitsaf7672a0e00de4e3d75a85678b4528093515fb7e))
* theme compilation ([86d0de3](https://github.com/USERNAME/REPOSITORY_NAME/commits86d0de380644c92fe90f4dd87aa4399074fdc42e))
* **themes:** remove 'unkown' mapping from hydrants, the unkown case is handled by MapComplete ([4850e50](https://github.com/USERNAME/REPOSITORY_NAME/commits4850e5094a49a16d3975795fd1f25a81f2e13a5a))
* turn favourites black again, sync them globally ([14594b2](https://github.com/USERNAME/REPOSITORY_NAME/commits14594b286dd2278bc64ed27f0305b76596d7e190))
* tweaking addNewPoint-flow ([d0e0abd](https://github.com/USERNAME/REPOSITORY_NAME/commitsd0e0abdece560799a9770b74d0992c42ebe89ed6))
* typo ([929093d](https://github.com/USERNAME/REPOSITORY_NAME/commits929093d36f13ab1861d533f4d93152a7ddd1e6dc))
* typo ([2671d01](https://github.com/USERNAME/REPOSITORY_NAME/commits2671d0158983c7befb9f5c8d3e91544a50408c6b))
* typo ([752de10](https://github.com/USERNAME/REPOSITORY_NAME/commits752de107ab6a50f8e513b0c7307b44dc6094d974))
* typo ([8531571](https://github.com/USERNAME/REPOSITORY_NAME/commits8531571c7be653339d752f953a8725d94eec692c))
* typo ([de99f56](https://github.com/USERNAME/REPOSITORY_NAME/commitsde99f56ca8fe34e361a7c6345d147f8295293f57))
* typo ([3a25106](https://github.com/USERNAME/REPOSITORY_NAME/commits3a25106a5ab7bd958cfe731d8e1e959b5b07b23e))
* typo in charging_station.protojson ([21d01a4](https://github.com/USERNAME/REPOSITORY_NAME/commits21d01a46f9164a872145c03fe845233c6cd47f8b))
* typo in elevator.json ([374a4eb](https://github.com/USERNAME/REPOSITORY_NAME/commits374a4eb22211ecfbe8a04569d89b8236f109b8ed))
* typo in filter ([366577f](https://github.com/USERNAME/REPOSITORY_NAME/commits366577f70b40765b3e10ccae222193ca07cae4bb))
* typo in tag ([a903112](https://github.com/USERNAME/REPOSITORY_NAME/commitsa9031129d3dddfdd0ab1d2d83d371b872a0d5180))
* **typo:** s/bick_wal/brick_wall/ ([753efef](https://github.com/USERNAME/REPOSITORY_NAME/commits753efef38f1f1a4f731c0c66408c7adddb26a967))
* undo accidental changes, fix saving preferences ([ff3a7f8](https://github.com/USERNAME/REPOSITORY_NAME/commitsff3a7f8f4372d46b0aba61aa12115da4207f2331))
* units which used a 'string'-validator might not detect the actual denomination. They have now been forbidden and fixed ([7b497f9](https://github.com/USERNAME/REPOSITORY_NAME/commits7b497f991d788c991457f1167d472a77f2789cdc))
* unselect layer, prevents that 'lastClick'-popup opens on map click ([63ffa11](https://github.com/USERNAME/REPOSITORY_NAME/commits63ffa11238766962cab6b1c8cedcd0153504d45e))
* update and simplification of sharescreen, rename some feature switches, remove some no longer relevant feature switches ([96d0367](https://github.com/USERNAME/REPOSITORY_NAME/commits96d036781f55987732629355be118373c363830d))
* upload flow deals better with point reuse: it actually opens the feature now ([c14cbc9](https://github.com/USERNAME/REPOSITORY_NAME/commitsc14cbc9fe95bf1d2432ea7290cae0d0f7a9b6ada))
* uploads were broken ([efd6b30](https://github.com/USERNAME/REPOSITORY_NAME/commitsefd6b30e1b41024ee4b7c0f6cf69a49f87f5da69))
* URL-parameter language disables the language picker, fix [#1506](https://github.com/pietervdvn/MapComplete/issues/1506) ([3ca8ba1](https://github.com/USERNAME/REPOSITORY_NAME/commits3ca8ba18fd6a1569214f5d6298eca291cb8ceefc))
* URL-parameter language disables the language picker, fix [#1506](https://github.com/pietervdvn/MapComplete/issues/1506) ([2f5c89f](https://github.com/USERNAME/REPOSITORY_NAME/commits2f5c89f8c5a7aa7adbe83d1b9cf98e198f9f1aab))
* use api.openstreetmap.org on many places, fix [#1573](https://github.com/pietervdvn/MapComplete/issues/1573) ([8fccf78](https://github.com/USERNAME/REPOSITORY_NAME/commits8fccf784786074e22a4d437dc8a38c58bf54c375))
* use correct backend address (including www.) ([c320239](https://github.com/USERNAME/REPOSITORY_NAME/commitsc320239610f15083d1d050f17e337780621f7dc3))
* use correct branch to deploy ([9c0dac2](https://github.com/USERNAME/REPOSITORY_NAME/commits9c0dac28ad0604026936cc68c5238927978b250a))
* use correct relocation icon again ([cdb1bb2](https://github.com/USERNAME/REPOSITORY_NAME/commitscdb1bb23b8e5df8bd1f2e0732ff14f3bd55935f5))
* use correct snapping ([ec2e0e1](https://github.com/USERNAME/REPOSITORY_NAME/commitsec2e0e1de168f9f4551f86ff73b070a6e4ccdd77))
* use https for extractGraph endpoint ([f89123d](https://github.com/USERNAME/REPOSITORY_NAME/commitsf89123d318ebb24553b842884e0aad3b9adf6570))
* use proper circle for bench and artwork ([e2a56f5](https://github.com/USERNAME/REPOSITORY_NAME/commitse2a56f5e5cc469c95974625f561a4a5229b5cb9a))
* use proper selected element ([dbff953](https://github.com/USERNAME/REPOSITORY_NAME/commitsdbff95309642178dcccb4a0a365a263c722c5a96))
* use theme.html?layout= instead of layout.html if a local deploy is detected ([db67600](https://github.com/USERNAME/REPOSITORY_NAME/commitsdb6760015f69239dc51cc47c866635927cd9dadf))
* use translated value for community index tab ([a3a7c53](https://github.com/USERNAME/REPOSITORY_NAME/commitsa3a7c536fbce04698a05847da429d1bacc851aad))
* use translated value for community index tab ([22ee806](https://github.com/USERNAME/REPOSITORY_NAME/commits22ee806090a8679ea2951d84af47e4de8314925c))
* use www.openstreetmap.org again, it doesnt work ([580b58e](https://github.com/USERNAME/REPOSITORY_NAME/commits580b58e86a974432b068b073a047c22864621126))
### Theme improvements
* a few improvements to velopark ([e7a5712](https://github.com/USERNAME/REPOSITORY_NAME/commitse7a57125d797fdf3c31c66c1e0c54dfc5dc5a304))
* active 'browse and link streetview' on all themes ([eb2a582](https://github.com/USERNAME/REPOSITORY_NAME/commitseb2a582d4910edda5e8dd76d229c0637bc5ac4a5))
* Add 'access=permissive' to charging stations, fixes [#1255](https://github.com/pietervdvn/MapComplete/issues/1255) ([cc70e09](https://github.com/USERNAME/REPOSITORY_NAME/commitscc70e09e11f55c62276fe9fcc5cf4e9033ccc6f5))
* add 'allowMove' everywhere, make 'allowMove' obligated, see [#2121](https://github.com/pietervdvn/MapComplete/issues/2121) ([29d52e0](https://github.com/USERNAME/REPOSITORY_NAME/commits29d52e0fc69f16477fbfd6f5c08900890626f0be))
* add 'artwork' questions to drinking water fountains ([def640f](https://github.com/USERNAME/REPOSITORY_NAME/commitsdef640fb1c97c581e4688c8c0a50f4e295d9458b))
* add 'binding'-service question to copyshops ([7b1ca43](https://github.com/USERNAME/REPOSITORY_NAME/commits7b1ca43266f596c9b9b40a3a86c0f5cf6d213a3e))
* add 'fine-gravel' as option to sport-pitches ([679e371](https://github.com/USERNAME/REPOSITORY_NAME/commits679e371bd470976a41327494004054548e120401))
* add 'hacklab' as option to hackerspaces ([665cd3b](https://github.com/USERNAME/REPOSITORY_NAME/commits665cd3b0dd3bd2ad91c601554417cfec0eec54a2))
* add 'hoops' question to basketball pitches ([4df9632](https://github.com/USERNAME/REPOSITORY_NAME/commits4df9632d7c7093511b6e3b2349ee5d2fd99cb681))
* add 'link' as builtin, available Icon ([7872f22](https://github.com/USERNAME/REPOSITORY_NAME/commits7872f221512797ee82ea1e92455326baaa9874ab))
* add 'lock' and 'key' icon to toilets, fix [#2094](https://github.com/pietervdvn/MapComplete/issues/2094) ([577b596](https://github.com/USERNAME/REPOSITORY_NAME/commits577b596e7a8cdc2ea4cbd97c401422ee0ad06652))
* Add 'open_now' filter to bike-shop ([aa6902a](https://github.com/USERNAME/REPOSITORY_NAME/commitsaa6902a25c4b27ef9424d0cdfb68a83f44ec7405))
* add 'pedagogy', fix [#1839](https://github.com/pietervdvn/MapComplete/issues/1839) ([4644b6a](https://github.com/USERNAME/REPOSITORY_NAME/commits4644b6ae550fa53c042978317484f9a99eafe8c7))
* add 'skateboard' as sport pitch option ([f20219c](https://github.com/USERNAME/REPOSITORY_NAME/commitsf20219cf37711b42e8bf1d4a4a1c0379d7d8df0e))
* add 'website'-button which shows up by default if a website is known ([7c0d339](https://github.com/USERNAME/REPOSITORY_NAME/commits7c0d339976fb26a9fc9ab74a540c7d5b7d640f80))
* add ALPR-cameras to surveillance theme ([d1e91ee](https://github.com/USERNAME/REPOSITORY_NAME/commitsd1e91ee2f98936871941e4b7cd035ee4f1e35bbd))
* add ALPR-cameras to surveillance theme ([97236c8](https://github.com/USERNAME/REPOSITORY_NAME/commits97236c80a99686a1dc0c296bb4a730bc595884a5))
* add animal types to animal_shelter, include animal_shelter in pets, generate licenses, fix cycle_highways.json ([3968a1e](https://github.com/USERNAME/REPOSITORY_NAME/commits3968a1e841cef10e5fac08b7a2c8e6b685a4f07c))
* add animal_shelter, created by the studio ([c4d4a57](https://github.com/USERNAME/REPOSITORY_NAME/commitsc4d4a57a0804776c2eabb7cd7c11e269bac101d8))
* add atm-option to postoffice, add postoffices to ATM theme, fix [#1551](https://github.com/pietervdvn/MapComplete/issues/1551) ([c4a9fa8](https://github.com/USERNAME/REPOSITORY_NAME/commitsc4a9fa81f23ec8a5dcc685b6c42b9e1208337818))
* add baby icon to changing table question ([1b5a0a2](https://github.com/USERNAME/REPOSITORY_NAME/commits1b5a0a2a853237e9d51298f5e1b17c69afaafa71))
* Add badminton fields to filters ([b60a3aa](https://github.com/USERNAME/REPOSITORY_NAME/commitsb60a3aa5684d58e9fec146b06fe2d2993eafd72e))
* add before text on correct location ([6a2e372](https://github.com/USERNAME/REPOSITORY_NAME/commits6a2e3720622e404089c243dc1aa7e7ab282ba2f2))
* add benches on playground theme ([54a9edc](https://github.com/USERNAME/REPOSITORY_NAME/commits54a9edc687667372d0097fb51efb7b904005c9de))
* add bicycle self-repair workshops to the map (WIP) ([c11d7af](https://github.com/USERNAME/REPOSITORY_NAME/commitsc11d7af17531cf381ce03e37765c2e0f7efd1745))
* add camp site ([cfa1c28](https://github.com/USERNAME/REPOSITORY_NAME/commitscfa1c28789d2056e6b8ad7483360a007c639d73c))
* add cargo bike option to bicycle rental, fix [#2016](https://github.com/pietervdvn/MapComplete/issues/2016) ([b98aaff](https://github.com/USERNAME/REPOSITORY_NAME/commitsb98aaff8101255138c10704d2a02f9226b0fa7ec))
* add charge to bike_parking ([ed96859](https://github.com/USERNAME/REPOSITORY_NAME/commitsed96859233a921cbfc61046106b9202d40bbde6c))
* add compile time check for 'sameAs'-filters that the referenced layer actually exists ([e188b96](https://github.com/USERNAME/REPOSITORY_NAME/commitse188b9656122dd3f0a4cda55352bf81dad6dbc65))
* add condition that hoops are only asked on basketball courts, fix [#1577](https://github.com/pietervdvn/MapComplete/issues/1577) ([fb6f7ee](https://github.com/USERNAME/REPOSITORY_NAME/commitsfb6f7ee191554816581c955cfdfbb1a932981c77))
* add conveying as condition for stairs ([f95f631](https://github.com/USERNAME/REPOSITORY_NAME/commitsf95f631045e2a83424a6ac7ef3d607fcba18cc6f))
* add correct title for cafe, nightclub and bar if no name is present, fix [#1704](https://github.com/pietervdvn/MapComplete/issues/1704) ([0129845](https://github.com/USERNAME/REPOSITORY_NAME/commits0129845d22f028b213af59e57014ce8962b76327))
* add currency type which does some reformatting ([d40474d](https://github.com/USERNAME/REPOSITORY_NAME/commitsd40474d47e0b5ded963df2c4e76c6911de63dbca))
* add currently open badge ([d9d330e](https://github.com/USERNAME/REPOSITORY_NAME/commitsd9d330e91221fac741120c7e2cb0b394d0871406))
* add delete to banks ([68cada0](https://github.com/USERNAME/REPOSITORY_NAME/commits68cada0a0d8f7f57b2ed43eb459680764b2b3070))
* add dog icon into title-icons, add dog filter, see [#212](https://github.com/pietervdvn/MapComplete/issues/212) ([7e0120d](https://github.com/USERNAME/REPOSITORY_NAME/commits7e0120d0e8948510db1eb0c17090900127dc8ed8))
* add extra check so that in a mapping cannot override the , fix two such instances ([56ea116](https://github.com/USERNAME/REPOSITORY_NAME/commits56ea1163bb7c272cec717076da452ba069e82b3c))
* add extra questions to 'map' layer based on custom theme ([10e0e27](https://github.com/USERNAME/REPOSITORY_NAME/commits10e0e277787f95e4da8b075edd308300dd6b0256))
* add filter for vegetable oil to fritures theme ([721a930](https://github.com/USERNAME/REPOSITORY_NAME/commits721a930d76fcd4fedada4044f1c6b2c6802cd022))
* add filters for 'wifi' and 'electricity' ([af2c6f4](https://github.com/USERNAME/REPOSITORY_NAME/commitsaf2c6f47829dd91e5fa0ac4dad2f23e18ebf1d3f))
* add fine_gravel as option for playground surface ([d8be0ac](https://github.com/USERNAME/REPOSITORY_NAME/commitsd8be0acdfef8a0a7f349d152abadf3e394c0145f))
* add first version of ski theme ([8f25006](https://github.com/USERNAME/REPOSITORY_NAME/commits8f250069988ea8e1b7f25e29db4e287200d354b8))
* add guidepost layer ([da39dde](https://github.com/USERNAME/REPOSITORY_NAME/commitsda39dde7b699e576e79eb5781933146fa9747ace))
* add guidepost layer ([a06e513](https://github.com/USERNAME/REPOSITORY_NAME/commitsa06e513c4f5a662e6d09908440f6b3394addf483))
* add guidepost theme ([ad239b2](https://github.com/USERNAME/REPOSITORY_NAME/commitsad239b230fd57233f377266dd68b15011136bbaa))
* add guideposts to climbing theme ([a96a214](https://github.com/USERNAME/REPOSITORY_NAME/commitsa96a214c03b3438f9ccf96f7c37a2e842ec224e1))
* add hostel, cleanup of hotel ([d167fe7](https://github.com/USERNAME/REPOSITORY_NAME/commitsd167fe77232b502ccef4ee051c8d73f948100dd0))
* add hostel, cleanup of hotel ([8e9ae05](https://github.com/USERNAME/REPOSITORY_NAME/commits8e9ae0529b95b8736ad6a2cabf9927a3a27e4c0c))
* add ice cream parlors ([69a7c9e](https://github.com/USERNAME/REPOSITORY_NAME/commits69a7c9efa3eb29c32f0256b1a956e9846cdf5260))
* add icons to access question in toilets ([2ba461d](https://github.com/USERNAME/REPOSITORY_NAME/commits2ba461d9578b515b23ff25a8a99d9a2b03779653))
* add icons to question ([246b163](https://github.com/USERNAME/REPOSITORY_NAME/commits246b16317d93b8e2effe9b41f7ed8c362a61cff6))
* add icons, add 'auto'-title-icons ([2c662c9](https://github.com/USERNAME/REPOSITORY_NAME/commits2c662c957860144a927260504ca30795f9249238))
* Add internet questions to hackerspace, fix [#1856](https://github.com/pietervdvn/MapComplete/issues/1856) ([c870544](https://github.com/USERNAME/REPOSITORY_NAME/commitsc870544d857a1c0f3f13e04da78db1a00f5e5342))
* add keycutting service tags ([d8ce6f0](https://github.com/USERNAME/REPOSITORY_NAME/commitsd8ce6f0da5887724778c03ea554add5fd5be16cd))
* add label support to questions.json; add opening hours for hospitals ([41fdeb9](https://github.com/USERNAME/REPOSITORY_NAME/commits41fdeb9cb5c664ca604da1f89f2724c0de3b1304))
* add maxstay for bicycle parkings ([a71ed5d](https://github.com/USERNAME/REPOSITORY_NAME/commitsa71ed5d53e0b238713cdd8741c7b05e9a9568c55))
* add memorial layer, use 'subject' instead of 'name' for ghost bikes ([a57dbe0](https://github.com/USERNAME/REPOSITORY_NAME/commitsa57dbe09d60734785420c4502699fcb6d89c6033))
* add memorials to artwork on high zoom ([29c5b88](https://github.com/USERNAME/REPOSITORY_NAME/commits29c5b884c404c14258dd116921990923c9a89181))
* add metal as material option ([6420b90](https://github.com/USERNAME/REPOSITORY_NAME/commits6420b906e055f5572d093e18febdbe5dba325bce))
* add minzoom to cafe_pub ([e2d3a71](https://github.com/USERNAME/REPOSITORY_NAME/commitse2d3a71c5b3a15b5a21db112baaf5a13dec55a3c))
* add minzoom to ski_piste and aerialway, fix [#1876](https://github.com/pietervdvn/MapComplete/issues/1876) ([d7982bf](https://github.com/USERNAME/REPOSITORY_NAME/commitsd7982bfd3e92a863e33e9154b2c9c4044cdb4951))
* add missing assets ([bc826be](https://github.com/USERNAME/REPOSITORY_NAME/commitsbc826bebed2c0f073da3163994be818d1c41c6f5))
* Add more memorial types, add freeform option, fix [#1824](https://github.com/pietervdvn/MapComplete/issues/1824) ([b0d0436](https://github.com/USERNAME/REPOSITORY_NAME/commitsb0d0436ebe79a44c1bfc6880ecbef66f85e159be))
* add more options for support in advertisement, add presets ([c26225c](https://github.com/USERNAME/REPOSITORY_NAME/commitsc26225ccf11987f8a2cbdf45820a2310428cf1c0))
* add more questions about drinking water ([9fabab3](https://github.com/USERNAME/REPOSITORY_NAME/commits9fabab3588a7cdc3d04bcbae19b6868694bbc95f))
* add mountain rescue stations to the ski map ([04509bc](https://github.com/USERNAME/REPOSITORY_NAME/commits04509bc3e7783f55e593679ddfba2263ecf7f3de))
* add name and title to assembly_point and disaster_response layers ([f087012](https://github.com/USERNAME/REPOSITORY_NAME/commitsf08701211632b8f8f35597d908160f8460934e04))
* add open love map, see https://github.com/thomersch/OpenLoveMap/issues/21 ([d6a55a5](https://github.com/USERNAME/REPOSITORY_NAME/commitsd6a55a5ee9ef03c0a813b0d95dffa42cb0b4955d))
* add operator question to bicycle parking ([ea00c71](https://github.com/USERNAME/REPOSITORY_NAME/commitsea00c717de78c06ded81fae56be1a05b8e50ae37))
* add OSM-carto again, fix [#1664](https://github.com/pietervdvn/MapComplete/issues/1664) ([376a683](https://github.com/USERNAME/REPOSITORY_NAME/commits376a683cce13921e644364c8342362f3a21b3ab3))
* add paid as option, fix [#2119](https://github.com/pietervdvn/MapComplete/issues/2119) ([a4018d8](https://github.com/USERNAME/REPOSITORY_NAME/commitsa4018d88b0f187b907c68a49dcfb496c0259bb91))
* add payment options and internet to climbing theme ([2337033](https://github.com/USERNAME/REPOSITORY_NAME/commits23370336e81fa865a62507bb6f4de5030ad48bb5))
* add payment options and internet to climbing theme ([1abcc76](https://github.com/USERNAME/REPOSITORY_NAME/commits1abcc766f98f27298eb82e70ad7c09520adb8377))
* add possibility to add an icon to 'render' (just like with mappings), add contact:mastodon support as general question, add mastodon question to hackerspaces ([03aafbe](https://github.com/USERNAME/REPOSITORY_NAME/commits03aafbe99c0d9f4fa5768d18e7bde093529ce93f))
* add possibility to enable terrain, some fixes to overlaymap and pitch control ([e3dec8a](https://github.com/USERNAME/REPOSITORY_NAME/commitse3dec8aafada699be3cddfc86aeb63938036e5c5))
* add proper 'image along way' possibility ([584fb3c](https://github.com/USERNAME/REPOSITORY_NAME/commits584fb3cb57e77ea4382fda152d8604ef8293f9b1))
* add question wether climbing ropes can be hired ([6425ad6](https://github.com/USERNAME/REPOSITORY_NAME/commits6425ad67e6a053e1b6cbbb038e0c544c0f07f10b))
* Add rubber;tartan surface to playgrounds, add checkdate to playgrounds, add tartan to sport pitches ([7859e7d](https://github.com/USERNAME/REPOSITORY_NAME/commits7859e7d06990666c1c40756795f993949abef434))
* add shoe repair services to the climbing map, add question if a shoemaker also repairs climbing shoes, add craft=shoemaker to shops theme ([3df5727](https://github.com/USERNAME/REPOSITORY_NAME/commits3df5727f40a29d190394c71cf99896261f78474d))
* add short description to velopark ([50e3c54](https://github.com/USERNAME/REPOSITORY_NAME/commits50e3c5483461cd085d3207fbd96f5b7fdfaebe57))
* add smoking to food-layer, fix [#1874](https://github.com/pietervdvn/MapComplete/issues/1874) ([f5a94c7](https://github.com/USERNAME/REPOSITORY_NAME/commitsf5a94c7b5f24c1846681f75f8f79bc1d870574c0))
* add some icons ([48df237](https://github.com/USERNAME/REPOSITORY_NAME/commits48df2379bf013006aad7e7bd68977e7a55a670d3))
* add speed_camera to surveillance theme, see [#1913](https://github.com/pietervdvn/MapComplete/issues/1913) ([9716bc5](https://github.com/USERNAME/REPOSITORY_NAME/commits9716bc5425967aa81b4885bff4063d8c0eebfd18))
* add Stamen Watercolor again, see [#1652](https://github.com/pietervdvn/MapComplete/issues/1652) ([d997c90](https://github.com/USERNAME/REPOSITORY_NAME/commitsd997c90352a0d70f2cd33108af4de16f58444868))
* add statistics on used version ([1a7acc8](https://github.com/USERNAME/REPOSITORY_NAME/commits1a7acc80c1933894aa71bdd9cdfc6bd6985f5a40))
* add sugar_free, gluten_free and lactose-free to shops- and food-layers ([b06784e](https://github.com/USERNAME/REPOSITORY_NAME/commitsb06784e7a06aaeb40a375210bc95538a73db9aed))
* add support for operator:email, mostly for velopark ([1c45f09](https://github.com/USERNAME/REPOSITORY_NAME/commits1c45f0963219f3aa743b2ddf9840e2d152b0fae5))
* add toilet questions into indoor theme ([8f93b0d](https://github.com/USERNAME/REPOSITORY_NAME/commits8f93b0d398aa16caa6e9167d96b02c7fc45182a4))
* add validation check if a mapping does not erase another mapping completely ([556f6d0](https://github.com/USERNAME/REPOSITORY_NAME/commits556f6d0b93aa7774b703e80590d2df1601d293c4))
* add validation for duplicate presets, fix [#1582](https://github.com/pietervdvn/MapComplete/issues/1582) ([2e8a331](https://github.com/USERNAME/REPOSITORY_NAME/commits2e8a3311e76c9065338ffce1388658269a05e261))
* add various services to hackerspaces and makerspaces, add icons, some fixes to make this work with expandRewrite ([8ceda1c](https://github.com/USERNAME/REPOSITORY_NAME/commits8ceda1cc5f7e549ccecc65b6469a7195de1022cc))
* add velopark import functionality ([4c5ebf0](https://github.com/USERNAME/REPOSITORY_NAME/commits4c5ebf05f5d818abd622bf9d8c8a96926e36ddd6))
* add velopark theme ([1c1cea7](https://github.com/USERNAME/REPOSITORY_NAME/commits1c1cea7f033ea19c74a6efb958a69a3a729bad3c))
* add warning if a tagRendering can be replaced by a direct value ([79e40d0](https://github.com/USERNAME/REPOSITORY_NAME/commits79e40d0fee2e40b32babc218a374095f6ca520a5))
* add wikipedia page for "subject:wikidata" on ghost bikes, specifically for the ghost bike of #Natenom ([d74cb00](https://github.com/USERNAME/REPOSITORY_NAME/commitsd74cb00df4fc55ca00082326da138b580fa39cc7))
* add year to units ([c8eef2c](https://github.com/USERNAME/REPOSITORY_NAME/commitsc8eef2c8f6866ded26276250d422bd4a97e5b08c))
* **advertising:** add (animated!) flag and screen icons ([090130d](https://github.com/USERNAME/REPOSITORY_NAME/commits090130d596bb5ab7d337c7c96a55b38ef6181231))
* **advertising:** boards are never animated ([b92e9b8](https://github.com/USERNAME/REPOSITORY_NAME/commitsb92e9b815da3e1b15c9859f6d4726bac09307b7b))
* **advertising:** Fix typos ([9e02c89](https://github.com/USERNAME/REPOSITORY_NAME/commits9e02c89fd5da5c7ad4623ed205ef610e4462b2a7))
* **advertising:** further refinements ([8127027](https://github.com/USERNAME/REPOSITORY_NAME/commits81270272518012cf2023be2888d2faa444ee012f))
* **advertising:** further refinements ([59eabc5](https://github.com/USERNAME/REPOSITORY_NAME/commits59eabc5daaa675880e1b684c3d8b4d3f0c1139ac))
* **advertising:** last icon ([3e72ba2](https://github.com/USERNAME/REPOSITORY_NAME/commits3e72ba2b464c819a09956fa22bb321ed68fe34a3))
* **advertising:** more icons, reordering of the questions ([7fc0770](https://github.com/USERNAME/REPOSITORY_NAME/commits7fc0770488ba99ea2d7aab658933d6e22c62cb3e))
* align iconbadge, fix [#1893](https://github.com/pietervdvn/MapComplete/issues/1893) ([ba098fc](https://github.com/USERNAME/REPOSITORY_NAME/commitsba098fc29ac4ea46b0ff19a918282b4f81fe8f10))
* allow multiple internet access types ([786b850](https://github.com/USERNAME/REPOSITORY_NAME/commits786b850dbeff9a92f761e65cd01a0e948140f37d))
* allow to add multiple changing table locations, see [#1756](https://github.com/pietervdvn/MapComplete/issues/1756) ([c62f7cc](https://github.com/USERNAME/REPOSITORY_NAME/commitsc62f7cce01da15ef3f123b95e08056ca5019b7c9))
* allow to add pictures to a 'shelter' ([39c079d](https://github.com/USERNAME/REPOSITORY_NAME/commits39c079db45aaadf98bf651d66d6bd88dbbe04bb2))
* Allow to delete tourism accomodation ([60eeab9](https://github.com/USERNAME/REPOSITORY_NAME/commits60eeab9aa79ab1a5fc65b7f5e6efb2ebb0b6e55e))
* allow to have a non-number type together with a unit ([4ccfe3e](https://github.com/USERNAME/REPOSITORY_NAME/commits4ccfe3efe446b407be1ca53d4ad2c3ee6fdde0b4))
* allow to move a shelter ([565dee8](https://github.com/USERNAME/REPOSITORY_NAME/commits565dee8854f605ea40570c0c82d225935e11dba0))
* allow to move and delete pharmacies ([5e95bd9](https://github.com/USERNAME/REPOSITORY_NAME/commits5e95bd99a2dcf424acbcad85aa96a3a36bd612a8))
* allow to move hydrants ([432f244](https://github.com/USERNAME/REPOSITORY_NAME/commits432f24456d75e131425f0f1fe0df15c448f593ef))
* also ask about menstrual products for toilet_at_amenity ([ae7cc95](https://github.com/USERNAME/REPOSITORY_NAME/commitsae7cc95727bc33c6d67a2ef24d2a2e0c2e3c3214))
* also show 'operator:website' and 'contact:website' as title icon if they are available ([8526f4e](https://github.com/USERNAME/REPOSITORY_NAME/commits8526f4e94140132c8abe880b93cbc45780f9686b))
* automatically derive source from presets if no source is given ([0689758](https://github.com/USERNAME/REPOSITORY_NAME/commits06897588be3e56570b973c8db08fce1e13b29c7b))
* automatically derive source from presets if no source is given ([8e18864](https://github.com/USERNAME/REPOSITORY_NAME/commits8e18864daa9d19c2d9ccc2eb6a8ee408e7038d5e))
* bench.json: decrease minzoom ([5b33d88](https://github.com/USERNAME/REPOSITORY_NAME/commits5b33d88ffbff285849d7bf5896df8e8e2e547cef))
* better support billboard on walls ([8816ad0](https://github.com/USERNAME/REPOSITORY_NAME/commits8816ad03ecaedfe248fff1b7b101a266a9a6f444))
* better support billboard on walls ([0a1c90b](https://github.com/USERNAME/REPOSITORY_NAME/commits0a1c90be9e1515b2f708e0f672b0732c7356101b))
* bicycle library: allow move, fix [#1768](https://github.com/pietervdvn/MapComplete/issues/1768) ([7ac84dd](https://github.com/USERNAME/REPOSITORY_NAME/commits7ac84dd675a68f47b6af0465e337561aa0dc9586))
* bicycle parking: add lockers as options, add operator:website (velopark features) ([22721cd](https://github.com/USERNAME/REPOSITORY_NAME/commits22721cd3ef604255bc88d5be995d0f2d65e68a83))
* change minzoom of second hand shops in circular economy ([0b2e878](https://github.com/USERNAME/REPOSITORY_NAME/commits0b2e878481e3cc32b7b37c8cdb28251daa1b02d7))
* Change text type ([c9751a3](https://github.com/USERNAME/REPOSITORY_NAME/commitsc9751a3eb570f1865966fa3861fac5ff5c761f1a))
* description is now a textarea ([0c1b5d1](https://github.com/USERNAME/REPOSITORY_NAME/commits0c1b5d1b6c0d12914845a19692670bd1931f532c))
* disable 'direction'-indicator for surveillance theme as it breaks selection, fix [#1458](https://github.com/pietervdvn/MapComplete/issues/1458) ([9e15353](https://github.com/USERNAME/REPOSITORY_NAME/commits9e15353588009e39cf4a8bc2569748f40759609a))
* disable 'disused' from delete config, delete less fast for shops but use softdeletion instead ([28e737e](https://github.com/USERNAME/REPOSITORY_NAME/commits28e737ed2eb6a3934fb650df9b1939a25f954d8c))
* disable maxspeed and cycleway question for pedestrian roads ([e580f55](https://github.com/USERNAME/REPOSITORY_NAME/commitse580f553197165d611258b8c68ed9f9a66ca42c4))
* don't count food for fritures ([98d441a](https://github.com/USERNAME/REPOSITORY_NAME/commits98d441a2602c360136db9f9cc883d2ef734137e5))
* don't enforce 'allowMove' on unofficial themes ([5b45e42](https://github.com/USERNAME/REPOSITORY_NAME/commits5b45e427a0185e224446aeecfe99e87d6077379a))
* don't inline text fields if they don't have text around them ([821ddcf](https://github.com/USERNAME/REPOSITORY_NAME/commits821ddcfaca11ca194b319bfa09f8b0a9fea01a41))
* don't show 'mark as unknown' if this would break the source-filter ([76a9a2e](https://github.com/USERNAME/REPOSITORY_NAME/commits76a9a2ee23dcf61097d33fcbe556df7a46d9a395))
* don't show favourite icon if not logged in ([b1d94b2](https://github.com/USERNAME/REPOSITORY_NAME/commitsb1d94b2121195a52ced59454b51844412b9018f3))
* don't show opening_hours_state title icon if seasonal is set and the item is closed due to seasonal restrictions ([1748e98](https://github.com/USERNAME/REPOSITORY_NAME/commits1748e98bfc714e147c12b8fc233432412ed186c2))
* don't use 'Yes' or 'No' as start ([f87e735](https://github.com/USERNAME/REPOSITORY_NAME/commitsf87e73596e65a12b7fb88456dfb21dcc1eb8a850))
* elevators: first ask if there is speech output/tactile writing before asking the relative languages ([8acaafe](https://github.com/USERNAME/REPOSITORY_NAME/commits8acaafe307826ac682f25eaa0b188278ca4056fe))
* enable 'guideposts' in nature theme ([94291de](https://github.com/USERNAME/REPOSITORY_NAME/commits94291de5a3451120b6abdb153ba57675949d3d5b))
* enable 'speciality'-filter in doctors, decrease minzoom ([4090a74](https://github.com/USERNAME/REPOSITORY_NAME/commits4090a7493253e2b5513307d013d0a0061394aed6))
* enable deletion of bike_cafes ([90c44cc](https://github.com/USERNAME/REPOSITORY_NAME/commits90c44cc8bdfb7b2447f1974ed94430e5b2fa3c6f))
* enable download functionality by default ([5504d49](https://github.com/USERNAME/REPOSITORY_NAME/commits5504d49d595fee66f0c43f3efbf6f130634497be))
* enable move on schools, tweak GRB for performance ([db98288](https://github.com/USERNAME/REPOSITORY_NAME/commitsdb982884a1eea2a6e37d67129256f9c6b192a841))
* enable reviews for climbing areas and gyms ([2a3a78b](https://github.com/USERNAME/REPOSITORY_NAME/commits2a3a78bc69eea38a83378f02717bc9fdc1cd5414))
* enable reviews on pharmacies-theme ([701f033](https://github.com/USERNAME/REPOSITORY_NAME/commits701f03397e0339cba98fc776f06b38ccb13511b2))
* enable snapping for facade gardens ([da68d36](https://github.com/USERNAME/REPOSITORY_NAME/commitsda68d365feab19a94ea85b2a756e3336bfb8b127))
* exclude 'advertising=no' from loading, fix [#1865](https://github.com/pietervdvn/MapComplete/issues/1865) ([eef9918](https://github.com/USERNAME/REPOSITORY_NAME/commitseef99186cfbc46b57a97d2df78c8ef9c69a4609b))
* exclude route relations from "toilets=yes". There are a few route relations with 'toilets' and those choke up MapComplete ([139b014](https://github.com/USERNAME/REPOSITORY_NAME/commits139b014c6c1f34fff08210c1c4915ea79534086c))
* explicitly set 'allowMove' for all layers, fix [#2121](https://github.com/pietervdvn/MapComplete/issues/2121) ([468b895](https://github.com/USERNAME/REPOSITORY_NAME/commits468b895302fff50bc68cbdf72998bc08590307d0))
* extract layers from camperssite ([82e6b2a](https://github.com/USERNAME/REPOSITORY_NAME/commits82e6b2af9b564117ebb5714b8a795b759ebf528d))
* extract layers from camperssite ([44f42ee](https://github.com/USERNAME/REPOSITORY_NAME/commits44f42ee2c946d3f37224ca41f603e9c907ed5214))
* first version of circular economy theme ([592be68](https://github.com/USERNAME/REPOSITORY_NAME/commits592be68f09b06f22d45d5d5c274c91315d1613f7))
* fix [#1362](https://github.com/pietervdvn/MapComplete/issues/1362) ([ff9ca5e](https://github.com/USERNAME/REPOSITORY_NAME/commitsff9ca5e5cd6abde6c578ae442fe0d06217015288))
* fix [#1866](https://github.com/pietervdvn/MapComplete/issues/1866) ([1cf7119](https://github.com/USERNAME/REPOSITORY_NAME/commits1cf71197f51646cfceb4b58267cf1bdd2223e12f))
* fix [#1910](https://github.com/pietervdvn/MapComplete/issues/1910) ([b484ea0](https://github.com/USERNAME/REPOSITORY_NAME/commitsb484ea005b6b91bad729b7b1923f71b8fc893870))
* fix badge, fix [#1894](https://github.com/pietervdvn/MapComplete/issues/1894) ([a2279ac](https://github.com/USERNAME/REPOSITORY_NAME/commitsa2279ac28bfb1d5dbc0ac47c2762a9104e4e54c5))
* fix calculated tags of climbing theme ([f800545](https://github.com/USERNAME/REPOSITORY_NAME/commitsf80054558fe8422c7c1dfa9e277bd772f157f436))
* fix compilation ([c300d90](https://github.com/USERNAME/REPOSITORY_NAME/commitsc300d901284dfbf05c5044da46e12ec8ca4469d1))
* fix conversion for legacy themes ([21c35fc](https://github.com/USERNAME/REPOSITORY_NAME/commits21c35fc2c56eea64d18ee0fc18d65b2cdb913c82))
* fix cycle rental which dissappears ([efce134](https://github.com/USERNAME/REPOSITORY_NAME/commitsefce134a6cc90d4c3794cac91fc0a9da10fdd3b1))
* fix cycle_highways ([61575a9](https://github.com/USERNAME/REPOSITORY_NAME/commits61575a9909d8c0206e45a8106ef369ef616f45d7))
* fix icon for shops layer ([d9d8c0a](https://github.com/USERNAME/REPOSITORY_NAME/commitsd9d8c0ad1f0af64f6d08364a6c64f59b748f001a))
* fix incorrect argument, might fix [#1881](https://github.com/pietervdvn/MapComplete/issues/1881) ([209cfe6](https://github.com/USERNAME/REPOSITORY_NAME/commits209cfe6b733b849e85854d7ab3eaf4987116226f))
* fix internet question ([b132590](https://github.com/USERNAME/REPOSITORY_NAME/commitsb13259083a8d7c3b42e4df618b88de06b00f1041))
* fix overrides, fix [#1705](https://github.com/pietervdvn/MapComplete/issues/1705) ([3334bfb](https://github.com/USERNAME/REPOSITORY_NAME/commits3334bfb8cae9a2c326764e7375829769ac96c400))
* fix rendering of charging station ([0c52051](https://github.com/USERNAME/REPOSITORY_NAME/commits0c5205136b1a18ee91df65de52e9e60f2036d3b7))
* fix some isCounted-typos ([20a462f](https://github.com/USERNAME/REPOSITORY_NAME/commits20a462fdf5683587e50b42171c109e87eb193422))
* fix titles and names for assembly points and disaster_response ([170c459](https://github.com/USERNAME/REPOSITORY_NAME/commits170c4592d13929810f6e822592cd1e2d1e83a1ac))
* fix typo in soft-deletion tag ([5f62712](https://github.com/USERNAME/REPOSITORY_NAME/commits5f627124e98e98f25e9e5a834f56e906237e0241))
* fix validation errors due to [#1779](https://github.com/pietervdvn/MapComplete/issues/1779) ([707d996](https://github.com/USERNAME/REPOSITORY_NAME/commits707d99619d7b5fa90891e93d5641f52715f04beb))
* fix: don't show irrelevant 'multilevel'-question anymore ([b5fca68](https://github.com/USERNAME/REPOSITORY_NAME/commitsb5fca68a82d529bd10f56ba0dd63d27ae11ea2a5))
* ghost signs: add wall-based artworks to be able to mark them as ghost sign and to avoid duplicates ([e68edeb](https://github.com/USERNAME/REPOSITORY_NAME/commitse68edeb29fa604daee0c7638999bcebab2fd7b11))
* ghost signs: add wall-based artworks to be able to mark them as ghost sign and to avoid duplicates ([8f95e85](https://github.com/USERNAME/REPOSITORY_NAME/commits8f95e8520a751ef9fef8cc7a8810322117c7b6c1))
* hackerspaces: more workshop types ([70fa180](https://github.com/USERNAME/REPOSITORY_NAME/commits70fa180b6a1e1a0db4e54f623797c05847b7face))
* Hide bike cleaning cost if we don't know if there is a bike cleaning service ([87aee9e](https://github.com/USERNAME/REPOSITORY_NAME/commits87aee9e2b72013e387fd3c196a9940bf477743c8))
* improve 'auto-type' special visualisation ([658db35](https://github.com/USERNAME/REPOSITORY_NAME/commits658db3561722ec5d220043969ed1154c9e7411af))
* improve 'tourism-accomodation', add many more categories as some people are using 'hotels' to also add other categories (see https://wiki.openstreetmap.org/wiki/Organised_Editing/Activities/Trziste_prace) ([53ffa06](https://github.com/USERNAME/REPOSITORY_NAME/commits53ffa06a49a670ff23e605595aea7919c84f20b5))
* improve 'tourism-accomodation', add many more categories as some people are using 'hotels' to also add other categories (see https://wiki.openstreetmap.org/wiki/Organised_Editing/Activities/Trziste_prace) ([bc54f79](https://github.com/USERNAME/REPOSITORY_NAME/commitsbc54f797d792ebeac4b043612df9682a1a4c79c6))
* improve ability of 'rewrite' config ([f015604](https://github.com/USERNAME/REPOSITORY_NAME/commitsf015604000e09b81625d8dc5617e7c999b27fc74))
* improve advertising theme, see [#1866](https://github.com/pietervdvn/MapComplete/issues/1866), translation reset for new presets ([05bba07](https://github.com/USERNAME/REPOSITORY_NAME/commits05bba071dc44897fe795974a39d472159cbaadd4))
* improve atm opening hours, add reviews to playgrounds ([9ce60b6](https://github.com/USERNAME/REPOSITORY_NAME/commits9ce60b6ffb175803fde11b9116a0e1390ade766c))
* improve benches ([9e10bf4](https://github.com/USERNAME/REPOSITORY_NAME/commits9e10bf421f9bcd1cadec10638eb520132c647c64))
* improve error messages ([6897b88](https://github.com/USERNAME/REPOSITORY_NAME/commits6897b888170399db9a5d4e649d89dee2f9d0b30f))
* improve favourite panel ([59090fd](https://github.com/USERNAME/REPOSITORY_NAME/commits59090fdb39a864b7d8b64a26fe35e98eacfa2121))
* improve information about indoor rooms ([47bf119](https://github.com/USERNAME/REPOSITORY_NAME/commits47bf1195bcc198446c35b31ebd7d446efde7dd9d))
* improve velopark usability ([c1003f8](https://github.com/USERNAME/REPOSITORY_NAME/commitsc1003f8fe79c4a2ce820d9764b51a4a25b6e7bbd))
* improvements to BBQ, different icons, add some questions, remove 'unknown'-options ([2db0b1a](https://github.com/USERNAME/REPOSITORY_NAME/commits2db0b1afcbbf7c8d8e6174080a1e62295c223e87))
* improvements to memorial theme ([59f56bd](https://github.com/USERNAME/REPOSITORY_NAME/commits59f56bd251c2523cb81ca07c74f9107c70560869))
* include love hotels in regular hotels theme (with a high minzoom) ([d48b8af](https://github.com/USERNAME/REPOSITORY_NAME/commitsd48b8aff922e3478a62ecc3e92f92b750e8eef8f))
* lint layers to use an array instead of a string for 'snapToLayers' ([d534842](https://github.com/USERNAME/REPOSITORY_NAME/commitsd534842d050f046ac5187ff8386c9edf052cdd23))
* make filters of public bookcase translatable ([7b3d07e](https://github.com/USERNAME/REPOSITORY_NAME/commits7b3d07e5c489c0d139543cb7e5481e522b435b12))
* make the selected note pulsate and have a different border when selected ([83fc189](https://github.com/USERNAME/REPOSITORY_NAME/commits83fc189fd332c0df2dc719a7ba676f3fad7cca32))
* more questions about climbing services ([3769bd1](https://github.com/USERNAME/REPOSITORY_NAME/commits3769bd1c4fc7976d8d980f049ca6a3ecbc8710f1))
* move all bike_shop questions into shops, reuse shops layer instead ([3c16e3d](https://github.com/USERNAME/REPOSITORY_NAME/commits3c16e3de686a903c1807d7a3a1397c6f350c8476))
* move some bicycle shop questions into the shops-layer so that those questions are asked there as well (and that both layers can be unified) ([6cd7828](https://github.com/USERNAME/REPOSITORY_NAME/commits6cd7828ed3576dd8abf36c24032f9ec1d4966684))
* move tagRenderings+ above leftover-questions ([f2f041f](https://github.com/USERNAME/REPOSITORY_NAME/commitsf2f041f9d0bfb557588ccd90b1d710498aa8edc0))
* only add rating-title-icon if 'review_list()' is used in the layer ([6c75553](https://github.com/USERNAME/REPOSITORY_NAME/commits6c75553f3fec7642c7bbb75d999781126a344065))
* phone validation now knows about some short-codes ([38b9523](https://github.com/USERNAME/REPOSITORY_NAME/commits38b9523b835b72bfe9f068b55015d8f7868951c9))
* pin more markers to new icon ([04ee3dc](https://github.com/USERNAME/REPOSITORY_NAME/commits04ee3dc32c7b1e8c6690a91624530309df65e813))
* properly show the name of the hospital ([9739973](https://github.com/USERNAME/REPOSITORY_NAME/commits9739973f2e9e1c98e0ae6ea58f55bf8588a9de14))
* re-enable terrain ([94bc6ee](https://github.com/USERNAME/REPOSITORY_NAME/commits94bc6ee31d36c56c31090ea07c7f2baecff99eb1))
* remove obsolete fields from drinking water theme ([66cc615](https://github.com/USERNAME/REPOSITORY_NAME/commits66cc615805246100634aaccd8426c59eec5c03ce))
* remove obsolete SOTM-events, fix [#1909](https://github.com/pietervdvn/MapComplete/issues/1909) ([5659dd8](https://github.com/USERNAME/REPOSITORY_NAME/commits5659dd8e8c2a1fbf596cf9fa2e3cb56ed2d95349))
* remove unneeded invalidValues ([4fe0c41](https://github.com/USERNAME/REPOSITORY_NAME/commits4fe0c41628ae0a9dc6985a10bb396ea96534dde9))
* show capacity:cargo_bike, allow to erase it ([58dfb93](https://github.com/USERNAME/REPOSITORY_NAME/commits58dfb93818e6f737b93c406b25bf4eb3c0572d7c))
* show keycutting service question ([5bcc617](https://github.com/USERNAME/REPOSITORY_NAME/commits5bcc617d22ce6596f48f8e68a21910cd744c4682))
* show maproulette marker in linking menu ([e327d38](https://github.com/USERNAME/REPOSITORY_NAME/commitse327d385d126864bb5e3ba17e3f3b2ff2fd7b5ae))
* show maproulette marker in linking menu ([ac6fdde](https://github.com/USERNAME/REPOSITORY_NAME/commitsac6fdde785ddf11b833501ac3de6c4a9bf84201d))
* show maproulette marker in linking menu ([8a4e2d8](https://github.com/USERNAME/REPOSITORY_NAME/commits8a4e2d8cb56c28b38ac03262dbfd76f874d3f2ef))
* show toilets only from zoomlevel >= 15 ([6760897](https://github.com/USERNAME/REPOSITORY_NAME/commits6760897a6f6427755b63c8cc7da37b9d39279083))
* small tweaks to fitness stations ([3f4410f](https://github.com/USERNAME/REPOSITORY_NAME/commits3f4410ff19e71c02e59df5fbe1ef77bcb2a53224))
* tweak zoomlevels ([303d3a0](https://github.com/USERNAME/REPOSITORY_NAME/commits303d3a0337afc388ed2158ab008a8a17684c6530))
* Update climbing_route.json: add snap to layer ([193b8b4](https://github.com/USERNAME/REPOSITORY_NAME/commits193b8b4672405abe0e54d3143c9faec88733e450))
* Update climbing.json: add layers ([bb9b1df](https://github.com/USERNAME/REPOSITORY_NAME/commitsbb9b1df4e0b26fff0a0e2e513b544c910f046f86))
* update some default background layers ([a855840](https://github.com/USERNAME/REPOSITORY_NAME/commitsa85584040d436012e3c68fe85e54e490529388db))
* update tagging of climbing shoe repair ([d1aa751](https://github.com/USERNAME/REPOSITORY_NAME/commitsd1aa751e1831cd1090ea5a738462b052fad2a4d9))
* Update velopark description ([9083e89](https://github.com/USERNAME/REPOSITORY_NAME/commits9083e8954971ad4bed1914bc7cd5c30397b23895))
* validate that a background layer actually exists, fix current-view button (GRB) ([fc483ed](https://github.com/USERNAME/REPOSITORY_NAME/commitsfc483ed54776ed78efb9d9f4b2b868ac85a0e6b3))
* validate that a background layer actually exists, fix current-view button (GRB) ([eb6194b](https://github.com/USERNAME/REPOSITORY_NAME/commitseb6194bf8f1752a7ef80583d8b878f75c146c7f8))
* various fixes to velopark, see [#1783](https://github.com/pietervdvn/MapComplete/issues/1783) ([2583fee](https://github.com/USERNAME/REPOSITORY_NAME/commits2583feef65e18f786253c93123e22d111e992ccf))
* various improvements ([d4895a0](https://github.com/USERNAME/REPOSITORY_NAME/commitsd4895a098916183cef47f5dc79d1870b99472be3))
* velopark: reorder attributes for a clearer view ([0929b55](https://github.com/USERNAME/REPOSITORY_NAME/commits0929b55b0807eb8cd9dea188d03339facf1113ce))
* vending machines: add meat as option, add operator phone number, add 'condom' icon, fix [#1584](https://github.com/pietervdvn/MapComplete/issues/1584) ([86d0e5d](https://github.com/USERNAME/REPOSITORY_NAME/commits86d0e5dc745805772f248d67eddfec88095657a6))
### [0.46.6](https://github.com/USERNAME/REPOSITORY_NAME/compare/v0.46.7...v0.46.6) (2024-09-13)
### [0.46.7](https://github.com/USERNAME/REPOSITORY_NAME/compare/v0.46.6...v0.46.7) (2024-09-13)

View file

@ -43,6 +43,14 @@
"https://osoc.be/editions/2020/walk-by-brussels" "https://osoc.be/editions/2020/walk-by-brussels"
] ]
}, },
{
"path": "safe_loops.svg",
"license": "CC-BY-SA-4.0",
"authors": [
"Robbert Gurdeep Singh"
],
"sources": []
},
{ {
"path": "shed.svg", "path": "shed.svg",
"license": "CC-BY-SA-4.0", "license": "CC-BY-SA-4.0",
@ -82,13 +90,5 @@
"sources": [ "sources": [
"https://osoc.be/editions/2020/walk-by-brussels" "https://osoc.be/editions/2020/walk-by-brussels"
] ]
},
{
"path": "safe_loops.svg",
"license": "CC-BY-SA",
"authors": [
"Robbert Gurdeep Singh"
],
"sources": [ ]
} }
] ]

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 6 KiB

After

Width:  |  Height:  |  Size: 3 KiB

View file

@ -0,0 +1,2 @@
SPDX-FileCopyrightText: Robbert Gurdeep Singh
SPDX-License-Identifier: CC-BY-SA-4.0

View file

@ -344,34 +344,34 @@
"if": "cuisine=pizza", "if": "cuisine=pizza",
"icon": "🍕", "icon": "🍕",
"then": { "then": {
"en": "This is a pizzeria", "en": "Pizzeria",
"nl": "Dit is een pizzeria", "nl": "Pizzeria",
"de": "Dies ist eine Pizzeria", "de": "Pizzeria",
"es": "Esto es una pizzería", "es": "Pizzería",
"fr": "C'est une pizzéria", "fr": "Pizzéria",
"ca": "Això és una pizzeria", "ca": "Pizzeria",
"pl": "To jest pizzeria", "pl": "Pizzeria",
"cs": "Tohle je pizzerie" "cs": "Pizzerie"
} }
}, },
{ {
"if": "cuisine=friture", "if": "cuisine=friture",
"icon": "🍟", "icon": "🍟",
"then": { "then": {
"en": "This is a friture", "en": "Friture",
"nl": "Dit is een frituur", "nl": "Frituur",
"de": "Dies ist eine Pommesbude", "de": "Pommesbude",
"fr": "C'est une friterie", "fr": "Friterie",
"ca": "Això és una fregiduria", "ca": "Fregiduria",
"cs": "Tohle je hranolkárna" "cs": "Hranolkárna"
} }
}, },
{ {
"if": "cuisine=pasta", "if": "cuisine=pasta",
"icon": "🍝", "icon": "🍝",
"then": { "then": {
"en": "Mainly serves pasta", "en": "Serves mainly pasta",
"nl": "Dit is een pastazaak", "nl": "Pastazaak",
"de": "Bietet vorwiegend Pastagerichte an", "de": "Bietet vorwiegend Pastagerichte an",
"es": "Principalmente sirve pasta", "es": "Principalmente sirve pasta",
"fr": "Restaurant Italien", "fr": "Restaurant Italien",
@ -384,11 +384,11 @@
"if": "cuisine=kebab", "if": "cuisine=kebab",
"icon": "🥙", "icon": "🥙",
"then": { "then": {
"en": "This is kebab shop", "en": "Kebab shop",
"nl": "Dit is een kebabzaak", "nl": "Kebabzaak",
"de": "Das ist ein Dönerladen", "de": "Dönerladen",
"es": "Esta es una tienda de kebak", "es": "Tienda de kebak",
"fr": "C'est un resto kebab", "fr": "Resto kebab",
"pl": "To jest stoisko z kebabem", "pl": "To jest stoisko z kebabem",
"ca": "Aquesta és una botiga de kebabs", "ca": "Aquesta és una botiga de kebabs",
"cs": "Tohle je kebab" "cs": "Tohle je kebab"
@ -398,11 +398,11 @@
"if": "cuisine=sandwich", "if": "cuisine=sandwich",
"icon": "🥪", "icon": "🥪",
"then": { "then": {
"en": "This is a sandwich shop", "en": "Sandwich shop",
"nl": "Dit is een broodjeszaak", "nl": "Broodjeszaak",
"de": "Dies ist ein Sandwichladen", "de": "Sandwichladen",
"fr": "C'est une sandwicherie", "fr": "Sandwicherie",
"ca": "Això és una botiga d'entrepans", "ca": "Botiga d'entrepans",
"cs": "Toto je obchod se sendviči" "cs": "Toto je obchod se sendviči"
} }
}, },
@ -410,10 +410,9 @@
"if": "cuisine=burger", "if": "cuisine=burger",
"icon": "🍔", "icon": "🍔",
"then": { "then": {
"en": "Burgers are served here", "en": "Burgersrestaurant",
"nl": "Dit is een hamburgerrestaurant", "nl": "Hamburgerrestaurant",
"de": "Hier werden Burger serviert", "es": "Hamburguesas",
"es": "Aquí se sirven hamburguesas",
"fr": "Des hamburgers sont servis ici", "fr": "Des hamburgers sont servis ici",
"ca": "Aquí es serveixen hamburgueses", "ca": "Aquí es serveixen hamburgueses",
"pl": "Są tu podawane burgery", "pl": "Są tu podawane burgery",
@ -424,8 +423,8 @@
"if": "cuisine=sushi", "if": "cuisine=sushi",
"icon": "🍣", "icon": "🍣",
"then": { "then": {
"en": "Sushi is served here", "en": "Sushi restaurant",
"nl": "Dit is een sushirestaurant", "nl": "Sushirestaurant",
"de": "Hier wird Sushi serviert", "de": "Hier wird Sushi serviert",
"es": "Aquí se sirve sushi", "es": "Aquí se sirve sushi",
"fr": "Des sushis sont servis ici", "fr": "Des sushis sont servis ici",
@ -437,8 +436,8 @@
"if": "cuisine=coffee", "if": "cuisine=coffee",
"icon": "☕", "icon": "☕",
"then": { "then": {
"en": "Coffee is served here", "en": "Coffeebar",
"nl": "Dit is een koffiezaak", "nl": "Koffiezaak",
"de": "Hier wird Kaffee serviert", "de": "Hier wird Kaffee serviert",
"es": "Aquí se sirve café", "es": "Aquí se sirve café",
"fr": "C'est un café", "fr": "C'est un café",
@ -450,8 +449,8 @@
"if": "cuisine=italian", "if": "cuisine=italian",
"icon": "🇮🇹", "icon": "🇮🇹",
"then": { "then": {
"en": "This is an Italian restaurant (which serves more than pasta and pizza)", "en": "Italian restaurant (which serves more than pasta and pizza)",
"nl": "Dit is een Italiaans restaurant (dat meer dan enkel pasta of pizza verkoopt)", "nl": "Italiaans restaurant (dat meer dan enkel pasta of pizza verkoopt)",
"de": "Dies ist ein italienisches Restaurant (das mehr als nur Pasta und Pizza serviert)", "de": "Dies ist ein italienisches Restaurant (das mehr als nur Pasta und Pizza serviert)",
"es": "Este es un restaurante italiano (que sirve algo más que pasta y pizza)", "es": "Este es un restaurante italiano (que sirve algo más que pasta y pizza)",
"fr": "C'est un Restaurant Italien (qui sert plus que des pâtes et des pizzas)", "fr": "C'est un Restaurant Italien (qui sert plus que des pâtes et des pizzas)",
@ -463,8 +462,8 @@
"if": "cuisine=french", "if": "cuisine=french",
"icon": "🇫🇷", "icon": "🇫🇷",
"then": { "then": {
"en": "French dishes are served here", "en": "French restaurant",
"nl": "Dit is een Frans restaurant", "nl": "Frans restaurant",
"de": "Hier werden französische Gerichte serviert", "de": "Hier werden französische Gerichte serviert",
"es": "Aquí se sirven platos Franceses", "es": "Aquí se sirven platos Franceses",
"fr": "Des plats français sont servis ici", "fr": "Des plats français sont servis ici",
@ -476,8 +475,8 @@
"if": "cuisine=chinese", "if": "cuisine=chinese",
"icon": "🇨🇳", "icon": "🇨🇳",
"then": { "then": {
"en": "Chinese dishes are served here", "en": "Chinese",
"nl": "Dit is een Chinees restaurant", "nl": "Chinees restaurant",
"de": "Hier werden chinesische Gerichte serviert", "de": "Hier werden chinesische Gerichte serviert",
"es": "Aquí se sirven platos Chinos", "es": "Aquí se sirven platos Chinos",
"fr": "Des plats chinois sont servis ici", "fr": "Des plats chinois sont servis ici",
@ -489,8 +488,8 @@
"if": "cuisine=greek", "if": "cuisine=greek",
"icon": "🇬🇷", "icon": "🇬🇷",
"then": { "then": {
"en": "Greek dishes are served here", "en": "Greek",
"nl": "Dit is een Grieks restaurant", "nl": "Grieks restaurant",
"de": "Hier werden griechische Gerichte serviert", "de": "Hier werden griechische Gerichte serviert",
"es": "Aquí se sirven platos Griegos", "es": "Aquí se sirven platos Griegos",
"fr": "Des plats grecs sont servis ici", "fr": "Des plats grecs sont servis ici",
@ -502,8 +501,8 @@
"if": "cuisine=indian", "if": "cuisine=indian",
"icon": "🇮🇳", "icon": "🇮🇳",
"then": { "then": {
"en": "Indian dishes are served here", "en": "Indian",
"nl": "Dit is een Indisch restaurant", "nl": "Indisch restaurant",
"de": "Hier werden indische Gerichte serviert", "de": "Hier werden indische Gerichte serviert",
"es": "Aquí se sirven platos Indios", "es": "Aquí se sirven platos Indios",
"fr": "Des plats indiens sont servis ici", "fr": "Des plats indiens sont servis ici",
@ -515,8 +514,8 @@
"if": "cuisine=turkish", "if": "cuisine=turkish",
"icon": "🇹🇷", "icon": "🇹🇷",
"then": { "then": {
"en": "Turkish dishes are served here", "en": "Turkish restaurant",
"nl": "Dit is een Turks restaurant (dat meer dan enkel kebab verkoopt)", "nl": "Turks restaurant",
"de": "Hier werden türkische Gerichte serviert", "de": "Hier werden türkische Gerichte serviert",
"es": "Aquí se sirven platos Turcos", "es": "Aquí se sirven platos Turcos",
"fr": "Des plats turcs sont servis ici", "fr": "Des plats turcs sont servis ici",
@ -528,8 +527,8 @@
"if": "cuisine=thai", "if": "cuisine=thai",
"icon": "🇹🇭", "icon": "🇹🇭",
"then": { "then": {
"en": "Thai dishes are served here", "en": "Thai restaurant",
"nl": "Dit is een Thaïs restaurant", "nl": "Thaïs restaurant",
"de": "Hier werden thailändische Gerichte serviert", "de": "Hier werden thailändische Gerichte serviert",
"fr": "Des plats thaïlandais sont servis ici", "fr": "Des plats thaïlandais sont servis ici",
"ca": "Aquí es serveixen plats tailandesos", "ca": "Aquí es serveixen plats tailandesos",

View file

@ -0,0 +1,70 @@
{
"id": "geocoded_image",
"source": "special",
"name": null,
"tagRenderings": [],
"pointRendering": [
{
"location": [
"point",
"centroid"
],
"marker": [
{
"icon": "direction_gradient",
"color": {
"render": "#44cc22",
"mappings": [
{
"if": "selected=yes",
"then": "#cccc22"
}
]
}
}
],
"rotation": "{rotation}deg",
"rotationAlignment": "map",
"pitchAlignment": "map",
"iconSize": "60,60"
},
{
"location": [
"point",
"centroid"
],
"rotationAlignment": "map",
"pitchAlignment": "map",
"marker": [
{
"icon": "circle",
"color": {
"render": "#44cc22",
"mappings": [
{
"if": "selected=yes",
"then": "#cccc22"
}
]
}
}
],
"iconSize": "14,14"
},
{
"location": [
"point",
"centroid"
],
"rotationAlignment": "map",
"pitchAlignment": "map",
"marker": [
{
"icon": "ring",
"color": "#000"
}
],
"iconSize": "14,14"
}
]
}

View file

@ -13,18 +13,21 @@
"source": { "source": {
"osmTags": "date_created~*", "osmTags": "date_created~*",
"geoJson": "https://api.openstreetmap.org/api/0.6/notes.json?limit=10000&closed=7&bbox={x_min},{y_min},{x_max},{y_max}", "geoJson": "https://api.openstreetmap.org/api/0.6/notes.json?limit=10000&closed=7&bbox={x_min},{y_min},{x_max},{y_max}",
"geoJsonZoomLevel": 12 "geoJsonZoomLevel": 10
}, },
"calculatedTags": [ "calculatedTags": [
"_total_comments:=get(feat)('comments').length", "_total_comments:=get(feat)('comments').length",
"_first_comment:=get(feat)('comments')[0].text", "_first_comment:=get(feat)('comments')[0].text",
"_all_comments:=get(feat)('comments').map(c => c.text ?? '').join('\\n')",
"_all_usernames:=get(feat)('comments').map(c => c.user ?? 'Anonymous').join('\\n')",
"_opened_by_anonymous_user:=get(feat)('comments')[0].user === undefined", "_opened_by_anonymous_user:=get(feat)('comments')[0].user === undefined",
"_first_user:=get(feat)('comments')[0].user", "_first_user:=get(feat)('comments')[0].user",
"_last_user:=(() => {const comms = get(feat)('comments'); return comms[comms.length - 1].user})()", "_last_user:=(() => {const comms = get(feat)('comments'); return comms[comms.length - 1].user})()",
"_last_change_date:=(() => {const comms = get(feat)('comments'); return comms[comms.length - 1].date})()",
"_first_user_id:=get(feat)('comments')[0].uid", "_first_user_id:=get(feat)('comments')[0].uid",
"_is_import_note:=(() => {const lines = feat.properties['_first_comment'].split('\\n'); const matchesMapCompleteURL = lines.map(l => l.match(\".*https://mapcomplete.\\(osm.be|org\\)/\\([a-zA-Z_-]+\\)\\(.html\\).*#import\")); const matchedIndexes = matchesMapCompleteURL.map((doesMatch, i) => [doesMatch !== null, i]).filter(v => v[0]).map(v => v[1]); return matchedIndexes[0] })()" "_is_import_note:=(() => {const lines = feat.properties['_first_comment'].split('\\n'); const matchesMapCompleteURL = lines.map(l => l.match(\".*https://mapcomplete.\\(osm.be|org\\)/\\([a-zA-Z_-]+\\)\\(.html\\).*#import\")); const matchedIndexes = matchesMapCompleteURL.map((doesMatch, i) => [doesMatch !== null, i]).filter(v => v[0]).map(v => v[1]); return matchedIndexes[0] })()"
], ],
"minzoom": 10, "minzoom": 7,
"title": { "title": {
"render": { "render": {
"en": "Note", "en": "Note",
@ -158,183 +161,6 @@
} }
], ],
"filter": [ "filter": [
{
"id": "search",
"options": [
{
"osmTags": "_first_comment~i~.*{search}.*",
"fields": [
{
"name": "search"
}
],
"question": {
"en": "Should mention {search} in the first comment",
"nl": "Moet in de eerste opmerking \"{search}\" bevatten",
"de": "Sollte {search} im ersten Kommentar erwähnen",
"es": "Debe mencionar {search} en el primer comentario",
"ca": "Has de mencionar {search} en el primer comentari",
"cs": "Měl by se zmínit {search} v prvním komentáři"
}
}
]
},
{
"id": "not",
"options": [
{
"osmTags": "_first_comment!~i~.*{search}.*",
"fields": [
{
"name": "search"
}
],
"question": {
"en": "Should <b>not</b> mention {search} in the first comment",
"nl": "Mag in de eerste opmerking <b>niet</b> \"{search}\" bevatten",
"de": "Sollte <b>nicht</b> {search} im ersten Kommentar erwähnen",
"es": "<b>No</b> debe mencionar {search} en el primer comentario",
"ca": "<b>No</b> s'ha de mencionar {search} al primer comentari",
"cs": "V prvním komentáři by jste <b>neměli</b> zmiňovat {search}"
}
}
]
},
{
"id": "opened_by",
"options": [
{
"osmTags": "_first_user~i~.*{search}.*",
"fields": [
{
"name": "search"
}
],
"question": {
"en": "Opened by contributor {search}",
"nl": "Geopend door bijdrager {search}",
"de": "Erstellt von {search}",
"es": "Abierto por el contributor {search}",
"fr": "Ouverte par {search}",
"ca": "Obert pel contribuïdor {search}",
"cs": "Otevřeno přispěvatelem {search}"
}
}
]
},
{
"id": "not_opened_by",
"options": [
{
"osmTags": "_first_user!~i~.*{search}.*",
"fields": [
{
"name": "search"
}
],
"question": {
"en": "<b>Not</b> opened by contributor {search}",
"nl": "<b>Niet</b> geopend door bijdrager {search}",
"de": "<b>Nicht</b> erstellt von {search}",
"es": "<b>No</b> abierto por el contributor {search}",
"ca": "<b>No</b> obert pel contribuïdor {search}",
"cs": "<b>Není</b> otevřeno přispěvatelem {search}",
"fr": "<b>Exclure</b>les notes ouvertes par {search}"
}
}
]
},
{
"id": "edited_by",
"options": [
{
"osmTags": "_last_user~i~.*{search}.*",
"fields": [
{
"name": "search"
}
],
"question": {
"en": "Last edited by contributor {search}",
"nl": "Laatst bewerkt door bijdrager {search}",
"de": "Zuletzt bearbeitet von {search}",
"es": "Editada por última vez por el contributor {search}",
"ca": "Editat per última vega pel contribuïdor {search}",
"cs": "Naposledy upravil přispěvatel {search}",
"da": "Senest redigeret af bidragsyder {search}",
"fr": "Dernière modification par {search}"
}
}
]
},
{
"id": "not_edited_by",
"options": [
{
"osmTags": "_last_user!~i~.*{search}.*",
"fields": [
{
"name": "search"
}
],
"question": {
"en": "Opened after {search}",
"nl": "Geopend na {search}",
"de": "Zuletzt bearbeitet nach dem {search}",
"es": "Abierta después de {search}",
"ca": "Oberta després de {search}",
"cs": "Otevřeno po {search}",
"fr": "Ouverte après le {search}"
}
}
]
},
{
"id": "opened_before",
"options": [
{
"osmTags": "date_created<{search}",
"fields": [
{
"name": "search",
"type": "date"
}
],
"question": {
"en": "Created before {search}",
"nl": "Aangemaakt voor {search}",
"de": "Erstellt vor dem {search}",
"es": "Creada antes de {search}",
"ca": "Creada abans de {search}",
"cs": "Vytvořeno před {search}",
"fr": "Créée avant le {search}"
}
}
]
},
{
"id": "opened_after",
"options": [
{
"osmTags": "date_created>{search}",
"fields": [
{
"name": "search",
"type": "date"
}
],
"question": {
"en": "Created after {search}",
"nl": "Aangemaakt na {search}",
"de": "Erstellt nach dem {search}",
"es": "Creada después de {search}",
"ca": "Creada després de {search}",
"cs": "Vytvořeno po {search}",
"fr": "Créée après le {search}"
}
}
]
},
{ {
"id": "anonymous", "id": "anonymous",
"options": [ "options": [
@ -406,6 +232,244 @@
} }
} }
] ]
},
{
"id": "search",
"options": [
{
"osmTags": "_first_comment~i~.*{search}.*",
"fields": [
{
"name": "search"
}
],
"question": {
"en": "Should mention {search} in the first comment",
"nl": "Moet in de eerste opmerking \"{search}\" bevatten",
"de": "Sollte {search} im ersten Kommentar erwähnen",
"es": "Debe mencionar {search} en el primer comentario",
"ca": "Has de mencionar {search} en el primer comentari",
"cs": "Měl by se zmínit {search} v prvním komentáři"
}
}
]
},
{
"id": "search_any",
"options": [
{
"osmTags": "_all_comments~i~.*{search}.*",
"fields": [
{
"name": "search"
}
],
"question": {
"en": "Should mention {search} in any comment"
}
}
]
},
{
"id": "not",
"options": [
{
"osmTags": "_first_comment!~i~.*{search}.*",
"fields": [
{
"name": "search"
}
],
"question": {
"en": "Should <b>not</b> mention {search} in the first comment",
"nl": "Mag in de eerste opmerking <b>niet</b> \"{search}\" bevatten",
"de": "Sollte <b>nicht</b> {search} im ersten Kommentar erwähnen",
"es": "<b>No</b> debe mencionar {search} en el primer comentario",
"ca": "<b>No</b> s'ha de mencionar {search} al primer comentari",
"cs": "V prvním komentáři by jste <b>neměli</b> zmiňovat {search}"
}
}
]
},
{
"id": "opened_by",
"options": [
{
"osmTags": "_first_user~i~.*{search}.*",
"fields": [
{
"name": "search"
}
],
"question": {
"en": "Opened by contributor {search}",
"nl": "Geopend door bijdrager {search}",
"de": "Erstellt von {search}",
"es": "Abierto por el contributor {search}",
"fr": "Ouverte par {search}",
"ca": "Obert pel contribuïdor {search}",
"cs": "Otevřeno přispěvatelem {search}"
}
}
]
},
{
"id": "not_opened_by",
"options": [
{
"osmTags": "_first_user!~i~.*{search}.*",
"fields": [
{
"name": "search"
}
],
"question": {
"en": "<b>Not</b> opened by contributor {search}",
"nl": "<b>Niet</b> geopend door bijdrager {search}",
"de": "<b>Nicht</b> erstellt von {search}",
"es": "<b>No</b> abierto por el contributor {search}",
"ca": "<b>No</b> obert pel contribuïdor {search}",
"cs": "<b>Není</b> otevřeno přispěvatelem {search}",
"fr": "<b>Exclure</b>les notes ouvertes par {search}"
}
}
]
},
{
"id": "edited_by_any",
"options": [
{
"osmTags": "_all_usernames~i~.*{search}.*",
"fields": [
{
"name": "search"
}
],
"question": {
"en": "Edited or commented on by any user with name {search}"
}
}
]
},
{
"id": "last_edited_by",
"options": [
{
"osmTags": "_last_user~i~.*{search}.*",
"fields": [
{
"name": "search"
}
],
"question": {
"en": "Last edited by contributor {search}",
"nl": "Laatst bewerkt door bijdrager {search}",
"de": "Zuletzt bearbeitet von {search}",
"es": "Editada por última vez por el contributor {search}",
"ca": "Editat per última vega pel contribuïdor {search}",
"cs": "Naposledy upravil přispěvatel {search}",
"da": "Senest redigeret af bidragsyder {search}",
"fr": "Dernière modification par {search}"
}
}
]
},
{
"id": "not_last_edited_by",
"options": [
{
"osmTags": "_last_user!~i~.*{search}.*",
"fields": [
{
"name": "search"
}
],
"question": {
"en": "Not edited as last by {search}"
}
}
]
},
{
"id": "opened_before",
"options": [
{
"osmTags": "date_created<{search}",
"fields": [
{
"name": "search",
"type": "date"
}
],
"question": {
"en": "Created before {search}",
"nl": "Aangemaakt voor {search}",
"de": "Erstellt vor dem {search}",
"es": "Creada antes de {search}",
"ca": "Creada abans de {search}",
"cs": "Vytvořeno před {search}",
"fr": "Créée avant le {search}"
}
}
]
},
{
"id": "opened_after",
"options": [
{
"osmTags": "date_created>{search}",
"fields": [
{
"name": "search",
"type": "date"
}
],
"question": {
"en": "Created after {search}",
"nl": "Aangemaakt na {search}",
"de": "Erstellt nach dem {search}",
"es": "Creada después de {search}",
"ca": "Creada després de {search}",
"cs": "Vytvořeno po {search}",
"fr": "Créée après le {search}"
}
}
]
},
{
"id": "last_edited_before",
"options": [
{
"osmTags": "_last_change_date<{search}",
"fields": [
{
"name": "search",
"type": "date"
}
],
"question": {
"en": "Last edited before {search}"
}
}
]
},
{
"id": "last_edited_after",
"options": [
{
"osmTags": "_last_change_date>{search}",
"fields": [
{
"name": "search",
"type": "date"
}
],
"question": {
"en": "Last edited after {search}"
}
}
]
} }
], ],
"allowMove": false "allowMove": false

View file

@ -551,6 +551,31 @@
} }
] ]
}, },
{
"id": "scalebar",
"question": {
"en": "Should a scale bar be shown on the map?",
"nl": "Moet er een schaalbalk weergegeven worden?"
},
"mappings": [
{
"if": "mapcomplete-preference-show-scale=true",
"then": {
"en": "Show the scalebar",
"nl": "Toon de schaalbalk"
}
},
{
"if": "mapcomplete-preference-show-scale=false",
"alsoShowIf": "mapcomplete-preference-show-scale=",
"then": {
"en": "Hide the scalebar",
"nl": "Verberg de schaalbalk"
}
}
]
},
{ {
"id": "title-editing", "id": "title-editing",
"render": { "render": {

View file

@ -32,7 +32,7 @@
inkscape:window-maximized="1" inkscape:window-maximized="1"
inkscape:current-layer="svg1" /> inkscape:current-layer="svg1" />
<path <path
style="fill:#000000" style="fill:#000000;"
class="selectable" class="selectable"
d="M 375,187.5 C 375,291.05469 291.05469,375 187.5,375 83.945312,375 0,291.05469 0,187.5 0,83.945312 83.945312,0 187.5,0 291.05469,0 375,83.945312 375,187.5 Z m 0,0" d="M 375,187.5 C 375,291.05469 291.05469,375 187.5,375 83.945312,375 0,291.05469 0,187.5 0,83.945312 83.945312,0 187.5,0 291.05469,0 375,83.945312 375,187.5 Z m 0,0"
id="path1" /> id="path1" />

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -1,101 +1,55 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg <svg
xmlns:dc="http://purl.org/dc/elements/1.1/" version="1.0"
xmlns:cc="http://creativecommons.org/ns#" width="860.50732pt"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" height="860.50732pt"
xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 860.50732 860.50732"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" preserveAspectRatio="xMidYMid meet"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" id="svg14"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
version="1.0" xmlns="http://www.w3.org/2000/svg"
width="860.50732pt" xmlns:svg="http://www.w3.org/2000/svg"
height="860.50732pt" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
viewBox="0 0 860.50732 860.50732" xmlns:cc="http://creativecommons.org/ns#"
preserveAspectRatio="xMidYMid meet" xmlns:dc="http://purl.org/dc/elements/1.1/">
id="svg14" <defs
sodipodi:docname="direction_gradient.svg" id="defs18">
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"> <linearGradient
<defs id="linearGradient832">
id="defs18"> <stop
<linearGradient style="stop-color:#000000;stop-opacity:1;"
inkscape:collect="always" offset="0"
id="linearGradient832"> id="stop828" />
<stop <stop
style="stop-color:#000000;stop-opacity:1;" style="stop-color:#000000;stop-opacity:0;"
offset="0" offset="1"
id="stop828"/> id="stop830" />
<stop </linearGradient>
style="stop-color:#000000;stop-opacity:0;" <radialGradient
offset="1" xlink:href="#linearGradient832"
id="stop830"/> id="radialGradient838"
</linearGradient> cx="430.25363"
<radialGradient cy="519.61188"
inkscape:collect="always" fx="430.25363"
xlink:href="#linearGradient832" fy="519.61188"
id="radialGradient838" r="305.54589"
cx="430.25363" gradientTransform="matrix(0.95288409,-0.94890664,0.94542304,0.94938587,-470.98122,345.21193)"
cy="519.61188" gradientUnits="userSpaceOnUse" />
fx="430.25363" </defs>
fy="519.61188" <metadata
r="305.54589" id="metadata2">
gradientTransform="matrix(0.95288409,-0.94890664,0.94542304,0.94938587,-470.98122,345.21193)"
gradientUnits="userSpaceOnUse"/>
</defs>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="999"
id="namedview16"
showgrid="false"
showguides="true"
inkscape:guide-bbox="true"
inkscape:zoom="0.70710678"
inkscape:cx="279.00239"
inkscape:cy="856.75313"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg14">
<sodipodi:guide
position="430.25363,862.49682"
orientation="1,0"
id="guide832"
inkscape:locked="false"/>
<sodipodi:guide
position="-42.427977,430.25368"
orientation="0,1"
id="guide834"
inkscape:locked="false"/>
<sodipodi:guide
position="398.27788,720.18823"
orientation="0,1"
id="guide840"
inkscape:locked="false"/>
</sodipodi:namedview>
<metadata
id="metadata2">
Created by potrace 1.15, written by Peter Selinger 2001-2017 Created by potrace 1.15, written by Peter Selinger 2001-2017
<rdf:RDF> <rdf:RDF>
<cc:Work <cc:Work
rdf:about=""> rdf:about="">
<dc:format>image/svg+xml</dc:format> <dc:format>image/svg+xml</dc:format>
<dc:type <dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title/> </cc:Work>
</cc:Work> </rdf:RDF>
</rdf:RDF> </metadata>
</metadata> <path
<path style="fill:url(#radialGradient838);fill-opacity:1;stroke:none;stroke-width:2.83464575;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
style="fill:url(#radialGradient838);fill-opacity:1;stroke:none;stroke-width:2.83464575;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 735.79979,124.70799 C 654.79116,43.598883 544.88842,-2.0206645 430.25389,-2.121103 315.61937,-2.0206592 205.71663,43.598888 124.70801,124.70799 l 305.54588,305.54589 z"
d="M 735.79979,124.70799 C 654.79116,43.598883 544.88842,-2.0206645 430.25389,-2.121103 315.61937,-2.0206592 205.71663,43.598888 124.70801,124.70799 l 305.54588,305.54589 z" id="path836" />
id="path836"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

View file

@ -1,2 +1,2 @@
SPDX-FileCopyrightText: Pieter Vander Vennet SPDX-FileCopyrightText: Pieter Vander Vennet
SPDX-License-Identifier: CC0 SPDX-License-Identifier: CC0-1.0

View file

@ -234,7 +234,7 @@
{ {
"id": "nearby_images", "id": "nearby_images",
"render": { "render": {
"*": "{nearby_images(open,readonly)}" "*": "{nearby_images(,readonly)}"
} }
} }
], ],

View file

@ -643,7 +643,8 @@
"pointIsMoved": "Der Punkt wurde verschoben", "pointIsMoved": "Der Punkt wurde verschoben",
"reasons": { "reasons": {
"reasonInaccurate": "Der Standort ist um ein paar Meter ungenau", "reasonInaccurate": "Der Standort ist um ein paar Meter ungenau",
"reasonRelocation": "Das Element wurde an einen völlig anderen Ort verlegt" "reasonRelocation": "Das Element wurde an einen völlig anderen Ort verlegt",
"reasonSnapTo": "Dies sollte auf {name} fixiert werden"
}, },
"selectReason": "Warum verschieben Sie dieses Element?", "selectReason": "Warum verschieben Sie dieses Element?",
"whyMove": "Warum wollen Sie diesen Punkt verschieben?", "whyMove": "Warum wollen Sie diesen Punkt verschieben?",
@ -778,6 +779,14 @@
"missing": "{count} nicht übersetzte Zeichenfolgen", "missing": "{count} nicht übersetzte Zeichenfolgen",
"notImmediate": "Die Übersetzung wird nicht direkt aktualisiert. Dies dauert in der Regel ein paar Tage" "notImmediate": "Die Übersetzung wird nicht direkt aktualisiert. Dies dauert in der Regel ein paar Tage"
}, },
"unknown": {
"clear": "Antwort löschen",
"explanation": "Lösche dieses Informationsmerkmal, wenn die aktuelle Antwort falsch ist, aber der tatsächliche Wert nicht bekannt ist. Andere Informationen werden nicht entfernt.",
"keep": "Antwort behalten",
"markUnknown": "Als unbekannt markieren",
"removedKeys": "Die folgenden Einträge werden entfernt:",
"title": "Als unbekannt markieren?"
},
"userinfo": { "userinfo": {
"gotoInbox": "Deinen Posteingang öffnen", "gotoInbox": "Deinen Posteingang öffnen",
"gotoSettings": "Einstellungen auf OpenStreetMap.org öffnen", "gotoSettings": "Einstellungen auf OpenStreetMap.org öffnen",
@ -864,4 +873,4 @@
"startsWithQ": "Ein Wikidata-Identifikator beginnt mit Q und wird von einer Zahl gefolgt" "startsWithQ": "Ein Wikidata-Identifikator beginnt mit Q und wird von einer Zahl gefolgt"
} }
} }
} }

View file

@ -3926,10 +3926,10 @@
"Cuisine": { "Cuisine": {
"mappings": { "mappings": {
"0": { "0": {
"then": "Això és una pizzeria" "then": "Pizzeria"
}, },
"1": { "1": {
"then": "Això és una fregiduria" "then": "Fregiduria"
}, },
"10": { "10": {
"then": "Aquí es serveixen plats xinesos" "then": "Aquí es serveixen plats xinesos"
@ -3953,7 +3953,7 @@
"then": "Aquesta és una botiga de kebabs" "then": "Aquesta és una botiga de kebabs"
}, },
"4": { "4": {
"then": "Això és una botiga d'entrepans" "then": "Botiga d'entrepans"
}, },
"5": { "5": {
"then": "Aquí es serveixen hamburgueses" "then": "Aquí es serveixen hamburgueses"
@ -5126,18 +5126,32 @@
"0": { "0": {
"options": { "options": {
"0": { "0": {
"question": "Has de mencionar {search} en el primer comentari" "question": "Sols mostrar les notes obertes per contribuïdors anònims"
} }
} }
}, },
"1": { "1": {
"options": { "options": {
"0": { "0": {
"question": "<b>No</b> s'ha de mencionar {search} al primer comentari" "question": "Sols mostra les notes obertes"
} }
} }
}, },
"10": { "11": {
"options": {
"0": {
"question": "Creada abans de {search}"
}
}
},
"12": {
"options": {
"0": {
"question": "Creada després de {search}"
}
}
},
"2": {
"options": { "options": {
"0": { "0": {
"question": "Totes les notes" "question": "Totes les notes"
@ -5150,59 +5164,38 @@
} }
} }
}, },
"2": {
"options": {
"0": {
"question": "Obert pel contribuïdor {search}"
}
}
},
"3": { "3": {
"options": { "options": {
"0": { "0": {
"question": "<b>No</b> obert pel contribuïdor {search}" "question": "Has de mencionar {search} en el primer comentari"
}
}
},
"4": {
"options": {
"0": {
"question": "Editat per última vega pel contribuïdor {search}"
} }
} }
}, },
"5": { "5": {
"options": { "options": {
"0": { "0": {
"question": "Oberta després de {search}" "question": "<b>No</b> s'ha de mencionar {search} al primer comentari"
} }
} }
}, },
"6": { "6": {
"options": { "options": {
"0": { "0": {
"question": "Creada abans de {search}" "question": "Obert pel contribuïdor {search}"
} }
} }
}, },
"7": { "7": {
"options": { "options": {
"0": { "0": {
"question": "Creada després de {search}" "question": "<b>No</b> obert pel contribuïdor {search}"
}
}
},
"8": {
"options": {
"0": {
"question": "Sols mostrar les notes obertes per contribuïdors anònims"
} }
} }
}, },
"9": { "9": {
"options": { "options": {
"0": { "0": {
"question": "Sols mostra les notes obertes" "question": "Editat per última vega pel contribuïdor {search}"
} }
} }
} }

View file

@ -4072,10 +4072,10 @@
"Cuisine": { "Cuisine": {
"mappings": { "mappings": {
"0": { "0": {
"then": "Tohle je pizzerie" "then": "Pizzerie"
}, },
"1": { "1": {
"then": "Tohle je hranolkárna" "then": "Hranolkárna"
}, },
"10": { "10": {
"then": "Podávají se zde čínské pokrmy" "then": "Podávají se zde čínské pokrmy"
@ -5352,18 +5352,32 @@
"0": { "0": {
"options": { "options": {
"0": { "0": {
"question": "Měl by se zmínit {search} v prvním komentáři" "question": "Zobrazovat pouze poznámky otevřené anonymním přispěvatelem"
} }
} }
}, },
"1": { "1": {
"options": { "options": {
"0": { "0": {
"question": "V prvním komentáři by jste <b>neměli</b> zmiňovat {search}" "question": "Zobrazit pouze otevřené poznámky"
} }
} }
}, },
"10": { "11": {
"options": {
"0": {
"question": "Vytvořeno před {search}"
}
}
},
"12": {
"options": {
"0": {
"question": "Vytvořeno po {search}"
}
}
},
"2": {
"options": { "options": {
"0": { "0": {
"question": "Všechny poznámky" "question": "Všechny poznámky"
@ -5376,59 +5390,38 @@
} }
} }
}, },
"2": {
"options": {
"0": {
"question": "Otevřeno přispěvatelem {search}"
}
}
},
"3": { "3": {
"options": { "options": {
"0": { "0": {
"question": "<b>Není</b> otevřeno přispěvatelem {search}" "question": "Měl by se zmínit {search} v prvním komentáři"
}
}
},
"4": {
"options": {
"0": {
"question": "Naposledy upravil přispěvatel {search}"
} }
} }
}, },
"5": { "5": {
"options": { "options": {
"0": { "0": {
"question": "Otevřeno po {search}" "question": "V prvním komentáři by jste <b>neměli</b> zmiňovat {search}"
} }
} }
}, },
"6": { "6": {
"options": { "options": {
"0": { "0": {
"question": "Vytvořeno před {search}" "question": "Otevřeno přispěvatelem {search}"
} }
} }
}, },
"7": { "7": {
"options": { "options": {
"0": { "0": {
"question": "Vytvořeno po {search}" "question": "<b>Není</b> otevřeno přispěvatelem {search}"
}
}
},
"8": {
"options": {
"0": {
"question": "Zobrazovat pouze poznámky otevřené anonymním přispěvatelem"
} }
} }
}, },
"9": { "9": {
"options": { "options": {
"0": { "0": {
"question": "Zobrazit pouze otevřené poznámky" "question": "Naposledy upravil přispěvatel {search}"
} }
} }
} }

View file

@ -1640,7 +1640,7 @@
}, },
"note": { "note": {
"filter": { "filter": {
"4": { "9": {
"options": { "options": {
"0": { "0": {
"question": "Senest redigeret af bidragsyder {search}" "question": "Senest redigeret af bidragsyder {search}"

View file

@ -5147,10 +5147,10 @@
"Cuisine": { "Cuisine": {
"mappings": { "mappings": {
"0": { "0": {
"then": "Dies ist eine Pizzeria" "then": "Pizzeria"
}, },
"1": { "1": {
"then": "Dies ist eine Pommesbude" "then": "Pommesbude"
}, },
"10": { "10": {
"then": "Hier werden chinesische Gerichte serviert" "then": "Hier werden chinesische Gerichte serviert"
@ -5171,13 +5171,10 @@
"then": "Bietet vorwiegend Pastagerichte an" "then": "Bietet vorwiegend Pastagerichte an"
}, },
"3": { "3": {
"then": "Das ist ein Dönerladen" "then": "Dönerladen"
}, },
"4": { "4": {
"then": "Dies ist ein Sandwichladen" "then": "Sandwichladen"
},
"5": {
"then": "Hier werden Burger serviert"
}, },
"6": { "6": {
"then": "Hier wird Sushi serviert" "then": "Hier wird Sushi serviert"
@ -6769,18 +6766,32 @@
"0": { "0": {
"options": { "options": {
"0": { "0": {
"question": "Sollte {search} im ersten Kommentar erwähnen" "question": "Nur Notizen anzeigen, die anonym erstellt wurden"
} }
} }
}, },
"1": { "1": {
"options": { "options": {
"0": { "0": {
"question": "Sollte <b>nicht</b> {search} im ersten Kommentar erwähnen" "question": "Nur offene Notizen anzeigen"
} }
} }
}, },
"10": { "11": {
"options": {
"0": {
"question": "Erstellt vor dem {search}"
}
}
},
"12": {
"options": {
"0": {
"question": "Erstellt nach dem {search}"
}
}
},
"2": {
"options": { "options": {
"0": { "0": {
"question": "Alle Notizen" "question": "Alle Notizen"
@ -6793,59 +6804,38 @@
} }
} }
}, },
"2": {
"options": {
"0": {
"question": "Erstellt von {search}"
}
}
},
"3": { "3": {
"options": { "options": {
"0": { "0": {
"question": "<b>Nicht</b> erstellt von {search}" "question": "Sollte {search} im ersten Kommentar erwähnen"
}
}
},
"4": {
"options": {
"0": {
"question": "Zuletzt bearbeitet von {search}"
} }
} }
}, },
"5": { "5": {
"options": { "options": {
"0": { "0": {
"question": "Zuletzt bearbeitet nach dem {search}" "question": "Sollte <b>nicht</b> {search} im ersten Kommentar erwähnen"
} }
} }
}, },
"6": { "6": {
"options": { "options": {
"0": { "0": {
"question": "Erstellt vor dem {search}" "question": "Erstellt von {search}"
} }
} }
}, },
"7": { "7": {
"options": { "options": {
"0": { "0": {
"question": "Erstellt nach dem {search}" "question": "<b>Nicht</b> erstellt von {search}"
}
}
},
"8": {
"options": {
"0": {
"question": "Nur Notizen anzeigen, die anonym erstellt wurden"
} }
} }
}, },
"9": { "9": {
"options": { "options": {
"0": { "0": {
"question": "Nur offene Notizen anzeigen" "question": "Zuletzt bearbeitet von {search}"
} }
} }
} }

View file

@ -5149,25 +5149,25 @@
"Cuisine": { "Cuisine": {
"mappings": { "mappings": {
"0": { "0": {
"then": "This is a pizzeria" "then": "Pizzeria"
}, },
"1": { "1": {
"then": "This is a friture" "then": "Friture"
}, },
"10": { "10": {
"then": "Chinese dishes are served here" "then": "Chinese"
}, },
"11": { "11": {
"then": "Greek dishes are served here" "then": "Greek"
}, },
"12": { "12": {
"then": "Indian dishes are served here" "then": "Indian"
}, },
"13": { "13": {
"then": "Turkish dishes are served here" "then": "Turkish restaurant"
}, },
"14": { "14": {
"then": "Thai dishes are served here" "then": "Thai restaurant"
}, },
"15": { "15": {
"then": "Mexican dishes are served here" "then": "Mexican dishes are served here"
@ -5182,28 +5182,28 @@
"then": "Seafood dishes are served here" "then": "Seafood dishes are served here"
}, },
"2": { "2": {
"then": "Mainly serves pasta" "then": "Serves mainly pasta"
}, },
"3": { "3": {
"then": "This is kebab shop" "then": "Kebab shop"
}, },
"4": { "4": {
"then": "This is a sandwich shop" "then": "Sandwich shop"
}, },
"5": { "5": {
"then": "Burgers are served here" "then": "Burgersrestaurant"
}, },
"6": { "6": {
"then": "Sushi is served here" "then": "Sushi restaurant"
}, },
"7": { "7": {
"then": "Coffee is served here" "then": "Coffeebar"
}, },
"8": { "8": {
"then": "This is an Italian restaurant (which serves more than pasta and pizza)" "then": "Italian restaurant (which serves more than pasta and pizza)"
}, },
"9": { "9": {
"then": "French dishes are served here" "then": "French restaurant"
} }
}, },
"question": "What kind of food is served here?", "question": "What kind of food is served here?",
@ -6791,18 +6791,53 @@
"0": { "0": {
"options": { "options": {
"0": { "0": {
"question": "Should mention {search} in the first comment" "question": "Only show notes opened by an anonymous contributor"
} }
} }
}, },
"1": { "1": {
"options": { "options": {
"0": { "0": {
"question": "Should <b>not</b> mention {search} in the first comment" "question": "Only show open notes"
} }
} }
}, },
"10": { "10": {
"options": {
"0": {
"question": "Not edited as last by {search}"
}
}
},
"11": {
"options": {
"0": {
"question": "Created before {search}"
}
}
},
"12": {
"options": {
"0": {
"question": "Created after {search}"
}
}
},
"13": {
"options": {
"0": {
"question": "Last edited before {search}"
}
}
},
"14": {
"options": {
"0": {
"question": "Last edited after {search}"
}
}
},
"2": {
"options": { "options": {
"0": { "0": {
"question": "All Notes" "question": "All Notes"
@ -6815,59 +6850,52 @@
} }
} }
}, },
"2": {
"options": {
"0": {
"question": "Opened by contributor {search}"
}
}
},
"3": { "3": {
"options": { "options": {
"0": { "0": {
"question": "<b>Not</b> opened by contributor {search}" "question": "Should mention {search} in the first comment"
} }
} }
}, },
"4": { "4": {
"options": { "options": {
"0": { "0": {
"question": "Last edited by contributor {search}" "question": "Should mention {search} in any comment"
} }
} }
}, },
"5": { "5": {
"options": { "options": {
"0": { "0": {
"question": "Opened after {search}" "question": "Should <b>not</b> mention {search} in the first comment"
} }
} }
}, },
"6": { "6": {
"options": { "options": {
"0": { "0": {
"question": "Created before {search}" "question": "Opened by contributor {search}"
} }
} }
}, },
"7": { "7": {
"options": { "options": {
"0": { "0": {
"question": "Created after {search}" "question": "<b>Not</b> opened by contributor {search}"
} }
} }
}, },
"8": { "8": {
"options": { "options": {
"0": { "0": {
"question": "Only show notes opened by an anonymous contributor" "question": "Edited or commented on by any user with name {search}"
} }
} }
}, },
"9": { "9": {
"options": { "options": {
"0": { "0": {
"question": "Only show open notes" "question": "Last edited by contributor {search}"
} }
} }
} }
@ -11614,6 +11642,17 @@
} }
} }
}, },
"scalebar": {
"mappings": {
"0": {
"then": "Show the scalebar"
},
"1": {
"then": "Hide the scalebar"
}
},
"question": "Should a scale bar be shown on the map?"
},
"settings-link": { "settings-link": {
"render": { "render": {
"special": { "special": {

View file

@ -2707,7 +2707,7 @@
"Cuisine": { "Cuisine": {
"mappings": { "mappings": {
"0": { "0": {
"then": "Esto es una pizzería" "then": "Pizzería"
}, },
"10": { "10": {
"then": "Aquí se sirven platos Chinos" "then": "Aquí se sirven platos Chinos"
@ -2725,10 +2725,10 @@
"then": "Principalmente sirve pasta" "then": "Principalmente sirve pasta"
}, },
"3": { "3": {
"then": "Esta es una tienda de kebak" "then": "Tienda de kebak"
}, },
"5": { "5": {
"then": "Aquí se sirven hamburguesas" "then": "Hamburguesas"
}, },
"6": { "6": {
"then": "Aquí se sirve sushi" "then": "Aquí se sirve sushi"
@ -3135,18 +3135,32 @@
"0": { "0": {
"options": { "options": {
"0": { "0": {
"question": "Debe mencionar {search} en el primer comentario" "question": "Solo mostrar las notas abiertas por contributores anómimos"
} }
} }
}, },
"1": { "1": {
"options": { "options": {
"0": { "0": {
"question": "<b>No</b> debe mencionar {search} en el primer comentario" "question": "Solo mostrar las notas abiertas"
} }
} }
}, },
"10": { "11": {
"options": {
"0": {
"question": "Creada antes de {search}"
}
}
},
"12": {
"options": {
"0": {
"question": "Creada después de {search}"
}
}
},
"2": {
"options": { "options": {
"0": { "0": {
"question": "Todas las notas" "question": "Todas las notas"
@ -3159,59 +3173,38 @@
} }
} }
}, },
"2": {
"options": {
"0": {
"question": "Abierto por el contributor {search}"
}
}
},
"3": { "3": {
"options": { "options": {
"0": { "0": {
"question": "<b>No</b> abierto por el contributor {search}" "question": "Debe mencionar {search} en el primer comentario"
}
}
},
"4": {
"options": {
"0": {
"question": "Editada por última vez por el contributor {search}"
} }
} }
}, },
"5": { "5": {
"options": { "options": {
"0": { "0": {
"question": "Abierta después de {search}" "question": "<b>No</b> debe mencionar {search} en el primer comentario"
} }
} }
}, },
"6": { "6": {
"options": { "options": {
"0": { "0": {
"question": "Creada antes de {search}" "question": "Abierto por el contributor {search}"
} }
} }
}, },
"7": { "7": {
"options": { "options": {
"0": { "0": {
"question": "Creada después de {search}" "question": "<b>No</b> abierto por el contributor {search}"
}
}
},
"8": {
"options": {
"0": {
"question": "Solo mostrar las notas abiertas por contributores anómimos"
} }
} }
}, },
"9": { "9": {
"options": { "options": {
"0": { "0": {
"question": "Solo mostrar las notas abiertas" "question": "Editada por última vez por el contributor {search}"
} }
} }
} }

View file

@ -3560,10 +3560,10 @@
"Cuisine": { "Cuisine": {
"mappings": { "mappings": {
"0": { "0": {
"then": "C'est une pizzéria" "then": "Pizzéria"
}, },
"1": { "1": {
"then": "C'est une friterie" "then": "Friterie"
}, },
"10": { "10": {
"then": "Des plats chinois sont servis ici" "then": "Des plats chinois sont servis ici"
@ -3584,10 +3584,10 @@
"then": "Restaurant Italien" "then": "Restaurant Italien"
}, },
"3": { "3": {
"then": "C'est un resto kebab" "then": "Resto kebab"
}, },
"4": { "4": {
"then": "C'est une sandwicherie" "then": "Sandwicherie"
}, },
"5": { "5": {
"then": "Des hamburgers sont servis ici" "then": "Des hamburgers sont servis ici"
@ -4425,68 +4425,61 @@
}, },
"note": { "note": {
"filter": { "filter": {
"10": { "0": {
"options": {
"0": {
"question": "Toutes les notes"
}
}
},
"2": {
"options": {
"0": {
"question": "Ouverte par {search}"
}
}
},
"3": {
"options": {
"0": {
"question": "<b>Exclure</b>les notes ouvertes par {search}"
}
}
},
"4": {
"options": {
"0": {
"question": "Dernière modification par {search}"
}
}
},
"5": {
"options": {
"0": {
"question": "Ouverte après le {search}"
}
}
},
"6": {
"options": {
"0": {
"question": "Créée avant le {search}"
}
}
},
"7": {
"options": {
"0": {
"question": "Créée après le {search}"
}
}
},
"8": {
"options": { "options": {
"0": { "0": {
"question": "Montrer uniquement les notes ouvertes par un contributeur anonyme" "question": "Montrer uniquement les notes ouvertes par un contributeur anonyme"
} }
} }
}, },
"9": { "1": {
"options": { "options": {
"0": { "0": {
"question": "Montrer uniquement les notes ouvertes" "question": "Montrer uniquement les notes ouvertes"
} }
} }
},
"11": {
"options": {
"0": {
"question": "Créée avant le {search}"
}
}
},
"12": {
"options": {
"0": {
"question": "Créée après le {search}"
}
}
},
"2": {
"options": {
"0": {
"question": "Toutes les notes"
}
}
},
"6": {
"options": {
"0": {
"question": "Ouverte par {search}"
}
}
},
"7": {
"options": {
"0": {
"question": "<b>Exclure</b>les notes ouvertes par {search}"
}
}
},
"9": {
"options": {
"0": {
"question": "Dernière modification par {search}"
}
}
} }
}, },
"name": "Notes OpenStreetMap", "name": "Notes OpenStreetMap",

View file

@ -4289,25 +4289,25 @@
"Cuisine": { "Cuisine": {
"mappings": { "mappings": {
"0": { "0": {
"then": "Dit is een pizzeria" "then": "Pizzeria"
}, },
"1": { "1": {
"then": "Dit is een frituur" "then": "Frituur"
}, },
"10": { "10": {
"then": "Dit is een Chinees restaurant" "then": "Chinees restaurant"
}, },
"11": { "11": {
"then": "Dit is een Grieks restaurant" "then": "Grieks restaurant"
}, },
"12": { "12": {
"then": "Dit is een Indisch restaurant" "then": "Indisch restaurant"
}, },
"13": { "13": {
"then": "Dit is een Turks restaurant (dat meer dan enkel kebab verkoopt)" "then": "Turks restaurant"
}, },
"14": { "14": {
"then": "Dit is een Thaïs restaurant" "then": "Thaïs restaurant"
}, },
"15": { "15": {
"then": "Dit is een mexicaans restaurant" "then": "Dit is een mexicaans restaurant"
@ -4322,28 +4322,28 @@
"then": "Dit is een vis- en zeerestaurant" "then": "Dit is een vis- en zeerestaurant"
}, },
"2": { "2": {
"then": "Dit is een pastazaak" "then": "Pastazaak"
}, },
"3": { "3": {
"then": "Dit is een kebabzaak" "then": "Kebabzaak"
}, },
"4": { "4": {
"then": "Dit is een broodjeszaak" "then": "Broodjeszaak"
}, },
"5": { "5": {
"then": "Dit is een hamburgerrestaurant" "then": "Hamburgerrestaurant"
}, },
"6": { "6": {
"then": "Dit is een sushirestaurant" "then": "Sushirestaurant"
}, },
"7": { "7": {
"then": "Dit is een koffiezaak" "then": "Koffiezaak"
}, },
"8": { "8": {
"then": "Dit is een Italiaans restaurant (dat meer dan enkel pasta of pizza verkoopt)" "then": "Italiaans restaurant (dat meer dan enkel pasta of pizza verkoopt)"
}, },
"9": { "9": {
"then": "Dit is een Frans restaurant" "then": "Frans restaurant"
} }
}, },
"question": "Welk soort gerechten worden hier geserveerd?", "question": "Welk soort gerechten worden hier geserveerd?",
@ -5555,18 +5555,32 @@
"0": { "0": {
"options": { "options": {
"0": { "0": {
"question": "Moet in de eerste opmerking \"{search}\" bevatten" "question": "Toon enkel de Notes geopend door een anonieme bijdrager"
} }
} }
}, },
"1": { "1": {
"options": { "options": {
"0": { "0": {
"question": "Mag in de eerste opmerking <b>niet</b> \"{search}\" bevatten" "question": "Toon enkel open Notes"
} }
} }
}, },
"10": { "11": {
"options": {
"0": {
"question": "Aangemaakt voor {search}"
}
}
},
"12": {
"options": {
"0": {
"question": "Aangemaakt na {search}"
}
}
},
"2": {
"options": { "options": {
"0": { "0": {
"question": "Alle Notes" "question": "Alle Notes"
@ -5579,59 +5593,38 @@
} }
} }
}, },
"2": {
"options": {
"0": {
"question": "Geopend door bijdrager {search}"
}
}
},
"3": { "3": {
"options": { "options": {
"0": { "0": {
"question": "<b>Niet</b> geopend door bijdrager {search}" "question": "Moet in de eerste opmerking \"{search}\" bevatten"
}
}
},
"4": {
"options": {
"0": {
"question": "Laatst bewerkt door bijdrager {search}"
} }
} }
}, },
"5": { "5": {
"options": { "options": {
"0": { "0": {
"question": "Geopend na {search}" "question": "Mag in de eerste opmerking <b>niet</b> \"{search}\" bevatten"
} }
} }
}, },
"6": { "6": {
"options": { "options": {
"0": { "0": {
"question": "Aangemaakt voor {search}" "question": "Geopend door bijdrager {search}"
} }
} }
}, },
"7": { "7": {
"options": { "options": {
"0": { "0": {
"question": "Aangemaakt na {search}" "question": "<b>Niet</b> geopend door bijdrager {search}"
}
}
},
"8": {
"options": {
"0": {
"question": "Toon enkel de Notes geopend door een anonieme bijdrager"
} }
} }
}, },
"9": { "9": {
"options": { "options": {
"0": { "0": {
"question": "Toon enkel open Notes" "question": "Laatst bewerkt door bijdrager {search}"
} }
} }
} }
@ -9276,6 +9269,17 @@
} }
} }
}, },
"scalebar": {
"mappings": {
"0": {
"then": "Toon de schaalbalk"
},
"1": {
"then": "Verberg de schaalbalk"
}
},
"question": "Moet er een schaalbalk weergegeven worden?"
},
"settings-link": { "settings-link": {
"render": { "render": {
"special": { "special": {

View file

@ -1998,7 +1998,7 @@
"Cuisine": { "Cuisine": {
"mappings": { "mappings": {
"0": { "0": {
"then": "To jest pizzeria" "then": "Pizzeria"
}, },
"2": { "2": {
"then": "Podaje głównie makarony" "then": "Podaje głównie makarony"

View file

@ -808,6 +808,133 @@
"description": "Leuchttürme sind hohe Gebäude mit einem Licht an der Spitze, das den Schiffsverkehr leitet.", "description": "Leuchttürme sind hohe Gebäude mit einem Licht an der Spitze, das den Schiffsverkehr leitet.",
"title": "Leuchttürme" "title": "Leuchttürme"
}, },
"mapcomplete-changes": {
"description": "Diese Karte zeigt alle mit MapComplete vorgenommenen Änderungen",
"layers": {
"0": {
"description": "Zeigt alle MapComplete-Änderungen",
"filter": {
"0": {
"options": {
"0": {
"question": "Themenname enthält {search}"
}
}
},
"1": {
"options": {
"0": {
"question": "Themename enthält <b>nicht</b> {search}"
}
}
},
"10": {
"options": {
"0": {
"question": "Etymologie-Thema ausschließen"
}
}
},
"2": {
"options": {
"0": {
"question": "Erstellt von Mitwirkendem {search}"
}
}
},
"3": {
"options": {
"0": {
"question": "<b>Nicht</b> erstellt von Mitwirkendem {search}"
}
}
},
"4": {
"options": {
"0": {
"question": "Erstellt vor {search}"
}
}
},
"5": {
"options": {
"0": {
"question": "Erstellt nach {search}"
}
}
},
"6": {
"options": {
"0": {
"question": "Benutzersprache (ISO-Code) {search}"
}
}
},
"7": {
"options": {
"0": {
"question": "Erstellt mit Host {search}"
}
}
},
"8": {
"options": {
"0": {
"question": "Changeset hat mindestens ein Bild hinzugefügt"
}
}
},
"9": {
"options": {
"0": {
"question": "GRB-Thema ausschließen"
}
}
}
},
"name": "Changeset-Zentren",
"tagRenderings": {
"contributor": {
"question": "Wer hat zu dieser Änderung beigetragen?",
"render": "Änderung vorgenommen von <a href='https://openstreetmap.org/user/{user}' target='_blank'>{user}</a>"
},
"host": {
"question": "Bei welchem Host (Website) wurde diese Änderung vorgenommen?",
"render": "Änderung mit <a href='{host}'>{host}</a>"
},
"locale": {
"question": "In welcher Sprache (Locale) wurde diese Änderung vorgenommen?",
"render": "Die Benutzersprache ist {locale}"
},
"show_changeset_id": {
"render": "Änderungssatz <a href='https://openstreetmap.org/changeset/{id}' target='_blank'>{id}</a>"
},
"theme-id": {
"question": "Welches Thema wurde für diese Änderung verwendet?",
"render": "Änderung mit Thema <a href='https://mapcomplete.org/{theme}'>{theme}</a>"
},
"version": {
"question": "Welche Version von MapComplete wurde verwendet, um diese Änderung vorzunehmen?",
"render": "Erstellt mit {editor}"
}
},
"title": {
"render": "Änderungssatz für {theme}"
}
},
"1": {
"override": {
"tagRenderings+": {
"0": {
"render": "Weitere Statistiken findest du <a href='https://github.com/pietervdvn/MapComplete/tree/develop/Docs/Tools/graphs' target='_blank'>hier</a>"
}
}
}
}
},
"shortDescription": "Zeigt die von MapComplete vorgenommenen Änderungen an",
"title": "Änderungen mit MapComplete"
},
"maproulette": { "maproulette": {
"description": "Thema mit MapRoulette-Aufgaben, die Sie suchen, filtern und beheben können.", "description": "Thema mit MapRoulette-Aufgaben, die Sie suchen, filtern und beheben können.",
"title": "MapRoulette-Aufgaben" "title": "MapRoulette-Aufgaben"
@ -1347,4 +1474,4 @@
"shortDescription": "Eine Karte mit Abfalleimern", "shortDescription": "Eine Karte mit Abfalleimern",
"title": "Abfalleimer" "title": "Abfalleimer"
} }
} }

2541
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -1,6 +1,6 @@
{ {
"name": "mapcomplete", "name": "mapcomplete",
"version": "0.47.0", "version": "0.46.8",
"repository": "https://github.com/pietervdvn/MapComplete", "repository": "https://github.com/pietervdvn/MapComplete",
"description": "A small website to edit OSM easily", "description": "A small website to edit OSM easily",
"bugs": "https://github.com/pietervdvn/MapComplete/issues", "bugs": "https://github.com/pietervdvn/MapComplete/issues",
@ -123,6 +123,10 @@
"reuse-compliance": "reuse lint", "reuse-compliance": "reuse lint",
"housekeeping": "git pull && npx update-browserslist-db@latest && npm run weblate:merge-heavy && npm run generate && npm run generate:docs && npm run generate:schemas && npm run generate:contributor-list && vite-node scripts/fetchLanguages.ts && vite-node scripts/generateSunnyUnlabeled.ts && npm run format && git add assets/ langs/ Docs/ **/*.ts Docs/* src/* && git commit -m 'chore: automated housekeeping...'", "housekeeping": "git pull && npx update-browserslist-db@latest && npm run weblate:merge-heavy && npm run generate && npm run generate:docs && npm run generate:schemas && npm run generate:contributor-list && vite-node scripts/fetchLanguages.ts && vite-node scripts/generateSunnyUnlabeled.ts && npm run format && git add assets/ langs/ Docs/ **/*.ts Docs/* src/* && git commit -m 'chore: automated housekeeping...'",
"###": "MICROSERVICES AND SERVER MAINTAINENCE", "###": "MICROSERVICES AND SERVER MAINTAINENCE",
"release": "standard-version",
"release:minor": "standard-version --release-as minor",
"release:patch": "standard-version --release-as patch",
"release:major": "standard-version --release-as major",
"server:summary": "vite-node scripts/osm2pgsql/tilecountServer.ts", "server:summary": "vite-node scripts/osm2pgsql/tilecountServer.ts",
"server:ldjson": "vite-node scripts/serverLdScrape.ts", "server:ldjson": "vite-node scripts/serverLdScrape.ts",
"server:studio": "vite-node scripts/studioServer -- /root/git/MapComplete/assets", "server:studio": "vite-node scripts/studioServer -- /root/git/MapComplete/assets",
@ -252,6 +256,7 @@
"read-file": "^0.2.0", "read-file": "^0.2.0",
"sass": "^1.58.0", "sass": "^1.58.0",
"sharp": "^0.32.6", "sharp": "^0.32.6",
"standard-version": "^9.5.0",
"svelte": "^3.55.1", "svelte": "^3.55.1",
"svelte-check": "^3.0.2", "svelte-check": "^3.0.2",
"svelte-preprocess": "^5.0.1", "svelte-preprocess": "^5.0.1",

View file

@ -1769,14 +1769,14 @@ input[type="range"].range-lg::-moz-range-thumb {
height: 3.5rem; height: 3.5rem;
} }
.h-16 {
height: 4rem;
}
.h-48 { .h-48 {
height: 12rem; height: 12rem;
} }
.h-16 {
height: 4rem;
}
.h-40 { .h-40 {
height: 10rem; height: 10rem;
} }
@ -4040,6 +4040,10 @@ input[type="range"].range-lg::-moz-range-thumb {
padding-right: 1rem; padding-right: 1rem;
} }
.pt-2 {
padding-top: 0.5rem;
}
.pl-1 { .pl-1 {
padding-left: 0.25rem; padding-left: 0.25rem;
} }
@ -4723,11 +4727,6 @@ input[type="range"].range-lg::-moz-range-thumb {
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
} }
.shadow-transparent {
--tw-shadow-color: transparent;
--tw-shadow: var(--tw-shadow-colored);
}
.shadow-gray-300 { .shadow-gray-300 {
--tw-shadow-color: #D1D5DB; --tw-shadow-color: #D1D5DB;
--tw-shadow: var(--tw-shadow-colored); --tw-shadow: var(--tw-shadow-colored);
@ -8153,6 +8152,10 @@ svg.apply-fill path {
height: 2.75rem; height: 2.75rem;
} }
.sm\:h-32 {
height: 8rem;
}
.sm\:h-64 { .sm\:h-64 {
height: 16rem; height: 16rem;
} }
@ -8346,6 +8349,10 @@ svg.apply-fill path {
display: none; display: none;
} }
.md\:h-64 {
height: 16rem;
}
.md\:h-auto { .md\:h-auto {
height: auto; height: auto;
} }

View file

@ -2,14 +2,15 @@
# Creates various empty (stub) version of files # Creates various empty (stub) version of files
mkdir -p ./src/assets/generated/layers; mkdir -p ./src/assets/generated/layers
echo '{"themes":[]}' > ./src/assets/generated/known_themes.json echo '{"themes":[]}' > ./src/assets/generated/known_themes.json
echo '{"layers": []}' > ./src/assets/generated/known_layers.json echo '{"layers": []}' > ./src/assets/generated/known_layers.json
rm -f ./src/assets/generated/layers/*.json rm -f ./src/assets/generated/layers/*.json
rm -f ./src/assets/generated/themes/*.json rm -f ./src/assets/generated/themes/*.json
cp ./assets/layers/usersettings/usersettings.json ./src/assets/generated/layers/usersettings.json cp ./assets/layers/usersettings/usersettings.json ./src/assets/generated/layers/usersettings.json
echo '{}' > ./src/assets/generated/layers/favourite.json echo '{}' > ./src/assets/generated/layers/favourite.json
echo '{}' > ./src/assets/generated/layers/summary.json echo '{}' > ./src/assets/generated/layers/summary.json
echo '{}' > ./src/assets/generated/layers/last_click.json echo '{}' > ./src/assets/generated/layers/last_click.json
echo '{}' > ./src/assets/generated/layers/search.json echo '{}' > ./src/assets/generated/layers/search.json
echo '[]' > ./src/assets/generated/theme_overview.json echo '[]' > ./src/assets/generated/theme_overview.json
echo '{}' > ./src/assets/generated/layers/geocoded_image.json

View file

@ -9,7 +9,14 @@ export interface ProvidedImage {
key: string key: string
provider: ImageProvider provider: ImageProvider
id: string id: string
date?: Date date?: Date,
/**
* Compass angle of the taken image
* 0 = north, 90° = East
*/
rotation?: number
lat?: number,
lon?: number
} }
export default abstract class ImageProvider { export default abstract class ImageProvider {

View file

@ -162,12 +162,14 @@ export class Mapillary extends ImageProvider {
const metadataUrl = const metadataUrl =
"https://graph.mapillary.com/" + "https://graph.mapillary.com/" +
mapillaryId + mapillaryId +
"?fields=thumb_1024_url,thumb_original_url,captured_at,creator&access_token=" + "?fields=thumb_1024_url,thumb_original_url,captured_at,compass_angle,geometry,creator&access_token=" +
Constants.mapillary_client_token_v4 Constants.mapillary_client_token_v4
const response = await Utils.downloadJsonCached(metadataUrl, 60 * 60) const response = await Utils.downloadJsonCached(metadataUrl, 60 * 60)
const url = <string>response["thumb_1024_url"] const url = <string>response["thumb_1024_url"]
const url_hd = <string>response["thumb_original_url"] const url_hd = <string>response["thumb_original_url"]
const date = new Date() const date = new Date()
const rotation = (720 - Number(response["compass_angle"])) % 360
const geometry = response["geometry"]
date.setTime(response["captured_at"]) date.setTime(response["captured_at"])
return <ProvidedImage>{ return <ProvidedImage>{
id: "" + mapillaryId, id: "" + mapillaryId,
@ -176,6 +178,9 @@ export class Mapillary extends ImageProvider {
provider: this, provider: this,
date, date,
key, key,
rotation,
lat: geometry.coordinates[1],
lon: geometry.coordinates[0]
} }
} }
} }

View file

@ -4,11 +4,14 @@ import { WikimediaImageProvider } from "./WikimediaImageProvider"
import Wikidata from "../Web/Wikidata" import Wikidata from "../Web/Wikidata"
import SvelteUIElement from "../../UI/Base/SvelteUIElement" import SvelteUIElement from "../../UI/Base/SvelteUIElement"
import * as Wikidata_icon from "../../assets/svg/Wikidata.svelte" import * as Wikidata_icon from "../../assets/svg/Wikidata.svelte"
import { Utils } from "../../Utils"
export class WikidataImageProvider extends ImageProvider { export class WikidataImageProvider extends ImageProvider {
public static readonly singleton = new WikidataImageProvider() public static readonly singleton = new WikidataImageProvider()
public readonly defaultKeyPrefixes = ["wikidata"] public readonly defaultKeyPrefixes = ["wikidata"]
public readonly name = "Wikidata" public readonly name = "Wikidata"
private static readonly keyBlacklist: ReadonlySet<string> = new Set(
["mapillary", ...Utils.Times(i => "mapillary:" + i, 10)])
private constructor() { private constructor() {
super() super()
@ -23,6 +26,9 @@ export class WikidataImageProvider extends ImageProvider {
} }
public async ExtractUrls(key: string, value: string): Promise<Promise<ProvidedImage>[]> { public async ExtractUrls(key: string, value: string): Promise<Promise<ProvidedImage>[]> {
if (WikidataImageProvider.keyBlacklist.has(key)) {
return []
}
const entity = await Wikidata.LoadWikidataEntryAsync(value) const entity = await Wikidata.LoadWikidataEntryAsync(value)
if (entity === undefined) { if (entity === undefined) {
return [] return []

View file

@ -164,6 +164,8 @@ export default class UserRelatedState {
"button" | "button_click_right" | "button_click" | "click" | "click_right" "button" | "button_click_right" | "button_click" | "click" | "click_right"
>("button_click_right") >("button_click_right")
public readonly showScale : UIEventSource<boolean>
/** /**
* Preferences as tags exposes many preferences and state properties as record. * Preferences as tags exposes many preferences and state properties as record.
* This is used to bridge the internal state with the usersettings.json layerconfig file * This is used to bridge the internal state with the usersettings.json layerconfig file
@ -209,6 +211,7 @@ export default class UserRelatedState {
"preferences-add-new-mode", "preferences-add-new-mode",
"button_click_right", "button_click_right",
) )
this.showScale = UIEventSource.asBoolean(this.osmConnection.GetPreference("preference-show-scale","false"))
this.imageLicense = this.osmConnection.getPreference("pictures-license", "CC0") this.imageLicense = this.osmConnection.getPreference("pictures-license", "CC0")
this.installedUserThemes = UserRelatedState.initInstalledUserThemes(osmConnection) this.installedUserThemes = UserRelatedState.initInstalledUserThemes(osmConnection)

View file

@ -56,7 +56,7 @@ export interface P4CPicture {
author? author?
license? license?
detailsUrl?: string detailsUrl?: string
direction? direction?: number,
osmTags?: object /*To copy straight into OSM!*/ osmTags?: object /*To copy straight into OSM!*/
thumbUrl: string thumbUrl: string
details: { details: {

View file

@ -26,7 +26,8 @@ export default class Constants {
"last_click", "last_click",
"favourite", "favourite",
"summary", "summary",
"search" "search",
"geocoded_image"
] as const ] as const
/** /**
* Special layers which are not included in a theme by default * Special layers which are not included in a theme by default

View file

@ -22,6 +22,7 @@ export interface MapProperties {
readonly lastClickLocation: Store<{ lon: number; lat: number }> readonly lastClickLocation: Store<{ lon: number; lat: number }>
readonly allowZooming: UIEventSource<true | boolean> readonly allowZooming: UIEventSource<true | boolean>
readonly useTerrain: Store<boolean> readonly useTerrain: Store<boolean>
readonly showScale: UIEventSource<boolean>
/** /**
* Triggered when the user navigated by using the keyboard. * Triggered when the user navigated by using the keyboard.

View file

@ -722,7 +722,7 @@ export class ValidatePointRendering extends DesugaringStep<PointRenderingConfigJ
if (json.marker && !Array.isArray(json.marker)) { if (json.marker && !Array.isArray(json.marker)) {
context.enter("marker").err("The marker in a pointRendering should be an array") context.enter("marker").err("The marker in a pointRendering should be an array")
} }
if (json.location.length == 0) { if (!(json.location?.length > 0)) {
context context
.enter("location") .enter("location")
.err( .err(

View file

@ -9,6 +9,7 @@ import { QueryParameters } from "../../Logic/Web/QueryParameters"
import { Utils } from "../../Utils" import { Utils } from "../../Utils"
import { RegexTag } from "../../Logic/Tags/RegexTag" import { RegexTag } from "../../Logic/Tags/RegexTag"
import MarkdownUtils from "../../Utils/MarkdownUtils" import MarkdownUtils from "../../Utils/MarkdownUtils"
import Validators, { ValidatorType } from "../../UI/InputElement/Validators"
export type FilterConfigOption = { export type FilterConfigOption = {
question: Translation question: Translation
@ -18,7 +19,7 @@ export type FilterConfigOption = {
osmTags: TagsFilter | undefined osmTags: TagsFilter | undefined
/* Only set if fields are present. Used to create `osmTags` (which are used to _actually_ filter) when the field is written*/ /* Only set if fields are present. Used to create `osmTags` (which are used to _actually_ filter) when the field is written*/
readonly originalTagsSpec: TagConfigJson readonly originalTagsSpec: TagConfigJson
fields: { name: string; type: string }[] fields: { name: string; type: ValidatorType }[]
} }
export default class FilterConfig { export default class FilterConfig {
public readonly id: string public readonly id: string
@ -58,8 +59,11 @@ export default class FilterConfig {
throw `Invalid filter: no question given at ${ctx}` throw `Invalid filter: no question given at ${ctx}`
} }
const fields: { name: string; type: string }[] = (option.fields ?? []).map((f, i) => { const fields: { name: string; type: ValidatorType }[] = (option.fields ?? []).map((f, i) => {
const type = f.type ?? "string" const type = <ValidatorType> f.type ?? "string"
if(Validators.availableTypes.indexOf(type) < 0){
throw `Invalid filter: type is not a valid validator. Did you mean one of ${Utils.sortedByLevenshteinDistance(type, <any>Validators.availableTypes, x => x).slice(0, 3)}`
}
// Type is validated against 'ValidatedTextField' in Validation.ts, in ValidateFilterConfig // Type is validated against 'ValidatedTextField' in Validation.ts, in ValidateFilterConfig
if (f.name === undefined || f.name === "" || f.name.match(/[a-z0-9_-]+/) == null) { if (f.name === undefined || f.name === "" || f.name.match(/[a-z0-9_-]+/) == null) {
throw `Invalid filter: a variable name should match [a-z0-9_-]+ at ${ctx}.fields[${i}]` throw `Invalid filter: a variable name should match [a-z0-9_-]+ at ${ctx}.fields[${i}]`

View file

@ -926,7 +926,7 @@ export default class TagRenderingConfig {
* Might give undefined if setting to unknown is not possible * Might give undefined if setting to unknown is not possible
*/ */
public removeToSetUnknown(partOfLayer: LayerConfig, currentTags: Record<string, string>): string[] | undefined { public removeToSetUnknown(partOfLayer: LayerConfig, currentTags: Record<string, string>): string[] | undefined {
if(!partOfLayer?.source || !currentTags){ if (!partOfLayer?.source || !currentTags) {
return return
} }
const toDelete = new Set<string>() const toDelete = new Set<string>()
@ -1001,12 +1001,17 @@ export class TagRenderingConfigUtils {
// The original mappings get "priorityIf" set // The original mappings get "priorityIf" set
const oldMappingsCloned = const oldMappingsCloned =
clone.mappings?.map( clone.mappings?.map(
(m) => (m) => {
<Mapping>{ const mapping = {
...m, ...m,
addExtraTags: [new Tag("nobrand", "")],
priorityIf: m.priorityIf ?? TagUtils.Tag("id~*"), priorityIf: m.priorityIf ?? TagUtils.Tag("id~*"),
}, }
if (m.if.usedKeys().indexOf("nobrand") < 0) {
// Erase 'nobrand=yes', unless this option explicitly sets it
mapping["addExtraTags"] = [new Tag("nobrand", "")]
}
return <Mapping>mapping
},
) ?? [] ) ?? []
clone.mappings = [...oldMappingsCloned, ...extraMappings] clone.mappings = [...oldMappingsCloned, ...extraMappings]
return clone return clone

View file

@ -2,7 +2,11 @@ import LayoutConfig from "./ThemeConfig/LayoutConfig"
import { SpecialVisualizationState } from "../UI/SpecialVisualization" import { SpecialVisualizationState } from "../UI/SpecialVisualization"
import { Changes } from "../Logic/Osm/Changes" import { Changes } from "../Logic/Osm/Changes"
import { Store, UIEventSource } from "../Logic/UIEventSource" import { Store, UIEventSource } from "../Logic/UIEventSource"
import { FeatureSource, IndexedFeatureSource, WritableFeatureSource } from "../Logic/FeatureSource/FeatureSource" import {
FeatureSource,
IndexedFeatureSource,
WritableFeatureSource
} from "../Logic/FeatureSource/FeatureSource"
import { OsmConnection } from "../Logic/Osm/OsmConnection" import { OsmConnection } from "../Logic/Osm/OsmConnection"
import { ExportableMap, MapProperties } from "./MapProperties" import { ExportableMap, MapProperties } from "./MapProperties"
import LayerState from "../Logic/State/LayerState" import LayerState from "../Logic/State/LayerState"
@ -46,7 +50,9 @@ import BackgroundLayerResetter from "../Logic/Actors/BackgroundLayerResetter"
import SaveFeatureSourceToLocalStorage from "../Logic/FeatureSource/Actors/SaveFeatureSourceToLocalStorage" import SaveFeatureSourceToLocalStorage from "../Logic/FeatureSource/Actors/SaveFeatureSourceToLocalStorage"
import BBoxFeatureSource from "../Logic/FeatureSource/Sources/TouchesBboxFeatureSource" import BBoxFeatureSource from "../Logic/FeatureSource/Sources/TouchesBboxFeatureSource"
import ThemeViewStateHashActor from "../Logic/Web/ThemeViewStateHashActor" import ThemeViewStateHashActor from "../Logic/Web/ThemeViewStateHashActor"
import NoElementsInViewDetector, { FeatureViewState } from "../Logic/Actors/NoElementsInViewDetector" import NoElementsInViewDetector, {
FeatureViewState
} from "../Logic/Actors/NoElementsInViewDetector"
import FilteredLayer from "./FilteredLayer" import FilteredLayer from "./FilteredLayer"
import { PreferredRasterLayerSelector } from "../Logic/Actors/PreferredRasterLayerSelector" import { PreferredRasterLayerSelector } from "../Logic/Actors/PreferredRasterLayerSelector"
import { ImageUploadManager } from "../Logic/ImageProviders/ImageUploadManager" import { ImageUploadManager } from "../Logic/ImageProviders/ImageUploadManager"
@ -150,6 +156,10 @@ export default class ThemeViewState implements SpecialVisualizationState {
public readonly toCacheSavers: ReadonlyMap<string, SaveFeatureSourceToLocalStorage> public readonly toCacheSavers: ReadonlyMap<string, SaveFeatureSourceToLocalStorage>
public readonly nearbyImageSearcher: CombinedFetcher public readonly nearbyImageSearcher: CombinedFetcher
/**
* Geocoded images that should be shown on the main map; probably only the currently hovered image
*/
public readonly geocodedImages: UIEventSource<Feature[]> = new UIEventSource<Feature[]>([ ])
public readonly searchState: SearchState public readonly searchState: SearchState
@ -773,6 +783,7 @@ export default class ThemeViewState implements SpecialVisualizationState {
gps_location: this.geolocation.currentUserLocation, gps_location: this.geolocation.currentUserLocation,
gps_location_history: this.geolocation.historicalUserLocations, gps_location_history: this.geolocation.historicalUserLocations,
gps_track: this.geolocation.historicalUserLocationsTrack, gps_track: this.geolocation.historicalUserLocationsTrack,
geocoded_image: new StaticFeatureSource(this.geocodedImages),
selected_element: new StaticFeatureSource( selected_element: new StaticFeatureSource(
this.selectedElement.map((f) => (f === undefined ? empty : [f])) this.selectedElement.map((f) => (f === undefined ? empty : [f]))
), ),
@ -898,6 +909,7 @@ export default class ThemeViewState implements SpecialVisualizationState {
this.selectedElement.addCallback((selected) => { this.selectedElement.addCallback((selected) => {
if (selected === undefined) { if (selected === undefined) {
this.focusOnMap() this.focusOnMap()
this.geocodedImages.set([])
} else { } else {
this.lastClickObject.clear() this.lastClickObject.clear()
} }
@ -934,6 +946,9 @@ export default class ThemeViewState implements SpecialVisualizationState {
this.userRelatedState.recentlyVisitedSearch.add(r) this.userRelatedState.recentlyVisitedSearch.add(r)
}) })
this.userRelatedState.showScale.addCallbackAndRun(showScale => {
this.mapProperties.showScale.set(showScale)
})
new ThemeViewStateHashActor(this) new ThemeViewStateHashActor(this)
new MetaTagging(this) new MetaTagging(this)
new TitleHandler(this.selectedElement, this.featureProperties, this) new TitleHandler(this.selectedElement, this.featureProperties, this)

View file

@ -6,7 +6,8 @@
import { UIEventSource } from "../../Logic/UIEventSource" import { UIEventSource } from "../../Logic/UIEventSource"
import { onDestroy } from "svelte" import { onDestroy } from "svelte"
import { Utils } from "../../Utils" import { Utils } from "../../Utils"
import Tr from "../Base/Tr.svelte" import type { ValidatorType } from "../InputElement/Validators"
import InputHelper from "../InputElement/InputHelper.svelte"
export let filteredLayer: FilteredLayer export let filteredLayer: FilteredLayer
export let option: FilterConfigOption export let option: FilterConfigOption
@ -18,7 +19,7 @@
parts = Utils.splitIntoSubstitutionParts(template) parts = Utils.splitIntoSubstitutionParts(template)
} }
let fieldValues: Record<string, UIEventSource<string>> = {} let fieldValues: Record<string, UIEventSource<string>> = {}
let fieldTypes: Record<string, string> = {} let fieldTypes: Record<string, ValidatorType> = {}
let appliedFilter = <UIEventSource<string>>filteredLayer.appliedFilters.get(id) let appliedFilter = <UIEventSource<string>>filteredLayer.appliedFilters.get(id)
let initialState: Record<string, string> = JSON.parse(appliedFilter?.data ?? "{}") let initialState: Record<string, string> = JSON.parse(appliedFilter?.data ?? "{}")
@ -35,25 +36,30 @@
appliedFilter?.setData(FilteredLayer.fieldsToString(properties)) appliedFilter?.setData(FilteredLayer.fieldsToString(properties))
} }
let firstValue : UIEventSource<string>
for (const field of option.fields) { for (const field of option.fields) {
// A bit of cheating: the 'parts' will have '}' suffixed for fields // A bit of cheating: the 'parts' will have '}' suffixed for fields
const src = new UIEventSource<string>(initialState[field.name] ?? "") const src = new UIEventSource<string>(initialState[field.name] ?? "")
firstValue ??= src
fieldTypes[field.name] = field.type fieldTypes[field.name] = field.type
console.log(field.name, "-->", field.type)
fieldValues[field.name] = src fieldValues[field.name] = src
onDestroy( onDestroy(
src.stabilized(200).addCallback(() => { src.stabilized(200).addCallback(() => {
setFields() setFields()
}) }),
) )
} }
</script> </script>
<div> <div class="low-interaction p-1 rounded-2xl px-3" class:interactive={$firstValue?.length > 0}>
{#each parts as part, i} {#each parts as part, i}
{#if part["subs"]} {#if part["subs"]}
<!-- This is a field! --> <!-- This is a field! -->
<span class="mx-1"> <span class="mx-1">
<ValidatedInput value={fieldValues[part["subs"]]} type={fieldTypes[part["subs"]]} /> <InputHelper value={fieldValues[part["subs"]]} type={fieldTypes[part["subs"]]}>
<ValidatedInput slot="fallback" value={fieldValues[part["subs"]]} type={fieldTypes[part["subs"]]} />
</InputHelper>
</span> </span>
{:else} {:else}
{@html part["message"]} {@html part["message"]}

View file

@ -34,7 +34,12 @@
export let coordinate: { lon: number; lat: number } = undefined export let coordinate: { lon: number; lat: number } = undefined
/** /**
* The center of the map at all times * Max distance that one is allowed to move, to prevent to stray too much
*/
export let maxDistanceInMeters = 50
/**
* The resulting location; either the map center or the snapped coordinate
* If undefined at the beginning, 'coordinate' will be used * If undefined at the beginning, 'coordinate' will be used
*/ */
export let value: UIEventSource<{ lon: number; lat: number }> export let value: UIEventSource<{ lon: number; lat: number }>
@ -57,11 +62,6 @@
export let snappedTo: UIEventSource<WayId | undefined> export let snappedTo: UIEventSource<WayId | undefined>
let preciseLocation: UIEventSource<{ lon: number; lat: number }> = new UIEventSource<{
lon: number
lat: number
}>(undefined)
const map: UIEventSource<MlMap> = new UIEventSource<MlMap>(undefined) const map: UIEventSource<MlMap> = new UIEventSource<MlMap>(undefined)
export let mapProperties: Partial<MapProperties> & { location } = { export let mapProperties: Partial<MapProperties> & { location } = {
zoom: new UIEventSource<number>(19), zoom: new UIEventSource<number>(19),
@ -69,10 +69,7 @@
/*If no snapping needed: the value is simply the map location; /*If no snapping needed: the value is simply the map location;
* If snapping is needed: the value will be set later on by the snapping feature source * If snapping is needed: the value will be set later on by the snapping feature source
* */ * */
location: location: new UIEventSource<{ lon: number; lat: number }>(coordinate),
snapToLayers?.length > 0
? new UIEventSource<{ lon: number; lat: number }>(coordinate)
: value,
bounds: new UIEventSource<BBox>(undefined), bounds: new UIEventSource<BBox>(undefined),
allowMoving: new UIEventSource<boolean>(true), allowMoving: new UIEventSource<boolean>(true),
allowZooming: new UIEventSource<boolean>(true), allowZooming: new UIEventSource<boolean>(true),
@ -143,15 +140,16 @@
}) })
withCorrectedAttributes.features.addCallbackAndRunD((f) => console.log("Snapped point is", f)) withCorrectedAttributes.features.addCallbackAndRunD((f) => console.log("Snapped point is", f))
} }
</script> </script>
<LocationInput <LocationInput
{map} {map}
on:click on:click
{mapProperties} {mapProperties}
value={preciseLocation} value={ snapToLayers?.length > 0 ? new UIEventSource(undefined) : value}
initialCoordinate={coordinate} initialCoordinate={coordinate}
maxDistanceInMeters={50} {maxDistanceInMeters}
> >
<slot name="image" slot="image"> <slot name="image" slot="image">
<Move_arrows class="h-full max-h-24" /> <Move_arrows class="h-full max-h-24" />

View file

@ -132,6 +132,7 @@
<div class="flex h-32 w-max gap-x-2"> <div class="flex h-32 w-max gap-x-2">
{#each $unknownImages as image (image)} {#each $unknownImages as image (image)}
<AttributedImage <AttributedImage
{state}
imgClass="h-32 w-max shrink-0" imgClass="h-32 w-max shrink-0"
image={{ url: image }} image={{ url: image }}
previewedImage={state.previewedImage} previewedImage={state.previewedImage}

View file

@ -7,10 +7,12 @@
import { Mapillary } from "../../Logic/ImageProviders/Mapillary" import { Mapillary } from "../../Logic/ImageProviders/Mapillary"
import { UIEventSource } from "../../Logic/UIEventSource" import { UIEventSource } from "../../Logic/UIEventSource"
import { MagnifyingGlassPlusIcon } from "@babeard/svelte-heroicons/outline" import { MagnifyingGlassPlusIcon } from "@babeard/svelte-heroicons/outline"
import { CloseButton, Modal } from "flowbite-svelte" import { CloseButton } from "flowbite-svelte"
import ImageOperations from "./ImageOperations.svelte" import ImageOperations from "./ImageOperations.svelte"
import Popup from "../Base/Popup.svelte" import Popup from "../Base/Popup.svelte"
import { onDestroy } from "svelte" import { onDestroy } from "svelte"
import type { SpecialVisualizationState } from "../SpecialVisualization"
import type { Feature, Point } from "geojson"
export let image: Partial<ProvidedImage> export let image: Partial<ProvidedImage>
let fallbackImage: string = undefined let fallbackImage: string = undefined
@ -20,19 +22,43 @@
let imgEl: HTMLImageElement let imgEl: HTMLImageElement
export let imgClass: string = undefined export let imgClass: string = undefined
export let state: SpecialVisualizationState = undefined
export let attributionFormat: "minimal" | "medium" | "large" = "medium" export let attributionFormat: "minimal" | "medium" | "large" = "medium"
export let previewedImage: UIEventSource<ProvidedImage> export let previewedImage: UIEventSource<ProvidedImage>
export let canZoom = previewedImage !== undefined export let canZoom = previewedImage !== undefined
let loaded = false let loaded = false
let showBigPreview = new UIEventSource(false) let showBigPreview = new UIEventSource(false)
onDestroy(showBigPreview.addCallbackAndRun(shown=>{ onDestroy(showBigPreview.addCallbackAndRun(shown => {
if(!shown){ if (!shown) {
previewedImage.set(false) previewedImage.set(false)
} }
})) }))
onDestroy(previewedImage.addCallbackAndRun(previewedImage => { onDestroy(previewedImage.addCallbackAndRun(previewedImage => {
showBigPreview.set(previewedImage?.id === image.id) showBigPreview.set(previewedImage?.id === image.id)
})) }))
function highlight(entered: boolean = true) {
if (!entered) {
state?.geocodedImages.set([])
return
}
if (isNaN(image.lon) || isNaN(image.lat)) {
return
}
const f: Feature<Point> = {
type: "Feature",
properties: {
id: image.id,
rotation: image.rotation
},
geometry: {
type: "Point",
coordinates: [image.lon, image.lat]
}
}
console.log(f)
state?.geocodedImages.set([f])
}
</script> </script>
<Popup shown={showBigPreview} bodyPadding="p-0" dismissable={true}> <Popup shown={showBigPreview} bodyPadding="p-0" dismissable={true}>
@ -48,7 +74,10 @@
</div> </div>
</Popup> </Popup>
<div class="relative shrink-0"> <div class="relative shrink-0">
<div class="relative w-fit"> <div class="relative w-fit"
on:mouseenter={() => highlight()}
on:mouseleave={() => highlight(false)}
>
<img <img
bind:this={imgEl} bind:this={imgEl}
on:load={() => (loaded = true)} on:load={() => (loaded = true)}
@ -68,7 +97,7 @@
{#if canZoom && loaded} {#if canZoom && loaded}
<div <div
class="bg-black-transparent absolute right-0 top-0 rounded-bl-full" class="bg-black-transparent absolute right-0 top-0 rounded-bl-full"
on:click={() => previewedImage.set(image)}> on:click={() => previewedImage.set(image)}>
<MagnifyingGlassPlusIcon class="h-8 w-8 cursor-zoom-in pl-3 pb-3" color="white" /> <MagnifyingGlassPlusIcon class="h-8 w-8 cursor-zoom-in pl-3 pb-3" color="white" />
</div> </div>
{/if} {/if}

View file

@ -8,7 +8,6 @@ import ImageProvider, { ProvidedImage } from "../../Logic/ImageProviders/ImagePr
import { OsmConnection } from "../../Logic/Osm/OsmConnection" import { OsmConnection } from "../../Logic/Osm/OsmConnection"
import { Changes } from "../../Logic/Osm/Changes" import { Changes } from "../../Logic/Osm/Changes"
import LayoutConfig from "../../Models/ThemeConfig/LayoutConfig" import LayoutConfig from "../../Models/ThemeConfig/LayoutConfig"
import { Feature } from "geojson"
import SvelteUIElement from "../Base/SvelteUIElement" import SvelteUIElement from "../Base/SvelteUIElement"
import AttributedImage from "./AttributedImage.svelte" import AttributedImage from "./AttributedImage.svelte"
@ -30,6 +29,7 @@ export class ImageCarousel extends Toggle {
try { try {
let image: BaseUIElement = new SvelteUIElement(AttributedImage, { let image: BaseUIElement = new SvelteUIElement(AttributedImage, {
image: url, image: url,
state,
previewedImage: state?.previewedImage, previewedImage: state?.previewedImage,
}) })

View file

@ -14,8 +14,8 @@
import AttributedImage from "./AttributedImage.svelte" import AttributedImage from "./AttributedImage.svelte"
import SpecialTranslation from "../Popup/TagRendering/SpecialTranslation.svelte" import SpecialTranslation from "../Popup/TagRendering/SpecialTranslation.svelte"
import LoginToggle from "../Base/LoginToggle.svelte" import LoginToggle from "../Base/LoginToggle.svelte"
import ImagePreview from "./ImagePreview.svelte" import { onDestroy } from "svelte"
import FloatOver from "../Base/FloatOver.svelte" import { Utils } from "../../Utils"
export let tags: UIEventSource<OsmTags> export let tags: UIEventSource<OsmTags>
export let state: SpecialVisualizationState export let state: SpecialVisualizationState
@ -23,6 +23,8 @@
export let feature: Feature export let feature: Feature
export let layer: LayerConfig export let layer: LayerConfig
export let highlighted: UIEventSource<string> = undefined
export let linkable = true export let linkable = true
let targetValue = Object.values(image.osmTags)[0] let targetValue = Object.values(image.osmTags)[0]
let isLinked = new UIEventSource(Object.values(tags.data).some((v) => targetValue === v)) let isLinked = new UIEventSource(Object.values(tags.data).some((v) => targetValue === v))
@ -33,7 +35,7 @@
key: undefined, key: undefined,
provider: AllImageProviders.byName(image.provider), provider: AllImageProviders.byName(image.provider),
date: new Date(image.date), date: new Date(image.date),
id: Object.values(image.osmTags)[0], id: Object.values(image.osmTags)[0]
} }
async function applyLink(isLinked: boolean) { async function applyLink(isLinked: boolean) {
@ -44,7 +46,7 @@
if (isLinked) { if (isLinked) {
const action = new LinkImageAction(currentTags.id, key, url, tags, { const action = new LinkImageAction(currentTags.id, key, url, tags, {
theme: tags.data._orig_theme ?? state.layout.id, theme: tags.data._orig_theme ?? state.layout.id,
changeType: "link-image", changeType: "link-image"
}) })
await state.changes.applyAction(action) await state.changes.applyAction(action)
} else { } else {
@ -53,7 +55,7 @@
if (v === url) { if (v === url) {
const action = new ChangeTagAction(currentTags.id, new Tag(k, ""), currentTags, { const action = new ChangeTagAction(currentTags.id, new Tag(k, ""), currentTags, {
theme: tags.data._orig_theme ?? state.layout.id, theme: tags.data._orig_theme ?? state.layout.id,
changeType: "remove-image", changeType: "remove-image"
}) })
state.changes.applyAction(action) state.changes.applyAction(action)
} }
@ -62,16 +64,30 @@
} }
isLinked.addCallback((isLinked) => applyLink(isLinked)) isLinked.addCallback((isLinked) => applyLink(isLinked))
let element: HTMLDivElement
if (highlighted) {
onDestroy(
highlighted.addCallbackD(highlightedUrl => {
if (highlightedUrl === image.pictureUrl) {
Utils.scrollIntoView(element)
}
})
)
}
</script> </script>
<div <div
class="flex w-fit shrink-0 flex-col overflow-hidden rounded-lg" class="flex w-fit shrink-0 flex-col overflow-hidden rounded-lg"
class:border-interactive={$isLinked} class:border-interactive={$isLinked || $highlighted === image.pictureUrl}
style="border-width: 2px" style="border-width: 2px"
bind:this={element}
> >
<AttributedImage <AttributedImage
{state}
image={providedImage} image={providedImage}
imgClass="max-h-64 w-auto" imgClass="max-h-64 w-auto sm:h-32 md:h-64"
previewedImage={state.previewedImage} previewedImage={state.previewedImage}
attributionFormat="minimal" attributionFormat="minimal"
> >

View file

@ -7,13 +7,23 @@
import type { SpecialVisualizationState } from "../SpecialVisualization" import type { SpecialVisualizationState } from "../SpecialVisualization"
import type { P4CPicture } from "../../Logic/Web/NearbyImagesSearch" import type { P4CPicture } from "../../Logic/Web/NearbyImagesSearch"
import LinkableImage from "./LinkableImage.svelte" import LinkableImage from "./LinkableImage.svelte"
import type { Feature } from "geojson" import type { Feature, Point } from "geojson"
import LayerConfig from "../../Models/ThemeConfig/LayerConfig" import LayerConfig from "../../Models/ThemeConfig/LayerConfig"
import Loading from "../Base/Loading.svelte" import Loading from "../Base/Loading.svelte"
import AllImageProviders from "../../Logic/ImageProviders/AllImageProviders" import AllImageProviders from "../../Logic/ImageProviders/AllImageProviders"
import Tr from "../Base/Tr.svelte" import Tr from "../Base/Tr.svelte"
import Translations from "../i18n/Translations" import Translations from "../i18n/Translations"
import MapillaryLink from "../BigComponents/MapillaryLink.svelte" import MapillaryLink from "../BigComponents/MapillaryLink.svelte"
import MaplibreMap from "../Map/MaplibreMap.svelte"
import { Map as MlMap } from "maplibre-gl"
import { MapLibreAdaptor } from "../Map/MapLibreAdaptor"
import ShowDataLayer from "../Map/ShowDataLayer"
import StaticFeatureSource from "../../Logic/FeatureSource/Sources/StaticFeatureSource"
import * as geocoded_image from "../../assets/generated/layers/geocoded_image.json"
import type { LayerConfigJson } from "../../Models/ThemeConfig/Json/LayerConfigJson"
import { onDestroy } from "svelte"
import { BBox } from "../../Logic/BBox"
export let tags: UIEventSource<OsmTags> export let tags: UIEventSource<OsmTags>
export let state: SpecialVisualizationState export let state: SpecialVisualizationState
@ -42,12 +52,100 @@
[loadedImages] [loadedImages]
) )
let asFeatures = result.map(p4cs => p4cs.map(p4c => (<Feature<Point>>{
type: "Feature",
geometry: {
type: "Point",
coordinates: [p4c.coordinates.lng, p4c.coordinates.lat]
},
properties: {
id: p4c.pictureUrl,
rotation: p4c.direction
}
})))
let selected = new UIEventSource<P4CPicture>(undefined)
let selectedAsFeature = selected.mapD(s => {
return [<Feature<Point>>{
type: "Feature",
geometry: {
type: "Point",
coordinates: [s.coordinates.lng, s.coordinates.lat]
},
properties: {
id: s.pictureUrl,
selected: "yes",
rotation: s.direction
}
}]
})
let someLoading = imageState.state.mapD((stateRecord) => let someLoading = imageState.state.mapD((stateRecord) =>
Object.values(stateRecord).some((v) => v === "loading") Object.values(stateRecord).some((v) => v === "loading")
) )
let errors = imageState.state.mapD((stateRecord) => let errors = imageState.state.mapD((stateRecord) =>
Object.keys(stateRecord).filter((k) => stateRecord[k] === "error") Object.keys(stateRecord).filter((k) => stateRecord[k] === "error")
) )
let highlighted = new UIEventSource<string>(undefined)
onDestroy(highlighted.addCallbackD(hl => {
const p4c = result.data?.find(i => i.pictureUrl === hl)
selected.set(p4c)
}
))
let map: UIEventSource<MlMap> = new UIEventSource<MlMap>(undefined)
let mapProperties = new MapLibreAdaptor(map, {
rasterLayer: state.mapProperties.rasterLayer,
rotation: state.mapProperties.rotation,
pitch: state.mapProperties.pitch,
zoom: new UIEventSource<number>(16),
location: new UIEventSource({ lon, lat }),
})
const geocodedImageLayer = new LayerConfig(<LayerConfigJson>geocoded_image)
new ShowDataLayer(map, {
features: new StaticFeatureSource(asFeatures),
layer: geocodedImageLayer,
zoomToFeatures: true,
onClick: (feature) => {
highlighted.set(feature.properties.id)
}
})
ShowDataLayer.showMultipleLayers(
map,
new StaticFeatureSource([feature]),
state.layout.layers
)
onDestroy(
asFeatures.addCallbackAndRunD(features => {
if(features.length == 0){
return
}
let bbox = BBox.get(features[0])
for (const f of features) {
bbox = bbox.unionWith(BBox.get(f))
}
mapProperties.maxbounds.set(bbox.pad(1.1))
})
)
new ShowDataLayer(map, {
features: new StaticFeatureSource(selectedAsFeature),
layer: geocodedImageLayer,
onClick: (feature) => {
highlighted.set(feature.properties.id)
}
})
</script> </script>
<div class="flex flex-col"> <div class="flex flex-col">
@ -62,12 +160,24 @@
{:else} {:else}
<div class="flex w-full space-x-4 overflow-x-auto" style="scroll-snap-type: x proximity"> <div class="flex w-full space-x-4 overflow-x-auto" style="scroll-snap-type: x proximity">
{#each $result as image (image.pictureUrl)} {#each $result as image (image.pictureUrl)}
<span class="w-fit shrink-0" style="scroll-snap-align: start"> <span class="w-fit shrink-0" style="scroll-snap-align: start"
<LinkableImage {tags} {image} {state} {feature} {layer} {linkable} /> on:mouseenter={() => {highlighted.set(image.pictureUrl)}}
on:mouseleave={() =>{ highlighted.set(undefined); selected.set(undefined)}}
>
<LinkableImage {tags} {image} {state} {feature} {layer} {linkable} {highlighted} />
</span> </span>
{/each} {/each}
</div> </div>
{/if} {/if}
<span class="self-end pt-2">
<MapillaryLink
large={false}
mapProperties={{ zoom: new ImmutableStore(16), location: new ImmutableStore({ lon, lat }) }}
/>
</span>
<div class="my-2 flex justify-between"> <div class="my-2 flex justify-between">
<div> <div>
{#if $someLoading && $result.length > 0} {#if $someLoading && $result.length > 0}
@ -80,9 +190,10 @@
/> />
{/if} {/if}
</div> </div>
<MapillaryLink </div>
large={false}
mapProperties={{ zoom: new ImmutableStore(16), location: new ImmutableStore({ lon, lat }) }}
/> <div class="h-48">
<MaplibreMap interactive={false} {map} {mapProperties} />
</div> </div>
</div> </div>

View file

@ -11,8 +11,9 @@
import Camera_plus from "../../assets/svg/Camera_plus.svelte" import Camera_plus from "../../assets/svg/Camera_plus.svelte"
import LoginToggle from "../Base/LoginToggle.svelte" import LoginToggle from "../Base/LoginToggle.svelte"
import { ariaLabel } from "../../Utils/ariaLabel" import { ariaLabel } from "../../Utils/ariaLabel"
import { Accordion, AccordionItem } from "flowbite-svelte" import { Accordion, AccordionItem, Modal } from "flowbite-svelte"
import AccordionSingle from "../Flowbite/AccordionSingle.svelte" import AccordionSingle from "../Flowbite/AccordionSingle.svelte"
import Popup from "../Base/Popup.svelte"
export let tags: UIEventSource<OsmTags> export let tags: UIEventSource<OsmTags>
export let state: SpecialVisualizationState export let state: SpecialVisualizationState
@ -24,15 +25,16 @@
export let layer: LayerConfig export let layer: LayerConfig
const t = Translations.t.image.nearby const t = Translations.t.image.nearby
let expanded = false
let enableLogin = state.featureSwitches.featureSwitchEnableLogin let enableLogin = state.featureSwitches.featureSwitchEnableLogin
export let shown = new UIEventSource(false)
</script> </script>
{#if enableLogin.data} {#if enableLogin.data}
<AccordionSingle> <button on:click={() => {shown.set(!shown.data)}}><Tr t={t.seeNearby}/> </button>
<span slot="header" class="p-2 text-base"> <Popup {shown} bodyPadding="p-4">
<span slot="header">
<Tr t={t.seeNearby} /> <Tr t={t.seeNearby} />
</span> </span>
<NearbyImages {tags} {state} {lon} {lat} {feature} {linkable} {layer} /> <NearbyImages {tags} {state} {lon} {lat} {feature} {linkable} {layer} />
</AccordionSingle> </Popup>
{/if} {/if}

View file

@ -18,9 +18,15 @@
/** /**
* A visualisation to pick a location on a map background * A visualisation to pick a location on a map background
*/ */
/**
* The center of the map. If it contains a value (and initialCoordinate is not given), this will be used as start coordinate
*/
export let value: UIEventSource<{ lon: number; lat: number }> export let value: UIEventSource<{ lon: number; lat: number }>
export let initialCoordinate: { lon: number; lat: number } export let initialCoordinate: { lon: number; lat: number } = undefined
initialCoordinate = initialCoordinate ?? value.data initialCoordinate = initialCoordinate ?? value.data
/**
* Max distance that one is allowed to stray from the initial coordinate
*/
export let maxDistanceInMeters: number = undefined export let maxDistanceInMeters: number = undefined
export let mapProperties: Partial<MapProperties> & { export let mapProperties: Partial<MapProperties> & {
readonly location: UIEventSource<{ lon: number; lat: number }> readonly location: UIEventSource<{ lon: number; lat: number }>

View file

@ -23,9 +23,9 @@
export let type: ValidatorType export let type: ValidatorType
export let value: UIEventSource<string | object> export let value: UIEventSource<string | object>
export let feature: Feature export let feature: Feature = undefined
export let args: (string | number | boolean)[] = undefined export let args: (string | number | boolean)[] = undefined
export let state: SpecialVisualizationState export let state: SpecialVisualizationState = undefined
</script> </script>
{#if type === "translation"} {#if type === "translation"}
@ -51,4 +51,6 @@
<SlopeInput {value} {feature} {state} /> <SlopeInput {value} {feature} {state} />
{:else if type === "wikidata"} {:else if type === "wikidata"}
<WikidataInputHelper {value} {feature} {state} {args} /> <WikidataInputHelper {value} {feature} {state} {args} />
{:else}
<slot name="fallback" />
{/if} {/if}

View file

@ -125,7 +125,7 @@
<HeartOutlineIcon style="--svg-color: {color}" class={twMerge(clss, "apply-fill")} /> <HeartOutlineIcon style="--svg-color: {color}" class={twMerge(clss, "apply-fill")} />
{:else if icon === "confirm"} {:else if icon === "confirm"}
<Confirm class={clss} {color} /> <Confirm class={clss} {color} />
{:else if icon === "direction"} {:else if icon === "direction" || icon === "direction_gradient"}
<Direction_gradient class={clss} {color} /> <Direction_gradient class={clss} {color} />
{:else if icon === "not_found"} {:else if icon === "not_found"}
<Not_found class={twMerge(clss, "no-image-background")} {color} /> <Not_found class={twMerge(clss, "no-image-background")} {color} />

View file

@ -1,5 +1,5 @@
import { ImmutableStore, Store, UIEventSource } from "../../Logic/UIEventSource" import { ImmutableStore, Store, UIEventSource } from "../../Logic/UIEventSource"
import maplibregl, { Map as MLMap, Map as MlMap, SourceSpecification } from "maplibre-gl" import maplibregl, { Map as MLMap, Map as MlMap, ScaleControl, SourceSpecification } from "maplibre-gl"
import { RasterLayerPolygon } from "../../Models/RasterLayers" import { RasterLayerPolygon } from "../../Models/RasterLayers"
import { Utils } from "../../Utils" import { Utils } from "../../Utils"
import { BBox } from "../../Logic/BBox" import { BBox } from "../../Logic/BBox"
@ -48,6 +48,7 @@ export class MapLibreAdaptor implements MapProperties, ExportableMap {
readonly rotation: UIEventSource<number> readonly rotation: UIEventSource<number>
readonly pitch: UIEventSource<number> readonly pitch: UIEventSource<number>
readonly useTerrain: Store<boolean> readonly useTerrain: Store<boolean>
readonly showScale: UIEventSource<boolean>
private static pmtilesInited = false private static pmtilesInited = false
/** /**
@ -93,6 +94,7 @@ export class MapLibreAdaptor implements MapProperties, ExportableMap {
this.useTerrain = state?.useTerrain ?? new ImmutableStore<boolean>(false) this.useTerrain = state?.useTerrain ?? new ImmutableStore<boolean>(false)
this.rasterLayer = this.rasterLayer =
state?.rasterLayer ?? new UIEventSource<RasterLayerPolygon | undefined>(undefined) state?.rasterLayer ?? new UIEventSource<RasterLayerPolygon | undefined>(undefined)
this.showScale = state?.showScale ?? new UIEventSource<boolean>(false)
const lastClickLocation = new UIEventSource<{ const lastClickLocation = new UIEventSource<{
lat: number lat: number
@ -131,6 +133,7 @@ export class MapLibreAdaptor implements MapProperties, ExportableMap {
self.setMaxzoom(self.maxzoom.data) self.setMaxzoom(self.maxzoom.data)
self.setBounds(self.bounds.data) self.setBounds(self.bounds.data)
self.setTerrain(self.useTerrain.data) self.setTerrain(self.useTerrain.data)
self.setScale(self.showScale.data)
this.updateStores(true) this.updateStores(true)
}) })
self.MoveMapToCurrentLoc(self.location.data) self.MoveMapToCurrentLoc(self.location.data)
@ -144,6 +147,7 @@ export class MapLibreAdaptor implements MapProperties, ExportableMap {
self.setBounds(self.bounds.data) self.setBounds(self.bounds.data)
self.SetRotation(self.rotation.data) self.SetRotation(self.rotation.data)
self.setTerrain(self.useTerrain.data) self.setTerrain(self.useTerrain.data)
self.setScale(self.showScale.data)
this.updateStores(true) this.updateStores(true)
map.on("movestart", () => { map.on("movestart", () => {
this.isFlying.setData(true) this.isFlying.setData(true)
@ -221,6 +225,7 @@ export class MapLibreAdaptor implements MapProperties, ExportableMap {
this.allowZooming.addCallbackAndRun((allowZooming) => self.setAllowZooming(allowZooming)) this.allowZooming.addCallbackAndRun((allowZooming) => self.setAllowZooming(allowZooming))
this.bounds.addCallbackAndRunD((bounds) => self.setBounds(bounds)) this.bounds.addCallbackAndRunD((bounds) => self.setBounds(bounds))
this.useTerrain?.addCallbackAndRun((useTerrain) => self.setTerrain(useTerrain)) this.useTerrain?.addCallbackAndRun((useTerrain) => self.setTerrain(useTerrain))
this.showScale?.addCallbackAndRun(showScale => self.setScale(showScale))
} }
/** /**
@ -703,6 +708,32 @@ export class MapLibreAdaptor implements MapProperties, ExportableMap {
} }
} }
private scaleControl: maplibregl.ScaleControl = undefined
private setScale(showScale: boolean) {
const map = this._maplibreMap.data
if (!map) {
return
}
if (!showScale) {
if(this.scaleControl){
map.removeControl(this.scaleControl)
this.scaleControl = undefined
}
return
}
if (this.scaleControl === undefined) {
this.scaleControl = new ScaleControl({
maxWidth: 100,
unit: "metric"
})
}
if (!map.hasControl(this.scaleControl)) {
map.addControl(this.scaleControl, "bottom-right")
}
}
public flyTo(lon: number, lat: number, zoom: number) { public flyTo(lon: number, lat: number, zoom: number) {
this.lockZoom() this.lockZoom()
window.requestAnimationFrame(() => { window.requestAnimationFrame(() => {

View file

@ -159,10 +159,9 @@ class PointRenderingLayer {
}) })
if (this._onClick) { if (this._onClick) {
const self = this el.addEventListener("click", (ev)=> {
el.addEventListener("click", function (ev) {
ev.preventDefault() ev.preventDefault()
self._onClick(feature) this._onClick(feature)
// Workaround to signal the MapLibreAdaptor to ignore this click // Workaround to signal the MapLibreAdaptor to ignore this click
ev["consumed"] = true ev["consumed"] = true
}) })

View file

@ -104,6 +104,7 @@
snapToLayers={$reason.snapTo} snapToLayers={$reason.snapTo}
targetLayer={layer} targetLayer={layer}
dontShow={[id]} dontShow={[id]}
maxDistanceInMeters={200}
/> />
<div class="absolute bottom-0 left-0"> <div class="absolute bottom-0 left-0">
<OpenBackgroundSelectorButton {state} /> <OpenBackgroundSelectorButton {state} />

View file

@ -48,16 +48,14 @@
} }
let htmlElem: HTMLDivElement let htmlElem: HTMLDivElement
$: { function enableEditMode(){
if (editMode && htmlElem !== undefined && config.IsKnown($tags)) { editMode = true
// EditMode switched to true yet the answer is already known, so the person wants to make a change // EditMode switched to true yet the answer is already known, so the person wants to make a change
// Make sure that the question is in the scrollview! // Make sure that the question is in the scrollview!
window.setTimeout(() => {
// Some delay is applied to give Svelte the time to render the _question_ // Some delay is applied to give Svelte the time to render the _question_
window.setTimeout(() => { Utils.scrollIntoView(<any>htmlElem)
Utils.scrollIntoView(<any>htmlElem) }, 50)
}, 50)
}
} }
const _htmlElement = new UIEventSource<HTMLElement>(undefined) const _htmlElement = new UIEventSource<HTMLElement>(undefined)
@ -132,9 +130,7 @@
<EditButton <EditButton
arialabel={config.editButtonAriaLabel} arialabel={config.editButtonAriaLabel}
ariaLabelledBy={answerId} ariaLabelledBy={answerId}
on:click={() => { on:click={() => enableEditMode()}
editMode = true
}}
/> />
{/if} {/if}
</div> </div>

View file

@ -343,7 +343,7 @@
{#if question !== undefined} {#if question !== undefined}
<div class={clss}> <div class={clss}>
<form <form
class="relative flex flex-col overflow-y-auto px-2" class="relative flex flex-col overflow-y-auto px-4"
style="max-height: 75vh" style="max-height: 75vh"
on:submit|preventDefault={() => { on:submit|preventDefault={() => {
/*onSave(); This submit is not needed and triggers too early, causing bugs: see #1808*/ /*onSave(); This submit is not needed and triggers too early, causing bugs: see #1808*/
@ -351,7 +351,7 @@
> >
<fieldset> <fieldset>
<legend> <legend>
<div class="sticky top-0 justify-between pt-1 font-bold" style="z-index: 11"> <div class="sticky top-0 justify-between pt-4 pb-2 font-bold" style="z-index: 11">
<SpecialTranslation t={question} {tags} {state} {layer} feature={selectedElement} /> <SpecialTranslation t={question} {tags} {state} {layer} feature={selectedElement} />
</div> </div>
@ -557,7 +557,7 @@
{/if} {/if}
<div class="flex flex-wrap-reverse items-stretch justify-end sm:flex-nowrap self-end flex-grow"> <div class="flex flex-wrap-reverse items-stretch justify-end sm:flex-nowrap self-end flex-grow mt-4 mb-2">
<!-- TagRenderingQuestion-buttons --> <!-- TagRenderingQuestion-buttons -->
<slot name="cancel" /> <slot name="cancel" />
@ -590,7 +590,7 @@
<TagHint {state} tags={selectedTags} currentProperties={$tags} /> <TagHint {state} tags={selectedTags} currentProperties={$tags} />
<span class="flex flex-wrap"> <span class="flex flex-wrap">
{#if $featureSwitchIsTesting} {#if $featureSwitchIsTesting}
<div class="alert">Testmode &nbsp;</div> <div class="alert" style="padding: 0; margin: 0; margin-right: 0.5rem">Testmode &nbsp;</div>
{/if} {/if}
{#if $featureSwitchIsTesting || $featureSwitchIsDebugging} {#if $featureSwitchIsTesting || $featureSwitchIsDebugging}
<a class="small" on:click={() => console.log("Configuration is ", config)}> <a class="small" on:click={() => console.log("Configuration is ", config)}>

View file

@ -84,6 +84,7 @@ export interface SpecialVisualizationState {
readonly previewedImage: UIEventSource<ProvidedImage> readonly previewedImage: UIEventSource<ProvidedImage>
readonly nearbyImageSearcher: CombinedFetcher readonly nearbyImageSearcher: CombinedFetcher
readonly geolocation: GeoLocationHandler readonly geolocation: GeoLocationHandler
readonly geocodedImages : UIEventSource<Feature[]>
readonly searchState: SearchState readonly searchState: SearchState
getMatchingLayer(properties: Record<string, string>); getMatchingLayer(properties: Record<string, string>);

View file

@ -32,12 +32,23 @@
return type.some((t) => mightBeBoolean(t)) return type.some((t) => mightBeBoolean(t))
} }
function mightBeTag(){
const t = schema.type
if(!Array.isArray(t)){
return false
}
const hasAnd = t.some(obj => obj["$ref"] === "#/definitions/{and:TagConfigJson[];}")
const hasOr = t.some(obj => obj["$ref"] === "#/definitions/{or:TagConfigJson[];}")
const hasString = t.some(obj => obj["type"] === "string")
return hasAnd && hasOr && hasString
}
const isTranslation = const isTranslation =
schema.hints?.typehint === "translation" || schema.hints?.typehint === "translation" ||
schema.hints?.typehint === "rendered" || schema.hints?.typehint === "rendered" ||
ConfigMetaUtils.isTranslation(schema) ConfigMetaUtils.isTranslation(schema)
let type = schema.hints.typehint ?? "string"
let type = schema.hints.typehint ?? (mightBeTag() ? "tag" : "string")
let rendervalue = let rendervalue =
(schema.hints.inline ?? schema.path.join(".")) + (schema.hints.inline ?? schema.path.join(".")) +
(isTranslation ? " <b>{translated(value)}</b>" : " <b>{value}</b>") (isTranslation ? " <b>{translated(value)}</b>" : " <b>{value}</b>")

View file

@ -310,6 +310,11 @@
{/if} {/if}
</div> </div>
</If> </If>
<If condition={state.mapProperties.showScale}>
<div class="h-6">
<!-- Empty. We just provide some space for the maplibre scalecontrol -->
</div>
</If>
</div> </div>
</div> </div>

View file

@ -1275,7 +1275,7 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be
public static sortedByLevenshteinDistance<T>( public static sortedByLevenshteinDistance<T>(
reference: string, reference: string,
ts: T[], ts: ReadonlyArray<T>,
getName: (t: T) => string getName: (t: T) => string
): T[] { ): T[] {
const withDistance: [T, number][] = ts.map((t) => [ const withDistance: [T, number][] = ts.map((t) => [
@ -1464,6 +1464,7 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be
if (!element) { if (!element) {
return return
} }
console.log("Scrolling into view:", element)
// Is the element completely in the view? // Is the element completely in the view?
const parentRect = Utils.findParentWithScrolling(element)?.getBoundingClientRect() const parentRect = Utils.findParentWithScrolling(element)?.getBoundingClientRect()
if (!parentRect) { if (!parentRect) {
@ -1474,7 +1475,9 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be
// Check if the element is within the vertical bounds of the parent element // Check if the element is within the vertical bounds of the parent element
const topIsVisible = elementRect.top >= parentRect.top const topIsVisible = elementRect.top >= parentRect.top
const bottomIsVisible = elementRect.bottom <= parentRect.bottom const bottomIsVisible = elementRect.bottom <= parentRect.bottom
const inView = topIsVisible && bottomIsVisible const leftIsVisible = elementRect.left >= parentRect.left
const rightIsVisible = elementRect.right <= parentRect.right
const inView = topIsVisible && bottomIsVisible && leftIsVisible && rightIsVisible
if (inView) { if (inView) {
return return
} }

View file

@ -1,4 +1,4 @@
<script> <script>
export let color = "#000000" export let color = "#000000"
</script> </script>
<svg {...$$restProps} on:click on:mouseover on:mouseenter on:mouseleave on:keydown on:focus xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns="http://www.w3.org/2000/svg" version="1.0" width="860.50732pt" height="860.50732pt" viewBox="0 0 860.50732 860.50732" preserveAspectRatio="xMidYMid meet" id="svg14" sodipodi:docname="direction_gradient.svg" inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"> <defs id="defs18"> <linearGradient inkscape:collect="always" id="linearGradient832"> <stop style="stop-color:{color};stop-opacity:1;" offset="0" id="stop828"/> <stop style="stop-color:{color};stop-opacity:0;" offset="1" id="stop830"/> </linearGradient> <radialGradient inkscape:collect="always" xlink:href="#linearGradient832" id="radialGradient838" cx="430.25363" cy="519.61188" fx="430.25363" fy="519.61188" r="305.54589" gradientTransform="matrix(0.95288409,-0.94890664,0.94542304,0.94938587,-470.98122,345.21193)" gradientUnits="userSpaceOnUse"/> </defs> <sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="1920" inkscape:window-height="999" id="namedview16" showgrid="false" showguides="true" inkscape:guide-bbox="true" inkscape:zoom="0.70710678" inkscape:cx="279.00239" inkscape:cy="856.75313" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" inkscape:current-layer="svg14"> <sodipodi:guide position="430.25363,862.49682" orientation="1,0" id="guide832" inkscape:locked="false"/> <sodipodi:guide position="-42.427977,430.25368" orientation="0,1" id="guide834" inkscape:locked="false"/> <sodipodi:guide position="398.27788,720.18823" orientation="0,1" id="guide840" inkscape:locked="false"/> </sodipodi:namedview> <metadata id="metadata2"> Created by potrace 1.15, written by Peter Selinger 2001-2017 <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> <dc:title/> </cc:Work> </rdf:RDF> </metadata> <path style="fill:url(#radialGradient838);fill-opacity:1;stroke:none;stroke-width:2.83464575;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 735.79979,124.70799 C 654.79116,43.598883 544.88842,-2.0206645 430.25389,-2.121103 315.61937,-2.0206592 205.71663,43.598888 124.70801,124.70799 l 305.54588,305.54589 z" id="path836" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccc"/> </svg> <svg {...$$restProps} on:click on:mouseover on:mouseenter on:mouseleave on:keydown on:focus version="1.0" width="860.50732pt" height="860.50732pt" viewBox="0 0 860.50732 860.50732" preserveAspectRatio="xMidYMid meet" id="svg14" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> <defs id="defs18"> <linearGradient id="linearGradient832"> <stop style="stop-color:{color};stop-opacity:1;" offset="0" id="stop828" /> <stop style="stop-color:{color};stop-opacity:0;" offset="1" id="stop830" /> </linearGradient> <radialGradient xlink:href="#linearGradient832" id="radialGradient838" cx="430.25363" cy="519.61188" fx="430.25363" fy="519.61188" r="305.54589" gradientTransform="matrix(0.95288409,-0.94890664,0.94542304,0.94938587,-470.98122,345.21193)" gradientUnits="userSpaceOnUse" /> </defs> <metadata id="metadata2"> Created by potrace 1.15, written by Peter Selinger 2001-2017 <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> </cc:Work> </rdf:RDF> </metadata> <path style="fill:url(#radialGradient838);fill-opacity:1;stroke:none;stroke-width:2.83464575;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 735.79979,124.70799 C 654.79116,43.598883 544.88842,-2.0206645 430.25389,-2.121103 315.61937,-2.0206592 205.71663,43.598888 124.70801,124.70799 l 305.54588,305.54589 z" id="path836" /> </svg>

View file

@ -0,0 +1,4 @@
<script>
export let color = "#000000"
</script>
<!-- Created with Inkscape (http://www.inkscape.org/) --> <svg {...$$restProps} on:click on:mouseover on:mouseenter on:mouseleave on:keydown on:focus width="120" height="120" viewBox="0 0 120 120" version="1.1" id="svg1" xml:space="preserve" inkscape:version="1.3.2 (1:1.3.2+202311252150+091e20ef0f)" sodipodi:docname="unsnap.svg" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview id="namedview1" pagecolor="#ffffff" bordercolor="#999999" borderopacity="1" inkscape:showpageshadow="2" inkscape:pageopacity="0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1" inkscape:document-units="px" showguides="true" inkscape:zoom="4.5168066" inkscape:cx="51.695815" inkscape:cy="69.186048" inkscape:window-width="1920" inkscape:window-height="995" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" inkscape:current-layer="layer1"><sodipodi:guide position="315.49944,61.936443" orientation="0,-1" id="guide2" inkscape:locked="false" /></sodipodi:namedview><defs id="defs1" /><g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" transform="translate(-5,-5)"><path id="path1-2" style="fill:{color};fill-opacity:1;stroke-width:3.93092" d="m 91.670867,40.074491 c 0.948679,0.909931 1.380066,2.234124 1.148907,3.527969 l -3.447995,17.260743 c -0.381611,2.137177 -2.526217,4.001294 -4.081205,2.486091 L 79.257979,57.469775 64.262133,72.31877 c -1.383257,1.369713 -3.807955,0.909932 -4.298111,0.288099 -1.707154,-2.165786 -0.138139,-3.968458 0.177549,-4.304093 L 74.600311,52.930303 68.567707,47.05079 c -1.554665,-1.51554 0.253754,-3.707343 2.380393,-4.143751 l 17.16644,-3.89041 c 1.287478,-0.264342 2.622313,0.132882 3.556328,1.057866 z" sodipodi:nodetypes="cccccsssccccc" /><g id="g8" transform="matrix(-1,0,0,1,132.686,0)" /><g id="g10" transform="matrix(0.99755231,-0.06992414,-0.06992414,-0.99755231,14.642674,124.44485)"><path style="color:{color};fill:{color};stroke-linecap:round;-inkscape-stroke:none" d="M 10,90 45,10" id="path3" /><path id="path4" style="color:{color};fill:#808080;stroke-linecap:round;-inkscape-stroke:none;stroke:none;stroke-opacity:1;fill-opacity:1" d="M 45.097656,5.0019531 A 5,5 0 0 0 43.177734,5.34375 5,5 0 0 0 40.419922,7.9960938 L 35.865234,18.40625 c 3.405007,0.669609 6.469474,2.331825 8.867188,4.679688 L 49.580078,12.003906 A 5,5 0 0 0 47.003906,5.4199219 5,5 0 0 0 45.097656,5.0019531 Z M 22.177734,49.691406 5.4199219,87.996094 a 5,5 0 0 0 2.5761719,6.583984 5,5 0 0 0 6.5839842,-2.576172 L 31.621094,53.052734 c -3.513941,-0.175553 -6.76611,-1.396873 -9.44336,-3.361328 z" /><path style="fill:#808080;fill-opacity:1;stroke:{color};stroke-width:0;stroke-linecap:round;stroke-opacity:1" id="path9" sodipodi:type="arc" sodipodi:cx="32.616085" sodipodi:cy="35.55938" sodipodi:rx="12.741771" sodipodi:ry="12.741771" sodipodi:start="0" sodipodi:end="6.26046" sodipodi:open="true" sodipodi:arc-type="arc" d="M 45.357856,35.55938 A 12.741771,12.741771 0 0 1 32.688475,48.300945 12.741771,12.741771 0 0 1 19.875137,35.704157 12.741771,12.741771 0 0 1 32.398925,22.81946 12.741771,12.741771 0 0 1 45.354566,35.269844" /></g><path style="fill:{color};fill-opacity:1;stroke:{color};stroke-width:0;stroke-linecap:round;stroke-opacity:1" id="path10" sodipodi:type="arc" sodipodi:cx="-106.61823" sodipodi:cy="26.136267" sodipodi:rx="12.741771" sodipodi:ry="12.741771" sodipodi:start="0" sodipodi:end="6.26046" sodipodi:open="true" sodipodi:arc-type="arc" d="m -93.876462,26.136267 a 12.741771,12.741771 0 0 1 -12.669378,12.741565 12.741771,12.741771 0 0 1 -12.81334,-12.596788 12.741771,12.741771 0 0 1 12.52379,-12.884697 12.741771,12.741771 0 0 1 12.955638,12.450384" transform="scale(-1,1)" /></g></svg>

View file

@ -158,7 +158,7 @@ describe("ImageProviders", () => {
) )
Utils.injectJsonDownloadForTests( Utils.injectJsonDownloadForTests(
"https://graph.mapillary.com/196804715753265?fields=thumb_1024_url,thumb_original_url,captured_at,creator&access_token=MLY|4441509239301885|b40ad2d3ea105435bd40c7e76993ae85", "https://graph.mapillary.com/196804715753265?fields=thumb_1024_url,thumb_original_url,captured_at,compass_angle,geometry,creator&access_token=MLY|4441509239301885|b40ad2d3ea105435bd40c7e76993ae85",
{ {
thumb_1024_url: thumb_1024_url:
"https://scontent-bru2-1.xx.fbcdn.net/m1/v/t6/An8HQ3DrfU76tWMC602spvM_e_rqOHyiUcYUTetXM7K52DDBEY5J4FWg4WKQqVUlMsWJn4nLXk0pxlBLx31146FqZ2Kg65z7lJUfR6wpW6WPSR5_y7RKdv4YEuzPjwIN0lagBnQONV3UjmXnEGpMouU?stp=s1024x768&ccb=10-5&oh=d460b401c505714ee1cb8bd6baf8ae5d&oe=61731FC3&_nc_sid=122ab1", "https://scontent-bru2-1.xx.fbcdn.net/m1/v/t6/An8HQ3DrfU76tWMC602spvM_e_rqOHyiUcYUTetXM7K52DDBEY5J4FWg4WKQqVUlMsWJn4nLXk0pxlBLx31146FqZ2Kg65z7lJUfR6wpW6WPSR5_y7RKdv4YEuzPjwIN0lagBnQONV3UjmXnEGpMouU?stp=s1024x768&ccb=10-5&oh=d460b401c505714ee1cb8bd6baf8ae5d&oe=61731FC3&_nc_sid=122ab1",
@ -167,6 +167,14 @@ describe("ImageProviders", () => {
id: "196804715753265", id: "196804715753265",
captured_at: 1627748022000, captured_at: 1627748022000,
"compass_angle": 0,
"geometry": {
"type": "Point",
"coordinates": [
3.2153751999722,
51.215653199972
]
},
creator: { creator: {
username: "filipc", username: "filipc",
id: "109372117958792", id: "109372117958792",