Skip to content

Instantly share code, notes, and snippets.

@koron
Created April 20, 2014 14:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save koron/11115808 to your computer and use it in GitHub Desktop.
Save koron/11115808 to your computer and use it in GitHub Desktop.
Jekyll plugin to compile *.less to *.css by using Less.js
require 'open3'
module LessCssJS
class LessCssGenerator < Jekyll::Generator
def generate(site)
site.static_files.clone.each { |f|
if f.kind_of?(Jekyll::StaticFile) and File.extname(f.path) == '.less'
css = LessCssFile.new(site, f)
site.static_files.delete(f)
site.static_files << css
end
}
end
end
class LessCssFile < Jekyll::StaticFile
def initialize(site, sfile)
dir = File.dirname(sfile.path).sub(site.source, '')
name = File.basename(sfile.path)
super(site, site.source, dir, name)
end
def destination(dest)
return File.join(dest, @dir, @name.sub(/less$/, 'css'))
end
def write(dest)
dest_path = destination(dest)
#return false if File.exist?(dest_path) and !modified?
@@mtimes[path] = mtime
FileUtils.mkdir_p(File.dirname(dest_path))
# Determine include path.
includes = [ '_lesscss' ]
if RUBY_PLATFORM =~ /(mswin|mingw|cygwin|bccwin)/
ipath = includes.join(';')
else
ipath = includes.join(':')
end
# Execute lessc command.
cmd = "lessc --no-color --include-path=#{ipath} #{path} #{dest_path}"
out, err, status = Open3.capture3(cmd);
if status.exitstatus != 0
raise "Lesscss failed.\n#{err}"
end
return true
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment