transit_rails 0.9.11

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 58c0dad40a06604db7fc09b45e13fcd33c9c6d4a
4
+ data.tar.gz: e8f15ae0333f46740e621263622156cc303144c1
5
+ SHA512:
6
+ metadata.gz: d60aaee7dec6135676b4c18903ac3c1a4ff7ae312dd097881cdb8b04d9db8cff9b04b90338840712ff23b9d31ae66ea78d0e4e9481f4d9a1976b7c71b2257409
7
+ data.tar.gz: 7f87e6db2f8480991a25147c5fe3dce6c0b7a43a7689419b68261e7436d1c3707ea2449d8895718de8047f6a2310a5bdd2e5c060b85baa9eced83718defab5c3
data/.gitignore ADDED
@@ -0,0 +1,22 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ *.bundle
19
+ *.so
20
+ *.o
21
+ *.a
22
+ mkmf.log
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in transit_rails.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Guy Israeli
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,33 @@
1
+ # TransitRails
2
+
3
+ Rails gem for asset pipeline of transit.js
4
+
5
+ see more in https://github.com/rstacruz/jquery.transit/
6
+ ## Installation
7
+
8
+ Add this line to your application's Gemfile:
9
+
10
+ gem 'transit_rails'
11
+
12
+ And then execute:
13
+
14
+ $ bundle
15
+
16
+ Or install it yourself as:
17
+
18
+ $ gem install transit_rails
19
+
20
+ ## Usage
21
+
22
+ add to manifest.js
23
+
24
+ //= require jquery.transit.js
25
+
26
+ and see options in https://github.com/rstacruz/jquery.transit/
27
+ ## Contributing
28
+
29
+ 1. Fork it ( https://github.com/[my-github-username]/transit_rails/fork )
30
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
31
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
32
+ 4. Push to the branch (`git push origin my-new-feature`)
33
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
@@ -0,0 +1,745 @@
1
+ /*!
2
+ * jQuery Transit - CSS3 transitions and transformations
3
+ * (c) 2011-2014 Rico Sta. Cruz
4
+ * MIT Licensed.
5
+ *
6
+ * http://ricostacruz.com/jquery.transit
7
+ * http://github.com/rstacruz/jquery.transit
8
+ */
9
+
10
+ /* jshint expr: true */
11
+
12
+ ;(function (root, factory) {
13
+
14
+ if (typeof define === 'function' && define.amd) {
15
+ define(['jquery'], factory);
16
+ } else if (typeof exports === 'object') {
17
+ module.exports = factory(require('jquery'));
18
+ } else {
19
+ factory(root.jQuery);
20
+ }
21
+
22
+ }(this, function($) {
23
+
24
+ $.transit = {
25
+ version: "0.9.11",
26
+
27
+ // Map of $.css() keys to values for 'transitionProperty'.
28
+ // See https://developer.mozilla.org/en/CSS/CSS_transitions#Properties_that_can_be_animated
29
+ propertyMap: {
30
+ marginLeft : 'margin',
31
+ marginRight : 'margin',
32
+ marginBottom : 'margin',
33
+ marginTop : 'margin',
34
+ paddingLeft : 'padding',
35
+ paddingRight : 'padding',
36
+ paddingBottom : 'padding',
37
+ paddingTop : 'padding'
38
+ },
39
+
40
+ // Will simply transition "instantly" if false
41
+ enabled: true,
42
+
43
+ // Set this to false if you don't want to use the transition end property.
44
+ useTransitionEnd: false
45
+ };
46
+
47
+ var div = document.createElement('div');
48
+ var support = {};
49
+
50
+ // Helper function to get the proper vendor property name.
51
+ // (`transition` => `WebkitTransition`)
52
+ function getVendorPropertyName(prop) {
53
+ // Handle unprefixed versions (FF16+, for example)
54
+ if (prop in div.style) return prop;
55
+
56
+ var prefixes = ['Moz', 'Webkit', 'O', 'ms'];
57
+ var prop_ = prop.charAt(0).toUpperCase() + prop.substr(1);
58
+
59
+ for (var i=0; i<prefixes.length; ++i) {
60
+ var vendorProp = prefixes[i] + prop_;
61
+ if (vendorProp in div.style) { return vendorProp; }
62
+ }
63
+ }
64
+
65
+ // Helper function to check if transform3D is supported.
66
+ // Should return true for Webkits and Firefox 10+.
67
+ function checkTransform3dSupport() {
68
+ div.style[support.transform] = '';
69
+ div.style[support.transform] = 'rotateY(90deg)';
70
+ return div.style[support.transform] !== '';
71
+ }
72
+
73
+ var isChrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
74
+
75
+ // Check for the browser's transitions support.
76
+ support.transition = getVendorPropertyName('transition');
77
+ support.transitionDelay = getVendorPropertyName('transitionDelay');
78
+ support.transform = getVendorPropertyName('transform');
79
+ support.transformOrigin = getVendorPropertyName('transformOrigin');
80
+ support.filter = getVendorPropertyName('Filter');
81
+ support.transform3d = checkTransform3dSupport();
82
+
83
+ var eventNames = {
84
+ 'transition': 'transitionend',
85
+ 'MozTransition': 'transitionend',
86
+ 'OTransition': 'oTransitionEnd',
87
+ 'WebkitTransition': 'webkitTransitionEnd',
88
+ 'msTransition': 'MSTransitionEnd'
89
+ };
90
+
91
+ // Detect the 'transitionend' event needed.
92
+ var transitionEnd = support.transitionEnd = eventNames[support.transition] || null;
93
+
94
+ // Populate jQuery's `$.support` with the vendor prefixes we know.
95
+ // As per [jQuery's cssHooks documentation](http://api.jquery.com/jQuery.cssHooks/),
96
+ // we set $.support.transition to a string of the actual property name used.
97
+ for (var key in support) {
98
+ if (support.hasOwnProperty(key) && typeof $.support[key] === 'undefined') {
99
+ $.support[key] = support[key];
100
+ }
101
+ }
102
+
103
+ // Avoid memory leak in IE.
104
+ div = null;
105
+
106
+ // ## $.cssEase
107
+ // List of easing aliases that you can use with `$.fn.transition`.
108
+ $.cssEase = {
109
+ '_default': 'ease',
110
+ 'in': 'ease-in',
111
+ 'out': 'ease-out',
112
+ 'in-out': 'ease-in-out',
113
+ 'snap': 'cubic-bezier(0,1,.5,1)',
114
+ // Penner equations
115
+ 'easeInCubic': 'cubic-bezier(.550,.055,.675,.190)',
116
+ 'easeOutCubic': 'cubic-bezier(.215,.61,.355,1)',
117
+ 'easeInOutCubic': 'cubic-bezier(.645,.045,.355,1)',
118
+ 'easeInCirc': 'cubic-bezier(.6,.04,.98,.335)',
119
+ 'easeOutCirc': 'cubic-bezier(.075,.82,.165,1)',
120
+ 'easeInOutCirc': 'cubic-bezier(.785,.135,.15,.86)',
121
+ 'easeInExpo': 'cubic-bezier(.95,.05,.795,.035)',
122
+ 'easeOutExpo': 'cubic-bezier(.19,1,.22,1)',
123
+ 'easeInOutExpo': 'cubic-bezier(1,0,0,1)',
124
+ 'easeInQuad': 'cubic-bezier(.55,.085,.68,.53)',
125
+ 'easeOutQuad': 'cubic-bezier(.25,.46,.45,.94)',
126
+ 'easeInOutQuad': 'cubic-bezier(.455,.03,.515,.955)',
127
+ 'easeInQuart': 'cubic-bezier(.895,.03,.685,.22)',
128
+ 'easeOutQuart': 'cubic-bezier(.165,.84,.44,1)',
129
+ 'easeInOutQuart': 'cubic-bezier(.77,0,.175,1)',
130
+ 'easeInQuint': 'cubic-bezier(.755,.05,.855,.06)',
131
+ 'easeOutQuint': 'cubic-bezier(.23,1,.32,1)',
132
+ 'easeInOutQuint': 'cubic-bezier(.86,0,.07,1)',
133
+ 'easeInSine': 'cubic-bezier(.47,0,.745,.715)',
134
+ 'easeOutSine': 'cubic-bezier(.39,.575,.565,1)',
135
+ 'easeInOutSine': 'cubic-bezier(.445,.05,.55,.95)',
136
+ 'easeInBack': 'cubic-bezier(.6,-.28,.735,.045)',
137
+ 'easeOutBack': 'cubic-bezier(.175, .885,.32,1.275)',
138
+ 'easeInOutBack': 'cubic-bezier(.68,-.55,.265,1.55)'
139
+ };
140
+
141
+ // ## 'transform' CSS hook
142
+ // Allows you to use the `transform` property in CSS.
143
+ //
144
+ // $("#hello").css({ transform: "rotate(90deg)" });
145
+ //
146
+ // $("#hello").css('transform');
147
+ // //=> { rotate: '90deg' }
148
+ //
149
+ $.cssHooks['transit:transform'] = {
150
+ // The getter returns a `Transform` object.
151
+ get: function(elem) {
152
+ return $(elem).data('transform') || new Transform();
153
+ },
154
+
155
+ // The setter accepts a `Transform` object or a string.
156
+ set: function(elem, v) {
157
+ var value = v;
158
+
159
+ if (!(value instanceof Transform)) {
160
+ value = new Transform(value);
161
+ }
162
+
163
+ // We've seen the 3D version of Scale() not work in Chrome when the
164
+ // element being scaled extends outside of the viewport. Thus, we're
165
+ // forcing Chrome to not use the 3d transforms as well. Not sure if
166
+ // translate is affectede, but not risking it. Detection code from
167
+ // http://davidwalsh.name/detecting-google-chrome-javascript
168
+ if (support.transform === 'WebkitTransform' && !isChrome) {
169
+ elem.style[support.transform] = value.toString(true);
170
+ } else {
171
+ elem.style[support.transform] = value.toString();
172
+ }
173
+
174
+ $(elem).data('transform', value);
175
+ }
176
+ };
177
+
178
+ // Add a CSS hook for `.css({ transform: '...' })`.
179
+ // In jQuery 1.8+, this will intentionally override the default `transform`
180
+ // CSS hook so it'll play well with Transit. (see issue #62)
181
+ $.cssHooks.transform = {
182
+ set: $.cssHooks['transit:transform'].set
183
+ };
184
+
185
+ // ## 'filter' CSS hook
186
+ // Allows you to use the `filter` property in CSS.
187
+ //
188
+ // $("#hello").css({ filter: 'blur(10px)' });
189
+ //
190
+ $.cssHooks.filter = {
191
+ get: function(elem) {
192
+ return elem.style[support.filter];
193
+ },
194
+ set: function(elem, value) {
195
+ elem.style[support.filter] = value;
196
+ }
197
+ };
198
+
199
+ // jQuery 1.8+ supports prefix-free transitions, so these polyfills will not
200
+ // be necessary.
201
+ if ($.fn.jquery < "1.8") {
202
+ // ## 'transformOrigin' CSS hook
203
+ // Allows the use for `transformOrigin` to define where scaling and rotation
204
+ // is pivoted.
205
+ //
206
+ // $("#hello").css({ transformOrigin: '0 0' });
207
+ //
208
+ $.cssHooks.transformOrigin = {
209
+ get: function(elem) {
210
+ return elem.style[support.transformOrigin];
211
+ },
212
+ set: function(elem, value) {
213
+ elem.style[support.transformOrigin] = value;
214
+ }
215
+ };
216
+
217
+ // ## 'transition' CSS hook
218
+ // Allows you to use the `transition` property in CSS.
219
+ //
220
+ // $("#hello").css({ transition: 'all 0 ease 0' });
221
+ //
222
+ $.cssHooks.transition = {
223
+ get: function(elem) {
224
+ return elem.style[support.transition];
225
+ },
226
+ set: function(elem, value) {
227
+ elem.style[support.transition] = value;
228
+ }
229
+ };
230
+ }
231
+
232
+ // ## Other CSS hooks
233
+ // Allows you to rotate, scale and translate.
234
+ registerCssHook('scale');
235
+ registerCssHook('scaleX');
236
+ registerCssHook('scaleY');
237
+ registerCssHook('translate');
238
+ registerCssHook('rotate');
239
+ registerCssHook('rotateX');
240
+ registerCssHook('rotateY');
241
+ registerCssHook('rotate3d');
242
+ registerCssHook('perspective');
243
+ registerCssHook('skewX');
244
+ registerCssHook('skewY');
245
+ registerCssHook('x', true);
246
+ registerCssHook('y', true);
247
+
248
+ // ## Transform class
249
+ // This is the main class of a transformation property that powers
250
+ // `$.fn.css({ transform: '...' })`.
251
+ //
252
+ // This is, in essence, a dictionary object with key/values as `-transform`
253
+ // properties.
254
+ //
255
+ // var t = new Transform("rotate(90) scale(4)");
256
+ //
257
+ // t.rotate //=> "90deg"
258
+ // t.scale //=> "4,4"
259
+ //
260
+ // Setters are accounted for.
261
+ //
262
+ // t.set('rotate', 4)
263
+ // t.rotate //=> "4deg"
264
+ //
265
+ // Convert it to a CSS string using the `toString()` and `toString(true)` (for WebKit)
266
+ // functions.
267
+ //
268
+ // t.toString() //=> "rotate(90deg) scale(4,4)"
269
+ // t.toString(true) //=> "rotate(90deg) scale3d(4,4,0)" (WebKit version)
270
+ //
271
+ function Transform(str) {
272
+ if (typeof str === 'string') { this.parse(str); }
273
+ return this;
274
+ }
275
+
276
+ Transform.prototype = {
277
+ // ### setFromString()
278
+ // Sets a property from a string.
279
+ //
280
+ // t.setFromString('scale', '2,4');
281
+ // // Same as set('scale', '2', '4');
282
+ //
283
+ setFromString: function(prop, val) {
284
+ var args =
285
+ (typeof val === 'string') ? val.split(',') :
286
+ (val.constructor === Array) ? val :
287
+ [ val ];
288
+
289
+ args.unshift(prop);
290
+
291
+ Transform.prototype.set.apply(this, args);
292
+ },
293
+
294
+ // ### set()
295
+ // Sets a property.
296
+ //
297
+ // t.set('scale', 2, 4);
298
+ //
299
+ set: function(prop) {
300
+ var args = Array.prototype.slice.apply(arguments, [1]);
301
+ if (this.setter[prop]) {
302
+ this.setter[prop].apply(this, args);
303
+ } else {
304
+ this[prop] = args.join(',');
305
+ }
306
+ },
307
+
308
+ get: function(prop) {
309
+ if (this.getter[prop]) {
310
+ return this.getter[prop].apply(this);
311
+ } else {
312
+ return this[prop] || 0;
313
+ }
314
+ },
315
+
316
+ setter: {
317
+ // ### rotate
318
+ //
319
+ // .css({ rotate: 30 })
320
+ // .css({ rotate: "30" })
321
+ // .css({ rotate: "30deg" })
322
+ // .css({ rotate: "30deg" })
323
+ //
324
+ rotate: function(theta) {
325
+ this.rotate = unit(theta, 'deg');
326
+ },
327
+
328
+ rotateX: function(theta) {
329
+ this.rotateX = unit(theta, 'deg');
330
+ },
331
+
332
+ rotateY: function(theta) {
333
+ this.rotateY = unit(theta, 'deg');
334
+ },
335
+
336
+ // ### scale
337
+ //
338
+ // .css({ scale: 9 }) //=> "scale(9,9)"
339
+ // .css({ scale: '3,2' }) //=> "scale(3,2)"
340
+ //
341
+ scale: function(x, y) {
342
+ if (y === undefined) { y = x; }
343
+ this.scale = x + "," + y;
344
+ },
345
+
346
+ // ### skewX + skewY
347
+ skewX: function(x) {
348
+ this.skewX = unit(x, 'deg');
349
+ },
350
+
351
+ skewY: function(y) {
352
+ this.skewY = unit(y, 'deg');
353
+ },
354
+
355
+ // ### perspectvie
356
+ perspective: function(dist) {
357
+ this.perspective = unit(dist, 'px');
358
+ },
359
+
360
+ // ### x / y
361
+ // Translations. Notice how this keeps the other value.
362
+ //
363
+ // .css({ x: 4 }) //=> "translate(4px, 0)"
364
+ // .css({ y: 10 }) //=> "translate(4px, 10px)"
365
+ //
366
+ x: function(x) {
367
+ this.set('translate', x, null);
368
+ },
369
+
370
+ y: function(y) {
371
+ this.set('translate', null, y);
372
+ },
373
+
374
+ // ### translate
375
+ // Notice how this keeps the other value.
376
+ //
377
+ // .css({ translate: '2, 5' }) //=> "translate(2px, 5px)"
378
+ //
379
+ translate: function(x, y) {
380
+ if (this._translateX === undefined) { this._translateX = 0; }
381
+ if (this._translateY === undefined) { this._translateY = 0; }
382
+
383
+ if (x !== null && x !== undefined) { this._translateX = unit(x, 'px'); }
384
+ if (y !== null && y !== undefined) { this._translateY = unit(y, 'px'); }
385
+
386
+ this.translate = this._translateX + "," + this._translateY;
387
+ }
388
+ },
389
+
390
+ getter: {
391
+ x: function() {
392
+ return this._translateX || 0;
393
+ },
394
+
395
+ y: function() {
396
+ return this._translateY || 0;
397
+ },
398
+
399
+ scale: function() {
400
+ var s = (this.scale || "1,1").split(',');
401
+ if (s[0]) { s[0] = parseFloat(s[0]); }
402
+ if (s[1]) { s[1] = parseFloat(s[1]); }
403
+
404
+ // "2.5,2.5" => 2.5
405
+ // "2.5,1" => [2.5,1]
406
+ return (s[0] === s[1]) ? s[0] : s;
407
+ },
408
+
409
+ rotate3d: function() {
410
+ var s = (this.rotate3d || "0,0,0,0deg").split(',');
411
+ for (var i=0; i<=3; ++i) {
412
+ if (s[i]) { s[i] = parseFloat(s[i]); }
413
+ }
414
+ if (s[3]) { s[3] = unit(s[3], 'deg'); }
415
+
416
+ return s;
417
+ }
418
+ },
419
+
420
+ // ### parse()
421
+ // Parses from a string. Called on constructor.
422
+ parse: function(str) {
423
+ var self = this;
424
+ str.replace(/([a-zA-Z0-9]+)\((.*?)\)/g, function(x, prop, val) {
425
+ self.setFromString(prop, val);
426
+ });
427
+ },
428
+
429
+ // ### toString()
430
+ // Converts to a `transition` CSS property string. If `use3d` is given,
431
+ // it converts to a `-webkit-transition` CSS property string instead.
432
+ toString: function(use3d) {
433
+ var re = [];
434
+
435
+ for (var i in this) {
436
+ if (this.hasOwnProperty(i)) {
437
+ // Don't use 3D transformations if the browser can't support it.
438
+ if ((!support.transform3d) && (
439
+ (i === 'rotateX') ||
440
+ (i === 'rotateY') ||
441
+ (i === 'perspective') ||
442
+ (i === 'transformOrigin'))) { continue; }
443
+
444
+ if (i[0] !== '_') {
445
+ if (use3d && (i === 'scale')) {
446
+ re.push(i + "3d(" + this[i] + ",1)");
447
+ } else if (use3d && (i === 'translate')) {
448
+ re.push(i + "3d(" + this[i] + ",0)");
449
+ } else {
450
+ re.push(i + "(" + this[i] + ")");
451
+ }
452
+ }
453
+ }
454
+ }
455
+
456
+ return re.join(" ");
457
+ }
458
+ };
459
+
460
+ function callOrQueue(self, queue, fn) {
461
+ if (queue === true) {
462
+ self.queue(fn);
463
+ } else if (queue) {
464
+ self.queue(queue, fn);
465
+ } else {
466
+ self.each(function () {
467
+ fn.call(this);
468
+ });
469
+ }
470
+ }
471
+
472
+ // ### getProperties(dict)
473
+ // Returns properties (for `transition-property`) for dictionary `props`. The
474
+ // value of `props` is what you would expect in `$.css(...)`.
475
+ function getProperties(props) {
476
+ var re = [];
477
+
478
+ $.each(props, function(key) {
479
+ key = $.camelCase(key); // Convert "text-align" => "textAlign"
480
+ key = $.transit.propertyMap[key] || $.cssProps[key] || key;
481
+ key = uncamel(key); // Convert back to dasherized
482
+
483
+ // Get vendor specify propertie
484
+ if (support[key])
485
+ key = uncamel(support[key]);
486
+
487
+ if ($.inArray(key, re) === -1) { re.push(key); }
488
+ });
489
+
490
+ return re;
491
+ }
492
+
493
+ // ### getTransition()
494
+ // Returns the transition string to be used for the `transition` CSS property.
495
+ //
496
+ // Example:
497
+ //
498
+ // getTransition({ opacity: 1, rotate: 30 }, 500, 'ease');
499
+ // //=> 'opacity 500ms ease, -webkit-transform 500ms ease'
500
+ //
501
+ function getTransition(properties, duration, easing, delay) {
502
+ // Get the CSS properties needed.
503
+ var props = getProperties(properties);
504
+
505
+ // Account for aliases (`in` => `ease-in`).
506
+ if ($.cssEase[easing]) { easing = $.cssEase[easing]; }
507
+
508
+ // Build the duration/easing/delay attributes for it.
509
+ var attribs = '' + toMS(duration) + ' ' + easing;
510
+ if (parseInt(delay, 10) > 0) { attribs += ' ' + toMS(delay); }
511
+
512
+ // For more properties, add them this way:
513
+ // "margin 200ms ease, padding 200ms ease, ..."
514
+ var transitions = [];
515
+ $.each(props, function(i, name) {
516
+ transitions.push(name + ' ' + attribs);
517
+ });
518
+
519
+ return transitions.join(', ');
520
+ }
521
+
522
+ // ## $.fn.transition
523
+ // Works like $.fn.animate(), but uses CSS transitions.
524
+ //
525
+ // $("...").transition({ opacity: 0.1, scale: 0.3 });
526
+ //
527
+ // // Specific duration
528
+ // $("...").transition({ opacity: 0.1, scale: 0.3 }, 500);
529
+ //
530
+ // // With duration and easing
531
+ // $("...").transition({ opacity: 0.1, scale: 0.3 }, 500, 'in');
532
+ //
533
+ // // With callback
534
+ // $("...").transition({ opacity: 0.1, scale: 0.3 }, function() { ... });
535
+ //
536
+ // // With everything
537
+ // $("...").transition({ opacity: 0.1, scale: 0.3 }, 500, 'in', function() { ... });
538
+ //
539
+ // // Alternate syntax
540
+ // $("...").transition({
541
+ // opacity: 0.1,
542
+ // duration: 200,
543
+ // delay: 40,
544
+ // easing: 'in',
545
+ // complete: function() { /* ... */ }
546
+ // });
547
+ //
548
+ $.fn.transition = $.fn.transit = function(properties, duration, easing, callback) {
549
+ var self = this;
550
+ var delay = 0;
551
+ var queue = true;
552
+
553
+ var theseProperties = $.extend(true, {}, properties);
554
+
555
+ // Account for `.transition(properties, callback)`.
556
+ if (typeof duration === 'function') {
557
+ callback = duration;
558
+ duration = undefined;
559
+ }
560
+
561
+ // Account for `.transition(properties, options)`.
562
+ if (typeof duration === 'object') {
563
+ easing = duration.easing;
564
+ delay = duration.delay || 0;
565
+ queue = typeof duration.queue === "undefined" ? true : duration.queue;
566
+ callback = duration.complete;
567
+ duration = duration.duration;
568
+ }
569
+
570
+ // Account for `.transition(properties, duration, callback)`.
571
+ if (typeof easing === 'function') {
572
+ callback = easing;
573
+ easing = undefined;
574
+ }
575
+
576
+ // Alternate syntax.
577
+ if (typeof theseProperties.easing !== 'undefined') {
578
+ easing = theseProperties.easing;
579
+ delete theseProperties.easing;
580
+ }
581
+
582
+ if (typeof theseProperties.duration !== 'undefined') {
583
+ duration = theseProperties.duration;
584
+ delete theseProperties.duration;
585
+ }
586
+
587
+ if (typeof theseProperties.complete !== 'undefined') {
588
+ callback = theseProperties.complete;
589
+ delete theseProperties.complete;
590
+ }
591
+
592
+ if (typeof theseProperties.queue !== 'undefined') {
593
+ queue = theseProperties.queue;
594
+ delete theseProperties.queue;
595
+ }
596
+
597
+ if (typeof theseProperties.delay !== 'undefined') {
598
+ delay = theseProperties.delay;
599
+ delete theseProperties.delay;
600
+ }
601
+
602
+ // Set defaults. (`400` duration, `ease` easing)
603
+ if (typeof duration === 'undefined') { duration = $.fx.speeds._default; }
604
+ if (typeof easing === 'undefined') { easing = $.cssEase._default; }
605
+
606
+ duration = toMS(duration);
607
+
608
+ // Build the `transition` property.
609
+ var transitionValue = getTransition(theseProperties, duration, easing, delay);
610
+
611
+ // Compute delay until callback.
612
+ // If this becomes 0, don't bother setting the transition property.
613
+ var work = $.transit.enabled && support.transition;
614
+ var i = work ? (parseInt(duration, 10) + parseInt(delay, 10)) : 0;
615
+
616
+ // If there's nothing to do...
617
+ if (i === 0) {
618
+ var fn = function(next) {
619
+ self.css(theseProperties);
620
+ if (callback) { callback.apply(self); }
621
+ if (next) { next(); }
622
+ };
623
+
624
+ callOrQueue(self, queue, fn);
625
+ return self;
626
+ }
627
+
628
+ // Save the old transitions of each element so we can restore it later.
629
+ var oldTransitions = {};
630
+
631
+ var run = function(nextCall) {
632
+ var bound = false;
633
+
634
+ // Prepare the callback.
635
+ var cb = function() {
636
+ if (bound) { self.unbind(transitionEnd, cb); }
637
+
638
+ if (i > 0) {
639
+ self.each(function() {
640
+ this.style[support.transition] = (oldTransitions[this] || null);
641
+ });
642
+ }
643
+
644
+ if (typeof callback === 'function') { callback.apply(self); }
645
+ if (typeof nextCall === 'function') { nextCall(); }
646
+ };
647
+
648
+ if ((i > 0) && (transitionEnd) && ($.transit.useTransitionEnd)) {
649
+ // Use the 'transitionend' event if it's available.
650
+ bound = true;
651
+ self.bind(transitionEnd, cb);
652
+ } else {
653
+ // Fallback to timers if the 'transitionend' event isn't supported.
654
+ window.setTimeout(cb, i);
655
+ }
656
+
657
+ // Apply transitions.
658
+ self.each(function() {
659
+ if (i > 0) {
660
+ this.style[support.transition] = transitionValue;
661
+ }
662
+ $(this).css(properties);
663
+ });
664
+ };
665
+
666
+ // Defer running. This allows the browser to paint any pending CSS it hasn't
667
+ // painted yet before doing the transitions.
668
+ var deferredRun = function(next) {
669
+ this.offsetWidth; // force a repaint
670
+ run(next);
671
+ };
672
+
673
+ // Use jQuery's fx queue.
674
+ callOrQueue(self, queue, deferredRun);
675
+
676
+ // Chainability.
677
+ return this;
678
+ };
679
+
680
+ function registerCssHook(prop, isPixels) {
681
+ // For certain properties, the 'px' should not be implied.
682
+ if (!isPixels) { $.cssNumber[prop] = true; }
683
+
684
+ $.transit.propertyMap[prop] = support.transform;
685
+
686
+ $.cssHooks[prop] = {
687
+ get: function(elem) {
688
+ var t = $(elem).css('transit:transform');
689
+ return t.get(prop);
690
+ },
691
+
692
+ set: function(elem, value) {
693
+ var t = $(elem).css('transit:transform');
694
+ t.setFromString(prop, value);
695
+
696
+ $(elem).css({ 'transit:transform': t });
697
+ }
698
+ };
699
+
700
+ }
701
+
702
+ // ### uncamel(str)
703
+ // Converts a camelcase string to a dasherized string.
704
+ // (`marginLeft` => `margin-left`)
705
+ function uncamel(str) {
706
+ return str.replace(/([A-Z])/g, function(letter) { return '-' + letter.toLowerCase(); });
707
+ }
708
+
709
+ // ### unit(number, unit)
710
+ // Ensures that number `number` has a unit. If no unit is found, assume the
711
+ // default is `unit`.
712
+ //
713
+ // unit(2, 'px') //=> "2px"
714
+ // unit("30deg", 'rad') //=> "30deg"
715
+ //
716
+ function unit(i, units) {
717
+ if ((typeof i === "string") && (!i.match(/^[\-0-9\.]+$/))) {
718
+ return i;
719
+ } else {
720
+ return "" + i + units;
721
+ }
722
+ }
723
+
724
+ // ### toMS(duration)
725
+ // Converts given `duration` to a millisecond string.
726
+ //
727
+ // toMS('fast') => $.fx.speeds[i] => "200ms"
728
+ // toMS('normal') //=> $.fx.speeds._default => "400ms"
729
+ // toMS(10) //=> '10ms'
730
+ // toMS('100ms') //=> '100ms'
731
+ //
732
+ function toMS(duration) {
733
+ var i = duration;
734
+
735
+ // Allow string durations like 'fast' and 'slow', without overriding numeric values.
736
+ if (typeof i === 'string' && (!i.match(/^[\-0-9\.]+/))) { i = $.fx.speeds[i] || $.fx.speeds._default; }
737
+
738
+ return unit(i, 'ms');
739
+ }
740
+
741
+ // Export some functions for testable-ness.
742
+ $.transit.getTransitionValue = getTransition;
743
+
744
+ return $;
745
+ }));
@@ -0,0 +1,8 @@
1
+ require "transit_rails/version"
2
+
3
+ module TransitRails
4
+ module Rails
5
+ class Engine < ::Rails::Engine
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,3 @@
1
+ module TransitRails
2
+ VERSION = "0.9.11"
3
+ end
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'transit_rails/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "transit_rails"
8
+ spec.version = TransitRails::VERSION
9
+ spec.authors = ["Guy Israeli"]
10
+ spec.email = ["guy.israeli@gmail.com"]
11
+ spec.summary = %q{Rails Gem for transit.js}
12
+ spec.description = %q{An asset-pipeline wrapper for jquery.transit.js}
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.6"
22
+ spec.add_development_dependency "rake"
23
+ spec.add_dependency "railties", ">= 3.1"
24
+ end
metadata ADDED
@@ -0,0 +1,96 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: transit_rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.11
5
+ platform: ruby
6
+ authors:
7
+ - Guy Israeli
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-07-05 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: railties
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '3.1'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '3.1'
55
+ description: An asset-pipeline wrapper for jquery.transit.js
56
+ email:
57
+ - guy.israeli@gmail.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - ".gitignore"
63
+ - Gemfile
64
+ - LICENSE.txt
65
+ - README.md
66
+ - Rakefile
67
+ - app/assets/javascripts/jquery.transit.js
68
+ - lib/transit_rails.rb
69
+ - lib/transit_rails/version.rb
70
+ - transit_rails.gemspec
71
+ homepage: ''
72
+ licenses:
73
+ - MIT
74
+ metadata: {}
75
+ post_install_message:
76
+ rdoc_options: []
77
+ require_paths:
78
+ - lib
79
+ required_ruby_version: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ required_rubygems_version: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ requirements: []
90
+ rubyforge_project:
91
+ rubygems_version: 2.2.2
92
+ signing_key:
93
+ specification_version: 4
94
+ summary: Rails Gem for transit.js
95
+ test_files: []
96
+ has_rdoc: