Added logging, changed some directory structure

This commit is contained in:
2018-01-13 21:33:40 -05:00
parent f079a5f067
commit 8e72ffb917
73656 changed files with 35284 additions and 53718 deletions

View File

@@ -0,0 +1,25 @@
# 2.0.2
* Fixes an issue where properties with the `initial` keyword were being merged
(thanks to @holmari).
# 2.0.1
* Fixed a crash when the module was trying to retrieve declarations
from a rule which contained comments in it.
# 2.0.0
* Upgraded to PostCSS 5.
# 1.0.2
* Fixes an issue where properties with the `inherit` keyword were being merged.
# 1.0.1
* Fixes an issue where calc values were being mangled.
# 1.0.0
* Initial release.

View File

@@ -0,0 +1,22 @@
Copyright (c) Ben Briggs <beneb.info@gmail.com> (http://beneb.info)
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.

View File

@@ -0,0 +1,54 @@
# [postcss][postcss]-merge-longhand [![Build Status](https://travis-ci.org/ben-eb/postcss-merge-longhand.svg?branch=master)][ci] [![NPM version](https://badge.fury.io/js/postcss-merge-longhand.svg)][npm] [![Dependency Status](https://gemnasium.com/ben-eb/postcss-merge-longhand.svg)][deps]
> Merge longhand properties into shorthand with PostCSS.
## Install
With [npm](https://npmjs.org/package/postcss-merge-longhand) do:
```
npm install postcss-merge-longhand --save
```
## Example
Merge longhand properties into shorthand; works with `margin`, `padding` &
`border`. For more examples see the [tests](src/__tests__/index.js).
### Input
```css
h1 {
margin-top: 10px;
margin-right: 20px;
margin-bottom: 10px;
margin-left: 20px;
}
```
### Output
```css
h1 {
margin: 10px 20px;
}
```
## Usage
See the [PostCSS documentation](https://github.com/postcss/postcss#usage) for
examples for your environment.
## Contributing
Pull requests are welcome. If you add functionality, then please add unit tests
to cover it.
## License
MIT © [Ben Briggs](http://beneb.info)
[ci]: https://travis-ci.org/ben-eb/postcss-merge-longhand
[deps]: https://gemnasium.com/ben-eb/postcss-merge-longhand
[npm]: http://badge.fury.io/js/postcss-merge-longhand
[postcss]: https://github.com/postcss/postcss

View File

@@ -0,0 +1,98 @@
'use strict';
Object.defineProperty(exports, '__esModule', {
value: true
});
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var _postcss = require('postcss');
var _postcss2 = _interopRequireDefault(_postcss);
var _libCanMerge = require('./lib/canMerge');
var _libCanMerge2 = _interopRequireDefault(_libCanMerge);
var _libGetLastNode = require('./lib/getLastNode');
var _libGetLastNode2 = _interopRequireDefault(_libGetLastNode);
var _libHasAllProps = require('./lib/hasAllProps');
var _libHasAllProps2 = _interopRequireDefault(_libHasAllProps);
var _libIdentical = require('./lib/identical');
var _libIdentical2 = _interopRequireDefault(_libIdentical);
var _libMergeValues = require('./lib/mergeValues');
var _libMergeValues2 = _interopRequireDefault(_libMergeValues);
var _libMinifyTrbl = require('./lib/minifyTrbl');
var _libMinifyTrbl2 = _interopRequireDefault(_libMinifyTrbl);
var _libNumValues = require('./lib/numValues');
var _libNumValues2 = _interopRequireDefault(_libNumValues);
var trbl = ['top', 'right', 'bottom', 'left'];
var trblProps = ['margin', 'padding', 'border-color', 'border-width', 'border-style'];
var trblMap = function trblMap(prop) {
return trbl.map(function (direction) {
return prop + '-' + direction;
});
};
var remove = function remove(node) {
return node.remove();
};
var mergeLonghand = function mergeLonghand(rule, prop) {
var properties = trblMap(prop);
if (_libHasAllProps2['default'].apply(undefined, [rule].concat(properties))) {
var rules = properties.map(function (p) {
return (0, _libGetLastNode2['default'])(rule, p);
});
if (_libCanMerge2['default'].apply(undefined, rules)) {
rules.slice(0, 3).forEach(remove);
rules[3].value = (0, _libMinifyTrbl2['default'])(_libMergeValues2['default'].apply(undefined, rules));
rules[3].prop = prop;
}
}
};
exports['default'] = _postcss2['default'].plugin('postcss-merge-longhand', function () {
return function (css) {
css.walkRules(function (rule) {
rule.nodes.filter(function (node) {
return node.prop && ~trblProps.indexOf(node.prop);
}).forEach(function (node) {
node.value = (0, _libMinifyTrbl2['default'])(node.value);
});
mergeLonghand(rule, 'margin');
mergeLonghand(rule, 'padding');
if ((0, _libHasAllProps2['default'])(rule, 'border-color', 'border-style', 'border-width')) {
var rules = [(0, _libGetLastNode2['default'])(rule, 'border-width'), (0, _libGetLastNode2['default'])(rule, 'border-style'), (0, _libGetLastNode2['default'])(rule, 'border-color')];
if (_libCanMerge2['default'].apply(undefined, rules) && _libNumValues2['default'].apply(undefined, rules) === 3) {
rules.slice(0, 2).forEach(remove);
rules[2].prop = 'border';
rules[2].value = _libMergeValues2['default'].apply(undefined, rules);
}
}
if (_libHasAllProps2['default'].apply(undefined, [rule].concat(trblMap('border')))) {
var rules = [(0, _libGetLastNode2['default'])(rule, 'border-top'), (0, _libGetLastNode2['default'])(rule, 'border-right'), (0, _libGetLastNode2['default'])(rule, 'border-bottom'), (0, _libGetLastNode2['default'])(rule, 'border-left')];
if (_libCanMerge2['default'].apply(undefined, rules) && _libIdentical2['default'].apply(undefined, rules)) {
rules.slice(0, 3).forEach(remove);
rules[3].prop = 'border';
}
}
});
};
});
module.exports = exports['default'];

View File

@@ -0,0 +1,30 @@
'use strict';
Object.defineProperty(exports, '__esModule', {
value: true
});
var important = function important(node) {
return node.important;
};
var unimportant = function unimportant(node) {
return !node.important;
};
var hasInherit = function hasInherit(node) {
return ~node.value.indexOf('inherit');
};
var hasInitial = function hasInitial(node) {
return ~node.value.indexOf('initial');
};
exports['default'] = function () {
for (var _len = arguments.length, props = Array(_len), _key = 0; _key < _len; _key++) {
props[_key] = arguments[_key];
}
if (props.some(hasInherit) || props.some(hasInitial)) {
return false;
}
return props.every(important) || props.every(unimportant);
};
module.exports = exports['default'];

View File

@@ -0,0 +1,34 @@
'use strict';
exports.__esModule = true;
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
exports.default = clone;
function clone(obj, parent) {
if ((typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) !== 'object') {
return obj;
}
var cloned = new obj.constructor();
for (var i in obj) {
if (!{}.hasOwnProperty.call(obj, i)) {
continue;
}
var value = obj[i];
if (i === 'parent' && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object') {
if (parent) {
cloned[i] = parent;
}
} else if (i === 'source') {
cloned[i] = value;
} else if (value instanceof Array) {
cloned[i] = value.map(function (j) {
return clone(j, cloned);
});
} else {
cloned[i] = clone(value, cloned);
}
}
return cloned;
};
module.exports = exports['default'];

View File

@@ -0,0 +1,69 @@
'use strict';
exports.__esModule = true;
exports.default = colorMerge;
var _getDecls = require('./getDecls');
var _getDecls2 = _interopRequireDefault(_getDecls);
var _hasAllProps = require('./hasAllProps');
var _hasAllProps2 = _interopRequireDefault(_hasAllProps);
var _insertCloned = require('./insertCloned');
var _insertCloned2 = _interopRequireDefault(_insertCloned);
var _remove = require('./remove');
var _remove2 = _interopRequireDefault(_remove);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function getAllRules(props, properties) {
return properties.reduce(function (list, property) {
props.filter(function (n) {
return n.prop && ~n.prop.indexOf(property);
}).forEach(function (result, index) {
if (!list[index]) {
list.push([]);
}
list[index].push(result);
});
return list;
}, [[]]);
}
function colorMerge(_ref) {
var rule = _ref.rule;
var properties = _ref.properties;
var prop = _ref.prop;
var value = _ref.value;
var decls = (0, _getDecls2.default)(rule, properties);
var _loop = function _loop() {
var lastNode = decls[decls.length - 1];
var props = decls.filter(function (node) {
return node.important === lastNode.important;
});
if (_hasAllProps2.default.apply(undefined, [props].concat(properties))) {
getAllRules(props, properties).reverse().forEach(function (group) {
(0, _insertCloned2.default)(rule, lastNode, {
prop: prop,
value: value(group)
});
});
props.forEach(_remove2.default);
}
decls = decls.filter(function (node) {
return !~props.indexOf(node);
});
};
while (decls.length) {
_loop();
}
}
module.exports = exports['default'];

View File

@@ -0,0 +1,442 @@
'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 _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
var _postcss = require('postcss');
var _stylehacks = require('stylehacks');
var _objectAssign = require('object-assign');
var _objectAssign2 = _interopRequireDefault(_objectAssign);
var _clone = require('../clone');
var _clone2 = _interopRequireDefault(_clone);
var _genericMerge = require('../genericMerge');
var _genericMerge2 = _interopRequireDefault(_genericMerge);
var _insertCloned = require('../insertCloned');
var _insertCloned2 = _interopRequireDefault(_insertCloned);
var _parseTrbl = require('../parseTrbl');
var _parseTrbl2 = _interopRequireDefault(_parseTrbl);
var _hasAllProps = require('../hasAllProps');
var _hasAllProps2 = _interopRequireDefault(_hasAllProps);
var _getLastNode = require('../getLastNode');
var _getLastNode2 = _interopRequireDefault(_getLastNode);
var _getDecls = require('../getDecls');
var _getDecls2 = _interopRequireDefault(_getDecls);
var _getRules = require('../getRules');
var _getRules2 = _interopRequireDefault(_getRules);
var _getValue = require('../getValue');
var _getValue2 = _interopRequireDefault(_getValue);
var _minifyTrbl = require('../minifyTrbl');
var _minifyTrbl2 = _interopRequireDefault(_minifyTrbl);
var _canMerge = require('../canMerge');
var _canMerge2 = _interopRequireDefault(_canMerge);
var _colorMerge = require('../colorMerge');
var _colorMerge2 = _interopRequireDefault(_colorMerge);
var _remove = require('../remove');
var _remove2 = _interopRequireDefault(_remove);
var _trbl = require('../trbl');
var _trbl2 = _interopRequireDefault(_trbl);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var wsc = ['width', 'style', 'color'];
var defaults = ['medium', 'none', 'currentColor'];
var borderProperty = function borderProperty(property) {
return 'border-' + property;
};
var directions = _trbl2.default.map(borderProperty);
var properties = wsc.map(borderProperty);
function mergeRedundant(_ref) {
var values = _ref.values;
var nextValues = _ref.nextValues;
var decl = _ref.decl;
var nextDecl = _ref.nextDecl;
var index = _ref.index;
var position = _ref.position;
var prop = _ref.prop;
var props = (0, _parseTrbl2.default)(values[position]);
props[index] = nextValues[position];
values.splice(position, 1);
var borderValue = values.join(' ');
var propertyValue = (0, _minifyTrbl2.default)(props);
var origLength = (decl.value + nextDecl.prop + nextDecl.value).length;
var newLength = borderValue.length + 12 + propertyValue.length;
if (newLength < origLength) {
decl.value = borderValue;
nextDecl.prop = prop;
nextDecl.value = propertyValue;
}
}
function isCloseEnough(mapped) {
return mapped[0] === mapped[1] && mapped[1] === mapped[2] || mapped[1] === mapped[2] && mapped[2] === mapped[3] || mapped[2] === mapped[3] && mapped[3] === mapped[0] || mapped[3] === mapped[0] && mapped[0] === mapped[1];
}
function getDistinctShorthands(mapped) {
return mapped.reduce(function (a, b) {
a = Array.isArray(a) ? a : [a];
if (!~a.indexOf(b)) {
a.push(b);
}
return a;
});
}
function explode(rule) {
if (rule.nodes.some(_stylehacks.detect)) {
return false;
}
rule.walkDecls(/^border/, function (decl) {
// Don't explode inherit values as they cannot be merged together
if (decl.value === 'inherit') {
return;
}
var prop = decl.prop;
// border -> border-trbl
if (prop === 'border') {
directions.forEach(function (direction) {
(0, _insertCloned2.default)(rule, decl, { prop: direction });
});
return decl.remove();
}
// border-trbl -> border-trbl-wsc
if (directions.some(function (direction) {
return prop === direction;
})) {
var _ret = function () {
var values = _postcss.list.space(decl.value);
wsc.forEach(function (d, i) {
(0, _insertCloned2.default)(rule, decl, {
prop: prop + '-' + d,
value: values[i] || defaults[i]
});
});
return {
v: decl.remove()
};
}();
if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v;
}
// border-wsc -> border-trbl-wsc
wsc.some(function (style) {
if (prop !== 'border-' + style) {
return false;
}
(0, _parseTrbl2.default)(decl.value).forEach(function (value, i) {
(0, _insertCloned2.default)(rule, decl, {
prop: 'border-' + _trbl2.default[i] + '-' + style,
value: value
});
});
return decl.remove();
});
});
}
var borderProperties = _trbl2.default.reduce(function (props, direction) {
return [].concat(props, wsc.map(function (style) {
return 'border-' + direction + '-' + style;
}));
}, []);
function merge(rule) {
// Lift all inherit values from the rule, so that they don't
// interfere with the merging logic.
var inheritValues = (0, _getDecls2.default)(rule, borderProperties).reduce(function (values, decl) {
if (decl.value === 'inherit') {
decl.remove();
return [].concat(values, [decl]);
}
return values;
}, []);
// border-trbl-wsc -> border-trbl
_trbl2.default.forEach(function (direction) {
var prop = borderProperty(direction);
(0, _genericMerge2.default)({
rule: rule,
prop: prop,
properties: wsc.map(function (style) {
return prop + '-' + style;
}),
value: function value(rules) {
return rules.map(_getValue2.default).join(' ');
}
});
});
// border-trbl-wsc -> border-wsc
wsc.forEach(function (style) {
var prop = borderProperty(style);
if (style === 'color') {
return (0, _colorMerge2.default)({
rule: rule,
prop: prop,
properties: _trbl2.default.map(function (direction) {
return 'border-' + direction + '-' + style;
}),
value: function value(rules) {
return (0, _minifyTrbl2.default)(rules.map(_getValue2.default).join(' '));
}
});
}
return (0, _genericMerge2.default)({
rule: rule,
prop: prop,
properties: _trbl2.default.map(function (direction) {
return 'border-' + direction + '-' + style;
}),
value: function value(rules) {
return (0, _minifyTrbl2.default)(rules.map(_getValue2.default).join(' '));
},
sanitize: false
});
});
// border-trbl -> border-wsc
var decls = (0, _getDecls2.default)(rule, directions);
var _loop = function _loop() {
var lastNode = decls[decls.length - 1];
var props = decls.filter(function (node) {
return node.important === lastNode.important;
});
var rules = (0, _getRules2.default)(props, directions);
if (_hasAllProps2.default.apply(undefined, [props].concat(directions))) {
wsc.forEach(function (d, i) {
(0, _insertCloned2.default)(rule, lastNode, {
prop: borderProperty(d),
value: (0, _minifyTrbl2.default)(rules.map(function (node) {
return _postcss.list.space(node.value)[i];
}))
});
});
props.forEach(_remove2.default);
}
decls = decls.filter(function (node) {
return !~rules.indexOf(node);
});
};
while (decls.length) {
_loop();
}
// border-wsc -> border
// border-wsc -> border + border-color
// border-wsc -> border + border-dir
decls = (0, _getDecls2.default)(rule, properties);
var _loop2 = function _loop2() {
var lastNode = decls[decls.length - 1];
var props = decls.filter(function (node) {
return node.important === lastNode.important;
});
if (_hasAllProps2.default.apply(undefined, [props].concat(properties))) {
(function () {
var rules = properties.map(function (prop) {
return (0, _getLastNode2.default)(props, prop);
});
var width = rules[0];
var style = rules[1];
var color = rules[2];
var values = rules.map(function (node) {
return (0, _parseTrbl2.default)(node.value);
});
var mapped = [0, 1, 2, 3].map(function (i) {
return [values[0][i], values[1][i], values[2][i]].join(' ');
});
var reduced = getDistinctShorthands(mapped);
if (isCloseEnough(mapped) && _canMerge2.default.apply(undefined, rules)) {
var first = mapped.indexOf(reduced[0]) !== mapped.lastIndexOf(reduced[0]);
var border = (0, _insertCloned2.default)(rule, lastNode, {
prop: 'border',
value: first ? reduced[0] : reduced[1]
});
if (reduced[1]) {
var value = first ? reduced[1] : reduced[0];
var prop = 'border-' + _trbl2.default[mapped.indexOf(value)];
rule.insertAfter(border, (0, _objectAssign2.default)((0, _clone2.default)(lastNode), {
prop: prop,
value: value
}));
}
props.forEach(_remove2.default);
} else if (reduced.length === 1) {
rule.insertBefore(color, (0, _objectAssign2.default)((0, _clone2.default)(lastNode), {
prop: 'border',
value: [width, style].map(_getValue2.default).join(' ')
}));
props.filter(function (node) {
return node.prop !== properties[2];
}).forEach(_remove2.default);
}
})();
}
decls = decls.filter(function (node) {
return !~props.indexOf(node);
});
};
while (decls.length) {
_loop2();
}
// optimize border-trbl
decls = (0, _getDecls2.default)(rule, directions);
var _loop3 = function _loop3() {
var lastNode = decls[decls.length - 1];
wsc.forEach(function (d, i) {
var names = directions.filter(function (name) {
return name !== lastNode.prop;
}).map(function (name) {
return name + '-' + d;
});
var props = rule.nodes.filter(function (node) {
return node.prop && ~names.indexOf(node.prop) && node.important === lastNode.important;
});
if (_hasAllProps2.default.apply(undefined, [props].concat(names))) {
var values = directions.map(function (prop) {
return (0, _getLastNode2.default)(props, prop + '-' + d);
}).map(function (node) {
return node ? node.value : null;
});
var filteredValues = values.filter(Boolean);
var lastNodeValue = _postcss.list.space(lastNode.value)[i];
values[directions.indexOf(lastNode.prop)] = lastNodeValue;
var value = (0, _minifyTrbl2.default)(values.join(' '));
if (filteredValues[0] === filteredValues[1] && filteredValues[1] === filteredValues[2]) {
value = filteredValues[0];
}
var refNode = props[props.length - 1];
if (value === lastNodeValue) {
refNode = lastNode;
var valueArray = _postcss.list.space(lastNode.value);
valueArray.splice(i, 1);
lastNode.value = valueArray.join(' ');
}
(0, _insertCloned2.default)(rule, refNode, {
prop: 'border-' + d,
value: value
});
props.forEach(_remove2.default);
}
});
decls = decls.filter(function (node) {
return node !== lastNode;
});
};
while (decls.length) {
_loop3();
}
rule.walkDecls('border', function (decl) {
var nextDecl = decl.next();
if (!nextDecl || nextDecl.type !== 'decl') {
return;
}
var index = directions.indexOf(nextDecl.prop);
if (!~index) {
return;
}
var values = _postcss.list.space(decl.value);
var nextValues = _postcss.list.space(nextDecl.value);
var config = {
values: values,
nextValues: nextValues,
decl: decl,
nextDecl: nextDecl,
index: index
};
if (values[0] === nextValues[0] && values[2] === nextValues[2]) {
return mergeRedundant(_extends({}, config, {
position: 1,
prop: 'border-style'
}));
}
if (values[1] === nextValues[1] && values[2] === nextValues[2]) {
return mergeRedundant(_extends({}, config, {
position: 0,
prop: 'border-width'
}));
}
if (values[0] === nextValues[0] && values[1] === nextValues[1] && values[2] && nextValues[2]) {
return mergeRedundant(_extends({}, config, {
position: 2,
prop: 'border-color'
}));
}
});
// clean-up values
rule.walkDecls(/^border($|-(top|right|bottom|left))/, function (decl) {
var value = [].concat(_postcss.list.space(decl.value), ['']).reduceRight(function (prev, cur, i) {
if (prev === '' && cur === defaults[i]) {
return prev;
}
return cur + ' ' + prev;
}).trim() || defaults[0];
decl.value = (0, _minifyTrbl2.default)(value);
});
// Restore inherited values
inheritValues.forEach(function (decl) {
return rule.append(decl);
});
}
exports.default = {
explode: explode,
merge: merge
};
module.exports = exports['default'];

View File

@@ -0,0 +1,67 @@
'use strict';
exports.__esModule = true;
var _stylehacks = require('stylehacks');
var _genericMerge = require('../genericMerge');
var _minifyTrbl = require('../minifyTrbl');
var _minifyTrbl2 = _interopRequireDefault(_minifyTrbl);
var _parseTrbl = require('../parseTrbl');
var _parseTrbl2 = _interopRequireDefault(_parseTrbl);
var _insertCloned = require('../insertCloned');
var _insertCloned2 = _interopRequireDefault(_insertCloned);
var _mergeValues = require('../mergeValues');
var _mergeValues2 = _interopRequireDefault(_mergeValues);
var _trbl = require('../trbl');
var _trbl2 = _interopRequireDefault(_trbl);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
exports.default = function (prop) {
var properties = _trbl2.default.map(function (direction) {
return prop + '-' + direction;
});
var processor = {
explode: function explode(rule) {
if (rule.nodes.some(_stylehacks.detect)) {
return false;
}
rule.walkDecls(prop, function (decl) {
if (~decl.value.indexOf('inherit')) {
return;
}
var values = (0, _parseTrbl2.default)(decl.value);
_trbl2.default.forEach(function (direction, index) {
(0, _insertCloned2.default)(rule, decl, {
prop: properties[index],
value: values[index]
});
});
decl.remove();
});
},
merge: (0, _genericMerge.genericMergeFactory)({
prop: prop,
properties: properties,
value: function value(rules) {
return (0, _minifyTrbl2.default)(_mergeValues2.default.apply(undefined, rules));
}
})
};
return processor;
};
module.exports = exports['default'];

View File

@@ -0,0 +1,85 @@
'use strict';
exports.__esModule = true;
var _postcss = require('postcss');
var _postcssValueParser = require('postcss-value-parser');
var _stylehacks = require('stylehacks');
var _genericMerge = require('../genericMerge');
var _getValue = require('../getValue');
var _getValue2 = _interopRequireDefault(_getValue);
var _insertCloned = require('../insertCloned');
var _insertCloned2 = _interopRequireDefault(_insertCloned);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var properties = ['column-width', 'column-count'];
var auto = 'auto';
/**
* Normalize a columns shorthand definition. Both of the longhand
* properties' initial values are 'auto', and as per the spec,
* omitted values are set to their initial values. Thus, we can
* remove any 'auto' definition when there are two values.
*
* Specification link: https://www.w3.org/TR/css3-multicol/
*/
function normalize(values) {
if (values[0] === auto) {
return values[1];
}
if (values[1] === auto) {
return values[0];
}
return values.join(' ');
}
function explode(rule) {
if (rule.nodes.some(_stylehacks.detect)) {
return false;
}
rule.walkDecls('columns', function (decl) {
var values = _postcss.list.space(decl.value);
if (values.length === 1) {
values.push(auto);
}
values.forEach(function (value, i) {
var prop = properties[1];
if (value === auto) {
prop = properties[i];
} else if ((0, _postcssValueParser.unit)(value).unit) {
prop = properties[0];
}
(0, _insertCloned2.default)(rule, decl, {
prop: prop,
value: value
});
});
decl.remove();
});
}
var merge = (0, _genericMerge.genericMergeFactory)({
prop: 'columns',
properties: properties,
value: function value(rules) {
return normalize(rules.map(_getValue2.default));
}
});
exports.default = {
explode: explode,
merge: merge
};
module.exports = exports['default'];

View File

@@ -0,0 +1,12 @@
'use strict';
exports.__esModule = true;
var _boxBase = require('./boxBase');
var _boxBase2 = _interopRequireDefault(_boxBase);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
exports.default = (0, _boxBase2.default)('margin');
module.exports = exports['default'];

View File

@@ -0,0 +1,12 @@
'use strict';
exports.__esModule = true;
var _boxBase = require('./boxBase');
var _boxBase2 = _interopRequireDefault(_boxBase);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
exports.default = (0, _boxBase2.default)('padding');
module.exports = exports['default'];

View File

@@ -0,0 +1,79 @@
'use strict';
exports.__esModule = true;
exports.default = genericMerge;
exports.genericMergeFactory = genericMergeFactory;
var _canMerge = require('./canMerge');
var _canMerge2 = _interopRequireDefault(_canMerge);
var _getDecls = require('./getDecls');
var _getDecls2 = _interopRequireDefault(_getDecls);
var _getRules = require('./getRules');
var _getRules2 = _interopRequireDefault(_getRules);
var _hasAllProps = require('./hasAllProps');
var _hasAllProps2 = _interopRequireDefault(_hasAllProps);
var _insertCloned = require('./insertCloned');
var _insertCloned2 = _interopRequireDefault(_insertCloned);
var _remove = require('./remove');
var _remove2 = _interopRequireDefault(_remove);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function genericMerge(_ref) {
var rule = _ref.rule;
var properties = _ref.properties;
var prop = _ref.prop;
var value = _ref.value;
var _ref$sanitize = _ref.sanitize;
var sanitize = _ref$sanitize === undefined ? true : _ref$sanitize;
var decls = (0, _getDecls2.default)(rule, properties);
var _loop = function _loop() {
var lastNode = decls[decls.length - 1];
var props = decls.filter(function (node) {
return node.important === lastNode.important;
});
var mergeable = sanitize ? _canMerge2.default.apply(undefined, props) : true;
if (_hasAllProps2.default.apply(undefined, [props].concat(properties)) && mergeable) {
(0, _insertCloned2.default)(rule, lastNode, {
prop: prop,
value: value((0, _getRules2.default)(props, properties))
});
props.forEach(_remove2.default);
}
decls = decls.filter(function (node) {
return !~props.indexOf(node);
});
};
while (decls.length) {
_loop();
}
}
function genericMergeFactory(_ref2) {
var properties = _ref2.properties;
var prop = _ref2.prop;
var value = _ref2.value;
return function merge(rule) {
return genericMerge({
rule: rule,
properties: properties,
prop: prop,
value: value
});
};
}

View File

@@ -0,0 +1,11 @@
"use strict";
exports.__esModule = true;
exports.default = getDecls;
function getDecls(rule, properties) {
return rule.nodes.filter(function (_ref) {
var prop = _ref.prop;
return prop && ~properties.indexOf(prop);
});
}
module.exports = exports["default"];

View File

@@ -0,0 +1,13 @@
'use strict';
Object.defineProperty(exports, '__esModule', {
value: true
});
exports['default'] = function (rule, prop) {
return rule.nodes.filter(function (n) {
return n.prop && ~n.prop.indexOf(prop);
}).pop();
};
module.exports = exports['default'];

View File

@@ -0,0 +1,17 @@
'use strict';
exports.__esModule = true;
exports.default = getRules;
var _getLastNode = require('./getLastNode');
var _getLastNode2 = _interopRequireDefault(_getLastNode);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function getRules(props, properties) {
return properties.map(function (property) {
return (0, _getLastNode2.default)(props, property);
}).filter(Boolean);
}
module.exports = exports['default'];

View File

@@ -0,0 +1,10 @@
"use strict";
exports.__esModule = true;
exports.default = getValue;
function getValue(_ref) {
var value = _ref.value;
return value;
}
module.exports = exports["default"];

View File

@@ -0,0 +1,20 @@
'use strict';
Object.defineProperty(exports, '__esModule', {
value: true
});
exports['default'] = function (rule) {
for (var _len = arguments.length, props = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
props[_key - 1] = arguments[_key];
}
return props.every(function (p) {
return rule.some(function (_ref) {
var prop = _ref.prop;
return prop && ~prop.indexOf(p);
});
});
};
module.exports = exports['default'];

View File

@@ -0,0 +1,19 @@
'use strict';
Object.defineProperty(exports, '__esModule', {
value: true
});
exports['default'] = function () {
for (var _len = arguments.length, rules = Array(_len), _key = 0; _key < _len; _key++) {
rules[_key] = arguments[_key];
}
var candidate = rules[0].value;
return rules.every(function (_ref) {
var value = _ref.value;
return value === candidate;
});
};
module.exports = exports['default'];

View File

@@ -0,0 +1,21 @@
'use strict';
exports.__esModule = true;
exports.default = insertCloned;
var _objectAssign = require('object-assign');
var _objectAssign2 = _interopRequireDefault(_objectAssign);
var _clone = require('./clone');
var _clone2 = _interopRequireDefault(_clone);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function insertCloned(rule, decl, props) {
var newNode = (0, _objectAssign2.default)((0, _clone2.default)(decl), props);
rule.insertAfter(decl, newNode);
return newNode;
};
module.exports = exports['default'];

View File

@@ -0,0 +1,17 @@
'use strict';
Object.defineProperty(exports, '__esModule', {
value: true
});
exports['default'] = function () {
for (var _len = arguments.length, rules = Array(_len), _key = 0; _key < _len; _key++) {
rules[_key] = arguments[_key];
}
return rules.map(function (r) {
return r.value;
}).join(' ');
};
module.exports = exports['default'];

View File

@@ -0,0 +1,28 @@
'use strict';
Object.defineProperty(exports, '__esModule', {
value: true
});
var _postcss = require('postcss');
exports['default'] = function (v) {
var s = typeof v === 'string' ? _postcss.list.space(v) : v;
var value = [s[0], // top
s[1] || s[0], // right
s[2] || s[0], // bottom
s[3] || s[1] || s[0] // left
];
if (value[3] === value[1]) {
value.pop();
if (value[2] === value[0]) {
value.pop();
if (value[0] === value[1]) {
value.pop();
}
}
}
return value.join(' ');
};
module.exports = exports['default'];

View File

@@ -0,0 +1,22 @@
'use strict';
Object.defineProperty(exports, '__esModule', {
value: true
});
var _postcss = require('postcss');
var space = _postcss.list.space;
exports['default'] = function () {
for (var _len = arguments.length, rules = Array(_len), _key = 0; _key < _len; _key++) {
rules[_key] = arguments[_key];
}
return rules.reduce(function (memo, rule) {
memo += space(rule.value).length;
return memo;
}, 0);
};
module.exports = exports['default'];

View File

@@ -0,0 +1,15 @@
'use strict';
exports.__esModule = true;
var _postcss = require('postcss');
exports.default = function (v) {
var s = typeof v === 'string' ? _postcss.list.space(v) : v;
return [s[0], // top
s[1] || s[0], // right
s[2] || s[0], // bottom
s[3] || s[1] || s[0]];
};
module.exports = exports['default'];

View File

@@ -0,0 +1,8 @@
"use strict";
exports.__esModule = true;
exports.default = remove;
function remove(node) {
return node.remove();
}
module.exports = exports["default"];

View File

@@ -0,0 +1,5 @@
'use strict';
exports.__esModule = true;
exports.default = ['top', 'right', 'bottom', 'left'];
module.exports = exports['default'];

View File

@@ -0,0 +1,72 @@
{
"_args": [
[
"postcss-merge-longhand@2.0.2",
"C:\\Users\\deranjer\\go\\src\\github.com\\deranjer\\goTorrent\\torrent-project"
]
],
"_from": "postcss-merge-longhand@2.0.2",
"_id": "postcss-merge-longhand@2.0.2",
"_inBundle": false,
"_integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=",
"_location": "/css-loader/postcss-merge-longhand",
"_phantomChildren": {},
"_requested": {
"type": "version",
"registry": true,
"raw": "postcss-merge-longhand@2.0.2",
"name": "postcss-merge-longhand",
"escapedName": "postcss-merge-longhand",
"rawSpec": "2.0.2",
"saveSpec": null,
"fetchSpec": "2.0.2"
},
"_requiredBy": [
"/css-loader/cssnano"
],
"_resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz",
"_spec": "2.0.2",
"_where": "C:\\Users\\deranjer\\go\\src\\github.com\\deranjer\\goTorrent\\torrent-project",
"author": {
"name": "Ben Briggs",
"email": "beneb.info@gmail.com",
"url": "http://beneb.info"
},
"bugs": {
"url": "https://github.com/ben-eb/postcss-merge-longhand/issues"
},
"dependencies": {
"postcss": "^5.0.4"
},
"description": "Merge longhand properties into shorthand with PostCSS.",
"devDependencies": {
"babel": "^5.8.23",
"babel-tape-runner": "^1.2.0",
"tap-spec": "^4.1.0",
"tape": "^4.2.0"
},
"files": [
"LICENSE-MIT",
"dist"
],
"homepage": "https://github.com/ben-eb/postcss-merge-longhand",
"keywords": [
"css",
"minify",
"optimise",
"postcss",
"postcss-plugin"
],
"license": "MIT",
"main": "dist/index.js",
"name": "postcss-merge-longhand",
"repository": {
"type": "git",
"url": "git+https://github.com/ben-eb/postcss-merge-longhand.git"
},
"scripts": {
"prepublish": "babel src --out-dir dist --ignore /__tests__/",
"test": "babel-tape-runner \"src/**/__tests__/*.js\" | tap-spec"
},
"version": "2.0.2"
}