coffee-sprites
Version:
CoffeeScript/JavaScript stylesheet-based sprite image engine.
103 lines (86 loc) • 2.93 kB
Markdown
**CoffeeSprites** is a plugin for Node.js [CoffeeStylesheets](https://github.com/mikesmullin/coffee-stylesheets)
which allows you to use functions like `sprite_position()`, `sprite_height()`, `image_width()`, `sprite_map()`, etc.
within your `*.css.coffee` markup to automatically fetch images and generate css sprites at render time.
If you come from the Ruby on Rails community, you will immediately recognize conventions from Spriting
with [Compass](http://compass-style.org/help/tutorials/spriting/)/SASS, originally [Lemonade](http://www.hagenburger.net/BLOG/Lemonade-CSS-Sprites-for-Sass-Compass.html).
```bash
sudo apt-get install libgd2-xpm-dev
sudo apt-get install pngcrush
npm install coffee-sprites
```
```coffeescript
CoffeeStylesheets = require 'coffee-stylesheets'
engine = new CoffeeStylesheets format: true
CoffeeSprites = require __dirname + 'coffee-sprites'
engine.use new CoffeeSprites
image_path: __dirname + '/precompile/assets/sprites/'
sprite_path: __dirname + '/static/public/assets/'
sprite_url: '/assets/'
stylesheet = ->
body ->
background '#eee'
color '#333'
margin '20px'
wigi = sprite_map 'wigi',
spacing: 10
s '#wigi', ->
background "url(#{sprite_url wigi}) no-repeat"
height sprite_height wigi, 'fly-3'
width sprite_width wigi, 'fly-3'
for i, v of 'walk-1 walk-2 walk-3 run-1 run-2 run-3 fly-1 fly-2 fly-3 fall jump'.split ' '
s '#wigi.wigi-'+i, ->
background_position sprite_position wigi, v
css = engine.render stylesheet, (err, css) ->
fs.writeFileSync __dirname + '/static/public/assets/application.css', css
```
Will output CSS like this:
```css
background: url(./wigi-2e192be7fd.png) no-repeat;
height: 112px;
width: 96px;
}
background-position: 0 -122px;
}
background-position: 0 -244px;
}
background-position: 0 -366px;
}
background-position: 0 -484px;
}
background-position: 0 -606px;
}
background-position: 0 -728px;
}
background-position: 0 -850px;
}
background-position: 0 -968px;
}
background-position: 0 0;
}
background-position: 0 -1086px;
}
background-position: 0 -1208px;
}
```
and CoffeeSprites will produce output like this:
* [./test/fixtures/static/public/assets/*.png](https://github.com/mikesmullin/coffee-sprites/blob/stable/test/fixtures/static/public/assets/)
For the latest and most comprehensive examples of input, see [./test/fixtures/precompile/assets/](https://github.com/mikesmullin/coffee-sprites/blob/stable/test/fixtures/precompile/assets/).
## Test
```bash
npm test # build coffee, run mocha unit test, run chrome browser integration test
```