The previous implementation didn't handle situation when in css
something was hidden with a cascaded display:none rule and then we
wanted to show it.
Unfortunatelly our test doesn't test this scenario because it's too
complicated. :-/
both numbers and currency need to be formatted using a generic pattern
which can be replaced for a different pattern when angular is working in
a non en-US locale
for now only en-US locale is supported, but that will change in the
future
- fixed copyright overnship
- updated copyright years
- added @license tag so that closure compiler preserves the header
- added version number into headers (finally!)
- add support for full,long, medium, short datetime formats in en
Breaks MMMMM. now we don't support MMMMM anymore as old implementation differs
from Unicode Locale Data format we are following.
- removed support for fullDateTime and fullTime as it means too much
trouble with full timeZone names
- added docs for the new features
- If the third param of TzDate constructor is defined, toStirng will
just return this third parameter. Otherwise, toString will still
be treated as unimplemented method
This reverts commit 2428907259.
We decided to revert this because it is not bullet proof. The issue is
that we can't reliably have both angular and non-angular code in charge
of the DOM. We could work around some issues here and there, but we
can't do it reliably, so it's better not to support DOM manipulation
that happens outside of angular. There is a good chance that once we
integrate with MDVs our possition will change, but until then our
position is that only angular or angular widgets/directives can change
change DOM that was compiled.
- browser should remember the last value retrieved via browser.getUrl
- browser should update window.location only if the new value is
different from the current window.location value
the flag must be in all src and test files so that we get the benefit of
running in the strict mode even in jstd
the following script was used to modify all files:
for file in `find src test -name "*.js"`; do
echo -e "'use strict';\n" > temp.txt
cat $file >> temp.txt
mv temp.txt $file
done
- add 'use strict'; statement to the prefix file
- configure closure compiler to use the ES5 strict mode
- strip all file-specific strict mode flags after concatination
Closes#223
Breaks $browser.poll() method is moved inline to $browser.startpoll()
Breaks $browser.startpoll() method is made private
Refactor tests to reflect updated browser API
Closes#387
- e2e tests will run index.html (without jquery) and with
index-jq.html(with jquery).
- many small changes to make e2e tests work withough JQuery as we
discover problems that were previously hidden by using real JQuery.
Rewrite $route example a bit, as it required $location and $route services
to be eager published in the root scope.
Fix small typos in formatter and ng:options docs.
The var eventHandler was defined outside forEach loop, so registering more
events caused calling listeners registered by the last one.
Regression:
elm.bind('click keyup', callback1);
elm.bind('click', callback2);
elm.bind('keyup', callback3);
Firing click event would have executed callback1, callback3 !
$xhr header defaults are now exposed as $xhr.defaults.headers.common and
$xhr.default.headers.<httpmethod>. This allows applications to configure
their defaults as needed.
This commit doesn't allow headers to be set per request, only per
application. Per request change would require api change, which I tried
to avoid *for now*.
Creating <script> tags would require a lot of extra work if we want all browsers
to load and execute these scripts. We decided to not implement that in jqLite.
See #369 for more information.
Closes#369
Support new date format, specifically day of week/Month of year in string
e.g. {{ someDate | data:"EEE, MMM d, yyyy" }} -> "Wed, Jul 10, 2011"
Closes#396
8cad231 broke $eager services
Problem is that the injector.eager function is not invoked when a new scope
is created. Added a test to make sure service is eagerly instantiated.
Closes#403
This behavior was changed by e83465c362
So this commit should have been part of e83465c362
Also removed hiding and navigating to about:blank as it makes no sense now...
Other browsers prepend "Error: <Exception name>" to stack, but FF4 and Opera do not.
So when formatting error we prepend it by hand, when not present...
ng:href was producing unclickable links, as the event propagation was stopped by 'a' widget
All links in regression/issue-352.html were tested in:
* Chrome 11
* Opera 11
* Firefox 4
* IE7, IE8
Closes#352
Couple of changes into angular.scenario runner:
- add autotest config (runs tests when document ready)
- update ObjectModel (forwards events)
- use only one ObjectModel instance for all outputters
- expose error msg and line number in ObjectModel.Spec and ObjectModel.Step
- fix generating spec.ids
- fix 'html' output so that it does not mutate ObjectModel
Couple of changes into docs / generator:
- rename copy -> copyTpl
- move docs/static into docs/examples (to avoid conflict with jstd proxy)
Running all docs e2e tests:
========================================================
1/ compile angular-scenario, jstd-scenario-adapter
>> rake compile
2/ build docs
>> rake docs
3/ start jstd server
>> ./server-scenario.sh
4/ capture some browser
5/ run node server to serve static content
>> node ../lib/nodeserver/server.js
6/ run tests
>> ./test-scenario.sh
Removed angular.scenario.Application.checkUrlStatus_ method and these tests:
* should call error handler if status check fails
* should perform a HEAD request to verify file existence
* should call error handler if status code is less than 200
* should call error handler if status code is greater than 299
* should call error handler if status code is greater than 299
This is a combination of 4 commits:
* Fix some small typos, missing semi-colons, etc.
* Fix comment for angular.scenario.SpecRunner.run method
* Fixed some missing semi-colons in cookbook
* Fixed missing semi-colon in nodeserver/server.js
when we stopped exposing $location service on the root scope
the scenario runner was not modified to access the $location
service via $service
The following apis were affected:
- browser().location().hashSearch()
- browser().location().hashPath()
- browser().location().search()
sync caching in ng:view must be reverted becase ng:view uses
$route.onChange to listen for changes.
$route fires all onChange events before it calls $become(Controller)
which means that if the template being included via ng:view contains
ng:controller, ng:include or other widget that create new scopes,
these scopes will be created and initialized before the parent scope
is fully initialized (happens after $become is called).
For this reason ng:view must be async.
The new scope implemenetation will resolve this issue by providing
us with an api to register one-off tasks to be executed during the
flush phase. We'll be able to compile and link the included template
safely at this time.
- unless we are repeating OPTION elements, buffer new nodes in document
fragment and append them to the DOM in one go at the end
- for OPTION elements we have to keep on using the old way
because of how option widget communicates with select widget
this should be change, but that change is out of scope of this CL
- modify jqLite to support wrapping of document fragments
- fix jqLite documentation typo
This change unintentionally avoids the following webkit bug that
that affects repeater growth:
https://bugs.webkit.org/show_bug.cgi?id=57059
However the following bug affecting shrining of repeaters is still
unresolved https://bugs.webkit.org/show_bug.cgi?id=57061
- extend size() to take size(obj, ownPropsOnly)
- add specs for size()
- update docs to mention string support
- use size() in ng:repeat
including the hasOwnProp check for all object doesn't create
significant perf penalty:
http://jsperf.com/dedicated-code-branch-for-hasownprop
- add `sync` flag xhr.cache
- change ng:include to use the sync flag
- change ng:view to use the sync flag
The end result is that there are fewer repaints in the browser,
which means less "blinking" that user sees.
they have no significant effect on minified and gziped size. in fact
they make things worse.
file | before | after removal
----------------------------------------
concat | 325415 | 325297
min | 62070 | 62161
min + gzip | 25187 | 25176
The bottom line is that we are getting 0.05% decrease in size after
gzip without all of the hassle of using underscores everywhere.
so it is possible to easily compile just a part of a document.
e.g.:
<html>
<head>
<title>partially compiled doc</title>
<script src="angular.js" ng:autobind="compileThis"></script>
</head>
<body>
this part won't be compiled: {{1+2}}
<div id="compileThis" ng:init="i=0" ng:click="i = i+1">
Click count: {{i}}
</div>
</body>
</html>
")]}\',\n" is a commonly used security prefix added to json http
responses iat google and elsewhere in order to prevent certain
cross-site attacks
$xhr service now autodetects the prefix and strips it before
deserializing the json.
the implementation should be more flexible to allow for wider range
of prefixes, but we need this one right now and can address other
usecases later.
angular.compile()() returns {scope:scope, view:view},
this isn't useful at all and only makes tests more verbose.
Instead, this change makes the linking function return scope directly
and if anyone needs the linked dom there are two ways to do it
documented in angular.compile.
other changes:
- moved angular.compile docs to the compiler so that they are closer to
the compiler
- fixed some typos and updated angular.compile docs with the new return
value
- split up services into files under src/service
- split up specs into files under test/service
- rewrite all specs so that they don't depend on one global forEach
- get rid of obsolete code and tests in ng:switch
- rename mock $log spec from "$log" to "$log mock"
I extracted mock $log factory into stand alone function, so we can access it and test, because this service is rewritten by real service during testing, so we can't access it through angular.$service('$log')...
- split mocks between angular-mocks.js and mocks.js
- src/angular-mocks.js now contains only mocks that we want to ship
- test/mocks.js contains mocks that we use internally for testing
angular
- created angular.mock namespace
- created public $exceptionHandler mock rethrows errors
- created public $log mock stores all logs messages in an array that can
be accessed to make assertions
- internally we now have factory to create $exceptionHandler
that we can assert on
- internally we also keep track of all messages logged and
fail tests if messages were not expected and cleaned up (checked
via global beforeEach and afterEach)
- updated RakeFile and docs reader.js to point to the new
angular-mocks.js location
- made real $exceptionHandler and $log factories accessible from tests
and simplified their specs
- fixed typos in several spec descriptions
- added log assertions throughout the test suite
- this change is needed because of previously reverted $route changes
that used to propagate evals automatically.
- also added docs to highlight how the eval propagation works
This reverts commit 17ee0f031a.
this and a5eb3ed1 introduced scope leakage that can't be resolved
until we fix up scope relationships and eval propagation.
I'm reverting both this and a5eb3ed1 until we can properly address
the issue.
- retrieveScope run into infinite loop if called on DOM tree
that doesn't contain scope reference (happens only with jQuery)
- added missing specs for retrieveScope function
select (one/multiple) could not chose from a list of objects, since DOM requires string ids.
Solved by adding index formatter, which exposed incorrect handling of formatters in select
widgets.
- don't update browser before and after eval instead
- sync location properties before eval
- sync location properties and update browser after eval
- added tests
- symplified the code
- removed $location.toString() because it was not idempotent and useless
This resolves the issue with issuing two $route.onHashChange calls
when the $location was updated with a hashPath that needs to be encoded
camelcase is used for other angular functions and forEach is also
used by EcmaScript standard.
- rename the internal as well as the external function name
- tweak the implementation of the function so that it doesn't
clober it self when we extend the angular object with an
object that has a forEach property equal to this forEach function
Closes#85
- use jqLite api to bootstrap angular
- when jQuery is present DOMContentLoaded or hacks for IE are used
- when jqLite is present DOMContentLoaded is used for modern browsers
and IE9 and window.onload is used for other browsers.
- test html for comparing DOMContentLoaded with window.onload
Closes#224
in IE window object has length property which makes it look like a
collection to jqLite. This commit makes jqLite properly identify
window as an element even in IE.
IE6 doesn't have Window type, so we need to check against window
object and only then do a more general check against Window. This
is not perfect, but I say screw IE6.
IE9 added support for addEventListener and it looks like some
new events (e.g. DOMContentLoaded) can't be registered via attachEvent,
only addEventListener correctly registeres these. So to make sure
we are using the latest and greatest we need to look for addEventListener
instead of attachEvent in the jqLite feature detection code.
- There was a perceived lag when typing do to the fact that we were
listening on the keyup event instead of keydown. The issue with
keydown is that we can not read the value of the input field. To
solve this we schedule a defer call and perform the model update
then.
- To prevent calling $eval on root scope too many times as well as to
prevent drowning the browser with too many updates we now call the
$eval only after 25ms and any additional requests get ignored. The
new update service is called $updateView
This reverts commit 00ca67e4be.
Now that we don't have published services, we don't need to worryi
about this any more and in fact this behavior is confusing because
to override a service that has dependencies with a services with
no dependencies one must specify $inject:[] or else the old
dependencies will be injected.
Conflicts:
src/Angular.js
test/AngularSpec.js
- Browser now starts the poller on first call to addPollFn()
- Many services ($location, $cookies, $router) are no longer eager-publish. The result is that
unless someone needs the $cookies, they will not cause the Browser to start polling for them.