Class: Middleman::Extensions::MinifyJavaScript
Overview
Minify JavaScript Extension
Constant Summary
collapse
- INLINE_JS_REGEX =
%r{(<script[^>]*>\s*(?://(?:(?:<!--)|(?:<!\[CDATA\[))\n)?)(.*?)((?:(?:\n\s*)?//(?:(?:-->)|(?:\]\]>)))?\s*</script>)}m.freeze
Constants included
from Contracts
Contracts::PATH_MATCHER
Instance Attribute Summary
#app, #options
Instance Method Summary
collapse
activated_extension, #add_exposed_to_context, #after_build, #after_configuration, after_extension_activated, #after_extension_activated, #before_build, #before_configuration, clear_after_extension_callbacks, config, define_setting, expose_to_application, expose_to_config, expose_to_template, global_config, helpers, #manipulate_resource_list, option, #ready, resources
Methods included from Contracts
#Contract
Constructor Details
#initialize(app, options_hash = ::Middleman::EMPTY_HASH, &block) ⇒ MinifyJavaScript
Returns a new instance of MinifyJavaScript.
19
20
21
22
23
24
25
26
|
# File 'middleman-core/lib/middleman-core/extensions/minify_javascript.rb', line 19
def initialize(app, options_hash = ::Middleman::EMPTY_HASH, &block)
super
@ignore = Array(options[:ignore]) + [/\.min\./]
@compressor = options[:compressor]
@compressor = @compressor.to_proc if @compressor.respond_to? :to_proc
@compressor = @compressor.call if @compressor.is_a? Proc
end
|
Instance Method Details
#ignore?(path) ⇒ Boolean
42
43
44
|
# File 'middleman-core/lib/middleman-core/extensions/minify_javascript.rb', line 42
def ignore?(path)
@ignore.any? { |ignore| ::Middleman::Util.path_match(ignore, path) }
end
|
#manipulate_resource_list_container!(resource_list) ⇒ Object
29
30
31
32
33
34
35
36
37
38
|
# File 'middleman-core/lib/middleman-core/extensions/minify_javascript.rb', line 29
def manipulate_resource_list_container!(resource_list)
resource_list.by_binary(false).each do |r|
type = r.content_type.try(:slice, /^[^;]*/)
if options[:inline] && minifiable_inline?(type)
r.add_filter method(:minify_inline)
elsif minifiable?(type) && !ignore?(r.destination_path)
r.add_filter method(:minify)
end
end
end
|
#minifiable?(content_type) ⇒ Boolean
49
50
51
|
# File 'middleman-core/lib/middleman-core/extensions/minify_javascript.rb', line 49
def minifiable?(content_type)
options[:content_types].include?(content_type)
end
|
#minifiable_inline?(content_type) ⇒ Boolean
56
57
58
|
# File 'middleman-core/lib/middleman-core/extensions/minify_javascript.rb', line 56
def minifiable_inline?(content_type)
options[:inline_content_types].include?(content_type)
end
|
#minify(content) ⇒ Object
63
64
65
66
67
68
|
# File 'middleman-core/lib/middleman-core/extensions/minify_javascript.rb', line 63
def minify(content)
@compressor.compress(content)
rescue ::ExecJS::ProgramError => e
warn "WARNING: Couldn't compress JavaScript : #{e.message}"
content
end
|
#minify_inline(content) ⇒ Object
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
# File 'middleman-core/lib/middleman-core/extensions/minify_javascript.rb', line 73
def minify_inline(content)
content.gsub(INLINE_JS_REGEX) do |match|
first = Regexp.last_match(1)
inline_content = Regexp.last_match(2)
last = Regexp.last_match(3)
if !first.include?('type=') || first.include?('text/javascript')
first + minify(inline_content) + last
else
match
end
end
end
|