require "jekyll-press/version" require 'html_press' require 'multi_css' require 'multi_js' module Jekyll module Compressor def exclude?(dest, dest_path) res = false file_name = dest_path.slice(dest.length+1..dest_path.length) exclude = @site.config['jekyll-press'] && @site.config['jekyll-press']['exclude'] if exclude if exclude.is_a? String exclude = [exclude] end exclude.each do |e| if e == file_name || File.fnmatch(e, file_name) res = true break end end end res end def output_file(dest, content) FileUtils.mkdir_p(File.dirname(dest)) File.open(dest, 'w') do |f| f.write(content) end end def output_html(path, content) output_file(path, HtmlPress.press(content, @site.config['jekyll-press'] && @site.config['jekyll-press']['html_options'] || {})) end def output_js(path, content) output_file(path, MultiJs.compile(content, @site.config['jekyll-press'] && @site.config['jekyll-press']['js_options'] || {})) rescue MultiJs::ParseError => e warn "Warning: parse error in #{path}. Don't panic - copying initial file" warn "Details: #{e.message.strip}" output_file(path, content) end def output_css(path, content) output_file(path, MultiCss.min(content, @site.config['jekyll-press'] && @site.config['jekyll-press']['css_options'] || {})) rescue MultiCss::ParseError => e warn "Warning: parse error in #{path}. Don't panic - copying initial file" warn "Details: #{e.message.strip}" output_file(path, content) end end class Post include Compressor def write(dest) dest_path = destination(dest) output_html(dest_path, output) end end class Document include Compressor def write(dest) dest_path = destination(dest) if (File.extname(dest_path) == '.html') output_html(dest_path, output) end end end class Page include Compressor def write(dest) dest_path = destination(dest) if exclude?(dest, dest_path) output_file(dest_path, output) else output_html(dest_path, output) end end end class StaticFile include Compressor def copy_file(path, dest_path) FileUtils.mkdir_p(File.dirname(dest_path)) FileUtils.cp(path, dest_path) end def write(dest) dest_path = destination(dest) return false if File.exist?(dest_path) and !modified? @@mtimes[path] = mtime case File.extname(dest_path) when '.js' if dest_path =~ /.min.js$/ copy_file(path, dest_path) else output_js(dest_path, File.read(path)) end when '.css' if dest_path =~ /.min.css$/ copy_file(path, dest_path) else output_css(dest_path, File.read(path)) end else copy_file(path, dest_path) end true end end end