questlab/www/analytics/plugins/CoreHome/javascripts/menu.js
2016-04-10 18:55:57 +02:00

176 lines
No EOL
5.1 KiB
JavaScript

/*!
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
/**
* @constructor
*/
function menu() {
this.param = {};
}
menu.prototype =
{
resetTimer: null,
onItemClick: function (e) {
if (e.which === 2) {
return;
}
$('#secondNavBar').removeClass('open fadeInLeft');
var $link = $(this);
var href = $link.attr('href');
if (!$('#content.admin').size()) {
if (!href && $link.parent().is('.menuTab')) {
var $li = $link.parents('li').first();
if ($li.hasClass('sfActive')) {
$li.removeClass('sfActive');
} else {
$li.siblings().removeClass('sfActive');
$li.addClass('sfActive');
}
var $children = $li.find('ul li > .item');
if ($children.length === 1) {
$children.first().click();
}
} else if (href) {
$('#secondNavBar').trigger('piwikSwitchPage', this);
broadcast.propagateAjax(href.substr(1));
}
return false;
}
return !!href;
},
isAdmin: function () {
return !!$('#content.admin').size();
},
init: function () {
this.menuNode = $('#secondNavBar');
// add id to all li menu to support menu identification.
// for all sub menu we want to have a unique id based on their module and action
// for main menu we want to add just the module as its id.
this.menuNode.find('li').each(function () {
var $this = $(this);
var link = $this.find('a');
var main_menu = $this.parent().hasClass('navbar') ? true : false;
if (!link) {
return;
}
var href = link.attr('href');
if (!href) {
return;
}
var url = href.substr(1);
var module = broadcast.getValueFromUrl('module', url);
var action = broadcast.getValueFromUrl('action', url);
var moduleId = broadcast.getValueFromUrl("idGoal", url) || broadcast.getValueFromUrl("idDashboard", url);
if (main_menu) {
$this.attr({id: module});
}
// if there's a idGoal or idDashboard, use this in the ID
else if (moduleId != '') {
$(this).attr({id: module + '_' + action + '_' + moduleId});
}
else {
$(this).attr({id: module + '_' + action});
}
});
this.menuNode.find('a.item').click(this.onItemClick);
var self = this;
$('#header .toggle-second-menu').click(function () {
self.menuNode.toggleClass('open fadeInLeft');
});
},
activateMenu: function (module, action, params) {
params = params || {};
params.module = module;
params.action = action;
this.menuNode.find('li').removeClass('sfActive');
var isAdmin = this.isAdmin();
var $activeLink = this.menuNode.find('a').filter(function () {
var url = $(this).attr('href');
if (!url) {
return false;
}
var found = false;
for (var key in params) {
if (!params.hasOwnProperty(key)
|| !params[key]
) {
continue;
}
var actual;
if (isAdmin) {
actual = broadcast.getValueFromUrl(key, url);
} else {
actual = broadcast.getValueFromHash(key, url);
}
if (actual != params[key]) {
return false;
}
found = true;
// at least one param must match. Otherwise all menu items might be highlighted if params[key] = null;
}
return found;
});
$activeLink.closest('li').addClass('sfActive');
$activeLink.closest('li.menuTab').addClass('sfActive');
},
// getting the right li is a little tricky since goals uses idGoal, and overview is index.
getSubmenuID: function (module, id, action) {
var $li = '';
// So, if module is Goals, id is present, and action is not Index, must be one of the goals
if ((module == 'Goals' || module == 'Ecommerce') && id != '' && (action != 'index')) {
$li = $("#" + module + "_" + action + "_" + id);
// if module is Dashboard and id is present, must be one of the dashboards
} else if (module == 'Dashboard') {
if (!id) id = 1;
$li = $("#" + module + "_" + action + "_" + id);
} else {
$li = $("#" + module + "_" + action);
}
return $li;
},
loadFirstSection: function () {
if (broadcast.isHashExists() == false) {
$('.navbar li:first ul a:first', this.menuNode).click().addClass('sfActive');
}
}
};