Files
habitica/public/js/controllers/groupsCtrl.js
Tyler Renelle 91d1cdf361 [#1465] add member modals back in. Not all info is present, just a bit more
work. Can now click guild & tavern members! does lazy-loading of members
so we don't have to load all their information at once
2013-09-07 12:45:39 -04:00

164 lines
5.2 KiB
JavaScript

"use strict";
habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Groups', '$http', 'API_URL', '$q', 'User', 'Members', '$location',
function($scope, $rootScope, Groups, $http, API_URL, $q, User, Members, $location) {
$scope.isMember = function(user, group){
return ~(group.members.indexOf(user._id));
}
// ------ Loading ------
$scope.groups = Groups.groups;
$scope.fetchGuilds = Groups.fetchGuilds;
$scope.fetchTavern = Groups.fetchTavern;
// ------ Modals ------
$scope.clickMember = function(uid) {
if (User.user._id == uid) {
if ($location.path() == '/tasks') {
$location.path('/options');
} else {
$location.path('/tasks');
}
} else {
// We need the member information up top here, but then we pass it down to the modal controller
// down below. Better way of handling this?
debugger
Members.selectMember(uid);
$rootScope.modals.member = true;
}
}
// ------ Invites ------
$scope.invitee = '';
$scope.invite = function(group, uuid){
group.$invite({uuid:uuid}, function(){
$scope.invitee = '';
alert("User invited to group");
});
}
}
])
.controller("MemberModalCtrl", ['$scope', '$rootScope', 'Members',
function($scope, $rootScope, Members) {
// We watch Members.selectedMember because it's asynchronously set, so would be a hassle to handle updates here
$scope.$watch( function() { return Members.selectedMember; }, function (member) {
$scope.profile = member;
});
}
])
.controller('ChatCtrl', ['$scope', 'Groups', 'User', function($scope, Groups, User){
$scope._chatMessage = '';
$scope.postChat = function(group, message){
if (_.isEmpty(message)) return
$('.chat-btn').addClass('disabled');
group.$postChat({message:message}, function(data){
$scope._chatMessage = '';
group.chat = data.chat;
$('.chat-btn').removeClass('disabled');
});
}
$scope.sync = function(group){
group.$get();
}
$scope.nameTagClasses = function(message){
if (message.contributor) {
if (message.contributor.match(/npc/i) || message.contributor.match(/master/i)) {
return 'label-master'; // master
} else if (message.contributor.match(/champion/i)) {
return 'label-champion'; // champion
} else if (message.contributor.match(/elite/i)) {
return 'label-success'; //elite
}
}
if (message.uuid == User.user.id) {
return 'label-inverse'; //self
}
}
}])
.controller("GuildsCtrl", ['$scope', 'Groups', 'User', '$rootScope',
function($scope, Groups, User, $rootScope) {
$scope.type = 'guild';
$scope.text = 'Guild';
$scope.newGroup = new Groups.Group({type:'guild', privacy:'private', leader: User.user._id, members: [User.user._id]});
$scope.create = function(group){
if (User.user.balance < 1) {
return $rootScope.modals.moreGems = true;
// $('#more-gems-modal').modal('show');
}
if (confirm("Create Guild for 4 Gems?")) {
group.balance = 1;
group.$save(function(){
User.user.balance--;
User.log({op:'set', data:{'balance':User.user.balance}});
window.setTimeout(function(){window.location.href='/';}, 500)
})
}
}
$scope.join = function(group){
group.$join(function(saved){
//$scope.groups.guilds.push(saved);
alert('Joined guild, refresh page to see changes')
})
}
$scope.leave = function(group){
group.$leave();
// var i = _.find($scope.groups.guilds, {_id:group._id});
// if (~i) $scope.groups.guilds.splice(i, 1);
alert('Left guild, refresh page to see changes')
}
}
])
.controller("PartyCtrl", ['$scope', 'Groups', 'User',
function($scope, Groups, User) {
$scope.type = 'party';
$scope.text = 'Party';
$scope.group = Groups.groups.party;
$scope.newGroup = new Groups.Group({type:'party', leader: User.user._id, members: [User.user._id]});
$scope.create = function(group){
group.$save(function(){
location.reload();
});
}
$scope.join = function(party){
var group = new Groups.Group({_id: party.id, name: party.name});
// there a better way to access GroupsCtrl.groups.party?
Groups.groups.party = group.$join(function(){
User.user.invitations.party = undefined;
});
}
$scope.leave = function(group){
group.$leave(function(){
Groups.groups.party = new Groups.Group();
});
}
$scope.reject = function(){
User.user.invitations.party = undefined;
User.log({op:'set',data:{'invitations.party':{}}});
}
}
])
.controller("TavernCtrl", ['$scope', 'Groups', 'User',
function($scope, Groups, User) {
$scope.group = Groups.groups.tavern;
$scope.rest = function(){
User.user.flags.rest = !User.user.flags.rest;
User.log({op:'set',data:{'flags.rest':User.user.flags.rest}});
}
}
])