sproutcore 1.11.0.rc3 → 1.11.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +6 -14
- data/CHANGELOG +5 -0
- data/VERSION.yml +1 -1
- data/lib/frameworks/sproutcore/Buildfile +3 -2
- data/lib/frameworks/sproutcore/CHANGELOG.md +59 -10
- data/lib/frameworks/sproutcore/apps/showcase/resources/main_page.js +1 -0
- data/lib/frameworks/sproutcore/apps/showcase/resources/stylesheet.css +9 -4
- data/lib/frameworks/sproutcore/frameworks/core_foundation/panes/manipulation.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/event.js +0 -10
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/locale.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/root_responder.js +10 -45
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/selection_set.js +3 -3
- data/lib/frameworks/sproutcore/frameworks/core_foundation/system/touch.js +76 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/system/{touch.js → touch_test.js} +64 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/pane/append_remove.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/pane/design_mode_test.js +61 -24
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/createChildViews.js +1 -2
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/destroy.js +0 -3
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/{layoutStyle.js → layout_style_test.js} +4 -4
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layout_test.js +602 -0
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/viewDidResize.js +0 -23
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view.js +18 -17
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/animation.js +5 -5
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/design_mode.js +64 -24
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/layout.js +904 -871
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/layout_style.js +1 -3
- data/lib/frameworks/sproutcore/frameworks/core_foundation/views/view/statechart.js +40 -24
- data/lib/frameworks/sproutcore/frameworks/datastore/data_sources/fixtures.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/datastore/models/record.js +5 -5
- data/lib/frameworks/sproutcore/frameworks/datastore/system/nested_store.js +14 -14
- data/lib/frameworks/sproutcore/frameworks/datastore/system/query.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/datastore/system/record_array.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/datastore/system/store.js +36 -33
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/models/record/writeAttribute.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/nested_store/autonomous_dataSourceCallbacks.js +6 -6
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/commitChangesFromNestedStore.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/commitRecord.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/dataSourceCallbacks.js +7 -7
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/destroyRecord.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/recordDidChange.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/datastore/tests/system/store/retrieveRecord.js +4 -4
- data/lib/frameworks/sproutcore/frameworks/datetime/frameworks/core/system/datetime.js +11 -11
- data/lib/frameworks/sproutcore/frameworks/designer/coders/object.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/menu.js +30 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/panes/picker.js +12 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/views/menu_scroll.js +5 -3
- data/lib/frameworks/sproutcore/frameworks/desktop/views/menu_scroller_view.js +0 -36
- data/lib/frameworks/sproutcore/frameworks/desktop/views/scroll_view.js +3 -3
- data/lib/frameworks/sproutcore/frameworks/desktop/views/segmented.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/desktop/views/static_content.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/gestures/pinch_gesture.js +286 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/gestures/swipe_gesture.js +449 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/gestures/tap_gesture.js +259 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/mixins/gesturable.js +218 -30
- data/lib/frameworks/sproutcore/frameworks/foundation/system/gesture.js +259 -158
- data/lib/frameworks/sproutcore/frameworks/foundation/system/string.js +58 -50
- data/lib/frameworks/sproutcore/frameworks/foundation/system/utils/string_measurement.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/gestures/pinch_gesture_test.js +321 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/gestures/swipe_gesture_test.js +154 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/gestures/tap_gesture_test.js +55 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/gesturable_test.js +233 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/mixins/staticLayout.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/foundation/tests/system/gesture_test.js +254 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/views/container.js +1 -0
- data/lib/frameworks/sproutcore/frameworks/foundation/views/text_field.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/legacy/object_keys_polyfill.js +51 -0
- data/lib/frameworks/sproutcore/frameworks/{core_foundation/system/req_anim_frame.js → legacy/request_animation_frame_polyfill.js} +10 -3
- data/lib/frameworks/sproutcore/frameworks/media/views/audio.js +19 -25
- data/lib/frameworks/sproutcore/frameworks/media/views/controls.js +7 -7
- data/lib/frameworks/sproutcore/frameworks/media/views/mini_controls.js +3 -3
- data/lib/frameworks/sproutcore/frameworks/media/views/simple_controls.js +9 -9
- data/lib/frameworks/sproutcore/frameworks/runtime/core.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/insertAt.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/runtime/debug/test_suites/array/removeAt.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/runtime/ext/array.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/runtime/mixins/array.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/runtime/mixins/freezable.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/runtime/mixins/observable.js +66 -5
- data/lib/frameworks/sproutcore/frameworks/runtime/mixins/tree.js +44 -0
- data/lib/frameworks/sproutcore/frameworks/runtime/private/observer_queue.js +4 -1
- data/lib/frameworks/sproutcore/frameworks/runtime/system/binding.js +0 -25
- data/lib/frameworks/sproutcore/frameworks/runtime/system/enumerator.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/runtime/system/error.js +67 -15
- data/lib/frameworks/sproutcore/frameworks/runtime/system/index_set.js +6 -11
- data/lib/frameworks/sproutcore/frameworks/runtime/system/set.js +6 -6
- data/lib/frameworks/sproutcore/frameworks/runtime/system/string.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/mixins/observable/{observable.js → observable_test.js} +110 -16
- data/lib/frameworks/sproutcore/frameworks/runtime/tests/system/error.js +21 -0
- data/lib/frameworks/sproutcore/frameworks/statechart/system/statechart.js +2 -2
- data/lib/frameworks/sproutcore/frameworks/template_view/ext/handlebars.js +1 -1
- data/lib/frameworks/sproutcore/frameworks/testing/system/plan.js +1 -1
- data/lib/sproutcore/render_engines/haml.rb +1 -1
- metadata +610 -604
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layout.js +0 -210
- data/lib/frameworks/sproutcore/frameworks/core_foundation/tests/views/view/layoutDidChange.js +0 -275
- data/lib/frameworks/sproutcore/frameworks/foundation/gestures/pinch.js +0 -119
- data/lib/frameworks/sproutcore/frameworks/foundation/gestures/swipe.js +0 -234
- data/lib/frameworks/sproutcore/frameworks/foundation/gestures/tap.js +0 -157
@@ -0,0 +1,254 @@
|
|
1
|
+
// ==========================================================================
|
2
|
+
// Project: SproutCore
|
3
|
+
// License: Licensed under MIT license
|
4
|
+
// ==========================================================================
|
5
|
+
/*globals CoreTest, module, test, ok, equals, same, expect */
|
6
|
+
|
7
|
+
var gesture;
|
8
|
+
module("SC.Gesture", {
|
9
|
+
|
10
|
+
setup: function () {
|
11
|
+
gesture = SC.Gesture;
|
12
|
+
},
|
13
|
+
|
14
|
+
teardown: function () {
|
15
|
+
if (gesture.destroy) { gesture.destroy(); }
|
16
|
+
gesture = null;
|
17
|
+
}
|
18
|
+
});
|
19
|
+
|
20
|
+
/* Properties */
|
21
|
+
test("Default Properties:", function () {
|
22
|
+
gesture = gesture.create();
|
23
|
+
equals(gesture.name, 'gesture', "The default value of name is");
|
24
|
+
});
|
25
|
+
|
26
|
+
/* Methods */
|
27
|
+
|
28
|
+
// This method sets _sc_isActive to true and calls gestureName + 'Start' on the view with the gesture and any given arguments.
|
29
|
+
test("Method: start (_sc_isActive === false)", function () {
|
30
|
+
var view = SC.View.create({
|
31
|
+
|
32
|
+
gestureStart: function (arg1, arg2) {
|
33
|
+
ok(true, 'called', 'called', "The method was");
|
34
|
+
equals(arg1, 'a', "The first argument passed to start is passed to gestureStart and is");
|
35
|
+
equals(arg2, 'b', "The second argument passed to start is passed to gestureStart and is");
|
36
|
+
}
|
37
|
+
|
38
|
+
});
|
39
|
+
|
40
|
+
gesture = gesture.create({
|
41
|
+
view: view
|
42
|
+
});
|
43
|
+
|
44
|
+
ok(gesture.start !== undefined, 'defined', 'defined', "The method is");
|
45
|
+
|
46
|
+
gesture.start('a', 'b');
|
47
|
+
|
48
|
+
equals(gesture._sc_isActive, true, "The gesture has _sc_isActive set to");
|
49
|
+
});
|
50
|
+
|
51
|
+
// This method does nothing if _sc_isActive is already true.
|
52
|
+
test("Method: start (_sc_isActive === true)", function () {
|
53
|
+
var view = SC.View.create({
|
54
|
+
|
55
|
+
gestureStart: function (theGesture) {
|
56
|
+
ok(true, 'called', 'called', "The method was");
|
57
|
+
}
|
58
|
+
|
59
|
+
});
|
60
|
+
|
61
|
+
gesture = gesture.create({
|
62
|
+
_sc_isActive: true,
|
63
|
+
view: view
|
64
|
+
});
|
65
|
+
|
66
|
+
gesture.start();
|
67
|
+
|
68
|
+
// Ensure 0 tests run.
|
69
|
+
expect(0);
|
70
|
+
});
|
71
|
+
|
72
|
+
// This method sets _sc_isActive to false and calls gestureName + 'End' on the view with the gesture and any given arguments.
|
73
|
+
test("Method: end (_sc_isActive === true)", function () {
|
74
|
+
var view = SC.View.create({
|
75
|
+
|
76
|
+
gestureEnd: function (arg1, arg2) {
|
77
|
+
ok(true, 'called', 'called', "The method was");
|
78
|
+
equals(arg1, 'a', "The first argument passed to start is passed to gestureEnd and is");
|
79
|
+
equals(arg2, 'b', "The second argument passed to start is passed to gestureEnd and is");
|
80
|
+
}
|
81
|
+
|
82
|
+
});
|
83
|
+
|
84
|
+
gesture = gesture.create({
|
85
|
+
_sc_isActive: true,
|
86
|
+
view: view
|
87
|
+
});
|
88
|
+
|
89
|
+
ok(gesture.end !== undefined, 'defined', 'defined', "The method is");
|
90
|
+
|
91
|
+
gesture.end('a', 'b');
|
92
|
+
|
93
|
+
equals(gesture._sc_isActive, false, "The gesture has _sc_isActive set to");
|
94
|
+
});
|
95
|
+
|
96
|
+
// This method does nothing if _sc_isActive is already false.
|
97
|
+
test("Method: end (_sc_isActive === false)", function () {
|
98
|
+
var view = SC.View.create({
|
99
|
+
|
100
|
+
gestureEnd: function (theGesture) {
|
101
|
+
ok(true, 'called', 'called', "The method was");
|
102
|
+
}
|
103
|
+
|
104
|
+
});
|
105
|
+
|
106
|
+
gesture = gesture.create({
|
107
|
+
_sc_isActive: false,
|
108
|
+
view: view
|
109
|
+
});
|
110
|
+
|
111
|
+
gesture.end();
|
112
|
+
|
113
|
+
// Ensure 0 tests run.
|
114
|
+
expect(0);
|
115
|
+
});
|
116
|
+
|
117
|
+
// This method calls gestureName + 'Changed' on the view with the gesture and any given arguments.
|
118
|
+
test("Method: change (_sc_isActive === true)", function () {
|
119
|
+
var view = SC.View.create({
|
120
|
+
|
121
|
+
gestureChanged: function (arg1, arg2) {
|
122
|
+
ok(true, 'called', 'called', "The method was");
|
123
|
+
equals(arg1, 'a', "The first argument passed to start is passed to gestureChanged and is");
|
124
|
+
equals(arg2, 'b', "The second argument passed to start is passed to gestureChanged and is");
|
125
|
+
}
|
126
|
+
|
127
|
+
});
|
128
|
+
|
129
|
+
gesture = gesture.create({
|
130
|
+
_sc_isActive: true,
|
131
|
+
view: view
|
132
|
+
});
|
133
|
+
|
134
|
+
ok(gesture.change !== undefined, 'defined', 'defined', "The method is");
|
135
|
+
|
136
|
+
gesture.change('a', 'b');
|
137
|
+
});
|
138
|
+
|
139
|
+
// This method does nothing if _sc_isActive is already false.
|
140
|
+
test("Method: change (_sc_isActive === false)", function () {
|
141
|
+
var view = SC.View.create({
|
142
|
+
|
143
|
+
gestureChanged: function (theGesture) {
|
144
|
+
ok(true, 'called', 'called', "The method was");
|
145
|
+
}
|
146
|
+
|
147
|
+
});
|
148
|
+
|
149
|
+
gesture = gesture.create({
|
150
|
+
_sc_isActive: false,
|
151
|
+
view: view
|
152
|
+
});
|
153
|
+
|
154
|
+
gesture.change();
|
155
|
+
|
156
|
+
// Ensure 0 tests run.
|
157
|
+
expect(0);
|
158
|
+
});
|
159
|
+
|
160
|
+
// This method sets _sc_isActive to false and calls gestureName + 'Cancelled' on the view with the gesture and any given arguments.
|
161
|
+
test("Method: cancel (_sc_isActive === true)", function () {
|
162
|
+
var view = SC.View.create({
|
163
|
+
|
164
|
+
gestureCancelled: function (arg1, arg2) {
|
165
|
+
ok(true, 'called', 'called', "The method was");
|
166
|
+
equals(arg1, 'a', "The first argument passed to start is passed to gestureCancelled and is");
|
167
|
+
equals(arg2, 'b', "The second argument passed to start is passed to gestureCancelled and is");
|
168
|
+
}
|
169
|
+
|
170
|
+
});
|
171
|
+
|
172
|
+
gesture = gesture.create({
|
173
|
+
_sc_isActive: true,
|
174
|
+
view: view
|
175
|
+
});
|
176
|
+
|
177
|
+
ok(gesture.cancel !== undefined, 'defined', 'defined', "The method is");
|
178
|
+
|
179
|
+
gesture.cancel('a', 'b');
|
180
|
+
|
181
|
+
equals(gesture._sc_isActive, false, "The gesture has _sc_isActive set to");
|
182
|
+
});
|
183
|
+
|
184
|
+
// This method does nothing if _sc_isActive is already false.
|
185
|
+
test("Method: cancel (_sc_isActive === false)", function () {
|
186
|
+
var view = SC.View.create({
|
187
|
+
|
188
|
+
gestureCancelled: function (theGesture) {
|
189
|
+
ok(true, 'called', 'called', "The method was");
|
190
|
+
}
|
191
|
+
|
192
|
+
});
|
193
|
+
|
194
|
+
gesture = gesture.create({
|
195
|
+
_sc_isActive: false,
|
196
|
+
view: view
|
197
|
+
});
|
198
|
+
|
199
|
+
gesture.cancel();
|
200
|
+
|
201
|
+
// Ensure 0 tests run.
|
202
|
+
expect(0);
|
203
|
+
});
|
204
|
+
|
205
|
+
// This method calls gestureName on the view with the gesture and any given arguments.
|
206
|
+
test("Method: trigger (_sc_isActive === true)", function () {
|
207
|
+
var view = SC.View.create({
|
208
|
+
|
209
|
+
gesture: function (arg1, arg2) {
|
210
|
+
ok(true, 'called', 'called', "The method was");
|
211
|
+
equals(arg1, 'a', "The first argument passed to start is passed to gestureChanged and is");
|
212
|
+
equals(arg2, 'b', "The second argument passed to start is passed to gestureChanged and is");
|
213
|
+
}
|
214
|
+
|
215
|
+
});
|
216
|
+
|
217
|
+
gesture = gesture.create({
|
218
|
+
_sc_isActive: true,
|
219
|
+
view: view
|
220
|
+
});
|
221
|
+
|
222
|
+
ok(gesture.trigger !== undefined, 'defined', 'defined', "The method is");
|
223
|
+
|
224
|
+
gesture.trigger('a', 'b');
|
225
|
+
});
|
226
|
+
|
227
|
+
// This method does nothing if _sc_isActive is already false.
|
228
|
+
test("Method: trigger (_sc_isActive === false)", function () {
|
229
|
+
var view = SC.View.create({
|
230
|
+
|
231
|
+
gestureChanged: function (theGesture) {
|
232
|
+
ok(true, 'called', 'called', "The method was");
|
233
|
+
}
|
234
|
+
|
235
|
+
});
|
236
|
+
|
237
|
+
gesture = gesture.create({
|
238
|
+
_sc_isActive: false,
|
239
|
+
view: view
|
240
|
+
});
|
241
|
+
|
242
|
+
gesture.trigger();
|
243
|
+
|
244
|
+
// Ensure 0 tests run.
|
245
|
+
expect(0);
|
246
|
+
});
|
247
|
+
|
248
|
+
// This method does nothing.
|
249
|
+
test("Method: touchSessionStarted", function () {
|
250
|
+
gesture = gesture.create();
|
251
|
+
|
252
|
+
ok(gesture.touchSessionStarted !== undefined, 'defined', 'defined', "The method is");
|
253
|
+
equals(gesture.touchSessionStarted(), undefined, "The method returns");
|
254
|
+
});
|
@@ -256,6 +256,7 @@ SC.ContainerView = SC.View.extend(
|
|
256
256
|
this.removeObserver('contentView', this, this._sc_contentViewDidChange);
|
257
257
|
|
258
258
|
// Cancel any active transitions.
|
259
|
+
// Note: this will also destroy any content view that the container created.
|
259
260
|
this._sc_cancelTransitions();
|
260
261
|
|
261
262
|
// Remove our internal reference to the statecharts.
|
@@ -753,7 +753,7 @@ SC.TextFieldView = SC.FieldView.extend(SC.Editable,
|
|
753
753
|
}
|
754
754
|
|
755
755
|
if (!SC.none(autoCapitalize)) {
|
756
|
-
if (SC.typeOf(autoCapitalize)
|
756
|
+
if (SC.typeOf(autoCapitalize) === 'boolean') {
|
757
757
|
input.attr('autocapitalize', !autoCapitalize ? 'none' : 'sentences');
|
758
758
|
} else {
|
759
759
|
input.attr('autocapitalize', autoCapitalize);
|
@@ -0,0 +1,51 @@
|
|
1
|
+
/** @scope Object
|
2
|
+
Polyfill for Object.keys().
|
3
|
+
|
4
|
+
Supports using `Object.keys()` on browsers prior to the following:
|
5
|
+
|
6
|
+
* Chrome 5
|
7
|
+
* Firefox 4.0 (Gecko 2.0)
|
8
|
+
* Internet Explorer 9
|
9
|
+
* Opera 12
|
10
|
+
* Safari 5
|
11
|
+
*/
|
12
|
+
// From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
|
13
|
+
if (!Object.keys) {
|
14
|
+
Object.keys = (function() {
|
15
|
+
var hasOwnProperty = Object.prototype.hasOwnProperty,
|
16
|
+
hasDontEnumBug = !({ toString: null }).propertyIsEnumerable('toString'),
|
17
|
+
dontEnums = [
|
18
|
+
'toString',
|
19
|
+
'toLocaleString',
|
20
|
+
'valueOf',
|
21
|
+
'hasOwnProperty',
|
22
|
+
'isPrototypeOf',
|
23
|
+
'propertyIsEnumerable',
|
24
|
+
'constructor'
|
25
|
+
],
|
26
|
+
dontEnumsLength = dontEnums.length;
|
27
|
+
|
28
|
+
return function(obj) {
|
29
|
+
if (typeof obj !== 'object' && (typeof obj !== 'function' || obj === null)) {
|
30
|
+
throw new TypeError('Object.keys called on non-object');
|
31
|
+
}
|
32
|
+
|
33
|
+
var result = [], prop, i;
|
34
|
+
|
35
|
+
for (prop in obj) {
|
36
|
+
if (hasOwnProperty.call(obj, prop)) {
|
37
|
+
result.push(prop);
|
38
|
+
}
|
39
|
+
}
|
40
|
+
|
41
|
+
if (hasDontEnumBug) {
|
42
|
+
for (i = 0; i < dontEnumsLength; i++) {
|
43
|
+
if (hasOwnProperty.call(obj, dontEnums[i])) {
|
44
|
+
result.push(dontEnums[i]);
|
45
|
+
}
|
46
|
+
}
|
47
|
+
}
|
48
|
+
return result;
|
49
|
+
};
|
50
|
+
}());
|
51
|
+
}
|
@@ -1,6 +1,13 @@
|
|
1
1
|
/** @scope window
|
2
|
-
Polyfill for cross-browser backwards compatible window.requestAnimationFrame
|
3
|
-
|
2
|
+
Polyfill for cross-browser backwards compatible window.requestAnimationFrame support.
|
3
|
+
|
4
|
+
Supports using `window.requestAnimationFrame` on browsers prior to the following:
|
5
|
+
|
6
|
+
* Chrome 10
|
7
|
+
* Firefox 4.0 (Gecko 2.0)
|
8
|
+
* Internet Explorer 10.0
|
9
|
+
* Opera 15
|
10
|
+
* Safari 6.0
|
4
11
|
|
5
12
|
Modified from Erik Möller:
|
6
13
|
http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating
|
@@ -8,7 +15,7 @@
|
|
8
15
|
(function() {
|
9
16
|
var lastTime = 0;
|
10
17
|
var vendors = ['ms', 'moz', 'webkit', 'o'];
|
11
|
-
for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
|
18
|
+
for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
|
12
19
|
window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];
|
13
20
|
window.cancelRequestAnimationFrame = window[vendors[x]+
|
14
21
|
'CancelRequestAnimationFrame'];
|
@@ -36,7 +36,7 @@ SC.AudioView = SC.View.extend(
|
|
36
36
|
Audio view className.
|
37
37
|
@type String
|
38
38
|
*/
|
39
|
-
classNames: 'sc-audio-view',
|
39
|
+
classNames: ['sc-audio-view'],
|
40
40
|
|
41
41
|
/**
|
42
42
|
Properties that trigger a re render of the view. If the value changes, it
|
@@ -44,14 +44,13 @@ SC.AudioView = SC.View.extend(
|
|
44
44
|
|
45
45
|
@type Array
|
46
46
|
*/
|
47
|
-
displayProperties: ['value'
|
47
|
+
displayProperties: ['value'],
|
48
48
|
|
49
49
|
/**
|
50
50
|
Reference to the audio object once is created.
|
51
51
|
@type Object
|
52
52
|
*/
|
53
|
-
|
54
|
-
audioObject:null,
|
53
|
+
audioObject: null,
|
55
54
|
|
56
55
|
/**
|
57
56
|
Array containing the technologies and the order to load them depending
|
@@ -62,26 +61,19 @@ SC.AudioView = SC.View.extend(
|
|
62
61
|
degradeList: ['html5','quicktime', 'flash'],
|
63
62
|
|
64
63
|
/**
|
65
|
-
|
64
|
+
The current play time in seconds.
|
66
65
|
|
67
66
|
@type Number
|
67
|
+
@default 0
|
68
68
|
*/
|
69
69
|
currentTime : function(key, value) {
|
70
|
-
|
71
|
-
|
70
|
+
/* jshint eqnull:true */
|
71
|
+
if (value != null) {
|
72
72
|
this.seek(value);
|
73
73
|
}
|
74
74
|
|
75
|
-
return
|
76
|
-
}.property(
|
77
|
-
|
78
|
-
/**
|
79
|
-
Current time in secs
|
80
|
-
|
81
|
-
@type Number
|
82
|
-
@private
|
83
|
-
*/
|
84
|
-
_currentTime : 0,
|
75
|
+
return value == null ? 0 : value;
|
76
|
+
}.property().cacheable(),
|
85
77
|
|
86
78
|
/**
|
87
79
|
Duration in secs
|
@@ -113,7 +105,7 @@ SC.AudioView = SC.View.extend(
|
|
113
105
|
@type Boolean
|
114
106
|
*/
|
115
107
|
|
116
|
-
ended: NO, //did the audio
|
108
|
+
ended: NO, //did the audio finish playing
|
117
109
|
|
118
110
|
/**
|
119
111
|
Indicates if the audio is ready to be played.
|
@@ -144,6 +136,7 @@ SC.AudioView = SC.View.extend(
|
|
144
136
|
*/
|
145
137
|
render: function(context, firstTime) {
|
146
138
|
var i, j, listLen, pluginsLen, id = SC.guidFor(this);
|
139
|
+
|
147
140
|
if(firstTime){
|
148
141
|
for(i=0, listLen = this.degradeList.length; i<listLen; i++){
|
149
142
|
switch(this.degradeList[i]){
|
@@ -267,7 +260,11 @@ SC.AudioView = SC.View.extend(
|
|
267
260
|
this.set('ended', NO);
|
268
261
|
this.set('canPlay', NO);
|
269
262
|
this.set('loadedTimeRanges', []);
|
270
|
-
|
263
|
+
|
264
|
+
// Re-render the entire layer.
|
265
|
+
if (this.get('_isRendered')) {
|
266
|
+
this.replaceLayer();
|
267
|
+
}
|
271
268
|
}.observes('value'),
|
272
269
|
|
273
270
|
/**
|
@@ -417,16 +414,14 @@ SC.AudioView = SC.View.extend(
|
|
417
414
|
|
418
415
|
SC.Event.add(audioElem, 'qt_pause', this, function () {
|
419
416
|
SC.run(function() {
|
420
|
-
view.
|
421
|
-
view.propertyDidChange('currentTime');
|
417
|
+
view.set('currentTime', media.GetTime() / media.GetTimeScale());
|
422
418
|
view.set('paused', YES);
|
423
419
|
});
|
424
420
|
});
|
425
421
|
|
426
422
|
SC.Event.add(audioElem, 'qt_play', this, function () {
|
427
423
|
SC.run(function() {
|
428
|
-
view.
|
429
|
-
view.propertyDidChange('currentTime');
|
424
|
+
view.set('currentTime', media.GetTime() / media.GetTimeScale());
|
430
425
|
view.set('paused', NO);
|
431
426
|
});
|
432
427
|
});
|
@@ -442,8 +437,7 @@ SC.AudioView = SC.View.extend(
|
|
442
437
|
*/
|
443
438
|
_qtTimer:function(){
|
444
439
|
if (this.loaded === 'quicktime' && !this.get('paused')) {
|
445
|
-
this.incrementProperty('
|
446
|
-
this.propertyDidChange('currentTime');
|
440
|
+
this.incrementProperty('currentTime');
|
447
441
|
this.invokeLater(this._qtTimer, 1000);
|
448
442
|
}
|
449
443
|
}.observes('paused'),
|