Commit Graph

4324 Commits

Author SHA1 Message Date
Martin Staffa 18f055eea5 docs($http): add a note about modifying data in transformRequest
Closes #12468
2016-02-24 17:57:45 +01:00
Georgios Kalpakas 24a7f28f1e fix(ngMock): don't break if $rootScope.$destroy() is not a function
Previously, `angular-mocks` was calling `$rootScope.$destroy()` after each test as part of it's
cleaning up, assuming that it was always available. This could break if `$rootScope` was mocked
and the mocked version didn't provide the `$destroy()` method.
This commit prevents the error by first checking that `$rootScope.$destroy` is present.

Fixes #14106

Closes #14107
2016-02-23 23:26:03 +02:00
Igor Dolgov 146f9c1611 docs(ngMock): add missing ")" in example
Closes #14112
2016-02-23 13:56:35 +02:00
Andy Gurden e55829a1cd feat(ngMock): destroy $rootScope after each test
Previously $rootScope would be new for each test, but old $rootScopes would never be destroyed.
Now that we are able to destroy the $rootScope, doing so provides an opportunity for code to clean
up things like long-lived event handlers between tests.

Closes #13433
2016-02-22 17:02:25 +02:00
Georgios Kalpakas 571e323f7d fix(ngMock): prevent memory leak due to data attached to $rootElement
Starting with 88bb551, `ngMock` will attach the `$injector` to the `$rootElement`, but will never
clean it up, resulting in a memory leak. Since a new `$rootElement` is created for every test,
this leak causes Karma to crash on large test-suites.
The problem was not detected by our internal tests, because we do our own clean-up in
`testabilityPatch.js`.

88bb551 was revert with 1b8590a.
This commit incorporates the changes from 88bb551 and prevents the memory leak, by cleaning up all
data attached to `$rootElement` after each test.

Fixes #14094

Closes #14098
2016-02-22 16:42:01 +02:00
Ben Elliott bf11cf3095 docs(ngMessages): clarify ngMessages docs with clearer example
Closes #14103
2016-02-22 12:20:03 +01:00
Kin 5a1e148da6 docs(numberFilter): improve wording for infinity description
Closes #14100
2016-02-22 12:20:00 +01:00
Kin eec095a751 docs(angular.forEach): fix typo 2016-02-22 12:19:56 +01:00
Matias Niemelä b830f5b68e revert: fix(ngMock): attach $injector to $rootElement
This reverts commit fad4dc07d7.

The fixes applied in the reverted commit caused a memory leak
with JQuery + Karma.
2016-02-20 22:16:47 -08:00
MicCarr 7e7a0693e5 docs(ngMock): fix typo in example
Closes #14069
2016-02-18 14:58:30 +02:00
Jason Bedard 02929f82f3 fix(input): re-validate when partially editing date-family inputs
Fixes #12207
Closes #13886
2016-02-18 11:04:09 +02:00
ryanhart2 b9d3625e92 docs($http): improve description of caching
Included changes:

* Point out that only GET & JSONP requests are cached.
* Explain that the URL+search params are used as cache keys (headers not considered).
* Add note about cache-control headers on response not affecting Angular caching.
* Mention `$httpProvider.defaults.cache` (in addition to `$http.defaults.cache`).
* Clear up how `defaults.cache` and `config.cache` are taken into account for determining the
  caching behavior for each request.

Fixes #11101
Closes #13003
2016-02-18 01:03:27 +02:00
Georgios Kalpakas 863a4232a6 fix(copy): add support for copying Blob objects
Although `copy()` does not need to (and never will) support all kinds of objects, there is a
(not uncommon) usecase for supporting `Blob` objects:

`ngMock`'s `$httpBackend` will return a copy of the response data (so that changes in one test won't
affect others). Since returning `Blob` objects in response to HTTP requests is a valid usecase and
since `ngMocks`'s `$httpBackend` will use `copy()` to create a copy of that data, it is reasonable
to support `Blob` objects.
(I didn't run any benchmarks, but the additional check for the type of the copied element should
have negligible impact, compared to the other stuff that `copy()` is doing.)

Fixes #9669

Closes #14064
2016-02-17 15:04:52 +02:00
biohazardpb4 947cb4d145 fix(ngMockE2E): pass responseType to $delegate when using passThrough
The `ngMockE2E` `$httpBackend` has a mechanism to allow requests to pass through, if one wants to
send a real HTTP request instead of mocking. The specified `responseType` of the request was never
passed through to the "real" `$httpBackend` (of the `ng` module), resulting in it being effectively
ignored.

Fixes #5415

Closes #5783
2016-02-17 00:59:10 +02:00
Georgios Kalpakas fad4dc07d7 fix(ngMock): attach $injector to $rootElement
Fixes #14022

Closes #14034
2016-02-16 21:44:18 +02:00
lucienbertin beb00e44de fix(*): only call console.log when window.console exists
`window.console` only exists in IE 8 & 9 when the devtools are open

