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.
- Closes#152 ($resource().query() sometimes calls callback before
returning, and it shouldn't)
- add $browser.defer method
- add $defer service
- integrate $browser.defer with outstandingRequests counter in $browser
- fix all old tests that relied on buggy behavior
- move @ng:repeat to widgets.js and its specs to widgetsSpecs.js
- move @ng:non-bindable to widgets.js and its specs to widgetsSpecs.js
- make widget.template suitable for attribute widgets
- fix up the js docs for attribute widgets
- if initRun param is set to false, listener doesn't execute
- the oldValue should equal newValue during the initial execution
- added docs
- added specs
- improve json filter example
- improve filter overview doc
- improving validator overview jsdocs
- simplify number filter examples and make them live + add specs
- various doc fixes
Support ISO 8601 extended format datetime strings (YYYY-MM-DDTHH:mm:ss.SSSZ) as defined
in EcmaScript 5 throughout angular. This means that the following apis switched from
YYYY-MM-DDTHH:mm:ssZ to YYYY-MM-DDTHH:mm:ss.SSSZ (note the added millis) when representing dates:
- angular.Date.toString
- angular.String.toDate
- JSON serialization and deserialization (used by json filter, $xhr and $resource)
If user override existing extension, angular properties ($) will be preserved.
This piece of logic could be refactored into separate method:
Something like we have extend(), addMissingProperties() - I can't find a name
for this method...
Closes#51
The reason to void these to objects is that they cause all sorts
of problems like exceptions being thrown and infinite loops occuring
when we iterate over object properties.