diff --git a/src/color-handler.js b/src/color-handler.js index 410bd3e..036f298 100644 --- a/src/color-handler.js +++ b/src/color-handler.js @@ -49,7 +49,7 @@ }]; } - scope.addPropertiesHandler(parseColor, mergeColors, ['color', 'backgroundColor']); + scope.addCssValueHandler(parseColor, mergeColors, 'rgb(1, 2, 3)'); if (TESTING) { testing.parseColor = parseColor; diff --git a/src/dimension-handler.js b/src/dimension-handler.js index cea01dc..1e176e9 100644 --- a/src/dimension-handler.js +++ b/src/dimension-handler.js @@ -92,7 +92,6 @@ scope.parseAngle = parseAngle; scope.mergeDimensions = mergeDimensions; - scope.addPropertiesHandler(parseLengthOrPercent, mergeDimensions, - 'left|right|top|bottom|width|height'.split('|')); + scope.addCssValueHandler(parseLengthOrPercent, mergeDimensions, '12em'); })(minifill, testing); diff --git a/src/number-handler.js b/src/number-handler.js index 32431c8..da39913 100644 --- a/src/number-handler.js +++ b/src/number-handler.js @@ -39,7 +39,7 @@ }; } - scope.addPropertiesHandler(parseNumber, clampedMergeNumbers(0, 1), ['opacity']); + scope.addCssValueHandler(parseNumber, clampedMergeNumbers(0, 1), '0.5'); scope.parseNumber = parseNumber; scope.mergeNumbers = mergeNumbers; diff --git a/src/property-interpolation.js b/src/property-interpolation.js index d07f913..49b8797 100644 --- a/src/property-interpolation.js +++ b/src/property-interpolation.js @@ -16,14 +16,34 @@ var propertyHandlers = {}; - function addPropertiesHandler(parser, merger, properties) { - for (var i = 0; i < properties.length; i++) { - var property = properties[i]; - propertyHandlers[property] = propertyHandlers[property] || []; - propertyHandlers[property].push([parser, merger]); + function propertiesAcceptingCssValue(cssValue) { + var properties = []; + var style = document.createElement('div').style; + for (var property in style) { + if (style[property] !== '') + continue; + var rejected = ['webkit', 'Moz', 'ms', 'animation', 'transition'].some(function(disallowed) { + return property.indexOf(disallowed) === 0; + }); + if (rejected) + continue; + // style['content'] = 'css value' throws in IE. + try { + style[property] = cssValue; + if (style[property] === cssValue) + properties.push(property); + } catch (error) {} + style[property] = ''; } + return properties; } - scope.addPropertiesHandler = addPropertiesHandler; + + scope.addCssValueHandler = function(parser, merger, cssValue) { + propertiesAcceptingCssValue(cssValue).forEach(function(property) { + propertyHandlers[property] = propertyHandlers[property] || []; + propertyHandlers[property].push([parser, merger]); + }); + }; function propertyInterpolation(property, left, right) { var handlers = left == right ? [] : propertyHandlers[property]; diff --git a/src/transform-handler.js b/src/transform-handler.js index 1efbdc5..af7afaa 100644 --- a/src/transform-handler.js +++ b/src/transform-handler.js @@ -192,7 +192,7 @@ }]; } - scope.addPropertiesHandler(parseTransform, mergeTransforms, ['transform']); + scope.addCssValueHandler(parseTransform, mergeTransforms, 'rotate(10deg) scale(2)'); if (TESTING) { testing.parseTransform = parseTransform;