aboutsummaryrefslogtreecommitdiffstats
path: root/test/ng
AgeCommit message (Collapse)Author
2013-07-02fix($compile): prevent infinite loop w/ replace+transclude directivesIgor Minar
Previously if a template contained a directive that had a template (sync or async) and the directive template was to replace the original element and the directive template contained another directive on the root element of this template and this new directive was an element transclude directive then an infinite recursion would follow because the compiler kept on re-adding and reapplying the original directive to the replaced node. This change fixes that. Closes #2155
2013-07-02revert: fix(compiler): corrects component transclusion on ...Igor Minar
This reverts commit 15e1a29cd08993b599f390e83a249ec17f753972. The original commit was fixing two issues - one of them was preventing attributes that triggered directives that replaced the compiled node to be merged into the new node. This change was a breaking change (as seen in the diff of the tests in this commit) and that's why it's being removed. A proper fix will follow.
2013-07-02test(ngRepeat): disable an element directive test on IE8Igor Minar
2013-07-02revert: test(ngRepeat): fix IE8 test compatibility issueIgor Minar
This reverts commit 0c6fb665a4e2e1e7ceb11372153963658d4b53b1. The change invalidated the test because the point of the the test was to test that an element directive works. Changing it to attribute directive was wrong.
2013-07-01test(ngRepeat): fix IE8 test compatibility issueIgor Minar
2013-07-01fix(Angular.js): handle duplicate params in parseKeyValue/toKeyValuejoshkurz
parseKeyValue and toKeyValue can now handle duplicate values in the query. ``` ?x=1&x=2 <-> {x:[1,2]} ``` The algorithm looks like: 1)parseKeyValue looks for presence of obj[key] 2)detects and replaces obj[key] with [obj[key],val] 3)then pushes more duplicates if necessary 4)toKeyValue decodes array correctly 5)(not changed)$location.search({param: 'key'}) still replaces if necessary 6)(not changed)$location.search({param: ['key1', 'key2']}) sets the url with duplicates BREAKING CHANGE: 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.
2013-06-28test($compile): use FQDN for img[src]Chirayu Krishnappa
img[src]="https://foo" has the unfortunate problem that the browser will actually try retrieving the resource the non FQDN foo. The local DNS might suffix a domain to this, resolve it, and try to present a certificate for the https request and prompt the user to pick a certificate. This commit avoids that by making foo a FQDN. Note that it might be better to replace foo with example.com (ref http://tools.ietf.org/html/rfc2606#section-3).
2013-06-28style(ngRepeatSpec): fix up colons and iitPete Bacon Darwin
2013-06-27fix(compiler): corrects component transclusion on compilation root.Igor Minar
Closes# 2155
2013-06-24fix($location): default to / for the url base if no base[href]Igor Minar
With the recent refactoring of $location service we changed this behavior resulting in a regression. Previously we thought that html5 mode always required base[href] to be set in order for urls to resolve properly. It turns out that base[href] is problematic because it makes anchor urls (#foo) to always resolve to the base url, which is almost always incorrect and results in all anchors links and other anchor urls (e.g. svg references) to be broken. For this reason, we should now start recommending that people just deploy to root context (/) and not set the base[href] when using the html5 mode (push/pop history state). If it's impossible to deploy to the root context then either all urls in the app must be absolute or base[href] must be set with the caveat that anchor urls in such app won't work. Closes #2762
2013-06-24test($compile): fix IE specific test.Chirayu Krishnappa
2013-06-24fix($compile): reject multi-expression interpolations for src attributeChirayu Krishnappa
BREAKING CHANGE: Concatenating expressions makes it hard to reason about whether some combination of concatenated values are unsafe to use and could easily lead to XSS. By requiring that a single expression be used for *[src/ng-src] such as iframe[src], object[src], etc. (but not img[src/ng-src] since that value is sanitized), we ensure that the value that's used is assigned or constructed by some JS code somewhere that is more testable or make it obvious that you bound the value to some user controlled value. This helps reduce the load when auditing for XSS issues. 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()}}">
2013-06-21fix($compile): disallow interpolations for DOM event handlersChirayu Krishnappa
BREAKING CHANGE: 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 likely leads to an XSS if you're not super careful. On the other hand, ng-click and such event handlers evaluate Angular expressions that are a lot safer (e.g. No direct access to global objects - only scope), cleaner and harder to exploit. 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()">
2013-06-21fix($compile): sanitize values bound to img[src]Chirayu Krishnappa
Ref: 9532234bf1c408af9a6fd2c4743fdb585b920531 BREAKING CHANGE: img[src] URLs are now sanitized using the same whitelist as a[href] URLs. The most obvious impact is if you were using data: URIs. data: URIs will be whitelisted for img[src] in a future commit.
2013-06-19fix($http): ensure case-insens. header overridingCaio Cunha
If user send content-type header, both content-type and default Content-Type headers were sent. Now default header overriding is case-insensitive.
2013-06-19feat(jqLite): switch bind/unbind to more recent jQuery on/offMichał Gołębiowski
jQuery switched to a completely new event binding implementation as of 1.7.0, centering around on/off methods instead of previous bind/unbind. This patch makes jqLite match this implementation while still supporting previous bind/unbind methods.
2013-06-17chore(minErr): replace ngError with minErrKen Sheedlo
2013-06-11fix(ngRepeat): support growing over multi-element groupsMisko Hevery
2013-06-11fix($compile): support multi-element group over text nodesMisko Hevery
2013-06-06refactor($route): pull $route and friends into angular-route.jsIgor Minar
$route, $routeParams and ngView have been pulled from core angular.js to angular-route.js/ngRoute module. This is was done to in order keep the core focused on most commonly used functionality and allow community routers to be freely used instead of $route service. There is no need to panic, angular-route will keep on being supported by the angular team. Note: I'm intentionally not fixing tutorial links. Tutorial will need bigger changes and those should be done when we update tutorial to 1.2. BREAKING CHANGE: applications that use $route will now need to load angular-route.js file and define dependency on 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']); ... ``` Closes #2804
2013-05-30fix(jqLite): Added optional name arg in removeDataJeff Cross
jQuery's API for removeData allows a second 'name' argument to just remove the property by that name from an element's data. The absence of this argument was causing some features not to work correctly when combining multiple directives, such as ng-click, ng-show, and ng-animate.
2013-05-30fix($animator): ensure $animator calculates the highest duration + delay for ↵Matias Niemelä
and transitions and animations together
2013-05-28feat($compile): support multi-element directiveMisko Hevery
By appending directive-start and directive-end to a directive it is now possible to have the directive act on a group of elements. It is now possible to iterate over multiple elements like so: <table> <tr ng-repeat-start="item in list">I get repeated</tr> <tr ng-repeat-end>I also get repeated</tr> </table>
2013-05-24feat(ngError): add error message compression and better error messagesIgor Minar
- add toThrowNg matcher
2013-05-20feat($http): add support for aborting via timeout promisesDavid Bennett
If the timeout argument is a promise, abort the request when it is resolved. Implemented by adding support to $httpBackend service and $httpBackend mock service. This api can also be used to explicitly abort requests while keeping the communication between the deffered and promise unidirectional. Closes #1159
2013-05-17test($parse): improve clarity of ternary testsZach Snow
2013-05-16feat($animator): provide support for custom animation eventsMatias Niemelä
2013-05-16test($animator): ensure invalid $sniffer.transitions and $sniffer.animations ↵Matias Niemelä
flags are caught in animation spec code
2013-05-16feat($parse): add support for ternary operators to parserZach Snow
Add '?' token to lexer, add ternary rule to parser at (hopefully) proper precedence and associativity (based on https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Operator_Precedence). Since (exp1 && exp2 || exp3) is supported by the parser, and (exp1 ? exp2 : exp3) works the same way, it seems reasonable to add this minor form of control to templates (see #719).
2013-05-16feat($http): add a default content type for PATH requestsDaniel Stockton
The default header is now application/json which while not perfect in all cases is better than the browser default application/xml. The new headers also makes for better compatibility with Rails 4
2013-05-14feat(ngSrcset): add new ngSrcset directiveSamuel Santos
In line with ngSrc and ngHref, this new directive ensures that the `srcset` HTML5 attribute does not include a pre-interpolated string. Without it the browser will fetch from the URL with the literal text `{{hash}}` until AngularJS replaces the expression inside `{{hash}}`. Closes #2601
2013-05-14feat(select): match options by expression other than object identityquazzie
Extend ng-options with a new clause, "track by [trackByExpression]", which can be used when working with objects. The `trackByExpression` should uniquely identify select options objects. This solves the problem of previously having to match ng-options objects by identity. You can now write: `ng-options="obj as obj.name for obj in objects track by obj.id"` The "track by" expression will be used when checking for equality of objects. Examples: <select ng-model="user.favMovieStub" ng-options="movie as movie.name for movie in movies track by movie.id"> </select> scope: { user: { name: 'Test user', favMovieStub: { id: 1, name: 'Starwars' } } movies: [{ id: 1, name: 'Starwars', rating: 5, ... }, { id: 13, ... }] } The select input will match user favMovieStub to the first movie in the movies array, and show "Star Wars" as the selected item.
2013-05-13feat(ngAnimate): cancel previous incomplete animations when new animations ↵Matias Niemelä
take place
2013-05-13chore($sniffer): replace remaining supportsTransitions/supportsAnimations ↵Matias Niemelä
flags inside tests
2013-05-11fix($browser): should use first value for a cookie.Chirayu Krishnappa
With this change, $browser.cookies()["foo"] will behave like docCookies.getItem("foo") where docCookies is defined at https://developer.mozilla.org/en-US/docs/DOM/document.cookie This fixes the issue where, if there's a value for the XSRF-TOKEN cookie value with the path /, then that value is used for all applications in the domain even if they set path specific values for XSRF-TOKEN. Closes #2635
2013-05-10fix(ngPluralize): handle the empty string as a valid overrideLucas Galfasó
Fix the check for overrides so it is able to handle the empty string Closes #2575
2013-05-08chore(ngAnimate): CSS classes X-setup/X-start -> X/X-activeMatias Niemelä
BREAKING CHANGE: css classes foo-setup/foo-start become foo/foo-active The CSS transition classes have changed suffixes. To migrate rename .foo-setup {...} to .foo {...} .foo-start {...} to .foo-active {...} or for type: enter, leave, move, show, hide .foo-type-setup {...} to .foo-type {...} .foo-type-start {...} to .foo-type-active {...}
2013-05-08feat(ngAnimate): Add support for CSS3 Animations with working delays and ↵Matias Niemelä
multiple durations
2013-05-08feat($sniffer): Add support for supportsAnimations flag for detecting CSS ↵Matias Niemelä
Animations browser support
2013-05-07fix(date): correctly format dates with more than 3 sub-second digitsKevin Wells
This date {{2003-09-10T13:02:03.123456Z | date: yyyy-mm-dd ss} is now treated as having 123.45ms. Previously it had 123456ms so 123 seconds were added to the formatted date. Use local date in unit tests so they work in any time zone
2013-05-07fix(select): ensure empty option is not lost in IE9Chad Smith
Fix a check inside render for select elements with ngOptions, which compares the selected property of an element with it's desired state. Ensure the placeholder, if available, is explicitly selected if the model value can not be found in the option list. Without these fixes it's up to the browser implementation to decide which option to choose. In most browsers, this has the effect of displaying the first item in the list. In IE9 however, this causes the select to display nothing. Closes #2150, #1826
2013-05-06fix($location): prevent navigation when event isDefaultPreventedMisko Hevery
2013-05-03feat(ngInclude): $includeContentRequested eventMatthieu Larcher
Adding a $includeContentRequested event in order to better keep track of how many includes are sent and be able to compare it with how many have finished.
2013-05-02fix($location): compare against actual instead of current URLMisko Hevery
2013-05-02fix($location): prevent navigation if already on the URLMisko Hevery
2013-05-02fix(ngAnamite): eval ng-animate expression on each animationMisko Hevery
2013-05-02fix(ngView): accidentally compiling leaving contentMisko Hevery
closes: #2304
2013-05-02fix(ngRepeat): correctly iterate over array-like objectsGonzalo Ruiz de Villa
Check if the object is array-like to iterate over it like it's done with arrays. Closes #2546
2013-05-02fix($rootScope) ensure $watchCollection correctly handles arrayLike objectsGonzalo Ruiz de Villa
2013-05-01fix($location): back-button should fire $locationChangeStartquazzie
Before $locationChangeStart event is not broadcast when pressing the back-button on the browser. Closes #2109