Skip to content

Commit e3a1332

Browse files
committed
Merge pull request #430 from alancutter/patchEasing2.1.4
Cherry pick easing TypeError fix onto v2.1.4
2 parents bea58bd + d03b4d2 commit e3a1332

7 files changed

+36
-23
lines changed

History.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
### 2.1.5 - *April 19 2016*
2+
* Cherry picked fix for native easing TypeError exception when using groups.
3+
https://github.com/web-animations/web-animations-next/pull/423
4+
15
### 2.1.4 - *December 1 2015*
26
* Use `Date.now()` instead of `performace.now()` for mobile Safari.
37

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"type": "git",
66
"url": "https://github.com/web-animations/web-animations-js.git"
77
},
8-
"version": "2.1.4",
8+
"version": "2.1.5",
99
"keywords": [
1010
"animations",
1111
"polyfill"

src/keyframe-interpolations.js

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -73,12 +73,13 @@
7373
function makeInterpolations(propertySpecificKeyframeGroups) {
7474
var interpolations = [];
7575
for (var groupName in propertySpecificKeyframeGroups) {
76-
var group = propertySpecificKeyframeGroups[groupName];
77-
for (var i = 0; i < group.length - 1; i++) {
78-
var startTime = group[i].offset;
79-
var endTime = group[i + 1].offset;
80-
var startValue = group[i].value;
81-
var endValue = group[i + 1].value;
76+
var keyframes = propertySpecificKeyframeGroups[groupName];
77+
for (var i = 0; i < keyframes.length - 1; i++) {
78+
var startTime = keyframes[i].offset;
79+
var endTime = keyframes[i + 1].offset;
80+
var startValue = keyframes[i].value;
81+
var endValue = keyframes[i + 1].value;
82+
var easing = keyframes[i].easing;
8283
if (startTime == endTime) {
8384
if (endTime == 1) {
8485
startValue = endValue;
@@ -89,7 +90,7 @@
8990
interpolations.push({
9091
startTime: startTime,
9192
endTime: endTime,
92-
easing: group[i].easing,
93+
easing: shared.toTimingFunction(easing ? easing : 'linear'),
9394
property: groupName,
9495
interpolation: scope.propertyInterpolation(groupName, startValue, endValue)
9596
});

src/normalize-keyframes.js

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -188,17 +188,13 @@
188188
name: 'NotSupportedError',
189189
message: 'add compositing is not supported'
190190
};
191-
} else if (member == 'easing') {
192-
memberValue = shared.toTimingFunction(memberValue);
193191
} else {
194192
memberValue = '' + memberValue;
195193
}
196194
expandShorthandAndAntiAlias(member, memberValue, keyframe);
197195
}
198196
if (keyframe.offset == undefined)
199197
keyframe.offset = null;
200-
if (keyframe.easing == undefined)
201-
keyframe.easing = shared.toTimingFunction('linear');
202198
return keyframe;
203199
});
204200

src/timing-utilities.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@
151151
function normalizeTimingInput(timingInput, forGroup) {
152152
timingInput = shared.numericTimingToObject(timingInput);
153153
var timing = makeTiming(timingInput, forGroup);
154-
timing._easing = toTimingFunction(timing.easing);
154+
timing._easingFunction = toTimingFunction(timing.easing);
155155
return timing;
156156
}
157157

@@ -296,7 +296,7 @@
296296
var currentDirectionIsForwards = timing.direction == 'normal' || timing.direction == (currentIterationIsOdd ? 'alternate-reverse' : 'alternate');
297297
var directedTime = currentDirectionIsForwards ? iterationTime : iterationDuration - iterationTime;
298298
var timeFraction = directedTime / iterationDuration;
299-
return iterationDuration * timing.easing(timeFraction);
299+
return iterationDuration * timing._easingFunction(timeFraction);
300300
}
301301

302302
function calculateTimeFraction(activeDuration, localTime, timing) {

test/js/keyframes.js

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ suite('keyframes', function() {
158158
{left: '0px'}
159159
]);
160160
});
161-
assert.equal('' + normalizedKeyframes[0].easing, 'function (x) { return x; }');
161+
assert.equal(normalizedKeyframes[0].easing, 'easy-peasy');
162162
});
163163

