rasputin 0.9.1 → 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +19 -0
- data/lib/rasputin/handlebars/handlebars.js +5 -0
- data/lib/rasputin/version.rb +1 -1
- data/vendor/assets/javascripts/TransformJS.js +432 -0
- data/vendor/assets/javascripts/metamorph.js +298 -0
- data/vendor/assets/javascripts/sproutcore-datastore.js +0 -1
- data/vendor/assets/javascripts/sproutcore-i18n.js +0 -1
- data/vendor/assets/javascripts/sproutcore-routing.js +549 -0
- data/vendor/assets/javascripts/sproutcore-statechart.js +1 -0
- data/vendor/assets/javascripts/sproutcore-touch.js +63 -387
- data/vendor/assets/javascripts/sproutcore-utils.js +73 -0
- data/vendor/assets/javascripts/sproutcore.js +243 -110
- data/vendor/assets/stylesheets/normalize.css +10 -18
- metadata +12 -8
@@ -1,328 +1,4 @@
|
|
1
|
-
|
2
|
-
(function(exports) {
|
3
|
-
// Vector and Matrix mathematics modules for JavaScript
|
4
|
-
// Copyright (c) 2007 James Coglan
|
5
|
-
//
|
6
|
-
// Permission is hereby granted, free of charge, to any person obtaining
|
7
|
-
// a copy of this software and associated documentation files (the "Software"),
|
8
|
-
// to deal in the Software without restriction, including without limitation
|
9
|
-
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
10
|
-
// and/or sell copies of the Software, and to permit persons to whom the
|
11
|
-
// Software is furnished to do so, subject to the following conditions:
|
12
|
-
//
|
13
|
-
// The above copyright notice and this permission notice shall be included
|
14
|
-
// in all copies or substantial portions of the Software.
|
15
|
-
//
|
16
|
-
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
17
|
-
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
-
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
19
|
-
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
-
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
21
|
-
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
22
|
-
// DEALINGS IN THE SOFTWARE.
|
23
|
-
|
24
|
-
var Sylvester = {
|
25
|
-
version: '0.1.3',
|
26
|
-
precision: 1e-6
|
27
|
-
};
|
28
|
-
|
29
|
-
function Matrix() {}
|
30
|
-
Matrix.prototype = {
|
31
|
-
|
32
|
-
// Returns element (i,j) of the matrix
|
33
|
-
e: function(i,j) {
|
34
|
-
if (i < 1 || i > this.elements.length || j < 1 || j > this.elements[0].length) { return null; }
|
35
|
-
return this.elements[i-1][j-1];
|
36
|
-
},
|
37
|
-
|
38
|
-
// Maps the matrix to another matrix (of the same dimensions) according to the given function
|
39
|
-
map: function(fn) {
|
40
|
-
var els = [], ni = this.elements.length, ki = ni, i, nj, kj = this.elements[0].length, j;
|
41
|
-
do { i = ki - ni;
|
42
|
-
nj = kj;
|
43
|
-
els[i] = [];
|
44
|
-
do { j = kj - nj;
|
45
|
-
els[i][j] = fn(this.elements[i][j], i + 1, j + 1);
|
46
|
-
} while (--nj);
|
47
|
-
} while (--ni);
|
48
|
-
return Matrix.create(els);
|
49
|
-
},
|
50
|
-
|
51
|
-
// Returns the result of multiplying the matrix from the right by the argument.
|
52
|
-
// If the argument is a scalar then just multiply all the elements. If the argument is
|
53
|
-
// a vector, a vector is returned, which saves you having to remember calling
|
54
|
-
// col(1) on the result.
|
55
|
-
multiply: function(matrix) {
|
56
|
-
if (!matrix.elements) {
|
57
|
-
return this.map(function(x) { return x * matrix; });
|
58
|
-
}
|
59
|
-
var returnVector = matrix.modulus ? true : false;
|
60
|
-
var M = matrix.elements || matrix;
|
61
|
-
if (typeof(M[0][0]) == 'undefined') { M = Matrix.create(M).elements; }
|
62
|
-
if (!this.canMultiplyFromLeft(M)) { return null; }
|
63
|
-
var ni = this.elements.length, ki = ni, i, nj, kj = M[0].length, j;
|
64
|
-
var cols = this.elements[0].length, elements = [], sum, nc, c;
|
65
|
-
do { i = ki - ni;
|
66
|
-
elements[i] = [];
|
67
|
-
nj = kj;
|
68
|
-
do { j = kj - nj;
|
69
|
-
sum = 0;
|
70
|
-
nc = cols;
|
71
|
-
do { c = cols - nc;
|
72
|
-
sum += this.elements[i][c] * M[c][j];
|
73
|
-
} while (--nc);
|
74
|
-
elements[i][j] = sum;
|
75
|
-
} while (--nj);
|
76
|
-
} while (--ni);
|
77
|
-
var M = Matrix.create(elements);
|
78
|
-
return returnVector ? M.col(1) : M;
|
79
|
-
},
|
80
|
-
|
81
|
-
x: function(matrix) { return this.multiply(matrix); },
|
82
|
-
|
83
|
-
// Returns true iff the matrix can multiply the argument from the left
|
84
|
-
canMultiplyFromLeft: function(matrix) {
|
85
|
-
var M = matrix.elements || matrix;
|
86
|
-
if (typeof(M[0][0]) == 'undefined') { M = Matrix.create(M).elements; }
|
87
|
-
// this.columns should equal matrix.rows
|
88
|
-
return (this.elements[0].length == M.length);
|
89
|
-
},
|
90
|
-
|
91
|
-
// Set the matrix's elements from an array. If the argument passed
|
92
|
-
// is a vector, the resulting matrix will be a single column.
|
93
|
-
setElements: function(els) {
|
94
|
-
var i, elements = els.elements || els;
|
95
|
-
if (typeof(elements[0][0]) != 'undefined') {
|
96
|
-
var ni = elements.length, ki = ni, nj, kj, j;
|
97
|
-
this.elements = [];
|
98
|
-
do { i = ki - ni;
|
99
|
-
nj = elements[i].length; kj = nj;
|
100
|
-
this.elements[i] = [];
|
101
|
-
do { j = kj - nj;
|
102
|
-
this.elements[i][j] = elements[i][j];
|
103
|
-
} while (--nj);
|
104
|
-
} while(--ni);
|
105
|
-
return this;
|
106
|
-
}
|
107
|
-
var n = elements.length, k = n;
|
108
|
-
this.elements = [];
|
109
|
-
do { i = k - n;
|
110
|
-
this.elements.push([elements[i]]);
|
111
|
-
} while (--n);
|
112
|
-
return this;
|
113
|
-
}
|
114
|
-
};
|
115
|
-
|
116
|
-
// Constructor function
|
117
|
-
Matrix.create = function(elements) {
|
118
|
-
var M = new Matrix();
|
119
|
-
return M.setElements(elements);
|
120
|
-
};
|
121
|
-
|
122
|
-
// Utility functions
|
123
|
-
$M = Matrix.create;
|
124
|
-
|
125
|
-
})({});
|
126
|
-
|
127
|
-
|
128
|
-
(function(exports) {
|
129
|
-
// ==========================================================================
|
130
|
-
// Project: AcceleratedEffects
|
131
|
-
// Copyright: ©2011 Majd Taby
|
132
|
-
// License: Licensed under MIT license (see license.js)
|
133
|
-
// ==========================================================================
|
134
|
-
|
135
|
-
(function($) {
|
136
|
-
if ( !$.cssHooks ) {
|
137
|
-
throw("jQuery 1.4.3+ is needed for this plugin to work");
|
138
|
-
return;
|
139
|
-
}
|
140
|
-
|
141
|
-
function styleSupport( prop ) {
|
142
|
-
var vendorProp, supportedProp,
|
143
|
-
|
144
|
-
// capitalize first character of the prop to test vendor prefix
|
145
|
-
capProp = prop.charAt(0).toUpperCase() + prop.slice(1),
|
146
|
-
prefixes = [ "Moz", "Webkit", "O", "ms" ],
|
147
|
-
div = document.createElement( "div" );
|
148
|
-
|
149
|
-
if ( prop in div.style ) {
|
150
|
-
|
151
|
-
// browser supports standard CSS property name
|
152
|
-
supportedProp = prop;
|
153
|
-
} else {
|
154
|
-
|
155
|
-
// otherwise test support for vendor-prefixed property names
|
156
|
-
for ( var i = 0; i < prefixes.length; i++ ) {
|
157
|
-
vendorProp = prefixes[i] + capProp;
|
158
|
-
if ( vendorProp in div.style ) {
|
159
|
-
supportedProp = vendorProp;
|
160
|
-
break;
|
161
|
-
}
|
162
|
-
}
|
163
|
-
}
|
164
|
-
|
165
|
-
// avoid memory leak in IE
|
166
|
-
div = null;
|
167
|
-
|
168
|
-
// add property to $.support so it can be accessed elsewhere
|
169
|
-
$.support[ prop ] = supportedProp;
|
170
|
-
|
171
|
-
return supportedProp;
|
172
|
-
}
|
173
|
-
|
174
|
-
var transformProperty = styleSupport('transform');
|
175
|
-
console.log(transformProperty);
|
176
|
-
|
177
|
-
var properties = {
|
178
|
-
rotateX: {
|
179
|
-
defaultValue: 0
|
180
|
-
},
|
181
|
-
rotateY: {
|
182
|
-
defaultValue: 0
|
183
|
-
},
|
184
|
-
rotateZ: {
|
185
|
-
defaultValue: 0
|
186
|
-
},
|
187
|
-
translateX: {
|
188
|
-
defaultValue: 0
|
189
|
-
},
|
190
|
-
translateY: {
|
191
|
-
defaultValue: 0
|
192
|
-
},
|
193
|
-
translateZ: {
|
194
|
-
defaultValue: 0
|
195
|
-
},
|
196
|
-
scale: {
|
197
|
-
defaultValue: 1
|
198
|
-
}
|
199
|
-
};
|
200
|
-
|
201
|
-
var RotationXMatrix = function(a) {
|
202
|
-
return $M([
|
203
|
-
[1,0,0,0],
|
204
|
-
[0,Math.cos(a), Math.sin(-a), 0],
|
205
|
-
[0,Math.sin(a), Math.cos( a), 0],
|
206
|
-
[0,0,0,1]
|
207
|
-
]);
|
208
|
-
};
|
209
|
-
|
210
|
-
var RotationYMatrix = function(b) {
|
211
|
-
return $M([
|
212
|
-
[Math.cos( b), 0, Math.sin(b),0],
|
213
|
-
[0,1,0,0],
|
214
|
-
[Math.sin(-b), 0, Math.cos(b), 0],
|
215
|
-
[0,0,0,1]
|
216
|
-
]);
|
217
|
-
};
|
218
|
-
|
219
|
-
var RotationZMatrix = function(c) {
|
220
|
-
return $M([
|
221
|
-
[Math.cos(c), Math.sin(-c), 0, 0],
|
222
|
-
[Math.sin(c), Math.cos( c), 0, 0],
|
223
|
-
[0,0,1,0],
|
224
|
-
[0,0,0,1]
|
225
|
-
]);
|
226
|
-
};
|
227
|
-
|
228
|
-
var TranslationMatrix = function(tx,ty,tz) {
|
229
|
-
return $M([
|
230
|
-
[1,0,0,0],
|
231
|
-
[0,1,0,0],
|
232
|
-
[0,0,1,0],
|
233
|
-
[tx,ty,tz,1]
|
234
|
-
]);
|
235
|
-
};
|
236
|
-
|
237
|
-
var ScaleMatrix = function(s) {
|
238
|
-
return $M([
|
239
|
-
[s,0,0,0],
|
240
|
-
[0,s,0,0],
|
241
|
-
[0,0,s,0],
|
242
|
-
[0,0,0,1]
|
243
|
-
]);
|
244
|
-
};
|
245
|
-
|
246
|
-
var applyMatrix = function(elem) {
|
247
|
-
var transforms = $(elem).data('transforms');
|
248
|
-
|
249
|
-
var rotX = transforms.rotateX || properties.rotateX.defaultValue,
|
250
|
-
rotY = transforms.rotateY || properties.rotateY.defaultValue,
|
251
|
-
rotZ = transforms.rotateZ || properties.rotateZ.defaultValue,
|
252
|
-
scale = transforms.scale || properties.scale.defaultValue,
|
253
|
-
translateX = transforms.translateX || properties.translateX.defaultValue,
|
254
|
-
translateY = transforms.translateY || properties.translateY.defaultValue,
|
255
|
-
translateZ = transforms.translateZ || properties.translateZ.defaultValue;
|
256
|
-
|
257
|
-
var tM = RotationXMatrix(rotX)
|
258
|
-
.x(RotationYMatrix(rotY))
|
259
|
-
.x(RotationZMatrix(rotZ))
|
260
|
-
.x(ScaleMatrix(scale))
|
261
|
-
.x(TranslationMatrix(translateX,translateY,translateZ));
|
262
|
-
|
263
|
-
s = "matrix3d(";
|
264
|
-
s += tM.e(1,1).toFixed(10) + "," + tM.e(1,2).toFixed(10) + "," + tM.e(1,3).toFixed(10) + "," + tM.e(1,4).toFixed(10) + ",";
|
265
|
-
s += tM.e(2,1).toFixed(10) + "," + tM.e(2,2).toFixed(10) + "," + tM.e(2,3).toFixed(10) + "," + tM.e(2,4).toFixed(10) + ",";
|
266
|
-
s += tM.e(3,1).toFixed(10) + "," + tM.e(3,2).toFixed(10) + "," + tM.e(3,3).toFixed(10) + "," + tM.e(3,4).toFixed(10) + ",";
|
267
|
-
s += tM.e(4,1).toFixed(10) + "," + tM.e(4,2).toFixed(10) + "," + tM.e(4,3).toFixed(10) + "," + tM.e(4,4).toFixed(10);
|
268
|
-
s += ")";
|
269
|
-
|
270
|
-
elem.style[transformProperty] = s;
|
271
|
-
}
|
272
|
-
|
273
|
-
var hookFor = function(name) {
|
274
|
-
|
275
|
-
$.fx.step[name] = function(fx){
|
276
|
-
$.cssHooks[name].set( fx.elem, fx.now + fx.unit );
|
277
|
-
};
|
278
|
-
|
279
|
-
return {
|
280
|
-
get: function( elem, computed, extra ) {
|
281
|
-
var transforms = $(elem).data('transforms');
|
282
|
-
if (transforms === undefined) {
|
283
|
-
transforms = {};
|
284
|
-
$(elem).data('transforms',transforms);
|
285
|
-
}
|
286
|
-
|
287
|
-
return transforms[name] || properties[name].defaultValue;
|
288
|
-
},
|
289
|
-
set: function( elem, value) {
|
290
|
-
var transforms = $(elem).data('transforms');
|
291
|
-
if (transforms === undefined) transforms = {};
|
292
|
-
var propInfo = properties[name];
|
293
|
-
|
294
|
-
if (typeof propInfo.apply === 'function') {
|
295
|
-
transforms[name] = propInfo.apply(transforms[name] || propInfo.defaultValue, value);
|
296
|
-
} else {
|
297
|
-
transforms[name] = value
|
298
|
-
}
|
299
|
-
|
300
|
-
$(elem).data('transforms',transforms);
|
301
|
-
applyMatrix(elem);
|
302
|
-
}
|
303
|
-
}
|
304
|
-
}
|
305
|
-
|
306
|
-
if (transformProperty) {
|
307
|
-
for (var name in properties) {
|
308
|
-
$.cssHooks[name] = hookFor(name);
|
309
|
-
$.cssNumber[name] = true;
|
310
|
-
}
|
311
|
-
}
|
312
|
-
|
313
|
-
})(jQuery);
|
314
|
-
|
315
|
-
})({});
|
316
|
-
|
317
|
-
|
318
|
-
(function(exports) {
|
319
|
-
// ==========================================================================
|
320
|
-
// Project: AcceleratedEffects
|
321
|
-
// Copyright: ©2011 Majd Taby
|
322
|
-
// License: Licensed under MIT license (see license.js)
|
323
|
-
// ==========================================================================
|
324
|
-
|
325
|
-
})({});
|
1
|
+
//=require TransformJS
|
326
2
|
|
327
3
|
(function(exports) {
|
328
4
|
// ==========================================================================
|
@@ -712,8 +388,7 @@ var sigFigs = 100;
|
|
712
388
|
management, and provides some utility methods and some required methods all
|
713
389
|
gesture recognizers are expected to implement.
|
714
390
|
|
715
|
-
Overview
|
716
|
-
=========
|
391
|
+
## Overview
|
717
392
|
|
718
393
|
Gestures coalesce multiple touch events to a single higher-level gesture
|
719
394
|
event. For example, a tap gesture recognizer takes information about a
|
@@ -724,27 +399,26 @@ var sigFigs = 100;
|
|
724
399
|
|
725
400
|
Gesture events follow the format:
|
726
401
|
|
727
|
-
* [GESTURE_NAME]Start - Sent when a gesture has gathered enough information
|
402
|
+
* *[GESTURE_NAME]* Start - Sent when a gesture has gathered enough information
|
728
403
|
to begin tracking the gesture
|
729
404
|
|
730
|
-
* [GESTURE_NAME]Change - Sent when a gesture has already started and has
|
405
|
+
* *[GESTURE_NAME]* Change - Sent when a gesture has already started and has
|
731
406
|
received touchmove events that cause its state to change
|
732
407
|
|
733
|
-
* [GESTURE_NAME]End - Sent when a touchend event is received and the gesture
|
408
|
+
* *[GESTURE_NAME]* End - Sent when a touchend event is received and the gesture
|
734
409
|
recognizer decides that the gesture is finished.
|
735
410
|
|
736
|
-
* [GESTURE_NAME]Cancel - Sent when a touchcancel event is received.
|
411
|
+
* *[GESTURE_NAME]* Cancel - Sent when a touchcancel event is received.
|
737
412
|
|
738
|
-
There are two types of
|
413
|
+
There are two types of gestures: Discrete and Continuous gestures. In contrast
|
739
414
|
to continuous gestures, discrete gestures don't have any change events. Rather,
|
740
|
-
the
|
415
|
+
the end event is the only one that gets sent to the view.
|
741
416
|
|
742
|
-
Usage
|
743
|
-
=======
|
417
|
+
## Usage
|
744
418
|
|
745
|
-
While you wouldn't use SC.Gesture directly, all its subclasses
|
746
|
-
API. For example, to implement pinch on a view, you implement
|
747
|
-
|
419
|
+
While you wouldn't use SC.Gesture directly, all its subclasses implement the
|
420
|
+
same API. For example, to implement pinch on a view, you implement one or more
|
421
|
+
of the pinch events. For example:
|
748
422
|
|
749
423
|
var myView = SC.View.create({
|
750
424
|
pinchStart: function(recognizer) {
|
@@ -753,7 +427,9 @@ var sigFigs = 100;
|
|
753
427
|
|
754
428
|
pinchChange: function(recognizer) {
|
755
429
|
var scale = recognizer.get('scale');
|
756
|
-
this.$().css('
|
430
|
+
this.$().css('scale',function(index, value) {
|
431
|
+
return recognizer.get('scale') * value
|
432
|
+
});
|
757
433
|
},
|
758
434
|
|
759
435
|
pinchEnd: function(recognizer) {
|
@@ -769,8 +445,21 @@ var sigFigs = 100;
|
|
769
445
|
gesture, but pinchChange() will get called repeatedly called every time
|
770
446
|
one of the touches moves.
|
771
447
|
|
772
|
-
|
773
|
-
|
448
|
+
## Customizing Gesture Recognizers
|
449
|
+
|
450
|
+
Some of the gesture recognizers include properties that can be customized by
|
451
|
+
the user for a specific instance of a view. For example, a pan gesture defaults
|
452
|
+
to being a one-finger gesture, but in some scenarios, it must be defined as a
|
453
|
+
two-finger gesture. In that case, you can override defaults by specifying an
|
454
|
+
Options hash.
|
455
|
+
|
456
|
+
var myView = SC.View.create({
|
457
|
+
panOptions: {
|
458
|
+
numberOfRequiredTouches: 2
|
459
|
+
}
|
460
|
+
});
|
461
|
+
|
462
|
+
## Creating Custom Gesture Recognizers
|
774
463
|
|
775
464
|
SC.Gesture also defines an API which its subclasses can implement to build
|
776
465
|
custom gestures. The methods are:
|
@@ -804,26 +493,22 @@ var sigFigs = 100;
|
|
804
493
|
|
805
494
|
In all the callbacks, you can use the `touches` protected property to access the
|
806
495
|
touches hash. The touches hash is keyed on the identifiers of the touches, and the
|
807
|
-
values are the jQuery.Event objects.
|
808
|
-
|
809
|
-
|
810
|
-
are active, this is mostly useful in shouldBegin since every other callback can
|
811
|
-
assume that there are as many active touches as specified in the
|
496
|
+
values are the jQuery.Event objects. You can also access the length property to inspect
|
497
|
+
how many touches are active, this is mostly useful in shouldBegin since every other
|
498
|
+
callback can assume that there are as many active touches as specified in the
|
812
499
|
numberOfRequiredTouches property.
|
813
500
|
|
814
|
-
Discrete vs Continuous Gestures
|
815
|
-
=======
|
501
|
+
## Discrete vs Continuous Gestures
|
816
502
|
|
817
503
|
There are two main classes of gesture recognizers: Discrete and Continuous
|
818
|
-
gestures. Discrete gestures do not get Change events sent,
|
819
|
-
a single, instantaneous event, rather than a continuous
|
820
|
-
implementing your own discrete gesture recognizer, you must
|
821
|
-
isDiscreteGesture property to yes, and SC.Gesture will adapt its behavior.
|
504
|
+
gestures. Discrete gestures do not get Start, Change nor Cancel events sent,
|
505
|
+
since they represent a single, instantaneous event, rather than a continuous
|
506
|
+
motion. If you are implementing your own discrete gesture recognizer, you must
|
507
|
+
set the isDiscreteGesture property to yes, and SC.Gesture will adapt its behavior.
|
822
508
|
|
823
509
|
Discrete gestures use the shouldEnd callback to either accept or decline the gesture
|
824
|
-
event. If it is
|
825
|
-
|
826
|
-
|
510
|
+
event. If it is declined, then the gesture will enter a Cancelled state.
|
511
|
+
|
827
512
|
@extends SC.Object
|
828
513
|
*/
|
829
514
|
|
@@ -924,10 +609,14 @@ SC.Gesture = SC.Object.extend(
|
|
924
609
|
// Utilities
|
925
610
|
|
926
611
|
/** @private */
|
927
|
-
attemptGestureEventDelivery: function(evt, view, eventName) {
|
612
|
+
attemptGestureEventDelivery: function(evt, view, eventName, stopPropagation) {
|
613
|
+
if (stopPropagation === undefined) {
|
614
|
+
var stopPropagation = true;
|
615
|
+
}
|
616
|
+
|
928
617
|
if (this.notifyViewOfGestureEvent(view, eventName) === false) {
|
929
618
|
this.eventWasRejected();
|
930
|
-
} else {
|
619
|
+
} else if(stopPropagation) {
|
931
620
|
evt.preventDefault();
|
932
621
|
}
|
933
622
|
},
|
@@ -1044,7 +733,6 @@ SC.Gesture = SC.Object.extend(
|
|
1044
733
|
if (get(this, 'gestureIsDiscrete') && this.shouldBegin()) {
|
1045
734
|
set(this, 'state', SC.Gesture.BEGAN);
|
1046
735
|
this.didBegin();
|
1047
|
-
this.attemptGestureEventDelivery(evt, view, get(this, 'name')+'Start');
|
1048
736
|
} else {
|
1049
737
|
set(this, 'state', SC.Gesture.POSSIBLE);
|
1050
738
|
this.didBecomePossible();
|
@@ -1084,7 +772,7 @@ SC.Gesture = SC.Object.extend(
|
|
1084
772
|
// updated information in the Start event
|
1085
773
|
this.didChange();
|
1086
774
|
|
1087
|
-
this.attemptGestureEventDelivery(evt, view, get(this, 'name')+'Start');
|
775
|
+
this.attemptGestureEventDelivery(evt, view, get(this, 'name')+'Start',(this.get('isDiscreteGesture'))? true: false);
|
1088
776
|
}
|
1089
777
|
|
1090
778
|
// Discrete gestures don't fire changed events
|
@@ -1116,7 +804,7 @@ SC.Gesture = SC.Object.extend(
|
|
1116
804
|
}
|
1117
805
|
}
|
1118
806
|
else {
|
1119
|
-
if (this.state
|
807
|
+
if ((this.state === SC.Gesture.BEGAN || this.state === SC.Gesture.CHANGED) && this.shouldEnd()) {
|
1120
808
|
set(this, 'state', SC.Gesture.ENDED);
|
1121
809
|
this.didEnd();
|
1122
810
|
|
@@ -1174,9 +862,11 @@ var sigFigs = 100;
|
|
1174
862
|
|
1175
863
|
var myview = SC.View.create({
|
1176
864
|
elementId: 'gestureTest',
|
1177
|
-
|
1178
|
-
|
1179
|
-
this.$().css('
|
865
|
+
|
866
|
+
pinchChange: function(rec) {
|
867
|
+
this.$().css('scale',function(index, value) {
|
868
|
+
return rec.get('scale') * value
|
869
|
+
});
|
1180
870
|
}
|
1181
871
|
})
|
1182
872
|
|
@@ -1312,9 +1002,13 @@ var x = 0;
|
|
1312
1002
|
|
1313
1003
|
var myview = SC.View.create({
|
1314
1004
|
elementId: 'gestureTest',
|
1315
|
-
|
1316
|
-
|
1317
|
-
|
1005
|
+
|
1006
|
+
panChange: function(rec) {
|
1007
|
+
var val = rec.get('translation');
|
1008
|
+
this.$().css({
|
1009
|
+
translateX: '%@=%@'.fmt((val.x < 0)? '-' : '+',Math.abs(val.x)),
|
1010
|
+
translateY: '%@=%@'.fmt((val.y < 0)? '-' : '+',Math.abs(val.y))
|
1011
|
+
});
|
1318
1012
|
}
|
1319
1013
|
})
|
1320
1014
|
|
@@ -1428,13 +1122,10 @@ var set = SC.set;
|
|
1428
1122
|
|
1429
1123
|
Recognizes a multi-touch tap gesture. Tap gestures allow for a certain amount
|
1430
1124
|
of wiggle-room between a start and end of a touch. Taps are discrete gestures
|
1431
|
-
so only
|
1125
|
+
so only tapEnd() will get fired on a view.
|
1432
1126
|
|
1433
1127
|
var myview = SC.View.create({
|
1434
1128
|
elementId: 'gestureTest',
|
1435
|
-
tapStart: function(recognizer) {
|
1436
|
-
$('#gestureTest').css('background','green');
|
1437
|
-
},
|
1438
1129
|
|
1439
1130
|
tapEnd: function(recognizer) {
|
1440
1131
|
$('#gestureTest').css('background','yellow');
|
@@ -1445,8 +1136,8 @@ var set = SC.set;
|
|
1445
1136
|
property, which you can set in the panOptions hash:
|
1446
1137
|
|
1447
1138
|
var myview = SC.View.create({
|
1448
|
-
|
1449
|
-
|
1139
|
+
tapOptions: {
|
1140
|
+
numberOfTaps: 3
|
1450
1141
|
}
|
1451
1142
|
...
|
1452
1143
|
})
|
@@ -1610,20 +1301,5 @@ SC.View.reopen(
|
|
1610
1301
|
|
1611
1302
|
});
|
1612
1303
|
|
1613
|
-
|
1614
1304
|
})({});
|
1615
1305
|
|
1616
|
-
|
1617
|
-
(function(exports) {
|
1618
|
-
|
1619
|
-
|
1620
|
-
|
1621
|
-
|
1622
|
-
})({});
|
1623
|
-
|
1624
|
-
|
1625
|
-
(function(exports) {
|
1626
|
-
|
1627
|
-
|
1628
|
-
|
1629
|
-
})({});
|