middleman-wizard-template 1.0.2 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (25) hide show
  1. checksums.yaml +7 -0
  2. data/lib/middleman-wizard-template/template/source/index.html.erb +1 -89
  3. data/lib/middleman-wizard-template/template/source/javascripts/_lib/ww/Matrix.js +449 -0
  4. data/lib/middleman-wizard-template/template/source/javascripts/_lib/ww/PxLoader/PxLoader.js +395 -0
  5. data/lib/middleman-wizard-template/template/source/javascripts/_lib/ww/PxLoader/PxLoaderImage.js +96 -0
  6. data/lib/middleman-wizard-template/template/source/javascripts/_lib/ww/PxLoader/PxLoaderSwiffy.js +68 -0
  7. data/lib/middleman-wizard-template/template/source/javascripts/_lib/ww/RouteRecognizer.js +506 -0
  8. data/lib/middleman-wizard-template/template/source/javascripts/_lib/ww/Slides.js +846 -0
  9. data/lib/middleman-wizard-template/template/source/javascripts/_lib/ww/Transform.js +312 -0
  10. data/lib/middleman-wizard-template/template/source/javascripts/_lib/{Tween.js → ww/Tween.js} +26 -11
  11. data/lib/middleman-wizard-template/template/source/javascripts/_lib/ww/base.js +8 -0
  12. data/lib/middleman-wizard-template/template/source/javascripts/_lib/ww/raf.js +131 -0
  13. data/lib/middleman-wizard-template/template/source/javascripts/_lib/ww/statemachine.js +1024 -0
  14. data/lib/middleman-wizard-template/template/source/javascripts/_lib/ww/useragent.js +1244 -0
  15. data/lib/middleman-wizard-template/template/source/javascripts/_lib/{util.js → ww/util.js} +48 -50
  16. data/lib/middleman-wizard-template/template/source/javascripts/_lib/ww/viewport.js +89 -0
  17. data/lib/middleman-wizard-template/template/source/javascripts/{app.js → site.js} +5 -5
  18. data/lib/middleman-wizard-template/template/source/layouts/layout.erb +85 -0
  19. data/lib/middleman-wizard-template/template/source/stylesheets/default.css +2 -1
  20. data/lib/middleman-wizard-template/template/source/stylesheets/site.css.scss +11 -3
  21. data/lib/middleman-wizard-template/version.rb +1 -1
  22. metadata +23 -23
  23. data/lib/middleman-wizard-template/template/source/javascripts/_lib/Transform.js +0 -401
  24. data/lib/middleman-wizard-template/template/source/javascripts/_lib/raf.js +0 -26
  25. data/lib/middleman-wizard-template/template/source/javascripts/_lib/router.js +0 -679
