From 3775cd29cb93ea93b995c15f976801083fe6d9a9 Mon Sep 17 00:00:00 2001 From: Rafael Schouten Date: Thu, 25 Sep 2014 11:34:49 +1000 Subject: [PATCH 01/11] generalise search filter to any enterprise --- .../javascripts/darkswarm/filters/filter_hubs.js.coffee | 9 --------- .../darkswarm/filters/filter_producers.js.coffee | 6 ------ .../darkswarm/filters/search_enterprises.js.coffee | 9 +++++++++ app/views/home/_hubs.html.haml | 2 +- app/views/producers/index.html.haml | 2 +- 5 files changed, 11 insertions(+), 17 deletions(-) delete mode 100644 app/assets/javascripts/darkswarm/filters/filter_hubs.js.coffee delete mode 100644 app/assets/javascripts/darkswarm/filters/filter_producers.js.coffee create mode 100644 app/assets/javascripts/darkswarm/filters/search_enterprises.js.coffee 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/search_enterprises.js.coffee b/app/assets/javascripts/darkswarm/filters/search_enterprises.js.coffee new file mode 100644 index 0000000000..20d0fd91c9 --- /dev/null +++ b/app/assets/javascripts/darkswarm/filters/search_enterprises.js.coffee @@ -0,0 +1,9 @@ +Darkswarm.filter 'searchEnterprises', (Matcher)-> + (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/views/home/_hubs.html.haml b/app/views/home/_hubs.html.haml index 24e4b037ba..b7a14fc7bf 100644 --- a/app/views/home/_hubs.html.haml +++ b/app/views/home/_hubs.html.haml @@ -17,7 +17,7 @@ .row{bindonce: true} .small-12.columns .active_table - %hub.active_table_node.row.animate-repeat{"ng-repeat" => "hub in filteredHubs = (hubs | hubs:query | taxons:activeTaxons | shipping:shippingTypes | showProfiles:show_profiles )", + %hub.active_table_node.row.animate-repeat{"ng-repeat" => "hub in filteredHubs = (hubs | searchEnterprises:query | taxons:activeTaxons | shipping:shippingTypes | showProfiles:show_profiles )", "ng-class" => "{'closed' : !open(), 'open' : open(), 'inactive' : !hub.active, 'current' : current()}", "scroll-after-load" => true, "ng-controller" => "HubNodeCtrl", diff --git a/app/views/producers/index.html.haml b/app/views/producers/index.html.haml index cba8011caf..095cff2a11 100644 --- a/app/views/producers/index.html.haml +++ b/app/views/producers/index.html.haml @@ -24,7 +24,7 @@ .active_table %producer.active_table_node.row.animate-repeat{id: "{{producer.path}}", "scroll-after-load" => true, - "ng-repeat" => "producer in producers = (Producers.visible | showProfiles:show_profiles | filterProducers:query | taxons:activeTaxons)", + "ng-repeat" => "producer in producers = (Producers.visible | showProfiles:show_profiles | searchEnterprises:query | taxons:activeTaxons)", "ng-controller" => "ProducerNodeCtrl", "ng-class" => "{'closed' : !open(), 'open' : open(), 'inactive' : !producer.active}", id: "{{producer.hash}}"} From 0e2774882f2ff4e58cab17b29b2cf847fb75482d Mon Sep 17 00:00:00 2001 From: Rafael Schouten Date: Thu, 25 Sep 2014 13:03:18 +1000 Subject: [PATCH 02/11] dry enterprise angular --- ...offee => enterprises_controller.js.coffee} | 10 +++-- .../producers_controller.js.coffee | 14 ------ ....js.coffee => enterproise_modal.js.coffee} | 2 +- .../directives/producer_modal.js.coffee | 10 ----- .../services/enterprise_modal.js.coffee | 7 +++ .../darkswarm/services/enterprises.js.coffee | 15 ++++--- .../darkswarm/services/hubs.js.coffee | 9 ---- .../darkswarm/services/map.js.coffee | 6 +-- .../darkswarm/services/map_modal.js.coffee | 12 ----- .../darkswarm/services/producers.js.coffee | 7 --- ...l.html.haml => enterprise_modal.html.haml} | 0 .../templates/map_modal_producer.html.haml | 4 -- .../templates/producer_modal.html.haml | 3 -- app/views/home/_hubs.html.haml | 4 +- app/views/producers/index.html.haml | 4 +- .../filters/filter_hubs_spec.js.coffee | 45 ------------------- .../filters/filter_producers_spec.js.coffee | 28 ------------ .../filters/search_enterprises_spec.js.coffee | 45 +++++++++++++++++++ 18 files changed, 76 insertions(+), 149 deletions(-) rename app/assets/javascripts/darkswarm/controllers/{hubs_controller.js.coffee => enterprises_controller.js.coffee} (61%) delete mode 100644 app/assets/javascripts/darkswarm/controllers/producers_controller.js.coffee rename app/assets/javascripts/darkswarm/directives/{hub_modal.js.coffee => enterproise_modal.js.coffee} (84%) delete mode 100644 app/assets/javascripts/darkswarm/directives/producer_modal.js.coffee create mode 100644 app/assets/javascripts/darkswarm/services/enterprise_modal.js.coffee delete mode 100644 app/assets/javascripts/darkswarm/services/hubs.js.coffee delete mode 100644 app/assets/javascripts/darkswarm/services/map_modal.js.coffee delete mode 100644 app/assets/javascripts/darkswarm/services/producers.js.coffee rename app/assets/javascripts/templates/{hub_modal.html.haml => enterprise_modal.html.haml} (100%) delete mode 100644 app/assets/javascripts/templates/map_modal_producer.html.haml delete mode 100644 app/assets/javascripts/templates/producer_modal.html.haml delete mode 100644 spec/javascripts/unit/darkswarm/filters/filter_hubs_spec.js.coffee delete mode 100644 spec/javascripts/unit/darkswarm/filters/filter_producers_spec.js.coffee create mode 100644 spec/javascripts/unit/darkswarm/filters/search_enterprises_spec.js.coffee diff --git a/app/assets/javascripts/darkswarm/controllers/hubs_controller.js.coffee b/app/assets/javascripts/darkswarm/controllers/enterprises_controller.js.coffee similarity index 61% rename from app/assets/javascripts/darkswarm/controllers/hubs_controller.js.coffee rename to app/assets/javascripts/darkswarm/controllers/enterprises_controller.js.coffee index b44d63eadf..dc1218a14b 100644 --- a/app/assets/javascripts/darkswarm/controllers/hubs_controller.js.coffee +++ b/app/assets/javascripts/darkswarm/controllers/enterprises_controller.js.coffee @@ -1,13 +1,15 @@ -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.filtersActive = false $scope.show_profiles = false - $scope.openModal = MapModal.open $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/directives/hub_modal.js.coffee b/app/assets/javascripts/darkswarm/directives/enterproise_modal.js.coffee similarity index 84% rename from app/assets/javascripts/darkswarm/directives/hub_modal.js.coffee rename to app/assets/javascripts/darkswarm/directives/enterproise_modal.js.coffee index 6eb0299ab4..60f3810f41 100644 --- a/app/assets/javascripts/darkswarm/directives/hub_modal.js.coffee +++ b/app/assets/javascripts/darkswarm/directives/enterproise_modal.js.coffee @@ -1,4 +1,4 @@ -Darkswarm.directive "hubModal", ($modal)-> +Darkswarm.directive "enterpriseModal", ($modal)-> restrict: 'E' replace: true template: "{{enterprise.name}}" diff --git a/app/assets/javascripts/darkswarm/directives/producer_modal.js.coffee b/app/assets/javascripts/darkswarm/directives/producer_modal.js.coffee deleted file mode 100644 index af2b13f157..0000000000 --- a/app/assets/javascripts/darkswarm/directives/producer_modal.js.coffee +++ /dev/null @@ -1,10 +0,0 @@ -Darkswarm.directive "producerModal", ($modal)-> - restrict: 'E' - replace: true - template: "" - transclude: true - link: (scope, elem, attrs, ctrl)-> - elem.on "click", (ev)=> - ev.stopPropagation() - scope.modalInstance = $modal.open(controller: ctrl, templateUrl: 'producer_modal.html', scope: scope) - 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..1cd0727cd8 --- /dev/null +++ b/app/assets/javascripts/darkswarm/services/enterprise_modal.js.coffee @@ -0,0 +1,7 @@ +Darkswarm.factory "EnterpriseModal", ($modal, $rootScope)-> + 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..2451c14739 100644 --- a/app/assets/javascripts/darkswarm/services/enterprises.js.coffee +++ b/app/assets/javascripts/darkswarm/services/enterprises.js.coffee @@ -1,13 +1,17 @@ -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: {} # id/object pairs for lookup constructor: -> - @enterprises = enterprises + @enterprises = visibleFilter enterprises for enterprise in enterprises @enterprises_by_id[enterprise.id] = enterprise @dereferenceEnterprises() @dereferenceTaxons() - + @producers = @enterprises.filter (enterprise)-> + enterprise.is_primary_producer + @hubs = @enterprises.filter (enterprise)-> + enterprise.is_distributor + dereferenceEnterprises: -> if CurrentHub.hub?.id CurrentHub.hub = @enterprises_by_id[CurrentHub.hub.id] @@ -16,6 +20,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 ac7dc3a0eb..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.is_distributor - @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/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/templates/hub_modal.html.haml b/app/assets/javascripts/templates/enterprise_modal.html.haml similarity index 100% rename from app/assets/javascripts/templates/hub_modal.html.haml rename to app/assets/javascripts/templates/enterprise_modal.html.haml diff --git a/app/assets/javascripts/templates/map_modal_producer.html.haml b/app/assets/javascripts/templates/map_modal_producer.html.haml deleted file mode 100644 index dff26519d3..0000000000 --- a/app/assets/javascripts/templates/map_modal_producer.html.haml +++ /dev/null @@ -1,4 +0,0 @@ -%ng-include{src: "'partials/enterprise_header.html'"} -%ng-include{src: "'partials/enterprise_details.html'"} -%ng-include{src: "'partials/hub_actions.html'"} -%ng-include{src: "'partials/close.html'"} diff --git a/app/assets/javascripts/templates/producer_modal.html.haml b/app/assets/javascripts/templates/producer_modal.html.haml deleted file mode 100644 index db6f927e21..0000000000 --- a/app/assets/javascripts/templates/producer_modal.html.haml +++ /dev/null @@ -1,3 +0,0 @@ -%ng-include{src: "'partials/enterprise_header.html'"} -%ng-include{src: "'partials/enterprise_details.html'"} -%ng-include{src: "'partials/close.html'"} diff --git a/app/views/home/_hubs.html.haml b/app/views/home/_hubs.html.haml index b7a14fc7bf..9e9215ff83 100644 --- a/app/views/home/_hubs.html.haml +++ b/app/views/home/_hubs.html.haml @@ -1,5 +1,5 @@ = inject_enterprises -#hubs.hubs{"ng-controller" => "HubsCtrl"} +#hubs.hubs{"ng-controller" => "EnterprisesCtrl"} .row .small-12.columns %h1 Shop in your local area @@ -17,7 +17,7 @@ .row{bindonce: true} .small-12.columns .active_table - %hub.active_table_node.row.animate-repeat{"ng-repeat" => "hub in filteredHubs = (hubs | searchEnterprises:query | taxons:activeTaxons | shipping:shippingTypes | showProfiles:show_profiles )", + %hub.active_table_node.row.animate-repeat{"ng-repeat" => "hub in hubs = (Enterprises.hubs | searchEnterprises:query | taxons:activeTaxons | shipping:shippingTypes | showProfiles:show_profiles | orderBy:['-active', '+orders_close_at'])", "ng-class" => "{'closed' : !open(), 'open' : open(), 'inactive' : !hub.active, 'current' : current()}", "scroll-after-load" => true, "ng-controller" => "HubNodeCtrl", diff --git a/app/views/producers/index.html.haml b/app/views/producers/index.html.haml index 095cff2a11..e012f4c1ee 100644 --- a/app/views/producers/index.html.haml +++ b/app/views/producers/index.html.haml @@ -1,5 +1,5 @@ = inject_enterprises -.producers.pad-top{"ng-controller" => "ProducersCtrl"} +.producers.pad-top{"ng-controller" => "EnterprisesCtrl"} .row .small-12.columns.pad-top %h1 Find local producers @@ -24,7 +24,7 @@ .active_table %producer.active_table_node.row.animate-repeat{id: "{{producer.path}}", "scroll-after-load" => true, - "ng-repeat" => "producer in producers = (Producers.visible | showProfiles:show_profiles | searchEnterprises:query | taxons:activeTaxons)", + "ng-repeat" => "producer in producers = (Enterprises.producers | showProfiles:show_profiles | searchEnterprises:query | taxons:activeTaxons)", "ng-controller" => "ProducerNodeCtrl", "ng-class" => "{'closed' : !open(), 'open' : open(), 'inactive' : !producer.active}", id: "{{producer.hash}}"} 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..61e58071e2 --- /dev/null +++ b/spec/javascripts/unit/darkswarm/filters/search_enterprises_spec.js.coffee @@ -0,0 +1,45 @@ +describe 'filtering Enterprises', -> + filter = null + searchEnterprises = 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 = $filter('enterprises') + + it 'has a enterprise filter', -> + expect(filter('enterprises')).not.toBeNull() + + it "filters by name", -> + expect(searchEnterprises(enterprises, 'donkeys').length).toEqual 1 + + it "is case insensitive", -> + expect(searchEnterprises(enterprises, 'DONKEYS').length).toEqual 1 + + it "filters by state", -> + expect(searchEnterprises(enterprises, 'kansas').length).toEqual 1 + + it "filters by zipcode", -> + expect(searchEnterprises(enterprises, 'cats').length).toEqual 1 + + it "gives all enterprises when no argument is specified", -> + expect(searchEnterprises(enterprises, '').length).toEqual 2 + + it "does not filter by anything else", -> + expect(searchEnterprises(enterprises, 'roger').length).toEqual 0 From 096324cf5ede02700f88610bc3332a6502912db9 Mon Sep 17 00:00:00 2001 From: Rafael Schouten Date: Thu, 25 Sep 2014 13:46:08 +1000 Subject: [PATCH 03/11] bugfix filters --- app/views/home/_hubs.html.haml | 2 +- app/views/producers/_filters.html.haml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/home/_hubs.html.haml b/app/views/home/_hubs.html.haml index 9e9215ff83..b80b9305a3 100644 --- a/app/views/home/_hubs.html.haml +++ b/app/views/home/_hubs.html.haml @@ -26,7 +26,7 @@ = render partial: 'home/skinny' = render partial: 'home/fat' - .row{"ng-show" => "filteredHubs.length == 0"} + .row{"ng-show" => "hubs.length == 0"} .columns.small-12 %p.no-results Sorry, no results found for diff --git a/app/views/producers/_filters.html.haml b/app/views/producers/_filters.html.haml index 37bf55f7c7..cd36389c8b 100644 --- a/app/views/producers/_filters.html.haml +++ b/app/views/producers/_filters.html.haml @@ -8,6 +8,6 @@ .light Filter by Type %ul.small-block-grid-2.medium-block-grid-4.large-block-grid-6 - %taxon-selector{objects: "Producers.visible | filterProducers:query ", + %taxon-selector{objects: "Enterprises.producers | searchEnterprises:query ", results: "activeTaxons"} From bab9123ca81e3f47e57f070777066c5ab4f8a9d1 Mon Sep 17 00:00:00 2001 From: Rafael Schouten Date: Thu, 25 Sep 2014 14:01:06 +1000 Subject: [PATCH 04/11] delete unused javascript --- app/assets/javascripts/search/all.js | 18 - .../gmaps4rails/gmaps4rails.base.js.coffee | 444 ------------------ .../gmaps4rails/gmaps4rails.bing.js.coffee | 174 ------- .../gmaps4rails.googlemaps.js.coffee | 339 ------------- .../gmaps4rails.mapquest.js.coffee | 145 ------ .../gmaps4rails.openlayers.js.coffee | 261 ---------- .../javascripts/search/jquery.backstretch.js | 4 - .../javascripts/search/jquery.offcanvas.js | 62 --- .../search/modernizr.foundation.js | 4 - .../javascripts/shop/checkout.js.coffee | 3 - app/assets/javascripts/store/all.js | 15 - .../store/checkout_adjustments.js.coffee | 8 - .../store/controllers/cart.js.coffee | 20 - .../store/factories/cart.js.coffee | 11 - app/assets/javascripts/store/products.js | 47 -- .../javascripts/store/shop_front.js.coffee | 4 - 16 files changed, 1559 deletions(-) delete mode 100644 app/assets/javascripts/search/all.js delete mode 100644 app/assets/javascripts/search/gmaps4rails/gmaps4rails.base.js.coffee delete mode 100644 app/assets/javascripts/search/gmaps4rails/gmaps4rails.bing.js.coffee delete mode 100644 app/assets/javascripts/search/gmaps4rails/gmaps4rails.googlemaps.js.coffee delete mode 100644 app/assets/javascripts/search/gmaps4rails/gmaps4rails.mapquest.js.coffee delete mode 100644 app/assets/javascripts/search/gmaps4rails/gmaps4rails.openlayers.js.coffee delete mode 100644 app/assets/javascripts/search/jquery.backstretch.js delete mode 100644 app/assets/javascripts/search/jquery.offcanvas.js delete mode 100644 app/assets/javascripts/search/modernizr.foundation.js delete mode 100644 app/assets/javascripts/shop/checkout.js.coffee delete mode 100644 app/assets/javascripts/store/all.js delete mode 100644 app/assets/javascripts/store/checkout_adjustments.js.coffee delete mode 100644 app/assets/javascripts/store/controllers/cart.js.coffee delete mode 100644 app/assets/javascripts/store/factories/cart.js.coffee delete mode 100644 app/assets/javascripts/store/products.js delete mode 100644 app/assets/javascripts/store/shop_front.js.coffee 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('
').css(r).appendTo(this.$container);this.isBody||(c=this.$container.css("position"),b=this.$container.css("zIndex"),this.$container.css({position:"static"===c?"relative":c,zIndex:"auto"===b?0:b,background:"none"}),this.$wrap.css({zIndex:-999998}));this.$wrap.css({position:this.isBody&&l?"fixed":"absolute"});this.index=0;this.show(this.index);a(d).on("resize.backstretch",a.proxy(this.resize,this)).on("orientationchange.backstretch",a.proxy(function(){this.isBody&&0===d.pageYOffset&&(d.scrollTo(0,1),this.resize())},this))};q.prototype={resize:function(){try{var a={left:0,top:0},b=this.isBody?this.$root.width():this.$root.innerWidth(),e=b,g=this.isBody?d.innerHeight?d.innerHeight:this.$root.height():this.$root.innerHeight(),j=e/this.$img.data("ratio"),f;j>=g?(f=(j-g)/2,this.options.centeredY&&(a.top="-"+f+"px")):(j=g,e=j*this.$img.data("ratio"),f=(e-b)/2,this.options.centeredX&&(a.left="-"+f+"px"));this.$wrap.css({width:b,height:g}).find("img:not(.deleteable)").css({width:e,height:j}).css(a)}catch(h){}return this},show:function(c){if(!(Math.abs(c)>this.images.length-1)){var b=this,e=b.$wrap.find("img").addClass("deleteable"),d={relatedTarget:b.$container[0]};b.$container.trigger(a.Event("backstretch.before",d),[b,c]);this.index=c;clearInterval(b.interval);b.$img=a("").css(s).bind("load",function(f){var h=this.width||a(f.target).width();f=this.height||a(f.target).height();a(this).data("ratio",h/f);a(this).fadeIn(b.options.speed||b.options.fade,function(){e.remove();b.paused||b.cycle();a(["after","show"]).each(function(){b.$container.trigger(a.Event("backstretch."+this,d),[b,c])})});b.resize()}).appendTo(b.$wrap);b.$img.attr("src",b.images[c]);return b}},next:function(){return this.show(this.indexe||d.operamini&&"[object OperaMini]"==={}.toString.call(d.operamini)||n&&7458>t||-1e||h&&6>h||"palmGetResource"in d&&e&&534>e||-1=k)})(jQuery,window); \ No newline at end of file diff --git a/app/assets/javascripts/search/jquery.offcanvas.js b/app/assets/javascripts/search/jquery.offcanvas.js deleted file mode 100644 index 4f65c081b9..0000000000 --- a/app/assets/javascripts/search/jquery.offcanvas.js +++ /dev/null @@ -1,62 +0,0 @@ -//;(function (window, document, $) { -// alert($("#sidebarButton").html()); -//}(this, document, jQuery)); - - - - -//;(function (window, document, $) { -// // Set the negative margin on the top menu for slide-menu pages -// var $selector1 = $('#topMenu'), -// events = 'click.fndtn'; -// if ($selector1.length > 0) $selector1.css("margin-top", $selector1.height() * -1); -// -// // Watch for clicks to show the sidebar -// var $selector2 = $('#sidebarButton'); -// if ($selector2.length > 0) { -// $('#sidebarButton').on(events, function (e) { -// console.log("testing one two three"); -// e.preventDefault(); -// $('body').toggleClass('active'); -// }); -// } -// else { -// console.log("not supposed to be there"); -// } -// -// // Watch for clicks to show the menu for slide-menu pages -// var $selector3 = $('#menuButton'); -// if ($selector3.length > 0) { -// $('#menuButton').on(events, function (e) { -// e.preventDefault(); -// $('body').toggleClass('active-menu'); -// }); -// } -// -// // // Adjust sidebars and sizes when resized -// // $(window).resize(function() { -// // // if (!navigator.userAgent.match(/Android/i)) $('body').removeClass('active'); -// // var $selector4 = $('#topMenu'); -// // if ($selector4.length > 0) $selector4.css("margin-top", $selector4.height() * -1); -// // }); -// -// // Switch panels for the paneled nav on mobile -// var $selector5 = $('#switchPanels'); -// if ($selector5.length > 0) { -// $('#switchPanels dd').on(events, function (e) { -// e.preventDefault(); -// var switchToPanel = $(this).children('a').attr('href'), -// switchToIndex = $(switchToPanel).index(); -// $(this).toggleClass('active').siblings().removeClass('active'); -// $(switchToPanel).parent().css("left", (switchToIndex * (-100) + '%')); -// }); -// } -// -// $('#nav li a').on(events, function (e) { -// alert("test"); -// e.preventDefault(); -// var href = $(this).attr('href'), -// $target = $(href); -// $('html, body').animate({scrollTop : $target.offset().top}, 300); -// }); -//}(this, document, jQuery)); diff --git a/app/assets/javascripts/search/modernizr.foundation.js b/app/assets/javascripts/search/modernizr.foundation.js deleted file mode 100644 index 4eb3d0655f..0000000000 --- a/app/assets/javascripts/search/modernizr.foundation.js +++ /dev/null @@ -1,4 +0,0 @@ -/* Modernizr 2.6.2 (Custom Build) | MIT & BSD - * Build: http://modernizr.com/download/#-inlinesvg-svg-svgclippaths-touch-shiv-mq-cssclasses-teststyles-prefixes-ie8compat-load - */ -;window.Modernizr=function(a,b,c){function y(a){j.cssText=a}function z(a,b){return y(m.join(a+";")+(b||""))}function A(a,b){return typeof a===b}function B(a,b){return!!~(""+a).indexOf(b)}function C(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:A(f,"function")?f.bind(d||b):f}return!1}var d="2.6.2",e={},f=!0,g=b.documentElement,h="modernizr",i=b.createElement(h),j=i.style,k,l={}.toString,m=" -webkit- -moz- -o- -ms- ".split(" "),n={svg:"http://www.w3.org/2000/svg"},o={},p={},q={},r=[],s=r.slice,t,u=function(a,c,d,e){var f,i,j,k,l=b.createElement("div"),m=b.body,n=m||b.createElement("body");if(parseInt(d,10))while(d--)j=b.createElement("div"),j.id=e?e[d]:h+(d+1),l.appendChild(j);return f=["­",'"].join(""),l.id=h,(m?l:n).innerHTML+=f,n.appendChild(l),m||(n.style.background="",n.style.overflow="hidden",k=g.style.overflow,g.style.overflow="hidden",g.appendChild(n)),i=c(l,a),m?l.parentNode.removeChild(l):(n.parentNode.removeChild(n),g.style.overflow=k),!!i},v=function(b){var c=a.matchMedia||a.msMatchMedia;if(c)return c(b).matches;var d;return u("@media "+b+" { #"+h+" { position: absolute; } }",function(b){d=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle)["position"]=="absolute"}),d},w={}.hasOwnProperty,x;!A(w,"undefined")&&!A(w.call,"undefined")?x=function(a,b){return w.call(a,b)}:x=function(a,b){return b in a&&A(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=s.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(s.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(s.call(arguments)))};return e}),o.touch=function(){var c;return"ontouchstart"in a||a.DocumentTouch&&b instanceof DocumentTouch?c=!0:u(["@media (",m.join("touch-enabled),("),h,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(a){c=a.offsetTop===9}),c},o.svg=function(){return!!b.createElementNS&&!!b.createElementNS(n.svg,"svg").createSVGRect},o.inlinesvg=function(){var a=b.createElement("div");return a.innerHTML="",(a.firstChild&&a.firstChild.namespaceURI)==n.svg},o.svgclippaths=function(){return!!b.createElementNS&&/SVGClipPath/.test(l.call(b.createElementNS(n.svg,"clipPath")))};for(var D in o)x(o,D)&&(t=D.toLowerCase(),e[t]=o[D](),r.push((e[t]?"":"no-")+t));return e.addTest=function(a,b){if(typeof a=="object")for(var d in a)x(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},y(""),i=k=null,function(a,b){function k(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function l(){var a=r.elements;return typeof a=="string"?a.split(" "):a}function m(a){var b=i[a[g]];return b||(b={},h++,a[g]=h,i[h]=b),b}function n(a,c,f){c||(c=b);if(j)return c.createElement(a);f||(f=m(c));var g;return f.cache[a]?g=f.cache[a].cloneNode():e.test(a)?g=(f.cache[a]=f.createElem(a)).cloneNode():g=f.createElem(a),g.canHaveChildren&&!d.test(a)?f.frag.appendChild(g):g}function o(a,c){a||(a=b);if(j)return a.createDocumentFragment();c=c||m(a);var d=c.frag.cloneNode(),e=0,f=l(),g=f.length;for(;e",f="hidden"in a,j=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){f=!0,j=!0}})();var r={elements:c.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",shivCSS:c.shivCSS!==!1,supportsUnknownElements:j,shivMethods:c.shivMethods!==!1,type:"default",shivDocument:q,createElement:n,createDocumentFragment:o};a.html5=r,q(b)}(this,b),e._version=d,e._prefixes=m,e.mq=v,e.testStyles=u,g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+r.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f - $('#cart_adjustments').hide() - - $('th.cart-adjustment-header').html('Distribution...') - $('th.cart-adjustment-header a').click -> - $('#cart_adjustments').toggle() - $('th.cart-adjustment-header a').html('Distribution') - false diff --git a/app/assets/javascripts/store/controllers/cart.js.coffee b/app/assets/javascripts/store/controllers/cart.js.coffee deleted file mode 100644 index cc7538249e..0000000000 --- a/app/assets/javascripts/store/controllers/cart.js.coffee +++ /dev/null @@ -1,20 +0,0 @@ -'use strict' - -angular.module('store', ['ngResource']). - controller('CartCtrl', ['$scope', '$window', 'CartFactory', ($scope, $window, CartFactory) -> - - $scope.state = 'Empty' - - $scope.loadCart = (cart_id) -> - if cart_id? - CartFactory.load cart_id, (cart) -> - $scope.cart = cart - if $scope.cart?.orders?.length > 0 - $scope.state = "There's something there...." - - $scope.addVariant = (variant, quantity) -> - - ]) - .config(['$httpProvider', ($httpProvider) -> - $httpProvider.defaults.headers.common['X-CSRF-Token'] = $('meta[name=csrf-token]').attr('content') - ]) diff --git a/app/assets/javascripts/store/factories/cart.js.coffee b/app/assets/javascripts/store/factories/cart.js.coffee deleted file mode 100644 index e327fc336d..0000000000 --- a/app/assets/javascripts/store/factories/cart.js.coffee +++ /dev/null @@ -1,11 +0,0 @@ -'use strict' - -angular.module('store'). - factory('CartFactory', ['$resource', '$window', '$http', ($resource, $window, $http) -> - Cart = $resource '/open_food_network/cart/:cart_id.json', {}, - { 'show': { method: 'GET'} } - - load: (id, callback) -> - Cart.show {cart_id: id}, (cart) -> - callback(cart) - ]) diff --git a/app/assets/javascripts/store/products.js b/app/assets/javascripts/store/products.js deleted file mode 100644 index 127e8ce28f..0000000000 --- a/app/assets/javascripts/store/products.js +++ /dev/null @@ -1,47 +0,0 @@ -/** - * Update the price on the product details page in real time when the variant or the quantity are changed. - **/ - -$(document).ready(function() { - // Product page with variant choice - $("#product-variants input[type='radio']").change(products_update_price_with_variant); - $("#quantity").change(products_update_price_with_variant); - $("#quantity").change(); - - // Product page with master price only - $(".add-to-cart input.title:not(#quantity):not(.max_quantity)").change(products_update_price_without_variant).change(); - - // Product page other - $("#distributor_id").change(function() { - var distributor_html = distributors[$(this).val()]; - if(!distributor_html) { - distributor_html = 'When you select a distributor for your order, their address and pickup times will be displayed here.'; - } - $("#product-distributor-details .distributor-details").html(distributor_html); - }); -}); - - -function products_update_price_with_variant() { - var variant_price = $("#product-variants input[type='radio']:checked").parent().find("span.price").html().trim(); - variant_price = variant_price.substr(2, variant_price.length-3); - - var quantity = $("#quantity").val(); - - $("#product-price span.price").html("$"+(parseFloat(variant_price) * parseInt(quantity)).toFixed(2)); -} - - -function products_update_price_without_variant() { - var master_price = $("#product-price span.price").data('master-price'); - if(master_price == null) { - // Store off the master price - master_price = $("#product-price span.price").html(); - master_price = master_price.substring(1); - $("#product-price span.price").data('master-price', master_price); - } - - var quantity = $(this).val(); - - $("#product-price span.price").html("$"+(parseFloat(master_price)*parseInt(quantity)).toFixed(2)); -} diff --git a/app/assets/javascripts/store/shop_front.js.coffee b/app/assets/javascripts/store/shop_front.js.coffee deleted file mode 100644 index 1a7044732f..0000000000 --- a/app/assets/javascripts/store/shop_front.js.coffee +++ /dev/null @@ -1,4 +0,0 @@ -$(document).ready -> - $("#order_order_cycle_id").change -> $("#order_cycle_select").submit() - $("#reset_order_cycle").click -> return false unless confirm "Changing your collection date will clear your cart." - $(".shop-distributor.empties-cart").click -> return false unless confirm "Changing your location will clear your cart." From 04c5dff497c0f9b286f2ca7ab408e9bc50fca8f5 Mon Sep 17 00:00:00 2001 From: Rafael Schouten Date: Thu, 25 Sep 2014 19:47:00 +1000 Subject: [PATCH 05/11] fixup merge --- app/views/producers/index.html.haml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/app/views/producers/index.html.haml b/app/views/producers/index.html.haml index 371c873f64..cf5bd4bed9 100644 --- a/app/views/producers/index.html.haml +++ b/app/views/producers/index.html.haml @@ -1,10 +1,5 @@ -<<<<<<< HEAD = inject_enterprises .producers.pad-top{"ng-controller" => "EnterprisesCtrl"} -======= -= inject_enterprises -.producers.pad-top{"ng-controller" => "ProducersCtrl"} ->>>>>>> master .row .small-12.columns.pad-top %h1 Find local producers From 4b576d1590e0b3b4289d30a2b527306f92ae3650 Mon Sep 17 00:00:00 2001 From: Rafael Schouten Date: Thu, 25 Sep 2014 23:54:31 +1000 Subject: [PATCH 06/11] refactor enterprise specs --- .../darkswarm/services/enterprises.js.coffee | 3 +- .../filters/search_enterprises_spec.js.coffee | 19 +++----- .../services/enterprise_spec.js.coffee | 26 +++++++---- .../darkswarm/services/hubs_spec.js.coffee | 45 ------------------- .../services/producers_spec.js.coffee | 21 --------- 5 files changed, 27 insertions(+), 87 deletions(-) delete mode 100644 spec/javascripts/unit/darkswarm/services/hubs_spec.js.coffee delete mode 100644 spec/javascripts/unit/darkswarm/services/producers_spec.js.coffee diff --git a/app/assets/javascripts/darkswarm/services/enterprises.js.coffee b/app/assets/javascripts/darkswarm/services/enterprises.js.coffee index 2451c14739..b5136dec35 100644 --- a/app/assets/javascripts/darkswarm/services/enterprises.js.coffee +++ b/app/assets/javascripts/darkswarm/services/enterprises.js.coffee @@ -2,7 +2,7 @@ Darkswarm.factory 'Enterprises', (enterprises, CurrentHub, Taxons, Dereferencer, new class Enterprises enterprises_by_id: {} # id/object pairs for lookup constructor: -> - @enterprises = visibleFilter enterprises + @enterprises = enterprises for enterprise in enterprises @enterprises_by_id[enterprise.id] = enterprise @dereferenceEnterprises() @@ -10,6 +10,7 @@ Darkswarm.factory 'Enterprises', (enterprises, CurrentHub, Taxons, Dereferencer, @producers = @enterprises.filter (enterprise)-> enterprise.is_primary_producer @hubs = @enterprises.filter (enterprise)-> + enterprise.is_distributor dereferenceEnterprises: -> diff --git a/spec/javascripts/unit/darkswarm/filters/search_enterprises_spec.js.coffee b/spec/javascripts/unit/darkswarm/filters/search_enterprises_spec.js.coffee index 61e58071e2..2717e50cfb 100644 --- a/spec/javascripts/unit/darkswarm/filters/search_enterprises_spec.js.coffee +++ b/spec/javascripts/unit/darkswarm/filters/search_enterprises_spec.js.coffee @@ -1,6 +1,5 @@ describe 'filtering Enterprises', -> filter = null - searchEnterprises = null enterprises = [{ name: "frogs" other: "roger" @@ -20,26 +19,22 @@ describe 'filtering Enterprises', -> beforeEach -> module 'Darkswarm' inject ($filter) -> - filter = $filter - searchEnterprises = $filter('enterprises') - - it 'has a enterprise filter', -> - expect(filter('enterprises')).not.toBeNull() + filter = $filter('searchEnterprises') it "filters by name", -> - expect(searchEnterprises(enterprises, 'donkeys').length).toEqual 1 + expect(filter(enterprises, 'donkeys').length).toEqual 1 it "is case insensitive", -> - expect(searchEnterprises(enterprises, 'DONKEYS').length).toEqual 1 + expect(filter(enterprises, 'DONKEYS').length).toEqual 1 it "filters by state", -> - expect(searchEnterprises(enterprises, 'kansas').length).toEqual 1 + expect(filter(enterprises, 'kansas').length).toEqual 1 it "filters by zipcode", -> - expect(searchEnterprises(enterprises, 'cats').length).toEqual 1 + expect(filter(enterprises, 'cats').length).toEqual 1 it "gives all enterprises when no argument is specified", -> - expect(searchEnterprises(enterprises, '').length).toEqual 2 + expect(filter(enterprises, '').length).toEqual 2 it "does not filter by anything else", -> - expect(searchEnterprises(enterprises, 'roger').length).toEqual 0 + 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..a38517293f 100644 --- a/spec/javascripts/unit/darkswarm/services/enterprise_spec.js.coffee +++ b/spec/javascripts/unit/darkswarm/services/enterprise_spec.js.coffee @@ -1,24 +1,24 @@ 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, is_distributor: true, is_primary_producer: false, producers: [{id: 2}], taxons: [{id: 1}]}, + {id: 2, is_distributor: false, is_primary_producer: true, hubs: [{id: 1}]}, + {id: 3, is_distributor: false, is_primary_producer: true, hubs: [{id: 1}]} ] 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] @@ -36,3 +36,13 @@ describe "Enterprises service", -> 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 "delegates producers array to Enterprises", -> + expect(Enterprises.producers[0]).toBe enterprises[1] 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] From ceb978783c9ee99e1b9e61b1d033cf42bccb8095 Mon Sep 17 00:00:00 2001 From: Rafael Schouten Date: Fri, 26 Sep 2014 00:25:19 +1000 Subject: [PATCH 07/11] update missed taxon selector filter --- app/views/home/_filters.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/home/_filters.html.haml b/app/views/home/_filters.html.haml index ff13a0c33c..52fceb6688 100644 --- a/app/views/home/_filters.html.haml +++ b/app/views/home/_filters.html.haml @@ -10,7 +10,7 @@ .light Filter by Type %ul.small-block-grid-2.medium-block-grid-4.large-block-grid-5 - %taxon-selector{objects: "hubs | hubs:query", + %taxon-selector{objects: "Enterprises.hubs | searchEnterprises:query", results: "activeTaxons"} .small-12.large-3.columns %h5.tdhead From 206c8da0ba8faeb4124f14ba837cd7f80077b831 Mon Sep 17 00:00:00 2001 From: Rafael Schouten Date: Tue, 30 Sep 2014 23:53:45 +1000 Subject: [PATCH 08/11] remove unused css* --- app/assets/stylesheets/distributors.css.scss | 3 - app/assets/stylesheets/groups.css.scss | 3 - app/assets/stylesheets/shop/checkout.css.scss | 3 - app/assets/stylesheets/store/all.css | 13 - .../store/openfoodnetwork.css.scss | 381 ------------------ .../stylesheets/store/variables.css.scss | 64 --- .../store/variables_changes.css.scss | 1 - 7 files changed, 468 deletions(-) delete mode 100644 app/assets/stylesheets/distributors.css.scss delete mode 100644 app/assets/stylesheets/groups.css.scss delete mode 100644 app/assets/stylesheets/shop/checkout.css.scss delete mode 100644 app/assets/stylesheets/store/all.css delete mode 100644 app/assets/stylesheets/store/openfoodnetwork.css.scss delete mode 100644 app/assets/stylesheets/store/variables.css.scss delete mode 100644 app/assets/stylesheets/store/variables_changes.css.scss diff --git a/app/assets/stylesheets/distributors.css.scss b/app/assets/stylesheets/distributors.css.scss deleted file mode 100644 index de8cd669a0..0000000000 --- a/app/assets/stylesheets/distributors.css.scss +++ /dev/null @@ -1,3 +0,0 @@ -// Place all the styles related to the distributors controller here. -// They will automatically be included in application.css. -// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/groups.css.scss b/app/assets/stylesheets/groups.css.scss deleted file mode 100644 index c2a5f9013b..0000000000 --- a/app/assets/stylesheets/groups.css.scss +++ /dev/null @@ -1,3 +0,0 @@ -// Place all the styles related to the groups controller here. -// They will automatically be included in application.css. -// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/shop/checkout.css.scss b/app/assets/stylesheets/shop/checkout.css.scss deleted file mode 100644 index 727d410b19..0000000000 --- a/app/assets/stylesheets/shop/checkout.css.scss +++ /dev/null @@ -1,3 +0,0 @@ -// Place all the styles related to the Shop::Checkout controller here. -// They will automatically be included in application.css. -// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/store/all.css b/app/assets/stylesheets/store/all.css deleted file mode 100644 index c1d3d851bc..0000000000 --- a/app/assets/stylesheets/store/all.css +++ /dev/null @@ -1,13 +0,0 @@ -/* - * This is a manifest file that'll automatically include all the stylesheets available in this directory - * and any sub-directories. You're free to add application-wide styles to this file and they'll appear at - * the top of the compiled file, but it's generally better to create a new file per style scope. - * - - *= require store/spree_core - *= require store/spree_auth - *= require store/spree_promo - - *= require_self - *= require_tree . -*/ diff --git a/app/assets/stylesheets/store/openfoodnetwork.css.scss b/app/assets/stylesheets/store/openfoodnetwork.css.scss deleted file mode 100644 index f98642cc22..0000000000 --- a/app/assets/stylesheets/store/openfoodnetwork.css.scss +++ /dev/null @@ -1,381 +0,0 @@ -@import "screen"; -@import "compass/css3/border-radius"; - -/* General purpose styles */ - -a:hover { - color: lighten($link_text_color, 20) !important; -} - -/* Cleared div for clearing previous floating elements */ -div.cleared { - clear: both; -} - -p.hint { - margin: 0 0 0.5em 0; - padding: 0; - color: #6a6a6a; -} - -table { - tbody, tfoot { - tr { - &.alt, &.odd { - background-color: lighten($link_text_color, 75) !important; - } - } - } -} - - - -/* Style current distributor in main nav bar */ -#header { - margin-bottom: 40px; - - #logo { - position: relative; - margin-top: 40px; - padding-top: 10px; - - h1 { - position: absolute; - top: 10px; - left: 0px; - } - - .change-location { - position: absolute; - top: 22px; - right: -104px; - } - } -} - -nav #main-nav-bar { - position: absolute; - top: 0px; - left: 10px; - width: 100%; - - #link-to-cart { - position: relative; - top: 40px; - right: 16px; - } - - li { - &#current-distribution { - float: right; - clear: right; - margin: 0.5em 5px 0 0; - - a { - font-size: 12px; - padding: 0; - } - } - } -} - -nav#top-nav-bar { - position: relative; - z-index: 999; - margin-top: 20px; -} - - -/* Based on Spree's nav#taxonomies style. Copied instead of - * extended with SASS because SASS does not allow extending - * nested selectors. - */ -nav#filters { - .filter_name { - text-transform: uppercase; - border-bottom: 1px solid lighten($body_text_color, 60); - margin-bottom: 5px; - font-size: $main_navigation_header_font_size; - } - - .filter_choices { - padding-left: 20px; - margin-bottom: 5px; - list-style: disc outside; - - li { - a { - font-size: $main_navigation_font_size; - } - span.inactive { - color: #999; - } - } - } - - input[type=submit] { - margin-bottom: 15px; - } -} - - -/* Distributor and order cycle selection and display */ -#distribution-choice { - margin-bottom: 2em; - padding: 5px; - border: 2px solid #ccc; - @include border-radius(10px); -} - -#distribution-selection { - overflow: auto; - margin-bottom: 2em; - padding: 20px; - background-color: #f3f3f3; - - .distributors { - float: left; - margin-right: 4em; - - option.local { - background-color: #cfc; - } - option.remote { - background-color: #fcc; - } - } - - .order-cycles { - - select { - padding: 10px; - margin-top: 15px; - border: 2px solid white; - width: 100%; - } - - float: left; - - tr.local { - background-color: #cfc; - } - tr.remote { - background-color: #fcc; - } - } -} - -.countdown-panel { - background: url("../countdown.png") no-repeat left; - min-height: 60px; - min-width: 70px; - padding-left: 77px; -} - - -/* Style the product source on the product details page in the - * same manner as the product properties table above it. - */ -#product-source { - @extend #product-properties; -} -#product-properties td, #product-source td { - width: 50%; -} - - -/* Apply Spree's ul#products style to ul.product-listing. When viewing products - * split by distributor, a separate product listing is displayed for local and - * remote products, so the #products id is removed to avoid its duplication. - */ -ul.product-listing { - &:after { - content: " "; - display: block; - clear: both; - visibility: hidden; - line-height: 0; - height: 0; - } - - li { - text-align: center; - font-weight: bold; - margin-bottom: 20px; - - a { - display: block; - - &.info { - height: 35px; - margin-top: 5px; - font-size: $product_list_name_font_size; - color: $product_link_text_color; - border-bottom: 1px solid lighten($body_text_color, 60); - overflow: hidden; - } - } - - .product-image { - border: 1px solid lighten($body_text_color, 60); - padding: 5px; - min-height: 110px; - background-color: $product_background_color; - - &:hover { - border-color: $link_text_color; - } - - } - - .price { - color: $link_text_color; - font-size: $product_list_price_font_size; - padding-top: 5px; - display: block; - } - } -} - - -/* Enterprise description */ -.enterprise-description { - margin-bottom: 2em; -} - - -/* Supplier page distributor listing */ -#supplier-distributors li a.inactive { - color: #999; -} - - -/* Highlight local products in distributor-split product listings */ -#products-local ul { - margin-bottom: 1em; - padding: 10px; - @include border-radius(10px); - background-color: #def; -} - - -/* Distributor details on product details page */ -fieldset#product-distributor-details { - float: right; - margin-top: 0; - width: 250px; - @extend #shipping; -} - -#product-variants { - float: none; - - ul { - list-style-type: none; - } -} - - -/* Add to cart form on product details page */ -#cart-form { - .error-distributor { - font-size: 120%; - font-weight: bold; - color: #f00; - - a { - color: #f00; - text-decoration: underline; - } - } - - .distributor-fixed { - } -} - - -/* View cart form */ -#subtotal { - width: 100%; -} -.links { - float: right; - text-align: right; -} -#empty-cart { - float: left; - margin-top: 15px !important; - - p { - padding: 0; - } -} - -/* Checkout address page */ -#checkout .alternative-available-distributors { - padding-top: 30px; -} - - -/* Delivery fees table on checkout page */ -#delivery-fees { - clear: both; - padding-top: 6em; - - table#delivery { - width: 100%; - - tbody { - tr { - td.item-shipping-cost, td.item-shipping-method { - text-align: center; - } - td.item-shipping-cost { - @extend span.price; - @extend span.price.selling; - } - } - } - } - - .subtotal { - width: 100%; - text-align: right; - text-transform: uppercase; - margin-top: 15px; - - span.order-total { - @extend span.price; - } - } -} - -/* Alert for EFT Payment during checkout process */ -div#eft-payment-alert { - border: 2px solid red; - padding-left: 5px; -} - -/* Large 'Save and Continue/Process My Order' button under Order Summary on the checkout pages */ -#add_new_save_checkout_button { - display: none; - margin-top: 30px; - padding-top: 10px; - border-top: 1px solid #d9d9db; -} - -.secondary { - color: #6A6A6A; -} - -.hide { - display: none; -} - - -/* Distributor details */ -.distributor-details .next-collection-at { - font-size: 20px; - font-weight: bold; - color: #de790c; -} diff --git a/app/assets/stylesheets/store/variables.css.scss b/app/assets/stylesheets/store/variables.css.scss deleted file mode 100644 index 4cb074ae48..0000000000 --- a/app/assets/stylesheets/store/variables.css.scss +++ /dev/null @@ -1,64 +0,0 @@ -/*--------------------------------------*/ -/* Colors -/*--------------------------------------*/ -$c_green: #8dba53 !default; /* Spree green */ -$c_red: #e45353 !default; /* Error red */ - -$layout_background_color: #FFFFFF !default; -$title_text_color: #404042 !default; -$body_text_color: #404042 !default; -$link_text_color: #00ADEE !default; - -$product_background_color: #FFFFFF !default; -$product_title_text_color: #404042 !default; -$product_body_text_color: #404042 !default; -$product_link_text_color: #BBBBBB !default; - -/*--------------------------------------*/ -/* Fonts import from remote -/*--------------------------------------*/ -@import url(//fonts.googleapis.com/css?family=Ubuntu:400,700,400italic,700italic|&subset=latin,cyrillic,greek,greek-ext,latin-ext,cyrillic-ext); - -/*--------------------------------------*/ -/* Font families -/*--------------------------------------*/ -$ff_base: 'Ubuntu', sans-serif !default; - -/*-------------------------------------- - | Font sizes - |-------------------------------------- - |- Navigation - | */ - $header_navigation_font_size: 14px !default; - $horizontal_navigation_font_size: 16px !default; - $main_navigation_header_font_size: 14px !default; - $main_navigation_font_size: 12px !default; -/*|------------------------------------ - |- Product Listing - | */ - $product_list_name_font_size: 12px !default; - $product_list_price_font_size: 16px !default; - $product_list_header_font_size: 20px !default; - $product_list_search_font_size: 14px !default; -/*|------------------------------------ - |- Product Details - | */ - $product_detail_name_font_size: 24px !default; - $product_detail_description_font_size: 12px !default; - $product_detail_price_font_size: 20px !default; - $product_detail_title_font_size: 14px !default; -/*|------------------------------------ - |- Basic - | */ - $heading_font_size: 24px !default; - $sub_heading_font_size: 14px !default; - $button_font_size: 12px !default; - $input_box_font_size: 13px !default; - $base_font_size: 12px !default; - $border_color: lighten($body_text_color, 60) !default; - $default_border: 1px solid $border_color !default; - $button_border_color: rgba(0, 138, 189, .75) !default; - $table_head_color: lighten($body_text_color, 60) !default; - - -@import "./store/variables_changes.css.scss"; diff --git a/app/assets/stylesheets/store/variables_changes.css.scss b/app/assets/stylesheets/store/variables_changes.css.scss deleted file mode 100644 index c4007abd2f..0000000000 --- a/app/assets/stylesheets/store/variables_changes.css.scss +++ /dev/null @@ -1 +0,0 @@ -$link_text_color: #006066; From 54b138b2ccebc5f3c1b0e2d1b5c32ba13cca12e2 Mon Sep 17 00:00:00 2001 From: Rafael Schouten Date: Wed, 1 Oct 2014 18:47:22 +1000 Subject: [PATCH 09/11] add transclusion to modal directive by default --- .../darkswarm/directives/enterprise_modal.js.coffee | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 app/assets/javascripts/darkswarm/directives/enterprise_modal.js.coffee diff --git a/app/assets/javascripts/darkswarm/directives/enterprise_modal.js.coffee b/app/assets/javascripts/darkswarm/directives/enterprise_modal.js.coffee new file mode 100644 index 0000000000..fa6378afe2 --- /dev/null +++ b/app/assets/javascripts/darkswarm/directives/enterprise_modal.js.coffee @@ -0,0 +1,9 @@ +Darkswarm.directive "enterpriseModal", ($modal)-> + restrict: 'E' + replace: true + template: "" + transclude: true + link: (scope, elem, attrs, ctrl)-> + elem.on "click", (ev)=> + ev.stopPropagation() + scope.modalInstance = $modal.open(controller: ctrl, templateUrl: 'enterprise_modal.html', scope: scope) From ccdcf16cecc421f28ad1bdf483a2e67d53b2f70b Mon Sep 17 00:00:00 2001 From: Rafael Schouten Date: Wed, 1 Oct 2014 18:47:50 +1000 Subject: [PATCH 10/11] rename file --- .../darkswarm/directives/enterproise_modal.js.coffee | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 app/assets/javascripts/darkswarm/directives/enterproise_modal.js.coffee diff --git a/app/assets/javascripts/darkswarm/directives/enterproise_modal.js.coffee b/app/assets/javascripts/darkswarm/directives/enterproise_modal.js.coffee deleted file mode 100644 index 60f3810f41..0000000000 --- a/app/assets/javascripts/darkswarm/directives/enterproise_modal.js.coffee +++ /dev/null @@ -1,8 +0,0 @@ -Darkswarm.directive "enterpriseModal", ($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) From 3877bed62b9793d865913eeb274340568eca448e Mon Sep 17 00:00:00 2001 From: Rafael Schouten Date: Wed, 1 Oct 2014 18:51:49 +1000 Subject: [PATCH 11/11] use enterprise modal --- app/views/groups/index.html.haml | 5 +++-- app/views/home/_fat.html.haml | 2 +- app/views/shop/products/_summary.html.haml | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/app/views/groups/index.html.haml b/app/views/groups/index.html.haml index b033c93d12..1aa5b02629 100644 --- a/app/views/groups/index.html.haml +++ b/app/views/groups/index.html.haml @@ -40,8 +40,9 @@ %h5 Our hubs & producers %ul.small-block-grid-2 %li{"ng-repeat" => "enterprise in group.enterprises", "scroll-after-load" => true} - %hub-modal{"ng-if" => "enterprise.is_distributor"} - %producer-modal{"ng-if" => "!enterprise.is_distributor", "show-hub-actions" => 'true'} + %enterprise-modal{"ng-if" => "enterprise.is_distributor"} + {{ enterprise.name }} + %enterprise-modal{"ng-if" => "!enterprise.is_distributor", "show-hub-actions" => 'true'} {{ enterprise.name }} diff --git a/app/views/home/_fat.html.haml b/app/views/home/_fat.html.haml index 406431b9b7..b3741e5aec 100644 --- a/app/views/home/_fat.html.haml +++ b/app/views/home/_fat.html.haml @@ -23,7 +23,7 @@ %label Our producers %ul.small-block-grid-2.medium-block-grid-1.large-block-grid-2 %li{"ng-repeat" => "enterprise in hub.producers"} - %producer-modal + %enterprise-modal %i.ofn-i_036-producers %span {{ enterprise.name }} diff --git a/app/views/shop/products/_summary.html.haml b/app/views/shop/products/_summary.html.haml index 25c71f276a..82d5f7c297 100644 --- a/app/views/shop/products/_summary.html.haml +++ b/app/views/shop/products/_summary.html.haml @@ -10,7 +10,7 @@ %em from %span - %producer-modal + %enterprise-modal %i.ofn-i_036-producers {{ enterprise.name }}