1// Copyright 2014 Google Inc. All rights reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5//     You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12//     See the License for the specific language governing permissions and
13// limitations under the License.
14
15(function(shared, scope, testing) {
16
17  scope.Animation = function(target, effectInput, timingInput) {
18    var animationNode = scope.AnimationNode(shared.normalizeTimingInput(timingInput));
19    var effect = scope.convertEffectInput(effectInput);
20    var timeFraction;
21    var animation = function() {
22      WEB_ANIMATIONS_TESTING && console.assert(typeof timeFraction !== 'undefined');
23      effect(target, timeFraction);
24    };
25    // Returns whether the animation is in effect or not after the timing update.
26    animation._update = function(localTime) {
27      timeFraction = animationNode(localTime);
28      return timeFraction !== null;
29    };
30    animation._clear = function() {
31      effect(target, null);
32    };
33    animation._hasSameTarget = function(otherTarget) {
34      return target === otherTarget;
35    };
36    animation._isCurrent = animationNode._isCurrent;
37    animation._totalDuration = animationNode._totalDuration;
38    return animation;
39  };
40
41  scope.NullAnimation = function(clear) {
42    var nullAnimation = function() {
43      if (clear) {
44        clear();
45        clear = null;
46      }
47    };
48    nullAnimation._update = function() {
49      return null;
50    };
51    nullAnimation._totalDuration = 0;
52    nullAnimation._isCurrent = function() {
53      return false;
54    };
55    nullAnimation._hasSameTarget = function() {
56      return false;
57    };
58    return nullAnimation;
59  };
60
61  if (WEB_ANIMATIONS_TESTING) {
62    testing.webAnimations1Animation = scope.Animation;
63  }
64
65})(webAnimationsShared, webAnimations1, webAnimationsTesting);
66