stylehacks 4.0.0-rc.2 → 4.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dictionary/browsers.js +6 -6
- package/dist/dictionary/identifiers.js +4 -4
- package/dist/dictionary/postcss.js +3 -3
- package/dist/dictionary/tags.js +2 -2
- package/dist/exists.js +3 -2
- package/dist/index.js +20 -20
- package/dist/isMixin.js +3 -2
- package/dist/plugin.js +43 -72
- package/dist/plugins/bodyEmpty.js +2 -2
- package/dist/plugins/htmlCombinatorCommentBody.js +2 -2
- package/dist/plugins/htmlFirstChild.js +2 -2
- package/dist/plugins/important.js +2 -2
- package/dist/plugins/leadingStar.js +8 -12
- package/dist/plugins/leadingUnderscore.js +2 -1
- package/dist/plugins/mediaSlash0.js +3 -2
- package/dist/plugins/mediaSlash0Slash9.js +3 -2
- package/dist/plugins/mediaSlash9.js +3 -2
- package/dist/plugins/slash9.js +1 -1
- package/dist/plugins/starHtml.js +3 -2
- package/dist/plugins/trailingSlashComma.js +3 -2
- package/package.json +9 -9
- package/CHANGELOG.md +0 -56
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
6
|
+
const FF_2 = exports.FF_2 = 'firefox 2';
|
|
7
|
+
const IE_5_5 = exports.IE_5_5 = 'ie 5.5';
|
|
8
|
+
const IE_6 = exports.IE_6 = 'ie 6';
|
|
9
|
+
const IE_7 = exports.IE_7 = 'ie 7';
|
|
10
|
+
const IE_8 = exports.IE_8 = 'ie 8';
|
|
11
|
+
const OP_9 = exports.OP_9 = 'opera 9';
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
const MEDIA_QUERY = exports.MEDIA_QUERY = 'media query';
|
|
7
|
+
const PROPERTY = exports.PROPERTY = 'property';
|
|
8
|
+
const SELECTOR = exports.SELECTOR = 'selector';
|
|
9
|
+
const VALUE = exports.VALUE = 'value';
|
|
@@ -3,6 +3,6 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
const ATRULE = exports.ATRULE = 'atrule';
|
|
7
|
+
const DECL = exports.DECL = 'decl';
|
|
8
|
+
const RULE = exports.RULE = 'rule';
|
package/dist/dictionary/tags.js
CHANGED
package/dist/exists.js
CHANGED
|
@@ -5,7 +5,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = exists;
|
|
7
7
|
function exists(selector, index, value) {
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
const node = selector.at(index);
|
|
9
|
+
|
|
10
|
+
return node && node.value && node.value.toLowerCase() === value;
|
|
10
11
|
}
|
|
11
12
|
module.exports = exports["default"];
|
package/dist/index.js
CHANGED
|
@@ -18,47 +18,47 @@ var _plugins2 = _interopRequireDefault(_plugins);
|
|
|
18
18
|
|
|
19
19
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
return function (css, result) {
|
|
27
|
-
var resultOpts = result.opts || {};
|
|
28
|
-
var browsers = (0, _browserslist2.default)(null, {
|
|
21
|
+
const stylehacks = _postcss2.default.plugin('stylehacks', (opts = {}) => {
|
|
22
|
+
return (css, result) => {
|
|
23
|
+
const resultOpts = result.opts || {};
|
|
24
|
+
const browsers = (0, _browserslist2.default)(null, {
|
|
29
25
|
stats: resultOpts.stats,
|
|
30
26
|
path: __dirname,
|
|
31
27
|
env: resultOpts.env
|
|
32
28
|
});
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
return hack.targets.some(
|
|
37
|
-
return browser === target;
|
|
38
|
-
});
|
|
29
|
+
const processors = _plugins2.default.reduce((list, Plugin) => {
|
|
30
|
+
const hack = new Plugin(result);
|
|
31
|
+
const applied = browsers.some(browser => {
|
|
32
|
+
return hack.targets.some(target => browser === target);
|
|
39
33
|
});
|
|
34
|
+
|
|
40
35
|
if (applied) {
|
|
41
36
|
return list;
|
|
42
37
|
}
|
|
43
|
-
|
|
38
|
+
|
|
39
|
+
return [...list, hack];
|
|
44
40
|
}, []);
|
|
45
|
-
|
|
46
|
-
|
|
41
|
+
|
|
42
|
+
css.walk(node => {
|
|
43
|
+
processors.forEach(proc => {
|
|
47
44
|
if (!~proc.nodeTypes.indexOf(node.type)) {
|
|
48
45
|
return;
|
|
49
46
|
}
|
|
47
|
+
|
|
50
48
|
if (opts.lint) {
|
|
51
49
|
return proc.detectAndWarn(node);
|
|
52
50
|
}
|
|
51
|
+
|
|
53
52
|
return proc.detectAndResolve(node);
|
|
54
53
|
});
|
|
55
54
|
});
|
|
56
55
|
};
|
|
57
56
|
});
|
|
58
57
|
|
|
59
|
-
stylehacks.detect =
|
|
60
|
-
return _plugins2.default.some(
|
|
61
|
-
|
|
58
|
+
stylehacks.detect = node => {
|
|
59
|
+
return _plugins2.default.some(Plugin => {
|
|
60
|
+
const hack = new Plugin();
|
|
61
|
+
|
|
62
62
|
return hack.any(node);
|
|
63
63
|
});
|
|
64
64
|
};
|
package/dist/isMixin.js
CHANGED
|
@@ -5,12 +5,13 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = isMixin;
|
|
7
7
|
function isMixin(node) {
|
|
8
|
-
|
|
9
|
-
// If the selector ends with a ':' it is likely a part of a custom mixin.
|
|
8
|
+
const { selector } = node;
|
|
10
9
|
|
|
10
|
+
// If the selector ends with a ':' it is likely a part of a custom mixin.
|
|
11
11
|
if (!selector || selector[selector.length - 1] === ':') {
|
|
12
12
|
return true;
|
|
13
13
|
}
|
|
14
|
+
|
|
14
15
|
return false;
|
|
15
16
|
}
|
|
16
17
|
module.exports = exports['default'];
|
package/dist/plugin.js
CHANGED
|
@@ -3,92 +3,63 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
|
|
7
|
-
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
|
|
8
|
-
|
|
9
6
|
exports.default = plugin;
|
|
10
|
-
|
|
11
|
-
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
12
|
-
|
|
13
7
|
function plugin(targets, nodeTypes, detect) {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
_classCallCheck(this, Plugin);
|
|
17
|
-
|
|
8
|
+
class Plugin {
|
|
9
|
+
constructor(result) {
|
|
18
10
|
this.nodes = [];
|
|
19
11
|
this.result = result;
|
|
20
12
|
this.targets = targets;
|
|
21
13
|
this.nodeTypes = nodeTypes;
|
|
22
14
|
}
|
|
23
15
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
browsers: this.targets
|
|
30
|
-
});
|
|
31
|
-
this.nodes.push(node);
|
|
32
|
-
}
|
|
33
|
-
}, {
|
|
34
|
-
key: "any",
|
|
35
|
-
value: function any(node) {
|
|
36
|
-
if (~this.nodeTypes.indexOf(node.type)) {
|
|
37
|
-
detect.apply(this, arguments);
|
|
38
|
-
return !!node._stylehacks;
|
|
39
|
-
}
|
|
40
|
-
return false;
|
|
41
|
-
}
|
|
42
|
-
}, {
|
|
43
|
-
key: "detectAndResolve",
|
|
44
|
-
value: function detectAndResolve() {
|
|
45
|
-
this.nodes = [];
|
|
16
|
+
push(node, metadata) {
|
|
17
|
+
node._stylehacks = Object.assign({}, metadata, {
|
|
18
|
+
message: `Bad ${metadata.identifier}: ${metadata.hack}`,
|
|
19
|
+
browsers: this.targets
|
|
20
|
+
});
|
|
46
21
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
22
|
+
this.nodes.push(node);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
any(node) {
|
|
26
|
+
if (~this.nodeTypes.indexOf(node.type)) {
|
|
27
|
+
detect.apply(this, arguments);
|
|
50
28
|
|
|
51
|
-
|
|
52
|
-
return this.resolve();
|
|
29
|
+
return !!node._stylehacks;
|
|
53
30
|
}
|
|
54
|
-
}, {
|
|
55
|
-
key: "detectAndWarn",
|
|
56
|
-
value: function detectAndWarn() {
|
|
57
|
-
this.nodes = [];
|
|
58
31
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
}
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
62
34
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
value: function warn() {
|
|
76
|
-
var _this = this;
|
|
77
|
-
|
|
78
|
-
return this.nodes.forEach(function (node) {
|
|
79
|
-
var _node$_stylehacks = node._stylehacks,
|
|
80
|
-
message = _node$_stylehacks.message,
|
|
81
|
-
browsers = _node$_stylehacks.browsers,
|
|
82
|
-
identifier = _node$_stylehacks.identifier,
|
|
83
|
-
hack = _node$_stylehacks.hack;
|
|
84
|
-
|
|
85
|
-
return node.warn(_this.result, message, { browsers, identifier, hack });
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
}]);
|
|
35
|
+
detectAndResolve(...args) {
|
|
36
|
+
this.nodes = [];
|
|
37
|
+
|
|
38
|
+
detect.apply(this, args);
|
|
39
|
+
|
|
40
|
+
return this.resolve();
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
detectAndWarn(...args) {
|
|
44
|
+
this.nodes = [];
|
|
45
|
+
|
|
46
|
+
detect.apply(this, args);
|
|
89
47
|
|
|
90
|
-
|
|
91
|
-
|
|
48
|
+
return this.warn();
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
resolve() {
|
|
52
|
+
return this.nodes.forEach(node => node.remove());
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
warn() {
|
|
56
|
+
return this.nodes.forEach(node => {
|
|
57
|
+
const { message, browsers, identifier, hack } = node._stylehacks;
|
|
58
|
+
|
|
59
|
+
return node.warn(this.result, message, { browsers, identifier, hack });
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}
|
|
92
63
|
|
|
93
64
|
return Plugin;
|
|
94
65
|
}
|
|
@@ -31,8 +31,8 @@ var _tags = require('../dictionary/tags');
|
|
|
31
31
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
32
32
|
|
|
33
33
|
function analyse(ctx, rule) {
|
|
34
|
-
return
|
|
35
|
-
selectors.each(
|
|
34
|
+
return selectors => {
|
|
35
|
+
selectors.each(selector => {
|
|
36
36
|
if ((0, _exists2.default)(selector, 0, _tags.BODY) && (0, _exists2.default)(selector, 1, ':empty') && (0, _exists2.default)(selector, 2, ' ') && selector.at(3)) {
|
|
37
37
|
ctx.push(rule, {
|
|
38
38
|
identifier: _identifiers.SELECTOR,
|
|
@@ -31,8 +31,8 @@ var _tags = require('../dictionary/tags');
|
|
|
31
31
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
32
32
|
|
|
33
33
|
function analyse(ctx, rule) {
|
|
34
|
-
return
|
|
35
|
-
selectors.each(
|
|
34
|
+
return selectors => {
|
|
35
|
+
selectors.each(selector => {
|
|
36
36
|
if ((0, _exists2.default)(selector, 0, _tags.HTML) && ((0, _exists2.default)(selector, 1, '>') || (0, _exists2.default)(selector, 1, '~')) && selector.at(2) && selector.at(2).type === 'comment' && (0, _exists2.default)(selector, 3, ' ') && (0, _exists2.default)(selector, 4, _tags.BODY) && (0, _exists2.default)(selector, 5, ' ') && selector.at(6)) {
|
|
37
37
|
ctx.push(rule, {
|
|
38
38
|
identifier: _identifiers.SELECTOR,
|
|
@@ -31,8 +31,8 @@ var _tags = require('../dictionary/tags');
|
|
|
31
31
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
32
32
|
|
|
33
33
|
function analyse(ctx, rule) {
|
|
34
|
-
return
|
|
35
|
-
selectors.each(
|
|
34
|
+
return selectors => {
|
|
35
|
+
selectors.each(selector => {
|
|
36
36
|
if ((0, _exists2.default)(selector, 0, _tags.HTML) && (0, _exists2.default)(selector, 1, ':first-child') && (0, _exists2.default)(selector, 2, ' ') && selector.at(3)) {
|
|
37
37
|
ctx.push(rule, {
|
|
38
38
|
identifier: _identifiers.SELECTOR,
|
|
@@ -15,9 +15,9 @@ var _postcss = require('../dictionary/postcss');
|
|
|
15
15
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
16
16
|
|
|
17
17
|
exports.default = (0, _plugin2.default)([_browsers.IE_5_5, _browsers.IE_6, _browsers.IE_7], [_postcss.DECL], function (decl) {
|
|
18
|
-
|
|
18
|
+
const match = decl.value.match(/!\w/);
|
|
19
19
|
if (match) {
|
|
20
|
-
|
|
20
|
+
const hack = decl.value.substr(match.index, decl.value.length - 1);
|
|
21
21
|
this.push(decl, {
|
|
22
22
|
identifier: '!important',
|
|
23
23
|
hack
|
|
@@ -16,31 +16,28 @@ var _postcss = require('../dictionary/postcss');
|
|
|
16
16
|
|
|
17
17
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
const hacks = '!_$_&_*_)_=_%_+_,_._/_`_]_#_~_?_:_|'.split('_');
|
|
20
20
|
|
|
21
21
|
exports.default = (0, _plugin2.default)([_browsers.IE_5_5, _browsers.IE_6, _browsers.IE_7], [_postcss.ATRULE, _postcss.DECL], function (node) {
|
|
22
|
-
var _this = this;
|
|
23
|
-
|
|
24
22
|
if (node.type === _postcss.DECL) {
|
|
25
23
|
// some values are not picked up by before, so ensure they are
|
|
26
24
|
// at the beginning of the value
|
|
27
|
-
hacks.some(
|
|
25
|
+
hacks.some(hack => {
|
|
28
26
|
if (!node.prop.indexOf(hack)) {
|
|
29
|
-
|
|
27
|
+
this.push(node, {
|
|
30
28
|
identifier: _identifiers.PROPERTY,
|
|
31
29
|
hack: node.prop
|
|
32
30
|
});
|
|
33
31
|
return true;
|
|
34
32
|
}
|
|
35
33
|
});
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
let { before } = node.raws;
|
|
38
35
|
if (!before) {
|
|
39
36
|
return;
|
|
40
37
|
}
|
|
41
|
-
hacks.some(
|
|
38
|
+
hacks.some(hack => {
|
|
42
39
|
if (~before.indexOf(hack)) {
|
|
43
|
-
|
|
40
|
+
this.push(node, {
|
|
44
41
|
identifier: _identifiers.PROPERTY,
|
|
45
42
|
hack: `${before.trim()}${node.prop}`
|
|
46
43
|
});
|
|
@@ -49,9 +46,8 @@ exports.default = (0, _plugin2.default)([_browsers.IE_5_5, _browsers.IE_6, _brow
|
|
|
49
46
|
});
|
|
50
47
|
} else {
|
|
51
48
|
// test for the @property: value; hack
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
var len = name.length - 1;
|
|
49
|
+
let { name } = node;
|
|
50
|
+
let len = name.length - 1;
|
|
55
51
|
if (name.lastIndexOf(':') === len) {
|
|
56
52
|
this.push(node, {
|
|
57
53
|
identifier: _identifiers.PROPERTY,
|
|
@@ -21,7 +21,7 @@ var _postcss3 = require('../dictionary/postcss');
|
|
|
21
21
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
22
22
|
|
|
23
23
|
exports.default = (0, _plugin2.default)([_browsers.IE_6], [_postcss3.DECL], function (decl) {
|
|
24
|
-
|
|
24
|
+
const { before } = decl.raws;
|
|
25
25
|
|
|
26
26
|
if (before && ~before.indexOf('_')) {
|
|
27
27
|
this.push(decl, {
|
|
@@ -29,6 +29,7 @@ exports.default = (0, _plugin2.default)([_browsers.IE_6], [_postcss3.DECL], func
|
|
|
29
29
|
hack: `${before.trim()}${decl.prop}`
|
|
30
30
|
});
|
|
31
31
|
}
|
|
32
|
+
|
|
32
33
|
if (decl.prop[0] === '-' && decl.prop[1] !== '-' && _postcss2.default.vendor.prefix(decl.prop) === '') {
|
|
33
34
|
this.push(decl, {
|
|
34
35
|
identifier: _identifiers.PROPERTY,
|
|
@@ -17,8 +17,9 @@ var _postcss = require('../dictionary/postcss');
|
|
|
17
17
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
18
18
|
|
|
19
19
|
exports.default = (0, _plugin2.default)([_browsers.IE_8], [_postcss.ATRULE], function (rule) {
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
const params = rule.params.trim();
|
|
21
|
+
|
|
22
|
+
if (params.toLowerCase() === '\\0screen') {
|
|
22
23
|
this.push(rule, {
|
|
23
24
|
identifier: _identifiers.MEDIA_QUERY,
|
|
24
25
|
hack: params
|
|
@@ -17,8 +17,9 @@ var _postcss = require('../dictionary/postcss');
|
|
|
17
17
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
18
18
|
|
|
19
19
|
exports.default = (0, _plugin2.default)([_browsers.IE_5_5, _browsers.IE_6, _browsers.IE_7, _browsers.IE_8], [_postcss.ATRULE], function (rule) {
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
const params = rule.params.trim();
|
|
21
|
+
|
|
22
|
+
if (params.toLowerCase() === '\\0screen\\,screen\\9') {
|
|
22
23
|
this.push(rule, {
|
|
23
24
|
identifier: _identifiers.MEDIA_QUERY,
|
|
24
25
|
hack: params
|
|
@@ -17,8 +17,9 @@ var _postcss = require('../dictionary/postcss');
|
|
|
17
17
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
18
18
|
|
|
19
19
|
exports.default = (0, _plugin2.default)([_browsers.IE_5_5, _browsers.IE_6, _browsers.IE_7], [_postcss.ATRULE], function (rule) {
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
const params = rule.params.trim();
|
|
21
|
+
|
|
22
|
+
if (params.toLowerCase() === 'screen\\9') {
|
|
22
23
|
this.push(rule, {
|
|
23
24
|
identifier: _identifiers.MEDIA_QUERY,
|
|
24
25
|
hack: params
|
package/dist/plugins/slash9.js
CHANGED
|
@@ -17,7 +17,7 @@ var _postcss = require('../dictionary/postcss');
|
|
|
17
17
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
18
18
|
|
|
19
19
|
exports.default = (0, _plugin2.default)([_browsers.IE_6, _browsers.IE_7, _browsers.IE_8], [_postcss.DECL], function (decl) {
|
|
20
|
-
|
|
20
|
+
let v = decl.value;
|
|
21
21
|
if (v && v.length > 2 && v.indexOf('\\9') === v.length - 2) {
|
|
22
22
|
this.push(decl, {
|
|
23
23
|
identifier: _identifiers.VALUE,
|
package/dist/plugins/starHtml.js
CHANGED
|
@@ -31,8 +31,8 @@ var _tags = require('../dictionary/tags');
|
|
|
31
31
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
32
32
|
|
|
33
33
|
function analyse(ctx, rule) {
|
|
34
|
-
return
|
|
35
|
-
selectors.each(
|
|
34
|
+
return selectors => {
|
|
35
|
+
selectors.each(selector => {
|
|
36
36
|
if ((0, _exists2.default)(selector, 0, '*') && (0, _exists2.default)(selector, 1, ' ') && (0, _exists2.default)(selector, 2, _tags.HTML) && (0, _exists2.default)(selector, 3, ' ') && selector.at(4)) {
|
|
37
37
|
ctx.push(rule, {
|
|
38
38
|
identifier: _identifiers.SELECTOR,
|
|
@@ -47,6 +47,7 @@ exports.default = (0, _plugin2.default)([_browsers.IE_5_5, _browsers.IE_6], [_po
|
|
|
47
47
|
if ((0, _isMixin2.default)(rule)) {
|
|
48
48
|
return;
|
|
49
49
|
}
|
|
50
|
+
|
|
50
51
|
(0, _postcssSelectorParser2.default)(analyse(this, rule)).processSync(rule.selector);
|
|
51
52
|
});
|
|
52
53
|
module.exports = exports['default'];
|
|
@@ -24,9 +24,10 @@ exports.default = (0, _plugin2.default)([_browsers.IE_5_5, _browsers.IE_6, _brow
|
|
|
24
24
|
if ((0, _isMixin2.default)(rule)) {
|
|
25
25
|
return;
|
|
26
26
|
}
|
|
27
|
-
var selector = rule.selector;
|
|
28
27
|
|
|
29
|
-
|
|
28
|
+
const { selector } = rule;
|
|
29
|
+
const trim = selector.trim();
|
|
30
|
+
|
|
30
31
|
if (trim.lastIndexOf(',') === selector.length - 1 || trim.lastIndexOf('\\') === selector.length - 1) {
|
|
31
32
|
this.push(rule, {
|
|
32
33
|
identifier: _identifiers.SELECTOR,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "stylehacks",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.3",
|
|
4
4
|
"description": "Detect/remove browser hacks from CSS files.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"files": [
|
|
@@ -23,24 +23,24 @@
|
|
|
23
23
|
"license": "MIT",
|
|
24
24
|
"devDependencies": {
|
|
25
25
|
"babel-cli": "^6.0.0",
|
|
26
|
-
"cross-env": "^
|
|
26
|
+
"cross-env": "^5.0.0"
|
|
27
27
|
},
|
|
28
|
-
"homepage": "https://github.com/
|
|
28
|
+
"homepage": "https://github.com/cssnano/cssnano",
|
|
29
29
|
"author": {
|
|
30
30
|
"name": "Ben Briggs",
|
|
31
31
|
"email": "beneb.info@gmail.com",
|
|
32
32
|
"url": "http://beneb.info"
|
|
33
33
|
},
|
|
34
|
-
"repository": "
|
|
34
|
+
"repository": "cssnano/cssnano",
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"browserslist": "^
|
|
37
|
-
"postcss": "^
|
|
38
|
-
"postcss-selector-parser": "^3.0.0
|
|
36
|
+
"browserslist": "^4.0.0",
|
|
37
|
+
"postcss": "^7.0.0",
|
|
38
|
+
"postcss-selector-parser": "^3.0.0"
|
|
39
39
|
},
|
|
40
40
|
"bugs": {
|
|
41
|
-
"url": "https://github.com/
|
|
41
|
+
"url": "https://github.com/cssnano/cssnano/issues"
|
|
42
42
|
},
|
|
43
43
|
"engines": {
|
|
44
|
-
"node": ">=
|
|
44
|
+
"node": ">=6.9.0"
|
|
45
45
|
}
|
|
46
46
|
}
|
package/CHANGELOG.md
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
# 4.0.0-rc.0
|
|
2
|
-
|
|
3
|
-
* Breaking: Drops support for Node 0.12, we now require at least Node 4.
|
|
4
|
-
* Breaking: Update PostCSS to 6.0.0.
|
|
5
|
-
* Breaking: Removes the browsers option, as it has been superseded by using
|
|
6
|
-
Browserslist to supply a list of browsers; we recommend using the config file
|
|
7
|
-
as the same values will be propagated to other cssnano plugins which have the
|
|
8
|
-
same functionality. See https://github.com/ai/browserslist#config-file
|
|
9
|
-
for more details.
|
|
10
|
-
* Breaking: Removes the `silent` option & logger; now stylehacks will add the
|
|
11
|
-
warnings to `Result#messages`. If you would like logging this can be handled
|
|
12
|
-
in your PostCSS runner.
|
|
13
|
-
* Breaking: Removes the CLI from stylehacks. We recommend using a PostCSS
|
|
14
|
-
runner instead as it's easier to add stylehacks into an existing setup rather
|
|
15
|
-
than using a separate command.
|
|
16
|
-
|
|
17
|
-
# 2.3.2
|
|
18
|
-
|
|
19
|
-
* Resolves an issue where stylehacks would crash on CSS mixins.
|
|
20
|
-
|
|
21
|
-
# 2.3.1
|
|
22
|
-
|
|
23
|
-
* Upgraded postcss-selector-parser to `v2.0.0`.
|
|
24
|
-
* Fixed an issue where stylehacks was not removing `*zoom: 1` from rules
|
|
25
|
-
generated by other PostCSS plugins.
|
|
26
|
-
|
|
27
|
-
# 2.3.0
|
|
28
|
-
|
|
29
|
-
* Each warning now contains more information about the hack; what identifier
|
|
30
|
-
it targets, what the hack is, and the browsers that it affects. E.g:
|
|
31
|
-
|
|
32
|
-
```js
|
|
33
|
-
{
|
|
34
|
-
browsers: [ 'ie 6', 'ie 5.5' ],
|
|
35
|
-
identifier: 'selector',
|
|
36
|
-
hack: '* html h1'
|
|
37
|
-
}
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
# 2.2.0
|
|
41
|
-
|
|
42
|
-
* Added `value\9` hack.
|
|
43
|
-
|
|
44
|
-
# 2.1.0
|
|
45
|
-
|
|
46
|
-
* Added `html ~ /**/ body .selector` hack.
|
|
47
|
-
* Added a method to detect if a PostCSS node has any hacks.
|
|
48
|
-
|
|
49
|
-
# 2.0.0
|
|
50
|
-
|
|
51
|
-
* Added `body:empty` & `html:first-child` hacks.
|
|
52
|
-
* Upgraded to PostCSS 5.
|
|
53
|
-
|
|
54
|
-
# 1.0.0
|
|
55
|
-
|
|
56
|
-
* Initial release.
|