123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- /**
- * History.js Native Adapter
- * @author Benjamin Arthur Lupton <contact@balupton.com>
- * @copyright 2010-2011 Benjamin Arthur Lupton <contact@balupton.com>
- * @license New BSD License <http://creativecommons.org/licenses/BSD/>
- */
- // Closure
- (function(window,undefined){
- "use strict";
- // Localise Globals
- var History = window.History = window.History||{};
- // 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<n; ++i ) {
- History.Adapter.handlers[uid][eventName][i].apply(this,[event]);
- }
- },
- /**
- * History.Adapter.extractEventData(key,event,extra)
- * @param {String} key - key for the event data to extract
- * @param {String} event - custom and standard events
- * @return {mixed}
- */
- extractEventData: function(key,event){
- var result = (event && event[key]) || undefined;
- return result;
- },
- /**
- * History.Adapter.onDomLoad(callback)
- * @param {Function} callback
- * @return
- */
- onDomLoad: function(callback) {
- var timeout = window.setTimeout(function(){
- callback();
- },2000);
- window.onload = function(){
- clearTimeout(timeout);
- callback();
- };
- }
- };
- // Try and Initialise History
- if ( typeof History.init !== 'undefined' ) {
- History.init();
- }
- })(window);
|