public
Last active

Ember Handlebars Precompile

  • Download Gist
Assetfile.rb
Ruby
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
require 'execjs'
 
class HandlebarsFilter < Filter
class << self
def contents
@@contents ||= [File.read("headless-ember.js"), File.read("ember.js")].join("\n")
end
 
def context
@@context ||= ExecJS.compile(contents)
end
end
 
def generate_output(inputs, output)
inputs.each do |input|
name = File.basename(input.path, '.handlebars')
compiled = self.class.context.call("precompileEmberHandlebars", input.read)
output.write "\nEmber.TEMPLATES['#{name}'] = Ember.Handlebars.template(#{compiled});\n"
end
end
end
 
input "templates"
output "output"
 
match "*.handlebars" do
filter HandlebarsFilter
concat "templates.js"
end
headless-ember.js
JavaScript
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
// DOM
var Element = {};
Element.firstChild = function () { return Element; };
Element.innerHTML = function () { return Element; };
 
var document = { createRange: false, createElement: function() { return Element; } };
var window = this;
this.document = document;
 
// Console
var console = window.console = {};
console.log = console.info = console.warn = console.error = function(){};
 
// jQuery
var jQuery = function() { return jQuery; };
jQuery.ready = function() { return jQuery; };
jQuery.inArray = function() { return jQuery; };
jQuery.jquery = "1.7.1";
var $ = jQuery;
 
// Ember
function precompileEmberHandlebars(string) {
return Ember.Handlebars.precompile(string).toString();
}

By the way, this requires Ember master as of 1/13.

Oh, and a special thanks to @tchak for helping me figure this out!

I'm guessing that we should be able to replace Assetfile.rb with some equivalent js and run this through nodejs?

@garth, in theory yes. The main thing is that you have to have a full Ember running to get proper compilation. Unforunately, right now that requires stubbing some things out like in my headless-ember.js.

@wagenet I am getting error when compiling ember 1.0.0-pre.4 in this line https://github.com/emberjs/ember.js/blob/master/packages/ember-views/lib/system/utils.js#L24. Any workaround?

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.