Skip to content

Commit

Permalink
initial working version
Browse files Browse the repository at this point in the history
  • Loading branch information
Ivan Kravchenko committed Oct 30, 2013
1 parent 8c60a48 commit 7bc6560
Show file tree
Hide file tree
Showing 5 changed files with 172 additions and 0 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Expand Up @@ -13,3 +13,5 @@ results

npm-debug.log
node_modules

index.js
68 changes: 68 additions & 0 deletions README.md
Expand Up @@ -2,3 +2,71 @@ group-css-media-queries
=======================

CSS postprocessing: group media queries. Useful for postprocessing preprocessed CSS files.

# What is it?

You have input.css (take note on similar media query):
```css
.header-main {
background-image: url("/images/branding/logo.main.png");
}
@media all and (-webkit-min-device-pixel-ratio:1.5),(min--moz-device-pixel-ratio:1.5),(-o-min-device-pixel-ratio:1.5/1),(min-device-pixel-ratio:1.5),(min-resolution:138dpi),(min-resolution:1.5dppx) {
.header-main {
background-image: url("/images/branding/logo.main@2x.png");
-webkit-background-size: auto auto;
-moz-background-size: auto auto;
background-size: auto auto;
}
}
.footer-main {
background-image: url("/images/branding/logo.main.png");
}
@media all and (-webkit-min-device-pixel-ratio:1.5),(min--moz-device-pixel-ratio:1.5),(-o-min-device-pixel-ratio:1.5/1),(min-device-pixel-ratio:1.5),(min-resolution:138dpi),(min-resolution:1.5dppx) {
.footer-main {
background-image: url("/images/branding/logo.main@2x.png");
-webkit-background-size: auto auto;
-moz-background-size: auto auto;
background-size: auto auto;
}
}
```

Run this utility:
```
group-css-media-queries input.css output.css
```

The result is output.css:
```css
.header-main {
background-image: url("/images/branding/logo.main.png");
}

.footer-main {
background-image: url("/images/branding/logo.main.png");
}

@media all and (-webkit-min-device-pixel-ratio:1.5),(min--moz-device-pixel-ratio:1.5),(-o-min-device-pixel-ratio:1.5/1),(min-device-pixel-ratio:1.5),(min-resolution:138dpi),(min-resolution:1.5dppx) {
.header-main {
background-image: url("/images/branding/logo.main@2x.png");
-webkit-background-size: auto auto;
-moz-background-size: auto auto;
background-size: auto auto;
}

.footer-main {
background-image: url("/images/branding/logo.main@2x.png");
-webkit-background-size: auto auto;
-moz-background-size: auto auto;
background-size: auto auto;
}
}
```

Voila!

# Installing

```
npm install -g group-css-media-queries
```
39 changes: 39 additions & 0 deletions bin/group-css-media-queries
@@ -0,0 +1,39 @@
#!/usr/bin/env node

var fs = require('fs');

var main = require(__dirname + '/../');


var input = function(cb) {
var inputFilename = process.argv[2];
if (inputFilename) {
cb(fs.readFileSync(inputFilename, "utf8"));
} else {
var data = "";
process.stdin.resume();
process.stdin.setEncoding('utf8');

process.stdin.on('data', function(chunk) {
data += chunk;
});

process.stdin.on('end', function() {
cb(data);
});
}
};

var output = function(data) {
var outputFilename = process.argv[3];
if (outputFilename) {
fs.writeFileSync(outputFilename, data);
} else {
console.log(data);
}
};

input(function(data) {
result = main(data);
output(result);
});
31 changes: 31 additions & 0 deletions index.coffee
@@ -0,0 +1,31 @@
# take gorgeous visionmedia's css utilities
parse = require 'css-parse'
stringify = require 'css-stringify'

module.exports = (css) ->
# parse it
parsed = parse css

# extract and group medias and root rules
medias = {}
rootRules = []
for rule in parsed.stylesheet.rules
if rule.type is 'media'
medias[rule.media] = [] if not medias[rule.media]
medias[rule.media] = medias[rule.media].concat rule.rules
else
rootRules.push rule

# generate media rules
mediaRules = []
for media, rules of medias
mediaRules.push
type: "media"
media: media
rules: rules

# modify parsed AST
parsed.stylesheet.rules = rootRules.concat mediaRules

# output
stringify parsed
32 changes: 32 additions & 0 deletions package.json
@@ -0,0 +1,32 @@
{
"name": "group-css-media-queries",
"description": "CSS postprocessing: group media queries. Useful for postprocessing preprocessed CSS files :)",
"keywords": [ "css", "group", "media", "queries", "postprocessing", "postprocessor" ],
"license": "MIT",
"author": {
"name": "Ivan Kravchenko",
"email": "i@se7ensky.com"
},
"repository": {
"type": "git",
"url": "https://github.com/Se7enSky/group-css-media-queries.git"
},
"version": "1.0.0",
"main": "index",
"bin": {
"group-css-media-queries": "./bin/group-css-media-queries"
},
"dependencies": {
"css-parse": "*",
"css-stringify": "*"
},
"engines": {
"node": ">=0.8.0"
},
"devDependencies": {
"coffee-script": "*"
},
"scripts": {
"prepublish": "./node_modules/.bin/coffee -c index.coffee"
}
}

0 comments on commit 7bc6560

Please sign in to comment.