diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 000000000000..f6a54e4dd2c5 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,18 @@ +# http://editorconfig.org + +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +[dropdown-toggle.js] +trim_trailing_whitespace = false +insert_final_newline = false + +[htmlparser.js] +insert_final_newline = false diff --git a/.externalToolBuilders/JSTD_Tests.launch b/.externalToolBuilders/JSTD_Tests.launch deleted file mode 100644 index 503cbaffb077..000000000000 --- a/.externalToolBuilders/JSTD_Tests.launch +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000000..b7ca95b5b77a --- /dev/null +++ b/.gitattributes @@ -0,0 +1,5 @@ +# Auto detect text files and perform LF normalization +* text=auto + +# JS files must always use LF for tools to work +*.js eol=lf diff --git a/.gitignore b/.gitignore index 2631c477f582..dcfa68efd8e1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,22 @@ -angular-minified.map -externs.js -angular.js -angular-minified.js -angular-debug.js -angular-scenario.js +/build/ +/benchpress-build/ +.DS_Store +gen_docs.disable +test.disable +regression/temp*.html +performance/temp*.html +.idea/workspace.xml +*~ +*.swp +angular.js.tmproj +/node_modules/ +bower_components/ +angular.xcodeproj +.idea +*.iml +.agignore +.lvimrc +libpeerconnection.log +npm-debug.log +/tmp/ +/scripts/bower/bower-* diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index a7c382ed390c..000000000000 --- a/.idea/.gitignore +++ /dev/null @@ -1 +0,0 @@ -workspace.xml diff --git a/.idea/.rakeTasks b/.idea/.rakeTasks deleted file mode 100644 index 50fb6fec99e4..000000000000 --- a/.idea/.rakeTasks +++ /dev/null @@ -1,7 +0,0 @@ - - diff --git a/.idea/encodings.xml b/.idea/encodings.xml deleted file mode 100644 index e206d70d8595..000000000000 --- a/.idea/encodings.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/.idea/master.iml b/.idea/master.iml deleted file mode 100644 index 8f7472a8f1b0..000000000000 --- a/.idea/master.iml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index bf08d02dfcf0..000000000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index 12b24804dd30..000000000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 9d32e507a981..000000000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/.jscsrc b/.jscsrc new file mode 100644 index 000000000000..4d2b16f30bcd --- /dev/null +++ b/.jscsrc @@ -0,0 +1,48 @@ +{ + "excludeFiles": ["src/ngLocale/**"], + "disallowKeywords": ["with"], + "disallowKeywordsOnNewLine": ["else"], + "disallowMixedSpacesAndTabs": true, + "disallowMultipleLineStrings": true, + "disallowNewlineBeforeBlockStatements": true, + "disallowSpaceAfterObjectKeys": true, + "disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~", "!"], + "disallowSpaceBeforeBinaryOperators": [","], + "disallowSpaceBeforePostfixUnaryOperators": ["++", "--"], + "disallowSpacesInAnonymousFunctionExpression": { + "beforeOpeningRoundBrace": true + }, + "disallowSpacesInCallExpression": true, + "disallowSpacesInFunctionDeclaration": { + "beforeOpeningRoundBrace": true + }, + "disallowSpacesInNamedFunctionExpression": { + "beforeOpeningRoundBrace": true + }, + "disallowSpacesInsideArrayBrackets": true, + "requireSpaceBeforeKeywords": [ + "else", + "while", + "catch" + ], + "disallowSpacesInsideParentheses": true, + "disallowTrailingComma": true, + "disallowTrailingWhitespace": true, + "requireCommaBeforeLineBreak": true, + "requireLineFeedAtFileEnd": true, + "requireSpaceAfterBinaryOperators": ["?", ":", "+", "-", "/", "*", "%", "==", "===", "!=", "!==", ">", ">=", "<", "<=", "&&", "||"], + "requireSpaceBeforeBinaryOperators": ["?", ":", "+", "-", "/", "*", "%", "==", "===", "!=", "!==", ">", ">=", "<", "<=", "&&", "||"], + "requireSpaceAfterKeywords": ["if", "else", "for", "while", "do", "switch", "return", "try", "catch"], + "requireSpaceBeforeBlockStatements": true, + "requireSpacesInConditionalExpression": { + "afterTest": true, + "beforeConsequent": true, + "afterConsequent": true, + "beforeAlternate": true + }, + "requireSpacesInForStatement": true, + "requireSpacesInFunction": { + "beforeOpeningCurlyBrace": true + }, + "validateLineBreaks": "LF" +} diff --git a/.jshintignore b/.jshintignore new file mode 100644 index 000000000000..e9cc4f260316 --- /dev/null +++ b/.jshintignore @@ -0,0 +1,2 @@ +node_modules/** +lib/htmlparser/** diff --git a/.jshintrc b/.jshintrc new file mode 100644 index 000000000000..7fbaafbc0a8c --- /dev/null +++ b/.jshintrc @@ -0,0 +1,5 @@ +{ + "extends": ".jshintrc-base", + "node": true, + "globals": {} +} diff --git a/.jshintrc-base b/.jshintrc-base new file mode 100644 index 000000000000..c4ac5e2666bf --- /dev/null +++ b/.jshintrc-base @@ -0,0 +1,19 @@ +{ + "bitwise": true, + "immed": true, + "newcap": true, + "noarg": true, + "noempty": true, + "nonew": true, + "trailing": true, + "maxlen": 200, + "boss": true, + "eqnull": true, + "expr": true, + "globalstrict": true, + "laxbreak": true, + "loopfunc": true, + "sub": true, + "undef": true, + "indent": 2 +} diff --git a/.project b/.project deleted file mode 100644 index 0fb4c323f794..000000000000 --- a/.project +++ /dev/null @@ -1,27 +0,0 @@ - - - angular.js - - - - - - org.eclipse.wst.jsdt.core.javascriptValidator - - - - - org.eclipse.ui.externaltools.ExternalToolBuilder - auto,full,incremental, - - - LaunchConfigHandle - <project>/.externalToolBuilders/JSTD_Tests.launch - - - - - - org.eclipse.wst.jsdt.core.jsNature - - diff --git a/.settings/.jsdtscope b/.settings/.jsdtscope deleted file mode 100644 index 7beec24e692c..000000000000 --- a/.settings/.jsdtscope +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/.settings/org.eclipse.wst.jsdt.ui.superType.container b/.settings/org.eclipse.wst.jsdt.ui.superType.container deleted file mode 100644 index 49c8cd4f14a3..000000000000 --- a/.settings/org.eclipse.wst.jsdt.ui.superType.container +++ /dev/null @@ -1 +0,0 @@ -org.eclipse.wst.jsdt.launching.JRE_CONTAINER \ No newline at end of file diff --git a/.settings/org.eclipse.wst.jsdt.ui.superType.name b/.settings/org.eclipse.wst.jsdt.ui.superType.name deleted file mode 100644 index 11006e2a545a..000000000000 --- a/.settings/org.eclipse.wst.jsdt.ui.superType.name +++ /dev/null @@ -1 +0,0 @@ -Global \ No newline at end of file diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 000000000000..06dcd0246372 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,68 @@ +language: node_js +sudo: false +node_js: + - '4.2' + +cache: + directories: + - node_modules + - bower_components + - docs/bower_components + +branches: + except: + - /^g3_.*$/ + +env: + matrix: + - JOB=ci-checks + - JOB=unit BROWSER_PROVIDER=saucelabs + - JOB=docs-e2e BROWSER_PROVIDER=saucelabs + - JOB=e2e TEST_TARGET=jqlite BROWSER_PROVIDER=saucelabs + - JOB=e2e TEST_TARGET=jquery BROWSER_PROVIDER=saucelabs + global: + - CXX=g++-4.8 # node 4 likes the G++ v4.8 compiler + - SAUCE_USERNAME=angular-ci + - SAUCE_ACCESS_KEY=9b988f434ff8-fbca-8aa4-4ae3-35442987 + - LOGS_DIR=/tmp/angular-build/logs + - BROWSER_PROVIDER_READY_FILE=/tmp/browsersprovider-tunnel-ready + +# node 4 likes the G++ v4.8 compiler +# see https://docs.travis-ci.com/user/languages/javascript-with-nodejs#Node.js-v4-(or-io.js-v3)-compiler-requirements +addons: + apt: + sources: + - ubuntu-toolchain-r-test + packages: + - g++-4.8 + +install: + # Check the size of caches + - du -sh ./node_modules ./bower_components/ ./docs/bower_components/ || true + # - npm config set registry http://23.251.144.68 + # Disable the spinner, it looks bad on Travis + - npm config set spin false + # Log HTTP requests + - npm config set loglevel http + #- npm install -g npm@2.5 + # Install npm dependencies and ensure that npm cache is not stale + - npm install + +before_script: + - ./scripts/travis/before_build.sh + +script: + - ./scripts/travis/build.sh + +after_script: + - ./scripts/travis/tear_down_browser_provider.sh + - ./scripts/travis/print_logs.sh + +notifications: + webhooks: + urls: + - https://webhooks.gitter.im/e/d2120f3f2bb39a4531b2 + - http://104.197.9.155:8484/hubot/travis/activity #hubot-server + on_success: always # options: [always|never|change] default: always + on_failure: always # options: [always|never|change] default: always + on_start: always # default: false diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 000000000000..b30cfd9d67e7 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,11674 @@ + +# 1.5.0 ennoblement-facilitation (2016-02-05) + +## Bug Fixes + +- **$parse:** Copy `inputs` for expressions with expensive checks + ([37cb9ad4](https://github.com/angular/angular.js/commit/37cb9ad43619e2b14055b3105a954f4474cd933c)) +- **$rootScope:** Set no `this` context when calling helper functions for `$watch` + ([1c6edd41](https://github.com/angular/angular.js/commit/1c6edd416b4baad0c8b01148f429eb78e0ad7eaa)) +- **$route:** allow route reload to be prevented + ([2f0a50b5](https://github.com/angular/angular.js/commit/2f0a50b526c5d0263879d3e845866e1af6fd9791), + [#9824](https://github.com/angular/angular.js/issues/9824), [#13894](https://github.com/angular/angular.js/issues/13894)) +- **dateFilter, input:** fix Date parsing in IE/Edge when timezone offset contains `:` + ([622c4216](https://github.com/angular/angular.js/commit/622c42169699ec07fc6daaa19fe6d224e5d2f70e), + [#13880](https://github.com/angular/angular.js/issues/13880), [#13887](https://github.com/angular/angular.js/issues/13887)) +- **ngAnimateChildren:** make it compatible with `ngIf` + ([8aecf46a](https://github.com/angular/angular.js/commit/8aecf46ad2b3324dd504a8083a61d5bf18d870ed), + [#13865](https://github.com/angular/angular.js/issues/13865), [#13876](https://github.com/angular/angular.js/issues/13876)) +- **ngAria:** Apply ARIA attrs correctly + ([d06431e5](https://github.com/angular/angular.js/commit/d06431e5309bb0125588877451dc79b935808134), + [#13078](https://github.com/angular/angular.js/issues/13078), [#11374](https://github.com/angular/angular.js/issues/11374), [#11830](https://github.com/angular/angular.js/issues/11830), [#13483](https://github.com/angular/angular.js/issues/13483)) +- **select:** handle the corner case of adding options via a custom directive + ([ca5b27bd](https://github.com/angular/angular.js/commit/ca5b27bd0b5243a25730be672c35dfed8ca1d28d), + [#13874](https://github.com/angular/angular.js/issues/13874), [#13878](https://github.com/angular/angular.js/issues/13878)) + + +## Features + +- **$compile:** add one-way binding to the isolate scope definition + ([4ac23c0a](https://github.com/angular/angular.js/commit/4ac23c0ac59c269d65b7f78efec75d060121bd18), + [#13928](https://github.com/angular/angular.js/issues/13928), [#13854](https://github.com/angular/angular.js/issues/13854), [#12835](https://github.com/angular/angular.js/issues/12835), [#13900](https://github.com/angular/angular.js/issues/13900)) + + +## Breaking Changes + +- **ngAria:** due to [d06431e5](https://github.com/angular/angular.js/commit/d06431e5309bb0125588877451dc79b935808134), + Where appropriate, ngAria now applies ARIA to custom controls only, not native inputs. Because of this, support for `aria-multiline` on textareas has been removed. + + + +# 1.5.0-rc.2 controller-requisition (2016-01-28) + +## Deprecation Warning + +- The `ngTouch` module's `ngClick` directive has been deprecated and disabled by default. See the breaking +changes section for more information + +## Bug Fixes + +- **$compile:** + - properly denormalize templates when only one of the start/end symbols is different + ([8348365d](https://github.com/angular/angular.js/commit/8348365df9b9e2d4c9c8d5211e3424d4b9a29767), + [#13848](https://github.com/angular/angular.js/issues/13848)) + - handle boolean attributes in `@` bindings + ([db5e0ffe](https://github.com/angular/angular.js/commit/db5e0ffe124ac588f01ef0fe79efebfa72f5eec7), + [#13767](https://github.com/angular/angular.js/issues/13767), [#13769](https://github.com/angular/angular.js/issues/13769)) +- **$parse:** Preserve expensive checks when runnning $eval inside an expression + ([acfda102](https://github.com/angular/angular.js/commit/acfda1022d23ecaea34bbc8931588a0715b3ab03)) +- **dateFilter:** follow the CLDR on pattern escape sequences + ([1ab4e444](https://github.com/angular/angular.js/commit/1ab4e44443716c33cd857dcb1098d20580dbb0cc), + [#12839](https://github.com/angular/angular.js/issues/12839)) +- **ngAnimate:** + - cancel fallback timeout when animation ends normally + ([e9c406b2](https://github.com/angular/angular.js/commit/e9c406b2464614c9784f7324d8910180c81c38a7), + [#13787](https://github.com/angular/angular.js/issues/13787)) + - correctly handle `$animate.pin()` host elements + ([7700e2df](https://github.com/angular/angular.js/commit/7700e2df096cf50dfdf84841cab7e2d24d2eb96d), + [#13783](https://github.com/angular/angular.js/issues/13783)) + - properly cancel-out previously running class-based animations + ([20b8ece4](https://github.com/angular/angular.js/commit/20b8ece444408a64ac69f7b5d45ddb3af0c418a0), + [#10156](https://github.com/angular/angular.js/issues/10156), [#13822](https://github.com/angular/angular.js/issues/13822)) + - ensure that animate promises resolve when the document is hidden + ([52ea4110](https://github.com/angular/angular.js/commit/52ea4110d33b7de2845a698913682a03365aa074)) + - do not trigger animations if the document is hidden + ([a3a7afd3](https://github.com/angular/angular.js/commit/a3a7afd3aa70d981b0210088df53fa2cf68d3a3d), + [#12842](https://github.com/angular/angular.js/issues/12842), [#13776](https://github.com/angular/angular.js/issues/13776)) +- **ngSanitize:** blacklist the attribute `usemap` as it can be used as a security exploit + ([234053fc](https://github.com/angular/angular.js/commit/234053fc9ad90e0d05be7e8359c6af66be94c094)) +- **ngTouch:** deprecate ngClick and disable it by default + ([0dfc1dfe](https://github.com/angular/angular.js/commit/0dfc1dfebf26af7f951f301c4e3848ac46f05d7f), + [#4030](https://github.com/angular/angular.js/issues/4030), [#5307](https://github.com/angular/angular.js/issues/5307), [#6001](https://github.com/angular/angular.js/issues/6001), [#6432](https://github.com/angular/angular.js/issues/6432), [#7231](https://github.com/angular/angular.js/issues/7231), [#11358](https://github.com/angular/angular.js/issues/11358), [#12082](https://github.com/angular/angular.js/issues/12082), [#12153](https://github.com/angular/angular.js/issues/12153), [#12392](https://github.com/angular/angular.js/issues/12392), [#12545](https://github.com/angular/angular.js/issues/12545), [#12867](https://github.com/angular/angular.js/issues/12867), [#13213](https://github.com/angular/angular.js/issues/13213), [#13558](https://github.com/angular/angular.js/issues/13558), [#3296](https://github.com/angular/angular.js/issues/3296), [#3347](https://github.com/angular/angular.js/issues/3347), [#3447](https://github.com/angular/angular.js/issues/3447), [#3999](https://github.com/angular/angular.js/issues/3999), [#4428](https://github.com/angular/angular.js/issues/4428), [#6251](https://github.com/angular/angular.js/issues/6251), [#6330](https://github.com/angular/angular.js/issues/6330), [#7134](https://github.com/angular/angular.js/issues/7134), [#7935](https://github.com/angular/angular.js/issues/7935), [#9724](https://github.com/angular/angular.js/issues/9724), [#9744](https://github.com/angular/angular.js/issues/9744), [#9872](https://github.com/angular/angular.js/issues/9872), [#10211](https://github.com/angular/angular.js/issues/10211), [#10366](https://github.com/angular/angular.js/issues/10366), [#10918](https://github.com/angular/angular.js/issues/10918), [#11197](https://github.com/angular/angular.js/issues/11197), [#11261](https://github.com/angular/angular.js/issues/11261), [#11342](https://github.com/angular/angular.js/issues/11342), [#11577](https://github.com/angular/angular.js/issues/11577), [#12150](https://github.com/angular/angular.js/issues/12150), [#12317](https://github.com/angular/angular.js/issues/12317), [#12455](https://github.com/angular/angular.js/issues/12455), [#12734](https://github.com/angular/angular.js/issues/12734), [#13122](https://github.com/angular/angular.js/issues/13122), [#13272](https://github.com/angular/angular.js/issues/13272), [#13447](https://github.com/angular/angular.js/issues/13447)) + + +## Features + +- **$compile:** + - allow required controllers to be bound to the directive controller + ([56c3666f](https://github.com/angular/angular.js/commit/56c3666fe50955aa7d1c1b6159626f1c1cb34637), + [#6040](https://github.com/angular/angular.js/issues/6040), [#5893](https://github.com/angular/angular.js/issues/5893), [#13763](https://github.com/angular/angular.js/issues/13763)) + - allow directive definition property `require` to be an object + ([cd21216f](https://github.com/angular/angular.js/commit/cd21216ff7eb6d81fc9aa1d1ef994c3d8e046394), + [#8401](https://github.com/angular/angular.js/issues/8401), [#13763](https://github.com/angular/angular.js/issues/13763)) + - call `$onInit` on directive controllers after all sibling controllers have been constructed + ([3ffdf380](https://github.com/angular/angular.js/commit/3ffdf380c522cbf15a4ce5a8b08d21d40d5f8859), + [#13763](https://github.com/angular/angular.js/issues/13763)) +- **$locale:** include original locale ID in `$locale` + ([63492a02](https://github.com/angular/angular.js/commit/63492a02614a33a50cc28f9fdd73bae731352dd5), + [#13390](https://github.com/angular/angular.js/issues/13390)) +- **$resource:** add support for timeout in cancellable actions + ([d641901b](https://github.com/angular/angular.js/commit/d641901be6887cdd93dc678eb514366eb759d21e), + [#13824](https://github.com/angular/angular.js/issues/13824)) + + +## Performance Improvements + +- **$compile:** avoid needless overhead when wrapping text nodes + ([92e4801d](https://github.com/angular/angular.js/commit/92e4801d88fbe9b7ef719fd3d0175d85420e1cc4)) +- **ngAnimate:** speed up `areAnimationsAllowed` check + ([683bd92f](https://github.com/angular/angular.js/commit/683bd92f56990bf1bfeabf619d997716909ebf6b)) + + +## Breaking Changes + +- **ngSanitize:** due to [234053fc](https://github.com/angular/angular.js/commit/234053fc9ad90e0d05be7e8359c6af66be94c094), + +The `$sanitize` service will now remove instances of the `usemap` attribute from any elements passed to it. + +This attribute is used to reference another element by `name` or `id`. Since the `name` and `id` +attributes are already blacklisted, a sanitized `usemap` attribute could only reference unsanitized +content, which is a security risk. + +- **ngTouch:** due to [0dfc1dfe](https://github.com/angular/angular.js/commit/0dfc1dfebf26af7f951f301c4e3848ac46f05d7f), + +The `ngClick` override directive from the `ngTouch` module is **deprecated and disabled by default**. +This means that on touch-based devices, users might now experience a 300ms delay before a click event is fired. + +If you rely on this directive, you can still enable it with the `$touchProvider.ngClickOverrideEnabled()`method: + +```js +angular.module('myApp').config(function($touchProvider) { + $touchProvider.ngClickOverrideEnabled(true); +}); +``` + +Going forward, we recommend using [FastClick](https://github.com/ftlabs/fastclick) or perhaps one of the [Angular +3rd party touch-related modules](http://ngmodules.org/tags/touch) that provide similar functionality. + +Also note that modern browsers already remove the 300ms delay under some circumstances: +- Chrome and Firefox for Android remove the 300ms delay when the well-known `` is set +- Internet Explorer removes the delay when `touch-action` css property is set to `none` or `manipulation` +- Since iOs 8, Safari removes the delay on so-called "slow taps" + +See this [article by Telerik](http://developer.telerik.com/featured/300-ms-click-delay-ios-8/) for more info on the topic. + +**Note that this change does not affect the `ngSwipe` directive.** + + + +# 1.4.9 implicit-superannuation (2016-01-21) + + +## Bug Fixes + +- **Animation** + - ensure that animate promises resolve when the document is hidden + ([9a60408c](https://github.com/angular/angular.js/commit/9a60408c804a62a9517857bdb9a42182ab6769e3)) + - do not trigger animations if the document is hidden + ([09f6061a](https://github.com/angular/angular.js/commit/09f6061a8ee41cae4268e8d44d727d3bf52e22a9), + [#12842](https://github.com/angular/angular.js/issues/12842), [#13776](https://github.com/angular/angular.js/issues/13776)) + - only copy over the animation options once + ([2fc954d3](https://github.com/angular/angular.js/commit/2fc954d33a3a4c5d4f355be1e15a381664e02f1b), + [#13722](https://github.com/angular/angular.js/issues/13722), [#13578](https://github.com/angular/angular.js/issues/13578)) + - allow event listeners on document in IE + ([5ba4419e](https://github.com/angular/angular.js/commit/5ba4419e265ff34c6c23bf3533a3332c99c5f014), + [#13548](https://github.com/angular/angular.js/issues/13548), [#13696](https://github.com/angular/angular.js/issues/13696)) + - allow removing classes that are added by a running animation + ([6c4581fc](https://github.com/angular/angular.js/commit/6c4581fcb692b17295a41b8918c6038333e7bc3d), + [#13339](https://github.com/angular/angular.js/issues/13339), [#13380](https://github.com/angular/angular.js/issues/13380), [#13414](https://github.com/angular/angular.js/issues/13414), [#13472](https://github.com/angular/angular.js/issues/13472), [#13678](https://github.com/angular/angular.js/issues/13678)) + - do not use `event.timeStamp` anymore for time tracking + ([620a20d1](https://github.com/angular/angular.js/commit/620a20d1b3376d95f85004ffa494e36bb19a2e4d), + [#13494](https://github.com/angular/angular.js/issues/13494), [#13495](https://github.com/angular/angular.js/issues/13495)) + - ignore children without animation data when closing them + ([be01cebf](https://github.com/angular/angular.js/commit/be01cebfae9ca2383105e535820442b39a96b240), + [#11992](https://github.com/angular/angular.js/issues/11992), [#13424](https://github.com/angular/angular.js/issues/13424)) + - do not alter the provided options data + ([7a81e6fe](https://github.com/angular/angular.js/commit/7a81e6fe2db084172e34d509f0baad2b33a8722c), + [#13040](https://github.com/angular/angular.js/issues/13040), [#13175](https://github.com/angular/angular.js/issues/13175)) + - correctly handle `$animate.pin()` host elements + ([a985adfd](https://github.com/angular/angular.js/commit/a985adfdabd871f3f3f3ee59f371da50cd9611d9), + [#13783](https://github.com/angular/angular.js/issues/13783)) + - allow animations when pinned element is parent element + ([4cb8ac61](https://github.com/angular/angular.js/commit/4cb8ac61c7574ab4039852c358dd5946268b69fb), + [#13466](https://github.com/angular/angular.js/issues/13466)) + - allow enabled children to animate on disabled parents + ([6d85f24e](https://github.com/angular/angular.js/commit/6d85f24e2081d2a69c80697d90ebd45f228d9682), + [#13179](https://github.com/angular/angular.js/issues/13179), [#13695](https://github.com/angular/angular.js/issues/13695)) + - correctly access `minErr` + ([0c1b54f0](https://github.com/angular/angular.js/commit/0c1b54f04cf5bd7c1fe42ac49b4fbfdf35c60979)) + - ensure animate runner is the same with and without animations + ([937942f5](https://github.com/angular/angular.js/commit/937942f5ada6de1bdacdf0ba465f6f118c270119), + [#13205](https://github.com/angular/angular.js/issues/13205), [#13347](https://github.com/angular/angular.js/issues/13347)) + - remove animation end event listeners on close + ([d9157849](https://github.com/angular/angular.js/commit/d9157849df224a3a8d2e0bf03099d137f51499f6), + [#13672](https://github.com/angular/angular.js/issues/13672)) + - consider options.delay value for closing timeout + ([592bf516](https://github.com/angular/angular.js/commit/592bf516e50b9729e446d9aa01f4d9ebdd72d187), + [#13355](https://github.com/angular/angular.js/issues/13355), [#13363](https://github.com/angular/angular.js/issues/13363)) +- **$controller:** allow identifiers containing `$` + ([2563ff7b](https://github.com/angular/angular.js/commit/2563ff7ba92d84af978e7e4131253190d4d00c20), + [#13736](https://github.com/angular/angular.js/issues/13736)) +- **$http:** throw if url passed is not a string + ([c5bf9dae](https://github.com/angular/angular.js/commit/c5bf9daef6dfdb3e4a2942c21155a9f67d92e237), + [#12925](https://github.com/angular/angular.js/issues/12925), [#13444](https://github.com/angular/angular.js/issues/13444)) +- **$parse:** handle interceptors with `undefined` expressions + ([7bb2414b](https://github.com/angular/angular.js/commit/7bb2414bf6461aa45a983fd322ae875f81814cc4)) +- **$resource:** don't allow using promises as `timeout` and log a warning + ([47486524](https://github.com/angular/angular.js/commit/474865242c89ba3e8143f0cd52f8c292979ea730)) +- **formatNumber:** cope with large and small number corner cases + ([9c49eb13](https://github.com/angular/angular.js/commit/9c49eb131a6100d58c965d01fb08bcd319032229), + [#13394](https://github.com/angular/angular.js/issues/13394), [#8674](https://github.com/angular/angular.js/issues/8674), [#12709](https://github.com/angular/angular.js/issues/12709), [#8705](https://github.com/angular/angular.js/issues/8705), [#12707](https://github.com/angular/angular.js/issues/12707), [#10246](https://github.com/angular/angular.js/issues/10246), [#10252](https://github.com/angular/angular.js/issues/10252)) +- **input:** + - fix URL validation being too strict + ([6610ae81](https://github.com/angular/angular.js/commit/6610ae816f78ee8fc1080b93a55bf19e4ce48d3e), + [#13528](https://github.com/angular/angular.js/issues/13528), [#13544](https://github.com/angular/angular.js/issues/13544)) + - add missing chars to URL validation regex + ([2995b54a](https://github.com/angular/angular.js/commit/2995b54afdb9a3a2a81b0076a6ac0a9001041163), + [#13379](https://github.com/angular/angular.js/issues/13379), [#13460](https://github.com/angular/angular.js/issues/13460)) +- **isArrayLike:** recognize empty instances of an Array subclass + ([323f9ab7](https://github.com/angular/angular.js/commit/323f9ab73696f223c245ddefd62a769fe102615e), + [#13560](https://github.com/angular/angular.js/issues/13560), [#13708](https://github.com/angular/angular.js/issues/13708)) +- **ngInclude:** do not compile template if original scope is destroyed + ([9590bcf0](https://github.com/angular/angular.js/commit/9590bcf0620cd507a7795c55f9a6f4a48bfedbc1)) +- **ngOptions:** + - don't skip `optgroup` elements with `value === ''` + ([85e392f3](https://github.com/angular/angular.js/commit/85e392f3543ef5285c7e90e843af0ab522cb0531), + [#13487](https://github.com/angular/angular.js/issues/13487), [#13489](https://github.com/angular/angular.js/issues/13489)) + - don't `$dirty` multiple select after compilation + ([f163c905](https://github.com/angular/angular.js/commit/f163c90555774426ccb14752d089fc707cb4029c), + [#13211](https://github.com/angular/angular.js/issues/13211), [#13326](https://github.com/angular/angular.js/issues/13326)) +- **select:** re-define `ngModelCtrl.$render` in the `select` directive's postLink function + ([529b2507](https://github.com/angular/angular.js/commit/529b2507bdb4fcc22dfa0f7ab462c79fc78d1413), + [#13583](https://github.com/angular/angular.js/issues/13583), [#13583](https://github.com/angular/angular.js/issues/13583), [#13663](https://github.com/angular/angular.js/issues/13663)) + +## Minor Features + +- **ngLocale:** add support for standalone months + ([54c4041e](https://github.com/angular/angular.js/commit/54c4041ebc0cc4df70cf6996f43a6aaaf56d46bd), + [#3744](https://github.com/angular/angular.js/issues/3744), [#10247](https://github.com/angular/angular.js/issues/10247), [#12642](https://github.com/angular/angular.js/issues/12642), [#12844](https://github.com/angular/angular.js/issues/12844)) +- **ngMock:** add support for `$animate.closeAndFlush()` + ([512c0811](https://github.com/angular/angular.js/commit/512c08118786a419fabbd063fa17d224aba125cf)) + + +## Performance Improvements + +- **ngAnimate:** speed up `areAnimationsAllowed` check + ([2d3303dd](https://github.com/angular/angular.js/commit/2d3303ddda6330c4f45b381b6b17346f6cfe2d97)) + + +## Breaking Changes + +While we do not deem the following to be a real breaking change we are highlighting it here in the +changelog to ensure that it does not surprise anyone. + +- **$resource:** due to [47486524](https://github.com/angular/angular.js/commit/474865242c89ba3e8143f0cd52f8c292979ea730), + +**Possible breaking change** for users who updated their code to provide a `timeout` +promise for a `$resource` request in version v1.4.8. + +Up to v1.4.7 (included), using a promise as a timeout in `$resource`, would silently +fail (i.e. have no effect). + +In v1.4.8, using a promise as timeout would have the (buggy) behaviour described +in https://github.com/angular/angular.js/pull/12657#issuecomment-152108887. +(I.e. it will work as expected for the first time you resolve the promise and will +cancel all subsequent requests after that - one has to re-create the resource +class. This was not documented.) + +With this change, using a promise as timeout in v1.4.9 onwards is not allowed. +It will log a warning and ignore the timeout value. + +If you need support for cancellable `$resource` actions, you should upgrade to +version 1.5 or higher. + + + +# 1.5.0-rc.1 quantum-fermentation (2016-01-15) + + +## Features + +- **$compile:** + - Allow ES6 classes as controllers with `bindToController: true` + ([8955cfb6](https://github.com/angular/angular.js/commit/8955cfb6462f79a32caa641ffc002f1522f08220)) + - Allow ES6 classes as controllers with `bindToController: true` + ([b0248b78](https://github.com/angular/angular.js/commit/b0248b7894649aa1e083698c66d01679fa66d1c1)) +- **$compileProvider:** - allow registering components with the component() method + ([feeb19787ca6e23e15578a4d1319f1c33853290c](https://github.com/angular/angular.js/commit/feeb19787ca6e23e15578a4d1319f1c33853290c)) +- **component:** + - default controllerAs to `$ctrl` + ([d91cf167](https://github.com/angular/angular.js/commit/d91cf167960d47ce38fec0d33cab6119268623f0), + [#13664](https://github.com/angular/angular.js/issues/13664), [#13710](https://github.com/angular/angular.js/issues/13710)) + - disallow non-isolate scopes + ([f31c5a39](https://github.com/angular/angular.js/commit/f31c5a3924629795cd9169e69b9e20efd4a9d927), + [#13710](https://github.com/angular/angular.js/issues/13710)) + - allow `component()` helper to copy over custom annotations + ([90975db5](https://github.com/angular/angular.js/commit/90975db5f91dfe44fa5dc4542e92c68e0d425929), + [#13741](https://github.com/angular/angular.js/issues/13741)) +- **$injector:** support instantiating classes. + ([8b6b4282](https://github.com/angular/angular.js/commit/8b6b42827186e5e4eb7a56f6b824c560a5058bd2)) +- **ngMock:** add support for `$animate.closeAndFlush()` + ([e1def1b8](https://github.com/angular/angular.js/commit/e1def1b8fe543fde09abda076d66606027f7dbeb), + [#13005](https://github.com/angular/angular.js/issues/13005), [#13576](https://github.com/angular/angular.js/issues/13576), [#13707](https://github.com/angular/angular.js/issues/13707)) +- **ngMock.$componentController:** add helper to instantiate controllers for components + ([dd14e0c4](https://github.com/angular/angular.js/commit/dd14e0c44d2963d217cd4eb28f1ad6e6a643d63f), + [#13683](https://github.com/angular/angular.js/issues/13683), [#13711](https://github.com/angular/angular.js/issues/13711)) + + +## Bug Fixes + +- **$animate:** + - allow enabled children to animate on disabled parents + ([8b636033](https://github.com/angular/angular.js/commit/8b6360338dca4bb7d8656d556bd7fb209e5aae73), + [#13179](https://github.com/angular/angular.js/issues/13179), [#13695](https://github.com/angular/angular.js/issues/13695)) + - allow animations when pinned element is parent element + ([8f0b4825](https://github.com/angular/angular.js/commit/8f0b48259666c1496970d6ca90decb36d6fa3295), + [#13466](https://github.com/angular/angular.js/issues/13466)) + - correctly access minErr + ([bc41ad8a](https://github.com/angular/angular.js/commit/bc41ad8aa8fc41ff30e9f68220a7c7c5fe194478)) +- **$animateCss:** + - only (de)register listeners when events have been added + ([959f2bbb](https://github.com/angular/angular.js/commit/959f2bbb2d12c23a74902433c6247290d8f2fb89), + [#13514](https://github.com/angular/angular.js/issues/13514)) + - remove animation end event listeners on close + ([20604e7f](https://github.com/angular/angular.js/commit/20604e7fc4f69ecfafbd8d0c1fdc70d478075c3a), + [#10387](https://github.com/angular/angular.js/issues/10387)) + - respect transition styles already on the element + ([de9777d8](https://github.com/angular/angular.js/commit/de9777d8193531472df4b57fdeb6650d7f7c1846), + [#12656](https://github.com/angular/angular.js/issues/12656), [#13333](https://github.com/angular/angular.js/issues/13333)) +- **$compile:** + - add missing variable declaration + ([6cdbda7c](https://github.com/angular/angular.js/commit/6cdbda7cf1cfc1d49eb98d42d8e823e65bebb90d)) + - fix namespace detection for anchor elements + ([c9e6cf9b](https://github.com/angular/angular.js/commit/c9e6cf9be0d549fba234956f7e263f40d1bb1e76)) +- **component:** + - remove the ability to set the `restrict` option on `component()` helper + ([25bc5318](https://github.com/angular/angular.js/commit/25bc53180248bf5e8a6467c55d913cfa38fc7a3b), + [#13741](https://github.com/angular/angular.js/issues/13741)) + - use `false` as default value for `transclude` in `component()` helper + ([6a47c0d7](https://github.com/angular/angular.js/commit/6a47c0d75d0c6f0bfb3b5492d1f05ec900387744), + [#13566](https://github.com/angular/angular.js/issues/13566), [#13581](https://github.com/angular/angular.js/issues/13581)) + - allow passing template/templateUrl in array notation + ([99d601a0](https://github.com/angular/angular.js/commit/99d601a048ac2b82e2f74ae88c96773e5d1a7258)) +- **$controller:** allow identifiers containing `$` + ([4e1b36c2](https://github.com/angular/angular.js/commit/4e1b36c21686ad0ca4930d1d81f77a7d9cc35851), + [#13736](https://github.com/angular/angular.js/issues/13736)) +- **$injector:** workaround for MS Edge class detection + ([fabc6ab5](https://github.com/angular/angular.js/commit/fabc6ab5b01dc687aa8385da067752ba34da6524)) +- **$q:** make instanceof work for $q promises + ([b3ef5e08](https://github.com/angular/angular.js/commit/b3ef5e08528f5f1916876032700a016448fb196a)) +- **copy:** + - add support for ArrayBuffer, handle multiple references to ArrayBuffer + ([986647a9](https://github.com/angular/angular.js/commit/986647a968858121c1de472fc4913221dc8d339a)) + - add support for String/Boolean/Number object types + ([7b51243b](https://github.com/angular/angular.js/commit/7b51243be597900b1f765495dadfea5fccd2228e)) +- **input:** fix URL validation being too strict + ([e3be5d6e](https://github.com/angular/angular.js/commit/e3be5d6efaec6537ab530640c64f452aa1006fcb), + [#13528](https://github.com/angular/angular.js/issues/13528), [#13544](https://github.com/angular/angular.js/issues/13544)) +- **isArrayLike:** recognize empty instances of an Array subclass + ([93c7251f](https://github.com/angular/angular.js/commit/93c7251f5f40bdbe050c74130d90331613d968a2), + [#13560](https://github.com/angular/angular.js/issues/13560), [#13708](https://github.com/angular/angular.js/issues/13708)) +- **linky:** throw error if input is not a string + ([98c2db7f](https://github.com/angular/angular.js/commit/98c2db7f9c2d078a408576e722407d518c7ee10a), + [#13547](https://github.com/angular/angular.js/issues/13547), [#13693](https://github.com/angular/angular.js/issues/13693)) +- **ngAnimate:** + - only copy over the animation options once + ([d4fa3313](https://github.com/angular/angular.js/commit/d4fa3313088a03d15ccbf266583d6ecaa0d22241), + [#13722](https://github.com/angular/angular.js/issues/13722), [#13578](https://github.com/angular/angular.js/issues/13578)) + - allow event listeners on document in IE + ([e5cab951](https://github.com/angular/angular.js/commit/e5cab951f4e4969b092295b7f3ca7ec1d17eb9a6), + [#13548](https://github.com/angular/angular.js/issues/13548), [#13696](https://github.com/angular/angular.js/issues/13696)) + - allow removing classes that are added by a running animation + ([776972ed](https://github.com/angular/angular.js/commit/776972ed9c49a62f5ad7c6f207209bf0f0c900bb), + [#13339](https://github.com/angular/angular.js/issues/13339), [#13380](https://github.com/angular/angular.js/issues/13380), [#13414](https://github.com/angular/angular.js/issues/13414), [#13472](https://github.com/angular/angular.js/issues/13472), [#13678](https://github.com/angular/angular.js/issues/13678)) + - do not use event.timeStamp anymore for time tracking + ([e020b899](https://github.com/angular/angular.js/commit/e020b8993ec7b8e004c136ca40ea9bab02207dbf), + [#13494](https://github.com/angular/angular.js/issues/13494), [#13495](https://github.com/angular/angular.js/issues/13495)) +- **ngInclude:** do not compile template if original scope is destroyed + ([98776487](https://github.com/angular/angular.js/commit/98776487a04667aa36cb24088ead198bd03b607c)) +- **ngMock:** ignore empty javascript animations in $animate.closeAndFlush() + ([a801df71](https://github.com/angular/angular.js/commit/a801df719ea8b5996676d4e7a88a26a5ece471e7)) +- **ngOptions:** don't skip optgroup elements with value === '' + ([6858caf2](https://github.com/angular/angular.js/commit/6858caf251b16a52e73d62f65c7e9e26e1f199ae), + [#13487](https://github.com/angular/angular.js/issues/13487), [#13489](https://github.com/angular/angular.js/issues/13489)) +- **select:** re-define ngModelCtrl.$render in the select postLink fn + ([f7eab8d8](https://github.com/angular/angular.js/commit/f7eab8d8fe8cadecaee425f0db0c74e48619310c), + [#13583](https://github.com/angular/angular.js/issues/13583), [#13583](https://github.com/angular/angular.js/issues/13583), [#13663](https://github.com/angular/angular.js/issues/13663)) + + +## Breaking Changes + +- **$component**: +*These breaking changes affect only applications updating from previous 1.5 beta / rc versions* + + - Due to [d91cf167](https://github.com/angular/angular.js/commit/d91cf167960d47ce38fec0d33cab6119268623f0), +the default `controllerAs` value for components is now `$ctrl` (previously the name of the component was used). +To migrate, either set `controllerAs` to the component name, or change the property name in your templates +to `$ctrl` + + - Due to [25bc5318](https://github.com/angular/angular.js/commit/25bc5318), it is no longer possible to +set the `restrict` option on directives created via the `module.component()` helper. +All components are now element directives (`restrict: 'E'`). If you need a directive that is not an element then you must use the +`module.directive()` helper instead. + + - Due to [f31c5a39](https://github.com/angular/angular.js/commit/f31c5a3924629795cd9169e69b9e20efd4a9d927), +components are now always created with `scope: {}` (isolate scope). Previously, it was also possible to create components +with `scope: true` or `scope: false`. If your components rely on this scope configuration, you will have to +create a regular directive instead. + + - Due to [6a47c0d7](https://github.com/angular/angular.js/commit/6a47c0d75d0c6f0bfb3b5492d1f05ec900387744), +the `transclude` property is now `false` by default (previously `true`). If you created components that expected +transclusion then you must change your code to specify `transclude: true`. + +- **linky:** due to [98c2db7f](https://github.com/angular/angular.js/commit/98c2db7f9c2d078a408576e722407d518c7ee10a), + +Before this change, the filter assumed that the input (if not undefined/null) was of type 'string' +and that certain methods (such as `.match()`) would be available on it. Passing a non-string value +would most likely result in a not-very-useful error being thrown (trying to call a method that does +not exist) or in unexpected behavior (if the input happened to have the assumed methods). + +After this change, a proper (informative) error will be thrown. If you want to pass non-string +values through `linky`, you need to explicitly convert them to strings first. +Since input values could be initialized asynchronously, `undefined` or `null` will still be +returned unchanged (without throwing an error). + + + +# 1.5.0-rc.0 oblong-panoptikum (2015-12-09) + +This is the first Release Candidate for AngularJS 1.5.0. Please try upgrading your applications and +report any regressions or other issues you find as soon as possible. + +## Features + +- **$parse:** provide a mechanism to access the locals object, `$locals` + ([0ea53503](https://github.com/angular/angular.js/commit/0ea535035a3a1a992948490c3533bffb83235052)) + +- **$resource:** add proper support for cancelling requests, `$cancelRequest()` + ([98528be3](https://github.com/angular/angular.js/commit/98528be311b48269ba0e15ba4e3e2ad9b89693a9), + [#9332](https://github.com/angular/angular.js/issues/9332), [#13050](https://github.com/angular/angular.js/issues/13050), [#13058](https://github.com/angular/angular.js/issues/13058), [#13210](https://github.com/angular/angular.js/issues/13210)) + +- **ngAnimate:** provide ng-[event]-prepare class for structural animations + ([6e18b50a](https://github.com/angular/angular.js/commit/6e18b50a5b168848cc526081b0a2a16075ee44bd)) + +- **ngLocale:** add support for standalone months + ([96c73a06](https://github.com/angular/angular.js/commit/96c73a0672f0e46ae9285c482b057bd03ce135ba), + [#3744](https://github.com/angular/angular.js/issues/3744), [#10247](https://github.com/angular/angular.js/issues/10247), [#12642](https://github.com/angular/angular.js/issues/12642), [#12844](https://github.com/angular/angular.js/issues/12844)) + +- **ngMock:** destroy $rootScope after each test + ([b75c0d8d](https://github.com/angular/angular.js/commit/b75c0d8d0549261ece551210a11d8be48c3ab3cc), + [#13433](https://github.com/angular/angular.js/issues/13433)) + +- **ngTransclude:** don't overwrite the contents with an unfilled optional slot + ([0812af49](https://github.com/angular/angular.js/commit/0812af49bd4f4fad4067603ff64dbe720bd6e3e5), + [#13426](https://github.com/angular/angular.js/issues/13426)) + +- **ngView:** reference resolved locals in scope, `resolveAs: '$resolve'` + ([983b0598](https://github.com/angular/angular.js/commit/983b0598121a8c5a3a51a30120e114d7e3085d4d), + [#13400](https://github.com/angular/angular.js/issues/13400)) + + +## Bug Fixes + +- **$compile:** + - swap keys and values for transclude definition object + ([c3a26911](https://github.com/angular/angular.js/commit/c3a2691115b92536fb3d213d0ca16ac68cf32415), + [#13439](https://github.com/angular/angular.js/issues/13439)) + - include non-elements in default transclusion slot + ([df6fade6](https://github.com/angular/angular.js/commit/df6fade6e67cfbfb5295bab3703ba2054d48daa7)) + - support merging special attribute names in `replace` directives + ([a5ff651a](https://github.com/angular/angular.js/commit/a5ff651a59933c2c43b81642454ee458f98e1401), + [#13317](https://github.com/angular/angular.js/issues/13317), [#13318](https://github.com/angular/angular.js/issues/13318)) + +- **$http:** throw if url passed is not a string + ([6628b4f1](https://github.com/angular/angular.js/commit/6628b4f1e5835d997290881c6ba394547883a516), + [#12925](https://github.com/angular/angular.js/issues/12925), [#13444](https://github.com/angular/angular.js/issues/13444)) + +- **$parse:** + - prevent assignment on constructor properties + ([5a674f3b](https://github.com/angular/angular.js/commit/5a674f3bb9d1118d11b333e3b966c01a571c09e6), + [#13417](https://github.com/angular/angular.js/issues/13417)) + - handle interceptors with `undefined` expressions + ([4473b81c](https://github.com/angular/angular.js/commit/4473b81cdaf16c5509ac53d80b9bdfb0a7ac5f30)) + +- **$sanitize:** blacklist SVG `` elements + ([7a668cdd](https://github.com/angular/angular.js/commit/7a668cdd7d08a7016883eb3c671cbcd586223ae8), + [#13453](https://github.com/angular/angular.js/issues/13453)) + +- **formatNumber:** cope with large and small number corner cases + ([6a0686d4](https://github.com/angular/angular.js/commit/6a0686d434c41445c50b2d9669073802ede77b3b), + [#13394](https://github.com/angular/angular.js/issues/13394), [#8674](https://github.com/angular/angular.js/issues/8674), [#12709](https://github.com/angular/angular.js/issues/12709), [#8705](https://github.com/angular/angular.js/issues/8705), [#12707](https://github.com/angular/angular.js/issues/12707), [#10246](https://github.com/angular/angular.js/issues/10246), [#10252](https://github.com/angular/angular.js/issues/10252)) + +- **input:** add missing chars to URL validation regex + ([e4bb8387](https://github.com/angular/angular.js/commit/e4bb8387952069cca9da06bbc5c87ae576c2bf6f), + [#13379](https://github.com/angular/angular.js/issues/13379), [#13460](https://github.com/angular/angular.js/issues/13460)) + +- **ngAnimate:** + - consider options.delay value for closing timeout + ([7ffb2d3c](https://github.com/angular/angular.js/commit/7ffb2d3c17643303a51eb4e324c365af70fe3824), + [#13355](https://github.com/angular/angular.js/issues/13355), [#13363](https://github.com/angular/angular.js/issues/13363)) + - ensure animate runner is the same with and without animations + ([546a277d](https://github.com/angular/angular.js/commit/546a277d65a3e075178d9b6d7ea6abcebc4bc04b), + [#13205](https://github.com/angular/angular.js/issues/13205), [#13347](https://github.com/angular/angular.js/issues/13347)) + - ignore children without animation data when closing them + ([77419cf1](https://github.com/angular/angular.js/commit/77419cf19fe625b262e971d5453151c63ff52b34), + [#11992](https://github.com/angular/angular.js/issues/11992), [#13424](https://github.com/angular/angular.js/issues/13424)) + - do not alter the provided options data + ([193153c3](https://github.com/angular/angular.js/commit/193153c3d391338a859cb7788ef32a8af05fb920), + [#13040](https://github.com/angular/angular.js/issues/13040), [#13175](https://github.com/angular/angular.js/issues/13175)) + +- **ngMock:** clear out `$providerInjector` after each test + ([a72c12bd](https://github.com/angular/angular.js/commit/a72c12bd7052da9f60da74625409374342b50b73), + [#13397](https://github.com/angular/angular.js/issues/13397), [#13416](https://github.com/angular/angular.js/issues/13416)) + +- **ngOptions:** don't $dirty multiple select after compilation + ([c7a2028a](https://github.com/angular/angular.js/commit/c7a2028ab38cdfc4d956c50b6f41cbccef302165), + [#13211](https://github.com/angular/angular.js/issues/13211), [#13326](https://github.com/angular/angular.js/issues/13326)) + +- **ngTransclude:** + - don't replace existing content if no transcluded content exists + ([c3ae6ed7](https://github.com/angular/angular.js/commit/c3ae6ed78e145a9b0c13de7ef95852ba3c467551), + [#11839](https://github.com/angular/angular.js/issues/11839)) + - fix case where ngTransclude attribute value equals its key + ([7ddbc9aa](https://github.com/angular/angular.js/commit/7ddbc9aa35119154acb649e8c5096babc1d43476), + [#12934](https://github.com/angular/angular.js/issues/12934), [#13383](https://github.com/angular/angular.js/issues/13383)) + + +## Breaking Changes + +- **$compile:** due to [c3a26911](https://github.com/angular/angular.js/commit/c3a2691115b92536fb3d213d0ca16ac68cf32415), + +**This is only a breaking change to a feature that was added in beta 2. If you have not started +using multi-slot transclusion then this will not affect you.** + +The keys and values for the `transclude` map of the directive definition have been swapped around +to be more consistent with the other maps, such as `scope` and `bindToController`. + +Now the `key` is the slot name and the `value` is a normalized element selector. + + +- **$resource:** due to [98528be3](https://github.com/angular/angular.js/commit/98528be311b48269ba0e15ba4e3e2ad9b89693a9), + +Using a promise as `timeout` is no longer supported and will log a +warning. It never worked the way it was supposed to anyway. + +Before: + +```js +var deferred = $q.defer(); +var User = $resource('/api/user/:id', {id: '@id'}, { + get: {method: 'GET', timeout: deferred.promise} +}); + +var user = User.get({id: 1}); // sends a request +deferred.resolve(); // aborts the request + +// Now, we need to re-define `User` passing a new promise as `timeout` +// or else all subsequent requests from `someAction` will be aborted +User = $resource(...); +user = User.get({id: 2}); +``` + +After: + +```js +var User = $resource('/api/user/:id', {id: '@id'}, { + get: {method: 'GET', cancellable: true} +}); + +var user = User.get({id: 1}); // sends a request +user.$cancelRequest(); // aborts the request + +user = User.get({id: 2}); +``` + +- **$sanitize:** due to [7a668cdd](https://github.com/angular/angular.js/commit/7a668cdd7d08a7016883eb3c671cbcd586223ae8), + +The $sanitize service will now remove instances of the `` tag from the content passed to it. + +This element is used to import external SVG resources, which is a security risk as the `$sanitize` +service does not have access to the resource in order to sanitize it. + +- **ngView:** due to [983b0598](https://github.com/angular/angular.js/commit/983b0598121a8c5a3a51a30120e114d7e3085d4d), + +A new property to access route resolves is now available on the scope of the route. The default name +for this property is `$resolve`. If your scope already contains a property with this name then it +will be hidden or overwritten. + +In this case, you should choose a custom name for this property, that does not collide with other +properties on the scope, by specifying the `resolveAs` property on the route. + + +- **$parse:** due to [0ea53503](https://github.com/angular/angular.js/commit/0ea535035a3a1a992948490c3533bffb83235052), + +A new property to access all the locals for an expression is now available on the scope. This property +is `$locals`. + +* If `scope.$locals` already exists, the way to reference this property is now `this.$locals`. +* If the locals themselves include a property `$locals` then the way to reference that is now `$locals.$locals`. + + + +# 1.4.8 ice-manipulation (2015-11-19) + + +## Bug Fixes + +- **$animate:** ensure leave animation calls `close` callback + ([6bd6dbff](https://github.com/angular/angular.js/commit/6bd6dbff4961a601c03e9465442788781d329ba6), + [#12278](https://github.com/angular/angular.js/issues/12278), [#12096](https://github.com/angular/angular.js/issues/12096), [#13054](https://github.com/angular/angular.js/issues/13054)) +- **$cacheFactory:** check key exists before decreasing cache size count + ([2a5a52a7](https://github.com/angular/angular.js/commit/2a5a52a76ccf60c6e8c5d881e90e11a2666a6d3c), + [#12321](https://github.com/angular/angular.js/issues/12321), [#12329](https://github.com/angular/angular.js/issues/12329)) +- **$compile:** + - bind all directive controllers correctly when using `bindToController` + ([5d8861fb](https://github.com/angular/angular.js/commit/5d8861fb2f203e8a688b6044cbd1140cd79fd049), + [#11343](https://github.com/angular/angular.js/issues/11343), [#11345](https://github.com/angular/angular.js/issues/11345)) + - evaluate against the correct scope with bindToController on new scope + ([b9f7c453](https://github.com/angular/angular.js/commit/b9f7c453e00d6938106f414952f74d5e5fdcb993), + [#13021](https://github.com/angular/angular.js/issues/13021), [#13025](https://github.com/angular/angular.js/issues/13025)) + - fix scoping of transclusion directives inside replace directive + ([74da0340](https://github.com/angular/angular.js/commit/74da03407782d679951cd8f693860cea214f2580), + [#12975](https://github.com/angular/angular.js/issues/12975), [#12936](https://github.com/angular/angular.js/issues/12936), [#13244](https://github.com/angular/angular.js/issues/13244)) +- **$http:** apply `transformResponse` even when `data` is empty + ([c6909464](https://github.com/angular/angular.js/commit/c690946469e09cfe6b774e63dbe14ace92ce6cb7), + [#12976](https://github.com/angular/angular.js/issues/12976), [#12979](https://github.com/angular/angular.js/issues/12979)) +- **$location:** ensure `$locationChangeSuccess` fires even if URL ends with `#` + ([6f8ddb6d](https://github.com/angular/angular.js/commit/6f8ddb6d4329441e8d4a856978413aa9b9bd918f), + [#12175](https://github.com/angular/angular.js/issues/12175), [#13251](https://github.com/angular/angular.js/issues/13251)) +- **$parse:** evaluate once simple expressions only once + ([e4036824](https://github.com/angular/angular.js/commit/e403682444fa08af4f3491badf2f3a10d7595699), + [#12983](https://github.com/angular/angular.js/issues/12983), [#13002](https://github.com/angular/angular.js/issues/13002)) +- **$resource:** allow XHR request to be cancelled via a timeout promise + ([7170f9d9](https://github.com/angular/angular.js/commit/7170f9d9ca765c578f8d3eb4699860a9330a0a11), + [#12657](https://github.com/angular/angular.js/issues/12657), [#12675](https://github.com/angular/angular.js/issues/12675), [#10890](https://github.com/angular/angular.js/issues/10890), [#9332](https://github.com/angular/angular.js/issues/9332)) +- **$rootScope:** prevent IE9 memory leak when destroying scopes + ([87b0055c](https://github.com/angular/angular.js/commit/87b0055c80f40589c5bcf3765e59e872bcfae119), + [#10706](https://github.com/angular/angular.js/issues/10706), [#11786](https://github.com/angular/angular.js/issues/11786)) +- **Angular.js:** fix `isArrayLike` for unusual cases + ([70edec94](https://github.com/angular/angular.js/commit/70edec947c7b189694ae66b129568182e3369cab), + [#10186](https://github.com/angular/angular.js/issues/10186), [#8000](https://github.com/angular/angular.js/issues/8000), [#4855](https://github.com/angular/angular.js/issues/4855), [#4751](https://github.com/angular/angular.js/issues/4751), [#10272](https://github.com/angular/angular.js/issues/10272)) +- **isArrayLike:** handle jQuery objects of length 0 + ([d3da55c4](https://github.com/angular/angular.js/commit/d3da55c40f1e1ddceced5da51e364888ff9d82ff)) +- **jqLite:** + - deregister special `mouseenter` / `mouseleave` events correctly + ([22f66025](https://github.com/angular/angular.js/commit/22f66025db262417ebb78c1ce1f4d7058dca3fd3), + [#12795](https://github.com/angular/angular.js/issues/12795), [#12799](https://github.com/angular/angular.js/issues/12799)) + - ensure mouseenter works with svg elements on IE + ([c1f34e8e](https://github.com/angular/angular.js/commit/c1f34e8eeb5105767f6cbf4727b8c5664be2a261), + [#10259](https://github.com/angular/angular.js/issues/10259), [#10276](https://github.com/angular/angular.js/issues/10276)) +- **limitTo:** start at 0 if `begin` is negative and exceeds input length + ([4fc40bc9](https://github.com/angular/angular.js/commit/4fc40bc9320a1d5902e648b70fa79c7cf7e794c7), + [#12775](https://github.com/angular/angular.js/issues/12775), [#12781](https://github.com/angular/angular.js/issues/12781)) +- **merge:** + - ensure that jqlite->jqlite and DOM->DOM + ([2f8db1bf](https://github.com/angular/angular.js/commit/2f8db1bf01173b546a2868fc7b8b188c2383fbff)) + - clone elements instead of treating them like simple objects + ([838cf4be](https://github.com/angular/angular.js/commit/838cf4be3c671903796dbb69d95c0e5ac1516a06), + [#12286](https://github.com/angular/angular.js/issues/12286)) +- **ngAria:** don't add tabindex to radio and checkbox inputs + ([59f1f4e1](https://github.com/angular/angular.js/commit/59f1f4e19a02e6e6f4c41c15b0e9f3372d85cecc), + [#12492](https://github.com/angular/angular.js/issues/12492), [#13095](https://github.com/angular/angular.js/issues/13095)) +- **ngInput:** change URL_REGEXP to better match RFC3987 + ([cb51116d](https://github.com/angular/angular.js/commit/cb51116dbd225ccfdbc9a565a66a170e65d26331), + [#11341](https://github.com/angular/angular.js/issues/11341), [#11381](https://github.com/angular/angular.js/issues/11381)) +- **ngMock:** reset cache before every test + ([91b7cd9b](https://github.com/angular/angular.js/commit/91b7cd9b74d72a48d844c5c3e0e9dee03405e0ca), + [#13013](https://github.com/angular/angular.js/issues/13013)) +- **ngOptions:** + - skip comments and empty options when looking for options + ([0f58334b](https://github.com/angular/angular.js/commit/0f58334b7b9a9d3d6ff34e9754961b6f67731fae), + [#12190](https://github.com/angular/angular.js/issues/12190), [#13029](https://github.com/angular/angular.js/issues/13029), [#13033](https://github.com/angular/angular.js/issues/13033)) + - override select option registration to allow compilation of empty option + ([7b2ecf42](https://github.com/angular/angular.js/commit/7b2ecf42c697eb8d51a0f2d73b324bd900139e05), + [#11685](https://github.com/angular/angular.js/issues/11685), [#12972](https://github.com/angular/angular.js/issues/12972), [#12968](https://github.com/angular/angular.js/issues/12968), [#13012](https://github.com/angular/angular.js/issues/13012)) + + +## Performance Improvements + +- **$compile:** use static jquery data method to avoid creating new instances + ([55ad192e](https://github.com/angular/angular.js/commit/55ad192e4ab79295ab15ecaaf8f6b9e7932a0336)) +- **copy:** + - avoid regex in `isTypedArray` + ([19fab4a1](https://github.com/angular/angular.js/commit/19fab4a1d79d2445795273f1622344353cf4d104)) + - only validate/clear if the user specifies a destination + ([d1293540](https://github.com/angular/angular.js/commit/d1293540e13573eb9ea5f90730bb9c9710c345db), + [#12068](https://github.com/angular/angular.js/issues/12068)) +- **merge:** remove unnecessary wrapping of jqLite element + ([ce6a96b0](https://github.com/angular/angular.js/commit/ce6a96b0d76dd2e5ab2247ca3059d284575bc6f0), + [#13236](https://github.com/angular/angular.js/issues/13236)) + + +## Breaking Changes + + + +# 1.5.0-beta.2 effective-delegation (2015-11-17) + + +## Bug Fixes + +- **$animate:** ensure leave animation calls `close` callback + ([bfad2a4f](https://github.com/angular/angular.js/commit/bfad2a4f4ae71cfead61c112b0d2ab1fcadd39ee), + [#12278](https://github.com/angular/angular.js/issues/12278), [#12096](https://github.com/angular/angular.js/issues/12096), [#13054](https://github.com/angular/angular.js/issues/13054)) +- **$cacheFactory:** check key exists before decreasing cache size count + ([b9bed7d9](https://github.com/angular/angular.js/commit/b9bed7d9dadb4ba1a4186f2ae562f807b21bcf12), + [#12321](https://github.com/angular/angular.js/issues/12321), [#12329](https://github.com/angular/angular.js/issues/12329)) +- **$compile:** + - bind all directive controllers correctly when using `bindToController` + ([bd7b2177](https://github.com/angular/angular.js/commit/bd7b2177291697a665e4068501b3704200972467), + [1c13a4f4](https://github.com/angular/angular.js/commit/1c13a4f45ddc86805a96576b75c969ad577b6274) + [#11343](https://github.com/angular/angular.js/issues/11343), [#11345](https://github.com/angular/angular.js/issues/11345)) + - evaluate against the correct scope with bindToController on new scope + ([50557a6c](https://github.com/angular/angular.js/commit/50557a6cd329e8438fb5694d11e8a7d018142afe), + [#13021](https://github.com/angular/angular.js/issues/13021), [#13025](https://github.com/angular/angular.js/issues/13025)) + - fix scoping of transclusion directives inside a replace directive + ([1a98c0ee](https://github.com/angular/angular.js/commit/1a98c0ee346b718b9462da1abf4352a4605cbc7f), + [#12975](https://github.com/angular/angular.js/issues/12975), [#12936](https://github.com/angular/angular.js/issues/12936), [#13244](https://github.com/angular/angular.js/issues/13244)) +- **$http:** apply `transformResponse` even when `data` is empty + ([7c0731ed](https://github.com/angular/angular.js/commit/7c0731edb2f72bdf0efa186f641dab3b6aecc5d5), + [#12976](https://github.com/angular/angular.js/issues/12976), [#12979](https://github.com/angular/angular.js/issues/12979)) +- **$location:** ensure `$locationChangeSuccess` fires even if URL ends with `#` + ([4412fe23](https://github.com/angular/angular.js/commit/4412fe238f37f79a2017ee7b20ba089c0acd73e9), + [#12175](https://github.com/angular/angular.js/issues/12175), [#13251](https://github.com/angular/angular.js/issues/13251)) +- **$parse:** evaluate simple expressions in interpolations only once + ([1caf0b6b](https://github.com/angular/angular.js/commit/1caf0b6bee5781589e20f7a27a8c60e8b1b784f5), + [#12983](https://github.com/angular/angular.js/issues/12983), [#13002](https://github.com/angular/angular.js/issues/13002)) +- **$resource:** allow XHR request to be cancelled via a timeout promise + ([4fc73466](https://github.com/angular/angular.js/commit/4fc734665e5dddef26ed30a9d4f75632cd269481), + [#12657](https://github.com/angular/angular.js/issues/12657), [#12675](https://github.com/angular/angular.js/issues/12675), [#10890](https://github.com/angular/angular.js/issues/10890), [#9332](https://github.com/angular/angular.js/issues/9332)) +- **$rootScope:** prevent IE9 memory leak when destroying scopes + ([8fe781fb](https://github.com/angular/angular.js/commit/8fe781fbe7c42c64eb895c28d9fd5479b037d020), + [#10706](https://github.com/angular/angular.js/issues/10706), [#11786](https://github.com/angular/angular.js/issues/11786)) +- **Angular.js:** fix `isArrayLike` for unusual cases + ([2c8d87e0](https://github.com/angular/angular.js/commit/2c8d87e064dca99a49ed35d1db885b1f2e40dcf4), + [#10186](https://github.com/angular/angular.js/issues/10186), [#8000](https://github.com/angular/angular.js/issues/8000), [#4855](https://github.com/angular/angular.js/issues/4855), [#4751](https://github.com/angular/angular.js/issues/4751), [#10272](https://github.com/angular/angular.js/issues/10272)) +- **isArrayLike:** handle jQuery objects of length 0 + ([773efd08](https://github.com/angular/angular.js/commit/773efd0812097a89944c889c595485a5744326f6)) +- **jqLite:** + - deregister special `mouseenter` / `mouseleave` events correctly + ([f5aa2079](https://github.com/angular/angular.js/commit/f5aa207960e0df577284a06a4353e2b53b159589), + [#12795](https://github.com/angular/angular.js/issues/12795), [#12799](https://github.com/angular/angular.js/issues/12799)) + - ensure mouseenter works with svg elements on IE + ([941c1c35](https://github.com/angular/angular.js/commit/941c1c35f175c36171a8855323f086341ea55711), + [#10259](https://github.com/angular/angular.js/issues/10259), [#10276](https://github.com/angular/angular.js/issues/10276)) +- **limitTo:** start at 0 if `begin` is negative and exceeds input length + ([ecf93048](https://github.com/angular/angular.js/commit/ecf9304811a0fd54289a35b9c3b715a1d4447806), + [#12775](https://github.com/angular/angular.js/issues/12775), [#12781](https://github.com/angular/angular.js/issues/12781)) +- **merge:** + - ensure that jqlite->jqlite and DOM->DOM + ([75292a6c](https://github.com/angular/angular.js/commit/75292a6cb5e17d618902f7996e80eb3118eff7b0)) + - clone elements instead of treating them like simple objects + ([17715fa3](https://github.com/angular/angular.js/commit/17715fa3668b1fcabaedcd82e2e57b2a80e0a0c2), + [#12286](https://github.com/angular/angular.js/issues/12286)) +- **ngAria:** don't add tabindex to radio and checkbox inputs + ([662fb282](https://github.com/angular/angular.js/commit/662fb282c176ca00a85b6dec7af90446ea90f662), + [#12492](https://github.com/angular/angular.js/issues/12492), [#13095](https://github.com/angular/angular.js/issues/13095)) +- **ngInput:** change URL_REGEXP to better match RFC3987 + ([ffb6b2fb](https://github.com/angular/angular.js/commit/ffb6b2fb56d9ffcb051284965dd538629ea9687a), + [#11341](https://github.com/angular/angular.js/issues/11341), [#11381](https://github.com/angular/angular.js/issues/11381)) +- **ngMessage:** make ngMessage compatible with ngBind + ([4971ef12](https://github.com/angular/angular.js/commit/4971ef12d4c2c268cb8d26f90385dc96eba19db8), + [#8089](https://github.com/angular/angular.js/issues/8089), [#13074](https://github.com/angular/angular.js/issues/13074)) +- **ngMock:** reset cache before every test + ([fd83d372](https://github.com/angular/angular.js/commit/fd83d3724ad30a93254f08cb82f981eaddb5dbff), + [#13013](https://github.com/angular/angular.js/issues/13013)) +- **ngOptions:** + - skip comments and empty options when looking for options + ([395f3ec6](https://github.com/angular/angular.js/commit/395f3ec638f2ee77d22889823aa80898a6ce812d), + [#12190](https://github.com/angular/angular.js/issues/12190), [#13029](https://github.com/angular/angular.js/issues/13029), [#13033](https://github.com/angular/angular.js/issues/13033)) + - override select option registration to allow compilation of empty option + ([2fcfd75a](https://github.com/angular/angular.js/commit/2fcfd75a142200e1a4b1b7ed4fb588e3befcbd57), + [#11685](https://github.com/angular/angular.js/issues/11685), [#12972](https://github.com/angular/angular.js/issues/12972), [#12968](https://github.com/angular/angular.js/issues/12968), [#13012](https://github.com/angular/angular.js/issues/13012)) +- **orderByFilter:** throw error if input is not array-like + ([2a85a634](https://github.com/angular/angular.js/commit/2a85a634f86c84f15b411ce009a3515fca7ba580), + [#11255](https://github.com/angular/angular.js/issues/11255), [#11719](https://github.com/angular/angular.js/issues/11719)) + + +## Features + +- **$compile:** multiple transclusion via named slots + ([a4ada8ba](https://github.com/angular/angular.js/commit/a4ada8ba9c4358273575e16778e76446ad080054), + [#4357](https://github.com/angular/angular.js/issues/4357), [#12742](https://github.com/angular/angular.js/issues/12742), [#11736](https://github.com/angular/angular.js/issues/11736), [#12934](https://github.com/angular/angular.js/issues/12934)) +- **$injector:** allow specifying a decorator on $injector + ([29a05984](https://github.com/angular/angular.js/commit/29a05984fe46c2c18ca51404f07c866dd92d1eec)) +- **$templateRequest:** support configuration of $http options + ([b2fc39d2](https://github.com/angular/angular.js/commit/b2fc39d2ddac64249b4f2961ee18b878a1e98251), + [#13188](https://github.com/angular/angular.js/issues/13188), [#11868](https://github.com/angular/angular.js/issues/11868), [#6860](https://github.com/angular/angular.js/issues/6860)) +- **Module:** add helper method, `component(...)` for creating component directives + ([54e81655](https://github.com/angular/angular.js/commit/54e816552f20e198e14f849cdb2379fed8570c1a), + [#10007](https://github.com/angular/angular.js/issues/10007), [#12933](https://github.com/angular/angular.js/issues/12933)) +- **linky:** add support for custom attributes + ([06f002b1](https://github.com/angular/angular.js/commit/06f002b161f61079933d482668440d8649fd84fc), + [#12558](https://github.com/angular/angular.js/issues/12558), [#13061](https://github.com/angular/angular.js/issues/13061)) +- **ngAnimate:** introduce ngAnimateSwap directive + ([78297d25](https://github.com/angular/angular.js/commit/78297d252de7c80f73ecf9e291ed71bd52578361)) +- **ngMock:** + - add expectRoute and whenRoute shortcuts with colon param matching + ([d67e999d](https://github.com/angular/angular.js/commit/d67e999dfbdf47b79fdb3830a04f4f4010a98b98), + [#12406](https://github.com/angular/angular.js/issues/12406)) + - invoke nested calls to `module()` immediately + ([51a27c0f](https://github.com/angular/angular.js/commit/51a27c0f1ad6cd8d3e33ab0d71de22c1627c7ec3), + [#12887](https://github.com/angular/angular.js/issues/12887)) + + +## Performance Improvements + +- **$compile:** use static jquery data method to avoid creating new instances + ([9b90c32f](https://github.com/angular/angular.js/commit/9b90c32f31fd56e348539674128acec6536cd846)) +- **$interpolate:** provide a simplified result for constant expressions + ([cf83b4f4](https://github.com/angular/angular.js/commit/cf83b4f445d3a1fc18fc140e65e670754401d50b)) +- **copy:** + - avoid regex in `isTypedArray` + ([c8768d12](https://github.com/angular/angular.js/commit/c8768d12f2f0b31f9ac971aeac6d2c17c9ff3db5)) + - only validate/clear if the user specifies a destination + ([33c67ce7](https://github.com/angular/angular.js/commit/33c67ce785cf8be7f0c294b3942ca4a337c5759d), + [#12068](https://github.com/angular/angular.js/issues/12068)) +- **merge:** remove unnecessary wrapping of jqLite element + ([4daafd3d](https://github.com/angular/angular.js/commit/4daafd3dbe6a80d578f5a31df1bb99c77559543e), + [#13236](https://github.com/angular/angular.js/issues/13236)) + + +## Breaking Changes + +- **ngMessage:** due to [4971ef12](https://github.com/angular/angular.js/commit/4971ef12d4c2c268cb8d26f90385dc96eba19db8), + +ngMessage is now compiled with a priority of 1, which means directives +on the same element as ngMessage with a priority lower than 1 will +be applied when ngMessage calls the $transclude function. +Previously, they were applied during the initial compile phase and were +passed the comment element created by the transclusion of ngMessage. +To restore this behavior, custom directives need to have +their priority increased to at least "1". + +- **orderByFilter:** due to [2a85a634](https://github.com/angular/angular.js/commit/2a85a634f86c84f15b411ce009a3515fca7ba580), + +Previously, an non array-like input would pass through the orderBy filter unchanged. +Now, an error is thrown. This can be worked around by converting an object +to an array, either manually or using a filter such as +https://github.com/petebacondarwin/angular-toArrayFilter. +(`null` and `undefined` still pass through without an error, in order to +support asynchronous loading of resources.) + + + + +# 1.5.0-beta.1 dense-dispersion (2015-09-29) + + +## Bug Fixes + +- **$compile:** + - use createMap() for $$observe listeners when initialized from attr interpolation + ([76c2491a](https://github.com/angular/angular.js/commit/76c2491a316d6b296c721227529fcb09087d369a), + [#10446](https://github.com/angular/angular.js/issues/10446)) + - properly sanitize xlink:href attribute interpolation + ([f33ce173](https://github.com/angular/angular.js/commit/f33ce173c90736e349cf594df717ae3ee41e0f7a), + [#12524](https://github.com/angular/angular.js/issues/12524)) +- **$parse:** + - fix typo in error message ("assing" -> "assign") + ([70dac5ae](https://github.com/angular/angular.js/commit/70dac5ae82ffe9c6250681274905583747523b5d), + [#12940](https://github.com/angular/angular.js/issues/12940)) + - block assigning to fields of a constructor + ([e1f4f23f](https://github.com/angular/angular.js/commit/e1f4f23f781a79ae8a4046b21130283cec3f2917), + [#12860](https://github.com/angular/angular.js/issues/12860)) + - do not convert to string computed properties multiple times + ([20cf7d5e](https://github.com/angular/angular.js/commit/20cf7d5e3a0af766b1929e24794859c79439351c)) +- **$sanitize:** + - strip urls starting with 'unsafe:' as opposed to 'unsafe' + ([a4dfa4d0](https://github.com/angular/angular.js/commit/a4dfa4d061fd2f6baf9821f0863dcce7888232ab), + [#12524](https://github.com/angular/angular.js/issues/12524)) + - add mXSS protection + ([bc0d8c4e](https://github.com/angular/angular.js/commit/bc0d8c4eea9a34bff5e29dd492dcdd668251be40), + [#12524](https://github.com/angular/angular.js/issues/12524)) + - support void elements, fixups, remove dead code, typos + ([94207f8f](https://github.com/angular/angular.js/commit/94207f8fb6ee8fe26fe18657f6b5aca6def99605), + [#12524](https://github.com/angular/angular.js/issues/12524)) +- **filters:** ensure `formatNumber` observes i18n decimal separators + ([658a865c](https://github.com/angular/angular.js/commit/658a865c5b2580eed53b340e7394945cd76e2260), + [#10342](https://github.com/angular/angular.js/issues/10342), [#12850](https://github.com/angular/angular.js/issues/12850)) +- **injector:** support arrow functions with no parenthesis + ([03726f7f](https://github.com/angular/angular.js/commit/03726f7fbd5d71c0604b8dd40e97cb2fb0fb777f), + [#12890](https://github.com/angular/angular.js/issues/12890)) +- **input:** remove workaround for Firefox bug + ([b366f035](https://github.com/angular/angular.js/commit/b366f0352abccfe4c4868b5a9e8c0b88659bd1ee)) +- **ngAnimate:** + - ensure anchoring uses body as a container when needed + ([240d5896](https://github.com/angular/angular.js/commit/240d5896ecdfac2351f9bd6147b52de52c0b7608), + [#12872](https://github.com/angular/angular.js/issues/12872)) + - callback detection should only use RAF when necessary + ([8b27c3f0](https://github.com/angular/angular.js/commit/8b27c3f064b34532ba99d709cadf09fc4c0cbeab)) +- **ngMessages:** prevent race condition with ngAnimate + ([8366622b](https://github.com/angular/angular.js/commit/8366622bed009d2cad7d0cff28b9c1e48bfbd4e1), + [#12856](https://github.com/angular/angular.js/issues/12856), [#12903](https://github.com/angular/angular.js/issues/12903)) +- **ngOptions:** + - skip comments when looking for option elements + ([7f3f3dd3](https://github.com/angular/angular.js/commit/7f3f3dd3ebcc44711600ac292af54c411c3c705f), + [#12190](https://github.com/angular/angular.js/issues/12190)) + - prevent frozen select ui in IE + ([42c97c5d](https://github.com/angular/angular.js/commit/42c97c5db5921e9e5447fb32bdae1f48da42844f), + [#11314](https://github.com/angular/angular.js/issues/11314), [#11795](https://github.com/angular/angular.js/issues/11795)) + - allow falsy values as option group identifiers + ([b71d7c3f](https://github.com/angular/angular.js/commit/b71d7c3f3c04e65b02d88b33c22dd90ae3cdfc27), + [#7015](https://github.com/angular/angular.js/issues/7015), [#7024](https://github.com/angular/angular.js/issues/7024), [#12888](https://github.com/angular/angular.js/issues/12888)) + - throw if ngModel is not present + ([ded25187](https://github.com/angular/angular.js/commit/ded2518756d4409fdfda0d4af243f2125bea01b5), + [#7047](https://github.com/angular/angular.js/issues/7047), [#12840](https://github.com/angular/angular.js/issues/12840)) +- **ngResource:** encode `&` in URL query param values + ([1c97a605](https://github.com/angular/angular.js/commit/1c97a6057bc013262be761bca5e5c22224c4bbf8), + [#12201](https://github.com/angular/angular.js/issues/12201)) + + +## Features + +- **$animateCss:** add support for temporary styles via `cleanupStyles` + ([9f67da62](https://github.com/angular/angular.js/commit/9f67da625293441e27559ebde7503cc63408a95c), + [#12930](https://github.com/angular/angular.js/issues/12930)) +- **$http:** add `$xhrFactory` service to enable creation of custom xhr objects + ([106f90aa](https://github.com/angular/angular.js/commit/106f90aafa0fa5a81ad7af7ffc9d1e00ab97ffef), + [#2318](https://github.com/angular/angular.js/issues/2318), [#9319](https://github.com/angular/angular.js/issues/9319), [#12159](https://github.com/angular/angular.js/issues/12159)) +- **$injector:** add strictDi property to $injector instance + ([79577c5d](https://github.com/angular/angular.js/commit/79577c5d316c7bf0204d7d1747ddc5b15bfe2955), + [#11728](https://github.com/angular/angular.js/issues/11728), [#11734](https://github.com/angular/angular.js/issues/11734)) +- **$sanitize:** make svg support an opt-in + ([181fc567](https://github.com/angular/angular.js/commit/181fc567d873df065f1e84af7225deb70a8d2eb9), + [#12524](https://github.com/angular/angular.js/issues/12524)) +- **ngModel:** provide ng-empty and ng-not-empty CSS classes + ([630280c7](https://github.com/angular/angular.js/commit/630280c7fb04a83208d09c97c2efb81be3a3db74), + [#10050](https://github.com/angular/angular.js/issues/10050), [#12848](https://github.com/angular/angular.js/issues/12848)) + + +## Performance Improvements + +- **$compile:** Lazily compile the `transclude` function + ([652b83eb](https://github.com/angular/angular.js/commit/652b83eb226131d131a44453520a569202aa4aac)) + + +## Breaking Changes + +- **$sanitize:** due to [181fc567](https://github.com/angular/angular.js/commit/181fc567d873df065f1e84af7225deb70a8d2eb9), + The svg support in is now an opt-in option + +Applications that depend on this option can use to turn the option back on, +but while doing so, please read the warning provided in the documentation for +information on preventing click-hijacking attacks when this option is turned on. + +- **ngOptions:** due to [b71d7c3f](https://github.com/angular/angular.js/commit/b71d7c3f3c04e65b02d88b33c22dd90ae3cdfc27), + +If your data contains falsy values (`''`, `0`, `false` and `null`) for option groups, then these +options will now be placed into option groups. Previously all of these falsy values were treated as +the option not being a member of a group. + +Only option groups that are `undefined` will result in the option being put in no group. +If you have data that contains falsy values that should not be used as groups then you must filter +the values before passing them to `ngOptions` converting falsy values to `undefined`. + +- **ngOptions:** due to [ded25187](https://github.com/angular/angular.js/commit/ded2518756d4409fdfda0d4af243f2125bea01b5), + +`ngOptions` will now throw if `ngModel` is not present on the `select` +element. Previously, having no `ngModel` let `ngOptions` silently +fail, which could lead to hard to debug errors. The change should +therefore not affect any applications, as it simply makes the +requirement more strict and alerts the developer explicitly. + + + +# 1.4.7 dark-luminescence (2015-09-29) + + +## Bug Fixes + +- **$compile:** use createMap() for $$observe listeners when initialized from attr interpolation + ([5a98e806](https://github.com/angular/angular.js/commit/5a98e806ef3c59916bb4668268125610b11effe8), + [#10446](https://github.com/angular/angular.js/issues/10446)) +- **$parse:** + - block assigning to fields of a constructor + ([a7f3761e](https://github.com/angular/angular.js/commit/a7f3761eda5309f76b73c6fb1d3173a270112899), + [#12860](https://github.com/angular/angular.js/issues/12860)) + - do not convert to string computed properties multiple times + ([698af191](https://github.com/angular/angular.js/commit/698af191ded2465ca4e0f97959b75fede5a531ab)) +- **filters:** ensure `formatNumber` observes i18n decimal separators + ([4994acd2](https://github.com/angular/angular.js/commit/4994acd26e582eec8a92b139bfc09ca79a9b8835), + [#10342](https://github.com/angular/angular.js/issues/10342), [#12850](https://github.com/angular/angular.js/issues/12850)) +- **jqLite:** properly handle dash-delimited node names in `jqLiteBuildFragment` + ([cdd1227a](https://github.com/angular/angular.js/commit/cdd1227a308edd34d31b67f338083b6e0c4c0db9), + [#10617](https://github.com/angular/angular.js/issues/10617), [#12759](https://github.com/angular/angular.js/issues/12759)) +- **ngAnimate:** + - ensure anchoring uses body as a container when needed + ([9d3704ca](https://github.com/angular/angular.js/commit/9d3704ca467081f16b71b011eb50c53d5cdb2f34), + [#12872](https://github.com/angular/angular.js/issues/12872)) + - callback detection should only use RAF when necessary + ([fa8c399f](https://github.com/angular/angular.js/commit/fa8c399fadc30b78710868fe59d2930fdc17c7a5)) +- **ngMessages:** prevent race condition with ngAnimate + ([7295c60f](https://github.com/angular/angular.js/commit/7295c60ffb9f2e4f32043c538ace740b187f565a), + [#12856](https://github.com/angular/angular.js/issues/12856), [#12903](https://github.com/angular/angular.js/issues/12903)) +- **ngOptions:** + - skip comments when looking for option elements + ([68d4dc5b](https://github.com/angular/angular.js/commit/68d4dc5b71b23e4c7c2650e6da3d7200de99f1ae), + [#12190](https://github.com/angular/angular.js/issues/12190)) + - prevent frozen select ui in IE + ([dbc69851](https://github.com/angular/angular.js/commit/dbc698517ff620b3a6279f65d4a9b6e3c15087b9), + [#11314](https://github.com/angular/angular.js/issues/11314), [#11795](https://github.com/angular/angular.js/issues/11795)) + + +## Features + +- **$animateCss:** add support for temporary styles via `cleanupStyles` + ([e52d731b](https://github.com/angular/angular.js/commit/e52d731bfd1fbb6c616125fbde2fb365722254b7), + [#12930](https://github.com/angular/angular.js/issues/12930)) +- **$http:** add `$xhrFactory` service to enable creation of custom xhr objects + ([7a413df5](https://github.com/angular/angular.js/commit/7a413df5e47e04e20a1c93d35922050bbcbfb492), + [#2318](https://github.com/angular/angular.js/issues/2318), [#9319](https://github.com/angular/angular.js/issues/9319), [#12159](https://github.com/angular/angular.js/issues/12159)) + + +## Breaking Changes + + + +# 1.3.20 shallow-translucence (2015-09-29) + + +## Bug Fixes + +- **$parse:** do not convert to string computed properties multiple times + ([d434f3db](https://github.com/angular/angular.js/commit/d434f3db53d6209eb140b904e83bbde401686c16)) + + +## Breaking Changes + + + +# 1.2.29 ultimate-deprecation (2015-09-29) + + +## Bug Fixes + +- **$browser:** prevent infinite digests when clearing the hash of a url + ([9845cee6](https://github.com/angular/angular.js/commit/9845cee63eda3ad5024622c792c5e745b59ec5cb), + [#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)) +- **$compile:** workaround for IE11 MutationObserver + ([fccce96d](https://github.com/angular/angular.js/commit/fccce96d444f442ba5ecfb67201505a445d0c209), + [#11781](https://github.com/angular/angular.js/issues/11781), [#12613](https://github.com/angular/angular.js/issues/12613)) +- **$location:** strip off empty hash segments when comparing + ([e81b2f72](https://github.com/angular/angular.js/commit/e81b2f726cacd08bcf91500183a7ea3f71961718), + [#9635](https://github.com/angular/angular.js/issues/9635), [#10748](https://github.com/angular/angular.js/issues/10748)) +- **$parse:** + - do not convert to string computed properties multiple times + ([afb65c11](https://github.com/angular/angular.js/commit/afb65c11e5e3425f8431ad5b82308ff6b8ecbc64)) + - throw error when accessing a restricted property indirectly + ([e6cbd4fa](https://github.com/angular/angular.js/commit/e6cbd4faa211b2c0c8879c255e3194fb0717dcec), + [#12833](https://github.com/angular/angular.js/issues/12833)) +- **ngAnimate:** ensure that minified repaint code isn't removed + ([b041b664](https://github.com/angular/angular.js/commit/b041b664752e34a42bbc65e02bf0009f0836c50c), + [#9936](https://github.com/angular/angular.js/issues/9936)) + + +## Breaking Changes + + + +# 1.4.6 multiplicative-elevation (2015-09-17) + + +## Bug Fixes + +- **$animate:** invalid CSS class names should not break subsequent elements + ([c3a654b7](https://github.com/angular/angular.js/commit/c3a654b7c8e585b8fb9f90ece10ef54d19fd74c8), + [#12674](https://github.com/angular/angular.js/issues/12674), [#12725](https://github.com/angular/angular.js/issues/12725)) +- **$browser:** handle async updates to location + ([8d39bd8a](https://github.com/angular/angular.js/commit/8d39bd8abf423517b5bff70137c2a29e32bff76d), + [#12241](https://github.com/angular/angular.js/issues/12241), [#12819](https://github.com/angular/angular.js/issues/12819)) +- **$http:** propagate status -1 for timed out requests + ([38520a1a](https://github.com/angular/angular.js/commit/38520a1a73fffb6cfeffc7edfcab5be33e1619eb), + [#4491](https://github.com/angular/angular.js/issues/4491), [#8756](https://github.com/angular/angular.js/issues/8756)) +- **$httpBackend:** send `null` when post-data is undefined + ([6f39f108](https://github.com/angular/angular.js/commit/6f39f1082773921e79b48a78aa6cd8a7d1921da7), + [#12141](https://github.com/angular/angular.js/issues/12141), [#12739](https://github.com/angular/angular.js/issues/12739)) +- **$parse:** + - throw error when accessing a restricted property indirectly + ([b2f8b0b8](https://github.com/angular/angular.js/commit/b2f8b0b875dbabf7bba0ba6e9bd553c7a8b910d0), + [#12833](https://github.com/angular/angular.js/issues/12833)) + - `assign` returns the new value + ([7d2c6eee](https://github.com/angular/angular.js/commit/7d2c6eeef8ad61690737b6298c94f066082eff58), + [#12675](https://github.com/angular/angular.js/issues/12675), [#12708](https://github.com/angular/angular.js/issues/12708)) +- **angular.copy:** support copying XML nodes + ([122ab074](https://github.com/angular/angular.js/commit/122ab074cac6401ecded51fa031af139360f40aa), + [#5429](https://github.com/angular/angular.js/issues/5429), [#12786](https://github.com/angular/angular.js/issues/12786)) +- **form, ngModel:** correctly notify parent form when children are added + ([c6110e8b](https://github.com/angular/angular.js/commit/c6110e8b08c7e9bb2b7da5ecc5c42d1a834ea92d)) +- **input:** ignore min/max if they are empty on all input types + ([544001f5](https://github.com/angular/angular.js/commit/544001f5a331de06961c0201d69ecc92893abd0b), + [#12363](https://github.com/angular/angular.js/issues/12363), [#12785](https://github.com/angular/angular.js/issues/12785)) +- **ngAnimateMock:** $animate.flush should work for looping animations + ([472d076c](https://github.com/angular/angular.js/commit/472d076cca2ffb99bd87d3c026ef69afc713268d)) +- **ngAria:** clean up tabindex usage + ([f48244ce](https://github.com/angular/angular.js/commit/f48244ce5e6d11637aab97af1aff3430bda12429), + [#11500](https://github.com/angular/angular.js/issues/11500)) +- **ngJq:** properly detect when `ng-jq` is empty + ([19ecdb54](https://github.com/angular/angular.js/commit/19ecdb54bf85fc4e7bd3cde453aa6843f869a1ab), + [#12741](https://github.com/angular/angular.js/issues/12741)) +- **ngModel:** + - remove reference to parentForm from removed control + ([290b5049](https://github.com/angular/angular.js/commit/290b5049c2de4aa0d6ba8eea624bc6dce027b197), + [#12263](https://github.com/angular/angular.js/issues/12263)) + - let aliased validator directives work on any element + ([43769fb6](https://github.com/angular/angular.js/commit/43769fb676ae904852582a2c88a5523f0b9f58fc), + [#12158](https://github.com/angular/angular.js/issues/12158), [#12658](https://github.com/angular/angular.js/issues/12658)) +- **ngRepeat:** add support to iterate an object's properties even if it does not inherit from Object + ([7ea2c7f3](https://github.com/angular/angular.js/commit/7ea2c7f36ef854391df3f6b127ad42a2d5cbf1a3), + [#9964](https://github.com/angular/angular.js/issues/9964)) +- **rootScope:** add support for watchCollection to watch an object which does not inherit from Object + ([20fb626b](https://github.com/angular/angular.js/commit/20fb626b78ed8fbd02f59f5b26df9387a2a6ea0e), + [#9964](https://github.com/angular/angular.js/issues/9964)) +- **select:** update option if interpolated value attribute changes + ([82b0929e](https://github.com/angular/angular.js/commit/82b0929e4ea0ae087f766f2ee26f9570c8a3c8ac), + [#12005](https://github.com/angular/angular.js/issues/12005), [#12582](https://github.com/angular/angular.js/issues/12582)) +- **toDebugString:** change replacement string + ([0ca8b1df](https://github.com/angular/angular.js/commit/0ca8b1df201044019596db7173d784aeebdea0a7), + [#10103](https://github.com/angular/angular.js/issues/10103)) + + +## Performance Improvements + +- **Angular:** only create new collection in getBlockNodes if the block has changed + ([0202663e](https://github.com/angular/angular.js/commit/0202663e938a477cd86145bb158bf7a02efd8fb5), + [#9899](https://github.com/angular/angular.js/issues/9899)) + + + + + +# 1.3.19 glutinous-shriek (2015-09-15) + +## Bug Fixes + +- **$http:** propagate status -1 for timed out requests + ([f13055a0](https://github.com/angular/angular.js/commit/f13055a0a53a39b160448713a5617edee6042801), + [#4491](https://github.com/angular/angular.js/issues/4491), [#8756](https://github.com/angular/angular.js/issues/8756)) +- **$location:** don't crash if navigating outside the app base + ([623ce1ad](https://github.com/angular/angular.js/commit/623ce1ad2cf68024719c5cae5d682d00195df30c), + [#11667](https://github.com/angular/angular.js/issues/11667)) +- **$parse:** throw error when accessing a restricted property indirectly + ([ec98c94c](https://github.com/angular/angular.js/commit/ec98c94ccbfc97b655447956738d5f6ff98b2f33), + [#12833](https://github.com/angular/angular.js/issues/12833)) +- **ngModel:** validate pattern against the viewValue + ([274e9353](https://github.com/angular/angular.js/commit/274e93537ed4e95aefeacea48909eb334894f0ac), + [#12344](https://github.com/angular/angular.js/issues/12344)) + + +## Features + +- **ngAnimate:** introduce `$animate.flush` for unit testing + ([f98e0384](https://github.com/angular/angular.js/commit/f98e038418f7367b2373adcf4887f64a8e8bdcb0)) + + +## Possible Breaking Changes + +- **ngModel:** due to [274e9353](https://github.com/angular/angular.js/commit/274e93537ed4e95aefeacea48909eb334894f0ac), + + +The `ngPattern` and `pattern` directives will validate the regex +against the `viewValue` of `ngModel`, i.e. the value of the model +before the $parsers are applied. Previously, the modelValue +(the result of the $parsers) was validated. + +This fixes issues where `input[date]` and `input[number]` cannot +be validated because the viewValue string is parsed into +`Date` and `Number` respectively (starting with Angular 1.3). +It also brings the directives in line with HTML5 constraint +validation, which validates against the input value. + +This change is unlikely to cause applications to fail, because even +in Angular 1.2, the value that was validated by pattern could have +been manipulated by the $parsers, as all validation was done +inside this pipeline. + +If you rely on the pattern being validated against the modelValue, +you must create your own validator directive that overwrites +the built-in pattern validator: + +``` +.directive('patternModelOverwrite', function patternModelOverwriteDirective() { + return { + restrict: 'A', + require: '?ngModel', + priority: 1, + compile: function() { + var regexp, patternExp; + + return { + pre: function(scope, elm, attr, ctrl) { + if (!ctrl) return; + + attr.$observe('pattern', function(regex) { + /** + * The built-in directive will call our overwritten validator + * (see below). We just need to update the regex. + * The preLink fn guaranetees our observer is called first. + */ + if (isString(regex) && regex.length > 0) { + regex = new RegExp('^' + regex + '$'); + } + + if (regex && !regex.test) { + //The built-in validator will throw at this point + return; + } + + regexp = regex || undefined; + }); + + }, + post: function(scope, elm, attr, ctrl) { + if (!ctrl) return; + + regexp, patternExp = attr.ngPattern || attr.pattern; + + //The postLink fn guarantees we overwrite the built-in pattern validator + ctrl.$validators.pattern = function(value) { + return ctrl.$isEmpty(value) || + isUndefined(regexp) || + regexp.test(value); + }; + } + }; + } + }; +}); +``` + + + +# 1.4.5 permanent-internship (2015-08-28) + + +## Bug Fixes + +- **$animate:** `$animate.enabled(false)` should disable animations on $animateCss as well + ([c3d5e33e](https://github.com/angular/angular.js/commit/c3d5e33e18bd9e423e2d0678e85564fad1dba99f), + [#12696](https://github.com/angular/angular.js/issues/12696), [#12685](https://github.com/angular/angular.js/issues/12685)) +- **$animateCss:** + - do not throw errors when a closing timeout is fired on a removed element + ([2f6b6fb7](https://github.com/angular/angular.js/commit/2f6b6fb7a1dee0ff97c5d2959b927347eeda6e8b), + [#12650](https://github.com/angular/angular.js/issues/12650)) + - fix parse errors on older Android WebViews + ([1cc9c9ca](https://github.com/angular/angular.js/commit/1cc9c9ca9d9698356ea541517b3d06ce6556c01d), + [#12610](https://github.com/angular/angular.js/issues/12610)) + - properly handle cancellation timeouts for follow-up animations + ([d8816731](https://github.com/angular/angular.js/commit/d88167318d1c69f0dbd2101c05955eb450c34fd5), + [#12490](https://github.com/angular/angular.js/issues/12490), [#12359](https://github.com/angular/angular.js/issues/12359)) + - ensure failed animations clear the internal cache + ([0a75a3db](https://github.com/angular/angular.js/commit/0a75a3db6ef265389c8c955981c2fe67bb4f7769), + [#12214](https://github.com/angular/angular.js/issues/12214), [#12518](https://github.com/angular/angular.js/issues/12518), [#12381](https://github.com/angular/angular.js/issues/12381)) + - the transitions options delay value should be applied before class application + ([0c81e9fd](https://github.com/angular/angular.js/commit/0c81e9fd25285dd757db98d458919776a1fb62fc), + [#12584](https://github.com/angular/angular.js/issues/12584)) +- **ngAnimate:** + - use requestAnimationFrame to space out child animations + ([ea8016c4](https://github.com/angular/angular.js/commit/ea8016c4c8f55bc021549f342618ed869998e335), + [#12669](https://github.com/angular/angular.js/issues/12669), [#12594](https://github.com/angular/angular.js/issues/12594), [#12655](https://github.com/angular/angular.js/issues/12655), [#12631](https://github.com/angular/angular.js/issues/12631), [#12612](https://github.com/angular/angular.js/issues/12612), [#12187](https://github.com/angular/angular.js/issues/12187)) + - only buffer rAF requests within the animation runners + ([dc48aadd](https://github.com/angular/angular.js/commit/dc48aadd26bbf1797c1c408f63ffde99d67414a9), + [#12280](https://github.com/angular/angular.js/issues/12280)) +- **ngModel:** validate pattern against the viewValue + ([0e001084](https://github.com/angular/angular.js/commit/0e001084ffff8674efad289d37cb16cc4e46b50a), + [#12344](https://github.com/angular/angular.js/issues/12344)) +- **ngResources:** support IPv6 URLs + ([b643f0d3](https://github.com/angular/angular.js/commit/b643f0d3223a627ef813f0777524e25d2dd95371), + [#12512](https://github.com/angular/angular.js/issues/12512), [#12532](https://github.com/angular/angular.js/issues/12532)) + + +## Breaking Changes + +- **ngModel:** due to [0e001084](https://github.com/angular/angular.js/commit/0e001084ffff8674efad289d37cb16cc4e46b50a), + + +The `ngPattern` and `pattern` directives will validate the regex +against the `viewValue` of `ngModel`, i.e. the value of the model +before the $parsers are applied. Previously, the modelValue +(the result of the $parsers) was validated. + +This fixes issues where `input[date]` and `input[number]` cannot +be validated because the viewValue string is parsed into +`Date` and `Number` respectively (starting with Angular 1.3). +It also brings the directives in line with HTML5 constraint +validation, which validates against the input value. + +This change is unlikely to cause applications to fail, because even +in Angular 1.2, the value that was validated by pattern could have +been manipulated by the $parsers, as all validation was done +inside this pipeline. + +If you rely on the pattern being validated against the modelValue, +you must create your own validator directive that overwrites +the built-in pattern validator: + +```js +.directive('patternModelOverwrite', function patternModelOverwriteDirective() { + return { + restrict: 'A', + require: '?ngModel', + priority: 1, + compile: function() { + var regexp, patternExp; + + return { + pre: function(scope, elm, attr, ctrl) { + if (!ctrl) return; + + attr.$observe('pattern', function(regex) { + /** + * The built-in directive will call our overwritten validator + * (see below). We just need to update the regex. + * The preLink fn guaranetees our observer is called first. + */ + if (isString(regex) && regex.length > 0) { + regex = new RegExp('^' + regex + '$'); + } + + if (regex && !regex.test) { + //The built-in validator will throw at this point + return; + } + + regexp = regex || undefined; + }); + + }, + post: function(scope, elm, attr, ctrl) { + if (!ctrl) return; + + regexp, patternExp = attr.ngPattern || attr.pattern; + + //The postLink fn guarantees we overwrite the built-in pattern validator + ctrl.$validators.pattern = function(value) { + return ctrl.$isEmpty(value) || + isUndefined(regexp) || + regexp.test(value); + }; + } + }; + } + }; +}); +``` + + + +# 1.3.18 collective-penmanship (2015-08-18) + + +## Bug Fixes + +- **$animate:** + - clear class animations cache if animation is not started + ([2c03a357](https://github.com/angular/angular.js/commit/2c03a3574336ed814d020cf7ba36cee5b87e65b5), + [#12604](https://github.com/angular/angular.js/issues/12604), [#12603](https://github.com/angular/angular.js/issues/12603)) + - do not throw errors if element is removed before animation starts + ([6b72598b](https://github.com/angular/angular.js/commit/6b72598b87022e1dd96bddc4451e007ef0601579), + [#10205](https://github.com/angular/angular.js/issues/10205)) +- **ngModel:** correct minErr usage for correct doc creation + ([64a142b5](https://github.com/angular/angular.js/commit/64a142b58ed0a0e3896d82f3f9ce35373548d0ff), + [#12386](https://github.com/angular/angular.js/issues/12386), [#12416](https://github.com/angular/angular.js/issues/12416)) + + + + +# 1.4.4 pylon-requirement (2015-08-13) + + +## Bug Fixes + +- **$animate:** + - leave animation callback should not overridden by follow-up animation + ([92e41ac9](https://github.com/angular/angular.js/commit/92e41ac904b7d16e96fd31a49ac2ae15d606a665), + [#12271](https://github.com/angular/angular.js/issues/12271), [#12249](https://github.com/angular/angular.js/issues/12249), [#12161](https://github.com/angular/angular.js/issues/12161)) + - make sure to run a post-digest reflow for parentless animations + ([861636c6](https://github.com/angular/angular.js/commit/861636c62542252a54fb2d2fa8ea9e17eefee120), + [#12400](https://github.com/angular/angular.js/issues/12400), [#12401](https://github.com/angular/angular.js/issues/12401)) + - ensure that class-based animations are properly applied when cancelled + ([21d6db38](https://github.com/angular/angular.js/commit/21d6db382d8f3540fb0bb7280570fba8d88d9843), + [#12266](https://github.com/angular/angular.js/issues/12266), [#12007](https://github.com/angular/angular.js/issues/12007)) +- **$animateCss:** make sure that `skipBlocking` avoids the pre-emptive transition-delay styling + ([11695ca6](https://github.com/angular/angular.js/commit/11695ca6e2ce5b21bb944ee0de80892203155cbb)) +- **$compile:** + - don't trigger $observer if initial value is `undefined` + ([6f3b8622](https://github.com/angular/angular.js/commit/6f3b8622adce2006df5cf7eed4bf9262539004bd), + [#12383](https://github.com/angular/angular.js/issues/12383), [#12464](https://github.com/angular/angular.js/issues/12464)) + - ignore optional =-bound properties with empty value + ([533d9b76](https://github.com/angular/angular.js/commit/533d9b76704368ba9700ab08589118abca9f598c), + [#12144](https://github.com/angular/angular.js/issues/12144), [#12259](https://github.com/angular/angular.js/issues/12259), [#12290](https://github.com/angular/angular.js/issues/12290)) +- **$injector:** Allows ES6 function syntax + ([44a96a4c](https://github.com/angular/angular.js/commit/44a96a4c140873d9fd8484d870af83a0bb9acabd), + [#12424](https://github.com/angular/angular.js/issues/12424), [#12425](https://github.com/angular/angular.js/issues/12425)) +- **$location:** don't crash if navigating outside the app base + ([9e492c35](https://github.com/angular/angular.js/commit/9e492c358c19549696577c86c2c61b93f50ab356), + [#11667](https://github.com/angular/angular.js/issues/11667)) +- **$q:** Use extend to avoid overwriting prototype + ([3abb3fef](https://github.com/angular/angular.js/commit/3abb3fefe653df2a4cb730cface0049939c18efd), + [#10697](https://github.com/angular/angular.js/issues/10697)) +- **$rootScope:** don't clear phase if $apply is re-entered + ([e0cf496f](https://github.com/angular/angular.js/commit/e0cf496f3cd6835db91546438def5bca1b6db4df), + [#12174](https://github.com/angular/angular.js/issues/12174)) +- **Angular:** allow unescaped `=` signs in values in `parseKeyValue` + ([f13852c1](https://github.com/angular/angular.js/commit/f13852c179ffd9ec18b7a94df27dec39eb5f19fc), + [#12351](https://github.com/angular/angular.js/issues/12351)) +- **httpParamSerializerJQLike:** Follow jQuery for index of arrays of objects + ([18a2e4fb](https://github.com/angular/angular.js/commit/18a2e4fbfc44216c31bbcdf7705ca87c53e6f1fa)) +- **i18n:** by default put negative sign before currency symbol + ([96f2e3be](https://github.com/angular/angular.js/commit/96f2e3bef5fc310edb2f6ed1addbcb7e1c1e71c2), + [#10158](https://github.com/angular/angular.js/issues/10158)) +- **injector:** check that modulesToLoad isArray. + ([5abf593e](https://github.com/angular/angular.js/commit/5abf593e6b3535cc836c99db4018a4e2fc2dbc3b), + [#12285](https://github.com/angular/angular.js/issues/12285)) +- **input:** Firefox validation trigger + ([e7423168](https://github.com/angular/angular.js/commit/e7423168fbf439a8798fdbbffb57955c272c2d74), + [#12102](https://github.com/angular/angular.js/issues/12102)) +- **merge:** regExp should not be treated as a objects when merging. + ([a5221f32](https://github.com/angular/angular.js/commit/a5221f320a8c1644354003c0e78201add44f11e6), + [#12419](https://github.com/angular/angular.js/issues/12419), [#12409](https://github.com/angular/angular.js/issues/12409)) +- **ng/$locale:** by default put negative sign before currency symbol + ([52986724](https://github.com/angular/angular.js/commit/5298672411cd7f5870e12185845cc2e9e3fe6949), + [#10158](https://github.com/angular/angular.js/issues/10158)) +- **ngAnimate:** + - always apply a preparation reflow for CSS-based animations + ([d33cedda](https://github.com/angular/angular.js/commit/d33cedda1624114d7e97a97b79705685c6cc40a2), + [#12553](https://github.com/angular/angular.js/issues/12553), [#12554](https://github.com/angular/angular.js/issues/12554), [#12267](https://github.com/angular/angular.js/issues/12267), [#12554](https://github.com/angular/angular.js/issues/12554)) + - ensure that only string-based addClass/removeClass values are applied + ([0d6fc2dc](https://github.com/angular/angular.js/commit/0d6fc2dce57ac60dfebba6eefb571ef9afcd2189), + [#12458](https://github.com/angular/angular.js/issues/12458), [#12459](https://github.com/angular/angular.js/issues/12459)) + - ensure that parent class-based animations are never closed by their children + ([32d3cbb3](https://github.com/angular/angular.js/commit/32d3cbb3aadf71492102f9318fcac570fb60bef8), + [#11975](https://github.com/angular/angular.js/issues/11975), [#12276](https://github.com/angular/angular.js/issues/12276)) + - allow animations on body and root elements + ([44ce9c82](https://github.com/angular/angular.js/commit/44ce9c8288fc6c12043567027271a09bd0594d74), + [#11956](https://github.com/angular/angular.js/issues/11956), [#12245](https://github.com/angular/angular.js/issues/12245)) + - $timeout without invokeApply + ([7db5f361](https://github.com/angular/angular.js/commit/7db5f361b0097a79255b90b26b5d700decf22f37), + [#12281](https://github.com/angular/angular.js/issues/12281), [#12282](https://github.com/angular/angular.js/issues/12282)) +- **ngCsp:** allow CSP to be configurable + ([618356e4](https://github.com/angular/angular.js/commit/618356e481fcfeac74bfc9086332e25062fd8133), + [#11933](https://github.com/angular/angular.js/issues/11933), [#8459](https://github.com/angular/angular.js/issues/8459), [#12346](https://github.com/angular/angular.js/issues/12346)) +- **ngModel:** correct minErr usage for correct doc creation + ([a268c29f](https://github.com/angular/angular.js/commit/a268c29fb019858155dac6692f351b64d43bb61c), + [#12386](https://github.com/angular/angular.js/issues/12386), [#12416](https://github.com/angular/angular.js/issues/12416)) +- **ngOptions:** allow empty option selection with multiple attribute + ([c11a7d67](https://github.com/angular/angular.js/commit/c11a7d676f21c39916243b13eeaf47f44b40c8eb), + [#12511](https://github.com/angular/angular.js/issues/12511), [#12541](https://github.com/angular/angular.js/issues/12541)) +- **ngSanitize:** escape the wide char quote marks in a regex in linky.js + ([39ff3332](https://github.com/angular/angular.js/commit/39ff3332a31b2db09e615ecea07634708cb46d7b), + [#11609](https://github.com/angular/angular.js/issues/11609)) + + +## Features + +- **$animateCss:** expose a core version of `$animateCss` + ([39b634e5](https://github.com/angular/angular.js/commit/39b634e50a9ed140649d4be119a291debe527d55), + [#12509](https://github.com/angular/angular.js/issues/12509)) +- **$httpProvider:** add 'useLegacyPromiseExtensions' configuration + ([a8f7e9cf](https://github.com/angular/angular.js/commit/a8f7e9cfde82ed7eaba3a868d8acafdf57f2d76f), + [#12112](https://github.com/angular/angular.js/issues/12112), [#10508](https://github.com/angular/angular.js/issues/10508)) +- **orderBy:** Stable sort the input + ([ed3a33a0](https://github.com/angular/angular.js/commit/ed3a33a063f09d7ca356d15c278d95ad82e680a0), + [#12408](https://github.com/angular/angular.js/issues/12408), [#12405](https://github.com/angular/angular.js/issues/12405)) + + +## Performance Improvements + +- **$q:** small $q performance optimization + ([6838c979](https://github.com/angular/angular.js/commit/6838c979451c109d959a15035177ccee715ccf19), + [#12535](https://github.com/angular/angular.js/issues/12535)) + + +## Breaking Changes + +- **ngAnimate:** due to [32d3cbb3](https://github.com/angular/angular.js/commit/32d3cbb3aadf71492102f9318fcac570fb60bef8), + CSS classes added/removed by ngAnimate are now applied synchronously once the first digest has passed. + +The previous behavior involved ngAnimate having to wait for one +requestAnimationFrame before CSS classes were added/removed. The CSS classes +are now applied directly after the first digest that is triggered after +`$animate.addClass`, `$animate.removeClass` or `$animate.setClass` is +called. If any of your code relies on waiting for one frame before +checking for CSS classes on the element then please change this +behavior. If a parent class-based animation, however, is run through a +JavaScript animation which triggers an animation for `beforeAddClass` +and/or `beforeRemoveClass` then the CSS classes will not be applied +in time for the children (and the parent class-based animation will not +be cancelled by any child animations). + +- **$q** due to [6838c979](https://github.com/angular/angular.js/commit/6838c979451c109d959a15035177ccee715ccf19), + When writing tests, there is no need to call `$timeout.flush()` to resolve a call to `$q.when` with a value. + +The previous behavior involved creating an extra promise that needed to be resolved. This is no longer needed when +`$q.when` is called with a value. In the case that the test is not aware if `$q.when` is called with a value or +another promise, it is possible to replace `$timeout.flush();` with `$timeout.flush(0);`. + +```js +describe('$q.when', function() { + it('should not need a call to $timeout.flush() to resolve already resolved promises', + inject(function($q, $timeout) { + $q.when('foo'); + // In Angular 1.4.3 a call to `$timeout.flush();` was needed + $timeout.verifyNoPendingTasks(); + })); + + it('should accept $timeout.flush(0) when not sure if $q.when was called with a value or a promise', + inject(function($q, $timeout) { + $q.when('foo'); + $timeout.flush(0); + $timeout.verifyNoPendingTasks(); + })); + + it('should need a call to $timeout.flush() to resolve $q.when when called with a promise', + inject(function($q, $timeout) { + $q.when($q.when('foo')); + $timeout.flush(); + $timeout.verifyNoPendingTasks(); + })); +}); +``` + + + +# 1.4.3 foam-acceleration (2015-07-15) + + +## Bug Fixes + +- **$animateCss:** ensure animations execute if only a keyframeStyle is provided + ([97d79eec](https://github.com/angular/angular.js/commit/97d79eec80092f5fae3336c23aa881a72436de55), + [#12124](https://github.com/angular/angular.js/issues/12124), [#12340](https://github.com/angular/angular.js/issues/12340)) +- **loader:** define isFunction + ([9ea52d81](https://github.com/angular/angular.js/commit/9ea52d818bcd2fb3ea8ccc85bf47f9fd5af68843)) +- **ngAnimate:** ensure that orphaned elements do not throw errors when animated + ([e4aeae0c](https://github.com/angular/angular.js/commit/e4aeae0c7303b94135e6df20e6c5e25f2aa0f586), + [#11975](https://github.com/angular/angular.js/issues/11975), [#12338](https://github.com/angular/angular.js/issues/12338)) + + + + +# 1.4.2 nebular-readjustment (2015-07-06) + +## Bug Fixes + +- **$browser:** prevent infinite digest if changing hash when there is no hashPrefix + ([f81ff3be](https://github.com/angular/angular.js/commit/f81ff3beb0c9d19d494c5878086fb57476442b8b), + [#10423](https://github.com/angular/angular.js/issues/10423), [#12145](https://github.com/angular/angular.js/issues/12145)) +- **$compile:** + - throw error when requesting new and isolate scopes (async) + ([6333d65b](https://github.com/angular/angular.js/commit/6333d65b76e0796cfbab8a2953af0c8014dba2e1), + [#12215](https://github.com/angular/angular.js/issues/12215), [#12217](https://github.com/angular/angular.js/issues/12217)) +- **$location:** allow navigating outside the original base URL + ([6903b5ec](https://github.com/angular/angular.js/commit/6903b5ec4c04ed6b7c80ef7d638c48639ccdc4bb), + [#11302](https://github.com/angular/angular.js/issues/11302), [#4776](https://github.com/angular/angular.js/issues/4776)) +- **merge:** treat dates as atomic values instead of objects. + ([6cbbd966](https://github.com/angular/angular.js/commit/6cbbd966479448591f819cbf904e0a3b757613dc), + [#11720](https://github.com/angular/angular.js/issues/11720), [#11720](https://github.com/angular/angular.js/issues/11720)) +- **ngOptions:** only watch numeric properties of an array + ([14638f4a](https://github.com/angular/angular.js/commit/14638f4a60053b085565e597fc74bd31cf0d372b)) +- **orderBy:** ensure correct ordering with arrays of objects and no predicate + ([48e1f560](https://github.com/angular/angular.js/commit/48e1f5605edd32a63318fd78f5165c7d1f1a20f9), + [#11866](https://github.com/angular/angular.js/issues/11866), [#11312](https://github.com/angular/angular.js/issues/11312), [#4282](https://github.com/angular/angular.js/issues/4282)) + + +## Features + +- **ngAria:** add option to disable role=button + ([1f5e42e8](https://github.com/angular/angular.js/commit/1f5e42e8821217026ef36a46d36f84d7cd32830a), + [#11580](https://github.com/angular/angular.js/issues/11580), [#12234](https://github.com/angular/angular.js/issues/12234)) + + + + +# 1.3.17 tsktskskly-euouae (2015-07-06) + + +## Bug Fixes + +- **$browser:** prevent infinite digest if changing hash when there is no hashPrefix + ([61a3fb67](https://github.com/angular/angular.js/commit/61a3fb676a186e22564fb0181c17647b35ca4e5e), + [#10423](https://github.com/angular/angular.js/issues/10423), [#12145](https://github.com/angular/angular.js/issues/12145)) +- **$location:** + - allow navigating outside the original base URL + ([0bb57d53](https://github.com/angular/angular.js/commit/0bb57d538f25a1b6f20025d87a451c39671b59aa), + [#11302](https://github.com/angular/angular.js/issues/11302), [#4776](https://github.com/angular/angular.js/issues/4776)) + - do not get caught in infinite digest in IE9 + ([f486ebe8](https://github.com/angular/angular.js/commit/f486ebe80b6d7854d3eb9029f14d94299cf493cb), + [#11439](https://github.com/angular/angular.js/issues/11439), [#11675](https://github.com/angular/angular.js/issues/11675), [#11935](https://github.com/angular/angular.js/issues/11935), [#12083](https://github.com/angular/angular.js/issues/12083)) +- **linky:** allow case insensitive scheme detection + ([6b28aef1](https://github.com/angular/angular.js/commit/6b28aef1c537bfb2da21820d6ca154344efe266e), + [#12073](https://github.com/angular/angular.js/issues/12073), [#12074](https://github.com/angular/angular.js/issues/12074)) + + + + +# 1.4.1 hyperionic-illumination (2015-06-16) + + +## Bug Fixes + +- **$compile:** + - workaround for IE11 MutationObserver + ([f3b1d0b7](https://github.com/angular/angular.js/commit/f3b1d0b723298a5f8ea21d0704405649cce1b5fc), + [#11781](https://github.com/angular/angular.js/issues/11781)) + - prevent exception when using `watch` as isolated scope binding property in Firefox + ([a6339d30](https://github.com/angular/angular.js/commit/a6339d30d1379689da5eec9647a953f64821f8b0), + [#11627](https://github.com/angular/angular.js/issues/11627)) + - assign controller return values correctly for multiple directives + ([8caf1802](https://github.com/angular/angular.js/commit/8caf1802e0e93389dec626ef35e04a302aa6c39d), + [#12029](https://github.com/angular/angular.js/issues/12029), [#12036](https://github.com/angular/angular.js/issues/12036)) +- **$location:** do not get caught in infinite digest in IE9 when redirecting in `$locationChangeSuccess` + ([91b60226](https://github.com/angular/angular.js/commit/91b602263b96b6fce1331208462e18eb647f4d60), + [#11439](https://github.com/angular/angular.js/issues/11439), [#11675](https://github.com/angular/angular.js/issues/11675), [#11935](https://github.com/angular/angular.js/issues/11935), [#12083](https://github.com/angular/angular.js/issues/12083)) +- **$parse:** set null reference properties to `undefined` + ([71fc3f4f](https://github.com/angular/angular.js/commit/71fc3f4fa0cd12eff335d57efed7c033554749f4), + [#12099](https://github.com/angular/angular.js/issues/12099)) + ([d19504a1](https://github.com/angular/angular.js/commit/d19504a179355d7801d59a8db0285a1322e04601), + [#11959](https://github.com/angular/angular.js/issues/11959)) +- **$sanitize:** do not remove `tabindex` attribute + ([799353c7](https://github.com/angular/angular.js/commit/799353c75de28e6fbf52dac6e0721e85b578575a), + [#8371](https://github.com/angular/angular.js/issues/8371), [#5853](https://github.com/angular/angular.js/issues/5853)) +- **copy:** do not copy the same object twice + ([0e622f7b](https://github.com/angular/angular.js/commit/0e622f7b5bc3d5d0ab0fbc1a1bc69404bd7216d5)) +- **forms:** parse exponential notation in `numberInputType` directive + ([ebd0fbba](https://github.com/angular/angular.js/commit/ebd0fbba8ff90bee0cd016d574643d56a7f81ed0), + [#12121](https://github.com/angular/angular.js/issues/12121), [#12122](https://github.com/angular/angular.js/issues/12122)) +- **linky:** allow case insensitive scheme detection + ([8dc09e6d](https://github.com/angular/angular.js/commit/8dc09e6dabb84c2c611cdc9e40adfac989648200), + [#12073](https://github.com/angular/angular.js/issues/12073), [#12073](https://github.com/angular/angular.js/issues/12073)) +- **ngAria:** + - update `aria-valuemin/max` when `min/max` change + ([ebaa0f59](https://github.com/angular/angular.js/commit/ebaa0f598501702ae64d59ada0ae492eaf0e2db6), + [#11770](https://github.com/angular/angular.js/issues/11770), [#11774](https://github.com/angular/angular.js/issues/11774)) + - ensure boolean values for aria-hidden and aria-disabled + ([59273354](https://github.com/angular/angular.js/commit/59273354b57dd8d1ad2cd2f4740ffa8923e480f9), + [#11365](https://github.com/angular/angular.js/issues/11365)) +- **ngModel:** ignore Object.prototype properties on the form validation object + ([0934b76b](https://github.com/angular/angular.js/commit/0934b76b72cec86093414834ac4cb7f0946b651d), + [#12066](https://github.com/angular/angular.js/issues/12066)) +- **ngOptions:** + - do not watch properties starting with $ + ([34a6da24](https://github.com/angular/angular.js/commit/34a6da24c17356d4ffc70aec3f621a140a9a61ab), + [#11930](https://github.com/angular/angular.js/issues/11930), [#12010](https://github.com/angular/angular.js/issues/12010)) + - use reference check only when not using trackBy + ([d7dc14dc](https://github.com/angular/angular.js/commit/d7dc14dc0cdeb9c187d227e19acc8aca7df9d740), + [#11936](https://github.com/angular/angular.js/issues/11936), [#11996](https://github.com/angular/angular.js/issues/11996)) + + +## Features + +- **$compile:** show module name during `multidir` error + ([351fe4b7](https://github.com/angular/angular.js/commit/351fe4b79c50a45a11af2fcd2aa7b6fd3b70058d), + [#11775](https://github.com/angular/angular.js/issues/11775)) +- **$q:** $q.resolve as an alias for $q.when + ([3ef52980](https://github.com/angular/angular.js/commit/3ef529806fef28b41ca4af86a330f39a95699cf6), + [#11944](https://github.com/angular/angular.js/issues/11944), [#11987](https://github.com/angular/angular.js/issues/11987)) + + +## Performance Improvements + +- **$compile:** avoid jquery data calls when there is no data + ([9efb0d5e](https://github.com/angular/angular.js/commit/9efb0d5ee961b57c8fc144a3138a15955e4010e2)) + + + + +# 1.3.16 cookie-oatmealification (2015-06-05) + + +## 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 + +- **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)) + + + + +# 1.4.0 jaracimrman-existence (2015-05-26) + + +## Bug Fixes + +- **$animate:** + - ignore invalid option parameter values + ([72edd4df](https://github.com/angular/angular.js/commit/72edd4dff931c644eecb8f0d1c878dc839c76947), + [#11826](https://github.com/angular/angular.js/issues/11826)) + - accept unwrapped DOM elements as inputs for enter + move + ([f26fc26f](https://github.com/angular/angular.js/commit/f26fc26f6ea283b2fc5ddb18627b13850de2663e), + [#11848](https://github.com/angular/angular.js/issues/11848)) +- **$animateCss:** ensure that custom durations do not confuse the gcs cache + ([e0e1b520](https://github.com/angular/angular.js/commit/e0e1b5208767dd62f5586fdc607cb2e31dac9516), + [#11723](https://github.com/angular/angular.js/issues/11723), [#11852](https://github.com/angular/angular.js/issues/11852)) +- **$http:** do not modify the config object passed into $http short methods + ([f7a4b481](https://github.com/angular/angular.js/commit/f7a4b48121ed2b04af89bd2b754f500d1872360d)) +- **ngAnimate:** + - close follow-up class-based animations when the same class is added/removed when removed/added + ([db246eb7](https://github.com/angular/angular.js/commit/db246eb701529b41049fc118908e528920f13b24), + [#11717](https://github.com/angular/angular.js/issues/11717)) + - ensure nested class-based animations are spaced out with a RAF + ([213c2a70](https://github.com/angular/angular.js/commit/213c2a703293ee0af8229dde2b608687cd77ccfa), + [#11812](https://github.com/angular/angular.js/issues/11812)) + - class-based animations must not set addClass/removeClass CSS classes on the element + ([3a3db690](https://github.com/angular/angular.js/commit/3a3db690a16e888aa7371e3b02e2954b9ec2d558), + [#11810](https://github.com/angular/angular.js/issues/11810)) + - ensure that repeated structural calls during pre-digest function + ([2327f5a0](https://github.com/angular/angular.js/commit/2327f5a0a7e018a9b03aefabe1fbd0c9330e2eeb), + [#11867](https://github.com/angular/angular.js/issues/11867)) + - ensure that cancelled class-based animations are properly cleaned up + ([718ff844](https://github.com/angular/angular.js/commit/718ff84405558ac64402e1fca5caefd7d307ea1e), + [#11652](https://github.com/angular/angular.js/issues/11652)) + - throw an error if a callback is passed to animate methods + ([9bb4d6cc](https://github.com/angular/angular.js/commit/9bb4d6ccbe80b7704c6b7f53317ca8146bc103ca), + [#11826](https://github.com/angular/angular.js/issues/11826), [#11713](https://github.com/angular/angular.js/issues/11713)) + - ensure anchored animations remove the leave element at correct time + ([64c66d0e](https://github.com/angular/angular.js/commit/64c66d0eea11b575d2a71d00c70cfc5be12cd450), + [#11850](https://github.com/angular/angular.js/issues/11850)) +- **select:** prevent unknown option being added to select when bound to null property + ([4090491c](https://github.com/angular/angular.js/commit/4090491c73910c169d4fba0494a4e26b45dca7ec), + [#11872](https://github.com/angular/angular.js/issues/11872), [#11875](https://github.com/angular/angular.js/issues/11875)) + + +## Features + +- **filterFilter:** allow array like objects to be filtered + ([1b0d0fd8](https://github.com/angular/angular.js/commit/1b0d0fd8d00b42dffd798845fe0947d594372613), + [#11782](https://github.com/angular/angular.js/issues/11782), [#11787](https://github.com/angular/angular.js/issues/11787)) + + + + +# 1.4.0-rc.2 rocket-zambonimation (2015-05-12) + + +## Bug Fixes + +- **$compile:** ensure directive names have no leading or trailing whitespace + ([bab474aa](https://github.com/angular/angular.js/commit/bab474aa8b146f6732857c3af1a8b3b010fda8b0), + [#11397](https://github.com/angular/angular.js/issues/11397), [#11772](https://github.com/angular/angular.js/issues/11772)) +- **$httpParamSerializerJQLike:** follow jQuery logic for nested params + ([2420a0a7](https://github.com/angular/angular.js/commit/2420a0a77e27b530dbb8c41319b2995eccf76791), + [#11551](https://github.com/angular/angular.js/issues/11551), [#11635](https://github.com/angular/angular.js/issues/11635)) +- **jqLite:** check for "length" in obj in isArrayLike to prevent iOS8 JIT bug from surfacing + ([426a5ac0](https://github.com/angular/angular.js/commit/426a5ac0547109648e5c5e358f668c274a111ab2), + [#11508](https://github.com/angular/angular.js/issues/11508)) +- **ngAnimate:** + - ensure that multiple requests to requestAnimationFrame are buffered + ([db20b830](https://github.com/angular/angular.js/commit/db20b830fc6074a00dc11d3f47d665c55e8bb515), + [#11791](https://github.com/angular/angular.js/issues/11791)) + - ensure that an object is always returned even when no animation is set to run + ([d5683d21](https://github.com/angular/angular.js/commit/d5683d21165e725bc5a850e795f681b0a8a008f5)) + - force use of `ng-anchor` instead of a suffixed `-anchor` CSS class when triggering anchor animations + ([df24410c](https://github.com/angular/angular.js/commit/df24410c17d51a8d44929b9cffee2c91cedfed72)) + - rename `ng-animate-anchor` to `ng-anchor` + ([e6d053de](https://github.com/angular/angular.js/commit/e6d053de0993c0d38de46ad8a9c6760537316430)) + - ensure that shared CSS classes between anchor nodes are retained + ([e0014002](https://github.com/angular/angular.js/commit/e0014002370278778077d0612f9fab6beb80d07a), + [#11681](https://github.com/angular/angular.js/issues/11681)) + - prohibit usage of the `ng-animate` class with classNameFilter + ([1002b80a](https://github.com/angular/angular.js/commit/1002b80a6fb5d98c424a01330234276d65d93c0b), + [#11431](https://github.com/angular/angular.js/issues/11431), [#11807](https://github.com/angular/angular.js/issues/11807)) + - ensure that the temporary CSS classes are applied before detection + ([f7e9ff1a](https://github.com/angular/angular.js/commit/f7e9ff1aba9ed70835c084e6e154f6b0bf9c3a19), + [#11769](https://github.com/angular/angular.js/issues/11769), [#11804](https://github.com/angular/angular.js/issues/11804)) + - ensure that all jqLite elements are deconstructed properly + ([64d05180](https://github.com/angular/angular.js/commit/64d05180a667e586328fbdbd328889d3b003571d), + [#11658](https://github.com/angular/angular.js/issues/11658)) + - ensure animations are not attempted on text nodes + ([2aacc2d6](https://github.com/angular/angular.js/commit/2aacc2d622893e05eb94b3974d562e681cc3a17f), + [#11703](https://github.com/angular/angular.js/issues/11703)) + - ensure JS animations recognize $animateCss directly + ([0681a540](https://github.com/angular/angular.js/commit/0681a5400e4150a961f9c8651e55623ca23b0cc2)) +- **ngClass:** add/remove classes which are properties of Object.prototype + ([f7b99970](https://github.com/angular/angular.js/commit/f7b999703f4f3bdaea035ce692f1a656b0c1a933), + [#11813](https://github.com/angular/angular.js/issues/11813), [#11814](https://github.com/angular/angular.js/issues/11814)) +- **ngOptions:** + - ensure that tracked properties are always watched + ([b5a9053b](https://github.com/angular/angular.js/commit/b5a9053ba33d48db2482ca6736d1fcae8b33d0f8), + [#11784](https://github.com/angular/angular.js/issues/11784)) + - ensure label is watched in all cases + ([ae98dadf](https://github.com/angular/angular.js/commit/ae98dadf6dca3313746f42a441c7659654dd9d50), + [#11765](https://github.com/angular/angular.js/issues/11765)) + - iterate over the options collection in the same way as `ngRepeat` + ([dfa722a8](https://github.com/angular/angular.js/commit/dfa722a8a6864793fd9580d8ae704a06d10b5509), + [#11733](https://github.com/angular/angular.js/issues/11733)) + - use watchCollection not deep watch of ngModel + ([47f9fc3e](https://github.com/angular/angular.js/commit/47f9fc3e70bc361e8c11fe68dc3ec4489238efb3), + [#11372](https://github.com/angular/angular.js/issues/11372), [#11653](https://github.com/angular/angular.js/issues/11653), [#11743](https://github.com/angular/angular.js/issues/11743)) +- **ngTouch:** + - check undefined tagName for SVG event target + ([74eb17d7](https://github.com/angular/angular.js/commit/74eb17d7c8232f72f134bf2546f10fed7234d276)) + - don't prevent click event after a touchmove + ([95521876](https://github.com/angular/angular.js/commit/95521876eb9eb330548b0549f0cfe22a26d88f6e), + [#10985](https://github.com/angular/angular.js/issues/10985)) + + +## Features + +- **$resource:** include request context in error message + ([266bc652](https://github.com/angular/angular.js/commit/266bc6520ba4d188dbc949643def102604f98905), + [#11363](https://github.com/angular/angular.js/issues/11363)) + + +## Breaking Changes + +### ngAnimate + +- **$animateCss:** due to [d5683d21](https://github.com/angular/angular.js/commit/d5683d21165e725bc5a850e795f681b0a8a008f5), + The $animateCss service will now always return an +object even if the animation is not set to run. If your code is using +$animateCss then please consider the following code change: + +``` +// before +var animator = $animateCss(element, { ... }); +if (!animator) { + continueApp(); + return; +} +var runner = animator.start(); +runner.done(continueApp); +runner.then(continueApp); + +// now +var animator = $animateCss(element, { ... }); +var runner = animator.start(); +runner.done(continueApp); +runner.then(continueApp); +``` + +- due to [df24410c](https://github.com/angular/angular.js/commit/df24410c17d51a8d44929b9cffee2c91cedfed72), +Prior to this fix there were to ways to apply CSS +animation code to an anchor animation. With this fix, the suffixed +CSS -anchor classes are now not used anymore for CSS anchor animations. + +Instead just use the `ng-anchor` CSS class like so: + +```html +
+
+
+ +
+
+
+``` + +**before**: +```css +/* before (notice the container-animation CSS class) */ +.container-animation-anchor { + transition:0.5s linear all; +} +``` + +**now**: +```css +/* now (just use `ng-anchor` on a class that both the + elements that contain `ng-animate-ref` share) */ +.my-anchor-element.ng-anchor { + transition:0.5s linear all; +} +``` + +- due to [e6d053de](https://github.com/angular/angular.js/commit/e6d053de0993c0d38de46ad8a9c6760537316430), +if your CSS code made use of the `ng-animate-anchor` +CSS class for referencing the anchored animation element then your +code must now use `ng-anchor` instead. + +- due to [1002b80a](https://github.com/angular/angular.js/commit/1002b80a6fb5d98c424a01330234276d65d93c0b), +partially or fully using a regex value containing +`ng-animate` as a token is not allowed anymore. Doing so will trigger a +minErr exception to be thrown. + +So don't do this: + +```js +// only animate elements that contain the `ng-animate` CSS class +$animateProvider.classNameFilter(/ng-animate/); + +// or partially contain it +$animateProvider.classNameFilter(/some-class ng-animate another-class/); +``` + +but this is OK: + +```js +$animateProvider.classNameFilter(/ng-animate-special/); +``` + + +### ngOptions + +- ** due to [dfa722a8](https://github.com/angular/angular.js/commit/dfa722a8a6864793fd9580d8ae704a06d10b5509), + + +Although it is unlikely that anyone is using it in this way, this change does change the +behavior of `ngOptions` in the following case: + + * you are iterating over an array-like object, using the array form of the `ngOptions` syntax +(`item.label for item in items`) and that object contains non-numeric property keys. + +In this case these properties with non-numeric keys will be ignored. + +** Here array-like is defined by the result of a call to this internal function: +https://github.com/angular/angular.js/blob/v1.4.0-rc.1/src/Angular.js#L198-L211 ** + +To get the desired behavior you need to iterate using the object form of the `ngOptions` syntax +(`value.label` for (key, value) in items)`). + + + + + +# v1.4.0-rc.1 sartorial-chronography (2015-04-24) + + +## Bug Fixes + +- **$animate:** + - ensure that from styles are applied for class-based animations + ([8f819d2c](https://github.com/angular/angular.js/commit/8f819d2cb5c8025b25534529a6e897dc8805885b)) + - make sure the JS animation lookup is an object lookup + ([103a39ca](https://github.com/angular/angular.js/commit/103a39ca8dad0300bead15c358aad846510b2229), + [#11619](https://github.com/angular/angular.js/issues/11619)) +- **$animateCss:** ensure that rAF waiting loop doesn't ignore pending items during a flush + ([90e424b2](https://github.com/angular/angular.js/commit/90e424b206239e261024e8ef7fcac762236cd8b7)) +- **$http:** stop coercing falsy HTTP request bodies to null / empty body + ([e04a887c](https://github.com/angular/angular.js/commit/e04a887c9b506de18516600310fe6e529d9d2ca3), + [#11552](https://github.com/angular/angular.js/issues/11552), [#11593](https://github.com/angular/angular.js/issues/11593)) +- **ngAnimate:** + - close parent animations only when there are classes to resolve + ([1459be17](https://github.com/angular/angular.js/commit/1459be170dabfca40501dcf219dfced5ba513169)) + - ensure ngClass-based classes are always resolved for CSS-enabled animations + ([89f081e4](https://github.com/angular/angular.js/commit/89f081e452e9a75c2d3bf86bfef8b7f9bd1f2b0e)) + - do not abort animation if only `ng-anchor-in` is used + ([3333a5c3](https://github.com/angular/angular.js/commit/3333a5c380f830cba8efec5825cb6648f930f206)) + - ensure that a filtered-out leave animation always runs its DOM operation + ([6dd64ab5](https://github.com/angular/angular.js/commit/6dd64ab5f34fa19db8f90e6eabc810843089ba14), + [#11555](https://github.com/angular/angular.js/issues/11555)) + - ensure that animations work when the app is bootstrapped on the document node + ([bee14ed1](https://github.com/angular/angular.js/commit/bee14ed1e7b77ea7dc62326611380da36dec297e), + [#11574](https://github.com/angular/angular.js/issues/11574)) + - ensure SVG classes are properly removed + ([fa0bbded](https://github.com/angular/angular.js/commit/fa0bbded1ea040fbfdb1a4339e4a374fe9717a82)) +- **ngAria:** change accessibility keypress event to use event.which if it is provided + ([249f9b81](https://github.com/angular/angular.js/commit/249f9b81cbad5c57cf978a47842744aadd85cdb4), + [#11340](https://github.com/angular/angular.js/issues/11340)) +- **ngMessageFormat:** + - ensure bindings are valid for Protractor + ([992114f7](https://github.com/angular/angular.js/commit/992114f7a7f5f39778753e0c49458f14b6290ffc), + [#11644](https://github.com/angular/angular.js/issues/11644), [#11649](https://github.com/angular/angular.js/issues/11649)) + - minified symbol and nested required expression + ([8a45064f](https://github.com/angular/angular.js/commit/8a45064f2bdec13ba3de5b0a0785df76188ab172), + [#11414](https://github.com/angular/angular.js/issues/11414), [#11592](https://github.com/angular/angular.js/issues/11592)) +- **select:** allow empty option to be added dynamically by ng-repeat + ([abf59c28](https://github.com/angular/angular.js/commit/abf59c285c3ff6af20dbf4236eba5204ae735abb), + [#11470](https://github.com/angular/angular.js/issues/11470), [#11512](https://github.com/angular/angular.js/issues/11512)) + + +## Features + +- **$animate:** provide support for animations on elements outside of $rootElement + ([e41faaa2](https://github.com/angular/angular.js/commit/e41faaa2a155a42bcc66952497a6f33866878508)) + + + + + +# v1.4.0-rc.0 smooth-unwinding (2015-04-10) + + +## Bug Fixes + +- **$compile:** + - throw error on invalid directive name + ([170ff9a3](https://github.com/angular/angular.js/commit/170ff9a37dea8772dda7c89e84176ac1a8992878), + [#11281](https://github.com/angular/angular.js/issues/11281), [#11109](https://github.com/angular/angular.js/issues/11109)) + - update data() when controller returns custom value + ([9900610e](https://github.com/angular/angular.js/commit/9900610eea4ece87b063f2aa9d82c75c369927df), + [#11147](https://github.com/angular/angular.js/issues/11147), [#11326](https://github.com/angular/angular.js/issues/11326)) +- **$http:** throw error if `success` and `error` methods do not receive a function + ([1af563d4](https://github.com/angular/angular.js/commit/1af563d43e74cb7be53e815b66fd91dd93986ed6), + [#11330](https://github.com/angular/angular.js/issues/11330), [#11333](https://github.com/angular/angular.js/issues/11333)) +- **$parse:** fix parse errors on older Android WebViews which choke with reserved keywords + ([10ae33b2](https://github.com/angular/angular.js/commit/10ae33b2d88b04df76f519edc50a47fa30f83e96), + [#11455](https://github.com/angular/angular.js/issues/11455)) +- **$rootScope:** allow destroying a root scope + ([f8c8cf69](https://github.com/angular/angular.js/commit/f8c8cf698aa23640249d79fd405605694478e4f7), + [#11241](https://github.com/angular/angular.js/issues/11241), [#10895](https://github.com/angular/angular.js/issues/10895)) +- **cookieReader:** safely access $document so it can be mocked + ([a057e089](https://github.com/angular/angular.js/commit/a057e0896a7fe2fdaba50b2515555b86e4f4be27), + [#11373](https://github.com/angular/angular.js/issues/11373), [#11388](https://github.com/angular/angular.js/issues/11388)) +- **filterFilter:** fix matching against `null`/`undefined` + ([b5002ab6](https://github.com/angular/angular.js/commit/b5002ab62ad6e13f4339e20106e1fdece14912a2), + [#11432](https://github.com/angular/angular.js/issues/11432), [#11445](https://github.com/angular/angular.js/issues/11445)) +- **ngAnimate:** ensure that minified repaint code isn't removed + ([c55a4944](https://github.com/angular/angular.js/commit/c55a494433e619aad0c7ef9fddadc0b3fdf53915), + [#9936](https://github.com/angular/angular.js/issues/9936)) +- **ngAria:** handle elements with role="checkbox/menuitemcheckbox" + ([44337f63](https://github.com/angular/angular.js/commit/44337f63fa94116795e83e3a764a6ba6782809c7), + [#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 + ([948120ec](https://github.com/angular/angular.js/commit/948120ecdbc4dd07880c0107564c50c7675b8a93), + [#11315](https://github.com/angular/angular.js/issues/11315), [#11411](https://github.com/angular/angular.js/issues/11411)) +- **ngTouch:** register touches properly when jQuery is used + ([06a9f0a9](https://github.com/angular/angular.js/commit/06a9f0a95f0e72fa2e9879fe8a49e9bf69986a5f), + [#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:** don't call $render twice if $viewValue ref changes + ([7e5c447f](https://github.com/angular/angular.js/commit/7e5c447fa9ad7d81cc818d6e79392c3e4a6b23a0), + [#11329](https://github.com/angular/angular.js/issues/11329), [#11412](https://github.com/angular/angular.js/issues/11412)) + + +## Features + +- **$anchorScroll:** allow scrolling to a specified element + ([731c8b5e](https://github.com/angular/angular.js/commit/731c8b5e2d01a44aa91f967f1a6acbadb8005a8b), + [#4568](https://github.com/angular/angular.js/issues/4568), [#9596](https://github.com/angular/angular.js/issues/9596)) +- **$animate:** complete refactor of internal animation code + ([c8700f04](https://github.com/angular/angular.js/commit/c8700f04fb6fb5dc21ac24de8665c0476d6db5ef)) +- **$http:** support custom params serializers + ([6c8464ad](https://github.com/angular/angular.js/commit/6c8464ad14dd308349f632245c1a064c9aae242a), + [#3740](https://github.com/angular/angular.js/issues/3740), [#7429](https://github.com/angular/angular.js/issues/7429), [#9224](https://github.com/angular/angular.js/issues/9224), [#11461](https://github.com/angular/angular.js/issues/11461)) +- **$interpolate:** extend interpolation with MessageFormat like syntax + ([1e58488a](https://github.com/angular/angular.js/commit/1e58488ad65abf7031bab5813523bb9d86dbd28c), + [#11152](https://github.com/angular/angular.js/issues/11152)) +- **angular.Module:** add `decorator` method + ([e57138d7](https://github.com/angular/angular.js/commit/e57138d7eff1210f99238c475fff57530bf0ab19), + [#11305](https://github.com/angular/angular.js/issues/11305), [#11300](https://github.com/angular/angular.js/issues/11300)) +- **ngClass:** add support for conditional map within an array. + ([4588e627](https://github.com/angular/angular.js/commit/4588e627bb7238b2113241919b948d0e5166c76d), + [#4807](https://github.com/angular/angular.js/issues/4807)) +- **travis:** run unit tests on iOS 8 + ([2cdb2016](https://github.com/angular/angular.js/commit/2cdb2016b9d89abfb5ab988b67d5f26f3bf21908), + [#11479](https://github.com/angular/angular.js/issues/11479)) + + +## Performance Improvements + +- **$rootScope:** remove history event handler when app is torn down + ([d996305b](https://github.com/angular/angular.js/commit/d996305b4470f80fbb1cbddf54b7d10ffbb6ab47), + [#9897](https://github.com/angular/angular.js/issues/9897), [#9905](https://github.com/angular/angular.js/issues/9905)) +- **benchmark:** add ngmodel benchmarks to largetable-bp + ([b8dbdb0c](https://github.com/angular/angular.js/commit/b8dbdb0c5e2cd176c6d94d60f781cfc02e646592), + [#11082](https://github.com/angular/angular.js/issues/11082)) +- **ngOptions:** only perform deep equality check on ngModel if using track by + ([171b9f7f](https://github.com/angular/angular.js/commit/171b9f7f2339ef9047b8526b2c3f36bb58d14feb), + [#11448](https://github.com/angular/angular.js/issues/11448), [#11447](https://github.com/angular/angular.js/issues/11447)) + + +## Breaking Changes + +- **$animate:** due to [c8700f04](https://github.com/angular/angular.js/commit/c8700f04fb6fb5dc21ac24de8665c0476d6db5ef), + JavaScript and CSS animations can no longer be run in +parallel. With earlier versions of ngAnimate, both CSS and JS animations +would be run together when multiple animations were detected. This +feature has now been removed, however, the same effect, with even more +possibilities, can be achieved by injecting `$animateCss` into a +JavaScript-defined animation and creating custom CSS-based animations +from there. Read the ngAnimate docs for more info. + +- **$animate:** due to [c8700f04](https://github.com/angular/angular.js/commit/c8700f04fb6fb5dc21ac24de8665c0476d6db5ef), + The function params for `$animate.enabled()` when an +element is used are now flipped. This fix allows the function to act as +a getter when a single element param is provided. + +```js +// < 1.4 +$animate.enabled(false, element); + +// 1.4+ +$animate.enabled(element, false); +``` + +- **$animate:** due to [c8700f04](https://github.com/angular/angular.js/commit/c8700f04fb6fb5dc21ac24de8665c0476d6db5ef), + In addition to disabling the children of the element, +`$animate.enabled(element, false)` will now also disable animations on +the element itself. + +- **$animate:** due to [c8700f04](https://github.com/angular/angular.js/commit/c8700f04fb6fb5dc21ac24de8665c0476d6db5ef), + Animation-related callbacks are now fired on +`$animate.on` instead of directly being on the element. + +```js +// < 1.4 +element.on('$animate:before', function(e, data) { + if (data.event === 'enter') { ... } +}); +element.off('$animate:before', fn); + +// 1.4+ +$animate.on(element, 'enter', function(data) { + //... +}); +$animate.off(element, 'enter', fn); +``` + +- **$animate:** due to [c8700f04](https://github.com/angular/angular.js/commit/c8700f04fb6fb5dc21ac24de8665c0476d6db5ef), + There is no need to call `$scope.$apply` or +`$scope.$digest` inside of an animation promise callback anymore +since the promise is resolved within a digest automatically (but a +digest is not run unless the promise is chained). + +```js +// < 1.4 +$animate.enter(element).then(function() { + $scope.$apply(function() { + $scope.explode = true; + }); +}); + +// 1.4+ +$animate.enter(element).then(function() { + $scope.explode = true; +}); +``` + +- **$animate:** due to [c8700f04](https://github.com/angular/angular.js/commit/c8700f04fb6fb5dc21ac24de8665c0476d6db5ef), + When an enter, leave or move animation is triggered then it +will always end any pending or active parent class based animations +(animations triggered via ngClass) in order to ensure that any CSS +styles are resolved in time. + + + + + +# 1.4.0-beta.6 cookie-liberation (2015-03-17) + + +## Bug Fixes + +- **$animate:** call `applyStyles` from options on `leave` + ([4374f892](https://github.com/angular/angular.js/commit/4374f892c6fa4af6ba1f2ed47c5f888fdb5fadc5), + [#10068](https://github.com/angular/angular.js/issues/10068)) +- **$browser:** don't crash if `history.state` access causes error in IE + ([3b8163b7](https://github.com/angular/angular.js/commit/3b8163b7b664f24499e75460ab50c066eaec0f78), + [#10367](https://github.com/angular/angular.js/issues/10367), [#10369](https://github.com/angular/angular.js/issues/10369)) +- **$sanitize:** disallow unsafe svg animation tags + ([67688d5c](https://github.com/angular/angular.js/commit/67688d5ca00f6de4c7fe6084e2fa762a00d25610), + [#11290](https://github.com/angular/angular.js/issues/11290)) +- **Angular:** properly compare RegExp with other objects for equality + ([f22e1fc9](https://github.com/angular/angular.js/commit/f22e1fc9610ae111a3ea8746a3a57169c99ce142), + [#11204](https://github.com/angular/angular.js/issues/11204), [#11205](https://github.com/angular/angular.js/issues/11205)) +- **date filter:** display localized era for `G` format codes + ([2b4dfa9e](https://github.com/angular/angular.js/commit/2b4dfa9e2b63d7ebb78f3b0fd3439d18f932e1cd), + [#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 + ([c62fa6bd](https://github.com/angular/angular.js/commit/c62fa6bd898e1048d4690d41034489dc60ba6ac2), + [#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 + ([2c4ffd6a](https://github.com/angular/angular.js/commit/2c4ffd6af4eb012c4054fe7c096267bbc5510af0), + [#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 + ([410f7c68](https://github.com/angular/angular.js/commit/410f7c682633c681be641cd2a321f9e51671d474)) +- **jqLite:** attr should ignore comment, text and attribute nodes + ([bb5bf7f8](https://github.com/angular/angular.js/commit/bb5bf7f8162d11610a53428e630b47030bdc38e5)) +- **ng/$locale:** add ERA info in generic locale + ([4acb0af2](https://github.com/angular/angular.js/commit/4acb0af24c7fb3705a197ca96adc532de4766a7a)) +- **ngJq:** don't rely on existence of jqlite + ([342e5f3c](https://github.com/angular/angular.js/commit/342e5f3ce38d2fd10c5d5a98ca66f864286a7922), + [#11044](https://github.com/angular/angular.js/issues/11044)) +- **ngMessages:** ensure that multi-level transclusion works with `ngMessagesInclude` + ([d7ec5f39](https://github.com/angular/angular.js/commit/d7ec5f392e1550658ddf271a30627b1749eccb69), + [#11196](https://github.com/angular/angular.js/issues/11196)) +- **ngOptions:** fix model<->option interaction when using `track by` + ([6a03ca27](https://github.com/angular/angular.js/commit/6a03ca274314352052c3082163367a146bb11c2d), + [#10869](https://github.com/angular/angular.js/issues/10869), [#10893](https://github.com/angular/angular.js/issues/10893)) +- **rootScope:** prevent memory leak when destroying scopes + ([fb7db4a0](https://github.com/angular/angular.js/commit/fb7db4a07bd1b0b67824d3808fe315419b272689), + [#11173](https://github.com/angular/angular.js/issues/11173), [#11169](https://github.com/angular/angular.js/issues/11169)) + + +## Features + +- **$cookies:** + - allow passing cookie options + ([92c366d2](https://github.com/angular/angular.js/commit/92c366d205da36ec26502aded23db71a6473dad7), + [#8324](https://github.com/angular/angular.js/issues/8324), [#3988](https://github.com/angular/angular.js/issues/3988), [#1786](https://github.com/angular/angular.js/issues/1786), [#950](https://github.com/angular/angular.js/issues/950)) + - move logic into $cookies and deprecate $cookieStore + ([38fbe3ee](https://github.com/angular/angular.js/commit/38fbe3ee8370fc449b82d80df07b5c2ed2cd5fbe), + [#6411](https://github.com/angular/angular.js/issues/6411), [#7631](https://github.com/angular/angular.js/issues/7631)) +- **$cookiesProvider:** provide path, domain, expires and secure options + ([53c66369](https://github.com/angular/angular.js/commit/53c663699126815eabc2a3bc1e3bafc8b3874268)) +- **$interval:** pass additional arguments to the callback + ([4f1f9cfd](https://github.com/angular/angular.js/commit/4f1f9cfdb721cf308ca1162b2227836dc1d28388), + [#10632](https://github.com/angular/angular.js/issues/10632)) +- **$timeout:** pass additional arguments to the callback + ([3a4b6b83](https://github.com/angular/angular.js/commit/3a4b6b83efdb8051e5c4803c0892c19ceb2cba50), + [#10631](https://github.com/angular/angular.js/issues/10631)) +- **angular.merge:** provide an alternative to `angular.extend` that merges 'deeply' + ([c0498d45](https://github.com/angular/angular.js/commit/c0498d45feb913c318224ea70b5adf7112df6bac), + [#10507](https://github.com/angular/angular.js/issues/10507), [#10519](https://github.com/angular/angular.js/issues/10519)) +- **filterFilter:** compare object with custom `toString()` to primitive + ([f8c42161](https://github.com/angular/angular.js/commit/f8c421617096a8d613f4eb6d0f5b098ee149c029), + [#10464](https://github.com/angular/angular.js/issues/10464), [#10548](https://github.com/angular/angular.js/issues/10548)) +- **ngAria:** + - add `button` role to `ngClick` + ([bb365070](https://github.com/angular/angular.js/commit/bb365070a3ed7c2d26056d378ab6a8ef493b23cc), + [#9254](https://github.com/angular/angular.js/issues/9254), [#10318](https://github.com/angular/angular.js/issues/10318)) + - add roles to custom inputs + ([29cdaee2](https://github.com/angular/angular.js/commit/29cdaee2b6e853bc3f8882a00661698d146ecd18), + [#10012](https://github.com/angular/angular.js/issues/10012), [#10318](https://github.com/angular/angular.js/issues/10318)) +- **ngLocale:** Add FIRSTDAYOFWEEK and WEEKENDRANGE from google data + ([3d149c7f](https://github.com/angular/angular.js/commit/3d149c7f20ffabab5a635af9ddcfc7105112ab4a)) +- **ngMock:** + - allow mock $controller service to set up controller bindings + ([d02d0585](https://github.com/angular/angular.js/commit/d02d0585a086ecd2e1de628218b5a6d85c8fc7bd), + [#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 + ([e650c458](https://github.com/angular/angular.js/commit/e650c45894abe6314a806e6b3e32c908df5c00fd), + [#10864](https://github.com/angular/angular.js/issues/10864)) +- **ngModel:** support conversion to timezone other than UTC + ([0413bee8](https://github.com/angular/angular.js/commit/0413bee8cc563a6555f8d42d5f183f6fbefc7350), + [#11005](https://github.com/angular/angular.js/issues/11005)) + + +## Breaking Changes + +- **$cookies:** due to [38fbe3ee](https://github.com/angular/angular.js/commit/38fbe3ee8370fc449b82d80df07b5c2ed2cd5fbe), + + +`$cookies` no longer exposes properties that represent the current browser cookie +values. Now you must explicitly the methods described above to access the cookie +values. This also means that you can no longer watch the `$cookies` properties for +changes to the browser's cookies. + +This feature is generally only needed if a 3rd party library was programmatically +changing the cookies at runtime. If you rely on this then you must either write code that +can react to the 3rd party library making the changes to cookies or implement your own polling +mechanism. + + + + + +# 1.3.15 locality-filtration (2015-03-17) + +## Bug Fixes + +- **$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 localized 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)) + + +## Features + +- **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)) + + + + +# 1.4.0-beta.5 karmic-stabilization (2015-02-24) + + +## Bug Fixes + +- **$http:** properly access request headers with mixed case + ([5da1256f](https://github.com/angular/angular.js/commit/5da1256fc2812d5b28fb0af0de81256054856369), + [#10881](https://github.com/angular/angular.js/issues/10881), [#10883](https://github.com/angular/angular.js/issues/10883)) +- **input:** create max and/or min validator regardless of initial value + ([c211e7a5](https://github.com/angular/angular.js/commit/c211e7a5ad5f1fb8748125f14912aa8715081925), + [#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 + ([d6eba217](https://github.com/angular/angular.js/commit/d6eba21733c6e67e90e3a4763d8d41ad89a73a0c), + [#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 + ([056a3170](https://github.com/angular/angular.js/commit/056a31700803c0a6014b43cfcc36c5c500cc596e), + [#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)) +- **ngOptions:** ngModel is optional + ([ef894c87](https://github.com/angular/angular.js/commit/ef894c87eaead76d90169113ab6acc9287654ea3)) +- **ngSanitize:** Do not ignore white-listed svg camelCased attributes + ([46b80654](https://github.com/angular/angular.js/commit/46b80654cae9105642909cd55f73f7c26d2fbd80), + [#10779](https://github.com/angular/angular.js/issues/10779), [#10990](https://github.com/angular/angular.js/issues/10990), [#11124](https://github.com/angular/angular.js/issues/11124)) +- **select:** remove unknown option when model is undefined and empty option is available + ([30b48132](https://github.com/angular/angular.js/commit/30b48132e0fb92ea8dd25a9794b4c41a3a81a951), + [#11078](https://github.com/angular/angular.js/issues/11078), [#11092](https://github.com/angular/angular.js/issues/11092)) +- **templateRequest:** avoid throwing syntax error in Android 2.3 + ([f6272333](https://github.com/angular/angular.js/commit/f6272333127d908b19da23f9cd8a74052711795b), + [#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)) + + +## Features + +- **CommonJS:** - angular modules are now packaged for npm with helpful exports + +- **limitTo:** extend the filter to take a beginning index argument + ([aaae3cc4](https://github.com/angular/angular.js/commit/aaae3cc4160417e6dad802ed9d9f6d5471821a87), + [#5355](https://github.com/angular/angular.js/issues/5355), [#10899](https://github.com/angular/angular.js/issues/10899)) +- **ngMessages:** provide support for dynamic message resolution + ([c9a4421f](https://github.com/angular/angular.js/commit/c9a4421fc3c97448527eadef1f42eb2f487ec2e0), + [#10036](https://github.com/angular/angular.js/issues/10036), [#9338](https://github.com/angular/angular.js/issues/9338)) +- **ngOptions:** add support for disabling an option + ([da9eac86](https://github.com/angular/angular.js/commit/da9eac8660343b1cd9fdcf9d2d1bda06067142d7), + [#638](https://github.com/angular/angular.js/issues/638), [#11017](https://github.com/angular/angular.js/issues/11017)) + + +## Performance Improvements + +- **$compile:** + - replace forEach(controller) with plain loops + ([5b522867](https://github.com/angular/angular.js/commit/5b5228675f67c8f5e04c7183c3ef5e71cb2bf08b), + [#11084](https://github.com/angular/angular.js/issues/11084)) + - avoid .data when fetching required controllers + ([fa0aa839](https://github.com/angular/angular.js/commit/fa0aa83937378cf8fc720c38bcc5c78fc923624e)) +- **ngOptions:** only watch labels if a display expression is specified + ([51faaffd](https://github.com/angular/angular.js/commit/51faaffdbcc734c55d52ff6c42b386d5c90207ea)) + + +## Breaking Changes + +- **ngMessages:** due to [c9a4421f](https://github.com/angular/angular.js/commit/c9a4421fc3c97448527eadef1f42eb2f487ec2e0), + +The `ngMessagesInclude` attribute is now its own directive and that must +be placed as a **child** element within the element with the ngMessages +directive. (Keep in mind that the former behavior of the +ngMessageInclude attribute was that all **included** ngMessage template +code was placed at the **bottom** of the element containing the +ngMessages directive; therefore to make this behave in the same way, +place the element containing the ngMessagesInclude directive at the +end of the container containing the ngMessages directive). + +```html + +
+
Your message is required
+
+ + +
+
Your message is required
+
+
+``` + +- **ngMessages:** due to [c9a4421f](https://github.com/angular/angular.js/commit/c9a4421fc3c97448527eadef1f42eb2f487ec2e0), + +it is no longer possible to use interpolation inside the `ngMessages` attribute expression. This technique +is generally not recommended, and can easily break when a directive implementation changes. In cases +where a simple expression is not possible, you can delegate accessing the object to a function: + +```html +
...
+``` +would become +```html +
...
+``` +where `ctrl.getMessages()` +```javascript +ctrl.getMessages = function($index) { + return ctrl.form['field_' + $index].$error; +} +``` + +- **$http:** due to [5da1256](https://github.com/angular/angular.js/commit/5da1256fc2812d5b28fb0af0de81256054856369), + +`transformRequest` functions can no longer modify request headers. + +Before this commit `transformRequest` could modify request headers, ex.: + +```javascript +function requestTransform(data, headers) { + headers = angular.extend(headers(), { + 'X-MY_HEADER': 'abcd' + }); + } + return angular.toJson(data); +} +``` + +This behavior was unintended and undocumented, so the change should affect very few applications. If one +needs to dynamically add / remove headers it should be done in a header function, for example: + +```javascript +$http.get(url, { + headers: { + 'X-MY_HEADER': function(config) { + return 'abcd'; //you've got access to a request config object to specify header value dynamically + } + } +}) +``` + + +# 1.3.14 instantaneous-browserification (2015-02-24) + + +## Features + +- **CommonJS:** - angular modules are now packaged for npm with helpful exports + +## Bug Fixes + +- **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.4.0-beta.4 overlyexplosive-poprocks (2015-02-09) + + +## Bug Fixes + +- **$location:** prevent page reload if initial url has empty hash at the end + ([a509e9aa](https://github.com/angular/angular.js/commit/a509e9aa149d0f88cc39f703d539f7ffd4cd6103), + [#10397](https://github.com/angular/angular.js/issues/10397), [#10960](https://github.com/angular/angular.js/issues/10960)) +- **$parse:** Initialize elements in an array from left to right + ([966f6d83](https://github.com/angular/angular.js/commit/966f6d831f9469a917601f9a10604612cd7bd792)) +- **ngAria:** ensure native controls fire a single click + ([9d53e5a3](https://github.com/angular/angular.js/commit/9d53e5a38dd369dec82d82e13e078df3d6054c8a), + [#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 + ([898714df](https://github.com/angular/angular.js/commit/898714df9ea38f9ef700015ced5ddea52f096b77), + [#10967](https://github.com/angular/angular.js/issues/10967)) +- **sanitize:** handle newline characters inside special tags + ([cc8755cd](https://github.com/angular/angular.js/commit/cc8755cda6efda0b52954388e8a8d5306e4bfbca), + [030a42e7](https://github.com/angular/angular.js/commit/030a42e79dec8a4bb73053762f7a54d797a058f6) + [#10943](https://github.com/angular/angular.js/issues/10943)) + + +## Features + +- **ng-jq:** adds the ability to force jqLite or a specific jQuery version + ([09ee82d8](https://github.com/angular/angular.js/commit/09ee82d84dcbea4a6e8d85903af82dcd087a78a7)) + + + + +# 1.3.13 meticulous-riffleshuffle (2015-02-09) + + +## Bug Fixes + +- **$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.4.0-beta.3 substance-mimicry (2015-02-02) + + +## Bug Fixes + +- **$compile:** + - do not initialize optional '&' binding if attribute not specified + ([6a38dbfd](https://github.com/angular/angular.js/commit/6a38dbfd3c34c8f9efff503d17eb3cbeb666d422), + [#6404](https://github.com/angular/angular.js/issues/6404), [#9216](https://github.com/angular/angular.js/issues/9216)) + - respect return value from controller constructor + ([62d514b0](https://github.com/angular/angular.js/commit/62d514b06937cc7dd86e973ea11165c88343b42d)) +- **$controller:** throw better error when controller expression is bad + ([dda65e99](https://github.com/angular/angular.js/commit/dda65e992b72044c0fa0c8f5f33184028c0e3ad7), + [#10875](https://github.com/angular/angular.js/issues/10875), [#10910](https://github.com/angular/angular.js/issues/10910)) +- **$parse:** + - handle null targets at assign + ([2e5a7e52](https://github.com/angular/angular.js/commit/2e5a7e52a0385575bbb55a801471b009afafeca3)) + - remove references to last arguments to a fn call + ([e61eae1b](https://github.com/angular/angular.js/commit/e61eae1b1f2351c51bcfe4142749a4e68a2806ff), + [#10894](https://github.com/angular/angular.js/issues/10894)) +- **a:** don't reload if there is only a name attribute + ([d729fcf0](https://github.com/angular/angular.js/commit/d729fcf030be1d3ef37196d36ea3bf3249ee3318), + [#6273](https://github.com/angular/angular.js/issues/6273), [#10880](https://github.com/angular/angular.js/issues/10880)) +- **angular.copy:** support copying `TypedArray`s + ([aa0f6449](https://github.com/angular/angular.js/commit/aa0f64496a66d2a5d1a4d033f2eb075a8b084a78), + [#10745](https://github.com/angular/angular.js/issues/10745)) +- **filter:** format timezone correctly in the case that UTC timezone is used + ([8c469191](https://github.com/angular/angular.js/commit/8c46919199090a05634789774124b38983430c76), + [#9359](https://github.com/angular/angular.js/issues/9359)) +- **ngRoute:** don't duplicate optional params into query + ([27bf2ce4](https://github.com/angular/angular.js/commit/27bf2ce40c5adfb1494d69c9d0ac9cf433834a12), + [#10689](https://github.com/angular/angular.js/issues/10689)) +- **ngScenario:** allow ngScenario to handle lazy-loaded and manually bootstrapped applications + ([c69caa7b](https://github.com/angular/angular.js/commit/c69caa7beee4e920f8f587eb3e943be99864a14f), + [#10723](https://github.com/angular/angular.js/issues/10723)) +- **validators:** maxlength should use viewValue for $isEmpty + ([bfcf9946](https://github.com/angular/angular.js/commit/bfcf9946e16d21b55dde50d4d21c71c898b10215), + [#10898](https://github.com/angular/angular.js/issues/10898)) + + +## Features + +- **$compile:** allow using bindToController as object, support both new/isolate scopes + ([35498d70](https://github.com/angular/angular.js/commit/35498d7045ba9138016464a344e2c145ce5264c1), + [#10420](https://github.com/angular/angular.js/issues/10420), [#10467](https://github.com/angular/angular.js/issues/10467)) +- **filter:** support conversion to timezone other than UTC + ([c6d8512a](https://github.com/angular/angular.js/commit/c6d8512a1d7345516d1bd9a039d81821b9518bff), + [#10858](https://github.com/angular/angular.js/issues/10858)) +- **ngMocks:** cleanup $inject annotations after each test + ([0baa17a3](https://github.com/angular/angular.js/commit/0baa17a3b7ad2b242df2b277b81cebdf75b04287)) + + +## Performance Improvements + +- **$scope:** Add a property $$watchersCount to scope + ([c1500ea7](https://github.com/angular/angular.js/commit/c1500ea775c4cb130088b7d5bb5fb872bda50bae)) +- **$parse** new and more performant parser + ([0d42426](https://github.com/angular/angular.js/commit/0d424263ead16635afb582affab2b147f8e71626)) + + +## Breaking Changes + +- **$compile:** due to [6a38dbfd](https://github.com/angular/angular.js/commit/6a38dbfd3c34c8f9efff503d17eb3cbeb666d422), +Previously, '&' expressions would always set up a function in the isolate scope. Now, if the binding +is marked as optional and the attribute is not specified, no function will be added to the isolate scope. + + + +# 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:** don't 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)) + + +## Features + +- **ngMocks:** cleanup $inject annotations after each test + ([6ec59460](https://github.com/angular/angular.js/commit/6ec5946094ee92b820bbacc886fa2367715e60b4)) + + + + + +# 1.4.0-beta.2 holographic-rooster (2015-01-26) + + +## Bug Fixes + +- **$location:** don't rewrite when link is shift-clicked + ([8b33de6f](https://github.com/angular/angular.js/commit/8b33de6fd0ec0eb785fed697f062763b5c1d8d23), + [#9904](https://github.com/angular/angular.js/issues/9904), [#9906](https://github.com/angular/angular.js/issues/9906)) +- **$templateRequest:** cache downloaded templates as strings + ([b3a9bd3a](https://github.com/angular/angular.js/commit/b3a9bd3ae043e3042ea7ccfe08e3b36a84feb35e), + [#10630](https://github.com/angular/angular.js/issues/10630), [#10646](https://github.com/angular/angular.js/issues/10646)) +- **filterFilter:** throw error if input is not an array + ([cea8e751](https://github.com/angular/angular.js/commit/cea8e75144e6910b806b63a6ec2a6d118316fddd), + [#9992](https://github.com/angular/angular.js/issues/9992), [#10352](https://github.com/angular/angular.js/issues/10352)) +- **htmlAnchorDirective:** + - remove "element !== target element" check + ([2958cd30](https://github.com/angular/angular.js/commit/2958cd308b5ebaf223a3e5df3fb5bf0f23408447), + [#10866](https://github.com/angular/angular.js/issues/10866)) + - don't add event listener if replaced, ignore event if target is different element + ([b146af11](https://github.com/angular/angular.js/commit/b146af11271de8fa4c51c6db87df104269f41a33), + [#4262](https://github.com/angular/angular.js/issues/4262), [#10849](https://github.com/angular/angular.js/issues/10849)) +- **ngPluralize:** fix wrong text content when count is null/undefined + ([3228d3b4](https://github.com/angular/angular.js/commit/3228d3b4991af681e57de5ab079c1e1c11cf35cb), + [#10836](https://github.com/angular/angular.js/issues/10836), [#10841](https://github.com/angular/angular.js/issues/10841)) + +## Breaking Changes + +- **filterFilter:** due to [cea8e751](https://github.com/angular/angular.js/commit/cea8e75144e6910b806b63a6ec2a6d118316fddd), + Previously, the filter was not applied if used with a non array. +Now, it throws an error. This can be worked around by converting an object to an array, using +a filter such as https://github.com/petebacondarwin/angular-toArrayFilter + +Closes #9992 +Closes #10352 + + + +# 1.3.11 spiffy-manatee (2015-01-26) + + +## Bug Fixes + +- **$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)) + + + +# 1.4.0-beta.1 trepidatious-salamander (2015-01-20) + + +## Bug Fixes + +- **$animate:** ensure no transitions are applied when an empty inline style object is provided + ([0db5b21b](https://github.com/angular/angular.js/commit/0db5b21b1d09431535e0c0bf8ac63d4b5b24d349), + [#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 + ([23c8a90d](https://github.com/angular/angular.js/commit/23c8a90d22f7c7b41b5a756b89498ffac828980a), + [#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 + ([2408f2de](https://github.com/angular/angular.js/commit/2408f2ded5ead6e678c241e38ef474c1fadff92b), + [#10509](https://github.com/angular/angular.js/issues/10509)) +- **ngController:** allow bound constructor fns as controllers + ([d17fbc38](https://github.com/angular/angular.js/commit/d17fbc3862e0a2e646db1222f184dbe663da4a1f), + [#10784](https://github.com/angular/angular.js/issues/10784), [#10790](https://github.com/angular/angular.js/issues/10790)) +- **ngRepeat:** do not sort object keys alphabetically + ([c260e738](https://github.com/angular/angular.js/commit/c260e7386391877625eda086480de73e8a0ba921), + [#6210](https://github.com/angular/angular.js/issues/6210), [#10538](https://github.com/angular/angular.js/issues/10538)) + + +## Features + +- **$http:** provide a config object as an argument to header functions + ([d435464c](https://github.com/angular/angular.js/commit/d435464c51d3912f56cfc830d86bfc64a1578327), + [#7235](https://github.com/angular/angular.js/issues/7235), [#10622](https://github.com/angular/angular.js/issues/10622)) + + +## Breaking Changes + +- **ngRepeat:** due to [c260e738](https://github.com/angular/angular.js/commit/c260e7386391877625eda086480de73e8a0ba921), + + +Previously, the order of items when using ngRepeat to iterate +over object properties was guaranteed to be consistent by sorting the +keys into alphabetic order. + +Now, the order of the items is browser dependent based on the order returned +from iterating over the object using the `for key in obj` syntax. + +It seems that browsers generally follow the strategy of providing +keys in the order in which they were defined, although there are exceptions +when keys are deleted and reinstated. See +https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete#Cross-browser_issues + +The best approach is to convert Objects into Arrays by a filter such as +https://github.com/petebacondarwin/angular-toArrayFilter +or some other mechanism, and then sort them manually in the order you need. + +Closes #6210 +Closes #10538 + + + + +# 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.4.0-beta.0 photonic-umbrakinesis (2015-01-13) + + +## Bug Fixes + +- **$location:** support right button click on anchors in firefox + ([aa798f12](https://github.com/angular/angular.js/commit/aa798f123658cb78b5581513d26577016195cafe), + [#7984](https://github.com/angular/angular.js/issues/7984)) +- **$templateRequest:** propagate HTTP status on failed requests + ([e24f22bd](https://github.com/angular/angular.js/commit/e24f22bdb1740388938d58778aa24d307a79a796), + [#10514](https://github.com/angular/angular.js/issues/10514), [#10628](https://github.com/angular/angular.js/issues/10628)) +- **dateFilter:** ignore invalid dates + ([1334b8c8](https://github.com/angular/angular.js/commit/1334b8c8326b93e0ca016c85516627900c7a9fd3), + [#10640](https://github.com/angular/angular.js/issues/10640)) +- **filterFilter:** use isArray() to determine array type + ([a01ce6b8](https://github.com/angular/angular.js/commit/a01ce6b81c197b0a4a1057981e8e9c1b74f37587), + [#10621](https://github.com/angular/angular.js/issues/10621)) +- **ngChecked:** ensure that ngChecked doesn't interfere with ngModel + ([e079111b](https://github.com/angular/angular.js/commit/e079111b33bf36be21c0941718b41cc9ca67bea0), + [#10662](https://github.com/angular/angular.js/issues/10662), [#10664](https://github.com/angular/angular.js/issues/10664)) +- **ngClass:** handle multi-class definitions as an element of an array + ([e1132f53](https://github.com/angular/angular.js/commit/e1132f53b03a5a71aa9b6eded24d64e3bc83929b), + [#8578](https://github.com/angular/angular.js/issues/8578), [#10651](https://github.com/angular/angular.js/issues/10651)) +- **ngModelOptions:** allow sharing options between multiple inputs + ([9c9c6b3f](https://github.com/angular/angular.js/commit/9c9c6b3fe4edfe78ae275c413ee3eefb81f1ebf6), + [#10667](https://github.com/angular/angular.js/issues/10667)) +- **ngOptions:** + - support one-time binding on the option values + ([ba90261b](https://github.com/angular/angular.js/commit/ba90261b7586b519483883800ea876510faf5c21), + [#10687](https://github.com/angular/angular.js/issues/10687), [#10694](https://github.com/angular/angular.js/issues/10694)) + - prevent infinite digest if track by expression is stable + ([fc21db8a](https://github.com/angular/angular.js/commit/fc21db8a15545fad53124fc941b3c911a8d57067), + [#9464](https://github.com/angular/angular.js/issues/9464)) + - update model if selected option is removed + ([933591d6](https://github.com/angular/angular.js/commit/933591d69cee2c5580da1d8522ba90a7d924da0e), + [#7736](https://github.com/angular/angular.js/issues/7736)) + - ensure that the correct option is selected when options are loaded async + ([7fda214c](https://github.com/angular/angular.js/commit/7fda214c4f65a6a06b25cf5d5aff013a364e9cef), + [#8019](https://github.com/angular/angular.js/issues/8019), [#9714](https://github.com/angular/angular.js/issues/9714), [#10639](https://github.com/angular/angular.js/issues/10639)) +- **ngPluralize:** generate a warning when using a not defined rule + ([c66b4b6a](https://github.com/angular/angular.js/commit/c66b4b6a133f7215d50c23db516986cfc1f0a985)) + + +## Features + +- **$filter:** display Infinity symbol when number is Infinity + ([51d67742](https://github.com/angular/angular.js/commit/51d6774286202b55ade402ca097e417e70fd546b), + [#10421](https://github.com/angular/angular.js/issues/10421)) +- **$timeout:** allow `fn` to be an optional parameter + ([5a603023](https://github.com/angular/angular.js/commit/5a60302389162c6ef45f311c1aaa65a00d538c66), + [#9176](https://github.com/angular/angular.js/issues/9176)) +- **limitTo:** ignore limit when invalid + ([a3c3bf33](https://github.com/angular/angular.js/commit/a3c3bf3332e5685dc319c46faef882cb6ac246e1), + [#10510](https://github.com/angular/angular.js/issues/10510)) +- **ngMock/$exceptionHandler:** log errors when rethrowing + ([deb3cb4d](https://github.com/angular/angular.js/commit/deb3cb4daef0054457bd9fb8995829fff0e8f1e4), + [#10540](https://github.com/angular/angular.js/issues/10540), [#10564](https://github.com/angular/angular.js/issues/10564)) + + +## Performance Improvements + +- **ngStyleDirective:** use $watchCollection + ([8928d023](https://github.com/angular/angular.js/commit/8928d0234551a272992d0eccef73b3ad6cb8bfd1), + [#10535](https://github.com/angular/angular.js/issues/10535)) + + +## Breaking Changes + +- **limitTo:** due to [a3c3bf33](https://github.com/angular/angular.js/commit/a3c3bf3332e5685dc319c46faef882cb6ac246e1), + limitTo changed behavior when limit value is invalid. +Instead of returning empty object/array it returns unchanged input. + + +- **ngOptions:** due to [7fda214c](https://github.com/angular/angular.js/commit/7fda214c4f65a6a06b25cf5d5aff013a364e9cef), + + +When using `ngOptions`: the directive applies a surrogate key as the value of the `