-
-
Save wolfeidau/960150 to your computer and use it in GitHub Desktop.
| module Jekyll | |
| # Sass plugin to convert .scss to .css | |
| # | |
| # Note: This is configured to use the new css like syntax available in sass. | |
| require 'sass' | |
| class SassConverter < Converter | |
| safe true | |
| priority :low | |
| def matches(ext) | |
| ext =~ /scss/i | |
| end | |
| def output_ext(ext) | |
| ".css" | |
| end | |
| def convert(content) | |
| begin | |
| puts "Performing Sass Conversion." | |
| engine = Sass::Engine.new(content, :syntax => :scss, :load_paths => ["./css/"]) | |
| engine.render | |
| rescue StandardError => e | |
| puts "!!! SASS Error: " + e.message | |
| end | |
| end | |
| end | |
| end |
To change the way sass outputs css I found I needed to add a style option where you instantiate the Sass::Engine. To use the compressed output I used:
engine = Sass::Engine.new( content, :syntax => :scss, :load_paths => ["./css/"], :style => :compressed )
Without it the output is the default nested style, however you can choose either :expanded, :compact or :compressed as per the Output Style options from the sass reference page.
Thanks for this. I´ve added an additional line in the rescue clause to produce a visible error on the page itself and not only in the log file. Helped me a lot during development:
rescue StandardError => e
error = "!!! SASS Error: #{e.message} !!!"
puts error
"body:before{ content:\"#{error}\"; color: red; font-size: 20px; }"
endThis may be overkill, but for a more complete solution you may want to use an asset pipeline. The Jekyll Asset Pipeline gem supports most languages (e.g. Scss, Less, CoffeeScript, Erb, etc.) and has a bunch of features (e.g. asset tagging, minification, gzipping, etc.) that set it apart. It also seems to be the fastest growing Jekyll-related gem these days, which I take to mean that it is gaining traction in the community.
I added a colorize function to highlight sass errors in the console output:
def colorize(text, color)
"#{color}#{text}\e[0m"
endThen applyied it on the error thrown by Sass:
puts colorize("SASS Error: "+e.message, "\e[31m")e[31m = red
Run jekyll serve --watch to see the errors colorized in red.
Cheers! :)
Thanks @wolfeidau. I have put this plugin in the _plugins directory of my jekyll project but I can't figure out why my scss files are not converted. Am I missing something?
Thanks!
Thanks @wolfeidau. I have put this plugin in the _plugins directory of my jekyll project but I can't figure out why my scss files are not converted. Am I missing something?
Thanks!
I'm in the same boat as @Omarfouad. I've added it and nothing is converting for me. What am I missing?
@cjdsie, @Omarfouad. I think you have to make sure you include a YAML front-matter statement at the top of any file (in this case a scss file) that you want to convert.
This is mentioned in Jekyll's Plugin page under Converters: "Jekyll will only convert files that have a YAML header at the top, even for converters you add using a plugin."
For example:
---
title: stylesheet.scss
---
body { background: red; }
That seemed to do the trick for me.
Front matter can be empty, thus
---
---should work as well.
Had to change
engine = Sass::Engine.new(content, :syntax => :scss, :load_paths => ["./css/"])
to
engine = Sass::Engine.new(content, :syntax => :scss, :load_paths => ["#{@config['source']}/css/"])
to support running jekyll build with a different --source flag
Thanks a lot @dburrows much appreciated, I have updated the GIST and will push it into my site!