diff --git a/app/assets/javascripts/darkswarm/controllers/account_sidebar_controller.js.coffee b/app/assets/javascripts/darkswarm/controllers/sidebar/account_sidebar_controller.js.coffee similarity index 100% rename from app/assets/javascripts/darkswarm/controllers/account_sidebar_controller.js.coffee rename to app/assets/javascripts/darkswarm/controllers/sidebar/account_sidebar_controller.js.coffee diff --git a/app/assets/javascripts/darkswarm/controllers/forgot_sidebar_controller.js.coffee b/app/assets/javascripts/darkswarm/controllers/sidebar/forgot_sidebar_controller.js.coffee similarity index 100% rename from app/assets/javascripts/darkswarm/controllers/forgot_sidebar_controller.js.coffee rename to app/assets/javascripts/darkswarm/controllers/sidebar/forgot_sidebar_controller.js.coffee diff --git a/app/assets/javascripts/darkswarm/controllers/login_sidebar_controller.js.coffee b/app/assets/javascripts/darkswarm/controllers/sidebar/login_sidebar_controller.js.coffee similarity index 100% rename from app/assets/javascripts/darkswarm/controllers/login_sidebar_controller.js.coffee rename to app/assets/javascripts/darkswarm/controllers/sidebar/login_sidebar_controller.js.coffee diff --git a/app/assets/javascripts/darkswarm/controllers/sidebar_controller.js.coffee b/app/assets/javascripts/darkswarm/controllers/sidebar/sidebar_controller.js.coffee similarity index 100% rename from app/assets/javascripts/darkswarm/controllers/sidebar_controller.js.coffee rename to app/assets/javascripts/darkswarm/controllers/sidebar/sidebar_controller.js.coffee diff --git a/app/assets/javascripts/darkswarm/controllers/signup_sidebar_controller.js.coffee b/app/assets/javascripts/darkswarm/controllers/sidebar/signup_sidebar_controller.js.coffee similarity index 100% rename from app/assets/javascripts/darkswarm/controllers/signup_sidebar_controller.js.coffee rename to app/assets/javascripts/darkswarm/controllers/sidebar/signup_sidebar_controller.js.coffee diff --git a/app/assets/javascripts/darkswarm/filters/filter_hubs.js.coffee b/app/assets/javascripts/darkswarm/filters/filter_hubs.js.coffee index 29f0b993d1..b6adb84508 100644 --- a/app/assets/javascripts/darkswarm/filters/filter_hubs.js.coffee +++ b/app/assets/javascripts/darkswarm/filters/filter_hubs.js.coffee @@ -1,9 +1,9 @@ -Darkswarm.filter 'filterHubs', -> +Darkswarm.filter 'hubs', (Matcher)-> (hubs, text) -> hubs ||= [] text ?= "" - match = (matched)-> - matched.toLowerCase().indexOf(text.toLowerCase()) != -1 - hubs.filter (hub)-> - match(hub.name) or match(hub.address.zipcode) or match(hub.address.city) or match(hub.address.state) + 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 new file mode 100644 index 0000000000..bbbb82fa30 --- /dev/null +++ b/app/assets/javascripts/darkswarm/filters/filter_producers.js.coffee @@ -0,0 +1,6 @@ +Darkswarm.filter 'filterProducers', (hubsFilter)-> + (producers, text) -> + producers ||= [] + text ?= "" + + hubsFilter(producers, text) diff --git a/app/assets/javascripts/darkswarm/services/matcher.js.coffee b/app/assets/javascripts/darkswarm/services/matcher.js.coffee new file mode 100644 index 0000000000..679c30f4c7 --- /dev/null +++ b/app/assets/javascripts/darkswarm/services/matcher.js.coffee @@ -0,0 +1,5 @@ +Darkswarm.factory "Matcher", -> + new class Matcher + match: (properties, text)-> + properties.some (prop)-> + prop.toLowerCase().indexOf(text.toLowerCase()) != -1 diff --git a/app/views/home/_hubs.html.haml b/app/views/home/_hubs.html.haml index a1d821e721..d3eead785b 100644 --- a/app/views/home/_hubs.html.haml +++ b/app/views/home/_hubs.html.haml @@ -23,7 +23,7 @@ .row{bindonce: true} .small-12.columns .active_table - %hub.active_table_node.row{"ng-repeat" => "hub in filteredHubs = (hubs | filterHubs:query)", + %hub.active_table_node.row{"ng-repeat" => "hub in filteredHubs = (hubs | hubs:query)", "ng-class" => "{'closed' : !open(), 'open' : open(), 'inactive' : !hub.active, 'current' : current()}", "ng-controller" => "HubNodeCtrl", id: "{{hub.path}}"} diff --git a/app/views/producers/index.haml b/app/views/producers/index.haml index c368de6011..307014fad6 100644 --- a/app/views/producers/index.haml +++ b/app/views/producers/index.haml @@ -1,14 +1,22 @@ .producers{"ng-controller" => "ProducersCtrl"} :javascript angular.module('Darkswarm').value('producers', #{render partial: "json/producers", object: @producers}) - -#%pre -#{{ Producers.producers | json }} + + .row + .small-12.columns + %input{type: :text, + "ng-model" => "query", + placeholder: "Search postcode, suburb or hub name...", + "ng-debounce" => "150", + "ofn-disable-enter" => true} + .row{bindonce: true} .small-12.columns .active_table %producer.active_table_node.row{id: "{{producer.path}}", - "ng-repeat" => "producer in Producers.producers", + "ng-repeat" => "producer in filteredProducers = (Producers.producers | filterProducers:query)", "ng-controller" => "ProducerNodeCtrl", "ng-class" => "{'closed' : !open(), 'open' : open(), 'inactive' : !producer.active}"} diff --git a/app/views/shared/_menu.html.haml b/app/views/shared/menu/_menu.html.haml similarity index 100% rename from app/views/shared/_menu.html.haml rename to app/views/shared/menu/_menu.html.haml diff --git a/spec/javascripts/unit/darkswarm/filters/filter_hubs_spec.js.coffee b/spec/javascripts/unit/darkswarm/filters/filter_hubs_spec.js.coffee index 8ef281d598..fc2702a72b 100644 --- a/spec/javascripts/unit/darkswarm/filters/filter_hubs_spec.js.coffee +++ b/spec/javascripts/unit/darkswarm/filters/filter_hubs_spec.js.coffee @@ -21,10 +21,10 @@ describe 'filtering Hubs', -> module 'Darkswarm' inject ($filter) -> filter = $filter - filterHubs = $filter('filterHubs') + filterHubs = $filter('hubs') it 'has a hub filter', -> - expect(filter('filterHubs')).not.toBeNull() + expect(filter('hubs')).not.toBeNull() it "filters by name", -> expect(filterHubs(hubs, 'donkeys').length).toEqual 1 diff --git a/spec/javascripts/unit/darkswarm/filters/filter_producers_spec.js.coffee b/spec/javascripts/unit/darkswarm/filters/filter_producers_spec.js.coffee new file mode 100644 index 0000000000..29d8986b56 --- /dev/null +++ b/spec/javascripts/unit/darkswarm/filters/filter_producers_spec.js.coffee @@ -0,0 +1,28 @@ +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()