Home | History | Annotate | Download | only in src
      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