diff --git a/src/service/sanitization.js b/src/service/sanitization.js
index ce83c5788..9cedb0188 100644
--- a/src/service/sanitization.js
+++ b/src/service/sanitization.js
@@ -140,12 +140,24 @@ function $translateSanitizationProvider () {
*/
this.$get = function ($injector, $log) {
+ var cachedStrategyMap = {};
+
var applyStrategies = function (value, mode, selectedStrategies) {
angular.forEach(selectedStrategies, function (selectedStrategy) {
if (angular.isFunction(selectedStrategy)) {
value = selectedStrategy(value, mode);
} else if (angular.isFunction(strategies[selectedStrategy])) {
value = strategies[selectedStrategy](value, mode);
+ } else if (angular.isString(strategies[selectedStrategy])) {
+ if (!cachedStrategyMap[strategies[selectedStrategy]]) {
+ try {
+ cachedStrategyMap[strategies[selectedStrategy]] = $injector.get(strategies[selectedStrategy]);
+ } catch (e) {
+ cachedStrategyMap[strategies[selectedStrategy]] = function() {};
+ throw new Error('pascalprecht.translate.$translateSanitization: Unknown sanitization strategy: \'' + selectedStrategy + '\'');
+ }
+ }
+ value = cachedStrategyMap[strategies[selectedStrategy]](value, mode);
} else {
throw new Error('pascalprecht.translate.$translateSanitization: Unknown sanitization strategy: \'' + selectedStrategy + '\'');
}
diff --git a/test/unit/service/sanitization.spec.js b/test/unit/service/sanitization.spec.js
index 3d1e7e46c..37b28fd14 100644
--- a/test/unit/service/sanitization.spec.js
+++ b/test/unit/service/sanitization.spec.js
@@ -190,6 +190,35 @@ describe('pascalprecht.translate', function () {
});
});
+ describe('$translateSanitization', function () {
+ var $translateSanitization;
+
+ beforeEach(module('ngSanitize'));
+ beforeEach(module('pascalprecht.translate', function ($provide, $translateSanitizationProvider) {
+ $provide.factory('mySanitizeService', function () {
+ return function (value, mode) {
+ return '1' + value + '2' + mode;
+ };
+ });
+ $translateSanitizationProvider.addStrategy('mySanitize', 'mySanitizeService');
+ $translateSanitizationProvider.useStrategy('mySanitize');
+ }));
+ beforeEach(inject(function (_$translateSanitization_) {
+ $translateSanitization = _$translateSanitization_;
+ }));
+
+ describe('should allow specifying a different strategy which is the alias of an existing service', function () {
+ it('for text', function () {
+ expect($translateSanitization.sanitize('Donald Duck', 'text')).toEqual('1Donald Duck2text');
+ });
+
+ it('for params', function () {
+ expect($translateSanitization.sanitize('Donald Duck', 'params')).toEqual('1Donald Duck2params');
+ });
+ });
+
+ });
+
describe('$translateSanitization#sanitize without ngSanitize', function () {
var $translateSanitization;