handlebars 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/Gemfile +1 -2
- data/README.mdown +15 -7
- data/handlebars.gemspec +2 -5
- data/lib/handlebars.rb +5 -5
- data/lib/handlebars/context.rb +3 -12
- data/lib/handlebars/version.rb +1 -1
- data/spec/handlebars_spec.rb +1 -1
- metadata +47 -58
- data/.gitmodules +0 -3
- data/vendor/handlebars/.gitignore +0 -8
- data/vendor/handlebars/.jshintrc +0 -52
- data/vendor/handlebars/.npmignore +0 -10
- data/vendor/handlebars/.rspec +0 -1
- data/vendor/handlebars/Gemfile +0 -5
- data/vendor/handlebars/LICENSE +0 -19
- data/vendor/handlebars/README.markdown +0 -317
- data/vendor/handlebars/Rakefile +0 -109
- data/vendor/handlebars/bench/benchwarmer.js +0 -149
- data/vendor/handlebars/bench/handlebars.js +0 -172
- data/vendor/handlebars/bin/handlebars +0 -193
- data/vendor/handlebars/dist/handlebars.js +0 -2201
- data/vendor/handlebars/dist/handlebars.runtime.js +0 -321
- data/vendor/handlebars/lib/handlebars.js +0 -14
- data/vendor/handlebars/lib/handlebars/base.js +0 -154
- data/vendor/handlebars/lib/handlebars/compiler/ast.js +0 -133
- data/vendor/handlebars/lib/handlebars/compiler/base.js +0 -21
- data/vendor/handlebars/lib/handlebars/compiler/compiler.js +0 -1267
- data/vendor/handlebars/lib/handlebars/compiler/index.js +0 -7
- data/vendor/handlebars/lib/handlebars/compiler/printer.js +0 -131
- data/vendor/handlebars/lib/handlebars/compiler/visitor.js +0 -13
- data/vendor/handlebars/lib/handlebars/runtime.js +0 -88
- data/vendor/handlebars/lib/handlebars/utils.js +0 -67
- data/vendor/handlebars/package.json +0 -35
- data/vendor/handlebars/spec/acceptance_spec.rb +0 -101
- data/vendor/handlebars/spec/parser_spec.rb +0 -433
- data/vendor/handlebars/spec/qunit_spec.js +0 -1370
- data/vendor/handlebars/spec/spec_helper.rb +0 -157
- data/vendor/handlebars/spec/tokenizer_spec.rb +0 -301
- data/vendor/handlebars/src/handlebars.l +0 -53
- data/vendor/handlebars/src/handlebars.yy +0 -109
- data/vendor/handlebars/src/parser-prefix.js +0 -1
- data/vendor/handlebars/src/parser-suffix.js +0 -4
@@ -1,131 +0,0 @@
|
|
1
|
-
var Handlebars = require("./base");
|
2
|
-
|
3
|
-
// BEGIN(BROWSER)
|
4
|
-
Handlebars.PrintVisitor = function() { this.padding = 0; };
|
5
|
-
Handlebars.PrintVisitor.prototype = new Handlebars.Visitor();
|
6
|
-
|
7
|
-
Handlebars.PrintVisitor.prototype.pad = function(string, newline) {
|
8
|
-
var out = "";
|
9
|
-
|
10
|
-
for(var i=0,l=this.padding; i<l; i++) {
|
11
|
-
out = out + " ";
|
12
|
-
}
|
13
|
-
|
14
|
-
out = out + string;
|
15
|
-
|
16
|
-
if(newline !== false) { out = out + "\n"; }
|
17
|
-
return out;
|
18
|
-
};
|
19
|
-
|
20
|
-
Handlebars.PrintVisitor.prototype.program = function(program) {
|
21
|
-
var out = "",
|
22
|
-
statements = program.statements,
|
23
|
-
inverse = program.inverse,
|
24
|
-
i, l;
|
25
|
-
|
26
|
-
for(i=0, l=statements.length; i<l; i++) {
|
27
|
-
out = out + this.accept(statements[i]);
|
28
|
-
}
|
29
|
-
|
30
|
-
this.padding--;
|
31
|
-
|
32
|
-
return out;
|
33
|
-
};
|
34
|
-
|
35
|
-
Handlebars.PrintVisitor.prototype.block = function(block) {
|
36
|
-
var out = "";
|
37
|
-
|
38
|
-
out = out + this.pad("BLOCK:");
|
39
|
-
this.padding++;
|
40
|
-
out = out + this.accept(block.mustache);
|
41
|
-
if (block.program) {
|
42
|
-
out = out + this.pad("PROGRAM:");
|
43
|
-
this.padding++;
|
44
|
-
out = out + this.accept(block.program);
|
45
|
-
this.padding--;
|
46
|
-
}
|
47
|
-
if (block.inverse) {
|
48
|
-
if (block.program) { this.padding++; }
|
49
|
-
out = out + this.pad("{{^}}");
|
50
|
-
this.padding++;
|
51
|
-
out = out + this.accept(block.inverse);
|
52
|
-
this.padding--;
|
53
|
-
if (block.program) { this.padding--; }
|
54
|
-
}
|
55
|
-
this.padding--;
|
56
|
-
|
57
|
-
return out;
|
58
|
-
};
|
59
|
-
|
60
|
-
Handlebars.PrintVisitor.prototype.mustache = function(mustache) {
|
61
|
-
var params = mustache.params, paramStrings = [], hash;
|
62
|
-
|
63
|
-
for(var i=0, l=params.length; i<l; i++) {
|
64
|
-
paramStrings.push(this.accept(params[i]));
|
65
|
-
}
|
66
|
-
|
67
|
-
params = "[" + paramStrings.join(", ") + "]";
|
68
|
-
|
69
|
-
hash = mustache.hash ? " " + this.accept(mustache.hash) : "";
|
70
|
-
|
71
|
-
return this.pad("{{ " + this.accept(mustache.id) + " " + params + hash + " }}");
|
72
|
-
};
|
73
|
-
|
74
|
-
Handlebars.PrintVisitor.prototype.partial = function(partial) {
|
75
|
-
var content = this.accept(partial.partialName);
|
76
|
-
if(partial.context) { content = content + " " + this.accept(partial.context); }
|
77
|
-
return this.pad("{{> " + content + " }}");
|
78
|
-
};
|
79
|
-
|
80
|
-
Handlebars.PrintVisitor.prototype.hash = function(hash) {
|
81
|
-
var pairs = hash.pairs;
|
82
|
-
var joinedPairs = [], left, right;
|
83
|
-
|
84
|
-
for(var i=0, l=pairs.length; i<l; i++) {
|
85
|
-
left = pairs[i][0];
|
86
|
-
right = this.accept(pairs[i][1]);
|
87
|
-
joinedPairs.push( left + "=" + right );
|
88
|
-
}
|
89
|
-
|
90
|
-
return "HASH{" + joinedPairs.join(", ") + "}";
|
91
|
-
};
|
92
|
-
|
93
|
-
Handlebars.PrintVisitor.prototype.STRING = function(string) {
|
94
|
-
return '"' + string.string + '"';
|
95
|
-
};
|
96
|
-
|
97
|
-
Handlebars.PrintVisitor.prototype.INTEGER = function(integer) {
|
98
|
-
return "INTEGER{" + integer.integer + "}";
|
99
|
-
};
|
100
|
-
|
101
|
-
Handlebars.PrintVisitor.prototype.BOOLEAN = function(bool) {
|
102
|
-
return "BOOLEAN{" + bool.bool + "}";
|
103
|
-
};
|
104
|
-
|
105
|
-
Handlebars.PrintVisitor.prototype.ID = function(id) {
|
106
|
-
var path = id.parts.join("/");
|
107
|
-
if(id.parts.length > 1) {
|
108
|
-
return "PATH:" + path;
|
109
|
-
} else {
|
110
|
-
return "ID:" + path;
|
111
|
-
}
|
112
|
-
};
|
113
|
-
|
114
|
-
Handlebars.PrintVisitor.prototype.PARTIAL_NAME = function(partialName) {
|
115
|
-
return "PARTIAL:" + partialName.name;
|
116
|
-
};
|
117
|
-
|
118
|
-
Handlebars.PrintVisitor.prototype.DATA = function(data) {
|
119
|
-
return "@" + data.id;
|
120
|
-
};
|
121
|
-
|
122
|
-
Handlebars.PrintVisitor.prototype.content = function(content) {
|
123
|
-
return this.pad("CONTENT[ '" + content.string + "' ]");
|
124
|
-
};
|
125
|
-
|
126
|
-
Handlebars.PrintVisitor.prototype.comment = function(comment) {
|
127
|
-
return this.pad("{{! '" + comment.comment + "' }}");
|
128
|
-
};
|
129
|
-
// END(BROWSER)
|
130
|
-
|
131
|
-
exports.PrintVisitor = Handlebars.PrintVisitor;
|
@@ -1,88 +0,0 @@
|
|
1
|
-
var Handlebars = require("./base");
|
2
|
-
|
3
|
-
// BEGIN(BROWSER)
|
4
|
-
Handlebars.VM = {
|
5
|
-
template: function(templateSpec) {
|
6
|
-
// Just add water
|
7
|
-
var container = {
|
8
|
-
escapeExpression: Handlebars.Utils.escapeExpression,
|
9
|
-
invokePartial: Handlebars.VM.invokePartial,
|
10
|
-
programs: [],
|
11
|
-
program: function(i, fn, data) {
|
12
|
-
var programWrapper = this.programs[i];
|
13
|
-
if(data) {
|
14
|
-
return Handlebars.VM.program(fn, data);
|
15
|
-
} else if(programWrapper) {
|
16
|
-
return programWrapper;
|
17
|
-
} else {
|
18
|
-
programWrapper = this.programs[i] = Handlebars.VM.program(fn);
|
19
|
-
return programWrapper;
|
20
|
-
}
|
21
|
-
},
|
22
|
-
programWithDepth: Handlebars.VM.programWithDepth,
|
23
|
-
noop: Handlebars.VM.noop,
|
24
|
-
compilerInfo: null
|
25
|
-
};
|
26
|
-
|
27
|
-
return function(context, options) {
|
28
|
-
options = options || {};
|
29
|
-
var result = templateSpec.call(container, Handlebars, context, options.helpers, options.partials, options.data);
|
30
|
-
|
31
|
-
var compilerInfo = container.compilerInfo || [],
|
32
|
-
compilerRevision = compilerInfo[0] || 1,
|
33
|
-
currentRevision = Handlebars.COMPILER_REVISION;
|
34
|
-
|
35
|
-
if (compilerRevision !== currentRevision) {
|
36
|
-
if (compilerRevision < currentRevision) {
|
37
|
-
var runtimeVersions = Handlebars.REVISION_CHANGES[currentRevision],
|
38
|
-
compilerVersions = Handlebars.REVISION_CHANGES[compilerRevision];
|
39
|
-
throw "Template was precompiled with an older version of Handlebars than the current runtime. "+
|
40
|
-
"Please update your precompiler to a newer version ("+runtimeVersions+") or downgrade your runtime to an older version ("+compilerVersions+").";
|
41
|
-
} else {
|
42
|
-
// Use the embedded version info since the runtime doesn't know about this revision yet
|
43
|
-
throw "Template was precompiled with a newer version of Handlebars than the current runtime. "+
|
44
|
-
"Please update your runtime to a newer version ("+compilerInfo[1]+").";
|
45
|
-
}
|
46
|
-
}
|
47
|
-
|
48
|
-
return result;
|
49
|
-
};
|
50
|
-
},
|
51
|
-
|
52
|
-
programWithDepth: function(fn, data, $depth) {
|
53
|
-
var args = Array.prototype.slice.call(arguments, 2);
|
54
|
-
|
55
|
-
return function(context, options) {
|
56
|
-
options = options || {};
|
57
|
-
|
58
|
-
return fn.apply(this, [context, options.data || data].concat(args));
|
59
|
-
};
|
60
|
-
},
|
61
|
-
program: function(fn, data) {
|
62
|
-
return function(context, options) {
|
63
|
-
options = options || {};
|
64
|
-
|
65
|
-
return fn(context, options.data || data);
|
66
|
-
};
|
67
|
-
},
|
68
|
-
noop: function() { return ""; },
|
69
|
-
invokePartial: function(partial, name, context, helpers, partials, data) {
|
70
|
-
var options = { helpers: helpers, partials: partials, data: data };
|
71
|
-
|
72
|
-
if(partial === undefined) {
|
73
|
-
throw new Handlebars.Exception("The partial " + name + " could not be found");
|
74
|
-
} else if(partial instanceof Function) {
|
75
|
-
return partial(context, options);
|
76
|
-
} else if (!Handlebars.compile) {
|
77
|
-
throw new Handlebars.Exception("The partial " + name + " could not be compiled when running in runtime-only mode");
|
78
|
-
} else {
|
79
|
-
partials[name] = Handlebars.compile(partial, {data: data !== undefined});
|
80
|
-
return partials[name](context, options);
|
81
|
-
}
|
82
|
-
}
|
83
|
-
};
|
84
|
-
|
85
|
-
Handlebars.template = Handlebars.VM.template;
|
86
|
-
|
87
|
-
// END(BROWSER)
|
88
|
-
|
@@ -1,67 +0,0 @@
|
|
1
|
-
var Handlebars = require("./base");
|
2
|
-
|
3
|
-
// BEGIN(BROWSER)
|
4
|
-
|
5
|
-
var errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack'];
|
6
|
-
|
7
|
-
Handlebars.Exception = function(message) {
|
8
|
-
var tmp = Error.prototype.constructor.apply(this, arguments);
|
9
|
-
|
10
|
-
// Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.
|
11
|
-
for (var idx = 0; idx < errorProps.length; idx++) {
|
12
|
-
this[errorProps[idx]] = tmp[errorProps[idx]];
|
13
|
-
}
|
14
|
-
};
|
15
|
-
Handlebars.Exception.prototype = new Error();
|
16
|
-
|
17
|
-
// Build out our basic SafeString type
|
18
|
-
Handlebars.SafeString = function(string) {
|
19
|
-
this.string = string;
|
20
|
-
};
|
21
|
-
Handlebars.SafeString.prototype.toString = function() {
|
22
|
-
return this.string.toString();
|
23
|
-
};
|
24
|
-
|
25
|
-
(function() {
|
26
|
-
var escape = {
|
27
|
-
"&": "&",
|
28
|
-
"<": "<",
|
29
|
-
">": ">",
|
30
|
-
'"': """,
|
31
|
-
"'": "'",
|
32
|
-
"`": "`"
|
33
|
-
};
|
34
|
-
|
35
|
-
var badChars = /[&<>"'`]/g;
|
36
|
-
var possible = /[&<>"'`]/;
|
37
|
-
|
38
|
-
var escapeChar = function(chr) {
|
39
|
-
return escape[chr] || "&";
|
40
|
-
};
|
41
|
-
|
42
|
-
Handlebars.Utils = {
|
43
|
-
escapeExpression: function(string) {
|
44
|
-
// don't escape SafeStrings, since they're already safe
|
45
|
-
if (string instanceof Handlebars.SafeString) {
|
46
|
-
return string.toString();
|
47
|
-
} else if (string == null || string === false) {
|
48
|
-
return "";
|
49
|
-
}
|
50
|
-
|
51
|
-
if(!possible.test(string)) { return string; }
|
52
|
-
return string.replace(badChars, escapeChar);
|
53
|
-
},
|
54
|
-
|
55
|
-
isEmpty: function(value) {
|
56
|
-
if (!value && value !== 0) {
|
57
|
-
return true;
|
58
|
-
} else if(Object.prototype.toString.call(value) === "[object Array]" && value.length === 0) {
|
59
|
-
return true;
|
60
|
-
} else {
|
61
|
-
return false;
|
62
|
-
}
|
63
|
-
}
|
64
|
-
};
|
65
|
-
})();
|
66
|
-
// END(BROWSER)
|
67
|
-
|
@@ -1,35 +0,0 @@
|
|
1
|
-
{
|
2
|
-
"name": "handlebars",
|
3
|
-
"description": "Extension of the Mustache logicless template language",
|
4
|
-
"version": "1.0.8",
|
5
|
-
"homepage": "http://www.handlebarsjs.com/",
|
6
|
-
"keywords": [
|
7
|
-
"handlebars mustache template html"
|
8
|
-
],
|
9
|
-
"repository": {
|
10
|
-
"type": "git",
|
11
|
-
"url": "git://github.com/wycats/handlebars.js.git"
|
12
|
-
},
|
13
|
-
"engines": {
|
14
|
-
"node": ">=0.4.7"
|
15
|
-
},
|
16
|
-
"dependencies": {
|
17
|
-
"optimist": "~0.3",
|
18
|
-
"uglify-js": "~1.2"
|
19
|
-
},
|
20
|
-
"devDependencies": {
|
21
|
-
"benchmark": "~1.0",
|
22
|
-
"dust": "~0.3",
|
23
|
-
"jison": "~0.3",
|
24
|
-
"mocha": "*",
|
25
|
-
"mustache": "~0.7.2"
|
26
|
-
},
|
27
|
-
"main": "lib/handlebars.js",
|
28
|
-
"bin": {
|
29
|
-
"handlebars": "bin/handlebars"
|
30
|
-
},
|
31
|
-
"scripts": {
|
32
|
-
"test": "node_modules/.bin/mocha -u qunit spec/qunit_spec.js"
|
33
|
-
},
|
34
|
-
"optionalDependencies": {}
|
35
|
-
}
|
@@ -1,101 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
class TestContext
|
4
|
-
class TestModule
|
5
|
-
attr_reader :name, :tests
|
6
|
-
|
7
|
-
def initialize(name)
|
8
|
-
@name = name
|
9
|
-
@tests = []
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
attr_reader :modules
|
14
|
-
|
15
|
-
def initialize
|
16
|
-
@modules = []
|
17
|
-
end
|
18
|
-
|
19
|
-
def module(name)
|
20
|
-
@modules << TestModule.new(name)
|
21
|
-
end
|
22
|
-
|
23
|
-
def test(name, function)
|
24
|
-
@modules.last.tests << [name, function]
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
test_context = TestContext.new
|
29
|
-
js_context = Handlebars::Spec::CONTEXT
|
30
|
-
|
31
|
-
Module.new do
|
32
|
-
extend Test::Unit::Assertions
|
33
|
-
|
34
|
-
def self.js_backtrace(context)
|
35
|
-
begin
|
36
|
-
context.eval("throw")
|
37
|
-
rescue V8::JSError => e
|
38
|
-
return e.backtrace(:javascript)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
js_context["p"] = proc do |this, str|
|
43
|
-
p str
|
44
|
-
end
|
45
|
-
|
46
|
-
js_context["ok"] = proc do |this, ok, message|
|
47
|
-
js_context["$$RSPEC1$$"] = ok
|
48
|
-
|
49
|
-
result = js_context.eval("!!$$RSPEC1$$")
|
50
|
-
|
51
|
-
message ||= "#{ok} was not truthy"
|
52
|
-
|
53
|
-
unless result
|
54
|
-
backtrace = js_backtrace(js_context)
|
55
|
-
message << "\n#{backtrace.join("\n")}"
|
56
|
-
end
|
57
|
-
|
58
|
-
assert result, message
|
59
|
-
end
|
60
|
-
|
61
|
-
js_context["equals"] = proc do |this, first, second, message|
|
62
|
-
js_context["$$RSPEC1$$"] = first
|
63
|
-
js_context["$$RSPEC2$$"] = second
|
64
|
-
|
65
|
-
result = js_context.eval("$$RSPEC1$$ == $$RSPEC2$$")
|
66
|
-
|
67
|
-
additional_message = "#{first.inspect} did not == #{second.inspect}"
|
68
|
-
message = message ? "#{message} (#{additional_message})" : additional_message
|
69
|
-
|
70
|
-
unless result
|
71
|
-
backtrace = js_backtrace(js_context)
|
72
|
-
message << "\n#{backtrace.join("\n")}"
|
73
|
-
end
|
74
|
-
|
75
|
-
assert result, message
|
76
|
-
end
|
77
|
-
|
78
|
-
js_context["equal"] = js_context["equals"]
|
79
|
-
|
80
|
-
js_context["suite"] = proc do |this, name|
|
81
|
-
test_context.module(name)
|
82
|
-
end
|
83
|
-
|
84
|
-
js_context["test"] = proc do |this, name, function|
|
85
|
-
test_context.test(name, function)
|
86
|
-
end
|
87
|
-
|
88
|
-
local = Regexp.escape(File.expand_path(Dir.pwd))
|
89
|
-
qunit_spec = File.expand_path("../qunit_spec.js", __FILE__)
|
90
|
-
js_context.load(qunit_spec.sub(/^#{local}\//, ''))
|
91
|
-
end
|
92
|
-
|
93
|
-
test_context.modules.each do |mod|
|
94
|
-
describe mod.name do
|
95
|
-
mod.tests.each do |name, function|
|
96
|
-
it name do
|
97
|
-
function.call
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|