aboutsummaryrefslogtreecommitdiffstats
path: root/test
AgeCommit message (Collapse)Author
2013-11-07feat(jqLite): expose isolateScope() getter similar to scope()Igor Minar
See doc update in the diff for more info. BREAKING CHANGE: jqLite#scope() does not return the isolate scope on the element that triggered directive with isolate scope. Use jqLite#isolateScope() instead.
2013-11-07fix($compile): don't leak isolate scope state when replaced directive is ↵Igor Minar
used multiple times When an isolate scope directive is also a "replace" directive and at the root of its template it has other directives, we need to keep track remember to use isolate scope when linking these. This commit fixes the leakage of this state when this directive is used again later inside or outside of the isolate directive template.
2013-11-07fix($compile): correct isolate scope distribution to controllersIgor Minar
Fixes an issue when we didn't share the isolate scope with the controller of the directive from the isolate directive's template when this directive was replaced onto the isolate directive element.
2013-11-07fix($compile): replaced element has isolate scopeMisko Hevery
2013-11-07fix($compile): only pass isolate scope to children that belong to the ↵Vojta Jina
isolate directive I had to fix one unit test, as it assumed the broken behavior, where application template gets the isolate scope of other (isolate) directive, rather than the regular scope. BREAKING CHANGE: 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.
2013-11-07fix($compile): make isolate scope truly isolateVojta Jina
Fixes issue with isolate scope leaking all over the place into other directives on the same element. Isolate scope is now available only to the isolate directive that requested it and its template. A non-isolate directive should not get the isolate scope of an isolate directive on the same element, instead they will receive the original scope (which is the parent scope of the newly created isolate scope). Paired with Tobias. BREAKING CHANGE: 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 Closes #2500
2013-11-06fix(ngView): only run anchorScroll after animation is doneJeff Cross
2013-11-06fix(ngInclude): only run anchorScroll after animation is donePete Bacon Darwin
We need to wait until animations have added the content to the document before trying to `autoscroll` to anchors that may have been inserted. Fixes #4723
2013-11-06fix($animate): only apply the fallback property if any transition animations ↵Matias Niemelä
are detected
2013-11-05feat($animate): ensure CSS transitions can work with inherited CSS class ↵Matias Niemelä
definitions BREAKING CHANGE ngAnimate addClass / removeClass animations are now applied right away. This means that as soon as the animation starts the class will be added (addClass) or removed (removeClass) to the element being animated instead of after the -add-active / -remove-active animations are completed. This allows for animations outside of ngAnimate to not conflict with $animate. This commit introduces beforeAddClass and beforeRemoveClass animation event functions and executes any addClass and removeClass event functions AFTER the class has been added or removed (this is opposite functionality of how ngAnimate used to work when performing JS-enabled animations addClass / removeClass animations). If your animation code relies on any animations being performed prior to the class change then simply use the new beforeAddClass and beforeRemoveClass animation event functions. Finally, when animating show and hide animations using CSS transitions or keyframe animations, ng-hide-remove doesn't require `display:block!important` for ng-hide-add anymore.
2013-11-05chore(animateSpec): provide meaningful CSS class names in animation testsMatias Niemelä
2013-11-05fix($animate): avoid hanging animations if the active CSS transition class ↵Matias Niemelä
is missing Closes #4732 Closes #4490
2013-11-05fix($animate): ensure staggering animations understand multiple delay valuesMatias Niemelä
2013-11-05fix($animate): ensure the active class is not applied if cancelled during reflowMatias Niemelä
Closes #4699
2013-11-05chore($sniffer): make msie variable publicMatias Niemelä
The msie variable is a global variable used within the ng core which contains the version number for the current Internet Explorer browser that is rendering the application. Other modules outside of the ng core could make use of this variable instead of having to rollout duplicate detection code. This code makes it easy to reuse this simple property within the $sniffer service.
2013-11-05chore(ngAnimate): ensure elapsedTime values are in seconds and millsecondsMatias Niemelä
2013-11-04fix(ngModel): deregister from the form on scope not DOM destructionIgor Minar
Due to animations, DOM might get destroyed much later than scope and so the element $destroy event might get fired outside of $digest, which causes changes to the validation model go unobserved until the next digest. By deregistering on scope event, the deregistration always happens in $digest and the form validation model changes will be observed. Closes #4226 Closes #4779
2013-11-04fix(ngIf): destroy child scope when destroying DOMIgor Minar
2013-10-30feat($parse): secure expressions by hiding "private" propertiesChirayu Krishnappa
BREAKING CHANGE: 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: (1) 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, and (2) 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 (1) typically deal with user input and (2) 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.
2013-10-30fix(ngIf): ngIf removes elements dynamically added to itBrian Ford
When using ngIf with ngInclude on the same element, ngIf previously did not remove elements added by ngInclude. Similarly, when using ngIfStart/End, ngIf will miss elements added between the start/end markers added after ngIf is linked. This commit changes the behavior of ngIf to add a comment node at the end of its elements such that elements between the starting comment and this ending comment are removed when ngIf's predicate does not hold.
2013-10-28fix($animate): use direct DOM comparison when checking for $rootElementMatias Niemelä
Closes #4679
2013-10-28fix($animate): ensure former nodes are fully cleaned up when a follow-up ↵Matias Niemelä
structural animation takes place Closes #4435
2013-10-28fix($animate): ensure enable/disable animations work when the document node ↵Matias Niemelä
is used Closes #4669
2013-10-28feat(ngAnimate): provide support for staggering animations with CSSMatias Niemelä
2013-10-28fix($compile): don't instantiate controllers twice for element transclude ↵Igor Minar
directives This is a fix for regression introduced last week by faf5b980. Closes #4654
2013-10-28style(compileSpec): reorder and cleanup tests for $compile's transclusion ↵Igor Minar
feature
2013-10-25fix($compile): attribute bindings should not break due to terminal directivesIgor Minar
Recently we changed the priority of attribute interpolation directive to -100 to ensure that it executes early in the post linking phase. This causes issues with when terminal directives are placed on elements with attribute bindings because the terminal directive will usually have 0 or higher priority which results in attr interpolation directive not being applied to the element. To fix this issue I'm switching the priority back to 100 and making moving the binding setup into the pre-linking function. This means that: - terminal directives with priority lower than 100 will not affect the attribute binding - if a directive wants to add or alter bindings it can do so in the pre-linking phase, as long as the priority of this directive is more than 100 - all post-linking functions will execute after the attribute binding has been set up - all pre-linking functions with directive priority lower than 100 will execute after the attribute bindings have been setup BREAKING CHANGE: the attribute interpolation (binding) executes as a directive with priority 100 and the binding is set up in the pre-linking phase. It used to be that the priority was -100 in rc.2 (100 before rc.2) and that the binding was setup in the post-linking phase. Closes #4525 Closes #4528 Closes #4649
2013-10-25style(injectorSpec): fix typo in "it" descriptionArun Israel
Closes #4483
2013-10-24fix($animate): skip unnecessary addClass/removeClass animationsMatias Niemelä
Skip addClass animations if the element already contains the class that is being added to element. Also skip removeClass animations if the element does not contain the class that is being removed. Closes #4401 Closes #2332
2013-10-24fix($compile): instantiate controlers when re-entering compilationIgor Minar
When we re-enter compilation either due to async directive templates or element transclude directive we need to keep track of controllers to instantiate during linking. This piece of info was missing when re-entering compilation and that's what this commit fixes. I also reordered the properties in the previousCompileContext object. Closes #4434 Closes #4616
2013-10-24fix(input): keep track of min/max attars on-the-flyDmitry Shirokov
Now input[type=button] keeps track of both min and max attrs even if they change over time.
2013-10-23fix(ngView): ensure the new view element is placed after the old view elementMatias Niemelä
Closes #4362
2013-10-23fix($animate): ensure animations work properly when the $rootElement is ↵Matias Niemelä
being animated Closes #4397 Closes #4231
2013-10-23fix($animate): only cancel class-based animations if the follow-up class ↵Matias Niemelä
contains CSS transition/keyframe animation code Closes #4463 Closes #3784
2013-10-18fix(csp): fix csp auto-detection and stylesheet injectionIgor Minar
When we refactored , we broke the csp mode because the previous implementation relied on the fact that it was ok to lazy initialize the .csp property, this is not the case any more. Besides, we need to know about csp mode during bootstrap and avoid injecting the stylesheet when csp is active, so I refactored the code to fix both issues. PR #4411 will follow up on this commit and add more improvements. Closes #917 Closes #2963 Closes #4394 Closes #4444 BREAKING CHANGE: triggering ngCsp directive via `ng:csp` attribute is not supported any more. Please use data-ng-csp instead.
2013-10-18fix($injector): allow a constructor function to return a functionVojta Jina
This change makes `$injector.instantiate` (and thus `$provide.service`) to behave the same as native `new` operator.
2013-10-15fix($parse): check function call context to be safeChirayu Krishnappa
Closes #4417
2013-10-11fix($compile): abort compilation when duplicate element transclusionIgor Minar
Issue an error and abort compilation when two directives that ask for transclusion are found on a single element. This configuration is not supported and we previously failed to issue the error because in the case of element transclusion the compilation is re-started and this caused the compilation context to be lost. The ngRepeat directive has been special-cased to bypass this warning because it knows how to handle this scenario internally. This is not an ideal solution to the problem of multiple transclusions per element, we are hoping to have this configuration supported by the compiler in the future. See #4357. Closes #3893 Closes #4217 Closes #3307
2013-10-10fix($animate): perform internal caching on getComputedStyle to boost the ↵Matias Niemelä
performance of CSS3 transitions/animations Closes #4011 Closes #4124
2013-10-10fix($animate): ensure structural animations skip all child animations even ↵Matias Niemelä
if no animation is present during compile Closes #3215
2013-10-10refactor($animate): queue all successive animations to use only one reflowMatias Niemelä
2013-10-10fix($animate): cancel any ongoing child animations during move and leave ↵Matias Niemelä
animations
2013-10-10fix($animate): ensure elapsedTime always considers delay valuesMatias Niemelä
2013-10-10fix(modules): stop leaking global variables in testsPete Bacon Darwin
The routeUtils.js file was declaring a number of functions that were leaking into other modules such as ngMocks causing tests to pass incorrectly. Closes #4360
2013-10-10refactor(location): $location now uses urlUtils, not RegExJeff Cross
The location service, and other portions of the application, were relying on a complicated regular expression to get parts of a URL. But there is already a private urlUtils provider, which relies on HTMLAnchorElement to provide this information, and is suitable for most cases. In order to make urlUtils more accessible in the absence of DI, its methods were converted to standalone functions available globally. The urlUtils.resolve method was renamed urlResolve, and was refactored to only take 1 argument, url, and not the 2nd "parse" boolean. The method now always returns a parsed url. All places in code which previously wanted a string instead of a parsed url can now get the value from the href property of the returned object. Tests were also added to ensure IPv6 addresses were handled correctly. Closes #3533 Closes #2950 Closes #3249
2013-10-09feat(ngRepeat): use block separator commentsjankuca
Issue: multi-elements ng-repeat (ng-repeat-start, ng-repeat-end) can contain elements with a trancluding directive. This directive changes content of the row (template) and ng-repeat does not work correctly (when removing/moving rows), because ng-repeat works with the original template (elements). This changes ng-repeat behavior to traverse the DOM to find current elements everytime we are moving/removing rows (if the template has multiple elements). Closes #3104
2013-10-09fix(jqLite): ignore class methods on comment elementsVojta Jina
Since c785267e jqLite uses setAttribute (rather than className property) in order to change classes. Some elements (eg. Comment) do not have this method which blows up. jQuery silently ignores these method calls (because it uses className), so to get the same behavior as jQuery, we check for setAttribute method first.
2013-10-09revert: fix($parse): handle promises returned from parsed function callsIgor Minar
This reverts commit 3a65822023119b71deab5e298c7ef2de204caa13. The change cased regressions in third party components that require promises from getter functions not to be unwrapped. Since we have deprecated the promise unwrapping support in $parse it doesn't make much sense to fix this issue and deal with regressions in third party code. Closes #4158
2013-10-09fix($parse): deprecate promise unwrapping and make it an opt-inIgor Minar
This commit disables promise unwrapping and adds $parseProvider.unwrapPromises() getter/setter api that allows developers to turn the feature back on if needed. Promise unwrapping support will be removed from Angular in the future and this setting only allows for enabling it during transitional period. If the unwrapping is enabled, Angular will log a warning about each expression that unwraps a promise (to reduce the noise, each expression is logged only onces). To disable this logging use `$parseProvider.logPromiseWarnings(false)`. Previously promises found anywhere in the expression during expression evaluation would evaluate to undefined while unresolved and to the fulfillment value if fulfilled. This is a feature that didn't prove to be wildly useful or popular, primarily because of the dichotomy between data access in templates (accessed as raw values) and controller code (accessed as promises). In most code we ended up resolving promises manually in controllers or automatically via routing and unifying the model access in this way. Other downsides of automatic promise unwrapping: - when building components it's often desirable to receive the raw promises - adds complexity and slows down expression evaluation - makes expression code pre-generation unattractive due to the amount of code that needs to be generated - makes IDE auto-completion and tool support hard - adds too much magic BREAKING CHANGE: $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. Closes #4158 Closes #4270
2013-10-09test(filters): fix timezone-dependent testBrian Ford
Closes #4218