OLD | NEW |
(Empty) | |
| 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 var propertyHandlers = {}; |
| 18 |
| 19 function toCamelCase(property) { |
| 20 return property.replace(/-(.)/g, function(_, c) { |
| 21 return c.toUpperCase(); |
| 22 }); |
| 23 } |
| 24 |
| 25 function addPropertyHandler(parser, merger, property) { |
| 26 propertyHandlers[property] = propertyHandlers[property] || []; |
| 27 propertyHandlers[property].push([parser, merger]); |
| 28 } |
| 29 function addPropertiesHandler(parser, merger, properties) { |
| 30 for (var i = 0; i < properties.length; i++) { |
| 31 var property = properties[i]; |
| 32 WEB_ANIMATIONS_TESTING && console.assert(property.toLowerCase() === proper
ty); |
| 33 addPropertyHandler(parser, merger, toCamelCase(property)); |
| 34 } |
| 35 } |
| 36 scope.addPropertiesHandler = addPropertiesHandler; |
| 37 |
| 38 var initialValues = { |
| 39 backgroundColor: 'transparent', |
| 40 backgroundPosition: '0% 0%', |
| 41 borderBottomColor: 'currentColor', |
| 42 borderBottomLeftRadius: '0px', |
| 43 borderBottomRightRadius: '0px', |
| 44 borderBottomWidth: '3px', |
| 45 borderLeftColor: 'currentColor', |
| 46 borderLeftWidth: '3px', |
| 47 borderRightColor: 'currentColor', |
| 48 borderRightWidth: '3px', |
| 49 // Spec says this should be 0 but in practise it is 2px. |
| 50 borderSpacing: '2px', |
| 51 borderTopColor: 'currentColor', |
| 52 borderTopLeftRadius: '0px', |
| 53 borderTopRightRadius: '0px', |
| 54 borderTopWidth: '3px', |
| 55 bottom: 'auto', |
| 56 clip: 'rect(0px, 0px, 0px, 0px)', |
| 57 color: 'black', // Depends on user agent. |
| 58 fontSize: '100%', |
| 59 fontWeight: '400', |
| 60 height: 'auto', |
| 61 left: 'auto', |
| 62 letterSpacing: 'normal', |
| 63 lineHeight: '120%', |
| 64 marginBottom: '0px', |
| 65 marginLeft: '0px', |
| 66 marginRight: '0px', |
| 67 marginTop: '0px', |
| 68 maxHeight: 'none', |
| 69 maxWidth: 'none', |
| 70 minHeight: '0px', |
| 71 minWidth: '0px', |
| 72 opacity: '1.0', |
| 73 outlineColor: 'invert', |
| 74 outlineOffset: '0px', |
| 75 outlineWidth: '3px', |
| 76 paddingBottom: '0px', |
| 77 paddingLeft: '0px', |
| 78 paddingRight: '0px', |
| 79 paddingTop: '0px', |
| 80 right: 'auto', |
| 81 strokeDasharray: 'none', |
| 82 strokeDashoffset: '0px', |
| 83 textIndent: '0px', |
| 84 textShadow: '0px 0px 0px transparent', |
| 85 top: 'auto', |
| 86 transform: '', |
| 87 verticalAlign: '0px', |
| 88 visibility: 'visible', |
| 89 width: 'auto', |
| 90 wordSpacing: 'normal', |
| 91 zIndex: 'auto' |
| 92 }; |
| 93 |
| 94 function propertyInterpolation(property, left, right) { |
| 95 var ucProperty = property; |
| 96 if (/-/.test(property) && !shared.isDeprecated('Hyphenated property names',
'2016-03-22', 'Use camelCase instead.', true)) { |
| 97 ucProperty = toCamelCase(property); |
| 98 } |
| 99 if (left == 'initial' || right == 'initial') { |
| 100 if (left == 'initial') |
| 101 left = initialValues[ucProperty]; |
| 102 if (right == 'initial') |
| 103 right = initialValues[ucProperty]; |
| 104 } |
| 105 var handlers = left == right ? [] : propertyHandlers[ucProperty]; |
| 106 for (var i = 0; handlers && i < handlers.length; i++) { |
| 107 var parsedLeft = handlers[i][0](left); |
| 108 var parsedRight = handlers[i][0](right); |
| 109 if (parsedLeft !== undefined && parsedRight !== undefined) { |
| 110 var interpolationArgs = handlers[i][1](parsedLeft, parsedRight); |
| 111 if (interpolationArgs) { |
| 112 var interp = scope.Interpolation.apply(null, interpolationArgs); |
| 113 return function(t) { |
| 114 if (t == 0) return left; |
| 115 if (t == 1) return right; |
| 116 return interp(t); |
| 117 }; |
| 118 } |
| 119 } |
| 120 } |
| 121 return scope.Interpolation(false, true, function(bool) { |
| 122 return bool ? right : left; |
| 123 }); |
| 124 } |
| 125 scope.propertyInterpolation = propertyInterpolation; |
| 126 |
| 127 })(webAnimationsShared, webAnimations1, webAnimationsTesting); |
OLD | NEW |