Created
January 13, 2012 20:37
-
-
Save wagenet/1608575 to your computer and use it in GitHub Desktop.
Ember Handlebars Precompile
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
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 |
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
// 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(); | |
} |
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?
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
By the way, this requires Ember master as of 1/13.