From 1c5882ce3271531f54d84529fab196956dddd32a Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Sun, 24 Sep 2023 13:07:12 +0200 Subject: [PATCH 01/14] Chore: housekeeping --- Docs/BuiltinIndex.md | 1 + Docs/Layers/all_vending_machine.md | 30 ++- Docs/Layers/sport_pitch.md | 2 + Docs/Layers/vending_machine.md | 30 ++- Docs/TagInfo/mapcomplete_personal.json | 21 +- Docs/TagInfo/mapcomplete_sport_pitches.json | 8 +- Docs/TagInfo/mapcomplete_sports.json | 8 +- Docs/TagInfo/mapcomplete_vending_machine.json | 13 ++ src/assets/contributors.json | 2 +- src/assets/language_native.json | 5 +- src/assets/language_translations.json | 184 ++++++++---------- src/assets/translators.json | 10 +- 12 files changed, 187 insertions(+), 127 deletions(-) diff --git a/Docs/BuiltinIndex.md b/Docs/BuiltinIndex.md index 44b7ab3c4..5e7f0dd77 100644 --- a/Docs/BuiltinIndex.md +++ b/Docs/BuiltinIndex.md @@ -321,6 +321,7 @@ - shops - sports_centre - tertiary_education + - vending_machine - veterinary diff --git a/Docs/Layers/all_vending_machine.md b/Docs/Layers/all_vending_machine.md index 3d7f30a6e..323ec9fc5 100644 --- a/Docs/Layers/all_vending_machine.md +++ b/Docs/Layers/all_vending_machine.md @@ -47,13 +47,14 @@ this quick overview is incomplete attribute | type | values which are supported by this layer ----------- | ------ | ------------------------------------------ [](https://taginfo.openstreetmap.org/keys/id#values) [id](https://wiki.openstreetmap.org/wiki/Key:id) | Multiple choice | -[](https://taginfo.openstreetmap.org/keys/vending#values) [vending](https://wiki.openstreetmap.org/wiki/Key:vending) | [string](../SpecialInputElements.md#string) | [drinks](https://wiki.openstreetmap.org/wiki/Tag:vending%3Ddrinks) [sweets](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dsweets) [food](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dfood) [cigarettes](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dcigarettes) [condoms](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dcondoms) [coffee](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dcoffee) [water](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dwater) [newspapers](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dnewspapers) [bicycle_tube](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dbicycle_tube) [milk](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dmilk) [bread](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dbread) [eggs](https://wiki.openstreetmap.org/wiki/Tag:vending%3Deggs) [cheese](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dcheese) [honey](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dhoney) [potatoes](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dpotatoes) [flowers](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dflowers) [parking_tickets](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dparking_tickets) [elongated_coin](https://wiki.openstreetmap.org/wiki/Tag:vending%3Delongated_coin) [public_transport_tickets](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dpublic_transport_tickets) +[](https://taginfo.openstreetmap.org/keys/vending#values) [vending](https://wiki.openstreetmap.org/wiki/Key:vending) | [string](../SpecialInputElements.md#string) | [drinks](https://wiki.openstreetmap.org/wiki/Tag:vending%3Ddrinks) [sweets](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dsweets) [food](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dfood) [cigarettes](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dcigarettes) [condoms](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dcondoms) [coffee](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dcoffee) [water](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dwater) [newspapers](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dnewspapers) [bicycle_tube](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dbicycle_tube) [milk](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dmilk) [bread](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dbread) [eggs](https://wiki.openstreetmap.org/wiki/Tag:vending%3Deggs) [cheese](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dcheese) [honey](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dhoney) [potatoes](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dpotatoes) [flowers](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dflowers) [parking_tickets](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dparking_tickets) [elongated_coin](https://wiki.openstreetmap.org/wiki/Tag:vending%3Delongated_coin) [public_transport_tickets](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dpublic_transport_tickets) [meat](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dmeat) [](https://taginfo.openstreetmap.org/keys/opening_hours#values) [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) | [opening_hours](../SpecialInputElements.md#opening_hours) | [24/7](https://wiki.openstreetmap.org/wiki/Tag:opening_hours%3D24/7) [](https://taginfo.openstreetmap.org/keys/payment:coins:denominations#values) [payment:coins:denominations](https://wiki.openstreetmap.org/wiki/Key:payment:coins:denominations) | Multiple choice | [0.01 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D0.01 EUR) [0.02 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D0.02 EUR) [0.05 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D0.05 EUR) [0.10 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D0.10 EUR) [0.20 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D0.20 EUR) [0.50 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D0.50 EUR) [1 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D1 EUR) [2 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D2 EUR) [0.05 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D0.05 CHF) [0.10 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D0.10 CHF) [0.20 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D0.20 CHF) [0.50 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D0.50 CHF) [1 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D1 CHF) [2 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D2 CHF) [5 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D5 CHF) [](https://taginfo.openstreetmap.org/keys/payment:notes:denominations#values) [payment:notes:denominations](https://wiki.openstreetmap.org/wiki/Key:payment:notes:denominations) | Multiple choice | [5 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D5 EUR) [10 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D10 EUR) [20 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D20 EUR) [50 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D50 EUR) [100 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D100 EUR) [200 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D200 EUR) [500 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D500 EUR) [10 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D10 CHF) [20 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D20 CHF) [50 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D50 CHF) [100 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D100 CHF) [200 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D200 CHF) [1000 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D1000 CHF) [](https://taginfo.openstreetmap.org/keys/operator#values) [operator](https://wiki.openstreetmap.org/wiki/Key:operator) | [string](../SpecialInputElements.md#string) | [](https://taginfo.openstreetmap.org/keys/indoor#values) [indoor](https://wiki.openstreetmap.org/wiki/Key:indoor) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:indoor%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:indoor%3Dno) [](https://taginfo.openstreetmap.org/keys/level#values) [level](https://wiki.openstreetmap.org/wiki/Key:level) | [float](../SpecialInputElements.md#float) | [0](https://wiki.openstreetmap.org/wiki/Tag:level%3D0) [1](https://wiki.openstreetmap.org/wiki/Tag:level%3D1) [-1](https://wiki.openstreetmap.org/wiki/Tag:level%3D-1) +[](https://taginfo.openstreetmap.org/keys/phone#values) [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) | @@ -122,6 +123,7 @@ This is rendered with `This vending machine sells {vending}` - *Parking tickets are sold* corresponds with `vending=parking_tickets` - *Pressed pennies are sold* corresponds with `vending=elongated_coin` - *Public transport tickets are sold* corresponds with `vending=public_transport_tickets` + - *Meat products are being sold* corresponds with `vending=meat` @@ -292,6 +294,28 @@ This is rendered with `Located on the {level}th floor` +### phone + + + +The question is *What is the phone number of the operator of this vending machine?* + +This rendering asks information about the property [phone](https://wiki.openstreetmap.org/wiki/Key:phone) + +This is rendered with `{phone}` + + + + + + - *{contact:phone}* corresponds with `contact:phone~.+` + - This option cannot be chosen as answer + + +This tagrendering has labels `contact` + + + ### leftover-questions @@ -390,6 +414,10 @@ vending.13 | Sale of cheese | vending~^(.*cheese.*)$ vending.14 | Sale of honey | vending~^(.*honey.*)$ vending.15 | Sale of potatoes | vending~^(.*potatoes.*)$ vending.16 | Sale of flowers | vending~^(.*flowers.*)$ +vending.17 | Sale of parking | vending~^(.*parking_tickets.*)$ +vending.18 | Sale of pressed pennies | vending=elongated_coin +vending.19 | Sale of public transport tickets | vending~^(.*public_transport_tickets.*)$ +vending.20 | Sale of meat products | vending=meat This document is autogenerated from [assets/themes/vending_machine/vending_machine.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/themes/vending_machine/vending_machine.json) diff --git a/Docs/Layers/sport_pitch.md b/Docs/Layers/sport_pitch.md index 65a8f01ac..dce2efb07 100644 --- a/Docs/Layers/sport_pitch.md +++ b/Docs/Layers/sport_pitch.md @@ -134,6 +134,8 @@ The question is *How much basketball hoops does this pitch have?* - This option cannot be chosen as answer +This tagrendering is only visible in the popup if the following condition is met: `sport~^((^|.*;)basketball(;.*|$))$` + ### sport_pitch-surface diff --git a/Docs/Layers/vending_machine.md b/Docs/Layers/vending_machine.md index a5bd5c977..6034c6854 100644 --- a/Docs/Layers/vending_machine.md +++ b/Docs/Layers/vending_machine.md @@ -47,13 +47,14 @@ this quick overview is incomplete attribute | type | values which are supported by this layer ----------- | ------ | ------------------------------------------ [](https://taginfo.openstreetmap.org/keys/id#values) [id](https://wiki.openstreetmap.org/wiki/Key:id) | Multiple choice | -[](https://taginfo.openstreetmap.org/keys/vending#values) [vending](https://wiki.openstreetmap.org/wiki/Key:vending) | [string](../SpecialInputElements.md#string) | [drinks](https://wiki.openstreetmap.org/wiki/Tag:vending%3Ddrinks) [sweets](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dsweets) [food](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dfood) [cigarettes](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dcigarettes) [condoms](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dcondoms) [coffee](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dcoffee) [water](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dwater) [newspapers](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dnewspapers) [bicycle_tube](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dbicycle_tube) [milk](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dmilk) [bread](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dbread) [eggs](https://wiki.openstreetmap.org/wiki/Tag:vending%3Deggs) [cheese](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dcheese) [honey](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dhoney) [potatoes](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dpotatoes) [flowers](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dflowers) [parking_tickets](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dparking_tickets) [elongated_coin](https://wiki.openstreetmap.org/wiki/Tag:vending%3Delongated_coin) [public_transport_tickets](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dpublic_transport_tickets) +[](https://taginfo.openstreetmap.org/keys/vending#values) [vending](https://wiki.openstreetmap.org/wiki/Key:vending) | [string](../SpecialInputElements.md#string) | [drinks](https://wiki.openstreetmap.org/wiki/Tag:vending%3Ddrinks) [sweets](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dsweets) [food](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dfood) [cigarettes](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dcigarettes) [condoms](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dcondoms) [coffee](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dcoffee) [water](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dwater) [newspapers](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dnewspapers) [bicycle_tube](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dbicycle_tube) [milk](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dmilk) [bread](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dbread) [eggs](https://wiki.openstreetmap.org/wiki/Tag:vending%3Deggs) [cheese](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dcheese) [honey](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dhoney) [potatoes](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dpotatoes) [flowers](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dflowers) [parking_tickets](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dparking_tickets) [elongated_coin](https://wiki.openstreetmap.org/wiki/Tag:vending%3Delongated_coin) [public_transport_tickets](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dpublic_transport_tickets) [meat](https://wiki.openstreetmap.org/wiki/Tag:vending%3Dmeat) [](https://taginfo.openstreetmap.org/keys/opening_hours#values) [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) | [opening_hours](../SpecialInputElements.md#opening_hours) | [24/7](https://wiki.openstreetmap.org/wiki/Tag:opening_hours%3D24/7) [](https://taginfo.openstreetmap.org/keys/payment:coins:denominations#values) [payment:coins:denominations](https://wiki.openstreetmap.org/wiki/Key:payment:coins:denominations) | Multiple choice | [0.01 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D0.01 EUR) [0.02 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D0.02 EUR) [0.05 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D0.05 EUR) [0.10 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D0.10 EUR) [0.20 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D0.20 EUR) [0.50 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D0.50 EUR) [1 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D1 EUR) [2 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D2 EUR) [0.05 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D0.05 CHF) [0.10 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D0.10 CHF) [0.20 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D0.20 CHF) [0.50 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D0.50 CHF) [1 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D1 CHF) [2 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D2 CHF) [5 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:coins:denominations%3D5 CHF) [](https://taginfo.openstreetmap.org/keys/payment:notes:denominations#values) [payment:notes:denominations](https://wiki.openstreetmap.org/wiki/Key:payment:notes:denominations) | Multiple choice | [5 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D5 EUR) [10 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D10 EUR) [20 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D20 EUR) [50 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D50 EUR) [100 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D100 EUR) [200 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D200 EUR) [500 EUR](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D500 EUR) [10 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D10 CHF) [20 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D20 CHF) [50 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D50 CHF) [100 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D100 CHF) [200 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D200 CHF) [1000 CHF](https://wiki.openstreetmap.org/wiki/Tag:payment:notes:denominations%3D1000 CHF) [](https://taginfo.openstreetmap.org/keys/operator#values) [operator](https://wiki.openstreetmap.org/wiki/Key:operator) | [string](../SpecialInputElements.md#string) | [](https://taginfo.openstreetmap.org/keys/indoor#values) [indoor](https://wiki.openstreetmap.org/wiki/Key:indoor) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:indoor%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:indoor%3Dno) [](https://taginfo.openstreetmap.org/keys/level#values) [level](https://wiki.openstreetmap.org/wiki/Key:level) | [float](../SpecialInputElements.md#float) | [0](https://wiki.openstreetmap.org/wiki/Tag:level%3D0) [1](https://wiki.openstreetmap.org/wiki/Tag:level%3D1) [-1](https://wiki.openstreetmap.org/wiki/Tag:level%3D-1) +[](https://taginfo.openstreetmap.org/keys/phone#values) [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) | @@ -122,6 +123,7 @@ This is rendered with `This vending machine sells {vending}` - *Parking tickets are sold* corresponds with `vending=parking_tickets` - *Pressed pennies are sold* corresponds with `vending=elongated_coin` - *Public transport tickets are sold* corresponds with `vending=public_transport_tickets` + - *Meat products are being sold* corresponds with `vending=meat` @@ -292,6 +294,28 @@ This is rendered with `Located on the {level}th floor` +### phone + + + +The question is *What is the phone number of the operator of this vending machine?* + +This rendering asks information about the property [phone](https://wiki.openstreetmap.org/wiki/Key:phone) + +This is rendered with `{phone}` + + + + + + - *{contact:phone}* corresponds with `contact:phone~.+` + - This option cannot be chosen as answer + + +This tagrendering has labels `contact` + + + ### leftover-questions @@ -390,6 +414,10 @@ vending.13 | Sale of cheese | vending~^(.*cheese.*)$ vending.14 | Sale of honey | vending~^(.*honey.*)$ vending.15 | Sale of potatoes | vending~^(.*potatoes.*)$ vending.16 | Sale of flowers | vending~^(.*flowers.*)$ +vending.17 | Sale of parking | vending~^(.*parking_tickets.*)$ +vending.18 | Sale of pressed pennies | vending=elongated_coin +vending.19 | Sale of public transport tickets | vending~^(.*public_transport_tickets.*)$ +vending.20 | Sale of meat products | vending=meat This document is autogenerated from [assets/layers/vending_machine/vending_machine.json](https://github.com/pietervdvn/MapComplete/blob/develop/assets/layers/vending_machine/vending_machine.json) diff --git a/Docs/TagInfo/mapcomplete_personal.json b/Docs/TagInfo/mapcomplete_personal.json index 6c25eb3f1..06ef64b47 100644 --- a/Docs/TagInfo/mapcomplete_personal.json +++ b/Docs/TagInfo/mapcomplete_personal.json @@ -12155,22 +12155,22 @@ }, { "key": "hoops", - "description": "Layer 'Sport pitches' shows hoops=1 with a fixed text, namely 'This basketball pitch has a single hoop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme')", + "description": "Layer 'Sport pitches' shows hoops=1 with a fixed text, namely 'This basketball pitch has a single hoop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme') (This is only shown if sport~^((^|.*;)basketball(;.*|$))$)", "value": "1" }, { "key": "hoops", - "description": "Layer 'Sport pitches' shows hoops=2 with a fixed text, namely 'This basketball pitch has two hoops' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme')", + "description": "Layer 'Sport pitches' shows hoops=2 with a fixed text, namely 'This basketball pitch has two hoops' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme') (This is only shown if sport~^((^|.*;)basketball(;.*|$))$)", "value": "2" }, { "key": "hoops", - "description": "Layer 'Sport pitches' shows hoops=4 with a fixed text, namely 'This basketball pitch has four hoops' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme')", + "description": "Layer 'Sport pitches' shows hoops=4 with a fixed text, namely 'This basketball pitch has four hoops' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme') (This is only shown if sport~^((^|.*;)basketball(;.*|$))$)", "value": "4" }, { "key": "hoops", - "description": "Layer 'Sport pitches' shows hoops~.+ with a fixed text, namely 'This basketball pitch has {hoops} hoops' (in the mapcomplete.org theme 'Personal theme')" + "description": "Layer 'Sport pitches' shows hoops~.+ with a fixed text, namely 'This basketball pitch has {hoops} hoops' (in the mapcomplete.org theme 'Personal theme') (This is only shown if sport~^((^|.*;)basketball(;.*|$))$)" }, { "key": "surface", @@ -14082,6 +14082,11 @@ "description": "Layer 'Vending Machines' shows vending=public_transport_tickets with a fixed text, namely 'Public transport tickets are sold' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme')", "value": "public_transport_tickets" }, + { + "key": "vending", + "description": "Layer 'Vending Machines' shows vending=meat with a fixed text, namely 'Meat products are being sold' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme')", + "value": "meat" + }, { "key": "opening_hours", "description": "Layer 'Vending Machines' shows and asks freeform values for key 'opening_hours' (in the mapcomplete.org theme 'Personal theme')" @@ -14314,6 +14319,14 @@ "description": "Layer 'Vending Machines' shows level=-1 with a fixed text, namely 'Located on the first basement level' and allows to pick this as a default answer (in the mapcomplete.org theme 'Personal theme')", "value": "-1" }, + { + "key": "phone", + "description": "Layer 'Vending Machines' shows and asks freeform values for key 'phone' (in the mapcomplete.org theme 'Personal theme')" + }, + { + "key": "contact:phone", + "description": "Layer 'Vending Machines' shows contact:phone~.+ with a fixed text, namely '{contact:phone}' (in the mapcomplete.org theme 'Personal theme')" + }, { "key": "amenity", "description": "The MapComplete theme Personal theme has a layer veterinary showing features with this tag", diff --git a/Docs/TagInfo/mapcomplete_sport_pitches.json b/Docs/TagInfo/mapcomplete_sport_pitches.json index c9e83a932..8120b1361 100644 --- a/Docs/TagInfo/mapcomplete_sport_pitches.json +++ b/Docs/TagInfo/mapcomplete_sport_pitches.json @@ -76,22 +76,22 @@ }, { "key": "hoops", - "description": "Layer 'Sport pitches' shows hoops=1 with a fixed text, namely 'This basketball pitch has a single hoop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Sport pitches')", + "description": "Layer 'Sport pitches' shows hoops=1 with a fixed text, namely 'This basketball pitch has a single hoop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Sport pitches') (This is only shown if sport~^((^|.*;)basketball(;.*|$))$)", "value": "1" }, { "key": "hoops", - "description": "Layer 'Sport pitches' shows hoops=2 with a fixed text, namely 'This basketball pitch has two hoops' and allows to pick this as a default answer (in the mapcomplete.org theme 'Sport pitches')", + "description": "Layer 'Sport pitches' shows hoops=2 with a fixed text, namely 'This basketball pitch has two hoops' and allows to pick this as a default answer (in the mapcomplete.org theme 'Sport pitches') (This is only shown if sport~^((^|.*;)basketball(;.*|$))$)", "value": "2" }, { "key": "hoops", - "description": "Layer 'Sport pitches' shows hoops=4 with a fixed text, namely 'This basketball pitch has four hoops' and allows to pick this as a default answer (in the mapcomplete.org theme 'Sport pitches')", + "description": "Layer 'Sport pitches' shows hoops=4 with a fixed text, namely 'This basketball pitch has four hoops' and allows to pick this as a default answer (in the mapcomplete.org theme 'Sport pitches') (This is only shown if sport~^((^|.*;)basketball(;.*|$))$)", "value": "4" }, { "key": "hoops", - "description": "Layer 'Sport pitches' shows hoops~.+ with a fixed text, namely 'This basketball pitch has {hoops} hoops' (in the mapcomplete.org theme 'Sport pitches')" + "description": "Layer 'Sport pitches' shows hoops~.+ with a fixed text, namely 'This basketball pitch has {hoops} hoops' (in the mapcomplete.org theme 'Sport pitches') (This is only shown if sport~^((^|.*;)basketball(;.*|$))$)" }, { "key": "surface", diff --git a/Docs/TagInfo/mapcomplete_sports.json b/Docs/TagInfo/mapcomplete_sports.json index 0c1a81714..3f6f703cc 100644 --- a/Docs/TagInfo/mapcomplete_sports.json +++ b/Docs/TagInfo/mapcomplete_sports.json @@ -76,22 +76,22 @@ }, { "key": "hoops", - "description": "Layer 'Sport pitches' shows hoops=1 with a fixed text, namely 'This basketball pitch has a single hoop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Sports')", + "description": "Layer 'Sport pitches' shows hoops=1 with a fixed text, namely 'This basketball pitch has a single hoop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Sports') (This is only shown if sport~^((^|.*;)basketball(;.*|$))$)", "value": "1" }, { "key": "hoops", - "description": "Layer 'Sport pitches' shows hoops=2 with a fixed text, namely 'This basketball pitch has two hoops' and allows to pick this as a default answer (in the mapcomplete.org theme 'Sports')", + "description": "Layer 'Sport pitches' shows hoops=2 with a fixed text, namely 'This basketball pitch has two hoops' and allows to pick this as a default answer (in the mapcomplete.org theme 'Sports') (This is only shown if sport~^((^|.*;)basketball(;.*|$))$)", "value": "2" }, { "key": "hoops", - "description": "Layer 'Sport pitches' shows hoops=4 with a fixed text, namely 'This basketball pitch has four hoops' and allows to pick this as a default answer (in the mapcomplete.org theme 'Sports')", + "description": "Layer 'Sport pitches' shows hoops=4 with a fixed text, namely 'This basketball pitch has four hoops' and allows to pick this as a default answer (in the mapcomplete.org theme 'Sports') (This is only shown if sport~^((^|.*;)basketball(;.*|$))$)", "value": "4" }, { "key": "hoops", - "description": "Layer 'Sport pitches' shows hoops~.+ with a fixed text, namely 'This basketball pitch has {hoops} hoops' (in the mapcomplete.org theme 'Sports')" + "description": "Layer 'Sport pitches' shows hoops~.+ with a fixed text, namely 'This basketball pitch has {hoops} hoops' (in the mapcomplete.org theme 'Sports') (This is only shown if sport~^((^|.*;)basketball(;.*|$))$)" }, { "key": "surface", diff --git a/Docs/TagInfo/mapcomplete_vending_machine.json b/Docs/TagInfo/mapcomplete_vending_machine.json index cf55db233..98450f988 100644 --- a/Docs/TagInfo/mapcomplete_vending_machine.json +++ b/Docs/TagInfo/mapcomplete_vending_machine.json @@ -134,6 +134,11 @@ "description": "Layer 'Vending Machines' shows vending=public_transport_tickets with a fixed text, namely 'Public transport tickets are sold' and allows to pick this as a default answer (in the mapcomplete.org theme 'Vending Machines')", "value": "public_transport_tickets" }, + { + "key": "vending", + "description": "Layer 'Vending Machines' shows vending=meat with a fixed text, namely 'Meat products are being sold' and allows to pick this as a default answer (in the mapcomplete.org theme 'Vending Machines')", + "value": "meat" + }, { "key": "opening_hours", "description": "Layer 'Vending Machines' shows and asks freeform values for key 'opening_hours' (in the mapcomplete.org theme 'Vending Machines')" @@ -365,6 +370,14 @@ "key": "level", "description": "Layer 'Vending Machines' shows level=-1 with a fixed text, namely 'Located on the first basement level' and allows to pick this as a default answer (in the mapcomplete.org theme 'Vending Machines')", "value": "-1" + }, + { + "key": "phone", + "description": "Layer 'Vending Machines' shows and asks freeform values for key 'phone' (in the mapcomplete.org theme 'Vending Machines')" + }, + { + "key": "contact:phone", + "description": "Layer 'Vending Machines' shows contact:phone~.+ with a fixed text, namely '{contact:phone}' (in the mapcomplete.org theme 'Vending Machines')" } ] } \ No newline at end of file diff --git a/src/assets/contributors.json b/src/assets/contributors.json index 7332600ae..4ac350da4 100644 --- a/src/assets/contributors.json +++ b/src/assets/contributors.json @@ -1,7 +1,7 @@ { "contributors": [ { - "commits": 5961, + "commits": 5965, "contributor": "Pieter Vander Vennet" }, { diff --git a/src/assets/language_native.json b/src/assets/language_native.json index c7869833f..cee5eb76b 100644 --- a/src/assets/language_native.json +++ b/src/assets/language_native.json @@ -12,7 +12,7 @@ "gl": "lingua galega", "he": "עברית", "hu": "magyar", - "id": "bahasa Indonesia", + "id": "Indonesia", "it": "italiano", "ja": "日本語", "nb_NO": "bokmål", @@ -23,6 +23,5 @@ "ru": "русский язык", "sl": "slovenščina", "sv": "svenska", - "zh_Hans": "简体中文", - "zh_Hant": "繁體中文" + "zh_Hant": "簡體中文" } \ No newline at end of file diff --git a/src/assets/language_translations.json b/src/assets/language_translations.json index 87e202911..f32335666 100644 --- a/src/assets/language_translations.json +++ b/src/assets/language_translations.json @@ -146,7 +146,7 @@ "gl": "Lingua adigue", "he": "אדיגית", "hu": "adigei", - "id": "bahasa Adyghe", + "id": "Adyghe", "it": "adighè", "ja": "アディゲ語", "nb_NO": "adygeisk", @@ -603,7 +603,7 @@ "gl": "árabe", "he": "ערבית", "hu": "arab", - "id": "bahasa Arab", + "id": "Arab", "it": "arabo", "ja": "アラビア語", "nb_NO": "arabisk", @@ -929,7 +929,7 @@ "fi": "Awadhin kieli", "fr": "awadhi", "gl": "Lingua awadhi", - "he": "אוודהית", + "he": "אוודית", "id": "Bahasa Awadhi", "it": "awadhi", "ja": "アワディー語", @@ -1603,7 +1603,7 @@ "gl": "lingua bretoa", "he": "ברטונית", "hu": "breton", - "id": "Bahasa Breton", + "id": "Breton", "it": "bretone", "ja": "ブルトン語", "nb_NO": "bretonsk", @@ -1772,7 +1772,7 @@ "gl": "Lingua buriata", "he": "בוריאטית", "hu": "burját", - "id": "bahasa Buryat", + "id": "Buryat", "it": "buriato", "ja": "ブリヤート語", "nb_NO": "burjatisk", @@ -2316,7 +2316,7 @@ "gl": "Lingua tártara de Crimea", "he": "טטרית של קרים", "hu": "krími tatár", - "id": "Bahasa Tatar Krimea", + "id": "Tatar Krimea", "it": "tataro di Crimea", "ja": "クリミア・タタール語", "nb_NO": "krimtatarisk", @@ -2442,6 +2442,7 @@ "id": "Bahasa Chittagonia", "it": "lingua chittagonian", "ja": "チッタゴン語", + "nb_NO": "Chittagong", "pl": "Język chatgaya", "pt": "Língua chittagong", "pt_BR": "Língua chittagong", @@ -2532,7 +2533,7 @@ "gl": "lingua dinamarquesa", "he": "דנית", "hu": "dán", - "id": "bahasa Denmark", + "id": "Denmark", "it": "danese", "ja": "デンマーク語", "nb_NO": "dansk", @@ -2595,7 +2596,7 @@ "gl": "lingua alemá", "he": "גרמנית", "hu": "német", - "id": "bahasa Jerman", + "id": "Jerman", "it": "tedesco", "ja": "ドイツ語", "nb_NO": "tysk", @@ -2966,8 +2967,8 @@ "ru": "новогреческий язык", "sl": "novogrščina", "sv": "nygrekiska", - "zh_Hans": "希腊语", - "zh_Hant": "希臘語", + "zh_Hans": "现代希腊语", + "zh_Hant": "現代希臘語", "_meta": { "countries": [ "CY", @@ -3584,7 +3585,7 @@ "gl": "lingua feroesa", "he": "פארואזית", "hu": "feröeri", - "id": "bahasa Faroe", + "id": "Faroe", "it": "faroese", "ja": "フェロー語", "nb_NO": "færøysk", @@ -4872,7 +4873,7 @@ "gl": "lingua indonesia", "he": "אינדונזית", "hu": "indonéz", - "id": "bahasa Indonesia", + "id": "Indonesia", "it": "indonesiano", "ja": "インドネシア語", "nb_NO": "indonesisk", @@ -5019,7 +5020,7 @@ "gl": "lingua islandesa", "he": "איסלנדית", "hu": "izlandi", - "id": "bahasa Islandia", + "id": "Islandia", "it": "islandese", "ja": "アイスランド語", "nb_NO": "islandsk", @@ -5055,7 +5056,7 @@ "gl": "lingua italiana", "he": "איטלקית", "hu": "olasz", - "id": "bahasa Italia", + "id": "Italia", "it": "italiano", "ja": "イタリア語", "nb_NO": "italiensk", @@ -5127,7 +5128,7 @@ "gl": "lingua xaponesa", "he": "יפנית", "hu": "japán", - "id": "bahasa Jepang", + "id": "Jepang", "it": "giapponese", "ja": "日本語", "nb_NO": "japansk", @@ -5210,7 +5211,7 @@ "gl": "Lingua xavanesa", "he": "ג'אווה", "hu": "jávai", - "id": "bahasa Jawa", + "id": "Jawa", "it": "giavanese", "ja": "ジャワ語", "nb_NO": "javanesisk", @@ -5247,7 +5248,7 @@ "gl": "lingua xeorxiana", "he": "גאורגית", "hu": "grúz", - "id": "Bahasa Georgia", + "id": "Georgia", "it": "georgiano", "ja": "ジョージア語", "nb_NO": "georgisk", @@ -5282,7 +5283,7 @@ "gl": "Lingua karakalpak", "he": "קראקלפקית", "hu": "karakalpak", - "id": "Bahasa Karakalpak", + "id": "Karakalpak", "it": "karakalpako", "ja": "カラカルパク語", "nl": "Karakalpaks", @@ -5466,6 +5467,7 @@ "ja": "カインガング語", "nb_NO": "Kaingang", "nl": "Kaingang", + "pl": "Języki caingang", "pt": "Língua caingangue", "pt_BR": "Língua kaingáng", "ru": "Каинганг", @@ -5636,7 +5638,7 @@ "gl": "Lingua casaca", "he": "קזחית", "hu": "kazak", - "id": "bahasa Kazakh", + "id": "Kazakh", "it": "kazako", "ja": "カザフ語", "nb_NO": "kasakhisk", @@ -5673,7 +5675,7 @@ "gl": "Lingua grenlandesa", "he": "גרינלנדית", "hu": "grönlandi", - "id": "bahasa Greenland", + "id": "Greenland", "it": "groenlandese", "ja": "グリーンランド語", "nb_NO": "grønlandsk", @@ -5705,7 +5707,7 @@ "gl": "Lingua khmer", "he": "קמרית", "hu": "khmer", - "id": "bahasa Khmer", + "id": "Khmer", "it": "khmer", "ja": "クメール語", "nb_NO": "khmer", @@ -5816,6 +5818,7 @@ "pl": "język komi-permiacki", "pt": "Língua komi-permyak", "ru": "коми-пермяцкий язык", + "sl": "permjaščina", "sv": "komi-permjakiska", "zh_Hans": "彼尔姆科米语", "zh_Hant": "彼爾姆科米語", @@ -6025,32 +6028,32 @@ } }, "ku": { - "ca": "kurd del nord", - "cs": "kurmándží", - "da": "Kurmanji", - "de": "Kurmandschi", - "en": "Kurmanji", - "eo": "kurmanĝa lingvo", - "es": "kurmanji", - "eu": "Kurmanji", - "fi": "Kurmandži", - "fr": "kurmandji", + "ca": "kurd", + "cs": "kurdština", + "da": "kurdisk", + "de": "Kurdisch", + "en": "Kurdish", + "eo": "kurda lingvo", + "es": "kurdo", + "eu": "kurduera", + "fi": "kurdi", + "fr": "kurde", "gl": "lingua kurda", - "he": "כורמנג'ית", - "hu": "kurmandzsi", - "id": "Kurmanji", - "it": "kurmanji", - "ja": "クルマンジー", + "he": "כורדית", + "hu": "kurd", + "id": "Bahasa Kurdi", + "it": "curdo", + "ja": "クルド語", "nb_NO": "kurdisk", - "nl": "Kurmançi", - "pl": "język kurmandżi", - "pt": "curmânji", - "pt_BR": "Curmânji", - "ru": "курманджи", - "sl": "kurmandži", - "sv": "nordkurdiska", + "nl": "Koerdisch", + "pl": "język kurdyjski", + "pt": "língua curda", + "pt_BR": "língua curda", + "ru": "курдские языки", + "sl": "kurdščina", + "sv": "kurdiska", "zh_Hans": "库尔德语", - "zh_Hant": "北庫德語", + "zh_Hant": "庫德語", "_meta": { "countries": [ "IQ" @@ -6127,7 +6130,7 @@ "gl": "lingua komi", "he": "קומי", "hu": "komi", - "id": "Bahasa Komi", + "id": "Komi", "it": "comi", "ja": "コミ語", "nb_NO": "syrjensk", @@ -6135,6 +6138,7 @@ "pl": "język komi", "pt": "língua komi", "ru": "коми язык", + "sl": "komijščina", "sv": "komi", "_meta": { "dir": [ @@ -6217,7 +6221,7 @@ "gl": "kirguiz", "he": "קירגיזית", "hu": "kirgiz", - "id": "bahasa Kirgiz", + "id": "Kirgiz", "it": "kirghiso", "ja": "キルギス語", "nb_NO": "kirgisisk", @@ -6303,7 +6307,7 @@ "gl": "Lingua luxemburguesa", "he": "לוקסמבורגית", "hu": "luxemburgi", - "id": "bahasa Luksemburg", + "id": "Luksemburg", "it": "lussemburghese", "ja": "ルクセンブルク語", "nb_NO": "luxembourgsk", @@ -6543,7 +6547,7 @@ "gl": "Lingua lombarda", "he": "לומברד (שפה)", "hu": "lombard", - "id": "bahasa Lombard", + "id": "Lombard", "it": "lingua lombarda", "ja": "ロンバルド語", "nb_NO": "lombardisk", @@ -6603,7 +6607,7 @@ "gl": "Lingua laosiana", "he": "לאית", "hu": "lao", - "id": "bahasa Lao", + "id": "Lao", "it": "lao", "ja": "ラーオ語", "nb_NO": "laotisk", @@ -6973,7 +6977,7 @@ "gl": "Lingua malgaxe", "he": "מלגשית", "hu": "malgas", - "id": "Bahasa Malagasi", + "id": "Malagasi", "it": "malgascio", "ja": "マダガスカル語", "nb_NO": "gassisk", @@ -7159,7 +7163,7 @@ "gl": "Lingua macedonia", "he": "מקדונית", "hu": "macedón", - "id": "bahasa Makedonia", + "id": "Makedonia", "it": "macedone", "ja": "マケドニア語", "nb_NO": "makedonsk", @@ -7227,7 +7231,7 @@ "gl": "Lingua mongol", "he": "מונגולית", "hu": "mongol", - "id": "bahasa Mongol", + "id": "Mongol", "it": "mongolo", "ja": "モンゴル語", "nb_NO": "mongolsk", @@ -7468,7 +7472,7 @@ "gl": "lingua malaia", "he": "מלאית", "hu": "maláj", - "id": "bahasa Melayu", + "id": "Melayu", "it": "malese", "ja": "マレー語", "nb_NO": "malayisk", @@ -7646,7 +7650,7 @@ "gl": "birmano", "he": "בורמזית", "hu": "burmai", - "id": "bahasa Burma", + "id": "Burma", "it": "birmano", "ja": "ビルマ語", "nb_NO": "burmesisk", @@ -8108,7 +8112,7 @@ "gl": "lingua norueguesa", "he": "נורווגית", "hu": "norvég", - "id": "bahasa Norwegia", + "id": "Norwegia", "it": "norvegese", "ja": "ノルウェー語", "nb_NO": "norsk", @@ -8435,12 +8439,12 @@ "eo": "olonec-karela lingvo", "fi": "livvinkarjala", "fr": "olonetsien", - "gl": "Lingua livvi", + "gl": "lingua livvi", "it": "lingua livvi", "ja": "リッヴィ語", "nb_NO": "livvisk", "nl": "Olonetsisch", - "pl": "Dialekt ołoniecki", + "pl": "dialekt ołoniecki", "ru": "ливвиковское наречие", "sv": "livvi", "zh_Hant": "利維卡累利阿語", @@ -8545,7 +8549,7 @@ "gl": "Lingua oseta", "he": "אוסטית", "hu": "oszét", - "id": "bahasa Ossetia", + "id": "Ossetia", "it": "osseto", "ja": "オセット語", "nb_NO": "ossetisk", @@ -8621,7 +8625,7 @@ "gl": "lingua punjabi (Shahmukhi)", "he": "פנג'אבי (אלפבית שאהמוקי)", "hu": "pandzsábi (Shahmukhi)", - "id": "Bahasa Punjab (Abjad Shahmukhi)", + "id": "Punjab (Abjad Shahmukhi)", "it": "punjabi (Shahmukhī)", "ja": "パンジャーブ語 (シャームキー文字)", "nb_NO": "panjabi (Shahmukhi)", @@ -8846,6 +8850,7 @@ "pl": "Język neosalomoński", "pt": "Língua pijin", "ru": "Пиджин Соломоновых Островов", + "sl": "salomonski pidžin", "sv": "pijin", "_meta": { "dir": [ @@ -9043,7 +9048,7 @@ "gl": "lingua portuguesa", "he": "פורטוגזית", "hu": "portugál", - "id": "bahasa Portugis", + "id": "Portugis", "it": "portoghese", "ja": "ポルトガル語", "nb_NO": "portugisisk", @@ -9253,7 +9258,7 @@ "en": "Rakhine", "fr": "arakanais", "gl": "Lingua arakanesa", - "id": "bahasa Rakhine", + "id": "Rakhine", "ja": "ラカイン語", "nl": "Arakanees", "pl": "Język arakański", @@ -9501,7 +9506,7 @@ "gl": "Lingua arromanesa", "he": "ארומנית", "hu": "aromán", - "id": "Bahasa Arumania", + "id": "Arumania", "it": "arumeno", "ja": "アルーマニア語", "nb_NO": "arumensk", @@ -9896,7 +9901,7 @@ "ca": "taixelhit", "cs": "tašelhit", "de": "Taschelhit", - "en": "Shilha", + "en": "Tachelhit", "eo": "ŝelha lingvo", "es": "chilha", "fi": "Tašelhit", @@ -9996,7 +10001,7 @@ "pt": "Língua cingalesa", "pt_BR": "Língua cingalesa", "ru": "сингальский язык", - "sl": "sinhalščina", + "sl": "singalščina", "sv": "singalesiska", "zh_Hant": "僧伽羅語", "_meta": { @@ -10456,7 +10461,7 @@ "gl": "Lingua albanesa", "he": "אלבנית", "hu": "albán", - "id": "Bahasa Albania", + "id": "Albania", "it": "albanese", "ja": "アルバニア語", "nb_NO": "albansk", @@ -10699,7 +10704,7 @@ "gl": "lingua sueca", "he": "שוודית", "hu": "svéd", - "id": "bahasa Swedia", + "id": "Swedia", "it": "svedese", "ja": "スウェーデン語", "nb_NO": "svensk", @@ -10798,7 +10803,7 @@ "gl": "Lingua silesiana", "he": "שלזית", "hu": "sziléziai", - "id": "bahasa Silesia", + "id": "Silesia", "it": "slesiano", "ja": "シレジア語", "nb_NO": "schlesisk", @@ -10847,7 +10852,7 @@ "gl": "Lingua támil", "he": "טמילית", "hu": "tamil", - "id": "Bahasa Tamil", + "id": "Tamil", "it": "tamil", "ja": "タミル語", "nb_NO": "tamilsk", @@ -11034,7 +11039,7 @@ "gl": "lingua tailandesa", "he": "תאית", "hu": "thai", - "id": "bahasa Thai", + "id": "Thai", "it": "thailandese", "ja": "タイ語", "nb_NO": "thai", @@ -11104,7 +11109,7 @@ "gl": "Lingua turcomá", "he": "טורקמנית", "hu": "türkmén", - "id": "bahasa Turkmen", + "id": "Turkmen", "it": "Turkmeno", "ja": "トルクメン語", "nb_NO": "turkmensk", @@ -11632,7 +11637,7 @@ "gl": "Lingua uigur", "he": "אויגורית", "hu": "ujgur", - "id": "bahasa Uyghur", + "id": "Uighur", "it": "uiguro", "ja": "ウイグル語", "nb_NO": "uigurisk", @@ -11702,7 +11707,7 @@ "gl": "Lingua usbeka", "he": "אוזבקית", "hu": "üzbég", - "id": "bahasa Uzbek", + "id": "Uzbek", "it": "uzbeco", "ja": "ウズベク語", "nb_NO": "usbekisk", @@ -12591,7 +12596,7 @@ "gl": "lingua chinesa", "he": "סינית", "hu": "kínai", - "id": "bahasa Tionghoa", + "id": "Tionghoa", "it": "cinese", "ja": "中国語", "nb_NO": "kinesisk", @@ -12647,7 +12652,7 @@ ] } }, - "zh_Hans": { + "zh_Hant": { "ca": "xinès simplificat", "cs": "zjednodušená čínština", "da": "forenklet kinesisk", @@ -12656,6 +12661,7 @@ "eo": "simpligita ĉina skribsistemo", "es": "chino simplificado", "eu": "Txinera sinplifikatua", + "fi": "perinteinen kiina", "fr": "chinois simplifié", "gl": "chinés simplificado", "he": "סינית מפושטת", @@ -12678,36 +12684,6 @@ ] } }, - "zh_Hant": { - "ca": "xinès tradicional", - "cs": "čínština (tradiční)", - "da": "traditionel kinesisk", - "de": "traditionelles Chinesisch", - "en": "Traditional Chinese", - "eo": "ĉina lingvo de tradicia ortografio", - "es": "chino tradicional", - "eu": "Txinera tradizional", - "fi": "perinteinen kiina", - "fr": "chinois traditionnel", - "gl": "chinés tradicional", - "he": "סינית מסורתית", - "it": "cinese tradizionale", - "ja": "繁体字中国語", - "nb_NO": "tradisjonell kinesisk", - "nl": "traditioneel Chinees", - "pl": "język chiński tradycyjny", - "pt": "chinês tradicional", - "ru": "традиционный китайский", - "sl": "tradicionalna kitajščina", - "sv": "traditionell kinesiska", - "zh_Hans": "繁体中文", - "zh_Hant": "繁體中文", - "_meta": { - "dir": [ - "left-to-right" - ] - } - }, "zu": { "ca": "zulu", "cs": "zuluština", diff --git a/src/assets/translators.json b/src/assets/translators.json index ba4b58214..8287906ac 100644 --- a/src/assets/translators.json +++ b/src/assets/translators.json @@ -1,7 +1,7 @@ { "contributors": [ { - "commits": 300, + "commits": 303, "contributor": "kjon" }, { @@ -9,7 +9,7 @@ "contributor": "Pieter Vander Vennet" }, { - "commits": 160, + "commits": 163, "contributor": "paunofu" }, { @@ -34,11 +34,11 @@ }, { "commits": 32, - "contributor": "Babos Gábor" + "contributor": "Lucas" }, { - "commits": 31, - "contributor": "Lucas" + "commits": 32, + "contributor": "Babos Gábor" }, { "commits": 31, From d2c668922b7ac5dc682461c6789fbbdb37fad8c3 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Tue, 26 Sep 2023 01:25:28 +0200 Subject: [PATCH 02/14] Fix: include japanese dot as sentence separator --- src/UI/i18n/Translation.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/UI/i18n/Translation.ts b/src/UI/i18n/Translation.ts index 26fe70806..45f725bcc 100644 --- a/src/UI/i18n/Translation.ts +++ b/src/UI/i18n/Translation.ts @@ -244,7 +244,7 @@ export class Translation extends BaseUIElement { continue } let txt = this.translations[lng] - txt = txt.replace(/(\.||
).*/, "") + txt = txt.replace(/(\.||
|。).*/, "") txt = Utils.EllipsesAfter(txt, 255) tr[lng] = txt.trim() } From 72572ce1a6ba7b256624a127d6b6ce1cd0bb56a3 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Tue, 26 Sep 2023 01:25:58 +0200 Subject: [PATCH 03/14] CI: restore generate steps --- scripts/build.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/build.sh b/scripts/build.sh index 737f929d4..3b1cf07b8 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -12,8 +12,8 @@ mkdir dist/assets 2> /dev/null export NODE_OPTIONS="--max-old-space-size=8192" # This script ends every line with '&&' to chain everything. A failure will thus stop the build -# npm run generate:editor-layer-index && -# npm run generate && +npm run generate:editor-layer-index && +npm run generate && npm run generate:layouts if [ $? -ne 0 ]; then From 8866488bd63a961af23d41c4d4b4aaaff0ccc3c3 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Tue, 26 Sep 2023 01:27:32 +0200 Subject: [PATCH 04/14] Deployment: add clean step --- scripts/hetzner/deployHetzner.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/hetzner/deployHetzner.sh b/scripts/hetzner/deployHetzner.sh index 8d692a40c..6f1044d22 100755 --- a/scripts/hetzner/deployHetzner.sh +++ b/scripts/hetzner/deployHetzner.sh @@ -21,3 +21,4 @@ scp -r dist.zip hetzner:/root/ && scp ./scripts/hetzner/config/* hetzner:/root/ ssh hetzner -t "unzip dist.zip && rm dist.zip && rm -rf public/ && mv dist public && caddy stop && caddy start" rm dist.zip +npm run clean From d9d8c0ad1f0af64f6d08364a6c64f59b748f001a Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Wed, 27 Sep 2023 22:22:19 +0200 Subject: [PATCH 05/14] Themes: fix icon for shops layer --- assets/layers/shops/shops.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/assets/layers/shops/shops.json b/assets/layers/shops/shops.json index 8d6096d8e..ee0cf2bc1 100644 --- a/assets/layers/shops/shops.json +++ b/assets/layers/shops/shops.json @@ -348,6 +348,11 @@ "override": { "render": "./assets/layers/id_presets/maki-shop.svg", "+mappings": [ + { + "#": "Layer icon rendering", + "if": "id=", + "then": "circle:white;./assets/layers/id_presets/maki-shop.svg" + }, { "if": { "or": [ From c527427f70990006b9c71ef472bbe45d2c9bff70 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Wed, 27 Sep 2023 22:38:30 +0200 Subject: [PATCH 06/14] Fix: add new items works again, fix #1593 --- src/Logic/Osm/Actions/OsmChangeAction.ts | 3 --- src/UI/Popup/AddNewPoint/AddNewPoint.svelte | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/Logic/Osm/Actions/OsmChangeAction.ts b/src/Logic/Osm/Actions/OsmChangeAction.ts index 2bf31b02c..4161dc967 100644 --- a/src/Logic/Osm/Actions/OsmChangeAction.ts +++ b/src/Logic/Osm/Actions/OsmChangeAction.ts @@ -19,9 +19,6 @@ export default abstract class OsmChangeAction { constructor(mainObjectId: string, trackStatistics: boolean = true) { this.trackStatistics = trackStatistics this.mainObjectId = mainObjectId - if(mainObjectId === undefined || mainObjectId === null){ - throw "OsmObject received '"+mainObjectId+"' as mainObjectId" - } } public async Perform(changes: Changes) { diff --git a/src/UI/Popup/AddNewPoint/AddNewPoint.svelte b/src/UI/Popup/AddNewPoint/AddNewPoint.svelte index d89e94402..d1bce458c 100644 --- a/src/UI/Popup/AddNewPoint/AddNewPoint.svelte +++ b/src/UI/Popup/AddNewPoint/AddNewPoint.svelte @@ -102,7 +102,7 @@ console.log("Creating new point at", location, "snapped to", snapTo, "with tags", tags); let snapToWay: undefined | OsmWay = undefined; - if (snapTo !== undefined) { + if (snapTo !== undefined && snapTo !== null) { const downloaded = await state.osmObjectDownloader.DownloadObjectAsync(snapTo, 0); if (downloaded !== "deleted") { snapToWay = downloaded; From 33bd8369a2d8b9f48aa7249d5e2d35d38eb01587 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 27 Sep 2023 21:11:22 +0000 Subject: [PATCH 07/14] Chore(deps): bump get-func-name from 2.0.0 to 2.0.2 Bumps [get-func-name](https://github.com/chaijs/get-func-name) from 2.0.0 to 2.0.2. - [Release notes](https://github.com/chaijs/get-func-name/releases) - [Commits](https://github.com/chaijs/get-func-name/commits/v2.0.2) --- updated-dependencies: - dependency-name: get-func-name dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5f6a1ce4f..7422c4260 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "mapcomplete", - "version": "0.33.1", + "version": "0.33.4", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "mapcomplete", - "version": "0.33.1", + "version": "0.33.4", "license": "GPL-3.0-or-later", "dependencies": { "@rgossiaux/svelte-headlessui": "^1.0.2", @@ -7169,9 +7169,9 @@ } }, "node_modules/get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", "engines": { "node": "*" } @@ -18679,9 +18679,9 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==" }, "get-intrinsic": { "version": "1.1.3", From 7e0120d0e8948510db1eb0c17090900127dc8ed8 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Thu, 28 Sep 2023 00:01:55 +0200 Subject: [PATCH 08/14] Themes: add dog icon into title-icons, add dog filter, see #212 --- assets/layers/filters/filters.json | 29 ++++++- assets/layers/food/food.json | 3 +- assets/layers/icons/icons.json | 28 ++++++ assets/layers/questions/dogs_allowed.svg | 70 +++++++++++++++ .../layers/questions/dogs_allowed.svg.license | 2 + assets/layers/questions/dogs_leashed.svg | 54 ++++++++++++ .../layers/questions/dogs_leashed.svg.license | 2 + assets/layers/questions/license_info.json | 30 +++++++ assets/layers/questions/no_dogs.svg | 87 +++++++++++++++++++ assets/layers/questions/no_dogs.svg.license | 2 + assets/layers/questions/questions.json | 5 ++ 11 files changed, 310 insertions(+), 2 deletions(-) create mode 100644 assets/layers/questions/dogs_allowed.svg create mode 100644 assets/layers/questions/dogs_allowed.svg.license create mode 100644 assets/layers/questions/dogs_leashed.svg create mode 100644 assets/layers/questions/dogs_leashed.svg.license create mode 100644 assets/layers/questions/no_dogs.svg create mode 100644 assets/layers/questions/no_dogs.svg.license diff --git a/assets/layers/filters/filters.json b/assets/layers/filters/filters.json index 9a390b950..551ef6897 100644 --- a/assets/layers/filters/filters.json +++ b/assets/layers/filters/filters.json @@ -244,6 +244,33 @@ } } ] + }, + { + "id": "dogs", + "options": [ + { + "question": { + "en": "No preference towards dogs" + } + }, + { + "question": { + "en": "Dogs allowed" + }, + "osmTags": { + "or": [ + "dog=unleashed", + "dog=yes" + ] + } + }, + { + "question": { + "en": "No dogs allowed" + }, + "osmTags": "dog=no" + } + ] } ] -} \ No newline at end of file +} diff --git a/assets/layers/food/food.json b/assets/layers/food/food.json index 5d2c36717..443cd8e36 100644 --- a/assets/layers/food/food.json +++ b/assets/layers/food/food.json @@ -1102,7 +1102,8 @@ }, "has_organic", "accepts_cash", - "accepts_cards" + "accepts_cards", + "dogs" ], "deletion": { "nonDeleteMappings": [ diff --git a/assets/layers/icons/icons.json b/assets/layers/icons/icons.json index 2a3304728..9f15ac5dd 100644 --- a/assets/layers/icons/icons.json +++ b/assets/layers/icons/icons.json @@ -154,6 +154,34 @@ } ], "condition": "id~(node|way|relation)/[0-9]*" + }, + { + "id": "dogicon", + "labels": [ + "defaults" + ], + "mappings": [ + { + "if": "dog=no", + "#": "ignore-image-in-then", + "then": "no_dogs" + }, + { + "if": "dog=leashed", + "#": "ignore-image-in-then", + "then": "dogs are allowed but leashed" + }, + { + "if": { + "or": [ + "dog=yes", + "dog=unleashed" + ] + }, + "#": "ignore-image-in-then", + "then": "dogs are allowed" + } + ] } ], "mapRendering": null diff --git a/assets/layers/questions/dogs_allowed.svg b/assets/layers/questions/dogs_allowed.svg new file mode 100644 index 000000000..0f47ee8bf --- /dev/null +++ b/assets/layers/questions/dogs_allowed.svg @@ -0,0 +1,70 @@ + + + + + + + + + image/svg+xml + + + + + Openclipart + + + + + + + + + + + diff --git a/assets/layers/questions/dogs_allowed.svg.license b/assets/layers/questions/dogs_allowed.svg.license new file mode 100644 index 000000000..e14c126f7 --- /dev/null +++ b/assets/layers/questions/dogs_allowed.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: OpenClipArt +SPDX-License-Identifier: PD \ No newline at end of file diff --git a/assets/layers/questions/dogs_leashed.svg b/assets/layers/questions/dogs_leashed.svg new file mode 100644 index 000000000..d048b5d58 --- /dev/null +++ b/assets/layers/questions/dogs_leashed.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + diff --git a/assets/layers/questions/dogs_leashed.svg.license b/assets/layers/questions/dogs_leashed.svg.license new file mode 100644 index 000000000..e32d67ee6 --- /dev/null +++ b/assets/layers/questions/dogs_leashed.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: NPS Graphics, converted by User:ZyMOS +SPDX-License-Identifier: PD \ No newline at end of file diff --git a/assets/layers/questions/license_info.json b/assets/layers/questions/license_info.json index 65a360bb6..8985470b3 100644 --- a/assets/layers/questions/license_info.json +++ b/assets/layers/questions/license_info.json @@ -39,6 +39,26 @@ "https://www.onlinewebfonts.com/icon/464488" ] }, + { + "path": "dogs_allowed.svg", + "license": "PUBLIC-DOMAIN", + "authors": [ + "OpenClipArt" + ], + "sources": [ + "https://freesvg.org/no-dogs-round-sign-vector-graphics" + ] + }, + { + "path": "dogs_leashed.svg", + "license": "PUBLIC-DOMAIN", + "authors": [ + " \tNPS Graphics, converted by User:ZyMOS" + ], + "sources": [ + "https://commons.wikimedia.org/wiki/File:Pictograms-nps-pets_on_leash-2.svg" + ] + }, { "path": "nfc_card.svg", "license": "CC0-1.0", @@ -49,6 +69,16 @@ "https://wens.be/free-antwerpenize-bicycle-font" ] }, + { + "path": "no_dogs.svg", + "license": "Public Domain", + "authors": [ + "OpenClipArt" + ], + "sources": [ + "https://freesvg.org/no-dogs-round-sign-vector-graphics" + ] + }, { "path": "no_smoking.svg", "license": "CC0-1.0", diff --git a/assets/layers/questions/no_dogs.svg b/assets/layers/questions/no_dogs.svg new file mode 100644 index 000000000..888ae60de --- /dev/null +++ b/assets/layers/questions/no_dogs.svg @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + Openclipart + + + + + + + + + + + diff --git a/assets/layers/questions/no_dogs.svg.license b/assets/layers/questions/no_dogs.svg.license new file mode 100644 index 000000000..8fc3e04c7 --- /dev/null +++ b/assets/layers/questions/no_dogs.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: OpenClipArt +SPDX-License-Identifier: Public Domain \ No newline at end of file diff --git a/assets/layers/questions/questions.json b/assets/layers/questions/questions.json index a3cf36052..473d93f64 100644 --- a/assets/layers/questions/questions.json +++ b/assets/layers/questions/questions.json @@ -487,6 +487,7 @@ "mappings": [ { "if": "dog=yes", + "icon": "./assets/layers/questions/dogs_allowed.svg", "then": { "en": "Dogs are allowed", "nl": "honden zijn toegelaten", @@ -515,6 +516,7 @@ }, { "if": "dog=no", + "icon": "./assets/layers/questions/no_dogs.svg", "then": { "en": "Dogs are not allowed", "nl": "honden zijn niet toegelaten", @@ -542,6 +544,7 @@ }, { "if": "dog=leashed", + "icon": "./assets/layers/questions/dogs_leashed.svg", "then": { "en": "Dogs are allowed, but they have to be leashed", "nl": "honden zijn enkel aan de leiband welkom", @@ -568,6 +571,8 @@ }, { "if": "dog=unleashed", + "icon": "./assets/layers/questions/dogs_allowed.svg", + "then": { "en": "Dogs are allowed and can run around freely", "nl": "honden zijn welkom en mogen vrij rondlopen", From b5fca68a82d529bd10f56ba0dd63d27ae11ea2a5 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Thu, 28 Sep 2023 03:04:25 +0200 Subject: [PATCH 09/14] Themes: fix: don't show irrelevant 'multilevel'-question anymore --- assets/layers/questions/questions.json | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/assets/layers/questions/questions.json b/assets/layers/questions/questions.json index 473d93f64..748c2221e 100644 --- a/assets/layers/questions/questions.json +++ b/assets/layers/questions/questions.json @@ -1626,6 +1626,7 @@ "id": "multilevels", "builtin": "single_level", "override": { + "=labels": [], "question": { "en": "What levels does this elevator go to?", "de": "Auf welchen Geschossen hält dieser Aufzug?", @@ -1663,7 +1664,9 @@ }, { "id": "repeated", - "labels": ["level"], + "labels": [ + "level" + ], "condition": "repeat_on~*", "render": { "en": "Multiple, identical objects can be found on floors {repeat_on}.", @@ -1672,7 +1675,9 @@ }, { "id": "single_level", - "labels": ["level"], + "labels": [ + "level" + ], "condition": "repeat_on=", "question": { "nl": "Op welke verdieping bevindt dit punt zich?", From 47bf1195bcc198446c35b31ebd7d446efde7dd9d Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Thu, 28 Sep 2023 03:05:00 +0200 Subject: [PATCH 10/14] Themes: improve information about indoor rooms --- assets/layers/etymology/etymology.json | 1 + assets/layers/indoors/indoors.json | 217 ++++++++++++++++++++++++- 2 files changed, 216 insertions(+), 2 deletions(-) diff --git a/assets/layers/etymology/etymology.json b/assets/layers/etymology/etymology.json index 17bc04049..aee734eda 100644 --- a/assets/layers/etymology/etymology.json +++ b/assets/layers/etymology/etymology.json @@ -46,6 +46,7 @@ }, { "id": "wikipedia-etymology", + "condition": "name~*", "question": { "en": "What is the Wikidata-item that this object is named after?", "nl": "Wat is het Wikidata-item van hetgeen dit object is naar vernoemd?", diff --git a/assets/layers/indoors/indoors.json b/assets/layers/indoors/indoors.json index d9aabbd81..f683eac31 100644 --- a/assets/layers/indoors/indoors.json +++ b/assets/layers/indoors/indoors.json @@ -89,9 +89,25 @@ } ] }, + "titleIcons": [ + "icons.defaults", + { + "render": "{ref}", + "condition": "ref~*" + }, + { + "mappings": [ + { + "if": "capacity~*", + "then": "
{capacity}
" + } + ] + } + ], "minzoom": 13, "tagRenderings": [ "images", + "level", { "id": "ref", "question": { @@ -162,7 +178,204 @@ "indoor=corridor" ] } - } + }, + { + "id": "room-type", + "question": { + "en": "What type of room is this?" + }, + "mappings": [ + { + "if": "room=administration", + "then": { + "en": "This is a administrative room" + }, + "icon": "./assets/layers/indoors/room_administration.svg" + }, + { + "if": "room=auditorium", + "then": { + "en": "This is a auditorium" + }, + "icon": "./assets/layers/indoors/room_auditorium.svg" + }, + { + "if": "room=bedroom", + "then": { + "en": "This is a bedroom" + }, + "icon": "./assets/layers/indoors/room_bedroom.svg" + }, + { + "if": "room=chapel", + "then": { + "en": "This is a chapel" + }, + "icon": "./assets/layers/indoors/room_chapel.svg" + }, + { + "if": "room=class", + "then": { + "en": "This is a classroom" + }, + "icon": "./assets/layers/indoors/room_class.svg" + }, + { + "if": "room=classroom", + "then": { + "en": "This is a classroom" + }, + "icon": "./assets/layers/indoors/room_class.svg", + "hideInAnswer": true + }, + { + "if": "room=computer", + "then": { + "en": "This is a computer room" + }, + "icon": "./assets/layers/indoors/room_computer.svg" + }, + { + "if": "room=conference", + "then": { + "en": "This is a conference room" + }, + "icon": "./assets/layers/indoors/room_conference.svg" + }, + { + "if": "room=crypt", + "then": { + "en": "This is a crypt" + }, + "icon": "./assets/layers/indoors/room_crypt.svg" + }, + { + "if": "room=kitchen", + "then": { + "en": "This is a kitchen" + }, + "icon": "./assets/layers/indoors/room_kitchen.svg" + }, + { + "if": "room=laboratory", + "then": { + "en": "This is a laboratory" + }, + "icon": "./assets/layers/indoors/room_laboratory.svg" + }, + { + "if": "room=library", + "then": { + "en": "This is a library" + }, + "icon": "./assets/layers/indoors/room_library.svg" + }, + { + "if": "room=locker", + "then": { + "en": "This is a locker room" + }, + "icon": "./assets/layers/indoors/room_locker.svg" + }, + { + "if": "room=nursery", + "then": { + "en": "This is a nursery" + }, + "icon": "./assets/layers/indoors/room_nursery.svg" + }, + { + "if": "room=office", + "then": { + "en": "This is an office" + }, + "icon": "./assets/layers/indoors/room_office.svg" + }, + { + "if": "room=prison_cell", + "then": { + "en": "This is a prison_cell" + }, + "icon": "./assets/layers/indoors/room_prison_cell.svg" + }, + { + "if": "room=restaurant", + "then": { + "en": "This is a restaurant" + }, + "icon": "./assets/layers/indoors/room_restaurant.svg" + }, + { + "if": "room=security_check", + "then": { + "en": "This is a room to perform security checks" + }, + "icon": "./assets/layers/indoors/room_security_check.svg" + }, + { + "if": "room=sport", + "then": { + "en": "This is a sport room" + }, + "icon": "./assets/layers/indoors/room_sport.svg" + }, + { + "if": "room=storage", + "then": { + "en": "This is a storage room" + }, + "icon": "./assets/layers/indoors/room_storage.svg" + }, + { + "if": "room=technical", + "then": { + "en": "This is a technical room" + }, + "icon": "./assets/layers/indoors/room_technical.svg" + }, + { + "if": "room=toilets", + "then": { + "en": "These are toilets" + }, + "icon": "./assets/layers/indoors/room_toilets.svg" + }, + { + "if": "room=waiting", + "then": { + "en": "This is a waiting room" + }, + "icon": "./assets/layers/indoors/room_waiting.svg" + } + ] + }, + { + "id": "room-capacity", + "question": { + "en": "How much people can at most fit in this room?" + }, + "condition": { + "or": [ + "room=waiting", + "room=restaurant", + "room=office", + "room=nursery", + "room=conference", + "room=auditorium", + "room=chapel", + "room=bedroom", + "room=classroom" + ] + }, + "render": { + "en": "At most {capacity} people fit this room" + }, + "freeform": { + "key": "capacity", + "type": "pnat" + } + }, + "etymology.wikipedia-etymology" ], "mapRendering": [ { @@ -222,7 +435,7 @@ { "if": { "or": [ - "room=adminstration", + "room=administration", "room=auditorium", "room=bedroom", "room=chapel", From 08e408e19ddc1f39913c90b2e16c99ab98e5ada2 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Thu, 28 Sep 2023 03:06:09 +0200 Subject: [PATCH 11/14] UX: slow down spin speed of search geolocation button --- src/UI/BigComponents/ThemeIntroPanel.svelte | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/UI/BigComponents/ThemeIntroPanel.svelte b/src/UI/BigComponents/ThemeIntroPanel.svelte index 3bf9ce163..305f9e0d2 100644 --- a/src/UI/BigComponents/ThemeIntroPanel.svelte +++ b/src/UI/BigComponents/ThemeIntroPanel.svelte @@ -71,7 +71,7 @@ {:else if $geopermission === "requested"} {:else if $geopermission === "denied"} @@ -81,7 +81,7 @@ {:else } From 4067912ce09205f271e4b324ca4645463049bf9f Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Thu, 28 Sep 2023 03:07:10 +0200 Subject: [PATCH 12/14] Refactoring: include 'label' section into Checkbox --- src/UI/Base/Checkbox.svelte | 14 +++++----- src/UI/BigComponents/Filterview.svelte | 36 ++++++++++++-------------- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/src/UI/Base/Checkbox.svelte b/src/UI/Base/Checkbox.svelte index 010992df9..92de427ac 100644 --- a/src/UI/Base/Checkbox.svelte +++ b/src/UI/Base/Checkbox.svelte @@ -1,12 +1,14 @@ - - + diff --git a/src/UI/BigComponents/Filterview.svelte b/src/UI/BigComponents/Filterview.svelte index e4f3e234d..7ed9c26c4 100644 --- a/src/UI/BigComponents/Filterview.svelte +++ b/src/UI/BigComponents/Filterview.svelte @@ -55,27 +55,26 @@ {#if filteredLayer.layerDef.name}
- + {/if} + {#if $isDisplayed && filteredLayer.layerDef.filters?.length > 0}
@@ -83,10 +82,9 @@
{#if filter.options.length === 1 && filter.options[0].fields.length === 0} - + + {filter.options[0].question} + {/if} {#if filter.options.length === 1 && filter.options[0].fields.length > 0} From 6edcd7d73c126c7e39772c12335a8dd3f04d6a95 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Thu, 28 Sep 2023 03:10:36 +0200 Subject: [PATCH 13/14] Chore: sync translations for changed 'level'-id --- langs/layers/ca.json | 42 ++++++++++++++++++------------------ langs/layers/cs.json | 42 ++++++++++++++++++------------------ langs/layers/da.json | 42 ++++++++++++++++++------------------ langs/layers/de.json | 42 ++++++++++++++++++------------------ langs/layers/en.json | 45 +++++++++++++++++++++------------------ langs/layers/eo.json | 14 ++++++------ langs/layers/es.json | 42 ++++++++++++++++++------------------ langs/layers/fil.json | 42 ++++++++++++++++++------------------ langs/layers/fr.json | 42 ++++++++++++++++++------------------ langs/layers/hu.json | 42 ++++++++++++++++++------------------ langs/layers/id.json | 42 ++++++++++++++++++------------------ langs/layers/it.json | 36 +++++++++++++++---------------- langs/layers/ja.json | 36 +++++++++++++++---------------- langs/layers/nb_NO.json | 42 ++++++++++++++++++------------------ langs/layers/nl.json | 45 +++++++++++++++++++++------------------ langs/layers/pl.json | 42 ++++++++++++++++++------------------ langs/layers/pt.json | 42 ++++++++++++++++++------------------ langs/layers/pt_BR.json | 36 +++++++++++++++---------------- langs/layers/ru.json | 36 +++++++++++++++---------------- langs/layers/sl.json | 40 +++++++++++++++++----------------- langs/layers/sv.json | 36 +++++++++++++++---------------- langs/layers/zh_Hant.json | 42 ++++++++++++++++++------------------ 22 files changed, 438 insertions(+), 432 deletions(-) diff --git a/langs/layers/ca.json b/langs/layers/ca.json index 08e5831f0..ab650ab69 100644 --- a/langs/layers/ca.json +++ b/langs/layers/ca.json @@ -6034,27 +6034,6 @@ } } }, - "level": { - "mappings": { - "0": { - "then": "Situat a planta subterrani" - }, - "1": { - "then": "Situat a planta zero" - }, - "2": { - "then": "Situat a la planta zero" - }, - "3": { - "then": "Situat a primera planta" - }, - "4": { - "then": "Localitzat a la planta base" - } - }, - "question": "A quina planta està situat aquest element?", - "render": "Situat a la planta {level}" - }, "luminous_or_lit": { "mappings": { "0": { @@ -6167,6 +6146,27 @@ }, "question": "Aquest servei té endolls elèctrics, disponibles pels clients quan hi són dins?" }, + "single_level": { + "mappings": { + "0": { + "then": "Situat a planta subterrani" + }, + "1": { + "then": "Situat a planta zero" + }, + "2": { + "then": "Situat a la planta zero" + }, + "3": { + "then": "Situat a primera planta" + }, + "4": { + "then": "Localitzat a la planta base" + } + }, + "question": "A quina planta està situat aquest element?", + "render": "Situat a la planta {level}" + }, "smoking": { "mappings": { "0": { diff --git a/langs/layers/cs.json b/langs/layers/cs.json index 4c2da9751..7c241f168 100644 --- a/langs/layers/cs.json +++ b/langs/layers/cs.json @@ -1767,27 +1767,6 @@ "question": "Jaký je název sítě pro bezdrátový přístup k internetu?", "render": "Název sítě je {internet_access:ssid}" }, - "level": { - "mappings": { - "0": { - "then": "Nachází se v podzemí" - }, - "1": { - "then": "Nachází se v přízemí" - }, - "2": { - "then": "Nachází se v přízemí" - }, - "3": { - "then": "Nachází se v prvním patře" - }, - "4": { - "then": "Nachází se v prvním suterénu" - } - }, - "question": "V jaké úrovni se tento prvek nachází?", - "render": "Nachází se v {level}. patře" - }, "luminous_or_lit": { "mappings": { "0": { @@ -1897,6 +1876,27 @@ }, "question": "Má toto zařízení elektrické zásuvky, které jsou zákazníkům k dispozici, když jsou uvnitř?" }, + "single_level": { + "mappings": { + "0": { + "then": "Nachází se v podzemí" + }, + "1": { + "then": "Nachází se v přízemí" + }, + "2": { + "then": "Nachází se v přízemí" + }, + "3": { + "then": "Nachází se v prvním patře" + }, + "4": { + "then": "Nachází se v prvním suterénu" + } + }, + "question": "V jaké úrovni se tento prvek nachází?", + "render": "Nachází se v {level}. patře" + }, "smoking": { "mappings": { "0": { diff --git a/langs/layers/da.json b/langs/layers/da.json index b47321dca..2378cec34 100644 --- a/langs/layers/da.json +++ b/langs/layers/da.json @@ -2163,27 +2163,6 @@ "question": "Hvad er netværksnavnet for den trådløse internetadgang?", "render": "Netværksnavnet er {internet_access:ssid}" }, - "level": { - "mappings": { - "0": { - "then": "Placeret under jorden" - }, - "1": { - "then": "Beliggende i stueetagen" - }, - "2": { - "then": "Beliggende i stueetagen" - }, - "3": { - "then": "Beliggende på første sal" - }, - "4": { - "then": "Beliggende på første kælderetage" - } - }, - "question": "På hvilket niveau er denne funktion placeret?", - "render": "Beliggende på {level}. etage" - }, "multilevels": { "override": { "question": "Hvilke niveauer går denne elevator til?", @@ -2237,6 +2216,27 @@ }, "question": "Har denne faciliteter stikkontakter tilgængelige for kunder, når de er inde?" }, + "single_level": { + "mappings": { + "0": { + "then": "Placeret under jorden" + }, + "1": { + "then": "Beliggende i stueetagen" + }, + "2": { + "then": "Beliggende i stueetagen" + }, + "3": { + "then": "Beliggende på første sal" + }, + "4": { + "then": "Beliggende på første kælderetage" + } + }, + "question": "På hvilket niveau er denne funktion placeret?", + "render": "Beliggende på {level}. etage" + }, "smoking": { "mappings": { "0": { diff --git a/langs/layers/de.json b/langs/layers/de.json index d4e1387ef..0db8b2538 100644 --- a/langs/layers/de.json +++ b/langs/layers/de.json @@ -7316,27 +7316,6 @@ } } }, - "level": { - "mappings": { - "0": { - "then": "Das Objekt befindet sich unter der Erde" - }, - "1": { - "then": "Das Objekt befindet sich im Erdgeschoss" - }, - "2": { - "then": "Das Objekt befindet sich im Erdgeschoss" - }, - "3": { - "then": "Das Objekt befindet sich im 1. Obergeschoss" - }, - "4": { - "then": "Das Objekt befindet sich im 1. Untergeschoss" - } - }, - "question": "Auf welcher Ebene befindet sich das Objekt?", - "render": "Das Objekt befindet sich im {level}. Geschoss" - }, "luminous_or_lit": { "mappings": { "0": { @@ -7452,6 +7431,27 @@ }, "question": "Gibt es hier Steckdosen, an denen Kunden ihre Geräte laden können?" }, + "single_level": { + "mappings": { + "0": { + "then": "Das Objekt befindet sich unter der Erde" + }, + "1": { + "then": "Das Objekt befindet sich im Erdgeschoss" + }, + "2": { + "then": "Das Objekt befindet sich im Erdgeschoss" + }, + "3": { + "then": "Das Objekt befindet sich im 1. Obergeschoss" + }, + "4": { + "then": "Das Objekt befindet sich im 1. Untergeschoss" + } + }, + "question": "Auf welcher Ebene befindet sich das Objekt?", + "render": "Das Objekt befindet sich im {level}. Geschoss" + }, "smoking": { "mappings": { "0": { diff --git a/langs/layers/en.json b/langs/layers/en.json index 54817046e..c0944b437 100644 --- a/langs/layers/en.json +++ b/langs/layers/en.json @@ -7405,27 +7405,6 @@ } } }, - "level": { - "mappings": { - "0": { - "then": "Located underground" - }, - "1": { - "then": "Located on the ground floor" - }, - "2": { - "then": "Located on the ground floor" - }, - "3": { - "then": "Located on the first floor" - }, - "4": { - "then": "Located on the first basement level" - } - }, - "question": "On what level is this feature located?", - "render": "Located on the {level}th floor" - }, "luminous_or_lit": { "mappings": { "0": { @@ -7524,6 +7503,9 @@ "phone": { "question": "What is the phone number of {title()}?" }, + "repeated": { + "render": "Multiple, identical objects can be found on floors {repeat_on}." + }, "service:electricity": { "mappings": { "0": { @@ -7541,6 +7523,27 @@ }, "question": "Does this amenity have electrical outlets, available to customers when they are inside?" }, + "single_level": { + "mappings": { + "0": { + "then": "Located underground" + }, + "1": { + "then": "Located on the ground floor" + }, + "2": { + "then": "Located on the ground floor" + }, + "3": { + "then": "Located on the first floor" + }, + "4": { + "then": "Located on the first basement level" + } + }, + "question": "On what level is this feature located?", + "render": "Located on the {level}th floor" + }, "smoking": { "mappings": { "0": { diff --git a/langs/layers/eo.json b/langs/layers/eo.json index 978385bb9..2eb17199b 100644 --- a/langs/layers/eo.json +++ b/langs/layers/eo.json @@ -138,7 +138,13 @@ "email": { "question": "Kio estas la retpoŝta adreso de {title()}?" }, - "level": { + "opening_hours": { + "render": "

Malfermitaj horoj

{opening_hours_table(opening_hours)}" + }, + "phone": { + "question": "Kio estas la telefonnumero de {title()}?" + }, + "single_level": { "mappings": { "1": { "then": "En la teretaĝo" @@ -152,12 +158,6 @@ }, "render": "En la {level}a etaĝo" }, - "opening_hours": { - "render": "

Malfermitaj horoj

{opening_hours_table(opening_hours)}" - }, - "phone": { - "question": "Kio estas la telefonnumero de {title()}?" - }, "website": { "question": "Kie estas la retejo de {title()}?" } diff --git a/langs/layers/es.json b/langs/layers/es.json index 96bab0796..7a6ee531c 100644 --- a/langs/layers/es.json +++ b/langs/layers/es.json @@ -3631,27 +3631,6 @@ "question": "¿Cuál es el nombre de red para el acceso inalámbrico a internet?", "render": "El nombre de red es {internet_access:ssid}" }, - "level": { - "mappings": { - "0": { - "then": "Localizado bajo tierra" - }, - "1": { - "then": "Localizado en la planta baja" - }, - "2": { - "then": "Localizado en la planta baja" - }, - "3": { - "then": "Localizado en la primera planta" - }, - "4": { - "then": "Localizada en el primer sótano" - } - }, - "question": "¿En qué nivel se encuentra esta característica?", - "render": "Localizada en la {level}° planta" - }, "luminous_or_lit": { "mappings": { "0": { @@ -3764,6 +3743,27 @@ }, "question": "¿Esta facilidad tiene enchufes eléctricos, disponibles para los clientes cuando están dentro?" }, + "single_level": { + "mappings": { + "0": { + "then": "Localizado bajo tierra" + }, + "1": { + "then": "Localizado en la planta baja" + }, + "2": { + "then": "Localizado en la planta baja" + }, + "3": { + "then": "Localizado en la primera planta" + }, + "4": { + "then": "Localizada en el primer sótano" + } + }, + "question": "¿En qué nivel se encuentra esta característica?", + "render": "Localizada en la {level}° planta" + }, "smoking": { "mappings": { "0": { diff --git a/langs/layers/fil.json b/langs/layers/fil.json index f77b2859e..f8763de68 100644 --- a/langs/layers/fil.json +++ b/langs/layers/fil.json @@ -34,27 +34,6 @@ "email": { "question": "Ano ang email address ng {title()}?" }, - "level": { - "mappings": { - "0": { - "then": "Nasa ilalim ng lupa" - }, - "1": { - "then": "Nasa unang palapag" - }, - "2": { - "then": "Nasa unang palapag" - }, - "3": { - "then": "Nasa unang palapag" - }, - "4": { - "then": "Nasa silong" - } - }, - "question": "Anong palapag matatagpuan ang tampók?", - "render": "Natagpuan sa ika-{level} na palapag" - }, "opening_hours": { "question": "Anong oras nagbubukas ang {title()}?", "render": "

Mga oras na bukas

{opening_hours_table(opening_hours)}" @@ -102,6 +81,27 @@ }, "question": "Merong bang mga intsupe (outlet) sa loob, para sa mga suki?" }, + "single_level": { + "mappings": { + "0": { + "then": "Nasa ilalim ng lupa" + }, + "1": { + "then": "Nasa unang palapag" + }, + "2": { + "then": "Nasa unang palapag" + }, + "3": { + "then": "Nasa unang palapag" + }, + "4": { + "then": "Nasa silong" + } + }, + "question": "Anong palapag matatagpuan ang tampók?", + "render": "Natagpuan sa ika-{level} na palapag" + }, "website": { "question": "Ano ang website ng {title()}?" }, diff --git a/langs/layers/fr.json b/langs/layers/fr.json index 15583d684..3f4a92964 100644 --- a/langs/layers/fr.json +++ b/langs/layers/fr.json @@ -4809,27 +4809,6 @@ } } }, - "level": { - "mappings": { - "0": { - "then": "En sous-sol" - }, - "1": { - "then": "Rez-de-chaussée" - }, - "2": { - "then": "Rez-de-chaussée" - }, - "3": { - "then": "Premier étage" - }, - "4": { - "then": "Sous-sol" - } - }, - "question": "À quel étage se situe l’élément ?", - "render": "Étage {level}" - }, "luminous_or_lit": { "mappings": { "0": { @@ -4939,6 +4918,27 @@ }, "question": "Des prises sont elles à disposition des client·e·s en intérieur ?" }, + "single_level": { + "mappings": { + "0": { + "then": "En sous-sol" + }, + "1": { + "then": "Rez-de-chaussée" + }, + "2": { + "then": "Rez-de-chaussée" + }, + "3": { + "then": "Premier étage" + }, + "4": { + "then": "Sous-sol" + } + }, + "question": "À quel étage se situe l’élément ?", + "render": "Étage {level}" + }, "smoking": { "mappings": { "0": { diff --git a/langs/layers/hu.json b/langs/layers/hu.json index 44c9e796c..be2714d5d 100644 --- a/langs/layers/hu.json +++ b/langs/layers/hu.json @@ -798,27 +798,6 @@ "email": { "question": "Mi a(z) {title()} e-mail címe?" }, - "level": { - "mappings": { - "0": { - "then": "A föld alatt" - }, - "1": { - "then": "A földszinten" - }, - "2": { - "then": "A földszinten" - }, - "3": { - "then": "Az első emeleten" - }, - "4": { - "then": "Az első alagsori szinten" - } - }, - "question": "Melyik szinten található ez a létesítmény?", - "render": "A(z) {level}. emeleten" - }, "opening_hours": { "question": "Mikor van nyitva ez: {title()}?", "render": "

Nyitva tartás

{opening_hours_table(opening_hours)}" @@ -875,6 +854,27 @@ }, "question": "Van-e ebben a létesítményben olyan konnektor, amely a bent tartózkodó ügyfelek rendelkezésére áll?" }, + "single_level": { + "mappings": { + "0": { + "then": "A föld alatt" + }, + "1": { + "then": "A földszinten" + }, + "2": { + "then": "A földszinten" + }, + "3": { + "then": "Az első emeleten" + }, + "4": { + "then": "Az első alagsori szinten" + } + }, + "question": "Melyik szinten található ez a létesítmény?", + "render": "A(z) {level}. emeleten" + }, "website": { "question": "Mi a weboldala ennek: {title()}?" }, diff --git a/langs/layers/id.json b/langs/layers/id.json index ff82e7cdd..925438b30 100644 --- a/langs/layers/id.json +++ b/langs/layers/id.json @@ -503,27 +503,6 @@ "question": "Apa nama jaringan internet nirkabelnya?", "render": "Nama jaringan ini adalah {internet_access:ssid}" }, - "level": { - "mappings": { - "0": { - "then": "Terletak di bawah tanah" - }, - "1": { - "then": "Terletak di lantai dasar" - }, - "2": { - "then": "Terletak di lantai dasar" - }, - "3": { - "then": "Berlokasi di lantai pertama" - }, - "4": { - "then": "Terletak di lantai basement pertama" - } - }, - "question": "Pada tingkat apa fitur ini diletakkan?", - "render": "Terletak di lantai {level}" - }, "multilevels": { "override": { "question": "Pada lantai berapa saja lift ini berjalan?", @@ -569,6 +548,27 @@ "phone": { "question": "Berapa nomor telepon dari {title()}?" }, + "single_level": { + "mappings": { + "0": { + "then": "Terletak di bawah tanah" + }, + "1": { + "then": "Terletak di lantai dasar" + }, + "2": { + "then": "Terletak di lantai dasar" + }, + "3": { + "then": "Berlokasi di lantai pertama" + }, + "4": { + "then": "Terletak di lantai basement pertama" + } + }, + "question": "Pada tingkat apa fitur ini diletakkan?", + "render": "Terletak di lantai {level}" + }, "smoking": { "mappings": { "0": { diff --git a/langs/layers/it.json b/langs/layers/it.json index 1b6502f5e..ea501f5a2 100644 --- a/langs/layers/it.json +++ b/langs/layers/it.json @@ -1809,24 +1809,6 @@ "email": { "question": "Qual è l'indirizzo email di {title()}?" }, - "level": { - "mappings": { - "0": { - "then": "Si trova sotto il livello stradale" - }, - "1": { - "then": "Si trova al pianoterra" - }, - "2": { - "then": "Si trova al pianoterra" - }, - "3": { - "then": "Si trova al primo piano" - } - }, - "question": "A quale piano si trova questo elemento?", - "render": "Si trova al piano numero {level}" - }, "opening_hours": { "question": "Quali sono gli orari di apertura di {title()}?", "render": "

Orari di apertura

{opening_hours_table(opening_hours)}" @@ -1854,6 +1836,24 @@ "phone": { "question": "Qual è il numero di telefono di {title()}?" }, + "single_level": { + "mappings": { + "0": { + "then": "Si trova sotto il livello stradale" + }, + "1": { + "then": "Si trova al pianoterra" + }, + "2": { + "then": "Si trova al pianoterra" + }, + "3": { + "then": "Si trova al primo piano" + } + }, + "question": "A quale piano si trova questo elemento?", + "render": "Si trova al piano numero {level}" + }, "website": { "question": "Qual è il sito web di {title()}?" }, diff --git a/langs/layers/ja.json b/langs/layers/ja.json index eb2c414f2..66ad27974 100644 --- a/langs/layers/ja.json +++ b/langs/layers/ja.json @@ -530,24 +530,6 @@ "email": { "question": "{title()}のEメールアドレスは何ですか?" }, - "level": { - "mappings": { - "0": { - "then": "地下にあります" - }, - "1": { - "then": "1階にあります" - }, - "2": { - "then": "1階にあります" - }, - "3": { - "then": "1階にあります" - } - }, - "question": "この機能は何階にあるのでしょうか?", - "render": "{level}階にあります" - }, "opening_hours": { "question": "{title()}の営業時間は?", "render": "

営業時間

{opening_hours_table(opening_hours)}" @@ -583,6 +565,24 @@ }, "question": "このアメニティにはコンセントがあり、お客様が店内にいるときにも利用できますか?" }, + "single_level": { + "mappings": { + "0": { + "then": "地下にあります" + }, + "1": { + "then": "1階にあります" + }, + "2": { + "then": "1階にあります" + }, + "3": { + "then": "1階にあります" + } + }, + "question": "この機能は何階にあるのでしょうか?", + "render": "{level}階にあります" + }, "website": { "question": "{title()}のウェブサイトは?" }, diff --git a/langs/layers/nb_NO.json b/langs/layers/nb_NO.json index d073d3e7e..4be55ca72 100644 --- a/langs/layers/nb_NO.json +++ b/langs/layers/nb_NO.json @@ -642,27 +642,6 @@ "question": "Hva er nettverksnavnet for det trådløse nettverket?", "render": "Nettverksnavnet er {internet_access:ssid}" }, - "level": { - "mappings": { - "0": { - "then": "Under bakken" - }, - "1": { - "then": "På gateplan" - }, - "2": { - "then": "På gateplan" - }, - "3": { - "then": "I andre etasje" - }, - "4": { - "then": "Er å finne på første kjellernivå" - } - }, - "question": "Hvilken etasje befinner funksjonen seg i?", - "render": "Ligger i {level} etasje" - }, "multilevels": { "override": { "question": "Hvilke etasjer går heisen til?", @@ -755,6 +734,27 @@ }, "question": "Har denne fasiliteten stikkontakter, tilgjengelig for kunder innendørs?" }, + "single_level": { + "mappings": { + "0": { + "then": "Under bakken" + }, + "1": { + "then": "På gateplan" + }, + "2": { + "then": "På gateplan" + }, + "3": { + "then": "I andre etasje" + }, + "4": { + "then": "Er å finne på første kjellernivå" + } + }, + "question": "Hvilken etasje befinner funksjonen seg i?", + "render": "Ligger i {level} etasje" + }, "smoking": { "mappings": { "0": { diff --git a/langs/layers/nl.json b/langs/layers/nl.json index 460b43f84..a8ad5960e 100644 --- a/langs/layers/nl.json +++ b/langs/layers/nl.json @@ -6881,27 +6881,6 @@ } } }, - "level": { - "mappings": { - "0": { - "then": "Bevindt zich ondergronds" - }, - "1": { - "then": "Bevindt zich op de begane grond" - }, - "2": { - "then": "Bevindt zich gelijkvloers" - }, - "3": { - "then": "Bevindt zich op de eerste verdieping" - }, - "4": { - "then": "Bevindt zich in de eerste kelderverdieping" - } - }, - "question": "Op welke verdieping bevindt dit punt zich?", - "render": "Bevindt zich op de {level}de verdieping" - }, "multilevels": { "override": { "question": "Naar welke verdiepingen gaat deze lift?", @@ -6980,6 +6959,9 @@ "phone": { "question": "Wat is het telefoonnummer van {title()}?" }, + "repeated": { + "render": "Er zijn verschillende, identieke objecten op verdiepingen {repeat_on}." + }, "service:electricity": { "mappings": { "0": { @@ -6997,6 +6979,27 @@ }, "question": "Zijn er stekkers beschikbaar voor klanten die binnen zitten?" }, + "single_level": { + "mappings": { + "0": { + "then": "Bevindt zich ondergronds" + }, + "1": { + "then": "Bevindt zich op de begane grond" + }, + "2": { + "then": "Bevindt zich gelijkvloers" + }, + "3": { + "then": "Bevindt zich op de eerste verdieping" + }, + "4": { + "then": "Bevindt zich in de eerste kelderverdieping" + } + }, + "question": "Op welke verdieping bevindt dit punt zich?", + "render": "Bevindt zich op de {level}de verdieping" + }, "smoking": { "mappings": { "0": { diff --git a/langs/layers/pl.json b/langs/layers/pl.json index 606dc16b0..9ca723481 100644 --- a/langs/layers/pl.json +++ b/langs/layers/pl.json @@ -2405,27 +2405,6 @@ "question": "Jaka jest nazwa sieci dla bezprzewodowego dostępu do Internetu?", "render": "Nazwa sieci to {internet_access:ssid}" }, - "level": { - "mappings": { - "0": { - "then": "Znajduje się pod ziemią" - }, - "1": { - "then": "Znajduje się na parterze" - }, - "2": { - "then": "Znajduje się na parterze" - }, - "3": { - "then": "Znajduje się na pierwszym piętrze" - }, - "4": { - "then": "Położone na pierwszym poziomie piwnicy" - } - }, - "question": "Na jakim poziomie znajduje się ta funkcja?", - "render": "Znajduje się na {level} piętrze" - }, "luminous_or_lit": { "mappings": { "0": { @@ -2535,6 +2514,27 @@ }, "question": "Czy w tym przybytku znajdują się gniazdka elektryczne, gdzie klienci mogą naładować swoje urządzenia?" }, + "single_level": { + "mappings": { + "0": { + "then": "Znajduje się pod ziemią" + }, + "1": { + "then": "Znajduje się na parterze" + }, + "2": { + "then": "Znajduje się na parterze" + }, + "3": { + "then": "Znajduje się na pierwszym piętrze" + }, + "4": { + "then": "Położone na pierwszym poziomie piwnicy" + } + }, + "question": "Na jakim poziomie znajduje się ta funkcja?", + "render": "Znajduje się na {level} piętrze" + }, "smoking": { "mappings": { "0": { diff --git a/langs/layers/pt.json b/langs/layers/pt.json index 0b555ee2d..835167ba8 100644 --- a/langs/layers/pt.json +++ b/langs/layers/pt.json @@ -882,27 +882,6 @@ "question": "Qual é o nome da rede para o acesso sem fios à Internet?", "render": "O nome da rede é {internet_access:ssid}" }, - "level": { - "mappings": { - "0": { - "then": "Está no subsolo" - }, - "1": { - "then": "Está ao nível do rés-do-chão" - }, - "2": { - "then": "Está ao nível do rés-do-chão" - }, - "3": { - "then": "Está no primeiro andar" - }, - "4": { - "then": "Localizado no primeiro nível da cave" - } - }, - "question": "Em que nível se encontra este elemento?", - "render": "Está no {level}º andar" - }, "multilevels": { "override": { "question": "Para que pisos vai este elevador?", @@ -956,6 +935,27 @@ }, "question": "Esta infraestrutura tem tomadas elétricas, disponíveis para os clientes quando estão no interior?" }, + "single_level": { + "mappings": { + "0": { + "then": "Está no subsolo" + }, + "1": { + "then": "Está ao nível do rés-do-chão" + }, + "2": { + "then": "Está ao nível do rés-do-chão" + }, + "3": { + "then": "Está no primeiro andar" + }, + "4": { + "then": "Localizado no primeiro nível da cave" + } + }, + "question": "Em que nível se encontra este elemento?", + "render": "Está no {level}º andar" + }, "smoking": { "mappings": { "0": { diff --git a/langs/layers/pt_BR.json b/langs/layers/pt_BR.json index a5a0a8ab2..c0e38375e 100644 --- a/langs/layers/pt_BR.json +++ b/langs/layers/pt_BR.json @@ -628,24 +628,6 @@ "email": { "question": "Qual o endereço de e-mail de {title()}?" }, - "level": { - "mappings": { - "0": { - "then": "Localizado no subsolo" - }, - "1": { - "then": "Localizado no térreo" - }, - "2": { - "then": "Localizado no térreo" - }, - "3": { - "then": "Localizado no primeiro andar" - } - }, - "question": "Em que nível esse recurso está localizado?", - "render": "Localizado no {level}o andar" - }, "opening_hours": { "question": "Qual o horário de funcionamento de {title()}?", "render": "

Horário de funcionamento

{opening_hours_table(opening_hours)}" @@ -664,6 +646,24 @@ "phone": { "question": "Qual o número de telefone de {title()}?" }, + "single_level": { + "mappings": { + "0": { + "then": "Localizado no subsolo" + }, + "1": { + "then": "Localizado no térreo" + }, + "2": { + "then": "Localizado no térreo" + }, + "3": { + "then": "Localizado no primeiro andar" + } + }, + "question": "Em que nível esse recurso está localizado?", + "render": "Localizado no {level}o andar" + }, "website": { "question": "Qual o site de {title()}?" }, diff --git a/langs/layers/ru.json b/langs/layers/ru.json index b32efc029..49cfa19c6 100644 --- a/langs/layers/ru.json +++ b/langs/layers/ru.json @@ -1558,24 +1558,6 @@ "email": { "question": "Какой адрес электронной почты у {title()}?" }, - "level": { - "mappings": { - "0": { - "then": "Расположено под землей" - }, - "1": { - "then": "Расположено на первом этаже" - }, - "2": { - "then": "Расположено на первом этаже" - }, - "3": { - "then": "Расположено на первом этаже" - } - }, - "question": "На каком этаже находится этот объект?", - "render": "Расположено на {level}ом этаже" - }, "opening_hours": { "question": "Какое время работы у {title()}?", "render": "

Часы работы

{opening_hours_table(opening_hours)}" @@ -1594,6 +1576,24 @@ "phone": { "question": "Какой номер телефона у {title()}?" }, + "single_level": { + "mappings": { + "0": { + "then": "Расположено под землей" + }, + "1": { + "then": "Расположено на первом этаже" + }, + "2": { + "then": "Расположено на первом этаже" + }, + "3": { + "then": "Расположено на первом этаже" + } + }, + "question": "На каком этаже находится этот объект?", + "render": "Расположено на {level}ом этаже" + }, "website": { "question": "Какой сайт у {title()}?" }, diff --git a/langs/layers/sl.json b/langs/layers/sl.json index 31e74dfef..279276a6b 100644 --- a/langs/layers/sl.json +++ b/langs/layers/sl.json @@ -149,26 +149,6 @@ "email": { "question": "Kakšen naslov elektronske pošte ima {title()}?" }, - "level": { - "mappings": { - "0": { - "then": "Nahaja se pod zemljo" - }, - "1": { - "then": "Nahaja se v pritličju" - }, - "2": { - "then": "Nahaja se v pritličju" - }, - "3": { - "then": "Nahaja se v prvem nadstropju" - }, - "4": { - "then": "Nahaja se v prvi kletni etaži" - } - }, - "render": "Nahaja se v {level}. nadstropju" - }, "opening_hours": { "question": "Kakšen odpiralni čas ima {title()}?", "render": "

Odpiralni čas

{opening_hours_table(opening_hours)}" @@ -198,6 +178,26 @@ }, "phone": { "question": "Kakšno telefonsko številko ima {title()}?" + }, + "single_level": { + "mappings": { + "0": { + "then": "Nahaja se pod zemljo" + }, + "1": { + "then": "Nahaja se v pritličju" + }, + "2": { + "then": "Nahaja se v pritličju" + }, + "3": { + "then": "Nahaja se v prvem nadstropju" + }, + "4": { + "then": "Nahaja se v prvi kletni etaži" + } + }, + "render": "Nahaja se v {level}. nadstropju" } } }, diff --git a/langs/layers/sv.json b/langs/layers/sv.json index 02d594aa4..fcace1943 100644 --- a/langs/layers/sv.json +++ b/langs/layers/sv.json @@ -51,24 +51,6 @@ "email": { "question": "Vad är e-postadressen till {title()}?" }, - "level": { - "mappings": { - "0": { - "then": "Ligger under jorden" - }, - "1": { - "then": "Ligger på bottenvåningen" - }, - "2": { - "then": "Ligger på bottenvåningen" - }, - "3": { - "then": "Ligger på första våningen" - } - }, - "question": "På vilken nivå finns den här funktionen?", - "render": "Ligger på {level}:e våningen" - }, "opening_hours": { "question": "Vilka är öppettiderna för {title()}?", "render": "

Öppettider

{opening_hours_table(opening_hours)}" @@ -104,6 +86,24 @@ }, "question": "Har den här bekvämligheten eluttag tillgängliga för kunder när de är inne?" }, + "single_level": { + "mappings": { + "0": { + "then": "Ligger under jorden" + }, + "1": { + "then": "Ligger på bottenvåningen" + }, + "2": { + "then": "Ligger på bottenvåningen" + }, + "3": { + "then": "Ligger på första våningen" + } + }, + "question": "På vilken nivå finns den här funktionen?", + "render": "Ligger på {level}:e våningen" + }, "website": { "question": "Vad är webbplatsen för {title()}?" }, diff --git a/langs/layers/zh_Hant.json b/langs/layers/zh_Hant.json index 1b07031cf..dd9c456cb 100644 --- a/langs/layers/zh_Hant.json +++ b/langs/layers/zh_Hant.json @@ -628,27 +628,6 @@ "email": { "question": "{title()} 的電子郵件地址是什麼?" }, - "level": { - "mappings": { - "0": { - "then": "位於地下" - }, - "1": { - "then": "位於 1 樓" - }, - "2": { - "then": "位於 1 樓" - }, - "3": { - "then": "位於 2 樓" - }, - "4": { - "then": "位於地下一樓" - } - }, - "question": "此圖徽位於哪個樓層/層級?", - "render": "位於 {level} 樓" - }, "opening_hours": { "question": "{title()} 的開放時間是什麼?", "render": "

開放時間

{opening_hours_table(opening_hours)}" @@ -705,6 +684,27 @@ }, "question": "這個便利設施有電器設備,能給客戶使用嗎?" }, + "single_level": { + "mappings": { + "0": { + "then": "位於地下" + }, + "1": { + "then": "位於 1 樓" + }, + "2": { + "then": "位於 1 樓" + }, + "3": { + "then": "位於 2 樓" + }, + "4": { + "then": "位於地下一樓" + } + }, + "question": "此圖徽位於哪個樓層/層級?", + "render": "位於 {level} 樓" + }, "website": { "question": "{title()} 網址是什麼?" }, From 6d5f5d54f8d754b9148e5e7b9f5c32435e596d1a Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Thu, 28 Sep 2023 04:02:42 +0200 Subject: [PATCH 14/14] Refactoring: port reviews to svelte --- assets/layers/food/food.json | 2 +- assets/layers/icons/icons.json | 10 + assets/layers/questions/questions.json | 2 +- assets/svg/license_info.json | 10 + assets/svg/mangrove_logo.svg | 47 ++++ assets/svg/star.svg | 56 ++++- assets/svg/star_half.svg | 62 +++++- assets/svg/star_outline.svg | 58 ++++- langs/ca.json | 3 - langs/cs.json | 3 - langs/da.json | 3 - langs/de.json | 3 - langs/en.json | 12 +- langs/es.json | 3 - langs/fr.json | 3 - langs/gl.json | 3 - langs/hu.json | 3 - langs/id.json | 3 - langs/it.json | 3 - langs/ja.json | 3 - langs/nb_NO.json | 3 - langs/nl.json | 3 - langs/pl.json | 3 - langs/pt.json | 3 - langs/pt_BR.json | 3 - langs/ru.json | 3 - langs/zh_Hant.json | 3 - public/assets/mangrove_logo.png | Bin 14110 -> 0 bytes public/css/index-tailwind-output.css | 88 +++----- src/Logic/Web/MangroveReviews.ts | 201 ++++++++++-------- .../BigComponents/SelectedElementTitle.svelte | 2 +- src/UI/Reviews/AllReviews.svelte | 47 ++++ src/UI/Reviews/ReviewElement.ts | 56 ----- src/UI/Reviews/ReviewForm.svelte | 97 +++++++++ src/UI/Reviews/ReviewForm.ts | 101 --------- src/UI/Reviews/SingleReview.svelte | 38 ++++ src/UI/Reviews/SingleReview.ts | 64 ------ src/UI/Reviews/StarElement.svelte | 32 +++ src/UI/Reviews/StarsBar.svelte | 21 ++ src/UI/Reviews/StarsBarIcon.svelte | 11 + src/UI/SpecialVisualizations.ts | 74 ++++++- 41 files changed, 683 insertions(+), 462 deletions(-) create mode 100644 assets/svg/mangrove_logo.svg delete mode 100644 public/assets/mangrove_logo.png create mode 100644 src/UI/Reviews/AllReviews.svelte delete mode 100644 src/UI/Reviews/ReviewElement.ts create mode 100644 src/UI/Reviews/ReviewForm.svelte delete mode 100644 src/UI/Reviews/ReviewForm.ts create mode 100644 src/UI/Reviews/SingleReview.svelte delete mode 100644 src/UI/Reviews/SingleReview.ts create mode 100644 src/UI/Reviews/StarElement.svelte create mode 100644 src/UI/Reviews/StarsBar.svelte create mode 100644 src/UI/Reviews/StarsBarIcon.svelte diff --git a/assets/layers/food/food.json b/assets/layers/food/food.json index 443cd8e36..bac347058 100644 --- a/assets/layers/food/food.json +++ b/assets/layers/food/food.json @@ -149,7 +149,6 @@ }, "tagRenderings": [ "images", - "level", { "question": { "nl": "Wat is de naam van deze eetgelegenheid?", @@ -213,6 +212,7 @@ "email", "phone", "payment-options", + "level", "wheelchair-access", { "question": { diff --git a/assets/layers/icons/icons.json b/assets/layers/icons/icons.json index 9f15ac5dd..dd1efb4e3 100644 --- a/assets/layers/icons/icons.json +++ b/assets/layers/icons/icons.json @@ -182,6 +182,16 @@ "then": "dogs are allowed" } ] + }, + { + "id": "rating", + "labels": [ + "defaults" + ], + "icon": { + "class": "w-20 mx-1 flex items-center" + }, + "render": "{rating()}" } ], "mapRendering": null diff --git a/assets/layers/questions/questions.json b/assets/layers/questions/questions.json index 748c2221e..af7f5742d 100644 --- a/assets/layers/questions/questions.json +++ b/assets/layers/questions/questions.json @@ -130,7 +130,7 @@ "id": "reviews", "description": "Shows the reviews module (including the possibility to leave a review)", "render": { - "*": "{reviews()}" + "*": "{create_review()}{list_reviews()}" } }, { diff --git a/assets/svg/license_info.json b/assets/svg/license_info.json index f84818f4c..d6643c1c3 100644 --- a/assets/svg/license_info.json +++ b/assets/svg/license_info.json @@ -723,6 +723,16 @@ "authors": [], "sources": [] }, + { + "path": "mangrove_logo.svg", + "license": "LOGO", + "authors": [ + "Mangrove.reviews" + ], + "sources": [ + "https://mangrove.reviews/" + ] + }, { "path": "mapcomplete_logo.svg", "license": "LOGO AND CC-BY-SA-4.0", diff --git a/assets/svg/mangrove_logo.svg b/assets/svg/mangrove_logo.svg new file mode 100644 index 000000000..f79997020 --- /dev/null +++ b/assets/svg/mangrove_logo.svg @@ -0,0 +1,47 @@ + + + + + + + + + + diff --git a/assets/svg/star.svg b/assets/svg/star.svg index 61301ada9..84cc67ff2 100644 --- a/assets/svg/star.svg +++ b/assets/svg/star.svg @@ -1,6 +1,52 @@ - - - - - + + + + + diff --git a/assets/svg/star_half.svg b/assets/svg/star_half.svg index 7765c2872..c52a80d87 100644 --- a/assets/svg/star_half.svg +++ b/assets/svg/star_half.svg @@ -1,6 +1,56 @@ - - - - - - \ No newline at end of file + + + + + + + diff --git a/assets/svg/star_outline.svg b/assets/svg/star_outline.svg index 859b7539c..fa23c3705 100644 --- a/assets/svg/star_outline.svg +++ b/assets/svg/star_outline.svg @@ -1,6 +1,52 @@ - - - - - - \ No newline at end of file + + + + + + diff --git a/langs/ca.json b/langs/ca.json index 21c6d7381..7e9cc090b 100644 --- a/langs/ca.json +++ b/langs/ca.json @@ -534,10 +534,7 @@ "attribution": "Les ressenyes funcionen gràcies a Mangrove Reviews i estan disponibles sota CC-BY 4.0.", "i_am_affiliated": "Tinc alguna filiació amb aquest objecte
Marca-ho si n'ets cap, creador, treballador, …", "name_required": "És requerit un nom per mostrar i crear revisions", - "no_rating": "Doneu una puntuació abans d'enviar…", "no_reviews_yet": "No hi ha revisions encara. Sigues el primer a escriure'n una i ajuda al negoci i a les dades lliures!", - "plz_login": "Entra per deixar una revisió", - "posting_as": "Enviat com", "save": "Desar", "saved": "Revisió compartida. Gràcies per compartir!", "saving_review": "Desant…", diff --git a/langs/cs.json b/langs/cs.json index e5229e6b9..fe833def6 100644 --- a/langs/cs.json +++ b/langs/cs.json @@ -448,10 +448,7 @@ "attribution": "Recenze jsou poskytovány službou Mangrove Reviews a jsou k dispozici pod licencí CC-BY 4.0.", "i_am_affiliated": "Jsem spojen/a s tímto objektem
Zaškrtněte, pokud jste vlastníkem, tvůrcem, zaměstnancem, …", "name_required": "Pro zobrazení a vytváření recenzí je vyžadováno jméno", - "no_rating": "Před odesláním udělte hodnocení…", "no_reviews_yet": "Zatím zde nejsou žádné recenze. Buďte první, kdo ji napíše, a pomozte otevřít data a podnikání!", - "plz_login": "Přihlaste se a zanechte recenzi", - "posting_as": "Přihlášeni jako", "save": "Uložit", "saved": "Recenze uložena. Díky za sdílení!", "saving_review": "Ukládání…", diff --git a/langs/da.json b/langs/da.json index 1350677b5..76bd60c63 100644 --- a/langs/da.json +++ b/langs/da.json @@ -383,10 +383,7 @@ "attribution": "Anmeldelserne er baseret på Mangrove Reviews og er tilgængelige under CC-BY 4.0.", "i_am_affiliated": "Jeg er tilknyttet dette objekt
Tjek, om du er ejer, skaber, ansat, ...", "name_required": "Der kræves et navn for at vise og oprette anmeldelser", - "no_rating": "Ingen vurdering givet", "no_reviews_yet": "Der er ingen anmeldelser endnu. Vær den første til at skrive en og hjælpe åbne data og forretningen!", - "plz_login": "Log ind for at give en anmeldelse", - "posting_as": "Anmelder som", "saved": "Anmeldelse gemt. Tak for at bidrage!", "saving_review": "Gemmer…", "title": "{count} Anmeldelser", diff --git a/langs/de.json b/langs/de.json index 671f97a02..2c18b8185 100644 --- a/langs/de.json +++ b/langs/de.json @@ -536,10 +536,7 @@ "attribution": "Rezensionen werden bereitgestellt von Mangrove Reviews und sind unter CC-BY 4.0 verfügbar.", "i_am_affiliated": "Ich bin an diesem Objekt beteiligt
Auswählen, wenn Sie Eigentümer, Ersteller, Angestellter … sind", "name_required": "Der Name des Objekts ist erforderlich, um Bewertungen zu erstellen und anzuzeigen", - "no_rating": "Vor dem Absenden eine Bewertung abgeben…", "no_reviews_yet": "Es gibt noch keine Bewertungen. Hilf mit der ersten Bewertung dem Geschäft und der Open Data Bewegung!", - "plz_login": "Anmelden, um eine Bewertung abzugeben", - "posting_as": "Veröffentlichen als", "save": "Speichern", "saved": "Bewertung gespeichert. Danke fürs Teilen!", "saving_review": "Speichern…", diff --git a/langs/en.json b/langs/en.json index 06e94de36..7167afb95 100644 --- a/langs/en.json +++ b/langs/en.json @@ -557,14 +557,16 @@ "reviews": { "affiliated_reviewer_warning": "(Affiliated review)", "attribution": "Reviews are powered by Mangrove Reviews and are available under CC-BY 4.0.", - "i_am_affiliated": "I am affiliated with this object
Check if you are an owner, creator, employee, …", + "i_am_affiliated": "I am affiliated with this object", + "i_am_affiliated_explanation": "Check if you are an owner, creator, employee, …", "name_required": "A name is required in order to display and create reviews", - "no_rating": "Give a rating before submitting…", "no_reviews_yet": "There are no reviews yet. Be the first to write one and help open data and the business!", - "plz_login": "Log in to leave a review", - "posting_as": "Posting as", + "question": "How would you rate {title()}?", + "question_opinion": "How was your experience?", + "reviewing_as": "Reviewing as {nickname}", + "reviewing_as_anonymous": "Reviewing as anonymous", "save": "Save", - "saved": "Review saved. Thanks for sharing!", + "saved": "Review saved. Thanks for sharing!", "saving_review": "Saving…", "title": "{count} reviews", "title_singular": "One review", diff --git a/langs/es.json b/langs/es.json index 815880080..9522e2660 100644 --- a/langs/es.json +++ b/langs/es.json @@ -414,10 +414,7 @@ "reviews": { "affiliated_reviewer_warning": "(Revisión afiliada)", "name_required": "Se requiere un nombre para mostrar y crear comentarios", - "no_rating": "Da una calificación antes de enviar…", "no_reviews_yet": "Aún no hay reseñas. ¡Sé el primero en escribir una y ayuda a los datos abiertos y a los negocios!", - "plz_login": "Inicia sesión para dejar una reseña", - "posting_as": "Publicación como", "saved": "Reseña guardada. ¡Gracias por compartir!", "saving_review": "Guardando…", "title": "{count} comentarios", diff --git a/langs/fr.json b/langs/fr.json index 7d9422991..7bf0c5f9c 100644 --- a/langs/fr.json +++ b/langs/fr.json @@ -428,10 +428,7 @@ "attribution": "Les avis sont fournis par Mangrove Reviews et sont disponibles sous licence CC-BY 4.0.", "i_am_affiliated": "Je suis affilié à cet objet
Cochez si vous en êtes le propriétaire, créateur, employé, …", "name_required": "Un nom est requis pour afficher et créer des avis", - "no_rating": "Aucun score donné", "no_reviews_yet": "Il n'y a pas encore d'avis. Soyez le premier à en écrire un et aidez le lieu et les données ouvertes !", - "plz_login": "Connectez vous pour laisser un avis", - "posting_as": "Envoi en tant que", "saved": "Avis enregistré. Merci du partage !", "saving_review": "Enregistrement…", "title": "{count} avis", diff --git a/langs/gl.json b/langs/gl.json index 23648730b..8d9d04d00 100644 --- a/langs/gl.json +++ b/langs/gl.json @@ -163,10 +163,7 @@ "reviews": { "affiliated_reviewer_warning": "(Recensión de afiliado)", "name_required": "Requírese un nome para amosar e crear recensións", - "no_rating": "Sen puntuacións", "no_reviews_yet": "Non hai recensións aínda. Se o primeiro en escribir unha e axuda ao negocio e aos datos libres!", - "plz_login": "Inicia sesión para deixar unha recensión", - "posting_as": "Publicar como", "saved": "Recensión compartida. Grazas por compartir!", "saving_review": "Gardando…", "title": "{count} recensións", diff --git a/langs/hu.json b/langs/hu.json index de4faf548..625a81515 100644 --- a/langs/hu.json +++ b/langs/hu.json @@ -303,10 +303,7 @@ "attribution": "A véleményeket Mangrove Reviews tárolja, és a CC-BY 4.0 licenc szerint érhetők el.", "i_am_affiliated": "Kapcsolatban állok ezzel a létesítménnyel
Ellenőrizd, hogy tulajdonos, alkotó, alkalmazott vagy hasonló vagy-e.", "name_required": "Vélemények megjelenítéséhez és létrehozásához névre van szükség", - "no_rating": "Még nem kapott értékelést", "no_reviews_yet": "Még nincs vélemény. Légy Te az első, aki ír, és ezzel támogasd a nyílt adatokat és az üzletet!", - "plz_login": "Értékelés írásához jelentkezz be", - "posting_as": "Közzétéve mint", "saved": "Vélemény elmentve. Köszönjük a megosztást!", "saving_review": "Mentés…", "title": "{count} vélemény", diff --git a/langs/id.json b/langs/id.json index 69e86090a..419d2c101 100644 --- a/langs/id.json +++ b/langs/id.json @@ -162,9 +162,6 @@ }, "reviews": { "attribution": "Ulasan didukung oleh Mangrove Reviews dan tersedia di bawah CC-BY 4.0.", - "no_rating": "Tidak ada peringkat yang diberikan", - "plz_login": "Masuk untuk meninggalkan ulasan", - "posting_as": "Posting sebagai", "saved": " Ulasan disimpan. Terima kasih sudah berbagi! ", "saving_review": "Menyimpan…", "title": "{count} ulasan", diff --git a/langs/it.json b/langs/it.json index 1506a86b5..95464ae7a 100644 --- a/langs/it.json +++ b/langs/it.json @@ -307,10 +307,7 @@ "attribution": "Le recensioni sono fornite da Mangrove Reviews e sono disponibili con licenza CC-BY 4.0.", "i_am_affiliated": "Sono associato con questo oggetto
Spunta se sei il proprietario, creatore, dipendente, etc.", "name_required": "È richiesto un nome per poter mostrare e creare recensioni", - "no_rating": "Nessun voto ricevuto", "no_reviews_yet": "Non ci sono ancora recensioni. Sii il primo a scriverne una aiutando così i dati liberi e l’attività!", - "plz_login": "Accedi per lasciare una recensione", - "posting_as": "Pubblica come", "saved": "Recensione salvata. Grazie per averla condivisa!", "saving_review": "Salvataggio…", "title": "{count} recensioni", diff --git a/langs/ja.json b/langs/ja.json index afcfdd6ad..e09d9f1f9 100644 --- a/langs/ja.json +++ b/langs/ja.json @@ -165,10 +165,7 @@ "attribution": "レビューは、Mangrove Reviews and are available under CC-BY 4.0で公開されます。", "i_am_affiliated": "わたしは、この対象物の関係者です
所有者、作成者、従業員などの有無を確認します", "name_required": "レビューを表示および作成するには名前が必要です", - "no_rating": "評価が与えられていません", "no_reviews_yet": "まだレビューはありません。最初に書き込みを行い、データとビジネスのオープン化を支援しましょう!", - "plz_login": "ログインしてレビューを終了する", - "posting_as": "としての投稿", "saved": "レビューが保存されました。共有ありがとう!", "saving_review": "保存中…", "title": "{count}個のレビュー", diff --git a/langs/nb_NO.json b/langs/nb_NO.json index 3c56e2c00..af9d92472 100644 --- a/langs/nb_NO.json +++ b/langs/nb_NO.json @@ -401,10 +401,7 @@ "attribution": "Vurderinger er muliggjort av Mangrove Reviews og er tilgjengelige som CC-BY 4.0.", "i_am_affiliated": "Jeg har en tilknytning til dette objektet
Sjekk om du er eier, skaper, ansatt, …", "name_required": "Et navn kreves for å vise og opprette vurderinger", - "no_rating": "Ingen vurdering gitt", "no_reviews_yet": "Ingen vurderinger enda. Vær først til å skrive en og hjelp åpen data og bevegelsen.", - "plz_login": "Logg inn for å legge igjen en vurdering", - "posting_as": "Anmelder som", "saved": "Vurdering lagret. Takk for at du deler din mening.", "saving_review": "Lagrer …", "title": "{count} vurderinger", diff --git a/langs/nl.json b/langs/nl.json index 1a7e651cb..70101f0b2 100644 --- a/langs/nl.json +++ b/langs/nl.json @@ -530,10 +530,7 @@ "attribution": "De beoordelingen worden voorzien door Mangrove Reviews en zijn beschikbaar onder deCC-BY 4.0-licentie. ", "i_am_affiliated": "Ik ben persoonlijk betrokken
Vink aan indien je de oprichter, maker, werknemer, ... of dergelijke bent", "name_required": "De naam van dit object moet gekend zijn om een review te kunnen maken", - "no_rating": "Geef een beoordeling voordat je verzendt…", "no_reviews_yet": "Er zijn nog geen beoordelingen. Wees de eerste om een beoordeling te schrijven en help open data en het bedrijf!", - "plz_login": "Meld je aan om een beoordeling te geven", - "posting_as": "Ingelogd als", "save": "Opslaan", "saved": "Bedankt om je beoordeling te delen!", "saving_review": "Opslaan...", diff --git a/langs/pl.json b/langs/pl.json index d4d949a35..ca72241b4 100644 --- a/langs/pl.json +++ b/langs/pl.json @@ -331,10 +331,7 @@ "attribution": "Recenzje są obsługiwane przez Recenzje Mangrove i są dostępne na licencji CC-BY 4.0.", "i_am_affiliated": "Jestem powiązany z tym obiektem
Sprawdź czy jesteś właścicielem, twórcą, pracownikiem, ...", "name_required": "Nazwa jest wymagana do wyświetlania i tworzenia opinii", - "no_rating": "Nie podano oceny", "no_reviews_yet": "Nie ma jeszcze recenzji. Bądź pierwszym, który je napisze i pomóż otworzyć dane i biznes!", - "plz_login": "Zaloguj się, aby zostawić opinię", - "posting_as": "Publikowanie jako", "save": "Zapisz", "saved": "Opinia została zapisana. Dzięki za udostępnienie!", "saving_review": "Zapisywanie…", diff --git a/langs/pt.json b/langs/pt.json index 1b2767540..37f0f8c73 100644 --- a/langs/pt.json +++ b/langs/pt.json @@ -352,10 +352,7 @@ "attribution": "As avaliações são fornecidas por Mangrove Reviews e estão disponíveis sob a licença CC-BY 4.0.", "i_am_affiliated": "Eu sou afiliado a este objeto

Marque isto se for proprietário, criador, funcionário…
", "name_required": "É necessário um nome para mostrar e criar avaliações", - "no_rating": "Nenhuma classificação dada", "no_reviews_yet": "Ainda não existem avaliações. Seja o primeiro a escrever uma e ajude a abrir os dados e os negócios!", - "plz_login": "Inicie a sessão para deixar uma avaliação", - "posting_as": "Publicar como", "saved": "Avaliação guardada. Obrigado por partilhar!", "saving_review": "A guardar…", "title": "{count} avaliações", diff --git a/langs/pt_BR.json b/langs/pt_BR.json index d6af7cb4d..e84552603 100644 --- a/langs/pt_BR.json +++ b/langs/pt_BR.json @@ -162,10 +162,7 @@ "attribution": "As resenhas são fornecidas por Mangrove Reviews e estão disponíveis em CC-BY 4.0.", "i_am_affiliated": "Eu sou afiliado a este objeto

Verifique se você é proprietário, criador, funcionário, …
", "name_required": "É necessário um nome para exibir e criar comentários", - "no_rating": "Nenhuma classificação dada", "no_reviews_yet": "Não há comentários ainda. Seja o primeiro a escrever um e ajude a abrir os dados e os negócios!", - "plz_login": "Entrar para deixar um comentário", - "posting_as": "Postando como", "saved": "Comentário salvo. Obrigado por compartilhar!", "saving_review": "Salvando…", "title": "{count} comentários", diff --git a/langs/ru.json b/langs/ru.json index aaa9683b7..ceb9b1378 100644 --- a/langs/ru.json +++ b/langs/ru.json @@ -176,10 +176,7 @@ "attribution": "Отзывы созданы на основе Mangrove Reviews и доступны под лицензией CC-BY 4.0.", "i_am_affiliated": "Я связан с этим объектом
Отметьте если вы создатель, владелец, работник, …", "name_required": "Необходимо название, чтобы просматривать и создавать отзывы", - "no_rating": "Нет рейтинга", "no_reviews_yet": "Пока нет отзывов. Оставьте первый отзыв и помогите открытым данным и бизнесу!", - "plz_login": "Войдите, чтобы оставить отзыв", - "posting_as": "Публикация от имени", "saved": " Отзыв сохранен. Спасибо, что поделились! ", "saving_review": "Сохранение…", "title": "{count} отзыв(-ов)", diff --git a/langs/zh_Hant.json b/langs/zh_Hant.json index 8772a0778..128b248a3 100644 --- a/langs/zh_Hant.json +++ b/langs/zh_Hant.json @@ -383,10 +383,7 @@ "attribution": "評審系統由Mangrove Reviews提供技術支援,採用CC-BY 4.0授權條款。", "i_am_affiliated": "我是這物件的相關關係者
確認你是否是擁有者、創造者、員工等等", "name_required": "需要有名稱才能顯示和創造審核", - "no_rating": "還沒有評分", "no_reviews_yet": "還沒有審核,當第一個撰寫者來幫助開放資料與商家吧!", - "plz_login": "登入來留下審核", - "posting_as": "以貼文", "saved": "已儲存審核,謝謝你的分享!", "saving_review": "儲存中…", "title": "{count} 審核次數", diff --git a/public/assets/mangrove_logo.png b/public/assets/mangrove_logo.png deleted file mode 100644 index 38f39f8eda52574e21720c1925792308a68669cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14110 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 diff --git a/public/css/index-tailwind-output.css b/public/css/index-tailwind-output.css index da51a2a7f..7c9f0be3e 100644 --- a/public/css/index-tailwind-output.css +++ b/public/css/index-tailwind-output.css @@ -938,10 +938,6 @@ video { margin-bottom: 2rem; } -.ml-3 { - margin-left: 0.75rem; -} - .-ml-6 { margin-left: -1.5rem; } @@ -1210,11 +1206,6 @@ video { width: 2.5rem; } -.w-max { - width: -webkit-max-content; - width: max-content; -} - .w-48 { width: 12rem; } @@ -1404,6 +1395,12 @@ video { margin-left: calc(0.25rem * calc(1 - var(--tw-space-x-reverse))); } +.space-x-2 > :not([hidden]) ~ :not([hidden]) { + --tw-space-x-reverse: 0; + margin-right: calc(0.5rem * var(--tw-space-x-reverse)); + margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse))); +} + .space-y-reverse > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 1; } @@ -1478,11 +1475,6 @@ video { text-overflow: clip; } -.break-normal { - overflow-wrap: normal; - word-break: normal; -} - .break-all { word-break: break-all; } @@ -1555,14 +1547,14 @@ video { border-width: 1px; } -.border-4 { - border-width: 4px; -} - .border-2 { border-width: 2px; } +.border-4 { + border-width: 4px; +} + .border-x { border-left-width: 1px; border-right-width: 1px; @@ -1669,10 +1661,6 @@ video { padding: 2rem; } -.p-1 { - padding: 0.25rem; -} - .p-2 { padding: 0.5rem; } @@ -1681,6 +1669,10 @@ video { padding: 1rem; } +.p-1 { + padding: 0.25rem; +} + .p-0\.5 { padding: 0.125rem; } @@ -1773,10 +1765,6 @@ video { text-align: justify; } -.align-middle { - vertical-align: middle; -} - .text-xl { font-size: 1.25rem; line-height: 1.75rem; @@ -1787,16 +1775,6 @@ video { line-height: 1.75rem; } -.text-4xl { - font-size: 2.25rem; - line-height: 2.5rem; -} - -.text-sm { - font-size: 0.875rem; - line-height: 1.25rem; -} - .text-3xl { font-size: 1.875rem; line-height: 2.25rem; @@ -1807,11 +1785,21 @@ video { line-height: 2rem; } +.text-sm { + font-size: 0.875rem; + line-height: 1.25rem; +} + .text-base { font-size: 1rem; line-height: 1.5rem; } +.text-4xl { + font-size: 2.25rem; + line-height: 2.5rem; +} + .font-bold { font-weight: 700; } @@ -1891,10 +1879,6 @@ video { font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction); } -.leading-none { - line-height: 1; -} - .tracking-tight { letter-spacing: -0.025em; } @@ -2662,26 +2646,6 @@ a.link-underline { opacity: 1; } -@media (prefers-reduced-motion: no-preference) { - @-webkit-keyframes spin { - to { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - } - } - @keyframes spin { - to { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - } - } - - .motion-safe\:animate-spin { - -webkit-animation: spin 1s linear infinite; - animation: spin 1s linear infinite; - } -} - @media (max-width: 480px) { .max-\[480px\]\:w-full { width: 100%; @@ -2816,10 +2780,6 @@ a.link-underline { height: 4rem; } - .md\:h-12 { - height: 3rem; - } - .md\:w-8 { width: 2rem; } diff --git a/src/Logic/Web/MangroveReviews.ts b/src/Logic/Web/MangroveReviews.ts index ec16f3445..15819a735 100644 --- a/src/Logic/Web/MangroveReviews.ts +++ b/src/Logic/Web/MangroveReviews.ts @@ -1,34 +1,35 @@ -import { ImmutableStore, Store, UIEventSource } from "../UIEventSource" -import { MangroveReviews, Review } from "mangrove-reviews-typescript" -import { Utils } from "../../Utils" -import { Feature, Position } from "geojson" -import { GeoOperations } from "../GeoOperations" +import { ImmutableStore, Store, UIEventSource } from "../UIEventSource"; +import { MangroveReviews, Review } from "mangrove-reviews-typescript"; +import { Utils } from "../../Utils"; +import { Feature, Position } from "geojson"; +import { GeoOperations } from "../GeoOperations"; export class MangroveIdentity { - public readonly keypair: Store - public readonly key_id: Store + public readonly keypair: Store; + public readonly key_id: Store; constructor(mangroveIdentity: UIEventSource) { - const key_id = new UIEventSource(undefined) - this.key_id = key_id - const keypairEventSource = new UIEventSource(undefined) - this.keypair = keypairEventSource + const key_id = new UIEventSource(undefined); + this.key_id = key_id; + const keypairEventSource = new UIEventSource(undefined); + this.keypair = keypairEventSource; mangroveIdentity.addCallbackAndRunD(async (data) => { if (data === "") { - return + return; } - const keypair = await MangroveReviews.jwkToKeypair(JSON.parse(data)) - keypairEventSource.setData(keypair) - const pem = await MangroveReviews.publicToPem(keypair.publicKey) - key_id.setData(pem) - }) + const keypair = await MangroveReviews.jwkToKeypair(JSON.parse(data)); + keypairEventSource.setData(keypair); + const pem = await MangroveReviews.publicToPem(keypair.publicKey); + key_id.setData(pem); + }); try { if (!Utils.runningFromConsole && (mangroveIdentity.data ?? "") === "") { - MangroveIdentity.CreateIdentity(mangroveIdentity).then((_) => {}) + MangroveIdentity.CreateIdentity(mangroveIdentity).then((_) => { + }); } } catch (e) { - console.error("Could not create identity: ", e) + console.error("Could not create identity: ", e); } } @@ -38,13 +39,13 @@ export class MangroveIdentity { * @constructor */ private static async CreateIdentity(identity: UIEventSource): Promise { - const keypair = await MangroveReviews.generateKeypair() - const jwk = await MangroveReviews.keypairToJwk(keypair) + const keypair = await MangroveReviews.generateKeypair(); + const jwk = await MangroveReviews.keypairToJwk(keypair); if ((identity.data ?? "") !== "") { // Identity has been loaded via osmPreferences by now - we don't overwrite - return + return; } - identity.setData(JSON.stringify(jwk)) + identity.setData(JSON.stringify(jwk)); } } @@ -52,17 +53,18 @@ export class MangroveIdentity { * Tracks all reviews of a given feature, allows to create a new review */ export default class FeatureReviews { - private static readonly _featureReviewsCache: Record = {} - public readonly subjectUri: Store + private static readonly _featureReviewsCache: Record = {}; + public readonly subjectUri: Store; + public readonly average: Store; private readonly _reviews: UIEventSource<(Review & { madeByLoggedInUser: Store })[]> = - new UIEventSource([]) + new UIEventSource([]); public readonly reviews: Store<(Review & { madeByLoggedInUser: Store })[]> = - this._reviews - private readonly _lat: number - private readonly _lon: number - private readonly _uncertainty: number - private readonly _name: Store - private readonly _identity: MangroveIdentity + this._reviews; + private readonly _lat: number; + private readonly _lon: number; + private readonly _uncertainty: number; + private readonly _name: Store; + private readonly _identity: MangroveIdentity; private constructor( feature: Feature, @@ -75,55 +77,72 @@ export default class FeatureReviews { } ) { const centerLonLat = GeoOperations.centerpointCoordinates(feature) - ;[this._lon, this._lat] = centerLonLat + ;[this._lon, this._lat] = centerLonLat; this._identity = - mangroveIdentity ?? new MangroveIdentity(new UIEventSource(undefined)) - const nameKey = options?.nameKey ?? "name" + mangroveIdentity ?? new MangroveIdentity(new UIEventSource(undefined)); + const nameKey = options?.nameKey ?? "name"; if (feature.geometry.type === "Point") { - this._uncertainty = options?.uncertaintyRadius ?? 10 + this._uncertainty = options?.uncertaintyRadius ?? 10; } else { - let coordss: Position[][] + let coordss: Position[][]; if (feature.geometry.type === "LineString") { - coordss = [feature.geometry.coordinates] + coordss = [feature.geometry.coordinates]; } else if ( feature.geometry.type === "MultiLineString" || feature.geometry.type === "Polygon" ) { - coordss = feature.geometry.coordinates + coordss = feature.geometry.coordinates; } - let maxDistance = 0 + let maxDistance = 0; for (const coords of coordss) { for (const coord of coords) { maxDistance = Math.max( maxDistance, GeoOperations.distanceBetween(centerLonLat, coord) - ) + ); } } - this._uncertainty = options?.uncertaintyRadius ?? maxDistance + this._uncertainty = options?.uncertaintyRadius ?? maxDistance; } - this._name = tagsSource.map((tags) => tags[nameKey] ?? options?.fallbackName) + this._name = tagsSource.map((tags) => tags[nameKey] ?? options?.fallbackName); - this.subjectUri = this.ConstructSubjectUri() + this.subjectUri = this.ConstructSubjectUri(); - const self = this + const self = this; this.subjectUri.addCallbackAndRunD(async (sub) => { - const reviews = await MangroveReviews.getReviews({ sub }) - self.addReviews(reviews.reviews) - }) + const reviews = await MangroveReviews.getReviews({ sub }); + self.addReviews(reviews.reviews); + }); /* We also construct all subject queries _without_ encoding the name to work around a previous bug * See https://github.com/giggls/opencampsitemap/issues/30 */ this.ConstructSubjectUri(true).addCallbackAndRunD(async (sub) => { try { - const reviews = await MangroveReviews.getReviews({ sub }) - self.addReviews(reviews.reviews) + const reviews = await MangroveReviews.getReviews({ sub }); + self.addReviews(reviews.reviews); } catch (e) { - console.log("Could not fetch reviews for partially incorrect query ", sub) + console.log("Could not fetch reviews for partially incorrect query ", sub); } - }) + }); + this.average = this._reviews.map(reviews => { + if (!reviews) { + return null; + } + if(reviews.length === 0){ + return null + } + let sum = 0; + let count = 0; + for (const review of reviews) { + if (review.rating !== undefined) { + count++; + sum += review.rating; + } + } + return Math.round(sum / count) + }); } /** @@ -139,14 +158,14 @@ export default class FeatureReviews { uncertaintyRadius?: number } ) { - const key = feature.properties.id - const cached = FeatureReviews._featureReviewsCache[key] + const key = feature.properties.id; + const cached = FeatureReviews._featureReviewsCache[key]; if (cached !== undefined) { - return cached + return cached; } - const featureReviews = new FeatureReviews(feature, tagsSource, mangroveIdentity, options) - FeatureReviews._featureReviewsCache[key] = featureReviews - return featureReviews + const featureReviews = new FeatureReviews(feature, tagsSource, mangroveIdentity, options); + FeatureReviews._featureReviewsCache[key] = featureReviews; + return featureReviews; } /** @@ -155,15 +174,15 @@ export default class FeatureReviews { public async createReview(review: Omit): Promise { const r: Review = { sub: this.subjectUri.data, - ...review, - } - const keypair: CryptoKeyPair = this._identity.keypair.data - console.log(r) - const jwt = await MangroveReviews.signReview(keypair, r) - console.log("Signed:", jwt) - await MangroveReviews.submitReview(jwt) - this._reviews.data.push({ ...r, madeByLoggedInUser: new ImmutableStore(true) }) - this._reviews.ping() + ...review + }; + const keypair: CryptoKeyPair = this._identity.keypair.data; + console.log(r); + const jwt = await MangroveReviews.signReview(keypair, r); + console.log("Signed:", jwt); + await MangroveReviews.submitReview(jwt); + this._reviews.data.push({ ...r, madeByLoggedInUser: new ImmutableStore(true) }); + this._reviews.ping(); } /** @@ -172,46 +191,48 @@ export default class FeatureReviews { * @private */ private addReviews(reviews: { payload: Review; kid: string }[]) { - const self = this - const alreadyKnown = new Set(self._reviews.data.map((r) => r.rating + " " + r.opinion)) + const self = this; + const alreadyKnown = new Set(self._reviews.data.map((r) => r.rating + " " + r.opinion)); - let hasNew = false + let hasNew = false; for (const reviewData of reviews) { - const review = reviewData.payload + const review = reviewData.payload; try { - const url = new URL(review.sub) - console.log("URL is", url) + const url = new URL(review.sub); + console.log("URL is", url); if (url.protocol === "geo:") { const coordinate = <[number, number]>( url.pathname.split(",").map((n) => Number(n)) - ) + ); const distance = GeoOperations.distanceBetween( [this._lat, this._lon], coordinate - ) + ); if (distance > this._uncertainty) { - continue + continue; } } } catch (e) { - console.warn(e) + console.warn(e); } - const key = review.rating + " " + review.opinion + const key = review.rating + " " + review.opinion; if (alreadyKnown.has(key)) { - continue + continue; } self._reviews.data.push({ ...review, madeByLoggedInUser: this._identity.key_id.map((user_key_id) => { - return reviewData.kid === user_key_id - }), - }) - hasNew = true + return reviewData.kid === user_key_id; + }) + }); + hasNew = true; } if (hasNew) { - self._reviews.ping() + self._reviews.data.sort((a, b) => b.iat - a.iat) // Sort with most recent first + + self._reviews.ping(); } } @@ -224,13 +245,13 @@ export default class FeatureReviews { private ConstructSubjectUri(dontEncodeName: boolean = false): Store { // https://www.rfc-editor.org/rfc/rfc5870#section-3.4.2 // `u` stands for `uncertainty`, https://www.rfc-editor.org/rfc/rfc5870#section-3.4.3 - const self = this - return this._name.map(function (name) { - let uri = `geo:${self._lat},${self._lon}?u=${self._uncertainty}` + const self = this; + return this._name.map(function(name) { + let uri = `geo:${self._lat},${self._lon}?u=${self._uncertainty}`; if (name) { - uri += "&q=" + (dontEncodeName ? name : encodeURIComponent(name)) + uri += "&q=" + (dontEncodeName ? name : encodeURIComponent(name)); } - return uri - }) + return uri; + }); } } diff --git a/src/UI/BigComponents/SelectedElementTitle.svelte b/src/UI/BigComponents/SelectedElementTitle.svelte index 01c0bbaf9..600087dc7 100644 --- a/src/UI/BigComponents/SelectedElementTitle.svelte +++ b/src/UI/BigComponents/SelectedElementTitle.svelte @@ -46,7 +46,7 @@ > {#each layer.titleIcons as titleIconConfig} {#if (titleIconConfig.condition?.matchesProperties(_tags) ?? true) && (titleIconConfig.metacondition?.matchesProperties( { ..._metatags, ..._tags } ) ?? true) && titleIconConfig.IsKnown(_tags)} -
+
+ import FeatureReviews from "../../Logic/Web/MangroveReviews"; + import SingleReview from "./SingleReview.svelte"; + import { Utils } from "../../Utils"; + import StarsBar from "./StarsBar.svelte"; + import ReviewForm from "./ReviewForm.svelte"; + import Translations from "../i18n/Translations"; + import Tr from "../Base/Tr.svelte"; + import type { SpecialVisualizationState } from "../SpecialVisualization"; + import { UIEventSource } from "../../Logic/UIEventSource"; + import type { Feature } from "geojson"; + import LayerConfig from "../../Models/ThemeConfig/LayerConfig"; + import ToSvelte from "../Base/ToSvelte.svelte"; + import Svg from "../../Svg"; + + /** + * An element showing all reviews + */ + export let reviews: FeatureReviews; + export let state: SpecialVisualizationState; + export let tags: UIEventSource>; + export let feature: Feature; + export let layer: LayerConfig; + let average = reviews.average; + let _reviews = []; + reviews.reviews.addCallbackAndRunD(r => { + _reviews = Utils.NoNull(r); + }); + + + +
+ {#if _reviews.length > 1} + + {/if} + {#if _reviews.length > 0} + {#each _reviews as review} + + {/each} + {:else} + + {/if} +
+ + +
+
diff --git a/src/UI/Reviews/ReviewElement.ts b/src/UI/Reviews/ReviewElement.ts deleted file mode 100644 index efdf42fe8..000000000 --- a/src/UI/Reviews/ReviewElement.ts +++ /dev/null @@ -1,56 +0,0 @@ -import Combine from "../Base/Combine" -import Translations from "../i18n/Translations" -import SingleReview from "./SingleReview" -import BaseUIElement from "../BaseUIElement" -import Img from "../Base/Img" -import { VariableUiElement } from "../Base/VariableUIElement" -import Link from "../Base/Link" -import FeatureReviews from "../../Logic/Web/MangroveReviews" - -/** - * Shows the reviews and scoring base on mangrove.reviews - * The middle element is some other component shown in the middle, e.g. the review input element - */ -export default class ReviewElement extends VariableUiElement { - constructor(reviews: FeatureReviews, middleElement: BaseUIElement) { - super( - reviews.reviews.map( - (revs) => { - const elements = [] - revs.sort((a, b) => b.iat - a.iat) // Sort with most recent first - const avg = - revs.map((review) => review.rating).reduce((a, b) => a + b, 0) / revs.length - elements.push( - new Combine([ - SingleReview.GenStars(avg), - new Link( - revs.length === 1 - ? Translations.t.reviews.title_singular.Clone() - : Translations.t.reviews.title.Subs({ - count: "" + revs.length, - }), - `https://mangrove.reviews/search?sub=${encodeURIComponent( - reviews.subjectUri.data - )}`, - true - ), - ]).SetClass("font-2xl flex justify-between items-center pl-2 pr-2") - ) - - elements.push(middleElement) - - elements.push(...revs.map((review) => new SingleReview(review))) - elements.push( - new Combine([ - Translations.t.reviews.attribution.Clone(), - new Img("./assets/mangrove_logo.png"), - ]).SetClass("review-attribution") - ) - - return new Combine(elements).SetClass("block") - }, - [reviews.subjectUri] - ) - ) - } -} diff --git a/src/UI/Reviews/ReviewForm.svelte b/src/UI/Reviews/ReviewForm.svelte new file mode 100644 index 000000000..7949a457d --- /dev/null +++ b/src/UI/Reviews/ReviewForm.svelte @@ -0,0 +1,97 @@ + +{#if _state === "done"} + +{:else if _state === "saving"} + + + +{:else} +
+
+ +
+ {confirmedScore = e.detail.score}} on:hover={e => {score = e.detail.score}} + on:mouseout={e => {score = null}} score={score ?? confirmedScore ?? 0} + starSize="w-8 h-8"> + + {#if confirmedScore !== undefined} + +