Revert of Roll src/third_party/WebKit e0eac24:489c548 (svn 193311:193320) (patchset...
[chromium-blink-merge.git] / third_party / web-animations-js / sources / src / box-handler.js
blob3399263a486de2d30ded103422283a3ddb25a5a7
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.
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   }
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   }
46   function wrap(result) {
47     return 'rect(' + result + ')';
48   }
50   var mergeBoxes = scope.mergeWrappedNestedRepeated.bind(null, wrap, mergeComponent, ', ');
52   scope.parseBox = parseBox;
53   scope.mergeBoxes = mergeBoxes;
55   scope.addPropertiesHandler(parseBox, mergeBoxes, ['clip']);
57 })(webAnimations1, webAnimationsTesting);