-
-
Notifications
You must be signed in to change notification settings - Fork 251
/
hjs_template.rb
48 lines (36 loc) · 1.19 KB
/
hjs_template.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
require 'tilt/template'
require "execjs"
module EmberRails
# = Sprockets engine for HandlebarsJS templates
class HjsTemplate < Tilt::Template
def self.default_mime_type
'application/javascript'
end
def initialize_engine
end
def prepare
end
# Generates Javascript code from a HandlebarsJS template.
# The Ember template name is derived from the lowercase logical asset path
# by replacing non-alphanumeric characters by underscores.
def evaluate(scope, locals, &block)
t = data
if scope.pathname.to_s =~ /\.mustache\.(handlebars|hjs)/
t = t.gsub(/\{\{(\w[^\}\}]+)\}\}/){ |x| "{{unbound #{$1}}}" }
end
"Ember.TEMPLATES[\"#{scope.logical_path}\"] = Handlebars.template(#{precompile t});\n"
end
private
def precompile(template)
runtime.call("EmberRails.precompile", template)
end
def runtime
Thread.current[:hjs_runtime] ||= ExecJS.compile(ember)
end
def ember
[ "ember-precompiler.js", "ember.js" ].map do |name|
File.read(File.expand_path(File.join(__FILE__, "..", "..", "..", "vendor/assets/javascripts/#{name}")))
end.join("\n")
end
end
end