diff --git a/public/js/controllers/challengesCtrl.js b/public/js/controllers/challengesCtrl.js index 96f61acf77..fa719270b7 100644 --- a/public/js/controllers/challengesCtrl.js +++ b/public/js/controllers/challengesCtrl.js @@ -7,34 +7,13 @@ habitrpg.controller("ChallengesCtrl", ['$scope', 'User', 'Challenges', 'Notifica Groups.Group.query({type:'party,guilds,tavern'}, function(groups){ $scope.groups = groups; $scope.search = { - group: _.reduce(groups, function(m,g){m[g._id]=true;return m;}, {}) + group: _.transform(groups, function(m,g){m[g._id]=true;}) }; }); // FIXME $scope.challenges needs to be resolved first (see app.js) $scope.challenges = Challenges.Challenge.query(); // we should fix this, that's pretty brittle -// $scope.$watch('search', function(search){ -// if (!search) $scope.filteredChallenges = $scope.challenges; -// $scope.filteredChallenges = $filter('filter')($scope.challenges, function(chal) { -// return (search.group[chal.group._id] && -// (typeof search._isMember == 'undefined' || search._isMember == chal._isMember)); -// }) -// }) - // TODO probably better to use $watch above, to avoid this being calculated on every digest cycle - $scope.filterChallenges = function(chal){ - return (!$scope.search) ? true : - ($scope.search.group[chal.group._id] && - (typeof $scope.search._isMember == 'undefined' || $scope.search._isMember == chal._isMember)); - } - - $scope.$watch('newChallenge.group', function(gid){ - if (!gid) return; - var group = _.find($scope.groups, {_id:gid}); - $scope.maxPrize = User.user.balance*4 + ((group && group.balance && group.leader==User.user._id) ? group.balance*4 : 0); - if (gid == 'habitrpg') $scope.newChallenge.prize = 1; - }) - // override score() for tasks listed in challenges-editing pages, so that nothing happens $scope.score = function(){} @@ -216,4 +195,37 @@ habitrpg.controller("ChallengesCtrl", ['$scope', 'User', 'Challenges', 'Notifica }).popover('show'); } + //------------------------------------------------------------ + // Filtering + //------------------------------------------------------------ + +// $scope.$watch('search', function(search){ +// if (!search) $scope.filteredChallenges = $scope.challenges; +// $scope.filteredChallenges = $filter('filter')($scope.challenges, function(chal) { +// return (search.group[chal.group._id] && +// (typeof search._isMember == 'undefined' || search._isMember == chal._isMember)); +// }) +// }) + // TODO probably better to use $watch above, to avoid this being calculated on every digest cycle + $scope.filterChallenges = function(chal){ + return (!$scope.search) ? true : + ($scope.search.group[chal.group._id] && + (typeof $scope.search._isMember == 'undefined' || $scope.search._isMember == chal._isMember)); + } + + $scope.$watch('newChallenge.group', function(gid){ + if (!gid) return; + var group = _.find($scope.groups, {_id:gid}); + $scope.maxPrize = User.user.balance*4 + ((group && group.balance && group.leader==User.user._id) ? group.balance*4 : 0); + if (gid == 'habitrpg') $scope.newChallenge.prize = 1; + }) + + $scope.selectAll = function(){ + $scope.search.group = _.transform($scope.groups, function(m,g){m[g._id] = true}); + } + + $scope.selectNone = function(){ + $scope.search.group = _.transform($scope.groups, function(m,g){m[g._id] = false}); + } + }]); \ No newline at end of file diff --git a/views/options/social/challenges.jade b/views/options/social/challenges.jade index dabced873f..075b82cac2 100644 --- a/views/options/social/challenges.jade +++ b/views/options/social/challenges.jade @@ -61,6 +61,10 @@ script(type='text/ng-template', id='partials/options.social.challenges.html') .span2.well#challenges-filters h3 Filter: h4 Groups + ul.unstyled + a.btn.btn-mini.pull-left(ng-click='selectAll()') All + a.btn.btn-mini(ng-click='selectNone()') None + br label.checkbox(ng-repeat='group in groups') input(type='checkbox', ng-model='search.group[group._id]') | {{group.name}}