diff --git a/karma.conf.js b/karma.conf.js index 7aaa443857..42e63f35db 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -71,6 +71,7 @@ module.exports = function(config) { "website/public/js/directives/when-scrolled.directive.js", "website/public/js/controllers/authCtrl.js", + "website/public/js/controllers/menuCtrl.js", "website/public/js/controllers/notificationCtrl.js", "website/public/js/controllers/rootCtrl.js", "website/public/js/controllers/settingsCtrl.js", diff --git a/test/spec/controllers/authCtrlSpec.js b/test/spec/controllers/authCtrlSpec.js index d91ad5c600..a2db08a944 100644 --- a/test/spec/controllers/authCtrlSpec.js +++ b/test/spec/controllers/authCtrlSpec.js @@ -41,11 +41,5 @@ describe('Auth Controller', function() { expect($window.alert).to.be.calledOnce; }); }); - - describe('clearMessage', function() { - it('is Chat.seenMessage', inject(function(Chat) { - expect(scope.clearMessages).to.eql(Chat.seenMessage); - })); - }); }); }); diff --git a/test/spec/controllers/menuCtrlSpec.js b/test/spec/controllers/menuCtrlSpec.js new file mode 100644 index 0000000000..eaa642370b --- /dev/null +++ b/test/spec/controllers/menuCtrlSpec.js @@ -0,0 +1,26 @@ +'use strict'; + +describe('Menu Controller', function() { + + describe('MenuCtrl', function(){ + var scope, ctrl, user, $httpBackend, $window; + + beforeEach(function(){ + module(function($provide) { + $provide.value('Chat', { seenMessage: function() {} }); + }); + + inject(function(_$httpBackend_, $rootScope, $controller) { + scope = $rootScope.$new(); + + ctrl = $controller('MenuCtrl', {$scope: scope, $window: $window, User: user}); + }) + }); + + describe('clearMessage', function() { + it('is Chat.seenMessage', inject(function(Chat) { + expect(scope.clearMessages).to.eql(Chat.seenMessage); + })); + }); + }); +}); diff --git a/website/public/js/controllers/authCtrl.js b/website/public/js/controllers/authCtrl.js index 88ee5fef87..e7a4439cc0 100644 --- a/website/public/js/controllers/authCtrl.js +++ b/website/public/js/controllers/authCtrl.js @@ -5,8 +5,8 @@ */ angular.module('habitrpg') - .controller("AuthCtrl", ['$scope', '$rootScope', 'User', '$http', '$location', '$window','ApiUrl', '$modal', 'Analytics', 'Chat', - function($scope, $rootScope, User, $http, $location, $window, ApiUrl, $modal, Analytics, Chat) { + .controller("AuthCtrl", ['$scope', '$rootScope', 'User', '$http', '$location', '$window','ApiUrl', '$modal', 'Analytics', + function($scope, $rootScope, User, $http, $location, $window, ApiUrl, $modal, Analytics) { $scope.Analytics = Analytics; $scope.logout = function() { @@ -102,41 +102,6 @@ angular.module('habitrpg') } }; - // @TODO: Pull out menu stuff into separate menu controller - $scope.expandMenu = function(menu) { - $scope._expandedMenu = ($scope._expandedMenu == menu) ? null : menu; - }; - - function selectNotificationValue(mysteryValue, invitationValue, unallocatedValue, messageValue, noneValue) { - var user = $scope.user; - if (user.purchased && user.purchased.plan && user.purchased.plan.mysteryItems && user.purchased.plan.mysteryItems.length) { - return mysteryValue; - } else if ((user.invitations.party && user.invitations.party.id) || (user.invitations.guilds && user.invitations.guilds.length > 0)) { - return invitationValue; - } else if (user.flags.classSelected && !(user.preferences && user.preferences.disableClasses) && user.stats.points) { - return unallocatedValue; - } else if (!(_.isEmpty(user.newMessages))) { - return messageValue; - } else { - return noneValue; - } - }; - - $scope.clearMessages = Chat.seenMessage; - - $scope.iconClasses = function() { - return selectNotificationValue( - "glyphicon-gift", - "glyphicon-user", - "glyphicon-plus-sign", - "glyphicon-comment", - "glyphicon-comment inactive"); - }; - - $scope.hasNoNotifications = function() { - return selectNotificationValue(false, false, false, false, true); - } - // ------ Social ---------- hello.init({ diff --git a/website/public/js/controllers/menuCtrl.js b/website/public/js/controllers/menuCtrl.js new file mode 100644 index 0000000000..b882959bbd --- /dev/null +++ b/website/public/js/controllers/menuCtrl.js @@ -0,0 +1,47 @@ +'use strict'; + +angular.module('habitrpg') + .controller('MenuCtrl', ['$scope', '$rootScope', '$http', 'Chat', + function($scope, $rootScope, $http, Chat) { + + $scope.logout = function() { + localStorage.clear(); + window.location.href = '/logout'; + }; + + $scope.expandMenu = function(menu) { + $scope._expandedMenu = ($scope._expandedMenu == menu) ? null : menu; + }; + + function selectNotificationValue(mysteryValue, invitationValue, unallocatedValue, messageValue, noneValue) { + var user = $scope.user; + if (user.purchased && user.purchased.plan && user.purchased.plan.mysteryItems && user.purchased.plan.mysteryItems.length) { + return mysteryValue; + } else if ((user.invitations.party && user.invitations.party.id) || (user.invitations.guilds && user.invitations.guilds.length > 0)) { + return invitationValue; + } else if (user.flags.classSelected && !(user.preferences && user.preferences.disableClasses) && user.stats.points) { + return unallocatedValue; + } else if (!(_.isEmpty(user.newMessages))) { + return messageValue; + } else { + return noneValue; + } + }; + + $scope.clearMessages = Chat.seenMessage; + + $scope.iconClasses = function() { + return selectNotificationValue( + 'glyphicon-gift', + 'glyphicon-user', + 'glyphicon-plus-sign', + 'glyphicon-comment', + 'glyphicon-comment inactive' + ); + }; + + $scope.hasNoNotifications = function() { + return selectNotificationValue(false, false, false, false, true); + } + } +]); diff --git a/website/public/manifest.json b/website/public/manifest.json index a96c0fb225..da32d2cfa4 100644 --- a/website/public/manifest.json +++ b/website/public/manifest.json @@ -68,6 +68,7 @@ "js/directives/when-scrolled.directive.js", "js/controllers/authCtrl.js", + "js/controllers/menuCtrl.js", "js/controllers/notificationCtrl.js", "js/controllers/rootCtrl.js", "js/controllers/settingsCtrl.js", diff --git a/website/views/shared/header/menu.jade b/website/views/shared/header/menu.jade index 964546eeaf..02d2d0a758 100644 --- a/website/views/shared/header/menu.jade +++ b/website/views/shared/header/menu.jade @@ -1,4 +1,4 @@ -nav.toolbar(ng-controller='AuthCtrl', ng-class='{active: isToolbarHidden}') +nav.toolbar(ng-controller='MenuCtrl', ng-class='{active: isToolbarHidden}') button.toolbar-toggle(ng-click='isToolbarHidden = !isToolbarHidden', ng-class='{active: isToolbarHidden}') span.glyphicon.glyphicon-remove-circle span.toggle-text.toggle-close=env.t('close')