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