var Hook = {
hooks: [],
register: function ( name, callback ) {
if( 'undefined' == typeof( Hook.hooks[name] ) )
Hook.hooks[name] = []
Hook.hooks[name].push( callback )
},
call: function ( name, arguments ) {
if( 'undefined' != typeof( Hook.hooks[name] ) )
for( i = 0; i < Hook.hooks[name].length; ++i )
if( true != Hook.hooks[name][i]( arguments ) ) { break; }
}
}
function test () {
el = document.getElementById( 'test-area' );
// Set up the hooks
Hook.register( 'one', function ( args ) { el.innerHTML = el.innerHTML + 'One<br/>'; return true; } );
Hook.register( 'one', function ( args ) { el.innerHTML = el.innerHTML + 'Two<br/>'; return true; } );
Hook.register( 'one', function ( args ) { el.innerHTML = el.innerHTML + args[0]; args[0] = 'Six<br/>'; return true; } );
Hook.register( 'one', function ( args ) { el.innerHTML = el.innerHTML + 'Four<br/>'; return false; } );
Hook.register( 'one', function ( args ) { el.innerHTML = el.innerHTML + 'Five<br/>'; return true; } );
// Set up the arguments
arguments = [ 'Three<br/>' ];
// Call the hooks
Hook.call( 'one', [ 'Three<br/>' ] );
// Prove the arguments were changed
el.innerHTML = el.innerHTML + arguments[0];
}
One
Two
Three
Four
Six