[#1710] some simplification on Groups memoization. No need for all that

special handling of Header Party, just have it's own controller and do
specific-handling. Also, removing MenuCtrl & StatsCtrl - they weren't
used TMK, I think twas a vestige of mobile. @paglias give that a gander
This commit is contained in:
Tyler Renelle
2013-11-01 20:15:04 -07:00
parent 65b18f3af1
commit 62b2d5780b
9 changed files with 42 additions and 93 deletions

View File

@@ -57,11 +57,10 @@ module.exports = function(grunt) {
'public/js/directives/directives.js', 'public/js/directives/directives.js',
'public/js/controllers/authCtrl.js', 'public/js/controllers/authCtrl.js',
'public/js/controllers/menuCtrl.js',
'public/js/controllers/notificationCtrl.js', 'public/js/controllers/notificationCtrl.js',
'public/js/controllers/rootCtrl.js', 'public/js/controllers/rootCtrl.js',
'public/js/controllers/settingsCtrl.js', 'public/js/controllers/settingsCtrl.js',
'public/js/controllers/statsCtrl.js', 'public/js/controllers/headerCtrl.js',
'public/js/controllers/tasksCtrl.js', 'public/js/controllers/tasksCtrl.js',
'public/js/controllers/filtersCtrl.js', 'public/js/controllers/filtersCtrl.js',
'public/js/controllers/userCtrl.js', 'public/js/controllers/userCtrl.js',

View File

@@ -25,12 +25,6 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Groups', '$http', 'A
group.websites.splice($index,1); group.websites.splice($index,1);
} }
// ------ Loading ------
$scope.groups = Groups.groups;
$scope.fetchGuilds = Groups.fetchGuilds;
$scope.fetchTavern = Groups.fetchTavern;
// ------ Modals ------ // ------ Modals ------
$scope.clickMember = function(uid, forceShow) { $scope.clickMember = function(uid, forceShow) {
@@ -130,7 +124,10 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Groups', '$http', 'A
.controller("GuildsCtrl", ['$scope', 'Groups', 'User', '$rootScope', '$state', '$location', .controller("GuildsCtrl", ['$scope', 'Groups', 'User', '$rootScope', '$state', '$location',
function($scope, Groups, User, $rootScope, $state, $location) { function($scope, Groups, User, $rootScope, $state, $location) {
Groups.fetchGuilds(); $scope.groups = {
guilds: Groups.myGuilds(),
"public": Groups.publicGuilds()
}
$scope.type = 'guild'; $scope.type = 'guild';
$scope.text = 'Guild'; $scope.text = 'Guild';
$scope.newGroup = new Groups.Group({type:'guild', privacy:'private', leader: User.user._id, members: [User.user._id]}); $scope.newGroup = new Groups.Group({type:'guild', privacy:'private', leader: User.user._id, members: [User.user._id]});
@@ -193,7 +190,7 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Groups', '$http', 'A
function($scope, Groups, User, $state) { function($scope, Groups, User, $state) {
$scope.type = 'party'; $scope.type = 'party';
$scope.text = 'Party'; $scope.text = 'Party';
$scope.group = Groups.groups.party; $scope.group = Groups.party();
$scope.newGroup = new Groups.Group({type:'party', leader: User.user._id, members: [User.user._id]}); $scope.newGroup = new Groups.Group({type:'party', leader: User.user._id, members: [User.user._id]});
$scope.create = function(group){ $scope.create = function(group){
group.$save(function(newGroup){ group.$save(function(newGroup){
@@ -222,17 +219,12 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Groups', '$http', 'A
User.user.invitations.party = undefined; User.user.invitations.party = undefined;
User.log({op:'set',data:{'invitations.party':{}}}); User.log({op:'set',data:{'invitations.party':{}}});
} }
$scope.removeSelf = function(member){
return member._id !== User.user._id;
}
} }
]) ])
.controller("TavernCtrl", ['$scope', 'Groups', 'User', .controller("TavernCtrl", ['$scope', 'Groups', 'User',
function($scope, Groups, User) { function($scope, Groups, User) {
Groups.fetchTavern(); $scope.group = Groups.tavern();
$scope.group = Groups.groups.tavern;
$scope.rest = function(){ $scope.rest = function(){
User.user.flags.rest = !User.user.flags.rest; User.user.flags.rest = !User.user.flags.rest;
User.log({op:'set',data:{'flags.rest':User.user.flags.rest}}); User.log({op:'set',data:{'flags.rest':User.user.flags.rest}});

View File

@@ -0,0 +1,10 @@
"use strict";
habitrpg.controller("HeaderCtrl", ['$scope', 'Groups', 'User',
function($scope, Groups, User) {
$scope.party = Groups.party();
$scope.partyMinusSelf = _.filter($scope.party, function(member){
return member._id !== User.user._id;
});
}
]);

View File

@@ -1,24 +0,0 @@
'use strict';
/**
* The menu controller:
* - sets the menu options, should we do it dynamic so it generates the menu like: width = 1/elements * 100 ?
* - exposes the model to the template and provides event handlers
*/
habitrpg.controller('MenuCtrl',
['$scope', '$rootScope', 'User',
function($scope, $rootScope, User) {
//FIXME are these used anywhere? can we get rid of this file?
$scope.refreshing = function () {
User.settings.fetching ? "spin" : ""
};
$scope.queueLength = function () {
User.settings.sync.queue.length || User.settings.sync.sent.length
};
}
]);

View File

@@ -1,14 +0,0 @@
'use strict';
habitrpg.controller('StatsCtrl',
['$scope', 'User',
function($scope, User) {
$scope.refreshing = function () {
User.settings.fetching ? "spin" : ""
};
$scope.queueLength = function () {
User.settings.sync.queue.length || User.settings.sync.sent.length
};
$scope.stats = User.user.stats;
}
]);

View File

@@ -5,8 +5,8 @@
*/ */
angular.module('groupServices', ['ngResource']). angular.module('groupServices', ['ngResource']).
factory('Groups', ['API_URL', '$resource', 'User', '$q', 'Members', factory('Groups', ['API_URL', '$resource', '$q',
function(API_URL, $resource, User, $q, Members) { function(API_URL, $resource, $q) {
var Group = $resource(API_URL + '/api/v1/groups/:gid', var Group = $resource(API_URL + '/api/v1/groups/:gid',
{gid:'@_id', messageId: '@_messageId'}, {gid:'@_id', messageId: '@_messageId'},
{ {
@@ -19,44 +19,31 @@ angular.module('groupServices', ['ngResource']).
removeMember: {method: "POST", url: API_URL + '/api/v1/groups/:gid/removeMember'} removeMember: {method: "POST", url: API_URL + '/api/v1/groups/:gid/removeMember'}
}); });
// The user may not visit the public guilds, personal guilds, and tavern pages. So // Defer loading everything until they're requested
// we defer loading them to the html until they've clicked the tabs var party, myGuilds, publicGuilds, tavern;
var partyQ = $q.defer();
var groups = {
party: partyQ.promise
};
// But we don't defer triggering Party, since we always need it for the header if nothing else // But we don't defer triggering Party, since we always need it for the header if nothing else
Group.get({gid:'party'}, function(party){ party = Group.get({gid: 'party'});
partyQ.resolve(party);
});
return { return {
party: function(){
// Note the _.once() to make sure it can never be called again return party;
fetchGuilds: _.once(function(){ },
publicGuilds: function(){
//TODO combine these as {type:'guilds,public'} and create a $filter() to separate them //TODO combine these as {type:'guilds,public'} and create a $filter() to separate them
Group.query({type:'guilds'}, function(_groups){ if (!publicGuilds) publicGuilds = Group.query({type:'public'});
groups.guilds = _groups; return publicGuilds;
//Members.populate(_groups); },
}); myGuilds: function(){
Group.query({type:'public'}, function(_groups){ if (!myGuilds) myGuilds = Group.query({type:'guilds'});
groups.public = _groups; return myGuilds;
//Members.populate(_groups); },
}); tavern: function(){
}), if (!tavern) tavern = Group.get({gid:'habitrpg'});
return tavern;
fetchTavern: _.once(function(){ },
Group.get({gid:'habitrpg'}, function(_group){
groups.tavern = _group;
})
}),
Group: Group,
groups: groups
Group: Group
} }
} }
]); ]);

View File

@@ -68,11 +68,10 @@ html
script(type='text/javascript', src='/js/directives/directives.js') script(type='text/javascript', src='/js/directives/directives.js')
script(type='text/javascript', src='/js/controllers/authCtrl.js') script(type='text/javascript', src='/js/controllers/authCtrl.js')
script(type='text/javascript', src='/js/controllers/menuCtrl.js')
script(type='text/javascript', src='/js/controllers/notificationCtrl.js') script(type='text/javascript', src='/js/controllers/notificationCtrl.js')
script(type='text/javascript', src='/js/controllers/rootCtrl.js') script(type='text/javascript', src='/js/controllers/rootCtrl.js')
script(type='text/javascript', src='/js/controllers/settingsCtrl.js') script(type='text/javascript', src='/js/controllers/settingsCtrl.js')
script(type='text/javascript', src='/js/controllers/statsCtrl.js') script(type='text/javascript', src='/js/controllers/headerCtrl.js')
script(type='text/javascript', src='/js/controllers/tasksCtrl.js') script(type='text/javascript', src='/js/controllers/tasksCtrl.js')
script(type='text/javascript', src='/js/controllers/filtersCtrl.js') script(type='text/javascript', src='/js/controllers/filtersCtrl.js')
script(type='text/javascript', src='/js/controllers/userCtrl.js') script(type='text/javascript', src='/js/controllers/userCtrl.js')

View File

@@ -1,5 +1,5 @@
// @TODO ui:connectionAlert // @TODO ui:connectionAlert
.header-wrap .header-wrap(ng-controller='HeaderCtrl')
a.label.undo-button(x-bind='click:undo', ng-show='_undo') Undo a.label.undo-button(x-bind='click:undo', ng-show='_undo') Undo
div(ng-if='!user.preferences.hideHeader') div(ng-if='!user.preferences.hideHeader')
include menu include menu
@@ -27,7 +27,7 @@
i.icon-signal i.icon-signal
// party // party
span(ng-controller='PartyCtrl') span(ng-controller='PartyCtrl')
.herobox-wrap(ng-repeat='profile in groups.party.members | filter:removeSelf') .herobox-wrap(ng-repeat='profile in party.members | filter:removeSelf')
include avatar include avatar
.NPC-Bailey-Head(ng-show='user.flags.newStuff', tooltip='Psst', tooltip-placement='top', ng-click='modals.newStuff=true') .NPC-Bailey-Head(ng-show='user.flags.newStuff', tooltip='Psst', tooltip-placement='top', ng-click='modals.newStuff=true')

View File

@@ -1,7 +1,7 @@
.user-menu(ng-controller='AuthCtrl') .user-menu(ng-controller='AuthCtrl')
button.task-action-btn.tile.solid(ng-hide='authenticated()', style='cursor: pointer;', ng-click="modals.login = true") Login / Register button.task-action-btn.tile.solid(ng-hide='authenticated()', style='cursor: pointer;', ng-click="modals.login = true") Login / Register
ul.nav.site-nav(ng-show='authenticated()') ul.nav.site-nav(ng-show='authenticated()')
li.flyout(ng-controller='MenuCtrl') li.flyout
h1.task-action-btn.tile.solid.user-reporter {{user.profile.name}} h1.task-action-btn.tile.solid.user-reporter {{user.profile.name}}
ul.flyout-content.nav.stacked ul.flyout-content.nav.stacked
li li