@@ -0,0 +1,312 @@
1
+ goog.provide('ww.transform');
2
+ goog.require('Sylvester.Matrix');
3
+
4
+ /**
5
+ * CSS Transform support.
6
+ */
7
+
8
+ /**
9
+ * Called immediately
10
+ * @private
11
+ */
12
+ (function detectSupport_() {
13
+ ww.transform.translationUnit = '';
14
+
15
+ var prop = 'transform',
16
+ vendorProp,
17
+ // capitalize first character of the prop to test vendor prefix
18
+ capProp = prop.charAt(0).toUpperCase() + prop.slice(1),
19
+ prefixes = ['Moz', 'Webkit', 'O', 'ms'],
20
+ div = document.createElement('div');
21
+
22
+ if (prop in div.style) {
23
+ // browser supports standard CSS property name
24
+ ww.transform.supportedProp = prop;
25
+ ww.transform.supports3d = div.style.perspective !== undefined;
26
+ } else {
27
+ // otherwise test support for vendor-prefixed property names
28
+ for (var i = 0; i < prefixes.length; i++) {
29
+ vendorProp = prefixes[i] + capProp;
30
+
31
+ if (vendorProp in div.style) {
32
+ ww.transform.supportedProp = vendorProp;
33
+ if (prefixes[i] === 'Moz') {
34
+ ww.transform.translationUnit = 'px';
35
+ }
36
+ if ((prefixes[i] + 'Perspective') in div.style) {
37
+ ww.transform.supports3d = true;
38
+ }
39
+ else {
40
+ ww.transform.supports2d = true;
41
+ }
42
+ break;
43
+ }
44
+ }
45
+ }
46
+
47
+ // if (!ww.transform.supportedProp) {
48
+ // ww.transform.supportsFilter = ('filter' in div.style);
49
+ // ww.transform.supportedProp = 'filter';
50
+ // }
51
+
52
+ // avoid memory leak in IE
53
+ div = null;
54
+ }).call(this);
55
+
56
+ ww.transform.properties = {};
57
+
58
+ ww.transform.properties['rotateX'] = {
59
+ defaultValue: 0,
60
+ 'matrix3d': function(a) {
61
+ return $M([
62
+ [1, 0, 0, 0],
63
+ [0, Math.cos(a), Math.sin(-a), 0],
64
+ [0, Math.sin(a), Math.cos(a), 0],
65
+ [0, 0, 0, 1]
66
+ ]);
67
+ },
68
+ 'matrix2d': function(a) {
69
+ return $M([
70
+ [1, 0, 0],
71
+ [0, 1, 0],
72
+ [0, 0, 1]
73
+ ]);
74
+ }
75
+ };
76
+
77
+ ww.transform.properties['rotateY'] = {
78
+ defaultValue: 0,
79
+ 'matrix3d': function(b) {
80
+ return $M([
81
+ [Math.cos(b), 0, Math.sin(b), 0],
82
+ [0, 1, 0, 0],
83
+ [Math.sin(-b), 0, Math.cos(b), 0],
84
+ [0, 0, 0, 1]
85
+ ]);
86
+ },
87
+ 'matrix2d': function(b) {
88
+ return $M([
89
+ [1, 0, 0],
90
+ [0, 1, 0],
91
+ [0, 0, 1]
92
+ ]);
93
+ }
94
+ };
95
+
96
+ ww.transform.properties['rotateZ'] = {
97
+ defaultValue: 0,
98
+ 'matrix3d': function(c) {
99
+ return $M([
100
+ [Math.cos(c), Math.sin(-c), 0, 0],
101
+ [Math.sin(c), Math.cos(c), 0, 0],
102
+ [0, 0, 1, 0],
103
+ [0, 0, 0, 1]
104
+ ]);
105
+ },
106
+ 'matrix2d': function(c) {
107
+ return $M([
108
+ [Math.cos(c), Math.sin(-c), 0],
109
+ [Math.sin(c), Math.cos(c), 0],
110
+ [0, 0, 1]
111
+ ]);
112
+ }
113
+ };
114
+
115
+ ww.transform.properties['scale'] = {
116
+ defaultValue: 1,
117
+ 'matrix3d': function(s) {
118
+ return $M([
119
+ [s, 0, 0, 0],
120
+ [0, s, 0, 0],
121
+ [0, 0, s, 0],
122
+ [0, 0, 0, 1]
123
+ ]);
124
+ },
125
+ 'matrix2d': function(s) {
126
+ return $M([
127
+ [s, 0, 0],
128
+ [0, s, 0],
129
+ [0, 0, 1]
130
+ ]);
131
+ }
132
+ };
133
+
134
+ ww.transform.properties['translateX'] = {
135
+ defaultValue: 0,
136
+ 'matrix3d': function(tx) {
137
+ return $M([
138
+ [1, 0, 0, 0],
139
+ [0, 1, 0, 0],
140
+ [0, 0, 1, 0],
141
+ [tx, 0, 0, 1]
142
+ ]);
143
+ },
144
+ 'matrix2d': function(tx) {
145
+ return $M([
146
+ [1, 0, 0],
147
+ [0, 1, 0],
148
+ [tx, 0, 1]
149
+ ]);
150
+ }
151
+ };
152
+
153
+ ww.transform.properties['translateY'] = {
154
+ defaultValue: 0,
155
+ 'matrix3d': function(ty) {
156
+ return $M([
157
+ [1, 0, 0, 0],
158
+ [0, 1, 0, 0],
159
+ [0, 0, 1, 0],
160
+ [0, ty, 0, 1]
161
+ ]);
162
+ },
163
+ 'matrix2d': function(ty) {
164
+ return $M([
165
+ [1, 0, 0],
166
+ [0, 1, 0],
167
+ [0, ty, 1]
168
+ ]);
169
+ }
170
+ };
171
+
172
+ ww.transform.properties['translateZ'] = {
173
+ defaultValue: 0,
174
+ 'matrix3d': function(tz) {
175
+ return $M([
176
+ [1, 0, 0, 0],
177
+ [0, 1, 0, 0],
178
+ [0, 0, 1, 0],
179
+ [0, 0, tz, 1]
180
+ ]);
181
+ },
182
+ 'matrix2d': function(tz) {
183
+ return $M([
184
+ [1, 0, 0],
185
+ [0, 1, 0],
186
+ [0, 0, 1]
187
+ ]);
188
+ }
189
+ };
190
+
191
+ /**
192
+ * @private
193
+ */
194
+ function applyMatrix_(elem) {
195
+ if (!ww.transform.supports3d && !ww.transform.supports2d) {
196
+ return;
197
+ }
198
+
199
+ var transforms = getTransformsForElem_(elem);
200
+ var matrixProp = ww.transform.supports3d ? 'matrix3d' : 'matrix2d';
201
+ var tM, s;
202
+
203
+ // Get identity matrices
204
+ if (ww.transform.supports3d) {
205
+ tM = $M([
206
+ [1, 0, 0, 0],
207
+ [0, 1, 0, 0],
208
+ [0, 0, 1, -1],
209
+ [0, 0, 0, 1]
210
+ ]);
211
+ } else {
212
+ tM = $M([
213
+ [1, 0, 0],
214
+ [0, 1, 0],
215
+ [0, 0, 1]
216
+ ]);
217
+ }
218
+
219
+ for (var name in ww.transform.properties) {
220
+ if (ww.transform.properties.hasOwnProperty(name)) {
221
+ var curVal = transforms[name] || ww.transform.properties[name].defaultValue;
222
+ var propVal = ww.transform.properties[name];
223
+ tM = tM.x(propVal[matrixProp](curVal));
224
+ }
225
+ }
226
+
227
+ if (ww.transform.supports3d) {
228
+ s = 'matrix3d(';
229
+ s += tM.e(1, 1).toFixed(10) + ',' + tM.e(1, 2).toFixed(10) + ',';
230
+ s += tM.e(1, 3).toFixed(10) + ',' + tM.e(1, 4).toFixed(10) + ',';
231
+ s += tM.e(2, 1).toFixed(10) + ',' + tM.e(2, 2).toFixed(10) + ',';
232
+ s += tM.e(2, 3).toFixed(10) + ',' + tM.e(2, 4).toFixed(10) + ',';
233
+ s += tM.e(3, 1).toFixed(10) + ',' + tM.e(3, 2).toFixed(10) + ',';
234
+ s += tM.e(3, 3).toFixed(10) + ',' + tM.e(3, 4).toFixed(10) + ',';
235
+ s += tM.e(4, 1).toFixed(10) + ',' + tM.e(4, 2).toFixed(10) + ',';
236
+ s += tM.e(4, 3).toFixed(10) + ',' + tM.e(4, 4).toFixed(10);
237
+ s += ')';
238
+ } else {
239
+ s = 'matrix(';
240
+ s += tM.e(1, 1).toFixed(10) + ',' + tM.e(1, 2).toFixed(10) + ',';
241
+ s += tM.e(2, 1).toFixed(10) + ',' + tM.e(2, 2).toFixed(10) + ',';
242
+ s += tM.e(3, 1).toFixed(10) + ww.transform.translationUnit + ',';
243
+ s += tM.e(3, 2).toFixed(10) + ww.transform.translationUnit;
244
+ s += ')';
245
+ }
246
+
247
+ elem.style[ww.transform.supportedProp] = s;
248
+ }
249
+
250
+ /**
251
+ * @private
252
+ */
253
+ ww.transform.cache_ = {};
254
+
255
+ /**
256
+ * @private
257
+ */
258
+ function getTransformsForElem_(elem) {
259
+ return ww.transform.cache_[elem.id];
260
+ }
261
+
262
+ /**
263
+ * @private
264
+ */
265
+ function setTransformsForElem_(elem, transforms) {
266
+ if (!elem.id || !elem.id.length) {
267
+ throw 'Cannot set current transforms for element without id';
268
+ }
269
+
270
+ ww.transform.cache_[elem.id] = transforms;
271
+ }
272
+
273
+ ww.transform.getValue = function(elem, name) {
274
+ var transforms = getTransformsForElem_(elem);
275
+
276
+ if (transforms === undefined) {
277
+ transforms = {};
278
+ }
279
+
280
+ return transforms[name] || ww.transform.properties[name].defaultValue;
281
+ };
282
+
283
+ ww.transform.setValue = function(elem, name, value) {
284
+ if (!elem.id) {
285
+ elem.id = 'transform_' + (new Date()).getTime() + Math.random();
286
+ }
287
+
288
+ var transforms = getTransformsForElem_(elem);
289
+ if (transforms === undefined) {
290
+ transforms = {};
291
+ }
292
+
293
+ var propInfo = ww.transform.properties[name];
294
+
295
+ if (typeof propInfo.apply === 'function') {
296
+ var curVal = transforms[name] || propInfo.defaultValue;
297
+ transforms[name] = propInfo.apply(curVal, value);
298
+ } else {
299
+ transforms[name] = value;
300
+ }
301
+
302
+ setTransformsForElem_(elem, transforms);
303
+ applyMatrix_(elem);
304
+ };
305
+
306
+ if ('undefined' !== typeof jQuery) {
307
+ jQuery.fn.transform = function(name, value) {
308
+ return $(this).each(function() {
309
+ ww.transform.setValue(this, name, value);
310
+ });
311
+ };
312
+ }
@@ -1,7 +1,7 @@
1
1
  goog.provide('ww.Tween');
