From 55f4ba336cf9a572f34affed69c5a23fae1ed60f Mon Sep 17 00:00:00 2001 From: Murat Yukselen Date: Wed, 11 Jan 2017 17:18:08 +0300 Subject: [PATCH 1/6] fix(interpolation): fixed escaped interpolation string handling Interpolation string should be escaped properly when used in an interpolation. This is handled in HtmlFilterDoubleQuote and HtmlFilterSimpleQuote translationKey processing. --- tasks/angular-translate.js | 27 +++++++++++++++++++++++---- test/fixtures/index.html | 10 ++++++++++ 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/tasks/angular-translate.js b/tasks/angular-translate.js index 36ea3a5..fcc2b33 100644 --- a/tasks/angular-translate.js +++ b/tasks/angular-translate.js @@ -46,7 +46,15 @@ module.exports = function (grunt) { // Use to escape some char into regex patterns var escapeRegExp = function (str) { return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); - } + }; + + // Escape interpolation characters in the given str + var escapeRegExpInterpolation = function (str) { + return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\\\\\$&"); + }; + + var escapedInterpolationStartRegex = new RegExp(escapeRegExpInterpolation(interpolation.startDelimiter), 'g'), + escapedInterpolationEndRegex = new RegExp(escapeRegExpInterpolation(interpolation.endDelimiter), 'g'); // Extract regex strings from content and feed results object var _extractTranslation = function (regexName, regex, content, results) { @@ -94,20 +102,31 @@ module.exports = function (grunt) { switch (regexName) { case "commentSimpleQuote": - case "HtmlFilterSimpleQuote": case "JavascriptServiceSimpleQuote": case "JavascriptServiceInstantSimpleQuote": case "JavascriptFilterSimpleQuote": + translationKey = translationKey.replace(/\\\'/g, "'"); + break; + case "HtmlFilterSimpleQuote": + translationKey = translationKey.replace(/\\\'/g, "'"); + translationKey = translationKey.replace(escapedInterpolationStartRegex, interpolation.startDelimiter); + translationKey = translationKey.replace(escapedInterpolationEndRegex, interpolation.endDelimiter); + break; case "HtmlNgBindHtml": translationKey = translationKey.replace(/\\\'/g, "'"); + translationKey = translationKey.replace(/"/g, '"'); break; case "commentDoubleQuote": - case "HtmlFilterDoubleQuote": case "JavascriptServiceDoubleQuote": case "JavascriptServiceInstantDoubleQuote": case "JavascriptFilterDoubleQuote": translationKey = translationKey.replace(/\\\"/g, '"'); break; + case "HtmlFilterDoubleQuote": + translationKey = translationKey.replace(/\\\"/g, '"'); + translationKey = translationKey.replace(escapedInterpolationStartRegex, interpolation.startDelimiter); + translationKey = translationKey.replace(escapedInterpolationEndRegex, interpolation.endDelimiter); + break; case "JavascriptServiceArraySimpleQuote": case "JavascriptServiceArrayDoubleQuote": var key; @@ -175,7 +194,7 @@ module.exports = function (grunt) { HtmlDirectivePluralLast: 'translate="((?:\\\\.|[^"\\\\])*)".*angular-plural-extract="((?:\\\\.|[^"\\\\])*)"', HtmlDirectivePluralFirst: 'angular-plural-extract="((?:\\\\.|[^"\\\\])*)".*translate="((?:\\\\.|[^"\\\\])*)"', HtmlNgBindHtml: 'ng-bind-html="\\s*\'((?:\\\\.|[^\'\\\\])*)\'\\s*\\|\\s*translate(:.*?)?\\s*"', - HtmlNgBindHtmlTernary: 'ng-bind-html="\\s*([^?]*?[^:]*:[^|}]*)\\s*\\|\\s*translate(:.*?)?\\s*"', + HtmlNgBindHtmlTernary: 'ng-bind-html="\\s*([^\\"?]*?[^\\":]*:[^\\"|}]*)\\s*\\|\\s*translate(:.*?)?\\s*"', JavascriptServiceSimpleQuote: '\\$translate\\(\\s*\'((?:\\\\.|[^\'\\\\])*)\'[^\\)]*\\)', JavascriptServiceDoubleQuote: '\\$translate\\(\\s*"((?:\\\\.|[^"\\\\])*)"[^\\)]*\\)', JavascriptServiceArraySimpleQuote: '\\$translate\\((?:\\s*(\\[\\s*(?:(?:\'(?:(?:\\.|[^.*\'\\\\])*)\')\\s*,*\\s*)+\\s*\\])\\s*)\\)', diff --git a/test/fixtures/index.html b/test/fixtures/index.html index 235cf00..15e2fbe 100644 --- a/test/fixtures/index.html +++ b/test/fixtures/index.html @@ -32,6 +32,16 @@

[['HtmlFilterSimpleQuote[] on same line 1/2'| translate:'{var : 1}']] - [['H

{{ ::'HtmlFilterSimpleQuoteOneTimeBinding' | translate }}

+ +
+

Inspect 'description' attribute

+
+
+
+ + +

just fulfilling ternary operator

+

{{ ::'HtmlFilterSimpleQuoteOneTimeBinding' | translate }}

@@ -98,4 +103,4 @@

Our title text

- \ No newline at end of file + From a8eb4ac548e0d2da5b012c1ea1ddc156a2a1687e Mon Sep 17 00:00:00 2001 From: Murat Yukselen Date: Thu, 28 Sep 2017 18:39:36 +0300 Subject: [PATCH 3/6] html escapes should be converted to utf. added ≤ --- tasks/angular-translate.js | 1 + 1 file changed, 1 insertion(+) diff --git a/tasks/angular-translate.js b/tasks/angular-translate.js index 83b6137..0f46bde 100644 --- a/tasks/angular-translate.js +++ b/tasks/angular-translate.js @@ -117,6 +117,7 @@ module.exports = function (grunt) { case "HtmlNgBindHtml": translationKey = translationKey.replace(/\\\'/g, "'"); translationKey = translationKey.replace(/"/g, '"'); + translationKey = translationKey.replace(/≤/g, '≤'); break; case "commentDoubleQuote": case "JavascriptServiceDoubleQuote": From aca4f980f059c1e6007f212689893b14ca16c5e9 Mon Sep 17 00:00:00 2001 From: Murat Yukselen Date: Thu, 28 Sep 2017 18:42:19 +0300 Subject: [PATCH 4/6] version bump --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d7d112d..d11ad33 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "grunt-angular-translate", - "version": "0.3.3", + "version": "0.3.4.rc1", "description": "Extract all the translation keys for angular-translate project", "main": "Gruntfile.js", "directories": { From 4fecfad55a67b7bd82b42cba0f85edd2aa6cc4ee Mon Sep 17 00:00:00 2001 From: Murat Yukselen Date: Thu, 28 Sep 2017 21:40:59 +0300 Subject: [PATCH 5/6] version bump --- package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/package.json b/package.json index d11ad33..8f007b9 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ }, "repository": { "type": "git", - "url": "git://github.com/angular-translate/grunt-angular-translate.git" + "url": "git://github.com/myukselen/grunt-angular-translate.git" }, "keywords": [ "AngularJS", @@ -50,7 +50,6 @@ "url": "https://github.com/angular-translate/grunt-angular-translate/blob/master/LICENSEgit " } ], - "gitHead": "dd655f85e3b4c59b7f3ac5ebf3f1ccad69876bb8", "readmeFilename": "README.md", "dependencies": { "flat": "^1.2.0", From f8013e69cbf1c4a20e46c1d64eea796134138166 Mon Sep 17 00:00:00 2001 From: Murat Yukselen Date: Thu, 28 Sep 2017 21:57:51 +0300 Subject: [PATCH 6/6] version bump --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8f007b9..15ae781 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "grunt-angular-translate", - "version": "0.3.4.rc1", + "version": "0.3.4", "description": "Extract all the translation keys for angular-translate project", "main": "Gruntfile.js", "directories": {