middleman-wizard-template 1.0.2 → 1.0.3
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 +7 -0
- data/lib/middleman-wizard-template/template/source/index.html.erb +1 -89
- data/lib/middleman-wizard-template/template/source/javascripts/_lib/ww/Matrix.js +449 -0
- data/lib/middleman-wizard-template/template/source/javascripts/_lib/ww/PxLoader/PxLoader.js +395 -0
- data/lib/middleman-wizard-template/template/source/javascripts/_lib/ww/PxLoader/PxLoaderImage.js +96 -0
- data/lib/middleman-wizard-template/template/source/javascripts/_lib/ww/PxLoader/PxLoaderSwiffy.js +68 -0
- data/lib/middleman-wizard-template/template/source/javascripts/_lib/ww/RouteRecognizer.js +506 -0
- data/lib/middleman-wizard-template/template/source/javascripts/_lib/ww/Slides.js +846 -0
- data/lib/middleman-wizard-template/template/source/javascripts/_lib/ww/Transform.js +312 -0
- data/lib/middleman-wizard-template/template/source/javascripts/_lib/{Tween.js → ww/Tween.js} +26 -11
- data/lib/middleman-wizard-template/template/source/javascripts/_lib/ww/base.js +8 -0
- data/lib/middleman-wizard-template/template/source/javascripts/_lib/ww/raf.js +131 -0
- data/lib/middleman-wizard-template/template/source/javascripts/_lib/ww/statemachine.js +1024 -0
- data/lib/middleman-wizard-template/template/source/javascripts/_lib/ww/useragent.js +1244 -0
- data/lib/middleman-wizard-template/template/source/javascripts/_lib/{util.js → ww/util.js} +48 -50
- data/lib/middleman-wizard-template/template/source/javascripts/_lib/ww/viewport.js +89 -0
- data/lib/middleman-wizard-template/template/source/javascripts/{app.js → site.js} +5 -5
- data/lib/middleman-wizard-template/template/source/layouts/layout.erb +85 -0
- data/lib/middleman-wizard-template/template/source/stylesheets/default.css +2 -1
- data/lib/middleman-wizard-template/template/source/stylesheets/site.css.scss +11 -3
- data/lib/middleman-wizard-template/version.rb +1 -1
- metadata +23 -23
- data/lib/middleman-wizard-template/template/source/javascripts/_lib/Transform.js +0 -401
- data/lib/middleman-wizard-template/template/source/javascripts/_lib/raf.js +0 -26
- 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
|
+
}
|
data/lib/middleman-wizard-template/template/source/javascripts/_lib/{Tween.js → ww/Tween.js}
RENAMED
@@ -1,7 +1,7 @@
|
|
1
1
|
goog.provide('ww.Tween');
|
2
2
|
goog.provide('ww.Tweens');
|
3
3
|
goog.require('goog.array');
|
4
|
-
|
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
|
-
|
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
|
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,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
|
+
};
|