class Rack::PageSpeed::Filters::MinifyJavaScripts

Public Instance Methods

execute!(document) click to toggle source
# File lib/rack/pagespeed/filters/minify_javascripts.rb, line 13
def execute! document
  nodes = document.css('script')
  return false unless nodes.count > 0
  nodes.each do |node|
    if !node['src']
      node.content = JSMin.minify node.content
    else
      if match = %r(^/rack-pagespeed-(.*)).match(node['src'])
        store = @options[:store]
        store[match[1]] = JSMin.minify store[match[1]]
      else
        status, headers, body = content_for node
        next unless node.name == 'script' && status == 200
        javascript = ""; body.each do |part| javascript << part end
        hash = Digest::MD5.hexdigest headers['Last-Modified'] + javascript
        compressed = Nokogiri::XML::Node.new 'script', document
        compressed['src'] = "/rack-pagespeed-#{hash}.js"
        @options[:store]["#{hash}.js"] = JSMin.minify javascript
        node.before compressed
        node.remove
      end        
    end
  end
end