From cc317bc8c970266344490cbad8626d7a235ecef6 Mon Sep 17 00:00:00 2001 From: Cillian O'Ruanaidh Date: Fri, 24 Jul 2020 16:00:30 +0100 Subject: [PATCH] Move the :initialLatitude and :initialLongitude methods from the OpenStreetMap service to the MapCenterCalculator service. --- .../directives/open_street_map.js.coffee | 22 ++---------- .../darkswarm/services/enterprises.js.coffee | 5 +++ .../darkswarm/services/map.js.coffee | 4 +-- .../services/map_centre_calculator.js.coffee | 17 +++++++--- .../services/enterprise_spec.js.coffee | 8 +++-- .../map_centre_calculator_spec.js.coffee | 34 ++++++++++++++----- 6 files changed, 52 insertions(+), 38 deletions(-) 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 832878cd50..32f0d921b0 100644 --- a/app/assets/javascripts/darkswarm/directives/open_street_map.js.coffee +++ b/app/assets/javascripts/darkswarm/directives/open_street_map.js.coffee @@ -36,10 +36,10 @@ Darkswarm.directive 'ofnOpenStreetMap', ($window, MapCentreCalculator, Enterpris zoomLevel = 6 map = L.map('open-street-map') L.tileLayer.provider(openStreetMapProviderName, openStreetMapProviderOptions).addTo(map) - map.setView([initialLatitude(), initialLongitude()], zoomLevel) + map.setView([MapCentreCalculator.initialLatitude(), MapCentreCalculator.initialLongitude()], zoomLevel) displayEnterprises = -> - for enterprise in geocodedEnterprises() + for enterprise in Enterprises.geocodedEnterprises() marker = buildMarker(enterprise, { lat: enterprise.latitude, lng: enterprise.longitude }, enterprise.name).addTo(map) enterpriseNames.push(enterpriseName(enterprise)) markers.push(marker) @@ -53,25 +53,9 @@ Darkswarm.directive 'ofnOpenStreetMap', ($window, MapCentreCalculator, Enterpris search: searchEnterprises ) overwriteInlinePositionRelativeToAbsoluteOnSearchField() - if geocodedEnterprises().length == 0 + if Enterprises.geocodedEnterprises().length == 0 disableSearchField() - geocodedEnterprises = () -> - Enterprises.enterprises.filter (enterprise) -> - enterprise.latitude? && enterprise.longitude? - - initialLatitude = () -> - if geocodedEnterprises().length > 0 - MapCentreCalculator.calculate_latitude(geocodedEnterprises()) - else - openStreetMapConfig.open_street_map_default_latitude - - initialLongitude = () -> - if geocodedEnterprises().length > 0 - MapCentreCalculator.calculate_longitude(geocodedEnterprises()) - else - openStreetMapConfig.open_street_map_default_longitude - overwriteInlinePositionRelativeToAbsoluteOnSearchField = -> $('#open-street-map--search').css("position", "absolute") diff --git a/app/assets/javascripts/darkswarm/services/enterprises.js.coffee b/app/assets/javascripts/darkswarm/services/enterprises.js.coffee index 843749c2e6..d8347c7e41 100644 --- a/app/assets/javascripts/darkswarm/services/enterprises.js.coffee +++ b/app/assets/javascripts/darkswarm/services/enterprises.js.coffee @@ -84,3 +84,8 @@ Darkswarm.factory 'Enterprises', (enterprises, ShopsResource, CurrentHub, Taxons resetDistance: -> enterprise.distance = null for enterprise in @enterprises + + geocodedEnterprises: => + @enterprises.filter (enterprise) -> + enterprise.latitude? && enterprise.longitude? + diff --git a/app/assets/javascripts/darkswarm/services/map.js.coffee b/app/assets/javascripts/darkswarm/services/map.js.coffee index 2758f299f8..9aa23a7155 100644 --- a/app/assets/javascripts/darkswarm/services/map.js.coffee +++ b/app/assets/javascripts/darkswarm/services/map.js.coffee @@ -2,9 +2,7 @@ Darkswarm.factory "OfnMap", (Enterprises, EnterpriseListModal, MapConfiguration) new class OfnMap constructor: -> @coordinates = {} - @enterprises = Enterprises.enterprises.filter (enterprise) -> - # Remove enterprises w/o lat or long - enterprise.latitude != null || enterprise.longitude != null + @enterprises = Enterprises.geocodedEnterprises() @enterprises = @enterprise_markers(@enterprises) enterprise_markers: (enterprises) -> diff --git a/app/assets/javascripts/darkswarm/services/map_centre_calculator.js.coffee b/app/assets/javascripts/darkswarm/services/map_centre_calculator.js.coffee index f1023ce2d6..85ca34ff54 100644 --- a/app/assets/javascripts/darkswarm/services/map_centre_calculator.js.coffee +++ b/app/assets/javascripts/darkswarm/services/map_centre_calculator.js.coffee @@ -1,10 +1,17 @@ -Darkswarm.factory 'MapCentreCalculator', -> +Darkswarm.factory 'MapCentreCalculator', (Enterprises, openStreetMapConfig) -> new class MapCentreCalculator - calculate_latitude: (coordinates) => - @_calculate("latitude", coordinates) - calculate_longitude: (coordinates) => - @_calculate("longitude", coordinates) + initialLatitude: => + if Enterprises.geocodedEnterprises().length > 0 + @_calculate("latitude", Enterprises.geocodedEnterprises()) + else + openStreetMapConfig.open_street_map_default_latitude + + initialLongitude: => + if Enterprises.geocodedEnterprises().length > 0 + @_calculate("longitude", Enterprises.geocodedEnterprises()) + else + openStreetMapConfig.open_street_map_default_longitude _calculate: (angleName, coordinates) => positiveAngles = [] diff --git a/spec/javascripts/unit/darkswarm/services/enterprise_spec.js.coffee b/spec/javascripts/unit/darkswarm/services/enterprise_spec.js.coffee index c95fbdf81b..088ea359e0 100644 --- a/spec/javascripts/unit/darkswarm/services/enterprise_spec.js.coffee +++ b/spec/javascripts/unit/darkswarm/services/enterprise_spec.js.coffee @@ -24,7 +24,7 @@ describe "Enterprises service", -> {id: 5, visible: true, name: 'e', category: "producer_hub", hubs: [{id: 1}]}, {id: 6, visible: true, name: 'f', category: "producer_shop", hubs: [{id: 2}]}, {id: 7, visible: true, name: 'g', category: "producer", hubs: [{id: 2}]} - {id: 8, visible: true, name: 'h', category: "producer", hubs: [{id: 2}]} + {id: 8, visible: true, name: 'h', category: "producer", hubs: [{id: 2}], latitude: 76.26, longitude: -42.66 } ] H1: 0 beforeEach -> @@ -142,4 +142,8 @@ describe "Enterprises service", -> it "resets the distance", -> Enterprises.resetDistance() for e in Enterprises.enterprises - expect(e.distance).toBeNull() \ No newline at end of file + expect(e.distance).toBeNull() + + describe "geocodedEnterprises", -> + it "only returns enterprises which have a latitude and longitude", -> + expect(Enterprises.geocodedEnterprises()).toEqual [Enterprises.enterprises[7]] diff --git a/spec/javascripts/unit/darkswarm/services/map_centre_calculator_spec.js.coffee b/spec/javascripts/unit/darkswarm/services/map_centre_calculator_spec.js.coffee index 00e747a0a8..0d18541442 100644 --- a/spec/javascripts/unit/darkswarm/services/map_centre_calculator_spec.js.coffee +++ b/spec/javascripts/unit/darkswarm/services/map_centre_calculator_spec.js.coffee @@ -1,5 +1,6 @@ describe 'MapCentreCalculator service', -> MapCentreCalculator = null + Enterprises = null defaultLongitude = null defaultLatitude = null @@ -7,27 +8,42 @@ describe 'MapCentreCalculator service', -> module 'Darkswarm' defaultLongitude = -6 defaultLatitude = 53 + angular.module('Darkswarm').value 'openStreetMapConfig', { + open_street_map_default_latitude: 76.26, + open_street_map_default_longitude: -42.66 + } - inject (_MapCentreCalculator_)-> + inject (_MapCentreCalculator_, _Enterprises_)-> MapCentreCalculator = _MapCentreCalculator_ + Enterprises = _Enterprises_ - describe "calculate_latitude", -> - it "calculates the center latitude", -> - coordinates = [ + describe "initialLatitude", -> + it "calculates the center latitude of any present geocoded enterprises", -> + Enterprises.geocodedEnterprises = -> [ { latitude: 53, longitude: defaultLongitude }, { latitude: 54, longitude: defaultLongitude } ] - expect(MapCentreCalculator.calculate_latitude(coordinates)).toEqual 53.5 + expect(MapCentreCalculator.initialLatitude()).toEqual 53.5 - describe "calculate_longitude", -> - it "calculates the center longitude", -> - coordinates = [ + it "returns the default configured latitude when there are no geocoded enterprises present", -> + Enterprises.geocodedEnterprises = -> [] + + expect(MapCentreCalculator.initialLatitude()).toEqual 76.26 + + describe "initialLongitude", -> + it "calculates the center longitude of any present geocoded enterprises", -> + Enterprises.geocodedEnterprises = -> [ { latitude: defaultLatitude, longitude: -6 }, { latitude: defaultLatitude, longitude: -7 } ] - expect(MapCentreCalculator.calculate_longitude(coordinates)).toEqual -6.5 + expect(MapCentreCalculator.initialLongitude()).toEqual -6.5 + + it "returns the default configured longitude when there are no geocoded enterprises present", -> + Enterprises.geocodedEnterprises = -> [] + + expect(MapCentreCalculator.initialLongitude()).toEqual -42.66 describe "_calculate", -> it "calculates the average angle correctly when given a single angle", ->