Skip to content

Commit

Permalink
Merge pull request #5 from robkorv/body-html-selectors
Browse files Browse the repository at this point in the history
Combinator selector replacement, node 0.10 support dropped
  • Loading branch information
robkorv committed Aug 23, 2015
2 parents f393e1a + b26b924 commit 54de033
Show file tree
Hide file tree
Showing 8 changed files with 185 additions and 33 deletions.
143 changes: 124 additions & 19 deletions .eslintrc
Original file line number Diff line number Diff line change
@@ -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
}
}
1 change: 0 additions & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,3 @@ language: node_js
node_js:
- iojs
- "0.12"
- "0.10"
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
## 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'.

Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 3 additions & 1 deletion gulpfile.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ gulp.task('test', function (done) {

gulp.task('default', ['lint', 'test']);

gulp.task('watch', function() {
gulp.task('dev', ['default', 'watch']);

gulp.task('watch', function () {
gulp.watch(files, ['lint', 'test']);
});
26 changes: 18 additions & 8 deletions index.js
Original file line number Diff line number Diff line change
@@ -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;
}
});
Expand Down
7 changes: 4 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
@@ -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",
Expand All @@ -20,12 +20,13 @@
},
"homepage": "https://github.com/robkorv/postcss-selector-prefix",
"dependencies": {
"postcss": "^4.1.13"
"escape-string-regexp": "^1.0.3",
"postcss": "^5.0.2"
},
"devDependencies": {
"chai": "^3.0.0",
"gulp": "^3.9.0",
"gulp-eslint": "^0.14.0",
"gulp-eslint": "^1.0.0",
"gulp-mocha": "^2.1.2"
},
"scripts": {
Expand Down
30 changes: 30 additions & 0 deletions test/test.js
Original file line number Diff line number Diff line change
Expand Up @@ -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
);
});

});

0 comments on commit 54de033

Please sign in to comment.