Comparing version 0.4.3 to 0.5.0
0.5.0 / 2011-11-20 | ||
================== | ||
* Added express 3.x support | ||
* Added ejs.renderFile() | ||
* Added 'json' filter | ||
* Fixed tests for 0.5.x | ||
0.4.3 / 2011-06-20 | ||
@@ -3,0 +11,0 @@ ================== |
@@ -18,3 +18,3 @@ | ||
exports.version = '0.4.3'; | ||
exports.version = '0.5.0'; | ||
@@ -126,3 +126,3 @@ /** | ||
var prefix, postfix, line = '__stack.lineno=' + lineno; | ||
switch (str[i]) { | ||
switch (str.substr(i, 1)) { | ||
case '=': | ||
@@ -149,17 +149,17 @@ prefix = "', escape((" + line + ', '; | ||
while (~(n = js.indexOf("\n", n))) n++, lineno++; | ||
if (js[0] == ':') js = filtered(js); | ||
if (js.substr(0, 1) == ':') js = filtered(js); | ||
buf.push(prefix, js, postfix); | ||
i += end - start + close.length - 1; | ||
} else if (str[i] == "\\") { | ||
} else if (str.substr(i, 1) == "\\") { | ||
buf.push("\\\\"); | ||
} else if (str[i] == "'") { | ||
} else if (str.substr(i, 1) == "'") { | ||
buf.push("\\'"); | ||
} else if (str[i] == "\r") { | ||
} else if (str.substr(i, 1) == "\r") { | ||
buf.push(" "); | ||
} else if (str[i] == "\n") { | ||
} else if (str.substr(i, 1) == "\n") { | ||
buf.push("\\n"); | ||
lineno++; | ||
} else { | ||
buf.push(str[i]); | ||
buf.push(str.substr(i, 1)); | ||
} | ||
@@ -242,2 +242,36 @@ } | ||
/** | ||
* Render an EJS file at the given `path` and callback `fn(err, str)`. | ||
* | ||
* @param {String} path | ||
* @param {Object|Function} options or callback | ||
* @param {Function} fn | ||
* @api public | ||
*/ | ||
exports.renderFile = function(path, options, fn){ | ||
var key = path + ':string'; | ||
if ('function' == typeof options) { | ||
fn = options, options = {}; | ||
} | ||
options.filename = path; | ||
try { | ||
var str = options.cache | ||
? exports.cache[key] || (exports.cache[key] = fs.readFileSync(path, 'utf8')) | ||
: fs.readFileSync(path, 'utf8'); | ||
options.locals = options; | ||
fn(null, exports.render(str, options)); | ||
} catch (err) { | ||
fn(err); | ||
} | ||
}; | ||
// express support | ||
exports.__express = exports.renderFile; | ||
/** | ||
* Expose to require(). | ||
@@ -250,3 +284,3 @@ */ | ||
module._compile(compile(source, {}), filename); | ||
}; | ||
}; | ||
} else if (require.registerExtension) { | ||
@@ -253,0 +287,0 @@ require.registerExtension('.ejs', function(src) { |
{ | ||
"name": "ejs", | ||
"description": "Embedded JavaScript templates", | ||
"version": "0.4.3", | ||
"version": "0.5.0", | ||
"author": "TJ Holowaychuk <tj@vision-media.ca>", | ||
"keywords": ["template", "engine", "ejs"], | ||
"devDependencies": { | ||
"expresso": "0.9.2" | ||
}, | ||
"main": "./lib/ejs.js" | ||
} |
@@ -45,3 +45,3 @@ | ||
## Custom Tags | ||
## Custom tags | ||
@@ -89,3 +89,3 @@ Custom tags can also be applied globally: | ||
## Filter List | ||
## Filter list | ||
@@ -117,2 +117,12 @@ Currently these filters are available: | ||
## Adding filters | ||
To add a filter simply add a method to the `.filters` object: | ||
```js | ||
ejs.filters.last = function(obj) { | ||
return obj[obj.length - 1]; | ||
}; | ||
``` | ||
## client-side support | ||
@@ -119,0 +129,0 @@ |
@@ -150,3 +150,3 @@ | ||
return function(p){ | ||
if ('.' != p[0]) return require(p); | ||
if ('.' != p.substr(0, 1)) return require(p); | ||
@@ -153,0 +153,0 @@ var path = parent.split('/') |
@@ -6,14 +6,15 @@ | ||
var ejs = require('ejs'); | ||
var ejs = require('../') | ||
, assert = require('assert'); | ||
module.exports = { | ||
'test .version': function(assert){ | ||
'test .version': function(){ | ||
assert.ok(/^\d+\.\d+\.\d+$/.test(ejs.version), 'Test .version format'); | ||
}, | ||
'test html': function(assert){ | ||
'test html': function(){ | ||
assert.equal('<p>yay</p>', ejs.render('<p>yay</p>')); | ||
}, | ||
'test buffered code': function(assert){ | ||
'test buffered code': function(){ | ||
var html = '<p>tj</p>', | ||
@@ -25,3 +26,3 @@ str = '<p><%= name %></p>', | ||
'test unbuffered code': function(assert){ | ||
'test unbuffered code': function(){ | ||
var html = '<p>tj</p>', | ||
@@ -33,3 +34,3 @@ str = '<% if (name) { %><p><%= name %></p><% } %>', | ||
'test `scope` option': function(assert){ | ||
'test `scope` option': function(){ | ||
var html = '<p>tj</p>', | ||
@@ -40,3 +41,3 @@ str = '<p><%= this %></p>'; | ||
'test escaping': function(assert){ | ||
'test escaping': function(){ | ||
assert.equal('<script>', ejs.render('<%= "<script>" %>')); | ||
@@ -46,3 +47,3 @@ assert.equal('<script>', ejs.render('<%- "<script>" %>')); | ||
'test newlines': function(assert){ | ||
'test newlines': function(){ | ||
var html = '\n<p>tj</p>\n<p>tj@sencha.com</p>', | ||
@@ -54,3 +55,3 @@ str = '<% if (name) { %>\n<p><%= name %></p>\n<p><%= email %></p><% } %>', | ||
'test single quotes': function(assert){ | ||
'test single quotes': function(){ | ||
var html = '<p>WAHOO</p>', | ||
@@ -62,3 +63,3 @@ str = "<p><%= up('wahoo') %></p>", | ||
'test single quotes in the html': function(assert){ | ||
'test single quotes in the html': function(){ | ||
var html = '<p>WAHOO that\'s cool</p>', | ||
@@ -70,3 +71,3 @@ str = '<p><%= up(\'wahoo\') %> that\'s cool</p>', | ||
'test multiple single quotes': function(assert) { | ||
'test multiple single quotes': function() { | ||
var html = "<p>couldn't shouldn't can't</p>", | ||
@@ -77,3 +78,3 @@ str = "<p>couldn't shouldn't can't</p>"; | ||
'test single quotes inside tags': function(assert) { | ||
'test single quotes inside tags': function() { | ||
var html = '<p>string</p>', | ||
@@ -84,3 +85,3 @@ str = "<p><%= 'string' %></p>"; | ||
'test back-slashes in the document': function(assert) { | ||
'test back-slashes in the document': function() { | ||
var html = "<p>backslash: '\\'</p>", | ||
@@ -91,3 +92,3 @@ str = "<p>backslash: '\\'</p>"; | ||
'test double quotes': function(assert){ | ||
'test double quotes': function(){ | ||
var html = '<p>WAHOO</p>', | ||
@@ -99,3 +100,3 @@ str = '<p><%= up("wahoo") %></p>', | ||
'test multiple double quotes': function(assert) { | ||
'test multiple double quotes': function() { | ||
var html = '<p>just a "test" wahoo</p>', | ||
@@ -106,3 +107,3 @@ str = '<p>just a "test" wahoo</p>'; | ||
'test whitespace': function(assert){ | ||
'test whitespace': function(){ | ||
var html = '<p>foo</p>', | ||
@@ -117,3 +118,3 @@ str = '<p><%="foo"%></p>'; | ||
'test custom tags': function(assert){ | ||
'test custom tags': function(){ | ||
var html = '<p>foo</p>', | ||
@@ -136,3 +137,3 @@ str = '<p>{{= "foo" }}</p>'; | ||
'test custom tags over 2 chars': function(assert){ | ||
'test custom tags over 2 chars': function(){ | ||
var html = '<p>foo</p>', | ||
@@ -155,3 +156,3 @@ str = '<p>{{{{= "foo" }>>}</p>'; | ||
'test global custom tags': function(assert){ | ||
'test global custom tags': function(){ | ||
var html = '<p>foo</p>', | ||
@@ -166,3 +167,3 @@ str = '<p>{{= "foo" }}</p>'; | ||
'test iteration': function(assert){ | ||
'test iteration': function(){ | ||
var html = '<p>foo</p>', | ||
@@ -189,3 +190,3 @@ str = '<% for (var key in items) { %>' | ||
'test filter support': function(assert){ | ||
'test filter support': function(){ | ||
var html = 'Zab', | ||
@@ -200,3 +201,3 @@ str = '<%=: items | reverse | first | reverse | capitalize %>'; | ||
'test filter argument support': function(assert){ | ||
'test filter argument support': function(){ | ||
var html = 'tj, guillermo', | ||
@@ -214,3 +215,3 @@ str = '<%=: users | map:"name" | join:", " %>'; | ||
'test sort_by filter': function(assert){ | ||
'test sort_by filter': function(){ | ||
var html = 'tj', | ||
@@ -229,3 +230,3 @@ str = '<%=: users | sort_by:"name" | last | get:"name" %>'; | ||
'test custom filters': function(assert){ | ||
'test custom filters': function(){ | ||
var html = 'Welcome Tj Holowaychuk', | ||
@@ -247,3 +248,3 @@ str = '<%=: users | first | greeting %>'; | ||
'test useful stack traces': function(assert){ | ||
'test useful stack traces': function(){ | ||
var str = [ | ||
@@ -268,3 +269,3 @@ "A little somethin'", | ||
'test useful stack traces multiline': function(assert){ | ||
'test useful stack traces multiline': function(){ | ||
var str = [ | ||
@@ -271,0 +272,0 @@ "A little somethin'", |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
Install scripts
Supply chain riskInstall scripts are run when the package is installed. The majority of malware in npm is hidden in install scripts.
Found 1 instance in 1 package
Non-existent author
Supply chain riskThe package was published by an npm account that no longer exists.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
153
0
42996
1
18
1237