2
2
  goog.provide('ww.Tweens');
3
3
  goog.require('goog.array');
4
- // goog.require('ww.util');
4
+ goog.require('ww.util');
5
5
 
6
6
  /**
7
7
  * Raw linear interpolation.
@@ -540,6 +540,11 @@ ww.Tween = function(object) {
540
540
  var _onUpdateCallback = null;
541
541
  var _onCompleteCallback = null;
542
542
 
543
+ // Set all starting values present on the target object
544
+ for (var field in object) {
545
+ _valuesStart[field] = parseFloat(object[field], 10);
546
+ }
547
+
543
548
  this.to = function(properties, duration) {
544
549
  if (duration !== null) {
545
550
  _duration = duration;
@@ -578,8 +583,7 @@ ww.Tween = function(object) {
578
583
  _startTime += _delayTime;
579
584
  for (var property in _valuesEnd) {
580
585
  if (_valuesEnd.hasOwnProperty(property)) {
581
- // This prevents the interpolation of null values
582
- // or of non-existing properties
586
+ // This prevents the interpolation of null values or of non-existing properties
583
587
  if ((property in _object) === false || _object[property] === null) {
584
588
  continue;
585
589
  }
@@ -597,8 +601,7 @@ ww.Tween = function(object) {
597
601
  _valuesStart[property] = _object[property];
598
602
 
599
603
  if ((_valuesStart[property] instanceof Array) == false) {
600
- // Ensures we're using numbers, not strings
601
- _valuesStart[property] *= 1.0;
604
+ _valuesStart[property] *= 1.0; // Ensures we're using numbers, not strings
602
605
  }
603
606
 
604
607
  _valuesStartRepeat[property] = _valuesStart[property];
@@ -617,7 +620,7 @@ ww.Tween = function(object) {
617
620
  return this;
618
621
  };
619
622
 
620
- this.repeat = function(times) {
623
+ this.repeat = function (times) {
621
624
  _repeat = times;
622
625
  return this;
623
626
  };
@@ -627,7 +630,7 @@ ww.Tween = function(object) {
627
630
  return this;
628
631
  };
629
632
 
630
- this.onStart = function(callback) {
633
+ this.onStart = function (callback) {
631
634
  _onStartCallback = callback;
632
635
  return this;
633
636
  };
@@ -660,13 +663,17 @@ ww.Tween = function(object) {
660
663
 
661
664
  var value = _easingFunction(elapsed);
662
665
 
663
- for (var property in _valuesStart) {
666
+ for (var property in _valuesEnd) {
664
667
  if (_valuesStart.hasOwnProperty(property)) {
665
- var start = _valuesStart[property];
668
+ var start = _valuesStart[property] || 0;
666
669
  var end = _valuesEnd[property];
667
670
  if (end instanceof Array) {
668
671
  _object[property] = _interpolationFunction(end, value);
669
672
  } else {
673
+ if (typeof(end) === 'string') {
674
+ end = start + parseFloat(end, 10);
675
+ }
676
+
670
677
  _object[property] = start + (end - start) * value;
671
678
  }
672
679
  }
@@ -677,14 +684,18 @@ ww.Tween = function(object) {
677
684
  }
678
685
 
679
686
  if (elapsed == 1) {
680
- if (_repeat > 0) {
687
+ if (_repeat > 0 ) {
681
688
 
682
- if (isFinite(_repeat)) {
689
+ if (isFinite(_repeat )) {
683
690
  _repeat--;
684
691
  }
685
692
 
686
693
  // reassign starting values, restart by making startTime = now
687
694
  for (var property in _valuesStartRepeat) {
695
+ if (typeof(_valuesEnd[property]) === 'string') {
696
+ _valuesStartRepeat[property] = _valuesStartRepeat[property] + parseFloat(_valuesEnd[property], 10);
697
+ }
698
+
688
699
  _valuesStart[property] = _valuesStartRepeat[property];
689
700
  }
690
701
  _startTime = time + _delayTime;
@@ -695,6 +706,10 @@ ww.Tween = function(object) {
695
706
  _onCompleteCallback.call(_object);
696
707
  }
697
708
 
709
+ for (var i = 0, numChainedTweens = _chainedTweens.length; i < numChainedTweens; i++) {
710
+ _chainedTweens[ i ].start( time );
711
+ }
712
+
698
713
  return false;
699
714
  }
700
715
  }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Namespace for the WW library. Checks to see inst is
3
+ * already defined in the current scope before assigning to prevent
4
+ * clobbering if base.js is loaded more than once.
5
+ *
6
+ * @const
7
+ */
8
+ var ww = ww || {}; // Identifies this file as the Inst base.
@@ -0,0 +1,131 @@
1
+ goog.provide('ww.raf');
2
+
3
+ /**
4
+ * RequestAnimationFrame polyfill.
5
+ */
6
+ (function() {
7
+ var lastTime = 0;
8
+ var vendors = ['ms', 'moz', 'webkit', 'o'];
9
+ for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
10
+ window.requestAnimationFrame = window[vendors[x] +
11
+ 'RequestAnimationFrame'];
12
+ window.cancelAnimationFrame =
13
+ window[vendors[x] + 'CancelAnimationFrame'] ||
14
+ window[vendors[x] + 'CancelRequestAnimationFrame'];
15
+ }
16
+
17
+ if (!window.requestAnimationFrame)
18
+ window.requestAnimationFrame = function(callback, element) {
19
+ var currTime = new Date().getTime();
20
+ var timeToCall = Math.max(0, 16 - (currTime - lastTime));
21
+ var id = window.setTimeout(function() {
22
+ callback(currTime + timeToCall);
23
+ }, timeToCall);
24
+ lastTime = currTime + timeToCall;
25
+ return id;
26
+ };
27
+
28
+ if (!window.cancelAnimationFrame)
29
+ window.cancelAnimationFrame = function(id) {
30
+ clearTimeout(id);
31
+ };
32
+ }());
33
+
34
+ /**
35
+ * List of all subscribers.
36
+ * @private
37
+ * @type {Array}
38
+ */
39
+ ww.raf.subscribers_ = {};
40
+
41
+ /**
42
+ * If rAF is running
43
+ * @private
44
+ * @type {Boolean}
45
+ */
46
+ ww.raf.isRunning_ = false;
47
+
48
+ /**
49
+ * Last frame timestamp.
50
+ * @private
51
+ * @type {Number}
52
+ */
53
+ ww.raf.lastTime_ = 0;
54
+
55
+ /**
56
+ * Current frame for canceling.
57
+ * @private
58
+ * @type {Number}
59
+ */
60
+ ww.raf.currentFrame_ = null;
61
+
62
+ /**
63
+ * On-frame loop.
64
+ * @private
65
+ * @param {Number} t timer.
66
+ */
67
+ ww.raf.onFrame_ = function(t) {
68
+ var loopCurrentTime = t || ww.util.rightNow();
69
+ var loopDelta = loopCurrentTime - ww.raf.lastTime_;
70
+
71
+ for (var subscriberKey in ww.raf.subscribers_) {
72
+ if (ww.raf.subscribers_.hasOwnProperty(subscriberKey)) {
73
+ var loopSubscriber = ww.raf.subscribers_[subscriberKey];
74
+ loopSubscriber[1].call(loopSubscriber[0], loopDelta);
75
+ }
76
+ }
77
+
78
+ ww.raf.lastTime_ = loopCurrentTime;
79
+
80
+ if (ww.raf.isRunning_) {
81
+ ww.raf.currentFrame_ = requestAnimationFrame(ww.raf.onFrame_);
82
+ }
83
+ };
84
+
85
+ /**
86
+ * After adding/removing a callback, see if we need to
87
+ * stop/start the loop.
88
+ * @private
89
+ */
90
+ ww.raf.updateStatus_ = function() {
91
+ var len = 0;
92
+ for (var key in ww.raf.subscribers_) {
93
+ if (ww.raf.subscribers_.hasOwnProperty(key)) {
94
+ len++;
95
+ }
96
+ }
97
+
98
+ if (len > 0) {
99
+ if (!ww.raf.isRunning_) {
100
+ ww.raf.isRunning_ = true;
101
+ ww.raf.lastTime_ = ww.util.rightNow();
102
+ requestAnimationFrame(ww.raf.onFrame_);
103
+ }
104
+ } else {
105
+ ww.raf.isRunning_ = false;
106
+ if (ww.raf.currentFrame_) {
107
+ cancelAnimationFrame(ww.raf.currentFrame_);
108
+ ww.raf.currentFrame_ = null;
109
+ }
110
+ }
111
+ };
112
+
113
+ /**
114
+ * Subscribe a named callback as needing a rAF loop.
115
+ * @param {String} name The name of the callback.
116
+ * @param {Object} obj The instance needing to be called.
117
+ * @param {Function} func The reference to the function to be called.
118
+ */
119
+ ww.raf.subscribe = function(name, obj, func) {
120
+ ww.raf.subscribers_[name] = [obj, func];
121
+ ww.raf.updateStatus_();
122
+ };
123
+
124
+ /**
125
+ * Unsubscribe a named callback from needing a rAF loop.
126
+ * @param {String} name The name of the callback.
127
+ */
128
+ ww.raf.unsubscribe = function(name) {
129
+ delete ww.raf.subscribers_[name];
130
+ ww.raf.updateStatus_();
131
+ };