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;