diff --git a/components/Map.vue b/components/Map.vue
index 38ef097c..4cd0b778 100644
--- a/components/Map.vue
+++ b/components/Map.vue
@@ -50,8 +50,8 @@ export default {
data ({ $store }) {
return {
mdiWalk, mdiBike, mdiCar, mdiMapMarker,
- url: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
- attribution: 'OpenStreetMap contributors',
+ url: $store.state.settings.tilelayer_provider || 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
+ attribution: $store.state.settings.tilelayer_provider_attribution || "OpenStreetMap contributors",
zoom: 14,
center: [this.event.place.latitude, this.event.place.longitude],
marker: {
diff --git a/components/admin/Geolocation.vue b/components/admin/Geolocation.vue
new file mode 100644
index 00000000..f96f9cd9
--- /dev/null
+++ b/components/admin/Geolocation.vue
@@ -0,0 +1,157 @@
+
+v-card
+ v-card-title Geolocation settings
+ v-card-text
+ p.mb-8(v-html="$t('admin.geolocation_description')")
+ v-form(v-model='isValid')
+
+ v-text-field.mb-4(v-model='geocoding_provider'
+ @blur="save('geocoding_provider', geocoding_provider )"
+ :label="$t('admin.geocoding_provider')"
+ :hint="$t('admin.geocoding_provider_help')"
+ persistent-hint
+ :placeholder="geocoding_provider_default")
+
+ v-autocomplete.mb-4(v-model='geocoding_countrycodes'
+ @blur="save('geocoding_countrycodes', geocoding_countrycodes )"
+ :label="$t('admin.geocoding_countrycodes')"
+ chips multiple persistent-hint
+ :items='countries'
+ item-value="code"
+ item-text="name"
+ :hint="$t('admin.geocoding_countrycodes_help')")
+
+ v-text-field.mb-4(v-model='tilelayer_provider'
+ @blur="save('tilelayer_provider', tilelayer_provider )"
+ :label="$t('admin.tilelayer_provider')"
+ :hint="$t('admin.tilelayer_provider_help')"
+ persistent-hint
+ :placeholder="tilelayer_provider_default")
+
+ v-text-field(v-model='tilelayer_provider_attribution'
+ @blur="save('tilelayer_provider_attribution', tilelayer_provider_attribution )"
+ :label="$t('admin.tilelayer_provider_attribution')"
+ placeholder="map data © OpenStreetMap contributors under ODbL")
+
+ clientOnly
+ div.h-8.w-8(id="leaflet-map")
+
+ v-card-actions
+ v-spacer
+ v-btn(color='primary' @click='testGeocodingProvider' :loading='testGeocodingLoading' outlined) {{$t('admin.geocoding_test_button')}}
+ v-btn(color='primary' @click='testTileLayerProvider' :loading='testTileLayerLoading' outlined :disabled="false" ) {{$t('admin.tilelayer_test_button')}}
+ v-btn(color='warning' @click="done" outlined) {{$t("common.ok")}}
+
+
+
diff --git a/components/admin/Settings.vue b/components/admin/Settings.vue
index 938609b4..82eb3fd0 100644
--- a/components/admin/Settings.vue
+++ b/components/admin/Settings.vue
@@ -57,32 +57,41 @@ v-container
v-card-actions
v-btn(text @click='showSMTP=true')
- {{$t('admin.show_smtp_setup')}}
+ {{$t('admin.show_smtp_setup')}}
v-btn(text @click='$emit("complete")' color='primary' v-if='setup') {{$t('common.next')}}
v-icon(v-text='mdiArrowRight')
+ v-dialog(v-model='showGeolocationConfigs' destroy-on-close max-width='700px' :fullscreen='$vuetify.breakpoint.xsOnly')
+ Geolocation(@close='showGeolocationConfigs = false')
+
+ v-card-actions
+ v-btn(text @click='showGeolocationConfigs=true')
+ {{$t('admin.show_geolocation_setup')}}
+