44steal . plugins ( 'jquery/event' ) . then ( function ( $ ) {
55
66//cache default types for performance
7- var types = { } , rnamespaces = / \. ( .* ) $ / ;
7+ var types = { } , rnamespaces = / \. ( .* ) $ / , $event = $ . event ;
88/**
99 * @attribute default
1010 * @parent specialevents
@@ -52,7 +52,7 @@ var types = {}, rnamespaces= /\.(.*)$/;
5252 * <p>Lets see how we would build this with JavaScriptMVC:</p>
5353 * @demo jquery/event/default/default.html
5454 */
55- $ . event . special [ "default" ] = {
55+ $event . special [ "default" ] = {
5656 add : function ( handleObj ) {
5757 //save the type
5858 types [ handleObj . namespace . replace ( rnamespaces , "" ) ] = true ;
@@ -66,12 +66,60 @@ $.event.special["default"] = {
6666 ev . _defaultActions . push ( { element : this , handler : origHandler , event : ev , data : data , currentTarget : ev . currentTarget } )
6767 }
6868 } ,
69- setup : function ( ) { return true }
69+ setup : function ( ) { return true } ,
70+ triggerDefault : function ( event , elem ) {
71+
72+ var defaultGetter = jQuery . Event ( "default." + event . type ) ;
73+
74+ $ . extend ( defaultGetter , {
75+ target : elem ,
76+ _defaultActions : event . _defaultActions ,
77+ exclusive : true
78+ } ) ;
79+
80+ defaultGetter . stopPropagation ( ) ;
81+
82+ //default events only work on elements
83+ if ( elem ) {
84+ $event . handle . call ( elem , defaultGetter ) ;
85+ }
86+ } ,
87+ checkAndRunDefaults : function ( event , elem ) {
88+ //fire if there are default actions to run &&
89+ // we have not prevented default &&
90+ // propagation has been stopped or we are at the document element
91+ // we have reached the document
92+ if ( ! event . isDefaultPrevented ( ) &&
93+ ( ! event . isPaused || ! event . isPaused ( ) ) && // no paused function or it's not paused
94+ event . _defaultActions &&
95+ ( ( event . isPropagationStopped ( ) ) ||
96+ ( ! elem . parentNode && ! elem . ownerDocument ) )
97+
98+ ) {
99+
100+ // put event back
101+ event . namespace = event . type ;
102+ event . type = "default" ;
103+ event . liveFired = null ;
104+
105+ // call each event handler
106+ for ( var i = 0 ; i < event . _defaultActions . length ; i ++ ) {
107+ var a = event . _defaultActions [ i ] ,
108+ oldHandle = event . handled ;
109+ event . currentTarget = a . currentTarget ;
110+ a . handler . call ( a . element , event , a . data ) ;
111+ event . handled = event . handled === null ? oldHandle : true ;
112+ }
113+ event . _defaultActions = null ; //set to null so everyone else on this element ignores it
114+ }
115+ }
70116}
71117
72118// overwrite trigger to allow default types
73- var oldTrigger = $ . event . trigger ;
74- $ . event . trigger = function defaultTriggerer ( event , data , elem , bubbling ) {
119+ var oldTrigger = $event . trigger ,
120+ triggerDefault = $event . special [ 'default' ] . triggerDefault ,
121+ checkAndRunDefaults = $event . special [ 'default' ] . checkAndRunDefaults ;
122+ $event . trigger = function defaultTriggerer ( event , data , elem , bubbling ) {
75123 //always need to convert here so we know if we have default actions
76124 var type = event . type || event
77125
@@ -91,51 +139,12 @@ $.event.trigger = function defaultTriggerer( event, data, elem, bubbling){
91139 event . _defaultActions = [ ] ; //set depth for possibly reused events
92140 }
93141
94- var defaultGetter = jQuery . Event ( "default." + event . type ) ,
95- res ;
96-
97- $ . extend ( defaultGetter , {
98- target : elem ,
99- _defaultActions : event . _defaultActions ,
100- exclusive : true
101- } ) ;
102142
103- defaultGetter . stopPropagation ( ) ;
104143
105- //default events only work on elements
106- if ( elem ) {
107- oldTrigger . call ( $ . event , defaultGetter , [ defaultGetter , data ] , elem , true ) ;
108- }
144+ triggerDefault ( event , elem ) ;
145+ oldTrigger . call ( $ . event , event , data , elem , bubbling ) ;
146+ checkAndRunDefaults ( event , elem ) ;
109147
110- //fire old trigger, this will call back here
111- res = oldTrigger . call ( $ . event , event , data , elem , bubbling ) ;
112-
113- //fire if there are default actions to run &&
114- // we have not prevented default &&
115- // propagation has been stopped or we are at the document element
116- // we have reached the document
117- if ( ! event . isDefaultPrevented ( ) &&
118- event . _defaultActions &&
119- ( ( event . isPropagationStopped ( ) ) ||
120- ( ! elem . parentNode && ! elem . ownerDocument ) )
121-
122- ) {
123-
124- // put event back
125- event . namespace = event . type ;
126- event . type = "default" ;
127- event . liveFired = null ;
128-
129- // call each event handler
130- for ( var i = 0 ; i < event . _defaultActions . length ; i ++ ) {
131- var a = event . _defaultActions [ i ] ,
132- oldHandle = event . handled ;
133- event . currentTarget = a . currentTarget ;
134- a . handler . call ( a . element , event , a . data ) ;
135- event . handled = event . handled === null ? oldHandle : true ;
136- }
137- event . _defaultActions = null ; //set to null so everyone else on this element ignores it
138- }
139148}
140149/**
141150 * @add jQuery.fn
0 commit comments