Skip to content

Commit

Permalink
Merge pull request #184 from sunil07t/develop
Browse files Browse the repository at this point in the history
Group leaderboard and minor changes
  • Loading branch information
shankari authored Nov 14, 2016
2 parents ee2bfe3 + f874827 commit 8828618
Show file tree
Hide file tree
Showing 5 changed files with 216 additions and 65 deletions.
31 changes: 23 additions & 8 deletions www/css/style.css
Original file line number Diff line number Diff line change
Expand Up @@ -264,6 +264,20 @@ img.center {
}
/* ngAnimate ends here */

#group-leaderboard{
padding-left: 20px
}

.group-leaderboard-left-stats{
display: inline;
}

.group-leaderboard-right-stats{
display: inline;
float: right;
padding-right: 100px;
}

#leaderboard-stats{
padding-left: 20px;
padding-top: 10px;
Expand Down Expand Up @@ -292,6 +306,15 @@ img.center {
#party.active {
color: #01D0A7 !important;
}
#add-goal:active {
color: #ededed !important;
}
#leaderboard:active {
color: #ededed !important;
}
#webkey:active {
color: #ededed !important;
}

#goal-content .item-content {
padding: 0px 49px 0px 0px !important;
Expand Down Expand Up @@ -607,14 +630,6 @@ h4.dashboard-headers{
border-radius: 0;
}

#challenge.active {
color: #2bb096 !important;
}

#party.active {
color: #2bb096 !important;
}

#goal-content .item-content {
padding: 0px 49px 0px 0px !important;
}
Expand Down
102 changes: 80 additions & 22 deletions www/js/goals.js
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,6 @@ angular.module('emission.main.goals',['emission.services', 'emission.plugin.logg
}
$scope.joinedChallenges = $scope.profile.challenges;
getParty();
getMembers();
allUsersForLeaderBoard();
/*if($scope.joinedChallenges.length > 0){
getUserChallenges();
Expand Down Expand Up @@ -495,16 +494,16 @@ angular.module('emission.main.goals',['emission.services', 'emission.plugin.logg
};

var users = [];
//var allPartyList = [];
var partyList = [];
$scope.userParty = [];
var allUsersForLeaderBoard = function(){
var callOpts = {'method': 'GET', 'method_url': "/api/v3/members/all",
'method_args': null};
CommHelper.habiticaProxy(callOpts).then(function(response){
console.log("Sucessfully got all the users");
var allUsers = response.data;
var ignoreList = ['Superb Girl','Test-em-mri','Test_em-mr','Test_berkeley',
'Abcdef','admin','Ucb.sdb.android.3','Ucb.sdb.android.1',
'Test', "Em Jr.#4", "Em jr#3", "Em_MR_2", ];
'Abcdef','admin','Ucb.sdb.android.3','Ucb.sdb.android.1','Test', 'Test100'];
users = allUsers.filter(function(obj) {
return ignoreList.indexOf(obj.profile.name) === -1;
});
Expand All @@ -521,40 +520,78 @@ angular.module('emission.main.goals',['emission.services', 'emission.plugin.logg
$scope.topThreeUsers.push(threeUsers[0]);
$scope.topThreeUsers.push(threeUsers[2]);
$scope.usersUnderTopThree = users.slice(3);
//allPartyList = getPatyForAllUsers(users);
console.log($scope.topThreeUsers);
//console.log(allPartyList);
getPartyForAllUsers(users);
setRank(partyList);
}, function(error){
console.log("Error getting all the users");
console.log(error);
});
};

/*var getPatyForAllUsers = function(users) {
var partys = [];
var getPartyForAllUsers = function(users) {
partyList = [];
for (var i = 0; i < users.length; i++) {
var partyInList = false;
if('_id' in users[i].party){
userParty = getPartyById(users[i].party._id);
partys.push(userParty);
} else {
var noPartyObj = {'name': 'Has not joined a Party'};
partys.push(noPartyObj);
if(partyList.length === 0){
var party = {'_id' : users[i].party._id, 'members': [users[i]], 'partyObj': {}, 'stats':{}};
getPartyById(users[i].party._id, 0);
partyList.push(party);
} else {
for (var j = 0; j < partyList.length; j++) {
if(partyList[j]._id === users[i].party._id){
partyList[j].members.push(users[i]);
partyInList = true;
}
}
if(!partyInList) {
party = {'_id' : users[i].party._id, 'members': [users[i]], 'partyObj': {}, 'stats':{}};
getPartyById(users[i].party._id, j);
partyList.push(party);
}
}
}
}
return partys;
};

var getPartyById = function(id) {
var callOpts = {'method': 'GET', 'method_url': "/api/v3/groups/" + id,
var getPartyById = function(id, j) {
var callOpts = {'method': 'GET', 'method_url': "/api/v3/groups/"+id,
'method_args': null};
CommHelper.habiticaProxy(callOpts).then(function(response){
console.log("Sucessfully a user's party");
var partyObj = response.data;
return partyObj;
console.log("Sucessfully got a user's party");
partyList[j].partyObj = response.data;
}, function(error){
console.log("Error when getting a user's party");
});
};*/
};

