[#1781] challenges: select-all / select-none buttons

This commit is contained in:
Tyler Renelle
2013-11-11 19:00:43 -08:00
parent 86f47cb6f1
commit 2978842d23
2 changed files with 38 additions and 22 deletions

View File

@@ -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});
}
}]);

View File

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