angularjs-rails 1.2.0.rc1 → 1.2.0.rc2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/lib/angularjs-rails/version.rb +1 -1
- data/vendor/assets/javascripts/angular-animate.js +150 -119
- data/vendor/assets/javascripts/angular-cookies.js +17 -1
- data/vendor/assets/javascripts/angular-loader.js +6 -3
- data/vendor/assets/javascripts/angular-mocks.js +15 -5
- data/vendor/assets/javascripts/angular-resource.js +13 -12
- data/vendor/assets/javascripts/angular-route.js +66 -55
- data/vendor/assets/javascripts/angular-sanitize.js +10 -19
- data/vendor/assets/javascripts/angular-scenario.js +218 -100
- data/vendor/assets/javascripts/angular-touch.js +21 -4
- data/vendor/assets/javascripts/angular.js +218 -100
- metadata +3 -3
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license AngularJS v1.2.
|
2
|
+
* @license AngularJS v1.2.0-rc.2
|
3
3
|
* (c) 2010-2012 Google, Inc. http://angularjs.org
|
4
4
|
* License: MIT
|
5
5
|
*/
|
@@ -8,6 +8,17 @@
|
|
8
8
|
/**
|
9
9
|
* @ngdoc overview
|
10
10
|
* @name ngCookies
|
11
|
+
* @description
|
12
|
+
*
|
13
|
+
* # ngCookies
|
14
|
+
*
|
15
|
+
* Provides the {@link ngCookies.$cookies `$cookies`} and
|
16
|
+
* {@link ngCookies.$cookieStore `$cookieStore`} services.
|
17
|
+
*
|
18
|
+
* {@installModule cookies}
|
19
|
+
*
|
20
|
+
* See {@link ngCookies.$cookies `$cookies`} and
|
21
|
+
* {@link ngCookies.$cookieStore `$cookieStore`} for usage.
|
11
22
|
*/
|
12
23
|
|
13
24
|
|
@@ -23,6 +34,8 @@ angular.module('ngCookies', ['ng']).
|
|
23
34
|
* Only a simple Object is exposed and by adding or removing properties to/from
|
24
35
|
* this object, new cookies are created/deleted at the end of current $eval.
|
25
36
|
*
|
37
|
+
* Requires the {@link ngCookies `ngCookies`} module to be installed.
|
38
|
+
*
|
26
39
|
* @example
|
27
40
|
<doc:example>
|
28
41
|
<doc:source>
|
@@ -127,6 +140,9 @@ angular.module('ngCookies', ['ng']).
|
|
127
140
|
* Provides a key-value (string-object) storage, that is backed by session cookies.
|
128
141
|
* Objects put or retrieved from this storage are automatically serialized or
|
129
142
|
* deserialized by angular's toJson/fromJson.
|
143
|
+
*
|
144
|
+
* Requires the {@link ngCookies `ngCookies`} module to be installed.
|
145
|
+
*
|
130
146
|
* @example
|
131
147
|
*/
|
132
148
|
factory('$cookieStore', ['$cookies', function($cookies) {
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license AngularJS v1.2.
|
2
|
+
* @license AngularJS v1.2.0-rc.2
|
3
3
|
* (c) 2010-2012 Google, Inc. http://angularjs.org
|
4
4
|
* License: MIT
|
5
5
|
*/
|
@@ -29,10 +29,13 @@ function setupModuleLoader(window) {
|
|
29
29
|
* @name angular.module
|
30
30
|
* @description
|
31
31
|
*
|
32
|
-
* The `angular.module` is a global place for creating and
|
33
|
-
* modules (angular core or 3rd party) that should be available to an application must be
|
32
|
+
* The `angular.module` is a global place for creating, registering and retrieving Angular modules.
|
33
|
+
* All modules (angular core or 3rd party) that should be available to an application must be
|
34
34
|
* registered using this mechanism.
|
35
35
|
*
|
36
|
+
* When passed two or more arguments, a new module is created. If passed only one argument, an
|
37
|
+
* existing module (the name passed as the first argument to `module`) is retrieved.
|
38
|
+
*
|
36
39
|
*
|
37
40
|
* # Module
|
38
41
|
*
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license AngularJS v1.2.
|
2
|
+
* @license AngularJS v1.2.0-rc.2
|
3
3
|
* (c) 2010-2012 Google, Inc. http://angularjs.org
|
4
4
|
* License: MIT
|
5
5
|
*
|
@@ -316,7 +316,7 @@ angular.mock.$LogProvider = function() {
|
|
316
316
|
}
|
317
317
|
|
318
318
|
this.debugEnabled = function(flag) {
|
319
|
-
if (isDefined(flag)) {
|
319
|
+
if (angular.isDefined(flag)) {
|
320
320
|
debug = flag;
|
321
321
|
return this;
|
322
322
|
} else {
|
@@ -1851,9 +1851,11 @@ angular.mock.clearDataCache = function() {
|
|
1851
1851
|
*
|
1852
1852
|
* See {@link angular.mock.inject inject} for usage example
|
1853
1853
|
*
|
1854
|
-
* @param {...(string|Function)} fns any number of modules which are represented as string
|
1854
|
+
* @param {...(string|Function|Object)} fns any number of modules which are represented as string
|
1855
1855
|
* aliases or as anonymous module initialization functions. The modules are used to
|
1856
|
-
* configure the injector. The 'ng' and 'ngMock' modules are automatically loaded.
|
1856
|
+
* configure the injector. The 'ng' and 'ngMock' modules are automatically loaded. If an
|
1857
|
+
* object literal is passed they will be register as values in the module, the key being
|
1858
|
+
* the module name and the value being what is returned.
|
1857
1859
|
*/
|
1858
1860
|
window.module = angular.mock.module = function() {
|
1859
1861
|
var moduleFns = Array.prototype.slice.call(arguments, 0);
|
@@ -1865,7 +1867,15 @@ angular.mock.clearDataCache = function() {
|
|
1865
1867
|
} else {
|
1866
1868
|
var modules = currentSpec.$modules || (currentSpec.$modules = []);
|
1867
1869
|
angular.forEach(moduleFns, function(module) {
|
1868
|
-
|
1870
|
+
if (angular.isObject(module) && !angular.isArray(module)) {
|
1871
|
+
modules.push(function($provide) {
|
1872
|
+
angular.forEach(module, function(value, key) {
|
1873
|
+
$provide.value(key, value);
|
1874
|
+
});
|
1875
|
+
});
|
1876
|
+
} else {
|
1877
|
+
modules.push(module);
|
1878
|
+
}
|
1869
1879
|
});
|
1870
1880
|
}
|
1871
1881
|
}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license AngularJS v1.2.
|
2
|
+
* @license AngularJS v1.2.0-rc.2
|
3
3
|
* (c) 2010-2012 Google, Inc. http://angularjs.org
|
4
4
|
* License: MIT
|
5
5
|
*/
|
@@ -11,6 +11,16 @@ var $resourceMinErr = angular.$$minErr('$resource');
|
|
11
11
|
* @ngdoc overview
|
12
12
|
* @name ngResource
|
13
13
|
* @description
|
14
|
+
*
|
15
|
+
* # ngResource
|
16
|
+
*
|
17
|
+
* `ngResource` is the name of the optional Angular module that adds support for interacting with
|
18
|
+
* [RESTful](http://en.wikipedia.org/wiki/Representational_State_Transfer) server-side data sources.
|
19
|
+
* `ngReource` provides the {@link ngResource.$resource `$resource`} serivce.
|
20
|
+
*
|
21
|
+
* {@installModule resource}
|
22
|
+
*
|
23
|
+
* See {@link ngResource.$resource `$resource`} for usage.
|
14
24
|
*/
|
15
25
|
|
16
26
|
/**
|
@@ -25,23 +35,14 @@ var $resourceMinErr = angular.$$minErr('$resource');
|
|
25
35
|
* The returned resource object has action methods which provide high-level behaviors without
|
26
36
|
* the need to interact with the low level {@link ng.$http $http} service.
|
27
37
|
*
|
28
|
-
*
|
29
|
-
* To use $resource make sure you have included the `angular-resource.js` that comes in Angular
|
30
|
-
* package. You can also find this file on Google CDN, bower as well as at
|
31
|
-
* {@link http://code.angularjs.org/ code.angularjs.org}.
|
32
|
-
*
|
33
|
-
* Finally load the module in your application:
|
34
|
-
*
|
35
|
-
* angular.module('app', ['ngResource']);
|
36
|
-
*
|
37
|
-
* and you are ready to get started!
|
38
|
+
* Requires the {@link ngResource `ngResource`} module to be installed.
|
38
39
|
*
|
39
40
|
* @param {string} url A parametrized URL template with parameters prefixed by `:` as in
|
40
41
|
* `/user/:username`. If you are using a URL with a port number (e.g.
|
41
42
|
* `http://example.com:8080/api`), it will be respected.
|
42
43
|
*
|
43
44
|
* If you are using a url with a suffix, just add the suffix, like this:
|
44
|
-
* `$resource('http://example.com/resource.json')` or `$resource('http://example.com/:id.json')
|
45
|
+
* `$resource('http://example.com/resource.json')` or `$resource('http://example.com/:id.json')`
|
45
46
|
* or even `$resource('http://example.com/resource/:resource_id.:format')`
|
46
47
|
* If the parameter before the suffix is empty, :resource_id in this case, then the `/.` will be
|
47
48
|
* collapsed down to a single `.`. If you need this sequence to appear and not collapse then you
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license AngularJS v1.2.
|
2
|
+
* @license AngularJS v1.2.0-rc.2
|
3
3
|
* (c) 2010-2012 Google, Inc. http://angularjs.org
|
4
4
|
* License: MIT
|
5
5
|
*/
|
@@ -26,7 +26,12 @@ function inherit(parent, extra) {
|
|
26
26
|
* @name ngRoute
|
27
27
|
* @description
|
28
28
|
*
|
29
|
-
*
|
29
|
+
* # ngRoute
|
30
|
+
*
|
31
|
+
* The `ngRoute` module provides routing and deeplinking services and directives for angular apps.
|
32
|
+
*
|
33
|
+
* {@installModule route}
|
34
|
+
*
|
30
35
|
*/
|
31
36
|
|
32
37
|
var ngRouteModule = angular.module('ngRoute', ['ng']).
|
@@ -40,6 +45,8 @@ var ngRouteModule = angular.module('ngRoute', ['ng']).
|
|
40
45
|
* @description
|
41
46
|
*
|
42
47
|
* Used for configuring routes. See {@link ngRoute.$route $route} for an example.
|
48
|
+
*
|
49
|
+
* Requires the {@link ngRoute `ngRoute`} module to be installed.
|
43
50
|
*/
|
44
51
|
function $RouteProvider(){
|
45
52
|
var routes = {};
|
@@ -57,8 +64,8 @@ function $RouteProvider(){
|
|
57
64
|
* * `path` can contain named groups starting with a colon (`:name`). All characters up
|
58
65
|
* to the next slash are matched and stored in `$routeParams` under the given `name`
|
59
66
|
* when the route matches.
|
60
|
-
* * `path` can contain named groups starting with a colon and ending with a star (`:name*`).
|
61
|
-
* All characters are eagerly stored in `$routeParams` under the given `name`
|
67
|
+
* * `path` can contain named groups starting with a colon and ending with a star (`:name*`).
|
68
|
+
* All characters are eagerly stored in `$routeParams` under the given `name`
|
62
69
|
* when the route matches.
|
63
70
|
* * `path` can contain optional named groups with a question mark (`:name?`).
|
64
71
|
*
|
@@ -149,8 +156,8 @@ function $RouteProvider(){
|
|
149
156
|
// create redirection for trailing slashes
|
150
157
|
if (path) {
|
151
158
|
var redirectPath = (path[path.length-1] == '/')
|
152
|
-
|
153
|
-
|
159
|
+
? path.substr(0, path.length-1)
|
160
|
+
: path +'/';
|
154
161
|
|
155
162
|
routes[redirectPath] = extend(
|
156
163
|
{redirectTo: path},
|
@@ -241,13 +248,15 @@ function $RouteProvider(){
|
|
241
248
|
* @property {Array.<Object>} routes Array of all configured routes.
|
242
249
|
*
|
243
250
|
* @description
|
244
|
-
*
|
251
|
+
* `$route` is used for deep-linking URLs to controllers and views (HTML partials).
|
245
252
|
* It watches `$location.url()` and tries to map the path to an existing route definition.
|
246
253
|
*
|
254
|
+
* Requires the {@link ngRoute `ngRoute`} module to be installed.
|
255
|
+
*
|
247
256
|
* You can define routes through {@link ngRoute.$routeProvider $routeProvider}'s API.
|
248
257
|
*
|
249
|
-
* The `$route` service is typically used in conjunction with {@link ngRoute.directive:ngView ngView}
|
250
|
-
* directive and the {@link ngRoute.$routeParams
|
258
|
+
* The `$route` service is typically used in conjunction with the {@link ngRoute.directive:ngView `ngView`}
|
259
|
+
* directive and the {@link ngRoute.$routeParams `$routeParams`} service.
|
251
260
|
*
|
252
261
|
* @example
|
253
262
|
This example shows how changing the URL hash causes the `$route` to match a route against the
|
@@ -449,13 +458,12 @@ function $RouteProvider(){
|
|
449
458
|
var m = route.regexp.exec(on);
|
450
459
|
if (!m) return null;
|
451
460
|
|
452
|
-
var N = 0;
|
453
461
|
for (var i = 1, len = m.length; i < len; ++i) {
|
454
462
|
var key = keys[i - 1];
|
455
463
|
|
456
464
|
var val = 'string' == typeof m[i]
|
457
|
-
|
458
|
-
|
465
|
+
? decodeURIComponent(m[i])
|
466
|
+
: m[i];
|
459
467
|
|
460
468
|
if (key && val) {
|
461
469
|
params[key.name] = val;
|
@@ -562,7 +570,7 @@ function $RouteProvider(){
|
|
562
570
|
function interpolate(string, params) {
|
563
571
|
var result = [];
|
564
572
|
forEach((string||'').split(':'), function(segment, i) {
|
565
|
-
if (i
|
573
|
+
if (i === 0) {
|
566
574
|
result.push(segment);
|
567
575
|
} else {
|
568
576
|
var segmentMatch = segment.match(/(\w+)(.*)/);
|
@@ -586,9 +594,13 @@ ngRouteModule.provider('$routeParams', $RouteParamsProvider);
|
|
586
594
|
* @requires $route
|
587
595
|
*
|
588
596
|
* @description
|
589
|
-
*
|
590
|
-
*
|
591
|
-
*
|
597
|
+
* The `$routeParams` service allows you to retrieve the current set of route parameters.
|
598
|
+
*
|
599
|
+
* Requires the {@link ngRoute `ngRoute`} module to be installed.
|
600
|
+
*
|
601
|
+
* The route parameters are a combination of {@link ng.$location `$location`}'s
|
602
|
+
* {@link ng.$location#search `search()`} and {@link ng.$location#path `path()`}.
|
603
|
+
* The `path` parameters are extracted when the {@link ngRoute.$route `$route`} path is matched.
|
592
604
|
*
|
593
605
|
* In case of parameter name collision, `path` params take precedence over `search` params.
|
594
606
|
*
|
@@ -613,6 +625,8 @@ function $RouteParamsProvider() {
|
|
613
625
|
this.$get = function() { return {}; };
|
614
626
|
}
|
615
627
|
|
628
|
+
ngRouteModule.directive('ngView', ngViewFactory);
|
629
|
+
|
616
630
|
/**
|
617
631
|
* @ngdoc directive
|
618
632
|
* @name ngRoute.directive:ngView
|
@@ -625,6 +639,8 @@ function $RouteParamsProvider() {
|
|
625
639
|
* Every time the current route changes, the included view changes with it according to the
|
626
640
|
* configuration of the `$route` service.
|
627
641
|
*
|
642
|
+
* Requires the {@link ngRoute `ngRoute`} module to be installed.
|
643
|
+
*
|
628
644
|
* @animations
|
629
645
|
* enter - animation is used to bring new content into the browser.
|
630
646
|
* leave - animation is used to animate existing content away.
|
@@ -780,22 +796,18 @@ function $RouteParamsProvider() {
|
|
780
796
|
* @description
|
781
797
|
* Emitted every time the ngView content is reloaded.
|
782
798
|
*/
|
783
|
-
|
784
|
-
|
785
|
-
function($route, $anchorScroll, $compile, $controller, $animate) {
|
799
|
+
ngViewFactory.$inject = ['$route', '$anchorScroll', '$compile', '$controller', '$animate'];
|
800
|
+
function ngViewFactory( $route, $anchorScroll, $compile, $controller, $animate) {
|
786
801
|
return {
|
787
802
|
restrict: 'ECA',
|
788
803
|
terminal: true,
|
789
|
-
priority:
|
790
|
-
|
791
|
-
|
792
|
-
|
793
|
-
|
794
|
-
|
795
|
-
|
796
|
-
|
797
|
-
return function(scope) {
|
798
|
-
var currentScope, currentElement;
|
804
|
+
priority: 1000,
|
805
|
+
transclude: 'element',
|
806
|
+
compile: function(element, attr, linker) {
|
807
|
+
return function(scope, $element, attr) {
|
808
|
+
var currentScope,
|
809
|
+
currentElement,
|
810
|
+
onloadExp = attr.onload || '';
|
799
811
|
|
800
812
|
scope.$on('$routeChangeSuccess', update);
|
801
813
|
update();
|
@@ -816,35 +828,36 @@ var ngViewDirective = ['$route', '$anchorScroll', '$compile', '$controller', '$a
|
|
816
828
|
template = locals && locals.$template;
|
817
829
|
|
818
830
|
if (template) {
|
819
|
-
|
820
|
-
|
821
|
-
|
822
|
-
currentElement = element.clone();
|
823
|
-
currentElement.html(template);
|
824
|
-
$animate.enter(currentElement, null, anchor);
|
831
|
+
var newScope = scope.$new();
|
832
|
+
linker(newScope, function(clone) {
|
833
|
+
cleanupLastView();
|
825
834
|
|
826
|
-
|
827
|
-
|
835
|
+
clone.html(template);
|
836
|
+
$animate.enter(clone, null, $element);
|
828
837
|
|
829
|
-
|
830
|
-
|
831
|
-
var controller = $controller(current.controller, locals);
|
832
|
-
if (current.controllerAs) {
|
833
|
-
currentScope[current.controllerAs] = controller;
|
834
|
-
}
|
835
|
-
currentElement.data('$ngControllerController', controller);
|
836
|
-
currentElement.children().data('$ngControllerController', controller);
|
837
|
-
}
|
838
|
+
var link = $compile(clone.contents()),
|
839
|
+
current = $route.current;
|
838
840
|
|
839
|
-
|
841
|
+
currentScope = current.scope = newScope;
|
842
|
+
currentElement = clone;
|
840
843
|
|
841
|
-
|
844
|
+
if (current.controller) {
|
845
|
+
locals.$scope = currentScope;
|
846
|
+
var controller = $controller(current.controller, locals);
|
847
|
+
if (current.controllerAs) {
|
848
|
+
currentScope[current.controllerAs] = controller;
|
849
|
+
}
|
850
|
+
clone.data('$ngControllerController', controller);
|
851
|
+
clone.contents().data('$ngControllerController', controller);
|
852
|
+
}
|
842
853
|
|
843
|
-
|
844
|
-
|
854
|
+
link(currentScope);
|
855
|
+
currentScope.$emit('$viewContentLoaded');
|
856
|
+
currentScope.$eval(onloadExp);
|
845
857
|
|
846
|
-
|
847
|
-
|
858
|
+
// $anchorScroll might listen on event...
|
859
|
+
$anchorScroll();
|
860
|
+
});
|
848
861
|
} else {
|
849
862
|
cleanupLastView();
|
850
863
|
}
|
@@ -852,9 +865,7 @@ var ngViewDirective = ['$route', '$anchorScroll', '$compile', '$controller', '$a
|
|
852
865
|
}
|
853
866
|
}
|
854
867
|
};
|
855
|
-
}
|
856
|
-
|
857
|
-
ngRouteModule.directive('ngView', ngViewDirective);
|
868
|
+
}
|
858
869
|
|
859
870
|
|
860
871
|
})(window, window.angular);
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license AngularJS v1.2.
|
2
|
+
* @license AngularJS v1.2.0-rc.2
|
3
3
|
* (c) 2010-2012 Google, Inc. http://angularjs.org
|
4
4
|
* License: MIT
|
5
5
|
*/
|
@@ -11,25 +11,14 @@ var $sanitizeMinErr = angular.$$minErr('$sanitize');
|
|
11
11
|
* @ngdoc overview
|
12
12
|
* @name ngSanitize
|
13
13
|
* @description
|
14
|
-
*
|
15
|
-
* The `ngSanitize` module provides functionality to sanitize HTML.
|
16
|
-
*
|
17
|
-
* # Installation
|
18
|
-
* As a separate module, it must be loaded after Angular core is loaded; otherwise, an 'Uncaught Error:
|
19
|
-
* No module: ngSanitize' runtime error will occur.
|
20
14
|
*
|
21
|
-
*
|
22
|
-
*
|
23
|
-
*
|
24
|
-
* </pre>
|
15
|
+
* # ngSanitize
|
16
|
+
*
|
17
|
+
* The `ngSanitize` module provides functionality to sanitize HTML.
|
25
18
|
*
|
26
|
-
*
|
27
|
-
* To make sure the module is available to your application, declare it as a dependency of you application
|
28
|
-
* module.
|
19
|
+
* {@installModule sanitize}
|
29
20
|
*
|
30
|
-
*
|
31
|
-
* angular.module('app', ['ngSanitize']);
|
32
|
-
* </pre>
|
21
|
+
* See {@link ngSanitize.$sanitize `$sanitize`} for usage.
|
33
22
|
*/
|
34
23
|
|
35
24
|
/*
|
@@ -429,8 +418,10 @@ angular.module('ngSanitize', []).value('$sanitize', $sanitize);
|
|
429
418
|
* @function
|
430
419
|
*
|
431
420
|
* @description
|
432
|
-
*
|
433
|
-
*
|
421
|
+
* Finds links in text input and turns them into html links. Supports http/https/ftp/mailto and
|
422
|
+
* plain email address links.
|
423
|
+
*
|
424
|
+
* Requires the {@link ngSanitize `ngSanitize`} module to be installed.
|
434
425
|
*
|
435
426
|
* @param {string} text Input text.
|
436
427
|
* @param {string} target Window (_blank|_self|_parent|_top) or named frame to open links in.
|
@@ -9472,7 +9472,7 @@ if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
|
|
9472
9472
|
})( window );
|
9473
9473
|
|
9474
9474
|
/**
|
9475
|
-
* @license AngularJS v1.2.
|
9475
|
+
* @license AngularJS v1.2.0-rc.2
|
9476
9476
|
* (c) 2010-2012 Google, Inc. http://angularjs.org
|
9477
9477
|
* License: MIT
|
9478
9478
|
*/
|
@@ -9509,10 +9509,21 @@ if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
|
|
9509
9509
|
|
9510
9510
|
function minErr(module) {
|
9511
9511
|
return function () {
|
9512
|
-
var
|
9512
|
+
var code = arguments[0],
|
9513
|
+
prefix = '[' + (module ? module + ':' : '') + code + '] ',
|
9513
9514
|
template = arguments[1],
|
9514
9515
|
templateArgs = arguments,
|
9515
|
-
|
9516
|
+
stringify = function (obj) {
|
9517
|
+
if (isFunction(obj)) {
|
9518
|
+
return obj.toString().replace(/ \{[\s\S]*$/, '');
|
9519
|
+
} else if (isUndefined(obj)) {
|
9520
|
+
return 'undefined';
|
9521
|
+
} else if (!isString(obj)) {
|
9522
|
+
return JSON.stringify(obj);
|
9523
|
+
}
|
9524
|
+
return obj;
|
9525
|
+
},
|
9526
|
+
message, i;
|
9516
9527
|
|
9517
9528
|
message = prefix + template.replace(/\{\d+\}/g, function (match) {
|
9518
9529
|
var index = +match.slice(1, -1), arg;
|
@@ -9531,6 +9542,13 @@ function minErr(module) {
|
|
9531
9542
|
return match;
|
9532
9543
|
});
|
9533
9544
|
|
9545
|
+
message = message + '\nhttp://errors.angularjs.org/' + version.full + '/' +
|
9546
|
+
(module ? module + '/' : '') + code;
|
9547
|
+
for (i = 2; i < arguments.length; i++) {
|
9548
|
+
message = message + (i == 2 ? '?' : '&') + 'p' + (i-2) + '=' +
|
9549
|
+
encodeURIComponent(stringify(arguments[i]));
|
9550
|
+
}
|
9551
|
+
|
9534
9552
|
return new Error(message);
|
9535
9553
|
};
|
9536
9554
|
}
|
@@ -9593,7 +9611,7 @@ if ('i' !== 'I'.toLowerCase()) {
|
|
9593
9611
|
|
9594
9612
|
|
9595
9613
|
var /** holds major version number for IE or NaN for real browsers */
|
9596
|
-
msie
|
9614
|
+
msie,
|
9597
9615
|
jqLite, // delay binding since jQuery could be loaded after us.
|
9598
9616
|
jQuery, // delay binding
|
9599
9617
|
slice = [].slice,
|
@@ -9609,6 +9627,16 @@ var /** holds major version number for IE or NaN for real browsers */
|
|
9609
9627
|
nodeName_,
|
9610
9628
|
uid = ['0', '0', '0'];
|
9611
9629
|
|
9630
|
+
/**
|
9631
|
+
* IE 11 changed the format of the UserAgent string.
|
9632
|
+
* See http://msdn.microsoft.com/en-us/library/ms537503.aspx
|
9633
|
+
*/
|
9634
|
+
msie = int((/msie (\d+)/.exec(lowercase(navigator.userAgent)) || [])[1]);
|
9635
|
+
if (isNaN(msie)) {
|
9636
|
+
msie = int((/trident\/.*; rv:(\d+)/.exec(lowercase(navigator.userAgent)) || [])[1]);
|
9637
|
+
}
|
9638
|
+
|
9639
|
+
|
9612
9640
|
/**
|
9613
9641
|
* @private
|
9614
9642
|
* @param {*} obj
|
@@ -10723,10 +10751,13 @@ function setupModuleLoader(window) {
|
|
10723
10751
|
* @name angular.module
|
10724
10752
|
* @description
|
10725
10753
|
*
|
10726
|
-
* The `angular.module` is a global place for creating and
|
10727
|
-
* modules (angular core or 3rd party) that should be available to an application must be
|
10754
|
+
* The `angular.module` is a global place for creating, registering and retrieving Angular modules.
|
10755
|
+
* All modules (angular core or 3rd party) that should be available to an application must be
|
10728
10756
|
* registered using this mechanism.
|
10729
10757
|
*
|
10758
|
+
* When passed two or more arguments, a new module is created. If passed only one argument, an
|
10759
|
+
* existing module (the name passed as the first argument to `module`) is retrieved.
|
10760
|
+
*
|
10730
10761
|
*
|
10731
10762
|
* # Module
|
10732
10763
|
*
|
@@ -10997,11 +11028,11 @@ function setupModuleLoader(window) {
|
|
10997
11028
|
* - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat".
|
10998
11029
|
*/
|
10999
11030
|
var version = {
|
11000
|
-
full: '1.2.
|
11031
|
+
full: '1.2.0-rc.2', // all of these placeholder strings will be replaced by grunt's
|
11001
11032
|
major: 1, // package task
|
11002
11033
|
minor: 2,
|
11003
11034
|
dot: 0,
|
11004
|
-
codeName: '
|
11035
|
+
codeName: 'barehand-atomsplitting'
|
11005
11036
|
};
|
11006
11037
|
|
11007
11038
|
|
@@ -12064,13 +12095,15 @@ function annotate(fn) {
|
|
12064
12095
|
if (typeof fn == 'function') {
|
12065
12096
|
if (!($inject = fn.$inject)) {
|
12066
12097
|
$inject = [];
|
12067
|
-
|
12068
|
-
|
12069
|
-
|
12070
|
-
|
12071
|
-
|
12098
|
+
if (fn.length) {
|
12099
|
+
fnText = fn.toString().replace(STRIP_COMMENTS, '');
|
12100
|
+
argDecl = fnText.match(FN_ARGS);
|
12101
|
+
forEach(argDecl[1].split(FN_ARG_SPLIT), function(arg){
|
12102
|
+
arg.replace(FN_ARG, function(all, underscore, name){
|
12103
|
+
$inject.push(name);
|
12104
|
+
});
|
12072
12105
|
});
|
12073
|
-
}
|
12106
|
+
}
|
12074
12107
|
fn.$inject = $inject;
|
12075
12108
|
}
|
12076
12109
|
} else if (isArray(fn)) {
|
@@ -12794,7 +12827,7 @@ var $AnimateProvider = ['$provide', function($provide) {
|
|
12794
12827
|
forEach(element, function(node) {
|
12795
12828
|
parentNode.insertBefore(node, afterNextSibling);
|
12796
12829
|
});
|
12797
|
-
$timeout(done
|
12830
|
+
done && $timeout(done, 0, false);
|
12798
12831
|
},
|
12799
12832
|
|
12800
12833
|
/**
|
@@ -12811,7 +12844,7 @@ var $AnimateProvider = ['$provide', function($provide) {
|
|
12811
12844
|
*/
|
12812
12845
|
leave : function(element, done) {
|
12813
12846
|
element.remove();
|
12814
|
-
$timeout(done
|
12847
|
+
done && $timeout(done, 0, false);
|
12815
12848
|
},
|
12816
12849
|
|
12817
12850
|
/**
|
@@ -12853,7 +12886,7 @@ var $AnimateProvider = ['$provide', function($provide) {
|
|
12853
12886
|
className :
|
12854
12887
|
isArray(className) ? className.join(' ') : '';
|
12855
12888
|
element.addClass(className);
|
12856
|
-
$timeout(done
|
12889
|
+
done && $timeout(done, 0, false);
|
12857
12890
|
},
|
12858
12891
|
|
12859
12892
|
/**
|
@@ -12874,7 +12907,7 @@ var $AnimateProvider = ['$provide', function($provide) {
|
|
12874
12907
|
className :
|
12875
12908
|
isArray(className) ? className.join(' ') : '';
|
12876
12909
|
element.removeClass(className);
|
12877
|
-
$timeout(done
|
12910
|
+
done && $timeout(done, 0, false);
|
12878
12911
|
},
|
12879
12912
|
|
12880
12913
|
enabled : noop
|
@@ -15173,7 +15206,7 @@ function $HttpProvider() {
|
|
15173
15206
|
// strip json vulnerability protection prefix
|
15174
15207
|
data = data.replace(PROTECTION_PREFIX, '');
|
15175
15208
|
if (JSON_START.test(data) && JSON_END.test(data))
|
15176
|
-
data = fromJson(data
|
15209
|
+
data = fromJson(data);
|
15177
15210
|
}
|
15178
15211
|
return data;
|
15179
15212
|
}],
|
@@ -15489,6 +15522,7 @@ function $HttpProvider() {
|
|
15489
15522
|
* return function(promise) {
|
15490
15523
|
* return promise.then(function(response) {
|
15491
15524
|
* // do something on success
|
15525
|
+
* return response;
|
15492
15526
|
* }, function(response) {
|
15493
15527
|
* // do something on error
|
15494
15528
|
* if (canRecover(response)) {
|
@@ -15968,7 +16002,7 @@ function $HttpProvider() {
|
|
15968
16002
|
|
15969
16003
|
if (cache) {
|
15970
16004
|
cachedResp = cache.get(url);
|
15971
|
-
if (cachedResp) {
|
16005
|
+
if (isDefined(cachedResp)) {
|
15972
16006
|
if (cachedResp.then) {
|
15973
16007
|
// cached request has already been sent, but there is no response yet
|
15974
16008
|
cachedResp.then(removePendingReq, removePendingReq);
|
@@ -15988,7 +16022,7 @@ function $HttpProvider() {
|
|
15988
16022
|
}
|
15989
16023
|
|
15990
16024
|
// if we won't have the response in cache, send the request to the backend
|
15991
|
-
if (
|
16025
|
+
if (isUndefined(cachedResp)) {
|
15992
16026
|
$httpBackend(config.method, url, reqData, done, reqHeaders, config.timeout,
|
15993
16027
|
config.withCredentials, config.responseType);
|
15994
16028
|
}
|
@@ -16238,23 +16272,32 @@ var $interpolateMinErr = minErr('$interpolate');
|
|
16238
16272
|
* @description
|
16239
16273
|
*
|
16240
16274
|
* Used for configuring the interpolation markup. Defaults to `{{` and `}}`.
|
16241
|
-
*
|
16275
|
+
*
|
16242
16276
|
* @example
|
16243
|
-
<doc:example>
|
16277
|
+
<doc:example module="customInterpolationApp">
|
16244
16278
|
<doc:source>
|
16245
16279
|
<script>
|
16246
|
-
var
|
16280
|
+
var customInterpolationApp = angular.module('customInterpolationApp', []);
|
16281
|
+
|
16282
|
+
customInterpolationApp.config(function($interpolateProvider) {
|
16247
16283
|
$interpolateProvider.startSymbol('//');
|
16248
16284
|
$interpolateProvider.endSymbol('//');
|
16249
16285
|
});
|
16250
|
-
|
16251
|
-
|
16252
|
-
|
16286
|
+
|
16287
|
+
|
16288
|
+
customInterpolationApp.controller('DemoController', function DemoController() {
|
16289
|
+
this.label = "This bindings is brought you you by // interpolation symbols.";
|
16290
|
+
});
|
16253
16291
|
</script>
|
16254
|
-
<div ng-app="App" ng-controller="
|
16255
|
-
//label//
|
16292
|
+
<div ng-app="App" ng-controller="DemoController as demo">
|
16293
|
+
//demo.label//
|
16256
16294
|
</div>
|
16257
16295
|
</doc:source>
|
16296
|
+
<doc:scenario>
|
16297
|
+
it('should interpolate binding with custom symbols', function() {
|
16298
|
+
expect(binding('demo.label')).toBe('This bindings is brought you you by // interpolation symbols.');
|
16299
|
+
});
|
16300
|
+
</doc:scenario>
|
16258
16301
|
</doc:example>
|
16259
16302
|
*/
|
16260
16303
|
function $InterpolateProvider() {
|
@@ -17318,7 +17361,6 @@ var $parseMinErr = minErr('$parse');
|
|
17318
17361
|
// access to any member named "constructor".
|
17319
17362
|
//
|
17320
17363
|
// For reflective calls (a[b]) we check that the value of the lookup is not the Function constructor while evaluating
|
17321
|
-
// For reflective calls (a[b]) we check that the value of the lookup is not the Function constructor while evaluating
|
17322
17364
|
// the expression, which is a stronger but more expensive test. Since reflective calls are expensive anyway, this is not
|
17323
17365
|
// such a big deal compared to static dereferencing.
|
17324
17366
|
//
|
@@ -17992,9 +18034,21 @@ function parser(text, json, $filter, csp){
|
|
17992
18034
|
}
|
17993
18035
|
var fnPtr = fn(scope, locals, context) || noop;
|
17994
18036
|
// IE stupidity!
|
17995
|
-
|
18037
|
+
var v = fnPtr.apply
|
17996
18038
|
? fnPtr.apply(context, args)
|
17997
18039
|
: fnPtr(args[0], args[1], args[2], args[3], args[4]);
|
18040
|
+
|
18041
|
+
// Check for promise
|
18042
|
+
if (v && v.then) {
|
18043
|
+
var p = v;
|
18044
|
+
if (!('$$v' in v)) {
|
18045
|
+
p.$$v = undefined;
|
18046
|
+
p.then(function(val) { p.$$v = val; });
|
18047
|
+
}
|
18048
|
+
v = v.$$v;
|
18049
|
+
}
|
18050
|
+
|
18051
|
+
return v;
|
17998
18052
|
};
|
17999
18053
|
}
|
18000
18054
|
|
@@ -18298,6 +18352,8 @@ function $ParseProvider() {
|
|
18298
18352
|
* // since this fn executes async in a future turn of the event loop, we need to wrap
|
18299
18353
|
* // our code into an $apply call so that the model changes are properly observed.
|
18300
18354
|
* scope.$apply(function() {
|
18355
|
+
* deferred.notify('About to greet ' + name + '.');
|
18356
|
+
*
|
18301
18357
|
* if (okToGreet(name)) {
|
18302
18358
|
* deferred.resolve('Hello, ' + name + '!');
|
18303
18359
|
* } else {
|
@@ -18314,6 +18370,8 @@ function $ParseProvider() {
|
|
18314
18370
|
* alert('Success: ' + greeting);
|
18315
18371
|
* }, function(reason) {
|
18316
18372
|
* alert('Failed: ' + reason);
|
18373
|
+
* }, function(update) {
|
18374
|
+
* alert('Got notification: ' + update);
|
18317
18375
|
* });
|
18318
18376
|
* </pre>
|
18319
18377
|
*
|
@@ -18332,7 +18390,8 @@ function $ParseProvider() {
|
|
18332
18390
|
* A new instance of deferred is constructed by calling `$q.defer()`.
|
18333
18391
|
*
|
18334
18392
|
* The purpose of the deferred object is to expose the associated Promise instance as well as APIs
|
18335
|
-
* that can be used for signaling the successful or unsuccessful completion
|
18393
|
+
* that can be used for signaling the successful or unsuccessful completion, as well as the status
|
18394
|
+
* of the task.
|
18336
18395
|
*
|
18337
18396
|
* **Methods**
|
18338
18397
|
*
|
@@ -18340,6 +18399,8 @@ function $ParseProvider() {
|
|
18340
18399
|
* constructed via `$q.reject`, the promise will be rejected instead.
|
18341
18400
|
* - `reject(reason)` – rejects the derived promise with the `reason`. This is equivalent to
|
18342
18401
|
* resolving it with a rejection constructed via `$q.reject`.
|
18402
|
+
* - `notify(value)` - provides updates on the status of the promises execution. This may be called
|
18403
|
+
* multiple times before the promise is either resolved or rejected.
|
18343
18404
|
*
|
18344
18405
|
* **Properties**
|
18345
18406
|
*
|
@@ -18356,12 +18417,15 @@ function $ParseProvider() {
|
|
18356
18417
|
*
|
18357
18418
|
* **Methods**
|
18358
18419
|
*
|
18359
|
-
* - `then(successCallback, errorCallback)` – regardless of when the promise was or
|
18360
|
-
* or rejected, `then` calls one of the success or error callbacks asynchronously
|
18361
|
-
* is available. The callbacks are called with a single argument: the result
|
18420
|
+
* - `then(successCallback, errorCallback, notifyCallback)` – regardless of when the promise was or
|
18421
|
+
* will be resolved or rejected, `then` calls one of the success or error callbacks asynchronously
|
18422
|
+
* as soon as the result is available. The callbacks are called with a single argument: the result
|
18423
|
+
* or rejection reason. Additionally, the notify callback may be called zero or more times to
|
18424
|
+
* provide a progress indication, before the promise is resolved or rejected.
|
18362
18425
|
*
|
18363
18426
|
* This method *returns a new promise* which is resolved or rejected via the return value of the
|
18364
|
-
* `successCallback`
|
18427
|
+
* `successCallback`, `errorCallback`. It also notifies via the return value of the `notifyCallback`
|
18428
|
+
* method. The promise can not be resolved or rejected from the notifyCallback method.
|
18365
18429
|
*
|
18366
18430
|
* - `catch(errorCallback)` – shorthand for `promise.then(null, errorCallback)`
|
18367
18431
|
*
|
@@ -18513,7 +18577,7 @@ function qFactory(nextTick, exceptionHandler) {
|
|
18513
18577
|
|
18514
18578
|
var wrappedCallback = function(value) {
|
18515
18579
|
try {
|
18516
|
-
result.resolve((callback
|
18580
|
+
result.resolve((isFunction(callback) ? callback : defaultCallback)(value));
|
18517
18581
|
} catch(e) {
|
18518
18582
|
result.reject(e);
|
18519
18583
|
exceptionHandler(e);
|
@@ -18522,7 +18586,7 @@ function qFactory(nextTick, exceptionHandler) {
|
|
18522
18586
|
|
18523
18587
|
var wrappedErrback = function(reason) {
|
18524
18588
|
try {
|
18525
|
-
result.resolve((errback
|
18589
|
+
result.resolve((isFunction(errback) ? errback : defaultErrback)(reason));
|
18526
18590
|
} catch(e) {
|
18527
18591
|
result.reject(e);
|
18528
18592
|
exceptionHandler(e);
|
@@ -18531,7 +18595,7 @@ function qFactory(nextTick, exceptionHandler) {
|
|
18531
18595
|
|
18532
18596
|
var wrappedProgressback = function(progress) {
|
18533
18597
|
try {
|
18534
|
-
result.notify((progressback
|
18598
|
+
result.notify((isFunction(progressback) ? progressback : defaultCallback)(progress));
|
18535
18599
|
} catch(e) {
|
18536
18600
|
exceptionHandler(e);
|
18537
18601
|
}
|
@@ -18569,7 +18633,7 @@ function qFactory(nextTick, exceptionHandler) {
|
|
18569
18633
|
} catch(e) {
|
18570
18634
|
return makePromise(e, false);
|
18571
18635
|
}
|
18572
|
-
if (callbackOutput && callbackOutput.then) {
|
18636
|
+
if (callbackOutput && isFunction(callbackOutput.then)) {
|
18573
18637
|
return callbackOutput.then(function() {
|
18574
18638
|
return makePromise(value, isResolved);
|
18575
18639
|
}, function(error) {
|
@@ -18594,7 +18658,7 @@ function qFactory(nextTick, exceptionHandler) {
|
|
18594
18658
|
|
18595
18659
|
|
18596
18660
|
var ref = function(value) {
|
18597
|
-
if (value && value.then) return value;
|
18661
|
+
if (value && isFunction(value.then)) return value;
|
18598
18662
|
return {
|
18599
18663
|
then: function(callback) {
|
18600
18664
|
var result = defer();
|
@@ -18647,7 +18711,12 @@ function qFactory(nextTick, exceptionHandler) {
|
|
18647
18711
|
then: function(callback, errback) {
|
18648
18712
|
var result = defer();
|
18649
18713
|
nextTick(function() {
|
18650
|
-
|
18714
|
+
try {
|
18715
|
+
result.resolve((isFunction(errback) ? errback : defaultErrback)(reason));
|
18716
|
+
} catch(e) {
|
18717
|
+
result.reject(e);
|
18718
|
+
exceptionHandler(e);
|
18719
|
+
}
|
18651
18720
|
});
|
18652
18721
|
return result.promise;
|
18653
18722
|
}
|
@@ -18673,7 +18742,7 @@ function qFactory(nextTick, exceptionHandler) {
|
|
18673
18742
|
|
18674
18743
|
var wrappedCallback = function(value) {
|
18675
18744
|
try {
|
18676
|
-
return (callback
|
18745
|
+
return (isFunction(callback) ? callback : defaultCallback)(value);
|
18677
18746
|
} catch (e) {
|
18678
18747
|
exceptionHandler(e);
|
18679
18748
|
return reject(e);
|
@@ -18682,7 +18751,7 @@ function qFactory(nextTick, exceptionHandler) {
|
|
18682
18751
|
|
18683
18752
|
var wrappedErrback = function(reason) {
|
18684
18753
|
try {
|
18685
|
-
return (errback
|
18754
|
+
return (isFunction(errback) ? errback : defaultErrback)(reason);
|
18686
18755
|
} catch (e) {
|
18687
18756
|
exceptionHandler(e);
|
18688
18757
|
return reject(e);
|
@@ -18691,7 +18760,7 @@ function qFactory(nextTick, exceptionHandler) {
|
|
18691
18760
|
|
18692
18761
|
var wrappedProgressback = function(progress) {
|
18693
18762
|
try {
|
18694
|
-
return (progressback
|
18763
|
+
return (isFunction(progressback) ? progressback : defaultCallback)(progress);
|
18695
18764
|
} catch (e) {
|
18696
18765
|
exceptionHandler(e);
|
18697
18766
|
}
|
@@ -18841,8 +18910,8 @@ function $RootScopeProvider(){
|
|
18841
18910
|
return TTL;
|
18842
18911
|
};
|
18843
18912
|
|
18844
|
-
this.$get = ['$injector', '$exceptionHandler', '$parse',
|
18845
|
-
function( $injector, $exceptionHandler, $parse) {
|
18913
|
+
this.$get = ['$injector', '$exceptionHandler', '$parse', '$browser',
|
18914
|
+
function( $injector, $exceptionHandler, $parse, $browser) {
|
18846
18915
|
|
18847
18916
|
/**
|
18848
18917
|
* @ngdoc function
|
@@ -18891,6 +18960,7 @@ function $RootScopeProvider(){
|
|
18891
18960
|
this['this'] = this.$root = this;
|
18892
18961
|
this.$$destroyed = false;
|
18893
18962
|
this.$$asyncQueue = [];
|
18963
|
+
this.$$postDigestQueue = [];
|
18894
18964
|
this.$$listeners = {};
|
18895
18965
|
this.$$isolateBindings = {};
|
18896
18966
|
}
|
@@ -18905,6 +18975,7 @@ function $RootScopeProvider(){
|
|
18905
18975
|
|
18906
18976
|
|
18907
18977
|
Scope.prototype = {
|
18978
|
+
constructor: Scope,
|
18908
18979
|
/**
|
18909
18980
|
* @ngdoc function
|
18910
18981
|
* @name ng.$rootScope.Scope#$new
|
@@ -18939,6 +19010,7 @@ function $RootScopeProvider(){
|
|
18939
19010
|
child.$root = this.$root;
|
18940
19011
|
// ensure that there is just one async queue per $rootScope and it's children
|
18941
19012
|
child.$$asyncQueue = this.$$asyncQueue;
|
19013
|
+
child.$$postDigestQueue = this.$$postDigestQueue;
|
18942
19014
|
} else {
|
18943
19015
|
Child = function() {}; // should be anonymous; This is so that when the minifier munges
|
18944
19016
|
// the name it does not become random set of chars. These will then show up as class
|
@@ -19266,6 +19338,7 @@ function $RootScopeProvider(){
|
|
19266
19338
|
var watch, value, last,
|
19267
19339
|
watchers,
|
19268
19340
|
asyncQueue = this.$$asyncQueue,
|
19341
|
+
postDigestQueue = this.$$postDigestQueue,
|
19269
19342
|
length,
|
19270
19343
|
dirty, ttl = TTL,
|
19271
19344
|
next, current, target = this,
|
@@ -19338,6 +19411,14 @@ function $RootScopeProvider(){
|
|
19338
19411
|
} while (dirty || asyncQueue.length);
|
19339
19412
|
|
19340
19413
|
clearPhase();
|
19414
|
+
|
19415
|
+
while(postDigestQueue.length) {
|
19416
|
+
try {
|
19417
|
+
postDigestQueue.shift()();
|
19418
|
+
} catch (e) {
|
19419
|
+
$exceptionHandler(e);
|
19420
|
+
}
|
19421
|
+
}
|
19341
19422
|
},
|
19342
19423
|
|
19343
19424
|
|
@@ -19438,13 +19519,16 @@ function $RootScopeProvider(){
|
|
19438
19519
|
*
|
19439
19520
|
* The `$evalAsync` makes no guarantees as to when the `expression` will be executed, only that:
|
19440
19521
|
*
|
19441
|
-
* - it will execute
|
19442
|
-
* - at least one {@link ng.$rootScope.Scope#$digest $digest cycle} will be performed after
|
19443
|
-
* `expression` execution.
|
19522
|
+
* - it will execute after the function that schedule the evaluation is done running (preferably before DOM rendering).
|
19523
|
+
* - at least one {@link ng.$rootScope.Scope#$digest $digest cycle} will be performed after `expression` execution.
|
19444
19524
|
*
|
19445
19525
|
* Any exceptions from the execution of the expression are forwarded to the
|
19446
19526
|
* {@link ng.$exceptionHandler $exceptionHandler} service.
|
19447
19527
|
*
|
19528
|
+
* __Note:__ if this function is called outside of `$digest` cycle, a new $digest cycle will be scheduled.
|
19529
|
+
* It is however encouraged to always call code that changes the model from withing an `$apply` call.
|
19530
|
+
* That includes code evaluated via `$evalAsync`.
|
19531
|
+
*
|
19448
19532
|
* @param {(string|function())=} expression An angular expression to be executed.
|
19449
19533
|
*
|
19450
19534
|
* - `string`: execute using the rules as defined in {@link guide/expression expression}.
|
@@ -19452,9 +19536,23 @@ function $RootScopeProvider(){
|
|
19452
19536
|
*
|
19453
19537
|
*/
|
19454
19538
|
$evalAsync: function(expr) {
|
19539
|
+
// if we are outside of an $digest loop and this is the first time we are scheduling async task also schedule
|
19540
|
+
// async auto-flush
|
19541
|
+
if (!$rootScope.$$phase && !$rootScope.$$asyncQueue.length) {
|
19542
|
+
$browser.defer(function() {
|
19543
|
+
if ($rootScope.$$asyncQueue.length) {
|
19544
|
+
$rootScope.$digest();
|
19545
|
+
}
|
19546
|
+
});
|
19547
|
+
}
|
19548
|
+
|
19455
19549
|
this.$$asyncQueue.push(expr);
|
19456
19550
|
},
|
19457
19551
|
|
19552
|
+
$$postDigest : function(expr) {
|
19553
|
+
this.$$postDigestQueue.push(expr);
|
19554
|
+
},
|
19555
|
+
|
19458
19556
|
/**
|
19459
19557
|
* @ngdoc function
|
19460
19558
|
* @name ng.$rootScope.Scope#$apply
|
@@ -20123,7 +20221,7 @@ function $SceDelegateProvider() {
|
|
20123
20221
|
* {@link ng.$sce#getTrusted $sce.getTrusted} behind the scenes on non-constant literals.
|
20124
20222
|
*
|
20125
20223
|
* As an example, {@link ng.directive:ngBindHtml ngBindHtml} uses {@link
|
20126
|
-
* ng.$sce#
|
20224
|
+
* ng.$sce#parseAsHtml $sce.parseAsHtml(binding expression)}. Here's the actual code (slightly
|
20127
20225
|
* simplified):
|
20128
20226
|
*
|
20129
20227
|
* <pre class="prettyprint">
|
@@ -20181,7 +20279,7 @@ function $SceDelegateProvider() {
|
|
20181
20279
|
* ## What trusted context types are supported?<a name="contexts"></a>
|
20182
20280
|
*
|
20183
20281
|
* | Context | Notes |
|
20184
|
-
*
|
20282
|
+
* |---------------------|----------------|
|
20185
20283
|
* | `$sce.HTML` | For HTML that's safe to source into the application. The {@link ng.directive:ngBindHtml ngBindHtml} directive uses this context for bindings. |
|
20186
20284
|
* | `$sce.CSS` | For CSS that's safe to source into the application. Currently unused. Feel free to use it in your own directives. |
|
20187
20285
|
* | `$sce.URL` | For URLs that are safe to follow as links. Currently unused (`<a href=` and `<img src=` sanitize their urls and don't consititute an SCE context. |
|
@@ -20692,6 +20790,7 @@ function $SnifferProvider() {
|
|
20692
20790
|
this.$get = ['$window', '$document', function($window, $document) {
|
20693
20791
|
var eventSupport = {},
|
20694
20792
|
android = int((/android (\d+)/.exec(lowercase(($window.navigator || {}).userAgent)) || [])[1]),
|
20793
|
+
boxee = /Boxee/i.test(($window.navigator || {}).userAgent),
|
20695
20794
|
document = $document[0] || {},
|
20696
20795
|
vendorPrefix,
|
20697
20796
|
vendorRegex = /^(Moz|webkit|O|ms)(?=[A-Z])/,
|
@@ -20708,12 +20807,17 @@ function $SnifferProvider() {
|
|
20708
20807
|
break;
|
20709
20808
|
}
|
20710
20809
|
}
|
20810
|
+
|
20811
|
+
if(!vendorPrefix) {
|
20812
|
+
vendorPrefix = ('WebkitOpacity' in bodyStyle) && 'webkit';
|
20813
|
+
}
|
20814
|
+
|
20711
20815
|
transitions = !!(('transition' in bodyStyle) || (vendorPrefix + 'Transition' in bodyStyle));
|
20712
20816
|
animations = !!(('animation' in bodyStyle) || (vendorPrefix + 'Animation' in bodyStyle));
|
20713
|
-
|
20817
|
+
|
20714
20818
|
if (android && (!transitions||!animations)) {
|
20715
|
-
transitions = isString(document.body.style.webkitTransition);
|
20716
|
-
animations = isString(document.body.style.webkitAnimation);
|
20819
|
+
transitions = isString(document.body.style.webkitTransition);
|
20820
|
+
animations = isString(document.body.style.webkitAnimation);
|
20717
20821
|
}
|
20718
20822
|
}
|
20719
20823
|
|
@@ -20723,7 +20827,10 @@ function $SnifferProvider() {
|
|
20723
20827
|
// so let's not use the history API at all.
|
20724
20828
|
// http://code.google.com/p/android/issues/detail?id=17471
|
20725
20829
|
// https://github.com/angular/angular.js/issues/904
|
20726
|
-
|
20830
|
+
|
20831
|
+
// older webit browser (533.9) on Boxee box has exactly the same problem as Android has
|
20832
|
+
// so let's not use the history API also
|
20833
|
+
history: !!($window.history && $window.history.pushState && !(android < 4) && !boxee),
|
20727
20834
|
hashchange: 'onhashchange' in $window &&
|
20728
20835
|
// IE8 compatible mode lies
|
20729
20836
|
(!document.documentMode || document.documentMode > 7),
|
@@ -20783,7 +20890,7 @@ function $TimeoutProvider() {
|
|
20783
20890
|
var deferred = $q.defer(),
|
20784
20891
|
promise = deferred.promise,
|
20785
20892
|
skipApply = (isDefined(invokeApply) && !invokeApply),
|
20786
|
-
timeoutId
|
20893
|
+
timeoutId;
|
20787
20894
|
|
20788
20895
|
timeoutId = $browser.defer(function() {
|
20789
20896
|
try {
|
@@ -20792,17 +20899,15 @@ function $TimeoutProvider() {
|
|
20792
20899
|
deferred.reject(e);
|
20793
20900
|
$exceptionHandler(e);
|
20794
20901
|
}
|
20902
|
+
finally {
|
20903
|
+
delete deferreds[promise.$$timeoutId];
|
20904
|
+
}
|
20795
20905
|
|
20796
20906
|
if (!skipApply) $rootScope.$apply();
|
20797
20907
|
}, delay);
|
20798
20908
|
|
20799
|
-
cleanup = function() {
|
20800
|
-
delete deferreds[promise.$$timeoutId];
|
20801
|
-
};
|
20802
|
-
|
20803
20909
|
promise.$$timeoutId = timeoutId;
|
20804
20910
|
deferreds[timeoutId] = deferred;
|
20805
|
-
promise.then(cleanup, cleanup);
|
20806
20911
|
|
20807
20912
|
return promise;
|
20808
20913
|
}
|
@@ -20824,6 +20929,7 @@ function $TimeoutProvider() {
|
|
20824
20929
|
timeout.cancel = function(promise) {
|
20825
20930
|
if (promise && promise.$$timeoutId in deferreds) {
|
20826
20931
|
deferreds[promise.$$timeoutId].reject('canceled');
|
20932
|
+
delete deferreds[promise.$$timeoutId];
|
20827
20933
|
return $browser.defer.cancel(promise.$$timeoutId);
|
20828
20934
|
}
|
20829
20935
|
return false;
|
@@ -20891,7 +20997,7 @@ function $$UrlUtilsProvider() {
|
|
20891
20997
|
* Otherwise, returns an object with the following members.
|
20892
20998
|
*
|
20893
20999
|
* | member name | Description |
|
20894
|
-
*
|
21000
|
+
* |---------------|----------------|
|
20895
21001
|
* | href | A normalized version of the provided URL if it was not an absolute URL |
|
20896
21002
|
* | protocol | The protocol including the trailing colon |
|
20897
21003
|
* | host | The host and port (if the port is non-default) of the normalizedUrl |
|
@@ -20899,7 +21005,7 @@ function $$UrlUtilsProvider() {
|
|
20899
21005
|
* These fields from the UrlUtils interface are currently not needed and hence not returned.
|
20900
21006
|
*
|
20901
21007
|
* | member name | Description |
|
20902
|
-
*
|
21008
|
+
* |---------------|----------------|
|
20903
21009
|
* | hostname | The host without the port of the normalizedUrl |
|
20904
21010
|
* | pathname | The path following the host in the normalizedUrl |
|
20905
21011
|
* | hash | The URL hash if present |
|
@@ -20908,7 +21014,7 @@ function $$UrlUtilsProvider() {
|
|
20908
21014
|
*/
|
20909
21015
|
function resolve(url, parse) {
|
20910
21016
|
var href = url;
|
20911
|
-
if (msie) {
|
21017
|
+
if (msie <= 11) {
|
20912
21018
|
// Normalize before parse. Refer Implementation Notes on why this is
|
20913
21019
|
// done in two steps on IE.
|
20914
21020
|
urlParsingNode.setAttribute("href", href);
|
@@ -21278,7 +21384,7 @@ function filterFilter() {
|
|
21278
21384
|
})();
|
21279
21385
|
} else {
|
21280
21386
|
(function() {
|
21281
|
-
if (
|
21387
|
+
if (typeof(expression[key]) == 'undefined') { return; }
|
21282
21388
|
var path = key;
|
21283
21389
|
predicates.push(function(value) {
|
21284
21390
|
return search(getter(value,path), expression[path]);
|
@@ -22007,8 +22113,10 @@ function orderByFilter($parse){
|
|
22007
22113
|
var t1 = typeof v1;
|
22008
22114
|
var t2 = typeof v2;
|
22009
22115
|
if (t1 == t2) {
|
22010
|
-
if (t1 == "string")
|
22011
|
-
|
22116
|
+
if (t1 == "string") {
|
22117
|
+
v1 = v1.toLowerCase();
|
22118
|
+
v2 = v2.toLowerCase();
|
22119
|
+
}
|
22012
22120
|
if (v1 === v2) return 0;
|
22013
22121
|
return v1 < v2 ? -1 : 1;
|
22014
22122
|
} else {
|
@@ -24253,8 +24361,8 @@ var ngBindTemplateDirective = ['$interpolate', function($interpolate) {
|
|
24253
24361
|
var ngBindHtmlDirective = ['$sce', function($sce) {
|
24254
24362
|
return function(scope, element, attr) {
|
24255
24363
|
element.addClass('ng-binding').data('$binding', attr.ngBindHtml);
|
24256
|
-
scope.$watch(
|
24257
|
-
element.html(value || '');
|
24364
|
+
scope.$watch(attr.ngBindHtml, function ngBindHtmlWatchAction(value) {
|
24365
|
+
element.html($sce.getTrustedHtml(value) || '');
|
24258
24366
|
});
|
24259
24367
|
};
|
24260
24368
|
}];
|
@@ -24410,7 +24518,7 @@ function classDirective(name, selector) {
|
|
24410
24518
|
|
24411
24519
|
## Animations
|
24412
24520
|
|
24413
|
-
|
24521
|
+
The example below demonstrates how to perform animations using ngClass.
|
24414
24522
|
|
24415
24523
|
<example animations="true">
|
24416
24524
|
<file name="index.html">
|
@@ -24455,6 +24563,14 @@ function classDirective(name, selector) {
|
|
24455
24563
|
});
|
24456
24564
|
</file>
|
24457
24565
|
</example>
|
24566
|
+
|
24567
|
+
|
24568
|
+
## ngClass and pre-existing CSS3 Transitions/Animations
|
24569
|
+
The ngClass directive still supports CSS3 Transitions/Animations even if they do not follow the ngAnimate CSS naming structure.
|
24570
|
+
Therefore, if any CSS3 Transition/Animation styles (outside of ngAnimate) are set on the element, then, if a ngClass animation
|
24571
|
+
is triggered, the ngClass animation will be skipped so that ngAnimate can allow for the pre-existing transition or animation to
|
24572
|
+
take over. This restriction allows for ngClass to still work with standard CSS3 Transitions/Animations that are defined
|
24573
|
+
outside of ngAnimate.
|
24458
24574
|
*/
|
24459
24575
|
var ngClassDirective = classDirective('', true);
|
24460
24576
|
|
@@ -25373,23 +25489,18 @@ var ngIfDirective = ['$animate', function($animate) {
|
|
25373
25489
|
* @description
|
25374
25490
|
* Emitted every time the ngInclude content is reloaded.
|
25375
25491
|
*/
|
25376
|
-
var NG_INCLUDE_PRIORITY = 500;
|
25377
25492
|
var ngIncludeDirective = ['$http', '$templateCache', '$anchorScroll', '$compile', '$animate', '$sce',
|
25378
25493
|
function($http, $templateCache, $anchorScroll, $compile, $animate, $sce) {
|
25379
25494
|
return {
|
25380
25495
|
restrict: 'ECA',
|
25381
25496
|
terminal: true,
|
25382
|
-
|
25383
|
-
compile: function(element, attr) {
|
25497
|
+
transclude: 'element',
|
25498
|
+
compile: function(element, attr, transclusion) {
|
25384
25499
|
var srcExp = attr.ngInclude || attr.src,
|
25385
25500
|
onloadExp = attr.onload || '',
|
25386
25501
|
autoScrollExp = attr.autoscroll;
|
25387
25502
|
|
25388
|
-
element
|
25389
|
-
var anchor = jqLite(document.createComment(' ngInclude: ' + srcExp + ' '));
|
25390
|
-
element.replaceWith(anchor);
|
25391
|
-
|
25392
|
-
return function(scope) {
|
25503
|
+
return function(scope, $element) {
|
25393
25504
|
var changeCounter = 0,
|
25394
25505
|
currentScope,
|
25395
25506
|
currentElement;
|
@@ -25413,21 +25524,23 @@ var ngIncludeDirective = ['$http', '$templateCache', '$anchorScroll', '$compile'
|
|
25413
25524
|
if (thisChangeId !== changeCounter) return;
|
25414
25525
|
var newScope = scope.$new();
|
25415
25526
|
|
25416
|
-
|
25527
|
+
transclusion(newScope, function(clone) {
|
25528
|
+
cleanupLastIncludeContent();
|
25417
25529
|
|
25418
|
-
|
25419
|
-
|
25420
|
-
currentElement.html(response);
|
25421
|
-
$animate.enter(currentElement, null, anchor);
|
25530
|
+
currentScope = newScope;
|
25531
|
+
currentElement = clone;
|
25422
25532
|
|
25423
|
-
|
25533
|
+
currentElement.html(response);
|
25534
|
+
$animate.enter(currentElement, null, $element);
|
25535
|
+
$compile(currentElement.contents())(currentScope);
|
25424
25536
|
|
25425
|
-
|
25426
|
-
|
25427
|
-
|
25537
|
+
if (isDefined(autoScrollExp) && (!autoScrollExp || scope.$eval(autoScrollExp))) {
|
25538
|
+
$anchorScroll();
|
25539
|
+
}
|
25428
25540
|
|
25429
|
-
|
25430
|
-
|
25541
|
+
currentScope.$emit('$includeContentLoaded');
|
25542
|
+
scope.$eval(onloadExp);
|
25543
|
+
});
|
25431
25544
|
}).error(function() {
|
25432
25545
|
if (thisChangeId === changeCounter) cleanupLastIncludeContent();
|
25433
25546
|
});
|
@@ -26650,7 +26763,9 @@ var ngSwitchDefaultDirective = ngDirective({
|
|
26650
26763
|
* @name ng.directive:ngTransclude
|
26651
26764
|
*
|
26652
26765
|
* @description
|
26653
|
-
*
|
26766
|
+
* Directive that marks the insertion point for the transcluded DOM of the nearest parent directive that uses transclusion.
|
26767
|
+
*
|
26768
|
+
* Any existing content of the element that this directive is placed on will be removed before the transcluded content is inserted.
|
26654
26769
|
*
|
26655
26770
|
* @element ANY
|
26656
26771
|
*
|
@@ -26694,16 +26809,19 @@ var ngSwitchDefaultDirective = ngDirective({
|
|
26694
26809
|
*
|
26695
26810
|
*/
|
26696
26811
|
var ngTranscludeDirective = ngDirective({
|
26697
|
-
controller: ['$transclude',
|
26698
|
-
//
|
26699
|
-
// transclusion replaces the current element. (we can't use priority here because
|
26700
|
-
// and not controllers
|
26701
|
-
|
26702
|
-
|
26703
|
-
|
26704
|
-
|
26812
|
+
controller: ['$transclude', function($transclude) {
|
26813
|
+
// remember the transclusion fn but call it during linking so that we don't process transclusion before directives on
|
26814
|
+
// the parent element even when the transclusion replaces the current element. (we can't use priority here because
|
26815
|
+
// that applies only to compile fns and not controllers
|
26816
|
+
this.$transclude = $transclude;
|
26817
|
+
}],
|
26818
|
+
|
26819
|
+
link: function($scope, $element, $attrs, controller) {
|
26820
|
+
controller.$transclude(function(clone) {
|
26821
|
+
$element.html('');
|
26822
|
+
$element.append(clone);
|
26705
26823
|
});
|
26706
|
-
}
|
26824
|
+
}
|
26707
26825
|
});
|
26708
26826
|
|
26709
26827
|
/**
|