Skip to content

Instantly share code, notes, and snippets.

@TikiTDO
Last active May 25, 2016 02:14
Show Gist options
  • Save TikiTDO/103ad49f6ddc9961ee774dea9871b726 to your computer and use it in GitHub Desktop.
Save TikiTDO/103ad49f6ddc9961ee774dea9871b726 to your computer and use it in GitHub Desktop.
Minify embedded javascripts in slim when not in development (Ruby 2+)
if !Rails.env.development? && defined? Slim::Embedded::JavaScriptEngine
module Slim
# Collector to extract JS from compiled templates
class JsCollector < Interpolation
def call(exp)
@collected = ''
super(exp)
@collected
end
def on_slim_interpolate(text)
@collected << self.class.new.call(super(text))
nil
end
def on_static(text)
@collected << text
nil
end
end
# Code responsible for applying minification
module JsMinifier
def js_collector
@js_collector ||= JsCollector.new
end
def collect_text(body)
js_collector.call(body)
end
def on_slim_embedded(*args)
ret = super(*args)
if defined? Uglifier
js_raw = collect_text(ret)
js_min = Uglifier.compile(js_raw)
ret[4] = [:static, js_min]
end
ret
end
end
# Default JS Embed handler
class Embedded::JavaScriptEngine
prepend JsMinifier
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment