diff --git a/app/assets/javascripts/admin/enterprises/services/enterprise.js.coffee b/app/assets/javascripts/admin/enterprises/services/enterprise.js.coffee
index b6e6a6147e..26061ef720 100644
--- a/app/assets/javascripts/admin/enterprises/services/enterprise.js.coffee
+++ b/app/assets/javascripts/admin/enterprises/services/enterprise.js.coffee
@@ -1,4 +1,5 @@
angular.module("admin.enterprises")
+ # Populate Enterprise.enterprise with enterprise json array from the page.
.factory 'Enterprise', (enterprise) ->
new class Enterprise
- enterprise: enterprise
\ No newline at end of file
+ enterprise: enterprise
diff --git a/app/assets/javascripts/darkswarm/controllers/hubs_controller.js.coffee b/app/assets/javascripts/darkswarm/controllers/enterprises_controller.js.coffee
similarity index 63%
rename from app/assets/javascripts/darkswarm/controllers/hubs_controller.js.coffee
rename to app/assets/javascripts/darkswarm/controllers/enterprises_controller.js.coffee
index b44d63eadf..1e43c17465 100644
--- a/app/assets/javascripts/darkswarm/controllers/hubs_controller.js.coffee
+++ b/app/assets/javascripts/darkswarm/controllers/enterprises_controller.js.coffee
@@ -1,13 +1,14 @@
-Darkswarm.controller "HubsCtrl", ($scope, Hubs, Search, $document, $rootScope, HashNavigation, FilterSelectorsService, MapModal) ->
- $scope.Hubs = Hubs
- $scope.hubs = Hubs.visible
+Darkswarm.controller "EnterprisesCtrl", ($scope, Enterprises, Search, $document, $rootScope, HashNavigation, FilterSelectorsService, EnterpriseModal) ->
+ $scope.Enterprises = Enterprises
$scope.totalActive = FilterSelectorsService.totalActive
$scope.clearAll = FilterSelectorsService.clearAll
$scope.filterText = FilterSelectorsService.filterText
$scope.FilterSelectorsService = FilterSelectorsService
$scope.query = Search.search()
+ $scope.openModal = EnterpriseModal.open
+ $scope.activeTaxons = []
$scope.show_profiles = false
- $scope.openModal = MapModal.open
+ $scope.filtersActive = false
$scope.$watch "query", (query)->
Search.search query
diff --git a/app/assets/javascripts/darkswarm/controllers/producers_controller.js.coffee b/app/assets/javascripts/darkswarm/controllers/producers_controller.js.coffee
deleted file mode 100644
index b16dcdfa77..0000000000
--- a/app/assets/javascripts/darkswarm/controllers/producers_controller.js.coffee
+++ /dev/null
@@ -1,14 +0,0 @@
-Darkswarm.controller "ProducersCtrl", ($scope, Producers, $filter, FilterSelectorsService, Search, MapModal) ->
- $scope.Producers = Producers
- $scope.totalActive = FilterSelectorsService.totalActive
- $scope.clearAll = FilterSelectorsService.clearAll
- $scope.filterText = FilterSelectorsService.filterText
- $scope.FilterSelectorsService = FilterSelectorsService
- $scope.filtersActive = false
- $scope.activeTaxons = []
- $scope.query = Search.search()
- $scope.show_profiles = false
- $scope.openModal = MapModal.open
-
- $scope.$watch "query", (query)->
- Search.search query
diff --git a/app/assets/javascripts/darkswarm/controllers/tabs/producers_controller.js.coffee b/app/assets/javascripts/darkswarm/controllers/tabs/producers_controller.js.coffee
index 6db73f7af3..7a5ebb78f3 100644
--- a/app/assets/javascripts/darkswarm/controllers/tabs/producers_controller.js.coffee
+++ b/app/assets/javascripts/darkswarm/controllers/tabs/producers_controller.js.coffee
@@ -1,3 +1,4 @@
-Darkswarm.controller "ProducersTabCtrl", ($scope, CurrentHub, Enterprises) ->
- # Injecting Enterprises so CurrentHub.producers is dereferenced
+Darkswarm.controller "ProducersTabCtrl", ($scope, CurrentHub, Enterprises, EnterpriseModal) ->
+ # Injecting Enterprises so CurrentHub.producers is dereferenced.
+ # We should probably dereference here instead and separate out CurrentHub dereferencing from the Enterprise factory.
$scope.CurrentHub = CurrentHub
diff --git a/app/assets/javascripts/darkswarm/controllers/tabs_controller.js.coffee b/app/assets/javascripts/darkswarm/controllers/tabs_controller.js.coffee
index eb501bcb4a..0bbe0bbd23 100644
--- a/app/assets/javascripts/darkswarm/controllers/tabs_controller.js.coffee
+++ b/app/assets/javascripts/darkswarm/controllers/tabs_controller.js.coffee
@@ -1,18 +1,11 @@
Darkswarm.controller "TabsCtrl", ($scope, $rootScope, $location, OrderCycle) ->
+ # Return active if supplied path matches url hash path.
$scope.active = (path)->
- if !OrderCycle.selected() and $location.hash() == "" and path == "about"
- true
- else
- $location.hash() == path
+ $location.hash() == path
-
- $scope.tabs = ["contact", "about", "groups", "producers"]
- for tab in $scope.tabs
- $scope[tab] =
- path: tab
-
- $scope.select = (tab)->
- if $scope.active(tab.path)
+ # Toggle tab selected status by setting the url hash path.
+ $scope.select = (path)->
+ if $scope.active(path)
$location.hash ""
else
- $location.hash tab.path
+ $location.hash path
diff --git a/app/assets/javascripts/darkswarm/directives/producer_modal.js.coffee b/app/assets/javascripts/darkswarm/directives/enterprise_modal.js.coffee
similarity index 71%
rename from app/assets/javascripts/darkswarm/directives/producer_modal.js.coffee
rename to app/assets/javascripts/darkswarm/directives/enterprise_modal.js.coffee
index af2b13f157..fa6378afe2 100644
--- a/app/assets/javascripts/darkswarm/directives/producer_modal.js.coffee
+++ b/app/assets/javascripts/darkswarm/directives/enterprise_modal.js.coffee
@@ -1,4 +1,4 @@
-Darkswarm.directive "producerModal", ($modal)->
+Darkswarm.directive "enterpriseModal", ($modal)->
restrict: 'E'
replace: true
template: ""
@@ -6,5 +6,4 @@ Darkswarm.directive "producerModal", ($modal)->
link: (scope, elem, attrs, ctrl)->
elem.on "click", (ev)=>
ev.stopPropagation()
- scope.modalInstance = $modal.open(controller: ctrl, templateUrl: 'producer_modal.html', scope: scope)
-
+ scope.modalInstance = $modal.open(controller: ctrl, templateUrl: 'enterprise_modal.html', scope: scope)
diff --git a/app/assets/javascripts/darkswarm/directives/hub_modal.js.coffee b/app/assets/javascripts/darkswarm/directives/hub_modal.js.coffee
deleted file mode 100644
index 6eb0299ab4..0000000000
--- a/app/assets/javascripts/darkswarm/directives/hub_modal.js.coffee
+++ /dev/null
@@ -1,8 +0,0 @@
-Darkswarm.directive "hubModal", ($modal)->
- restrict: 'E'
- replace: true
- template: "{{enterprise.name}}"
- link: (scope, elem, attrs, ctrl)->
- elem.on "click", (ev)=>
- ev.stopPropagation()
- scope.modalInstance = $modal.open(controller: ctrl, templateUrl: 'hub_modal.html', scope: scope)
diff --git a/app/assets/javascripts/darkswarm/filters/capitalize.js.coffee b/app/assets/javascripts/darkswarm/filters/capitalize.js.coffee
index acbd3fd637..5c2272135b 100644
--- a/app/assets/javascripts/darkswarm/filters/capitalize.js.coffee
+++ b/app/assets/javascripts/darkswarm/filters/capitalize.js.coffee
@@ -1,4 +1,5 @@
Darkswarm.filter "capitalize", ->
+ # Convert to basic sentence case.
(input, scope) ->
- input = input.toLowerCase() if input?
+ input = input.toLowerCase() if input?
input.substring(0, 1).toUpperCase() + input.substring(1)
diff --git a/app/assets/javascripts/darkswarm/filters/filter_hubs.js.coffee b/app/assets/javascripts/darkswarm/filters/filter_hubs.js.coffee
deleted file mode 100644
index b6adb84508..0000000000
--- a/app/assets/javascripts/darkswarm/filters/filter_hubs.js.coffee
+++ /dev/null
@@ -1,9 +0,0 @@
-Darkswarm.filter 'hubs', (Matcher)->
- (hubs, text) ->
- hubs ||= []
- text ?= ""
-
- hubs.filter (hub)=>
- Matcher.match [
- hub.name, hub.address.zipcode, hub.address.city, hub.address.state
- ], text
diff --git a/app/assets/javascripts/darkswarm/filters/filter_producers.js.coffee b/app/assets/javascripts/darkswarm/filters/filter_producers.js.coffee
deleted file mode 100644
index ed5b8c1bea..0000000000
--- a/app/assets/javascripts/darkswarm/filters/filter_producers.js.coffee
+++ /dev/null
@@ -1,6 +0,0 @@
-Darkswarm.filter 'filterProducers', (hubsFilter)->
- (producers, text) ->
- producers ||= []
- text ?= ""
- hubsFilter(producers, text)
-
diff --git a/app/assets/javascripts/darkswarm/filters/localize_currency.js.coffee b/app/assets/javascripts/darkswarm/filters/localize_currency.js.coffee
index ffa98c5a33..7087e09fc3 100644
--- a/app/assets/javascripts/darkswarm/filters/localize_currency.js.coffee
+++ b/app/assets/javascripts/darkswarm/filters/localize_currency.js.coffee
@@ -1,15 +1,14 @@
-# Convert number to string currency using injected currency configuration.
-#
-# @requires currencyConfig json - /app/serializers/api/currency_config_serializer.rb
-# @return: string
Darkswarm.filter "localizeCurrency", (currencyConfig)->
+ # Convert number to string currency using injected currency configuration.
(amount) ->
+ # Set country code (eg. "US").
currency_code = if currencyConfig.display_currency then " " + currencyConfig.currency else ""
+ # Set decimal points, 2 or 0 if hide_cents.
decimals = if currencyConfig.hide_cents == "true" then 0 else 2
- # We need to use parseFloat before toFixed as the amount should be a passed in as a string.
+ # We need to use parseFloat before toFixed as the amount should come in as a string.
amount_fixed = parseFloat(amount).toFixed(decimals)
- # Build the final price string.
+ # Build the final price string. TODO use spree decimal point and spacer character settings.
if currencyConfig.symbol_position == 'before'
currencyConfig.symbol + amount_fixed + currency_code
else
diff --git a/app/assets/javascripts/darkswarm/filters/search_enterprises.js.coffee b/app/assets/javascripts/darkswarm/filters/search_enterprises.js.coffee
new file mode 100644
index 0000000000..2c42fe93d3
--- /dev/null
+++ b/app/assets/javascripts/darkswarm/filters/search_enterprises.js.coffee
@@ -0,0 +1,10 @@
+Darkswarm.filter 'searchEnterprises', (Matcher)->
+ # Search multiple fields of enterprises for matching text fragment.
+ (enterprises, text) ->
+ enterprises ||= []
+ text ?= ""
+
+ enterprises.filter (enterprise)=>
+ Matcher.match [
+ enterprise.name, enterprise.address.zipcode, enterprise.address.city, enterprise.address.state
+ ], text
diff --git a/app/assets/javascripts/darkswarm/filters/show_hub_profiles.js.coffee b/app/assets/javascripts/darkswarm/filters/show_hub_profiles.js.coffee
new file mode 100644
index 0000000000..b97a0c35e4
--- /dev/null
+++ b/app/assets/javascripts/darkswarm/filters/show_hub_profiles.js.coffee
@@ -0,0 +1,8 @@
+Darkswarm.filter 'showHubProfiles', ()->
+ # Filter hub_profile enterprises in or out.
+ (enterprises, show_profiles) ->
+ enterprises ||= []
+ show_profiles ?= false
+
+ enterprises.filter (enterprise)=>
+ show_profiles or enterprise.is_distributor
diff --git a/app/assets/javascripts/darkswarm/filters/show_profiles.js.coffee b/app/assets/javascripts/darkswarm/filters/show_profiles.js.coffee
deleted file mode 100644
index e3fce7d2f6..0000000000
--- a/app/assets/javascripts/darkswarm/filters/show_profiles.js.coffee
+++ /dev/null
@@ -1,7 +0,0 @@
-Darkswarm.filter 'showProfiles', ()->
- (enterprises, show_profiles) ->
- enterprises ||= []
- show_profiles ?= true
-
- enterprises.filter (enterprise)=>
- show_profiles or enterprise.has_shopfront
diff --git a/app/assets/javascripts/darkswarm/filters/taxons.js.coffee b/app/assets/javascripts/darkswarm/filters/taxons.js.coffee
index 3eb32ce1a4..a7ccc9b0cc 100644
--- a/app/assets/javascripts/darkswarm/filters/taxons.js.coffee
+++ b/app/assets/javascripts/darkswarm/filters/taxons.js.coffee
@@ -1,13 +1,16 @@
-Darkswarm.filter 'taxons', (Matcher)->
- # Filter anything that responds to object.taxons, and/or object.primary_taxon
+Darkswarm.filter 'taxons', ()->
+ # Filter anything that responds to object.taxons, object.supplied_taxon or object.primary_taxon.
(objects, ids) ->
objects ||= []
ids ?= []
if ids.length == 0
+ # No taxons selected, pass all objects through.
objects
else
objects.filter (obj)->
taxons = obj.taxons
- taxons.concat obj.supplied_taxons if obj.supplied_taxons
+ # Combine object taxons with supplied taxons, if they exist.
+ taxons = taxons.concat obj.supplied_taxons if obj.supplied_taxons
+ # Match primary taxon if it exists, then taxon array.
obj.primary_taxon?.id in ids || taxons.some (taxon)->
taxon.id in ids
diff --git a/app/assets/javascripts/darkswarm/services/current_hub.js.coffee b/app/assets/javascripts/darkswarm/services/current_hub.js.coffee
index 5e6a385b8a..ade8d75d18 100644
--- a/app/assets/javascripts/darkswarm/services/current_hub.js.coffee
+++ b/app/assets/javascripts/darkswarm/services/current_hub.js.coffee
@@ -1,3 +1,4 @@
-Darkswarm.factory 'CurrentHub', ($location, $filter, currentHub) ->
+Darkswarm.factory 'CurrentHub', (currentHub) ->
+ # Populate CurrentHub.hub from json in page. This is probably redundant now.
new class CurrentHub
hub: currentHub
diff --git a/app/assets/javascripts/darkswarm/services/current_order.js.coffee b/app/assets/javascripts/darkswarm/services/current_order.js.coffee
index cd2402f0c0..6570ddcd06 100644
--- a/app/assets/javascripts/darkswarm/services/current_order.js.coffee
+++ b/app/assets/javascripts/darkswarm/services/current_order.js.coffee
@@ -1,3 +1,4 @@
Darkswarm.factory 'CurrentOrder', (currentOrder) ->
+ # Populate Currentorder.order from json in page. This is probably redundant now.
new class CurrentOrder
order: currentOrder
diff --git a/app/assets/javascripts/darkswarm/services/enterprise_modal.js.coffee b/app/assets/javascripts/darkswarm/services/enterprise_modal.js.coffee
new file mode 100644
index 0000000000..a0fb3ce5c5
--- /dev/null
+++ b/app/assets/javascripts/darkswarm/services/enterprise_modal.js.coffee
@@ -0,0 +1,8 @@
+Darkswarm.factory "EnterpriseModal", ($modal, $rootScope)->
+ # Build a modal popup for an enterprise.
+ new class EnterpriseModal
+ open: (enterprise)->
+ scope = $rootScope.$new(true) # Spawn an isolate to contain the enterprise
+
+ scope.enterprise = enterprise
+ $modal.open(templateUrl: "enterprise_modal.html", scope: scope)
diff --git a/app/assets/javascripts/darkswarm/services/enterprises.js.coffee b/app/assets/javascripts/darkswarm/services/enterprises.js.coffee
index 50143e006b..6040f1d150 100644
--- a/app/assets/javascripts/darkswarm/services/enterprises.js.coffee
+++ b/app/assets/javascripts/darkswarm/services/enterprises.js.coffee
@@ -1,13 +1,21 @@
-Darkswarm.factory 'Enterprises', (enterprises, CurrentHub, Taxons, Dereferencer)->
+Darkswarm.factory 'Enterprises', (enterprises, CurrentHub, Taxons, Dereferencer, visibleFilter)->
new class Enterprises
- enterprises_by_id: {} # id/object pairs for lookup
+ enterprises_by_id: {}
constructor: ->
+ # Populate Enterprises.enterprises from json in page.
@enterprises = enterprises
+ # Map enterprises to id/object pairs for lookup.
for enterprise in enterprises
@enterprises_by_id[enterprise.id] = enterprise
+ # Replace enterprise and taxons ids with actual objects.
@dereferenceEnterprises()
@dereferenceTaxons()
-
+ @visible_enterprises = visibleFilter @enterprises
+ @producers = @visible_enterprises.filter (enterprise)->
+ enterprise.category in ["producer_hub", "producer_shop", "producer"]
+ @hubs = @visible_enterprises.filter (enterprise)->
+ enterprise.category in ["hub", "hub_profile", "producer_hub", "producer_shop"]
+
dereferenceEnterprises: ->
if CurrentHub.hub?.id
CurrentHub.hub = @enterprises_by_id[CurrentHub.hub.id]
@@ -16,6 +24,7 @@ Darkswarm.factory 'Enterprises', (enterprises, CurrentHub, Taxons, Dereferencer)
Dereferencer.dereference enterprise.producers, @enterprises_by_id
dereferenceTaxons: ->
- for enterprise in @enterprises
+ for enterprise in @enterprises
Dereferencer.dereference enterprise.taxons, Taxons.taxons_by_id
Dereferencer.dereference enterprise.supplied_taxons, Taxons.taxons_by_id
+
diff --git a/app/assets/javascripts/darkswarm/services/hubs.js.coffee b/app/assets/javascripts/darkswarm/services/hubs.js.coffee
deleted file mode 100644
index ba3d9f3c24..0000000000
--- a/app/assets/javascripts/darkswarm/services/hubs.js.coffee
+++ /dev/null
@@ -1,9 +0,0 @@
-Darkswarm.factory 'Hubs', ($filter, Enterprises, visibleFilter) ->
- new class Hubs
- constructor: ->
- @hubs = @order Enterprises.enterprises.filter (hub)->
- hub.has_hub_listing
- @visible = visibleFilter @hubs
-
- order: (hubs)->
- $filter('orderBy')(hubs, ['-active', '+orders_close_at'])
diff --git a/app/assets/javascripts/darkswarm/services/map.js.coffee b/app/assets/javascripts/darkswarm/services/map.js.coffee
index 43750acdb2..703c3c54bf 100644
--- a/app/assets/javascripts/darkswarm/services/map.js.coffee
+++ b/app/assets/javascripts/darkswarm/services/map.js.coffee
@@ -1,7 +1,7 @@
-Darkswarm.factory "OfnMap", (Enterprises, MapModal, visibleFilter)->
+Darkswarm.factory "OfnMap", (Enterprises, EnterpriseModal, visibleFilter)->
new class OfnMap
constructor: ->
- @enterprises = (@extend(enterprise) for enterprise in visibleFilter(Enterprises.enterprises))
+ @enterprises = (@extend(enterprise) for enterprise in visibleFilter(Enterprises.enterprises))
# Adding methods to each enterprise
@@ -14,4 +14,4 @@ Darkswarm.factory "OfnMap", (Enterprises, MapModal, visibleFilter)->
icon: enterprise.icon
id: enterprise.id
reveal: =>
- MapModal.open enterprise
+ EnterpriseModal.open enterprise
diff --git a/app/assets/javascripts/darkswarm/services/map_modal.js.coffee b/app/assets/javascripts/darkswarm/services/map_modal.js.coffee
deleted file mode 100644
index c9ed30f558..0000000000
--- a/app/assets/javascripts/darkswarm/services/map_modal.js.coffee
+++ /dev/null
@@ -1,12 +0,0 @@
-Darkswarm.factory "MapModal", ($modal, $rootScope)->
- new class MapModal
- open: (enterprise)->
- scope = $rootScope.$new(true) # Spawn an isolate to contain the enterprise
-
- scope.enterprise = enterprise
- if enterprise.is_distributor
- scope.hub = enterprise
- $modal.open(templateUrl: "hub_modal.html", scope: scope)
- else
- scope.producer = enterprise
- $modal.open(templateUrl: "map_modal_producer.html", scope: scope)
diff --git a/app/assets/javascripts/darkswarm/services/matcher.js.coffee b/app/assets/javascripts/darkswarm/services/matcher.js.coffee
index aadd6a4128..9360afdd1f 100644
--- a/app/assets/javascripts/darkswarm/services/matcher.js.coffee
+++ b/app/assets/javascripts/darkswarm/services/matcher.js.coffee
@@ -1,6 +1,7 @@
Darkswarm.factory "Matcher", ->
- new class Matcher
- match: (properties, text)->
- properties.some (prop)->
- prop ||= ""
- prop.toLowerCase().indexOf(text.toLowerCase()) != -1
+ # Match text fragment in an array of strings.
+ new class Matcher
+ match: (properties, text)->
+ properties.some (prop)->
+ prop ||= ""
+ prop.toLowerCase().indexOf(text.toLowerCase()) != -1
diff --git a/app/assets/javascripts/darkswarm/services/producers.js.coffee b/app/assets/javascripts/darkswarm/services/producers.js.coffee
deleted file mode 100644
index 65d8e42c5d..0000000000
--- a/app/assets/javascripts/darkswarm/services/producers.js.coffee
+++ /dev/null
@@ -1,7 +0,0 @@
-Darkswarm.factory 'Producers', (Enterprises, visibleFilter) ->
- new class Producers
- constructor: ->
- @producers = Enterprises.enterprises.filter (enterprise)->
- enterprise.is_primary_producer
- @visible = visibleFilter @producers
-
diff --git a/app/assets/javascripts/darkswarm/services/taxons.js.coffee b/app/assets/javascripts/darkswarm/services/taxons.js.coffee
index cbe6c118e0..984eb0df22 100644
--- a/app/assets/javascripts/darkswarm/services/taxons.js.coffee
+++ b/app/assets/javascripts/darkswarm/services/taxons.js.coffee
@@ -1,8 +1,10 @@
Darkswarm.factory "Taxons", (taxons)->
new class Taxons
- taxons: taxons
+ # Populate Taxons.taxons from json in page.
+ taxons: taxons
taxons_by_id: {}
constructor: ->
+ # Map taxons to id/object pairs for lookup.
for taxon in @taxons
@taxons_by_id[taxon.id] = taxon
diff --git a/app/assets/javascripts/darkswarm/services/variants.js.coffee b/app/assets/javascripts/darkswarm/services/variants.js.coffee
index bc2050e4d4..6562bd9e0b 100644
--- a/app/assets/javascripts/darkswarm/services/variants.js.coffee
+++ b/app/assets/javascripts/darkswarm/services/variants.js.coffee
@@ -5,6 +5,7 @@ Darkswarm.factory 'Variants', ->
@variants[variant.id] ||= @extend variant
extend: (variant)->
+ # Add totalPrice method to calculate line item total. This should be on a line item!
variant.totalPrice = ->
variant.price_with_fees * variant.line_item.quantity
variant.basePricePercentage = Math.round(variant.price / variant.price_with_fees * 100)
diff --git a/app/assets/javascripts/search/all.js b/app/assets/javascripts/search/all.js
deleted file mode 100644
index c684eed4b1..0000000000
--- a/app/assets/javascripts/search/all.js
+++ /dev/null
@@ -1,18 +0,0 @@
-// This is a manifest file that'll be compiled into including all the files listed below.
-// Add new JavaScript/Coffee code in separate files in this directory and they'll automatically
-// be included in the compiled file accessible from http://example.com/assets/application.js
-// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
-// the compiled file.
-//
-
-//= require jquery
-//= require jquery_ujs
-//= require jquery-ui
-//= require spin
-//= require foundation
-//= require_tree .
-//
-
-// Hacky fix for issue - http://foundation.zurb.com/forum/posts/2112-foundation-5100-syntax-error-in-js
-Foundation.set_namespace = function() {};
-$(function(){ $(document).foundation(); });
diff --git a/app/assets/javascripts/search/gmaps4rails/gmaps4rails.base.js.coffee b/app/assets/javascripts/search/gmaps4rails/gmaps4rails.base.js.coffee
deleted file mode 100644
index 684215a438..0000000000
--- a/app/assets/javascripts/search/gmaps4rails/gmaps4rails.base.js.coffee
+++ /dev/null
@@ -1,444 +0,0 @@
-Gmaps = {}
-
-Gmaps.triggerOldOnload = ->
- Gmaps.oldOnload() if typeof(Gmaps.oldOnload) == 'function'
-
-Gmaps.loadMaps = ->
- #loop through all variable names.
- #there should only be maps inside so it trigger their load function
- for key, value of Gmaps
- searchLoadIncluded = key.search(/load/)
- if searchLoadIncluded == -1
- load_function_name = "load_" + key
- Gmaps[load_function_name]()
-
-window.Gmaps = Gmaps
-
-class @Gmaps4Rails
-
- constructor: ->
- #map config
- @map = null #DEPRECATED: will still contain a copy of serviceObject below as transition
- @serviceObject = null #contains the map we're working on
- @visibleInfoWindow = null #contains the current opened infowindow
- @userLocation = null #contains user's location if geolocalization was performed and successful
-
- #empty slots
- @geolocationSuccess = -> false #triggered when geolocation succeeds. Can be customized.
- @geolocationFailure = -> false #triggered when geolocation fails. If customized, must be like= function(navigator_handles_geolocation){} where 'navigator_handles_geolocation' is a boolean
- @callback = -> false #to let user set a custom callback function
- @customClusterer = -> false #to let user set custom clusterer pictures
- @infobox = -> false #to let user use custom infoboxes
- @jsTemplate = false #to let user create infowindows client side
-
- @default_map_options =
- id: 'map'
- draggable: true
- detect_location: false # should the browser attempt to use geolocation detection features of HTML5?
- center_on_user: false # centers map on the location detected through the browser
- center_latitude: 0
- center_longitude: 0
- zoom: 7
- maxZoom: null
- minZoom: null
- auto_adjust : true # adjust the map to the markers if set to true
- auto_zoom: true # zoom given by auto-adjust
- bounds: [] # adjust map to these limits. Should be [{"lat": , "lng": }]
- raw: {} # raw json to pass additional options
-
- @default_markers_conf =
- #Marker config
- title: ""
- #MarkerImage config
- picture : ""
- width: 22
- length: 32
- draggable: false # how to modify: <%= gmaps( "markers" => { "data" => @object.to_gmaps4rails, "options" => { "draggable" => true }}) %>
- #clustering config
- do_clustering: false # do clustering if set to true
- randomize: false # Google maps can't display two markers which have the same coordinates. This randomizer enables to prevent this situation from happening.
- max_random_distance: 100 # in meters. Each marker coordinate could be altered by this distance in a random direction
- list_container: null # id of the ul that will host links to all markers
- offset: 0 # used when adding_markers to an existing map. Because new markers are concated with previous one, offset is here to prevent the existing from being re-created.
- raw: {} # raw json to pass additional options
-
- #Stored variables
- @markers = [] # contains all markers. A marker contains the following: {"description": , "longitude": , "title":, "latitude":, "picture": "", "width": "", "length": "", "sidebar": "", "serviceObject": google_marker}
- @boundsObject = null # contains current bounds from markers, polylines etc...
- @polygons = [] # contains raw data, array of arrays (first element could be a hash containing options)
- @polylines = [] # contains raw data, array of arrays (first element could be a hash containing options)
- @circles = [] # contains raw data, array of hash
- @markerClusterer = null # contains all marker clusterers
- @markerImages = []
-
- #Polyline Styling
- @polylines_conf = #default style for polylines
- strokeColor: "#FF0000"
- strokeOpacity: 1
- strokeWeight: 2
- clickable: false
- zIndex: null
-
- #tnitializes the map
- initialize : ->
- @serviceObject = @createMap()
- @map = @serviceObject #beware, soon deprecated
- if (@map_options.detect_location == true or @map_options.center_on_user == true)
- @findUserLocation(this)
- #resets sidebar if needed
- @resetSidebarContent()
-
- findUserLocation : (map_object) ->
- if (navigator.geolocation)
- #try to retrieve user's position
- positionSuccessful = (position) ->
- map_object.userLocation = map_object.createLatLng(position.coords.latitude, position.coords.longitude)
- #change map's center to focus on user's geoloc if asked
- if(map_object.map_options.center_on_user == true)
- map_object.centerMapOnUser()
- map_object.geolocationSuccess()
- positionFailure = ->
- map_object.geolocationFailure(true)
-
- navigator.geolocation.getCurrentPosition( positionSuccessful, positionFailure)
- else
- #failure but the navigator doesn't handle geolocation
- map_object.geolocationFailure(false)
-
-
- #////////////////////////////////////////////////////
- #//////////////////// DIRECTIONS ////////////////////
- #////////////////////////////////////////////////////
-
- create_direction : ->
- directionsDisplay = new google.maps.DirectionsRenderer()
- directionsService = new google.maps.DirectionsService()
-
- directionsDisplay.setMap(@serviceObject)
- #display panel only if required
- if @direction_conf.display_panel
- directionsDisplay.setPanel(document.getElementById(@direction_conf.panel_id))
-
- directionsDisplay.setOptions
- suppressMarkers: false
- suppressInfoWindows: false
- suppressPolylines: false
-
- request =
- origin: @direction_conf.origin
- destination: @direction_conf.destination
- waypoints: @direction_conf.waypoints
- optimizeWaypoints: @direction_conf.optimizeWaypoints
- unitSystem: google.maps.DirectionsUnitSystem[@direction_conf.unitSystem]
- avoidHighways: @direction_conf.avoidHighways
- avoidTolls: @direction_conf.avoidTolls
- region: @direction_conf.region
- travelMode: google.maps.DirectionsTravelMode[@direction_conf.travelMode]
- language: "en"
-
- directionsService.route request, (response, status) ->
- if (status == google.maps.DirectionsStatus.OK)
- directionsDisplay.setDirections(response)
-
- #////////////////////////////////////////////////////
- #///////////////////// CIRCLES //////////////////////
- #////////////////////////////////////////////////////
-
- #Loops through all circles
- #Loops through all circles and draws them
- create_circles : ->
- for circle in @circles
- @create_circle circle
-
- create_circle : (circle) ->
- #by convention, default style configuration could be integrated in the first element
- if circle == @circles[0]
- @circles_conf.strokeColor = circle.strokeColor if circle.strokeColor?
- @circles_conf.strokeOpacity = circle.strokeOpacity if circle.strokeOpacity?
- @circles_conf.strokeWeight = circle.strokeWeight if circle.strokeWeight?
- @circles_conf.fillColor = circle.fillColor if circle.fillColor?
- @circles_conf.fillOpacity = circle.fillOpacity if circle.fillOpacity?
-
- if circle.lat? and circle.lng?
- # always check if a config is given, if not, use defaults
- # NOTE: is there a cleaner way to do this? Maybe a hash merge of some sort?
- newCircle = new google.maps.Circle
- center: @createLatLng(circle.lat, circle.lng)
- strokeColor: circle.strokeColor || @circles_conf.strokeColor
- strokeOpacity: circle.strokeOpacity || @circles_conf.strokeOpacity
- strokeWeight: circle.strokeWeight || @circles_conf.strokeWeight
- fillOpacity: circle.fillOpacity || @circles_conf.fillOpacity
- fillColor: circle.fillColor || @circles_conf.fillColor
- clickable: circle.clickable || @circles_conf.clickable
- zIndex: circle.zIndex || @circles_conf.zIndex
- radius: circle.radius
-
- circle.serviceObject = newCircle
- newCircle.setMap(@serviceObject)
-
- # clear circles
- clear_circles : ->
- for circle in @circles
- @clear_circle circle
-
- clear_circle : (circle) ->
- circle.serviceObject.setMap(null)
-
- hide_circles : ->
- for circle in @circles
- @hide_circle circle
-
- hide_circle : (circle) ->
- circle.serviceObject.setMap(null)
-
- show_circles : ->
- for circle in @circles
- @show_circle @circle
-
- show_circle : (circle) ->
- circle.serviceObject.setMap(@serviceObject)
-
- #////////////////////////////////////////////////////
- #///////////////////// POLYGONS /////////////////////
- #////////////////////////////////////////////////////
-
- #polygons is an array of arrays. It loops.
- create_polygons : ->
- for polygon in @polygons
- @create_polygon(polygon)
-
- #creates a single polygon, triggered by create_polygons
- create_polygon : (polygon) ->
- polygon_coordinates = []
-
- #Polygon points are in an Array, that's why looping is necessary
- for point in polygon
- latlng = @createLatLng(point.lat, point.lng)
- polygon_coordinates.push(latlng)
- #first element of an Array could contain specific configuration for this particular polygon. If no config given, use default
- if point == polygon[0]
- strokeColor = point.strokeColor || @polygons_conf.strokeColor
- strokeOpacity = point.strokeOpacity || @polygons_conf.strokeOpacity
- strokeWeight = point.strokeWeight || @polygons_conf.strokeWeight
- fillColor = point.fillColor || @polygons_conf.fillColor
- fillOpacity = point.fillOpacity || @polygons_conf.fillOpacity
- clickable = point.clickable || @polygons_conf.clickable
-
- #Construct the polygon
- new_poly = new google.maps.Polygon
- paths: polygon_coordinates
- strokeColor: strokeColor
- strokeOpacity: strokeOpacity
- strokeWeight: strokeWeight
- fillColor: fillColor
- fillOpacity: fillOpacity
- clickable: clickable
- map: @serviceObject
-
- #save polygon in list
- polygon.serviceObject = new_poly
-
-
-
- #////////////////////////////////////////////////////
- #///////////////////// MARKERS //////////////////////
- #////////////////////////////////////////////////////
-
- #creates, clusterizes and adjusts map
- create_markers : ->
- @createServiceMarkersFromMarkers()
- @clusterize()
-
- #create google.maps Markers from data provided by user
- createServiceMarkersFromMarkers : ->
- for marker, index in @markers
- if not @markers[index].serviceObject?
- #extract options, test if value passed or use default
- Lat = @markers[index].lat
- Lng = @markers[index].lng
-
- #alter coordinates if randomize is true
- if @markers_conf.randomize
- LatLng = @randomize(Lat, Lng)
- #retrieve coordinates from the array
- Lat = LatLng[0]
- Lng = LatLng[1]
-
- #save object
- @markers[index].serviceObject = @createMarker
- "marker_picture": if @markers[index].picture then @markers[index].picture else @markers_conf.picture
- "marker_width": if @markers[index].width then @markers[index].width else @markers_conf.width
- "marker_height": if @markers[index].height then @markers[index].height else @markers_conf.length
- "marker_title": if @markers[index].title then @markers[index].title else null
- "marker_anchor": if @markers[index].marker_anchor then @markers[index].marker_anchor else null
- "shadow_anchor": if @markers[index].shadow_anchor then @markers[index].shadow_anchor else null
- "shadow_picture": if @markers[index].shadow_picture then @markers[index].shadow_picture else null
- "shadow_width": if @markers[index].shadow_width then @markers[index].shadow_width else null
- "shadow_height": if @markers[index].shadow_height then @markers[index].shadow_height else null
- "marker_draggable": if @markers[index].draggable then @markers[index].draggable else @markers_conf.draggable
- "rich_marker": if @markers[index].rich_marker then @markers[index].rich_marker else null
- "zindex": if @markers[index].zindex then @markers[index].zindex else null
- "Lat": Lat
- "Lng": Lng
- "index": index
-
- #add infowindowstuff if enabled
- @createInfoWindow(@markers[index])
- #create sidebar if enabled
- @createSidebar(@markers[index])
-
- @markers_conf.offset = @markers.length
-
- #creates Image Anchor Position or return null if nothing passed
- createImageAnchorPosition : (anchorLocation) ->
- if (anchorLocation == null)
- return null
- else
- return @createPoint(anchorLocation[0], anchorLocation[1])
-
-
- #replace old markers with new markers on an existing map
- replaceMarkers : (new_markers, adjustBounds = true) ->
- @clearMarkers()
- #reset previous markers
- @markers = new Array
- #reset current bounds
- @boundsObject = @createLatLngBounds() if adjustBounds
- #reset sidebar content if exists
- @resetSidebarContent()
- #add new markers
- @markers_conf.offset = 0
- @addMarkers(new_markers, adjustBounds)
-
- #add new markers to on an existing map
- addMarkers : (new_markers, adjustBounds = true) ->
- #update the list of markers to take into account
- @markers = @markers.concat(new_markers)
- #put markers on the map
- @create_markers()
- @adjustMapToBounds() if adjustBounds
-
- #////////////////////////////////////////////////////
- #///////////////////// SIDEBAR //////////////////////
- #////////////////////////////////////////////////////
-
- #//creates sidebar
- createSidebar : (marker_container) ->
- if (@markers_conf.list_container)
- ul = document.getElementById(@markers_conf.list_container)
- li = document.createElement('li')
- aSel = document.createElement('a')
- aSel.href = 'javascript:void(0);'
- html = if marker_container.sidebar? then marker_container.sidebar else "Marker"
- aSel.innerHTML = html
- currentMap = this
- aSel.onclick = @sidebar_element_handler(currentMap, marker_container.serviceObject, 'click')
- li.appendChild(aSel)
- ul.appendChild(li)
-
- #moves map to marker clicked + open infowindow
- sidebar_element_handler : (currentMap, marker, eventType) ->
- return () ->
- currentMap.map.panTo(marker.position)
- google.maps.event.trigger(marker, eventType)
-
-
- resetSidebarContent : ->
- if @markers_conf.list_container isnt null
- ul = document.getElementById(@markers_conf.list_container)
- ul.innerHTML = ""
-
- #////////////////////////////////////////////////////
- #////////////////// MISCELLANEOUS ///////////////////
- #////////////////////////////////////////////////////
-
- #to make the map fit the different LatLng points
- adjustMapToBounds : ->
- #FIRST_STEP: retrieve all bounds
- #create the bounds object only if necessary
- if @map_options.auto_adjust or @map_options.bounds isnt null
- @boundsObject = @createLatLngBounds()
-
- #if autodjust is true, must get bounds from markers polylines etc...
- if @map_options.auto_adjust
- #from markers
- @extendBoundsWithMarkers()
-
- #from polylines:
- @updateBoundsWithPolylines()
-
- #from polygons:
- @updateBoundsWithPolygons()
-
- #from circles
- @updateBoundsWithCircles()
-
- #in every case, I've to take into account the bounds set up by the user
- @extendMapBounds()
-
- #SECOND_STEP: ajust the map to the bounds
- @adaptMapToBounds()
-
- #////////////////////////////////////////////////////
- #/////////////////// POLYLINES //////////////////////
- #////////////////////////////////////////////////////
-
- #replace old markers with new markers on an existing map
- replacePolylines : (new_polylines) ->
- #reset previous polylines and kill them from map
- @destroy_polylines()
- #set new polylines
- @polylines = new_polylines
- #create
- @create_polylines()
- #.... and adjust map boundaries
- @adjustMapToBounds()
-
- destroy_polylines : ->
- for polyline in @polylines
- #delete polylines from map
- polyline.serviceObject.setMap(null)
- #empty array
- @polylines = []
-
- #polylines is an array of arrays. It loops.
- create_polylines : ->
- for polyline in @polylines
- @create_polyline polyline
-
- #////////////////////////////////////////////////////
- #///////////////// Basic functions //////////////////
- #///////////////////tests coded//////////////////////
-
- #//basic function to check existence of a variable
- exists : (var_name) ->
- return (var_name != "" and typeof var_name != "undefined")
-
-
- #randomize
- randomize : (Lat0, Lng0) ->
- #distance in meters between 0 and max_random_distance (positive or negative)
- dx = @markers_conf.max_random_distance * @random()
- dy = @markers_conf.max_random_distance * @random()
- Lat = parseFloat(Lat0) + (180/Math.PI)*(dy/6378137)
- Lng = parseFloat(Lng0) + ( 90/Math.PI)*(dx/6378137)/Math.cos(Lat0)
- return [Lat, Lng]
-
- mergeObjectWithDefault : (object1, object2) ->
- copy_object1 = {}
- for key, value of object1
- copy_object1[key] = value
-
- for key, value of object2
- unless copy_object1[key]?
- copy_object1[key] = value
- return copy_object1
-
- mergeWithDefault : (objectName) ->
- default_object = @["default_" + objectName]
- object = @[objectName]
- @[objectName] = @mergeObjectWithDefault(object, default_object)
- return true
-
- #gives a value between -1 and 1
- random : -> return(Math.random() * 2 -1)
diff --git a/app/assets/javascripts/search/gmaps4rails/gmaps4rails.bing.js.coffee b/app/assets/javascripts/search/gmaps4rails/gmaps4rails.bing.js.coffee
deleted file mode 100644
index 9eb53a6b76..0000000000
--- a/app/assets/javascripts/search/gmaps4rails/gmaps4rails.bing.js.coffee
+++ /dev/null
@@ -1,174 +0,0 @@
-######################################################################################################
-############################################## Bing Maps ##########################################
-######################################################################################################
-
-#// http://wiki.openstreetmap.org/wiki/OpenLayers
-#// http://openlayers.org/dev/examples
-#//http://docs.openlayers.org/contents.html
-
-class @Gmaps4RailsBing extends Gmaps4Rails
-
- constructor: ->
- super
- @map_options =
- type: "road" # aerial, auto, birdseye, collinsBart, mercator, ordnanceSurvey, road
- @markers_conf =
- infobox: "description" #description or htmlContent
-
- @mergeWithDefault("map_options")
- @mergeWithDefault("markers_conf")
-
- #////////////////////////////////////////////////////
- #/////////////// Basic Objects //////////////
- #////////////////////////////////////////////////////
-
- getMapType: ->
- switch @map_options.type
- when "road" then return Microsoft.Maps.MapTypeId.road
- when "aerial" then return Microsoft.Maps.MapTypeId.aerial
- when "auto" then return Microsoft.Maps.MapTypeId.auto
- when "birdseye" then return Microsoft.Maps.MapTypeId.birdseye
- when "collinsBart" then return Microsoft.Maps.MapTypeId.collinsBart
- when "mercator" then return Microsoft.Maps.MapTypeId.mercator
- when "ordnanceSurvey" then return Microsoft.Maps.MapTypeId.ordnanceSurvey
- else return Microsoft.Maps.MapTypeId.auto
-
- createPoint: (lat, lng) ->
- return new Microsoft.Maps.Point(lat, lng)
-
- createLatLng:(lat, lng) ->
- return new Microsoft.Maps.Location(lat, lng)
-
- createLatLngBounds: ->
-
- createMap: ->
- return new Microsoft.Maps.Map(document.getElementById(@map_options.id), {
- credentials: @map_options.provider_key,
- mapTypeId: @getMapType(),
- center: @createLatLng(@map_options.center_latitude, @map_options.center_longitude),
- zoom: @map_options.zoom
- })
-
- createSize: (width, height) ->
- return new google.maps.Size(width, height)
-
- #////////////////////////////////////////////////////
- #////////////////////// Markers /////////////////////
- #////////////////////////////////////////////////////
-
- createMarker: (args) ->
- markerLatLng = @createLatLng(args.Lat, args.Lng)
- marker
- #// Marker sizes are expressed as a Size of X,Y
- if args.marker_picture == ""
- marker = new Microsoft.Maps.Pushpin(@createLatLng(args.Lat, args.Lng), {
- draggable: args.marker_draggable,
- anchor: @createImageAnchorPosition(args.Lat, args.Lng),
- text: args.marker_title
- }
- );
- else
- marker = new Microsoft.Maps.Pushpin(@createLatLng(args.Lat, args.Lng), {
- draggable: args.marker_draggable,
- anchor: @createImageAnchorPosition(args.Lat, args.Lng),
- icon: args.marker_picture,
- height: args.marker_height,
- text: args.marker_title,
- width: args.marker_width
- }
- );
- @addToMap(marker)
- return marker
-
- #// clear markers
- clearMarkers: ->
- for marker in @markers
- @clearMarker marker
-
- clearMarker: (marker) ->
- @removeFromMap(marker.serviceObject)
-
- #//show and hide markers
- showMarkers: ->
- for marker in @markers
- @showMarker marker
-
- showMarker: (marker) ->
- marker.serviceObject.setOptions({ visible: true })
-
- hideMarkers: ->
- for marker in @markers
- @hideMarker marker
-
- hideMarker: (marker) ->
- marker.serviceObject.setOptions({ visible: false })
-
- extendBoundsWithMarkers: ->
- locationsArray = []
- for marker in @markers
- locationsArray.push(marker.serviceObject.getLocation())
- @boundsObject = Microsoft.Maps.LocationRect.fromLocations(locationsArray)
-
- #////////////////////////////////////////////////////
- #/////////////////// Clusterer //////////////////////
- #////////////////////////////////////////////////////
-
- createClusterer: (markers_array) ->
-
- clearClusterer: ->
-
- #//creates clusters
- clusterize: ->
-
- #////////////////////////////////////////////////////
- #/////////////////// INFO WINDOW ////////////////////
- #////////////////////////////////////////////////////
-
- #// creates infowindows
- createInfoWindow: (marker_container) ->
- if marker_container.description?
- #//create the infowindow
- if @markers_conf.infobox == "description"
- marker_container.info_window = new Microsoft.Maps.Infobox(marker_container.serviceObject.getLocation(), { description: marker_container.description, visible: false, showCloseButton: true})
- else
- marker_container.info_window = new Microsoft.Maps.Infobox(marker_container.serviceObject.getLocation(), { htmlContent: marker_container.description, visible: false})
-
- #//add the listener associated
- currentMap = this
- Microsoft.Maps.Events.addHandler(marker_container.serviceObject, 'click', @openInfoWindow(currentMap, marker_container.info_window))
- @addToMap(marker_container.info_window)
-
- openInfoWindow: (currentMap, infoWindow) ->
- return ->
- # Close the latest selected marker before opening the current one.
- if currentMap.visibleInfoWindow
- currentMap.visibleInfoWindow.setOptions({ visible: false })
- infoWindow.setOptions({ visible:true })
- currentMap.visibleInfoWindow = infoWindow
-
- #////////////////////////////////////////////////////
- #/////////////////// Other methods //////////////////
- #////////////////////////////////////////////////////
-
- fitBounds: ->
- @serviceObject.setView({bounds: @boundsObject})
-
- addToMap: (object)->
- @serviceObject.entities.push(object)
-
- removeFromMap: (object)->
- @serviceObject.entities.remove(object)
-
- centerMapOnUser: ->
- @serviceObject.setView({ center: @userLocation})
-
- updateBoundsWithPolylines: ()->
-
- updateBoundsWithPolygons: ()->
-
- updateBoundsWithCircles: ()->
-
- extendMapBounds :->
-
- adaptMapToBounds: ->
- @fitBounds()
\ No newline at end of file
diff --git a/app/assets/javascripts/search/gmaps4rails/gmaps4rails.googlemaps.js.coffee b/app/assets/javascripts/search/gmaps4rails/gmaps4rails.googlemaps.js.coffee
deleted file mode 100644
index ed52ddc15a..0000000000
--- a/app/assets/javascripts/search/gmaps4rails/gmaps4rails.googlemaps.js.coffee
+++ /dev/null
@@ -1,339 +0,0 @@
-#######################################################################################################
-############################################## Google maps ##########################################
-#######################################################################################################
-
-class @Gmaps4RailsGoogle extends Gmaps4Rails
-
- constructor: ->
- super
- #Map settings
- @map_options =
- disableDefaultUI: false
- disableDoubleClickZoom: false
- type: "ROADMAP" # HYBRID, ROADMAP, SATELLITE, TERRAIN
-
- #markers + info styling
- @markers_conf =
- clusterer_gridSize: 50
- clusterer_maxZoom: 5
- custom_cluster_pictures: null
- custom_infowindow_class: null
-
- @mergeWithDefault("map_options")
- @mergeWithDefault("markers_conf")
-
- @kml_options =
- clickable: true
- preserveViewport: false
- suppressInfoWindows: false
-
- #Polygon Styling
- @polygons_conf = # default style for polygons
- strokeColor: "#FFAA00"
- strokeOpacity: 0.8
- strokeWeight: 2
- fillColor: "#000000"
- fillOpacity: 0.35
- clickable: false
-
- #Circle Styling
- @circles_conf = #default style for circles
- fillColor: "#00AAFF"
- fillOpacity: 0.35
- strokeColor: "#FFAA00"
- strokeOpacity: 0.8
- strokeWeight: 2
- clickable: false
- zIndex: null
-
- #Direction Settings
- @direction_conf =
- panel_id: null
- display_panel: false
- origin: null
- destination: null
- waypoints: [] #[{location: "toulouse,fr", stopover: true}, {location: "Clermont-Ferrand, fr", stopover: true}]
- optimizeWaypoints: false
- unitSystem: "METRIC" #IMPERIAL
- avoidHighways: false
- avoidTolls: false
- region: null
- travelMode: "DRIVING" #WALKING, BICYCLING
-
- #////////////////////////////////////////////////////
- #/////////////// Basic Objects //////////////
- #////////////////////////////////////////////////////
-
- createPoint : (lat, lng) ->
- return new google.maps.Point(lat, lng)
-
- createLatLng : (lat, lng) ->
- return new google.maps.LatLng(lat, lng)
-
- createLatLngBounds : ->
- return new google.maps.LatLngBounds()
-
- createMap : ->
- defaultOptions =
- maxZoom: @map_options.maxZoom
- minZoom: @map_options.minZoom
- zoom: @map_options.zoom
- center: @createLatLng(@map_options.center_latitude, @map_options.center_longitude)
- mapTypeId: google.maps.MapTypeId[@map_options.type]
- mapTypeControl: @map_options.mapTypeControl
- disableDefaultUI: @map_options.disableDefaultUI
- disableDoubleClickZoom: @map_options.disableDoubleClickZoom
- draggable: @map_options.draggable
-
- mergedOptions = @mergeObjectWithDefault @map_options.raw, defaultOptions
-
- return new google.maps.Map document.getElementById(@map_options.id), mergedOptions
-
-
- createMarkerImage : (markerPicture, markerSize, origin, anchor, scaledSize) ->
- return new google.maps.MarkerImage(markerPicture, markerSize, origin, anchor, scaledSize)
-
- createSize : (width, height) ->
- return new google.maps.Size(width, height)
-
- #////////////////////////////////////////////////////
- #////////////////////// Markers /////////////////////
- #////////////////////////////////////////////////////
-
- createMarker : (args) ->
- markerLatLng = @createLatLng(args.Lat, args.Lng)
- #Marker sizes are expressed as a Size of X,Y
- if args.marker_picture == "" and args.rich_marker == null
- defaultOptions = {position: markerLatLng, map: @serviceObject, title: args.marker_title, draggable: args.marker_draggable, zIndex: args.zindex}
- mergedOptions = @mergeObjectWithDefault @markers_conf.raw, defaultOptions
- return new google.maps.Marker mergedOptions
-
- if (args.rich_marker != null)
- return new RichMarker({
- position: markerLatLng
- map: @serviceObject
- draggable: args.marker_draggable
- content: args.rich_marker
- flat: if args.marker_anchor == null then false else args.marker_anchor[1]
- anchor: if args.marker_anchor == null then 0 else args.marker_anchor[0]
- zIndex: args.zindex
- })
-
- #default behavior
- #calculate MarkerImage anchor location
- imageAnchorPosition = @createImageAnchorPosition args.marker_anchor
- shadowAnchorPosition = @createImageAnchorPosition args.shadow_anchor
- #create or retrieve existing MarkerImages
- markerImage = @createOrRetrieveImage(args.marker_picture, args.marker_width, args.marker_height, imageAnchorPosition)
- shadowImage = @createOrRetrieveImage(args.shadow_picture, args.shadow_width, args.shadow_height, shadowAnchorPosition)
- defaultOptions = {position: markerLatLng, map: @serviceObject, icon: markerImage, title: args.marker_title, draggable: args.marker_draggable, shadow: shadowImage, zIndex: args.zindex}
- mergedOptions = @mergeObjectWithDefault @markers_conf.raw, defaultOptions
- return new google.maps.Marker mergedOptions
-
- #checks if obj is included in arr Array and returns the position or false
- includeMarkerImage : (arr, obj) ->
- for object, index in arr
- return index if object.url == obj
- return false
-
- #checks if MarkerImage exists before creating a new one
- #returns a MarkerImage or false if ever something wrong is passed as argument
- createOrRetrieveImage : (currentMarkerPicture, markerWidth, markerHeight, imageAnchorPosition) ->
- return null if (currentMarkerPicture == "" or currentMarkerPicture == null )
-
- test_image_index = @includeMarkerImage(@markerImages, currentMarkerPicture)
- switch test_image_index
- when false
- markerImage = @createMarkerImage(currentMarkerPicture, @createSize(markerWidth, markerHeight), null, imageAnchorPosition, null )
- @markerImages.push(markerImage)
- return markerImage
- break
- else
- return @markerImages[test_image_index] if typeof test_image_index == 'number'
- return false
-
- #clear markers
- clearMarkers : ->
- for marker in @markers
- @clearMarker marker
-
- #show and hide markers
- showMarkers : ->
- for marker in @markers
- @showMarker marker
-
- hideMarkers : ->
- for marker in @markers
- @hideMarker marker
-
- clearMarker : (marker) ->
- marker.serviceObject.setMap(null)
-
- showMarker : (marker) ->
- marker.serviceObject.setVisible(true)
-
- hideMarker : (marker) ->
- marker.serviceObject.setVisible(false)
-
- extendBoundsWithMarkers : ->
- for marker in @markers
- @boundsObject.extend(marker.serviceObject.position)
-
- #////////////////////////////////////////////////////
- #/////////////////// Clusterer //////////////////////
- #////////////////////////////////////////////////////
-
- createClusterer : (markers_array) ->
- return new MarkerClusterer( @serviceObject, markers_array, { maxZoom: @markers_conf.clusterer_maxZoom, gridSize: @markers_conf.clusterer_gridSize, styles: @customClusterer() })
-
- clearClusterer : ->
- @markerClusterer.clearMarkers()
-
- #creates clusters
- clusterize : ->
- if @markers_conf.do_clustering == true
- #first clear the existing clusterer if any
- @clearClusterer() if @markerClusterer != null
-
- markers_array = new Array
- for marker in @markers
- markers_array.push(marker.serviceObject)
-
- @markerClusterer = @createClusterer(markers_array)
-
- #////////////////////////////////////////////////////
- #/////////////////// INFO WINDOW ////////////////////
- #////////////////////////////////////////////////////
-
- #// creates infowindows
- createInfoWindow : (marker_container) ->
- if typeof(@jsTemplate) == "function" or marker_container.description?
- marker_container.description = @jsTemplate(marker_container) if typeof(@jsTemplate) == "function"
- if @markers_conf.custom_infowindow_class != null
- #creating custom infowindow
- boxText = document.createElement("div")
- boxText.setAttribute("class", @markers_conf.custom_infowindow_class) #to customize
- boxText.innerHTML = marker_container.description
- marker_container.infowindow = new InfoBox(@infobox(boxText))
- currentMap = this
- google.maps.event.addListener(marker_container.serviceObject, 'click', @openInfoWindow(currentMap, marker_container.infowindow, marker_container.serviceObject))
- else
- #create default infowindow
- marker_container.infowindow = new google.maps.InfoWindow({content: marker_container.description })
- #add the listener associated
- currentMap = this
- google.maps.event.addListener(marker_container.serviceObject, 'click', @openInfoWindow(currentMap, marker_container.infowindow, marker_container.serviceObject))
-
- openInfoWindow : (currentMap, infoWindow, marker) ->
- return ->
- # Close the latest selected marker before opening the current one.
- currentMap.visibleInfoWindow.close() if currentMap.visibleInfoWindow != null
- infoWindow.open(currentMap.serviceObject, marker)
- currentMap.visibleInfoWindow = infoWindow
-
- #////////////////////////////////////////////////////
- #///////////////// KML //////////////////
- #////////////////////////////////////////////////////
-
- createKmlLayer : (kml) ->
- kml_options = kml.options || {}
- kml_options = @mergeObjectWithDefault(kml_options, @kml_options)
- kml = new google.maps.KmlLayer( kml.url, kml_options)
- kml.setMap(@serviceObject)
- return kml
-
- #////////////////////////////////////////////////////
- #/////////////////// POLYLINES //////////////////////
- #////////////////////////////////////////////////////
-
- #creates a single polyline, triggered by create_polylines
- create_polyline : (polyline) ->
- polyline_coordinates = []
-
- #2 cases here, either we have a coded array of LatLng or we have an Array of LatLng
- for element in polyline
- #if we have a coded array
- if element.coded_array?
- decoded_array = new google.maps.geometry.encoding.decodePath(element.coded_array)
- #loop through every point in the array
- for point in decoded_array
- polyline_coordinates.push(point)
-
- #or we have an array of latlng
- else
- #by convention, a single polyline could be customized in the first array or it uses default values
- if element == polyline[0]
- strokeColor = element.strokeColor || @polylines_conf.strokeColor
- strokeOpacity = element.strokeOpacity || @polylines_conf.strokeOpacity
- strokeWeight = element.strokeWeight || @polylines_conf.strokeWeight
- clickable = element.clickable || @polylines_conf.clickable
- zIndex = element.zIndex || @polylines_conf.zIndex
-
- #add latlng if positions provided
- if element.lat? && element.lng?
- latlng = @createLatLng(element.lat, element.lng)
- polyline_coordinates.push(latlng)
-
- # Construct the polyline
- new_poly = new google.maps.Polyline
- path: polyline_coordinates
- strokeColor: strokeColor
- strokeOpacity: strokeOpacity
- strokeWeight: strokeWeight
- clickable: clickable
- zIndex: zIndex
-
- #save polyline
- polyline.serviceObject = new_poly
- new_poly.setMap(@serviceObject)
-
-
- updateBoundsWithPolylines: ()->
- for polyline in @polylines
- polyline_points = polyline.serviceObject.latLngs.getArray()[0].getArray()
- for point in polyline_points
- @boundsObject.extend point
-
- #////////////////////////////////////////////////////
- #///////////////// KML //////////////////
- #////////////////////////////////////////////////////
-
- create_kml : ->
- for kml in @kml
- kml.serviceObject = @createKmlLayer kml
-
- #////////////////////////////////////////////////////
- #/////////////////// Other methods //////////////////
- #////////////////////////////////////////////////////
-
- fitBounds : ->
- @serviceObject.fitBounds(@boundsObject) unless @boundsObject.isEmpty()
-
- centerMapOnUser : ->
- @serviceObject.setCenter(@userLocation)
-
- updateBoundsWithPolygons: ()->
- for polygon in @polygons
- polygon_points = polygon.serviceObject.latLngs.getArray()[0].getArray()
- for point in polygon_points
- @boundsObject.extend point
-
- updateBoundsWithCircles: ()->
- for circle in @circles
- @boundsObject.extend(circle.serviceObject.getBounds().getNorthEast())
- @boundsObject.extend(circle.serviceObject.getBounds().getSouthWest())
-
- extendMapBounds: ()->
- for bound in @map_options.bounds
- #create points from bounds provided
- @boundsObject.extend @createLatLng(bound.lat, bound.lng)
-
- adaptMapToBounds:()->
- #if autozoom is false, take user info into account
- if !@map_options.auto_zoom
- map_center = @boundsObject.getCenter()
- @map_options.center_latitude = map_center.lat()
- @map_options.center_longitude = map_center.lng()
- @serviceObject.setCenter(map_center)
- else
- @fitBounds()
diff --git a/app/assets/javascripts/search/gmaps4rails/gmaps4rails.mapquest.js.coffee b/app/assets/javascripts/search/gmaps4rails/gmaps4rails.mapquest.js.coffee
deleted file mode 100644
index 08fca694d0..0000000000
--- a/app/assets/javascripts/search/gmaps4rails/gmaps4rails.mapquest.js.coffee
+++ /dev/null
@@ -1,145 +0,0 @@
-#######################################################################################################
-############################################## Map Quest #############################################
-#######################################################################################################
-# http://developer.mapquest.com/web/documentation/sdk/javascript/v7.0/api/MQA.Poi.html
-
-class @Gmaps4RailsMapquest extends Gmaps4Rails
-
- constructor: ->
- super
- #Map settings
- @map_options = {type: "map"} #map type (map, sat, hyb)
- @markers_conf = {}
- @mergeWithDefault "markers_conf"
- @mergeWithDefault "map_options"
-
- #////////////////////////////////////////////////////
- #/////////////// Basic Objects //////////////
- #////////////////////////////////////////////////////
-
- createPoint: (lat, lng) ->
- return new MQA.Poi({lat: lat, lng: lng})
-
- createLatLng: (lat, lng) ->
- return {lat: lat, lng: lng}
-
- createLatLngBounds: ->
-
- createMap: ->
- map = new MQA.TileMap( #// Constructs an instance of MQA.TileMap
- document.getElementById(@map_options.id), #//the id of the element on the page you want the map to be added into
- @map_options.zoom, #//intial zoom level of the map
- {lat: @map_options.center_latitude, lng: @map_options.center_longitude},
- @map_options.type) #//map type (map, sat, hyb)
-
- MQA.withModule('zoomcontrol3', (->
- map.addControl(
- new MQA.LargeZoomControl3(),
- new MQA.MapCornerPlacement(MQA.MapCorner.TOP_LEFT)
- )
- ))
- return map
-
- createMarkerImage: (markerPicture, markerSize, origin, anchor, scaledSize) ->
-
- #////////////////////////////////////////////////////
- #////////////////////// Markers /////////////////////
- #////////////////////////////////////////////////////
-
- createMarker: (args)->
- marker = new MQA.Poi( {lat: args.Lat, lng: args.Lng} )
-
- if args.marker_picture != ""
- icon = new MQA.Icon(args.marker_picture, args.marker_height, args.marker_width)
- marker.setIcon(icon)
- if args.marker_anchor != null
- marker.setBias({x: args.marker_anchor[0], y: args.marker_anchor[1]})
-
- if args.shadow_picture != ""
- icon = new MQA.Icon(args.shadow_picture, args.shadow_height, args.shadow_width)
- marker.setShadow(icon)
-
- if args.shadow_anchor != null
- marker.setShadowOffset({x: args.shadow_anchor[0], y: args.shadow_anchor[1]})
-
- @addToMap marker
- return marker
-
-
- #// clear markers
- clearMarkers: ->
- for marker in markers
- @clearMarker marker
-
- #//show and hide markers
- showMarkers: ->
- for marker in markers
- @showMarker marker
-
- hideMarkers: ->
- for marker in markers
- @hideMarker marker
-
- clearMarker: (marker) ->
- @removeFromMap(marker.serviceObject)
-
- showMarker: (marker) ->
- #// marker.serviceObject
-
- hideMarker: (marker) ->
- #// marker.serviceObject
-
- extendBoundsWithMarkers: ->
- if @markers.length >=2
- @boundsObject = new MQA.RectLL(@markers[0].serviceObject.latLng, @markers[1].serviceObject.latLng)
- for marker in @markers
- @boundsObject.extend marker.serviceObject.latLng
-
- #////////////////////////////////////////////////////
- #/////////////////// Clusterer //////////////////////
- #////////////////////////////////////////////////////
-
- createClusterer: (markers_array) ->
-
- clearClusterer: ->
-
- #//creates clusters
- clusterize: ->
-
- #////////////////////////////////////////////////////
- #/////////////////// INFO WINDOW ////////////////////
- #////////////////////////////////////////////////////
-
- #// creates infowindows
- createInfoWindow: (marker_container) ->
- marker_container.serviceObject.setInfoTitleHTML(marker_container.description)
- #//TODO: how to disable the mouseover display when using setInfoContentHTML?
- #//marker_container.serviceObject.setInfoContentHTML(marker_container.description);
-
- #////////////////////////////////////////////////////
- #/////////////////// Other methods //////////////////
- #////////////////////////////////////////////////////
-
- fitBounds: ->
- @serviceObject.zoomToRect @boundsObject if @markers.length >=2
- @serviceObject.setCenter @markers[0].serviceObject.latLng if @markers.length == 1
-
- centerMapOnUser: ->
- @serviceObject.setCenter @userLocation
-
- addToMap: (object) ->
- @serviceObject.addShape object
-
- removeFromMap: (object)->
- @serviceObject.removeShape object
-
- updateBoundsWithPolylines: ()->
-
- updateBoundsWithPolygons: ()->
-
- updateBoundsWithCircles: ()->
-
- extendMapBounds :->
-
- adaptMapToBounds: ->
- @fitBounds()
\ No newline at end of file
diff --git a/app/assets/javascripts/search/gmaps4rails/gmaps4rails.openlayers.js.coffee b/app/assets/javascripts/search/gmaps4rails/gmaps4rails.openlayers.js.coffee
deleted file mode 100644
index 1cddc04e39..0000000000
--- a/app/assets/javascripts/search/gmaps4rails/gmaps4rails.openlayers.js.coffee
+++ /dev/null
@@ -1,261 +0,0 @@
-#######################################################################################################
-############################################## Open Layers ##########################################
-#######################################################################################################
-
-#// http://wiki.openstreetmap.org/wiki/OpenLayers
-#// http://openlayers.org/dev/examples
-#//http://docs.openlayers.org/contents.html
-
-class @Gmaps4RailsOpenlayers extends Gmaps4Rails
-
- constructor: ->
- super
- @map_options = {}
- @mergeWithDefault "map_options"
- @markers_conf = {}
- @mergeWithDefault "markers_conf"
-
- @openMarkers = null
- @markersLayer = null
- @markersControl = null
- @polylinesLayer = null
-
- #////////////////////////////////////////////////////
- #/////////////// Basic Objects ////////////////////
- #////////////////////////////////////////////////////
-
- createPoint: (lat, lng)->
-
- createLatLng: (lat, lng)->
- return new OpenLayers.LonLat(lng, lat).transform(new OpenLayers.Projection("EPSG:4326"), new OpenLayers.Projection("EPSG:900913")) # transform from WGS 1984 to Spherical Mercator Projection
-
- createAnchor: (offset)->
- return null if offset == null
- return new OpenLayers.Pixel(offset[0], offset[1])
-
- createSize: (width, height)->
- return new OpenLayers.Size(width, height)
-
- createLatLngBounds: ->
- return new OpenLayers.Bounds()
-
- createMap: ->
- #//todo add customization: kind of map and other map options
- map = new OpenLayers.Map(@map_options.id)
- map.addLayer(new OpenLayers.Layer.OSM())
- map.setCenter(@createLatLng(@map_options.center_latitude, @map_options.center_longitude), #// Center of the map
- @map_options.zoom) #// Zoom level
- return map
-
- #////////////////////////////////////////////////////
- #////////////////////// Markers /////////////////////
- #////////////////////////////////////////////////////
- #//http://openlayers.org/dev/examples/marker-shadow.html
- createMarker: (args) ->
- style_mark = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default'])
- style_mark.fillOpacity = 1
-
- #//creating markers' dedicated layer
- if (@markersLayer == null)
- @markersLayer = new OpenLayers.Layer.Vector("Markers", null)
- @serviceObject.addLayer(@markersLayer)
- #//TODO move?
- @markersLayer.events.register("featureselected", @markersLayer, @onFeatureSelect)
- @markersLayer.events.register("featureunselected", @markersLayer, @onFeatureUnselect)
- @markersControl = new OpenLayers.Control.SelectFeature(@markersLayer)
- @serviceObject.addControl(@markersControl)
- @markersControl.activate()
- #//showing default pic if none available
- if args.marker_picture == ""
- #style_mark.graphicWidth = 24
- style_mark.graphicHeight = 30
- style_mark.externalGraphic = "http://openlayers.org/dev/img/marker-blue.png"
- #//creating custom pic
- else
- style_mark.graphicWidth = args.marker_width
- style_mark.graphicHeight = args.marker_height
- style_mark.externalGraphic = args.marker_picture
- #//adding anchor if any
- if args.marker_anchor != null
- style_mark.graphicXOffset = args.marker_anchor[0]
- style_mark.graphicYOffset = args.marker_anchor[1]
- #//adding shadow if any
- if args.shadow_picture != ""
- style_mark.backgroundGraphic = args.shadow_picture
- style_mark.backgroundWidth = args.shadow_width
- style_mark.backgroundHeight = args.shadow_height
- #//adding shadow's anchor if any
- if args.shadow_anchor != null
- style_mark.backgroundXOffset = args.shadow_anchor[0]
- style_mark.backgroundYOffset = args.shadow_anchor[1]
-
- style_mark.graphicTitle = args.marker_title
- marker = new OpenLayers.Feature.Vector(
- new OpenLayers.Geometry.Point(args.Lng, args.Lat),
- null,
- style_mark)
- #//changing coordinates so that it actually appears on the map!
- marker.geometry.transform(new OpenLayers.Projection("EPSG:4326"), new OpenLayers.Projection("EPSG:900913"))
- #//adding layer to the map
- @markersLayer.addFeatures([marker])
-
- return marker
-
- #//clear markers
- clearMarkers: ->
- @clearMarkersLayerIfExists()
- @markersLayer = null
- @boundsObject = new OpenLayers.Bounds()
-
- clearMarkersLayerIfExists: ->
- @serviceObject.removeLayer(@markersLayer) if @markersLayer != null and @serviceObject.getLayer(@markersLayer.id) != null
-
- extendBoundsWithMarkers: ->
- console.log "here"
- for marker in @markers
- @boundsObject.extend(@createLatLng(marker.lat,marker.lng))
-
- #////////////////////////////////////////////////////
- #/////////////////// Clusterer //////////////////////
- #////////////////////////////////////////////////////
- #//too ugly to be considered valid :(
-
- createClusterer: (markers_array)->
- options =
- pointRadius: "${radius}"
- fillColor: "#ffcc66"
- fillOpacity: 0.8
- strokeColor: "#cc6633"
- strokeWidth: "${width}"
- strokeOpacity: 0.8
- funcs =
- context:
- width: (feature) ->
- return (feature.cluster) ? 2 : 1
- radius: (feature) ->
- pix = 2
- pix = Math.min(feature.attributes.count, 7) + 2 if feature.cluster
- return pix
-
- style = new OpenLayers.Style options, funcs
-
- strategy = new OpenLayers.Strategy.Cluster()
-
- clusters = new OpenLayers.Layer.Vector "Clusters",
- strategies: [strategy]
- styleMap: new OpenLayers.StyleMap
- "default": style
- "select":
- fillColor: "#8aeeef"
- strokeColor: "#32a8a9"
-
- @clearMarkersLayerIfExists()
- @serviceObject.addLayer(clusters)
- clusters.addFeatures(markers_array)
- return clusters
-
- clusterize: ->
-
- if @markers_conf.do_clustering == true
- #//first clear the existing clusterer if any
- if @markerClusterer != null
- @clearClusterer()
- markers_array = new Array
- for marker in @markers
- markers_array.push(marker.serviceObject)
- @markerClusterer = @createClusterer markers_array
-
- clearClusterer: ->
- @serviceObject.removeLayer @markerClusterer
-
- #////////////////////////////////////////////////////
- #/////////////////// INFO WINDOW ////////////////////
- #////////////////////////////////////////////////////
-
- #// creates infowindows
- createInfoWindow: (marker_container) ->
- marker_container.serviceObject.infoWindow = marker_container.description if marker_container.description?
-
- onPopupClose: (evt) ->
- #// 'this' is the popup.
- @markersControl.unselect @feature
-
- onFeatureSelect: (evt) ->
- feature = evt.feature
- popup = new OpenLayers.Popup.FramedCloud("featurePopup",
- feature.geometry.getBounds().getCenterLonLat(),
- new OpenLayers.Size(300,200),
- feature.infoWindow,
- null, true, @onPopupClose)
- feature.popup = popup
- popup.feature = feature
- @map.addPopup popup
-
- onFeatureUnselect: (evt) ->
- feature = evt.feature
- if feature.popup
- #//popup.feature = null;
- @map.removePopup feature.popup
- feature.popup.destroy()
- feature.popup = null
-
- #////////////////////////////////////////////////////
- #/////////////////// POLYLINES //////////////////////
- #////////////////////////////////////////////////////
-
- create_polyline : (polyline) ->
-
- if(@polylinesLayer == null)
- @polylinesLayer = new OpenLayers.Layer.Vector("Polylines", null)
- @serviceObject.addLayer(@polylinesLayer)
- @polylinesLayer.events.register("featureselected", @polylinesLayer, @onFeatureSelect)
- @polylinesLayer.events.register("featureunselected", @polylinesLayer, @onFeatureUnselect)
- @polylinesControl = new OpenLayers.Control.DrawFeature(@polylinesLayer, OpenLayers.Handler.Path)
- @serviceObject.addControl(@polylinesControl)
-
- polyline_coordinates = []
-
- for element in polyline
- #by convention, a single polyline could be customized in the first array or it uses default values
- if element == polyline[0]
- strokeColor = element.strokeColor || @polylines_conf.strokeColor
- strokeOpacity = element.strokeOpacity || @polylines_conf.strokeOpacity
- strokeWeight = element.strokeWeight || @polylines_conf.strokeWeight
- clickable = element.clickable || @polylines_conf.clickable
- zIndex = element.zIndex || @polylines_conf.zIndex
-
- #add latlng if positions provided
- if element.lat? && element.lng?
- latlng = new OpenLayers.Geometry.Point(element.lng, element.lat)
- polyline_coordinates.push(latlng)
-
- line_points = new OpenLayers.Geometry.LineString(polyline_coordinates);
- line_style = { strokeColor: strokeColor, strokeOpacity: strokeOpacity, strokeWidth: strokeWeight };
-
- polyline = new OpenLayers.Feature.Vector(line_points, null, line_style);
- polyline.geometry.transform(new OpenLayers.Projection("EPSG:4326"), new OpenLayers.Projection("EPSG:900913"))
-
- @polylinesLayer.addFeatures([polyline])
-
- return polyline
-
- updateBoundsWithPolylines: ()->
-
- updateBoundsWithPolygons: ()->
-
- updateBoundsWithCircles: ()->
-
- # #////////////////////////////////////////////////////
- # #/////////////////// Other methods //////////////////
- # #////////////////////////////////////////////////////
-
- fitBounds: ->
- @serviceObject.zoomToExtent(@boundsObject, true)
-
- centerMapOnUser: ->
- @serviceObject.setCenter @userLocation
-
- extendMapBounds :->
-
- adaptMapToBounds: ->
- @fitBounds()
diff --git a/app/assets/javascripts/search/jquery.backstretch.js b/app/assets/javascripts/search/jquery.backstretch.js
deleted file mode 100644
index 4cb7175e99..0000000000
--- a/app/assets/javascripts/search/jquery.backstretch.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! Backstretch - v2.0.4 - 2013-06-19
- * http://srobbin.com/jquery-plugins/backstretch/
- * Copyright (c) 2013 Scott Robbin; Licensed MIT */
-(function(a,d,p){a.fn.backstretch=function(c,b){(c===p||0===c.length)&&a.error("No images were supplied for Backstretch");0===a(d).scrollTop()&&d.scrollTo(0,0);return this.each(function(){var d=a(this),g=d.data("backstretch");if(g){if("string"==typeof c&&"function"==typeof g[c]){g[c](b);return}b=a.extend(g.options,b);g.destroy(!0)}g=new q(this,c,b);d.data("backstretch",g)})};a.backstretch=function(c,b){return a("body").backstretch(c,b).data("backstretch")};a.expr[":"].backstretch=function(c){return a(c).data("backstretch")!==p};a.fn.backstretch.defaults={centeredX:!0,centeredY:!0,duration:5E3,fade:0};var r={left:0,top:0,overflow:"hidden",margin:0,padding:0,height:"100%",width:"100%",zIndex:-999999},s={position:"absolute",display:"none",margin:0,padding:0,border:"none",width:"auto",height:"auto",maxHeight:"none",maxWidth:"none",zIndex:-999999},q=function(c,b,e){this.options=a.extend({},a.fn.backstretch.defaults,e||{});this.images=a.isArray(b)?b:[b];a.each(this.images,function(){a("")[0].src=this});this.isBody=c===document.body;this.$container=a(c);this.$root=this.isBody?l?a(d):a(document):this.$container;c=this.$container.children(".backstretch").first();this.$wrap=c.length?c:a('
Hello, world!
This is a paragraph.
' email 'enterprise@example.com' @@ -101,12 +101,12 @@ FactoryGirl.define do factory :supplier_enterprise, :parent => :enterprise do is_primary_producer true - is_distributor false + sells "none" end factory :distributor_enterprise, :parent => :enterprise do is_primary_producer false - is_distributor true + sells "any" end factory :enterprise_relationship do diff --git a/spec/features/admin/enterprise_user_spec.rb b/spec/features/admin/enterprise_user_spec.rb index 70e6a9b265..232ffb68ae 100644 --- a/spec/features/admin/enterprise_user_spec.rb +++ b/spec/features/admin/enterprise_user_spec.rb @@ -11,10 +11,10 @@ feature %q{ let!(:user) { create_enterprise_user } let!(:supplier1) { create(:supplier_enterprise, name: 'Supplier 1') } let!(:supplier2) { create(:supplier_enterprise, name: 'Supplier 2') } - let(:supplier_profile) { create(:supplier_enterprise, name: 'Supplier profile', type: 'profile') } + let(:supplier_profile) { create(:supplier_enterprise, name: 'Supplier profile', sells: 'none') } let!(:distributor1) { create(:distributor_enterprise, name: 'Distributor 3') } let!(:distributor2) { create(:distributor_enterprise, name: 'Distributor 4') } - let(:distributor_profile) { create(:distributor_enterprise, name: 'Distributor profile', type: 'profile') } + let(:distributor_profile) { create(:distributor_enterprise, name: 'Distributor profile', sells: 'none') } describe "creating an enterprise user" do context "with a limitted number of owned enterprises" do @@ -53,7 +53,10 @@ feature %q{ end end - describe "with only a profile-level enterprise" do + # This case no longer exists as anyone with an enterprise can supply into the system. + # Or can they?? There is no producer profile anyway. + # TODO discuss what parts of this are still necessary in which cases. + pending "with only a profile-level enterprise" do before do user.enterprise_roles.create! enterprise: supplier_profile user.enterprise_roles.create! enterprise: distributor_profile diff --git a/spec/features/admin/enterprises_spec.rb b/spec/features/admin/enterprises_spec.rb index d3d23aabcb..06b1fd31a6 100644 --- a/spec/features/admin/enterprises_spec.rb +++ b/spec/features/admin/enterprises_spec.rb @@ -16,7 +16,7 @@ feature %q{ within("tr.enterprise-#{s.id}") do expect(page).to have_content s.name - expect(page).to have_select "enterprise_set_collection_attributes_1_type" + expect(page).to have_select "enterprise_set_collection_attributes_1_sells" expect(page).to have_content "Edit Profile" expect(page).to have_content "Delete" expect(page).to_not have_content "Payment Methods" @@ -26,7 +26,7 @@ feature %q{ within("tr.enterprise-#{d.id}") do expect(page).to have_content d.name - expect(page).to have_select "enterprise_set_collection_attributes_0_type" + expect(page).to have_select "enterprise_set_collection_attributes_0_sells" expect(page).to have_content "Edit Profile" expect(page).to have_content "Delete" expect(page).to have_content "Payment Methods" @@ -37,7 +37,7 @@ feature %q{ scenario "editing enterprises in bulk" do s = create(:supplier_enterprise) - d = create(:distributor_enterprise, type: 'profile') + d = create(:distributor_enterprise, sells: 'none') d_manager = create_enterprise_user d_manager.enterprise_roles.build(enterprise: d).save expect(d.owner).to_not eq d_manager @@ -48,14 +48,14 @@ feature %q{ within("tr.enterprise-#{d.id}") do expect(page).to have_checked_field "enterprise_set_collection_attributes_0_visible" uncheck "enterprise_set_collection_attributes_0_visible" - select 'full', from: "enterprise_set_collection_attributes_0_type" + select 'any', from: "enterprise_set_collection_attributes_0_sells" select d_manager.email, from: 'enterprise_set_collection_attributes_0_owner_id' end click_button "Update" flash_message.should == 'Enterprises updated successfully' distributor = Enterprise.find(d.id) expect(distributor.visible).to eq false - expect(distributor.type).to eq 'full' + expect(distributor.sells).to eq 'any' expect(distributor.owner).to eq d_manager end @@ -82,15 +82,16 @@ feature %q{ click_link 'New Enterprise' # Checking shipping and payment method sidebars work + choose "Any" uncheck 'enterprise_is_primary_producer' - check 'enterprise_is_distributor' + page.should_not have_checked_field "enterprise_payment_method_ids_#{payment_method.id}" page.should_not have_checked_field "enterprise_shipping_method_ids_#{shipping_method.id}" # Filling in details fill_in 'enterprise_name', :with => 'Eaterprises' select2_search admin.email, from: 'Owner' - choose 'Full' + choose 'Any' check "enterprise_payment_method_ids_#{payment_method.id}" check "enterprise_shipping_method_ids_#{shipping_method.id}" select2_search eg1.name, from: 'Groups' @@ -134,7 +135,7 @@ feature %q{ end fill_in 'enterprise_name', :with => 'Eaterprises' - choose 'Single' + choose 'Own' select2_search user.email, from: 'Owner' fill_in 'enterprise_description', :with => 'Connecting farmers and eaters' long_description = find :css, "text-angular div.ta-scroll-window div.ta-bind" @@ -142,14 +143,23 @@ feature %q{ # Check Angularjs switching of sidebar elements uncheck 'enterprise_is_primary_producer' - uncheck 'enterprise_is_distributor' + choose 'None' + page.should have_selector "#enterprise_fees", visible: false page.should have_selector "#payment_methods", visible: false page.should have_selector "#shipping_methods", visible: false - page.should have_selector "#enterprise_fees", visible: false - check 'enterprise_is_distributor' + check 'enterprise_is_primary_producer' + page.should have_selector "#enterprise_fees" + page.should have_selector "#payment_methods", visible: false + page.should have_selector "#shipping_methods", visible: false + uncheck 'enterprise_is_primary_producer' + choose 'Own' + page.should have_selector "#enterprise_fees" page.should have_selector "#payment_methods" page.should have_selector "#shipping_methods" + choose 'Any' page.should have_selector "#enterprise_fees" + page.should have_selector "#payment_methods" + page.should have_selector "#shipping_methods" select2_search eg1.name, from: 'Groups' @@ -277,16 +287,14 @@ feature %q{ within("tr.enterprise-#{distributor1.id}") do expect(page).to have_content distributor1.name - expect(page).to have_checked_field "enterprise_set_collection_attributes_0_is_distributor" expect(page).to have_unchecked_field "enterprise_set_collection_attributes_0_is_primary_producer" - expect(page).to_not have_select "enterprise_set_collection_attributes_0_type" + expect(page).to_not have_select "enterprise_set_collection_attributes_0_sells" end within("tr.enterprise-#{supplier1.id}") do expect(page).to have_content supplier1.name - expect(page).to have_unchecked_field "enterprise_set_collection_attributes_1_is_distributor" expect(page).to have_checked_field "enterprise_set_collection_attributes_1_is_primary_producer" - expect(page).to_not have_select "enterprise_set_collection_attributes_1_type" + expect(page).to_not have_select "enterprise_set_collection_attributes_1_sells" end expect(page).to_not have_content "supplier2.name" diff --git a/spec/features/consumer/registration_spec.rb b/spec/features/consumer/registration_spec.rb index 7ac46a8970..57013342bc 100644 --- a/spec/features/consumer/registration_spec.rb +++ b/spec/features/consumer/registration_spec.rb @@ -3,7 +3,8 @@ require 'spec_helper' feature "Registration", js: true do include WebHelper - describe "Registering a Profile" do + # TODO fix this after removal of is_distributor. + pending "Registering a Profile" do let(:user) { create(:user, password: "password", password_confirmation: "password") } it "Allows a logged in user to register a profile" do @@ -49,7 +50,7 @@ feature "Registration", js: true do expect(page).to have_content 'Nice one!' e = Enterprise.find_by_name('My Awesome Enterprise') expect(e.address.address1).to eq "123 Abc Street" - expect(e.is_distributor).to eq true + expect(e.sells).to eq "none" expect(e.is_primary_producer).to eq true expect(e.contact).to eq "Saskia Munroe" diff --git a/spec/features/consumer/shopping/shopping_spec.rb b/spec/features/consumer/shopping/shopping_spec.rb index 56c578f91b..d4db6bff29 100644 --- a/spec/features/consumer/shopping/shopping_spec.rb +++ b/spec/features/consumer/shopping/shopping_spec.rb @@ -167,7 +167,7 @@ feature "As a consumer I want to shop with a distributor", js: true do visit shop_path end - it "should save group buy data to ze cart" do + it "should save group buy data to the cart" do fill_in "variants[#{variant.id}]", with: 6 fill_in "variant_attributes[#{variant.id}][max_quantity]", with: 7 page.should have_in_cart product.name diff --git a/spec/javascripts/unit/darkswarm/filters/filter_hubs_spec.js.coffee b/spec/javascripts/unit/darkswarm/filters/filter_hubs_spec.js.coffee deleted file mode 100644 index fc2702a72b..0000000000 --- a/spec/javascripts/unit/darkswarm/filters/filter_hubs_spec.js.coffee +++ /dev/null @@ -1,45 +0,0 @@ -describe 'filtering Hubs', -> - filter = null - filterHubs = null - hubs = [{ - name: "frogs" - other: "roger" - address: - zipcode: "cats" - city: "cambridge" - state: "kansas" - }, { - name: "donkeys" - other: "roger" - address: - zipcode: "" - city: "Wellington" - state: "uzbekistan" - }] - - beforeEach -> - module 'Darkswarm' - inject ($filter) -> - filter = $filter - filterHubs = $filter('hubs') - - it 'has a hub filter', -> - expect(filter('hubs')).not.toBeNull() - - it "filters by name", -> - expect(filterHubs(hubs, 'donkeys').length).toEqual 1 - - it "is case insensitive", -> - expect(filterHubs(hubs, 'DONKEYS').length).toEqual 1 - - it "filters by state", -> - expect(filterHubs(hubs, 'kansas').length).toEqual 1 - - it "filters by zipcode", -> - expect(filterHubs(hubs, 'cats').length).toEqual 1 - - it "gives all hubs when no argument is specified", -> - expect(filterHubs(hubs, '').length).toEqual 2 - - it "does not filter by anything else", -> - expect(filterHubs(hubs, 'roger').length).toEqual 0 diff --git a/spec/javascripts/unit/darkswarm/filters/filter_producers_spec.js.coffee b/spec/javascripts/unit/darkswarm/filters/filter_producers_spec.js.coffee deleted file mode 100644 index 29d8986b56..0000000000 --- a/spec/javascripts/unit/darkswarm/filters/filter_producers_spec.js.coffee +++ /dev/null @@ -1,28 +0,0 @@ -describe 'filtering producers', -> - filter = null - filterProducers = null - producers = [{ - name: "frogs" - other: "roger" - address: - zipcode: "cats" - city: "cambridge" - state: "kansas" - }, { - name: "donkeys" - other: "roger" - address: - zipcode: "" - city: "Wellington" - state: "uzbekistan" - }] - - beforeEach -> - module 'Darkswarm' - inject ($filter) -> - filter = $filter - filterProducers = $filter('filterProducers') - - - it 'has a producer filter', -> - expect(filter('filterProducers')).not.toBeNull() diff --git a/spec/javascripts/unit/darkswarm/filters/search_enterprises_spec.js.coffee b/spec/javascripts/unit/darkswarm/filters/search_enterprises_spec.js.coffee new file mode 100644 index 0000000000..2717e50cfb --- /dev/null +++ b/spec/javascripts/unit/darkswarm/filters/search_enterprises_spec.js.coffee @@ -0,0 +1,40 @@ +describe 'filtering Enterprises', -> + filter = null + enterprises = [{ + name: "frogs" + other: "roger" + address: + zipcode: "cats" + city: "cambridge" + state: "kansas" + }, { + name: "donkeys" + other: "roger" + address: + zipcode: "" + city: "Wellington" + state: "uzbekistan" + }] + + beforeEach -> + module 'Darkswarm' + inject ($filter) -> + filter = $filter('searchEnterprises') + + it "filters by name", -> + expect(filter(enterprises, 'donkeys').length).toEqual 1 + + it "is case insensitive", -> + expect(filter(enterprises, 'DONKEYS').length).toEqual 1 + + it "filters by state", -> + expect(filter(enterprises, 'kansas').length).toEqual 1 + + it "filters by zipcode", -> + expect(filter(enterprises, 'cats').length).toEqual 1 + + it "gives all enterprises when no argument is specified", -> + expect(filter(enterprises, '').length).toEqual 2 + + it "does not filter by anything else", -> + expect(filter(enterprises, 'roger').length).toEqual 0 diff --git a/spec/javascripts/unit/darkswarm/services/enterprise_spec.js.coffee b/spec/javascripts/unit/darkswarm/services/enterprise_spec.js.coffee index 59d4ae9826..94dd7d39d2 100644 --- a/spec/javascripts/unit/darkswarm/services/enterprise_spec.js.coffee +++ b/spec/javascripts/unit/darkswarm/services/enterprise_spec.js.coffee @@ -1,24 +1,30 @@ describe "Enterprises service", -> Enterprises = null - CurrentHubMock = {} + CurrentHubMock = {} taxons = [ {id: 1, name: "test"} ] enterprises = [ - {id: 1, type: "hub", producers: [{id: 2}], taxons: [{id: 1}]}, - {id: 2, type: "producer", hubs: [{id: 1}]}, - {id: 3, type: "producer", hubs: [{id: 1}]} + {id: 1, visible: true, category: "hub", producers: [{id: 5}], taxons: [{id: 1}]}, + {id: 2, visible: true, category: "hub", producers: [{id: 6}]} + {id: 3, visible: true, category: "hub_profile"} + {id: 4, visible: false, category: "hub", producers: [{id: 7}]} + {id: 5, visible: true, category: "producer_hub", hubs: [{id: 1}]}, + {id: 6, visible: true, category: "producer_shop", hubs: [{id: 2}]}, + {id: 7, visible: true, category: "producer", hubs: [{id: 2}]} + {id: 8, visible: false, category: "producer", hubs: [{id: 2}]} ] + H1: 0 beforeEach -> module 'Darkswarm' module ($provide)-> - $provide.value "CurrentHub", CurrentHubMock + $provide.value "CurrentHub", CurrentHubMock null - angular.module('Darkswarm').value('enterprises', enterprises) - angular.module('Darkswarm').value('taxons', taxons) + angular.module('Darkswarm').value('enterprises', enterprises) + angular.module('Darkswarm').value('taxons', taxons) inject ($injector)-> - Enterprises = $injector.get("Enterprises") + Enterprises = $injector.get("Enterprises") it "stores enterprises as id/object pairs", -> expect(Enterprises.enterprises_by_id["1"]).toBe enterprises[0] @@ -31,8 +37,39 @@ describe "Enterprises service", -> expect(Enterprises.enterprises[0]).toBe Enterprises.enterprises_by_id["1"] it "dereferences references to other enterprises", -> - expect(Enterprises.enterprises_by_id["1"].producers[0]).toBe enterprises[1] - expect(Enterprises.enterprises_by_id["3"].hubs[0]).toBe enterprises[0] + expect(Enterprises.enterprises_by_id["1"].producers[0]).toBe enterprises[4] + expect(Enterprises.enterprises_by_id["5"].hubs[0]).toBe enterprises[0] it "dereferences taxons", -> expect(Enterprises.enterprises[0].taxons[0]).toBe taxons[0] + + it "filters Enterprise.hubs into a new array", -> + expect(Enterprises.hubs[0]).toBe Enterprises.enterprises[0] + # Because the $filter is a new sorted array + # We check to see the objects in both arrays are still the same + Enterprises.enterprises[0].active = false + expect(Enterprises.hubs[0].active).toBe false + + it "filters Enterprises.producers into a new array", -> + expect(Enterprises.producers[0]).toBe Enterprises.enterprises[4] + Enterprises.enterprises[4].active = false + expect(Enterprises.producers[0].active).toBe false + + it "only includes visible enterprises in hubs array", -> + expect(Enterprises.hubs).toContain Enterprises.enterprises[0] + expect(Enterprises.hubs).not.toContain Enterprises.enterprises[3] + + it "only includes visible enterprises in producers array", -> + expect(Enterprises.producers).toContain Enterprises.enterprises[4] + expect(Enterprises.producers).not.toContain Enterprises.enterprises[7] + + it "includes hub, hub_profile, producer_hub and, producer_shop enterprises in hubs array", -> + expect(Enterprises.hubs).toContain Enterprises.enterprises[0] + expect(Enterprises.hubs).toContain Enterprises.enterprises[2] + expect(Enterprises.hubs).toContain Enterprises.enterprises[4] + expect(Enterprises.hubs).toContain Enterprises.enterprises[5] + + it "includes producer_hub, producer_shop and producer enterprises in producers array", -> + expect(Enterprises.producers).toContain Enterprises.enterprises[4] + expect(Enterprises.producers).toContain Enterprises.enterprises[5] + expect(Enterprises.producers).toContain Enterprises.enterprises[6] diff --git a/spec/javascripts/unit/darkswarm/services/hubs_spec.js.coffee b/spec/javascripts/unit/darkswarm/services/hubs_spec.js.coffee deleted file mode 100644 index f2620da65b..0000000000 --- a/spec/javascripts/unit/darkswarm/services/hubs_spec.js.coffee +++ /dev/null @@ -1,45 +0,0 @@ -describe "Hubs service", -> - Hubs = null - Enterprises = null - CurrentHubMock = {} - hubs = [ - { - id: 2 - active: false - orders_close_at: new Date() - is_distributor: true - has_hub_listing: true - } - { - id: 3 - active: false - orders_close_at: new Date() - is_distributor: true - has_hub_listing: true - } - { - id: 1 - active: true - orders_close_at: new Date() - is_distributor: true - has_hub_listing: true - } - ] - - - beforeEach -> - module 'Darkswarm' - angular.module('Darkswarm').value('enterprises', hubs) - module ($provide)-> - $provide.value "CurrentHub", CurrentHubMock - null - inject ($injector)-> - Enterprises = $injector.get("Enterprises") - Hubs = $injector.get("Hubs") - - it "filters Enterprise.hubs into a new array", -> - expect(Hubs.hubs[0]).toBe Enterprises.enterprises[2] - # Because the $filter is a new sorted array - # We check to see the objects in both arrays are still the same - Enterprises.enterprises[2].active = false - expect(Hubs.hubs[0].active).toBe false diff --git a/spec/javascripts/unit/darkswarm/services/producers_spec.js.coffee b/spec/javascripts/unit/darkswarm/services/producers_spec.js.coffee deleted file mode 100644 index dc9ac0fc8f..0000000000 --- a/spec/javascripts/unit/darkswarm/services/producers_spec.js.coffee +++ /dev/null @@ -1,21 +0,0 @@ -describe "Producers service", -> - Producers = null - Enterprises = null - CurrentHubMock = - hub: - id: 1 - enterprises = [ - {is_primary_producer: true} - ] - - beforeEach -> - module 'Darkswarm' - module ($provide)-> - $provide.value "CurrentHub", CurrentHubMock - null - angular.module('Darkswarm').value('enterprises', enterprises) - inject ($injector)-> - Producers = $injector.get("Producers") - - it "delegates producers array to Enterprises", -> - expect(Producers.producers[0]).toBe enterprises[0] diff --git a/spec/models/enterprise_spec.rb b/spec/models/enterprise_spec.rb index fff57f6f21..9a1cb36795 100644 --- a/spec/models/enterprise_spec.rb +++ b/spec/models/enterprise_spec.rb @@ -504,64 +504,25 @@ describe Enterprise do end end - pending "provide enterprise category" do + describe "provide enterprise category" do - # Swap type values full > sell_all, single > sell_own profile > sell_none - # swap is_distributor for new can_supply flag. - let(:producer_sell_all_can_supply) { - create(:enterprise, is_primary_producer: true, type: "full", is_distributor: true) - } - let(:producer_sell_all_cant_supply) { - create(:enterprise, is_primary_producer: true, type: "full", is_distributor: false) - } - let(:producer_sell_own_can_supply) { - create(:enterprise, is_primary_producer: true, type: "single", is_distributor: true) - } - let(:producer_sell_own_cant_supply) { - create(:enterprise, is_primary_producer: true, type: "single", is_distributor: false) - } - let(:producer_sell_none_can_supply) { - create(:enterprise, is_primary_producer: true, type: "profile", is_distributor: true) - } - let(:producer_sell_none_cant_supply) { - create(:enterprise, is_primary_producer: true, type: "profile", is_distributor: false) - } - let(:non_producer_sell_all_can_supply) { - create(:enterprise, is_primary_producer: true, type: "full", is_distributor: true) - } - let(:non_producer_sell_all_cant_supply) { - create(:enterprise, is_primary_producer: true, type: "full", is_distributor: false) - } - let(:non_producer_sell_own_can_supply) { - create(:enterprise, is_primary_producer: true, type: "single", is_distributor: true) - } - let(:non_producer_sell_own_cant_supply) { - create(:enterprise, is_primary_producer: true, type: "single", is_distributor: false) - } - let(:non_producer_sell_none_can_supply) { - create(:enterprise, is_primary_producer: false, type: "profile", is_distributor: true) - } - let(:non_producer_sell_none_cant_supply) { - create(:enterprise, is_primary_producer: false, type: "profile", is_distributor: false) - } + let(:producer_sell_all) { build(:enterprise, is_primary_producer: true, sells: "any") } + let(:producer_sell_own) { build(:enterprise, is_primary_producer: true, sells: "own") } + let(:producer_sell_none) { build(:enterprise, is_primary_producer: true, sells: "none") } + let(:non_producer_sell_all) { build(:enterprise, is_primary_producer: false, sells: "any") } + let(:non_producer_sell_own) { build(:enterprise, is_primary_producer: false, sells: "own") } + let(:non_producer_sell_none) { build(:enterprise, is_primary_producer: false, sells: "none") } it "should output enterprise categories" do - producer_sell_all_can_supply.is_primary_producer.should == true - producer_sell_all_can_supply.supplies.should == true - producer_sell_all_can_supply.type.should == "full" + producer_sell_all.is_primary_producer.should == true + producer_sell_all.sells.should == "any" - producer_sell_all_can_supply.enterprise_category.should == "producer_hub" - producer_sell_all_cant_supply.enterprise_category.should == "producer_hub" - producer_sell_own_can_supply.enterprise_category.should == "producer_shop" - producer_sell_own_cant_supply.enterprise_category.should == "producer_shop" - producer_sell_none_can_supply.enterprise_category.should == "producer" - producer_sell_none_cant_supply.enterprise_category.should == "producer_profile" - non_producer_sell_all_can_supply.enterprise_category.should == "hub" - non_producer_sell_all_cant_supply.enterprise_category.should == "hub" - non_producer_sell_own_can_supply.enterprise_category.should == "hub" - non_producer_sell_own_cant_supply.enterprise_category.should == "hub" - non_producer_sell_none_can_supply.enterprise_category.should == "hub_profile" - non_producer_sell_none_cant_supply.enterprise_category.should == "hub_profile" + producer_sell_all.category.should == :producer_hub + producer_sell_own.category.should == :producer_shop + producer_sell_none.category.should == :producer + non_producer_sell_all.category.should == :hub + non_producer_sell_own.category.should == :hub + non_producer_sell_none.category.should == :hub_profile end end end diff --git a/spec/models/order_cycle_spec.rb b/spec/models/order_cycle_spec.rb index 9785d5ed2d..56aa51a0d0 100644 --- a/spec/models/order_cycle_spec.rb +++ b/spec/models/order_cycle_spec.rb @@ -44,8 +44,8 @@ describe OrderCycle do end it "finds order cycles accessible by a user" do - e1 = create(:enterprise, is_primary_producer: true, is_distributor: true) - e2 = create(:enterprise, is_primary_producer: true, is_distributor: true) + e1 = create(:enterprise, is_primary_producer: true, sells: "any") + e2 = create(:enterprise, is_primary_producer: true, sells: "any") user = create(:user, enterprises: [e2], spree_roles: []) user.spree_roles = [] diff --git a/spec/models/spree/ability_spec.rb b/spec/models/spree/ability_spec.rb index 796aed2592..c44601bb86 100644 --- a/spec/models/spree/ability_spec.rb +++ b/spec/models/spree/ability_spec.rb @@ -9,13 +9,13 @@ module Spree describe "broad permissions" do subject { AbilityDecorator.new(user) } let(:user) { create(:user) } - let(:enterprise_full) { create(:enterprise, type: 'full') } - let(:enterprise_single) { create(:enterprise, type: 'single') } - let(:enterprise_profile) { create(:enterprise, type: 'profile') } + let(:enterprise_any) { create(:enterprise, sells: 'any') } + let(:enterprise_own) { create(:enterprise, sells: 'own') } + let(:enterprise_none) { create(:enterprise, sells: 'none') } - context "as manager of a 'full' type enterprise" do + context "as manager of a 'any' type enterprise" do before do - user.enterprise_roles.create! enterprise: enterprise_full + user.enterprise_roles.create! enterprise: enterprise_any end it { subject.can_manage_products?(user).should be_true } @@ -23,9 +23,9 @@ module Spree it { subject.can_manage_orders?(user).should be_true } end - context "as manager of a 'single' type enterprise" do + context "as manager of a 'own' type enterprise" do before do - user.enterprise_roles.create! enterprise: enterprise_single + user.enterprise_roles.create! enterprise: enterprise_own end it { subject.can_manage_products?(user).should be_true } @@ -33,9 +33,9 @@ module Spree it { subject.can_manage_orders?(user).should be_true } end - context "as manager of a 'profile' type enterprise" do + context "as manager of a 'none' type enterprise" do before do - user.enterprise_roles.create! enterprise: enterprise_profile + user.enterprise_roles.create! enterprise: enterprise_none end it { subject.can_manage_products?(user).should be_true } @@ -256,15 +256,15 @@ module Spree end - context 'Order Cycle co-ordinator' do - + context 'Order Cycle co-ordinator, distriutor enterprise manager' do let (:user) do user = create(:user) user.spree_roles = [] - s1.enterprise_roles.build(user: user).save + d1.enterprise_roles.build(user: user).save user end - let(:oc1) { create(:simple_order_cycle, {coordinator: s1}) } + + let(:oc1) { create(:simple_order_cycle, {coordinator: d1}) } let(:oc2) { create(:simple_order_cycle) } it "should be able to read/write OrderCycles they are the co-ordinator of" do @@ -282,6 +282,10 @@ module Spree it "should be able to read/write EnterpriseFees" do should have_ability([:admin, :index, :read, :create, :edit, :bulk_update, :destroy], for: EnterpriseFee) end + + it "should be able to add enterprises to order cycles" do + should have_ability([:admin, :index, :for_order_cycle, :create], for: Enterprise) + end end context 'enterprise manager' do @@ -301,7 +305,7 @@ module Spree end it 'should have the ability administrate and create enterpises' do - should have_ability([:admin, :index, :for_order_cycle, :create], for: Enterprise) + should have_ability([:admin, :index, :create], for: Enterprise) end end end