sproutcore 1.11.0.rc3 → 1.11.0
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.
- 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'),
|