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(scope, testing) {
16  function consumeLengthPercentOrAuto(string) {
17    return scope.consumeLengthOrPercent(string) || scope.consumeToken(/^auto/, string);
18  }
19  function parseBox(string) {
20    var result = scope.consumeList([
21      scope.ignore(scope.consumeToken.bind(null, /^rect/)),
22      scope.ignore(scope.consumeToken.bind(null, /^\(/)),
23      scope.consumeRepeated.bind(null, consumeLengthPercentOrAuto, /^,/),
24      scope.ignore(scope.consumeToken.bind(null, /^\)/)),
25    ], string);
26    if (result && result[0].length == 4) {
27      return result[0];
28    }
29  }
30
31  function mergeComponent(left, right) {
32    if (left == 'auto' || right == 'auto') {
33      return [true, false, function(t) {
34        var result = t ? left : right;
35        if (result == 'auto') {
36          return 'auto';
37        }
38        // FIXME: There's probably a better way to turn a dimension back into a string.
39        var merged = scope.mergeDimensions(result, result);
40        return merged[2](merged[0]);
41      }];
42    }
43    return scope.mergeDimensions(left, right);
44  }
45
46  function wrap(result) {
47    return 'rect(' + result + ')';
48  }
49
50  var mergeBoxes = scope.mergeWrappedNestedRepeated.bind(null, wrap, mergeComponent, ', ');
51
52  scope.parseBox = parseBox;
53  scope.mergeBoxes = mergeBoxes;
54
55  scope.addPropertiesHandler(parseBox, mergeBoxes, ['clip']);
56
57})(webAnimations1, webAnimationsTesting);
58