From 74be4b211b6bfe36b31e6926015e38cb6b574ee8 Mon Sep 17 00:00:00 2001 From: Brian Chen Date: Sat, 4 Oct 2014 17:56:56 +0800 Subject: [PATCH 1/3] DRY-refactor notification display conditions * Condense the different notification icons into one span with a dynamically selected ng-class. * Move logic for determining which notification icon to show and whether there are no notifications into AuthCtrl. * Refactor out the two similar sequences of logic conditions into a helper function. --- public/js/controllers/authCtrl.js | 25 +++++++++++++++++++++++++ views/shared/header/menu.jade | 6 ++---- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/public/js/controllers/authCtrl.js b/public/js/controllers/authCtrl.js index da6845bf9e..782db0a7d0 100644 --- a/public/js/controllers/authCtrl.js +++ b/public/js/controllers/authCtrl.js @@ -94,5 +94,30 @@ angular.module('authCtrl', []) $scope.expandMenu = function(menu) { $scope._expandedMenu = ($scope._expandedMenu == menu) ? null : menu; }; + + function selectNotificationValue(mysteryValue, invitationValue, messageValue, noneValue) { + var user = $scope.user; + if (user.purchased.plan.mysteryItems.length) { + return mysteryValue; + } else if ((user.invitations.party && user.invitations.party.id) || user.invitations.guilds.length > 0) { + return invitationValue; + } else if (!(_.isEmpty(user.newMessages))) { + return messageValue; + } else { + return noneValue; + } + }; + + $scope.iconClasses = function() { + return selectNotificationValue( + "glyphicon-gift", + "glyphicon-user", + "glyphicon-comment", + "glyphicon-comment inactive"); + }; + + $scope.hasNoNotifications = function() { + return selectNotificationValue(false, false, false, true); + } } ]); diff --git a/views/shared/header/menu.jade b/views/shared/header/menu.jade index dcef6f61d9..8029044109 100644 --- a/views/shared/header/menu.jade +++ b/views/shared/header/menu.jade @@ -137,14 +137,12 @@ nav.toolbar(ng-controller='AuthCtrl', ng-class='{active: isToolbarHidden}') ul.toolbar-options li.toolbar-notifs a(ng-click='expandMenu("notifs")') - span.glyphicon.glyphicon-comment(ng-if='!user.invitations.party.id && !user.purchased.plan.mysteryItems.length && user.invitations.guilds.length === 0', ng-class='{inactive: _.isEmpty(user.newMessages)}') - span.glyphicon.glyphicon-user(ng-if='!user.purchased.plan.mysteryItems.length && (user.invitations.party.id || user.invitations.guilds.length > 0)') - span.glyphicon.glyphicon-gift(ng-if='user.purchased.plan.mysteryItems.length') + span.glyphicon(ng-class='iconClasses()') div(ng-if='_expandedMenu=="notifs"') h4=env.t('notifications') div ul.toolbar-notifs-notifs - li.toolbar-notifs-no-messages(ng-if='!user.invitations.party.id && !user.purchased.plan.mysteryItems.length && user.invitations.guilds.length === 0 && _.isEmpty(user.newMessages)')=env.t('noNotifications') + li.toolbar-notifs-no-messages(ng-if='hasNoNotifications()')=env.t('noNotifications') li(ng-if='user.purchased.plan.mysteryItems.length') a(ng-click='$state.go("options.inventory.drops"); expandMenu(null)') span.glyphicon.glyphicon-gift From 9ecbe9d48f99b562259188f88471aa8008e49009 Mon Sep 17 00:00:00 2001 From: Brian Chen Date: Sat, 4 Oct 2014 19:57:30 +0800 Subject: [PATCH 2/3] Add unallocated attribute points notification * Uses i18n "haveUnallocated" string, to come in another commit --- public/js/controllers/authCtrl.js | 7 +++++-- views/shared/header/menu.jade | 4 ++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/public/js/controllers/authCtrl.js b/public/js/controllers/authCtrl.js index 782db0a7d0..aea30e7f81 100644 --- a/public/js/controllers/authCtrl.js +++ b/public/js/controllers/authCtrl.js @@ -95,12 +95,14 @@ angular.module('authCtrl', []) $scope._expandedMenu = ($scope._expandedMenu == menu) ? null : menu; }; - function selectNotificationValue(mysteryValue, invitationValue, messageValue, noneValue) { + function selectNotificationValue(mysteryValue, invitationValue, unallocatedValue, messageValue, noneValue) { var user = $scope.user; if (user.purchased.plan.mysteryItems.length) { return mysteryValue; } else if ((user.invitations.party && user.invitations.party.id) || 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 { @@ -112,12 +114,13 @@ angular.module('authCtrl', []) return selectNotificationValue( "glyphicon-gift", "glyphicon-user", + "glyphicon-plus-sign", "glyphicon-comment", "glyphicon-comment inactive"); }; $scope.hasNoNotifications = function() { - return selectNotificationValue(false, false, false, true); + return selectNotificationValue(false, false, false, false, true); } } ]); diff --git a/views/shared/header/menu.jade b/views/shared/header/menu.jade index 8029044109..b768c3935e 100644 --- a/views/shared/header/menu.jade +++ b/views/shared/header/menu.jade @@ -155,6 +155,10 @@ nav.toolbar(ng-controller='AuthCtrl', ng-class='{active: isToolbarHidden}') a(ui-sref='options.social.guilds', ng-click='expandMenu(null)') span.glyphicon.glyphicon-user span=env.t('invitedTo', {name: '{{guild.name}}'}) + li(ng-if='user.flags.classSelected && !user.preferences.disableClasses && user.stats.points') + a(ui-sref='options.profile.stats', ng-click='expandMenu(null)') + span.glyphicon.glyphicon-plus-sign + span=env.t('haveUnallocated', {points: '{{user.stats.points}}'}) li(ng-repeat='(k,v) in user.newMessages', ng-if='v.value') a(ng-click='k==party._id ? $state.go("options.social.party") : $state.go("options.social.guilds.detail",{gid:k}); expandMenu(null)') span.glyphicon.glyphicon-comment From 5809e52fe95cc5aec73c06fa9fd6f68d9f7664fc Mon Sep 17 00:00:00 2001 From: Brian Chen Date: Sat, 4 Oct 2014 20:56:13 +0800 Subject: [PATCH 3/3] Make attribute referencing in notification logic more robust --- public/js/controllers/authCtrl.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/js/controllers/authCtrl.js b/public/js/controllers/authCtrl.js index aea30e7f81..7f9d242cf5 100644 --- a/public/js/controllers/authCtrl.js +++ b/public/js/controllers/authCtrl.js @@ -97,9 +97,9 @@ angular.module('authCtrl', []) function selectNotificationValue(mysteryValue, invitationValue, unallocatedValue, messageValue, noneValue) { var user = $scope.user; - if (user.purchased.plan.mysteryItems.length) { + 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.length > 0) { + } 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;