mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-02-09 02:17:50 +00:00
Fixes #429 -- don't escape slash escapes in the body of interpolations...
This commit is contained in:
@@ -57,6 +57,9 @@ $(document).ready(function() {
|
|||||||
var backslashTemplate = _.template("<%= thing %> is \\ridanculous");
|
var backslashTemplate = _.template("<%= thing %> is \\ridanculous");
|
||||||
equals(backslashTemplate({thing: 'This'}), "This is \\ridanculous");
|
equals(backslashTemplate({thing: 'This'}), "This is \\ridanculous");
|
||||||
|
|
||||||
|
var escapeTemplate = _.template('<%= a ? "checked=\\"checked\\"" : "" %>');
|
||||||
|
equals(escapeTemplate({a: true}), 'checked="checked"', 'can handle slash escapes in interpolations.');
|
||||||
|
|
||||||
var fancyTemplate = _.template("<ul><% \
|
var fancyTemplate = _.template("<ul><% \
|
||||||
for (key in people) { \
|
for (key in people) { \
|
||||||
%><li><%= people[key] %></li><% } %></ul>");
|
%><li><%= people[key] %></li><% } %></ul>");
|
||||||
@@ -65,7 +68,7 @@ $(document).ready(function() {
|
|||||||
|
|
||||||
var escapedCharsInJavascriptTemplate = _.template("<ul><% _.each(numbers.split('\\n'), function(item) { %><li><%= item %></li><% }) %></ul>");
|
var escapedCharsInJavascriptTemplate = _.template("<ul><% _.each(numbers.split('\\n'), function(item) { %><li><%= item %></li><% }) %></ul>");
|
||||||
result = escapedCharsInJavascriptTemplate({numbers: "one\ntwo\nthree\nfour"});
|
result = escapedCharsInJavascriptTemplate({numbers: "one\ntwo\nthree\nfour"});
|
||||||
equals(result, "<ul><li>one</li><li>two</li><li>three</li><li>four</li></ul>", 'Can use escaped characters (e.g. \\n) in Javascript')
|
equals(result, "<ul><li>one</li><li>two</li><li>three</li><li>four</li></ul>", 'Can use escaped characters (e.g. \\n) in Javascript');
|
||||||
|
|
||||||
var namespaceCollisionTemplate = _.template("<%= pageCount %> <%= thumbnails[pageCount] %> <% _.each(thumbnails, function(p) { %><div class=\"thumbnail\" rel=\"<%= p %>\"></div><% }); %>");
|
var namespaceCollisionTemplate = _.template("<%= pageCount %> <%= thumbnails[pageCount] %> <% _.each(thumbnails, function(p) { %><div class=\"thumbnail\" rel=\"<%= p %>\"></div><% }); %>");
|
||||||
result = namespaceCollisionTemplate({
|
result = namespaceCollisionTemplate({
|
||||||
|
|||||||
@@ -897,6 +897,12 @@
|
|||||||
// guaranteed not to match.
|
// guaranteed not to match.
|
||||||
var noMatch = /.^/;
|
var noMatch = /.^/;
|
||||||
|
|
||||||
|
// Within an interpolation, evaluation, or escaping, remove HTML escaping
|
||||||
|
// that had been previously added.
|
||||||
|
var unescape = function(code) {
|
||||||
|
return code.replace(/\\\\/g, '\\').replace(/\\'/g, "'");
|
||||||
|
};
|
||||||
|
|
||||||
// JavaScript micro-templating, similar to John Resig's implementation.
|
// JavaScript micro-templating, similar to John Resig's implementation.
|
||||||
// Underscore templating handles arbitrary delimiters, preserves whitespace,
|
// Underscore templating handles arbitrary delimiters, preserves whitespace,
|
||||||
// and correctly escapes quotes within interpolated code.
|
// and correctly escapes quotes within interpolated code.
|
||||||
@@ -907,15 +913,13 @@
|
|||||||
str.replace(/\\/g, '\\\\')
|
str.replace(/\\/g, '\\\\')
|
||||||
.replace(/'/g, "\\'")
|
.replace(/'/g, "\\'")
|
||||||
.replace(c.escape || noMatch, function(match, code) {
|
.replace(c.escape || noMatch, function(match, code) {
|
||||||
return "',_.escape(" + code.replace(/\\'/g, "'") + "),'";
|
return "',_.escape(" + unescape(code) + "),'";
|
||||||
})
|
})
|
||||||
.replace(c.interpolate || noMatch, function(match, code) {
|
.replace(c.interpolate || noMatch, function(match, code) {
|
||||||
return "'," + code.replace(/\\'/g, "'") + ",'";
|
return "'," + unescape(code) + ",'";
|
||||||
})
|
})
|
||||||
.replace(c.evaluate || noMatch, function(match, code) {
|
.replace(c.evaluate || noMatch, function(match, code) {
|
||||||
return "');" + code.replace(/\\'/g, "'")
|
return "');" + unescape(code).replace(/[\r\n\t]/g, ' ') + ";__p.push('";
|
||||||
.replace(/[\r\n\t]/g, ' ')
|
|
||||||
.replace(/\\\\/g, '\\') + ";__p.push('";
|
|
||||||
})
|
})
|
||||||
.replace(/\r/g, '\\r')
|
.replace(/\r/g, '\\r')
|
||||||
.replace(/\n/g, '\\n')
|
.replace(/\n/g, '\\n')
|
||||||
|
|||||||
Reference in New Issue
Block a user