Last active
May 25, 2016 02:14
-
-
Save TikiTDO/103ad49f6ddc9961ee774dea9871b726 to your computer and use it in GitHub Desktop.
Minify embedded javascripts in slim when not in development (Ruby 2+)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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