PCv5/app/static/scripts/trigger_menu.js

73 lines
1.8 KiB
JavaScript

/* Trigger actions for the menu */
/* Initialization */
var b = document.getElementById('light-menu').getElementsByTagName('a')
for(var i = 1; i < b.length; i++) {
b[i].setAttribute('onfocus', "this.setAttribute('f', 'true');");
b[i].setAttribute('onblur', "this.setAttribute('f', 'false');");
}
var trigger_menu = function(active) {
var display = function(element) {
element.classList.add('opened');
}
var hide = function(element) {
element.classList.remove('opened');
}
var menu = document.getElementById('menu');
var buttons = document.getElementById('light-menu').getElementsByTagName('li');
var menus = document.getElementById('menu').getElementsByTagName('div');
if(active == -1 || buttons[active].classList.contains('opened')) {
hide(menu);
for(i = 0; i < buttons.length; i++) {
hide(buttons[i]);
}
}
else {
for(i = 0; i < buttons.length; i++) {
if(i != active) {
hide(buttons[i]);
hide(menus[i]);
}
}
display(buttons[active]);
display(menus[active]);
display(menu);
}
}
var mouse_trigger = function(event) {
var menu = document.getElementById('menu');
var buttons = document.getElementById('light-menu').getElementsByTagName('li');
if(!menu.contains(event.target)) {
var active = -1;
for(i = 0; i < buttons.length; i++) {
if(buttons[i].contains(event.target))
active = i;
buttons[i].getElementsByTagName('a')[0].blur();
}
trigger_menu(active);
}
}
var keyboard_trigger = function(event) {
var menu = document.getElementById('menu');
var buttons = document.getElementById('light-menu').getElementsByTagName('li');
if(event.keyCode == 13) {
for(var i = 0; i < buttons.length; i++) {
if(buttons[i].getElementsByTagName('a')[0].getAttribute('f') == 'true') {
trigger_menu(i);
}
}
}
}
document.onclick = mouse_trigger;
document.onkeypress = keyboard_trigger;