diff options
Diffstat (limited to 'plugins/CoreHome/angularjs/reporting-menu/reportingmenu.controller.js')
-rw-r--r-- | plugins/CoreHome/angularjs/reporting-menu/reportingmenu.controller.js | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/plugins/CoreHome/angularjs/reporting-menu/reportingmenu.controller.js b/plugins/CoreHome/angularjs/reporting-menu/reportingmenu.controller.js new file mode 100644 index 0000000000..85dc0f17c5 --- /dev/null +++ b/plugins/CoreHome/angularjs/reporting-menu/reportingmenu.controller.js @@ -0,0 +1,125 @@ +/*! + * Piwik - free/libre analytics platform + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ +(function () { + angular.module('piwikApp').controller('ReportingMenuController', ReportingMenuController); + + ReportingMenuController.$inject = ['$scope', 'piwik', '$location', '$timeout', 'reportingMenuModel', '$rootScope']; + + function ReportingMenuController($scope, piwik, $location, $timeout, menuModel, $rootScope) { + + function markAllCategoriesAsInactive() + { + angular.forEach(menuModel.menu, function (cat) { + cat.active = false; + cat.hover = false; + angular.forEach(cat.subcategories, function (subcat) { + subcat.active = false; + }); + }); + } + + function getUrlParam(param) + { + var value = piwik.broadcast.getValueFromHash(param); + if (!value) { + value = piwik.broadcast.getValueFromUrl(param); + } + return value; + } + + $scope.menuModel = menuModel; + + var timeoutPromise = null; + + // show subcategories of the currently hovered category + $scope.enterCategory = function (category) { + + if (timeoutPromise) { + $timeout.cancel(timeoutPromise); + } + + angular.forEach(menuModel.menu, function (cat) { + cat.hover = false; + }); + + category.hover = true; + }; + + // show subcategories of the current active category again (after 2 sec max) + $scope.leaveCategory = function (category) { + + if (timeoutPromise) { + $timeout.cancel(timeoutPromise); + } + + timeoutPromise = $timeout(function () { + angular.forEach(menuModel.menu, function (cat) { + if (cat.active) { + cat.hover = true; + } else { + cat.hover = false; + } + }); + }, 2000); + }; + + // highlight the currently hovered subcategory (and category) + $scope.enterSubcategory = function (category, subcategory) { + if (!category || !subcategory) { + return; + } + + markAllCategoriesAsInactive(); + + category.active = true; + category.hover = true; + subcategory.active = true; + }; + + var idSite = getUrlParam('idSite'); + var period = getUrlParam('period'); + var date = getUrlParam('date'); + var segment = getUrlParam('segment'); + + $scope.makeUrl = function (category, subcategory) { + var url = 'idSite=' + idSite + '&period=' + period + '&date=' + date + '&category=' + category.id + '&subcategory=' + subcategory.id; + if (segment) { + url+= '&segment='+ segment; + } + return url; + } + + $scope.loadSubcategory = function (category, subcategory) { + if (subcategory && subcategory.active) { + // this menu item is already active, a location change success would not be triggered, + // instead trigger an event + $rootScope.$emit('loadPage', category.id, subcategory.id); + } + }; + + menuModel.fetchMenuItems().then(function (menu) { + if (!$location.search().subcategory) { + // load first, initial page if no subcategory is present + $scope.enterSubcategory(menu[0], menu[0].subcategories[0]); + $location.search($scope.makeUrl(menu[0], menu[0].subcategories[0])); + } + }); + + $rootScope.$on('$locationChangeSuccess', function () { + var category = $location.search().category; + var subcategory = $location.search().subcategory; + + if (!category || !subcategory) { + return; + } + + var found = menuModel.findSubcategory(category, subcategory); + $scope.enterSubcategory(found.category, found.subcategory); + }); + + } +})(); |