From b7dc07162ec488ae4f3e5ac1e50c510b17340bcd Mon Sep 17 00:00:00 2001 From: Mark Phippard Date: Tue, 9 Jun 2015 11:18:27 -0400 Subject: [PATCH] Update CHANGELOG.md Edited changelog to all changes in the 1.3.x branch --- CHANGELOG.md | 3757 ++++++++++++++++++++++---------------------------- 1 file changed, 1615 insertions(+), 2142 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c0e60b41babf..09debd8445fb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,2581 +1,2054 @@ - -# 1.1.4 quantum-manipulation (2013-04-03) + +# 1.3.16 cookie-oatmealification (2015-06-05) -_Note: 1.1.x releases are [considered unstable](http://blog.angularjs.org/2012/07/angularjs-10-12-roadmap.html). -They pass all tests but we reserve the right to change new features/apis in between minor releases. Check them -out and please give us feedback._ -_Note: This release also contains all bug fixes available in [1.0.6](#1.0.6)._ +## Bug Fixes +- **$compile:** throw error on invalid directive name + ([634e4671](https://github.com/angular/angular.js/commit/634e467172efa696eb32ef8942ffbedeecbd030e), + [#11281](https://github.com/angular/angular.js/issues/11281), [#11109](https://github.com/angular/angular.js/issues/11109)) +- **$cookies:** update $cookies to prevent duplicate cookie writes and play nice with external code + ([706a93ab](https://github.com/angular/angular.js/commit/706a93ab6960e3474698ccf9a8048b3c32e567c6), + [#11490](https://github.com/angular/angular.js/issues/11490), [#11515](https://github.com/angular/angular.js/issues/11515)) +- **$http:** throw error if `success` and `error` methods do not receive a function + ([731e1f65](https://github.com/angular/angular.js/commit/731e1f6534ab7fd1e053b8d7a25c902fcd934fea), + [#11330](https://github.com/angular/angular.js/issues/11330), [#11333](https://github.com/angular/angular.js/issues/11333)) +- **core:** ensure that multiple requests to requestAnimationFrame are buffered + ([0adc0364](https://github.com/angular/angular.js/commit/0adc0364265b06c567ccc8e90a7f09cc46f235b2), + [#11791](https://github.com/angular/angular.js/issues/11791)) +- **filterFilter:** fix matching against `null`/`undefined` + ([9dd0fe35](https://github.com/angular/angular.js/commit/9dd0fe35d1027e59b84b2396abee00d8683f3b50), + [#11573](https://github.com/angular/angular.js/issues/11573), [#11617](https://github.com/angular/angular.js/issues/11617)) +- **jqLite:** + - check for "length" in obj in isArrayLike to prevent iOS8 JIT bug from surfacing + ([647f3f55](https://github.com/angular/angular.js/commit/647f3f55eb7100a255272f7277f0f962de234a32), + [#11508](https://github.com/angular/angular.js/issues/11508)) + - attr should ignore comment, text and attribute nodes + ([181e5ebc](https://github.com/angular/angular.js/commit/181e5ebc3fce5312feacaeace4fcad0d32f4d73c)) +- **ngAnimate:** + - ensure that minified repaint code isn't removed + ([d5c99ea4](https://github.com/angular/angular.js/commit/d5c99ea42b834343fd0362cfc572f47e7536ccfb), + [#9936](https://github.com/angular/angular.js/issues/9936)) +- **ngAria:** handle elements with role="checkbox/menuitemcheckbox" + ([1c282af5](https://github.com/angular/angular.js/commit/1c282af5abc205d4aac37c05c5cb725d71747134), + [#11317](https://github.com/angular/angular.js/issues/11317), [#11321](https://github.com/angular/angular.js/issues/11321)) +- **ngModel:** allow setting model to NaN when asyncValidator is present + ([b64519fe](https://github.com/angular/angular.js/commit/b64519fea7f1a5ec75e32c4b71b012b827314153), + [#11315](https://github.com/angular/angular.js/issues/11315), [#11411](https://github.com/angular/angular.js/issues/11411)) +- **ngTouch:** + - check undefined tagName for SVG event target + ([7560a8d2](https://github.com/angular/angular.js/commit/7560a8d2d65955ddb60ede9d586502f4e3cbd062)) + - register touches properly when jQuery is used + ([40441f6d](https://github.com/angular/angular.js/commit/40441f6dfc5ebd5cdc679c269c4639238f5351eb), + [#4001](https://github.com/angular/angular.js/issues/4001), [#8584](https://github.com/angular/angular.js/issues/8584), [#10797](https://github.com/angular/angular.js/issues/10797), [#11488](https://github.com/angular/angular.js/issues/11488)) +- **select:** prevent unknown option being added to select when bound to null property + ([9e3f82bb](https://github.com/angular/angular.js/commit/9e3f82bbaf83cad7bb3121db756099b0880562e6), + [#11872](https://github.com/angular/angular.js/issues/11872), [#11875](https://github.com/angular/angular.js/issues/11875)) -## Features -- **$compile:** - - allow directives to modify interpolated attributes - ([fe8d893b](https://github.com/angular/angular.js/commit/fe8d893b839e9b14e3e55a3a0523cc1e6355bdd5)) - - support for dynamic template generation - ([eb53423a](https://github.com/angular/angular.js/commit/eb53423a41136fcda0c5e711f2d104952080354b)) - - add attribute binding support via ngAttr* - ([cf17c6af](https://github.com/angular/angular.js/commit/cf17c6af475eace31cf52944afd8e10d3afcf6c0), - [#1050](https://github.com/angular/angular.js/issues/1050), [#1925](https://github.com/angular/angular.js/issues/1925)) - - `'=?'` makes `'='` binding optional - ([ac899d0d](https://github.com/angular/angular.js/commit/ac899d0da59157fa1c6429510791b6c3103d9401), - [#909](https://github.com/angular/angular.js/issues/909), [#1435](https://github.com/angular/angular.js/issues/1435)) +## Features -- **$q:** `$q.all()` now accepts hash - ([e27bb6eb](https://github.com/angular/angular.js/commit/e27bb6eb132a68665c8fca3f5a216b19b1129ba6)) +- **travis:** run unit tests on iOS 8 + ([1f650871](https://github.com/angular/angular.js/commit/1f650871266b88b3dab4a894a839a82ac9a06b69), + [#11479](https://github.com/angular/angular.js/issues/11479)) -- **$resource:** ability to override url in resource actions - ([60f1f099](https://github.com/angular/angular.js/commit/60f1f099fc7e5197808cd6acb7407cdc40f50a3f)) -- **$route:** add `caseInsensitiveMatch` option for url matching - ([5e18a15f](https://github.com/angular/angular.js/commit/5e18a15fb01d2e81adda68503754289fa9655082)) -- **http:** - - support request/response promise chaining - ([4ae46814](https://github.com/angular/angular.js/commit/4ae46814ff4e7c0bbcdbbefc0a97277283a84065)) - - set custom default cache in $http.defaults.cache - ([99f3b70b](https://github.com/angular/angular.js/commit/99f3b70b2d316f5bb39e21249e752c29f49c90ab)) -- **JQLite:** `ready()` now supports `document.readyState=='complete'` - ([753fc9e5](https://github.com/angular/angular.js/commit/753fc9e58d5e554d4930548558efecc283557eeb)) + +# 1.3.15 locality-filtration (2015-03-17) -- **Scenario:** autodisable animations when running e2e tests - ([fec4ef38](https://github.com/angular/angular.js/commit/fec4ef38815340e8e5a6b65fd6c08f5c74e701d8)) +## Bug Fixes -- **Scope:** add `$watchCollection` method for observing collections - ([5eb96855](https://github.com/angular/angular.js/commit/5eb968553a1130461ab8704535691e00eb154ac2)) +- **$animate:** call `applyStyles` with options on `leave` + ([ebd84e80](https://github.com/angular/angular.js/commit/ebd84e8008f45ccaa84290f6da8c2a114fcfa8cd), + [#10068](https://github.com/angular/angular.js/issues/10068)) +- **$browser:** don't crash if history.state access causes error in IE + ([92767c09](https://github.com/angular/angular.js/commit/92767c098feaf8c58faf2d67f882305019d8160e), + [#10367](https://github.com/angular/angular.js/issues/10367), [#10369](https://github.com/angular/angular.js/issues/10369)) +- **Angular:** properly compare RegExp with other objects for equality + ([b8e8f9af](https://github.com/angular/angular.js/commit/b8e8f9af78f4ef3e556dd3cef6bfee35ad4cb82a), + [#11204](https://github.com/angular/angular.js/issues/11204), [#11205](https://github.com/angular/angular.js/issues/11205)) +- **date filter:** display localised era for `G` format codes + ([f2683f95](https://github.com/angular/angular.js/commit/f2683f956fcd3216eaa263db20b31e0d46338800), + [#10503](https://github.com/angular/angular.js/issues/10503), [#11266](https://github.com/angular/angular.js/issues/11266)) +- **filterFilter:** + - fix filtering using an object expression when the filter value is `undefined` + ([63b9956f](https://github.com/angular/angular.js/commit/63b9956faf4c3679c88a9401b8ccbb111c0294ee), + [#10419](https://github.com/angular/angular.js/issues/10419), [#10424](https://github.com/angular/angular.js/issues/10424)) + - do not throw an error if property is null when comparing objects + ([01161a0e](https://github.com/angular/angular.js/commit/01161a0e9fb1af93e9f06535aed8392ed7f116a4), + [#10991](https://github.com/angular/angular.js/issues/10991), [#10992](https://github.com/angular/angular.js/issues/10992), [#11116](https://github.com/angular/angular.js/issues/11116)) +- **form:** allow dynamic form names which initially evaluate to blank + ([190ea883](https://github.com/angular/angular.js/commit/190ea883c588d63f8b900a8de1d45c6c9ebb01ec), + [#11096](https://github.com/angular/angular.js/issues/11096)) +- **ng/$locale:** add ERA info in generic locale + ([57842530](https://github.com/angular/angular.js/commit/578425303f2480959da80f31920d08f277d42010)) +- **rootScope:** prevent memory leak when destroying scopes + ([528cf09e](https://github.com/angular/angular.js/commit/528cf09e3f78ad4e3bb6a329ebe315c4f29b4cdb), + [#11173](https://github.com/angular/angular.js/issues/11173), [#11169](https://github.com/angular/angular.js/issues/11169)) +- **templateRequest:** avoid throwing syntax error in Android 2.3 + ([75abbd52](https://github.com/angular/angular.js/commit/75abbd525f07866fdcc6fb311802b8fe700af174), + [#11089](https://github.com/angular/angular.js/issues/11089), [#11051](https://github.com/angular/angular.js/issues/11051), [#11088](https://github.com/angular/angular.js/issues/11088)) -- **angular.bootstrap:** support deferred bootstrap (mainly useful for tools like test runners and Batarang) - ([603fe0d1](https://github.com/angular/angular.js/commit/603fe0d19608ffe1915d8bc23bf412912e7ee1ac)) -- **ngMobile:** add ngMobile module with mobile-specific ngClick - ([707c65d5](https://github.com/angular/angular.js/commit/707c65d5a228b44ab3aea2fad95516fe6c57169a)) +## Features -- **Directives:** - - **ngKeypress:** add ngKeypress directive for handling keypress event - ([f20646bc](https://github.com/angular/angular.js/commit/f20646bce5f0c914992a78fc2556bda136c27ac9)) - - **ngSwitch:** Preserve the order of the elements not in the ng-switch - ([e88d6179](https://github.com/angular/angular.js/commit/e88d6179c3a6a137e75fa09de906fc83c6515db2), - [#1074](https://github.com/angular/angular.js/issues/1074)) - - **ngAnimate:** add support for animation - ([0b6f1ce5](https://github.com/angular/angular.js/commit/0b6f1ce5f89f47f9302ff1e8cd8f4b92f837c413)) - - **ngRepeat:** add support for custom tracking of items - ([61f2767c](https://github.com/angular/angular.js/commit/61f2767ce65562257599649d9eaf9da08f321655)) +- **ngAria:** + - add `button` role to `ngClick` + ([b9ad91cf](https://github.com/angular/angular.js/commit/b9ad91cf1e86310a2d2bf13b29fa13a9b835e1ce), + [#9254](https://github.com/angular/angular.js/issues/9254), [#10318](https://github.com/angular/angular.js/issues/10318)) + - add roles to custom inputs + ([21369943](https://github.com/angular/angular.js/commit/21369943fafd577b36827a641b021b1c14cefb57), + [#10012](https://github.com/angular/angular.js/issues/10012), [#10318](https://github.com/angular/angular.js/issues/10318)) +- **ngMock:** + - allow mock $controller service to set up controller bindings + ([b3878a36](https://github.com/angular/angular.js/commit/b3878a36d9f8e56ad7be1eedb9691c9bd12568cb), + [#9425](https://github.com/angular/angular.js/issues/9425), [#11239](https://github.com/angular/angular.js/issues/11239)) + - add `they` helpers for testing multiple specs + ([7288be25](https://github.com/angular/angular.js/commit/7288be25a75d6ca6ac7eca05a7d6b12ccb3a22f8), + [#10864](https://github.com/angular/angular.js/issues/10864)) -## Breaking Changes -- **$route:** due to [6f71e809](https://github.com/angular/angular.js/commit/6f71e809141bf89501e55c378921d6e7ec9512bc), - in $routeChangeStart event, nextRoute.$route property is gone. Use the nextRoute object itself instead of nextRoute.$route. -- **ngRepeat:** due to [61f2767c](https://github.com/angular/angular.js/commit/61f2767ce65562257599649d9eaf9da08f321655), it is now considered an error to have two identical items (identified by the new "track by" expression) in a collection that is fed into the repeater. This behavior was previously tolerated. + +# 1.3.14 instantaneous-browserification (2015-02-24) -- **ngSwitch:** due to [e88d6179](https://github.com/angular/angular.js/commit/e88d6179c3a6a137e75fa09de906fc83c6515db2), - elements not in the ng-switch were rendered after the ng-switch elements. Now they are rendered in-place. - Templates with ngSwitch directives and nested non-ngSwitchWhen elements should be updated to preserve render order. +## Features - For example: The following was previously rendered with `
  • 1
  • ` after `
  • 2
  • `: +- **CommonJS:** - angular modules are now packaged for npm with helpful exports - +## Bug Fixes - To keep the old behaviour, use: +- **input:** create max and/or min validator regardless of initial value + ([abfce532](https://github.com/angular/angular.js/commit/abfce5327ce6fd29c33c62d2edf3600674a6b4c0), + [#10307](https://github.com/angular/angular.js/issues/10307), [#10327](https://github.com/angular/angular.js/issues/10327)) +- **ngAria:** correctly set "checked" attr for checkboxes and radios + ([944c150e](https://github.com/angular/angular.js/commit/944c150e6c3001e51d4bf5e2d8149ae4c565d1e3), + [#10389](https://github.com/angular/angular.js/issues/10389), [#10212](https://github.com/angular/angular.js/issues/10212)) +- **ngModel:** fix issues when parserName is same as validator key + ([6b7625a0](https://github.com/angular/angular.js/commit/6b7625a09508c4b5355121a9d4206a734b07b2e1), + [#10698](https://github.com/angular/angular.js/issues/10698), [#10850](https://github.com/angular/angular.js/issues/10850), [#11046](https://github.com/angular/angular.js/issues/11046)) - - -# 1.0.6 universal-irreversibility (2013-04-04) + +# 1.3.13 meticulous-riffleshuffle (2015-02-09) ## Bug Fixes -- **$compile:** - - compile replace directives in external template - ([398691be](https://github.com/angular/angular.js/commit/398691beb3fc40a481afa258d181de06ec0d153c), - [#1859](https://github.com/angular/angular.js/issues/1859)) - - whitelist file:// in url sanitization - ([7b236b29](https://github.com/angular/angular.js/commit/7b236b29aa3a6f6dfe722815e0a2667d9b7f0899)) - - handle elements with no childNodes property - ([bec614fd](https://github.com/angular/angular.js/commit/bec614fd90c48c3921a4b659912008574e553b40)) -- **$http:** don't encode URL query substring "null" to "+" - ([86d191ed](https://github.com/angular/angular.js/commit/86d191ed4aea9015adc71b852223475c5c762c34)) -- **$httpBackend:** prevent DOM err due to dereferencing .responseText - ([509ec745](https://github.com/angular/angular.js/commit/509ec745fdbb54b54672fbf8595a4958c16f2b53), - [#1922](https://github.com/angular/angular.js/issues/1922)) -- **$location:** - - parse FirefoxOS packaged app urls - ([3a81dd8b](https://github.com/angular/angular.js/commit/3a81dd8bddbade81c4c9f734813458d0d969a4bf), - [#2112](https://github.com/angular/angular.js/issues/2112)) - - correctly rewrite html5 url to hashbang url - ([9befe370](https://github.com/angular/angular.js/commit/9befe37014141fbfdf0cded318d28322fc058c13)) -- **$route:** make nextRoute.$route private - ([6f71e809](https://github.com/angular/angular.js/commit/6f71e809141bf89501e55c378921d6e7ec9512bc), - [#1907](https://github.com/angular/angular.js/issues/1907)) -- **mocks:** prevent NPE when module definition outside of it. - ([5c735eb4](https://github.com/angular/angular.js/commit/5c735eb4ab07144a62949472ed388cb185099201)) -- **dateFilter:** correct timezone date filter for 1/2 hour offsets - ([1c1cd4fd](https://github.com/angular/angular.js/commit/1c1cd4fdf6b6d7511c7b8dc61b8042011dc54830)) +- **$location:** prevent page reload if initial url has empty hash at the end + ([4b3a590b](https://github.com/angular/angular.js/commit/4b3a590b009d7fdceda7f52e7ba0352a271b3256), + [#10397](https://github.com/angular/angular.js/issues/10397), [#10960](https://github.com/angular/angular.js/issues/10960)) +- **ngAria:** ensure native controls fire a single click + ([69ee593f](https://github.com/angular/angular.js/commit/69ee593fd2cb5f1d7757efbe6b256e4458752fd7), + [#10388](https://github.com/angular/angular.js/issues/10388), [#10766](https://github.com/angular/angular.js/issues/10766)) +- **ngMock:** handle cases where injector is created before tests + ([39ddef68](https://github.com/angular/angular.js/commit/39ddef682971d3b7282bf9d08f6eaf97b7f4bca4), + [#10967](https://github.com/angular/angular.js/issues/10967)) +- **sanitize:** handle newline characters inside special tags + ([11aedbd7](https://github.com/angular/angular.js/commit/11aedbd741ccddba060a9805adba1779391731da), + [ce49d4d6](https://github.com/angular/angular.js/commit/ce49d4d61bd02464b6c6376af8048f6eb09330a8) + [#10943](https://github.com/angular/angular.js/issues/10943)) + +# 1.3.12 outlandish-knitting (2015-02-02) +## Bug Fixes +- **$controller:** throw better error when controller expression is bad + ([632b2ddd](https://github.com/angular/angular.js/commit/632b2ddd34c07b3b5a207bd83ca3a5e6e613e63b), + [#10875](https://github.com/angular/angular.js/issues/10875), [#10910](https://github.com/angular/angular.js/issues/10910)) +- **$parse:** remove references to last arguments to a fn call + ([7caad220](https://github.com/angular/angular.js/commit/7caad2205a6e9927890192a3638f55532bdaaf75), + [#10894](https://github.com/angular/angular.js/issues/10894)) +- **ngRoute:** dont duplicate optional params into query + ([f41ca4a5](https://github.com/angular/angular.js/commit/f41ca4a53ed53f172fb334911be56e42aad58794), + [#10689](https://github.com/angular/angular.js/issues/10689)) +- **ngScenario:** Allow ngScenario to handle lazy-loaded and manually bootstrapped applications + ([0bcd0872](https://github.com/angular/angular.js/commit/0bcd0872d8d2e37e6cb7aa5bc5cb0c742b4294f9), + [#10723](https://github.com/angular/angular.js/issues/10723)) +- **validators:** maxlength should use viewValue for $isEmpty + ([abd8e2a9](https://github.com/angular/angular.js/commit/abd8e2a9eb2d21ac67989c2f7b64c4c6547a1585), + [#10898](https://github.com/angular/angular.js/issues/10898)) - -# 1.1.3 radioactive-gargle (2013-02-20) -_Note: 1.1.x releases are [considered unstable](http://blog.angularjs.org/2012/07/angularjs-10-12-roadmap.html). -They pass all tests but we reserve the right to change new features/apis in between minor releases. Check them -out and please give us feedback._ +## Features -_Note: This release also contains all bug fixes available in [1.0.5](#1.0.5)._ +- **ngMocks:** cleanup $inject annotations after each test + ([6ec59460](https://github.com/angular/angular.js/commit/6ec5946094ee92b820bbacc886fa2367715e60b4)) -## Bug Fixes -- **$compile:** - - initialize interpolated attributes before directive linking - ([bb8448c0](https://github.com/angular/angular.js/commit/bb8448c011127306df08c7479b66e5afe7a0fa94)) - - interpolate @ locals before the link function runs - ([2ed53087](https://github.com/angular/angular.js/commit/2ed53087d7dd06d728e333a449265f7685275548)) -- **$http:** - - do not encode special characters `@$:,` in params - ([288b69a3](https://github.com/angular/angular.js/commit/288b69a314e9bd14458b6647532eb62aad5c5cdf)) -- **$resource:** - - params should expand array values properly - ([2a212344](https://github.com/angular/angular.js/commit/2a2123441c2b749b8f316a24c3ca3f77a9132a01)) + +# 1.3.11 spiffy-manatee (2015-01-26) +## Bug Fixes -## Features - -- **$http:** allow overriding the XSRF header and cookie name - ([8155c3a2](https://github.com/angular/angular.js/commit/8155c3a29ea0eb14806913b8ac08ba7727e1969c)) -- **$parse:** added `constant` and `literal` properties - ([1ed63858](https://github.com/angular/angular.js/commit/1ed638582d2f2c7f89384d9712f4cfac52cc5b70)) -- **$resource:** expose promise based api via $then and $resolved - ([dba6bc73](https://github.com/angular/angular.js/commit/dba6bc73e802fdae685a9f351d3e23c7efa8568a)) -- **$routeProvider:** add support to catch-all parameters in routes - ([7eafbb98](https://github.com/angular/angular.js/commit/7eafbb98c64c0dc079d7d3ec589f1270b7f6fea5)) -- **Scope:** - - expose transcluded and isolate scope info for batarang - ([649b8922](https://github.com/angular/angular.js/commit/649b892205615a144dafff9984c0e6ab10ed341d)) - - only evaluate constant $watch expressions once - ([1d7a95df](https://github.com/angular/angular.js/commit/1d7a95df565192fc02a18b0b297b39dd615eaeb5)) -- **angular.noConflict:** added api to restore previous angular namespace reference - ([12ba6cec](https://github.com/angular/angular.js/commit/12ba6cec4fb79521101744e02a7e09f9fbb591c4)) -- **Directives:** - - **ngSwitch:** support multiple matches on ngSwitchWhen and ngSwitchDefault - ([0af17204](https://github.com/angular/angular.js/commit/0af172040e03811c59d01682968241e3df226774), - [#1074](https://github.com/angular/angular.js/issues/1074)) -- **Filters:** - - **date:** add `[.,]sss` formatter for milliseconds - ([df744f3a](https://github.com/angular/angular.js/commit/df744f3af46fc227a934f16cb63c7a6038e7133b)) - - **filter:** add comparison function to filter - ([ace54ff0](https://github.com/angular/angular.js/commit/ace54ff08c4593195b49eadb04d258e6409d969e)) +- **$location:** don't rewrite when link is shift-clicked + ([939ca37c](https://github.com/angular/angular.js/commit/939ca37cfe5f6fc35b09b6705caabd1fcc3cf9d3), + [#9904](https://github.com/angular/angular.js/issues/9904), [#9906](https://github.com/angular/angular.js/issues/9906)) +- **htmlAnchorDirective:** + - remove "element !== target element" check + ([779e3f6b](https://github.com/angular/angular.js/commit/779e3f6b5f8d2550e758cb0c5f64187ba8e00e29), + [#10866](https://github.com/angular/angular.js/issues/10866)) + - don't add event listener if replaced, ignore event if target is different element + ([837a0775](https://github.com/angular/angular.js/commit/837a077578081bbd07863bef85241537d19fa652), + [#4262](https://github.com/angular/angular.js/issues/4262), [#10849](https://github.com/angular/angular.js/issues/10849)) -## Breaking Changes -- **$http:** due to [288b69a3](https://github.com/angular/angular.js/commit/288b69a314e9bd14458b6647532eb62aad5c5cdf), - $http now follows RFC3986 and does not encode special characters like `$@,:` in params. - If your application needs to encode these characters, encode them manually, before sending the request. -- **$resource:** due to [2a212344](https://github.com/angular/angular.js/commit/2a2123441c2b749b8f316a24c3ca3f77a9132a01), - if the server relied on the buggy behavior of serializing arrays as http query arguments then - either the backend should be fixed or a simple serialization of the array should be done - on the client before calling the resource service. + +# 1.3.10 heliotropic-sundial (2015-01-20) +## Bug Fixes +- **$animate:** ensure no transitions are applied when an empty inline style object is provided + ([9b8df52a](https://github.com/angular/angular.js/commit/9b8df52aa960b9b6288fc150d55ea2e35f56555e), + [#10613](https://github.com/angular/angular.js/issues/10613), [#10770](https://github.com/angular/angular.js/issues/10770)) +- **$compile:** support class directives on SVG elements + ([7a9e3360](https://github.com/angular/angular.js/commit/7a9e3360284d58197a1fe34de57f5e0f6d1f4a76), + [#10736](https://github.com/angular/angular.js/issues/10736), [#10756](https://github.com/angular/angular.js/issues/10756)) +- **form:** clean up success state of controls when they are removed + ([cdc7280d](https://github.com/angular/angular.js/commit/cdc7280dd3d5a2ded784c06dd55fe36c2053fb6f), + [#10509](https://github.com/angular/angular.js/issues/10509)) +- **ngController:** allow bound constructor fns as controllers + ([d015c8a8](https://github.com/angular/angular.js/commit/d015c8a80b28754633c846fc50d11c9437519486), + [#10784](https://github.com/angular/angular.js/issues/10784), [#10790](https://github.com/angular/angular.js/issues/10790)) - -# 1.0.5 flatulent-propulsion (2013-02-20) -## Bug Fixes + +# 1.3.9 multidimensional-awareness (2015-01-13) -- **$compile:** - - sanitize values bound to `a[href]` - ([9532234b](https://github.com/angular/angular.js/commit/9532234bf1c408af9a6fd2c4743fdb585b920531)) - - rename $compileNote to compileNode - ([92ca7efa](https://github.com/angular/angular.js/commit/92ca7efaa4bc4f37da3008b234e19343a1fa4207), - [#1941](https://github.com/angular/angular.js/issues/1941)) - - should not leak memory when there are top level empty text nodes - ([791804bd](https://github.com/angular/angular.js/commit/791804bdbfa6da7a39283623bd05628a01cd8720)) - - allow startingTag method to handle text / comment nodes - ([755beb2b](https://github.com/angular/angular.js/commit/755beb2b66ce9f9f9a218f2355bbaf96d94fbc15)) -- **$cookies:** set cookies on Safari&IE when `base[href]` is undefined - ([70909245](https://github.com/angular/angular.js/commit/7090924515214752b919b0c5630b3ea5e7c77223), - [#1190](https://github.com/angular/angular.js/issues/1190)) -- **$http:** - - patch for Firefox bug w/ CORS and response headers - ([e19b04c9](https://github.com/angular/angular.js/commit/e19b04c9ec985821edf1269c628cfa261f81d631), - [#1468](https://github.com/angular/angular.js/issues/1468)) -- **$resource:** - - update RegExp to allow urlParams with out leading slash - ([b7e1fb05](https://github.com/angular/angular.js/commit/b7e1fb0515798e1b4f3f2426f6b050951bee2617)) -- **Directives:** - - **a:** workaround IE bug affecting mailto urls - ([37e8b122](https://github.com/angular/angular.js/commit/37e8b12265291918396bfee65d444a8f63697b73), - [#1949](https://github.com/angular/angular.js/issues/1949)) - - **ngClass:** keep track of old ngClass value manually - ([5f5d4fea](https://github.com/angular/angular.js/commit/5f5d4feadbfa9d8ecc8150041dfd2bca2b2e9fea), - [#1637](https://github.com/angular/angular.js/issues/1637)) - - **ngSwitch:** make ngSwitch compatible with controller backwards-compatiblity module - ([9b7c1d0f](https://github.com/angular/angular.js/commit/9b7c1d0f7ce442d4ad2ec587e66d2d335e64fa4e)) -- **Filters:** - - **date:** invert timezone sign and always display sign - ([b001c8ec](https://github.com/angular/angular.js/commit/b001c8ece5472626bf49cf82753e8ac1aafd2513), - [#1261](https://github.com/angular/angular.js/issues/1261)) - - **number:** fix formatting when "0" passed as fractionSize - ([f5835963](https://github.com/angular/angular.js/commit/f5835963d5982003a713dd354eefd376ed39ac02)) -- **scenario runner:** include error messages in XML output - ([d46fe3c2](https://github.com/angular/angular.js/commit/d46fe3c23fa269dcc10249148f2af14f3db6b066)) -- **Misc:** - - don't use instanceof to detect arrays - ([3c2aee01](https://github.com/angular/angular.js/commit/3c2aee01b0b299995eb92f4255159585b0f53c10), - [#1966](https://github.com/angular/angular.js/issues/1966)) - - angular.forEach should correctly iterate over objects with length prop - ([ec54712f](https://github.com/angular/angular.js/commit/ec54712ff3dab1ade44f94fa82d67edeffa79a1d), - [#1840](https://github.com/angular/angular.js/issues/1840)) - - - - -# 1.1.2 tofu-animation (2013-01-22) - -_Note: 1.1.x releases are [considered unstable](http://blog.angularjs.org/2012/07/angularjs-10-12-roadmap.html). -They pass all tests but we reserve the right to change new features/apis in between minor releases. Check them -out and please give us feedback._ - -_Note: This release also contains all bug fixes available in [1.0.4](#1.0.4)._ -## Features +## Bug Fixes -- **$compile:** support modifying the DOM structure in postlink fn - ([cdf6fb19](https://github.com/angular/angular.js/commit/cdf6fb19c85560b30607e71dc2b19fde54760faa)) -- **$log:** add $log.debug() - ([9e991ddb](https://github.com/angular/angular.js/commit/9e991ddb1de13adf520eda459950be5b90b5b6d9), - [#1592](https://github.com/angular/angular.js/issues/1592)) -- **$parse:** allow strict equality in angular expressions - ([a179a9a9](https://github.com/angular/angular.js/commit/a179a9a96eda5c566bda8a70ac8a75822c936a68), - [#908](https://github.com/angular/angular.js/issues/908)) -- **$resource:** - - allow dynamic default parameters - ([cc42c99b](https://github.com/angular/angular.js/commit/cc42c99bec6a03d6c41b8e1d29ba2b1f5c16b87d)) - - support all $http.config actions - ([af89daf4](https://github.com/angular/angular.js/commit/af89daf4641f57b92be6c1f3635f5a3237f20c71)) -- **$route:** allow using functions as template params in 'when' - ([faf02f0c](https://github.com/angular/angular.js/commit/faf02f0c4db7962f863b0da2a82c8cafab2c706f)) -- **$timeout-mock:** add verifyNoPendingTasks method - ([f0c6ebc0](https://github.com/angular/angular.js/commit/f0c6ebc07653f6267acec898ccef5677884e3081), - [#1245](https://github.com/angular/angular.js/issues/1245)) -- **directive:** - - added ngOpen boolean directive - ([b8bd4d54](https://github.com/angular/angular.js/commit/b8bd4d5460d9952e9a3bb14992636b17859bd457)) - - ngKeydown, ngKeyup - ([e03182f0](https://github.com/angular/angular.js/commit/e03182f018f5069acd5e883ce2e9349b83f2d03f), - [#1035](https://github.com/angular/angular.js/issues/1035)) -- **limitTo filter:** limitTo filter accepts strings - ([9e96d983](https://github.com/angular/angular.js/commit/9e96d983451899ef0cef3e68395c8f6c1ef83bbe), - [#653](https://github.com/angular/angular.js/issues/653)) -- **scenario:** - - add mouseover method to the ngScenario dsl - ([2f437e89](https://github.com/angular/angular.js/commit/2f437e89781cb2b449abb685e36b26ca1cf0fff5)) - - fail when an option to select does not exist - ([15183f3e](https://github.com/angular/angular.js/commit/15183f3e1fbee031c9595206163962788f98b298)) +- **$parse:** allow use of locals in assignments + ([86900814](https://github.com/angular/angular.js/commit/869008140a96e0e9e0d9774cc2e5fdd66ada7ba9)) +- **filterFilter:** use isArray() to determine array type + ([d4b60ada](https://github.com/angular/angular.js/commit/d4b60ada1ecff5afdb3210caa44e149e9f3d4c1b), + [#10621](https://github.com/angular/angular.js/issues/10621)) -## Breaking Changes +## Features -- **date:** due to [cc821502](https://github.com/angular/angular.js/commit/cc821502bca64d15e1c576bf20a62b28b3d9a88a), - string input without timezone info is now parsed as local time/date +- **ngMock/$exceptionHandler:** log errors when rethrowing + ([2b97854b](https://github.com/angular/angular.js/commit/2b97854bf4786fe8579974e2b9d6b4adee8a3dc3), + [#10540](https://github.com/angular/angular.js/issues/10540), [#10564](https://github.com/angular/angular.js/issues/10564)) +## Performance Improvements - -# 1.0.4 bewildering-hair (2013-01-22) +- **ngStyleDirective:** use $watchCollection + ([4c8d8ad5](https://github.com/angular/angular.js/commit/4c8d8ad5083d9dd17c0b8480339d5f95943f1b71), + [#10535](https://github.com/angular/angular.js/issues/10535)) -## Bug Fixes -- **$compile:** - - do not wrap empty root text nodes in spans - ([49f9e4ce](https://github.com/angular/angular.js/commit/49f9e4cef13e68ff85b3c160cf8fac6e7cd042a3), - [#1059](https://github.com/angular/angular.js/issues/1059)) - - safely create transclude comment nodes - ([74dd2f79](https://github.com/angular/angular.js/commit/74dd2f7980ea8ec434a6e0565d857c910653ed9b), - [#1740](https://github.com/angular/angular.js/issues/1740)) -- **$injector:** - - remove bogus fn arg - ([b6b7c5a1](https://github.com/angular/angular.js/commit/b6b7c5a1d66073937709158da8c2d688cb45c9f6), - [#1711](https://github.com/angular/angular.js/issues/1711)) - - provider can now be defined in the array format - ([2c405f41](https://github.com/angular/angular.js/commit/2c405f417125c80c387a51baece8bf6e1e0c0a81), - [#1452](https://github.com/angular/angular.js/issues/1452)) -- **$resource:** - - HTTP method should be case-insensitive - ([8991680d](https://github.com/angular/angular.js/commit/8991680d8ab632dda60cd70c780868c803c74509), - [#1403](https://github.com/angular/angular.js/issues/1403)) - - correct leading slash removal in resource URLs - ([b2f46251](https://github.com/angular/angular.js/commit/b2f46251aca76c8568ee7d4bab54edbc9d7a186a)) -- **$route:** - - support route params not separated with slashes. - ([c6392616](https://github.com/angular/angular.js/commit/c6392616ea5245bd0d2f77dded0b948d9e2637c8)) - - correctly extract $routeParams from urls - ([30a9da5d](https://github.com/angular/angular.js/commit/30a9da5dc159dd1e19b677914356925c7ebdf632)) -- **Scope:** ensure that a scope is destroyed only once - ([d6da505f](https://github.com/angular/angular.js/commit/d6da505f4e044f8a487ac27a3ec707c11853ee0a), - [#1627](https://github.com/angular/angular.js/issues/1627)) -- **angular.equals:** - - consistently compare undefined object props - ([5ae63fd3](https://github.com/angular/angular.js/commit/5ae63fd385295d5a7bbdc79466f59727dcab1c85), - [3c2e1c5e](https://github.com/angular/angular.js/commit/3c2e1c5e4d12529b1d69a6173c38097527dccc4f), - [#1648](https://github.com/angular/angular.js/issues/1648)) -- **date filter:** parse string input as local time unless TZ is specified - ([cc821502](https://github.com/angular/angular.js/commit/cc821502bca64d15e1c576bf20a62b28b3d9a88a), - [#847](https://github.com/angular/angular.js/issues/847)) -- **jqLite:** - - children() should only return elements - ([febb4c1c](https://github.com/angular/angular.js/commit/febb4c1c35cf767ae31fc9fef1f4b4f026ac9de0)) - - make next() ignore non-element nodes - ([76a6047a](https://github.com/angular/angular.js/commit/76a6047af690781b8238ba7924279470ba76d081)) -- **scenario:** don't trigger input events on IE9 - ([8b9e6c35](https://github.com/angular/angular.js/commit/8b9e6c3501746edb2c9e2d585e8e0eaeb8ba8327)) -- **Directives:** - - **ngRepeat:** correctly apply $last if repeating over object - ([7e746015](https://github.com/angular/angular.js/commit/7e746015ea7dec3e9eb81bc4678fa9b6a83bc47c), - [#1789](https://github.com/angular/angular.js/issues/1789)) - - **ngSwitch:** don't leak when destroyed while not attached - ([a26234f7](https://github.com/angular/angular.js/commit/a26234f7183013e2fcc9b35377e181ad96dc9917), - [#1621](https://github.com/angular/angular.js/issues/1621)) - - **select:** support optgroup + select[multiple] combo - ([26adeb11](https://github.com/angular/angular.js/commit/26adeb119bc4fafa6286de484626b8de4170abc9), - [#1553](https://github.com/angular/angular.js/issues/1553)) -## Features + +# 1.3.8 prophetic-narwhal (2014-12-19) -- **$compile:** support modifying the DOM structure in postlink fn - ([cdf6fb19](https://github.com/angular/angular.js/commit/cdf6fb19c85560b30607e71dc2b19fde54760faa)) +## Bug Fixes +- **filterFilter:** + - make `$` match properties on deeper levels as well + ([bd28c74c](https://github.com/angular/angular.js/commit/bd28c74c1d91c477a86f10fe36576cba0249e6ef), + [#10401](https://github.com/angular/angular.js/issues/10401)) + - let expression object `{$: '...'}` also match primitive items + ([fb2c5858](https://github.com/angular/angular.js/commit/fb2c58589758744c0eef8c2ead3dbcf27a5cf200), + [#10428](https://github.com/angular/angular.js/issues/10428)) +- **ngAria:** trigger digest on `ng-click` via keypress, pass `$event` to expression + ([924e68c7](https://github.com/angular/angular.js/commit/924e68c7d522a1086969f3583d0ce87e59110bc5), + [#10442](https://github.com/angular/angular.js/issues/10442), [#10443](https://github.com/angular/angular.js/issues/10443), [#10447](https://github.com/angular/angular.js/issues/10447)) +- **orderBy:** compare timestamps when sorting date objects + ([661f6d9e](https://github.com/angular/angular.js/commit/661f6d9ecf1459ce3b2794c3cde373e17ae83972), + [#10512](https://github.com/angular/angular.js/issues/10512), [#10516](https://github.com/angular/angular.js/issues/10516)) - -# 1.1.1 pathological-kerning (2012-11-26) +## Performance Improvements -_Note: 1.1.x releases are [considered unstable](http://blog.angularjs.org/2012/07/angularjs-10-12-roadmap.html). -They pass all tests but we reserve the right to change new features/apis in between minor releases. Check them -out and please give us feedback._ +- **limitTo:** replace for loop with slice + ([cd77c089](https://github.com/angular/angular.js/commit/cd77c089ba2f4b94ccc74f32f0ffa9fb70851c02)) -_Note: This release also contains all bug fixes available in [1.0.3](#1.0.3)._ -## Features -- **$cacheFactory:** cache.put now returns the added value - ([168db339](https://github.com/angular/angular.js/commit/168db33985aa025eb48bc21087717ab70da0bd72)) -- **$http:** Allow setting withCredentials on defaults - ([209b67df](https://github.com/angular/angular.js/commit/209b67df6a49fe1646ce63c5e7d11ed26e8abbc1), - [#1095](https://github.com/angular/angular.js/issues/1095)) -- **$resource:** support custom headers per action - ([fbdab513](https://github.com/angular/angular.js/commit/fbdab513dd48f667ad857030cf4b3481ecdd9097), - [#736](https://github.com/angular/angular.js/issues/736)) -- **$sanitize:** support telephone links - ([04450c48](https://github.com/angular/angular.js/commit/04450c48dfea065e1c9e4ab8adad94993ed1b037)) -- **FormController:** add ability to reset a form to pristine state - ([733a97ad](https://github.com/angular/angular.js/commit/733a97adf87bf8f7ec6be22b37c4676cf7b5fc2b), - [#856](https://github.com/angular/angular.js/issues/856)) -- **jqLite:** add triggerHandler() - ([650fd933](https://github.com/angular/angular.js/commit/650fd933df614ac733cd43fe31d81d622a2ce2bc)) -- **linky filter:** allow optional 'target' argument - ([610927d7](https://github.com/angular/angular.js/commit/610927d77b77700c5c61accd503a2af0fa51cfe6), - [#1443](https://github.com/angular/angular.js/issues/1443)) -- **angular-mocks:** support mocha in angular mocks - ([92558fe4](https://github.com/angular/angular.js/commit/92558fe4119fb1ee793d781de1888abef181c7f6)) -- **ngModel:** support ngTrim attribute on input - ([d519953a](https://github.com/angular/angular.js/commit/d519953a4b219035587e3fcb2e9cc52e02b408ca)) -- **scenario:** add dblclick method to the ngScenario dsl - ([8cb9c99e](https://github.com/angular/angular.js/commit/8cb9c99ec064fd95567118d29bfa4a19b8613ab3)) -- **CSP:** update to the latest CSP api - ([af7e0bd0](https://github.com/angular/angular.js/commit/af7e0bd0a7c286667c526cb7e0c733d3ee5f17fd), - [#1577](https://github.com/angular/angular.js/issues/1577)) + +# 1.3.7 leaky-obstruction (2014-12-15) ## Bug Fixes +- **$compile:** use `createMap()` for `$$observe` listeners when initialized from attr interpolation + ([8e28bb4c](https://github.com/angular/angular.js/commit/8e28bb4c2f6d015dfe1cec7755f1ca9b0ecef1f8)) - **$http:** - - config.param should expand array values properly (see breaking change notes below) - ([79af2bad](https://github.com/angular/angular.js/commit/79af2badcb087881e3fd600f6ae5bf3f86a2daf8), - [#1363](https://github.com/angular/angular.js/issues/1363)) - - prevent CORS preflight checks by removing `X-Requested-With` from header defaults (see breaking - change notes below) - ([3a75b112](https://github.com/angular/angular.js/commit/3a75b1124d062f64093a90b26630938558909e8d), - [#1004](https://github.com/angular/angular.js/issues/1004)) - - prevent CORS preflight checks by not setting `X-XSFR-TOKEN` header for cross domain requests (see - breaking change notes below) - ([fce100a4](https://github.com/angular/angular.js/commit/fce100a46c5681562253c3a856d67bbd35fbc2f2), - [#1096](https://github.com/angular/angular.js/issues/1096)) + - only parse as JSON when opening/closing brackets match + ([b9bdbe61](https://github.com/angular/angular.js/commit/b9bdbe615cc4070d2233ff06830a4c6fb1217cda), + [#10349](https://github.com/angular/angular.js/issues/10349), [#10357](https://github.com/angular/angular.js/issues/10357)) + - don't convert FormData objects to JSON + ([40258838](https://github.com/angular/angular.js/commit/40258838031604feecb862afdc6f1f503d80ce4a), + [#10373](https://github.com/angular/angular.js/issues/10373)) +- **$parse:** a chain of field accessors should use a single `getterFn` + ([c90ad968](https://github.com/angular/angular.js/commit/c90ad96808be350526516626205c3a7d1da79024)) +- **ngRepeat:** allow extra whitespaces in `(key,value)` part of micro-syntax + ([ef640cbc](https://github.com/angular/angular.js/commit/ef640cbc2af5794c987e75472c12e63a59590044), + [#6827](https://github.com/angular/angular.js/issues/6827), [#6833](https://github.com/angular/angular.js/issues/6833)) +- **orderBy:** do not try to call `valueOf`/`toString` on `null` + ([a097aa95](https://github.com/angular/angular.js/commit/a097aa95b7c78beab6d1b7d521c25f7d9d7843d9), + [#10385](https://github.com/angular/angular.js/issues/10385), [#10386](https://github.com/angular/angular.js/issues/10386)) + +## Features -## Refactorings +- **$compile:** add support for `ng-attr` with camelCased attributes + ([d8e37078](https://github.com/angular/angular.js/commit/d8e37078600089839f82f0e84022f1087e1fd3f2), + [#9845](https://github.com/angular/angular.js/issues/9845), [#10194](https://github.com/angular/angular.js/issues/10194)) +- **$http:** pass response status code to data transform functions + ([1b740974](https://github.com/angular/angular.js/commit/1b740974f5eb373bed04071d51f908ced7c5a8e5), + [#10324](https://github.com/angular/angular.js/issues/10324), [#6734](https://github.com/angular/angular.js/issues/6734), [#10440](https://github.com/angular/angular.js/issues/10440)) +- **$rootScope:** allow passing `locals` argument to `$evalAsync` + ([9b96cea4](https://github.com/angular/angular.js/commit/9b96cea462676d123e1b2dd852aedbe3da8fa4a0), + [#10390](https://github.com/angular/angular.js/issues/10390)) -- **$evalAsync:** have only one global async queue - ([331cd5a8](https://github.com/angular/angular.js/commit/331cd5a8cb5efdafe8ad7eb386aed4033cfc1bb3)) +## Performance Improvements -## Breaking Changes +- **$compile:** only re-`$interpolate` attribute values at link time if changed since compile + ([9ae0c01c](https://github.com/angular/angular.js/commit/9ae0c01c2bcaff2f3906eec574f9c6ed8abde14a)) -- Due to fix for [#1363](https://github.com/angular/angular.js/issues/1363) it's possible but unlikely - that $http will start generating different URLs for requests. This affects only cases when a request - is made with a parameter, value of which is an array. If the server relied on the buggy behavior then - either the backend should be fixed or a simple serialization of the array should be done on the client - before calling the $http service. -- Due to fix for [#1004](https://github.com/angular/angular.js/issues/1004) the `X-Requested-With` header - is not set by $http service any more. If anyone actually uses this header it's quite easy to add - it back via: +## Breaking Changes - ``` - myAppModule.config(['$httpProvider', function($httpProvider) { - $httpProvider.defaults.headers.common["X-Requested-With"] = 'XMLHttpRequest'; - }]); - ``` +- **orderBy:** due to [a097aa95](https://github.com/angular/angular.js/commit/a097aa95b7c78beab6d1b7d521c25f7d9d7843d9), -- Due to fix for [#1096](https://github.com/angular/angular.js/issues/1096) `X-XSFR-TOKEN` header is - no longer send for cross domain requests. This shouldn't affect any known production service. If we are - wrong, please let us know ;-) +Previously, if either value being compared in the orderBy comparator was null or undefined, the +order would, incorrectly, not change. Now, this order behaves more like Array.prototype.sort, which +by default pushes `null` behind objects, due to `n` occurring after `[` (the first characters of their +stringified forms) in ASCII / Unicode. If `toString` is customized, or does not exist, the +behaviour is undefined. - -# 1.0.3 bouncy-thunder (2012-11-26) + +# 1.3.6 robofunky-danceblaster (2014-12-08) ## Bug Fixes -- **$cacheFactory:** return undefined when removing non-existent entry - ([55d15806](https://github.com/angular/angular.js/commit/55d15806fb14b1d98b5ca2770bbbb59e11548c62), - [#1497](https://github.com/angular/angular.js/issues/1497)) -- **$compile:** - - prevent double attr interpolation w/ templateUrl - ([fc115bfd](https://github.com/angular/angular.js/commit/fc115bfd0d18017f4bcef1e39fb22d97a98f8ab1), - [#1166](https://github.com/angular/angular.js/issues/1166)) - - reference local in isolate scope - ([8db47ca7](https://github.com/angular/angular.js/commit/8db47ca7d4303e3e45a838219a1f6e9be8770ed4), - [#1272](https://github.com/angular/angular.js/issues/1272)) - - don't look for class directives in empty string - ([54b3875b](https://github.com/angular/angular.js/commit/54b3875ba5cb6ce8ddac61ace33c1b2f600875ff)) - - compilation should not recurse into empty nodes - ([008a782b](https://github.com/angular/angular.js/commit/008a782bc8ed8a7ebcb63d563d1420fd1b312452)) -- **$injector:** more conservative annotation parsing -- **$location:** reset $location.$$replace with every watch call - ([a32bc40f](https://github.com/angular/angular.js/commit/a32bc40fd75ca46e3581ad7a6e3a24a31df6e266), - [#1111](https://github.com/angular/angular.js/issues/1111)) - ([d9eff86e](https://github.com/angular/angular.js/commit/d9eff86ef77dd76208cef21e882239d4db0eac1e)) -- **$parser:** string concatination with undefined model - ([42c38b29](https://github.com/angular/angular.js/commit/42c38b29f7dcb3327fe58e630b8e2973676989e0), - [#988](https://github.com/angular/angular.js/issues/988)) -- **$resource:** - - prevent default params to be shared between actions - ([94e1c039](https://github.com/angular/angular.js/commit/94e1c0391c351b6f691fad8abed2828fa20548b2)) - - allow falsy values in URL parameters - ([4909d1d3](https://github.com/angular/angular.js/commit/4909d1d39d61d6945a0820a5a7276c1e657ba262)) - - ignore undefined parameters - ([10e1c759](https://github.com/angular/angular.js/commit/10e1c759f4602d993a76b0eacf6a2d04c8880017), - [#875](https://github.com/angular/angular.js/issues/875), - [#782](https://github.com/angular/angular.js/issues/782)) -- **Scope:** - - workaround for Chrome's memleak - ([bd524fc4](https://github.com/angular/angular.js/commit/bd524fc4e5fc0feffe85632a7a6560da6bd9b762), - [#1313](https://github.com/angular/angular.js/issues/1313)) - - allow removing a listener during event - ([e6966e05](https://github.com/angular/angular.js/commit/e6966e05f508d1d2633b9ff327fea912b12555ac)) -- **$route:** support inline annotation on .resolve - ([b0a05a75](https://github.com/angular/angular.js/commit/b0a05a7531ed7235aa6d2c4e3ea11373e1fc73f1)) -- **FormController:** propagate dirty state to parent forms - ([04329151](https://github.com/angular/angular.js/commit/04329151d2df833f803629cefa781aa6409fe6a5)) -- **a:** prevent Opera from incorrectly navigating on link click - ([c81d8176](https://github.com/angular/angular.js/commit/c81d8176cc55cd15acae05259ead73f90a01f0b7)) -- **jqLite:** - - support append on document fragment - ([96ed9ff5](https://github.com/angular/angular.js/commit/96ed9ff59a454486c88bdf92ad9d28ab8864b85e)) - - fire $destroy event via triggerHandler (this makes AngularJS compatible with **jQuery 1.8.x**) - ([b9a9f91f](https://github.com/angular/angular.js/commit/b9a9f91fbf99b71cfde434b6277f4c7d2533556f), - [#1512](https://github.com/angular/angular.js/issues/1512)) -- **Filters** - - **currency:** Handle not-quite-zero values - ([bca1604c](https://github.com/angular/angular.js/commit/bca1604c12262b66ce3b8004994fb4841fb8b87d), - [#1469](https://github.com/angular/angular.js/issues/1469)) - - **date:** - - make timezone optional - ([9473780e](https://github.com/angular/angular.js/commit/9473780e77a960ba27644ca76c2413924cc8972e)) - - support sub-second precision on dateFilter - ([f299fd51](https://github.com/angular/angular.js/commit/f299fd512248321b426a5ab924a329aa1b691280)) -- **Directives** - - **ngClass:** works with class interpolation - ([cebd015f](https://github.com/angular/angular.js/commit/cebd015f78c5e21bd37d4bc055dbcdc21dac2ef2), - [#1016](https://github.com/angular/angular.js/issues/1016)) - - **ngClassOdd/ngClassEven:** support shrinking/reordering in repeaters - ([d859dcec](https://github.com/angular/angular.js/commit/d859dcecea654d1d858cd756c6efb8435a453197), - [6c67719d](https://github.com/angular/angular.js/commit/6c67719dfa6ff3f2a15a8e1e7660cf2e6e9155b0), - [#1076](https://github.com/angular/angular.js/issues/1076)) - - **ngModel:** sync ngModel state with scope state - ([e6d9bea4](https://github.com/angular/angular.js/commit/e6d9bea4f3b2eb28851298d3dc3a30d46062d58a), - [#933](https://github.com/angular/angular.js/issues/933)) - - **ngRepeat:** now works better with primitive types - ([e6d9bea4](https://github.com/angular/angular.js/commit/e6d9bea4f3b2eb28851298d3dc3a30d46062d58a), - [#933](https://github.com/angular/angular.js/issues/933)) - - **ngSrc:** don't set src if value is empty string - ([b6e4a711](https://github.com/angular/angular.js/commit/b6e4a71166c7f00f4140fd7ea8f0cd81b4487a3f)) - - **select:** select option with a label of 0 is not shown - ([b3cae4f4](https://github.com/angular/angular.js/commit/b3cae4f457f1688346bbd0b08cccc9c504f83406), - [#1401](https://github.com/angular/angular.js/issues/1401)) -- **scenario:** - - emit RunnerBegin event - ([95276a7e](https://github.com/angular/angular.js/commit/95276a7e1047c7a3ac6613d8612c62f544388fc9)) - - NPE when no angular loaded in test page - ([84c13d96](https://github.com/angular/angular.js/commit/84c13d96ff6e993b2ee9ff6bf49614fc1d514b04)) - - support data-ng and x-ng based attributes - ([249a1d84](https://github.com/angular/angular.js/commit/249a1d84e7ac3b8528d317b8b0a80acb5dd9a271), - [#1020](https://github.com/angular/angular.js/issues/1020)) - - -## Docs - -- add plunkr support - ([7c67b2fb](https://github.com/angular/angular.js/commit/7c67b2fb6afbc18f3593c64a5f339f04f9003f3c)) -- various small documentation fixes and improvements - - -## Refactorings - -- name all anonymous watch functions in Angular - ([ca30fce2](https://github.com/angular/angular.js/commit/ca30fce28ca13284bfa1c926e810ed75cdcde499), - [#1119](https://github.com/angular/angular.js/issues/1119)) - - - - - -# 1.1.0 increase-gravatas (2012-08-31) - -_Note: 1.1.x releases unlike 1.0.x are considered unstable. -[More info](http://blog.angularjs.org/2012/07/angularjs-10-12-roadmap.html)_ - -This release also contains all bug fixes available in [1.0.2](#1.0.2). +- **$browser:** prevent infinite digests when clearing the hash of a url + ([10ac5948](https://github.com/angular/angular.js/commit/10ac5948097e2c8eaead238603d29ee580dc8273), + [#9629](https://github.com/angular/angular.js/issues/9629), [#9635](https://github.com/angular/angular.js/issues/9635), [#10228](https://github.com/angular/angular.js/issues/10228), [#10308](https://github.com/angular/angular.js/issues/10308)) +- **$http:** preserve config object when resolving from cache + ([facfec98](https://github.com/angular/angular.js/commit/facfec98412c0bb8678d578bade05ffef06a9e84), + [#9004](https://github.com/angular/angular.js/issues/9004), [#9030](https://github.com/angular/angular.js/issues/9030)) +- **$location:** + - allow hash fragments with hashPrefix in hash-bang location urls + ([2dc34a96](https://github.com/angular/angular.js/commit/2dc34a969956eea680be4c8d9f800556d110996a), + [#9629](https://github.com/angular/angular.js/issues/9629), [#9635](https://github.com/angular/angular.js/issues/9635), [#10228](https://github.com/angular/angular.js/issues/10228), [#10308](https://github.com/angular/angular.js/issues/10308)) + - strip off empty hash segments when comparing + ([e93710fe](https://github.com/angular/angular.js/commit/e93710fe0e4fb05ceee59a04f290692a5bec5d20), + [#9635](https://github.com/angular/angular.js/issues/9635)) +- **$parse:** + - fix operators associativity + ([ed1243ff](https://github.com/angular/angular.js/commit/ed1243ffc7c2cb4bd5b4dece597597db8eb08e34)) + - follow JavaScript context for unbound functions + ([429938da](https://github.com/angular/angular.js/commit/429938da1f45b8a649b8c77762fb0ae59b6d0cea)) +- **filterFilter:** + - don't match primitive sub-expressions against any prop + ([a75537d4](https://github.com/angular/angular.js/commit/a75537d461c92e3455e372ff5005bf0cad2d2e95)) + - ignore function properties and account for inherited properties + ([5ced914c](https://github.com/angular/angular.js/commit/5ced914cc8625008e6249d5ac5942d5822287cc0), + [#9984](https://github.com/angular/angular.js/issues/9984)) + - correctly handle deep expression objects + ([f7cf8460](https://github.com/angular/angular.js/commit/f7cf846045b1e2fb39c62e304c61b44d5c805e31), + [#7323](https://github.com/angular/angular.js/issues/7323), [#9698](https://github.com/angular/angular.js/issues/9698), [#9757](https://github.com/angular/angular.js/issues/9757)) +- **inputs:** ignoring input events in IE caused by placeholder changes or focus/blur on inputs with placeholders + ([55d9db56](https://github.com/angular/angular.js/commit/55d9db56a6f7d29b16f8393612648080c6d535d6), + [#9265](https://github.com/angular/angular.js/issues/9265)) +- **linky:** make urls starting with www. links, like markdown + ([915a891a](https://github.com/angular/angular.js/commit/915a891ad4cdcaa5e47e976db8f4d402d230be77), + [#10290](https://github.com/angular/angular.js/issues/10290)) +- **ngAnimate:** do not use jQuery class API + ([40a537c2](https://github.com/angular/angular.js/commit/40a537c25f70ad556a41bb2d00ea3e257410e9af), + [#10024](https://github.com/angular/angular.js/issues/10024), [#10329](https://github.com/angular/angular.js/issues/10329)) +- **ngMock:** allow numeric timeouts in $httpBackend mock + ([acb066e8](https://github.com/angular/angular.js/commit/acb066e84a10483e1025eed295352b66747dbb8a), + [#4891](https://github.com/angular/angular.js/issues/4891)) +- **ngModel:** + - always use the most recent viewValue for validation + ([2d6a0a1d](https://github.com/angular/angular.js/commit/2d6a0a1dc1e7125cab2e30244e35e97e11802843), + [#10126](https://github.com/angular/angular.js/issues/10126), [#10299](https://github.com/angular/angular.js/issues/10299)) + - fixing many keys incorrectly marking inputs as dirty + ([d21dff21](https://github.com/angular/angular.js/commit/d21dff21ed8beb015ad911f11d57cceb56fc439f)) +- **ngSanitize:** exclude smart quotes at the end of the link + ([7c6be43e](https://github.com/angular/angular.js/commit/7c6be43e83590798cffef63d076fb79d5296fba2), + [#7307](https://github.com/angular/angular.js/issues/7307)) +- **numberFilter:** numbers rounding to zero shouldn't be negative + ([96c61fe7](https://github.com/angular/angular.js/commit/96c61fe756d7d3db011818bf0925e3d86ffff8ce), + [#10278](https://github.com/angular/angular.js/issues/10278)) +- **orderBy:** + - make object-to-primtiive behaviour work for objects with null prototype + ([3aa57528](https://github.com/angular/angular.js/commit/3aa5752894419b4638d5c934879258fa6a1c0d07)) + - maintain order in array of objects when predicate is not provided + ([8bfeddb5](https://github.com/angular/angular.js/commit/8bfeddb5d671017f4a21b8b46334ac816710b143), + [#9566](https://github.com/angular/angular.js/issues/9566), [#9747](https://github.com/angular/angular.js/issues/9747), [#10311](https://github.com/angular/angular.js/issues/10311)) + ## Features -- **$http:** support custom reponseType - ([e0a54f6b](https://github.com/angular/angular.js/commit/e0a54f6b206dc2b6595f2bc3a17c5932e7477545), - [#1013](https://github.com/angular/angular.js/issues/1013)) -- **$interpolate:** - - provide contextual error messages - ([d804bbcd](https://github.com/angular/angular.js/commit/d804bbcd51ec83bee1f4a3ccd42c3bd7eb38a988)) - - expose start/end symbols in run phase - ([58f121a5](https://github.com/angular/angular.js/commit/58f121a5c293ed57043e22ed526fdf99642fca81)) -- **$sniffer:** auto detect CSP mode (currently requires Chrome on dev channel) - ([167aa0c2](https://github.com/angular/angular.js/commit/167aa0c29c998be33c49d33302e099b36d1ce0be)) +- **$$jqLite:** export jqLite as a private service + ([f2e7f875](https://github.com/angular/angular.js/commit/f2e7f875e2ad4b271c4e72ebd3860f905132eed9)) +- **$injector:** print caller name in "unknown provider" errors (when available) + ([013b522c](https://github.com/angular/angular.js/commit/013b522c9e690665aecb0e0f656e4557a673ec09), + [#8135](https://github.com/angular/angular.js/issues/8135), [#9721](https://github.com/angular/angular.js/issues/9721)) +- **jsonFilter:** add optional arg to define custom indentation + ([1191edba](https://github.com/angular/angular.js/commit/1191edba4eaa15f675fa4ed047949a150843971b), + [#9771](https://github.com/angular/angular.js/issues/9771)) +- **ngAria:** bind keypress on ng-click w/ option + ([5481e2cf](https://github.com/angular/angular.js/commit/5481e2cfcd4d136a1c7f45cd4ce0fa1a8a15074d), + [#10288](https://github.com/angular/angular.js/issues/10288)) +## Breaking Changes - -# 1.0.2 debilitating-awesomeness (2012-08-31) +- **$location:** due to [2dc34a96](https://github.com/angular/angular.js/commit/2dc34a969956eea680be4c8d9f800556d110996a), -## Bug Fixes +We no longer throw an `ihshprfx` error if the URL after the base path +contains only a hash fragment. Previously, if the base URL was `http://abc.com/base/` +and the hashPrefix is `!` then trying to parse `http://abc.com/base/#some-fragment` +would have thrown an error. Now we simply assume it is a normal fragment and +that the path is empty, resulting `$location.absUrl() === "http://abc.com/base/#!/#some-fragment"`. -- **$compile:** denormalize directive templates - ([dfe99836](https://github.com/angular/angular.js/commit/dfe99836cd98c2a1b0f9bde6216bd44088de275a)) -- **$interpolate:** $interpolateProvider.endSymbol() returns startSymbol - ([20348717](https://github.com/angular/angular.js/commit/20348717640c0ef405c9fdcc8fec5b566efc48b3)) -- **jqLite:** better support for xhtml - ([d3fa7a2e](https://github.com/angular/angular.js/commit/d3fa7a2e9e93c9dae13d852b28c878f7d6b7c420), - [#1301](https://github.com/angular/angular.js/issues/1301)) -- **mocks:** free up memory after every spec - ([1a8642aa](https://github.com/angular/angular.js/commit/1a8642aac2de40dccdab464e58dc164006c300bb)) -- **e2e test runner:** Adding meta tag to avoid cache issues - ([5318588d](https://github.com/angular/angular.js/commit/5318588d6e8ee9a31f4002affd6858d25305aabf)) -- Directives: - - **form:** prevent page reload when form destroyed - ([054d40f3](https://github.com/angular/angular.js/commit/054d40f338f9000cddcf7f0513af37328b88ef41), - [#1238](https://github.com/angular/angular.js/issues/1238)) - - **ngList:** remove data bound flicker - ([fa62ea81](https://github.com/angular/angular.js/commit/fa62ea810f6c701e898dd07c6c9228f13d5b5e02)) - - **ngPluralize:** fixes ng-pluralize when using non-standard start/end symbols - ([e85774f7](https://github.com/angular/angular.js/commit/e85774f709b9f681b0ff8d829b07568b0f844a62), - [#1134](https://github.com/angular/angular.js/issues/1134)) - - **option:** support option elements in datalist - ([9767f7bd](https://github.com/angular/angular.js/commit/9767f7bdd3e1ce6f65bdea992d67369ead13d813), - [#1165](https://github.com/angular/angular.js/issues/1165)) - - -## Docs - -- Conceptual Overview of AngularJS (high level overview of how things work): - - ([7a5f25f6](https://github.com/angular/angular.js/commit/7a5f25f6671eb5f51b06615d74a05855ab79f31e)) -- Lots of spelling, grammar and other fixes: - [9a710c78](https://github.com/angular/angular.js/commit/9a710c788d880785d2b02a9c5411eb15e9c278bf), - [847d2da0](https://github.com/angular/angular.js/commit/847d2da0f8d1e265eda7b4dd3e7eb52ac86d784e), - [dbefd671](https://github.com/angular/angular.js/commit/dbefd671e41c3bda481850bb7e566349e275d759), - [cab5e1d9](https://github.com/angular/angular.js/commit/cab5e1d9b363eac6fd31b15c5b86f30993e2f147), - [f00b6cca](https://github.com/angular/angular.js/commit/f00b6cca024a9418f353651f29c984f934575bd9), - [2e365168](https://github.com/angular/angular.js/commit/2e3651686c2bd84cf464ecc236c8ad77e61179df), - [536de148](https://github.com/angular/angular.js/commit/536de148214290f0b4a0595fa16c00da5e527e79), - [a1107e81](https://github.com/angular/angular.js/commit/a1107e81ebf2254caf75718de2e3ec773cce0c56), - [5ef9ed87](https://github.com/angular/angular.js/commit/5ef9ed87d82b109715a87e9aa1b1d5b63f515d3a), - [8c81a0f3](https://github.com/angular/angular.js/commit/8c81a0f3728b9308854ceb9bf392ec467b95d8eb), - [bde931af](https://github.com/angular/angular.js/commit/bde931afd5cf2483df236e06992666a0a4182794), - [6553fe68](https://github.com/angular/angular.js/commit/6553fe68d17d42ec25e0c592ceaa1077cc0ec4f6), - [13b5fd1b](https://github.com/angular/angular.js/commit/13b5fd1b9d60f1a9187da8a89db9272284ccdac4), - [17209d5b](https://github.com/angular/angular.js/commit/17209d5b4a579edf8425715b5cdf25bc5cd96711), - [31c82560](https://github.com/angular/angular.js/commit/31c825607dd524241c811ca3e401b119c810e977), - [ab6937e2](https://github.com/angular/angular.js/commit/ab6937e2518bfd77d9fe42e3d2e11fe4a7a16814), - [fbfda241](https://github.com/angular/angular.js/commit/fbfda241f616bcfe8273f501dd49120a3cb35fab), - [206371b7](https://github.com/angular/angular.js/commit/206371b7372c242db234ca8da12d1c7a8a322d54), - [b6b92bd8](https://github.com/angular/angular.js/commit/b6b92bd866e1d6d066f1c9bf1937496cd3e28664), - [79f2d843](https://github.com/angular/angular.js/commit/79f2d843a8458bfdc23fe9f179a1416fe21f7533), - [64a9cd8f](https://github.com/angular/angular.js/commit/64a9cd8f4fac1c518869a1c955fe60bd6ef76439), - [7f6e1326](https://github.com/angular/angular.js/commit/7f6e1326f3a7a6a2ba2dbd48dd6571ebe929a7c1), - [1fd2b3d4](https://github.com/angular/angular.js/commit/1fd2b3d402f36e395a1fe9ea7e3f91a1b2833426), - [d56d69cc](https://github.com/angular/angular.js/commit/d56d69cc8319f69135a17a9bb5ae394123b33c51), - [01e726b2](https://github.com/angular/angular.js/commit/01e726b2fa3fb0d2584c9bb8df116ff3a9f05879), - [16136216](https://github.com/angular/angular.js/commit/161362164532af3578c9e3e8b52cd80b15345add), - [92a3d282](https://github.com/angular/angular.js/commit/92a3d2821856c75eb95f8ec6ccf26d6a9b37fdd9), - [4c585019](https://github.com/angular/angular.js/commit/4c5850195699b1d982963f25399d24bf8b815f81), - [c076fe08](https://github.com/angular/angular.js/commit/c076fe08cf47e8af4b5e8845aed917ebb7dbd593), - [2473412b](https://github.com/angular/angular.js/commit/2473412ba55f7c47f2ca24311312ce95ee11949e), - [1f2d5000](https://github.com/angular/angular.js/commit/1f2d50000e82630bfce6eb9cf0a8da752fd1e826), - [5026315d](https://github.com/angular/angular.js/commit/5026315d6f4495d636d86ae2a022fb55cc0ca211), - [f0a090dd](https://github.com/angular/angular.js/commit/f0a090ddf256d0c144e705c0cdf4216d824140f9), - [6d9313a6](https://github.com/angular/angular.js/commit/6d9313a68d82654d389c0b2c3e4af148382f14be)) and more! - - - - -# 1.0.1 thorium-shielding (2012-06-25) +This should not break any applications, but you can no longer rely on receiving the +`ihshprfx` error for paths that have the syntax above. It is actually more similar +to what currently happens for invalid extra paths anyway: If the base URL +and hashPrfix are set up as above, then `http://abc.com/base/other/path` does not +throw an error but just ignores the extra path: `http://abc.com/base`. -## Bug Fixes +- **filterFilter:** due to [a75537d4](https://github.com/angular/angular.js/commit/a75537d461c92e3455e372ff5005bf0cad2d2e95), -- **$location:** don't throw exception while url rewriting if element was removed - ([3da4194f](https://github.com/angular/angular.js/commit/3da4194f98fa0c1ad1e5ab159719e4b25799e6d4), - [#1058](https://github.com/angular/angular.js/issues/1058)) -- **$location:** prevent ie from getting into redirect loop - ([ffb27013](https://github.com/angular/angular.js/commit/ffb270130a4aaf3ddc2eb9d6211b46e1da136184), - [#1075](https://github.com/angular/angular.js/issues/1075), - [#1079](https://github.com/angular/angular.js/issues/1079), - [#1085](https://github.com/angular/angular.js/issues/1085)) + Named properties in the expression object will only match against properties on the **same level**. + Previously, named string properties would match against properties on the same level **or deeper**. + Before: + ```js + arr = filterFilter([{level1: {level2: 'test'}}], {level1: 'test'}); // arr.length -> 1 + ``` - -# 1.0.0 temporal-domination (2012-06-13) + After: + ```js + arr = filterFilter([{level1: {level2: 'test'}}], {level1: 'test'}); // arr.length -> 0 + ``` -## Bug Fixes + In order to match deeper nested properties, you have to either match the depth level of the + property or use the special `$` key (which still matches properties on the same level + **or deeper**). E.g.: -- **$location:** - - correctly parse link urls in hashbang mode with a prefix - ([0f44964e](https://github.com/angular/angular.js/commit/0f44964e5e0f7e37d7fa3216bb10fd61fbf52ae2), - [#1037](https://github.com/angular/angular.js/issues/1037)) - - fix link click interception in hash-bang mode - ([6593a3e0](https://github.com/angular/angular.js/commit/6593a3e0823f3c08079f05010f9628fc4503cd43), - [#1051](https://github.com/angular/angular.js/issues/1051)) + ```js + // Both examples below have `arr.length === 1` + arr = filterFilter([{level1: {level2: 'test'}}], {level1: {level2: 'test'}}); + arr = filterFilter([{level1: {level2: 'test'}}], {$: 'test'}); + ``` - -# 1.0.0rc12 regression-extermination (2012-06-12) + +# 1.3.5 cybernetic-mercantilism (2014-12-01) + ## Bug Fixes -- **$location:** correctly parse link urls in hashbang mode - ([74fa65ec](https://github.com/angular/angular.js/commit/74fa65ecb7c4e2df966a179952b35700912e065f), - [#1037](https://github.com/angular/angular.js/issues/1037)) +- **$templateRequest:** propagate rejection reason when ignoreRequestError flag is set + ([f6458826](https://github.com/angular/angular.js/commit/f6458826ac974914597a10b0ffdeee3c5d2c62ef), + [#10266](https://github.com/angular/angular.js/issues/10266)) +- **$httpBackend:** allow canceling request with falsy timeoutId + ([719d5c5f](https://github.com/angular/angular.js/commit/719d5c5fa59ae1617691a0dca02da861fcf5f933), + [#10177](https://github.com/angular/angular.js/issues/10177)) +- **linky:** encode all double quotes when serializing email addresses + ([2ec8d1ff](https://github.com/angular/angular.js/commit/2ec8d1ffc04e06a39cb1b74a8d675da38e0a1c6b), + [#10090](https://github.com/angular/angular.js/issues/10090)) +- **ngMock:** + - annotate $RootScopeDecorator + ([9a83f9d2](https://github.com/angular/angular.js/commit/9a83f9d2fabe0a259c283b7f7cd935e4b36e2b5d), + [#10273](https://github.com/angular/angular.js/issues/10273), [#10275](https://github.com/angular/angular.js/issues/10275), [#10277](https://github.com/angular/angular.js/issues/10277)) + - respond did not always take a statusText argument + ([08cd5c19](https://github.com/angular/angular.js/commit/08cd5c19c7a5116e7e74691391fc5e28bfae4521), + [#8270](https://github.com/angular/angular.js/issues/8270)) +- **select:** + - use strict compare when removing option from ctrl + ([9fa73cb4](https://github.com/angular/angular.js/commit/9fa73cb4e7190b4d00b65f2f8f9f7d37607308ba), + [#9714](https://github.com/angular/angular.js/issues/9714), [#10115](https://github.com/angular/angular.js/issues/10115), [#10203](https://github.com/angular/angular.js/issues/10203)) + - fix several issues when moving options between groups + ([30694c80](https://github.com/angular/angular.js/commit/30694c802763d46d6787f7298f47dfef53ed4229), + [#10166](https://github.com/angular/angular.js/issues/10166)) + + + +# 1.3.4 highfalutin-petroglyph (2014-11-24) +## Bug Fixes -## Cleanup +- **$browser:** allow chaining url() calls in setter mode + ([764fa869](https://github.com/angular/angular.js/commit/764fa869dd8809d494924c23f30ddaa4cac84249), + [#10157](https://github.com/angular/angular.js/issues/10157)) +- **$http:** return empty headers, ignore properties in Object prototype + ([637c020f](https://github.com/angular/angular.js/commit/637c020f828a7ceeaacf83bb1a54ed3092e6c273), + [#7779](https://github.com/angular/angular.js/issues/7779), [#10113](https://github.com/angular/angular.js/issues/10113), [#10091](https://github.com/angular/angular.js/issues/10091)) +- **$locale:** Allow currency filter to fall back to maxFrac from locale + ([6dbd606a](https://github.com/angular/angular.js/commit/6dbd606ad7b708d5886c0e7ffee20ae8f8719711), + [#10179](https://github.com/angular/angular.js/issues/10179)) +- **$location:** allow empty string URLs to reset path, search, and hash + ([7812dfce](https://github.com/angular/angular.js/commit/7812dfcee8ab98cbf38261f9948d9541656bf554), + [#10063](https://github.com/angular/angular.js/issues/10063), [#10064](https://github.com/angular/angular.js/issues/10064)) +- **$route:** fix redirection with optional/eager params + ([891acf4c](https://github.com/angular/angular.js/commit/891acf4c201823fd2c925ee321c70d06737d5944), + [#9819](https://github.com/angular/angular.js/issues/9819), [#9827](https://github.com/angular/angular.js/issues/9827)) +- **Angular:** properly get node name for svg element wrapper + ([09a98323](https://github.com/angular/angular.js/commit/09a9832358960c98392c9df1a9fd9592f59bc844), + [#10078](https://github.com/angular/angular.js/issues/10078), [#10172](https://github.com/angular/angular.js/issues/10172)) +- **NgModelController:** typo $rawModelValue -> $$rawModelValue + ([4f4ff5f3](https://github.com/angular/angular.js/commit/4f4ff5f31b82c6f7be409ea4edbad4c2913ac1f1)) +- **input:** + - set ngTrueValue on required checkbox + ([8692f87a](https://github.com/angular/angular.js/commit/8692f87a4689fa0dd3640f4dcab5c6b6f960489b), + [#5164](https://github.com/angular/angular.js/issues/5164)) + - call $setTouched in blur asynchronously if necessary + ([eab27187](https://github.com/angular/angular.js/commit/eab271876cb87c1f5f6c6f29e814fb8fecad87ff), + [#8762](https://github.com/angular/angular.js/issues/8762), [#9808](https://github.com/angular/angular.js/issues/9808), [#10014](https://github.com/angular/angular.js/issues/10014)) +- **input[date]:** do not use `$isEmpty` to check the model validity + ([40406e2f](https://github.com/angular/angular.js/commit/40406e2f22713efbd37ef3eff408339727cb62d9)) +- **linky:** encode double quotes when serializing email addresses + ([8ee8ffeb](https://github.com/angular/angular.js/commit/8ee8ffeba0a5a133fa792745c1019d294ecfcef3), + [#8945](https://github.com/angular/angular.js/issues/8945), [#8964](https://github.com/angular/angular.js/issues/8964), [#5946](https://github.com/angular/angular.js/issues/5946), [#10090](https://github.com/angular/angular.js/issues/10090), [#9256](https://github.com/angular/angular.js/issues/9256)) +- **ngMaxlength:** ignore maxlength when not set to a non-negative integer + ([92f87b11](https://github.com/angular/angular.js/commit/92f87b114242b01876e1dc5c6fddd061352ecb2c), + [#9874](https://github.com/angular/angular.js/issues/9874)) +- **ngModel:** don't run parsers when executing $validate + ([e3764e30](https://github.com/angular/angular.js/commit/e3764e30a301ec6136c8e6b5493d39feb3cd1ecc)) +- **ngModelOptions:** preserve context of getter/setters + ([bb4d3b73](https://github.com/angular/angular.js/commit/bb4d3b73a1ccf3dee55b0c25baf031bae5cbb676), + [#9394](https://github.com/angular/angular.js/issues/9394), [#9865](https://github.com/angular/angular.js/issues/9865)) -- **$defer:** remove deprecated `$defer` service - ([9af7a919](https://github.com/angular/angular.js/commit/9af7a9198e2d30608ea6c40eedde03e44a6ef569)) -- **docs:** simplify api urls - ([f16150d5](https://github.com/angular/angular.js/commit/f16150d5f1b20b3d633b4402095ea89baa4be042)) +## Features +- **ngMaxlength:** add support for disabling max length limit + ([5c1fdff6](https://github.com/angular/angular.js/commit/5c1fdff691b9367d73f72f6a0298cb6a6e259f35), + [#9995](https://github.com/angular/angular.js/issues/9995)) +- **ngModelController:** add $setDirty method + ([e8941c0f](https://github.com/angular/angular.js/commit/e8941c0fe5217d2e705bad8253dc0162aff4c709), + [#10038](https://github.com/angular/angular.js/issues/10038), [#10049](https://github.com/angular/angular.js/issues/10049)) +- **ngPluralize:** add support for `count` to be a one-time expression + ([2b41a586](https://github.com/angular/angular.js/commit/2b41a5868aee79e3872ad92db66e30959207d98e), + [#10004](https://github.com/angular/angular.js/issues/10004)) - -# 1.0.0rc11 promise-resolution (2012-06-10) -## Features +## Performance Improvements -- **$route:** - - allow defining route async dependencies as promises and defer route change until all promises - are resolved - ([885fb0dd](https://github.com/angular/angular.js/commit/885fb0dd0743859a8985c23e4d0c1855a2be711e)) - - rename template -> tempalteUrl and add support for inline templates - ([0a6e464a](https://github.com/angular/angular.js/commit/0a6e464a93d9a1e76a624b356054ce9ca4015f55)) -- **$compile:** simplify isolate scope bindings and introduce true two-way data-binding between - parent scope and isolate scope - ([c3a41ff9](https://github.com/angular/angular.js/commit/c3a41ff9fefe894663c4d4f40a83794521deb14f)) -- **$injector:** provide API for retrieving function annotations - ([4361efb0](https://github.com/angular/angular.js/commit/4361efb03b79e71bf0cea92b94ff377ed718bad4)) -- **$location:** add $locatonChange[start|success] event - since events are cancelable, it's now - possible to cancel route and location changes. - ([92a2e180](https://github.com/angular/angular.js/commit/92a2e1807657c69e1372106b0727675a30f4cbd7)) -- **$rootElement:** expose application root element as $rootElement service - ([85632cb4](https://github.com/angular/angular.js/commit/85632cb44c95617d73c369f3a03fb476a4d5c8a2)) +- use Object.create instead of creating temporary constructors + ([bf6a79c3](https://github.com/angular/angular.js/commit/bf6a79c3484f474c300b5442ae73483030ef5782), + [#10058](https://github.com/angular/angular.js/issues/10058)) -## Bug Fixes +## Breaking Changes -- **$compile:** correctly merge class attr for replace directives (contributed by Max Martinsson, - [fb99b539](https://github.com/angular/angular.js/commit/fb99b539b4d851773b43f1564f7032adb157c0db), - [#1006](https://github.com/angular/angular.js/issues/1006)) -- **$http:** add utf-8 to default Content-Type header (post/put) - ([10f80d7d](https://github.com/angular/angular.js/commit/10f80d7d2918f98262090b425ecc294d9518aa7e)) -- **$timeout:** allow calling $timeout.cancel() with undefined (contributed by Ali Mills, - [1904596e](https://github.com/angular/angular.js/commit/1904596e0c2330299e92f092bd7a6ceca8e97c30)) -- **jqLite:** don't eat event exceptions - ([416a7830](https://github.com/angular/angular.js/commit/416a7830403a579cc57cf3a0198193790dcd0bc6)) +- **ngModelOptions:** due to [bb4d3b73](https://github.com/angular/angular.js/commit/bb4d3b73a1ccf3dee55b0c25baf031bae5cbb676), + previously, ngModel invoked getter/setters in the global context. +For example: -## Breaking Changes +```js + +``` -- **$beforeRouteChange and $afterRouteChange events were renamed to $routeChangeStart and - $routeChangeSuccess** +would previously invoke `model.value()` in the global context. - This was done to make the naming consistent with $location events and also get events to - categorize and order nicely just by alphabetical sorting. +Now, ngModel invokes `value` with `model` as the context. - ([7c242821](https://github.com/angular/angular.js/commit/7c2428218893f59c6a4499667488009ca67f3385)) +It's unlikely that real apps relied on this behavior. If they did they can use `.bind` to explicilty +bind a getter/getter to the global context, or just reference globals normally without `this`. -- **`template` option in $route definition was renamed to `templateUrl`** - The `template` options in $route definition now represents the actual template string. To provide - the template url use `templateUrl` option instead. This was done to unify the directive and $route - definitions. + +# 1.3.3 undersea-arithmetic (2014-11-17) - To migrate just rename `template` to `templateUrl`. - ([0a6e464a](https://github.com/angular/angular.js/commit/0a6e464a93d9a1e76a624b356054ce9ca4015f55)) +## Bug Fixes -- **isolate scope bindings definition has changed** +- **$http:** don't parse single space responses as JSON + ([6f19a6fd](https://github.com/angular/angular.js/commit/6f19a6fd33ab72d3908e3418fba47ee8e1598fa6), + [#9907](https://github.com/angular/angular.js/issues/9907)) +- **minErr:** stringify non-JSON compatible objects in error messages + ([cf43ccdf](https://github.com/angular/angular.js/commit/cf43ccdf9b8665a2fd5d6aa52f80cb2d7c9bb7e2), + [#10085](https://github.com/angular/angular.js/issues/10085)) +- **$rootScope:** handle cyclic references in scopes when creating error messages + ([e80053d9](https://github.com/angular/angular.js/commit/e80053d91fd7c722e092a23d326384de2e552eb6), + [#10085](https://github.com/angular/angular.js/issues/10085)) +- **ngRepeat:** support cyclic object references in error messages + ([fa12c3c8](https://github.com/angular/angular.js/commit/fa12c3c86af7965d1b9d9a5dd3434755e9e04635), + [#9838](https://github.com/angular/angular.js/issues/9838), [#10065](https://github.com/angular/angular.js/issues/10065), [#10085](https://github.com/angular/angular.js/issues/10085)) +- **ngMock:** call $interval callbacks even when invokeApply is false + ([d81ff888](https://github.com/angular/angular.js/commit/d81ff8885b77f70c6417d7be3124d86d07447375), + [#10032](https://github.com/angular/angular.js/issues/10032)) +- **ngPattern:** match behaviour of native HTML pattern attribute + ([85eb9660](https://github.com/angular/angular.js/commit/85eb9660ef67c24d5104a6a1921bedad0bd1b57e), + [#9881](https://github.com/angular/angular.js/issues/9881), [#9888](https://github.com/angular/angular.js/issues/9888)) +- **select:** ensure the label attribute is updated in Internet Explorer + ([6604c236](https://github.com/angular/angular.js/commit/6604c2361427fba8c43a39dc2e92197390dfbdbe), + [#9621](https://github.com/angular/angular.js/issues/9621), [#10042](https://github.com/angular/angular.js/issues/10042)) - To migrate the code follow the example below: - Before: +## Features - scope: { - myAttr: 'attribute', - myBind: 'bind', - myExpression: 'expression', - myEval: 'evaluate', - myAccessor: 'accessor' - } +- **$location:** allow to location to be changed during $locationChangeStart + ([a9352c19](https://github.com/angular/angular.js/commit/a9352c19ce33f0393d6581547c7ea8dfc2a8b78f), + [#9607](https://github.com/angular/angular.js/issues/9607), [#9678](https://github.com/angular/angular.js/issues/9678)) +- **$routeProvider:** allow setting caseInsensitiveMatch on the provider + ([0db573b7](https://github.com/angular/angular.js/commit/0db573b7493f76abd94ff65ce660017d617e865b), + [#6477](https://github.com/angular/angular.js/issues/6477), [#9873](https://github.com/angular/angular.js/issues/9873)) - After: - scope: { - myAttr: '@', - myBind: '@', - myExpression: '&', - // myEval - usually not useful, but in cases where the expression is assignable, you can use '=' - myAccessor: '=' // in directive's template change myAccessor() to myAccessor - } +## Performance Improvements +- **orderBy:** copy array with slice instead of for loop + ([8eabc546](https://github.com/angular/angular.js/commit/8eabc5463c795d87f37e5a9eacbbb14435024061), + [#9942](https://github.com/angular/angular.js/issues/9942)) -- **the inject option for the directive controller injection was removed** +## Breaking Changes - The removed `inject` wasn't generally useful for directives so there should be no code using it. - ([c3a41ff9](https://github.com/angular/angular.js/commit/c3a41ff9fefe894663c4d4f40a83794521deb14f)) +- **$parse:** due to [fbad2805](https://github.com/angular/angular.js/commit/fbad2805703569058a4a860747b0e2d8aee36bdf), + you can't use characters that have special meaning in AngularJS expressions (ex.: `.` or `-`) + as part of filter's name. Before this commit custom filters could contain special characters + (like a dot) in their name but this wasn't intentional. + +# 1.3.2 cardiovasculatory-magnification (2014-11-07) - -# 1.0.0rc10 tesseract-giftwrapping (2012-05-23) +## Bug Fixes + +- **$compile:** do not rebind parent bound transclude functions + ([841c0907](https://github.com/angular/angular.js/commit/841c0907556f525dbc4223609d808319fe0dd7e2), + [#9413](https://github.com/angular/angular.js/issues/9413)) +- **$parse:** + - stateful interceptors override an `undefined` expression + ([ed99821e](https://github.com/angular/angular.js/commit/ed99821e4dc621864f7e2d9a6b5305fca27fb7fa), + [#9821](https://github.com/angular/angular.js/issues/9821), [#9825](https://github.com/angular/angular.js/issues/9825)) + - add quick check for Function constructor in fast path + ([e676d642](https://github.com/angular/angular.js/commit/e676d642f5feb8d3ba88944634afb479ba525c36)) +- **$parse, events:** prevent accidental misuse of properties on $event + ([e057a9aa](https://github.com/angular/angular.js/commit/e057a9aa398ead209bd6bbf76e22d2d5562904fb)) +- **ngRoute:** allow proto inherited properties in route params object + ([b4770582](https://github.com/angular/angular.js/commit/b4770582f84f26c8ff7f2320a36a6b0ceff6e6cc), + [#8181](https://github.com/angular/angular.js/issues/8181), [#9731](https://github.com/angular/angular.js/issues/9731)) +- **select:** use strict comparison for isSelected with selectAs + ([9e305948](https://github.com/angular/angular.js/commit/9e305948e4965fb86b0c79985dc6e8c59a9c66af), + [#9639](https://github.com/angular/angular.js/issues/9639), [#9949](https://github.com/angular/angular.js/issues/9949)) + ## Features -- **$timeout:** add `$timeout` service that supersedes `$defer` - ([4511d39c](https://github.com/angular/angular.js/commit/4511d39cc748288df70bdc258f98a8f36652e683), - [#704](https://github.com/angular/angular.js/issues/704), - [#532](https://github.com/angular/angular.js/issues/532)) -- **scope:** add `event.preventDefault()` and `event.defaultPrevented` - ([84542d24](https://github.com/angular/angular.js/commit/84542d2431d20de42d6ec27c9d3435dd72dbe2ee)) +- **ngAria:** announce ngMessages with aria-live + ([187e4318](https://github.com/angular/angular.js/commit/187e43185dfb1bce6a318d95958c73cfb789d33c), + [#9834](https://github.com/angular/angular.js/issues/9834)) +- **ngMock:** decorator that adds Scope#$countChildScopes and Scope#$countWatchers + ([74981c9f](https://github.com/angular/angular.js/commit/74981c9f208b3617cbf00beafd61138d25c5d546), + [#9926](https://github.com/angular/angular.js/issues/9926), [#9871](https://github.com/angular/angular.js/issues/9871)) -## Bug Fixes +## Security Note -- **ngRepeat:** expose `$first`, `$middle` and `$last` instead of `$position` - ([1d388676](https://github.com/angular/angular.js/commit/1d388676e3b97b6171fc498e82545bd437ee6fd1), - [#912](https://github.com/angular/angular.js/issues/912)) -- **jqLite:** use the same expando store structure as jQuery - ([acf095d1](https://github.com/angular/angular.js/commit/acf095d1783e30e750d046ef24e81b5a0a31fbd4)) -- **$rootScope:** infinite digest exception does not clear $$phase - ([5989a1ed](https://github.com/angular/angular.js/commit/5989a1eda2b9e289b467ef9741fb1476549c8fd9), - [#979](https://github.com/angular/angular.js/issues/979)) +This release also contains security fixes for expression sandbox bypasses. +These issues affect only applications with known server-side XSS holes that are also using [CSP](https://developer.mozilla.org/en-US/docs/Web/Security/CSP) to secure their client-side code. If your application falls into this rare category, we recommend updating your version of Angular. -## Breaking Changes +We'd like to thank security researches [Sebastian Lekies](https://twitter.com/sebastianlekies), [Jann Horn](http://thejh.net/), and [Gábor Molnár](https://twitter.com/molnar_g) for reporting these issues to us. -- **ngRepeat - `$position` is not exposed in repeater scopes any more** +We also added a documentation page focused on security, which contains some of the best practices, DOs and DON'Ts. Please check out [https://docs.angularjs.org/guide/security](https://docs.angularjs.org/guide/security). - To update, search for `/\$position/` and replace it with one of `$first`, `$middle` or `$last`. - ([1d388676](https://github.com/angular/angular.js/commit/1d388676e3b97b6171fc498e82545bd437ee6fd1)) -- **scope event's `cancel` method was renamed to `stopPropagation`** - The name was corrected in order to align better with DOM terminology. - To update, search for `/\.\s*cancel\s*(/` and replace it with `.stopPropagation(` or - `.preventDefault(` (or both) depending on what you actually need. - ([91db9920](https://github.com/angular/angular.js/commit/91db99208e197a73584a88a8d835eeb55c466335)) + +# 1.3.1 spectral-lobster (2014-10-31) -## Deprecation Warnings +## Bug Fixes -- **`$defer` service has been deprecated in favor of `$timeout` service** +- **$compile:** returning null when an optional controller is not found + ([2cd5b4ec](https://github.com/angular/angular.js/commit/2cd5b4ec4409a818ccd33a6fbdeb99a3443a1809), + [#9404](https://github.com/angular/angular.js/issues/9404), [#9392](https://github.com/angular/angular.js/issues/9392)) +- **$observe:** check if the attribute is undefined + ([531a8de7](https://github.com/angular/angular.js/commit/531a8de72c439d8ddd064874bf364c00cedabb11), + [#9707](https://github.com/angular/angular.js/issues/9707), [#9720](https://github.com/angular/angular.js/issues/9720)) +- **$parse:** support dirty-checking objects with null prototype + ([28661d1a](https://github.com/angular/angular.js/commit/28661d1a8cc3a8454bad7ae531e027b1256476c9), + [#9568](https://github.com/angular/angular.js/issues/9568)) +- **$sce:** use msie instead of $document[0].documentMode + ([45252c3a](https://github.com/angular/angular.js/commit/45252c3a545336a0bac93be6ee28cde6afaa3cb4), + [#9661](https://github.com/angular/angular.js/issues/9661)) +- **$templateRequest:** ignore JSON Content-Type header and content + ([1bd473eb](https://github.com/angular/angular.js/commit/1bd473eb4587900086e0b6b308dcf1dcfe9760d9), + [#5756](https://github.com/angular/angular.js/issues/5756), [#9619](https://github.com/angular/angular.js/issues/9619)) +- **i18n:** rename datetimeSymbols to be camelCase + ([94f5a285](https://github.com/angular/angular.js/commit/94f5a285bfcf04d800afc462a7a37a3469d77f1a)) +- **loader:** fix double spaces + ([8b2f1a47](https://github.com/angular/angular.js/commit/8b2f1a47b584ceb98689f48538a2af73cd65dfd8), + [#9630](https://github.com/angular/angular.js/issues/9630)) +- **ngMock:** $httpBackend should match data containing Date objects correctly + ([1025f6eb](https://github.com/angular/angular.js/commit/1025f6ebf4e5933a12920889be00cd8ac8a106fa), + [#5127](https://github.com/angular/angular.js/issues/5127)) +- **ngSanitize:** attribute name: xmlns:href -> xlink:href + ([4cccf0f2](https://github.com/angular/angular.js/commit/4cccf0f2a89b002d63cb443e1e7b15f76dcef425), + [#9769](https://github.com/angular/angular.js/issues/9769)) +- **select:** assign result of track exp to element value + ([4b4098bf](https://github.com/angular/angular.js/commit/4b4098bfcae64f69c70a22393de1f3d9a0d3dc46), + [#9718](https://github.com/angular/angular.js/issues/9718), [#9592](https://github.com/angular/angular.js/issues/9592)) +- **templateRequest:** allow empty html template + ([52ceec22](https://github.com/angular/angular.js/commit/52ceec2229dc132b76da4e022c91474344f2d906), + [#9581](https://github.com/angular/angular.js/issues/9581)) +- **testability:** escape regex chars in `findBindings` if using `exactMatch` + ([02aa4f4b](https://github.com/angular/angular.js/commit/02aa4f4b85ee15922a1f2de8ba78f562c18518d0), + [#9595](https://github.com/angular/angular.js/issues/9595), [#9600](https://github.com/angular/angular.js/issues/9600)) - The `$defer` service will be removed before 1.0 final, so please migrate your code. - ([4511d39c](https://github.com/angular/angular.js/commit/4511d39cc748288df70bdc258f98a8f36652e683)) +## Features +- **$compile:** allow $watchCollection to be used in bi-directional bindings + ([40bbc981](https://github.com/angular/angular.js/commit/40bbc9817845bf75581daee5d0ec30980affb0f5), + [#9725](https://github.com/angular/angular.js/issues/9725)) +- **ngSanitize:** accept SVG elements and attributes + ([a54b25d7](https://github.com/angular/angular.js/commit/a54b25d77999a85701dfc5396fef78e586a99667), + [#9578](https://github.com/angular/angular.js/issues/9578), [#9751](https://github.com/angular/angular.js/issues/9751)) - -# 1.0.0rc9 eggplant-teleportation (2012-05-14) -## Bug Fixes + +# 1.3.0 superluminal-nudge (2014-10-13) -- **$location:** - - single quote in url causes infinite digest in FF - ([679cb8a7](https://github.com/angular/angular.js/commit/679cb8a74a684454fe38fa9e1ddad396bb598c52), - [#920](https://github.com/angular/angular.js/issues/920)) - - support urls with any protocol - ([c1533ef5](https://github.com/angular/angular.js/commit/c1533ef5762199bea18d3bf3bcba7fcf89272931)) - - don't use buggy history.pushState api on Android < 4 - ([7b739c97](https://github.com/angular/angular.js/commit/7b739c97028be2a5d5aef679ef1f8064cd10d386), - [#904](https://github.com/angular/angular.js/issues/904)) - - work around Opera's base href issue - ([b99f65f6](https://github.com/angular/angular.js/commit/b99f65f64d1e54315b3210d78a9a9adbcf34c96c), - [#938](https://github.com/angular/angular.js/issues/938)) -- **docs app:** get docs app to work on IE8 - ([aa025348](https://github.com/angular/angular.js/commit/aa02534865c8e43dcef9e218b12c8c717c837205)) +## Bug Fixes +- **$browser:** + - account for IE deserializing history.state on each read + ([1efaf3dc](https://github.com/angular/angular.js/commit/1efaf3dc136f822703a9cda55afac7895a923ccb), + [#9587](https://github.com/angular/angular.js/issues/9587), [#9545](https://github.com/angular/angular.js/issues/9545)) + - do not decode cookies that do not appear encoded + ([9c995905](https://github.com/angular/angular.js/commit/9c9959059eb84f0f1d748b70b50ec47b7d23d065), + [#9211](https://github.com/angular/angular.js/issues/9211), [#9225](https://github.com/angular/angular.js/issues/9225)) +- **$http:** + - allow empty json response + ([9ba24c54](https://github.com/angular/angular.js/commit/9ba24c54d60e643b1450cc5cfa8f990bd524c130), + [#9532](https://github.com/angular/angular.js/issues/9532), [#9562](https://github.com/angular/angular.js/issues/9562)) + - don't run transformData on HEAD methods + ([6e4955a3](https://github.com/angular/angular.js/commit/6e4955a3086555d8ca30c29955faa213b39c6f27), + [#9528](https://github.com/angular/angular.js/issues/9528), [#9529](https://github.com/angular/angular.js/issues/9529)) +- **$injector:** ensure $get method invoked with provider context + ([372fa699](https://github.com/angular/angular.js/commit/372fa6993b2b1b4848aa4be3c3e11f69244fca6f), + [#9511](https://github.com/angular/angular.js/issues/9511), [#9512](https://github.com/angular/angular.js/issues/9512)) +- **$location:** use clone of passed search() object + ([c7a9009e](https://github.com/angular/angular.js/commit/c7a9009e143299f0e45a85d715ff22fc676d3f93), + [#9445](https://github.com/angular/angular.js/issues/9445)) +- **$parse:** stabilize one-time literal expressions correctly + ([874cac82](https://github.com/angular/angular.js/commit/874cac825bf29a936cb1b35f9af239687bc5e036)) +- **formController:** remove scope reference when form is destroyed + ([01f50e1a](https://github.com/angular/angular.js/commit/01f50e1a7b2bff7070616494774ec493f8133204), + [#9315](https://github.com/angular/angular.js/issues/9315)) +- **jqLite:** remove native listener when all jqLite listeners were deregistered + ([d71fb6f2](https://github.com/angular/angular.js/commit/d71fb6f2713f1a636f6e9c25479870ee9941ad18), + [#9509](https://github.com/angular/angular.js/issues/9509)) +- **select:** + - add basic track by and select as support + ([addfff3c](https://github.com/angular/angular.js/commit/addfff3c46311f59bdcd100351260006d457316f), + [#6564](https://github.com/angular/angular.js/issues/6564)) + - manage select controller options correctly + ([2435e2b8](https://github.com/angular/angular.js/commit/2435e2b8f84fde9495b8e9440a2b4f865b1ff541), + [#9418](https://github.com/angular/angular.js/issues/9418)) - -# 1.0.0rc8 blooming-touch (2012-05-06) ## Features -- **jqLite:** support data() getter and data(obj) setter - ([ee579a07](https://github.com/angular/angular.js/commit/ee579a071a91cbade729d3cb97e097568e71f8fc)) +- **$anchorScroll:** support a configurable vertical scroll offset + ([09c39d2c](https://github.com/angular/angular.js/commit/09c39d2ce687cdf0ac35dbb34a91f0d198c9d83a), + [#9368](https://github.com/angular/angular.js/issues/9368), [#2070](https://github.com/angular/angular.js/issues/2070), [#9360](https://github.com/angular/angular.js/issues/9360)) +- **$animate:** + - introduce the $animate.animate() method + ([02be700b](https://github.com/angular/angular.js/commit/02be700bda191b454de393f2805916f374a1d764)) + - allow $animate to pass custom styles into animations + ([e5f4d7b1](https://github.com/angular/angular.js/commit/e5f4d7b10ae5e6a17ab349995451c33b7d294245)) +- **currencyFilter:** add fractionSize as optional parameter + ([20685ffe](https://github.com/angular/angular.js/commit/20685ffe11036d4d604d13f0d792ca46497af4a1), + [#3642](https://github.com/angular/angular.js/issues/3642), [#3461](https://github.com/angular/angular.js/issues/3461), [#3642](https://github.com/angular/angular.js/issues/3642), [#7922](https://github.com/angular/angular.js/issues/7922)) +- **jqLite:** add private jqLiteDocumentLoaded function + ([0dd316ef](https://github.com/angular/angular.js/commit/0dd316efea209e5e5de3e456b4e6562f011a1294)) + + +## Breaking Changes + +- **$animate:** due to [e5f4d7b1](https://github.com/angular/angular.js/commit/e5f4d7b10ae5e6a17ab349995451c33b7d294245), + staggering animations that use transitions will now +always block the transition from starting (via `transition: 0s none`) +up until the stagger step kicks in. The former behaviour was that the +block was removed as soon as the pending class was added. This fix +allows for styles to be applied in the pending class without causing +an animation to trigger prematurely. + + + + +# 1.3.0-rc.5 impossible-choreography (2014-10-08) ## Bug Fixes +- **$anchorScroll:** don't scroll to top when initializing and location hash is empty + ([d5445c60](https://github.com/angular/angular.js/commit/d5445c601fafd6ecd38befeaa4c9ec7bb044127c), + [#8848](https://github.com/angular/angular.js/issues/8848), [#9393](https://github.com/angular/angular.js/issues/9393)) +- **$animate:** + - ensure hidden elements with ngShow/ngHide stay hidden during animations + ([39d0b368](https://github.com/angular/angular.js/commit/39d0b36826a077f7549a70d0cf3edebe90a10aaa), + [#9103](https://github.com/angular/angular.js/issues/9103), [#9493](https://github.com/angular/angular.js/issues/9493)) + - permit class-based animations for leave operations if ngAnimateChildren is enabled + ([df1a00b1](https://github.com/angular/angular.js/commit/df1a00b11ac2722f4da441837795985f12682030), + [#8092](https://github.com/angular/angular.js/issues/8092), [#9491](https://github.com/angular/angular.js/issues/9491)) + - ensure that class-based animations only consider the most recent DOM operations + ([c93924ed](https://github.com/angular/angular.js/commit/c93924ed275a62683b85c82f1c6c2e19d5662c9a), + [#8946](https://github.com/angular/angular.js/issues/8946), [#9458](https://github.com/angular/angular.js/issues/9458)) + - abort class-based animations if the element is removed during digest + ([613d0a32](https://github.com/angular/angular.js/commit/613d0a3212de8dc01c817ca8526e09c57978a621), + [#8796](https://github.com/angular/angular.js/issues/8796)) + - clear the GCS cache even when no animation is detected + ([cb85cbce](https://github.com/angular/angular.js/commit/cb85cbcec1c876db6062a0dc0bad80f842782194), + [#8813](https://github.com/angular/angular.js/issues/8813)) +- **$browser:** + - Cache `location.href` only during page reload phase + ([8ee1ba4b](https://github.com/angular/angular.js/commit/8ee1ba4b94d6fccff06d8781f7ed256c6ce664ff), + [#9235](https://github.com/angular/angular.js/issues/9235), [#9455](https://github.com/angular/angular.js/issues/9455)) + - don’t use the history API when only the hash changes + ([7cb01a80](https://github.com/angular/angular.js/commit/7cb01a80beec669d8f6aae1dc211d2f0b7d4eac4), + [#9423](https://github.com/angular/angular.js/issues/9423), [#9424](https://github.com/angular/angular.js/issues/9424), + [858360b6](https://github.com/angular/angular.js/commit/858360b680a2bb5c19429c1be1c9506700cda476), + [0656484d](https://github.com/angular/angular.js/commit/0656484d3e709c5162570b0dd6473b0b6140e5b2), + [#9143](https://github.com/angular/angular.js/issues/9143), [#9406](https://github.com/angular/angular.js/issues/9406)) + - handle async href on url change in <=IE9 + ([404b95fe](https://github.com/angular/angular.js/commit/404b95fe30a1bcd1313adafbd0018578d5b21d3d), + [#9235](https://github.com/angular/angular.js/issues/9235)) - **$compile:** - - have $observe return registration function - ([7f0eb151](https://github.com/angular/angular.js/commit/7f0eb1516165fcb73f1c9953018b7c9b70acfae1)) - - ignore ws when checking if template has single root - ([9c0418cf](https://github.com/angular/angular.js/commit/9c0418cf1abd609bf0ffbe71fbdfa75905cf8e0f), - [#910](https://github.com/angular/angular.js/issues/910)) - - fix replaceWith - ([b431ee38](https://github.com/angular/angular.js/commit/b431ee38509724ba9098a7be7a8d6c5dcded4fe9)) - - attach scope to the directive element when templateUrl and replace=true - ([705f4bbf](https://github.com/angular/angular.js/commit/705f4bbf115d2408e33b25f56edbf1f383aabb82)) - - prevent duplicate directive controller instantiation - ([843f762c](https://github.com/angular/angular.js/commit/843f762c573e38a044f920c5575c6feb46bc7226), - [#876](https://github.com/angular/angular.js/issues/876)) -- **$parse:** support methods on falsy primitive types - ([499a76a0](https://github.com/angular/angular.js/commit/499a76a08cc7a7604dab5e1dd9cca675b8e29333)) -- **ngModel:** use keydown/change events on IE9 instead of input - ([49dfdf8f](https://github.com/angular/angular.js/commit/49dfdf8f0238ef8c473fcb44694f6b5696ecde70), - [#879](https://github.com/angular/angular.js/issues/879)) -- **ngSrc,ngHref:** binding should set element prop as well as attr - ([b24cc63b](https://github.com/angular/angular.js/commit/b24cc63bcbd45741d21757653f05d54db09e0f20), - [#935](https://github.com/angular/angular.js/issues/935)) -- **scenario:** make browser().location() working if ng-app on other than - ([5bcb749a](https://github.com/angular/angular.js/commit/5bcb749abb91dba0847cb9bc900777a67fd55aa8)) -- **select:** don't interfere with selection if not databound - ([3bd3cc57](https://github.com/angular/angular.js/commit/3bd3cc571dcd721f9d71f971aefee23115a5e458), - [#926](https://github.com/angular/angular.js/issues/926)) - - -## Docs - -- Brand new bootstrap-based skin for api docs: - - - -# 1.0.0rc7 rc-generation (2012-04-30) + - handle the removal of an interpolated attribute + ([a75546af](https://github.com/angular/angular.js/commit/a75546afdf41adab786eda30c258190cd4c5f1ae), + [#9236](https://github.com/angular/angular.js/issues/9236), [#9240](https://github.com/angular/angular.js/issues/9240)) + - remove comment nodes from templates before asserting single root node + ([feba0174](https://github.com/angular/angular.js/commit/feba0174db0f8f929273beb8b90691734a9292e2), + [#9212](https://github.com/angular/angular.js/issues/9212), [#9215](https://github.com/angular/angular.js/issues/9215)) + - use the correct namespace for transcluded svg elements + ([f3539f3c](https://github.com/angular/angular.js/commit/f3539f3cb5d9477f50f065c6a0ac7d6ca0a31092), + [#9344](https://github.com/angular/angular.js/issues/9344), [#9415](https://github.com/angular/angular.js/issues/9415)) +- **$http:** honor application/json response header and parse json primitives + ([7b6c1d08](https://github.com/angular/angular.js/commit/7b6c1d08aceba6704a40302f373400aed9ed0e0b), + [#2973](https://github.com/angular/angular.js/issues/2973)) +- **$injector:** throw when factory $get method does not return a value + ([0d3b69a5](https://github.com/angular/angular.js/commit/0d3b69a5f27b41745b504c7ffd8d72653bac1f85), + [#4575](https://github.com/angular/angular.js/issues/4575), [#9210](https://github.com/angular/angular.js/issues/9210)) +- **$location:** allow `0` in `path()` and `hash()` + ([b8c5b871](https://github.com/angular/angular.js/commit/b8c5b87119a06edb8e8d1cefad81ee8d1f64f070)) +- **form:** fix submit prevention + ([86c7d122](https://github.com/angular/angular.js/commit/86c7d1221c706993044583d51a0c61423fee5bcf), + [#3370](https://github.com/angular/angular.js/issues/3370), [#3776](https://github.com/angular/angular.js/issues/3776)) +- **ngAnimate:** defer DOM operations for changing classes to postDigest + ([667183a8](https://github.com/angular/angular.js/commit/667183a8c79d6ffce571a2be78c05dc76503b222), + [#8234](https://github.com/angular/angular.js/issues/8234), [#9263](https://github.com/angular/angular.js/issues/9263)) +- **orderBy:** sort by identity if no predicate is given + ([607f016a](https://github.com/angular/angular.js/commit/607f016a0ba705ce40df0164360fb96a9d7f5912), + [#5847](https://github.com/angular/angular.js/issues/5847), [#4579](https://github.com/angular/angular.js/issues/4579), [#9403](https://github.com/angular/angular.js/issues/9403)) +- **select:** + - throw for `selectAs` and `trackBy` + ([30996f82](https://github.com/angular/angular.js/commit/30996f82afa03cd11771b3267e9367ecf9af6e6d)) + - use `$viewValue` instead of `$modelValue` + ([f7174169](https://github.com/angular/angular.js/commit/f7174169f4f710d605f6a67f39f90a67a07d4cab), + [#8929](https://github.com/angular/angular.js/issues/8929)) + ## Features -- **$parse:** CSP compatibility - ([2b87c814](https://github.com/angular/angular.js/commit/2b87c814ab70eaaff6359ce1a118f348c8bd2197), - [#893](https://github.com/angular/angular.js/issues/893)) +- **$location:** + - add support for History API state handling ([6fd36dee](https://github.com/angular/angular.js/commit/6fd36deed954b338e48390862971d465148dc1f2), + [#9027](https://github.com/angular/angular.js/issues/9027)) + - allow automatic rewriting of links to be disabled + ([b3e09be5](https://github.com/angular/angular.js/commit/b3e09be58960b913fee3869bf36e7de3305bbe00), + [#5487](https://github.com/angular/angular.js/issues/5487)) +- **$route:** ability to cancel $routeChangeStart event + ([f4ff11b0](https://github.com/angular/angular.js/commit/f4ff11b01e6a5f9a9eb25a38d327dfaadbd7c80c), + [#5581](https://github.com/angular/angular.js/issues/5581), [#5714](https://github.com/angular/angular.js/issues/5714), [#9502](https://github.com/angular/angular.js/issues/9502)) + +## Performance Improvements + +- **$animate:** + - access DOM less in resolveElementClasses + ([22358cf9](https://github.com/angular/angular.js/commit/22358cf9c703d67f3cf9eb4899404b09578a5fad)) + - don't join classes before it's necessary in resolveElementClasses + ([003c44ec](https://github.com/angular/angular.js/commit/003c44eceee54c3398b0d2971fd97a512d7f7cec)) +- **ngBind:** set textContent rather than using element.text() + ([074a146d](https://github.com/angular/angular.js/commit/074a146d8b1ee7c93bf6d5892448a5c2a0143a28), + [#9369](https://github.com/angular/angular.js/issues/9369), [#9396](https://github.com/angular/angular.js/issues/9396)) -## Bug Fixes +## Breaking Changes -- **jqlite:** - - correctly reset event properties in IE8 - ([a18926f9](https://github.com/angular/angular.js/commit/a18926f986166048a21097636f03ab29f107b154)) - - mouseenter on FF no longer throws exceptions - ([43d15f83](https://github.com/angular/angular.js/commit/43d15f830f9d419c41c41f0682e47e86839e3917)) +- **$compile:** due to [feba0174](https://github.com/angular/angular.js/commit/feba0174db0f8f929273beb8b90691734a9292e2), -## Docs +If a template contains directives within comment nodes, and there is more than a single node in the +template, those comment nodes are removed. The impact of this breaking change is expected to be +quite low. -- Tutorial has been finally updated to AngularJS v1.0! Check it out and provide feedback to make it - even better: -- now redirects to +Closes #9212 +Closes #9215 +- **ngAnimate:** due to [667183a8](https://github.com/angular/angular.js/commit/667183a8c79d6ffce571a2be78c05dc76503b222), - -# v1.0.0rc6 runny-nose (2012-04-20) +The `$animate` CSS class API will always defer changes until the end of the next digest. This allows ngAnimate +to coalesce class changes which occur over a short period of time into 1 or 2 DOM writes, rather than +many. This prevents jank in browsers such as IE, and is generally a good thing. +If you find that your classes are not being immediately applied, be sure to invoke `$digest()`. -## Bug Fixes +Closes #8234 +Closes #9263 -- **select:** properly handle empty & unknown options without ngOptions - ([904b69c7](https://github.com/angular/angular.js/commit/904b69c745ea4afc1d6ecd2a5f3138c6f947b157)) -- **compiler:** reading comment throws error in ie - ([46bb08a9](https://github.com/angular/angular.js/commit/46bb08a9d0780fafef6dc5c1140c71912462887a)) -- **document:** accidental clobbering of document.getAttribute - ([eafe15f5](https://github.com/angular/angular.js/commit/eafe15f54c686d5c83f777fd319f4c568e209432), - [#877](https://github.com/angular/angular.js/issues/877)) -- **script:** Incorrectly reading script text on ie - ([94dd6857](https://github.com/angular/angular.js/commit/94dd68570952f6f31abfa351b1159afcd3588a57)) +- **$select:** due to [30996f8](https://github.com/angular/angular.js/commit/30996f82afa03cd11771b3267e9367ecf9af6e6d) +`ngOptions` will now throw an error when the comprehension expressions contains both a `select as` +and `track by` expression. -## Features +These expressions are fundamentally incompatible because it is not possible to reliably and +consistently determine the parent object of a model, since `select as` can assign any child of a +`value` as the model value. -- **$resource:** support HTTP PATCH method - ([e61fd1b4](https://github.com/angular/angular.js/commit/e61fd1b43a55496c11c63da7ca2fc05b88d44043), - [#887](https://github.com/angular/angular.js/issues/887)) -- **jquery:** jquery 1.7.2 support - ([8ebe5ccd](https://github.com/angular/angular.js/commit/8ebe5ccd9ace7807bedc7317d605370fe82b773d)) +Prior to refactorings in this release, neither of these expressions worked correctly independently, +and did not work at all when combined. +See #6564 +- **$route:** due to [f4ff11b0](https://github.com/angular/angular.js/commit/f4ff11b01e6a5f9a9eb25a38d327dfaadbd7c80c), - -# 1.0.0rc5 reality-distortion (2012-04-12) +Order of events has changed. +Previously: `$locationChangeStart` -> `$locationChangeSuccess` + -> `$routeChangeStart` -> `$routeChangeSuccess` + +Now: `$locationChangeStart` -> `$routeChangeStart` + -> `$locationChangeSuccess` -> -> `$routeChangeSuccess` + +Fixes #5581 +Closes #5714 +Closes #9502 + + + +# 1.3.0-rc.4 unicorn-hydrafication (2014-10-01) ## Bug Fixes -- **$location:** properly rewrite urls in html5 mode with base url set + don't rewrite links to - different base paths - ([6d7e7fde](https://github.com/angular/angular.js/commit/6d7e7fdea6c3d6551ff40c150aa42e1375d2cb5f), - [0a5050eb](https://github.com/angular/angular.js/commit/0a5050eb3c1f1ed84134f23a44b97a7261114060)) -- **e2eRunner:** $browser.location should delegate to apps $location - ([df72852f](https://github.com/angular/angular.js/commit/df72852f3496d7640bb4f70837338e464b7ed69f)) -- **input.radio:** support 2-way binding in a repeater - ([93d62860](https://github.com/angular/angular.js/commit/93d62860e988a09fb64e594f50f6cd55a1fc5748), - [#869](https://github.com/angular/angular.js/issues/869)) -- **ngBindHtml:** clear contents when model is falsy - ([10daefc6](https://github.com/angular/angular.js/commit/10daefc6f466a21d9418437666461c80cf24fcfe), - [#864](https://github.com/angular/angular.js/issues/864)) -- lots of doc fixes +- **$compile:** + - get $$observe listeners array as own property + ([a27d827c](https://github.com/angular/angular.js/commit/a27d827c22b0b6b3ba6b7495cf4fc338c6934b37), + [#9343](https://github.com/angular/angular.js/issues/9343), [#9345](https://github.com/angular/angular.js/issues/9345)) + - Resolve leak with asynchronous compilation + ([6303c3dc](https://github.com/angular/angular.js/commit/6303c3dcf64685458fc84aa12289f5c9d57f4e47), + [#9199](https://github.com/angular/angular.js/issues/9199), [#9079](https://github.com/angular/angular.js/issues/9079), [#8504](https://github.com/angular/angular.js/issues/8504), [#9197](https://github.com/angular/angular.js/issues/9197)) + - connect transclude scopes to their containing scope to prevent memory leaks + ([fb0c77f0](https://github.com/angular/angular.js/commit/fb0c77f0b66ed757a56af13f81b943419fdcbd7f), + [#9095](https://github.com/angular/angular.js/issues/9095), [#9281](https://github.com/angular/angular.js/issues/9281)) + - sanitize srcset attribute + ([ab80cd90](https://github.com/angular/angular.js/commit/ab80cd90661396dbb1c94c5f4dd2d11ee8f6b6af)) +- **input:** + - register builtin parsers/formatters before anyone else + ([10644432](https://github.com/angular/angular.js/commit/10644432ca9d5da69ce790a8d9e691640f333711), + [#9218](https://github.com/angular/angular.js/issues/9218), [#9358](https://github.com/angular/angular.js/issues/9358)) + - correctly handle invalid model values for `input[date/time/…]` + ([a0bfdd0d](https://github.com/angular/angular.js/commit/a0bfdd0d60882125f614a91c321f12f730735e7b), + [#8949](https://github.com/angular/angular.js/issues/8949), [#9375](https://github.com/angular/angular.js/issues/9375)) +- **ngModel:** do not parse undefined viewValue when validating + ([92f05e5a](https://github.com/angular/angular.js/commit/92f05e5a5900713301e64373d7b7daa45a88278b), + [#9106](https://github.com/angular/angular.js/issues/9106), [#9260](https://github.com/angular/angular.js/issues/9260)) +- **ngView:** use animation promises ensure that only one leave animation occurs at a time + ([3624e380](https://github.com/angular/angular.js/commit/3624e3800fb3ccd2e9ea361a763e20131fd42c29), + [#9355](https://github.com/angular/angular.js/issues/9355), [#7606](https://github.com/angular/angular.js/issues/7606), [#9374](https://github.com/angular/angular.js/issues/9374)) +- **select:** make ctrl.hasOption method consistent + ([2bcd02dc](https://github.com/angular/angular.js/commit/2bcd02dc1a6b28b357d47c83be3bed5c9a38417c), + [#8761](https://github.com/angular/angular.js/issues/8761)) ## Features -- **$http:** expose the defaults config as $http.defaults - ([dceafd32](https://github.com/angular/angular.js/commit/dceafd32ee140c8af5c7a0ca6cb808395fffeed3)) -- **docs:** steps 0-4 of the Tutorial have been updated and improved +- **$compile:** optionally get controllers from ancestors only + ([07e3abc7](https://github.com/angular/angular.js/commit/07e3abc7dda872adc3fb25cb3e133f86f494b35d), + [#4518](https://github.com/angular/angular.js/issues/4518), [#4540](https://github.com/angular/angular.js/issues/4540), [#8240](https://github.com/angular/angular.js/issues/8240), [#8511](https://github.com/angular/angular.js/issues/8511)) +- **Scope:** allow the parent of a new scope to be specified on creation + ([6417a3e9](https://github.com/angular/angular.js/commit/6417a3e9eb7ab0011cefada8db855aa929a64ff8)) -## Breaking Changes +## Performance Improvements -- `ng-ext-link` directive was removed because it's unnecessary - ([6d7e7fde](https://github.com/angular/angular.js/commit/6d7e7fdea6c3d6551ff40c150aa42e1375d2cb5f)) +- **$rootScope:** moving internal queues out of the Scope instances + ([b1192518](https://github.com/angular/angular.js/commit/b119251827cea670051198e1b48af7ee0c9f2a1b), + [#9071](https://github.com/angular/angular.js/issues/9071)) +- **benchmark:** add ngBindOnce benchmarks to largetable-bp + ([2c8b4648](https://github.com/angular/angular.js/commit/2c8b4648526acf5c2645de8408a6d9ace2144b5f)) +- **ngForm,ngModel:** move initial addClass to the compile phase + ([b1ee5386](https://github.com/angular/angular.js/commit/b1ee5386d584f208bce6d3b613afdb3bae9df76a), + [#8268](https://github.com/angular/angular.js/issues/8268)) - apps that relied on ng-ext-link should simply replace it with `target="_self"` -- `$browser.addCss` was removed - it was never meant to be a public api - ([13d5528a](https://github.com/angular/angular.js/commit/13d5528a5f5a2f0feee5c742788a914d2371841e)) +## Breaking Changes - apps the depend on this functionality should write a simple utility function specific to the app - (see this diff for hints). +- **$compile:** due to [fb0c77f0](https://github.com/angular/angular.js/commit/fb0c77f0b66ed757a56af13f81b943419fdcbd7f), -- `$browser.addJs` method was removed - it was never meant to be a public api - ([fbaa1968](https://github.com/angular/angular.js/commit/fbaa1968b7c596ccb63ea8b4be1d3bd92eda50d8)) - apps that depended on this functionality should either use many of the existing script loaders or - create a simple helper method specific to the app. +`$transclude` functions no longer attach `$destroy` event handlers to the +transcluded content, and so the associated transclude scope will not automatically +be destroyed if you remove a transcluded element from the DOM using direct DOM +manipulation such as the jquery `remove()` method. -- `$sanitize` service, `ngBindHtml` directive and `linky` filter were moved to the `ngSanitize` module - ([5bcd7198](https://github.com/angular/angular.js/commit/5bcd7198664dca2bf85ddf8b3a89f417cd4e4796)) +If you want to explicitly remove DOM elements inside your directive that have +been compiled, and so potentially contain child (and transcluded) scopes, then +it is your responsibility to get hold of the scope and destroy it at the same time. - apps that depend on any of these will need to load `angular-sanitize.js` and include `ngSanitize` - in their dependency list: `var myApp = angular.module('myApp', ['ngSanitize']);` +The suggested approach is to create a new child scope of your own around any DOM +elements that you wish to manipulate in this way and destroy those scopes if you +remove their contents - any child scopes will then be destroyed and cleaned up +automatically. +Note that all the built-in directives that manipulate the DOM (ngIf, ngRepeat, +ngSwitch, etc) already follow this best practice, so if you only use these for +manipulating the DOM then you do not have to worry about this change. +Closes #9095 +Closes #9281 +- **$parse:** due to [5572b40b](https://github.com/angular/angular.js/commit/5572b40b15ed06969c8e0e92866c5afd088484b4), +- $scope['this'] no longer exits on the $scope object +- $parse-ed expressions no longer allow chaining 'this' such as this['this'] or $parent['this'] +- 'this' in $parse-ed expressions can no longer be overriden, if a variable named 'this' is put on the scope it must be accessed using this['this'] +Closes #9105 - -# 1.0.0rc4 insomnia-induction (2012-04-05) +- **input:** due to [1eda1836](https://github.com/angular/angular.js/commit/1eda18365a348c9597aafba9d195d345e4f13d1e), +(Note: this change landed in 1.3.0-rc.3, but was not considered a breaking change at the time). -## Bug Fixes +For text based inputs (text, email, url), the `$viewValue` will now always be converted to a string, +regardless of what type the value is on the model. -- **$compile:** relax the restriction that directives can not add siblings - ([7e86eacf](https://github.com/angular/angular.js/commit/7e86eacf301934335c22908ec6dbd1a083d88fab)) -- **$location:** search setter should not double-encode the value - ([59fa40ec](https://github.com/angular/angular.js/commit/59fa40ec0e851759d35fb0ea5fd01019d1403049), - [#751](https://github.com/angular/angular.js/issues/751)) -- **$q:** $q.reject should forward callbacks if missing - ([c0b78478](https://github.com/angular/angular.js/commit/c0b78478a0e64942a69aba7c1bfa4eb01c0e9a5e), - [#845](https://github.com/angular/angular.js/issues/845)) -- **build:** move `'use strict';` flag into the angular closure - ([637817e3](https://github.com/angular/angular.js/commit/637817e3ba48d149e7a9628533d21e81c650d988)) -- **Directives**: - - **ngModel:** update model on each key stroke (revert ngModelInstant) - ([06d09550](https://github.com/angular/angular.js/commit/06d0955074f79de553cc34fbf945045dc458e064)) - - **booleanAttrs:** always convert the model to boolean before setting the element property - ([dcb8e076](https://github.com/angular/angular.js/commit/dcb8e0767fbf0a7a55f3b0045fd01b2532ea5441)) - - **form:** preperly clean up when invalid widget is removed - ([21b77ad5](https://github.com/angular/angular.js/commit/21b77ad5c231ab0e05eb89f22005f7ed8d40a6c1)) - - **ngHref:** copy even if no binding - ([2f5dba48](https://github.com/angular/angular.js/commit/2f5dba488e855bcdbb9304aa809efcb9de7b43e9)) - - **ngInclude:** fire $includeContentLoaded on proper (child) scope - ([199ac269](https://github.com/angular/angular.js/commit/199ac269869a57bb63d60c9b3f510d546bf0c9b2)) +To migrate, any code or expressions that expect the `$viewValue` to be anything other than string +should be updated to expect a string. -## Features +- **input:** due to a0bfdd0d60882125f614a91c321f12f730735e7b (see #8949), -- **$http:** add `withCredentials` config option - ([86182a94](https://github.com/angular/angular.js/commit/86182a9415b9209662b16c25c180b958ba7e6cf9)) -- **$route:** allow chaining of whens and otherwise - ([15ecc6f3](https://github.com/angular/angular.js/commit/15ecc6f3668885ebc5c7130dd34e00059ddf79ae)) -- **ngInclude:** allow ngInclude as css class - ([428f2b56](https://github.com/angular/angular.js/commit/428f2b563663315df4f235ca19cef4bdcf82e2ab)) +Similar to `input[number]` Angular will now throw if the model value +for a `input[date]` is not a `Date` object. Previously, Angular only +showed an empty string instead. +Angular does not set validation errors on the `` in this case +as those errors are shown to the user, but the erroneous state was +caused by incorrect application logic and not by the user. -## Docs -- reintroduced the tutorial docs - currently only steps 0-3 are up to date and the code is not split - up into step specific commits yet. See - [this branch](https://github.com/angular/angular-phonecat/tree/v1.0-update) instead. -- various other doc fixes + +# 1.3.0-rc.3 aggressive-pacification (2014-09-23) -## Breaking Changes +## Bug Fixes -We removed two useless features: +- **ngModel:** support milliseconds in time and datetime + ([4b83f6ca](https://github.com/angular/angular.js/commit/4b83f6ca2c15bd65fe2b3894a02c04f9967fbff4), + [#8874](https://github.com/angular/angular.js/issues/8874)) -- $routeProvider.when used to return the route definition object but now it returns self - ([15ecc6f3](https://github.com/angular/angular.js/commit/15ecc6f3668885ebc5c7130dd34e00059ddf79ae)) -- ngInclude does not have scope attribute anymore - ([5f70d615](https://github.com/angular/angular.js/commit/5f70d615a5f7e102424c6adc15d7a6f697870b6e)) -- ngModelInstant directive is no more and ngModel behaves just as ngModelInstant used to. This - doesn't really break anything, just remember to remove all ngModelInstant references from your - template as they serve no purpose now. - ([06d09550](https://github.com/angular/angular.js/commit/06d0955074f79de553cc34fbf945045dc458e064)) +## Features +- **$location:** add ability to opt-out of `` tag requirement in html5Mode + ([dc3de7fb](https://github.com/angular/angular.js/commit/dc3de7fb7a14c38b5c3dc7decfafb0b51d422dd1), + [#8934](https://github.com/angular/angular.js/issues/8934)) +- **formController:** add $setUntouched to propagate untouched state + ([fd899755](https://github.com/angular/angular.js/commit/fd8997551f9ed4431f5e99d61f637139485076b9), + [#9050](https://github.com/angular/angular.js/issues/9050)) +- **input:** support dynamic element validation + ([729c238e](https://github.com/angular/angular.js/commit/729c238e19ab27deff01448d79342ea53721bfed), + [#4791](https://github.com/angular/angular.js/issues/4791), [#1404](https://github.com/angular/angular.js/issues/1404)) +- **ngAria:** add an ngAria module to make a11y easier + ([d1434c99](https://github.com/angular/angular.js/commit/d1434c999a66c6bb915ee1a8b091e497d288d940), + [#5486](https://github.com/angular/angular.js/issues/5486)) - -# 1.0.0rc3 barefoot-telepathy (2012-03-29) +## Performance Improvements -## Bug Fixes +- **map:** use Array.prototype.map + ([a591e8b8](https://github.com/angular/angular.js/commit/a591e8b8d302efefd67bf0d5c4bad300a5f3aded)) -- **$compile:** - - properly clone attr.$observers in ng-repeat - ([f2106692](https://github.com/angular/angular.js/commit/f2106692b1ebf00aa5f8b2accd75f014b6cd4faa)) - - create new (isolate) scopes for directives on root elements - ([5390fb37](https://github.com/angular/angular.js/commit/5390fb37d2c01937922613fc57df4986af521787), - [#817](https://github.com/angular/angular.js/issues/817)) -- **angular.forEach:** should ignore prototypically inherited properties - ([8d7e6948](https://github.com/angular/angular.js/commit/8d7e6948496ff26ef1da8854ba02fcb8eebfed61), - [#813](https://github.com/angular/angular.js/issues/813)) -- **initialization:** use jQuery#ready for initialization if available - ([cb2ad9ab](https://github.com/angular/angular.js/commit/cb2ad9abf24e6f855cc749efe3155bd7987ece9d), - [#818](https://github.com/angular/angular.js/issues/818)) -- **$q:** resolve all of nothing to nothing - ([ac75079e](https://github.com/angular/angular.js/commit/ac75079e2113949d5d64adbcf23d56f3cf295d41)) +## Breaking Changes -## Features +- **$location:** due to [dc3de7fb](https://github.com/angular/angular.js/commit/dc3de7fb7a14c38b5c3dc7decfafb0b51d422dd1), + The $location.html5Mode API has changed to allow enabling html5Mode by + passing an object (as well as still supporting passing a boolean). Symmetrically, the + method now returns an object instead of a boolean value. -- **$compile:** do not interpolate boolean attribute directives, rather evaluate them - ([a08cbc02](https://github.com/angular/angular.js/commit/a08cbc02e78e789a66e9af771c410e8ad1646e25)) -- **$controller:** support controller registration via $controllerProvider - ([d54dfecb](https://github.com/angular/angular.js/commit/d54dfecb00fba41455536c5ddd55310592fdaf84)) -- **$http:** - - make the `transformRequest` and `transformResponse` default to an array - ([a8a750ab](https://github.com/angular/angular.js/commit/a8a750ab05bdff73ba3af0b98f3f284ff8d1e743)) - - added `params` parameter - ([73c85930](https://github.com/angular/angular.js/commit/73c8593077155a9f2e8ef42efd4c497eba0bef4f)) -- **TzDate:** add support for toISOString method - ([da9f4dfc](https://github.com/angular/angular.js/commit/da9f4dfcf4f3d0c21821d8474ac0bb19a3c51415)) -- **jqLite:** make injector() and scope() work with the document object - ([5fdab52d](https://github.com/angular/angular.js/commit/5fdab52dd7c269f99839f4fa6b5854d9548269fa)) -- **ngValue:** directive that allows radio inputs to have non string values - ([09e175f0](https://github.com/angular/angular.js/commit/09e175f02cca0f4a295fd0c9b980cd8f432e722b), - [#816](https://github.com/angular/angular.js/issues/816)) + To migrate, follow the code example below: + Before: -## Breaking Changes + var mode = $locationProvider.html5Mode(); -- `$resource`, `$cookies` and `$cookieStore` services are now distributed as separate modules, see - `angular-resource.js` and `angular-cookies.js`. - ([798bca62](https://github.com/angular/angular.js/commit/798bca62c6f64775b85deda3713e7b6bcc7a4b4d), - [7b22d59b](https://github.com/angular/angular.js/commit/7b22d59b4a16d5c50c2eee054178ba17f8038880)) -- angular.fromJson doesn't deserialize date strings into date objects. - ([ac4318a2](https://github.com/angular/angular.js/commit/ac4318a2fa5c6d306dbc19466246292a81767fca)) -- angular.toJson always use native JSON.parse and JSON.stringify - this might break code that - consumes the output in whitespace-sensitive way - ([35125d25](https://github.com/angular/angular.js/commit/35125d25137ac2da13ed1ca3e652ec8f2c945053)) -- IE7 and older have are now required to polyfill the JSON global object - ([87f5c6e5](https://github.com/angular/angular.js/commit/87f5c6e5b716100e203ec59c5874c3e927f83fa0)) -- boolean attr directives (ng-disabled, ng-required, etc) are evaluated rather than interpolated - ([a08cbc02](https://github.com/angular/angular.js/commit/a08cbc02e78e789a66e9af771c410e8ad1646e25)) -- `ng-bind-attr` directive removed - ([55027132](https://github.com/angular/angular.js/commit/55027132f3d57e5dcf94683e6e6bd7b0aae0087d)) -- any app that depends on $sniffer service should use Modernizr instead - ([aaedefb9](https://github.com/angular/angular.js/commit/aaedefb92e6bec6626e173e5155072c91471596a)) - - - - -# 1.0.0rc2 silence-absorption (2012-03-20) + After: -## Features + var mode = $locationProvider.html5Mode().enabled; -- **$route:** when matching consider trailing slash as optional - ([a4fe51da](https://github.com/angular/angular.js/commit/a4fe51da3ba0dc297ecd389e230d6664f250c9a6)) -- **jqLite:** add .controller() method - ([6c5a05ad](https://github.com/angular/angular.js/commit/6c5a05ad49a1e083570c3dfe331403398f899dbe)) -- **scope.$eval:** allow passing locals to the expression - ([192ff61f](https://github.com/angular/angular.js/commit/192ff61f5d61899e667c6dbce4d3e6e399429d8b)) -- **input[type=radio]:** allow the value attribute to be interpolated - ([ade6c452](https://github.com/angular/angular.js/commit/ade6c452753145c84884d17027a7865bf4b34b0c)) +Fixes #8934 -## Bug Fixes -- **$http:** don't send Content-Type header when no data - ([1a5bebd9](https://github.com/angular/angular.js/commit/1a5bebd927ecd22f9c34617642fdf58fe3f62efb), - [#749](https://github.com/angular/angular.js/issues/749)) -- **$resource:** support escaping of ':' in resource url - ([6d6f8753](https://github.com/angular/angular.js/commit/6d6f875345e01f2c6c63ef95164f6f39e923da15)) -- **$compile:** - - don't touch static element attributes - ([9cb2195e](https://github.com/angular/angular.js/commit/9cb2195e61a78e99020ec19d687a221ca88b5900)) - - merge interpolated css class when replacing an element - ([f49eaf8b](https://github.com/angular/angular.js/commit/f49eaf8bf2df5f4e0e82d6c89e849a4f82c8d414)) - - allow transclusion of root elements - ([9918b748](https://github.com/angular/angular.js/commit/9918b748be01266eb10db39d51b4d3098d54ab66)) -- **$log:** avoid console.log.apply calls in IE - ([15213ec2](https://github.com/angular/angular.js/commit/15213ec212769837cb2b7e781ffc5bfd598d27ca), - [#805](https://github.com/angular/angular.js/issues/805)) -- **json:** added support for iso8061 timezone - ([5ac14f63](https://github.com/angular/angular.js/commit/5ac14f633a69f49973b5512780c6ec7752405967)) -- **e2e runner:** fix typo that caused errors on IE8 - ([ee5a5352](https://github.com/angular/angular.js/commit/ee5a5352fd4b94cedee6ef20d4bf2d43ce77e00b), - [#806](https://github.com/angular/angular.js/issues/806)) -- **directives:** - - **select:** multiselect failes to update view on selection insert - ([6ecac8e7](https://github.com/angular/angular.js/commit/6ecac8e71a84792a434d21db2c245b3648c55f18)) - - **ngForm:** alias name||ngForm - ([823adb23](https://github.com/angular/angular.js/commit/823adb231995e917bc060bfa49453e2a96bac2b6)) - - **ngView:** publish the controller - ([21e74c2d](https://github.com/angular/angular.js/commit/21e74c2d2e8e985b23711785287feb59965cbd90)) - - **ngRepeat:** correct variable reference in error message - ([935c1018](https://github.com/angular/angular.js/commit/935c1018da05dbf3124b2dd33619c4a3c82d7a2a)) - - various doc fixes (some contributed by Daniel Zen) - - - - -# 1.0.0rc1 moiré-vision (2012-03-13) - -## $compile rewrite - -The compiler was completely rewritten from scratch using ideas from this -[design document](https://docs.google.com/document/d/1PNh4lxlYpSRK2RhEwD4paJLMwdcnddcYJn3rsDsdayc/edit). -Please check out the [$compile] and -[$compileProvider.directive](http://docs-next.angularjs.org/api/angular.module.ng.$compileProvider.directive) -docs. The biggest improvements and changes are listed below. - -- the compiler now transparently supports several directive syntaxes. For example while before there - was just one way to use `ng:include` directive: ``. The new - compiler treats all of the following as equivalent: - - - `` - - `` - - `` - - `
    ` - - `
    ` - - `
    ` - - `
    ` - - `
    ` - - `
    ` - - `
    ` - - This will give template creators great flexibility to consider the tradeoffs between html code - validity and code conciseness and pick the syntax that works the best for them. - -- we are switching all of our code/docs/examples to use `ng-foo` directive name style instead of - `ng:foo`. The new compiler doesn't distinguish between these and other name styles (all of them - are [equally supported](http://docs-next.angularjs.org/api/angular.module.ng.$compileProvider.directive)), - the main difference is that `ng-foo` is easier to select with css selectors. Check out the - [Internet Explorer Compatibility](http://docs-next.angularjs.org/guide/ie) - doc to learn about various IE-related requirements for different directive naming styles. - -- `angular.directive`, `angular.widget`, `angular.attrWidget` were merged into a single concept: a - `directive` which is registered via - [myModule.directive](http://docs-next.angularjs.org/api/angular.Module#directive) or - [$compileProvider.directive](http://docs-next.angularjs.org/api/angular.module.ng.$compileProvider.directive). - You can control execution priority of multiple directives on the same element (previously the main - difference between a attribute widget and a directive) via a directive priority setting. - -- previously the linking functions of directives were called top to bottom following the DOM tree, - to enable a linking fn to work child DOM nodes that were already processed by child linking fns - the order was changed as follows: compile functions run top to bottom following the DOM tree, but - linking functions run bottom-up following the DOM tree. In some rare cases it is desirable for - linking fns to be called top to bottom and for these it is possible to register "prelinking" - functions (check out - [the docs](http://docs-next.angularjs.org/api/angular.module.ng.$compileProvider.directive) - for the return value of the compile function). - -- `angular.markup` and `angular.attrMarkup` were replaced with interpolation via `$interpolate` - service. - - - In the past `{{foo}}` markup was getting translated to `` during the - early stage of template compilation. Addition of this extra node was in some cases undesirable - and caused problems. The new compiler with the help of the $interpolate service removes the need - for these artificial nodes. - - - As a side-effect of not using artificial nodes available for all bindings, the `html` filter - which used to innerHTML (sanitized) html into the artificial node was converted into a directive. - So instead of `{{ someRawHtml | html }}` use `
    ` and - instead of `{{ someRawHtml | html:"unsafe" }}` use `
    `. - Please check out the - [ng-bind-html](http://docs-next.angularjs.org/api/angular.module.ng.$compileProvider.directive.ngBindHtml) - and - [ng-bind-html-unsafe](http://docs-next.angularjs.org/api/angular.module.ng.$compileProvider.directive.ngBindHtmlUnsafe) - directive docs. - - - Custom markup has been used by developers only to switch from `{{ }}` markup to `(( ))` or - something similar in order to avoid conflicts with server-side templating libraries. We made it - easier to do this kind of customization by making the start and end symbol of the interpolation - configurable via [$interpolateProvider](http://docs-next.angularjs.org/api/angular.module.ng.$interpolateProvider). - -- [template loader](http://docs-next.angularjs.org/api/angular.module.ng.$compileProvider.directive.script) - loads template fragments from script elements and populates the $templateCache with them. Templates - loaded in this way can be then used with `ng-include`, `ng-view` as well as directive templates - (see the `templateUrl` property of the - [directive config object](http://docs-next.angularjs.org/api/angular.module.ng.$compileProvider.directive)). - - -## Forms / input controls / two-way data binding - -The implementation of forms and input bindings was modified to address issues around composability, -ease of adding custom validation and formatting. Please check out the -[forms dev guide article](http://docs-next.angularjs.org/guide/dev_guide.forms) to learn about forms, -form control bindings and input validation. The biggest changes are listed below. - -- any directive can add formatter/parser (validators, convertors) to an input type. This allows - better composability of input types with custom validators and formatters. So instead of creating - new custom input type for everything, it's now possible to take existing input type and add an - additional formatter and/or validator to it via a custom directive. + +# 1.3.0-rc.2 tactile-perception (2014-09-16) -- inputs propagates changes only on the blur event by default (use new `ng-model-instant` directive - if you want to propagate changes on each keystroke). -- no more custom input types, use directives to customize existing types. +## Bug Fixes -- removed $formFactory. - -- removed parallel scope hierarchy (forms, widgets). +- **$compile:** update `'@'`-bindings in controller when `bindToController` is `true` + ([e7ac08a0](https://github.com/angular/angular.js/commit/e7ac08a0619d2bdc91c125d341772b4fbc0d5a78), + [#9052](https://github.com/angular/angular.js/issues/9052), [#9077](https://github.com/angular/angular.js/issues/9077)) +- **$parse:** ensure CSP assignable expressions have `assign()` + ([d13b4bd1](https://github.com/angular/angular.js/commit/d13b4bd1f5f2abaad00f5d1bf81f79549a8d0e46), + [#9048](https://github.com/angular/angular.js/issues/9048)) +- **i18n:** fix typo at i18n generation code + ([eb4afd45](https://github.com/angular/angular.js/commit/eb4afd45f77d7d67744e01ce63a831c13c2b22e8)) +- **input:** always pass in the model value to `ctrl.$isEmpty` + ([3e51b84b](https://github.com/angular/angular.js/commit/3e51b84bc19f7e6acc61cb536ddcdbfed307c831), + [#5164](https://github.com/angular/angular.js/issues/5164), [#9017](https://github.com/angular/angular.js/issues/9017)) +- **jqLite:** fix `event.stopImmediatePropagation()` so it works as expected + ([30354c58](https://github.com/angular/angular.js/commit/30354c58fe2bd371df364f7a3f55b270692a4051), + [#4833](https://github.com/angular/angular.js/issues/4833)) +- **ngLocale:** Regenerate Locale Files + ([6a96a820](https://github.com/angular/angular.js/commit/6a96a8200aff4749bc84c44a1e8018b09d9ebdb4), + [#8931](https://github.com/angular/angular.js/issues/8931), [#8583](https://github.com/angular/angular.js/issues/8583), [#7799](https://github.com/angular/angular.js/issues/7799)) +- **ngModel:** + - do not reset bound date objects + ([1a1ef629](https://github.com/angular/angular.js/commit/1a1ef62903c8fdf4ceb81277d966a8eff67f0a96), + [#6666](https://github.com/angular/angular.js/issues/6666)) + - don’t clear the model when an external validator failed + ([9314719d](https://github.com/angular/angular.js/commit/9314719d1eb5f480b877f5513f6e0e474edcb67d), + [#8357](https://github.com/angular/angular.js/issues/8357), [#8080](https://github.com/angular/angular.js/issues/8080)) +- **ngResource:** make badcfg error message more helpful + ([a3962f0d](https://github.com/angular/angular.js/commit/a3962f0df3f9b8382b47952f9e4fcb48a4cc098b), + [#9005](https://github.com/angular/angular.js/issues/9005), [#9010](https://github.com/angular/angular.js/issues/9010)) +- **select:** update option labels when model changes + ([46274102](https://github.com/angular/angular.js/commit/46274102454038ee7fd4543a32166e9bbbc98904), + [#9025](https://github.com/angular/angular.js/issues/9025)) -- removed `list` input type (use `ng-list` directive instead). - -- removed integer input type. - - -## Controller-scope separation - -Controllers are now standalone objects, created using the "new" operator, and not mixed with scope -object anymore. This addresses many issues including: -[#321](https://github.com/angular/angular.js/issues/321) and -[#425](https://github.com/angular/angular.js/issues/425). -The [design doc](https://docs.google.com/document/pub?id=1SsgVj17ec6tnZEX3ugsvg0rVVR11wTso5Md-RdEmC0k) -explains the reasoning for this major change and how it solves many issues. - -### Before: +## Features -
    -function MyCtrl() {
    -  var self = this;
    +- **limitTo:** support numeric input to limitTo
    +  ([1c8a7459](https://github.com/angular/angular.js/commit/1c8a7459c90efc77b1a0987f976e3bddab4565fe),
    +   [#8926](https://github.com/angular/angular.js/issues/8926))
    +- **ngInclude:** add template url parameter to events
    +  ([fd2d6c02](https://github.com/angular/angular.js/commit/fd2d6c02f9654e753d3655a3377a9534f7a54de3),
    +   [#8453](https://github.com/angular/angular.js/issues/8453), [#8454](https://github.com/angular/angular.js/issues/8454))
     
    -  this.model = 'some model of any type';
     
    -  this.fnUsedFromTemplate = function() {
    -    someApiThatTakesCallback(function callbackFn() {
    -      self.model = 'updatedModel';
    -    });
    -  };
    -}
    -
    +## Performance Improvements -### After: +- **$compile:** move `$$isolateBinding` creation to directive factory instead of on each link + ([56f09f0b](https://github.com/angular/angular.js/commit/56f09f0b44048b62f964d29db4d3d2630662f6ea)) +- **$parse:** + - execute watched expressions only when the inputs change + ([fca6be71](https://github.com/angular/angular.js/commit/fca6be71274e537c7df86ae9e27a3bd1597e9ffa), + [#9006](https://github.com/angular/angular.js/issues/9006), [#9082](https://github.com/angular/angular.js/issues/9082)) + - remove `binaryFn` and `valueFn` wrappers from filter expressions + ([67919c80](https://github.com/angular/angular.js/commit/67919c808771a9b185a9d552cd32a90748d36666)) -
    -function MyCtrl($scope) {
    -  $scope.model = 'some model of any type';
     
    -  $scope.fnUsedFromTemplate = function() {
    -    someApiThatTakesCallback(function() {
    -      $scope.model = 'updatedModel';
    -    });
    -  }
    -}
    -
    +## Breaking Changes -Temporary backwards compatibility: Load the following module in your app to recreate the previous -behavior and migrate your controllers one at a time: +- **$parse:** due to [fca6be71](https://github.com/angular/angular.js/commit/fca6be71274e537c7df86ae9e27a3bd1597e9ffa), + all filters are assumed to be stateless functions +Previously it was just a good practice to make all filters stateless. Now +it's a requirement in order for the model change-observation to pick up +all changes. -## $route service changes +If an existing filter is statefull, it can be flagged as such but keep in +mind that this will result in a significant performance-penalty (or rather +lost opportunity to benefit from a major perf improvement) that will +affect the `$digest` duration. -- As advertised in the past we moved the $route configuration from the run phase of the application - to the config phase. This means that instead of defining routes via `$route.when`/`$route.otherwise` - you should use `$routeProvider.when`/`$routeProvider.otherwise` instead. +To flag a filter as stateful do the following: -- route scope is now being created by the `ng-view` rather than by `$route`, this resolved many - issues we've previously faced. For more info, read the - [commit message](https://github.com/angular/angular.js/commit/60743fc52aea9eabee58258a31f4ba465013cb4e). +```javascript +myApp.filter('myFilter', function() { + function myFilter(input) { ... }; + myFilter.$stateful = true; + return myFilter; +}); +``` -- removed `$route.parent()` - it's unnecessary because the scope is properly created in the scope - hierarchy by `ng-view`. -- new `$viewContentLoaded` and `$includeContentLoaded` events which directives can use to be - notified when a template content is (re)loaded. -- `ng-view` now has `onload` attribute which behaves similarly to the one on `ng-include`. + +# 1.3.0-rc.1 backyard-atomicity (2014-09-09) -## Directives +## Bug Fixes -- `ng-model` binding on select[multiple] element should support binding to an array - ([commit](https://github.com/angular/angular.js/commit/85b2084f578652cc0dcba46c689683fc550554fe)) -- event object is now accessible as `$event` in `ng-click` and other directives - ([commit](https://github.com/angular/angular.js/commit/1752c8c44a7058e974ef208e583683eac8817789), - issue [#259](https://github.com/angular/angular.js/issues/259) -- `ng-class` directive now support map of classnames and conditions - e.g. `
    +
    +
    +
    +``` -- [$sanitize](http://docs-next.angularjs.org/api/angular.module.ng.$sanitize) -- [$interpolate](http://docs-next.angularjs.org/api/angular.module.ng.$interpolate) +Closes #8858 +Closes #8822 -## jqLite (angular.element) -- added `contents()` ([commit](https://github.com/angular/angular.js/commit/97dae0d0a0226ee527771578bfad1342d51bf4dd)) -- added `wrap()` ([commit](https://github.com/angular/angular.js/commit/4a051efb89cf33e30d56f1227d1f6084ead4cd42)) -- fix memory leaking in IE8 (remove monkey patched methods on Event) - ([commit](https://github.com/angular/angular.js/commit/3173d8603db4ae1c2373e13a7a490988126bb1e7), - [commit](https://github.com/angular/angular.js/commit/230f29d0a78a04a6963514da8b1e34cc03e553d0)) - - -## Docs - -- new [Modules dev guide article](http://docs-next.angularjs.org/guide/module) - - -## Small bug fixes - -- fix incorrect comparison of dates by angular.equals - ([commit](https://github.com/angular/angular.js/commit/ffa84418862a9f768ce5b9b681916438f14a0d79)) -- `scope.$watch` support watching functions - ([commit](https://github.com/angular/angular.js/commit/7da2bdb82a72dffc8c72c1becf6f62aae52d32ce), - [commit](https://github.com/angular/angular.js/commit/39b3297fc34b6b15bb3487f619ad1e93c4480741)) -- `$http` should not json-serialize File objects, instead just send them raw - ([commit](https://github.com/angular/angular.js/commit/5b0d0683584e304db30462f3448d9f090120c444)) -- `$compile` should ignore content of style and script elements - ([commit](https://github.com/angular/angular.js/commit/4c1c50fd9bfafaa89cdc66dfde818a3f8f4b0c6b), - [commit](https://github.com/angular/angular.js/commit/d656d11489a0dbce0f549b20006052b215c4b500)) -- `TzDate#getDay()` should take into account the timezone offset (contributed by Stephane Bisson) - ([commit](https://github.com/angular/angular.js/commit/e86bafecd212789cde61050073a69c1e49ffd011)) - - -## Small features - -- `$parse` service now supports local vars in expressions - ([commit](https://github.com/angular/angular.js/commit/761b2ed85ad9685c35f85513e17363abf17ce6b3)) - - - - -# 0.10.6 bubblewrap-cape (2012-01-17) # - -## Features: - -- [Dependency injection subsystem][guide2.di] rewrite. This is a huge change to the Angular core - that was necessary for many reasons. Please read the full - [design doc](https://docs.google.com/document/d/1hJnIqWhSt7wCacmWBB01Bmc6faZ8XdXJAEeiJwjZmqs/edit?hl=en_US) - to understand the changes and reasoning behind them. -- Added [angular.bootstrap] for manual bootstrapping of the app. Also see - [Initializing Angular App][bootstrapping] doc. -- Helper functions [inject] and [module] that make testing with DI and jasmine a lot easier. -- [jqLite][jqLite2] and jQuery were extended with helper method `injector()` that simplifies the - access to the application injector during debugging. -- Rewrite of $xhr service and its dependencies, which was replaced with [$http] service. - The $browser.xhr and its mock were replaced by [$httpBackend] and its - [unit testing][unit-testing $httpBackend] and [end-to-end testing][e2e-testing $httpBackend] - mocks. The $resource service api and functionality was preserved, with the exception of caching, - which is not happening automatically as it used it in the past (verifyCache has no effect). -- [$q] - Q-like deferred/promise implementation - ([commit](https://github.com/angular/angular.js/commit/1cdfa3b9601c199ec0b45096b38e26350eca744f)) -- Transparent data-binding to promises in templates. [Example](http://jsfiddle.net/IgorMinar/aNSWu/) - ([commit](https://github.com/angular/angular.js/commit/78b6e8a446c0e38075c14b724f3cdf345c01fa06)) -- New [$anchorScroll] service that watches url hash and navigates to the html anchor even if the - content was loaded via [ng:view] (for [ng:include] you have to opt into this behavior using - autoscroll attribute) -- New LRU cache factory - [$cacheFactory] service -- jQuery 1.7 compatibility - - -## Bug Fixes: - -- Directive names are now case insensitive - ([commit](https://github.com/angular/angular.js/commit/1e00db8daa5c09e7f8f9134f5c94b9a18c7dc425)) -- $location#url setter fix (Issue [#648](https://github.com/angular/angular.js/issues/648)) -- [ng:include] - prevent race conditions by ignoring stale http callbacks - ([commit](https://github.com/angular/angular.js/commit/1d14760c6d3eefb676f5670bc323b2a7cadcdbfa)) -- [ng:repeat] - support repeating over array with null - ([commit](https://github.com/angular/angular.js/commit/cd9a7b9608707c34bec2316ee8c789a617d22a7b)) -- [angular.copy] - throw Error if source and destination are identical - ([commit](https://github.com/angular/angular.js/commit/08029c7b72a857ffe52f302ed79ae12db9efcc08)) -- Forms should not prevent POST submission if the action attribute is present - ([commit](https://github.com/angular/angular.js/commit/c9f2b1eec5e8a9eaf10faae8a8accf0b771096e0)) - - -## Breaking Changes: - -- App bootstrapping works differently (see [angular.bootstrap] and [ng:app] and [bootstrapping]) -- scope.$service is no more (because injector creates scope and not the other way around), - if you really can't get services injected and need to fetch them manually then, get hold of - [$injector] service and call $injector.get('serviceId') -- angular.service style service registration was replaced with module system, please see - [angular.module] api and [DI documentation][guide2.di] for more info. -- the $xhr service was replaced with [$http] with promise based apis. -- [unit-testing $httpBackend]'s expect method (the replacement for $browser.xhr.expect) is stricter - - the order of requests matters and a single request expectation can handle only a single request. -- compiler - - compiler is a service, so use [$compile] instead of angular.compile to compile templates - - $compile (nee angular.compile) returns the linking function which takes one mandatory argument - - the scope. previously this argument was optional and if missing, the compiler would create a new - root scope, this was a source of bugs and was removed -- filters - - filters need to be registered either via [moduleName.filter][angular.Module] or - [$filterProvider.filter][$filterProvider] - - filters don't have access to the dom element - - currency filter doesn't make negative values red - - json filter doesn't print out stuff in monospace -- type augmentation via angular.Array, and angular.Object is gone. As a replacement use filters - ([filter], [limitTo], [orderBy]), ES5 apis (e.g. Array#indexOf), or create custom filters (e.g. - as a replacement for $count and $sum). -- [$browser.defer.flush] now throws an exception when queue is empty - ([commit](https://github.com/angular/angular.js/commit/63cca9afbcf7a772086eb4582d2f409c39e0ed12)) -- scope.$apply and scope.$digest throws an exception if called while $apply or $digest is already - in progress (this is a programming error, you should never need to do this) - ([commit](https://github.com/angular/angular.js/commit/0bf611087b2773fd36cf95c938d1cda8e65ffb2b)) - - - -# 0.10.5 steel-fist (11-11-08) # - -## Features: - -- [ng:autobind]: drop angular.js file name restrictions - ([commit](https://github.com/angular/angular.js/commit/d7ba5bc83ba9a8937384ea677331c5156ed6772d)) -- [Scope]: better logging of infinite digest error - ([commit](https://github.com/angular/angular.js/commit/ef875ad0cf4349144cb4674e050dd160564f6dd9), - issue [#621](https://github.com/angular/angular.js/issues/621)) -- enable [widget] styling in IE8 and below using - [html5shiv](http://code.google.com/p/html5shiv/)-like approach - ([commit](https://github.com/angular/angular.js/commit/163c799effd5cfadc57990f4d4127651bae3fbdb), - issue [#584](https://github.com/angular/angular.js/issues/584)) -- [ng:style]: compatibility + perf improvements - ([commit](https://github.com/angular/angular.js/commit/e2663f62b0fbb8b9ce2e706b821a135e0bc7e885)) - - -## Bug Fixes: -- [ng:view]: ignore stale xhr callbacks - fixes issues caused by race-conditions which occured when - user navigated to a new route before the current route finished loading - (issue [#619](https://github.com/angular/angular.js/issues/619)) -- [ng:form] should always be a block level (css) element - ([commit](https://github.com/angular/angular.js/commit/02dc81bae0011b7ae4190363be5fdd5db420aca9)) -- Fixes for [e2e test runner]'s `$location` dsl - ([commit](https://github.com/angular/angular.js/commit/dc8ffa51b7ebe5fb9bc1c89087c8b3c9e65d1006)) -- [ng:repeat] when iterating over arrays ignore non-array properties + when iterating over objects - sort keys alphabetically - ([commit](https://github.com/angular/angular.js/commit/3945f884c5777e629b57c9ab0e93b9d02b9840d0)) - -## Docs: -- experimental [disqus.com](http://disqus.com/) integration for all docs-next.angularjs.org pages - ([commit](https://github.com/angular/angular.js/commit/28ed5ba46595a371bd734b92a6e4bb40d1013741), - contributed by Dan Doyon) -- [e2e test runner] docs were moved to the dev guide - - - - -# 0.10.4 human-torch (2011-10-22) # - -## Features: - -- New validation options for - [input widgets](http://docs-next.angularjs.org/api/angular.widget.input): `ng:minlength` and - `ng:maxlength` - ([commit](https://github.com/angular/angular.js/commit/78f394fd17be581c84ecd526bb786ed1681d35cb)) - (contributed by Konstantin Stepanov) -- HTML sanitizer was updated to recognize all safe HTML5 elements - (Issue [#89](https://github.com/angular/angular.js/issues/89)) -- [ng:options]' blank option is now compiled and data-bound as any other template - (Issue [#562](https://github.com/angular/angular.js/issues/562)) - (contributed by tehek) -- [$defer](http://docs-next.angularjs.org/api/angular.service.$defer) service now exposes `cancel` - method for task cancellation - ([commit](https://github.com/angular/angular.js/commit/ad90c3574f8365ee4a1a973d5e43c64fe9fcda2c)) - - -## Bug Fixes: - -- [ng:options] should select correct element when '?'-option (invalid value) was previously selected - (Issue [#599](https://github.com/angular/angular.js/issues/599)) (contributed by Tehek) -- Fix data-binding of radio button's value property - (Issue [#316](https://github.com/angular/angular.js/issues/316)) -- Input with type `password` should no be turned into a readable text field - ([commit](https://github.com/angular/angular.js/commit/e82e64d57b65d9f3c4f2e8831f30b615a069b7f6)) - (contributed by Konstantin Stepanov) -- [ng:repeat] should ignore object properties starting with `$` - ([commit](https://github.com/angular/angular.js/commit/833eb3c84445110dc1dad238120573f08ed8d102)) -- Correctly parse out inlined regexp from the input field's `ng:pattern` attribute. - ([commit](https://github.com/angular/angular.js/commit/5d43439dbe764a4c7227f51b34a81b044f13901b)) -- $location service in html5 mode should correctly rewrite links that contain nested elements - ([commit](https://github.com/angular/angular.js/commit/9b85757102fbd44e88d0a3909fdf8b90f191b593)) - - -## Breaking Changes: - -- the [date] filter now uses 'mediumDate' format if none is specified. This was done to deal with - browser inconsistencies (each browser used to use different format) - (Issue [#605](https://github.com/angular/angular.js/issues/605), - [commit](https://github.com/angular/angular.js/commit/c6c3949b14f4003ecab291243edfca61262f2c3d), - [commit](https://github.com/angular/angular.js/commit/e175db37c6f52bba4080efeec22a7120a896099e)) -- calling the linker function returned by [angular.compile][compile] doesn't automatically run - `$digest` on the linked scope any more. This behavior was briefly introduced in 0.10.3 but was - causing issues and inefficiencies in production apps so we reverted it. See: - [commit](https://github.com/angular/angular.js/commit/f38010d3a2f457a53798212ef72418637dabe189) - - - - - -# 0.10.3 shattering-heartbeat (2011-10-13) # - -## Features: - -- New forms, validation, support for HTML5 input widgets. Please check out: - - [Forms overview](http://docs-next.angularjs.org/guide/dev_guide.forms) - - [form widget](http://docs-next.angularjs.org/api/angular.widget.form) - - [input widget](http://docs-next.angularjs.org/api/angular.widget.input) - - [$formFactory service](http://docs-next.angularjs.org/api/angular.service.$formFactory) - - [angular.inputType](http://docs-next.angularjs.org/api/angular.inputType) - - [commit](https://github.com/angular/angular.js/commit/4f78fd692c0ec51241476e6be9a4df06cd62fdd6) - -- [ng:repeat] now has element-model affinity, which makes it more friendly to third-party code that - is not aware of angular's DOM manipulation. This is also the pre-requisite for supporting - animations. - ([commit](https://github.com/angular/angular.js/commit/75f11f1fc46c35a28c0905f7316ea6779145e2fb)) - - -## Bug Fixes: - -- The select widget with [ng:options] directive now correctly displays selected option (regression - from 0.10.2). -- Fix for jqLite's removeClass, which under certain circumstances could clobber class names. - ([commit](https://github.com/angular/angular.js/commit/b96e978178a6acbf048aa6db466ed845e1395445)) -- Other small fixes and documentation improvements. + +# 1.3.0-RC.0 sonic-boltification (2014-08-29) -## Breaking Changes: - -- Due to changes in how forms and validation works the following were replaced with new apis: - - `angular.formatter` - use `angular.inputType` or form's `$createWidget` - - `angular.validator` - use `angular.inputType` or form's `$createWidget` - - changes to `` and `` element and `selected` attribute of the ``) - (Issue [#450](https://github.com/angular/angular.js/issues/450)) -- [$xhr] and [$resource] support for per-request error callbacks (Issue - [#408](https://github.com/angular/angular.js/issues/408)) (contributed by Karl Seamon) - - -### Bug Fixes -- make injector compatible with Rhino (HtmlUnit) (contributed by Mårten Dolk) - [commit](https://github.com/angular/angular.js/commit/77ba539f630c57b17d71dbf1e9c5667a7eb603b7) -- `ie-compat.js` fixes and improvements related to fetching this file on the fly on legacy browsers -- [jqLite] - - fix `bind()` when binding to more events separated by space - [commit](https://github.com/angular/angular.js/commit/9ee9ca13da3883d06733637f9048a83d94e6f1f8) - - non-existing attributes should return undefined just like in jQuery - [commit](https://github.com/angular/angular.js/commit/10da625ed93511dbf5d4e61ca4e42f6f2d478959) - - set event.target for IE<8 - [commit](https://github.com/angular/angular.js/commit/ce80576e0b8ac9ed5a5b1f1a4dbc2446434a0002) -- improved implementation of [ng:show] and [ng:hide] directives by using jqLite/jQuery hide and - show methods -- [ng:options] - - fix incorrect re-growing of options on datasource change - (Issue [#464](https://github.com/angular/angular.js/issues/464)) +- **numberFilter:** due to [2ae10f67](https://github.com/angular/angular.js/commit/2ae10f67fcde3e172f695956301ef796b68a50c2), + previously the number filter would convert null and undefined values into empty string, after this change +these values will be passed through. -### Docs -- added full offline support for docs (click on the link in the footer of docs.angularjs.org) -- many content improvements and corrections across all docs (reference api, tutorial, dev guide) -- many small design improvements +Only cases when the number filter is chained with another filter that doesn't expect null/undefined will be affected. This +should be very rare. +This change will not change the visual output of the filter because the interpolation will convert the null/undefined to +an empty string. -### Other -- doubled our e2e test suite by running all angular e2e tests with jqLite in addition to jQuery +Closes #8605 +Closes #8842 -### Breaking changes -- [commit](https://github.com/angular/angular.js/commit/3af1e7ca2ee8c2acd69e5bcbb3ffc1bf51239285) - removed support for the `MMMMM` (long month name), use `MMMM` instead. This was done to align - Angular with - [Unicode Technical Standard #35](http://unicode.org/reports/tr35/#Date_Format_Patterns) used by - Closure, as well as, future DOM apis currently being proposed to w3c. -- `$xhr.error`'s `request` argument has no `callback` property anymore, use `success` instead +- **input:** + - due to [77ce5b89](https://github.com/angular/angular.js/commit/77ce5b89f97aa83c3eb1fe2e19375ef00a822015), +NgModel.viewValue will always be used when rendering validations for `minlength` and `maxlength`. +Closes #7967 +Closes #8811 - -# 0.9.17 vegetable-reanimation (2011-06-30) # +- **input:** + - due to [29f0b568](https://github.com/angular/angular.js/commit/29f0b568debab7810752969d363d337099e96cdc), -### New Features -- New [ng:options] directive to better bind a model to ` (one/multiple) could not chose from a list of objects (commit 347be5ae) -- null and other falsy values should not be rendered in the view (issue #242) - -### Docs -- rewrite of several major portions of angular.service.*, angular.Array.*, angular.Object.* docs -- added support for [sitemap]((http://docs.angularjs.org/sitemap.xml) to make the docs indexable by - search crawlers -- transition of Developer Guide docs from the wiki into docs.angularjs.org -- lots of improvements related to formatting of the content of docs.anguarjs.org - - - -# 0.9.9 time-shift (2011-01-13) # - -### Security -- Added a just in case security check for JSON parsing. (commit 5f080193) -- Completed security review with the Google Security Team. - -### Performance -- $location and $cookies services are now lazily initialized to avoid the polling overhead when - not needed. -- $location service now listens for `onhashchange` events (if supported by browser) instead of - constant polling. (commit 16086aa3) -- input widgets known listens on keydown events instead of keyup which improves perceived - performance (commit 47c454a3) -- angular boots significantly sooner by listening for DOMContentLoaded event instead of - window.load when supported by browser (commit c79aba92) -- new service $updateView which may be used in favor of $root.$eval() to run a complete eval on - the entire document. This service bulks and throttles DOM updates to improve performance. - (commit 47c454a3) - -### Docs -- Major improvements to the doc parser (commit 4f22d686) -- Docs now offline enabled (all dependencies are bundled in the tarball) (commit 4f5d5029) -- Added support for navigating the docs app with keyboard shortcuts (tab and ctrl+alt+s) - -### Bugfixes -- `angular.Object.equals` now properly handless comparing an object with a null (commit b0be87f6) -- Several issues were addressed in the `$location` service (commit 23875cb3) -- angular.filter.date now properly handles some corner-cases (issue #159 - fix contributed by Vojta) - -### Breaking changes -- API for accessing registered services — `scope.$inject` — was renamed to - [`scope.$service`](http://docs.angularjs.org/#!/api/angular.scope.$service). (commit b2631f61) - -- Support for `eager-published` services was removed. This change was done to make explicit - dependency declaration always required in order to allow making relatively expensive services - lazily initialized (e.g. $cookie, $location), as well as remove 'magic' and reduce unnecessary - scope namespace pollution. (commit 3ea5941f) - - Complete list of affected services: - - - $location - - $route - - $cookies - - $window - - $document - - $exceptionHandler - - $invalidWidgets - - To temporarily preserve the 'eager-published' status for these services, you may use `ng:init` - (e.g. `ng:init="$location = $service('$location'), ...`) in the view or more correctly create - a service like this: - - angular.service('published-svc-shim', function($location, $route, $cookies, $window, - $document, $exceptionHandler, $invalidWidgets) { - this.$location = $location; - this.$route = $route; - this.$cookies = $cookies; - this.$window = $window; - this.$document = $document; - this.$exceptionHandler = $exceptionHandler; - this.$invalidWidgets = $invalidWidgets; - }, {$inject: ['$location', '$route', '$cookies', '$window', '$document', '$exceptionHandler', - '$invalidWidgets'], - $eager: true}); - -- In the light of the `eager-published` change, to complete the cleanup we renamed `$creation` - property of services to `$eager` with its value being a boolean. - To transition, please rename all `$creation: 'eager'` declarations to `$eager: true`. - (commit 1430c6d6) - -- `angular.foreach` was renamed to `angular.forEach` to make the api consistent. (commit 0a6cf70d) - -- The `toString` method of the `angular.service.$location` service was removed. (commit 23875cb3) - - - -# 0.9.8 astral-projection (2010-12-23) # - -### Docs/Getting started -- angular-seed project to get you hacking on an angular apps quickly - https://github.com/angular/angular-seed - -### Performance -- Delegate JSON parsing to native parser (JSON.parse) if available - -### Bug Fixes -- Ignore input widgets which have no name (issue #153) - - - -# 0.9.7 sonic-scream (2010-12-10) # - -### Bug Fixes -- $defer service should always call $eval on the root scope after a callback runs (issue #189) -- fix for failed assignments of form obj[0].name=value (issue #169) -- significant parser improvements that resulted in lower memory usage - (commit 23fc73081feb640164615930b36ef185c23a3526) - -### Docs -- small docs improvements (mainly docs for the $resource service) - -### Breaking changes -- Angular expressions in the view used to support regular expressions. This feature was rarely - used and added unnecessary complexity. It not a good idea to have regexps in the view anyway, - so we removed this support. If you had any regexp in your views, you will have to move them to - your controllers. (commit e5e69d9b90850eb653883f52c76e28dd870ee067) - - - -# 0.9.6 night-vision (2010-12-06) # - -### Security -- several improvements in the HTML sanitizer code to prevent code execution via `href`s and other - attributes. - Commits: - - 41d5938883a3d06ffe8a88a51efd8d1896f7d747 - - 2bbced212e2ee93948c45360fee00b2e3f960392 - -### Docs -- set up http://docs.angularjs.org domain, the docs for the latest release will from now on be - deployed here. -- docs app UI polishing with dual scrolling and other improvements - -### Bug Fixes -- `select` widget now behaves correctly when it's `option` items are created via `ng:repeat` - (issue #170) -- fix for async xhr cache issue #152 by adding `$browser.defer` and `$defer` service - -### Breaking Changes -- Fix for issue #152 might break some tests that were relying on the incorrect behavior. The - breakage will usually affect code that tests resources, xhr or services/widgets build on top of - these. All that is typically needed to resolve the issue is adding a call to - `$browser.defer.flush()` in your test just before the point where you expect all cached - resource/xhr requests to return any results. Please see 011fa39c2a0b5da843395b538fc4e52e5ade8287 - for more info. -- The HTML sanitizer is slightly more strinct now. Please see info in the "Security" section above. - - - -# 0.9.5 turkey-blast (2010-11-25) # - -### Docs -- 99% of the content from the angular wiki is now in the docs - -### Api -- added `angular.Array.limitTo` to make it easy to select first or last few items of an array - - - -# 0.9.4 total-recall (2010-11-18) # - -### Docs -- searchable docs -- UI improvements -- we now have ~85% of the wiki docs migrated to ng docs -- some but not all docs were updated along the way +- **$compile:** make '='-bindings NaN-aware + ([5038bf79](https://github.com/angular/angular.js/commit/5038bf79c6c8251d7449d887b44a4321e619c534), + [#8553](https://github.com/angular/angular.js/issues/8553), [#8554](https://github.com/angular/angular.js/issues/8554)) +- **$location:** add semicolon to whitelist of delimiters to unencode + ([36258033](https://github.com/angular/angular.js/commit/3625803349de04f175f87a22cbb608738003811a), + [#5019](https://github.com/angular/angular.js/issues/5019)) +- **$parse:** + - one-time binding for literal expressions works as expected + ([c024f282](https://github.com/angular/angular.js/commit/c024f28217cf8eedd695dd4b933ecf2ba4243c15), + [#8209](https://github.com/angular/angular.js/issues/8209)) + - correctly assign expressions who's path is undefined and that use brackets notation + ([c03ad249](https://github.com/angular/angular.js/commit/c03ad249033e701f3ad7aa358102e1cb87f5025c), + [#8039](https://github.com/angular/angular.js/issues/8039)) +- **Scope:** add deregisterNotifier to oneTimeLiteralWatch signature + ([a001a417](https://github.com/angular/angular.js/commit/a001a417d5c12bad0fa09c88e045622b95239e2f)) +- **jqLite:** + - allow `triggerHandler()` to accept custom event + ([01d81cda](https://github.com/angular/angular.js/commit/01d81cdab3dbbcb8b4204769eb5272096eb0837f), + [#8469](https://github.com/angular/angular.js/issues/8469)) + - fix regression where mutating the dom tree on a event breaks jqLite.remove + ([a00c9bca](https://github.com/angular/angular.js/commit/a00c9bca401abe5b5b0a217be82333056422c811), + [#8359](https://github.com/angular/angular.js/issues/8359)) +- **ngSanitize:** ensure `html` is a string in htmlParser() + ([34781f18](https://github.com/angular/angular.js/commit/34781f18cb75ded9ae29f4b78f5bacd079f76709), + [#8417](https://github.com/angular/angular.js/issues/8417), [#8416](https://github.com/angular/angular.js/issues/8416)) +- **select:** + - ensure that at least one option has the `selected` attribute set + ([25a476ea](https://github.com/angular/angular.js/commit/25a476ea096b200fb4f422aaa9cd7215e2596ad3), + [#8366](https://github.com/angular/angular.js/issues/8366), [#8429](https://github.com/angular/angular.js/issues/8429)) + - do not update selected property of an option element on digest with no change event + ([cdc7db3f](https://github.com/angular/angular.js/commit/cdc7db3f35368a9175ed96c63f4bf56593fe1876), + [#8221](https://github.com/angular/angular.js/issues/8221), [#7715](https://github.com/angular/angular.js/issues/7715)) -### Api -- ng:include now supports `onload` attribute (commit cc749760) +## Features -### Misc -- Better error handling - compilation exception now contain stack trace (commit b2d63ac4) +- **$parse:** allow for assignments in ternary operator branches + ([2d678f1d](https://github.com/angular/angular.js/commit/2d678f1d0a3714fdd49e582b92787312af129947), + [#8512](https://github.com/angular/angular.js/issues/8512), [#8484](https://github.com/angular/angular.js/issues/8484)) +- **form:** Add new $submitted state to forms + ([108a69be](https://github.com/angular/angular.js/commit/108a69be17df5884d026c57b2be3235c576250fe), + [#8056](https://github.com/angular/angular.js/issues/8056)) +- **http:** allow caching for JSONP requests + ([3607c982](https://github.com/angular/angular.js/commit/3607c9822f57b4d01b3f09a6ae4efc7168bec6c5), + [#1947](https://github.com/angular/angular.js/issues/1947), [#8356](https://github.com/angular/angular.js/issues/8356)) +- **jQuery:** upgrade to jQuery to 2.1.1 + ([9e7cb3c3](https://github.com/angular/angular.js/commit/9e7cb3c37543008e6236bb5a2c4536df2e1e43a9)) +- **ngMock:** allow override of when/expect definitions + ([477626d8](https://github.com/angular/angular.js/commit/477626d846b4de65d1d5c7071e6a94361395ff42), + [#5766](https://github.com/angular/angular.js/issues/5766), [#8352](https://github.com/angular/angular.js/issues/8352)) - -# 0.9.3 cold-resistance (2010-11-10) # +## Performance Improvements -### Docs -- prettier docs app with syntax highlighting for examples, etc -- added documentation, examples and scenario tests for many more apis including: - - all directives - - all formatters - - all validators - - some widgets - -### Api -- date filter now accepts strings that angular.String.toDate can convert to Date objects -- angular.String.toDate supports ISO8061 formated strings with all time fractions being optional -- ng:repeat now exposes $position with values set to 'first', 'middle' or 'last' -- ng:switch now supports ng:switch-default as fallback switch option +- **$q:** move Deferred and Promise methods to prototypes + ([23bc92b1](https://github.com/angular/angular.js/commit/23bc92b17df882a907fb326320f0622717fefe7b), + [#8300](https://github.com/angular/angular.js/issues/8300)) +- **input:** prevent additional $digest when input is already touched + ([dd2a803f](https://github.com/angular/angular.js/commit/dd2a803f4f03ab629a51623c026d3e3f9dc9e91f), + [#8450](https://github.com/angular/angular.js/issues/8450)) -### Breaking changes -- we now support ISO 8601 extended format datetime strings (YYYY-MM-DDTHH:mm:ss.SSSZ) as defined - in EcmaScript 5 throughout angular. This means that the following apis switched from - YYYY-MM-DDTHH:mm:ssZ to YYYY-MM-DDTHH:mm:ss.SSSZ (note the added millis) when representing dates: - - angular.Date.toString - - angular.String.fromDate - - JSON serialization and deserialization (used by json filter, $xhr and $resource) -- removed SSN validator. It's unlikely that most people will need it and if they do, it can be added - simple RegExp validator. +## Breaking Changes - -# 0.9.2 faunal-mimicry (2010-11-03) # +- **jQuery:** due to [9e7cb3c3](https://github.com/angular/angular.js/commit/9e7cb3c37543008e6236bb5a2c4536df2e1e43a9), + Angular no longer supports jQuery versions below 2.1.1. +- **$q:** due to [23bc92b1](https://github.com/angular/angular.js/commit/23bc92b17df882a907fb326320f0622717fefe7b), + Promises methods are no longer enumerated when using for-loops with `hasOwnProperty` check. E.g. `angular.extends` -### Docs -- created documentation framework based on jsdoc syntax (commit 659af29a) - - jsdoc parser - - template generator - - json generator - - angular doc viewer app - - scenario runner for all example code -- documentation for all angular filters (commits 1fe7e3a1 & 1ba8c2a33) - - docs - - example code - - scenario tests for example code - -### Testability -#### Scenario Runner -- binding DSL in Scenario can now match bindings without specifying filters -- dsl statements now accept a label argument to make test output more readable (issue #94) -- dsl element() statement now implements most of the jQuery API (issue #106) -- new browser() dsl statement for getting info about the emulated browser running the app - (issue #109) -- scenario runner is now compatible with IE8 (issue #93) -- scenarior runner checks if URL would return a non-success status code (issue #100) -- binding() DSL now accepts regular expressions -- new textarea() scenario runner DSL for entering text into textareas - -### Misc -- lots of small bugfixes - -### Breaking changes -#### Scenario Runner -- navigating to about:blank is no longer supported. It results in a sandbox error -- navigateTo() is now browser().navigateTo(). Old code must be updated -- file:// URLs are no longer supported for running a scenario. You must use a web server that - implements HEAD - - - -# 0.9.1 repulsion-field (2010-10-26) # - -### Security -- added html sanitizer to fix the last few known security issues (issues #33 and #34) - -### API -- new ng:submit directive for creating onSubmit handlers on forms (issue #76) -- the date filter now accepts milliseconds as well as date strings (issue #78) -- the html filter now supports 'unsafe' option to bypass html sanitization - -### Testability -- lots of improvements related to the scenario runner (commit 40d7e66f) - -### Demo -- added a new demo application: Personal Log (src example/personalLog) - -### Chores -- lots of fixes to get all tests pass on IE -- added TzDate type to allow us to create timezone idependent tests (issue #88) - -### Breaking changes -- $cookieStore service is not globally published any more, if you use it, you must request it via - $inject as any other non-global service -- html filter now sanitizes html content for XSS attacks which may result in different behavior - - - -# 0.9.0 dragon-breath (2010-10-20) # - -### Security -- angular.fromJson not safer (issue #57) -- readString consumes invalid escapes (issue #56) -- use new Function instead of eval (issue #52) - -### Speed -- css cleanup + inline all css and images in the main js (issue #64) - -### Testability -- initial version of the built-in end-to-end scenario runner (issues #50, #67, #70) - -### API -- allow ng:controller nesting (issue #39) -- new built-in date format filter (issue #45) -- $location needs method you call on updates (issue #32) - - -### Chores -- release versioning + file renaming (issue #69) - -### Breaking changes -- $location.parse was replaced with $location.update -- all css and img files were inlined into the main js file, to support IE7 and older app must host - angular-ie-compat.js file - -### Big Thanks to Our Community Contributors -- Vojta Jina - - - - -[lowercase]: http://docs.angularjs.org/#!/api/angular.lowercase -[uppercase]: http://docs.angularjs.org/#!/api/angular.uppercase -[isDate]: http://docs.angularjs.org/#!/api/angular.isDate -[scope]: http://docs.angularjs.org/#!/api/angular.scope -[compile]: http://docs.angularjs.org/#!/api/angular.compile -[element]: http://docs.angularjs.org/#!/api/angular.element -[widget]: http://docs.angularjs.org/#!/api/angular.widget -[ng:repeat]: http://docs.angularjs.org/#!/api/angular.widget.@ng:repeat -[ng:view]: http://docs.angularjs.org/#!/api/angular.widget.ng-view -[ng:include]: http://docs.angularjs.org/#!/api/angular.widget.ng-include -[ng:options]: http://docs.angularjs.org/#!/api/angular.directive.ng-options -[ng:disabled]: http://docs.angularjs.org/#!/api/angular.directive.ng-disabled -[ng:selected]: http://docs.angularjs.org/#!/api/angular.directive.ng-selected -[ng:checked]: http://docs.angularjs.org/#!/api/angular.directive.ng-checked -[ng:multiple]: http://docs.angularjs.org/#!/api/angular.directive.ng-multiple -[ng:readonly]: http://docs.angularjs.org/#!/api/angular.directive.ng-readonly -[ng:show]: http://docs.angularjs.org/#!/api/angular.directive.ng-show -[ng:hide]: http://docs.angularjs.org/#!/api/angular.directive.ng-hide -[ng:class]: http://docs.angularjs.org/#!/api/angular.directive.ng-class -[ng:src]: http://docs.angularjs.org/#!/api/angular.directive.ng-src -[ng:href]: http://docs.angularjs.org/#!/api/angular.directive.ng-href -[ng:style]: http://docs.angularjs.org/#!/api/angular.directive.ng-style -[$defer]: http://docs.angularjs.org/#!/api/angular.module.ng.$defer -[$cookies]: http://docs.angularjs.org/#!/api/angular.module.ng.$cookies -[$xhr]: http://docs.angularjs.org/#!/api/angular.module.ng.$xhr -[$xhr.cache]: http://docs.angularjs.org/#!/api/angular.module.ng.$xhr.cache -[$resource]: http://docs.angularjs.org/#!/api/angular.module.ng.$resource -[$route]: http://docs.angularjs.org/#!/api/angular.module.ng.$route -[$orderBy]: http://docs.angularjs.org/#!/api/angular.Array.orderBy -[date]: http://docs.angularjs.org/#!/api/angular.filter.date -[number]: http://docs.angularjs.org/#!/api/angular.filter.number -[currency]: http://docs.angularjs.org/#!/api/angular.filter.currency -[directive]: http://docs.angularjs.org/#!/api/angular.directive -[ng:autobind]: http://docs.angularjs.org/#!/api/angular.directive.ng-autobind -[guide.di]: http://docs.angularjs.org/#!/guide/dev_guide.di -[downloading]: http://docs.angularjs.org/#!/misc/downloading -[contribute]: http://docs.angularjs.org/#!/misc/contribute -[jqLite]: http://docs.angularjs.org/#!/api/angular.element -[angular.version]: http://docs.angularjs.org/#!/api/angular.version -[Jstd Scenario Adapter]: https://github.com/angular/angular.js/blob/master/src/jstd-scenario-adapter/Adapter.js -[i18n]: http://docs-next.angularjs.org/#!/guide/dev_guide.i18n -[ng:pluralize]: http://docs-next.angularjs.org/#!/api/angular.widget.ng-pluralize -[ng:form]: http://docs-next.angularjs.org/api/angular.widget.form -[ng:cloak]: http://docs-next.angularjs.org/#!/api/angular.directive.ng-cloak -[$on]: http://docs-next.angularjs.org/#!/api/angular.scope.$on -[$emit]: http://docs-next.angularjs.org/#!/api/angular.scope.$emit -[$broadcast]: http://docs-next.angularjs.org/#!/api/angular.scope.$broadcast -[$limitTo]: http://docs-next.angularjs.org/api/angular.Array.limitTo -[$location]: http://docs-next.angularjs.org/api/angular.service.$location -[e2e test runner]: http://docs-next.angularjs.org/guide/dev_guide.e2e-testing -[$injector]: http://docs-next.angularjs.org/api/angular.module.AUTO.$injector -[$http]: http://docs-next.angularjs.org/api/angular.module.ng.$http -[$httpBackend]: http://docs-next.angularjs.org/api/angular.module.ng.$httpBackend -[unit-testing $httpBackend]: http://docs-next.angularjs.org/api/angular.module.ngMock.$httpBackend -[e2e-testing $httpBackend]: http://docs-next.angularjs.org/api/angular.module.ngMockE2E.$httpBackend -[$q]: http://docs-next.angularjs.org/api/angular.module.ng.$q -[angular.bootstrap]: http://docs-next.angularjs.org/api/angular.bootstrap -[$anchorScroll]: http://docs-next.angularjs.org/api/angular.module.ng.$anchorScroll -[$cacheFactory]: http://docs-next.angularjs.org/api/angular.module.ng.$cacheFactory -[bootstrapping]: http://docs-next.angularjs.org/guide/bootstrap -[angular.copy]: http://docs-next.angularjs.org/api/angular.copy -[ng:app]: http://docs-next.angularjs.org/api/angular.directive.ng-app -[$compile]: http://docs-next.angularjs.org/api/angular.module.ng.$compile -[$filterProvider]: http://docs-next.angularjs.org/api/angular.module.ng.$filterProvider -[angular.Module]: http://docs-next.angularjs.org/api/angular.Module -[angular.module]: http://docs-next.angularjs.org/api/angular.module -[filter]: http://docs-next.angularjs.org/api/angular.module.ng.$filter.filter -[limitTo]: http://docs-next.angularjs.org/api/angular.module.ng.$filter.limitTo -[orderBy]: http://docs-next.angularjs.org/api/angular.module.ng.$filter.orderBy -[$browser.defer.flush]: http://docs-next.angularjs.org/api/angular.module.ngMock.$browser#defer.flush -[inject]: http://docs-next.angularjs.org/api/angular.mock.inject -[module]: http://docs-next.angularjs.org/api/angular.mock.module -[guide2.di]: http://docs-next.angularjs.org/guide/dev_guide.di -[jqLite2]: http://docs.angularjs.org/#!/api/angular.element