Fixes #14006
Closes #14007
Closes #14047
2016-02-16 18:52:54 +01:00
Sean Murphy 6a4403a118 fix($routeProvider): properly handle optional eager path named groups
Closes #14011
2016-02-16 14:32:55 +02:00
Lucas Mirelmann 77cdc37c65 fix($compile): allow directives to have decorators
Allow directives to have decorators that modify the directive `scope` property

Close: #10149
2016-02-12 13:22:11 +01:00
Daniel Herman ab95ba65c0 perf(ngAnimate): avoid jqLite/jQuery for upward DOM traversal
The `parentNode` property is well supported between all browsers.  Since
no other functionality was required here other than traversing upwards
using `.parent()`, we can use the DOM API directly.

Closes: #13879
2016-02-12 11:27:35 +01:00
Daniel Herman 86416bcbee perf(ngAnimate): avoid $.fn.data overhead with jQuery
Unlike jqLite, jquery scrapes the attributes of an element looking for
data- keys that match the requested property.  When many elements are
being animated due to something like `ngRepeat` unrolling within one
digest cycle, the amount of time spent in that one function quickly adds
up.

By changing our API to use the lower level data API, we can cut the time
spent in this function by half when jQuery is loaded.
2016-02-12 11:27:35 +01:00
Daniel Herman d04c38c489 perf(ngRepeat): avoid duplicate jqLite wrappers
Internally, `$animate` already wraps elements passed through with
`jqLite`, so we can avoid needless duplication here.
2016-02-12 11:27:34 +01:00
Martin Staffa 437ba49a52 style(filters): squelch a closure compiler warning
Related #13932
2016-02-05 16:23:01 +01:00
kuroky360 b5c317d672 refactor(toJson): use the isUndefined() function
Closes #13923
2016-02-04 10:36:58 +02:00
Georgios Kalpakas 9e2c215779 docs(ngRequired): fix link 2016-02-04 00:20:37 +02:00
Georgii Dolzhykov 8a1f600c29 docs($compile): refine explanation of isolate scope =-binding
The current version of this paragraph is in many ways inaccurate and confusing.

Closes #13921
2016-02-03 15:00:55 +02:00
Georgios Kalpakas 4bc3031497 fix($route): allow preventing a route reload
Fixes #9824
Closes #13894
2016-02-02 23:16:09 +02:00
Lucas Mirelmann ab5c7698bb fix($rootScope): Set no context when calling helper functions for $watch
When calling a $watch getter or listener, do not expose the inner workings with `this`.

Closes: #13909
2016-02-01 23:59:54 +02:00
Lucas Mirelmann f47e218006 fix($parse): prevent assignment on constructor properties
Prevent malicious attacks involving assignment on `constructor` properties.

Closes #13417
2016-01-31 20:21:41 +00:00
Wojciech Krzystek 8dc4c75ade docs($http): reword the XSRF attack overview
Previous version emphasised "gaining user's private data".
While this perfectly describes JSON vulnerability (which is based on XSRF),
data theft suits XSS more.
Pure XSRF is more about performing requests that have side effects.

Closes #13901
2016-01-31 13:23:16 +02:00
Georgios Kalpakas 571afd6558 fix(dateFilter, input): fix Date parsing in IE/Edge when timezone offset contains :
When `Date.parse`-ing a date string, IE and Edge don't recognize the timezone offset in the format
`+HH:mm` (but only without the `:`). According to [the spec][1], the timezone offset should
contain `:`. The [ISO 8601 Standard][2] allows both forms (with and without `:`).
Although the `Date` implementation in JavaScript does not 100% follow the ISO 8601 Standard (it's
just _based on it_), all other browsers seem to recognize both forms as well.

[1]: http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15
[2]: https://en.wikipedia.org/wiki/ISO_8601#Time_offsets_from_UTC

Fixes #13880

