upgrade from AngularJS v1.1.5 to AngularJS 1.3.0

https://github.com/angular/angular.js/blob/master/CHANGELOG.md
CHANGE LOG

1.3.0-beta.5 chimeric-glitterfication (2014-04-03)
Bug Fixes

$animate:
insert elements at the start of the parent container instead of at the end (1cb8584e, #4934, #6275)
ensure the CSS driver properly works with SVG elements (c67bd69c, #6030)
$parse: mark constant unary minus expressions as constant (7914d346, #6932)
Scope:
revert the __proto__ cleanup as that could cause regressions (71c11e96)
more scope clean up on $destroy to minimize leaks (d64d41ed, #6794, #6856, #6968)
ngClass: handle ngClassOdd/Even affecting the same classes (c9677920, #5271)
Breaking Changes

$animate: due to 1cb8584e, $animate will no longer default the after parameter to the last element of the parent container. Instead, when after is not specified, the new element will be inserted as the first child of the parent container.
To update existing code, change all instances of $animate.enter() or $animate.move() from:

$animate.enter(element, parent);

to:

$animate.enter(element, parent, angular.element(parent[0].lastChild));


1.2.16 badger-enumeration (2014-04-03)
Bug Fixes

$animate:
ensure the CSS driver properly works with SVG elements (38ea5426, #6030)
prevent cancellation timestamp from being too far in the future (35d635cb, #6748)
run CSS animations before JS animations to avoid style inheritance (0e5106ec, #6675)
$parse: mark constant unary minus expressions as constant (6e420ff2, #6932)
Scope:
revert the proto cleanup as that could cause regressions (2db66f5b)
more scope clean up on $destroy to minimize leaks (7e4e696e, #6794, #6856, #6968)
aggressively clean up scope on $destroy to minimize leaks (8d4d437e, #6794, #6856)
filter.ngdoc: Check if "input" variable is defined (a275d539, #6819)
input: don't perform HTML5 validation on updated model-value (b2363e31, #6796, #6806)
ngClass: handle ngClassOdd/Even affecting the same classes (55fe6d63, #5271)
Features

$http: add xhr statusText to completeRequest callback (32c09c1d, #2335, #2665, #6713)

1.3.0-beta.4 inconspicuous-deception (2014-03-28)
Bug Fixes

$animate:
prevent cancellation timestamp from being too far in the future (ff5cf736, #6748)
make CSS blocking optional for class-based animations (1bebe36a, #6674, #6739)
run CSS animations before JS animations to avoid style inheritance (2317af68, #6675)
Scope: aggressively clean up scope on $destroy to minimize leaks (f552f251, #6794, #6856)
doc-gen: Run Gulp on Windows too (47ba6014, #6346)
filter.ngdoc: Check if "input" variable is defined (4a6d4de5, #6819)
input: don't perform HTML5 validation on updated model-value (b472d027, #6796, #6806)
Features

$http: add xhr statusText to completeRequest callback (1d2414ca, #2335, #2665, #6713)
Breaking Changes

$animate: due to 1bebe36a,

Any class-based animation code that makes use of transitions and uses the setup CSS classes (such as class-add and class-remove) must now provide a empty transition value to ensure that its styling is applied right away. In other words if your animation code is expecting any styling to be applied that is defined in the setup class then it will not be applied "instantly" unless a transition:0s none value is present in the styling for that CSS class. This situation is only the case if a transition is already present on the base CSS class once the animation kicks off.

Before:

.animated.my-class-add {
  opacity:0;
  transition:0.5s linear all;
}
.animated.my-class-add.my-class-add-active {
  opacity:1;
}
After:

.animated.my-class-add {
  transition:0s linear all;
  opacity:0;
}
.animated.my-class-add.my-class-add-active {
  transition:0.5s linear all;
  opacity:1;
}
Please view the documentation for ngAnimate for more info.


1.3.0-beta.3 emotional-waffles (2014-03-21)
Bug Fixes

ngAnimate: support webkitCancelRequestAnimationFrame in addition to webkitCancelAnimationFrame (c839f78b, #6526)
$http: allow sending Blob data using $http (b8cc71d4, #5012)
$httpBackend: don't error when JSONP callback is called with no parameter (6680b7b9, #4987, #6735)
$rootScope: ng-repeat can't handle NaN values. #4605 (fb6062fb, #4605)
$rootScope: $watchCollection should call listener with old value (78057a94, #2621, #5661, #5688, #6736)
angular.bootstrap: allow angular to load only once (748a6c8d, #5863, #5587)
jqLite: inheritedData() now traverses Shadow DOM boundaries via the host property of DocumentFragment (8a96f317, #6637)
ngCookie: convert non-string values to string (36528310, #6151, #6220)
ngTouch: update workaround for Webkit quirk (bc42950b, #6302)
orderBy: support string predicates containing non-ident characters (37bc5ef4, #6143, #6144)
select: avoid checking option element's selected property in render (f40f54c6, #2448, #5994)
Features

$compile: add support for $observer deregistration (299b220f, #5609)
ngMock.$httpBackend: added support for function as URL matcher (d6cfcace, #4580)
Breaking Changes

$compile: due to 299b220f, calling attr.$observe no longer returns the observer function, but a deregistration function instead. To migrate the code follow the example below:
Before:

directive('directiveName', function() {
  return {
    link: function(scope, elm, attr) {
      var observer = attr.$observe('someAttr', function(value) {
        console.log(value);
      });
    }
  };
});
After:

directive('directiveName', function() {
  return {
    link: function(scope, elm, attr) {
      var observer = function(value) {
        console.log(value);
      };

      attr.$observe('someAttr', observer);
    }
  };
});
$httpBackend: due to 6680b7b9, the JSONP behavior for erroneous and empty responses changed: Previously, a JSONP response was regarded as erroneous if it was empty. Now Angular is listening to the correct events to detect errors, i.e. even empty responses can be successful.

v1.2.15 beer-underestimating (2014-03-21)
Bug Fixes

$$RAFProvider: check for webkitCancelRequestAnimationFrame (e84da228, #6526)
$$rAF: always fallback to a $timeout incase native rAF isn't supported (ee8e4a94, #6654)
$compile: support templates with thead and tfoot root elements (ca0ac649, #6289)
$http:
allow sending Blob data using $http (fbb125a3, #5012)
don't covert 0 status codes to 404 for non-file protocols (f108a2a9, #6074, #6155)
$rootScope:
ng-repeat can't handle NaN values. #4605 (e48c28fe, #4605)
$watchCollection should call listener with oldValue (3dd95727, #2621, #5661, #5688, #6736)
angular.bootstrap: only allow angular to load once (0d60f8d3, #5863, #5587)
jqLite: traverse host property for DocumentFragment in inheritedData() (98d825e1, #6637)
ngAnimate: setting classNameFilter disables animation inside ng-if (a41a2a1d, #6539)
ngCookie: convert non-string values to string (93d1c95c, #6151, #6220)
ngTouch: update workaround for desktop Webkit quirk (01a34f51, #6302)
orderBy: support string predicates containing non-ident characters (10d3e1e4, #6143, #6144)
select: avoid checking option element selected properties in render (dc149de9, #2448, #5994, #6769)

1.3.0-beta.2 silent-ventriloquism (2014-03-14)
Bug Fixes

$$rAF: always fallback to a $timeout in case native rAF isn't supported (7b5e0199, #6654)
$http: don't convert 0 status codes to 404 for non-file protocols (56e73ea3, #6074, #6155)
ngAnimate: setting classNameFilter disables animation inside ng-if (129e2e02, #6539)
Features

whitelist blob urls for sanitization of data-bound image urls (47ab8df4, #4623)

1.3.0-beta.1 retractable-eyebrow (2014-03-07)
Bug Fixes

$compile: support templates with thead and tfoot root elements (53ec5e13, #6289)
style: expressions in style tags (0609453e, #2387, #6492)
Features

input: support types date, time, datetime-local, month, week (46bd6dc8, #5864)
Breaking Changes

build: due to eaa1d00b, As communicated before, IE8 is no longer supported.
input: types date, time, datetime-local, month, week now always require a Date object as model (46bd6dc8, #5864)
For more info: http://blog.angularjs.org/2013/12/angularjs-13-new-release-approaches.html


1.2.14 feisty-cryokinesis (2014-03-01)
Bug Fixes

$animate:
delegate down to addClass/removeClass if setClass is not found (18c41af0, #6463)
ensure all comment nodes are removed during a leave animation (f4f1f43d, #6403)
only block keyframes if a stagger is set to occur (e71e7b6c, #4225)
ensure that animateable directives cancel expired leave animations (e9881991, #5886)
ensure all animated elements are taken care of during the closing timeout (99720fb5, #6395)
fix for TypeError Cannot call method 'querySelectorAll' in cancelChildAnimations (c914cd99, #6205)
$http:
do not add trailing question (c8e03e34, #6342)
send GET requests by default (267b2173, #5985, #6401)
$parse: reduce false-positives in isElement tests (5fe1f39f, #4805, #5675)
input: use ValidityState to determine validity (c2d447e3, #4293, #2144, #4857, #5120, #4945, #5500, #5944)
isElement: reduce false-positives in isElement tests (75515852)
jqLite:
properly toggle multiple classes (4e73c80b, #4467, #6448)
make jqLite('').contents() return iframe document, as in jQuery (05fbed57, #6320, #6323)
numberFilter: convert all non-finite/non-numbers/non-numeric strings to the empty string (cceb455f, #6188, #6261)
$parse: support trailing commas in object & array literals (6b049c74)
ngHref: bind ng-href to xlink:href for SVGAElement (2bce71e9, #5904)
Features

$animate: animate dirty, pristine, valid, invalid for form/fields (33443966, #5378)
Performance Improvements

$animate: use rAF instead of timeouts to issue animation callbacks (4c4537e6)
$cacheFactory: skip LRU bookkeeping for caches with unbound capacity (a4078fca, #6193, #6226)

1.2.13 romantic-transclusion (2014-02-14)
Bug Fixes

$animate: ensure $animate doesn't break natural CSS transitions (4f84f6b3, #6019)
$compile:
ensure element transclusion directives are linked with comment element (e7338d3f, #6006, #6101)
support templates with table content root nodes (e7338d3f, #2848, #1459, #3647, #3241)
input:
don't apply textInput to <input type="file"> (a9fcb0d0, #6247, #6231)
setViewValue on compositionend (2b730271, #6058, #5433)
Features

filterFilter: support deeply nested predicate objects (b4eed8ad, #6215)
Breaking Changes

$animate:

due to 4f84f6b3, ngClass and {{ class }} will now call the setClass animation callback instead of addClass / removeClass when both a addClass/removeClass operation is being executed on the element during the animation.

Please include the setClass animation callback as well as addClass and removeClass within your JS animations to work with ngClass and {{ class }} directives.

due to cf5e463a, Both the $animate:before and $animate:after DOM events must be now registered prior to the $animate operation taking place. The $animate:close event can be registered anytime afterwards.

DOM callbacks used to fired for each and every animation operation that occurs within the $animate service provided in the ngAnimate module. This may end up slowing down an application if 100s of elements are being inserted into the page. Therefore after this change callbacks are only fired if registered on the element being animated.


1.2.12 cauliflower-eradication (2014-02-07)
Bug Fixes

$compile: retain CSS classes added in cloneAttachFn on asynchronous directives (5ed721b9, #5439, #5617)
$http:
ignore xhr.responseType setter exception if value is "json" (24699ee8, #6115, #6122)
update httpBackend to use ActiveXObject on IE8 if necessary (ef210e5e, #5677, #5679)
$locale: minor grammar amends for the locale locale_lt (95be253f, #6164)
$q: make $q.reject support finally and catch (074b0675, #6048, #6076)
docs: clarify doc for "args" in $broadcast and $emit (caed2dfe, #6047)
filterFilter: don't interpret dots in predicate object fields as paths (339a1658, #6005, #6009)
http: make jshint happy (6609e3da)
jqLite: trim HTML string in jqLite constructor (36d37c0e, #6053)
mocks:
rename mock.animate to ngAnimateMock and ensure it contains all test helper code for ngAnimate (4224cd51, #5822, #5917)
remove usage of $animate.flushNext in favour of queing (906fdad0)
always call functions injected with inject with this set to the current spec (3bf43903, #6102)
refactor currentSpec to work w/ Jasmine 2 (95f0bf9b, #5662)
ngMock: return false from mock $interval.cancel() when no argument is supplied (dd24c783, #6103)
ngResource:
don't filter "$"-prefixed properties from ngResource requests/responses (d2e4e499, #5666, #6080, #6033)
don't append number to '$' in url param value when encoding URI (ce1f1f97, #6003, #6004)
Breaking Changes

The animation mock module has been renamed from mock.animate to ngAnimateMock. In addition to the rename, animations will not block within test code even when ngAnimateMock is used. However, all function calls to $animate will be recorded into $animate.queue and are available within test code to assert animation calls. In addition, $animate.triggerReflow() is now only available when ngAnimateMock is used.


1.2.11 cryptocurrency-hyperdeflation (2014-02-03)
Bug Fixes

$compile: retain CSS classes added in cloneAttachFn on asynchronous directives (5ed721b9, #5439, #5617)
$http: update httpBackend to use ActiveXObject on IE8 if necessary (ef210e5e, #5677, #5679)
$q: make $q.reject support finally and catch (074b0675, #6048, #6076)
filterFilter: don't interpret dots in predicate object fields as paths (339a1658, #6005, #6009)
mocks: refactor currentSpec to work w/ Jasmine 2 (95f0bf9b, #5662)
ngResource: don't append number to '$' in url param value when encoding URI (ce1f1f97, #6003, #6004)

1.2.10 augmented-serendipity (2014-01-24)
Bug Fixes

$parse: do not use locals to resolve object properties (f09b6aa5, #5838, #5862)
a: don't call preventDefault on click when a SVGAElement has an xlink:href attribute (e0209169, #5896, #5897)
input: use Chromium's email validation regexp (79e519fe, #5899, #5924)
ngRoute: pipe preceding route param no longer masks ? or * operator (fd6bac7d, #5920)
Features

$animate: provide support for a close callback (ca6b7d0f, #5685, #5053, #4993)

1.2.9 enchanted-articulacy (2014-01-15)
Bug Fixes

$animate:
ensure the final closing timeout respects staggering animations (ed53100a)
prevent race conditions for class-based animations when animating on the same CSS class (4aa9df7a, #5588)
correctly detect and handle CSS transition changes during class addition and removal (7d5d62da)
avoid accidentally matching substrings when resolving the presence of className tokens (524650a4)
$http: ensure default headers PUT and POST are different objects (e1cfb195, #5742, #5747, #5764)
$rootScope: prevent infinite $digest by checking if asyncQueue is empty when decrementing ttl (2cd09c9f, #2622)
Features

$animate:
provide support for DOM callbacks (dde1b294)
use requestAnimationFrame instead of a timeout to issue a reflow (4ae3184c, #4278, #4225)
Breaking Changes

$http: due to e1cfb195, it is now necessary to separately specify default HTTP headers for PUT, POST and PATCH requests, as these no longer share a single object.

To migrate your code, follow the example below:

Before:

// Will apply to POST, PUT and PATCH methods
$httpProvider.defaults.headers.post = {
    "X-MY-CSRF-HEADER": "..."
};
After:

// POST, PUT and PATCH default headers must be specified separately,
// as they do not share data.
$httpProvider.defaults.headers.post =
    $httpProvider.defaults.headers.put =
    $httpProviders.defaults.headers.patch = {
        "X-MY-CSRF-HEADER": "..."
    };

1.2.8 interdimensional-cartography (2014-01-10)
Bug Fixes

$http:
return responseText on IE8 for requests with responseType set (a9cccbe1, #4464, #4738, #5636)
Allow status code 0 from any protocol (28fc80bb, #1356, #5547)
cancelled JSONP requests will not print error in the console (95e1b2d6, #5615, #5616)
$location: return '/' for root path in hashbang mode (63cd873f, #5650, #5712)
$parse: fix CSP nested property evaluation, and issue that prevented its tests from failing (3b1a4fe0, #5591, #5592)
closure: add Closure externs for angular.$q.Promise.finally (caeb7402, #4757)
ngMock window.inject: Remove Error 'stack' property changes (7e916455)
Features

select: allow multiline ng-options (43a2f3d0, #5602)

1.2.7 emoji-clairvoyance (2014-01-03)
Bug Fixes

$animate:
ensue class-based animations are always skipped before structural post-digest tasks are run (bc492c0f, #5582)
remove trailing s from computed transition duration styles (50bf0296)
$http: (3d38fff8)
use ActiveX XHR when making PATCH requests on IE8 (6c17d02b, #2518, #5043)
fix 'type mismatch' error on IE8 after each request (fd9a03e1)
Ignore multiple calls to onreadystatechange with readyState=4 (4f572366, #5426)
$injector: remove the INSTANTIATING flag properly when done (186a5912, #4361, #5577)
$location:
remove base href domain if the URL begins with '//' (760f2fb7, #5606)
fix $location.path() behaviour when $locationChangeStart is triggered by the browser (cf686285, #4989, #5089, #5118, #5580)
re-assign history after BFCache back on Android browser (bddd46c8, #5425)
$resource: prevent URL template from collapsing into an empty string (131e4014, #5455, #5493)
$sanitize: consider the size attribute as a valid/allowed attribute (056c8493, #5522)
Scope: don't let watch deregistration mess up the dirty-checking digest loop (884ef0db, #5525)
input:
use apply on the change event only when one isn't already in progress (a80049fd, #5293)
prevent double $digest when using jQuery trigger. (1147f219, #5293)
ngRepeat: allow for more flexible coding style in ngRepeat expression (c9705b75, #5537, #5598)
ngRoute: instantiate controller when template is empty (498365f2, #5550)
ngShow/ngHide, ngIf: functions with zero args should be truthy (01c5be46, #5414)
Performance Improvements

Scope: limit propagation of $broadcast to scopes that have listeners for the event (80e7a455, #5341, #5371)

1.2.6 taco-salsafication (2013-12-19)
Bug Fixes

$animate: use a scheduled timeout in favor of a fallback property to close transitions (54637a33, #5255, #5241, #5405)
$compile: remove invalid IE exceptional case for href (c7a1d1ab, #5479)
$location: parse xlink:href for SVGAElements (bc3ff2ce, #5472, #5198, #5199, #4098, #1420)
$log: should work in IE8 (4f5758e6, #5400)
$parse: return undefined if an intermetiate property's value is null (26d43cac, #5480)
closure: add type definition for Scope#$watchCollection (8f329ffb, #5475)
forEach: allow looping over result of querySelectorAll in IE8 (274a6734)
input: do not hold input for composition on Android (3dc18037, #5308)
jqLite: support unbind self within handler (2f91cfd0)
ngRepeat: allow multiline expressions (cbb3ce2c, #5000)
select: invalidate when multiple, required, and model is [] (5c97731a, #5337)
Features

jqLite: provide support for element.one() (937caab6)
ngAnimate: provide configuration support to match specific className values to trigger animations (cef084ad, #5357, #5283)
Performance Improvements

compile: add class 'ng-scope' before cloning and other micro-optimizations (f3a796e5, #5471)
$parse: use a faster path when the number of path parts is low (f4462319)
use faster check for $$ prefix (06c5cfc7)

1.2.5 singularity-expansion (2013-12-13)
Bug Fixes

$compile: allow literals in isolate scope references (43072e38, #5296)
angular-mocks: use copy of mock data in $httpBackend (f69dc162)
closure: add missing FormController extern definitions (1d5e18b0, #5303)
ngInclude: add template to DOM before linking other directives (30a8b7d0, #5247)
ngView: add template to DOM before linking other directives (f8944efe)
Performance Improvements

$injector: remove invoke optimization that doesn't work (05e4fd34, #5388)
$resource: use shallow copy instead of angular.copy (fcd2a813, #5300)
a: do not link when href or name exists in template (f3de5b6e, #5362)
jqLite: implement and use the empty method in place of html(‘’) (3410f65e, #4457)
Breaking Changes

angular-mocks: due to f69dc162, some tests that rely on identity comparison rather than equality comparison in checking mock http responses will be broken, since now each mock response is a copy of the original response. This is usually fixable by changing a .toBe() comparison to toEqual() inside of tests.

1.2.4 wormhole-blaster (2013-12-06)
Bug Fixes

$animate:
ensure animations work with directives that share a transclusion (958d3d56, #4716, #4871, #5021, #5278)
ensure ms durations are properly rounded (93901bdd, #5113, #5162)
$compile:
update cloned elements if the template arrives after the cloning (b0972a2e)
ensure the isolated local watch lastValue is always in sync (2d0f6ccb, #5182)
$rootScope:
ensure that when the $destroy event is broadcast on $rootScope that it does something (d802ed1b, #5169)
ensure the phase is cleared within a digest if an exception is raised by a watcher (d3c486dd)
$sanitize: don't rely on YARR regex engine executing immediately in order to prevent object mutation (81b81856, #5193, #5192)
closure: closure compiler shouldn't rename .defaults.transformRequest (f01087f8)
input: ensure ngModelWatch() triggers second digest pass when appropriate (b6d54393, #5258, #5282)
isElement: return boolean value rather than truthy value. (2dbb6f9a, #4519, #4534)
jqLite: ignore incompatible nodes on find() (1169b544, #4120)
ngInit: evaluate ngInit before ngInclude (0e50810c, #5167, #5208)
ngSanitize: prefer textContent to innerText to avoid layout trashing (bf1972dc)
Performance Improvements

$parse: micro-optimization for ensureSafeObject function (689dfb16, #5246)
Scope: short-circuit after dirty-checking last dirty watcher (d070450c, #5272, #5287)

1.2.3 unicorn-zapper (2013-11-27)
Bug Fixes

$animate:
ensure blocked keyframe animations are unblocked before the DOM operation (2efe8230, #5106)
ensure animations are disabled during bootstrap to prevent unwanted structural animations (eed23332, #5130)
$sanitize: use the same whitelist mechanism as $compile does (33352348, #3748)
input: react to form auto completion, through the change event, on modern browsers (a090400f, #1460)
$attrs: add $attrs.$attr to externs so that it isn't renamed on js minification (bcca8054)
Features

No new features in this release

Breaking Changes

There are no breaking changes in this release (promise!)


1.2.2 consciousness-inertia (2013-11-22)
Bug Fixes

$animate:
ensure keyframe animations are blocked around the reflow (6760d7a3, #5018)
ensure transition animations are unblocked before the dom operation occurs (062fbed8, #5014, #4265)
ensure addClass/removeClass animations do not snap during reflow (76e4db6f, #4892)
ensure the DOM operation isn't run twice (7067a8fb, #4949)
$compile:
secure form[action] & iframesrcdoc
ensure CSS classes are added and removed only when necessary (0cd7e8f2)
$httpBackend: only IE8 and below can't use script.onload for JSONP (a3172a28, #4523, #4527, #4922)
$parse: allow for new lines in expr when promise unwrapping is on (40647b17, #4718)
$resource: Always return a resource instance when calling class methods on resources. (f6ecf9a3, #4545, #5061)
httpBackend: should not read response data when request is aborted (6f1050df, #4913, #4940)
loader: expose $$minErr to modules such asngResource (9e89a31b, #5050)
ngAnimate:
correctly retain and restore existing styles during and after animation (c42d0a04, #4869)
use a fallback CSS property that doesn't break existing styles (1d50663b, #4902, #5030)
ngClass: ensure that ngClass only adds/removes the changed classes (6b8bbe4d, #4960, #4944)
ngController: fix issue with ngInclude on the same element (6288cf5c, #4431)
ngInclude:
Don't throw when the ngInclude element contains content with directives. (0a7cbb33)
allow ngInclude to load scripts when jQuery is included (c47abd0d, #3756)
ngMock: fixes httpBackend expectation with body object (4d16472b, #4956)
ngView: Don't throw when the ngView element contains content with directives. (e6521e74, #5069)
tests: Correct tests for IE11 (57924234, #5046)
input: hold listener during text composition (a4e6d962, #4684)

1.2.1 underscore-empathy (2013-11-14)
Bug Fixes

$compile:
accessing controllers of transcluded directives from children (90f87072, #4935)
correctly handle interpolated style in replace templates (e1254b26, #4882)
$resource: don't use $parse for @dotted.member (9577702e)
bootstrap: make IE8 happy (a61b65d0)
loader: don't rely on internal APIs (8425e9fe, #4437, #4874)
minErr: remove references to internal APIs (94764ee0)
ngIf: don't create multiple elements when changing from a truthy value to another thruthy value (4612705e, #4852)
urlUtils:
make removal of windows drive from path safer (89f435de, #4939)
return right path for file:// on windows (f925e8ca, #4680)
Features

$parse: revert hiding "private" properties (4ab16aaa, #4926, #4842, #4865, #4859, #4849)

1.2.0 timely-delivery (2013-11-08)
Features

animations:
ensure CSS transitions can work with inherited CSS class definitions (9d69a0a7)
provide support for staggering animations with CSS (74848307)
$parse: secure expressions by hiding "private" properties (3d6a89e8)
docs:
provide index pages for each angular module (a7e12b79)
add forward slash shortcut key for search bar (74912802)
jqLite: expose isolateScope() getter similar to scope() (27e9340b)
misc: add externs file for Closure Compiler (9d0a6977)
Bug Fixes

$animate:
don't force animations to be enabled (98adc9e0)
only apply the fallback property if any transition animations are detected (94700807)
avoid hanging animations if the active CSS transition class is missing (b89584db, #4732, #4490)
ensure staggering animations understand multiple delay values (41a2d5b3)
ensure the active class is not applied if cancelled during reflow (e53ff431, #4699)
use direct DOM comparison when checking for $rootElement (d434eabe, #4679)
ensure former nodes are fully cleaned up when a follow-up structural animation takes place (7f0767ac, #4435)
ensure enable/disable animations work when the document node is used (6818542c, #4669)
skip unnecessary addClass/removeClass animations (76b628bc, #4401, #2332)
ensure animations work properly when the $rootElement is being animated (2623de14, #4397, #4231)
only cancel class-based animations if the follow-up class contains CSS transition/keyframe animation code (f5289fe8, #4463, #3784)
$compile:
don't leak isolate scope state when replaced directive is used multiple times (b5af198f)
correct isolate scope distribution to controllers (3fe4491a)
replaced element has isolate scope (97c7a4e3)
only pass isolate scope to children that belong to the isolate directive (d0efd5ee)
make isolate scope truly isolate (909cabd3, #1924, #2500)
don't instantiate controllers twice for element transclude directives (18ae985c, #4654)
attribute bindings should not break due to terminal directives (79223eae, #4525, #4528, #4649)
instantiate controlers when re-entering compilation (faf5b980, #4434, #4616)
$injector: allow a constructor function to return a function (c22adbf1)
$parse: check function call context to be safe (6d324c76, #4417)
angular-mocks: add inline dependency annotation (6d23591c, #4448)
animateSpec: run digest to enable animations before tests (aea76f0d)
bootstrap-prettify: share $animate and $$postDigestQueue with demo apps (1df3da36)
csp:
fix csp auto-detection and stylesheet injection (08f376f2, #917, #2963, #4394, #4444)
don't inline css in csp mode (a86cf20e
docModuleComponents: implement anchor scroll when content added (eb51b024, #4703)
input: keep track of min/max attars on-the-fly (4b653aea)
ngAnimate: fix cancelChildAnimations throwing exception (b9557b0a, #4548)
ngClassSpec: clear animation enable fn from postDigestQueue (ffa9d0a6)
ngEventDirectives: parse expression only once during compile phase. (9a828738)
ngIf:
destroy child scope when destroying DOM (9483373c)
ngIf removes elements dynamically added to it (e19067c9)
ngInclude: only run anchorScroll after animation is done (d378f550, #4723)
ngMock: throw more descriptive errors for $animate.flushNext() (6fb19157)
ngModel: deregister from the form on scope not DOM destruction (8f989d65, #4226, #4779)
ngScenario: correctly disable animations for end 2 end tests (9d004585)
ngView:
only run anchorScroll after animation is done (da344daa)
ensure the new view element is placed after the old view element (3f568b22, #4362)
ngdocs:
create mock Doc objects correctly (d4493fda)
shortDescription() should not error if no description (4c8fa353)
remove the side search bar (6c20ec19)
Breaking Changes

$compile:

due to d0efd5ee, Child elements that are defined either in the application template or in some other directives template do not get the isolate scope. In theory, nobody should rely on this behavior, as it is very rare - in most cases the isolate directive has a template.

due to 909cabd3, Directives without isolate scope do not get the isolate scope from an isolate directive on the same element. If your code depends on this behavior (non-isolate directive needs to access state from within the isolate scope), change the isolate directive to use scope locals to pass these explicitly.

Before

<input ng-model="$parent.value" ng-isolate>

.directive('ngIsolate', function() {
  return {
    scope: {},
    template: '{{value}}'
  };
});
After

<input ng-model="value" ng-isolate>

.directive('ngIsolate', function() {
  return {
    scope: {value: '=ngModel'},
    template: '{{value}}
  };
});
Closes #1924 and #2500

due to 79223eae,
Previously, the interpolation priority was -100 in 1.2.0-rc.2, and 100 before 1.2.0-rc.2. Before this change the binding was setup in the post-linking phase.

Now the attribute interpolation (binding) executes as a directive with priority 100 and the binding is set up in the pre-linking phase.

Closes #4525, #4528, and #4649

$parse: due to 3d6a89e8,

This commit introduces the notion of "private" properties (properties whose names begin and/or end with an underscore) on the scope chain. These properties will not be available to Angular expressions (i.e. {{ }} interpolation in templates and strings passed to $parse) They are freely available to JavaScript code (as before).

Motivation

Angular expressions execute in a limited context. They do not have direct access to the global scope, window, document or the Function constructor. However, they have direct access to names/properties on the scope chain. It has been a long standing best practice to keep sensitive APIs outside of the scope chain (in a closure or your controller.) That's easier said that done for two reasons:

JavaScript does not have a notion of private properties so if you need someone on the scope chain for JavaScript use, you also expose it to Angular expressions
the new "controller as" syntax that's now in increased usage exposes the entire controller on the scope chain greatly increaing the exposed surface.
Though Angular expressions are written and controlled by the developer, they:

Typically deal with user input
Don't get the kind of test coverage that JavaScript code would
This commit provides a way, via a naming convention, to allow publishing/restricting properties from controllers/scopes to Angular expressions enabling one to only expose those properties that are actually needed by the expressions.

csp: due to 08f376f2, triggering ngCsp directive via ng:csp attribute is not supported any more. Please use data-ng-csp instead.

jqLite: due to 27e9340b, jqLite.scope() (connonly used through angular.element(node).scope()) does not return the isolate scope on the element that triggered directive with isolate scope. Use jqLite.isolateScope() instead.


1.2.0-rc.3 ferocious-twitch (2013-10-14)
Features

$interval: add a service wrapping setInterval (2b5ce84f)
$sce: simpler patterns for $sceDelegateProviders white/blacklists (93ce5923, #4006)
$filter: allow map of filters to be registered (4033cf28, #4036, #4091)
$compile: support tel: links in a[href] (e7730297)

Directives:

ngRepeat: support repeating over ngInclude and other directives that replace repeated nodes (9efa46ae, #3104)
event directives: add ngCopy, ngCut, and ngPaste (147c6929, #4172)
Misc:

jQuery 1.10.x support (e0c134b8, #3764)
minErr: linkify error messages on minErr docs pages (6aaae062)
tutorial: add step 12 on animations to the phonecat tutorial (ad525645)
Bug Fixes

$compile:
abort compilation when duplicate element transclusion (63c5334c, #3893, #4217, #3307)
make order directives w/ same priority deterministic (4357da85)
fix (reverse) directive postLink fn execution order (31f190d4, #3558)
don't terminate compilation for regular transclusion directives (fe214501)
ng-attr to support dash separated attribute names (8e6e3eba)
allow interpolations for non-event handlers attrs (8e1276c0)
link parents before traversing (742271ff, #3792, #3923, #3935, #3927)
collect ranges on multiple directives on one element (6a8edc1d, #4002)
$parse:
deprecate promise unwrapping and make it an opt-in (5dc35b52, #4158, #4270)
disallow access to window and dom in expressions (be0b4856)
$httpBackend:
set headers with falsy values (e9a22241, #2984)
don't send empty string bodies (0d0330ad, #2149)
$location:
prevent infinite digest error in IE7 (d7071148, #2802)
re-assign location after BFCache back (2ebf9316, #4044)
$log: prevent logging undefined for $log in IE (4ff1a650, #1705)
Scope:

$evalAsync executes on the right scope (10cc1a42)
make stopPropagation only stop its own event (47f7bd70, #4204)
Filters:

date: allow negative millisecond value strings (025c9219)
Directives:

correct priority of structural directives (ngRepeat, ngSwitchWhen, ngIf, ngInclude, ngView) (b7af76b4)
input: false is no longer an empty value by default (b56b21a8, #3490)
ngBindHtml: watch string value instead of wrapper (e2068ad4, #3932)
ngOptions: ignore object properties which start with $ (aa3c54c7)
ngRepeat: correctly track elements even when the collection is initially undefined (31c56f54, #4145, #3964)
ngTransclude: detect ngTranslude usage without a transclusion directive (5a1a6b86, #3759)
jqLite:

ignore class methods on comment elements (64fd2c42)
use get/setAttribute so that jqLite works on SVG nodes (c785267e, #3858)
Misc:

isArrayLike: correctly handle string primitives (5b8c7884, #3356)
protect calls to hasOwnProperty in public API (7a586e5c, #3331)
ngRoute:

ngView: IE8 regression due to expando on non-element nodes (255e8c13, #3971)
$route: parametrized routes do not match against locations that would not valorize each parameters. (0ff86c32)
ngResource:

pass transformed value to both callbacks and promises (e36e28eb, #3817)
remove request body from $delete (8336b3a2, #4280)
ngSanitize:

sanitize DOCTYPE declarations correctly (e66c23fe, #3931)
sanitizer should not accept <!--> as a valid comment (21e9e8cf)
ngTouch:

ngClick does not pass touchend event when jQuery is loaded (9fd92cc3)
add $event to ng-swipe (507d8021, #4071, #4321)
ngAnimate:

ensure that a timeStamp is created if not provided by the browser event (cd216c4c, #3053)
perform internal caching on getComputedStyle to boost the performance of CSS3 transitions/animations (b1e604e3, #4011, #4124)
ensure structural animations skip all child animations even if no animation is present during compile (cc584607, #3215)
cancel any ongoing child animations during move and leave animations (3f31a7c7)
ensure elapsedTime always considers delay values (079dd939)
ensure transition-property is not changed when only keyframe animations are in use (2df3c9f5, #3933)
avoid completing the animation asynchronously unless CSS transtiions/animations are present (2a63dfa6, #4023, #3940)
ensure that delays are always considered before an animation closes (0a63adce, #4028)
check elapsedTime on current event (d50ed6bf)
support addClass/removeClass animations on SVG nodes (c785267e, #3858)
ngScenario:

remove redundant assignment (a80e96ce, #4315)
fix error message description (f8f8f754)
provide event parameters as object (28f56a38)
include "not " in error messages if test is inverted (3589f178, #3840)
Breaking Changes

$compile: due to 31f190d4, the order of postLink fn is now mirror opposite of the order in which corresponding preLinking and compile functions execute.

Previously the compile/link fns executed in this order controlled via priority:

CompilePriorityHigh, CompilePriorityMedium, CompilePriorityLow
compile child nodes
PreLinkPriorityHigh, PreLinkPriorityMedium, PreLinkPriorityLow
link child nodes
PostLinkPriorityHigh, PostLinkPriorityMedium, PostLinkPriorityLow
This was changed to:

CompilePriorityHigh, CompilePriorityMedium, CompilePriorityLow
compile child nodes
PreLinkPriorityHigh, PreLinkPriorityMedium, PreLinkPriorityLow
link child nodes
PostLinkPriorityLow, PostLinkPriorityMedium , PostLinkPriorityHigh
Very few directives in practice rely on order of postLinking function (unlike on the order of compile functions), so in the rare case of this change affecting an existing directive, it might be necessary to convert it to a preLinking function or give it negative priority (look at the diff of this commit to see how an internal attribute interpolation directive was adjusted).

$parse:

due to 5dc35b52, $parse and templates in general will no longer automatically unwrap promises. This feature has been deprecated and if absolutely needed, it can be reenabled during transitional period via $parseProvider.unwrapPromises(true) api.
due to b6a37d11, feature added in rc.2 that unwraps return values from functions if the values are promises (if promise unwrapping is enabled - see previous point), was reverted due to breaking a popular usage pattern.
directives: due to b7af76b4, the priority of ngRepeat, ngSwitchWhen, ngIf, ngInclude and ngView has changed. This could affect directives that explicitly specify their priority.

In order to make ngRepeat, ngSwitchWhen, ngIf, ngInclude and ngView work together in all common scenarios their directives are being adjusted to achieve the following precendence:

Directive        | Old Priority | New Priority
=============================================
ngRepeat         | 1000         | 1000
---------------------------------------------
ngSwitchWhen     | 500          | 800
---------------------------------------------
ngIf             | 1000         | 600
---------------------------------------------
ngInclude/ngView | 1000         | 400
form/ngForm due to 7a586e5c, Inputs with name equal to "hasOwnProperty" are not allowed inside form or ngForm directives.

Before, inputs whose name was "hasOwnProperty" were quietly ignored and not added to the scope. Now a badname exception is thrown.

Using "hasOwnProperty" for an input name would be very unusual and bad practice.

Either do not include such an input in a form or ngForm directive or change the name of the input.

ngScenario: due to 28f56a38, browserTrigger now uses an eventData object instead of direct parameters for mouse events. To migrate, place the keys,x and y parameters inside of an object and place that as the third parameter for the browserTrigger function.


1.2.0-rc.2 barehand-atomsplitting (2013-09-04)
Features

Scope: asynchronously auto-flush $evalAsync queue when outside of $digest cycle (6b91aa0a, #3539, #2438)
minErr: log minerr doc url in development builds (37123cd2, #3566)
ngMock:
allow passing an object literal as shorthand to module (f737c97d)
add support for creating dynamic style sheets within test code (fb3a7db0)
Bug Fixes

$http: allow empty responses to be cached (8e48c4ff, #3809)
$injector: don't parse fns with no args (44b6b72e)
$parse: handle promises returned from parsed function calls (3a658220, #3503)
$q:
reject should catch & forward exceptions thrown in error callbacks (5d9f4205)
fix forwarding resolution when callbacks aren't functions (7d188d63, #3535)
$location: fix history problems on Boxee box (eefcdad0)
$timeout: clean deferreds immediately after callback exec/cancel (920a3804)

Directives:

ngTransclude:
clear the translusion point before transcluding (eed299a3)
make the transclusion available to parent post-link function (bf79bd41)
ngView: ensure ngClass works with together with ngView's transclusion behavior (40c0220c)
Filters:

filter: filter on false properties (3bc4e7fd, #2797)
orderBy: remove redundant if statement (5e45fd4a)
Misc:

parse IE11 UA string correctly (427ee93f, #3682)
i18n: remove obsolete locale files (6382e21f)

ngAnimate:

ensure that ngClass is always compiled before enter, leave and move animations are applied (36ad40b1, #3727, #3603)
cut down on extra $timeout calls (4382df03)
skip ngAnimate animations if the provided element already has transitions applied to it (7c605ddf, #3587)
only apply a timeout when transitions or keyframe animations are used (ee2f3d21, #3613)
ensure older versions of webkit work for animations (b1a43cd0)
ngMocks: $logProvider should not use internal APIs (baaa73ee, #3612)

Breaking Changes

i18n: due to 6382e21f, some uncommon region-specific local files were removed.

1.0.8 bubble-burst (2013-08-22)
Contains only these fixes cherry-picked from v1.2.0rc1.

Bug Fixes

$compile:
don't check attr.specified on non-ie7 (78efa0e3, #3231, #2160)
empty normalized href should pass sanitation check (3b2c6f09, #2219)
$http: ensure case-insensitive header overriding (25d9f5a8)
$location:
default to / for the url base if no base[href] (cbe31d8d, #2762)
prevent infinite digest error due to IE bug (97abb124, #2802)
don't crash on invalid query parameters (b9dcb35e)
$parse: move global getter out of parse.js (099138fb)
$q: call reject() even if $exceptionHandler rethrows (d59027c4)
$timeout: clean deferreds immediately after callback exec/cancel (ac69392c)
$sanitize: match URI schemes case-insensitively (fcd761b9, #3210)
Scope: watches can be safely unregistered inside watch handlers (a4ec2979, #2915)

ngMock

$timeout should forward delay argument (a5fb372e)
jqLite:

return array from multi select in val() (01cd3495)
forgive unregistration of a non-registered handler (ac5b9055)
prepend array in correct order (63414b96)
correctly monkey-patch core jQuery methods (815053e4)
Directives:

form: pick the right attribute name for ngForm (dc1e55ce, #2997)
input: fix the email regex to accept TLDs up to 6 characters long (ad76e77f)
ngCloak: hide element even when CSS 'display' is set (06b0930b)
ngSubmit: expose $event to ngSubmit callback (b0d5f062)
ngValue: made ngValue to write value attribute to element (3b898664)
Filters:

number: always convert scientific notation to decimal (408e8682)
orderBy: remove redundant if statement (ec1cece2)
i18n: Do not transform arrays into objects (751c77f8)

jqLite:

return array from multi select in val() (01cd3495)
forgive unregistration of a non-registered handler (ac5b9055)
prepend array in correct order (63414b96)
correctly monkey-patch core jQuery methods (815053e4)
Misc:

angular.copy: change angular.copy to correctly clone RegExp (5cca077e, #3473, #3474)
angular.equals:
add support for regular expressions (a357649d, #2685)
{} and [] should not be considered equivalent (da1f7c76)
angular.toJson: skip JSON.stringify for undefined (332a3c79)

1.2.0rc1 spooky-giraffe (2013-08-13)
Full Commit Log

Features

ngAnimate: complete rewrite of animations (81923f1e)

$sce: new $sce service for Strict Contextual Escaping and lots of other security enhancements (bea9422e)

minErr: add error message minification and better error messages (c8fcf3b3, 09fa0656, b8ea7f6a)

$compile:

support animation hooks bindings to class attributes (f2dfa891)
support multi-element directive (e46100f7)
support "Controller as" instance syntax for directives (b3777f27)
$http: accept function as headers value (a7150f12)

$q:

add .catch() as shorthand for defining promise error handlers (a207665d, #2048, #3476)
added support for promise notification (2a5c3555)
$resource:

support an unescaped URL port in the url template (b94ca12f, #2778)
expose promise as $promise instead of only $then (05772e15)
$route: express style route matching (support for optional params and new wildcard syntax) (04cebcc1)

jqLite: switch bind/unbind to more recent jQuery on/off (f1b94b4b)

Misc:

add source maps to all min files (908071af, #1714)
Directives:

add ngFocus and ngBlur directives (2bb27d49, #1277)

ngRepeat: add $even and $odd props to iterator (52b8211f)

ngForm: supports namespaces in form names (8ea802a1)

ngBindHtml: combine ng-bind-html and ng-bind-html-unsafe (dae69473)

ngPluralize: add alternative mapping using attributes (a170fc1a, #2454)

ngMobile/ngTouch:

emit swipeleft and swiperight events (ab189142)
refactor swipe logic from ngSwipe directive to $swipe service. (f4c6b2c7)
ngMock:

$timeout.flushNext can expect specific timeout delays (462ed033)
support delay limit for $timeout.flush (b7fdabc4)
support a matching function for data param (08daa779)
scenario: expose jQuery for usage outside of angular scenario (3fdbe81a)

ngDocs:

provide support for user to jump between different versions of the angularjs doc (46dfb92a)
add links to source for API (52d6a599)
support popover, foldouts and foldover annotations (ef229688)
provide documentation for the new ngRepeat repeater syntax (b3650457)
provide support for inline variable hinting (21c70729)
Bug Fixes

$compile:

correct controller instantiation for async directives (c173ca41, #3493, #3482, #3537, #3540)
always instantiate controllers before pre-link fns run (5c560117, #3493, #3482, #3514)
always instantiate controllers in parent->child order (45f9f623, #2738)
don't check attr.specified on non-ie7 (f9ea69f6, #3231, #2160)
allow data: image URIs in img[src] bindings (3e39ac7e)
empty normalized href url should pass sanitation check (fc8c9baa, #2219)
prevent infinite loop w/ replace+transclude directives (69f42b76, #2155)
reject multi-expression interpolations for src attribute (38deedd6)
disallow interpolations for DOM event handlers (39841f2e)
sanitize values bound to img[src] (1adf29af)
support multi-element group over text nodes (b28f9694)
correct component transclusion on compilation root. (15e1a29c)
$http:

allow interceptors to completely override headers (514dc0eb, #2770)
treat headers as case-insensitive when overriding defaults (53359d54)
$location:

don't initialize url hash in hashbang mode unnecessarily (d4d34aba)
prevent infinite digest error due to IE bug (dca23173, #2802)
in html5 mode, default to / for the url base if no base[href] (aef09800, #2762)
fix parameter handling on search() (705c9d95)
$parse:

unwrap promise when setting a field (61906d35, #1827)
disallow access to Function constructor (5349b200)
$q: call reject() even if $exceptionHandler rethrows (664526d6)

$resource: check whether response matches action.isArray (a644ca7b, #2255)

$sanitize: match URI schemes case-insensitively (7fef06fe, #3210)

Scope:

ensure that isolate scopes use the main evalAsync queue (3967f5f7)
watches can now be safely unregistered inside watch handlers (8bd6619b, #2915)
jqLite:

properly detect unsupported calls for on()/off() (3824e400, 4f5dfbc3, #3501)
return array from multi select in val() (306a6134)
forgive unregistration of a non-registered handler (ab59cc6c)
support space-separated events in off (bdd4e982, #3256)
prepend array in correct order (fd87eb0c)
allow override of jqLite.triggerHandler event object (0cac8729)
added optional name arg in removeData (e1a050e6)
correctly monkey-patch core jQuery methods (da5f537c)
i18n: Do not transform arrays into objects (b3d7a038)

ngMobile/ngTouch:

emit click event for touchy clicks (fb7d891d, #3219, #3218, #3137)
prevent ngClick when item disabled (e0340243, #3124, #3132)
ngClick should prevent unwanted opening of the soft keyboard (0bbd20f2)
ngMock:

keep withCredentials on passThrough (3079a6f4)
keep mock.$log the api in sync with $log (f274c0a6, #2343)
ngScenario: select().option(val) should prefer exact value match (22a9b1ac, #2856)

Directives:

ngRepeat:

handle iteration over identical obj values (47a2a982, #2787, #2806)
support growing over multi-element groups (4953b497)
ngShowHide: change the .ng-hide CSS class to use an !important flag (246c1439)

ngSubmit: expose $event to ngSubmit callback (3371fc25)

ngValue: made ngValue to write value attribute to element (09a1e7af)

ngView: ensure ngView is terminal and uses its own manual transclusion system (87405e25)

ngCloak: hide ngCloak-ed element even when CSS 'display' is set (3ffddad1)

input[email]: fix the email regex to accept TLDs up to 6 characters long (af731354)

form: pick the right attribute name for ngForm (0fcd1e3b, #2997)

select: don't support binding to select[multiple] (d87fa004, #3230)

Filters:

numberFilter: always convert scientific notation to decimal (a13c01a8)
Misc:

detect transition/animation on older Android browsers (ef5bc6c7)
handle duplicate params in parseKeyValue/toKeyValue (80739409)
don't crash on invalid query parameters (8264d080)
change angular.copy to correctly clone RegExp (f80730f4, #3473, #3474)
angular.equals now supports for regular expressions (724819e3, #2685)
angular.equals should not match keys defined in the prototype chain (7829c50f)
angular.equals should not consider {} and [] to be equivalent (1dcafd18)
angular.bootstrap should throw an error when bootstrapping a bootstrapped element (3ee744cc)
angular.toJson should skip JSON.stringify for undefined (5a294c86)
change css wrapping in grunt to prepend styles to the top of the head tag (fbad068a)
Breaking Changes

ngAnimate: due to 81923f1e, too many things changed, we'll write up a separate doc with migration instructions and will publish it at http://yearofmoo.com. Please check out the ngAnimate module docs and $animate api docs in the meantime.

$compile:

due to 1adf29af and 3e39ac7e, img[src] URLs are now being sanitized and a whitelist configured via $compileProvider can be used to configure what safe urls look like.

By default all common protocol prefixes are whitelisted including data: URIs with mime types image/*. Therefore this change is expected to have no impact on apps that don't contain malicious image links.

due to 38deedd6, binding more than a single expression to *[src] or *[ng-src] with the exception of <a> and <img> elements is not supported.

Concatenating expressions makes it hard to understand whether some combination of concatenated values are unsafe to use and potentially subject to XSS vulnerabilities. To simplify the task of auditing for XSS issues, we now require that a single expression be used for *[src/ng-src] bindings such as bindings for iframe[src], object[src], etc. (but not img[src/ng-src] since that value is sanitized).

This change ensures that the possible pool of values that are used for data-binding is easier to trace down.

To migrate your code, follow the example below:

Before:
    JS:
        scope.baseUrl = 'page';
        scope.a = 1;
        scope.b = 2;
    HTML:
        <!-- Are a and b properly escaped here? Is baseUrl
             controlled by user? -->
        <iframe src="{{baseUrl}}?a={{a}&b={{b}}">

After:
    JS:
        var baseUrl = "page";
        scope.getIframeSrc = function() {
          // There are obviously better ways to do this.  The
          // key point is that one will think about this and do
          // it the right way.
          var qs = ["a", "b"].map(function(value, name) {
              return encodeURIComponent(name) + "=" +
                     encodeURIComponent(value);
            }).join("&");
          // baseUrl isn't on scope so it isn't bound to a user
          // controlled value.
          return baseUrl + "?" + qs;
        }
    HTML: <iframe src="{{getIframeSrc()}}">
due to 39841f2e, Interpolations inside DOM event handlers are disallowed.

DOM event handlers execute arbitrary Javascript code. Using an interpolation for such handlers means that the interpolated value is a JS string that is evaluated. Storing or generating such strings is error prone and leads to XSS vulnerabilities. On the other hand, ngClick and other Angular specific event handlers evaluate Angular expressions in non-window (Scope) context which makes them much safer.

To migrate the code follow the example below:

Before:

JS:   scope.foo = 'alert(1)';
HTML: <div onclick="{{foo}}">
After:

JS:   scope.foo = function() { alert(1); }
HTML: <div ng-click="foo()">
due to e46100f7, existing directives with name ending with "-start" or "-end" will stop working.

This change was necessary to enable multi-element directives. The best fix is to rename existing directives, so that they don't end with these suffixes.

$q: due to f078762d, the always method is now exposed as finally.

The reason for this change is to align $q with the Q promise library, despite the fact that this makes it a bit more difficult to use with non-ES5 browsers, like IE8.

finally also goes well together with catch api that was added to $q recently and is part of the DOM promises standard.

To migrate the code follow the example below:

Before:

  $http.get('/foo').always(doSomething);
After:

  $http.get('/foo').finally(doSomething);
or for IE8 compatible code:

  $http.get('/foo')['finally'](doSomething);
$resource:

due to 05772e15, resource instance does not have a $then function anymore. Use the $promise.then instead.

Before:

Resource.query().$then(callback);
After:

Resource.query().$promise.then(callback);
due to 05772e15, instance methods return the promise rather than the instance itself.

Before:

resource.$save().chaining = true;
After:

resource.$save();
resource.chaining = true;
due to 05772e15, on success, the resource promise is resolved with the resource instance rather than http response object.

Use interceptor api to access the http response object.

Before:

Resource.query().$then(function(response) {...});
After:

var Resource = $resource('/url', {}, {
  get: {
    method: 'get',
    interceptor: {
      response: function(response) {
        // expose response
        return response;
      }
    }
  }
});
$route:

due to 04cebcc1, the syntax for named wildcard parameters in routes has changed from *wildcard to :wildcard*

To migrate the code, follow the example below. Here, *highlight becomes :highlight*:

Before:

$routeProvider.when('/Book1/:book/Chapter/:chapter/*highlight/edit',
          {controller: noop, templateUrl: 'Chapter.html'});
After:

$routeProvider.when('/Book1/:book/Chapter/:chapter/:highlight*/edit',
        {controller: noop, templateUrl: 'Chapter.html'});
due to 5599b55b, applications that use $route will now need to load an angular-route.js file and define a dependency on the ngRoute module.

Before:

...
<script src="angular.js"></script>
...
var myApp = angular.module('myApp', ['someOtherModule']);
...
After:

...
<script src="angular.js"></script>
<script src="angular-route.js"></script>
...
var myApp = angular.module('myApp', ['ngRoute', 'someOtherModule']);
...
$location: due to 80739409, $location.search now supports multiple keys with the same value provided that the values are stored in an array in $location.search.

Before this change:

parseKeyValue only took the last key overwriting all the previous keys;
toKeyValue joined the keys together in a comma delimited string.

This was deemed buggy behavior. If your server relied on this behavior then either the server should be fixed, or a simple serialization of the array should be done on the client before passing it to $location.

ngBindHtml, sce: due to dae69473,

ngHtmlBindUnsafe has been removed and replaced by ngHtmlBind (which has been moved from ngSanitize module to the core ng module). ngBindHtml provides ngHtmlBindUnsafe like behavior (evaluate an expression and innerHTML the result into the DOM) when bound to the result of $sce.trustAsHtml(string). When bound to a plain string, the string is sanitized via $sanitize before being innerHTML'd. If the $sanitize service isn't available (ngSanitize module is not loaded) and the bound expression evaluates to a value that is not trusted an exception is thrown.

ngForm: due to 8ea802a1,

If you have form names that will evaluate as an expression:

<form name="ctrl.form">
And if you are accessing the form from your controller:

Before:

function($scope) {
  $scope['ctrl.form'] // form controller instance
}
After:

function($scope) {
  $scope.ctrl.form // form controller instance
}
This makes it possible to access a form from a controller using the new "controller as" syntax. Supporting the previous behavior offers no benefit.

ngView: due to 7d69d52a, previously ngView only updated its content, after this change ngView will recreate itself every time a new content is included. This ensures that a single rootElement for all the included contents always exists, which makes definition of css styles for animations much easier.

ngInclude: due to aa2133ad, previously ngInclude only updated its content, after this change ngInclude will recreate itself every time a new content is included. This ensures that a single rootElement for all the included contents always exists, which makes definition of css styles for animations much easier.

select: due to d87fa004, binding to select[multiple] directly or via ngMultiple (ng-multiple) directive is not supported. This feature never worked with two-way data-binding, so it's not expected that anybody actually depends on it.

ngMobile: due to 94ec84e7, since all the code in the ngMobile module is touch related, we are renaming the module to ngTouch.

To migrate, please replace all references to "ngMobile" with "ngTouch" and "angular-mobile.js" to "angular-touch.js".