1 /*jslint 2 browser: true, 3 nomen: false, 4 debug: true, 5 forin: true, 6 undef: true, 7 white: false, 8 onevar: false 9 */ 10 var sc; 11 12 13 /** 14 * add an event listener to a target (element, window, etc). Uses target.addEventListener 15 * 16 * @param {object} target 17 * @param {string} event_type 18 * @param {function} handler a method that will take the event as a param, and "this" refers to target 19 * @param {Object} [scope] the scope to execute the handler within (what "this" refers to) 20 * @param {boolean} [use_capture] defaults to false 21 * @returns {function} the handler that was passed -- or created, if we passed a scope. You can use this to remove the listener later on 22 * @member sc.helpers 23 */ 24 sc.helpers.addListener = function(target, event_type, handler, scope, use_capture) { 25 26 if (scope) { 27 sch.warn('scope no longer supported! use a closure or reference "scope" in your event handler'); 28 } 29 if (use_capture) { 30 sch.warn('use_capture no longer supported!'); 31 } 32 33 sch.debug('listening for '+event_type); 34 sch.debug('on target nodeName:'+target.nodeName); 35 36 jQuery(target).bind(event_type, handler); 37 38 }; 39 40 41 /** 42 * removes an event listener on a target (element, window, etc). uses Uses target.removeEventListener 43 * 44 * Note that you must match all of the parameters to successfully remove the listener 45 * 46 * @param {object} target 47 * @param {string} event_type 48 * @param {function} handler a method that will take the event as a param, and "this" refers to target 49 * @param {Object} scope the scope to execute the handler 50 * @param {boolean} use_capture defaults to false 51 * @member sc.helpers 52 */ 53 sc.helpers.removeListener = function(target, event_type, handler, use_capture) { 54 55 sch.debug('removing listener for '+event_type); 56 sch.debug('on target nodeName:'+target.nodeName); 57 58 if (use_capture) { 59 sch.warn('use_capture no longer supported!'); 60 } 61 62 jQuery(target).unbind(event_type, handler); 63 }; 64 65 /** 66 * @param {DOMElement} base_target The base target where the delegated listener will be set-up 67 * @param {string} selector The CSS Selector that will be used to match incoming events. Matching is done with jQuery 68 * @param {string} event_type The event type 69 * @param {Function} handler a method that will take the event as a param, and "this" refers to target 70 * @param {Object} [scope] the scope to execute the handler 71 * @param {Boolean} [use_capture] Describe this parameter 72 */ 73 sc.helpers.addDelegatedListener = function(base_target, selector, event_type, handler, scope) { 74 75 sch.warn('scope no longer supported! use a closure or reference "scope" in your event handler'); 76 77 sch.debug('listening for '+event_type); 78 sch.debug('on target nodeName:'+target.nodeName); 79 sch.debug('for selector:'+selector); 80 81 jQuery(base_target).delegate(selector, event_type, handler); 82 83 84 }; 85 86 /** 87 * @param {DOMElement} base_target The base target where the delegated listener will be set-up 88 * @param {string} selector The CSS Selector that will be used to match incoming events. Matching is done with jQuery 89 * @param {string} event_type The event type 90 * @param {Function} handler a method that will take the event as a param, and "this" refers to target 91 * @param {Object} [scope] the scope to execute the handler 92 */ 93 sc.helpers.removeDelegatedListener = function(base_target, selector, event_type, handler, scope) { 94 sch.warn('scope no longer supported! use a closure or reference "scope" in your event handler'); 95 96 jQuery(base_target).delegate(selector, event_type, handler); 97 98 }; 99 100 /** 101 * This triggers a custom event using document.createEvent('Events') and target.dispatchEvent() 102 * 103 * @param {string} event_type 104 * @param {DOMElement} target the target for the event (element, window, etc) 105 * @param {object} data data to pass with event. it is always passed as the second parameter to the handler (after the event object) 106 * @param {boolean} bubble whether the event should bubble or not. defaults to true 107 * @member sc.helpers 108 */ 109 sc.helpers.triggerCustomEvent = function(event_type, target, data, bubble) { 110 111 sch.error('triggering '+event_type); 112 sch.error('on target nodeName:'+target.nodeName); 113 sch.error('event data:'); 114 // sch.error(sch.enJSON(data)); 115 116 if (bubble) { 117 sch.warn('bubble is no longer supported!'); 118 } 119 120 if (data) { 121 data = [data]; 122 } 123 124 jQuery(target).trigger(event_type, data); 125 126 }; 127 128 /** 129 * retrieves the data added to this event object 130 * @param {DOMEvent} event_obj 131 * @deprecated 132 */ 133 sc.helpers.getEventData = function(event_obj) { 134 sch.error('getEventData is DEPRECATED. Use second param on event handler'); 135 return null; 136 }; 137 138 /** 139 * Alias for sc.helpers.addListener 140 * @member sc.helpers 141 * @function 142 */ 143 sc.helpers.listen = sc.helpers.addListener; 144 145 /** 146 * Alias for sc.helpers.removeListener 147 * @member sc.helpers 148 * @function 149 */ 150 sc.helpers.unlisten = sc.helpers.removeListener; 151 152 /** 153 * Alias for sc.helpers.addDelegatedListener 154 * @member sc.helpers 155 * @function 156 */ 157 sc.helpers.delegate = sc.helpers.addDelegatedListener; 158 159 /** 160 * Alias for sc.helpers.removeDelegatedListener 161 * @member sc.helpers 162 * @function 163 */ 164 sc.helpers.undelegate = sc.helpers.removeDelegatedListener; 165 166 167 /** 168 * Alias for sc.helpers.triggerCustomEvent 169 * @member sc.helpers 170 * @function 171 */ 172 sc.helpers.trigger = sc.helpers.triggerCustomEvent;