OpenXE/www/js/keynavigation.js

387 lines
11 KiB
JavaScript
Raw Normal View History

2021-05-21 08:49:41 +02:00
var escpressed = false;
var esctimeout = null;
$(document).ready(function() {
var navtabsel = new Array();
$('#navtabs').find('a').each(function(){
navtabsel.push(this);
});
$(document).on('keydown', function(e){
var key = e.which;
if(key == 27)
{
if(!escpressed)$('#tpllogofirma').parent('a').focus();
escpressed = true;
esctimeout = setTimeout(function(){escpressed = false},1000);
}
});
$('#navhauptmenu').find('a.navdirekt').parent().on('click',function(e){
$(this).children('ul').first().each(function(){
$(this).css('visibility','visible');
});
});
$('#navhauptmenu').find('a.navdirekt').on('click',function(e)
{
$(this).parent().children('ul').first().each(function(){
$(this).css('visibility','visible');
});
});
$('#navhauptmenu').find('a.navdirekt').on('focus',function(e)
{
$(this).parent().children('ul').first().each(function(){
$(this).css('visibility','visible');
});
});
$('#navhauptmenu').find('a.navdirekt').on('focusout',function(e)
{
hideuntermenu();
});
function hideuntermenu()
{
setTimeout(function(){
$('#navhauptmenu').find('a.navdirekt').each(function()
{
$(this).parent().children('ul').first().each(function(){
if ($(this).parent().find(":focus").length == 0)
{
if(!$(this).parent().hasClass('aktiv2'))
{
$(this).css('visibility','hidden');
//window.console.log('hidden');
}
}
});
});
},200);
}
$('#navtabs').find('a').on('keydown',function(e){
var key = parseInt(e.which);
switch(key)
{
case 37:
e.preventDefault();
//links
var found = -1;
var first = -1;
var last = -1;
var dolast = false;
for(var key in navtabsel)
{
if(first == -1)first = key;
if(navtabsel[key] === this && found == -1)
{
found = key;
if(last != -1)
{
$(navtabsel[last]).focus();
return;
}else{
dolast = true;
}
}
last = key;
}
if(dolast)
{
$(navtabsel[last]).focus();
return;
}
break;
case 39:
e.preventDefault();
//rechts
var found = -1;
var first = -1;
var last = -1;
var dofirst = true;
for(var key in navtabsel)
{
if(found != -1)
{
$(navtabsel[key]).focus();
dofirst = false;
return;
}
if(first == -1)first = key;
if(navtabsel[key] === this && found == -1)
{
found = key;
}
last = key;
}
if(dofirst && first != -1)
{
$(navtabsel[first]).focus();
return;
}
break;
}
});
$('#navhauptmenu').find('li.secnav > a').on('keydown',function(e){
var key = parseInt(e.which);
hideuntermenu();
switch(key)
{
case 37:
e.preventDefault();
//links
$(this).parent().parent().parent().children('a').first().each(function(){
var el = this;
var fertig = false;
$(this).parent().prev().children('a.navdirekt').first().each(function(){
$(el).parent().toggleClass('aktiv2',false);
fertig = true;
$(this).parent().toggleClass('aktiv2',true);
$(this).focus();
hideuntermenu();
});
if(!fertig)
{
$(this).parent().parent().children('li').last().children('a.navdirekt').first().each(function(){
fertig = true;
$(el).parent().toggleClass('aktiv2',false);
$(this).parent().toggleClass('aktiv2',true);
$(this).focus();
hideuntermenu();
});
}
});
break;
case 39:
e.preventDefault();
//rechts
$(this).parent().parent().parent().children('a').first().each(function(){
var el = this;
var fertig = false;
$(this).parent().next().children('a.navdirekt').first().each(function(){
fertig = true;
$(el).parent().toggleClass('aktiv2',false);
$(this).parent().toggleClass('aktiv2',true);
$(this).focus();
hideuntermenu();
});
if(!fertig)
{
$(this).parent().parent().children('li').first().next().children('a.navdirekt').first().each(function(){
fertig = true;
$(el).parent().toggleClass('aktiv2',false);
$(this).parent().toggleClass('aktiv2',true);
$(this).focus();
hideuntermenu();
});
}
if(!fertig)
{
$(this).parent().parent().children('li').first().next().next().children('a.navdirekt').first().each(function(){
fertig = true;
$(el).parent().toggleClass('aktiv2',false);
$(this).parent().toggleClass('aktiv2',true);
$(this).focus();
hideuntermenu();
});
}
});
break;
case 40:
e.preventDefault();
//runter
var fertig = false;
$(this).parent().next('li').children('a').first().each(function(){
$(this).focus();
fertig = true;
});
if(!fertig)
{
$(this).parent().parent().children('li').first().children('a').first().each(function(){
$(this).focus();
});
}
break;
case 38:
e.preventDefault();
//hoch
var fertig = false;
$(this).parent().prev('li').children('a').first().each(function(){
$(this).focus();
fertig = true;
});
if(!fertig)
{
$(this).parent().parent().children('li').last().children('a').first().each(function(){
$(this).focus();
});
}
break;
case 13:
e.preventDefault();
window.location.href = $(this).prop('href');
break;
}
});
$('#navhauptmenu').find('a.navdirekt').on('keydown',function(e){
var key = parseInt(e.which);
var el = this;
hideuntermenu();
switch(key)
{
case 37:
e.preventDefault();
//links
var fertig = false;
$(this).parent().prev().children('a.navdirekt').first().each(function(){
fertig = true;
$(el).parent().toggleClass('aktiv2',false);
$(this).parent().toggleClass('aktiv2',true);
hideuntermenu();
$(this).focus();
});
if(!fertig)
{
$(this).parent().parent().children('li').last().children('a.navdirekt').first().each(function(){
fertig = true;
$(el).parent().toggleClass('aktiv2',false);
$(this).parent().toggleClass('aktiv2',true);
hideuntermenu();
$(this).focus();
});
}
break;
case 39:
//rechts
e.preventDefault();
var fertig = false;
$(this).parent().next().children('a.navdirekt').first().each(function(){
fertig = true;
$(el).parent().toggleClass('aktiv2',false);
$(this).parent().toggleClass('aktiv2',true);
hideuntermenu();
$(this).focus();
});
if(!fertig)
{
$(this).parent().parent().children('li').first().next().children('a.navdirekt').first().each(function(){
fertig = true;
$(el).parent().toggleClass('aktiv2',false);
$(this).parent().toggleClass('aktiv2',true);
hideuntermenu();
$(this).focus();
});
}
if(!fertig)
{
$(this).parent().parent().children('li').first().next().next().children('a.navdirekt').first().each(function(){
fertig = true;
$(el).parent().toggleClass('aktiv2',false);
$(this).parent().toggleClass('aktiv2',true);
hideuntermenu();
$(this).focus();
});
}
break;
case 40:
//runter
e.preventDefault();
$(this).parent().children('ul').first().each(function(){
$(this).css('visibility','visible');
$(this).children('li.secnav').children('a').first().focus();
});
break;
}
});
$('#tpllogofirma').parent('a').on('keydown', function(e){
var key = e.which;
if( key ){
}
if(key >= 48 && key <= 57 || key == 27)
{
var nr = key - 48;
if(key == 27)nr = 27;
switch(nr)
{
case 27:
var gefunden = false;
if(typeof firstfocuselement != 'undefined')
{
$(firstfocuselement).first().each(function(){
gefunden = true;
$(this).focus();
});
}
if(!gefunden)
{
$('#page_container .ui-tabs-panel:visible').find('input:focusable , select:focusable, a:focusable').first().each(function(){
$(this).focus();
gefunden = true;
});
}
if(!gefunden)
{
$('#page_container').find('input:focusable , select:focusable, a:focusable').first().each(function(){
$(this).focus();
gefunden = true;
});
}
break;
case 1:
$('#navhauptmenu').find('a.navdirekt').first().each(function(){
$(this).focus();
});
break;
case 2:
$('#navtabs').find('a').first().each(function(){
$(this).focus();
});
break;
case 3:
$('#tabs .ui-tabs-nav a:first').each(function(){
$(this).focus();
});
break;
case 4:
$('#page_container').find('input , select, focusable, a').first().each(function(){
$(this).focus();
});
break;
case 5:
$('#navtoolbarleft').find('a').first().each(function(){
$(this).focus();
});
break;
case 8:
$('#tabellenachrichtenboxen').find('a').first().each(function(){
$(this).focus();
});
break;
case 9:
$('#footer').find('a').first().each(function(){
$(this).focus();
});
break;
}
}
});
});