Skip to content

Commit b52e429

Browse files
committed
Add support for haml.js as a jst template language by allowing newline characters as a configuration option (template_strip_newlines (on|off)).
1 parent 45fd7dd commit b52e429

5 files changed

Lines changed: 19 additions & 2 deletions

File tree

lib/jammit.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,8 @@ class << self
5050
:embed_assets, :package_assets, :compress_assets, :gzip_assets,
5151
:package_path, :mhtml_enabled, :include_jst_script, :config_path,
5252
:javascript_compressor, :compressor_options, :css_compressor_options,
53-
:template_extension, :template_extension_matcher, :allow_debugging
53+
:template_extension, :template_extension_matcher, :allow_debugging,
54+
:template_strip_newlines
5455
end
5556

5657
# The minimal required configuration.
@@ -74,6 +75,7 @@ def self.load_configuration(config_path, soft=false)
7475
@mhtml_enabled = @embed_assets && @embed_assets != "datauri"
7576
@compressor_options = symbolize_keys(conf[:compressor_options] || {})
7677
@css_compressor_options = symbolize_keys(conf[:css_compressor_options] || {})
78+
@template_strip_newlines= !(conf[:template_strip_newlines] == false)
7779
set_javascript_compressor(conf[:javascript_compressor])
7880
set_package_assets(conf[:package_assets])
7981
set_template_function(conf[:template_function])

lib/jammit/compressor.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,8 @@ def compile_jst(paths)
9898
base_path = find_base_path(paths)
9999
compiled = paths.map do |path|
100100
contents = read_binary_file(path)
101-
contents = contents.gsub(/\n/, '').gsub("'", '\\\\\'')
101+
newline = Jammit.template_strip_newlines ? "" : "\\n"
102+
contents = contents.gsub(/\n/, newline).gsub("'", '\\\\\'')
102103
name = template_name(path, base_path)
103104
"#{namespace}['#{name}'] = #{Jammit.template_function}('#{contents}');"
104105
end
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
template_strip_newlines: off
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
(function(){
2+
window.JST = window.JST || {};
3+
var template = function(str){var fn = new Function('obj', 'var p=[],print=function(){p.push.apply(p,arguments);};with(obj){p.push(\''+str.replace(/[\r\t\n]/g, " ").replace(/'(?=[^%]*%>)/g,"\t").split("'").join("\\'").split("\t").join("'").replace(/<%=(.+?)%>/g,"',$1,'").split("<%").join("');").split("%>").join("p.push('")+"');}return p.join('');"); return fn;};
4+
window.JST['template1'] = template('<a href="<%= to_somewhere %>"><%= saying_something %></a>');
5+
window.JST['template2'] = template('<% _([1,2,3]).each(function(num) { %>\n <li class="number">\n <%= num %>\n </li>\n<% }) %>');
6+
})();

test/unit/test_configuration.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,4 +62,11 @@ def test_jst_compilation
6262
assert packed == File.read('test/fixtures/jammed/jst_test.js')
6363
end
6464

65+
def test_jst_compilation_with_newlines
66+
Jammit.load_configuration('test/config/assets-jst-newlines.yml')
67+
assert !Jammit.template_strip_newlines
68+
packed = @compressor.compile_jst(glob('test/fixtures/src/*.jst'))
69+
assert packed == File.read('test/fixtures/jammed/jst_test_newlines.js')
70+
end
71+
6572
end

0 commit comments

Comments
 (0)