rails-angularjs 1.3.12 → 1.3.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/lib/rails-angularjs/version.rb +2 -2
  4. data/vendor/assets/javascripts/{angularjs/angular-animate.js → angular-animate.js} +1 -1
  5. data/vendor/assets/javascripts/{angularjs/angular-animate.min.js → angular-animate.min.js} +1 -1
  6. data/vendor/assets/javascripts/{angularjs/angular-aria.js → angular-aria.js} +16 -6
  7. data/vendor/assets/javascripts/angular-aria.min.js +12 -0
  8. data/vendor/assets/javascripts/{angularjs/angular-cookies.js → angular-cookies.js} +1 -1
  9. data/vendor/assets/javascripts/{angularjs/angular-cookies.min.js → angular-cookies.min.js} +1 -1
  10. data/vendor/assets/javascripts/{angularjs/angular-loader.js → angular-loader.js} +2 -2
  11. data/vendor/assets/javascripts/{angularjs/angular-loader.min.js → angular-loader.min.js} +2 -2
  12. data/vendor/assets/javascripts/{angularjs/angular-messages.js → angular-messages.js} +1 -1
  13. data/vendor/assets/javascripts/{angularjs/angular-messages.min.js → angular-messages.min.js} +1 -1
  14. data/vendor/assets/javascripts/{angularjs/angular-mocks.js → angular-mocks.js} +2 -2
  15. data/vendor/assets/javascripts/{angularjs/angular-resource.js → angular-resource.js} +2 -1
  16. data/vendor/assets/javascripts/{angularjs/angular-resource.min.js → angular-resource.min.js} +1 -1
  17. data/vendor/assets/javascripts/{angularjs/angular-route.js → angular-route.js} +1 -1
  18. data/vendor/assets/javascripts/{angularjs/angular-route.min.js → angular-route.min.js} +1 -1
  19. data/vendor/assets/javascripts/{angularjs/angular-sanitize.js → angular-sanitize.js} +7 -19
  20. data/vendor/assets/javascripts/angular-sanitize.min.js +16 -0
  21. data/vendor/assets/javascripts/{angularjs/angular-scenario.js → angular-scenario.js} +89 -38
  22. data/vendor/assets/javascripts/{angularjs/angular-touch.js → angular-touch.js} +1 -1
  23. data/vendor/assets/javascripts/{angularjs/angular-touch.min.js → angular-touch.min.js} +1 -1
  24. data/vendor/assets/javascripts/{angularjs/angular.js → angular.js} +89 -38
  25. data/vendor/assets/javascripts/angular.min.js +250 -0
  26. data/vendor/assets/javascripts/{angularjs/unstable → unstable}/angular-animate.js +1 -1
  27. data/vendor/assets/javascripts/{angularjs/unstable → unstable}/angular-animate.min.js +1 -1
  28. data/vendor/assets/javascripts/{angularjs/unstable → unstable}/angular-aria.js +16 -6
  29. data/vendor/assets/javascripts/unstable/angular-aria.min.js +12 -0
  30. data/vendor/assets/javascripts/{angularjs/unstable → unstable}/angular-cookies.js +1 -1
  31. data/vendor/assets/javascripts/{angularjs/unstable → unstable}/angular-cookies.min.js +1 -1
  32. data/vendor/assets/javascripts/{angularjs/unstable → unstable}/angular-loader.js +2 -2
  33. data/vendor/assets/javascripts/{angularjs/unstable → unstable}/angular-loader.min.js +2 -2
  34. data/vendor/assets/javascripts/unstable/angular-messages.js +644 -0
  35. data/vendor/assets/javascripts/unstable/angular-messages.min.js +12 -0
  36. data/vendor/assets/javascripts/{angularjs/unstable → unstable}/angular-mocks.js +2 -2
  37. data/vendor/assets/javascripts/{angularjs/unstable → unstable}/angular-resource.js +3 -2
  38. data/vendor/assets/javascripts/{angularjs/unstable → unstable}/angular-resource.min.js +1 -1
  39. data/vendor/assets/javascripts/{angularjs/unstable → unstable}/angular-route.js +1 -1
  40. data/vendor/assets/javascripts/{angularjs/unstable → unstable}/angular-route.min.js +1 -1
  41. data/vendor/assets/javascripts/{angularjs/unstable → unstable}/angular-sanitize.js +12 -22
  42. data/vendor/assets/javascripts/unstable/angular-sanitize.min.js +16 -0
  43. data/vendor/assets/javascripts/{angularjs/unstable → unstable}/angular-scenario.js +317 -155
  44. data/vendor/assets/javascripts/{angularjs/unstable → unstable}/angular-touch.js +1 -1
  45. data/vendor/assets/javascripts/{angularjs/unstable → unstable}/angular-touch.min.js +1 -1
  46. data/vendor/assets/javascripts/{angularjs/unstable → unstable}/angular.js +317 -155
  47. data/vendor/assets/javascripts/unstable/angular.min.js +282 -0
  48. metadata +46 -46
  49. data/vendor/assets/javascripts/angularjs/angular-aria.min.js +0 -12
  50. data/vendor/assets/javascripts/angularjs/angular-sanitize.min.js +0 -16
  51. data/vendor/assets/javascripts/angularjs/angular.min.js +0 -250
  52. data/vendor/assets/javascripts/angularjs/unstable/angular-aria.min.js +0 -12
  53. data/vendor/assets/javascripts/angularjs/unstable/angular-messages.js +0 -400
  54. data/vendor/assets/javascripts/angularjs/unstable/angular-messages.min.js +0 -10
  55. data/vendor/assets/javascripts/angularjs/unstable/angular-sanitize.min.js +0 -16
  56. data/vendor/assets/javascripts/angularjs/unstable/angular.min.js +0 -281
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8dd69ceafbeeb1535412c4f5fe2f1c6c3bfac9a4
4
- data.tar.gz: 28a799664f6d13ecc46150083d88abb2ccd90f17
3
+ metadata.gz: 90a69e266a797d2c64aa28343e058f1978094d92
4
+ data.tar.gz: 6cfe1c1ec8cc27bfae8290422823b778a678667f
5
5
  SHA512:
