From 89aa4f8806bf53bfa8851ae6051e7f6f40fcbfbc Mon Sep 17 00:00:00 2001
From: Thomas Steur <thomas.steur@gmail.com>
Date: Fri, 16 Oct 2015 09:54:43 +0000
Subject: [PATCH] fix more ui tests

---
 .../reporting-menu/reportingmenu-model.js     | 15 ++++++++++--
 .../reportingmenu.controller.js               | 22 +++++++++++++++---
 .../reportingmenu.directive.html              |  4 ++--
 .../siteselector/siteselector.directive.js    |  1 -
 .../widget-loader/widgetloader.directive.js   | 23 ++++++++++---------
 plugins/CoreHome/javascripts/corehome.js      |  2 ++
 plugins/CoreHome/javascripts/top_controls.js  |  1 -
 .../dashboard/dashboard.directive.js          |  5 ++--
 .../Dashboard/javascripts/dashboardObject.js  |  4 ++--
 plugins/Goals/Menu.php                        |  3 ---
 10 files changed, 53 insertions(+), 27 deletions(-)

diff --git a/plugins/CoreHome/angularjs/reporting-menu/reportingmenu-model.js b/plugins/CoreHome/angularjs/reporting-menu/reportingmenu-model.js
index 1ac9e223f3..7b999aab08 100644
--- a/plugins/CoreHome/angularjs/reporting-menu/reportingmenu-model.js
+++ b/plugins/CoreHome/angularjs/reporting-menu/reportingmenu-model.js
@@ -30,6 +30,7 @@
         {
             var foundCategory = null;
             var foundSubcategory = null;
+            var foundSubSubcategory = null;
 
             angular.forEach(model.menu, function (category) {
                 if (category.id !== categoryId) {
@@ -40,10 +41,20 @@
                         foundCategory = category;
                         foundSubcategory = subcategory;
                     }
+
+                    if (subcategory.isGroup) {
+                        angular.forEach(subcategory.subcategories, function (subcat) {
+                            if (subcat.id === subcategoryId) {
+                                foundCategory = category;
+                                foundSubcategory = subcategory;
+                                foundSubSubcategory = subcat;
+                            }
+                        });
+                    }
                 });
             });
 
-            return {category: foundCategory, subcategory: foundSubcategory};
+            return {category: foundCategory, subcategory: foundSubcategory, subsubcategory: foundSubSubcategory};
         }
 
         function buildMenuFromPages(pages)
