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.
Files changed (23) hide show
  1. data/VERSION.yml +1 -1
  2. data/lib/frameworks/sproutcore/CHANGELOG.md +49 -0
  3. data/lib/frameworks/sproutcore/frameworks/datastore/system/store.js +1 -1
  4. data/lib/frameworks/sproutcore/frameworks/desktop/resources/list_item.css +4 -4
  5. data/lib/frameworks/sproutcore/frameworks/desktop/resources/modal.css +8 -0
  6. data/lib/frameworks/sproutcore/frameworks/desktop/resources/panel.css +1 -8
  7. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/integration.js +0 -27
  8. data/lib/frameworks/sproutcore/frameworks/desktop/tests/views/scroll/methods.js +245 -18
  9. data/lib/frameworks/sproutcore/frameworks/desktop/views/scroll.js +23 -4
  10. data/lib/frameworks/sproutcore/frameworks/desktop/views/static_content.js +5 -7
  11. data/lib/frameworks/sproutcore/frameworks/experimental/frameworks/scroll_view/tests/scroll/integration.js +0 -25
  12. data/lib/frameworks/sproutcore/frameworks/foundation/resources/text_field.css +42 -39
  13. data/lib/frameworks/sproutcore/frameworks/foundation/system/image_queue.js +5 -0
  14. data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/image_queue.js +84 -0
  15. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/methods.js +48 -0
  16. data/lib/frameworks/sproutcore/frameworks/foundation/tests/views/text_field/ui.js +2 -2
  17. data/lib/frameworks/sproutcore/frameworks/foundation/views/text_field.js +288 -184
  18. data/lib/frameworks/sproutcore/frameworks/runtime/core.js +2 -2
  19. data/lib/frameworks/sproutcore/lib/index.rhtml +23 -18
  20. data/lib/frameworks/sproutcore/themes/ace/resources/picker/popover/popover.css +44 -0
  21. data/lib/sproutcore/rack/proxy.rb +12 -9
  22. metadata +3 -3
  23. data/lib/frameworks/sproutcore/themes/ace/resources/pane/pane.css +0 -3
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
2
  :major: 1
3
3
  :minor: 8
4
- :patch: 0
4
+ :patch: 1
@@ -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.
@@ -77,10 +77,10 @@
77
77
  left: 25px;
78
78
  }
79
79
 
80
- .has-count img.right-icon {
81
- right: 32px;
82
- }
83
- &.has-count{
80
+ &.has-count {
81
+ img.right-icon {
82
+ right: 32px;
83
+ }
84
84
  &.two-digit img.right-icon {
85
85
  right: 38px;
86
86
  }
@@ -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
- &.for-sc-panel {
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 dimention", function() {
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 dimention", function() {
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
+