2013-08-29 02:08:59 +00:00
|
|
|
"use strict";
|
|
|
|
|
|
2014-02-03 18:24:37 +00:00
|
|
|
habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Shared', 'Groups', '$http', 'API_URL', '$q', 'User', 'Members', '$state',
|
|
|
|
|
function($scope, $rootScope, Shared, Groups, $http, API_URL, $q, User, Members, $state) {
|
2013-09-01 02:59:35 +00:00
|
|
|
|
2013-09-01 03:35:53 +00:00
|
|
|
$scope.isMember = function(user, group){
|
2013-09-01 23:23:16 +00:00
|
|
|
return ~(group.members.indexOf(user._id));
|
2013-09-01 03:35:53 +00:00
|
|
|
}
|
|
|
|
|
|
2013-09-09 20:15:57 +00:00
|
|
|
$scope.Members = Members;
|
|
|
|
|
$scope._editing = {group:false};
|
|
|
|
|
|
2013-09-09 21:09:45 +00:00
|
|
|
$scope.save = function(group){
|
2013-10-28 21:21:18 +00:00
|
|
|
if(group._newLeader && group._newLeader._id) group.leader = group._newLeader._id;
|
2013-09-09 21:09:45 +00:00
|
|
|
group.$save();
|
|
|
|
|
group._editing = false;
|
|
|
|
|
}
|
|
|
|
|
|
2013-09-07 16:45:39 +00:00
|
|
|
// ------ Modals ------
|
|
|
|
|
|
2013-09-07 17:59:49 +00:00
|
|
|
$scope.clickMember = function(uid, forceShow) {
|
|
|
|
|
if (User.user._id == uid && !forceShow) {
|
2013-10-28 05:27:07 +00:00
|
|
|
if ($state.is('tasks')) {
|
|
|
|
|
$state.go('options');
|
2013-09-07 16:45:39 +00:00
|
|
|
} else {
|
2013-10-28 05:27:07 +00:00
|
|
|
$state.go('tasks');
|
2013-09-07 16:45:39 +00:00
|
|
|
}
|
|
|
|
|
} 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?
|
|
|
|
|
Members.selectMember(uid);
|
2014-02-03 18:24:37 +00:00
|
|
|
$rootScope.openModal('member', 'MemberModalCtrl');
|
2013-09-07 16:45:39 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2013-10-31 16:35:04 +00:00
|
|
|
$scope.removeMember = function(group, member, isMember){
|
2014-02-05 22:43:49 +00:00
|
|
|
var yes = confirm(window.env.t('sureKick'))
|
2013-10-28 16:10:29 +00:00
|
|
|
if(yes){
|
2013-11-06 19:31:39 +00:00
|
|
|
Groups.Group.removeMember({gid: group._id, uuid: member._id }, undefined, function(){
|
|
|
|
|
if(isMember){
|
|
|
|
|
_.pull(group.members, member);
|
|
|
|
|
}else{
|
|
|
|
|
_.pull(group.invites, member);
|
|
|
|
|
}
|
|
|
|
|
});
|
2013-10-28 16:10:29 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2013-09-07 16:45:39 +00:00
|
|
|
// ------ Invites ------
|
|
|
|
|
|
2013-10-29 15:50:28 +00:00
|
|
|
$scope.invite = function(group){
|
2013-11-06 19:31:39 +00:00
|
|
|
Groups.Group.invite({gid: group._id, uuid: group.invitee}, undefined, function(){
|
2013-10-29 15:50:28 +00:00
|
|
|
group.invitee = '';
|
|
|
|
|
}, function(){
|
|
|
|
|
group.invitee = '';
|
2013-09-01 15:33:39 +00:00
|
|
|
});
|
|
|
|
|
}
|
2013-08-30 00:18:39 +00:00
|
|
|
}
|
|
|
|
|
])
|
|
|
|
|
|
2014-01-18 07:38:09 +00:00
|
|
|
.controller("MemberModalCtrl", ['$scope', '$rootScope', 'Members', 'Shared',
|
|
|
|
|
function($scope, $rootScope, Members, Shared) {
|
2013-09-09 22:56:46 +00:00
|
|
|
$scope.timestamp = function(timestamp){
|
|
|
|
|
return moment(timestamp).format('MM/DD/YYYY');
|
|
|
|
|
}
|
2013-09-07 16:45:39 +00:00
|
|
|
// 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) {
|
2013-11-28 05:22:15 +00:00
|
|
|
if(member)
|
2014-01-12 23:05:15 +00:00
|
|
|
member.petCount = Shared.countPets(null, member.items.pets);
|
2013-09-07 16:45:39 +00:00
|
|
|
$scope.profile = member;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
])
|
|
|
|
|
|
2013-11-13 04:04:37 +00:00
|
|
|
.controller('AutocompleteCtrl', ['$scope', '$timeout', 'Groups', 'User', 'InputCaret', function ($scope,$timeout,Groups,User,InputCaret) {
|
2013-11-12 06:32:52 +00:00
|
|
|
$scope.clearUserlist = function() {
|
|
|
|
|
$scope.response = [];
|
|
|
|
|
$scope.usernames = [];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$scope.addNewUser = function(user) {
|
|
|
|
|
if($.inArray(user.user,$scope.usernames) == -1) {
|
2013-11-13 04:04:37 +00:00
|
|
|
user.username = user.user;
|
2013-11-12 06:32:52 +00:00
|
|
|
$scope.usernames.push(user.user);
|
|
|
|
|
$scope.response.push(user);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$scope.clearUserlist();
|
|
|
|
|
|
|
|
|
|
$scope.chatChanged = function(newvalue,oldvalue){
|
|
|
|
|
if($scope.group.chat && $scope.group.chat.length > 0){
|
|
|
|
|
for(var i = 0; i < $scope.group.chat.length; i++) {
|
|
|
|
|
$scope.addNewUser($scope.group.chat[i]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2013-11-13 04:04:37 +00:00
|
|
|
$scope.$watch('group.chat',$scope.chatChanged);
|
|
|
|
|
|
2013-11-12 15:41:26 +00:00
|
|
|
$scope.caretChanged = function(newCaretPos) {
|
|
|
|
|
var relativeelement = $('.-options');
|
|
|
|
|
var textarea = $('.chat-textarea');
|
|
|
|
|
var userlist = $('.list-at-user');
|
|
|
|
|
var offset = {
|
|
|
|
|
x: textarea.offset().left - relativeelement.offset().left,
|
|
|
|
|
y: textarea.offset().top - relativeelement.offset().top,
|
|
|
|
|
};
|
|
|
|
|
if(relativeelement) {
|
|
|
|
|
var caretOffset = InputCaret.getPosition(textarea);
|
|
|
|
|
userlist.css({
|
|
|
|
|
left: caretOffset.left + offset.x,
|
|
|
|
|
top: caretOffset.top + offset.y + 16
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2013-11-13 04:04:37 +00:00
|
|
|
$scope.updateTimer = false;
|
|
|
|
|
|
|
|
|
|
$scope.$watch(function () { return $scope.caretPos; },function(newCaretPos) {
|
|
|
|
|
if($scope.updateTimer){
|
|
|
|
|
$timeout.cancel($scope.updateTimer)
|
|
|
|
|
}
|
|
|
|
|
$scope.updateTimer = $timeout(function(){
|
|
|
|
|
$scope.caretChanged(newCaretPos);
|
|
|
|
|
},$scope.watchDelay)
|
|
|
|
|
});
|
2013-11-12 06:32:52 +00:00
|
|
|
}])
|
|
|
|
|
|
2014-01-06 05:10:34 +00:00
|
|
|
.controller('ChatCtrl', ['$scope', 'Groups', 'User', '$http', 'API_URL', 'Notification', function($scope, Groups, User, $http, API_URL, Notification){
|
2013-11-13 04:04:37 +00:00
|
|
|
$scope.message = {content:''};
|
2013-11-04 14:17:09 +00:00
|
|
|
$scope._sending = false;
|
2013-11-16 17:24:01 +00:00
|
|
|
|
|
|
|
|
$scope.isUserMentioned = function(user, message) {
|
|
|
|
|
if(message.hasOwnProperty("highlight"))
|
|
|
|
|
return message.highlight;
|
|
|
|
|
message.highlight = false;
|
|
|
|
|
var messagetext = message.text.toLowerCase();
|
|
|
|
|
var username = user.profile.name;
|
|
|
|
|
var mentioned = messagetext.indexOf(username.toLowerCase());
|
2013-11-20 14:46:07 +00:00
|
|
|
var pattern = username+"([^\w]|$){1}";
|
2013-11-16 17:24:01 +00:00
|
|
|
if(mentioned > -1) {
|
|
|
|
|
var preceedingchar = messagetext.substring(mentioned-1,mentioned);
|
|
|
|
|
if(mentioned == 0 || preceedingchar.trim() == '' || preceedingchar == '@'){
|
|
|
|
|
var regex = new RegExp(pattern,'i');
|
|
|
|
|
message.highlight = regex.test(messagetext);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return message.highlight;
|
|
|
|
|
}
|
2013-09-08 15:22:03 +00:00
|
|
|
|
2013-09-01 23:23:16 +00:00
|
|
|
$scope.postChat = function(group, message){
|
2013-11-04 14:17:09 +00:00
|
|
|
if (_.isEmpty(message) || $scope._sending) return;
|
|
|
|
|
$scope._sending = true;
|
2013-11-08 16:03:10 +00:00
|
|
|
var previousMsg = (group.chat && group.chat[0]) ? group.chat[0].id : false;
|
|
|
|
|
Groups.Group.postChat({gid: group._id, message:message, previousMsg: previousMsg}, undefined, function(data){
|
|
|
|
|
if(data.chat){
|
|
|
|
|
group.chat = data.chat;
|
|
|
|
|
}else if(data.message){
|
|
|
|
|
group.chat.unshift(data.message);
|
|
|
|
|
}
|
2013-11-13 04:04:37 +00:00
|
|
|
$scope.message.content = '';
|
2013-11-04 14:17:09 +00:00
|
|
|
$scope._sending = false;
|
2013-11-04 14:21:05 +00:00
|
|
|
}, function(err){
|
|
|
|
|
$scope._sending = false;
|
2013-09-01 23:23:16 +00:00
|
|
|
});
|
|
|
|
|
}
|
2013-09-08 15:22:03 +00:00
|
|
|
|
|
|
|
|
$scope.deleteChatMessage = function(group, message){
|
2013-11-07 19:24:38 +00:00
|
|
|
if(message.uuid === User.user.id || (User.user.backer && User.user.contributor.admin)){
|
2013-11-08 16:03:10 +00:00
|
|
|
var previousMsg = (group.chat && group.chat[0]) ? group.chat[0].id : false;
|
|
|
|
|
Groups.Group.deleteChatMessage({gid:group._id, messageId:message.id, previousMsg:previousMsg}, undefined, function(data){
|
|
|
|
|
if(data.chat) group.chat = data.chat;
|
|
|
|
|
|
|
|
|
|
var i = _.findIndex(group.chat, {id: message.id});
|
|
|
|
|
if(i !== -1) group.chat.splice(i, 1);
|
2013-09-08 15:22:03 +00:00
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2014-01-06 05:10:34 +00:00
|
|
|
$scope.likeChatMessage = function(group,message) {
|
|
|
|
|
if (message.uuid == User.user._id)
|
2014-02-05 22:43:49 +00:00
|
|
|
return Notification.text(window.env.t('foreverAlone'));
|
2014-01-06 05:10:34 +00:00
|
|
|
if (!message.likes) message.likes = {};
|
|
|
|
|
if (message.likes[User.user._id]) {
|
|
|
|
|
delete message.likes[User.user._id];
|
|
|
|
|
} else {
|
|
|
|
|
message.likes[User.user._id] = true;
|
|
|
|
|
}
|
|
|
|
|
//Chat.Chat.like({gid:group._id,mid:message.id});
|
|
|
|
|
|
|
|
|
|
$http.post(API_URL + '/api/v2/groups/' + group._id + '/chat/' + message.id + '/like');
|
|
|
|
|
}
|
|
|
|
|
|
2013-09-07 01:03:44 +00:00
|
|
|
$scope.sync = function(group){
|
|
|
|
|
group.$get();
|
|
|
|
|
}
|
2013-09-08 15:22:03 +00:00
|
|
|
|
2013-11-23 10:59:58 +00:00
|
|
|
// List of Ordering options for the party members list
|
|
|
|
|
$scope.partyOrderChoices = {
|
2014-02-05 22:43:49 +00:00
|
|
|
'level': window.env.t('sortLevel'),
|
|
|
|
|
'random': window.env.t('sortRandom'),
|
|
|
|
|
'pets': window.env.t('sortPets'),
|
|
|
|
|
'party_date_joined': window.env.t('sortJoined'),
|
2013-11-23 10:59:58 +00:00
|
|
|
};
|
|
|
|
|
|
2013-09-01 23:23:16 +00:00
|
|
|
}])
|
|
|
|
|
|
2014-01-07 05:06:14 +00:00
|
|
|
.controller("GuildsCtrl", ['$scope', 'Groups', 'User', 'Challenges', '$rootScope', '$state', '$location', '$compile',
|
|
|
|
|
function($scope, Groups, User, Challenges, $rootScope, $state, $location, $compile) {
|
2013-11-02 03:15:04 +00:00
|
|
|
$scope.groups = {
|
|
|
|
|
guilds: Groups.myGuilds(),
|
|
|
|
|
"public": Groups.publicGuilds()
|
|
|
|
|
}
|
2013-08-30 00:18:39 +00:00
|
|
|
$scope.type = 'guild';
|
|
|
|
|
$scope.text = 'Guild';
|
2013-11-26 19:16:10 +00:00
|
|
|
var newGroup = function(){
|
2014-01-05 21:45:01 +00:00
|
|
|
return new Groups.Group({type:'guild', privacy:'private'});
|
2013-11-26 19:16:10 +00:00
|
|
|
}
|
|
|
|
|
$scope.newGroup = newGroup()
|
2013-09-02 00:57:01 +00:00
|
|
|
$scope.create = function(group){
|
2014-02-02 15:43:58 +00:00
|
|
|
if (User.user.balance < 1) return $rootScope.openModal('buyGems');
|
2013-09-02 00:57:01 +00:00
|
|
|
|
2014-02-05 22:43:49 +00:00
|
|
|
if (confirm(window.env.t('confirmGuild'))) {
|
2013-10-30 21:34:59 +00:00
|
|
|
group.$save(function(saved){
|
2013-11-02 09:04:31 +00:00
|
|
|
User.user.balance--;
|
2013-11-01 20:08:36 +00:00
|
|
|
$scope.groups.guilds.push(saved);
|
|
|
|
|
if(saved.privacy === 'public') $scope.groups.public.push(saved);
|
|
|
|
|
$state.go('options.social.guilds.detail', {gid: saved._id});
|
2013-11-26 19:16:10 +00:00
|
|
|
$scope.newGroup = newGroup();
|
2013-10-27 12:03:03 +00:00
|
|
|
});
|
2013-09-02 00:57:01 +00:00
|
|
|
}
|
|
|
|
|
}
|
2013-09-01 03:35:53 +00:00
|
|
|
|
2013-09-01 02:59:35 +00:00
|
|
|
$scope.join = function(group){
|
2013-09-11 21:16:23 +00:00
|
|
|
// If we're accepting an invitation, we don't have the actual group object, but a faux group object (for performance
|
|
|
|
|
// purposes) {id, name}. Let's trick ngResource into thinking we have a group, so we can call the same $join
|
|
|
|
|
// function (server calls .attachGroup(), which finds group by _id and handles this properly)
|
|
|
|
|
if (group.id && !group._id) {
|
|
|
|
|
group = new Groups.Group({_id:group.id});
|
|
|
|
|
}
|
|
|
|
|
|
2013-11-01 20:08:36 +00:00
|
|
|
group.$join(function(joined){
|
|
|
|
|
var i = _.findIndex(User.user.invitations.guilds, {id:joined._id});
|
|
|
|
|
if (~i) User.user.invitations.guilds.splice(i,1);
|
|
|
|
|
$scope.groups.guilds.push(joined);
|
2013-11-03 10:58:42 +00:00
|
|
|
if(joined.privacy == 'public'){
|
|
|
|
|
joined._isMember = true;
|
2013-11-03 11:00:57 +00:00
|
|
|
joined.memberCount++;
|
2013-11-03 10:58:42 +00:00
|
|
|
}
|
2013-11-01 20:08:36 +00:00
|
|
|
$state.go('options.social.guilds.detail', {gid: joined._id});
|
2013-09-01 03:35:53 +00:00
|
|
|
})
|
|
|
|
|
}
|
2013-09-01 02:59:35 +00:00
|
|
|
|
2014-01-05 02:05:20 +00:00
|
|
|
$scope.leave = function(keep) {
|
|
|
|
|
if (keep == 'cancel') {
|
2014-01-07 05:06:14 +00:00
|
|
|
$scope.selectedGroup = undefined;
|
2014-01-05 02:05:20 +00:00
|
|
|
} else {
|
|
|
|
|
var group = $scope.selectedGroup;
|
|
|
|
|
Groups.Group.leave({gid: group._id, keep:keep}, undefined, function(){
|
2013-11-01 20:08:36 +00:00
|
|
|
$scope.groups.guilds.splice(_.indexOf($scope.groups.guilds, group), 1);
|
|
|
|
|
// remove user from group members if guild is public so that he can re-join it immediately
|
2013-11-03 11:12:43 +00:00
|
|
|
if(group.privacy == 'public' || !group.privacy){ //public guilds with only some fields fetched
|
2013-11-03 10:58:42 +00:00
|
|
|
var i = _.findIndex($scope.groups.public, {_id: group._id});
|
|
|
|
|
if(~i){
|
|
|
|
|
var guild = $scope.groups.public[i];
|
|
|
|
|
guild.memberCount--;
|
|
|
|
|
guild._isMember = false;
|
|
|
|
|
}
|
2013-11-01 20:08:36 +00:00
|
|
|
}
|
|
|
|
|
$state.go('options.social.guilds');
|
2013-10-30 21:34:59 +00:00
|
|
|
});
|
2013-09-01 02:59:35 +00:00
|
|
|
}
|
2014-01-05 02:05:20 +00:00
|
|
|
$scope.popoverEl.popover('destroy');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$scope.clickLeave = function(group, $event){
|
|
|
|
|
$scope.selectedGroup = group;
|
|
|
|
|
$scope.popoverEl = $($event.target);
|
2014-01-07 05:06:14 +00:00
|
|
|
var html, title;
|
|
|
|
|
Challenges.Challenge.query(function(challenges) {
|
|
|
|
|
challenges = _.pluck(_.filter(challenges, function(c) {
|
|
|
|
|
return c.group._id == group._id;
|
|
|
|
|
}), '_id');
|
|
|
|
|
if (_.intersection(challenges, User.user.challenges).length > 0) {
|
|
|
|
|
html = $compile(
|
2014-02-05 22:43:49 +00:00
|
|
|
'<a ng-controller="GroupsCtrl" ng-click="leave(\'remove-all\')">' + window.env.t('removeTasks') + '</a><br/>\n<a ng-click="leave(\'keep-all\')">' + window.env.t('keepTasks') + '</a><br/>\n<a ng-click="leave(\'cancel\')">' + window.env.t('cancel') + '</a><br/>'
|
2014-01-05 02:05:20 +00:00
|
|
|
)($scope);
|
2014-02-05 22:43:49 +00:00
|
|
|
title = window.env.t('leaveGroupCha');
|
2014-01-07 05:06:14 +00:00
|
|
|
} else {
|
|
|
|
|
html = $compile(
|
2014-02-05 22:43:49 +00:00
|
|
|
'<a ng-controller="GroupsCtrl" ng-click="leave(\'keep-all\')">' + window.env.t('confirm') + '</a><br/>\n<a ng-click="leave(\'cancel\')">' + window.env.t('cancel') + '</a><br/>'
|
2014-01-07 05:06:14 +00:00
|
|
|
)($scope);
|
2014-02-05 22:43:49 +00:00
|
|
|
title = window.env.t('leaveGroup')
|
2014-01-07 05:06:14 +00:00
|
|
|
}
|
2014-01-05 02:05:20 +00:00
|
|
|
$scope.popoverEl.popover('destroy').popover({
|
|
|
|
|
html: true,
|
|
|
|
|
placement: 'top',
|
|
|
|
|
trigger: 'manual',
|
2014-01-07 05:06:14 +00:00
|
|
|
title: title,
|
2014-01-05 02:05:20 +00:00
|
|
|
content: html
|
|
|
|
|
}).popover('show');
|
2014-01-07 05:06:14 +00:00
|
|
|
});
|
2014-01-05 02:05:20 +00:00
|
|
|
}
|
2013-09-11 14:28:14 +00:00
|
|
|
|
|
|
|
|
$scope.reject = function(guild){
|
2013-09-11 18:08:53 +00:00
|
|
|
var i = _.findIndex(User.user.invitations.guilds, {id:guild.id});
|
2013-09-11 15:07:38 +00:00
|
|
|
if (~i){
|
|
|
|
|
User.user.invitations.guilds.splice(i, 1);
|
|
|
|
|
User.set('invitations.guilds', User.user.invitations.guilds);
|
|
|
|
|
}
|
2013-09-11 14:28:14 +00:00
|
|
|
}
|
2013-08-30 00:18:39 +00:00
|
|
|
}
|
|
|
|
|
])
|
|
|
|
|
|
2014-01-08 21:09:08 +00:00
|
|
|
.controller("PartyCtrl", ['$rootScope','$scope', 'Groups', 'User', 'Challenges', '$state', '$compile',
|
|
|
|
|
function($rootScope,$scope, Groups, User, Challenges, $state, $compile) {
|
2013-08-30 00:18:39 +00:00
|
|
|
$scope.type = 'party';
|
|
|
|
|
$scope.text = 'Party';
|
2013-12-20 19:42:36 +00:00
|
|
|
$scope.group = $rootScope.party = Groups.party();
|
2014-01-05 21:45:01 +00:00
|
|
|
$scope.newGroup = new Groups.Group({type:'party'});
|
2013-09-02 00:57:01 +00:00
|
|
|
$scope.create = function(group){
|
2013-10-31 16:35:04 +00:00
|
|
|
group.$save(function(newGroup){
|
2013-11-01 20:08:36 +00:00
|
|
|
$scope.group = newGroup;
|
2013-09-02 00:57:01 +00:00
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2013-09-01 15:33:39 +00:00
|
|
|
$scope.join = function(party){
|
2013-09-02 02:08:01 +00:00
|
|
|
var group = new Groups.Group({_id: party.id, name: party.name});
|
2013-09-02 01:31:38 +00:00
|
|
|
// there a better way to access GroupsCtrl.groups.party?
|
2013-10-31 16:35:04 +00:00
|
|
|
group.$join(function(groupJoined){
|
2013-11-01 20:08:36 +00:00
|
|
|
$scope.group = groupJoined;
|
2013-09-02 01:31:38 +00:00
|
|
|
});
|
2013-09-01 15:33:39 +00:00
|
|
|
}
|
2013-10-31 16:35:04 +00:00
|
|
|
|
2014-01-08 21:09:08 +00:00
|
|
|
// TODO: refactor guild and party leave into one function
|
|
|
|
|
$scope.leave = function(keep) {
|
|
|
|
|
if (keep == 'cancel') {
|
|
|
|
|
$scope.selectedGroup = undefined;
|
|
|
|
|
} else {
|
|
|
|
|
var group = $scope.selectedGroup;
|
|
|
|
|
Groups.Group.leave({gid: group._id, keep:keep}, undefined, function(){
|
2013-11-01 20:08:36 +00:00
|
|
|
$scope.group = undefined;
|
2013-09-02 01:31:38 +00:00
|
|
|
});
|
2014-01-08 21:09:08 +00:00
|
|
|
$state.go('options.social.party');
|
|
|
|
|
};
|
|
|
|
|
$scope.popoverEl.popover('destroy');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// TODO: refactor guild and party clickLeave into one function
|
|
|
|
|
$scope.clickLeave = function(group, $event){
|
|
|
|
|
$scope.selectedGroup = group;
|
|
|
|
|
$scope.popoverEl = $($event.target);
|
|
|
|
|
var html, title;
|
|
|
|
|
Challenges.Challenge.query(function(challenges) {
|
|
|
|
|
challenges = _.pluck(_.filter(challenges, function(c) {
|
|
|
|
|
return c.group._id == group._id;
|
|
|
|
|
}), '_id');
|
|
|
|
|
if (_.intersection(challenges, User.user.challenges).length > 0) {
|
|
|
|
|
html = $compile(
|
2014-02-05 22:43:49 +00:00
|
|
|
'<a ng-controller="GroupsCtrl" ng-click="leave(\'remove-all\')">' + window.env.t('removeTasks') + '</a><br/>\n<a ng-click="leave(\'keep-all\')">' + window.env.t('keepTasks') + '</a><br/>\n<a ng-click="leave(\'cancel\')">' + window.env.t('cancel') + '</a><br/>'
|
2014-01-08 21:09:08 +00:00
|
|
|
)($scope);
|
2014-02-05 22:43:49 +00:00
|
|
|
title = window.env.t('leavePartyCha');
|
2014-01-08 21:09:08 +00:00
|
|
|
} else {
|
|
|
|
|
html = $compile(
|
2014-02-05 22:43:49 +00:00
|
|
|
'<a ng-controller="GroupsCtrl" ng-click="leave(\'keep-all\')">' + window.env.t('confirm') + '</a><br/>\n<a ng-click="leave(\'cancel\')">' + window.env.t('cancel') + '</a><br/>'
|
2014-01-08 21:09:08 +00:00
|
|
|
)($scope);
|
2014-02-05 22:43:49 +00:00
|
|
|
title = window.env.t('leaveParty');
|
2014-01-08 21:09:08 +00:00
|
|
|
}
|
|
|
|
|
$scope.popoverEl.popover('destroy').popover({
|
|
|
|
|
html: true,
|
|
|
|
|
placement: 'top',
|
|
|
|
|
trigger: 'manual',
|
|
|
|
|
title: title,
|
|
|
|
|
content: html
|
|
|
|
|
}).popover('show');
|
|
|
|
|
});
|
2013-09-02 00:24:44 +00:00
|
|
|
}
|
2013-10-31 16:35:04 +00:00
|
|
|
|
2013-09-02 00:24:44 +00:00
|
|
|
$scope.reject = function(){
|
2013-12-15 21:01:57 +00:00
|
|
|
//User.user.invitations.party = undefined;
|
|
|
|
|
User.set({'invitations.party':{}});
|
2013-09-02 00:24:44 +00:00
|
|
|
}
|
2013-12-23 09:56:55 +00:00
|
|
|
|
|
|
|
|
$scope.questAbort = function(){
|
2014-02-05 22:43:49 +00:00
|
|
|
if (!confirm(window.env.t('sureAbort'))) return;
|
|
|
|
|
if (!confirm(window.env.t('doubleSureAbort'))) return;
|
2013-12-23 09:56:55 +00:00
|
|
|
$rootScope.party.$questAbort();
|
|
|
|
|
}
|
2013-08-30 00:18:39 +00:00
|
|
|
}
|
|
|
|
|
])
|
|
|
|
|
|
2013-09-02 13:47:44 +00:00
|
|
|
.controller("TavernCtrl", ['$scope', 'Groups', 'User',
|
|
|
|
|
function($scope, Groups, User) {
|
2013-11-02 03:15:04 +00:00
|
|
|
$scope.group = Groups.tavern();
|
2013-11-08 01:24:49 +00:00
|
|
|
$scope.toggleUserTier = function($event) {
|
|
|
|
|
$($event.target).next().toggle();
|
|
|
|
|
}
|
2013-08-30 00:18:39 +00:00
|
|
|
}
|
2013-11-02 08:37:17 +00:00
|
|
|
])
|