Skip to content

Commit e2f4ee9

Browse files
author
Pinhook
committed
pause works with default
1 parent d695728 commit e2f4ee9

File tree

10 files changed

+209
-81
lines changed

10 files changed

+209
-81
lines changed

event/default/default.js

Lines changed: 56 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
steal.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
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<html>
2+
<head>
3+
<title>Default Test Suite</title>
4+
<link rel="stylesheet" type="text/css" href="../../../funcunit/qunit/qunit.css" />
5+
<style>
6+
body {
7+
margin: 0px; padding: 0px;
8+
}
9+
</style>
10+
<script type='text/javascript' src='../../../steal/steal.js?jquery/event/default/default_pause_test.js'></script>
11+
</head>
12+
<body>
13+
14+
<h1 id="qunit-header">Default Test Suite</h1>
15+
<h2 id="qunit-banner"></h2>
16+
<div id="qunit-testrunner-toolbar"></div>
17+
<h2 id="qunit-userAgent"></h2>
18+
<div id="test-content"></div>
19+
<ol id="qunit-tests"></ol>
20+
<div id="qunit-test-area"></div>
21+
</body>
22+
</html>
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
steal.plugins('funcunit/qunit','jquery/event/default','jquery/event/pause').then(function(){
2+
3+
module("jquery/event/default_pause");
4+
5+
6+
test("default and pause with delegate", function(){
7+
var order = [];
8+
stop();
9+
$("#qunit-test-area").html("<div id='foo'><p id='bar'>hello</p></div>")
10+
11+
$("#foo").delegate("#bar","default.show", function(){
12+
order.push("default")
13+
});
14+
15+
$("#foo").delegate("#bar","show", function(ev){
16+
order.push('show')
17+
ev.pause();
18+
setTimeout(function(){
19+
ev.resume();
20+
21+
setTimeout(function(){
22+
start();
23+
same(order,['show','default'])
24+
},30)
25+
26+
},50)
27+
});
28+
29+
30+
$("#bar").trigger("show")
31+
32+
});
33+
34+
test("default and pause with live", function(){
35+
$("#qunit-test-area").html("<div id='foo'>hello</div>")
36+
37+
var order = [];
38+
stop();
39+
40+
$("#foo").live("default.show", function(){
41+
order.push("default")
42+
});
43+
$("#foo").live("show", function(ev){
44+
order.push('show')
45+
ev.pause();
46+
setTimeout(function(){
47+
ev.resume();
48+
setTimeout(function(){
49+
start();
50+
same(order,['show','default'])
51+
},30)
52+
},50)
53+
});
54+
55+
56+
$("#foo").trigger("show")
57+
58+
});
59+
60+
});

event/default/test/qunit/default_test.js renamed to event/default/default_test.js

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
steal.plugins('funcunit/qunit','jquery/event/default').then(function(){
2+
13
module("jquery/event/default")
24
test("namespaced with same function", function(){
35

@@ -13,9 +15,10 @@ test("namespaced with same function", function(){
1315

1416
test("triggering defaults", function(){
1517

16-
$("#qunit-test-area").html("//jquery/event/default/test/qunit/html.micro",{})
17-
18+
$("#qunit-test-area").html(
1819

20+
"<div id='bigwrapper'><div id='wrap1'><div id='touchme1'>ClickMe</div></div>"+
21+
"<div id='wrap2'><div id='touchme2'>ClickMe</a></div></div>")
1922

2023

2124
var count1 = 0, defaultNum, touchNum, num = 0;;
@@ -64,7 +67,10 @@ test("triggering defaults", function(){
6467

6568
test("live on default events", function(){
6669

67-
$("#qunit-test-area").html("//jquery/event/default/test/qunit/html.micro",{})
70+
$("#qunit-test-area").html(
71+
72+
"<div id='bigwrapper'><div id='wrap1'><div id='touchme1'>ClickMe</div></div>"+
73+
"<div id='wrap2'><div id='touchme2'>ClickMe</a></div></div>")
6874
var bw = $("#bigwrapper"),
6975
count1 = 0,
7076
count2 = 0,
@@ -101,4 +107,25 @@ test("live on default events", function(){
101107

102108

103109
$("#qunit-test-area").html("")
104-
})
110+
});
111+
112+
113+
test("default and live order", function(){
114+
var order = [];
115+
$("#qunit-test-area").html("<div id='foo'></div>")
116+
117+
$("#foo").live("default.show", function(){
118+
order.push("default")
119+
});
120+
$("#foo").live("show", function(){
121+
order.push("show")
122+
});
123+
124+
$("#foo").trigger("show")
125+
126+
same(order, ['show','default'],"show then default")
127+
128+
});
129+
130+
131+
});

event/default/qunit.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
margin: 0px; padding: 0px;
88
}
99
</style>
10-
<script type='text/javascript' src='../../../steal/steal.js?steal[app]=jquery/event/default/test/qunit'></script>
10+
<script type='text/javascript' src='../../../steal/steal.js?jquery/event/default/default_test.js'></script>
1111
</head>
1212
<body>
1313

event/default/test/qunit/html.micro

Lines changed: 0 additions & 8 deletions
This file was deleted.

event/default/test/qunit/qunit.js

Lines changed: 0 additions & 6 deletions
This file was deleted.

event/pause/pause.html

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343

4444
$('#ul').delegate("li", "show",function(ev){
4545
console.log("cb")
46+
4647
var p = $(this).children("p"),
4748
original = p.text();
4849

@@ -54,11 +55,15 @@
5455
ev.resume();
5556
},2000)
5657

58+
}).delegate("li", 'show', function(){
59+
console.log("cb2")
5760
})
5861

5962
$('#wrapper').bind('show', function(){
6063
console.log('wrapper')
6164
})
65+
66+
$('')
6267
</script>
6368
</body>
6469
</html>

0 commit comments

Comments
 (0)