diff --git a/assets/js/controllers/groupsCtrl.js b/assets/js/controllers/groupsCtrl.js index 15e4fd3dec..b9ddc43b82 100644 --- a/assets/js/controllers/groupsCtrl.js +++ b/assets/js/controllers/groupsCtrl.js @@ -119,14 +119,25 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Groups', '$http', 'A }); } + + // TODO Figure out a better way to set variables on GroupsCtrl scope + var groupsCtrl = angular.element($('#groups-controller')).scope(); $scope.group = $scope.groups.party; $scope.join = function(party){ - // workaround since group isn't currently a resource, this won't get saved to the server var group = new Groups({_id: party.id, name: party.name}); - group.$join(); + // there a better way to access GroupsCtrl.groups.party? + groupsCtrl.groups.party = group.$join(function(){ + groupsCtrl.safeApply(function(){ + User.user.invitations.party = undefined; + }) + }); } $scope.leave = function(group){ - group.$leave(); + group.$leave(function(){ + groupsCtrl.safeApply(function(){ + groupsCtrl.groups.party = {}; + }) + }); } $scope.reject = function(){ User.user.invitations.party = undefined; diff --git a/assets/js/controllers/rootCtrl.js b/assets/js/controllers/rootCtrl.js index 1f231d7ad3..d45548792d 100644 --- a/assets/js/controllers/rootCtrl.js +++ b/assets/js/controllers/rootCtrl.js @@ -11,6 +11,17 @@ habitrpg.controller("RootCtrl", ['$scope', '$rootScope', '$location', 'User', '$ $rootScope.settings = User.settings; $rootScope.flash = {errors: [], warnings: []}; + $scope.safeApply = function(fn) { + var phase = this.$root.$$phase; + if(phase == '$apply' || phase == '$digest') { + if(fn && (typeof(fn) === 'function')) { + fn(); + } + } else { + this.$apply(fn); + } + }; + /* FIXME this is dangerous, organize helpers.coffee better, so we can group them by which controller needs them, and then simply _.defaults($scope, Helpers.user) kinda thing diff --git a/src/controllers/groups.js b/src/controllers/groups.js index 89726d9ee4..bd3235cd73 100644 --- a/src/controllers/groups.js +++ b/src/controllers/groups.js @@ -188,7 +188,7 @@ api.invite = function(req, res, next) { invite.save(); Group.findById(group._id) .populate('members', partyFields).exec(function(err, saved){ - res.json(group); + res.json(saved); }); } diff --git a/views/options/groups/group.jade b/views/options/groups/group.jade index 592430a901..048ce961f1 100644 --- a/views/options/groups/group.jade +++ b/views/options/groups/group.jade @@ -13,15 +13,15 @@ a.pull-right.gem-wallet(rel='popover', data-trigger='hover', data-title='Guild B div(style='height:10px') a.pull-right(x-bind='click:toggleGroupEdit', data-gid='{{group.id}}') i.icon-ok - input.option-content(type='text', value='{group.name}', placeholder='Group Name') + input.option-content(type='text', value='{{group.name}}', placeholder='Group Name') textarea(cols='3', placeholder='Description') {{group.description}} - input.option-content(type='url', placeholder='Logo Url', value='{group.logo}') + input.option-content(type='url', placeholder='Logo Url', value='{{group.logo}}') form.form-inline(x-bind='submit:groupAddWebsite') - input.option-content(type='url', placeholder='Website', value='{_newGroupWebsite}') + input.option-content(type='url', placeholder='Website', value='{{_newGroupWebsite}}') input(type='submit', value='Add') h4 Assign Group Leader select#group-leader-selection - option(ng-repeat='memberId in group.members', selected='{equal(memberId,_new.groupLeader)}') {{username(_members[memberId].auth,_members[memberId].profile.name)}} + option(ng-repeat='memberId in group.members', selected='memberId == _new.groupLeader') {{username(_members[memberId].auth,_members[memberId].profile.name)}} button(x-bind='click:assignGroupLeader') Assign div(ng-show='group.websites') h4 Resources @@ -29,9 +29,9 @@ a.pull-right.gem-wallet(rel='popover', data-trigger='hover', data-title='Guild B li a(ng-repeat='website in group.websites', x-bind='click:removeAt') i.icon-trash - a(target='_blank', href='{website}') {{website}} + a(target='_blank', href='{{website}}') {{website}} div(ng-show='!_editing.groups[group.id]') - img.pull-right(ng-show='group.logo', style='max-width:150px', src='{group.logo}') + img.pull-right(ng-show='group.logo', style='max-width:150px', ng-src='{{group.logo}}') a.pull-right(ng-if='group.leader==user.id', x-bind='click:toggleGroupEdit', data-gid='{{group.id}}') i.icon-pencil div {{group.description}} diff --git a/views/options/groups/index.jade b/views/options/groups/index.jade index 07884f1195..11b7973791 100644 --- a/views/options/groups/index.jade +++ b/views/options/groups/index.jade @@ -1,4 +1,4 @@ -div(ng-controller='GroupsCtrl') +div#groups-controller(ng-controller='GroupsCtrl') // FIXME note, due to https://github.com/angular-ui/bootstrap/issues/783 we can't use nested angular-bootstrap tabs // Subscribe to that ticket & change this when they fix @@ -10,7 +10,7 @@ div(ng-controller='GroupsCtrl') a(data-target='#groups-guilds', data-toggle='tab', ng-click='fetchGuilds()') Guilds .tab-content(ng-controller='PartyCtrl') - #groups-party.tab-pane.active Party + #groups-party.tab-pane.active div(ng-show='group._id') include ./group div(ng-hide='group._id') @@ -29,7 +29,7 @@ div(ng-controller='GroupsCtrl') {{user.id}} include ./create-group - #groups-guilds.tab-pane(ng-controller='GuildsCtrl') Guilds + #groups-guilds.tab-pane(ng-controller='GuildsCtrl') ul.nav.nav-tabs li.active a(data-target='#groups-public-guilds', data-toggle='tab') Public Guilds