123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- 'use strict';
- exports.__esModule = true;
- var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
- var _postcss = require('postcss');
- var _postcssValueParser = require('postcss-value-parser');
- var _postcssValueParser2 = _interopRequireDefault(_postcssValueParser);
- var _has = require('has');
- var _has2 = _interopRequireDefault(_has);
- var _getArguments = require('./getArguments');
- var _getArguments2 = _interopRequireDefault(_getArguments);
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var directions = ['top', 'right', 'bottom', 'left', 'center'];
- var properties = ['background', 'background-position', '-webkit-perspective-origin', 'perspective-origin'];
- var center = '50%';
- var horizontal = {
- right: '100%',
- left: '0'
- };
- var vertical = {
- bottom: '100%',
- top: '0'
- };
- function transform(decl) {
- if (!~properties.indexOf(decl.prop)) {
- return;
- }
- var values = (0, _postcssValueParser2.default)(decl.value);
- var args = (0, _getArguments2.default)(values);
- var relevant = [];
- args.forEach(function (arg) {
- relevant.push({
- start: null,
- end: null
- });
- arg.forEach(function (part, index) {
- var isPosition = ~directions.indexOf(part.value) || (0, _postcssValueParser.unit)(part.value);
- var len = relevant.length - 1;
- if (relevant[len].start === null && isPosition) {
- relevant[len].start = index;
- relevant[len].end = index;
- return;
- }
- if (relevant[len].start !== null) {
- if (part.type === 'space') {
- return;
- } else if (isPosition) {
- relevant[len].end = index;
- return;
- }
- return;
- }
- });
- });
- relevant.forEach(function (range, index) {
- if (range.start === null) {
- return;
- }
- var position = args[index].slice(range.start, range.end + 1);
- if (position.length > 3) {
- return;
- }
- if (position.length === 1 || position[2].value === 'center') {
- if (position[2]) {
- position[2].value = position[1].value = '';
- }
- var value = position[0].value;
- var map = _extends({}, horizontal, {
- center: center
- });
- if ((0, _has2.default)(map, value)) {
- position[0].value = map[value];
- }
- return;
- }
- if (position[0].value === 'center' && ~directions.indexOf(position[2].value)) {
- position[0].value = position[1].value = '';
- var _value = position[2].value;
- if ((0, _has2.default)(horizontal, _value)) {
- position[2].value = horizontal[_value];
- }
- return;
- }
- if ((0, _has2.default)(horizontal, position[0].value) && (0, _has2.default)(vertical, position[2].value)) {
- position[0].value = horizontal[position[0].value];
- position[2].value = vertical[position[2].value];
- return;
- } else if ((0, _has2.default)(vertical, position[0].value) && (0, _has2.default)(horizontal, position[2].value)) {
- var first = position[0].value;
- position[0].value = horizontal[position[2].value];
- position[2].value = vertical[first];
- return;
- }
- });
- decl.value = values.toString();
- }
- exports.default = (0, _postcss.plugin)('cssnano-reduce-positions', function () {
- return function (css) {
- return css.walkDecls(transform);
- };
- });
- module.exports = exports['default'];
|