From a29ec2435fa0a6e8d0f3fb85fdbcb63debde419c Mon Sep 17 00:00:00 2001 From: Amos Haviv Date: Mon, 26 May 2014 00:49:26 +0300 Subject: [PATCH] Fixing menu --- public/dist/application.js | 456 ------------------ public/modules/core/img/brand/logo.png | Bin 4504 -> 14055 bytes .../core/views/header.client.view.html | 4 +- .../modules/core/views/home.client.view.html | 2 +- 4 files changed, 3 insertions(+), 459 deletions(-) delete mode 100644 public/dist/application.js diff --git a/public/dist/application.js b/public/dist/application.js deleted file mode 100644 index 8dad0bb091..0000000000 --- a/public/dist/application.js +++ /dev/null @@ -1,456 +0,0 @@ -'use strict'; -// Init the application configuration module for AngularJS application -var ApplicationConfiguration = function () { - // Init module configuration options - var applicationModuleName = 'mean'; - var applicationModuleVendorDependencies = [ - 'ngResource', - 'ngAnimate', - 'ui.router', - 'ui.bootstrap', - 'ui.utils' - ]; - // Add a new vertical module - var registerModule = function (moduleName) { - // Create angular module - angular.module(moduleName, []); - // Add the module to the AngularJS configuration file - angular.module(applicationModuleName).requires.push(moduleName); - }; - return { - applicationModuleName: applicationModuleName, - applicationModuleVendorDependencies: applicationModuleVendorDependencies, - registerModule: registerModule - }; - }();'use strict'; -//Start by defining the main module and adding the module dependencies -angular.module(ApplicationConfiguration.applicationModuleName, ApplicationConfiguration.applicationModuleVendorDependencies); -// Setting HTML5 Location Mode -angular.module(ApplicationConfiguration.applicationModuleName).config([ - '$locationProvider', - function ($locationProvider) { - $locationProvider.hashPrefix('!'); - } -]); -//Then define the init function for starting up the application -angular.element(document).ready(function () { - //Fixing facebook bug with redirect - if (window.location.hash === '#_=_') - window.location.hash = '#!'; - //Then init the app - angular.bootstrap(document, [ApplicationConfiguration.applicationModuleName]); -});'use strict'; -// Use Applicaion configuration module to register a new module -ApplicationConfiguration.registerModule('articles');'use strict'; -// Use Applicaion configuration module to register a new module -ApplicationConfiguration.registerModule('core');'use strict'; -// Use Applicaion configuration module to register a new module -ApplicationConfiguration.registerModule('users');'use strict'; -// Configuring the Articles module -angular.module('articles').run([ - 'Menus', - function (Menus) { - // Set top bar menu items - Menus.addMenuItem('topbar', 'Articles', 'articles', 'dropdown'); - Menus.addSubMenuItem('topbar', 'articles', 'List Articles', 'articles'); - Menus.addSubMenuItem('topbar', 'articles', 'New Article', 'articles/create'); - } -]);'use strict'; -// Setting up route -angular.module('articles').config([ - '$stateProvider', - function ($stateProvider) { - // Articles state routing - $stateProvider.state('listArticles', { - url: '/articles', - templateUrl: 'modules/articles/views/list-articles.client.view.html' - }).state('createArticle', { - url: '/articles/create', - templateUrl: 'modules/articles/views/create-article.client.view.html' - }).state('viewArticle', { - url: '/articles/:articleId', - templateUrl: 'modules/articles/views/view-article.client.view.html' - }).state('editArticle', { - url: '/articles/:articleId/edit', - templateUrl: 'modules/articles/views/edit-article.client.view.html' - }); - } -]);'use strict'; -angular.module('articles').controller('ArticlesController', [ - '$scope', - '$stateParams', - '$location', - 'Authentication', - 'Articles', - function ($scope, $stateParams, $location, Authentication, Articles) { - $scope.authentication = Authentication; - $scope.create = function () { - var article = new Articles({ - title: this.title, - content: this.content - }); - article.$save(function (response) { - $location.path('articles/' + response._id); - }, function (errorResponse) { - $scope.error = errorResponse.data.message; - }); - this.title = ''; - this.content = ''; - }; - $scope.remove = function (article) { - if (article) { - article.$remove(); - for (var i in $scope.articles) { - if ($scope.articles[i] === article) { - $scope.articles.splice(i, 1); - } - } - } else { - $scope.article.$remove(function () { - $location.path('articles'); - }); - } - }; - $scope.update = function () { - var article = $scope.article; - article.$update(function () { - $location.path('articles/' + article._id); - }, function (errorResponse) { - $scope.error = errorResponse.data.message; - }); - }; - $scope.find = function () { - $scope.articles = Articles.query(); - }; - $scope.findOne = function () { - $scope.article = Articles.get({ articleId: $stateParams.articleId }); - }; - } -]);'use strict'; -//Articles service used for communicating with the articles REST endpoints -angular.module('articles').factory('Articles', [ - '$resource', - function ($resource) { - return $resource('articles/:articleId', { articleId: '@_id' }, { update: { method: 'PUT' } }); - } -]);'use strict'; -// Setting up route -angular.module('core').config([ - '$stateProvider', - '$urlRouterProvider', - function ($stateProvider, $urlRouterProvider) { - // Redirect to home view when route not found - $urlRouterProvider.otherwise('/'); - // Home state routing - $stateProvider.state('home', { - url: '/', - templateUrl: 'modules/core/views/home.client.view.html' - }); - } -]);'use strict'; -angular.module('core').controller('HeaderController', [ - '$scope', - 'Authentication', - 'Menus', - function ($scope, Authentication, Menus) { - $scope.authentication = Authentication; - $scope.isCollapsed = false; - $scope.menu = Menus.getMenu('topbar'); - $scope.toggleCollapsibleMenu = function () { - $scope.isCollapsed = !$scope.isCollapsed; - }; - } -]);'use strict'; -angular.module('core').controller('HomeController', [ - '$scope', - 'Authentication', - function ($scope, Authentication) { - // This provides Authentication context. - $scope.authentication = Authentication; - } -]);'use strict'; -//Menu service used for managing menus -angular.module('core').service('Menus', [function () { - // Define a set of default roles - this.defaultRoles = ['user']; - // Define the menus object - this.menus = {}; - // A private function for rendering decision - var shouldRender = function (user) { - if (user) { - for (var userRoleIndex in user.roles) { - for (var roleIndex in this.roles) { - if (this.roles[roleIndex] === user.roles[userRoleIndex]) { - return true; - } - } - } - } else { - return this.isPublic; - } - return false; - }; - // Validate menu existance - this.validateMenuExistance = function (menuId) { - if (menuId && menuId.length) { - if (this.menus[menuId]) { - return true; - } else { - throw new Error('Menu does not exists'); - } - } else { - throw new Error('MenuId was not provided'); - } - return false; - }; - // Get the menu object by menu id - this.getMenu = function (menuId) { - // Validate that the menu exists - this.validateMenuExistance(menuId); - // Return the menu object - return this.menus[menuId]; - }; - // Add new menu object by menu id - this.addMenu = function (menuId, isPublic, roles) { - // Create the new menu - this.menus[menuId] = { - isPublic: isPublic || false, - roles: roles || this.defaultRoles, - items: [], - shouldRender: shouldRender - }; - // Return the menu object - return this.menus[menuId]; - }; - // Remove existing menu object by menu id - this.removeMenu = function (menuId) { - // Validate that the menu exists - this.validateMenuExistance(menuId); - // Return the menu object - delete this.menus[menuId]; - }; - // Add menu item object - this.addMenuItem = function (menuId, menuItemTitle, menuItemURL, menuClass, menuItemUIRoute, isPublic, roles) { - // Validate that the menu exists - this.validateMenuExistance(menuId); - // Push new menu item - this.menus[menuId].items.push({ - title: menuItemTitle, - link: menuItemURL, - menuClass: menuClass || '', - uiRoute: menuItemUIRoute || '/' + menuItemURL, - isPublic: isPublic || this.menus[menuId].isPublic, - roles: roles || this.defaultRoles, - items: [], - shouldRender: shouldRender - }); - // Return the menu object - return this.menus[menuId]; - }; - // Add submenu item object - this.addSubMenuItem = function (menuId, rootMenuItemURL, menuItemTitle, menuItemURL, menuItemUIRoute, isPublic, roles) { - // Validate that the menu exists - this.validateMenuExistance(menuId); - // Search for menu item - for (var itemIndex in this.menus[menuId].items) { - if (this.menus[menuId].items[itemIndex].link === rootMenuItemURL) { - // Push new submenu item - this.menus[menuId].items[itemIndex].items.push({ - title: menuItemTitle, - link: menuItemURL, - uiRoute: menuItemUIRoute || '/' + menuItemURL, - isPublic: isPublic || this.menus[menuId].isPublic, - roles: roles || this.defaultRoles, - shouldRender: shouldRender - }); - } - } - // Return the menu object - return this.menus[menuId]; - }; - // Remove existing menu object by menu id - this.removeMenuItem = function (menuId, menuItemURL) { - // Validate that the menu exists - this.validateMenuExistance(menuId); - // Search for menu item to remove - for (var itemIndex in this.menus[menuId].items) { - if (this.menus[menuId].items[itemIndex].link === menuItemURL) { - this.menus[menuId].items.splice(itemIndex, 1); - } - } - // Return the menu object - return this.menus[menuId]; - }; - // Remove existing menu object by menu id - this.removeSubMenuItem = function (menuId, submenuItemURL) { - // Validate that the menu exists - this.validateMenuExistance(menuId); - // Search for menu item to remove - for (var itemIndex in this.menus[menuId].items) { - for (var subitemIndex in this.menus[menuId].items[itemIndex].items) { - if (this.menus[menuId].items[itemIndex].items[subitemIndex].link === submenuItemURL) { - this.menus[menuId].items[itemIndex].items.splice(subitemIndex, 1); - } - } - } - // Return the menu object - return this.menus[menuId]; - }; - //Adding the topbar menu - this.addMenu('topbar'); - }]);'use strict'; -// Config HTTP Error Handling -angular.module('users').config([ - '$httpProvider', - function ($httpProvider) { - // Set the httpProvider "not authorized" interceptor - $httpProvider.interceptors.push([ - '$q', - '$location', - 'Authentication', - function ($q, $location, Authentication) { - return { - responseError: function (rejection) { - switch (rejection.status) { - case 401: - // Deauthenticate the global user - Authentication.user = null; - // Redirect to signin page - $location.path('signin'); - break; - case 403: - // Add unauthorized behaviour - break; - } - return $q.reject(rejection); - } - }; - } - ]); - } -]);'use strict'; -// Setting up route -angular.module('users').config([ - '$stateProvider', - function ($stateProvider) { - // Users state routing - $stateProvider.state('profile', { - url: '/settings/profile', - templateUrl: 'modules/users/views/settings/edit-profile.client.view.html' - }).state('password', { - url: '/settings/password', - templateUrl: 'modules/users/views/settings/change-password.client.view.html' - }).state('accounts', { - url: '/settings/accounts', - templateUrl: 'modules/users/views/settings/social-accounts.client.view.html' - }).state('signup', { - url: '/signup', - templateUrl: 'modules/users/views/signup.client.view.html' - }).state('signin', { - url: '/signin', - templateUrl: 'modules/users/views/signin.client.view.html' - }); - } -]);'use strict'; -angular.module('users').controller('AuthenticationController', [ - '$scope', - '$http', - '$location', - 'Authentication', - function ($scope, $http, $location, Authentication) { - $scope.authentication = Authentication; - //If user is signed in then redirect back home - if ($scope.authentication.user) - $location.path('/'); - $scope.signup = function () { - $http.post('/auth/signup', $scope.credentials).success(function (response) { - //If successful we assign the response to the global user model - $scope.authentication.user = response; - //And redirect to the index page - $location.path('/'); - }).error(function (response) { - $scope.error = response.message; - }); - }; - $scope.signin = function () { - $http.post('/auth/signin', $scope.credentials).success(function (response) { - //If successful we assign the response to the global user model - $scope.authentication.user = response; - //And redirect to the index page - $location.path('/'); - }).error(function (response) { - $scope.error = response.message; - }); - }; - } -]);'use strict'; -angular.module('users').controller('SettingsController', [ - '$scope', - '$http', - '$location', - 'Users', - 'Authentication', - function ($scope, $http, $location, Users, Authentication) { - $scope.user = Authentication.user; - // If user is not signed in then redirect back home - if (!$scope.user) - $location.path('/'); - // Check if there are additional accounts - $scope.hasConnectedAdditionalSocialAccounts = function (provider) { - for (var i in $scope.user.additionalProvidersData) { - return true; - } - return false; - }; - // Check if provider is already in use with current user - $scope.isConnectedSocialAccount = function (provider) { - return $scope.user.provider === provider || $scope.user.additionalProvidersData && $scope.user.additionalProvidersData[provider]; - }; - // Remove a user social account - $scope.removeUserSocialAccount = function (provider) { - $scope.success = $scope.error = null; - $http.delete('/users/accounts', { params: { provider: provider } }).success(function (response) { - // If successful show success message and clear form - $scope.success = true; - $scope.user = Authentication.user = response; - }).error(function (response) { - $scope.error = response.message; - }); - }; - // Update a user profile - $scope.updateUserProfile = function () { - $scope.success = $scope.error = null; - var user = new Users($scope.user); - user.$update(function (response) { - $scope.success = true; - Authentication.user = response; - }, function (response) { - $scope.error = response.data.message; - }); - }; - // Change user password - $scope.changeUserPassword = function () { - $scope.success = $scope.error = null; - $http.post('/users/password', $scope.passwordDetails).success(function (response) { - // If successful show success message and clear form - $scope.success = true; - $scope.passwordDetails = null; - }).error(function (response) { - $scope.error = response.message; - }); - }; - } -]);'use strict'; -// Authentication service for user variables -angular.module('users').factory('Authentication', [function () { - var _this = this; - _this._data = { user: window.user }; - return _this._data; - }]);'use strict'; -// Users service used for communicating with the users REST endpoint -angular.module('users').factory('Users', [ - '$resource', - function ($resource) { - return $resource('users', {}, { update: { method: 'PUT' } }); - } -]); \ No newline at end of file diff --git a/public/modules/core/img/brand/logo.png b/public/modules/core/img/brand/logo.png index 4bf6cde65c3a282a77180c6fbf6733c3ea176694..d28cc87a423e41864bdd94a768ef4a56af8eccbc 100644 GIT binary patch delta 13515 zcmZ|0WmH^Eur&+;g1ZHG3qH8Jy9IX-&IFf(1_qiFwscS;Najel@w*Q;o#t}VZVJ*-ol;-*kpT6 zGz@P{#n$zc zlB^gl>f4zXsN-Uv~BH#ZT@csg8!FnDhGlzV5LVi z1qa7ttRyR?>$`dqgqlmP*Y@()#s5|;6{30@5y2OMNFYlfC26ZiIVt0dDD@9jga3we z2w{+#nj>WJZU@28Hn}iNmYYrf7rmqb-Wb-eJ3}604Y$`vy}X>N)|OARx?cJ|1?QQm zeLM@Mre4QCpU;Hu*z$cv)m=vx01XK>bRxFGot+(B@dGW-#+2CfK!8V3ag4`7)fpafQ@q^9T2&?gWMC@9mSp2xF5 ziuR-!a?*PW_wJNmib~Z!hyOP`VroHUYauPSdXH7vj+I5xcUF@zstHg&Xgtxq>PbOT zCSr9=FQUOgL3~34w&x0>ev^0&P->vDzPYj6u&dO$(j#JRdR61~{vYL#HI=O>R#b!6 zcd-yzN?rY(Yky_}r5R*6`i-?Ul|hT79z$XpUgFdjba=!RO@d9inq#B z#>hH+`$G5@qOYf?WoyeoNJx0P^b@k8fZBwP_$HK^bu18iwa*K@1iois8Gjd=YKv`> z{CE4y4+LtXQ9{)e%ai4sN{_Q4AZtoi0m-~IYTp<-*8@O7Wot3uPSeOBSc`rTQaGf zz##K-`dKUF23zZ4l^i^;_po1mMa7{TkNu1@A&3};vQ&Lim$#KjD&IwL-iqW_8G_>$ zH;fspUPl=SZ~&OQQeZoo?nQ@%lA>%YvgP%-boLzar%l#f;v z|7&KZ(Wpgx>1DG&FG0K)!MQ7MK}Gg>AFMRK5u9H`<@p2z3Od}krIQ}b;`3AwyKv8& zc114om~!32lDhtLI>?&(mdxkm!I-)pDyH^I6_h|O2c1CBNd33!CgbR5B?bV{p9h(M zqQVQA^kyagSLdC~)@sB?1HLhv2ljdyY3IU7{+4J(3k^HXgi~p8M@6Dvm5Zr=OdP0g?Z? z5VgiOM8xN8{&cP5yaA3)B-u@S`Ieodtn<2(XSekNGayefCAtBz4uF(3~pkw ztKOEYRg`zVQ!{K2pVrpbzxV?5qbH}QWr^YsmFn@4o;TLI<3vxw3SVng#~uEq8~t-G z;Ifof5bp13YiskpKA6T7FW}r&vGxLbk3@|sR3Xhdu?U!7es}vU+@7w*YY$>s#iihR zxw=F~Mv5?L56?ZC?v6OYmV7K?L&U>`+WNwy+pB|NQ-1G>j#3(qG?uyXyD%>8ea6lhS8a?Cwd4 zeLy;G8TS zwNJF%yzT}@6*7T0-`?Qwzv^72Vwfpwj?XEpe?YIWUgYU4_^8j=l25ac9KZq*k~ceuEP-$1 zDvag$TA4VtgwU(=dq7izSvT(a($$MK7G3Ff%(Nb2jW?HnYHMrTt>CYU(b%P#Hv_wXtYl@UqG3M#14+#jj05f%aA@GaHd|lZ_oZ<&}HqC9sg!?;HD&t z?X=TN#QLW7AILTQ!oDTYRH-6GKkZ3`Wlb%@>29QIL!9V>nVLkL1mv`PjBxtaktO88FEdDc^yahM<*wV z)mFy^-G18ZdgtHJaeRj;0hCqh+s~gr6IM}LZvZ`htscAb$6tEn#Xj+6AY%jf)hXxp z9zIg|FWATQJ+O_#y=>}Z+V6IDc2+*g(H)l{{@_qCgN!c*x({Nb`voWbz?>g=S1D&3 zX{4JUyc;iIg?HlqIL>rWPF}M|%Fr?C!p98@%0|8ZH;T2wxZgB5v94RP`p?D&Y|k6^ z05i%p(%AH;l!9k5nLx_DJ~h;XfBheiQ6aw!X6YAFkdCe5jV?@X=T$ge{4c)|yDhWA z534!}4p#Yz5^xXCA)YaSMafrFDQptz@N!h8ZBhG0^p*UGe270ZA~QVIe@J}97#ODI zDk3&=d*2nkhX3n*8hiBR9{N)flc`kj8^BA|tOExc1#|H$A%=d9urXw50m$RNehLHy zQ#qr({yCNHqu3xS7Nh(WsK`B+_Ht_4JB-E-%d0^0fZC%~MOk_E_~__E`P6&zQPk3KfzY$W zoDu1R75vB&Z5k&Fsjglddn$VbjvbF$inX(Y$lnDnFO(-a64iU}+TZlF3oykD{xLhp zsuPecE+4Tq1GCpY?w6I7u^%0Z@soSE+BRAsRT86sn_F|R^sbOxH>>vyT{E>j^Gn~@ zhZ^CG`6GhAdbd6y^ygQOoRVP10??(|*rXb$z2L>Oq^q0RHU>!TIC^tLo-cQ!-XeaL z<-DT`aALoWUpNrQmWaTE(Z)=o%HkKs)5=aQATyO+fC>+lZz;l!_Sij7t#5ltw0 z45STd*8&%k#$O@8?s4edefU#%-7}jBB4lY|oBE&h&}OR~Nl^9gsdF|7TV5_lAnmVc>!=aKf0Eug{JpsWZm3p1Ih?|E%w2Uq zLJ1!;D{PgB{h%}m`8rp9w#ArCFfD(P+XefEPDj~fE8)R>?fzV2vr}QmG0hItkkLR_ zKw336`amh&&$xuLq1f!&0xsb@oXwU||G##=qn zeraRY%(Z-Q2*M%!`U{n()LAsZ00vQPZOw5!9-M_Sx~sIc!cMRGI(~A}jo)qS8#d71 zCDkA{Nd8yXQHG~47%D*16Qv_8ugiEVWml+n(kb8sAp0gV`q>N!3!^vSX0N8N%jbt1 z@3kM2w`yP!M3{GPN7UN9)c>3s=GH+xL*NCYHtoTZB#R5PjL3ihnvj|En#MJ=OR*Q#56D5T$)=oE{ZS^;-#t4?}hq_s-n2O`}- z0Th(^@CDyF6g)sQ=B{LMH(*^{Ahv-_ulW5J0)5Zxar-?wnp`OFbk*=uwdHrKGuT zl~Ir>#9KU~-@vX@sPL29PDeEiJgxKrUWhsX^|RIL6w#|;bGSB4khxv%l*GJ_sUX|7 zqbownH;c`6&@Y$9zdwXyCM;$?0j&=0uHXof591Y|e@uk3Kby1+_!UxKbFT+8N6r?x zBRNN`5RD&%NuUfr@|&X*F-Ul&=2H)YSAvLqbY2-!pq_Q@ioV(1A&srY#k5WULlL`8 zK}-dW6!;X|{e3{(T9!e@*UA8nHa7VJlD(krs@dUQGkLw$LW<3#>(?#<@hA)r|A50> zw)601Lm6bvp({}mBEwj_V0IefvJ*A>>zlWb5`QCA7(AG$`6tvHSY%k}4QH#tyvr{a zIH{JX8j7xPjcgf`d*A|Oz44uDTT0r7dDOnGUB(>}`Igx> zf9v%nNVFMmHMu>(gy3Mc0Ma}919A7`Pon8{z7Ri(fP;+ZD?WY-QU)onv8i&J4fM%r z+F0-Hw}%k)d(p;5Kbz>g9Wgc3pD3X%A-l$6v#g1jyVvN@e9L-a)=A*;&EE)1*Ymy0 zJ1_~QA!@`2tDKe}YUrwN64|kqACc@oMeWyj!G9f44r6+JpMzyS8G+@jvGaUq%)6t? zG&JCM?9MyF(4b-kYWtpzo*TvAR8lxGVHrqyr(%B<&g3hVafe(@zA@rrz{Zh5lj3FI zLNaOJnLcItW`TvXN`DMk=W8S~Pzv=;g;$jmUSxyN^HxgqhOI&Jqq({?cD$SUBHB`^ zTIKrV*c3w93=6hzW#|MG_}gHqLyOQ4P6?eW+73&9pYYe1n%piEEUuEG(a8=V2qjh`bH(n-*nW&BGRh8H?-pEaA2 zU-RTl9TBJ@V-DDVC#h}Tz;j@5HB1T{NIal;n;$ind#%1P*=PWp9jI=G;@HdY-pxl3ZC01p&^@Xr1=w#%H$jqqcxepTJLY zS;{Xk)X0)>GCu1CjoD2H27IXj=QU8+J@727Q{Y!|l4Huwr48BF^}W?zUKetRoxb*0 zC!xt;hB9@`ju!=g4V!vGUb*UuEv1*|hgT+Sf3PTH+e123a-{`lxnrhgX}L47+1;ul zTPL9o4#R4^Le;fvZ1vW(S88+w^>@NlBl&5!S5vGQb7qHu~&Uf zOau1?J@w~{li~W{mOaVDnU}{d#@|z`acUC|e~y158%u-o!44!lB5V9+5jIM9$Os(L zhmDTE7gFeu3ZqbVS4d@@*`#_&+QU^KUCv4~Kp?Rx8x&(p?-2)%Wv_%=Nr1-2kA9Oy zt)SZ@6cmekI5uO@@F26*v7f-1ct22p@OWVP^T+n^HCLI?Q=0@Rs!A`4k_B{^G+Tor z*Sjzs2L4xWAqB@RU!wIzmbN~_UC>#uk0GLrz2onTO!tzyMb76-C=yY;xaq18<0VT5 zpv0wjVtGoA!_)md;5)y@q48sj1gechge?4VyO#V|z+rFAx5-~XX~m{}+ao{cU&bc1 z_ES*od>WZ$A-uJ!H}&Y5W^Q}CU#(FQYbe;|Tq#%u4$;uq*a_$B=(k6dKR$alqfn!> zLDw9tMBNBsQ71u=j?fG4omTa6M0@M1>*Br#iK$&jLR00aWXU z;qab^k>ah*^z}0f{Vgddc?VTtUolISbW{Z@WDUC)=?d>x2ZhZy+CISAKxCExa{Pvj zyP2~V9ZI%^8?QUQeA(7VBlEr{B&luJU=T_Jp=snv6IHXDE6ibr=Dw?9X+?Mn&Pk^Z z+Bm^+`{HEdu>Xsih<4d#!*SsmShhRZz;$?Zhck5MW*2hQeh}{GkJmh2c!Afmapfy@ zF_rJivz^C1F9Z{B*>qhF=m3;l)ddfq)qeA|2t-oCRt zYlNz_&qnme&txcepLl_Krd{6*sLS3O6iR(VRUZ+B1xXNY{*)w1cAs z#u|2^1Qj8@zF8ag9g7$XI3yRqhSeAyo6^!3Vgh!EatE zx1E@p_xG8+9gh%_p~@4$%MWZeX}p$6YmE}_*fu&1iDh2AxV9vyB6)iLHWD@Y0*80> zl%;>|R)EhdN@CgF%{HN_%FOw-lP^ne48wWN|-0it6_B{E@u(?-FbxL9Q(_BHi@WIKLHXKKV|!!EE7J*nesm7@TmEJ zc_?a&cH>~rR`W~I-@~Uhh5`6{Z;Mrr+#^H`$DN)6s90qxzd(0&59S7W!GdptQkoaw zv0@2)1N)U9&l1CXG@E%+B9|j_Fqrtdr9HO3ncC7p5ZohVhLU1zvQtj7R=D3v%$_QY zQEI&K{{#ZLDCs?>#yrG1b@`hZAsnJJvC-D!wO)N7yEUn(V(B3!8+&YZD@$dEvgd$7WnZcKKsFPX6g9=#G_M zAyekmJnipjNQi&Q9th8J-|hoW3x3}fn+JYHz6Xvb@7qJ>k5j`U5u}%J(nGk~jKPgS z(}nC52<@ju&0iwWwJ?fj;$nfVwnU~XkH{0lcUHeNRi{H+Ud8g6!Ksrqyf$ijYH&-b zXi0!*eJ0{c*Rqk5;gn0u-z-b?P#NQg5tPJb2bwPxEZ@XRX$q~U8DPr|3F`L{B@xR$ z0M0+}9?-fL$aQtQph!d%fFC7TIDK1-uHxLgVSjB5SVt|EoRn@N_9(wtG z>Js=yFSpq@*{{bMVX5R++3Sb5eXray0^;+>gj*iowq2;O)Cn_kx6Ehrnc~zs zt}KmYQ4}rd62pKf>^X$0B%zcVYIQGZwv(bGN3lhB8}x5OXC_bn2;3jdw3OF2*mO?s zlSus>1yv9GU)~emetuX8;Q_=x>dk8zsP>Cp=`5b!)fB`#`Hy~Y_(AH}J#B*(4-h9% z5Vw2?THxY)l}6XH*fDYj6T3Ah`E?~h8{uB@nUwR&tJ{jIwI1CkVB8!}Z`CbLltZ;^hc!C6 zpR0TZdqngeb*F(+F2U9`pptnHPzPbl7Jr$Ft(>HyHZSNJoG~yu{T45#(7mfqWdVv} zp*ooDj`F||3@0Bu-4y)sZB?T%4b`+YcQI7E!mQm>G^Yq0!il6@VkTD(h5AqY_C3iQ zuMG-uiqM!aXXy?KK^))ZXY_Wq9!k0Iw=tS6*rXwL3R zej413*C}04Nam0r)Qva=CNVhP;h6CW@TF&H$<~#I9W;oSC-2i~$c9Hw<-xW7Eg6rK zl6Ux3OdyVaT{mO>R4F4{M9eKkb8Wdz5bK4!FOpa~MIaV)8HRDll|1!)Epg!9Pgk

op9yg(dSR1+-OFDW1m$@8cCuksjM9TNfg&8|m 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 delta 3889 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 diff --git a/public/modules/core/views/header.client.view.html b/public/modules/core/views/header.client.view.html index 91f1509f42..aff774dbe7 100644 --- a/public/modules/core/views/header.client.view.html +++ b/public/modules/core/views/header.client.view.html @@ -10,8 +10,8 @@