diff --git a/.gitignore b/.gitignore index 46c912c..a84175b 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ # NODEJS node_modules npm-debug.log +.nyc_output diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..156f12b --- /dev/null +++ b/.travis.yml @@ -0,0 +1,9 @@ +sudo: false +language: node_js +node_js: + - "node" + - "lts/*" + - "8" + +after_script: + - npm run coverage diff --git a/index.js b/index.js index 557853e..372adb7 100644 --- a/index.js +++ b/index.js @@ -10,7 +10,12 @@ module.exports = function posthtmlStyleToFile(options) { tree.match({ tag: 'style' }, function(node) { buf += node.content[0].trim() || ''; - return node; + + if (options.removeStyle === 'tag' || options.removeStyle === 'all') { + return ''; + } + + return node; }); tree.match({ attrs: { style: true }}, function(node) { @@ -22,6 +27,11 @@ module.exports = function posthtmlStyleToFile(options) { node.tag + (node.attrs.id? ('#' + node.attrs.id ): '') + cls + '{' + node.attrs.style + '}'; + + if (options.removeStyle === 'attrs' || options.removeStyle === 'all') { + delete node.attrs.style; + } + return node; }); diff --git a/package.json b/package.json index 7c7295d..7052e46 100644 --- a/package.json +++ b/package.json @@ -1,19 +1,21 @@ { "name": "posthtml-style-to-file", - "version": "0.1.1", + "version": "0.2.0", "description": "posthtml style-to-file plugin", "main": "index.js", - "dependencies": { - }, + "dependencies": {}, "devDependencies": { - "chai": "^3.2.0", - "jscs": "^1.13.1", + "chai": "^4.2.0", + "coveralls": "^3.0.4", + "jscs": "^3.0.7", "jshint": "^2.8.0", - "posthtml": "^0.3.0", - "mocha": "^2.2.5" + "mocha": "^6.1.4", + "nyc": "^14.1.1", + "posthtml": "^0.11.4" }, "scripts": { - "test": "npm run lint && mocha", + "coverage": "nyc report --reporter=text-lcov | coveralls", + "test": "npm run lint && nyc mocha", "lint": "jshint . && jscs . -v" }, "repository": { diff --git a/readme.md b/readme.md index b7d84b9..a694fda 100644 --- a/readme.md +++ b/readme.md @@ -18,9 +18,21 @@ npm i -D posthtml-style-to-file

Usage

-### Options +## Options -__`path`__ +#### `path` + +Type: `String` +Default: `./result.css` +Description: *Destination path, where the extracted CSS is saved to.* + +#### `removeStyle` + +Type: `String` +Default: `` +Description: *Removes the specified value `attrs` | `tag` | `all`* + +__`removeStyle`__ Destination path, where the extracted CSS is saved to. diff --git a/test/test.js b/test/test.js index ccc6548..618aac9 100644 --- a/test/test.js +++ b/test/test.js @@ -4,30 +4,88 @@ var plugin = require('..'); var expect = require('chai').expect; var fs = require('fs'); -var HTML = fs.readFileSync('./test/test.html', 'utf-8'), - CSS = fs.readFileSync('./test/test.css', 'utf-8'); +var HTML = fs.readFileSync('./test/test.html', 'utf-8'); +var CSS = fs.readFileSync('./test/test.css', 'utf-8'); -function test(html, referenceCss, done) { +function test(html, options, callbackSuccess, callbackError) { posthtml() - .use(plugin({ path: './test/test2.css' })) + .use(plugin(options)) .process(html) - .then(function(/*result*/) { - setTimeout(function() { - expect(referenceCss).to.eql(fs.readFileSync('./test/test2.css', 'utf-8').toString()); - done(); - }, 20); - }).catch(function(error) { - done(error); - }); + .then(callbackSuccess) + .catch(callbackError); } describe('Simple test', function() { it('style to file', function(done) { test( HTML, - CSS, - done + { path: './test/test2.css' }, + function() { + setTimeout(function() { + expect(CSS).to.eql(fs.readFileSync('./test/test2.css', 'utf-8').toString()); + done(); + }, 20); + }, + function(error) { + done(error); + } ); }); + it('remove style attrs', function(done) { + test( + HTML, + { + path: './test/test2.css', + removeStyle: 'attrs' + }, + function(result) { + setTimeout(function() { + expect(result.html).to.eql(fs.readFileSync('./test/testRemoveAttrs.html', 'utf-8').toString()); + done(); + }, 20); + }, + function(error) { + done(error); + } + ); + }); + + it('remove style tag', function(done) { + test( + HTML, + { + path: './test/test2.css', + removeStyle: 'tag' + }, + function(result) { + setTimeout(function() { + expect(result.html).to.eql(fs.readFileSync('./test/testRemoveTag.html', 'utf-8').toString()); + done(); + }, 20); + }, + function(error) { + done(error); + } + ); + }); + + it('remove style all', function(done) { + test( + HTML, + { + path: './test/test2.css', + removeStyle: 'all' + }, + function(result) { + setTimeout(function() { + expect(result.html).to.eql(fs.readFileSync('./test/testRemoveAll.html', 'utf-8').toString()); + done(); + }, 20); + }, + function(error) { + done(error); + } + ); + }); }); diff --git a/test/testRemoveAll.html b/test/testRemoveAll.html new file mode 100644 index 0000000..4711247 --- /dev/null +++ b/test/testRemoveAll.html @@ -0,0 +1,15 @@ + + + Wow + + + +
+
+
+ Text +
+
+
+ + diff --git a/test/testRemoveAttrs.html b/test/testRemoveAttrs.html new file mode 100644 index 0000000..38cb66b --- /dev/null +++ b/test/testRemoveAttrs.html @@ -0,0 +1,17 @@ + + + Wow + + + +
+
+
+ Text +
+
+
+ + diff --git a/test/testRemoveTag.html b/test/testRemoveTag.html new file mode 100644 index 0000000..49d731c --- /dev/null +++ b/test/testRemoveTag.html @@ -0,0 +1,15 @@ + + + Wow + + + +
+
+
+ Text +
+
+
+ +