@@ -77,7 +88,7 @@
                     if (page.category.id === categoryId) {
                         var subcategory = page.subcategory;
 
-                        if (subcategory.id === activeSubcategory) {
+                        if (subcategory.id === activeSubcategory && categoryId === activeCategory) {
                             subcategory.active = true;
                         }
 
diff --git a/plugins/CoreHome/angularjs/reporting-menu/reportingmenu.controller.js b/plugins/CoreHome/angularjs/reporting-menu/reportingmenu.controller.js
index 57d202b250..719058da29 100644
--- a/plugins/CoreHome/angularjs/reporting-menu/reportingmenu.controller.js
+++ b/plugins/CoreHome/angularjs/reporting-menu/reportingmenu.controller.js
@@ -12,6 +12,13 @@
     function ReportingMenuController($scope, piwik, $location, $timeout, menuModel, $rootScope) {
 
         function markAllCategoriesAsInactive()
+        {
+            angular.forEach(menuModel.menu, function (cat) {
+                cat.active = false;
+            });
+        }
+
+        function markAllCategoriesAndChildrenInactive()
         {
             angular.forEach(menuModel.menu, function (cat) {
                 cat.active = false;
@@ -40,15 +47,19 @@
         $scope.menuModel = menuModel;
 
         // highlight the currently hovered subcategory (and category)
-        function enterSubcategory(category, subcategory) {
+        function enterSubcategory(category, subcategory, subsubcategory) {
             if (!category || !subcategory) {
                 return;
             }
 
-            markAllCategoriesAsInactive();
+            markAllCategoriesAndChildrenInactive();
 
             category.active = true;
             subcategory.active = true;
+
+            if (subsubcategory) {
+                subsubcategory.active = true;
+            }
         };
 
         var idSite = getUrlParam('idSite');
@@ -70,6 +81,11 @@
             return url;
         }
 
+        $scope.loadCategory = function (category) {
+            markAllCategoriesAsInactive();
+            category.active = true;
+        };
+
         $scope.loadSubcategory = function (category, subcategory) {
             if (subcategory && subcategory.active) {
                 // this menu item is already active, a location change success would not be triggered,
@@ -95,7 +111,7 @@
             }
 
             var found = menuModel.findSubcategory(category, subcategory);
-            enterSubcategory(found.category, found.subcategory);
+            enterSubcategory(found.category, found.subcategory, found.subsubcategory);
         });
 
     }
diff --git a/plugins/CoreHome/angularjs/reporting-menu/reportingmenu.directive.html b/plugins/CoreHome/angularjs/reporting-menu/reportingmenu.directive.html
index c31a66a602..8cf6a9a67b 100644
--- a/plugins/CoreHome/angularjs/reporting-menu/reportingmenu.directive.html
+++ b/plugins/CoreHome/angularjs/reporting-menu/reportingmenu.directive.html
@@ -3,8 +3,8 @@
         class="menuTab"
         ng-class="{'active': category.active}">
         <a class="item"
-           ng-href="#?{{ makeUrl(category,category.subcategories[0]) }}"
-           ng-click="loadSubcategory(category, category.subcategories[0])">
+           href=""
+           ng-click="loadCategory(category)">
             <span class="menu-icon {{ category.icon ? category.icon : 'icon-arrow-right' }}"></span>{{ category.name }}
             <span class="hidden">
              {{ 'CoreHome_Menu'|translate }}
diff --git a/plugins/CoreHome/angularjs/siteselector/siteselector.directive.js b/plugins/CoreHome/angularjs/siteselector/siteselector.directive.js
index ba5c492cb8..40996d2b57 100644
--- a/plugins/CoreHome/angularjs/siteselector/siteselector.directive.js
+++ b/plugins/CoreHome/angularjs/siteselector/siteselector.directive.js
@@ -63,7 +63,6 @@
 
                 return function (scope, element, attrs, ngModel) {
                     scope.selectedSite = {id: attrs.siteid, name: attrs.sitename};
-                    scope.model.loadInitialSites();
 
                     if (ngModel) {
                         ngModel.$setViewValue(scope.selectedSite);
diff --git a/plugins/CoreHome/angularjs/widget-loader/widgetloader.directive.js b/plugins/CoreHome/angularjs/widget-loader/widgetloader.directive.js
index 4e1859e789..b1d49579fc 100644
--- a/plugins/CoreHome/angularjs/widget-loader/widgetloader.directive.js
+++ b/plugins/CoreHome/angularjs/widget-loader/widgetloader.directive.js
@@ -19,9 +19,9 @@
 (function () {
     angular.module('piwikApp').directive('piwikWidgetLoader', piwikWidgetLoader);
 
-    piwikWidgetLoader.$inject = ['piwik', 'piwikUrl', '$http', '$compile', '$q'];
+    piwikWidgetLoader.$inject = ['piwik', 'piwikUrl', '$http', '$compile', '$q', '$location'];
 
-    function piwikWidgetLoader(piwik, piwikUrl, $http, $compile, $q){
+    function piwikWidgetLoader(piwik, piwikUrl, $http, $compile, $q, $location){
         return {
             restrict: 'A',
             transclude: true,
@@ -60,17 +60,18 @@
 
                         var url = $.param(parameters);
 
-                        var idSite  = piwikUrl.getSearchParam('idSite');
-                        var period  = piwikUrl.getSearchParam('period');
-                        var date    = piwikUrl.getSearchParam('date');
-                        var segment = piwikUrl.getSearchParam('segment');
+                        var $urlParams = $location.search();
+                        $urlParams = angular.copy($urlParams);
+                        delete $urlParams['category'];
+                        delete $urlParams['subcategory'];
 
-                        url += '&idSite=' + idSite + '&period=' + period;
-                        url += '&date=' + date + '&random=' + parseInt(Math.random() * 10000);
+                        angular.forEach($urlParams, function (value, key) {
+                            if (!(key in parameters)) {
+                                url += '&' + key + '=' + piwikUrl.getSearchParam(key);
+                            }
+                        });
 
-                        if (segment) {
-                            url += '&segment=' + segment;
-                        }
+                        url += '&random=' + parseInt(Math.random() * 10000);
 
                         return '?' + url;
                     }
diff --git a/plugins/CoreHome/javascripts/corehome.js b/plugins/CoreHome/javascripts/corehome.js
index f2a7468d6a..7b14515538 100755
--- a/plugins/CoreHome/javascripts/corehome.js
+++ b/plugins/CoreHome/javascripts/corehome.js
@@ -15,6 +15,8 @@
 
         var headerMessageParent = $('#header_message').parent();
 
+        initTopControls();
+
         // when 'check for updates...' link is clicked, force a check & display the result
         headerMessageParent.on('click', '#updateCheckLinkContainer', function (e) {
             e.preventDefault();
diff --git a/plugins/CoreHome/javascripts/top_controls.js b/plugins/CoreHome/javascripts/top_controls.js
index 38b069d6c5..c94bcc128b 100644
--- a/plugins/CoreHome/javascripts/top_controls.js
+++ b/plugins/CoreHome/javascripts/top_controls.js
@@ -62,6 +62,5 @@ function initTopControls() {
                 header.css('right', (Math.abs(overlap) + 18) * -1);
             }
         }
-
     }
 }
\ No newline at end of file
diff --git a/plugins/Dashboard/angularjs/dashboard/dashboard.directive.js b/plugins/Dashboard/angularjs/dashboard/dashboard.directive.js
index b9db49f4b3..9af79047f7 100644
--- a/plugins/Dashboard/angularjs/dashboard/dashboard.directive.js
+++ b/plugins/Dashboard/angularjs/dashboard/dashboard.directive.js
@@ -20,10 +20,11 @@
             $('.dashboardSettings').show();
             initTopControls();
 
-            // Embed dashboard
+            // Embed dashboard / exported as widget
             if (!$('#topBars').length) {
                 $('.dashboardSettings').after($('#Dashboard'));
-                $('#Dashboard_embeddedIndex_' + dashboardId).addClass('sfHover');
+                $('#Dashboard ul li').removeClass('active');
+                $('#Dashboard_embeddedIndex_' + dashboardId).addClass('active');
             }
 
             widgetsHelper.getAvailableWidgets();
diff --git a/plugins/Dashboard/javascripts/dashboardObject.js b/plugins/Dashboard/javascripts/dashboardObject.js
index beb590c4f6..457fc67f7a 100644
--- a/plugins/Dashboard/javascripts/dashboardObject.js
+++ b/plugins/Dashboard/javascripts/dashboardObject.js
@@ -536,11 +536,11 @@
 
                 var idDashboard = $(this).attr('data-idDashboard');
 
-                $('#Dashboard ul li').removeClass('sfHover');
+                $('#Dashboard ul li').removeClass('active');
 
                 methods.loadDashboard.apply(_self, [idDashboard]);
 
-                $(this).closest('li').addClass('sfHover');
+                $(this).closest('li').addClass('active');
             });
         };
 
diff --git a/plugins/Goals/Menu.php b/plugins/Goals/Menu.php
index 503c7e0430..258a0677e2 100644
--- a/plugins/Goals/Menu.php
+++ b/plugins/Goals/Menu.php
@@ -9,11 +9,9 @@
 namespace Piwik\Plugins\Goals;
 
 use Piwik\Common;
-use Piwik\Menu\Group;
 use Piwik\Menu\MenuUser;
 use Piwik\Piwik;
 use Piwik\Plugins\UsersManager\UserPreferences;
-use Piwik\Translate;
 
 class Menu extends \Piwik\Plugin\Menu
 {
@@ -25,7 +23,6 @@ class Menu extends \Piwik\Plugin\Menu
         if (Piwik::isUserHasAdminAccess($idSite)) {
             $menu->addManageItem('Goals_Goals', $this->urlForAction('manage', array('idSite' => $idSite)), 1);
         }
-
     }
 
     private function getIdSite($default = null)
-- 
GitLab