angularjs-rails 1.5.8 → 1.6.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.5.8
2
+ * @license AngularJS v1.6.0
3
3
  * (c) 2010-2016 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -26,19 +26,19 @@
26
26
  *
27
27
  * Below is a more detailed breakdown of the attributes handled by ngAria:
28
28
  *
29
- * | Directive | Supported Attributes |
30
- * |---------------------------------------------|----------------------------------------------------------------------------------------|
29
+ * | Directive | Supported Attributes |
30
+ * |---------------------------------------------|-----------------------------------------------------------------------------------------------------|
31
31
  * | {@link ng.directive:ngModel ngModel} | aria-checked, aria-valuemin, aria-valuemax, aria-valuenow, aria-invalid, aria-required, input roles |
32
- * | {@link ng.directive:ngDisabled ngDisabled} | aria-disabled |
33
- * | {@link ng.directive:ngRequired ngRequired} | aria-required
34
- * | {@link ng.directive:ngChecked ngChecked} | aria-checked
35
- * | {@link ng.directive:ngReadonly ngReadonly} | aria-readonly |
36
- * | {@link ng.directive:ngValue ngValue} | aria-checked |
37
- * | {@link ng.directive:ngShow ngShow} | aria-hidden |
38
- * | {@link ng.directive:ngHide ngHide} | aria-hidden |
39
- * | {@link ng.directive:ngDblclick ngDblclick} | tabindex |
40
- * | {@link module:ngMessages ngMessages} | aria-live |
41
- * | {@link ng.directive:ngClick ngClick} | tabindex, keypress event, button role |
32
+ * | {@link ng.directive:ngDisabled ngDisabled} | aria-disabled |
33
+ * | {@link ng.directive:ngRequired ngRequired} | aria-required |
34
+ * | {@link ng.directive:ngChecked ngChecked} | aria-checked |
35
+ * | {@link ng.directive:ngReadonly ngReadonly} | aria-readonly |
36
+ * | {@link ng.directive:ngValue ngValue} | aria-checked |
37
+ * | {@link ng.directive:ngShow ngShow} | aria-hidden |
38
+ * | {@link ng.directive:ngHide ngHide} | aria-hidden |
39
+ * | {@link ng.directive:ngDblclick ngDblclick} | tabindex |
40
+ * | {@link module:ngMessages ngMessages} | aria-live |
41
+ * | {@link ng.directive:ngClick ngClick} | tabindex, keydown event, button role |
42
42
  *
43
43
  * Find out more information about each directive by reading the
44
44
  * {@link guide/accessibility ngAria Developer Guide}.
