diff options
Diffstat (limited to 'catapult/third_party/polymer/components/web-animations-js/src/property-interpolation.js')
-rw-r--r-- | catapult/third_party/polymer/components/web-animations-js/src/property-interpolation.js | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/catapult/third_party/polymer/components/web-animations-js/src/property-interpolation.js b/catapult/third_party/polymer/components/web-animations-js/src/property-interpolation.js new file mode 100644 index 00000000..b7e594f3 --- /dev/null +++ b/catapult/third_party/polymer/components/web-animations-js/src/property-interpolation.js @@ -0,0 +1,127 @@ +// Copyright 2014 Google Inc. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +(function(shared, scope, testing) { + + var propertyHandlers = {}; + + function toCamelCase(property) { + return property.replace(/-(.)/g, function(_, c) { + return c.toUpperCase(); + }); + } + + function addPropertyHandler(parser, merger, property) { + propertyHandlers[property] = propertyHandlers[property] || []; + propertyHandlers[property].push([parser, merger]); + } + function addPropertiesHandler(parser, merger, properties) { + for (var i = 0; i < properties.length; i++) { + var property = properties[i]; + WEB_ANIMATIONS_TESTING && console.assert(property.toLowerCase() === property); + addPropertyHandler(parser, merger, toCamelCase(property)); + } + } + scope.addPropertiesHandler = addPropertiesHandler; + + var initialValues = { + backgroundColor: 'transparent', + backgroundPosition: '0% 0%', + borderBottomColor: 'currentColor', + borderBottomLeftRadius: '0px', + borderBottomRightRadius: '0px', + borderBottomWidth: '3px', + borderLeftColor: 'currentColor', + borderLeftWidth: '3px', + borderRightColor: 'currentColor', + borderRightWidth: '3px', + // Spec says this should be 0 but in practise it is 2px. + borderSpacing: '2px', + borderTopColor: 'currentColor', + borderTopLeftRadius: '0px', + borderTopRightRadius: '0px', + borderTopWidth: '3px', + bottom: 'auto', + clip: 'rect(0px, 0px, 0px, 0px)', + color: 'black', // Depends on user agent. + fontSize: '100%', + fontWeight: '400', + height: 'auto', + left: 'auto', + letterSpacing: 'normal', + lineHeight: '120%', + marginBottom: '0px', + marginLeft: '0px', + marginRight: '0px', + marginTop: '0px', + maxHeight: 'none', + maxWidth: 'none', + minHeight: '0px', + minWidth: '0px', + opacity: '1.0', + outlineColor: 'invert', + outlineOffset: '0px', + outlineWidth: '3px', + paddingBottom: '0px', + paddingLeft: '0px', + paddingRight: '0px', + paddingTop: '0px', + right: 'auto', + strokeDasharray: 'none', + strokeDashoffset: '0px', + textIndent: '0px', + textShadow: '0px 0px 0px transparent', + top: 'auto', + transform: '', + verticalAlign: '0px', + visibility: 'visible', + width: 'auto', + wordSpacing: 'normal', + zIndex: 'auto' + }; + + function propertyInterpolation(property, left, right) { + var ucProperty = property; + if (/-/.test(property) && !shared.isDeprecated('Hyphenated property names', '2016-03-22', 'Use camelCase instead.', true)) { + ucProperty = toCamelCase(property); + } + if (left == 'initial' || right == 'initial') { + if (left == 'initial') + left = initialValues[ucProperty]; + if (right == 'initial') + right = initialValues[ucProperty]; + } + var handlers = left == right ? [] : propertyHandlers[ucProperty]; + for (var i = 0; handlers && i < handlers.length; i++) { + var parsedLeft = handlers[i][0](left); + var parsedRight = handlers[i][0](right); + if (parsedLeft !== undefined && parsedRight !== undefined) { + var interpolationArgs = handlers[i][1](parsedLeft, parsedRight); + if (interpolationArgs) { + var interp = scope.Interpolation.apply(null, interpolationArgs); + return function(t) { + if (t == 0) return left; + if (t == 1) return right; + return interp(t); + }; + } + } + } + return scope.Interpolation(false, true, function(bool) { + return bool ? right : left; + }); + } + scope.propertyInterpolation = propertyInterpolation; + +})(webAnimationsShared, webAnimations1, webAnimationsTesting); |