6
- metadata.gz: 783bd487f3b8002e24d110ebb27ec43f52cada19d20c96a15d00e4d64b5a63d9f1851b933e4c534b3f5b8e5aa44a2d5b92bc74d7f2f04313af05deccf0dc97a2
7
- data.tar.gz: cdc7fd053c55f60fb0fd34f5f26cd12b2224f7ea14da4417c2335d1b6596cb74f8c46029dbd2c50cb5358e28a527d56fdefbe34c70b21b042b0c4df891451ccb
6
+ metadata.gz: aa57831b261244a2f715c15bde97559f7dd52f6737902d6cf06ecd14cb89354dd1ae28ff746862f6e47a0746371847b15636146725cd5c38e909c69ad63daf2e
7
+ data.tar.gz: 749f36044b85738341e1d2710639815129719ddce2cb6ea0dabd8a03ac81a4663fa966d5539e00b536da1bf2e100ae3a5897f1b2eb32e3491d9835b0112b8dec
data/README.md CHANGED
@@ -32,6 +32,6 @@ For minified version just add .min to file name:
32
32
 
33
33
  ## Versioning
34
34
 
35
- Current AngularJS version: 1.3.12
35
+ Current AngularJS version: 1.3.14
36
36
 
37
- Current AngularJS unstable version: 1.4.0-beta3
37
+ Current AngularJS unstable version: 1.4.0-beta5
@@ -1,4 +1,4 @@
1
1
  module RailsAngularJS
