[#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/controllers/authCtrl.js',
'public/js/controllers/menuCtrl.js',
'public/js/controllers/notificationCtrl.js',
'public/js/controllers/rootCtrl.js',
'public/js/controllers/settingsCtrl.js',
'public/js/controllers/statsCtrl.js',
'public/js/controllers/headerCtrl.js',
'public/js/controllers/tasksCtrl.js',
'public/js/controllers/filtersCtrl.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);
}
// ------ Loading ------
$scope.groups = Groups.groups;
$scope.fetchGuilds = Groups.fetchGuilds;
$scope.fetchTavern = Groups.fetchTavern;
// ------ Modals ------
$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',
function($scope, Groups, User, $rootScope, $state, $location) {
Groups.fetchGuilds();
$scope.groups = {
guilds: Groups.myGuilds(),
"public": Groups.publicGuilds()
}
$scope.type = 'guild';
$scope.text = 'Guild';
$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) {
$scope.type = '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.create = function(group){
group.$save(function(newGroup){
@@ -222,17 +219,12 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Groups', '$http', 'A
User.user.invitations.party = undefined;
User.log({op:'set',data:{'invitations.party':{}}});
}
$scope.removeSelf = function(member){
return member._id !== User.user._id;
}
}
])
.controller("TavernCtrl", ['$scope', 'Groups', 'User',
function($scope, Groups, User) {
Groups.fetchTavern();
$scope.group = Groups.groups.tavern;
$scope.group = Groups.tavern();
$scope.rest = function(){
User.user.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']).
factory('Groups', ['API_URL', '$resource', 'User', '$q', 'Members',
function(API_URL, $resource, User, $q, Members) {
factory('Groups', ['API_URL', '$resource', '$q',
function(API_URL, $resource, $q) {
var Group = $resource(API_URL + '/api/v1/groups/:gid',
{gid:'@_id', messageId: '@_messageId'},
{
@@ -19,44 +19,31 @@ angular.module('groupServices', ['ngResource']).
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
// we defer loading them to the html until they've clicked the tabs
var partyQ = $q.defer();
var groups = {
party: partyQ.promise
};
// Defer loading everything until they're requested
var party, myGuilds, publicGuilds, tavern;
// But we don't defer triggering Party, since we always need it for the header if nothing else
Group.get({gid:'party'}, function(party){
partyQ.resolve(party);
});
party = Group.get({gid: 'party'});
return {
// Note the _.once() to make sure it can never be called again
fetchGuilds: _.once(function(){
party: function(){
return party;
},
publicGuilds: function(){
//TODO combine these as {type:'guilds,public'} and create a $filter() to separate them
Group.query({type:'guilds'}, function(_groups){
groups.guilds = _groups;
//Members.populate(_groups);
});
Group.query({type:'public'}, function(_groups){
groups.public = _groups;
//Members.populate(_groups);
});
}),
fetchTavern: _.once(function(){
Group.get({gid:'habitrpg'}, function(_group){
groups.tavern = _group;
})
}),
Group: Group,
groups: groups
if (!publicGuilds) publicGuilds = Group.query({type:'public'});
return publicGuilds;
},
myGuilds: function(){
if (!myGuilds) myGuilds = Group.query({type:'guilds'});
return myGuilds;
},
tavern: function(){
if (!tavern) tavern = Group.get({gid:'habitrpg'});
return tavern;
},
Group: Group
}
}
]);

View File

@@ -68,11 +68,10 @@ html
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/menuCtrl.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/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/filtersCtrl.js')
script(type='text/javascript', src='/js/controllers/userCtrl.js')

View File

@@ -1,5 +1,5 @@
// @TODO ui:connectionAlert
.header-wrap
.header-wrap(ng-controller='HeaderCtrl')
a.label.undo-button(x-bind='click:undo', ng-show='_undo') Undo
div(ng-if='!user.preferences.hideHeader')
include menu
@@ -27,7 +27,7 @@
i.icon-signal
// party
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
.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')
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()')
li.flyout(ng-controller='MenuCtrl')
li.flyout
h1.task-action-btn.tile.solid.user-reporter {{user.profile.name}}
ul.flyout-content.nav.stacked
li