1/** 2 * History.js Native Adapter 3 * @author Benjamin Arthur Lupton <[email protected]> 4 * @copyright 2010-2011 Benjamin Arthur Lupton <[email protected]> 5 * @license New BSD License <http://creativecommons.org/licenses/BSD/> 6 */ 7 8// Closure 9(function(window,undefined){ 10 "use strict"; 11 12 // Localise Globals 13 var History = window.History = window.History||{}; 14 15 // Check Existence 16 if ( typeof History.Adapter !== 'undefined' ) { 17 throw new Error('History.js Adapter has already been loaded...'); 18 } 19 20 // Add the Adapter 21 History.Adapter = { 22 /** 23 * History.Adapter.handlers[uid][eventName] = Array 24 */ 25 handlers: {}, 26 27 /** 28 * History.Adapter._uid 29 * The current element unique identifier 30 */ 31 _uid: 1, 32 33 /** 34 * History.Adapter.uid(element) 35 * @param {Element} element 36 * @return {String} uid 37 */ 38 uid: function(element){ 39 return element._uid || (element._uid = History.Adapter._uid++); 40 }, 41 42 /** 43 * History.Adapter.bind(el,event,callback) 44 * @param {Element} element 45 * @param {String} eventName - custom and standard events 46 * @param {Function} callback 47 * @return 48 */ 49 bind: function(element,eventName,callback){ 50 // Prepare 51 var uid = History.Adapter.uid(element); 52 53 // Apply Listener 54 History.Adapter.handlers[uid] = History.Adapter.handlers[uid] || {}; 55 History.Adapter.handlers[uid][eventName] = History.Adapter.handlers[uid][eventName] || []; 56 History.Adapter.handlers[uid][eventName].push(callback); 57 58 // Bind Global Listener 59 element['on'+eventName] = (function(element,eventName){ 60 return function(event){ 61 History.Adapter.trigger(element,eventName,event); 62 }; 63 })(element,eventName); 64 }, 65 66 /** 67 * History.Adapter.trigger(el,event) 68 * @param {Element} element 69 * @param {String} eventName - custom and standard events 70 * @param {Object} event - a object of event data 71 * @return 72 */ 73 trigger: function(element,eventName,event){ 74 // Prepare 75 event = event || {}; 76 var uid = History.Adapter.uid(element), 77 i,n; 78 79 // Apply Listener 80 History.Adapter.handlers[uid] = History.Adapter.handlers[uid] || {}; 81 History.Adapter.handlers[uid][eventName] = History.Adapter.handlers[uid][eventName] || []; 82 83 // Fire Listeners 84 for ( i=0,n=History.Adapter.handlers[uid][eventName].length; i<n; ++i ) { 85 History.Adapter.handlers[uid][eventName][i].apply(this,[event]); 86 } 87 }, 88 89 /** 90 * History.Adapter.extractEventData(key,event,extra) 91 * @param {String} key - key for the event data to extract 92 * @param {String} event - custom and standard events 93 * @return {mixed} 94 */ 95 extractEventData: function(key,event){ 96 var result = (event && event[key]) || undefined; 97 return result; 98 }, 99 100 /** 101 * History.Adapter.onDomLoad(callback) 102 * @param {Function} callback 103 * @return 104 */ 105 onDomLoad: function(callback) { 106 var timeout = window.setTimeout(function(){ 107 callback(); 108 },2000); 109 window.onload = function(){ 110 clearTimeout(timeout); 111 callback(); 112 }; 113 } 114 }; 115 116 // Try to Initialise History 117 if ( typeof History.init !== 'undefined' ) { 118 History.init(); 119 } 120 121})(window);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.