Created — forked from andyfowler/lessjs.rb

Embed URL

HTTPS clone URL

SSH clone URL

You can clone with HTTPS or SSH.

Download Gist

Jekyll plugin to render LESS (lesscss.org) files during generation.

View lessjs.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
module Jekyll
class LessCssFile < StaticFile
def write(dest)
# do nothing
end
end
class LessJsGenerator < Generator
safe true
priority :low
def generate(site)
src_root = site.config['source']
dest_root = site.config['destination']
less_ext = /\.less$/i
lessc_bin = site.config['lessc'] || 'lessc'
# static_files have already been filtered against excludes, etc.
site.static_files.each do |sf|
next if not sf.path =~ less_ext
site.static_files.delete(sf)
less_path = sf.path
css_path = less_path.gsub(less_ext, '.css').gsub(src_root, dest_root)
relative_dir = File.dirname(css_path).gsub(dest_root, '')
file_name = File.basename(css_path)
FileUtils.mkdir_p(File.dirname(css_path))
begin
command = [lessc_bin,
less_path,
css_path
].join(' ')
puts 'Compiling LESS: ' + command
puts `#{command}`
raise "LESS compilation error" if $?.to_i != 0
end
# Add this output file so it won't be "cleaned away"
site.static_files << LessCssFile.new(site, site.source, relative_dir, file_name)
end
end
end
end
Owner

Added the "LessCssFile" subclass of a StaticFile so that the newly generated CSS file won't be automatically "cleaned" out of the output directory after rendering.

Cool! I'm planning to bundle this up with a few other plugins and stick it in a repo. There's an open ticket on the Jekyll project discussing workarounds for the new cleaning -- this is actually one of the cleaner workarounds. See https://github.com/mojombo/jekyll/issues/268 for that.

Hello. I have found a bug in this logic, at least when I am running it locally. By modifying the site.static_files array in the loop there is the potential for processing elements twice or skipping some entirely.

My fix is to use a copy of the array, so:
site.static_files.dup.each do

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.