Skip to content
This repository was archived by the owner on Apr 12, 2024. It is now read-only.

Commit 250781a

Browse files
committed
feat($$messageFormat): module for MessageFormat extensions
$$messageFormat is now a new module due to size limitations (7Kb minified with closure compiler's ADVANCED_OPTIMIZATIONS.) Removed dependency on $interpolate. The parser now parses over Angular expressions to correctly skip over syntactical items (e.g. "}}" ocurring in a string is skipped.) The entire message including nested messages are parsed in a single pass (they were delegated to $interpolate earlier which called back into this parser.)
1 parent 90d6319 commit 250781a

File tree

7 files changed

+706
-417
lines changed

7 files changed

+706
-417
lines changed

Gruntfile.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,9 @@ module.exports = function(grunt) {
126126
ngLocale: {
127127
files: { src: 'src/ngLocale/**/*.js' },
128128
},
129+
ngMessageFormat: {
130+
files: { src: 'src/ngMessageFormat/**/*.js' },
131+
},
129132
ngMessages: {
130133
files: { src: 'src/ngMessages/**/*.js' },
131134
},
@@ -200,6 +203,10 @@ module.exports = function(grunt) {
200203
dest: 'build/angular-resource.js',
201204
src: util.wrap(files['angularModules']['ngResource'], 'module')
202205
},
206+
messageformat: {
207+
dest: 'build/angular-messageformat.js',
208+
src: util.wrap(files['angularModules']['ngMessageFormat'], 'module')
209+
},
203210
messages: {
204211
dest: 'build/angular-messages.js',
205212
src: util.wrap(files['angularModules']['ngMessages'], 'module')
@@ -232,6 +239,7 @@ module.exports = function(grunt) {
232239
animate: 'build/angular-animate.js',
233240
cookies: 'build/angular-cookies.js',
234241
loader: 'build/angular-loader.js',
242+
messageformat: 'build/angular-messageformat.js',
235243
messages: 'build/angular-messages.js',
236244
touch: 'build/angular-touch.js',
237245
resource: 'build/angular-resource.js',

angularFiles.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ var angularFiles = {
2828
'src/ng/locale.js',
2929
'src/ng/location.js',
3030
'src/ng/log.js',
31-
'src/ng/messageformat.js',
3231
'src/ng/parse.js',
3332
'src/ng/q.js',
3433
'src/ng/raf.js',
@@ -92,6 +91,9 @@ var angularFiles = {
9291
'ngCookies': [
9392
'src/ngCookies/cookies.js'
9493
],
94+
'ngMessageFormat': [
95+
'src/ngMessageFormat/messageformat.js'
96+
],
9597
'ngMessages': [
9698
'src/ngMessages/messages.js'
9799
],

lib/grunt/utils.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,14 +185,15 @@ module.exports = {
185185
var mapFileName = mapFile.match(/[^\/]+$/)[0];
186186
var errorFileName = file.replace(/\.js$/, '-errors.json');
187187
var versionNumber = grunt.config('NG_VERSION').full;
188+
var compilationLevel = file === 'build/angular-messageformat.js' ? 'ADVANCED_OPTIMIZATIONS' : 'SIMPLE_OPTIMIZATIONS';
188189
shell.exec(
189190
'java ' +
190191
this.java32flags() + ' ' +
191192
'-Xmx2g ' +
192193
'-cp bower_components/closure-compiler/compiler.jar' + classPathSep +
193194
'bower_components/ng-closure-runner/ngcompiler.jar ' +
194195
'org.angularjs.closurerunner.NgClosureRunner ' +
195-
'--compilation_level SIMPLE_OPTIMIZATIONS ' +
196+
'--compilation_level ' + compilationLevel + ' ' +
196197
'--language_in ECMASCRIPT5_STRICT ' +
197198
'--minerr_pass ' +
198199
'--minerr_errors ' + errorFileName + ' ' +

src/AngularPublic.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,6 @@ function publishExternalAPI(angular) {
224224
$httpBackend: $HttpBackendProvider,
225225
$location: $LocationProvider,
226226
$log: $LogProvider,
227-
$$messageFormat: $$MessageFormatProvider,
228227
$parse: $ParseProvider,
229228
$rootScope: $RootScopeProvider,
230229
$q: $QProvider,

src/ng/interpolate.js

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,8 @@ function $InterpolateProvider() {
7979
};
8080

8181

82-
this.$get = ['$parse', '$exceptionHandler', '$sce', '$$messageFormat', function($parse, $exceptionHandler, $sce, $$messageFormat) {
82+
this.$get = ['$injector', '$parse', '$exceptionHandler', '$sce', function($injector, $parse, $exceptionHandler, $sce) {
83+
var $$messageFormat = $injector.has('$$messageFormat') ? $injector.get('$$messageFormat') : null;
8384
var startSymbolLength = startSymbol.length,
8485
endSymbolLength = endSymbol.length,
8586
escapedStartRegexp = new RegExp(startSymbol.replace(/./g, escape), 'g'),
@@ -113,11 +114,11 @@ function $InterpolateProvider() {
113114

114115
// Interpolation expressions support MessageFormat like extensions for plural and
115116
// select(gender). Delegate to $$messageFormat is such extensions are being used.
116-
function parseExtendedExpression(text, interceptorFn) {
117-
if (text.search(fastIsMsgFormatTestRe) == -1) {
118-
return $parse(text, interceptorFn);
117+
function parse(text, interceptorFn) {
118+
if ($$messageFormat && text.search(fastIsMsgFormatTestRe) != -1) {
119+
return $$messageFormat.parseMustache("{{"+text+"}}");
119120
} else {
120-
return $$messageFormat.parse(text);
121+
return $parse(text, interceptorFn);
121122
}
122123
}
123124

@@ -269,7 +270,7 @@ function $InterpolateProvider() {
269270
}
270271
exp = text.substring(startIndex + startSymbolLength, endIndex);
271272
expressions.push(exp);
272-
parseFns.push(parseExtendedExpression(exp, parseStringifyInterceptor));
273+
parseFns.push(parse(exp, parseStringifyInterceptor));
273274
index = endIndex + endSymbolLength;
274275
expressionPositions.push(concat.length);
275276
concat.push('');

0 commit comments

Comments
 (0)