Closes #13887
2016-01-30 00:08:47 +02:00
Georgios Kalpakas df6e731506 fix(select): handle corner case of adding options via a custom directive
Under specific circumstances (e.g. adding options via a directive with `replace: true` and a
structural directive in its template), an error occurred when trying to call `hasAttribute()` on a
comment node (which doesn't support that method).
This commit fixes it by filtering out comment nodes in the `addOption()` method.

Fixes #13874
Closes #13878
2016-01-29 14:37:06 +02:00
Martin Staffa af9c2d71e2 docs(ngAnimateChildren) add docs 2016-01-28 21:40:22 +01:00
Martin Staffa dc158e7e40 fix(ngAnimateChildren): make it compatible with ngIf
Previously, ngAnimateChildren would set the data on the element
in an $observe listener, which means the data was available after one digest happend.
This is too late when the element is animated immediately after compilation, as happens with ngIf.
Now the data is also set right in the linking function.

Fixes #13865
Closes #13876
2016-01-28 21:40:22 +01:00
Lucas Mirelmann 0b7fff303f fix($parse): Copy inputs for expressions with expensive checks
Closes: #13871
2016-01-28 21:13:48 +02:00
Lucas Mirelmann 96d62cc0fc fix($parse): Preserve expensive checks when runnning $eval inside an expression
When running an expression with expensive checks, there is a call to `$eval` or `$evalAsync`
then that expression is also evaluated using expensive checks

Closes: #13850
2016-01-28 19:21:39 +02:00
Michael 5cb7d0e046 docs($compile): minor typo/style correction
Closes #13864
2016-01-28 19:19:40 +02:00
Martin Staffa a60bbc12e8 fix($animateCss): cancel fallback timeout when animation ends normally
Previously, css animations would not cancel the timeout when the
animation ends normally (calling end explicitly / transitionEnd event).
This meant that the timeout callback fn was always called after 150% of
the animation time was over. Since the animation was already closed at this
point, it would not do any work twice, but simply remove the timer data
from the element.
This commit changes the behavior to cancel the timeout and remove the data
when it is found during animation closing.

Closes #13787
2016-01-27 19:28:36 +01:00
Isaac ca23d5f68f docs($cookiesProvider): clarify parameters description
Fixed a grammatical mistake ("equals to"), made hyphenation consistent, fixed punctuation and
clarified the sentence structure.

Closes #13853
2016-01-27 16:32:48 +01:00
robw 1ef741563d docs(ngModel): add section explaining that ngModel watches by reference
The new section explains that changing only a property on an object doesn't
trigger re-rendering.

Closes #13224
Closes #13518
2016-01-27 14:25:01 +00:00
Georgios Kalpakas 2d44a681eb fix($compile): properly denormalize templates when only one of the start/end symbols is different
Previously, if either of the start/end interpolation symbols remained unchanged (i.e. `{{` or `}}`),
then directive templates would not be denormalized properly. Changing only one of the start/end
symbols (but not both) is an uncommon but legitimate usecase.

Closes #13848
2016-01-26 20:20:37 +02:00
Peter Bacon Darwin e48666aeaf chore(ngLocale): regenerate locales to include original localeId
Closes #13390
2016-01-26 12:16:51 +00:00
Martin Staffa ce13cfd30a docs($sceDelegateProvider): fix markdown errors
Closes #13360
2016-01-25 23:00:58 +01:00
Martin Staffa 796f7ab414 feat(ngAnimate): provide ng-[event]-prepare class for structural animations
The new prepare class is added before the animation is pushed to the
queue and removed before the animation runs, i.e. it is immediately
available when a structural animation (enter, leave, move)
is initialized.

The class can be used to apply CSS to explicitly hide these elements
to prevent a flash of content before the animation runs.
This can happen if a structural animation (such as ng-if) sits at the
bottom of a tree which has ng-class animations on the parents.
Because child animations are spaced out with requestAnimationFrame,
the ng-enter class might not be applied in time, so the ng.if element is
briefly visible before its animation starts.
2016-01-25 16:38:46 +00:00
Lucas Galfaso f476060de6 fix(dateFilter): follow the CLDR on pattern escape sequences
When there are two single quotes "''" (quotes for clarification) that are not
part of an escape sequence, then this sequence should be handled as one single
quote. See http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns
second and forth examples

Closes #12839
2016-01-25 16:26:08 +00:00
Livvie Lin 6a953bb0cb style(src): delete whitespace and use single quotes
This change edits syntax for code consistency.

It removes whitespace to match the style of the rest of the code,
and changes double quotes to single quotes to conform with
Google's JavaScript Style Guide.

Closes #12889
2016-01-25 14:52:45 +00:00
Alireza Mirian 2632250a42 docs($injector): fix inaccuracy in $provide.service docs
Closes #12664
Closes #12665
2016-01-25 14:34:01 +00:00
Wesley Cho fdbd92ff99 docs($compile): improve nonassign error message
- Improve error message to mention attribute the expression errored on

Fixes #13827

Closes #13828
2016-01-24 17:20:17 +01:00
Matias Niemelä 3b27dd37a2 fix(ngAnimate): properly cancel-out previously running class-based animations
Prior to this fix the addition and removal of a CSS class via
ngAnimate would cause flicker effects because $animate was unable
to keep track of the CSS classes once they were applied to the
element. This fix ensures that ngAnimate always keeps a reference
to the classes in the currently running animation so that cancelling
works accordingly.

The commit also adds a test for a previously untested animation merge path.

Closes #10156
Closes #13822
2016-01-23 16:39:53 +01:00
Peter Bacon Darwin 2ffbfb0ad0 fix($compile): handle boolean attributes in @ bindings
Closes #13767
Closes #13769
2016-01-21 10:43:17 +00:00
Daniel Herman 946d9ae90b perf($compile): avoid needless overhead when wrapping text nodes
This commit positively affects performance in two main ways:

1,  When wrapping text nodes in the compile step, we do not need the overhead
of the `forEach` function versus a normal for loop since we do not make
use of the closure for anything.

2.  When actually wrapping the node, we can completely bypass jqLite which
avoids several function calls and the overhead of cloning the wrapper node
which we already know to be unique.

Tests in applications show about an 83% decrease in time spent in this
specific loop.
2016-01-21 10:43:17 +00:00