| Index: polymer_0.5.0/bower_components/web-animations-js/src/transform-handler.js
|
| diff --git a/polymer_0.5.0/bower_components/web-animations-js/src/transform-handler.js b/polymer_0.5.0/bower_components/web-animations-js/src/transform-handler.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..c4ba4dbab7fe4b8f4e2a4f5793eb95861308550f
|
| --- /dev/null
|
| +++ b/polymer_0.5.0/bower_components/web-animations-js/src/transform-handler.js
|
| @@ -0,0 +1,262 @@
|
| +// 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(scope, testing) {
|
| +
|
| + // This returns a function for converting transform functions to equivalent
|
| + // primitive functions, which will take an array of values from the
|
| + // derivative type and fill in the blanks (underscores) with them.
|
| + var _ = null;
|
| + function cast(pattern) {
|
| + return function(contents) {
|
| + var i = 0;
|
| + return pattern.map(function(x) { return x === _ ? contents[i++] : x; });
|
| + }
|
| + }
|
| +
|
| + function id(x) { return x; }
|
| +
|
| + var Opx = {px: 0};
|
| + var Odeg = {deg: 0};
|
| +
|
| + // type: [argTypes, convertTo3D, convertTo2D]
|
| + // In the argument types string, lowercase characters represent optional arguments
|
| + var transformFunctions = {
|
| + matrix: ['NNNNNN', [_, _, 0, 0, _, _, 0, 0, 0, 0, 1, 0, _, _, 0, 1], id],
|
| + matrix3d: ['NNNNNNNNNNNNNNNN', id],
|
| + rotate: ['A'],
|
| + rotatex: ['A'],
|
| + rotatey: ['A'],
|
| + rotatez: ['A'],
|
| + rotate3d: ['NNNA'],
|
| + perspective: ['L'],
|
| + scale: ['Nn', cast([_, _, 1]), id],
|
| + scalex: ['N', cast([_, 1, 1]), cast([_, 1])],
|
| + scaley: ['N', cast([1, _, 1]), cast([1, _])],
|
| + scalez: ['N', cast([1, 1, _])],
|
| + scale3d: ['NNN', id],
|
| + skew: ['Aa', null, id],
|
| + skewx: ['A', null, cast([_, Odeg])],
|
| + skewy: ['A', null, cast([Odeg, _])],
|
| + translate: ['Tt', cast([_, _, Opx]), id],
|
| + translatex: ['T', cast([_, Opx, Opx]), cast([_, Opx])],
|
| + translatey: ['T', cast([Opx, _, Opx]), cast([Opx, _])],
|
| + translatez: ['L', cast([Opx, Opx, _])],
|
| + translate3d: ['TTL', id],
|
| + };
|
| +
|
| + function parseTransform(string) {
|
| + string = string.toLowerCase().trim();
|
| + if (string == 'none')
|
| + return [];
|
| + // FIXME: Using a RegExp means calcs won't work here
|
| + var transformRegExp = /\s*(\w+)\(([^)]*)\)/g;
|
| + var result = [];
|
| + var match;
|
| + var prevLastIndex = 0;
|
| + while (match = transformRegExp.exec(string)) {
|
| + if (match.index != prevLastIndex)
|
| + return;
|
| + prevLastIndex = match.index + match[0].length;
|
| + var functionName = match[1];
|
| + var functionData = transformFunctions[functionName];
|
| + if (!functionData)
|
| + return;
|
| + var args = match[2].split(',');
|
| + var argTypes = functionData[0];
|
| + if (argTypes.length < args.length)
|
| + return;
|
| +
|
| + var parsedArgs = [];
|
| + for (var i = 0; i < argTypes.length; i++) {
|
| + var arg = args[i];
|
| + var type = argTypes[i];
|
| + var parsedArg;
|
| + if (!arg)
|
| + parsedArg = ({a: Odeg,
|
| + n: parsedArgs[0],
|
| + t: Opx})[type];
|
| + else
|
| + parsedArg = ({A: function(s) { return s.trim() == '0' ? Odeg : scope.parseAngle(s); },
|
| + N: scope.parseNumber,
|
| + T: scope.parseLengthOrPercent,
|
| + L: scope.parseLength})[type.toUpperCase()](arg);
|
| + if (parsedArg === undefined)
|
| + return;
|
| + parsedArgs.push(parsedArg);
|
| + }
|
| + result.push({t: functionName, d: parsedArgs});
|
| +
|
| + if (transformRegExp.lastIndex == string.length)
|
| + return result;
|
| + }
|
| + };
|
| +
|
| + function numberToLongString(x) {
|
| + return x.toFixed(6).replace('.000000', '');
|
| + }
|
| +
|
| + function mergeMatrices(left, right) {
|
| + if (left.decompositionPair !== right) {
|
| + left.decompositionPair = right;
|
| + var leftArgs = scope.makeMatrixDecomposition(left);
|
| + }
|
| + if (right.decompositionPair !== left) {
|
| + right.decompositionPair = left;
|
| + var rightArgs = scope.makeMatrixDecomposition(right);
|
| + }
|
| + if (leftArgs[0] == null || rightArgs[0] == null)
|
| + return [[false], [true], function(x) { return x ? right[0].d : left[0].d; }];
|
| + leftArgs[0].push(0);
|
| + rightArgs[0].push(1);
|
| + return [
|
| + leftArgs,
|
| + rightArgs,
|
| + function(list) {
|
| + var quat = scope.quat(leftArgs[0][3], rightArgs[0][3], list[5]);
|
| + var mat = scope.composeMatrix(list[0], list[1], list[2], quat, list[4]);
|
| + var stringifiedArgs = mat.map(numberToLongString).join(',');
|
| + return stringifiedArgs;
|
| + }
|
| + ];
|
| + }
|
| +
|
| + function typeTo2D(type) {
|
| + return type.replace(/[xy]/, '');
|
| + }
|
| +
|
| + function typeTo3D(type) {
|
| + return type.replace(/(x|y|z|3d)?$/, '3d');
|
| + }
|
| +
|
| + function mergeTransforms(left, right) {
|
| + var matrixModulesLoaded = scope.makeMatrixDecomposition && true;
|
| +
|
| + var flipResults = false;
|
| + if (!left.length || !right.length) {
|
| + if (!left.length) {
|
| + flipResults = true;
|
| + left = right;
|
| + right = [];
|
| + }
|
| + for (var i = 0; i < left.length; i++) {
|
| + var type = left[i].t;
|
| + var args = left[i].d;
|
| + var defaultValue = type.substr(0, 5) == 'scale' ? 1 : 0;
|
| + right.push({t: type, d: args.map(function(arg) {
|
| + if (typeof arg == 'number')
|
| + return defaultValue;
|
| + var result = {};
|
| + for (var unit in arg)
|
| + result[unit] = defaultValue;
|
| + return result;
|
| + })});
|
| + }
|
| + }
|
| +
|
| + var isMatrixOrPerspective = function(lt, rt) {
|
| + return ((lt == 'perspective') && (rt == 'perspective')) ||
|
| + ((lt == 'matrix' || lt == 'matrix3d') && (rt == 'matrix' || rt == 'matrix3d'));
|
| + };
|
| + var leftResult = [];
|
| + var rightResult = [];
|
| + var types = [];
|
| +
|
| + if (left.length != right.length) {
|
| + if (!matrixModulesLoaded)
|
| + return;
|
| + var merged = mergeMatrices(left, right);
|
| + leftResult = [merged[0]];
|
| + rightResult = [merged[1]];
|
| + types = [['matrix', [merged[2]]]];
|
| + } else {
|
| + for (var i = 0; i < left.length; i++) {
|
| + var leftType = left[i].t;
|
| + var rightType = right[i].t;
|
| + var leftArgs = left[i].d;
|
| + var rightArgs = right[i].d;
|
| +
|
| + var leftFunctionData = transformFunctions[leftType];
|
| + var rightFunctionData = transformFunctions[rightType];
|
| +
|
| + var type;
|
| + if (isMatrixOrPerspective(leftType, rightType)) {
|
| + if (!matrixModulesLoaded)
|
| + return;
|
| + var merged = mergeMatrices([left[i]], [right[i]]);
|
| + leftResult.push(merged[0]);
|
| + rightResult.push(merged[1]);
|
| + types.push(['matrix', [merged[2]]]);
|
| + continue;
|
| + } else if (leftType == rightType) {
|
| + type = leftType;
|
| + } else if (leftFunctionData[2] && rightFunctionData[2] && typeTo2D(leftType) == typeTo2D(rightType)) {
|
| + type = typeTo2D(leftType);
|
| + leftArgs = leftFunctionData[2](leftArgs);
|
| + rightArgs = rightFunctionData[2](rightArgs);
|
| + } else if (leftFunctionData[1] && rightFunctionData[1] && typeTo3D(leftType) == typeTo3D(rightType)) {
|
| + type = typeTo3D(leftType);
|
| + leftArgs = leftFunctionData[1](leftArgs);
|
| + rightArgs = rightFunctionData[1](rightArgs);
|
| + } else {
|
| + if (!matrixModulesLoaded)
|
| + return;
|
| + var merged = mergeMatrices(left, right);
|
| + leftResult = [merged[0]];
|
| + rightResult = [merged[1]];
|
| + types = [['matrix', [merged[2]]]];
|
| + break;
|
| + }
|
| +
|
| + var leftArgsCopy = [];
|
| + var rightArgsCopy = [];
|
| + var stringConversions = [];
|
| + for (var j = 0; j < leftArgs.length; j++) {
|
| + var merge = typeof leftArgs[j] == 'number' ? scope.mergeNumbers : scope.mergeDimensions;
|
| + var merged = merge(leftArgs[j], rightArgs[j]);
|
| + leftArgsCopy[j] = merged[0];
|
| + rightArgsCopy[j] = merged[1];
|
| + stringConversions.push(merged[2]);
|
| + }
|
| + leftResult.push(leftArgsCopy);
|
| + rightResult.push(rightArgsCopy);
|
| + types.push([type, stringConversions]);
|
| + }
|
| + }
|
| +
|
| + if (flipResults) {
|
| + var tmp = leftResult;
|
| + leftResult = rightResult;
|
| + rightResult = tmp;
|
| + }
|
| +
|
| + return [leftResult, rightResult, function(list) {
|
| + return list.map(function(args, i) {
|
| + var stringifiedArgs = args.map(function(arg, j) {
|
| + return types[i][1][j](arg);
|
| + }).join(',');
|
| + if (types[i][0] == 'matrix' && stringifiedArgs.split(',').length == 16)
|
| + types[i][0] = 'matrix3d';
|
| + return types[i][0] + '(' + stringifiedArgs + ')';
|
| +
|
| + }).join(' ');
|
| + }];
|
| + }
|
| +
|
| + scope.addPropertiesHandler(parseTransform, mergeTransforms, ['transform']);
|
| +
|
| + if (WEB_ANIMATIONS_TESTING)
|
| + testing.parseTransform = parseTransform;
|
| +
|
| +})(webAnimationsMinifill, webAnimationsTesting);
|
|
|