From 9805b4bb18b38cbf7f065adcf9aeff9c3619df72 Mon Sep 17 00:00:00 2001 From: Dmitriy Simushev Date: Thu, 11 Sep 2014 10:42:02 +0000 Subject: [PATCH] Add "replace" Handlebars.js helper --- .../js/source/default/handlebars_helpers.js | 20 ++++++++ .../test_cases/handlebars_helpers_tests.js | 46 +++++++++++++++++++ 2 files changed, 66 insertions(+) diff --git a/src/mibew/js/source/default/handlebars_helpers.js b/src/mibew/js/source/default/handlebars_helpers.js index e06fc7ca..889d1bff 100644 --- a/src/mibew/js/source/default/handlebars_helpers.js +++ b/src/mibew/js/source/default/handlebars_helpers.js @@ -234,6 +234,26 @@ return result; }); + /** + * Registers "replace" helper. + * + * This helper replaces all found substrings with the specifed replacement. + * Example of usage: + * + * {{#replace search replacement}}target content{{/replace}} + * + */ + 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. * diff --git a/src/tests/client_side/qunit/test_cases/handlebars_helpers_tests.js b/src/tests/client_side/qunit/test_cases/handlebars_helpers_tests.js index 2a783f40..8550100c 100644 --- a/src/tests/client_side/qunit/test_cases/handlebars_helpers_tests.js +++ b/src/tests/client_side/qunit/test_cases/handlebars_helpers_tests.js @@ -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: '
' + }), + 'Hello
cruel
world!
', + 'Test multiple replace' + ); + + equal( + compiledTemplate({ + source: '{{!-- comment', + search: '{{!--', + replacement: '