diff --git a/app/assets/javascripts/darkswarm/controllers/producers_controller.js.coffee b/app/assets/javascripts/darkswarm/controllers/producers_controller.js.coffee index 26c90a305e..7d31c06000 100644 --- a/app/assets/javascripts/darkswarm/controllers/producers_controller.js.coffee +++ b/app/assets/javascripts/darkswarm/controllers/producers_controller.js.coffee @@ -1,4 +1,12 @@ -Darkswarm.controller "ProducersCtrl", ($scope, Producers, TaxonSelector) -> +Darkswarm.controller "ProducersCtrl", ($scope, Producers, TaxonSelector, $filter) -> $scope.Producers = Producers $scope.TaxonSelector = TaxonSelector $scope.filtersActive = false + $scope.oldFiltered = [] + + $scope.filteredProducers = -> + filtered = $filter("filterProducers")(Producers.visible, $scope.query) + if $scope.oldFiltered != filtered + $scope.oldFiltered = filtered + TaxonSelector.collectTaxons filtered + filtered diff --git a/app/assets/javascripts/darkswarm/directives/active_selector.js.coffee b/app/assets/javascripts/darkswarm/directives/active_selector.js.coffee index 574af50b96..fbbca3a88b 100644 --- a/app/assets/javascripts/darkswarm/directives/active_selector.js.coffee +++ b/app/assets/javascripts/darkswarm/directives/active_selector.js.coffee @@ -6,5 +6,4 @@ Darkswarm.directive "activeSelector", -> link: (scope, elem, attr)-> elem.bind "click", -> scope.$apply -> - elem.toggleClass "active" scope.selector.active = !scope.selector.active diff --git a/app/assets/javascripts/darkswarm/directives/taxon_selector.js.coffee b/app/assets/javascripts/darkswarm/directives/taxon_selector.js.coffee index c9ccb1af1a..89d2a4d4ec 100644 --- a/app/assets/javascripts/darkswarm/directives/taxon_selector.js.coffee +++ b/app/assets/javascripts/darkswarm/directives/taxon_selector.js.coffee @@ -1,8 +1,5 @@ Darkswarm.directive "taxonSelector", (TaxonSelector) -> restrict: 'E' - scope: - enterprises: "=" templateUrl: "taxon_selector.html" link: (scope, elem, attr)-> scope.TaxonSelector = TaxonSelector - TaxonSelector.collectTaxons scope.enterprises diff --git a/app/assets/javascripts/darkswarm/services/selectors/taxon_selector.js.coffee b/app/assets/javascripts/darkswarm/services/selectors/taxon_selector.js.coffee index 4ba42f3aa2..f9d7bfebff 100644 --- a/app/assets/javascripts/darkswarm/services/selectors/taxon_selector.js.coffee +++ b/app/assets/javascripts/darkswarm/services/selectors/taxon_selector.js.coffee @@ -1,16 +1,24 @@ Darkswarm.factory 'TaxonSelector', -> new class TaxonSelector selectors: [] + selectors_by_id: {} # Collect all taxons on the supplied enterprises collectTaxons: (enterprises)-> taxons = {} + @selectors = [] + selectors = [] for enterprise in enterprises for taxon in (enterprise.taxons.concat enterprise.supplied_taxons) taxons[taxon.id] = taxon for id, taxon of taxons - @selectors.push - active: false - taxon: taxon + if @selectors_by_id[id] + selectors.push @selectors_by_id[id] + else + @selectors_by_id[id] = + active: false + taxon: taxon + selectors.push @selectors_by_id[id] + @selectors = selectors active: -> @selectors.filter (selector)-> diff --git a/app/assets/javascripts/templates/active_selector.html.haml b/app/assets/javascripts/templates/active_selector.html.haml index 449c2bc4d3..14b12bbd9f 100644 --- a/app/assets/javascripts/templates/active_selector.html.haml +++ b/app/assets/javascripts/templates/active_selector.html.haml @@ -1,2 +1,2 @@ -%li +%li{"ng-class" => "{active: selector.active}"} %a{"ng-transclude" => true} diff --git a/app/views/producers/index.html.haml b/app/views/producers/index.html.haml index 61b81084da..876f5a986b 100644 --- a/app/views/producers/index.html.haml +++ b/app/views/producers/index.html.haml @@ -27,7 +27,7 @@ .active_table %producer.active_table_node.row.animate-repeat{id: "{{producer.path}}", "scroll-after-load" => true, - "ng-repeat" => "producer in filteredProducers = (Producers.visible | filterProducers:query | taxons:TaxonSelector.active() | shipping:shippingTypes)", + "ng-repeat" => "producer in veryFilteredProducers = (filteredProducers() | taxons:TaxonSelector.active() | shipping:shippingTypes)", "ng-controller" => "ProducerNodeCtrl", "ng-class" => "{'closed' : !open(), 'open' : open(), 'inactive' : !producer.active}", id: "{{producer.hash}}"}