Seditio Source
Root |
./othercms/b2evolution_7.2.3/rsc/ext/hotkeys/hotkeys.init.js
/**
 * This file implements the shortcut keys initialization
 * This file is part of the evoCore framework - {@link http://evocore.net/}
 * See also {@link https://github.com/b2evolution/b2evolution}.
 */


/**
 * Handles the shortcut key press
 * @param string key pressed
 */
function shortcut_handler( key )
{
var shortcuts = jQuery( '[data-shortcut^="' + key + '"],[data-shortcut*=",' + key + '"]' );
if( shortcuts.length )
{
var el = shortcuts[0];
switch( el.tagName )
{
case 'INPUT':
switch( el.type )
{
case 'hidden':
// do nothing
break;

case 'button':
case 'reset':
case 'search':
case 'submit':
el.click();
break;

default:
el.focus();
}
break;

case 'BUTTON':
case 'A':
el.click();
break;

default:
// No applicable action - flash evo_toolbar!
evobarFlash( [ '#ff0000' ] );
}
}
else
{
// No applicable action - flash evo_toolbar!
evobarFlash( [ '#ff0000' ] );
}

return false;
}


/**
 * Get shortcut keys defined in the current window
 */
function get_shortcut_keys( keys, selector, data_attr )
{
var shortcuts = jQuery( selector );

if( shortcuts.length )
{
shortcuts.each( function( index ) {
var s = $( this ).data( data_attr ).split( ',' ).map( function( n ) {
return n.trim();
} );

for( var i = 0; i < s.length; i++ )
{
if( keys.indexOf( s[i] ) == -1 )
{
keys.push( s[i] );
}
}
} );
}
}

jQuery( document ).ready( function()
{
// console.info( 'Init Hotkeys script...' );

// Get available shortcut keys:
var top_shortcut_keys = window.top_shortcut_keys || [];
var shortcut_keys = window.shortcut_keys || [];

// console.info( 'Hotkeys already defined: ', shortcut_keys, top_shortcut_keys );

get_shortcut_keys( shortcut_keys, '[data-shortcut]', 'shortcut' );

if( window.self !== window.top )
{ // Get available top shortcut keys. Keys included in this list will be sent directly to the top window:
if( window.top.top_shortcut_keys )
{
top_shortcut_keys = window.top.top_shortcut_keys;
}

// Get top shortcuts defined in this window:
// Caution! The top window might not know how to handle the keys added below.
get_shortcut_keys( top_shortcut_keys, '[data-shortcut-top]', 'shortcut-top' );

// Add top shortcut keys to list of shortcut keys:
for( var i = 0; i < top_shortcut_keys.length; i++ )
{
if( shortcut_keys.indexOf( top_shortcut_keys[i] ) == -1 )
{
shortcut_keys.push( top_shortcut_keys[i] );
}
}
}
else
{
get_shortcut_keys( top_shortcut_keys, '[data-shortcut-top]', 'shortcut-top' );
}

// console.info( 'Hotkeys found' + ( window.self != window.top ? ' in ' + window.name : '' ) + ':' , shortcut_keys, top_shortcut_keys );

// Enable hotkeys even inside INPUT, SELECT, TEXTAREA elements:
hotkeys.filter = function( event ) {
return true;
}

hotkeys( shortcut_keys.join( ',' ), function( event, handler ) {

// Check if key should be sent to the top window:
if( window.self !== window.top )
{
if( top_shortcut_keys
&& ( top_shortcut_keys.indexOf( handler.key ) != -1 )
&& window.top['shortcut_handler']
&& ( typeof( window.top['shortcut_handler'] ) == 'function' ) )
{
return window.top['shortcut_handler']( handler.key );
}
}

return window['shortcut_handler']( handler.key );
} );
} );