Add "replace" Handlebars.js helper

This commit is contained in:
Dmitriy Simushev 2014-09-11 10:42:02 +00:00
parent 333f769a16
commit 9805b4bb18
2 changed files with 66 additions and 0 deletions

View File

@ -234,6 +234,26 @@
return result;
});
/**
* Registers "replace" helper.
*
* This helper replaces all found substrings with the specifed replacement.
* Example of usage:
* <code>
* {{#replace search replacement}}target content{{/replace}}
* </code>
*/
Handlebars.registerHelper('replace', function(search, replacement, options) {
// Convert serch value to string and escape special regexp characters
var searchPattern = search.toString().replace(
/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,
"\\$&"
),
re = new RegExp(searchPattern, 'g');
return options.fn(this).replace(re, replacement);
});
/**
* Registers "cutString" helper.
*

View File

@ -168,6 +168,52 @@ test('repeat', function() {
);
});
// Test "replace" Handlebars helper
test('replace', function() {
var template = '{{#replace search replacement}}{{source}}{{/replace}}';
var compiledTemplate = Handlebars.compile(template);
equal(
compiledTemplate({
source: 'test source',
search: 'source',
replacement: 'target'
}),
'test target',
'Test single replace'
);
equal(
compiledTemplate({
source: 'Hello\ncruel\nworld!\n',
search: '\n',
replacement: '<br/>'
}),
'Hello<br/>cruel<br/>world!<br/>',
'Test multiple replace'
);
equal(
compiledTemplate({
source: '{{!-- comment',
search: '{{!--',
replacement: '<!--'
}),
'<!-- comment',
'Test special regexp characters'
);
equal(
compiledTemplate({
source: '010203040506070809',
search: 0,
replacement: ''
}),
'123456789',
'Test a number as the search value'
);
});
// Test "cutString" Handlebars helper
test('cutString', function() {
var template = '{{#cutString length}}{{str}}{{/cutString}}';