Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/CoreHome/angularjs/reporting-menu/reportingmenu.controller.js')
-rw-r--r--plugins/CoreHome/angularjs/reporting-menu/reportingmenu.controller.js125
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);
+ });
+
+ }
+})();