@@ -58,7 +58,6 @@
58
58
  * {@link ngAria.$ariaProvider#config config} method. For more details, see the
59
59
  * {@link guide/accessibility Developer Guide}.
60
60
  */
61
- /* global -ngAriaModule */
62
61
  var ngAriaModule = angular.module('ngAria', ['ng']).
63
62
  provider('$aria', $AriaProvider);
64
63
 
@@ -75,6 +74,7 @@ var isNodeOneOf = function(elem, nodeTypeArray) {
75
74
  /**
76
75
  * @ngdoc provider
77
76
  * @name $ariaProvider
77
+ * @this
78
78
  *
79
79
  * @description
80
80
  *
@@ -103,7 +103,7 @@ function $AriaProvider() {
103
103
  ariaInvalid: true,
104
104
  ariaValue: true,
105
105
  tabindex: true,
106
- bindKeypress: true,
106
+ bindKeydown: true,
107
107
  bindRoleForClick: true
108
108
  };
109
109
 
@@ -119,12 +119,15 @@ function $AriaProvider() {
119
119
  * - **ariaDisabled** – `{boolean}` – Enables/disables aria-disabled tags
120
120
  * - **ariaRequired** – `{boolean}` – Enables/disables aria-required tags
121
121
  * - **ariaInvalid** – `{boolean}` – Enables/disables aria-invalid tags
122
- * - **ariaValue** – `{boolean}` – Enables/disables aria-valuemin, aria-valuemax and aria-valuenow tags
122
+ * - **ariaValue** – `{boolean}` – Enables/disables aria-valuemin, aria-valuemax and
123
+ * aria-valuenow tags
123
124
  * - **tabindex** – `{boolean}` – Enables/disables tabindex tags
124
- * - **bindKeypress** – `{boolean}` – Enables/disables keypress event binding on `div` and
125
- * `li` elements with ng-click
126
- * - **bindRoleForClick** – `{boolean}` – Adds role=button to non-interactive elements like `div`
127
- * using ng-click, making them more accessible to users of assistive technologies
125
+ * - **bindKeydown** – `{boolean}` – Enables/disables keyboard event binding on non-interactive
126
+ * elements (such as `div` or `li`) using ng-click, making them more accessible to users of
127
+ * assistive technologies
128
+ * - **bindRoleForClick** `{boolean}` Adds role=button to non-interactive elements (such as
129
+ * `div` or `li`) using ng-click, making them more accessible to users of assistive
130
+ * technologies
128
131
  *
129
132
  * @description
130
133
  * Enables/disables various ARIA attributes
@@ -233,8 +236,8 @@ ngAriaModule.directive('ngShow', ['$aria', function($aria) {
233
236
  function shouldAttachRole(role, elem) {
234
237
  // if element does not have role attribute
235
238
  // AND element type is equal to role (if custom element has a type equaling shape) <-- remove?
236
- // AND element is not INPUT
237
- return !elem.attr('role') && (elem.attr('type') === role) && (elem[0].nodeName !== 'INPUT');
239
+ // AND element is not in nodeBlackList
240
+ return !elem.attr('role') && (elem.attr('type') === role) && !isNodeOneOf(elem, nodeBlackList);
238
241
  }
239
242
 
240
243
  function getShape(attr, elem) {
@@ -254,14 +257,6 @@ ngAriaModule.directive('ngShow', ['$aria', function($aria) {
254
257
  var shape = getShape(attr, elem);
255
258
 
256
259
  return {
257
- pre: function(scope, elem, attr, ngModel) {
258
- if (shape === 'checkbox') {
259
- //Use the input[checkbox] $isEmpty implementation for elements with checkbox roles
260
- ngModel.$isEmpty = function(value) {
261
- return value === false;
262
- };
263
- }
264
- },
265
260
  post: function(scope, elem, attr, ngModel) {
266
261
  var needsTabIndex = shouldAttachAttr('tabindex', 'tabindex', elem, false);
267
262
 
@@ -270,6 +265,8 @@ ngAriaModule.directive('ngShow', ['$aria', function($aria) {
270
265
  }
271
266
 
272
267
  function getRadioReaction(newVal) {
268
+ // Strict comparison would cause a BC
269
+ // eslint-disable-next-line eqeqeq
273
270
  var boolVal = (attr.value == ngModel.$viewValue);
274
271
  elem.attr('aria-checked', boolVal);
275
272
  }
@@ -376,8 +373,8 @@ ngAriaModule.directive('ngShow', ['$aria', function($aria) {
376
373
  elem.attr('tabindex', 0);
377
374
  }
378
375
 
379
- if ($aria.config('bindKeypress') && !attr.ngKeypress) {
380
- elem.on('keypress', function(event) {
376
+ if ($aria.config('bindKeydown') && !attr.ngKeydown && !attr.ngKeypress && !attr.ngKeyup) {
377
+ elem.on('keydown', function(event) {
381
378
  var keyCode = event.which || event.keyCode;
382
379
  if (keyCode === 32 || keyCode === 13) {
383
380
  scope.$apply(callback);
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.5.8
2
+ * @license AngularJS v1.6.0
3
3
  * (c) 2010-2016 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -28,7 +28,7 @@ angular.module('ngCookies', ['ng']).
28
28
  * @description
29
29
  * Use `$cookiesProvider` to change the default behavior of the {@link ngCookies.$cookies $cookies} service.
30
30
  * */
31
- provider('$cookies', [function $CookiesProvider() {
31
+ provider('$cookies', [/** @this */function $CookiesProvider() {
32
32
  /**
33
33
  * @ngdoc property
34
34
  * @name $cookiesProvider#defaults
@@ -51,6 +51,16 @@ angular.module('ngCookies', ['ng']).
51
51
  * Note: By default, the address that appears in your `<base>` tag will be used as the path.
52
52
  * This is important so that cookies will be visible for all routes when html5mode is enabled.
53
53
  *
54
+ * @example
55
+ *
56
+ * ```js
57
+ * angular.module('cookiesProviderExample', ['ngCookies'])
58
+ * .config(['$cookiesProvider', function($cookiesProvider) {
59
+ * // Setting default options
60
+ * $cookiesProvider.defaults.domain = 'foo.com';
61
+ * $cookiesProvider.defaults.secure = true;
62
+ * }]);
63
+ * ```
54
64
  **/
55
65
  var defaults = this.defaults = {};
56
66
 
@@ -184,6 +194,9 @@ angular.module('ngCookies').
184
194
  * @ngdoc service
185
195
  * @name $cookieStore
186
196
  * @deprecated
197
+ * sinceVersion="v1.4.0"
198
+ * Please use the {@link ngCookies.$cookies `$cookies`} service instead.
199
+ *
187
200
  * @requires $cookies
188
201
  *
189
202
  * @description
@@ -193,11 +206,6 @@ angular.module('ngCookies').
193
206
  *
194
207
  * Requires the {@link ngCookies `ngCookies`} module to be installed.
195
208
  *
196
- * <div class="alert alert-danger">
197
- * **Note:** The $cookieStore service is **deprecated**.
198
- * Please use the {@link ngCookies.$cookies `$cookies`} service instead.
199
- * </div>
200
- *
201
209
  * @example
202
210
  *
203
211
  * ```js
@@ -299,9 +307,9 @@ function $$CookieWriter($document, $log, $browser) {
299
307
  // - 4096 bytes per cookie
300
308
  var cookieLength = str.length + 1;
301
309
  if (cookieLength > 4096) {
302
- $log.warn("Cookie '" + name +
303
- "' possibly not set or overflowed because it was too large (" +
304
- cookieLength + " > 4096 bytes)!");
310
+ $log.warn('Cookie \'' + name +
311
+ '\' possibly not set or overflowed because it was too large (' +
312
+ cookieLength + ' > 4096 bytes)!');
305
313
  }
306
314
 
307
315
  return str;
@@ -314,7 +322,7 @@ function $$CookieWriter($document, $log, $browser) {
314
322
 
315
323
  $$CookieWriter.$inject = ['$document', '$log', '$browser'];
316
324
 
317
- angular.module('ngCookies').provider('$$cookieWriter', function $$CookieWriterProvider() {
325
+ angular.module('ngCookies').provider('$$cookieWriter', /** @this */ function $$CookieWriterProvider() {
318
326
  this.$get = $$CookieWriter;
319
327
  });
320
328
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.5.8
2
+ * @license AngularJS v1.6.0
3
3
  * (c) 2010-2016 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -87,7 +87,7 @@ function minErr(module, ErrorConstructor) {
87
87
  return match;
88
88
  });
89
89
 
90
- message += '\nhttp://errors.angularjs.org/1.5.8/' +
90
+ message += '\nhttp://errors.angularjs.org/1.6.0/' +
91
91
  (module ? module + '/' : '') + code;
92
92
 
93
93
  for (i = SKIP_INDEXES, paramPrefix = '?'; i < templateArgs.length; i++, paramPrefix = '&') {
@@ -190,9 +190,9 @@ function setupModuleLoader(window) {
190
190
  }
191
191
  return ensure(modules, name, function() {
192
192
  if (!requires) {
193
- throw $injectorMinErr('nomod', "Module '{0}' is not available! You either misspelled " +
194
- "the module name or forgot to load it. If registering a module ensure that you " +
195
- "specify the dependencies as the second argument.", name);
193
+ throw $injectorMinErr('nomod', 'Module \'{0}\' is not available! You either misspelled ' +
194
+ 'the module name or forgot to load it. If registering a module ensure that you ' +
195
+ 'specify the dependencies as the second argument.', name);
196
196
  }
197
197
 
198
198
  /** @type {!Array.<Array.<*>>} */
@@ -302,7 +302,7 @@ function setupModuleLoader(window) {
302
302
  * @description
303
303
  * See {@link auto.$provide#decorator $provide.decorator()}.
304
304
  */
305
- decorator: invokeLaterAndSetModuleName('$provide', 'decorator'),
305
+ decorator: invokeLaterAndSetModuleName('$provide', 'decorator', configBlocks),
306
306
 
307
307
  /**
308
308
  * @ngdoc method
@@ -448,10 +448,11 @@ function setupModuleLoader(window) {
448
448
  * @param {string} method
449
449
  * @returns {angular.Module}
450
450
  */
451
- function invokeLaterAndSetModuleName(provider, method) {
451
+ function invokeLaterAndSetModuleName(provider, method, queue) {
452
+ if (!queue) queue = invokeQueue;
452
453
  return function(recipeName, factoryFunction) {
453
454
  if (factoryFunction && isFunction(factoryFunction)) factoryFunction.$$moduleName = name;
454
- invokeQueue.push([provider, method, arguments]);
455
+ queue.push([provider, method, arguments]);
455
456
  return moduleInstance;
456
457
  };
457
458
  }
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.5.8
2
+ * @license AngularJS v1.6.0
3
3
  * (c) 2010-2016 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -13,22 +13,14 @@
13
13
  /* global isFunction: false */
14
14
  /* global noop: false */
15
15
  /* global toJson: false */
16
-
17
- function stringify(value) {
18
- if (value == null /* null/undefined */) { return ''; }
19
- switch (typeof value) {
20
- case 'string': return value;
21
- case 'number': return '' + value;
22
- default: return toJson(value);
23
- }
24
- }
16
+ /* global $$stringify: false */
25
17
 
26
18
  // Convert an index into the string into line/column for use in error messages
27
19
  // As such, this doesn't have to be efficient.
28
20
  function indexToLineAndColumn(text, index) {
29
21
  var lines = text.split(/\n/g);
30
- for (var i=0; i < lines.length; i++) {
31
- var line=lines[i];
22
+ for (var i = 0; i < lines.length; i++) {
23
+ var line = lines[i];
32
24
  if (index >= line.length) {
33
25
  index -= line.length;
34
26
  } else {
@@ -47,7 +39,7 @@ function parseTextLiteral(text) {
47
39
  parsedFn['$$watchDelegate'] = function watchDelegate(scope, listener, objectEquality) {
48
40
  var unwatch = scope['$watch'](noop,
49
41
  function textLiteralWatcher() {
50
- if (isFunction(listener)) { listener.call(null, text, text, scope); }
42
+ if (isFunction(listener)) { listener(text, text, scope); }
51
43
  unwatch();
52
44
  },
53
45
  objectEquality);
@@ -64,14 +56,14 @@ function subtractOffset(expressionFn, offset) {
64
56
  return expressionFn;
65
57
  }
66
58
  function minusOffset(value) {
67
- return (value == void 0) ? value : value - offset;
59
+ return (value == null) ? value : value - offset;
68
60
  }
69
61
  function parsedFn(context) { return minusOffset(expressionFn(context)); }
70
62
  var unwatch;
71
63
  parsedFn['$$watchDelegate'] = function watchDelegate(scope, listener, objectEquality) {
72
64
  unwatch = scope['$watch'](expressionFn,
73
65
  function pluralExpressionWatchListener(newValue, oldValue) {
74
- if (isFunction(listener)) { listener.call(null, minusOffset(newValue), minusOffset(oldValue), scope); }
66
+ if (isFunction(listener)) { listener(minusOffset(newValue), minusOffset(oldValue), scope); }
75
67
  },
76
68
  objectEquality);
77
69
  return unwatch;
@@ -96,7 +88,7 @@ function MessageSelectorBase(expressionFn, choices) {
96
88
  var self = this;
97
89
  this.expressionFn = expressionFn;
98
90
  this.choices = choices;
99
- if (choices["other"] === void 0) {
91
+ if (choices['other'] === undefined) {
100
92
  throw $interpolateMinErr('reqother', '“other” is a required option.');
101
93
  }
102
94
  this.parsedFn = function(context) { return self.getResult(context); };
@@ -130,7 +122,7 @@ function MessageSelectorWatchers(msgSelector, scope, listener, objectEquality) {
130
122
  this.msgSelector = msgSelector;
131
123
  this.listener = listener;
132
124
  this.objectEquality = objectEquality;
133
- this.lastMessage = void 0;
125
+ this.lastMessage = undefined;
134
126
  this.messageFnWatcher = noop;
135
127
  var expressionFnListener = function(newValue, oldValue) { return self.expressionFnListener(newValue, oldValue); };
136
128
  this.expressionFnWatcher = scope['$watch'](msgSelector.expressionFn, expressionFnListener, objectEquality);
@@ -170,7 +162,7 @@ SelectMessageProto.prototype = MessageSelectorBase.prototype;
170
162
 
171
163
  SelectMessage.prototype = new SelectMessageProto();
172
164
  SelectMessage.prototype.categorizeValue = function categorizeSelectValue(value) {
173
- return (this.choices[value] !== void 0) ? value : "other";
165
+ return (this.choices[value] !== undefined) ? value : 'other';
174
166
  };
175
167
 
176
168
  /**
@@ -190,12 +182,12 @@ PluralMessageProto.prototype = MessageSelectorBase.prototype;
190
182
  PluralMessage.prototype = new PluralMessageProto();
191
183
  PluralMessage.prototype.categorizeValue = function categorizePluralValue(value) {
192
184
  if (isNaN(value)) {
193
- return "other";
194
- } else if (this.choices[value] !== void 0) {
185
+ return 'other';
186
+ } else if (this.choices[value] !== undefined) {
195
187
  return value;
196
188
  } else {
197
189
  var category = this.pluralCat(value - this.offset);
198
- return (this.choices[category] !== void 0) ? category : "other";
190
+ return (this.choices[category] !== undefined) ? category : 'other';
199
191
  }
200
192
  };
201
193
 
@@ -264,7 +256,7 @@ InterpolationParts.prototype.getExpressionValues = function getExpressionValues(
264
256
  InterpolationParts.prototype.getResult = function getResult(expressionValues) {
265
257
  for (var i = 0; i < this.expressionIndices.length; i++) {
266
258
  var expressionValue = expressionValues[i];
267
- if (this.allOrNothing && expressionValue === void 0) return;
259
+ if (this.allOrNothing && expressionValue === undefined) return;
268
260
  this.textParts[this.expressionIndices[i]] = expressionValue;
269
261
  }
270
262
  return this.textParts.join('');
@@ -275,7 +267,7 @@ InterpolationParts.prototype.toParsedFn = function toParsedFn(mustHaveExpression
275
267
  var self = this;
276
268
  this.flushPartialText();
277
269
  if (mustHaveExpression && this.expressionFns.length === 0) {
278
- return void 0;
270
+ return undefined;
279
271
  }
280
272
  if (this.textParts.length === 0) {
281
273
  return parseTextLiteral('');
@@ -284,7 +276,7 @@ InterpolationParts.prototype.toParsedFn = function toParsedFn(mustHaveExpression
284
276
  $interpolateMinErr['throwNoconcat'](originalText);
285
277
  }
286
278
  if (this.expressionFns.length === 0) {
287
- if (this.textParts.length != 1) { this.errorInParseLogic(); }
279
+ if (this.textParts.length !== 1) { this.errorInParseLogic(); }
288
280
  return parseTextLiteral(this.textParts[0]);
289
281
  }
290
282
  var parsedFn = function(context) {
@@ -311,7 +303,7 @@ InterpolationParts.prototype.watchDelegate = function watchDelegate(scope, liste
311
303
  function InterpolationPartsWatcher(interpolationParts, scope, listener, objectEquality) {
312
304
  this.interpolationParts = interpolationParts;
313
305
  this.scope = scope;
314
- this.previousResult = (void 0);
306
+ this.previousResult = (undefined);
315
307
  this.listener = listener;
316
308
  var self = this;
317
309
  this.expressionFnsWatcher = scope['$watchGroup'](interpolationParts.expressionFns, function(newExpressionValues, oldExpressionValues) {
@@ -423,7 +415,7 @@ MessageFormatParser.prototype.popState = function popState() {
423
415
  MessageFormatParser.prototype.matchRe = function matchRe(re, search) {
424
416
  re.lastIndex = this.index;
425
417
  var match = re.exec(this.text);
426
- if (match != null && (search === true || (match.index == this.index))) {
418
+ if (match != null && (search === true || (match.index === this.index))) {
427
419
  this.index = re.lastIndex;
428
420
  return match;
429
421
  }
@@ -461,7 +453,7 @@ MessageFormatParser.prototype.errorInParseLogic = function errorInParseLogic() {
461
453
  };
462
454
 
463
455
  MessageFormatParser.prototype.assertRuleOrNull = function assertRuleOrNull(rule) {
464
- if (rule === void 0) {
456
+ if (rule === undefined) {
465
457
  this.errorInParseLogic();
466
458
  }
467
459
  };
@@ -477,7 +469,7 @@ MessageFormatParser.prototype.errorExpecting = function errorExpecting() {
477
469
  position.line, position.column, this.text);
478
470
  }
479
471
  var word = match[1];
480
- if (word == "select" || word == "plural") {
472
+ if (word === 'select' || word === 'plural') {
481
473
  position = indexToLineAndColumn(this.text, this.index);
482
474
  throw $interpolateMinErr('reqcomma',
483
475
  'Expected a comma after the keyword “{0}” at line {1}, column {2} of text “{3}”',
@@ -505,7 +497,7 @@ MessageFormatParser.prototype.ruleString = function ruleString() {
505
497
  MessageFormatParser.prototype.startStringAtMatch = function startStringAtMatch(match) {
506
498
  this.stringStartIndex = match.index;
507
499
  this.stringQuote = match[0];
508
- this.stringInterestsRe = this.stringQuote == "'" ? SQUOTED_STRING_INTEREST_RE : DQUOTED_STRING_INTEREST_RE;
500
+ this.stringInterestsRe = this.stringQuote === '\'' ? SQUOTED_STRING_INTEREST_RE : DQUOTED_STRING_INTEREST_RE;
509
501
  this.rule = this.ruleInsideString;
510
502
  };
511
503
 
@@ -519,8 +511,7 @@ MessageFormatParser.prototype.ruleInsideString = function ruleInsideString() {
519
511
  'The string beginning at line {0}, column {1} is unterminated in text “{2}”',
520
512
  position.line, position.column, this.text);
521
513
  }
522
- var chars = match[0];
523
- if (match == this.stringQuote) {
514
+ if (match[0] === this.stringQuote) {
524
515
  this.rule = null;
525
516
  }
526
517
  };
@@ -533,8 +524,8 @@ MessageFormatParser.prototype.rulePluralOrSelect = function rulePluralOrSelect()
533
524
  }
534
525
  var argType = match[1];
535
526
  switch (argType) {
536
- case "plural": this.rule = this.rulePluralStyle; break;
537
- case "select": this.rule = this.ruleSelectStyle; break;
527
+ case 'plural': this.rule = this.rulePluralStyle; break;
528
+ case 'select': this.rule = this.ruleSelectStyle; break;
538
529
  default: this.errorInParseLogic();
539
530
  }
540
531
  };
@@ -552,7 +543,7 @@ MessageFormatParser.prototype.ruleSelectStyle = function ruleSelectStyle() {
552
543
  };
553
544
 
554
545
  var NUMBER_RE = /[0]|(?:[1-9][0-9]*)/g;
555
- var PLURAL_OFFSET_RE = new RegExp("\\s*offset\\s*:\\s*(" + NUMBER_RE.source + ")", "g");
546
+ var PLURAL_OFFSET_RE = new RegExp('\\s*offset\\s*:\\s*(' + NUMBER_RE.source + ')', 'g');
556
547
 
557
548
  MessageFormatParser.prototype.rulePluralOffset = function rulePluralOffset() {
558
549
  var match = this.matchRe(PLURAL_OFFSET_RE);
@@ -562,7 +553,7 @@ MessageFormatParser.prototype.rulePluralOffset = function rulePluralOffset() {
562
553
  };
563
554
 
564
555
  MessageFormatParser.prototype.assertChoiceKeyIsNew = function assertChoiceKeyIsNew(choiceKey, index) {
565
- if (this.choices[choiceKey] !== void 0) {
556
+ if (this.choices[choiceKey] !== undefined) {
566
557
  var position = indexToLineAndColumn(this.text, index);
567
558
  throw $interpolateMinErr('dupvalue',
568
559
  'The choice “{0}” is specified more than once. Duplicate key is at line {1}, column {2} in text “{3}”',
@@ -583,7 +574,7 @@ MessageFormatParser.prototype.ruleSelectKeyword = function ruleSelectKeyword() {
583
574
  this.rule = this.ruleMessageText;
584
575
  };
585
576
 
586
- var EXPLICIT_VALUE_OR_KEYWORD_RE = new RegExp("\\s*(?:(?:=(" + NUMBER_RE.source + "))|(\\w+))", "g");
577
+ var EXPLICIT_VALUE_OR_KEYWORD_RE = new RegExp('\\s*(?:(?:=(' + NUMBER_RE.source + '))|(\\w+))', 'g');
587
578
  MessageFormatParser.prototype.rulePluralValueOrKeyword = function rulePluralValueOrKeyword() {
588
579
  var match = this.matchRe(EXPLICIT_VALUE_OR_KEYWORD_RE);
589
580
  if (match == null) {
@@ -600,7 +591,7 @@ MessageFormatParser.prototype.rulePluralValueOrKeyword = function rulePluralValu
600
591
  this.rule = this.ruleMessageText;
601
592
  };
602
593
 
603
- var BRACE_OPEN_RE = /\s*{/g;
594
+ var BRACE_OPEN_RE = /\s*\{/g;
604
595
  var BRACE_CLOSE_RE = /}/g;
605
596
  MessageFormatParser.prototype.ruleMessageText = function ruleMessageText() {
606
597
  if (!this.consumeRe(BRACE_OPEN_RE)) {
@@ -620,7 +611,7 @@ var INTERP_OR_END_MESSAGE_RE = /\\.|{{|}/g;
620
611
  var INTERP_OR_PLURALVALUE_OR_END_MESSAGE_RE = /\\.|{{|#|}/g;
621
612
  var ESCAPE_OR_MUSTACHE_BEGIN_RE = /\\.|{{/g;
622
613
  MessageFormatParser.prototype.advanceInInterpolationOrMessageText = function advanceInInterpolationOrMessageText() {
623
- var currentIndex = this.index, match, re;
614
+ var currentIndex = this.index, match;
624
615
  if (this.ruleChoiceKeyword == null) { // interpolation
625
616
  match = this.searchRe(ESCAPE_OR_MUSTACHE_BEGIN_RE);
626
617
  if (match == null) { // End of interpolation text. Nothing more to process.
@@ -629,7 +620,7 @@ MessageFormatParser.prototype.advanceInInterpolationOrMessageText = function adv
629
620
  return null;
630
621
  }
631
622
  } else {
632
- match = this.searchRe(this.ruleChoiceKeyword == this.rulePluralValueOrKeyword ?
623
+ match = this.searchRe(this.ruleChoiceKeyword === this.rulePluralValueOrKeyword ?
633
624
  INTERP_OR_PLURALVALUE_OR_END_MESSAGE_RE : INTERP_OR_END_MESSAGE_RE);
634
625
  if (match == null) {
635
626
  var position = indexToLineAndColumn(this.text, this.msgStartIndex);
@@ -654,20 +645,20 @@ MessageFormatParser.prototype.ruleInInterpolationOrMessageText = function ruleIn
654
645
  this.rule = null;
655
646
  return;
656
647
  }
657
- if (token[0] == "\\") {
648
+ if (token[0] === '\\') {
658
649
  // unescape next character and continue
659
650
  this.interpolationParts.addText(this.textPart + token[1]);
660
651
  return;
661
652
  }
662
653
  this.interpolationParts.addText(this.textPart);
663
- if (token == "{{") {
654
+ if (token === '{{') {
664
655
  this.pushState();
665
656
  this.ruleStack.push(this.ruleEndMustacheInInterpolationOrMessage);
666
657
  this.rule = this.ruleEnteredMustache;
667
- } else if (token == "}") {
658
+ } else if (token === '}') {
668
659
  this.choices[this.choiceKey] = this.interpolationParts.toParsedFn(/*mustHaveExpression=*/false, this.text);
669
660
  this.rule = this.ruleChoiceKeyword;
670
- } else if (token == "#") {
661
+ } else if (token === '#') {
671
662
  this.interpolationParts.addExpressionFn(this.expressionMinusOffsetFn);
672
663
  } else {
673
664
  this.errorInParseLogic();
@@ -691,7 +682,7 @@ MessageFormatParser.prototype.ruleInInterpolation = function ruleInInterpolation
691
682
  return;
692
683
  }
693
684
  var token = match[0];
694
- if (token[0] == "\\") {
685
+ if (token[0] === '\\') {
695
686
  // unescape next character and continue
696
687
  this.interpolationParts.addText(this.text.substring(currentIndex, match.index) + token[1]);
697
688
  return;
@@ -757,18 +748,18 @@ MessageFormatParser.prototype.ruleAngularExpression = function ruleAngularExpres
757
748
 
758
749
  function getEndOperator(opBegin) {
759
750
  switch (opBegin) {
760
- case "{": return "}";
761
- case "[": return "]";
762
- case "(": return ")";
751
+ case '{': return '}';
752
+ case '[': return ']';
753
+ case '(': return ')';
763
754
  default: return null;
764
755
  }
765
756
  }
766
757
 
767
758
  function getBeginOperator(opEnd) {
768
759
  switch (opEnd) {
769
- case "}": return "{";
770
- case "]": return "[";
771
- case ")": return "(";
760
+ case '}': return '{';
761
+ case ']': return '[';
762
+ case ')': return '(';
772
763
  default: return null;
773
764
  }
774
765
  }
@@ -778,7 +769,6 @@ function getBeginOperator(opEnd) {
778
769
  // should support any other type of start/end interpolation symbol.
779
770
  var INTERESTING_OPERATORS_RE = /[[\]{}()'",]/g;
780
771
  MessageFormatParser.prototype.ruleInAngularExpression = function ruleInAngularExpression() {
781
- var startIndex = this.index;
782
772
  var match = this.searchRe(INTERESTING_OPERATORS_RE);
783
773
  var position;
784
774
  if (match == null) {
@@ -803,12 +793,12 @@ MessageFormatParser.prototype.ruleInAngularExpression = function ruleInAngularEx
803
793
  this.getEndOperator(innermostOperator), this.text);
804
794
  }
805
795
  var operator = match[0];
806
- if (operator == "'" || operator == '"') {
796
+ if (operator === '\'' || operator === '"') {
807
797
  this.ruleStack.push(this.ruleInAngularExpression);
808
798
  this.startStringAtMatch(match);
809
799
  return;
810
800
  }
811
- if (operator == ",") {
801
+ if (operator === ',') {
812
802
  if (this.trustedContext) {
813
803
  position = indexToLineAndColumn(this.text, this.index);
814
804
  throw $interpolateMinErr('unsafe',
@@ -836,7 +826,7 @@ MessageFormatParser.prototype.ruleInAngularExpression = function ruleInAngularEx
836
826
  this.errorInParseLogic();
837
827
  }
838
828
  if (this.angularOperatorStack.length > 0) {
839
- if (beginOperator == this.angularOperatorStack[0]) {
829
+ if (beginOperator === this.angularOperatorStack[0]) {
840
830
  this.angularOperatorStack.shift();
841
831
  return;
842
832
  }
@@ -864,7 +854,6 @@ MessageFormatParser.prototype.ruleInAngularExpression = function ruleInAngularEx
864
854
  /* global noop: true */
865
855
  /* global toJson: true */
866
856
  /* global MessageFormatParser: false */
867
- /* global stringify: false */
868
857
 
869
858
  /**
870
859
  * @ngdoc module
@@ -909,9 +898,9 @@ MessageFormatParser.prototype.ruleInAngularExpression = function ruleInAngularEx
909
898
  * this.gender = gender;
910
899
  * }
911
900
  *
912
- * var alice = new Person("Alice", "female"),
913
- * bob = new Person("Bob", "male"),
914
- * ashley = new Person("Ashley", "");
901
+ * var alice = new Person('Alice', 'female'),
902
+ * bob = new Person('Bob', 'male'),
903
+ * ashley = new Person('Ashley', '');
915
904
  *
916
905
  * angular.module('msgFmtExample', ['ngMessageFormat'])
917
906
  * .controller('AppController', ['$scope', function($scope) {
@@ -952,11 +941,11 @@ MessageFormatParser.prototype.ruleInAngularExpression = function ruleInAngularEx
952
941
  * this.gender = gender;
953
942
  * }
954
943
  *
955
- * var alice = new Person("Alice", "female"),
956
- * bob = new Person("Bob", "male"),
957
- * sarah = new Person("Sarah", "female"),
958
- * harry = new Person("Harry Potter", "male"),
959
- * ashley = new Person("Ashley", "");
944
+ * var alice = new Person('Alice', 'female'),
945
+ * bob = new Person('Bob', 'male'),
946
+ * sarah = new Person('Sarah', 'female'),
947
+ * harry = new Person('Harry Potter', 'male'),
948
+ * ashley = new Person('Ashley', '');
960
949
  *
961
950
  * angular.module('msgFmtExample', ['ngMessageFormat'])
962
951
  * .controller('AppController', ['$scope', function($scope) {
@@ -1012,10 +1001,10 @@ MessageFormatParser.prototype.ruleInAngularExpression = function ruleInAngularEx
1012
1001
  * this.gender = gender;
1013
1002
  * }
1014
1003
  *
1015
- * var alice = new Person("Alice", "female"),
1016
- * bob = new Person("Bob", "male"),
1017
- * harry = new Person("Harry Potter", "male"),
1018
- * ashley = new Person("Ashley", "");
1004
+ * var alice = new Person('Alice', 'female'),
1005
+ * bob = new Person('Bob', 'male'),
1006
+ * harry = new Person('Harry Potter', 'male'),
1007
+ * ashley = new Person('Ashley', '');
1019
1008
  *
1020
1009
  * angular.module('msgFmtExample', ['ngMessageFormat'])
1021
1010
  * .controller('AppController', ['$scope', function($scope) {
@@ -1028,13 +1017,13 @@ MessageFormatParser.prototype.ruleInAngularExpression = function ruleInAngularEx
1028
1017
  */
1029
1018
 
1030
1019
  var $$MessageFormatFactory = ['$parse', '$locale', '$sce', '$exceptionHandler', function $$messageFormat(
1031
- $parse, $locale, $sce, $exceptionHandler) {
1020
+ $parse, $locale, $sce, $exceptionHandler) {
1032
1021
 
1033
1022
  function getStringifier(trustedContext, allOrNothing, text) {
1034
1023
  return function stringifier(value) {
1035
1024
  try {
1036
1025
  value = trustedContext ? $sce['getTrusted'](trustedContext, value) : $sce['valueOf'](value);
1037
- return allOrNothing && (value === void 0) ? value : stringify(value);
1026
+ return allOrNothing && (value === undefined) ? value : $$stringify(value);
1038
1027
  } catch (err) {
1039
1028
  $exceptionHandler($interpolateMinErr['interr'](text, err));
1040
1029
  }
@@ -1055,7 +1044,7 @@ var $$MessageFormatFactory = ['$parse', '$locale', '$sce', '$exceptionHandler',
1055
1044
  }];
1056
1045
 
1057
1046
  var $$interpolateDecorator = ['$$messageFormat', '$delegate', function $$interpolateDecorator($$messageFormat, $interpolate) {
1058
- if ($interpolate['startSymbol']() != "{{" || $interpolate['endSymbol']() != "}}") {
1047
+ if ($interpolate['startSymbol']() !== '{{' || $interpolate['endSymbol']() !== '}}') {
1059
1048
  throw $interpolateMinErr('nochgmustache', 'angular-message-format.js currently does not allow you to use custom start and end symbols for interpolation.');
1060
1049
  }
1061
1050
  var interpolate = $$messageFormat['interpolate'];
@@ -1068,6 +1057,7 @@ var $interpolateMinErr;
1068
1057
  var isFunction;
1069
1058
  var noop;
1070
1059
  var toJson;
1060
+ var $$stringify;
1071
1061
 
1072
1062
  var module = window['angular']['module']('ngMessageFormat', ['ng']);
1073
1063
  module['factory']('$$messageFormat', $$MessageFormatFactory);
@@ -1076,6 +1066,7 @@ module['config'](['$provide', function($provide) {
1076
1066
  isFunction = window['angular']['isFunction'];
1077
1067
  noop = window['angular']['noop'];
1078
1068
  toJson = window['angular']['toJson'];
1069
+ $$stringify = window['angular']['$$stringify'];
1079
1070
 
1080
1071
  $provide['decorator']('$interpolate', $$interpolateDecorator);
1081
1072
  }]);