diff --git a/app/assets/javascripts/darkswarm/directives/open_street_map.js.coffee b/app/assets/javascripts/darkswarm/directives/open_street_map.js.coffee index 7dbdc73669..e9be4acb88 100644 --- a/app/assets/javascripts/darkswarm/directives/open_street_map.js.coffee +++ b/app/assets/javascripts/darkswarm/directives/open_street_map.js.coffee @@ -61,28 +61,47 @@ Darkswarm.directive 'ofnOpenStreetMap', ($window, Enterprises, EnterpriseModal, displayMap = -> setMapDimensions() - averageLatitude = averageAngle("latitude") - averageLongitude = averageAngle("longitude") zoomLevel = 6 map = L.map('open-street-map') L.tileLayer.provider(openStreetMapProviderName, openStreetMapProviderOptions).addTo(map) - map.setView([averageLatitude, averageLongitude], zoomLevel) + map.setView([initialLatitude(), initialLongitude()], zoomLevel) displayEnterprises = -> - for enterprise in Enterprises.enterprises - if enterprise.latitude? && enterprise.longitude? - marker = buildMarker(enterprise, { lat: enterprise.latitude, lng: enterprise.longitude }, enterprise.name).addTo(map) - enterpriseNames.push(enterpriseName(enterprise)) - markers.push(marker) + for enterprise in geocodedEnterprises() + marker = buildMarker(enterprise, { lat: enterprise.latitude, lng: enterprise.longitude }, enterprise.name).addTo(map) + enterpriseNames.push(enterpriseName(enterprise)) + markers.push(marker) + + disableSearchField = () => + $('#open-street-map--search input').prop("disabled", true) displaySearchField = () -> new Autocomplete('#open-street-map--search', onSubmit: goToEnterprise search: searchEnterprises ) - overwriteInlinePositionRelativeToPositionSearchField = -> - $('#open-street-map--search').css("position", "absolute") - overwriteInlinePositionRelativeToPositionSearchField() + overwriteInlinePositionRelativeToAbsoluteOnSearchField() + if geocodedEnterprises().length == 0 + disableSearchField() + + geocodedEnterprises = () -> + Enterprises.enterprises.filter (enterprise) -> + enterprise.latitude? && enterprise.longitude? + + initialLatitude = () -> + if geocodedEnterprises().length > 0 + averageAngle("latitude") + else + openStreetMapConfig.open_street_map_default_latitude || -37.4713077 + + initialLongitude = () -> + if geocodedEnterprises().length > 0 + averageAngle("longitude") + else + openStreetMapConfig.open_street_map_default_longitude || 144.7851531 + + overwriteInlinePositionRelativeToAbsoluteOnSearchField = -> + $('#open-street-map--search').css("position", "absolute") searchEnterprises = (input) -> if input.length < 1 diff --git a/app/models/content_configuration.rb b/app/models/content_configuration.rb index 29ab8f3308..245140f712 100644 --- a/app/models/content_configuration.rb +++ b/app/models/content_configuration.rb @@ -21,6 +21,8 @@ class ContentConfiguration < Spree::Preferences::FileConfiguration preference :open_street_map_enabled, :boolean, default: false preference :open_street_map_provider_name, :string, default: "OpenStreetMap.Mapnik" preference :open_street_map_provider_options, :text, default: "{}" + preference :open_street_map_default_latitude, :string, default: "-37.4713077" + preference :open_street_map_default_longitude, :string, default: "144.7851531" # Producer sign-up page # All the following defaults using I18n don't work. diff --git a/app/models/preference_sections/map_section.rb b/app/models/preference_sections/map_section.rb index cc16939c36..deed329b44 100644 --- a/app/models/preference_sections/map_section.rb +++ b/app/models/preference_sections/map_section.rb @@ -10,7 +10,9 @@ module PreferenceSections [ :open_street_map_enabled, :open_street_map_provider_name, - :open_street_map_provider_options + :open_street_map_provider_options, + :open_street_map_default_latitude, + :open_street_map_default_longitude ] end end diff --git a/app/serializers/api/open_street_map_config_serializer.rb b/app/serializers/api/open_street_map_config_serializer.rb index 8c5aec5dbb..b24cdcbd41 100644 --- a/app/serializers/api/open_street_map_config_serializer.rb +++ b/app/serializers/api/open_street_map_config_serializer.rb @@ -4,7 +4,9 @@ module Api class OpenStreetMapConfigSerializer < ActiveModel::Serializer attributes :open_street_map_enabled, :open_street_map_provider_name, - :open_street_map_provider_options + :open_street_map_provider_options, + :open_street_map_default_latitude, + :open_street_map_default_longitude def open_street_map_enabled ContentConfig.open_street_map_enabled @@ -17,5 +19,13 @@ module Api def open_street_map_provider_options ContentConfig.open_street_map_provider_options.to_json end + + def open_street_map_default_latitude + ContentConfig.open_street_map_default_latitude + end + + def open_street_map_default_longitude + ContentConfig.open_street_map_default_longitude + end end end