var setRank = function(partyList) {
partyList.forEach(function(party){
var totalLvl = 0;
var totalExp = 0;
var memberCount = 0; //Can't use member count of the partyObj because of invisible member count bug
party.members.forEach(function(member) {
totalLvl += member.stats.lvl;
totalExp += member.stats.exp;
memberCount++;
});
party.stats.lvl = totalLvl;
party.stats.exp = totalExp;
party.memberCount = memberCount;
if(party._id === $scope.profile.party._id){
$scope.userParty = addRank(party.members);
console.log($scope.userParty);
}
});
partyList = partyList.filter(function(obj){
return obj.memberCount > 1;
});
sortForLeaderboard(partyList);
partyList = addRank(partyList);
$scope.partys = partyList;
console.log(partyList);
};

var getChallenges = function() {
var callOpts = {'method': 'GET', 'method_url': '/api/v3/challenges/user',
Expand Down Expand Up @@ -593,6 +630,27 @@ angular.module('emission.main.goals',['emission.services', 'emission.plugin.logg
return list;
};

$scope.uictrl = {
showIndividual: true,
showGroup: false,
showVis: true,
};
//Using metrics.js chart and summary button switch for individual and group
$scope.groupButtonClass = function() {
return $scope.uictrl.showGroup? "metric-chart-button-active hvcenter" : "metric-chart-button hvcenter";
};
$scope.individualButtonClass = function() {
return $scope.uictrl.showIndividual? "metric-summary-button-active hvcenter" : "metric-summary-button hvcenter";
};
$scope.showGroup = function() {
$scope.uictrl.showIndividual = false;
$scope.uictrl.showGroup = true;
};
$scope.showIndividual = function() {
$scope.uictrl.showIndividual = true;
$scope.uictrl.showGroup = false;
};

/*var getUserChallenges = function(){
for(var challenge in $scope.joinedChallenges){
var callOpts = {'method': 'GET', 'method_url': '/api/v3/challenges/' + $scope.joinedChallenges[challenge],
Expand Down Expand Up @@ -640,7 +698,7 @@ angular.module('emission.main.goals',['emission.services', 'emission.plugin.logg
}
};*/

var getMembers = function() {
/*var getMembers = function() {
var callOpts = {'method': 'GET', 'method_url': "/api/v3/groups/"+partyId+"/members?includeAllPublicFields=true",
'method_args': null};
Expand All @@ -656,7 +714,7 @@ angular.module('emission.main.goals',['emission.services', 'emission.plugin.logg
console.log("Error when fetching members");
console.log(error);
});
};
};*/

/*var bikeChallenge = function() {
var callOpts = {'method': 'GET', 'method_url': "/api/v3/challenges/8a8134d6-066d-424d-8f3d-0b559c2c1e78",
Expand Down
79 changes: 57 additions & 22 deletions www/templates/goals/leaderboard-modal.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,15 @@
<button side="left" class="button" ng-click="closeLeaderboard()">Close</button>
<h1 class = "title">Leaderboard</h1>
</ion-header-bar>
<ion-content>
<div class="row" style="background-color: #ededed; margin-bottom: 0px !important; padding-left: 3%;">
<ion-content style="background-color: #ededed;">
<div style="height: 40px; width: 100%; padding: 10px; background-color: #ededed;" ng-if="uictrl.showVis">
<div class="metric-half">
<div ng-class="groupButtonClass()" ng-click="showGroup()">Group</div>
<div ng-class="individualButtonClass()" ng-click="showIndividual()">Individual</div>
</div>
</div>
<div ng-if="uictrl.showIndividual">
<div class="row" style="background-color: #ededed; margin-bottom: 0px !important; padding-left: 3%;">
<div ng-repeat="user in topThreeUsers"
class="col" style="padding-top: 0px !important; height: 200px !important;">
<figure ng-if="user.rank != 1" class="herobox background_{{user.preferences.background}} true ? &quot;isUser&quot; : &quot;&quot;} undefined ? &quot;minimal&quot; : &quot;&quot;}" ng-class="{hasPet: (true &amp;&amp; user.items.currentPet), hasMount: (true &amp;&amp; user.items.currentMount), noBackgroundImage: !user.preferences.background, &quot;cast-target&quot;: applyingAction, isLeader: party.leader==user._id}" style="top: -20px !important; left: 0px !important; width: 0px !important;">
Expand Down Expand Up @@ -39,6 +46,10 @@ <h1 class = "title">Leaderboard</h1>
<span ng-class="user.preferences.costume ? user.items.gear.costume.shield : user.items.gear.equipped.shield"></span>
<span ng-class="user.preferences.costume ? user.items.gear.costume.weapon : user.items.gear.equipped.weapon"></span>
</span>
<!-- Mount Head-->
<span ng-if="user.items.currentMount" class="current-mount Mount_Head_{{user.items.currentMount}}"></span>
<!-- Resting-->
<span ng-class="{zzz:user.preferences.sleep}"></span>
</div>
</figure>
<figure ng-if="user.rank == 1" class="herobox background_{{user.preferences.background}} true ? &quot;isUser&quot; : &quot;&quot;} undefined ? &quot;minimal&quot; : &quot;&quot;}" ng-class="{hasPet: (true &amp;&amp; user.items.currentPet), hasMount: (true &amp;&amp; user.items.currentMount), noBackgroundImage: !user.preferences.background, &quot;cast-target&quot;: applyingAction, isLeader: party.leader==user._id}" style="top: 10px !important; left: 0px !important; width: 0px !important;">
Expand Down Expand Up @@ -73,25 +84,29 @@ <h1 class = "title">Leaderboard</h1>
<span ng-class="user.preferences.costume ? user.items.gear.costume.shield : user.items.gear.equipped.shield"></span>
<span ng-class="user.preferences.costume ? user.items.gear.costume.weapon : user.items.gear.equipped.weapon"></span>
</span>
<!-- Mount Head-->
<span ng-if="user.items.currentMount" class="current-mount Mount_Head_{{user.items.currentMount}}"></span>
<!-- Resting-->
<span ng-class="{zzz:user.preferences.sleep}"></span>
</div>
</figure>
</figure>
<div ng-if="user.rank != 1" style="margin-top: -45px;color: #505050;text-align: center;">
<p style="font-size: 30px;font-family: monospace;font-weight: 600;">{{user.rank}}</p>
<p><b>{{user.profile.name}}</b></p>
<p>Level: {{user.stats.lvl}}</p>
</div>
<div ng-if="user.rank == 1" style="margin-top: -15px;color: #505050;text-align: center;">
<p style="font-size: 30px;font-family: monospace;font-weight: 600;">{{user.rank}}</p>
<p><b>{{user.profile.name}}</b></p>
<p>Level: {{user.stats.lvl}}</p>
</div>
<p style="font-size: 30px;font-family: monospace;font-weight: 600;">{{user.rank}}</p>
<p><b>{{user.profile.name}}</b></p>
<p>Level: {{user.stats.lvl}}</p>
</div>
<div ng-if="user.rank == 1" style="margin-top: -15px;color: #505050;text-align: center;">
<p style="font-size: 30px;font-family: monospace;font-weight: 600;">{{user.rank}}</p>
<p><b>{{user.profile.name}}</b></p>
<p>Level: {{user.stats.lvl}}</p>
</div>
</div>
</div>
<div class="row" style="position: fixed;top: 100px;">
<div ng-repeat="user in topThreeUsers" class="col width-33">
</div>
</div>
<div class="list" style="background-color: #ededed;">
<div ng-repeat="user in topThreeUsers" class="col width-33">
</div>
</div>
<div class="list" style="background-color: #ededed;">
<div ng-repeat="user in usersUnderTopThree"
class="card item-thumbnail-left-avatar leaderboard-card" id="avatar" style="padding-top: 10px !important;height: 117px !important;">
<figure class="herobox background_{{user.preferences.background}} true ? &quot;isUser&quot; : &quot;&quot;} undefined ? &quot;minimal&quot; : &quot;&quot;}" ng-class="{hasPet: (true &amp;&amp; user.items.currentPet), hasMount: (true &amp;&amp; user.items.currentMount), noBackgroundImage: !user.preferences.background, &quot;cast-target&quot;: applyingAction, isLeader: party.leader==user._id}" style="top: -10px !important; left: 0px !important;width: 0px;">
Expand Down Expand Up @@ -126,20 +141,40 @@ <h1 class = "title">Leaderboard</h1>
<span ng-class="user.preferences.costume ? user.items.gear.costume.shield : user.items.gear.equipped.shield"></span>
<span ng-class="user.preferences.costume ? user.items.gear.costume.weapon : user.items.gear.equipped.weapon"></span>
</span>
<!-- Mount Head-->
<span ng-if="user.items.currentMount" class="current-mount Mount_Head_{{user.items.currentMount}}"></span>
<!-- Resting-->
<span ng-class="{zzz:user.preferences.sleep}"></span>
<!-- Pet-->
<span ng-show="user.items.currentPet" class="current-pet Pet-{{user.items.currentPet}}" style="margin-bottom: -10px;"></span>
</div>
</figure>
<div id="leaderboard-stats" style="color: #6e6e6e;">
<p><b>{{user.profile.name}}</b></p>
<p>Level: {{user.stats.lvl}}</p>
<p>Level exp: {{user.stats.exp}}</p>
<p style="font-size: 30px;font-family: monospace;font-weight: 600;float: right;padding-right: 10px;">{{user.rank}}</p>
</div>
<p><b>{{user.profile.name}}</b></p>
<p>Level: {{user.stats.lvl}}</p>
<p>Level exp: {{user.stats.exp}}</p>
<p style="font-size: 30px;font-family: monospace;font-weight: 600;float: right;padding-right: 10px;">{{user.rank}}</p>
</div>
</div>
</div>
</div>
<div ng-if="uictrl.showGroup">
<div class="list" style="background-color: #ededed;">
<div ng-repeat="party in partys"
class="card leaderboard-card" id="avatar" style="padding-top: 10px !important;height: 85px !important;">
<div id="group-leaderboard" style="color: #6e6e6e;">
<p><b>{{party.partyObj.name}}</b></p>
<div>
<p class="group-leaderboard-left-stats">Leader: {{party.partyObj.leader.profile.name}}</p>
</div>
<div>
<p class="group-leaderboard-left-stats">Level: {{party.stats.lvl}}</p>
<p class="group-leaderboard-right-stats">Members: {{party.memberCount}}</p>
</div>
<p style="font-size: 30px;font-family: monospace;font-weight: 600;float: right;padding-right: 20px;margin-top: -30px;">{{party.rank}}</p>
</div>
</div>

</div>
</div>
</ion-content>
</ion-modal-view>
Loading

0 comments on commit 8828618

Please sign in to comment.