123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- 'use strict';
- exports.__esModule = true;
- var _has = require('has');
- var _has2 = _interopRequireDefault(_has);
- var _postcss = require('postcss');
- var _postcss2 = _interopRequireDefault(_postcss);
- var _postcssValueParser = require('postcss-value-parser');
- var _postcssValueParser2 = _interopRequireDefault(_postcssValueParser);
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- function getValues(list, _ref, index) {
- var value = _ref.value;
- if (index % 2 === 0) {
- return [].concat(list, [parseFloat(value)]);
- }
- return list;
- }
- function matrix3d(node, values) {
- // matrix3d(a, b, 0, 0, c, d, 0, 0, 0, 0, 1, 0, tx, ty, 0, 1) => matrix(a, b, c, d, tx, ty)
- if (values[15] && values[2] === 0 && values[3] === 0 && values[6] === 0 && values[7] === 0 && values[8] === 0 && values[9] === 0 && values[10] === 1 && values[11] === 0 && values[14] === 0 && values[15] === 1) {
- var nodes = node.nodes;
- node.value = 'matrix';
- node.nodes = [nodes[0], // a
- nodes[1], // ,
- nodes[2], // b
- nodes[3], // ,
- nodes[8], // c
- nodes[9], // ,
- nodes[10], // d
- nodes[11], // ,
- nodes[24], // tx
- nodes[25], // ,
- nodes[26]];
- }
- }
- var rotate3dMappings = [['rotateX', [1, 0, 0]], // rotate3d(1, 0, 0, a) => rotateX(a)
- ['rotateY', [0, 1, 0]], // rotate3d(0, 1, 0, a) => rotateY(a)
- ['rotate', [0, 0, 1]]];
- function rotate3dMatch(values) {
- return values.reduce(function (list, arg, i) {
- return list.filter(function (value) {
- return value[1][i] === arg;
- });
- }, rotate3dMappings);
- }
- function rotate3d(node, values) {
- var nodes = node.nodes;
- if (!nodes[6]) {
- return;
- }
- var match = rotate3dMatch(values.slice(0, 3));
- if (match.length) {
- node.value = match[0][0];
- node.nodes = [nodes[6]];
- }
- }
- function rotateZ(node) {
- // rotateZ(rz) => rotate(rz)
- node.value = 'rotate';
- }
- function scale(node, values) {
- var nodes = node.nodes;
- if (!nodes[2]) {
- return;
- }
- var first = values[0];
- var second = values[1];
- // scale(sx, sy) => scale(sx)
- if (first === second) {
- node.nodes = [nodes[0]];
- return;
- }
- // scale(sx, 1) => scaleX(sx)
- if (second === 1) {
- node.value = 'scaleX';
- node.nodes = [nodes[0]];
- return;
- }
- // scale(1, sy) => scaleY(sy)
- if (first === 1) {
- node.value = 'scaleY';
- node.nodes = [nodes[2]];
- return;
- }
- }
- function scale3d(node, values) {
- var nodes = node.nodes;
- if (!nodes[4]) {
- return;
- }
- var first = values[0];
- var second = values[1];
- var third = values[2];
- // scale3d(sx, 1, 1) => scaleX(sx)
- if (second === 1 && third === 1) {
- node.value = 'scaleX';
- node.nodes = [nodes[0]];
- return;
- }
- // scale3d(1, sy, 1) => scaleY(sy)
- if (first === 1 && third === 1) {
- node.value = 'scaleY';
- node.nodes = [nodes[2]];
- return;
- }
- // scale3d(1, 1, sz) => scaleZ(sz)
- if (first === 1 && second === 1) {
- node.value = 'scaleZ';
- node.nodes = [nodes[4]];
- return;
- }
- }
- function translate(node, values) {
- var nodes = node.nodes;
- if (!nodes[2]) {
- return;
- }
- // translate(tx, 0) => translate(tx)
- if (values[1] === 0) {
- node.nodes = [nodes[0]];
- return;
- }
- // translate(0, ty) => translateY(ty)
- if (values[0] === 0) {
- node.value = 'translateY';
- node.nodes = [nodes[2]];
- return;
- }
- }
- function translate3d(node, values) {
- var nodes = node.nodes;
- // translate3d(0, 0, tz) => translateZ(tz)
- if (nodes[4] && values[0] === 0 && values[1] === 0) {
- node.value = 'translateZ';
- node.nodes = [nodes[4]];
- }
- }
- var reducers = {
- matrix3d: matrix3d,
- rotate3d: rotate3d,
- rotateZ: rotateZ,
- scale: scale,
- scale3d: scale3d,
- translate: translate,
- translate3d: translate3d
- };
- function reduce(node) {
- var nodes = node.nodes;
- var type = node.type;
- var value = node.value;
- if (type === 'function' && (0, _has2.default)(reducers, value)) {
- reducers[value](node, nodes.reduce(getValues, []));
- }
- return false;
- }
- exports.default = _postcss2.default.plugin('postcss-reduce-transforms', function () {
- return function (css) {
- css.walkDecls(/transform$/, function (decl) {
- decl.value = (0, _postcssValueParser2.default)(decl.value).walk(reduce).toString();
- });
- };
- });
- module.exports = exports['default'];
|