|
| 1 | +<a name="1.3.0-beta.19"></a> |
| 2 | +# 1.3.0-beta.19 rafter-ascension (2014-08-22) |
| 3 | + |
| 4 | + |
| 5 | +## Bug Fixes |
| 6 | + |
| 7 | +- **$compile:** |
| 8 | + - use the correct namespace for transcluded SVG elements |
| 9 | + ([ffbd276d](https://github.com/angular/angular.js/commit/ffbd276d6def6ff35bfdb30553346e985f4a0de6), |
| 10 | + [#8716](https://github.com/angular/angular.js/issues/8716)) |
| 11 | + - update the jQuery `.context` when an element is replaced by `replace:true` directive |
| 12 | + ([f02f7d9c](https://github.com/angular/angular.js/commit/f02f7d9c15deea9c5d83212301e2a5e18223bbe5), |
| 13 | + [#8253](https://github.com/angular/angular.js/issues/8253), [#7900](https://github.com/angular/angular.js/issues/7900)) |
| 14 | +- **$location:** |
| 15 | + - rewrite relative URI correctly if `path==='/'` in legacy html5Mode |
| 16 | + ([d18b2819](https://github.com/angular/angular.js/commit/d18b2819768e467897dee7bc223876ca23ea71b1), |
| 17 | + [#8684](https://github.com/angular/angular.js/issues/8684)) |
| 18 | + - don't call `indexOf()` of undefined `href` attribute |
| 19 | + ([5b77e30c](https://github.com/angular/angular.js/commit/5b77e30c1ac49be7b079b82527a5631f68bac904), |
| 20 | + [#7721](https://github.com/angular/angular.js/issues/7721), [#8681](https://github.com/angular/angular.js/issues/8681)) |
| 21 | +- **$parse:** remove unused variable declaration in generated getters |
| 22 | + ([6acea115](https://github.com/angular/angular.js/commit/6acea1152f72a4026583897c67bea2839bc9e89e)) |
| 23 | +- **$sanitize:** sanitize javascript urls with comments |
| 24 | + ([b7e82a33](https://github.com/angular/angular.js/commit/b7e82a33eee03fc683f982c6ee13d15d88b07f67), |
| 25 | + [#8274](https://github.com/angular/angular.js/issues/8274)) |
| 26 | +- **$watchGroup:** call listener once when the `watchExpressions` array is empty |
| 27 | + ([bf0e8373](https://github.com/angular/angular.js/commit/bf0e83732aa02c7aa08d0ccdf122116235fcfa11)) |
| 28 | +- **Angular:** make Date comparison in `equals()` `NaN`-aware |
| 29 | + ([693e846a](https://github.com/angular/angular.js/commit/693e846add5089d0e516604ae4a109e445fd3664), |
| 30 | + [#8650](https://github.com/angular/angular.js/issues/8650), [#8715](https://github.com/angular/angular.js/issues/8715)) |
| 31 | +- **Scope:** don't clear the phase when an exception is thrown from asyncQueue or watch |
| 32 | + ([bf1a57ad](https://github.com/angular/angular.js/commit/bf1a57ad4822bb152fdd4d2fb54c0689e466481b)) |
| 33 | +- **copy:** clear array destinations correctly for non-array sources |
| 34 | + ([a603e202](https://github.com/angular/angular.js/commit/a603e202cc7e048c2ab6f12dee1cc8f277cf6f4f), |
| 35 | + [#8610](https://github.com/angular/angular.js/issues/8610), [#8702](https://github.com/angular/angular.js/issues/8702)) |
| 36 | +- **forEach:** match behaviour of Array.prototype.forEach (ignore missing properties) |
| 37 | + ([36230194](https://github.com/angular/angular.js/commit/36230194be8aa417b0af33d618060829a75c4c5f), |
| 38 | + [#8510](https://github.com/angular/angular.js/issues/8510), [#8522](https://github.com/angular/angular.js/issues/8522), [#8525](https://github.com/angular/angular.js/issues/8525)) |
| 39 | +- **input:** |
| 40 | + - use lowercase method to account for undefined type |
| 41 | + ([066c0499](https://github.com/angular/angular.js/commit/066c049957a8af2fe449040eca2f1cb499655e32)) |
| 42 | + - by default, do not trim input[type=password] values |
| 43 | + ([a7fb357f](https://github.com/angular/angular.js/commit/a7fb357fa122e0a056ce1de838a2dfaf1ebc2953), |
| 44 | + [#8250](https://github.com/angular/angular.js/issues/8250), [#8230](https://github.com/angular/angular.js/issues/8230)) |
| 45 | +- **jQuery:** cooperate with other libraries monkey-patching jQuery.cleanData |
| 46 | + ([b9389b26](https://github.com/angular/angular.js/commit/b9389b26ba2cf6aa70372fa32a7b28c62d174bf5), |
| 47 | + [#8471](https://github.com/angular/angular.js/issues/8471)) |
| 48 | +- **jqLite:** |
| 49 | + - clone wrapNode in jqlite/wrap |
| 50 | + ([77d3e754](https://github.com/angular/angular.js/commit/77d3e7544642396d868aa49b85f0c027e8057bd7), |
| 51 | + [#3860](https://github.com/angular/angular.js/issues/3860), [#4194](https://github.com/angular/angular.js/issues/4194)) |
| 52 | + - revert the `ready()` optimization until jQuery does the same |
| 53 | + ([1bdca93d](https://github.com/angular/angular.js/commit/1bdca93d708ce9441b26d00e564210755395edf7)) |
| 54 | +- **linky:** handle quotes around email addresses |
| 55 | + ([a9d22712](https://github.com/angular/angular.js/commit/a9d227120dc2d433372da415a450e56b783b57a0), |
| 56 | + [#8520](https://github.com/angular/angular.js/issues/8520)) |
| 57 | +- **minErr:** encode btstrpd error input to strip angle brackets |
| 58 | + ([0872388a](https://github.com/angular/angular.js/commit/0872388a1b88b8637fdb0fb1ebbee269bead0508), |
| 59 | + [#8683](https://github.com/angular/angular.js/issues/8683)) |
| 60 | +- **ngRepeat:** |
| 61 | + - allow aliasAs identifiers which contain but do not match reserved words |
| 62 | + ([d713ad1b](https://github.com/angular/angular.js/commit/d713ad1b6607389649fbb8d12ac103565b02a1d4), |
| 63 | + [#8729](https://github.com/angular/angular.js/issues/8729)) |
| 64 | + - make allowed aliasAs expressions more strict |
| 65 | + ([09b29870](https://github.com/angular/angular.js/commit/09b298705f74255aff55bb7e4ba200c4200d712d), |
| 66 | + [#8438](https://github.com/angular/angular.js/issues/8438), [#8440](https://github.com/angular/angular.js/issues/8440)) |
| 67 | + |
| 68 | + |
| 69 | +## Features |
| 70 | + |
| 71 | +- **$compile:** |
| 72 | + - use allOrNothing interpolation for ngAttr* |
| 73 | + ([09de7b5d](https://github.com/angular/angular.js/commit/09de7b5db466498becb295ecf5c1d0a698b1512c), |
| 74 | + [#8376](https://github.com/angular/angular.js/issues/8376), [#8399](https://github.com/angular/angular.js/issues/8399)) |
| 75 | +- **benchpress:** configure benchpress grunt task |
| 76 | + ([6bdaa4bc](https://github.com/angular/angular.js/commit/6bdaa4bc213805a58f51e9f5285dfe03bb06ddc3)) |
| 77 | +- **jqLite:** implement the `detach` method |
| 78 | + ([1a05daf5](https://github.com/angular/angular.js/commit/1a05daf5dc67813528afdb88086766dc22b6c0df), |
| 79 | + [#5461](https://github.com/angular/angular.js/issues/5461)) |
| 80 | +- **ngRoute:** add method for changing url params |
| 81 | + ([77a1acc7](https://github.com/angular/angular.js/commit/77a1acc7fcad7a8a7d0376b33d38a8977372cfe2)) |
| 82 | + |
| 83 | + |
| 84 | +## Performance Improvements |
| 85 | + |
| 86 | +- **$compile:** |
| 87 | + - don't register $destroy callbacks on element-transcluded nodes |
| 88 | + ([b5f7970b](https://github.com/angular/angular.js/commit/b5f7970be5950580bde4de0002a578daf3ae3aac)) |
| 89 | + - refactor publicLinkFn to simplify the code and use 'for in' loop |
| 90 | + ([645625cf](https://github.com/angular/angular.js/commit/645625cf349a4be57691a7bf418b2386b4c1a53d)) |
| 91 | + - clone the nodeList during linking only if necessary |
| 92 | + ([3e0a2e1f](https://github.com/angular/angular.js/commit/3e0a2e1f3367a5b4ae7d8de6cff559f522aacfba)) |
| 93 | + - delay object initialization in nodeLinkFn |
| 94 | + ([31ed0af7](https://github.com/angular/angular.js/commit/31ed0af74b0081906415dcefe5610e1217cc0c48)) |
| 95 | + - optimize nodeLinkFn |
| 96 | + ([35134a0e](https://github.com/angular/angular.js/commit/35134a0e237d193cd7d3995dacfdc6bf3e92635e)) |
| 97 | + - optimize publicLinkFn |
| 98 | + ([274e9c4d](https://github.com/angular/angular.js/commit/274e9c4ddfd64138d39fcf84047aabc3ccde2f0b)) |
| 99 | +- **$interpolate:** do not keep empty separators |
| 100 | + ([94b5c9f0](https://github.com/angular/angular.js/commit/94b5c9f00edff7fa631d09316ceb9c7fd4c6426a)) |
| 101 | +- **$parse:** |
| 102 | + - don't bind filters to a context |
| 103 | + ([8863b9d0](https://github.com/angular/angular.js/commit/8863b9d04c722b278fa93c5d66ad1e578ad6eb1f)) |
| 104 | + - optimize filter implementation |
| 105 | + ([ece6ef47](https://github.com/angular/angular.js/commit/ece6ef479c741f17fc217d743cad64c516dbed27)) |
| 106 | + - speed up fn invocation for no args case |
| 107 | + ([a17578ad](https://github.com/angular/angular.js/commit/a17578ad3db5d1375aec1d601055ab718eeafd10)) |
| 108 | + - speed up fn invocation by optimizing arg collection |
| 109 | + ([fecfc5b0](https://github.com/angular/angular.js/commit/fecfc5b09feb7e4079364013b0beb6bf204ade2a)) |
| 110 | + - use no-proto maps as caches and avoid hasOwnProperty checks |
| 111 | + ([d302ea0c](https://github.com/angular/angular.js/commit/d302ea0cfade2787d7cc500398b7dcd3e4eff945)) |
| 112 | + - trim expression only if string |
| 113 | + ([a1341223](https://github.com/angular/angular.js/commit/a1341223c084c8188671bb8d6ea1608490b66f9f)) |
| 114 | +- **$rootScope:** do not use `Function::call` when not needed |
| 115 | + ([7eae29e5](https://github.com/angular/angular.js/commit/7eae29e5ab478ccb7e02fee8311f8b99ea1d165d)) |
| 116 | +- **Scope:** |
| 117 | + - optimize `$watchCollection` when used for watching objects |
| 118 | + ([e822e906](https://github.com/angular/angular.js/commit/e822e9061c2a605649d91abbd641f757e2829275)) |
| 119 | + - don't use forEach in |
| 120 | + ([301463a2](https://github.com/angular/angular.js/commit/301463a2e249011d7cb696c6cf34254f8317a706)) |
| 121 | + - watchCollection optimization |
| 122 | + ([7d96ab0d](https://github.com/angular/angular.js/commit/7d96ab0d132d923ec3e3a212aaf9d79f1d4a02de)) |
| 123 | + - exit $broadcast early if nobody is listening for the given event |
| 124 | + ([a09fa356](https://github.com/angular/angular.js/commit/a09fa356416c033a52666f3becf00524ecff3a03)) |
| 125 | + - use remove the need for the extra watch in $watchGroup |
| 126 | + ([3f0e642e](https://github.com/angular/angular.js/commit/3f0e642eefcbbb315839c4456ba6ac029a7b8a20), |
| 127 | + [#8396](https://github.com/angular/angular.js/issues/8396)) |
| 128 | +- **benchpress:** add benchpress node module and port over large table test |
| 129 | + ([1229334f](https://github.com/angular/angular.js/commit/1229334fbd8c778e95785d6a5e5589099ce655f7)) |
| 130 | +- **isObject:** use strict comparison |
| 131 | + ([d208ba25](https://github.com/angular/angular.js/commit/d208ba254442649d35f96c76bcd9e47326ec59f3)) |
| 132 | +- **jqLite:** |
| 133 | + - simplify jqLiteDealoc |
| 134 | + ([f8f7a1df](https://github.com/angular/angular.js/commit/f8f7a1df34560222cb5d2e18d4be996f5553815a)) |
| 135 | + - optimize event handler |
| 136 | + ([d05f27e2](https://github.com/angular/angular.js/commit/d05f27e274c41c33eebf4fe8035715d3f6596069)) |
| 137 | + - only take `str.split()` path when needed |
| 138 | + ([187b1b8e](https://github.com/angular/angular.js/commit/187b1b8ef45babd86afa853dc9321cd23160096e), |
| 139 | + [#8648](https://github.com/angular/angular.js/issues/8648)) |
| 140 | + - optimize `off()` |
| 141 | + ([abb17cce](https://github.com/angular/angular.js/commit/abb17cce8b459e4646d1c2a2428b691c3d95fb4c)) |
| 142 | + - refactor jqLiteExpandoStore to minimize access to expensive element.ng339 expando property |
| 143 | + ([1e8698b3](https://github.com/angular/angular.js/commit/1e8698b33e61b1a196f05f42856a2da4590a10e1)) |
| 144 | + - microoptimization in chaining fn |
| 145 | + ([fafbd494](https://github.com/angular/angular.js/commit/fafbd494907a8c068d79415b7ba8f42f283be521)) |
| 146 | + - don't use String#split in on() unless we need it |
| 147 | + ([bda673f8](https://github.com/angular/angular.js/commit/bda673f8e785f299407c8c45887f37448a0f0192)) |
| 148 | + - don't check isString many times in constructor |
| 149 | + ([443b521e](https://github.com/angular/angular.js/commit/443b521e22f9ec7009b913a2fe78caee0a515e87)) |
| 150 | + - optimize jqLiteAcceptsData method |
| 151 | + ([b493c62f](https://github.com/angular/angular.js/commit/b493c62f6b3e4288f5dee7c8b5952e088c2e3329)) |
| 152 | + - optimize `append()` and `after()` |
| 153 | + ([8d933bf9](https://github.com/angular/angular.js/commit/8d933bf99520fe3936e33d3ee28fd37e574b99de)) |
| 154 | + - don't register DOM listener for $destroy event |
| 155 | + ([6251751a](https://github.com/angular/angular.js/commit/6251751ad7bc2f3621db538edb5a9d7313a4ce6d)) |
| 156 | + - optimize event listener registration |
| 157 | + ([566f1015](https://github.com/angular/angular.js/commit/566f1015d27118d259e0886910d6b73b3cb0eb10)) |
| 158 | + - improve createEventHandler method by switching from forEach to for loop |
| 159 | + ([e9cd6dc0](https://github.com/angular/angular.js/commit/e9cd6dc055cb7bd80ae9232d8985b2bc3999135e)) |
| 160 | + - don't use `forEach` in `off()` |
| 161 | + ([960a8410](https://github.com/angular/angular.js/commit/960a8410515b2d7d461d7c95e8a2ca3d75129087)) |
| 162 | + - don't recreate the Node.contains polyfill |
| 163 | + ([d1536e7c](https://github.com/angular/angular.js/commit/d1536e7c8bf60549096138d08953a43190c7b1a6)) |
| 164 | + - speed up shallowCopy and special case Attributes cloning |
| 165 | + ([54fa16e4](https://github.com/angular/angular.js/commit/54fa16e45d8769ce6708a28388326db0eea53c7e)) |
| 166 | +- **ngBind:** bypass jquery/jqlite when setting text |
| 167 | + ([0a738ce1](https://github.com/angular/angular.js/commit/0a738ce1760f38efe45e79aa133442be09b56803)) |
| 168 | +- **ngRepeat:** |
| 169 | + - simplify code and remove duplicate array.length access |
| 170 | + ([08eb0558](https://github.com/angular/angular.js/commit/08eb05583bf39c63fef43b4faf29c61360699c81)) |
| 171 | + - optimize marking of nodes that are being removed via an animation |
| 172 | + ([36e35b2c](https://github.com/angular/angular.js/commit/36e35b2cb17c5ff7c43746d9ac0a259f77ff494e)) |
| 173 | + - use no-proto objects for blockMaps |
| 174 | + ([13d113c5](https://github.com/angular/angular.js/commit/13d113c522f124b91a1fd8606c22bbd399abf121)) |
| 175 | + - move work to compile fn |
| 176 | + ([bdd853cb](https://github.com/angular/angular.js/commit/bdd853cb83839eef9901af164293611eaa23ee2c)) |
| 177 | + - move updateScope fn to factory and reuse it for all repeaters |
| 178 | + ([e58d65a5](https://github.com/angular/angular.js/commit/e58d65a520cfbc630cbfbc248479416777ca16b2)) |
| 179 | + - clone boundary comment nodes |
| 180 | + ([fbd48845](https://github.com/angular/angular.js/commit/fbd48845e0e88e9935f82fe4c9f686ad78b5d924)) |
| 181 | + |
| 182 | + |
| 183 | +## Breaking Changes |
| 184 | + |
| 185 | +- **$compile:** |
| 186 | + - due to [09de7b5d](https://github.com/angular/angular.js/commit/09de7b5db466498becb295ecf5c1d0a698b1512c), |
| 187 | + |
| 188 | + |
| 189 | +Now, `ng-attr-*` will never add the attribute to the DOM if any of the interpolated expressions |
| 190 | +evaluate to `undefined`. |
| 191 | + |
| 192 | +To work around this, initialize values which are intended to be the empty string with the |
| 193 | +empty string: |
| 194 | + |
| 195 | +For example, given the following markup: |
| 196 | + |
| 197 | +```html |
| 198 | +<div ng-attr-style="border-radius: {{value}}{{units}}"></div> |
| 199 | +``` |
| 200 | + |
| 201 | +If `$scope.value` is `4`, and `$scope.units` is `undefined`, the resulting markup is unchanged: |
| 202 | + |
| 203 | +```html |
| 204 | +<div ng-attr-style="border-radius: {{value}}{{units}}"></div> |
| 205 | +``` |
| 206 | + |
| 207 | +However, if $scope.units is `""`, then the resulting markup is updated: |
| 208 | + |
| 209 | +```html |
| 210 | +<div ng-attr-style="border-radius: {{value}}{{units}}" style="border-radius: 4"></div> |
| 211 | +``` |
| 212 | + |
| 213 | +Closes #8376 |
| 214 | +Closes #8399 |
| 215 | + |
| 216 | + - due to [0d608d04](https://github.com/angular/angular.js/commit/0d608d041f37a659d8d8ba7a9b688e132587035d), |
| 217 | + element-transcluded directives now have an extra comment automatically appended to their cloned DOM |
| 218 | + |
| 219 | +This comment is usually needed to keep track the end boundary in the event child directives modify the root node(s). |
| 220 | +If not used for this purpose it can be safely ignored. |
| 221 | + |
| 222 | + - due to [75c4cbf8](https://github.com/angular/angular.js/commit/75c4cbf81fcd6d49656d3cb044e59e5fd24e0479), |
| 223 | + `directive.type` was renamed to `directive.templateNamespace` |
| 224 | + |
| 225 | +This change is breaking only within 1.3.0-beta releases: `directive.type` was renamed to `directive.templateNamespace` |
| 226 | + |
| 227 | +The property name `type` was too general. |
| 228 | + |
| 229 | +- **$parse:** due to [8863b9d0](https://github.com/angular/angular.js/commit/8863b9d04c722b278fa93c5d66ad1e578ad6eb1f), |
| 230 | + `this` in filters is now undefined and no longer the scope |
| 231 | + |
| 232 | +It's a bad practice for filters to have hidden dependencies, so pulling stuff from scope directly |
| 233 | +is not a good idea. Scope being the filter context was never documented as public API, so we don't |
| 234 | +expect that any significant code depends on this behavior. |
| 235 | + |
| 236 | +If an existing filter has a dependency on the scope instance, the scope reference can |
| 237 | +be passed into the filter as a filter argument (this is highly discouraged for new code): |
| 238 | + |
| 239 | +Before: `{{ user.name | customFilter }}` |
| 240 | +After: `{{ user.name | customFilter:this }}` |
| 241 | + |
| 242 | +- **Scope:** due to [0554c1aa](https://github.com/angular/angular.js/commit/0554c1aae49a81691154a77e70b602b0f24dca81), |
| 243 | + `deregisterNotifier` callback for `$watch` is no longer available |
| 244 | + |
| 245 | +This API was available only in the last few 1.3 beta versions and is not |
| 246 | +very useful for applications, so we don't expect that anyone will be affected |
| 247 | +by this change. |
| 248 | + |
| 249 | +- **input:** due to [a7fb357f](https://github.com/angular/angular.js/commit/a7fb357fa122e0a056ce1de838a2dfaf1ebc2953), |
| 250 | + by default, do not trim `input[type=password]` values. |
| 251 | + |
| 252 | +Previously, `input[type=password]` would trim values by default, and would require an explicit `ng-trim="false"` |
| 253 | +to disable the trimming behaviour. After this change, `ng-trim` no longer affects `input[type=password]`, and will |
| 254 | +never trim the password value. |
| 255 | + |
| 256 | +Closes #8250 |
| 257 | +Closes #8230 |
| 258 | + |
| 259 | + |
| 260 | + |
1 | 261 | <a name="1.3.0-beta.18"></a>
|
2 | 262 | # 1.3.0-beta.18 spontaneous-combustion (2014-08-12)
|
3 | 263 |
|
|
0 commit comments