From ce7cd4e96847b97c2f046613589a65018b6bc766 Mon Sep 17 00:00:00 2001 From: Robbert Korving Date: Sun, 23 Aug 2015 15:29:38 +0200 Subject: [PATCH 1/4] update outdated packages --- .eslintrc | 143 ++++++++++++++++++++++++++++++++++++++++++++------- README.md | 2 +- gulpfile.js | 2 +- package.json | 5 +- 4 files changed, 129 insertions(+), 23 deletions(-) diff --git a/.eslintrc b/.eslintrc index b94b8c8..3325819 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,21 +1,126 @@ { - "rules": { - "no-unused-expressions": [0], - "no-underscore-dangle": [0], - "no-reserved-keys": [2], - "no-multi-spaces": [0], - "no-extra-parens": [2], - "no-unused-vars": [2], - "no-loop-func": [0], - "key-spacing": [0], - "max-len": [2], - "strict": [0], - "indent": [2], - "quotes": [2, "single", "avoid-escape"], - "curly": [0] - }, - "env": { - "mocha": true, - "node": true - } + "rules": { + "space-before-function-paren": [2, { "named": "never" }], + "no-shadow-restricted-names": [2], + "computed-property-spacing": [2], + "no-empty-character-class": [2], + "no-irregular-whitespace": [2], + "no-unexpected-multiline": [2], + "no-multiple-empty-lines": [2], + "space-return-throw-case": [2], + "no-constant-condition": [2], + "no-extra-boolean-cast": [2], + "no-inner-declarations": [2], + "no-this-before-super": [2], + "no-use-before-define": [2], + "no-array-constructor": [2], + "object-curly-spacing": [2, "always"], + "no-floating-decimal": [2], + "no-warning-comments": [2], + "handle-callback-err": [2], + "no-unneeded-ternary": [2], + "operator-assignment": [2], + "space-before-blocks": [2], + "no-native-reassign": [2], + "no-trailing-spaces": [2], + "operator-linebreak": [2, "after"], + "consistent-return": [2], + "no-duplicate-case": [2], + "no-invalid-regexp": [2], + "no-negated-in-lhs": [2], + "constructor-super": [2], + "no-nested-ternary": [2], + "no-extend-native": [2], + "block-scoped-var": [2], + "no-control-regex": [2], + "no-sparse-arrays": [2], + "no-throw-literal": [2], + "no-return-assign": [2], + "no-const-assign": [2], + "no-class-assign": [2], + "no-extra-parens": [2], + "no-regex-spaces": [2], + "no-implied-eval": [2], + "no-useless-call": [2], + "no-self-compare": [2], + "no-octal-escape": [2], + "no-new-wrappers": [2], + "no-process-exit": [2], + "no-catch-shadow": [2], + "linebreak-style": [2], + "space-infix-ops": [2], + "space-unary-ops": [2], + "no-cond-assign": [2], + "no-func-assign": [2], + "no-unreachable": [2], + "accessor-pairs": [2], + "no-empty-label": [2], + "no-fallthrough": [2], + "no-path-concat": [2], + "no-new-require": [2], + "no-spaced-func": [2], + "no-unused-vars": [2], + "spaced-comment": [2], + "no-delete-var": [2], + "comma-spacing": [2], + "no-extra-semi": [2], + "no-extra-bind": [2], + "arrow-spacing": [2], + "prefer-spread": [2], + "no-new-object": [2], + "no-multi-str": [2], + "semi-spacing": [2], + "no-lonely-if": [2], + "dot-notation": [2], + "dot-location": [2, "property"], + "comma-dangle": [2, "never"], + "no-dupe-args": [2], + "no-dupe-keys": [2], + "no-ex-assign": [2], + "no-obj-calls": [2], + "valid-typeof": [2], + "default-case": [2], + "no-redeclare": [2], + "no-div-regex": [2], + "no-sequences": [2], + "no-label-var": [2], + "comma-style": [2], + "brace-style": [2], + "no-debugger": [2], + "quote-props": [2, "as-needed"], + "no-iterator": [2], + "no-new-func": [2], + "key-spacing": [2, { "align": "value" }], + "complexity": [2], + "new-parens": [2], + "no-eq-null": [2], + "no-bitwise": [2], + "wrap-iife": [2], + "no-caller": [2], + "use-isnan": [2], + "no-labels": [2], + "no-shadow": [2], + "camelcase": [2], + "eol-last": [2], + "no-octal": [2], + "no-empty": [2], + "no-alert": [2], + "no-proto": [2], + "no-undef": [2], + "no-eval": [2], + "no-with": [2], + "no-void": [2], + "max-len": [2, 80], + "new-cap": [2], + "eqeqeq": [2], + "no-new": [2], + "quotes": [2, "single"], + "indent": [2, 4], + "semi": [2, "always"], + "yoda": [2, "never"] + }, + "env": { + "mocha": true, + "node": true + } } diff --git a/README.md b/README.md index 21c374a..a8aa6f4 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,7 @@ postcss([ require('postcss-selector-prefix')('#prefix') ]) [npm-image]: https://badge.fury.io/js/postcss-selector-prefix.svg [npm-url]: https://npmjs.org/package/postcss-selector-prefix -[travis-image]: https://travis-ci.org/robkorv/postcss-selector-prefix.svg +[travis-image]: https://travis-ci.org/robkorv/postcss-selector-prefix.svg?branch=master [travis-url]: https://travis-ci.org/robkorv/postcss-selector-prefix [daviddm-image]: https://david-dm.org/robkorv/postcss-selector-prefix.svg?theme=shields.io [daviddm-url]: https://david-dm.org/robkorv/postcss-selector-prefix diff --git a/gulpfile.js b/gulpfile.js index d140e52..f395539 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -18,6 +18,6 @@ gulp.task('test', function (done) { gulp.task('default', ['lint', 'test']); -gulp.task('watch', function() { +gulp.task('watch', function () { gulp.watch(files, ['lint', 'test']); }); diff --git a/package.json b/package.json index 9b1a5ff..a933c1e 100644 --- a/package.json +++ b/package.json @@ -25,8 +25,9 @@ "devDependencies": { "chai": "^3.0.0", "gulp": "^3.9.0", - "gulp-eslint": "^0.14.0", - "gulp-mocha": "^2.1.2" + "gulp-eslint": "^1.0.0", + "gulp-mocha": "^2.1.2", + "postcss": "^5.0.2" }, "scripts": { "test": "gulp" From cacf39565773a8d3fba02789c4d421971c015e0e Mon Sep 17 00:00:00 2001 From: Robbert Korving Date: Sun, 23 Aug 2015 18:17:23 +0200 Subject: [PATCH 2/4] combinator selectors can't be prefixed are replaced with the prefix closes #4 --- CHANGELOG.md | 4 ++++ gulpfile.js | 2 ++ index.js | 26 ++++++++++++++++++-------- package.json | 3 ++- test/test.js | 30 ++++++++++++++++++++++++++++++ 5 files changed, 56 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6a4d189..cdbf1eb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.0 - Combinator selector replacement +* combinator selectors that can't be prefixed with the prefix are replaced with the prefix. +* dependencies update. + ## 1.0.1 - Fix for node 0.10 & 0.12 * fixed TypeError: Object has no method 'includes'. diff --git a/gulpfile.js b/gulpfile.js index f395539..eb9f2cf 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -18,6 +18,8 @@ gulp.task('test', function (done) { gulp.task('default', ['lint', 'test']); +gulp.task('dev', ['default', 'watch']); + gulp.task('watch', function () { gulp.watch(files, ['lint', 'test']); }); diff --git a/index.js b/index.js index 8588f89..ac9264c 100644 --- a/index.js +++ b/index.js @@ -1,16 +1,26 @@ var postcss = require('postcss'); +var escapeStringRegexp = require('escape-string-regexp'); var plugin = postcss.plugin('postcss-selector-prefix', function (prefix) { return function (root) { - root.eachRule(function (rule) { - rule.selectors = rule.selectors.map(function(selector) { - if (selector.indexOf(prefix) !== -1) { + root.walkRules(function (rule) { + rule.selectors = rule.selectors.map(function (selector) { + // replace combinator selectors that can't be prefixed. + selector = selector.replace( + /^html\.body\.|^html\.|^body\./, prefix + '.' + ); + + // replace descendant combinators that can't be prefixed. + selector = selector.replace(/^body$|^html$/, prefix); + + // create prefix regex. + var escapedPrefix = escapeStringRegexp(prefix); + var re = new RegExp('^' + escapedPrefix); + + // don't prefix the already prefixed. + if (selector.match(re)) { return selector; - } - else if (selector === 'body' || selector === 'html'){ - return prefix; - } - else { + } else { return prefix + ' ' + selector; } }); diff --git a/package.json b/package.json index a933c1e..8b073e3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "postcss-selector-prefix", - "version": "1.0.1", + "version": "2.0.0", "description": "PostCSS plugin to add a selector prefix to all selectors.", "keywords": [ "postcss", @@ -20,6 +20,7 @@ }, "homepage": "https://github.com/robkorv/postcss-selector-prefix", "dependencies": { + "escape-string-regexp": "^1.0.3", "postcss": "^4.1.13" }, "devDependencies": { diff --git a/test/test.js b/test/test.js index ba11da7..4047609 100644 --- a/test/test.js +++ b/test/test.js @@ -35,4 +35,34 @@ describe('postcss-selector-prefix', function () { test('#prefix a{ }', '#prefix a{ }', '#prefix', done); }); + it( + 'should prefix class selectors', + function (done) { + test( + '.myclass a{ } .myclass.active a{ }', + '#prefix .myclass a{ } #prefix .myclass.active a{ }', + '#prefix', done + ); + }); + + it( + 'should convert body.myclass to myprefix.myclass', + function (done) { + test( + 'body.myclass { background-color: #fff; }', + '#prefix.myclass { background-color: #fff; }', + '#prefix', done + ); + }); + + it( + 'should convert html.body.myclass to myprefix.myclass', + function (done) { + test( + 'html.body.myclass { background-color: #fff; }', + '#prefix.myclass { background-color: #fff; }', + '#prefix', done + ); + }); + }); From 22f6c222f1a6e8709070abcded1a9705b57fe3f1 Mon Sep 17 00:00:00 2001 From: Robbert Korving Date: Sun, 23 Aug 2015 18:22:32 +0200 Subject: [PATCH 3/4] postcss dep fix --- package.json | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 8b073e3..71e85ba 100644 --- a/package.json +++ b/package.json @@ -21,14 +21,13 @@ "homepage": "https://github.com/robkorv/postcss-selector-prefix", "dependencies": { "escape-string-regexp": "^1.0.3", - "postcss": "^4.1.13" + "postcss": "^5.0.2" }, "devDependencies": { "chai": "^3.0.0", "gulp": "^3.9.0", "gulp-eslint": "^1.0.0", - "gulp-mocha": "^2.1.2", - "postcss": "^5.0.2" + "gulp-mocha": "^2.1.2" }, "scripts": { "test": "gulp" From b26b92490aefa3955801be6f9866b345481d4c2d Mon Sep 17 00:00:00 2001 From: Robbert Korving Date: Sun, 23 Aug 2015 18:35:53 +0200 Subject: [PATCH 4/4] postcss 5 dropped support for node 0.10 --- .travis.yml | 1 - CHANGELOG.md | 3 ++- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index ffb8b39..e1bd776 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,4 +3,3 @@ language: node_js node_js: - iojs - "0.12" - - "0.10" diff --git a/CHANGELOG.md b/CHANGELOG.md index cdbf1eb..0acd6dd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ -## 2.0.0 - Combinator selector replacement +## 2.0.0 - Combinator selector replacement, node 0.10 support dropped * combinator selectors that can't be prefixed with the prefix are replaced with the prefix. * dependencies update. +* [postcss 5 dropped support for node 0.10](https://github.com/postcss/postcss/releases/tag/5.0.0) ## 1.0.1 - Fix for node 0.10 & 0.12 * fixed TypeError: Object has no method 'includes'.