|
| 1 | +<a name="1.4.5"></a> |
| 2 | +# 1.4.5 permanent-internship (2015-08-28) |
| 3 | + |
| 4 | + |
| 5 | +## Bug Fixes |
| 6 | + |
| 7 | +- **$animate:** `$animate.enabled(false)` should disable animations on $animateCss as well |
| 8 | + ([c3d5e33e](https://github.com/angular/angular.js/commit/c3d5e33e18bd9e423e2d0678e85564fad1dba99f), |
| 9 | + [#12696](https://github.com/angular/angular.js/issues/12696), [#12685](https://github.com/angular/angular.js/issues/12685)) |
| 10 | +- **$animateCss:** |
| 11 | + - do not throw errors when a closing timeout is fired on a removed element |
| 12 | + ([2f6b6fb7](https://github.com/angular/angular.js/commit/2f6b6fb7a1dee0ff97c5d2959b927347eeda6e8b), |
| 13 | + [#12650](https://github.com/angular/angular.js/issues/12650)) |
| 14 | + - fix parse errors on older Android WebViews |
| 15 | + ([1cc9c9ca](https://github.com/angular/angular.js/commit/1cc9c9ca9d9698356ea541517b3d06ce6556c01d), |
| 16 | + [#12610](https://github.com/angular/angular.js/issues/12610)) |
| 17 | + - properly handle cancellation timeouts for follow-up animations |
| 18 | + ([d8816731](https://github.com/angular/angular.js/commit/d88167318d1c69f0dbd2101c05955eb450c34fd5), |
| 19 | + [#12490](https://github.com/angular/angular.js/issues/12490), [#12359](https://github.com/angular/angular.js/issues/12359)) |
| 20 | + - ensure failed animations clear the internal cache |
| 21 | + ([0a75a3db](https://github.com/angular/angular.js/commit/0a75a3db6ef265389c8c955981c2fe67bb4f7769), |
| 22 | + [#12214](https://github.com/angular/angular.js/issues/12214), [#12518](https://github.com/angular/angular.js/issues/12518), [#12381](https://github.com/angular/angular.js/issues/12381)) |
| 23 | + - the transitions options delay value should be applied before class application |
| 24 | + ([0c81e9fd](https://github.com/angular/angular.js/commit/0c81e9fd25285dd757db98d458919776a1fb62fc), |
| 25 | + [#12584](https://github.com/angular/angular.js/issues/12584)) |
| 26 | +- **ngAnimate:** |
| 27 | + - use requestAnimationFrame to space out child animations |
| 28 | + ([ea8016c4](https://github.com/angular/angular.js/commit/ea8016c4c8f55bc021549f342618ed869998e335), |
| 29 | + [#12669](https://github.com/angular/angular.js/issues/12669), [#12594](https://github.com/angular/angular.js/issues/12594), [#12655](https://github.com/angular/angular.js/issues/12655), [#12631](https://github.com/angular/angular.js/issues/12631), [#12612](https://github.com/angular/angular.js/issues/12612), [#12187](https://github.com/angular/angular.js/issues/12187)) |
| 30 | + - only buffer rAF requests within the animation runners |
| 31 | + ([dc48aadd](https://github.com/angular/angular.js/commit/dc48aadd26bbf1797c1c408f63ffde99d67414a9), |
| 32 | + [#12280](https://github.com/angular/angular.js/issues/12280)) |
| 33 | +- **ngModel:** validate pattern against the viewValue |
| 34 | + ([0e001084](https://github.com/angular/angular.js/commit/0e001084ffff8674efad289d37cb16cc4e46b50a), |
| 35 | + [#12344](https://github.com/angular/angular.js/issues/12344)) |
| 36 | +- **ngResources:** support IPv6 URLs |
| 37 | + ([b643f0d3](https://github.com/angular/angular.js/commit/b643f0d3223a627ef813f0777524e25d2dd95371), |
| 38 | + [#12512](https://github.com/angular/angular.js/issues/12512), [#12532](https://github.com/angular/angular.js/issues/12532)) |
| 39 | + |
| 40 | + |
| 41 | +## Breaking Changes |
| 42 | + |
| 43 | +- **ngModel:** due to [0e001084](https://github.com/angular/angular.js/commit/0e001084ffff8674efad289d37cb16cc4e46b50a), |
| 44 | + |
| 45 | + |
| 46 | +The `ngPattern` and `pattern` directives will validate the regex |
| 47 | +against the `viewValue` of `ngModel`, i.e. the value of the model |
| 48 | +before the $parsers are applied. Previously, the modelValue |
| 49 | +(the result of the $parsers) was validated. |
| 50 | + |
| 51 | +This fixes issues where `input[date]` and `input[number]` cannot |
| 52 | +be validated because the viewValue string is parsed into |
| 53 | +`Date` and `Number` respectively (starting with Angular 1.3). |
| 54 | +It also brings the directives in line with HTML5 constraint |
| 55 | +validation, which validates against the input value. |
| 56 | + |
| 57 | +This change is unlikely to cause applications to fail, because even |
| 58 | +in Angular 1.2, the value that was validated by pattern could have |
| 59 | +been manipulated by the $parsers, as all validation was done |
| 60 | +inside this pipeline. |
| 61 | + |
| 62 | +If you rely on the pattern being validated against the modelValue, |
| 63 | +you must create your own validator directive that overwrites |
| 64 | +the built-in pattern validator: |
| 65 | + |
| 66 | +```js |
| 67 | +.directive('patternModelOverwrite', function patternModelOverwriteDirective() { |
| 68 | + return { |
| 69 | + restrict: 'A', |
| 70 | + require: '?ngModel', |
| 71 | + priority: 1, |
| 72 | + compile: function() { |
| 73 | + var regexp, patternExp; |
| 74 | + |
| 75 | + return { |
| 76 | + pre: function(scope, elm, attr, ctrl) { |
| 77 | + if (!ctrl) return; |
| 78 | + |
| 79 | + attr.$observe('pattern', function(regex) { |
| 80 | + /** |
| 81 | + * The built-in directive will call our overwritten validator |
| 82 | + * (see below). We just need to update the regex. |
| 83 | + * The preLink fn guaranetees our observer is called first. |
| 84 | + */ |
| 85 | + if (isString(regex) && regex.length > 0) { |
| 86 | + regex = new RegExp('^' + regex + '$'); |
| 87 | + } |
| 88 | + |
| 89 | + if (regex && !regex.test) { |
| 90 | + //The built-in validator will throw at this point |
| 91 | + return; |
| 92 | + } |
| 93 | + |
| 94 | + regexp = regex || undefined; |
| 95 | + }); |
| 96 | + |
| 97 | + }, |
| 98 | + post: function(scope, elm, attr, ctrl) { |
| 99 | + if (!ctrl) return; |
| 100 | + |
| 101 | + regexp, patternExp = attr.ngPattern || attr.pattern; |
| 102 | + |
| 103 | + //The postLink fn guarantees we overwrite the built-in pattern validator |
| 104 | + ctrl.$validators.pattern = function(value) { |
| 105 | + return ctrl.$isEmpty(value) || |
| 106 | + isUndefined(regexp) || |
| 107 | + regexp.test(value); |
| 108 | + }; |
| 109 | + } |
| 110 | + }; |
| 111 | + } |
| 112 | + }; |
| 113 | +}); |
| 114 | +``` |
| 115 | + |
| 116 | + |
1 | 117 | <a name="1.3.18"></a>
|
2 | 118 | # 1.3.18 collective-penmanship (2015-08-18)
|
3 | 119 |
|
|
0 commit comments