annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1 //>>excludeStart("exclude", pragmas.exclude);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
2 define([ "shoestring", "dom/closest" ], function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
3 //>>excludeEnd("exclude");
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
4
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
5 function initEventCache( el, evt ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
6 if ( !el.shoestringData ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
7 el.shoestringData = {};
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
8 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
9 if ( !el.shoestringData.events ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
10 el.shoestringData.events = {};
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
11 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
12 if ( !el.shoestringData.loop ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
13 el.shoestringData.loop = {};
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
14 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
15 if ( !el.shoestringData.events[ evt ] ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
16 el.shoestringData.events[ evt ] = [];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
17 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
18 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
19
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
20 function addToEventCache( el, evt, eventInfo ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
21 var obj = {};
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
22 obj.isCustomEvent = eventInfo.isCustomEvent;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
23 obj.callback = eventInfo.callfunc;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
24 obj.originalCallback = eventInfo.originalCallback;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
25 obj.namespace = eventInfo.namespace;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
26
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
27 el.shoestringData.events[ evt ].push( obj );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
28
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
29 if( eventInfo.customEventLoop ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
30 el.shoestringData.loop[ evt ] = eventInfo.customEventLoop;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
31 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
32 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
33
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
34 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
35 * Bind a callback to an event for the currrent set of elements.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
36 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
37 * @param {string} evt The event(s) to watch for.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
38 * @param {object,function} data Data to be included with each event or the callback.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
39 * @param {function} originalCallback Callback to be invoked when data is define.d.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
40 * @return shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
41 * @this shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
42 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
43 shoestring.fn.bind = function( evt, data, originalCallback ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
44
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
45 //>>includeStart("development", pragmas.development);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
46 if( arguments.length > 3 ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
47 shoestring.error( 'on-delegate' );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
48 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
49 if( typeof data === "string" ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
50 shoestring.error( 'on-delegate' );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
51 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
52 //>>includeEnd("development");
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
53 if( typeof data === "function" ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
54 originalCallback = data;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
55 data = null;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
56 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
57
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
58 var evts = evt.split( " " );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
59
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
60 // NOTE the `triggeredElement` is purely for custom events from IE
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
61 function encasedCallback( e, namespace, triggeredElement ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
62 var result;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
63
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
64 if( e._namespace && e._namespace !== namespace ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
65 return;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
66 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
67
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
68 e.data = data;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
69 e.namespace = e._namespace;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
70
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
71 var returnTrue = function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
72 return true;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
73 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
74
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
75 e.isDefaultPrevented = function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
76 return false;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
77 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
78
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
79 var originalPreventDefault = e.preventDefault;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
80 var preventDefaultConstructor = function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
81 if( originalPreventDefault ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
82 return function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
83 e.isDefaultPrevented = returnTrue;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
84 originalPreventDefault.call(e);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
85 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
86 } else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
87 return function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
88 e.isDefaultPrevented = returnTrue;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
89 e.returnValue = false;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
90 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
91 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
92 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
93
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
94 // thanks https://github.com/jonathantneal/EventListener
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
95 e.target = triggeredElement || e.target || e.srcElement;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
96 e.preventDefault = preventDefaultConstructor();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
97 e.stopPropagation = e.stopPropagation || function () {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
98 e.cancelBubble = true;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
99 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
100
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
101 result = originalCallback.apply(this, [ e ].concat( e._args ) );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
102
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
103 if( result === false ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
104 e.preventDefault();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
105 e.stopPropagation();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
106 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
107
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
108 return result;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
109 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
110
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
111 return this.each(function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
112 var domEventCallback,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
113 customEventCallback,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
114 customEventLoop,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
115 oEl = this;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
116
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
117 for( var i = 0, il = evts.length; i < il; i++ ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
118 var split = evts[ i ].split( "." ),
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
119 evt = split[ 0 ],
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
120 namespace = split.length > 0 ? split[ 1 ] : null;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
121
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
122 domEventCallback = function( originalEvent ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
123 if( oEl.ssEventTrigger ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
124 originalEvent._namespace = oEl.ssEventTrigger._namespace;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
125 originalEvent._args = oEl.ssEventTrigger._args;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
126
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
127 oEl.ssEventTrigger = null;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
128 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
129 return encasedCallback.call( oEl, originalEvent, namespace );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
130 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
131 customEventCallback = null;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
132 customEventLoop = null;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
133
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
134 initEventCache( this, evt );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
135
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
136 this.addEventListener( evt, domEventCallback, false );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
137
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
138 addToEventCache( this, evt, {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
139 callfunc: customEventCallback || domEventCallback,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
140 isCustomEvent: !!customEventCallback,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
141 customEventLoop: customEventLoop,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
142 originalCallback: originalCallback,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
143 namespace: namespace
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
144 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
145 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
146 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
147 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
148
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
149 shoestring.fn.on = shoestring.fn.bind;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
150
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
151 //>>includeStart("development", pragmas.development);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
152 shoestring.fn.live = function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
153 shoestring.error( 'live-delegate' );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
154 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
155
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
156 shoestring.fn.delegate = function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
157 shoestring.error( 'live-delegate' );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
158 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
159 //>>includeEnd("development");
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
160
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
161 //>>excludeStart("exclude", pragmas.exclude);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
162 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
163 //>>excludeEnd("exclude");