Taxon selection finesse

This commit is contained in:
Will Marshall
2014-07-09 10:53:52 +10:00
parent 730fbc5e94
commit 0b27040dcb
6 changed files with 22 additions and 10 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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)->

View File

@@ -1,2 +1,2 @@
%li
%li{"ng-class" => "{active: selector.active}"}
%a{"ng-transclude" => true}

View File

@@ -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}}"}