diff --git a/Logic/FeatureSource/DummyFeatureSource.ts b/Logic/FeatureSource/DummyFeatureSource.ts
deleted file mode 100644
index 298f9e2c23..0000000000
--- a/Logic/FeatureSource/DummyFeatureSource.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import FeatureSource from "./FeatureSource";
-import {UIEventSource} from "../UIEventSource";
-
-export default class DummyFeatureSource implements FeatureSource{
- public readonly features: UIEventSource<{ feature: any; freshness: Date }[]>;
- public readonly name: string = "Dummy (static) feature source";
-
- constructor(features: UIEventSource<{ feature: any; freshness: Date }[]>) {
- this.features = features;
- }
-
-}
\ No newline at end of file
diff --git a/Models/Constants.ts b/Models/Constants.ts
index 591d8d854b..e572076d86 100644
--- a/Models/Constants.ts
+++ b/Models/Constants.ts
@@ -2,7 +2,7 @@ import { Utils } from "../Utils";
export default class Constants {
- public static vNumber = "0.8.0-rc2";
+ public static vNumber = "0.8.0a";
// The user journey states thresholds when a new feature gets unlocked
public static userJourney = {
diff --git a/README.md b/README.md
index 075cfc3043..be23b733d6 100644
--- a/README.md
+++ b/README.md
@@ -82,7 +82,7 @@ To develop or deploy a version of MapComplete, have a look [to the guide](Docs/D
## Translating MapComplete
-The core strings and builting themes of MapComplete are translated on [Hosted Weblate](https://hosted.weblate.org/projects/mapcomplete/core/).
+The core strings and builtin themes of MapComplete are translated on [Hosted Weblate](https://hosted.weblate.org/projects/mapcomplete/core/).
You can easily make an account and start translating in their web-environment - no installation required.
[](https://hosted.weblate.org/engage/mapcomplete/)
diff --git a/UI/ShowDataLayer.ts b/UI/ShowDataLayer.ts
index 509ca2f5e5..77e5eff9b8 100644
--- a/UI/ShowDataLayer.ts
+++ b/UI/ShowDataLayer.ts
@@ -115,7 +115,7 @@ export default class ShowDataLayer {
console.warn("No layer found for object (probably a now disabled layer)", feature, this._layerDict)
return;
}
- if (layer.title === undefined && (layer.tagRenderings ?? []).length === 0) {
+ if (layer.title === undefined) {
// No popup action defined -> Don't do anything
return;
}
diff --git a/assets/themes/artwork/artwork.json b/assets/themes/artwork/artwork.json
index 3ee69a0021..d546c82508 100644
--- a/assets/themes/artwork/artwork.json
+++ b/assets/themes/artwork/artwork.json
@@ -378,7 +378,8 @@
"it": "Su quale sito web è possibile trovare altre informazioni riguardanti quest’opera?",
"ru": "Есть ли сайт с более подробной информацией об этой работе?",
"ja": "この作品についての詳しい情報はどのウェブサイトにありますか?",
- "zh_Hant": "在那個網站能夠找到更多藝術品的資訊?"
+ "zh_Hant": "在那個網站能夠找到更多藝術品的資訊?",
+ "nb_NO": "Finnes det en nettside med mer info om dette kunstverket?"
},
"render": {
"en": "More information on this website",
@@ -389,7 +390,8 @@
"it": "Ulteriori informazioni su questo sito web",
"ru": "Больше информации на этом сайте",
"ja": "Webサイトに詳細情報がある",
- "zh_Hant": "這個網站有更多資訊"
+ "zh_Hant": "這個網站有更多資訊",
+ "nb_NO": "Mer info er å finne på denne nettsiden"
},
"freeform": {
"key": "website",
@@ -398,14 +400,15 @@
},
{
"question": {
- "en": "Which wikidata-entry corresponds with this artwork?",
- "nl": "Welk wikidata-item beschrijft dit kunstwerk?",
- "fr": "Quelle entrée wikidata correspond à cette œuvre d'art ?",
+ "en": "Which Wikidata-entry corresponds with this artwork?",
+ "nl": "Welk Wikidata-item beschrijft dit kunstwerk?",
+ "fr": "Quelle entrée Wikidata correspond à cette œuvre d'art ?",
"de": "Welcher Wikidata-Eintrag entspricht diesem Kunstwerk?",
"it": "Quale elemento Wikidata corrisponde a quest’opera d’arte?",
- "ru": "Какая запись в wikidata соответсвует этой работе?",
- "ja": "このアートワークに関するwikidataのエントリーはどれですか?",
- "zh_Hant": "這個藝術品有那個對應的 wikidata 項目?"
+ "ru": "Какая запись в Wikidata соответсвует этой работе?",
+ "ja": "このアートワークに関するWikidataのエントリーはどれですか?",
+ "zh_Hant": "這個藝術品有那個對應的 Wikidata 項目?",
+ "nb_NO": "Hvilken Wikipedia-oppføring samsvarer med dette kunstverket?"
},
"render": {
"en": "Corresponds with {wikidata}",
@@ -415,7 +418,8 @@
"it": "Corrisponde a {wikidata}",
"ru": "Запись об этой работе в wikidata: {wikidata}",
"ja": "{wikidata}に関連する",
- "zh_Hant": "與 {wikidata}對應"
+ "zh_Hant": "與 {wikidata}對應",
+ "nb_NO": "Samsvarer med {wikidata}"
},
"freeform": {
"key": "wikidata",
diff --git a/assets/themes/climbing/climbing.json b/assets/themes/climbing/climbing.json
index adcb1fc474..065b0eae5b 100644
--- a/assets/themes/climbing/climbing.json
+++ b/assets/themes/climbing/climbing.json
@@ -437,14 +437,14 @@
"key": "description"
}
},
- {"#": "Rock type",
+ {
+ "#": "Rock type",
"render": {
"en": "The rock type is {_embedding_features_with_rock:rock} as stated on the surrounding crag"
},
"freeform": {
"key": "_embedding_features_with_rock:rock"
}
-
},
"reviews"
],
@@ -562,7 +562,7 @@
{
"#": "Contained routes hist",
"render": {
- "en": "
Difficulties overview
{histogram(_difficulty_hist, , , 3.*:#56bd56, 4.*:#ffff59, 5.*:#ffad48, 6.*:#63a9ff, 7.*:#ff5858, 8.*:#000000, .*:#aaa )}"
+ "en": "Difficulties overview
{histogram(_difficulty_hist)}"
},
"condition": "_difficulty_hist!~\\[\\]"
},
@@ -633,7 +633,8 @@
}
]
},
- {"#": "Rock type (crag/rock/cliff only)",
+ {
+ "#": "Rock type (crag/rock/cliff only)",
"question": {
"en": "What is the rock type here?"
},
@@ -652,9 +653,12 @@
}
}
],
-
"condition": {
- "or": ["climbing=crag","natural=cliff","natural=bare_rock"]
+ "or": [
+ "climbing=crag",
+ "natural=cliff",
+ "natural=bare_rock"
+ ]
}
},
"reviews"
@@ -731,15 +735,15 @@
},
"title": {
"render": {
- "en": "Possible climbing opportunity",
- "nl": "Mogelijke klimgelegenheid",
+ "en": "Climbing opportunity?",
+ "nl": "Klimgelegenheid?",
"de": "Klettermöglichkeit?",
"ja": "登坂教室?",
"nb_NO": "Klatremulighet?"
}
},
"description": {
- "nl": "Een mogelijke klimgelegenheid?",
+ "nl": "Een klimgelegenheid?",
"de": "Eine Klettergelegenheit?",
"en": "A climbing opportunity?",
"ja": "登坂教室?",
diff --git a/assets/themes/speelplekken/license_info.json b/assets/themes/speelplekken/license_info.json
index 6d463871d4..24353cdc7f 100644
--- a/assets/themes/speelplekken/license_info.json
+++ b/assets/themes/speelplekken/license_info.json
@@ -73,5 +73,25 @@
"sources": [
"https://www.antwerpen.be/"
]
+ },
+ {
+ "authors": [
+ "Createlli"
+ ],
+ "path": "social_image.jpg",
+ "license": "Logo (all rights reserved)",
+ "sources": [
+ ""
+ ]
+ },
+ {
+ "authors": [
+ "Youtube.com"
+ ],
+ "path": "youtube.svg",
+ "license": "Logo (all rights reserved)",
+ "sources": [
+ "Youtube.com"
+ ]
}
]
\ No newline at end of file
diff --git a/assets/themes/speelplekken/social_image.jpg b/assets/themes/speelplekken/social_image.jpg
new file mode 100644
index 0000000000..f5aba81ece
Binary files /dev/null and b/assets/themes/speelplekken/social_image.jpg differ
diff --git a/assets/themes/speelplekken/speelplekken.json b/assets/themes/speelplekken/speelplekken.json
index 998917e804..f5f1b98d90 100644
--- a/assets/themes/speelplekken/speelplekken.json
+++ b/assets/themes/speelplekken/speelplekken.json
@@ -4,13 +4,15 @@
"nl": "Welkom bij de groendoener!"
},
"shortDescription": {
+ "*": "En jij? Wat ga jij doen in het groen?",
"nl": "Speelplekken in de Antwerpse Zuidrand"
},
"description": {
"nl": "Welkom bij de Groendoener!
De Zuidrand dat is spelen, ravotten, chillen, wandelen,… in het groen. Meer dan 200 grote en kleine speelplekken liggen er in parken, in bossen en op pleintjes te wachten om ontdekt te worden. De verschillende speelplekken werden getest én goedgekeurd door kinder- en jongerenreporters uit de Zuidrand. Met leuke challenges dagen de reporters jou uit om ook op ontdekking te gaan. Klik op een speelplek op de kaart, bekijk het filmpje en ga op verkenning!
Het project groendoener kadert binnen het strategisch project Beleefbare Open Ruimte in de Antwerpse Zuidrand en is een samenwerking tussen het departement Leefmilieu van provincie Antwerpen, Sportpret vzw, een OpenStreetMap-België Consultent en Createlli vzw. Het project kwam tot stand met steun van Departement Omgeving van de Vlaamse Overheid.

"
},
"language": [
- "nl"
+ "nl",
+ "*"
],
"maintainer": "MapComplete",
"icon": "./assets/themes/speelplekken/logo.svg",
@@ -21,7 +23,7 @@
"startLon": 4.449462,
"startZoom": 12,
"widenFactor": 0.05,
- "socialImage": "",
+ "socialImage": "./assets/themes/speelplekken/social_image.jpg",
"defaultBackgroundId": "CartoDB.Positron",
"layers": [
{
@@ -264,11 +266,13 @@
"render": ""
}
],
- "+iconOverlays": [{
- "if": "_video:id~*",
- "then": "./assets/themes/speelplekken/youtube.svg",
- "badge": true
- }],
+ "+iconOverlays": [
+ {
+ "if": "_video:id~*",
+ "then": "./assets/themes/speelplekken/youtube.svg",
+ "badge": true
+ }
+ ],
"isShown": {
"render": "yes",
"mappings": [
diff --git a/langs/de.json b/langs/de.json
index 8e15773eec..2626105001 100644
--- a/langs/de.json
+++ b/langs/de.json
@@ -149,7 +149,7 @@
"codeContributionsBy": "MapComplete wurde von {contributors} und {hiddenCount} weiteren Beitragenden erstellt",
"themeBy": "Thema betreut von {author}",
"attributionContent": "Alle Daten wurden bereitgestellt von OpenStreetMap, frei verwendbar unter der Open Database License.
"
- }
+ }
},
"favourite": {
"panelIntro": "Ihr persönliches Thema
Aktivieren Sie Ihre Lieblingsebenen aus allen offiziellen Themen",
diff --git a/langs/en.json b/langs/en.json
index 663c7887f6..23633c0c04 100644
--- a/langs/en.json
+++ b/langs/en.json
@@ -31,6 +31,7 @@
"loginWithOpenStreetMap": "Login with OpenStreetMap",
"welcomeBack": "You are logged in, welcome back!",
"loginToStart": "Login to answer this question",
+ "openStreetMapIntro": "An Open Map
Wouldn't it be cool if there was a single map, which everyone could freely use and edit? A single place to store all geo-information? Then, all those websites with different, small and incompatible maps (which are always outdated) wouldn't be needed anymore.
OpenStreetMap is this map. The map data can be used for free (with attribution and publication of changes to that data). On top of that, everyone can freely add new data and fix errors. This website uses OpenStreetMap as well. All the data is from there, and your answers and corrections are added there as well.
A ton of people and application already use OpenStreetMap: Maps.me, OsmAnd, but also the maps at Facebook, Instagram, Apple-maps and Bing-maps are (partly) powered by OpenStreetMap. If you change something here, it'll be reflected in those applications too - after their next update!
",
"search": {
"search": "Search a location",
"searching": "Searching…",
@@ -90,11 +91,16 @@
"fsIncludeCurrentLayers": "Include the current layer choices",
"fsIncludeCurrentLocation": "Include current location"
},
- "morescreen": {
- "intro": "More thematic maps?
Do you enjoy collecting geodata?
There are more themes available.",
- "requestATheme": "If you want a custom-built quest, request it in the issue tracker",
- "streetcomplete": "Another, similar application is StreetComplete.",
- "createYourOwnTheme": "Create your own MapComplete theme from scratch"
+ "attribution": {
+ "attributionTitle": "Attribution notice",
+ "attributionContent": "All data is provided by OpenStreetMap, freely reusable under the Open DataBase License.
",
+ "themeBy": "Theme maintained by {author}",
+ "iconAttribution": {
+ "title": "Used icons"
+ },
+ "mapContributionsBy": "The current visible data has edits made by {contributors}",
+ "mapContributionsByAndHidden": "The current visible data has edits made by {contributors} and {hiddenCount} more contributors",
+ "codeContributionsBy": "MapComplete has been built by {contributors} and {hiddenCount} more contributors"
},
"readYourMessages": "Please, read all your OpenStreetMap-messages before adding a new point.",
"fewChangesBefore": "Please, answer a few questions of existing points before adding a new point.",
diff --git a/langs/themes/en.json b/langs/themes/en.json
index 6f4d00ffb7..62d68ac533 100644
--- a/langs/themes/en.json
+++ b/langs/themes/en.json
@@ -75,7 +75,7 @@
"render": "More information on this website"
},
"4": {
- "question": "Which wikidata-entry corresponds with this artwork?",
+ "question": "Which Wikidata-entry corresponds with this artwork?",
"render": "Corresponds with {wikidata}"
}
}
@@ -440,6 +440,21 @@
"4": {
"question": "What is the difficulty of this climbing route according to the french/belgian system?",
"render": "The difficulty is {climbing:grade:french} according to the french/belgian system"
+ },
+ "5": {
+ "question": "How much bolts does this route have before reaching the moulinette?",
+ "render": "This route has {climbing:bolts} bolts",
+ "mappings": {
+ "0": {
+ "then": "This route is not bolted"
+ },
+ "1": {
+ "then": "This route is not bolted"
+ }
+ }
+ },
+ "7": {
+ "render": "The rock type is {_embedding_features_with_rock:rock} as stated on the surrounding crag"
}
},
"presets": {
@@ -475,6 +490,9 @@
"3": {
"render": "Difficulties overview
{histogram(_difficulty_hist)}"
},
+ "4": {
+ "render": "Contains {_contained_climbing_routes_count} routes
{_contained_climbing_routes}
"
+ },
"5": {
"render": "{name}",
"question": "What is the name of this climbing opportunity?",
@@ -493,6 +511,15 @@
"then": "A climbing crag - a single rock or cliff with at least a few climbing routes"
}
}
+ },
+ "7": {
+ "question": "What is the rock type here?",
+ "render": "The rock type is {rock}",
+ "mappings": {
+ "0": {
+ "then": "Limestone"
+ }
+ }
}
},
"presets": {
diff --git a/langs/themes/fr.json b/langs/themes/fr.json
index 03b95f8c76..a20940d44f 100644
--- a/langs/themes/fr.json
+++ b/langs/themes/fr.json
@@ -75,7 +75,7 @@
"render": "Plus d'info sûr ce site web"
},
"4": {
- "question": "Quelle entrée wikidata correspond à cette œuvre d'art ?",
+ "question": "Quelle entrée Wikidata correspond à cette œuvre d'art ?",
"render": "Correspond à {wikidata}"
}
}
diff --git a/langs/themes/ja.json b/langs/themes/ja.json
index 05aaa64424..8253119ca9 100644
--- a/langs/themes/ja.json
+++ b/langs/themes/ja.json
@@ -75,7 +75,7 @@
"render": "Webサイトに詳細情報がある"
},
"4": {
- "question": "このアートワークに関するwikidataのエントリーはどれですか?",
+ "question": "このアートワークに関するWikidataのエントリーはどれですか?",
"render": "{wikidata}に関連する"
}
}
diff --git a/langs/themes/nb_NO.json b/langs/themes/nb_NO.json
index 13d398f258..de86503ddd 100644
--- a/langs/themes/nb_NO.json
+++ b/langs/themes/nb_NO.json
@@ -60,6 +60,14 @@
"2": {
"question": "Hvilken artist lagde dette?",
"render": "Laget av {artist_name}"
+ },
+ "3": {
+ "question": "Finnes det en nettside med mer info om dette kunstverket?",
+ "render": "Mer info er å finne på denne nettsiden"
+ },
+ "4": {
+ "question": "Hvilken Wikipedia-oppføring samsvarer med dette kunstverket?",
+ "render": "Samsvarer med {wikidata}"
}
}
}
diff --git a/langs/themes/nl.json b/langs/themes/nl.json
index 1bb42f8c5a..26c50fcf9c 100644
--- a/langs/themes/nl.json
+++ b/langs/themes/nl.json
@@ -79,7 +79,7 @@
"render": "Meer informatie op deze website"
},
"4": {
- "question": "Welk wikidata-item beschrijft dit kunstwerk?",
+ "question": "Welk Wikidata-item beschrijft dit kunstwerk?",
"render": "Komt overeen met {wikidata}"
}
}
@@ -347,6 +347,13 @@
"then": "Dit Klimgelegenheid heeft geen naam"
}
}
+ },
+ "7": {
+ "mappings": {
+ "0": {
+ "then": "Kalksteen"
+ }
+ }
}
},
"presets": {
diff --git a/langs/themes/ru.json b/langs/themes/ru.json
index 3167445126..99fc317dbc 100644
--- a/langs/themes/ru.json
+++ b/langs/themes/ru.json
@@ -75,7 +75,7 @@
"render": "Больше информации на этом сайте"
},
"4": {
- "question": "Какая запись в wikidata соответсвует этой работе?",
+ "question": "Какая запись в Wikidata соответсвует этой работе?",
"render": "Запись об этой работе в wikidata: {wikidata}"
}
}
diff --git a/langs/themes/zh_Hant.json b/langs/themes/zh_Hant.json
index d1818cd102..73063a9d78 100644
--- a/langs/themes/zh_Hant.json
+++ b/langs/themes/zh_Hant.json
@@ -75,7 +75,7 @@
"render": "這個網站有更多資訊"
},
"4": {
- "question": "這個藝術品有那個對應的 wikidata 項目?",
+ "question": "這個藝術品有那個對應的 Wikidata 項目?",
"render": "與 {wikidata}對應"
}
}
diff --git a/scripts/generateCache.ts b/scripts/generateCache.ts
index 8a91d709ac..77dfa86536 100644
--- a/scripts/generateCache.ts
+++ b/scripts/generateCache.ts
@@ -16,9 +16,7 @@ import * as OsmToGeoJson from "osmtogeojson";
import MetaTagging from "../Logic/MetaTagging";
import LayerConfig from "../Customizations/JSON/LayerConfig";
import {GeoOperations} from "../Logic/GeoOperations";
-import {fail} from "assert";
import {UIEventSource} from "../Logic/UIEventSource";
-import DummyFeatureSource from "../Logic/FeatureSource/DummyFeatureSource";
function createOverpassObject(theme: LayoutConfig) {
@@ -169,7 +167,7 @@ async function postProcess(targetdir: string, r: TileRange, theme: LayoutConfig,
// Extract the relationship information
const relations = ExtractRelations.BuildMembershipTable(ExtractRelations.GetRelationElements(rawOsm))
- MetaTagging.addMetatags(featuresFreshness, new DummyFeatureSource(new UIEventSource<{feature: any; freshness: Date}[]>(featuresFreshness)) , relations, theme.layers, false);
+ MetaTagging.addMetatags(featuresFreshness, new UIEventSource<{feature: any; freshness: Date}[]>(featuresFreshness) , relations, theme.layers, false);
for (const feature of geojson.features) {