sproutcore 1.8.0 → 1.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/VERSION.yml +1 -1
- data/lib/frameworks/sproutcore/CHANGELOG.md +49 -0
- data/lib/frameworks/sproutcore/frameworks/datastore/system/store.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/resources/list_item.css +4 -4
- data/lib/frameworks/sproutcore/frameworks/desktop/resources/modal.css +8 -0
- data/lib/frameworks/sproutcore/frameworks/desktop/resources/panel.css +1 -8
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/integration.js +0 -27
- data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/methods.js +245 -18
- data/lib/frameworks/sproutcore/frameworks/desktop/views/scroll.js +23 -4
- data/lib/frameworks/sproutcore/frameworks/desktop/views/static_content.js +5 -7
- data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/tests/scroll/integration.js +0 -25
- data/lib/frameworks/sproutcore/frameworks/foundation/resources/text_field.css +42 -39
- data/lib/frameworks/sproutcore/frameworks/foundation/system/image_queue.js +5 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/image_queue.js +84 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/methods.js +48 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/ui.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/foundation/views/text_field.js +288 -184
- data/lib/frameworks/sproutcore/frameworks/runtime/core.js +2 -2
- data/lib/frameworks/sproutcore/lib/index.rhtml +23 -18
- data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/popover.css +44 -0
- data/lib/sproutcore/rack/proxy.rb +12 -9
- metadata +3 -3
- data/lib/frameworks/sproutcore/themes/ace/resources/pane/pane.css +0 -3
data/VERSION.yml
CHANGED
@@ -1,6 +1,55 @@
|
|
1
1
|
CHANGE LOG FOR 1.6+
|
2
2
|
===================
|
3
3
|
|
4
|
+
Edge
|
5
|
+
----------
|
6
|
+
|
7
|
+
### CHANGES & FEATURES
|
8
|
+
|
9
|
+
* Adds `useUnixTime` attribute to SC.DateTime record attribute handlers.
|
10
|
+
* Introduces fixes and enhancements to the media framework (thanks @krotscheck!):
|
11
|
+
- enables live scrubbing
|
12
|
+
- decouples MediaSlider and Audio/Video view
|
13
|
+
- fixes layout rendering by creating a render delegate
|
14
|
+
- adds SC.mediaCapabilities for media capability detection
|
15
|
+
- updates styling to use Chance
|
16
|
+
|
17
|
+
### DEPRECATIONS & REMOVALS
|
18
|
+
|
19
|
+
### BUG FIXES
|
20
|
+
|
21
|
+
1.8.1 - BUG FIXES
|
22
|
+
----------
|
23
|
+
|
24
|
+
* Documentation fixes.
|
25
|
+
* Fixes the timeout proxy settings: :inactivity_timeout & :connect_timeout.
|
26
|
+
Setting them in a proxy config allows the developer to extend the timeout for
|
27
|
+
the connection to be setup and for activity to occur.
|
28
|
+
* Adds missing CSS for SC.PickerPane left and right pointer.
|
29
|
+
* Tidies up index.rhtml template:
|
30
|
+
- removes self-closing HTML
|
31
|
+
- renames app.manifest to manifest.appcache
|
32
|
+
* Fixes the styling of ModalPane backdrop for SC.PanelPane. [b1d386a]
|
33
|
+
* Fixes regression with Firefox specific SC.TextFieldView CSS. [0bc44f1]
|
34
|
+
* Improves use and compatibility of SC.TextFieldView:
|
35
|
+
- applies 'autocapitalize' and 'autocorrect' attributes to all browsers
|
36
|
+
- automatically centers hint text
|
37
|
+
- fixes problem centering input elements in IE8
|
38
|
+
- fixes problem positioning hint in textareas
|
39
|
+
- improves readability of hints by making them antialiased in Webkit
|
40
|
+
* Fixes issue when subsequent attempts to load a failed/aborted image
|
41
|
+
will result in queue processing being stalled. [62ad31f]
|
42
|
+
* Fixes nesting SC.ScrollViews not passing mousewheel events from child to
|
43
|
+
parent scroll view when child can no longer scroll. [341e88d]
|
44
|
+
* Fixes styling problem with SC.ListItemView right-icon. [6de3c55]
|
45
|
+
* Fixes SC.StaticContentView not removing previous content when setting content
|
46
|
+
to null. [81307a8]
|
47
|
+
* Fixes Safari focus ring artifacts in panes and Chrome bug with non-HW
|
48
|
+
accelerated animations in render layers, by removing the default .sc-pane
|
49
|
+
--webkit-transform: translate3d(0,0,0) CSS. This also makes it possible
|
50
|
+
to accurately manage which parts of the page should become layers, because
|
51
|
+
making everything a layer is not optimal. [f9d56f3]
|
52
|
+
|
4
53
|
1.8.0
|
5
54
|
----------
|
6
55
|
|
@@ -1713,8 +1713,8 @@ SC.Store = SC.Object.extend( /** @scope SC.Store.prototype */ {
|
|
1713
1713
|
in the store, then this method will request a refresh from the
|
1714
1714
|
`dataSource`. Otherwise it will attempt to retrieve the record.
|
1715
1715
|
|
1716
|
-
@param {String} id to id of the record to load
|
1717
1716
|
@param {SC.Record} recordType the expected record type
|
1717
|
+
@param {String} id to id of the record to load
|
1718
1718
|
@param {Number} storeKey (optional) optional store key
|
1719
1719
|
@param {Function} callback (optional) when refresh completes
|
1720
1720
|
@returns {Boolean} YES if the retrieval was a success.
|
@@ -5,4 +5,12 @@
|
|
5
5
|
.msie &{
|
6
6
|
background-image: url('.');
|
7
7
|
}
|
8
|
+
|
9
|
+
&.for-sc-panel {
|
10
|
+
background: black;
|
11
|
+
opacity: 0.3;
|
12
|
+
-moz-opacity: 0.3;
|
13
|
+
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=30)";
|
14
|
+
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=30);
|
15
|
+
}
|
8
16
|
}
|
@@ -3,14 +3,7 @@
|
|
3
3
|
.sc-pane.sc-panel {
|
4
4
|
overflow: visible;
|
5
5
|
z-index: 100;
|
6
|
-
|
7
|
-
background: black;
|
8
|
-
opacity: 0.3;
|
9
|
-
-moz-opacity: 0.3;
|
10
|
-
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=30)";
|
11
|
-
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=30);
|
12
|
-
}
|
13
|
-
|
6
|
+
|
14
7
|
> .sc-view {
|
15
8
|
border: 0px #444 solid;
|
16
9
|
background-color: #eaeaea ;
|
@@ -1,31 +1,5 @@
|
|
1
1
|
module("SC.ScrollView integration");
|
2
2
|
|
3
|
-
test("should work with SC.TemplateView", function() {
|
4
|
-
|
5
|
-
|
6
|
-
// var pane = SC.MainPane.create({
|
7
|
-
// childViews: ['scrollView'],
|
8
|
-
//
|
9
|
-
// scrollView: SC.ScrollView.design({
|
10
|
-
// layout: { width: 400, height: 600 },
|
11
|
-
//
|
12
|
-
// contentView: SC.TemplateView.create({
|
13
|
-
// template: SC.Handlebars.compile("foo bar baz")
|
14
|
-
// })
|
15
|
-
// })
|
16
|
-
// });
|
17
|
-
//
|
18
|
-
// pane.append();
|
19
|
-
// var exceptionThrown = false;
|
20
|
-
// try {
|
21
|
-
// SC.RunLoop.begin().end();
|
22
|
-
// } catch (e) {
|
23
|
-
// exceptionThrown = true;
|
24
|
-
// }
|
25
|
-
// ok(!exceptionThrown, "Does not throw an exception at the end of the run loop.");
|
26
|
-
// pane.remove();
|
27
|
-
});
|
28
|
-
|
29
3
|
test("should work with views that have static layout applied", function() {
|
30
4
|
var pane;
|
31
5
|
try {
|
@@ -49,4 +23,3 @@ test("should work with views that have static layout applied", function() {
|
|
49
23
|
if (pane) { pane.remove(); }
|
50
24
|
}
|
51
25
|
});
|
52
|
-
|
@@ -7,7 +7,7 @@
|
|
7
7
|
|
8
8
|
/*global module test htmlbody ok equals same stop start */
|
9
9
|
|
10
|
-
var pane, view , view2;
|
10
|
+
var pane, view , view2, view3, view4;
|
11
11
|
var appleURL='http://photos4.meetupstatic.com/photos/event/4/6/9/9/600_4518073.jpeg';
|
12
12
|
module("SC.ScrollView",{
|
13
13
|
setup: function() {
|
@@ -19,10 +19,21 @@ module("SC.ScrollView",{
|
|
19
19
|
}),
|
20
20
|
SC.ScrollView.extend({
|
21
21
|
contentView: SC.ImageView.design({value: appleURL, layout: {height:2000, width:2000}})
|
22
|
-
})
|
23
|
-
|
22
|
+
}),
|
23
|
+
SC.ScrollView.extend({
|
24
|
+
layout: { height: 400, width: 400 },
|
25
|
+
contentView: SC.View.design({
|
26
|
+
layout: { height: 500, width: 500 },
|
27
|
+
childViews: [
|
28
|
+
SC.ScrollView.design({
|
29
|
+
layout: { height: 200, width: 200, centerX: 0, centerY: 0 },
|
30
|
+
contentView: SC.ImageView.design({value: appleURL, layout: {height:300, width:300}})
|
31
|
+
})
|
32
|
+
]
|
33
|
+
})
|
34
|
+
})
|
24
35
|
],
|
25
|
-
|
36
|
+
|
26
37
|
expectedVertLine: function(line) {
|
27
38
|
var ret = view.get('verticalLineScroll')*line;
|
28
39
|
var alt = view.get('maximumVerticalScrollOffset');
|
@@ -48,10 +59,10 @@ module("SC.ScrollView",{
|
|
48
59
|
return ret;
|
49
60
|
}
|
50
61
|
});
|
51
|
-
|
52
|
-
|
62
|
+
|
63
|
+
|
53
64
|
pane.append(); // make sure there is a layer...
|
54
|
-
SC.RunLoop.end();
|
65
|
+
SC.RunLoop.end();
|
55
66
|
view = pane.childViews[0];
|
56
67
|
view.get('containerView').get('frame').height = 100;
|
57
68
|
view.get('containerView').get('frame').width = 100;
|
@@ -59,9 +70,11 @@ module("SC.ScrollView",{
|
|
59
70
|
view2 = pane.childViews[1];
|
60
71
|
view2.get('containerView').get('frame').height = 100;
|
61
72
|
view2.get('containerView').get('frame').width = 100;
|
62
|
-
|
73
|
+
|
74
|
+
view3 = pane.childViews[2];
|
75
|
+
view4 = view3.get('contentView').get('childViews')[0];
|
63
76
|
},
|
64
|
-
|
77
|
+
|
65
78
|
teardown: function() {
|
66
79
|
pane.remove();
|
67
80
|
pane = view = null ;
|
@@ -76,7 +89,7 @@ test("Scrolling to a certain co-ordinate of the container view", function() {
|
|
76
89
|
SC.RunLoop.begin();
|
77
90
|
view.scrollTo(100, 100);
|
78
91
|
SC.RunLoop.end();
|
79
|
-
|
92
|
+
|
80
93
|
equals(view.get('horizontalScrollOffset'), 100, "After scrolling to 100, horizontal offset must be");
|
81
94
|
equals(view.get('verticalScrollOffset'), 100, "After scrolling to 100, vertical offset must be");
|
82
95
|
view.scrollTo(5000, 5000);
|
@@ -108,7 +121,7 @@ test("Scrolling through line by line", function() {
|
|
108
121
|
view.scrollUpLine(line);
|
109
122
|
});
|
110
123
|
|
111
|
-
test("maximumHorizontalScrollOffset() returns the maximum horizontal scroll
|
124
|
+
test("maximumHorizontalScrollOffset() returns the maximum horizontal scroll dimension", function() {
|
112
125
|
var old_horizontalScrollOffset=2;
|
113
126
|
var old_verticalScrollOffset=2;
|
114
127
|
|
@@ -117,16 +130,16 @@ test("maximumHorizontalScrollOffset() returns the maximum horizontal scroll dime
|
|
117
130
|
view2.scrollBy(5000, 0);
|
118
131
|
view2.get('horizontalScrollOffset');
|
119
132
|
|
120
|
-
equals(view2.get('horizontalScrollOffset'),1900, 'maximum y coordinate should be 1900');
|
121
|
-
|
133
|
+
equals(view2.get('horizontalScrollOffset'),1900, 'maximum y coordinate should be 1900');
|
134
|
+
|
122
135
|
view2.set('horizontalScrollOffset',old_horizontalScrollOffset);
|
123
136
|
view2.set('verticalScrollOffset',old_verticalScrollOffset);
|
124
137
|
view2.scrollBy(-5000,0);
|
125
|
-
equals(view2.get('horizontalScrollOffset'),0, 'minimum y coordinate should be 0');
|
126
|
-
|
138
|
+
equals(view2.get('horizontalScrollOffset'),0, 'minimum y coordinate should be 0');
|
139
|
+
|
127
140
|
});
|
128
141
|
|
129
|
-
test("maximumVerticalScrollOffset() returns the maximum vertical scroll
|
142
|
+
test("maximumVerticalScrollOffset() returns the maximum vertical scroll dimension", function() {
|
130
143
|
var old_horizontalScrollOffset=2;
|
131
144
|
var old_verticalScrollOffset=2;
|
132
145
|
|
@@ -134,10 +147,224 @@ test("maximumVerticalScrollOffset() returns the maximum vertical scroll dimentio
|
|
134
147
|
view2.set('verticalScrollOffset',old_verticalScrollOffset);
|
135
148
|
view2.scrollBy(0, 5000);
|
136
149
|
view2.get('maximumVerticalScrollOffset');
|
137
|
-
equals(view2.get('verticalScrollOffset'),1900, 'maximum coordinate should be 1900');
|
150
|
+
equals(view2.get('verticalScrollOffset'),1900, 'maximum coordinate should be 1900');
|
138
151
|
view2.set('horizontalScrollOffset',old_horizontalScrollOffset);
|
139
152
|
view2.set('verticalScrollOffset',old_verticalScrollOffset);
|
140
153
|
view2.scrollBy(0,-5000);
|
141
154
|
equals(view2.get('verticalScrollOffset'),0, 'The minimum y coordinate should be 0');
|
142
|
-
|
155
|
+
|
143
156
|
});
|
157
|
+
|
158
|
+
|
159
|
+
test("Mouse wheel events should only be captured if the scroll can scroll in the direction (both TOP-LEFT).", function() {
|
160
|
+
// FIRST GROUP: everything scrolled all the way to the top left
|
161
|
+
view3.scrollTo(0,0);
|
162
|
+
view4.scrollTo(0,0);
|
163
|
+
|
164
|
+
// Scrolling further left is not captured by either scroll view
|
165
|
+
ok(!view3.mouseWheel({ wheelDeltaX: -10, wheelDeltaY: 0 }), 'The inner scroll view should not capture the mousewheel event since it cannot scroll further.');
|
166
|
+
ok(!view4.mouseWheel({ wheelDeltaX: -10, wheelDeltaY: 0 }), 'The outer scroll view should not capture the mousewheel event since it cannot scroll further.');
|
167
|
+
|
168
|
+
// Scrolling further up is not captured by either scroll view
|
169
|
+
ok(!view3.mouseWheel({ wheelDeltaX: 0, wheelDeltaY: -10 }), 'The inner scroll view should not capture the mousewheel event since it cannot scroll further.');
|
170
|
+
ok(!view4.mouseWheel({ wheelDeltaX: 0, wheelDeltaY: -10 }), 'The outer scroll view should not capture the mousewheel event since it cannot scroll further.');
|
171
|
+
|
172
|
+
// Scrolling down is captured by the target scroll view
|
173
|
+
ok(view3.mouseWheel({ wheelDeltaX: 10, wheelDeltaY: 0 }), 'The inner scroll view should capture the mousewheel event since it can scroll further.');
|
174
|
+
ok(view4.mouseWheel({ wheelDeltaX: 10, wheelDeltaY: 0 }), 'The outer scroll view should capture the mousewheel event since it can scroll further.');
|
175
|
+
|
176
|
+
// Scrolling right is captured by the target scroll view
|
177
|
+
ok(view3.mouseWheel({ wheelDeltaX: 0, wheelDeltaY: 10 }), 'The inner scroll view should capture the mousewheel event since it can scroll further.');
|
178
|
+
ok(view4.mouseWheel({ wheelDeltaX: 0, wheelDeltaY: 10 }), 'The outer scroll view should capture the mousewheel event since it can scroll further.');
|
179
|
+
});
|
180
|
+
|
181
|
+
test("Mouse wheel events should only be captured if the scroll can scroll in the direction (both BOTTOM-RIGHT).", function() {
|
182
|
+
view3.scrollTo(114,114);
|
183
|
+
view4.scrollTo(114,114);
|
184
|
+
|
185
|
+
// Scrolling further right is not captured by either scroll view
|
186
|
+
ok(!view3.mouseWheel({ wheelDeltaX: 10, wheelDeltaY: 0 }), 'The inner scroll view should not capture the mousewheel event since it cannot scroll further.');
|
187
|
+
ok(!view4.mouseWheel({ wheelDeltaX: 10, wheelDeltaY: 0 }), 'The outer scroll view should not capture the mousewheel event since it cannot scroll further.');
|
188
|
+
|
189
|
+
// Scrolling further down is not captured by either scroll view
|
190
|
+
ok(!view3.mouseWheel({ wheelDeltaX: 0, wheelDeltaY: 10 }), 'The inner scroll view should not capture the mousewheel event since it cannot scroll further.');
|
191
|
+
ok(!view4.mouseWheel({ wheelDeltaX: 0, wheelDeltaY: 10 }), 'The outer scroll view should not capture the mousewheel event since it cannot scroll further.');
|
192
|
+
|
193
|
+
// Scrolling up is captured by the target scroll view
|
194
|
+
ok(view3.mouseWheel({ wheelDeltaX: -10, wheelDeltaY: 0 }), 'The inner scroll view should capture the mousewheel event since it can scroll further.');
|
195
|
+
ok(view4.mouseWheel({ wheelDeltaX: -10, wheelDeltaY: 0 }), 'The outer scroll view should capture the mousewheel event since it can scroll further.');
|
196
|
+
|
197
|
+
// Scrolling left is captured by the target scroll view
|
198
|
+
ok(view3.mouseWheel({ wheelDeltaX: 0, wheelDeltaY: -10 }), 'The inner scroll view should capture the mousewheel event since it can scroll further.');
|
199
|
+
ok(view4.mouseWheel({ wheelDeltaX: 0, wheelDeltaY: -10 }), 'The outer scroll view should capture the mousewheel event since it can scroll further.');
|
200
|
+
});
|
201
|
+
|
202
|
+
test("Mouse wheel events not capturable by the inner scroll should bubble to the outer scroll (scroll right).", function() {
|
203
|
+
var elem = view4.get('layer'),
|
204
|
+
event;
|
205
|
+
|
206
|
+
view3.scrollTo(0,0);
|
207
|
+
view4.scrollTo(114,114);
|
208
|
+
|
209
|
+
window.stop();
|
210
|
+
|
211
|
+
event = SC.Event.simulateEvent(elem, 'mousewheel', { wheelDeltaX: 10, wheelDeltaY: 0 });
|
212
|
+
SC.Event.trigger(elem, 'mousewheel', event);
|
213
|
+
|
214
|
+
SC.RunLoop.begin();
|
215
|
+
SC.Timer.schedule({ target: this, action: function() {
|
216
|
+
equals(view4.get('horizontalScrollOffset'), 114, 'The inner scroll view should still have horizontalScrollOffset');
|
217
|
+
equals(view3.get('horizontalScrollOffset'), 10, 'The outer scroll view should now have horizontalScrollOffset');
|
218
|
+
window.start();
|
219
|
+
}, interval: 200});
|
220
|
+
SC.RunLoop.end();
|
221
|
+
});
|
222
|
+
|
223
|
+
test("Mouse wheel events not capturable by the inner scroll should bubble to the outer scroll (scroll down).", function() {
|
224
|
+
var elem = view4.get('layer'),
|
225
|
+
event;
|
226
|
+
|
227
|
+
view3.scrollTo(0,0);
|
228
|
+
view4.scrollTo(114,114);
|
229
|
+
|
230
|
+
window.stop();
|
231
|
+
|
232
|
+
event = SC.Event.simulateEvent(elem, 'mousewheel', { wheelDeltaX: 0, wheelDeltaY: 10 });
|
233
|
+
SC.Event.trigger(elem, 'mousewheel', event);
|
234
|
+
|
235
|
+
SC.RunLoop.begin();
|
236
|
+
SC.Timer.schedule({ target: this, action: function() {
|
237
|
+
equals(view4.get('verticalScrollOffset'), 114, 'The inner scroll view should still have verticalScrollOffset');
|
238
|
+
equals(view3.get('verticalScrollOffset'), 10, 'The outer scroll view should now have verticalScrollOffset');
|
239
|
+
window.start();
|
240
|
+
}, interval: 200});
|
241
|
+
SC.RunLoop.end();
|
242
|
+
});
|
243
|
+
|
244
|
+
test("Mouse wheel events not capturable by the inner scroll should bubble to the outer scroll (scroll left).", function() {
|
245
|
+
var elem = view4.get('layer'),
|
246
|
+
event;
|
247
|
+
|
248
|
+
view3.scrollTo(114,114);
|
249
|
+
view4.scrollTo(0,0);
|
250
|
+
|
251
|
+
window.stop();
|
252
|
+
|
253
|
+
event = SC.Event.simulateEvent(elem, 'mousewheel', { wheelDeltaX: -10, wheelDeltaY: 0 });
|
254
|
+
SC.Event.trigger(elem, 'mousewheel', event);
|
255
|
+
|
256
|
+
SC.RunLoop.begin();
|
257
|
+
SC.Timer.schedule({ target: this, action: function() {
|
258
|
+
equals(view4.get('horizontalScrollOffset'), 0, 'The inner scroll view should still have horizontalScrollOffset');
|
259
|
+
equals(view3.get('horizontalScrollOffset'), 104, 'The outer scroll view should now have horizontalScrollOffset');
|
260
|
+
window.start();
|
261
|
+
}, interval: 200});
|
262
|
+
SC.RunLoop.end();
|
263
|
+
});
|
264
|
+
|
265
|
+
test("Mouse wheel events not capturable by the inner scroll should bubble to the outer scroll (scroll up).", function() {
|
266
|
+
var elem = view4.get('layer'),
|
267
|
+
event;
|
268
|
+
|
269
|
+
view3.scrollTo(114,114);
|
270
|
+
view4.scrollTo(0,0);
|
271
|
+
|
272
|
+
window.stop();
|
273
|
+
|
274
|
+
event = SC.Event.simulateEvent(elem, 'mousewheel', { wheelDeltaX: 0, wheelDeltaY: -10 });
|
275
|
+
SC.Event.trigger(elem, 'mousewheel', event);
|
276
|
+
|
277
|
+
SC.RunLoop.begin();
|
278
|
+
SC.Timer.schedule({ target: this, action: function() {
|
279
|
+
equals(view4.get('verticalScrollOffset'), 0, 'The inner scroll view should still have verticalScrollOffset');
|
280
|
+
equals(view3.get('verticalScrollOffset'), 104, 'The outer scroll view should now have verticalScrollOffset');
|
281
|
+
window.start();
|
282
|
+
}, interval: 200 });
|
283
|
+
SC.RunLoop.end();
|
284
|
+
});
|
285
|
+
|
286
|
+
test("Mouse wheel events capturable by the inner scroll should not bubble to the outer scroll (scroll right).", function() {
|
287
|
+
var elem = view4.get('layer'),
|
288
|
+
event;
|
289
|
+
|
290
|
+
view3.scrollTo(0,0);
|
291
|
+
view4.scrollTo(0,0);
|
292
|
+
|
293
|
+
window.stop();
|
294
|
+
|
295
|
+
event = SC.Event.simulateEvent(elem, 'mousewheel', { wheelDeltaX: 10, wheelDeltaY: 0 });
|
296
|
+
SC.Event.trigger(elem, 'mousewheel', event);
|
297
|
+
|
298
|
+
SC.RunLoop.begin();
|
299
|
+
SC.Timer.schedule({ target: this, action: function() {
|
300
|
+
equals(view4.get('horizontalScrollOffset'), 10, 'The inner scroll view should now have horizontalScrollOffset');
|
301
|
+
equals(view3.get('horizontalScrollOffset'), 0, 'The outer scroll view should still have horizontalScrollOffset');
|
302
|
+
window.start();
|
303
|
+
}, interval: 200 });
|
304
|
+
SC.RunLoop.end();
|
305
|
+
});
|
306
|
+
|
307
|
+
test("Mouse wheel events capturable by the inner scroll should not bubble to the outer scroll (scroll up).", function() {
|
308
|
+
var elem = view4.get('layer'),
|
309
|
+
event;
|
310
|
+
|
311
|
+
view3.scrollTo(114,114);
|
312
|
+
view4.scrollTo(114,114);
|
313
|
+
|
314
|
+
window.stop();
|
315
|
+
|
316
|
+
event = SC.Event.simulateEvent(elem, 'mousewheel', { wheelDeltaX: 0, wheelDeltaY: -10 });
|
317
|
+
SC.Event.trigger(elem, 'mousewheel', event);
|
318
|
+
|
319
|
+
SC.RunLoop.begin();
|
320
|
+
SC.Timer.schedule({ target: this, action: function() {
|
321
|
+
equals(view4.get('verticalScrollOffset'), 104, 'The inner scroll view should now have verticalScrollOffset');
|
322
|
+
equals(view3.get('verticalScrollOffset'), 114, 'The outer scroll view should still have verticalScrollOffset');
|
323
|
+
window.start();
|
324
|
+
}, interval: 200 });
|
325
|
+
SC.RunLoop.end();
|
326
|
+
});
|
327
|
+
|
328
|
+
test("Mouse wheel events capturable by the inner scroll should not bubble to the outer scroll (scroll left).", function() {
|
329
|
+
var elem = view4.get('layer'),
|
330
|
+
event;
|
331
|
+
|
332
|
+
view3.scrollTo(114,114);
|
333
|
+
view4.scrollTo(114,114);
|
334
|
+
|
335
|
+
window.stop();
|
336
|
+
|
337
|
+
event = SC.Event.simulateEvent(elem, 'mousewheel', { wheelDeltaX: -10, wheelDeltaY: 0 });
|
338
|
+
SC.Event.trigger(elem, 'mousewheel', event);
|
339
|
+
|
340
|
+
SC.RunLoop.begin();
|
341
|
+
SC.Timer.schedule({ target: this, action: function() {
|
342
|
+
equals(view4.get('horizontalScrollOffset'), 104, 'The inner scroll view should now have horizontalScrollOffset');
|
343
|
+
equals(view3.get('horizontalScrollOffset'), 114, 'The outer scroll view should still have horizontalScrollOffset');
|
344
|
+
window.start();
|
345
|
+
}, interval: 200 });
|
346
|
+
SC.RunLoop.end();
|
347
|
+
});
|
348
|
+
|
349
|
+
test("Mouse wheel events capturable by the inner scroll should not bubble to the outer scroll (scroll down).", function() {
|
350
|
+
var elem = view4.get('layer'),
|
351
|
+
event;
|
352
|
+
|
353
|
+
view3.scrollTo(0,0);
|
354
|
+
view4.scrollTo(0,0);
|
355
|
+
|
356
|
+
window.stop();
|
357
|
+
|
358
|
+
event = SC.Event.simulateEvent(elem, 'mousewheel', { wheelDeltaX: 0, wheelDeltaY: 10 });
|
359
|
+
SC.Event.trigger(elem, 'mousewheel', event);
|
360
|
+
|
361
|
+
SC.RunLoop.begin();
|
362
|
+
SC.Timer.schedule({ target: this, action: function() {
|
363
|
+
equals(view4.get('verticalScrollOffset'), 10, 'The inner scroll view should now have verticalScrollOffset');
|
364
|
+
equals(view3.get('verticalScrollOffset'), 0, 'The outer scroll view should still have verticalScrollOffset');
|
365
|
+
window.start();
|
366
|
+
}, interval: 200 });
|
367
|
+
SC.RunLoop.end();
|
368
|
+
});
|
369
|
+
|
370
|
+
|