164164
test('Normalize keyframes where some properties are given non-string, non-number values.', function() {
@@ -428,6 +428,18 @@ suite('keyframes', function() {
428428
assert.equal(interpolations[1].property, 'left');
429429
assert.equal(typeof interpolations[1].interpolation, 'function');
430430
});
431+
432+
test('Make interpolations with invalid easing.', function() {
433+
var interpolations;
434+
assert.doesNotThrow(function() {
435+
interpolations = makeInterpolations(makePropertySpecificKeyframeGroups(normalizeKeyframes([
436+
{left: '0px', easing: 'pants and ducks'},
437+
{left: '200px'},
438+
])));
439+
});
440+
assert.equal(interpolations.length, 1);
441+
assert.equal(interpolations[0].easing.toString(), 'function (x) { return x; }');
442+
});
431443
});
432444

433445
suite('keyframe-interpolations - convertEffectInput', function() {

test/js/timing-utilities.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
suite('timing-utilities', function() {
22
test('normalize timing input', function() {
33
assert.equal(normalizeTimingInput(1).duration, 1);
4-
assert.equal(normalizeTimingInput(1).easing(0.2), 0.2);
4+
assert.equal(normalizeTimingInput(1)._easingFunction(0.2), 0.2);
55
assert.equal(normalizeTimingInput(undefined).duration, 0);
66
});
77
test('calculating active duration', function() {
@@ -88,13 +88,13 @@ suite('timing-utilities', function() {
8888
});
8989
test('calculating transformed time', function() {
9090
// calculateTransformedTime(currentIteration, iterationDuration, iterationTime, timingInput);
91-
assert.equal(calculateTransformedTime(4, 1000, 200, {easing: function(x) { return x; }, direction: 'normal'}), 200);
92-
assert.equal(calculateTransformedTime(4, 1000, 200, {easing: function(x) { return x; }, direction: 'reverse'}), 800);
93-
assert.closeTo(calculateTransformedTime(4, 1000, 200, {easing: function(x) { return x * x; }, direction: 'reverse'}), 640, 0.0001);
94-
assert.closeTo(calculateTransformedTime(4, 1000, 600, {easing: function(x) { return x * x; }, direction: 'alternate'}), 360, 0.0001);
95-
assert.closeTo(calculateTransformedTime(3, 1000, 600, {easing: function(x) { return x * x; }, direction: 'alternate'}), 160, 0.0001);
96-
assert.closeTo(calculateTransformedTime(4, 1000, 600, {easing: function(x) { return x * x; }, direction: 'alternate-reverse'}), 160, 0.0001);
97-
assert.closeTo(calculateTransformedTime(3, 1000, 600, {easing: function(x) { return x * x; }, direction: 'alternate-reverse'}), 360, 0.0001);
91+
assert.equal(calculateTransformedTime(4, 1000, 200, {_easingFunction: function(x) { return x; }, direction: 'normal'}), 200);
92+
assert.equal(calculateTransformedTime(4, 1000, 200, {_easingFunction: function(x) { return x; }, direction: 'reverse'}), 800);
93+
assert.closeTo(calculateTransformedTime(4, 1000, 200, {_easingFunction: function(x) { return x * x; }, direction: 'reverse'}), 640, 0.0001);
94+
assert.closeTo(calculateTransformedTime(4, 1000, 600, {_easingFunction: function(x) { return x * x; }, direction: 'alternate'}), 360, 0.0001);
95+
assert.closeTo(calculateTransformedTime(3, 1000, 600, {_easingFunction: function(x) { return x * x; }, direction: 'alternate'}), 160, 0.0001);
96+
assert.closeTo(calculateTransformedTime(4, 1000, 600, {_easingFunction: function(x) { return x * x; }, direction: 'alternate-reverse'}), 160, 0.0001);
97+
assert.closeTo(calculateTransformedTime(3, 1000, 600, {_easingFunction: function(x) { return x * x; }, direction: 'alternate-reverse'}), 360, 0.0001);
9898
});
9999
test('EffectTime', function() {
100100
var timing = normalizeTimingInput({duration: 1000, iterations: 4, iterationStart: 0.5, easing: 'linear', direction: 'alternate', delay: 100, fill: 'forwards'});

0 commit comments

Comments
 (0)