From fff029b368cbed34ba6556356f674d9ea7f8d217 Mon Sep 17 00:00:00 2001 From: msidolphin Date: Mon, 19 Nov 2018 10:18:15 +0800 Subject: [PATCH 1/5] Update index.js --- index.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/index.js b/index.js index 7bcc46a..533b654 100755 --- a/index.js +++ b/index.js @@ -29,8 +29,16 @@ module.exports = postcss.plugin('postcss-px-to-viewport', function (options) { var pxRegex = new RegExp('"[^"]+"|\'[^\']+\'|url\\([^\\)]+\\)|(\\d*\\.?\\d+)' + opts.unitToConvert, 'ig') return function (css) { - + css.walkDecls(function (decl, i) { + + if (opts.exclude) { + if (Object.prototype.toString.call(opts.exclude) !== '[object RegExp]') { + throw new Error('options.exclude should be RegExp!') + } + if (decl.source.input.file.match(opts.exclude) !== null) return; + } + // This should be the fastest test and will remove most declarations if (decl.value.indexOf(opts.unitToConvert) === -1) return; From 07c63a6622f82f92dfb306eaf88f8b668b0888fc Mon Sep 17 00:00:00 2001 From: msidolphin Date: Mon, 19 Nov 2018 10:59:31 +0800 Subject: [PATCH 2/5] add exlclude option to ignore some files https://github.com/evrone/postcss-px-to-viewport/issues/11 --- index.js | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/index.js b/index.js index 533b654..521bec2 100755 --- a/index.js +++ b/index.js @@ -32,11 +32,17 @@ module.exports = postcss.plugin('postcss-px-to-viewport', function (options) { css.walkDecls(function (decl, i) { + // Add exlclude option to ignore some files like 'node_modules' if (opts.exclude) { - if (Object.prototype.toString.call(opts.exclude) !== '[object RegExp]') { - throw new Error('options.exclude should be RegExp!') + if (Object.prototype.toString.call(opts.exclude) === '[object RegExp]') { + if (!handleExclude(opts.exclude, decl.source.input.file)) return; + } else if (Object.prototype.toString.call(opts.exclude) === '[object Array]') { + for (let i = 0; i < opts.exclude.length; ++i) { + if (!handleExclude(opts.exclude[i], decl.source.input.file)) return; + } + } else { + throw new Error('options.exclude should be RegExp or Array!'); } - if (decl.source.input.file.match(opts.exclude) !== null) return; } // This should be the fastest test and will remove most declarations @@ -59,6 +65,14 @@ module.exports = postcss.plugin('postcss-px-to-viewport', function (options) { }; }); +function handleExclude (reg, file) { + if (Object.prototype.toString.call(reg) !== '[object RegExp]') { + throw new Error('options.exclude should be RegExp!'); + } + if (file.match(reg) !== null) return false; + return true; +} + function getUnit(prop, opts) { return prop.indexOf('font') === -1 ? opts.viewportUnit : opts.fontViewportUnit; } From d2fc59662fa99cc5c640b01c513cc96ee4e62fcd Mon Sep 17 00:00:00 2001 From: msidolphin Date: Sat, 8 Dec 2018 10:09:29 +0800 Subject: [PATCH 3/5] Update README.md --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 21a16c5..d34825f 100644 --- a/README.md +++ b/README.md @@ -95,7 +95,8 @@ Default: fontViewportUnit: 'vw', // vmin is more suitable. selectorBlackList: [], minPixelValue: 1, - mediaQuery: false + mediaQuery: false, + exclude: [] // ignore some files } ``` - `unitToConvert` (String) unit to convert, by default, it is px. @@ -111,6 +112,9 @@ Default: - `[/^body$/]` will match `body` but not `.body` - `minPixelValue` (Number) Set the minimum pixel value to replace. - `mediaQuery` (Boolean) Allow px to be converted in media queries. +- `exclude` (Array or Regexp) Ignore some files like 'node_modules' + - If value is regexp, will ignore the matches files. + - If value is array, the elements of the array are regexp. ### Use with gulp-postcss From 518a69adba5da93262d6ed9081d73e42eed336a2 Mon Sep 17 00:00:00 2001 From: msidolphin Date: Thu, 24 Jan 2019 17:03:19 +0800 Subject: [PATCH 4/5] add exclude option test cases --- spec/px-to-viewport.spec.js | 48 +++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/spec/px-to-viewport.spec.js b/spec/px-to-viewport.spec.js index 23632e2..aad1213 100644 --- a/spec/px-to-viewport.spec.js +++ b/spec/px-to-viewport.spec.js @@ -196,3 +196,51 @@ describe('minPixelValue', function () { expect(processed).toBe(expected); }); }); + +describe('exclude', function () { + var rules = '.rule { border: 1px solid #000; font-size: 16px; margin: 1px 10px; }'; + var covered = '.rule { border: 1px solid #000; font-size: 5vw; margin: 1px 3.125vw; }' + it('when using regex at the time, the style should not be overwritten.', function () { + var options = { + exclude: /node_modules/ + } + var processed = postcss(pxToViewport(options)).process(rules, { + from: '/node_modules/main.css' + }).css; + + expect(processed).toBe(rules); + }); + + it('when using regex at the time, the style should be overwritten.', function () { + var options = { + exclude: /node_modules/ + } + var processed = postcss(pxToViewport(options)).process(rules, { + from: '/example/main.css' + }).css; + + expect(processed).toBe(covered); + }); + + it('when using array at the time, the style should not be overwritten.', function () { + var options = { + exclude: [/node_modules/, /exclude/] + } + var processed = postcss(pxToViewport(options)).process(rules, { + from: '/exclude/main.css' + }).css; + + expect(processed).toBe(rules); + }); + + it('when using array at the time, the style should be overwritten.', function () { + var options = { + exclude: [/node_modules/, /exclude/] + } + var processed = postcss(pxToViewport(options)).process(rules, { + from: '/example/main.css' + }).css; + + expect(processed).toBe(covered); + }); +}); From 1d2e9be8802b7459620a6b154ee59af08b61d07a Mon Sep 17 00:00:00 2001 From: msidolphin Date: Thu, 24 Jan 2019 17:13:54 +0800 Subject: [PATCH 5/5] file path maybe undefined --- index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.js b/index.js index 521bec2..27c4442 100755 --- a/index.js +++ b/index.js @@ -33,7 +33,7 @@ module.exports = postcss.plugin('postcss-px-to-viewport', function (options) { css.walkDecls(function (decl, i) { // Add exlclude option to ignore some files like 'node_modules' - if (opts.exclude) { + if (opts.exclude && decl.source.input.file) { if (Object.prototype.toString.call(opts.exclude) === '[object RegExp]') { if (!handleExclude(opts.exclude, decl.source.input.file)) return; } else if (Object.prototype.toString.call(opts.exclude) === '[object Array]') {