Sha256: 4340811d486e5acaaa6dc4e73ea11e384bd700737b4fdce816c583c61a93960c

Contents?: true

Size: 1.47 KB

Versions: 4

Compression:

Stored size: 1.47 KB

Contents

module Middleman::Extensions
  module MinifyJavascript
    class << self
      def registered(app)
        app.after_configuration do
          if !js_compressor
            require 'uglifier'
            set :js_compressor, ::Uglifier.new
          end
          
          use InlineJavascriptRack, :compressor => js_compressor
        end
      end
      alias :included :registered
    end

    class InlineJavascriptRack
      def initialize(app, options={})
        @app = app
        @compressor = options[:compressor]
      end

      def call(env)
        status, headers, response = @app.call(env)

        if env["PATH_INFO"].match(/\.html$/)
          uncompressed_source = case(response)
            when String
              response
            when Array
              response.join
            when Rack::Response
              response.body.join
            when Rack::File
              File.read(response.path)
          end

          minified = uncompressed_source.gsub(/(<scri.*?\/\/<!\[CDATA\[\n)(.*?)(\/\/\]\].*?<\/script>)/m) do |m|
            first = $1
            uncompressed_source = $2
            last = $3
            minified_js = @compressor.compress(uncompressed_source)

            first << minified_js << "\n" << last
          end
          headers["Content-Length"] = ::Rack::Utils.bytesize(minified).to_s
          response = [minified]
        end

        [status, headers, response]
      end
    end
  end
  
  register :minify_javascript, MinifyJavascript
end

Version data entries

4 entries across 4 versions & 2 rubygems

Version Path
middleman-more-3.0.0.alpha.7 lib/middleman-more/extensions/minify_javascript.rb
middleman-3.0.0.alpha.6 lib/middleman/extensions/minify_javascript.rb
middleman-3.0.0.alpha.5 lib/middleman/extensions/minify_javascript.rb
middleman-3.0.0.alpha.4 lib/middleman/extensions/minify_javascript.rb