2
- VERSION = "1.3.12"
3
- UNSTABLE_VERSION = "1.4.0-beta.3"
2
+ VERSION = "1.3.14"
3
+ UNSTABLE_VERSION = "1.4.0-beta.5"
4
4
  end
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.3.12
2
+ * @license AngularJS v1.3.14
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*
2
- AngularJS v1.3.12
2
+ AngularJS v1.3.14
3
3
  (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.3.12
2
+ * @license AngularJS v1.3.14
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -105,7 +105,8 @@ function $AriaProvider() {
105
105
  * - **ariaMultiline** – `{boolean}` – Enables/disables aria-multiline tags
106
106
  * - **ariaValue** – `{boolean}` – Enables/disables aria-valuemin, aria-valuemax and aria-valuenow tags
107
107
  * - **tabindex** – `{boolean}` – Enables/disables tabindex tags
108
- * - **bindKeypress** – `{boolean}` – Enables/disables keypress event binding on ng-click
108
+ * - **bindKeypress** – `{boolean}` – Enables/disables keypress event binding on `<div>` and
109
+ * `<li>` elements with ng-click
109
110
  *
110
111
  * @description
111
112
  * Enables/disables various ARIA attributes
@@ -133,6 +134,7 @@ function $AriaProvider() {
133
134
  * @name $aria
134
135
  *
135
136
  * @description
137
+ * @priority 200
136
138
  *
137
139
  * The $aria service contains helper methods for applying common
138
140
  * [ARIA](http://www.w3.org/TR/wai-aria/) attributes to HTML directives.
@@ -209,6 +211,7 @@ ngAriaModule.directive('ngShow', ['$aria', function($aria) {
209
211
  return {
210
212
  restrict: 'A',
211
213
  require: '?ngModel',
214
+ priority: 200, //Make sure watches are fired after any other directives that affect the ngModel value
212
215
  link: function(scope, elem, attr, ngModel) {
213
216
  var shape = getShape(attr, elem);
214
217
  var needsTabIndex = shouldAttachAttr('tabindex', 'tabindex', elem);
@@ -221,19 +224,19 @@ ngAriaModule.directive('ngShow', ['$aria', function($aria) {
221
224
  if (needsTabIndex) {
222
225
  needsTabIndex = false;
223
226
  return function ngAriaRadioReaction(newVal) {
224
- var boolVal = newVal === attr.value;
227
+ var boolVal = (attr.value == ngModel.$viewValue);
225
228
  elem.attr('aria-checked', boolVal);
226
229
  elem.attr('tabindex', 0 - !boolVal);
227
230
  };
228
231
  } else {
229
232
  return function ngAriaRadioReaction(newVal) {
230
- elem.attr('aria-checked', newVal === attr.value);
233
+ elem.attr('aria-checked', (attr.value == ngModel.$viewValue));
231
234
  };
232
235
  }
233
236
  }
234
237
 
235
238
  function ngAriaCheckboxReaction(newVal) {
236
- elem.attr('aria-checked', !!newVal);
239
+ elem.attr('aria-checked', !ngModel.$isEmpty(ngModel.$viewValue));
237
240
  }
238
241
 
239
242
  switch (shape) {
@@ -308,11 +311,18 @@ ngAriaModule.directive('ngShow', ['$aria', function($aria) {
308
311
  compile: function(elem, attr) {
309
312
  var fn = $parse(attr.ngClick, /* interceptorFn */ null, /* expensiveChecks */ true);
310
313
  return function(scope, elem, attr) {
314
+
315
+ function isNodeOneOf(elem, nodeTypeArray) {
316
+ if (nodeTypeArray.indexOf(elem[0].nodeName) !== -1) {
317
+ return true;
318
+ }
319
+ }
320
+
311
321
  if ($aria.config('tabindex') && !elem.attr('tabindex')) {
312
322
  elem.attr('tabindex', 0);
313
323
  }
314
324
 
315
- if ($aria.config('bindKeypress') && !attr.ngKeypress) {
325
+ if ($aria.config('bindKeypress') && !attr.ngKeypress && isNodeOneOf(elem, ['DIV', 'LI'])) {
316
326
  elem.on('keypress', function(event) {
317
327
  if (event.keyCode === 32 || event.keyCode === 13) {
318
328
  scope.$apply(callback);
@@ -0,0 +1,12 @@
1
+ /*
2
+ AngularJS v1.3.14
3
+ (c) 2010-2014 Google, Inc. http://angularjs.org
4
+ License: MIT
5
+ */
6
+ (function(q,m,r){'use strict';m.module("ngAria",["ng"]).provider("$aria",function(){function a(a,f,b){return function(d,c,h){var k=h.$normalize(f);e[k]&&!h[k]&&d.$watch(h[a],function(d){b&&(d=!d);c.attr(f,d)})}}var e={ariaHidden:!0,ariaChecked:!0,ariaDisabled:!0,ariaRequired:!0,ariaInvalid:!0,ariaMultiline:!0,ariaValue:!0,tabindex:!0,bindKeypress:!0};this.config=function(a){e=m.extend(e,a)};this.$get=function(){return{config:function(a){return e[a]},$$watchExpr:a}}}).directive("ngShow",["$aria",function(a){return a.$$watchExpr("ngShow",
7
+ "aria-hidden",!0)}]).directive("ngHide",["$aria",function(a){return a.$$watchExpr("ngHide","aria-hidden",!1)}]).directive("ngModel",["$aria",function(a){function e(e,b,d){return a.config(b)&&!d.attr(e)}function g(a,b){var d=a.type,c=a.role;return"checkbox"===(d||c)||"menuitemcheckbox"===c?"checkbox":"radio"===(d||c)||"menuitemradio"===c?"radio":"range"===d||"progressbar"===c||"slider"===c?"range":"textbox"===(d||c)||"TEXTAREA"===b[0].nodeName?"multiline":""}return{restrict:"A",require:"?ngModel",
8
+ priority:200,link:function(f,b,d,c){function h(){return c.$modelValue}function k(){return l?(l=!1,function(a){a=d.value==c.$viewValue;b.attr("aria-checked",a);b.attr("tabindex",0-!a)}):function(a){b.attr("aria-checked",d.value==c.$viewValue)}}function p(a){b.attr("aria-checked",!c.$isEmpty(c.$viewValue))}var n=g(d,b),l=e("tabindex","tabindex",b);switch(n){case "radio":case "checkbox":e("aria-checked","ariaChecked",b)&&f.$watch(h,"radio"===n?k():p);break;case "range":a.config("ariaValue")&&(d.min&&
9
+ !b.attr("aria-valuemin")&&b.attr("aria-valuemin",d.min),d.max&&!b.attr("aria-valuemax")&&b.attr("aria-valuemax",d.max),b.attr("aria-valuenow")||f.$watch(h,function(a){b.attr("aria-valuenow",a)}));break;case "multiline":e("aria-multiline","ariaMultiline",b)&&b.attr("aria-multiline",!0)}l&&b.attr("tabindex",0);c.$validators.required&&e("aria-required","ariaRequired",b)&&f.$watch(function(){return c.$error.required},function(a){b.attr("aria-required",!!a)});e("aria-invalid","ariaInvalid",b)&&f.$watch(function(){return c.$invalid},
10
+ function(a){b.attr("aria-invalid",!!a)})}}}]).directive("ngDisabled",["$aria",function(a){return a.$$watchExpr("ngDisabled","aria-disabled")}]).directive("ngMessages",function(){return{restrict:"A",require:"?ngMessages",link:function(a,e,g,f){e.attr("aria-live")||e.attr("aria-live","assertive")}}}).directive("ngClick",["$aria","$parse",function(a,e){return{restrict:"A",compile:function(g,f){var b=e(f.ngClick,null,!0);return function(d,c,e){function f(a,b){if(-1!==b.indexOf(a[0].nodeName))return!0}
11
+ a.config("tabindex")&&!c.attr("tabindex")&&c.attr("tabindex",0);if(a.config("bindKeypress")&&!e.ngKeypress&&f(c,["DIV","LI"]))c.on("keypress",function(a){function c(){b(d,{$event:a})}32!==a.keyCode&&13!==a.keyCode||d.$apply(c)})}}}}]).directive("ngDblclick",["$aria",function(a){return function(e,g,f){a.config("tabindex")&&!g.attr("tabindex")&&g.attr("tabindex",0)}}])})(window,window.angular);
12
+ //# sourceMappingURL=angular-aria.min.js.map
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.3.12
2
+ * @license AngularJS v1.3.14
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*
2
- AngularJS v1.3.12
2
+ AngularJS v1.3.14
3
3
  (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.3.12
2
+ * @license AngularJS v1.3.14
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -55,7 +55,7 @@ function minErr(module, ErrorConstructor) {
55
55
  return match;
56
56
  });
57
57
 
58
- message = message + '\nhttp://errors.angularjs.org/1.3.12/' +
58
+ message = message + '\nhttp://errors.angularjs.org/1.3.14/' +
59
59
  (module ? module + '/' : '') + code;
60
60
  for (i = 2; i < arguments.length; i++) {
61
61
  message = message + (i == 2 ? '?' : '&') + 'p' + (i - 2) + '=' +
@@ -1,9 +1,9 @@
1
1
  /*
2
- AngularJS v1.3.12
2
+ AngularJS v1.3.14
3
3
  (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  License: MIT
5
5
  */
6
- (function(){'use strict';function d(b){return function(){var c=arguments[0],e;e="["+(b?b+":":"")+c+"] http://errors.angularjs.org/1.3.12/"+(b?b+"/":"")+c;for(c=1;c<arguments.length;c++){e=e+(1==c?"?":"&")+"p"+(c-1)+"=";var d=encodeURIComponent,a;a=arguments[c];a="function"==typeof a?a.toString().replace(/ \{[\s\S]*$/,""):"undefined"==typeof a?"undefined":"string"!=typeof a?JSON.stringify(a):a;e+=d(a)}return Error(e)}}(function(b){function c(a,c,b){return a[c]||(a[c]=b())}var e=d("$injector"),n=d("ng");
6
+ (function(){'use strict';function d(b){return function(){var c=arguments[0],e;e="["+(b?b+":":"")+c+"] http://errors.angularjs.org/1.3.14/"+(b?b+"/":"")+c;for(c=1;c<arguments.length;c++){e=e+(1==c?"?":"&")+"p"+(c-1)+"=";var d=encodeURIComponent,a;a=arguments[c];a="function"==typeof a?a.toString().replace(/ \{[\s\S]*$/,""):"undefined"==typeof a?"undefined":"string"!=typeof a?JSON.stringify(a):a;e+=d(a)}return Error(e)}}(function(b){function c(a,c,b){return a[c]||(a[c]=b())}var e=d("$injector"),n=d("ng");
7
7
  b=c(b,"angular",Object);b.$$minErr=b.$$minErr||d;return c(b,"module",function(){var a={};return function(b,d,g){if("hasOwnProperty"===b)throw n("badname","module");d&&a.hasOwnProperty(b)&&(a[b]=null);return c(a,b,function(){function a(b,d,e,f){f||(f=c);return function(){f[e||"push"]([b,d,arguments]);return h}}if(!d)throw e("nomod",b);var c=[],k=[],l=[],m=a("$injector","invoke","push",k),h={_invokeQueue:c,_configBlocks:k,_runBlocks:l,requires:d,name:b,provider:a("$provide","provider"),factory:a("$provide",
8
8
  "factory"),service:a("$provide","service"),value:a("$provide","value"),constant:a("$provide","constant","unshift"),animation:a("$animateProvider","register"),filter:a("$filterProvider","register"),controller:a("$controllerProvider","register"),directive:a("$compileProvider","directive"),config:m,run:function(a){l.push(a);return this}};g&&m(g);return h})}})})(window)})(window);
9
9
  //# sourceMappingURL=angular-loader.min.js.map
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.3.12
2
+ * @license AngularJS v1.3.14
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*
2
- AngularJS v1.3.12
2
+ AngularJS v1.3.14
3
3
  (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.3.12
2
+ * @license AngularJS v1.3.14
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -2134,7 +2134,7 @@ angular.mock.$RootScopeDecorator = ['$delegate', function($delegate) {
2134
2134
  if (window.jasmine || window.mocha) {
2135
2135
 
2136
2136
  var currentSpec = null,
2137
- annotatedFunctions,
2137
+ annotatedFunctions = [],
2138
2138
  isSpecRunning = function() {
2139
2139
  return !!currentSpec;
2140
2140
  };
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.3.12
2
+ * @license AngularJS v1.3.14
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -213,6 +213,7 @@ function shallowClearAndCopy(src, dst) {
213
213
  * - non-GET "class" actions: `Resource.action([parameters], postData, [success], [error])`
214
214
  * - non-GET instance actions: `instance.$action([parameters], [success], [error])`
215
215
  *
216
+ *
216
217
  * Success callback is called with (value, responseHeaders) arguments. Error callback is called
217
218
  * with (httpResponse) argument.
218
219
  *
@@ -1,5 +1,5 @@
1
1
  /*
2
- AngularJS v1.3.12
2
+ AngularJS v1.3.14
3
3
  (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.3.12
2
+ * @license AngularJS v1.3.14
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*
2
- AngularJS v1.3.12
2
+ AngularJS v1.3.14
3
3
  (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.3.12
2
+ * @license AngularJS v1.3.14
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -341,7 +341,8 @@ function htmlParser(html, handler) {
341
341
  }
342
342
 
343
343
  } else {
344
- html = html.replace(new RegExp("(.*)<\\s*\\/\\s*" + stack.last() + "[^>]*>", 'i'),
344
+ // IE versions 9 and 10 do not understand the regex '[^]', so using a workaround with [\W\w].
345
+ html = html.replace(new RegExp("([\\W\\w]*)<\\s*\\/\\s*" + stack.last() + "[^>]*>", 'i'),
345
346
  function(all, text) {
346
347
  text = text.replace(COMMENT_REGEXP, "$1").replace(CDATA_REGEXP, "$1");
347
348
 
@@ -415,7 +416,6 @@ function htmlParser(html, handler) {
415
416
  }
416
417
 
417
418
  var hiddenPre=document.createElement("pre");
418
- var spaceRe = /^(\s*)([\s\S]*?)(\s*)$/;
419
419
  /**
420
420
  * decodes all entities into regular string
421
421
  * @param value
@@ -424,22 +424,10 @@ var spaceRe = /^(\s*)([\s\S]*?)(\s*)$/;
424
424
  function decodeEntities(value) {
425
425
  if (!value) { return ''; }
426
426
 
427
- // Note: IE8 does not preserve spaces at the start/end of innerHTML
428
- // so we must capture them and reattach them afterward
429
- var parts = spaceRe.exec(value);
430
- var spaceBefore = parts[1];
431
- var spaceAfter = parts[3];
432
- var content = parts[2];
433
- if (content) {
434
- hiddenPre.innerHTML=content.replace(/</g,"&lt;");
435
- // innerText depends on styling as it doesn't display hidden elements.
436
- // Therefore, it's better to use textContent not to cause unnecessary
437
- // reflows. However, IE<9 don't support textContent so the innerText
438
- // fallback is necessary.
439
- content = 'textContent' in hiddenPre ?
440
- hiddenPre.textContent : hiddenPre.innerText;
441
- }
442
- return spaceBefore + content + spaceAfter;
427
+ hiddenPre.innerHTML = value.replace(/</g,"&lt;");
428
+ // innerText depends on styling as it doesn't display hidden elements.
429
+ // Therefore, it's better to use textContent not to cause unnecessary reflows.
430
+ return hiddenPre.textContent;
443
431
  }
444
432
 
445
433
  /**
@@ -0,0 +1,16 @@
1
+ /*
2
+ AngularJS v1.3.14
3
+ (c) 2010-2014 Google, Inc. http://angularjs.org
4
+ License: MIT
5
+ */
6
+ (function(n,h,p){'use strict';function E(a){var e=[];r(e,h.noop).chars(a);return e.join("")}function g(a){var e={};a=a.split(",");var d;for(d=0;d<a.length;d++)e[a[d]]=!0;return e}function F(a,e){function d(a,b,d,l){b=h.lowercase(b);if(s[b])for(;f.last()&&t[f.last()];)c("",f.last());u[b]&&f.last()==b&&c("",b);(l=v[b]||!!l)||f.push(b);var m={};d.replace(G,function(a,b,e,c,d){m[b]=q(e||c||d||"")});e.start&&e.start(b,m,l)}function c(a,b){var c=0,d;if(b=h.lowercase(b))for(c=f.length-1;0<=c&&f[c]!=b;c--);
7
+ if(0<=c){for(d=f.length-1;d>=c;d--)e.end&&e.end(f[d]);f.length=c}}"string"!==typeof a&&(a=null===a||"undefined"===typeof a?"":""+a);var b,k,f=[],m=a,l;for(f.last=function(){return f[f.length-1]};a;){l="";k=!0;if(f.last()&&w[f.last()])a=a.replace(new RegExp("([\\W\\w]*)<\\s*\\/\\s*"+f.last()+"[^>]*>","i"),function(a,b){b=b.replace(H,"$1").replace(I,"$1");e.chars&&e.chars(q(b));return""}),c("",f.last());else{if(0===a.indexOf("\x3c!--"))b=a.indexOf("--",4),0<=b&&a.lastIndexOf("--\x3e",b)===b&&(e.comment&&
8
+ e.comment(a.substring(4,b)),a=a.substring(b+3),k=!1);else if(x.test(a)){if(b=a.match(x))a=a.replace(b[0],""),k=!1}else if(J.test(a)){if(b=a.match(y))a=a.substring(b[0].length),b[0].replace(y,c),k=!1}else K.test(a)&&((b=a.match(z))?(b[4]&&(a=a.substring(b[0].length),b[0].replace(z,d)),k=!1):(l+="<",a=a.substring(1)));k&&(b=a.indexOf("<"),l+=0>b?a:a.substring(0,b),a=0>b?"":a.substring(b),e.chars&&e.chars(q(l)))}if(a==m)throw L("badparse",a);m=a}c()}function q(a){if(!a)return"";A.innerHTML=a.replace(/</g,
9
+ "&lt;");return A.textContent}function B(a){return a.replace(/&/g,"&amp;").replace(M,function(a){var d=a.charCodeAt(0);a=a.charCodeAt(1);return"&#"+(1024*(d-55296)+(a-56320)+65536)+";"}).replace(N,function(a){return"&#"+a.charCodeAt(0)+";"}).replace(/</g,"&lt;").replace(/>/g,"&gt;")}function r(a,e){var d=!1,c=h.bind(a,a.push);return{start:function(a,k,f){a=h.lowercase(a);!d&&w[a]&&(d=a);d||!0!==C[a]||(c("<"),c(a),h.forEach(k,function(d,f){var k=h.lowercase(f),g="img"===a&&"src"===k||"background"===
10
+ k;!0!==O[k]||!0===D[k]&&!e(d,g)||(c(" "),c(f),c('="'),c(B(d)),c('"'))}),c(f?"/>":">"))},end:function(a){a=h.lowercase(a);d||!0!==C[a]||(c("</"),c(a),c(">"));a==d&&(d=!1)},chars:function(a){d||c(B(a))}}}var L=h.$$minErr("$sanitize"),z=/^<((?:[a-zA-Z])[\w:-]*)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)\s*(>?)/,y=/^<\/\s*([\w:-]+)[^>]*>/,G=/([\w:-]+)(?:\s*=\s*(?:(?:"((?:[^"])*)")|(?:'((?:[^'])*)')|([^>\s]+)))?/g,K=/^</,J=/^<\//,H=/\x3c!--(.*?)--\x3e/g,x=/<!DOCTYPE([^>]*?)>/i,
11
+ I=/<!\[CDATA\[(.*?)]]\x3e/g,M=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,N=/([^\#-~| |!])/g,v=g("area,br,col,hr,img,wbr");n=g("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr");p=g("rp,rt");var u=h.extend({},p,n),s=h.extend({},n,g("address,article,aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,script,section,table,ul")),t=h.extend({},p,g("a,abbr,acronym,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s,samp,small,span,strike,strong,sub,sup,time,tt,u,var"));
12
+ n=g("animate,animateColor,animateMotion,animateTransform,circle,defs,desc,ellipse,font-face,font-face-name,font-face-src,g,glyph,hkern,image,linearGradient,line,marker,metadata,missing-glyph,mpath,path,polygon,polyline,radialGradient,rect,set,stop,svg,switch,text,title,tspan,use");var w=g("script,style"),C=h.extend({},v,s,t,u,n),D=g("background,cite,href,longdesc,src,usemap,xlink:href");n=g("abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,scope,scrolling,shape,size,span,start,summary,target,title,type,valign,value,vspace,width");
13
+ p=g("accent-height,accumulate,additive,alphabetic,arabic-form,ascent,attributeName,attributeType,baseProfile,bbox,begin,by,calcMode,cap-height,class,color,color-rendering,content,cx,cy,d,dx,dy,descent,display,dur,end,fill,fill-rule,font-family,font-size,font-stretch,font-style,font-variant,font-weight,from,fx,fy,g1,g2,glyph-name,gradientUnits,hanging,height,horiz-adv-x,horiz-origin-x,ideographic,k,keyPoints,keySplines,keyTimes,lang,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mathematical,max,min,offset,opacity,orient,origin,overline-position,overline-thickness,panose-1,path,pathLength,points,preserveAspectRatio,r,refX,refY,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,rotate,rx,ry,slope,stemh,stemv,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,systemLanguage,target,text-anchor,to,transform,type,u1,u2,underline-position,underline-thickness,unicode,unicode-range,units-per-em,values,version,viewBox,visibility,width,widths,x,x-height,x1,x2,xlink:actuate,xlink:arcrole,xlink:role,xlink:show,xlink:title,xlink:type,xml:base,xml:lang,xml:space,xmlns,xmlns:xlink,y,y1,y2,zoomAndPan");
14
+ var O=h.extend({},D,p,n),A=document.createElement("pre");h.module("ngSanitize",[]).provider("$sanitize",function(){this.$get=["$$sanitizeUri",function(a){return function(e){var d=[];F(e,r(d,function(c,b){return!/^unsafe/.test(a(c,b))}));return d.join("")}}]});h.module("ngSanitize").filter("linky",["$sanitize",function(a){var e=/((ftp|https?):\/\/|(www\.)|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s.;,(){}<>"\u201d\u2019]/,d=/^mailto:/;return function(c,b){function k(a){a&&g.push(E(a))}function f(a,c){g.push("<a ");
15
+ h.isDefined(b)&&g.push('target="',b,'" ');g.push('href="',a.replace(/"/g,"&quot;"),'">');k(c);g.push("</a>")}if(!c)return c;for(var m,l=c,g=[],n,p;m=l.match(e);)n=m[0],m[2]||m[4]||(n=(m[3]?"http://":"mailto:")+n),p=m.index,k(l.substr(0,p)),f(n,m[0].replace(d,"")),l=l.substring(p+m[0].length);k(l);return a(g.join(""))}}])})(window,window.angular);
16
+ //# sourceMappingURL=angular-sanitize.min.js.map
@@ -9190,7 +9190,7 @@ return jQuery;
9190
9190
  }));
9191
9191
 
9192
9192
  /**
9193
- * @license AngularJS v1.3.12
9193
+ * @license AngularJS v1.3.14
9194
9194
  * (c) 2010-2014 Google, Inc. http://angularjs.org
9195
9195
  * License: MIT
9196
9196
  */
@@ -9246,7 +9246,7 @@ function minErr(module, ErrorConstructor) {
9246
9246
  return match;
9247
9247
  });
9248
9248
 
9249
- message = message + '\nhttp://errors.angularjs.org/1.3.12/' +
9249
+ message = message + '\nhttp://errors.angularjs.org/1.3.14/' +
9250
9250
  (module ? module + '/' : '') + code;
9251
9251
  for (i = 2; i < arguments.length; i++) {
9252
9252
  message = message + (i == 2 ? '?' : '&') + 'p' + (i - 2) + '=' +
@@ -11313,11 +11313,11 @@ function toDebugString(obj) {
11313
11313
  * - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat".
11314
11314
  */
11315
11315
  var version = {
11316
- full: '1.3.12', // all of these placeholder strings will be replaced by grunt's
11316
+ full: '1.3.14', // all of these placeholder strings will be replaced by grunt's
11317
11317
  major: 1, // package task
11318
11318
  minor: 3,
11319
- dot: 12,
11320
- codeName: 'outlandish-knitting'
11319
+ dot: 14,
11320
+ codeName: 'instantaneous-browserification'
11321
11321
  };
11322
11322
 
11323
11323
 
@@ -20563,7 +20563,7 @@ function $LocationProvider() {
20563
20563
 
20564
20564
 
20565
20565
  // rewrite hashbang url <> html5 url
20566
- if ($location.absUrl() != initialUrl) {
20566
+ if (trimEmptyHash($location.absUrl()) != trimEmptyHash(initialUrl)) {
20567
20567
  $browser.url($location.absUrl(), true);
20568
20568
  }
20569
20569
 
@@ -27046,20 +27046,23 @@ var htmlAnchorDirective = valueFn({
27046
27046
  *
27047
27047
  * @description
27048
27048
  *
27049
- * We shouldn't do this, because it will make the button enabled on Chrome/Firefox but not on IE8 and older IEs:
27049
+ * This directive sets the `disabled` attribute on the element if the
27050
+ * {@link guide/expression expression} inside `ngDisabled` evaluates to truthy.
27051
+ *
27052
+ * A special directive is necessary because we cannot use interpolation inside the `disabled`
27053
+ * attribute. The following example would make the button enabled on Chrome/Firefox
27054
+ * but not on older IEs:
27055
+ *
27050
27056
  * ```html
27051
- * <div ng-init="scope = { isDisabled: false }">
27052
- * <button disabled="{{scope.isDisabled}}">Disabled</button>
27057
+ * <div ng-init="isDisabled = false">
27058
+ * <button disabled="{{isDisabled}}">Disabled</button>
27053
27059
  * </div>
27054
27060
  * ```
27055
27061
  *
27056
- * The HTML specification does not require browsers to preserve the values of boolean attributes
27057
- * such as disabled. (Their presence means true and their absence means false.)
27062
+ * This is because the HTML specification does not require browsers to preserve the values of
27063
+ * boolean attributes such as `disabled` (Their presence means true and their absence means false.)
27058
27064
  * If we put an Angular interpolation expression into such an attribute then the
27059
27065
  * binding information would be lost when the browser removes the attribute.
27060
- * The `ngDisabled` directive solves this problem for the `disabled` attribute.
27061
- * This complementary directive is not removed by the browser and so provides
27062
- * a permanent reliable place to store the binding information.
27063
27066
  *
27064
27067
  * @example
27065
27068
  <example>
@@ -27078,7 +27081,7 @@ var htmlAnchorDirective = valueFn({
27078
27081
  *
27079
27082
  * @element INPUT
27080
27083
  * @param {expression} ngDisabled If the {@link guide/expression expression} is truthy,
27081
- * then special attribute "disabled" will be set on the element
27084
+ * then the `disabled` attribute will be set on the element
27082
27085
  */
27083
27086
 
27084
27087
 
@@ -29080,7 +29083,7 @@ function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {
29080
29083
  return value;
29081
29084
  });
29082
29085
 
29083
- if (attr.min || attr.ngMin) {
29086
+ if (isDefined(attr.min) || attr.ngMin) {
29084
29087
  var minVal;
29085
29088
  ctrl.$validators.min = function(value) {
29086
29089
  return ctrl.$isEmpty(value) || isUndefined(minVal) || value >= minVal;
@@ -29096,7 +29099,7 @@ function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {
29096
29099
  });
29097
29100
  }
29098
29101
 
29099
- if (attr.max || attr.ngMax) {
29102
+ if (isDefined(attr.max) || attr.ngMax) {
29100
29103
  var maxVal;
29101
29104
  ctrl.$validators.max = function(value) {
29102
29105
  return ctrl.$isEmpty(value) || isUndefined(maxVal) || value <= maxVal;
@@ -31902,6 +31905,7 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
31902
31905
  ngModelGet = parsedNgModel,
31903
31906
  ngModelSet = parsedNgModelAssign,
31904
31907
  pendingDebounce = null,
31908
+ parserValid,
31905
31909
  ctrl = this;
31906
31910
 
31907
31911
  this.$$setOptions = function(options) {
@@ -32174,16 +32178,12 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
32174
32178
  // the model although neither viewValue nor the model on the scope changed
32175
32179
  var modelValue = ctrl.$$rawModelValue;
32176
32180
 
32177
- // Check if the there's a parse error, so we don't unset it accidentially
32178
- var parserName = ctrl.$$parserName || 'parse';
32179
- var parserValid = ctrl.$error[parserName] ? false : undefined;
32180
-
32181
32181
  var prevValid = ctrl.$valid;
32182
32182
  var prevModelValue = ctrl.$modelValue;
32183
32183
 
32184
32184
  var allowInvalid = ctrl.$options && ctrl.$options.allowInvalid;
32185
32185
 
32186
- ctrl.$$runValidators(parserValid, modelValue, viewValue, function(allValid) {
32186
+ ctrl.$$runValidators(modelValue, viewValue, function(allValid) {
32187
32187
  // If there was no change in validity, don't update the model
32188
32188
  // This prevents changing an invalid modelValue to undefined
32189
32189
  if (!allowInvalid && prevValid !== allValid) {
@@ -32201,12 +32201,12 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
32201
32201
 
32202
32202
  };
32203
32203
 
32204
- this.$$runValidators = function(parseValid, modelValue, viewValue, doneCallback) {
32204
+ this.$$runValidators = function(modelValue, viewValue, doneCallback) {
32205
32205
  currentValidationRunId++;
32206
32206
  var localValidationRunId = currentValidationRunId;
32207
32207
 
32208
32208
  // check parser error
32209
- if (!processParseErrors(parseValid)) {
32209
+ if (!processParseErrors()) {
32210
32210
  validationDone(false);
32211
32211
  return;
32212
32212
  }
@@ -32216,21 +32216,22 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
32216
32216
  }
32217
32217
  processAsyncValidators();
32218
32218
 
32219
- function processParseErrors(parseValid) {
32219
+ function processParseErrors() {
32220
32220
  var errorKey = ctrl.$$parserName || 'parse';
32221
- if (parseValid === undefined) {
32221
+ if (parserValid === undefined) {
32222
32222
  setValidity(errorKey, null);
32223
32223
  } else {
32224
- setValidity(errorKey, parseValid);
32225
- if (!parseValid) {
32224
+ if (!parserValid) {
32226
32225
  forEach(ctrl.$validators, function(v, name) {
32227
32226
  setValidity(name, null);
32228
32227
  });
32229
32228
  forEach(ctrl.$asyncValidators, function(v, name) {
32230
32229
  setValidity(name, null);
32231
32230
  });
32232
- return false;
32233
32231
  }
32232
+ // Set the parse error last, to prevent unsetting it, should a $validators key == parserName
32233
+ setValidity(errorKey, parserValid);
32234
+ return parserValid;
32234
32235
  }
32235
32236
  return true;
32236
32237
  }
@@ -32325,7 +32326,7 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
32325
32326
  this.$$parseAndValidate = function() {
32326
32327
  var viewValue = ctrl.$$lastCommittedViewValue;
32327
32328
  var modelValue = viewValue;
32328
- var parserValid = isUndefined(modelValue) ? undefined : true;
32329
+ parserValid = isUndefined(modelValue) ? undefined : true;
32329
32330
 
32330
32331
  if (parserValid) {
32331
32332
  for (var i = 0; i < ctrl.$parsers.length; i++) {
@@ -32351,7 +32352,7 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
32351
32352
 
32352
32353
  // Pass the $$lastCommittedViewValue here, because the cached viewValue might be out of date.
32353
32354
  // This can happen if e.g. $setViewValue is called from inside a parser
32354
- ctrl.$$runValidators(parserValid, modelValue, ctrl.$$lastCommittedViewValue, function(allValid) {
32355
+ ctrl.$$runValidators(modelValue, ctrl.$$lastCommittedViewValue, function(allValid) {
32355
32356
  if (!allowInvalid) {
32356
32357
  // Note: Don't check ctrl.$valid here, as we could have
32357
32358
  // external validators (e.g. calculated on the server),
@@ -32472,6 +32473,7 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
32472
32473
  // TODO(perf): why not move this to the action fn?
32473
32474
  if (modelValue !== ctrl.$modelValue) {
32474
32475
  ctrl.$modelValue = ctrl.$$rawModelValue = modelValue;
32476
+ parserValid = undefined;
32475
32477
 
32476
32478
  var formatters = ctrl.$formatters,
32477
32479
  idx = formatters.length;
@@ -32484,7 +32486,7 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
32484
32486
  ctrl.$viewValue = ctrl.$$lastCommittedViewValue = viewValue;
32485
32487
  ctrl.$render();
32486
32488
 
32487
- ctrl.$$runValidators(undefined, modelValue, viewValue, noop);
32489
+ ctrl.$$runValidators(modelValue, viewValue, noop);
32488
32490
  }
32489
32491
  }
32490
32492
 
@@ -33300,6 +33302,55 @@ var ngPluralizeDirective = ['$locale', '$interpolate', function($locale, $interp
33300
33302
  * when keys are deleted and reinstated.
33301
33303
  *
33302
33304
  *
33305
+ * # Tracking and Duplicates
33306
+ *
33307
+ * When the contents of the collection change, `ngRepeat` makes the corresponding changes to the DOM:
33308
+ *
33309
+ * * When an item is added, a new instance of the template is added to the DOM.
33310
+ * * When an item is removed, its template instance is removed from the DOM.
33311
+ * * When items are reordered, their respective templates are reordered in the DOM.
33312
+ *
33313
+ * By default, `ngRepeat` does not allow duplicate items in arrays. This is because when
33314
+ * there are duplicates, it is not possible to maintain a one-to-one mapping between collection
33315
+ * items and DOM elements.
33316
+ *
33317
+ * If you do need to repeat duplicate items, you can substitute the default tracking behavior
33318
+ * with your own using the `track by` expression.
33319
+ *
33320
+ * For example, you may track items by the index of each item in the collection, using the
33321
+ * special scope property `$index`:
33322
+ * ```html
33323
+ * <div ng-repeat="n in [42, 42, 43, 43] track by $index">
33324
+ * {{n}}
33325
+ * </div>
33326
+ * ```
33327
+ *
33328
+ * You may use arbitrary expressions in `track by`, including references to custom functions
33329
+ * on the scope:
33330
+ * ```html
33331
+ * <div ng-repeat="n in [42, 42, 43, 43] track by myTrackingFunction(n)">
33332
+ * {{n}}
33333
+ * </div>
33334
+ * ```
33335
+ *
33336
+ * If you are working with objects that have an identifier property, you can track
33337
+ * by the identifier instead of the whole object. Should you reload your data later, `ngRepeat`
33338
+ * will not have to rebuild the DOM elements for items it has already rendered, even if the
33339
+ * JavaScript objects in the collection have been substituted for new ones:
33340
+ * ```html
33341
+ * <div ng-repeat="model in collection track by model.id">
33342
+ * {{model.name}}
33343
+ * </div>
33344
+ * ```
33345
+ *
33346
+ * When no `track by` expression is provided, it is equivalent to tracking by the built-in
33347
+ * `$id` function, which tracks items by their identity:
33348
+ * ```html
33349
+ * <div ng-repeat="obj in collection track by $id(obj)">
33350
+ * {{obj.prop}}
33351
+ * </div>
33352
+ * ```
33353
+ *
33303
33354
  * # Special repeat start and end points
33304
33355
  * To repeat a series of elements instead of just one parent element, ngRepeat (as well as other ng directives) supports extending
33305
33356
  * the range of the repeater by defining explicit start and end points by using **ng-repeat-start** and **ng-repeat-end** respectively.
@@ -33367,12 +33418,12 @@ var ngPluralizeDirective = ['$locale', '$interpolate', function($locale, $interp
33367
33418
  *
33368
33419
  * For example: `(name, age) in {'adam':10, 'amalie':12}`.
33369
33420
  *
33370
- * * `variable in expression track by tracking_expression` – You can also provide an optional tracking function
33371
- * which can be used to associate the objects in the collection with the DOM elements. If no tracking function
33372
- * is specified the ng-repeat associates elements by identity in the collection. It is an error to have
33373
- * more than one tracking function to resolve to the same key. (This would mean that two distinct objects are
33374
- * mapped to the same DOM element, which is not possible.) Filters should be applied to the expression,
33375
- * before specifying a tracking expression.
33421
+ * * `variable in expression track by tracking_expression` – You can also provide an optional tracking expression
33422
+ * which can be used to associate the objects in the collection with the DOM elements. If no tracking expression
33423
+ * is specified, ng-repeat associates elements by identity. It is an error to have
33424
+ * more than one tracking expression value resolve to the same key. (This would mean that two distinct objects are
33425
+ * mapped to the same DOM element, which is not possible.) If filters are used in the expression, they should be
33426
+ * applied before the tracking expression.
33376
33427
  *
33377
33428
  * For example: `item in items` is equivalent to `item in items track by $id(item)`. This implies that the DOM elements
33378
33429
  * will be associated by item identity in the array.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license AngularJS v1.3.12
2
+ * @license AngularJS v1.3.14
3
3
  * (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  * License: MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*
2
- AngularJS v1.3.12
2
+ AngularJS v1.3.14
3
3
  (c) 2010-2014 Google, Inc. http://angularjs.org
4
4
  License: MIT
5
5
  */