Skip to content

Commit 5b9aded

Browse files
author
David Narbutovich
committed
update package
1 parent d45c6b6 commit 5b9aded

File tree

6 files changed

+163
-24
lines changed

6 files changed

+163
-24
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Change Log
2+
3+
## 2.0.0
4+
* deprecated node@4.x.x
5+
* deprecated webpack@1.x.x
6+
* added `sourceMap: true|false` options

README.md

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,12 @@ A [group-css-media-queries](https://github.com/Se7enSky/group-css-media-queries)
88

99

1010
## Install
11-
`npm i -D group-css-media-queries-loader` or `yarn add --dev group-css-media-queries-loader`
12-
11+
```bash
12+
yarn add -D group-css-media-queries-loader
1313

14+
# for webpack@1
15+
yarn add -D group-css-media-queries-loader@1
16+
```
1417

1518

1619
## Usage
@@ -29,7 +32,15 @@ module.exports = {
2932
use: [
3033
'style-loader',
3134
'css-loader',
32-
'group-css-media-queries-loader'
35+
36+
'group-css-media-queries-loader',
37+
// or with config
38+
{
39+
loader: 'group-css-media-queries-loader',
40+
options: {
41+
sourceMap: true
42+
}
43+
}
3344
]
3445
}
3546
]
@@ -43,7 +54,7 @@ module.exports = {
4354
import css_min from 'style.css';
4455
```
4556

46-
### CLI
57+
#### CLI
4758

4859
```bash
4960
webpack --module-bind 'css=style-loader!css-loader!group-css-media-queries-loader'
@@ -54,28 +65,16 @@ webpack --module-bind 'css=style-loader!css-loader!group-css-media-queries-loade
5465
import css_min from 'style.css';
5566
```
5667

57-
### Inline
68+
#### Inline
5869

5970
**In your application**
6071
```js
6172
import css_min from 'style-loader!css-loader!group-css-media-queries-loader!./style.css';
6273
```
6374

6475

65-
**Examples (for webpack 1.x):**
66-
**webpack.config.js**
67-
```js
68-
module: {
69-
loaders: [{
70-
test: /\.css$/,
71-
loader: 'css!group-css-media-queries'
72-
}]
73-
}
74-
```
75-
**In your application**
76-
```js
77-
var css = require('!raw!group-css-media-queries!./file.css'); // Just the CSS
78-
var css = require('!css!group-css-media-queries!./file.css'); // CSS with processed url(...)s
79-
```
76+
## Options
8077

78+
#### __`sourceMap`__ boolean `true` or `false`
8179

80+
Enable CSS source maps.

index.js

Lines changed: 0 additions & 1 deletion
This file was deleted.

lib/group-css-media-queries.js

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
'use strict';
2+
3+
var indexOf = Array.prototype.indexOf;
4+
var parseCss = require('css').parse;
5+
var stringifyCss = require('css').stringify;
6+
7+
module.exports = function (css, options) {
8+
var emToPxRatio, i, intervalRules, len, m, media, mediaRules, medias, onlyMaxRules, onlyMinRules, otherRules,
9+
parsed, ref, rootRules, rule, rules;
10+
parsed = parseCss(css, {source: options.source});
11+
medias = {};
12+
rootRules = [];
13+
ref = parsed.stylesheet.rules;
14+
for (i = 0, len = ref.length; i < len; i++) {
15+
rule = ref[i];
16+
if (rule.type === 'media') {
17+
if (!medias[rule.media]) {
18+
medias[rule.media] = [];
19+
}
20+
medias[rule.media] = medias[rule.media].concat(rule.rules);
21+
} else {
22+
rootRules.push(rule);
23+
}
24+
}
25+
mediaRules = [];
26+
for (media in medias) {
27+
rules = medias[media];
28+
rule = {
29+
type: "media",
30+
media: media,
31+
rules: rules
32+
};
33+
if (media.indexOf("min-width") !== -1) {
34+
m = media.match(/min-width:\s*(\d+)(px|em)?/);
35+
if (m && m[1]) {
36+
rule.minWidth = parseInt(m[1]);
37+
}
38+
if (m[2]) {
39+
rule.unit = m[2];
40+
}
41+
}
42+
if (media.indexOf("max-width") !== -1) {
43+
m = media.match(/max-width:\s*(\d+)(px|em)?/);
44+
if (m && m[1]) {
45+
rule.maxWidth = parseInt(m[1]);
46+
}
47+
if (m[2]) {
48+
rule.unit = m[2];
49+
}
50+
}
51+
mediaRules.push(rule);
52+
}
53+
onlyMinRules = mediaRules.filter(function (rule) {
54+
return rule.minWidth != null && rule.maxWidth == null;
55+
});
56+
onlyMaxRules = mediaRules.filter(function (rule) {
57+
return rule.maxWidth != null && rule.minWidth == null;
58+
});
59+
intervalRules = mediaRules.filter(function (rule) {
60+
return rule.minWidth != null && rule.maxWidth != null;
61+
});
62+
otherRules = mediaRules.filter(function (rule) {
63+
return indexOf.call(onlyMinRules.concat(onlyMaxRules).concat(intervalRules), rule) < 0;
64+
});
65+
emToPxRatio = 16;
66+
onlyMinRules.sort(function (a, b) {
67+
var aPxValue, bPxValue;
68+
aPxValue = a.minWidth;
69+
bPxValue = b.minWidth;
70+
if (a.unit === 'em') {
71+
aPxValue *= emToPxRatio;
72+
}
73+
if (b.unit === 'em') {
74+
bPxValue *= emToPxRatio;
75+
}
76+
return aPxValue - bPxValue;
77+
});
78+
onlyMaxRules.sort(function (a, b) {
79+
var aPxValue, bPxValue;
80+
aPxValue = a.maxWidth;
81+
bPxValue = b.maxWidth;
82+
if (a.unit === 'em') {
83+
aPxValue *= emToPxRatio;
84+
}
85+
if (b.unit === 'em') {
86+
bPxValue *= emToPxRatio;
87+
}
88+
return bPxValue - aPxValue;
89+
});
90+
parsed.stylesheet.rules = rootRules.concat(onlyMinRules).concat(onlyMaxRules).concat(intervalRules).concat(otherRules);
91+
return stringifyCss(parsed, {sourcemap: options.sourceMap});
92+
};

lib/index.js

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
"use strict";
2+
3+
var loaderUtils = require("loader-utils");
4+
5+
const getOptions = loaderUtils.getOptions;
6+
7+
const GroupCssMediaQueries = require("./group-css-media-queries");
8+
9+
function GroupCssMediaQueriesLoader(css, ownMap, meta) {
10+
var _ref = getOptions(this) || {},
11+
_ref$sourceMap = _ref.sourceMap;
12+
13+
const sourceMap = _ref$sourceMap === undefined ? this.sourceMap : _ref$sourceMap;
14+
15+
const callback = this.async();
16+
const source = this.resourcePath;
17+
18+
setTimeout(() => {
19+
try {
20+
const result = GroupCssMediaQueries(css, { source, sourceMap });
21+
if (sourceMap) {
22+
const code = result.code,
23+
map = result.map;
24+
25+
26+
return callback(null, code, map, meta);
27+
}
28+
return callback(null, result, ownMap, meta);
29+
} catch (error) {
30+
callback(error);
31+
}
32+
}, 0);
33+
}
34+
35+
module.exports = GroupCssMediaQueriesLoader;

package.json

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
{
22
"name": "group-css-media-queries-loader",
3-
"version": "1.0.4",
4-
"main": "index.js",
3+
"version": "2.0.0-alpha-0",
4+
"main": "lib/index.js",
5+
"files": ["lib"],
56
"keywords": [
67
"webpack",
78
"loader",
@@ -19,8 +20,15 @@
1920
"bugs": {
2021
"url": "https://github.com/retyui/group-css-media-queries-loader/issues"
2122
},
23+
"peerDependencies": {
24+
"webpack": ">=2.0.0"
25+
},
26+
"engines": {
27+
"node": ">=6.11.0"
28+
},
2229
"homepage": "https://github.com/retyui/group-css-media-queries-loader",
2330
"dependencies": {
24-
"group-css-media-queries": "^1.4.1"
31+
"css": "^2.2.3",
32+
"loader-utils": "^1.1.0"
2533
}
2634
}

0 commit comments

Comments
 (0)