/** * History.js Dojo Adapter * * Essentially the same as the native adapter but uses dojo/ready for the dom load callback. * * @author Benjamin Arthur Lupton * @copyright 2010-2011 Benjamin Arthur Lupton * @license New BSD License */ // Closure (function(window,undefined){ "use strict"; // Localise Globals var History = window.History = window.History||{}, require = window.require; // Check Existence if ( typeof History.Adapter !== 'undefined' ) { throw new Error('History.js Adapter has already been loaded...'); } // Add the Adapter History.Adapter = { /** * History.Adapter.handlers[uid][eventName] = Array */ handlers: {}, /** * History.Adapter._uid * The current element unique identifier */ _uid: 1, /** * History.Adapter.uid(element) * @param {Element} element * @return {String} uid */ uid: function(element){ return element._uid || (element._uid = History.Adapter._uid++); }, /** * History.Adapter.bind(el,event,callback) * @param {Element} element * @param {String} eventName - custom and standard events * @param {Function} callback * @return */ bind: function(element,eventName,callback){ // Prepare var uid = History.Adapter.uid(element); // Apply Listener History.Adapter.handlers[uid] = History.Adapter.handlers[uid] || {}; History.Adapter.handlers[uid][eventName] = History.Adapter.handlers[uid][eventName] || []; History.Adapter.handlers[uid][eventName].push(callback); // Bind Global Listener element['on'+eventName] = (function(element,eventName){ return function(event){ History.Adapter.trigger(element,eventName,event); }; })(element,eventName); }, /** * History.Adapter.trigger(el,event) * @param {Element} element * @param {String} eventName - custom and standard events * @param {Object} event - a object of event data * @return */ trigger: function(element,eventName,event){ // Prepare event = event || {}; var uid = History.Adapter.uid(element), i,n; // Apply Listener History.Adapter.handlers[uid] = History.Adapter.handlers[uid] || {}; History.Adapter.handlers[uid][eventName] = History.Adapter.handlers[uid][eventName] || []; // Fire Listeners for ( i=0,n=History.Adapter.handlers[uid][eventName].length; i