Mercurial > nebulaweb3
view default/node_modules/shoestring/src/events/bind.js @ 0:1d038bc9b3d2 default tip
Up:default
author | Liny <dev@neowd.com> |
---|---|
date | Sat, 31 May 2025 09:21:51 +0800 |
parents | |
children |
line wrap: on
line source
//>>excludeStart("exclude", pragmas.exclude); define([ "shoestring", "dom/closest" ], function(){ //>>excludeEnd("exclude"); function initEventCache( el, evt ) { if ( !el.shoestringData ) { el.shoestringData = {}; } if ( !el.shoestringData.events ) { el.shoestringData.events = {}; } if ( !el.shoestringData.loop ) { el.shoestringData.loop = {}; } if ( !el.shoestringData.events[ evt ] ) { el.shoestringData.events[ evt ] = []; } } function addToEventCache( el, evt, eventInfo ) { var obj = {}; obj.isCustomEvent = eventInfo.isCustomEvent; obj.callback = eventInfo.callfunc; obj.originalCallback = eventInfo.originalCallback; obj.namespace = eventInfo.namespace; el.shoestringData.events[ evt ].push( obj ); if( eventInfo.customEventLoop ) { el.shoestringData.loop[ evt ] = eventInfo.customEventLoop; } } /** * Bind a callback to an event for the currrent set of elements. * * @param {string} evt The event(s) to watch for. * @param {object,function} data Data to be included with each event or the callback. * @param {function} originalCallback Callback to be invoked when data is define.d. * @return shoestring * @this shoestring */ shoestring.fn.bind = function( evt, data, originalCallback ){ //>>includeStart("development", pragmas.development); if( arguments.length > 3 ){ shoestring.error( 'on-delegate' ); } if( typeof data === "string" ){ shoestring.error( 'on-delegate' ); } //>>includeEnd("development"); if( typeof data === "function" ){ originalCallback = data; data = null; } var evts = evt.split( " " ); // NOTE the `triggeredElement` is purely for custom events from IE function encasedCallback( e, namespace, triggeredElement ){ var result; if( e._namespace && e._namespace !== namespace ) { return; } e.data = data; e.namespace = e._namespace; var returnTrue = function(){ return true; }; e.isDefaultPrevented = function(){ return false; }; var originalPreventDefault = e.preventDefault; var preventDefaultConstructor = function(){ if( originalPreventDefault ) { return function(){ e.isDefaultPrevented = returnTrue; originalPreventDefault.call(e); }; } else { return function(){ e.isDefaultPrevented = returnTrue; e.returnValue = false; }; } }; // thanks https://github.com/jonathantneal/EventListener e.target = triggeredElement || e.target || e.srcElement; e.preventDefault = preventDefaultConstructor(); e.stopPropagation = e.stopPropagation || function () { e.cancelBubble = true; }; result = originalCallback.apply(this, [ e ].concat( e._args ) ); if( result === false ){ e.preventDefault(); e.stopPropagation(); } return result; } return this.each(function(){ var domEventCallback, customEventCallback, customEventLoop, oEl = this; for( var i = 0, il = evts.length; i < il; i++ ){ var split = evts[ i ].split( "." ), evt = split[ 0 ], namespace = split.length > 0 ? split[ 1 ] : null; domEventCallback = function( originalEvent ) { if( oEl.ssEventTrigger ) { originalEvent._namespace = oEl.ssEventTrigger._namespace; originalEvent._args = oEl.ssEventTrigger._args; oEl.ssEventTrigger = null; } return encasedCallback.call( oEl, originalEvent, namespace ); }; customEventCallback = null; customEventLoop = null; initEventCache( this, evt ); this.addEventListener( evt, domEventCallback, false ); addToEventCache( this, evt, { callfunc: customEventCallback || domEventCallback, isCustomEvent: !!customEventCallback, customEventLoop: customEventLoop, originalCallback: originalCallback, namespace: namespace }); } }); }; shoestring.fn.on = shoestring.fn.bind; //>>includeStart("development", pragmas.development); shoestring.fn.live = function(){ shoestring.error( 'live-delegate' ); }; shoestring.fn.delegate = function(){ shoestring.error( 'live-delegate' ); }; //>>includeEnd("development"); //>>excludeStart("exclude", pragmas.exclude); }); //>>excludeEnd("exclude");