angular-gem 1.3.1 → 1.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +8 -8
- data/lib/angular-gem/version.rb +1 -1
- data/vendor/assets/javascripts/1.3.2/angular-animate.js +2136 -0
- data/vendor/assets/javascripts/1.3.2/angular-aria.js +261 -0
- data/vendor/assets/javascripts/1.3.2/angular-cookies.js +206 -0
- data/vendor/assets/javascripts/1.3.2/angular-loader.js +422 -0
- data/vendor/assets/javascripts/1.3.2/angular-messages.js +400 -0
- data/vendor/assets/javascripts/1.3.2/angular-mocks.js +2376 -0
- data/vendor/assets/javascripts/1.3.2/angular-resource.js +667 -0
- data/vendor/assets/javascripts/1.3.2/angular-route.js +982 -0
- data/vendor/assets/javascripts/1.3.2/angular-sanitize.js +678 -0
- data/vendor/assets/javascripts/1.3.2/angular-scenario.js +37076 -0
- data/vendor/assets/javascripts/1.3.2/angular-touch.js +622 -0
- data/vendor/assets/javascripts/1.3.2/angular.js +25722 -0
- data/vendor/assets/javascripts/angular-animate.js +1 -1
- data/vendor/assets/javascripts/angular-aria.js +12 -1
- data/vendor/assets/javascripts/angular-cookies.js +1 -1
- data/vendor/assets/javascripts/angular-loader.js +2 -2
- data/vendor/assets/javascripts/angular-messages.js +1 -1
- data/vendor/assets/javascripts/angular-mocks.js +88 -1
- data/vendor/assets/javascripts/angular-resource.js +1 -1
- data/vendor/assets/javascripts/angular-route.js +10 -6
- data/vendor/assets/javascripts/angular-sanitize.js +1 -1
- data/vendor/assets/javascripts/angular-scenario.js +143 -46
- data/vendor/assets/javascripts/angular-touch.js +1 -1
- data/vendor/assets/javascripts/angular.js +143 -46
- metadata +13 -1
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license AngularJS v1.3.
|
2
|
+
* @license AngularJS v1.3.2
|
3
3
|
* (c) 2010-2014 Google, Inc. http://angularjs.org
|
4
4
|
* License: MIT
|
5
5
|
*/
|
@@ -243,6 +243,17 @@ ngAriaModule.directive('ngShow', ['$aria', function($aria) {
|
|
243
243
|
.directive('ngDisabled', ['$aria', function($aria) {
|
244
244
|
return $aria.$$watchExpr('ngDisabled', 'aria-disabled');
|
245
245
|
}])
|
246
|
+
.directive('ngMessages', function() {
|
247
|
+
return {
|
248
|
+
restrict: 'A',
|
249
|
+
require: '?ngMessages',
|
250
|
+
link: function(scope, elem, attr, ngMessages) {
|
251
|
+
if (!elem.attr('aria-live')) {
|
252
|
+
elem.attr('aria-live', 'assertive');
|
253
|
+
}
|
254
|
+
}
|
255
|
+
};
|
256
|
+
})
|
246
257
|
.directive('ngClick', ngAriaTabindex)
|
247
258
|
.directive('ngDblclick', ngAriaTabindex);
|
248
259
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license AngularJS v1.3.
|
2
|
+
* @license AngularJS v1.3.2
|
3
3
|
* (c) 2010-2014 Google, Inc. http://angularjs.org
|
4
4
|
* License: MIT
|
5
5
|
*/
|
@@ -72,7 +72,7 @@ function minErr(module, ErrorConstructor) {
|
|
72
72
|
return match;
|
73
73
|
});
|
74
74
|
|
75
|
-
message = message + '\nhttp://errors.angularjs.org/1.3.
|
75
|
+
message = message + '\nhttp://errors.angularjs.org/1.3.2/' +
|
76
76
|
(module ? module + '/' : '') + code;
|
77
77
|
for (i = 2; i < arguments.length; i++) {
|
78
78
|
message = message + (i == 2 ? '?' : '&') + 'p' + (i-2) + '=' +
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license AngularJS v1.3.
|
2
|
+
* @license AngularJS v1.3.2
|
3
3
|
* (c) 2010-2014 Google, Inc. http://angularjs.org
|
4
4
|
* License: MIT
|
5
5
|
*/
|
@@ -1830,6 +1830,7 @@ angular.module('ngMock', ['ng']).provider({
|
|
1830
1830
|
$provide.decorator('$timeout', angular.mock.$TimeoutDecorator);
|
1831
1831
|
$provide.decorator('$$rAF', angular.mock.$RAFDecorator);
|
1832
1832
|
$provide.decorator('$$asyncCallback', angular.mock.$AsyncCallbackDecorator);
|
1833
|
+
$provide.decorator('$rootScope', angular.mock.$RootScopeDecorator);
|
1833
1834
|
}]);
|
1834
1835
|
|
1835
1836
|
/**
|
@@ -2038,6 +2039,92 @@ angular.mock.e2e.$httpBackendDecorator =
|
|
2038
2039
|
['$rootScope', '$delegate', '$browser', createHttpBackendMock];
|
2039
2040
|
|
2040
2041
|
|
2042
|
+
/**
|
2043
|
+
* @ngdoc type
|
2044
|
+
* @name $rootScope.Scope
|
2045
|
+
* @module ngMock
|
2046
|
+
* @description
|
2047
|
+
* {@link ng.$rootScope.Scope Scope} type decorated with helper methods useful for testing. These
|
2048
|
+
* methods are automatically available on any {@link ng.$rootScope.Scope Scope} instance when
|
2049
|
+
* `ngMock` module is loaded.
|
2050
|
+
*
|
2051
|
+
* In addition to all the regular `Scope` methods, the following helper methods are available:
|
2052
|
+
*/
|
2053
|
+
angular.mock.$RootScopeDecorator = function($delegate) {
|
2054
|
+
|
2055
|
+
var $rootScopePrototype = Object.getPrototypeOf($delegate);
|
2056
|
+
|
2057
|
+
$rootScopePrototype.$countChildScopes = countChildScopes;
|
2058
|
+
$rootScopePrototype.$countWatchers = countWatchers;
|
2059
|
+
|
2060
|
+
return $delegate;
|
2061
|
+
|
2062
|
+
// ------------------------------------------------------------------------------------------ //
|
2063
|
+
|
2064
|
+
/**
|
2065
|
+
* @ngdoc method
|
2066
|
+
* @name $rootScope.Scope#$countChildScopes
|
2067
|
+
* @module ngMock
|
2068
|
+
* @description
|
2069
|
+
* Counts all the direct and indirect child scopes of the current scope.
|
2070
|
+
*
|
2071
|
+
* The current scope is excluded from the count. The count includes all isolate child scopes.
|
2072
|
+
*
|
2073
|
+
* @returns {number} Total number of child scopes.
|
2074
|
+
*/
|
2075
|
+
function countChildScopes() {
|
2076
|
+
// jshint validthis: true
|
2077
|
+
var count = 0; // exclude the current scope
|
2078
|
+
var pendingChildHeads = [this.$$childHead];
|
2079
|
+
var currentScope;
|
2080
|
+
|
2081
|
+
while (pendingChildHeads.length) {
|
2082
|
+
currentScope = pendingChildHeads.shift();
|
2083
|
+
|
2084
|
+
while (currentScope) {
|
2085
|
+
count += 1;
|
2086
|
+
pendingChildHeads.push(currentScope.$$childHead);
|
2087
|
+
currentScope = currentScope.$$nextSibling;
|
2088
|
+
}
|
2089
|
+
}
|
2090
|
+
|
2091
|
+
return count;
|
2092
|
+
}
|
2093
|
+
|
2094
|
+
|
2095
|
+
/**
|
2096
|
+
* @ngdoc method
|
2097
|
+
* @name $rootScope.Scope#$countWatchers
|
2098
|
+
* @module ngMock
|
2099
|
+
* @description
|
2100
|
+
* Counts all the watchers of direct and indirect child scopes of the current scope.
|
2101
|
+
*
|
2102
|
+
* The watchers of the current scope are included in the count and so are all the watchers of
|
2103
|
+
* isolate child scopes.
|
2104
|
+
*
|
2105
|
+
* @returns {number} Total number of watchers.
|
2106
|
+
*/
|
2107
|
+
function countWatchers() {
|
2108
|
+
// jshint validthis: true
|
2109
|
+
var count = this.$$watchers ? this.$$watchers.length : 0; // include the current scope
|
2110
|
+
var pendingChildHeads = [this.$$childHead];
|
2111
|
+
var currentScope;
|
2112
|
+
|
2113
|
+
while (pendingChildHeads.length) {
|
2114
|
+
currentScope = pendingChildHeads.shift();
|
2115
|
+
|
2116
|
+
while (currentScope) {
|
2117
|
+
count += currentScope.$$watchers ? currentScope.$$watchers.length : 0;
|
2118
|
+
pendingChildHeads.push(currentScope.$$childHead);
|
2119
|
+
currentScope = currentScope.$$nextSibling;
|
2120
|
+
}
|
2121
|
+
}
|
2122
|
+
|
2123
|
+
return count;
|
2124
|
+
}
|
2125
|
+
};
|
2126
|
+
|
2127
|
+
|
2041
2128
|
if (window.jasmine || window.mocha) {
|
2042
2129
|
|
2043
2130
|
var currentSpec = null,
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license AngularJS v1.3.
|
2
|
+
* @license AngularJS v1.3.2
|
3
3
|
* (c) 2010-2014 Google, Inc. http://angularjs.org
|
4
4
|
* License: MIT
|
5
5
|
*/
|
@@ -146,10 +146,14 @@ function $RouteProvider() {
|
|
146
146
|
* Adds a new route definition to the `$route` service.
|
147
147
|
*/
|
148
148
|
this.when = function(path, route) {
|
149
|
+
//copy original route object to preserve params inherited from proto chain
|
150
|
+
var routeCopy = angular.copy(route);
|
151
|
+
if (angular.isUndefined(routeCopy.reloadOnSearch)) {
|
152
|
+
routeCopy.reloadOnSearch = true;
|
153
|
+
}
|
149
154
|
routes[path] = angular.extend(
|
150
|
-
|
151
|
-
|
152
|
-
path && pathRegExp(path, route)
|
155
|
+
routeCopy,
|
156
|
+
path && pathRegExp(path, routeCopy)
|
153
157
|
);
|
154
158
|
|
155
159
|
// create redirection for trailing slashes
|
@@ -160,7 +164,7 @@ function $RouteProvider() {
|
|
160
164
|
|
161
165
|
routes[redirectPath] = angular.extend(
|
162
166
|
{redirectTo: path},
|
163
|
-
pathRegExp(redirectPath,
|
167
|
+
pathRegExp(redirectPath, routeCopy)
|
164
168
|
);
|
165
169
|
}
|
166
170
|
|
@@ -442,7 +446,7 @@ function $RouteProvider() {
|
|
442
446
|
* {@link ng.$location $location} hasn't changed.
|
443
447
|
*
|
444
448
|
* As a result of that, {@link ngRoute.directive:ngView ngView}
|
445
|
-
* creates new scope
|
449
|
+
* creates new scope and reinstantiates the controller.
|
446
450
|
*/
|
447
451
|
reload: function() {
|
448
452
|
forceReload = true;
|
@@ -9190,7 +9190,7 @@ return jQuery;
|
|
9190
9190
|
}));
|
9191
9191
|
|
9192
9192
|
/**
|
9193
|
-
* @license AngularJS v1.3.
|
9193
|
+
* @license AngularJS v1.3.2
|
9194
9194
|
* (c) 2010-2014 Google, Inc. http://angularjs.org
|
9195
9195
|
* License: MIT
|
9196
9196
|
*/
|
@@ -9263,7 +9263,7 @@ function minErr(module, ErrorConstructor) {
|
|
9263
9263
|
return match;
|
9264
9264
|
});
|
9265
9265
|
|
9266
|
-
message = message + '\nhttp://errors.angularjs.org/1.3.
|
9266
|
+
message = message + '\nhttp://errors.angularjs.org/1.3.2/' +
|
9267
9267
|
(module ? module + '/' : '') + code;
|
9268
9268
|
for (i = 2; i < arguments.length; i++) {
|
9269
9269
|
message = message + (i == 2 ? '?' : '&') + 'p' + (i-2) + '=' +
|
@@ -11281,11 +11281,11 @@ function setupModuleLoader(window) {
|
|
11281
11281
|
* - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat".
|
11282
11282
|
*/
|
11283
11283
|
var version = {
|
11284
|
-
full: '1.3.
|
11284
|
+
full: '1.3.2', // all of these placeholder strings will be replaced by grunt's
|
11285
11285
|
major: 1, // package task
|
11286
11286
|
minor: 3,
|
11287
|
-
dot:
|
11288
|
-
codeName: '
|
11287
|
+
dot: 2,
|
11288
|
+
codeName: 'cardiovasculatory-magnification'
|
11289
11289
|
};
|
11290
11290
|
|
11291
11291
|
|
@@ -15462,10 +15462,17 @@ function $TemplateCacheProvider() {
|
|
15462
15462
|
*
|
15463
15463
|
*
|
15464
15464
|
* @param {string|DOMElement} element Element or HTML string to compile into a template function.
|
15465
|
-
* @param {function(angular.Scope, cloneAttachFn=)} transclude function available to directives.
|
15465
|
+
* @param {function(angular.Scope, cloneAttachFn=)} transclude function available to directives - DEPRECATED.
|
15466
|
+
*
|
15467
|
+
* <div class="alert alert-error">
|
15468
|
+
* **Note:** Passing a `transclude` function to the $compile function is deprecated, as it
|
15469
|
+
* e.g. will not use the right outer scope. Please pass the transclude function as a
|
15470
|
+
* `parentBoundTranscludeFn` to the link function instead.
|
15471
|
+
* </div>
|
15472
|
+
*
|
15466
15473
|
* @param {number} maxPriority only apply directives lower than given priority (Only effects the
|
15467
15474
|
* root element(s), not their children)
|
15468
|
-
* @returns {function(scope, cloneAttachFn=)} a link function which is used to bind template
|
15475
|
+
* @returns {function(scope, cloneAttachFn=, options=)} a link function which is used to bind template
|
15469
15476
|
* (a DOM element/tree) to a scope. Where:
|
15470
15477
|
*
|
15471
15478
|
* * `scope` - A {@link ng.$rootScope.Scope Scope} to bind to.
|
@@ -15477,6 +15484,19 @@ function $TemplateCacheProvider() {
|
|
15477
15484
|
* * `clonedElement` - is a clone of the original `element` passed into the compiler.
|
15478
15485
|
* * `scope` - is the current scope with which the linking function is working with.
|
15479
15486
|
*
|
15487
|
+
* * `options` - An optional object hash with linking options. If `options` is provided, then the following
|
15488
|
+
* keys may be used to control linking behavior:
|
15489
|
+
*
|
15490
|
+
* * `parentBoundTranscludeFn` - the transclude function made available to
|
15491
|
+
* directives; if given, it will be passed through to the link functions of
|
15492
|
+
* directives found in `element` during compilation.
|
15493
|
+
* * `transcludeControllers` - an object hash with keys that map controller names
|
15494
|
+
* to controller instances; if given, it will make the controllers
|
15495
|
+
* available to directives.
|
15496
|
+
* * `futureParentElement` - defines the parent to which the `cloneAttachFn` will add
|
15497
|
+
* the cloned elements; only needed for transcludes that are allowed to contain non html
|
15498
|
+
* elements (e.g. SVG elements). See also the directive.controller property.
|
15499
|
+
*
|
15480
15500
|
* Calling the linking function returns the element of the template. It is either the original
|
15481
15501
|
* element passed in, or the clone of the element if the `cloneAttachFn` is provided.
|
15482
15502
|
*
|
@@ -15995,8 +16015,22 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
|
|
15995
16015
|
maxPriority, ignoreDirective, previousCompileContext);
|
15996
16016
|
compile.$$addScopeClass($compileNodes);
|
15997
16017
|
var namespace = null;
|
15998
|
-
return function publicLinkFn(scope, cloneConnectFn,
|
16018
|
+
return function publicLinkFn(scope, cloneConnectFn, options) {
|
15999
16019
|
assertArg(scope, 'scope');
|
16020
|
+
|
16021
|
+
options = options || {};
|
16022
|
+
var parentBoundTranscludeFn = options.parentBoundTranscludeFn,
|
16023
|
+
transcludeControllers = options.transcludeControllers,
|
16024
|
+
futureParentElement = options.futureParentElement;
|
16025
|
+
|
16026
|
+
// When `parentBoundTranscludeFn` is passed, it is a
|
16027
|
+
// `controllersBoundTransclude` function (it was previously passed
|
16028
|
+
// as `transclude` to directive.link) so we must unwrap it to get
|
16029
|
+
// its `boundTranscludeFn`
|
16030
|
+
if (parentBoundTranscludeFn && parentBoundTranscludeFn.$$boundTransclude) {
|
16031
|
+
parentBoundTranscludeFn = parentBoundTranscludeFn.$$boundTransclude;
|
16032
|
+
}
|
16033
|
+
|
16000
16034
|
if (!namespace) {
|
16001
16035
|
namespace = detectNamespaceForChildElements(futureParentElement);
|
16002
16036
|
}
|
@@ -16166,7 +16200,11 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
|
|
16166
16200
|
transcludedScope.$$transcluded = true;
|
16167
16201
|
}
|
16168
16202
|
|
16169
|
-
return transcludeFn(transcludedScope, cloneFn,
|
16203
|
+
return transcludeFn(transcludedScope, cloneFn, {
|
16204
|
+
parentBoundTranscludeFn: previousBoundTranscludeFn,
|
16205
|
+
transcludeControllers: controllers,
|
16206
|
+
futureParentElement: futureParentElement
|
16207
|
+
});
|
16170
16208
|
};
|
16171
16209
|
|
16172
16210
|
return boundTranscludeFn;
|
@@ -16634,7 +16672,13 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
|
|
16634
16672
|
isolateScope = scope.$new(true);
|
16635
16673
|
}
|
16636
16674
|
|
16637
|
-
|
16675
|
+
if (boundTranscludeFn) {
|
16676
|
+
// track `boundTranscludeFn` so it can be unwrapped if `transcludeFn`
|
16677
|
+
// is later passed as `parentBoundTranscludeFn` to `publicLinkFn`
|
16678
|
+
transcludeFn = controllersBoundTransclude;
|
16679
|
+
transcludeFn.$$boundTransclude = boundTranscludeFn;
|
16680
|
+
}
|
16681
|
+
|
16638
16682
|
if (controllerDirectives) {
|
16639
16683
|
// TODO: merge `controllers` and `elementControllers` into single object.
|
16640
16684
|
controllers = {};
|
@@ -21393,64 +21437,85 @@ function setter(obj, path, setValue, fullExp) {
|
|
21393
21437
|
return setValue;
|
21394
21438
|
}
|
21395
21439
|
|
21396
|
-
var
|
21440
|
+
var getterFnCacheDefault = createMap();
|
21441
|
+
var getterFnCacheExpensive = createMap();
|
21442
|
+
|
21443
|
+
function isPossiblyDangerousMemberName(name) {
|
21444
|
+
return name == 'constructor';
|
21445
|
+
}
|
21397
21446
|
|
21398
21447
|
/**
|
21399
21448
|
* Implementation of the "Black Hole" variant from:
|
21400
21449
|
* - http://jsperf.com/angularjs-parse-getter/4
|
21401
21450
|
* - http://jsperf.com/path-evaluation-simplified/7
|
21402
21451
|
*/
|
21403
|
-
function cspSafeGetterFn(key0, key1, key2, key3, key4, fullExp) {
|
21452
|
+
function cspSafeGetterFn(key0, key1, key2, key3, key4, fullExp, expensiveChecks) {
|
21404
21453
|
ensureSafeMemberName(key0, fullExp);
|
21405
21454
|
ensureSafeMemberName(key1, fullExp);
|
21406
21455
|
ensureSafeMemberName(key2, fullExp);
|
21407
21456
|
ensureSafeMemberName(key3, fullExp);
|
21408
21457
|
ensureSafeMemberName(key4, fullExp);
|
21458
|
+
var eso = function(o) {
|
21459
|
+
return ensureSafeObject(o, fullExp);
|
21460
|
+
};
|
21461
|
+
var eso0 = (expensiveChecks || isPossiblyDangerousMemberName(key0)) ? eso : identity;
|
21462
|
+
var eso1 = (expensiveChecks || isPossiblyDangerousMemberName(key1)) ? eso : identity;
|
21463
|
+
var eso2 = (expensiveChecks || isPossiblyDangerousMemberName(key2)) ? eso : identity;
|
21464
|
+
var eso3 = (expensiveChecks || isPossiblyDangerousMemberName(key3)) ? eso : identity;
|
21465
|
+
var eso4 = (expensiveChecks || isPossiblyDangerousMemberName(key4)) ? eso : identity;
|
21409
21466
|
|
21410
21467
|
return function cspSafeGetter(scope, locals) {
|
21411
21468
|
var pathVal = (locals && locals.hasOwnProperty(key0)) ? locals : scope;
|
21412
21469
|
|
21413
21470
|
if (pathVal == null) return pathVal;
|
21414
|
-
pathVal = pathVal[key0];
|
21471
|
+
pathVal = eso0(pathVal[key0]);
|
21415
21472
|
|
21416
21473
|
if (!key1) return pathVal;
|
21417
21474
|
if (pathVal == null) return undefined;
|
21418
|
-
pathVal = pathVal[key1];
|
21475
|
+
pathVal = eso1(pathVal[key1]);
|
21419
21476
|
|
21420
21477
|
if (!key2) return pathVal;
|
21421
21478
|
if (pathVal == null) return undefined;
|
21422
|
-
pathVal = pathVal[key2];
|
21479
|
+
pathVal = eso2(pathVal[key2]);
|
21423
21480
|
|
21424
21481
|
if (!key3) return pathVal;
|
21425
21482
|
if (pathVal == null) return undefined;
|
21426
|
-
pathVal = pathVal[key3];
|
21483
|
+
pathVal = eso3(pathVal[key3]);
|
21427
21484
|
|
21428
21485
|
if (!key4) return pathVal;
|
21429
21486
|
if (pathVal == null) return undefined;
|
21430
|
-
pathVal = pathVal[key4];
|
21487
|
+
pathVal = eso4(pathVal[key4]);
|
21431
21488
|
|
21432
21489
|
return pathVal;
|
21433
21490
|
};
|
21434
21491
|
}
|
21435
21492
|
|
21493
|
+
function getterFnWithEnsureSafeObject(fn, fullExpression) {
|
21494
|
+
return function(s, l) {
|
21495
|
+
return fn(s, l, ensureSafeObject, fullExpression);
|
21496
|
+
};
|
21497
|
+
}
|
21498
|
+
|
21436
21499
|
function getterFn(path, options, fullExp) {
|
21500
|
+
var expensiveChecks = options.expensiveChecks;
|
21501
|
+
var getterFnCache = (expensiveChecks ? getterFnCacheExpensive : getterFnCacheDefault);
|
21437
21502
|
var fn = getterFnCache[path];
|
21438
|
-
|
21439
21503
|
if (fn) return fn;
|
21440
21504
|
|
21505
|
+
|
21441
21506
|
var pathKeys = path.split('.'),
|
21442
21507
|
pathKeysLength = pathKeys.length;
|
21443
21508
|
|
21444
21509
|
// http://jsperf.com/angularjs-parse-getter/6
|
21445
21510
|
if (options.csp) {
|
21446
21511
|
if (pathKeysLength < 6) {
|
21447
|
-
fn = cspSafeGetterFn(pathKeys[0], pathKeys[1], pathKeys[2], pathKeys[3], pathKeys[4], fullExp);
|
21512
|
+
fn = cspSafeGetterFn(pathKeys[0], pathKeys[1], pathKeys[2], pathKeys[3], pathKeys[4], fullExp, expensiveChecks);
|
21448
21513
|
} else {
|
21449
21514
|
fn = function cspSafeGetter(scope, locals) {
|
21450
21515
|
var i = 0, val;
|
21451
21516
|
do {
|
21452
21517
|
val = cspSafeGetterFn(pathKeys[i++], pathKeys[i++], pathKeys[i++], pathKeys[i++],
|
21453
|
-
pathKeys[i++], fullExp)(scope, locals);
|
21518
|
+
pathKeys[i++], fullExp, expensiveChecks)(scope, locals);
|
21454
21519
|
|
21455
21520
|
locals = undefined; // clear after first iteration
|
21456
21521
|
scope = val;
|
@@ -21460,22 +21525,33 @@ function getterFn(path, options, fullExp) {
|
|
21460
21525
|
}
|
21461
21526
|
} else {
|
21462
21527
|
var code = '';
|
21528
|
+
if (expensiveChecks) {
|
21529
|
+
code += 's = eso(s, fe);\nl = eso(l, fe);\n';
|
21530
|
+
}
|
21531
|
+
var needsEnsureSafeObject = expensiveChecks;
|
21463
21532
|
forEach(pathKeys, function(key, index) {
|
21464
21533
|
ensureSafeMemberName(key, fullExp);
|
21465
|
-
|
21466
|
-
's='+ (index
|
21534
|
+
var lookupJs = (index
|
21467
21535
|
// we simply dereference 's' on any .dot notation
|
21468
21536
|
? 's'
|
21469
21537
|
// but if we are first then we check locals first, and if so read it first
|
21470
|
-
: '((l&&l.hasOwnProperty("' + key + '"))?l:s)') + '.' + key
|
21538
|
+
: '((l&&l.hasOwnProperty("' + key + '"))?l:s)') + '.' + key;
|
21539
|
+
if (expensiveChecks || isPossiblyDangerousMemberName(key)) {
|
21540
|
+
lookupJs = 'eso(' + lookupJs + ', fe)';
|
21541
|
+
needsEnsureSafeObject = true;
|
21542
|
+
}
|
21543
|
+
code += 'if(s == null) return undefined;\n' +
|
21544
|
+
's=' + lookupJs + ';\n';
|
21471
21545
|
});
|
21472
21546
|
code += 'return s;';
|
21473
21547
|
|
21474
21548
|
/* jshint -W054 */
|
21475
|
-
var evaledFnGetter = new Function('s', 'l', code); // s=scope, l=locals
|
21549
|
+
var evaledFnGetter = new Function('s', 'l', 'eso', 'fe', code); // s=scope, l=locals, eso=ensureSafeObject
|
21476
21550
|
/* jshint +W054 */
|
21477
21551
|
evaledFnGetter.toString = valueFn(code);
|
21478
|
-
|
21552
|
+
if (needsEnsureSafeObject) {
|
21553
|
+
evaledFnGetter = getterFnWithEnsureSafeObject(evaledFnGetter, fullExp);
|
21554
|
+
}
|
21479
21555
|
fn = evaledFnGetter;
|
21480
21556
|
}
|
21481
21557
|
|
@@ -21545,15 +21621,20 @@ function getValueOf(value) {
|
|
21545
21621
|
* service.
|
21546
21622
|
*/
|
21547
21623
|
function $ParseProvider() {
|
21548
|
-
var
|
21624
|
+
var cacheDefault = createMap();
|
21625
|
+
var cacheExpensive = createMap();
|
21549
21626
|
|
21550
|
-
var $parseOptions = {
|
21551
|
-
csp: false
|
21552
|
-
};
|
21553
21627
|
|
21554
21628
|
|
21555
21629
|
this.$get = ['$filter', '$sniffer', function($filter, $sniffer) {
|
21556
|
-
$parseOptions
|
21630
|
+
var $parseOptions = {
|
21631
|
+
csp: $sniffer.csp,
|
21632
|
+
expensiveChecks: false
|
21633
|
+
},
|
21634
|
+
$parseOptionsExpensive = {
|
21635
|
+
csp: $sniffer.csp,
|
21636
|
+
expensiveChecks: true
|
21637
|
+
};
|
21557
21638
|
|
21558
21639
|
function wrapSharedExpression(exp) {
|
21559
21640
|
var wrapped = exp;
|
@@ -21570,13 +21651,14 @@ function $ParseProvider() {
|
|
21570
21651
|
return wrapped;
|
21571
21652
|
}
|
21572
21653
|
|
21573
|
-
return function $parse(exp, interceptorFn) {
|
21654
|
+
return function $parse(exp, interceptorFn, expensiveChecks) {
|
21574
21655
|
var parsedExpression, oneTime, cacheKey;
|
21575
21656
|
|
21576
21657
|
switch (typeof exp) {
|
21577
21658
|
case 'string':
|
21578
21659
|
cacheKey = exp = exp.trim();
|
21579
21660
|
|
21661
|
+
var cache = (expensiveChecks ? cacheExpensive : cacheDefault);
|
21580
21662
|
parsedExpression = cache[cacheKey];
|
21581
21663
|
|
21582
21664
|
if (!parsedExpression) {
|
@@ -21585,8 +21667,9 @@ function $ParseProvider() {
|
|
21585
21667
|
exp = exp.substring(2);
|
21586
21668
|
}
|
21587
21669
|
|
21588
|
-
var
|
21589
|
-
var
|
21670
|
+
var parseOptions = expensiveChecks ? $parseOptionsExpensive : $parseOptions;
|
21671
|
+
var lexer = new Lexer(parseOptions);
|
21672
|
+
var parser = new Parser(lexer, $filter, parseOptions);
|
21590
21673
|
parsedExpression = parser.parse(exp);
|
21591
21674
|
|
21592
21675
|
if (parsedExpression.constant) {
|
@@ -21759,7 +21842,7 @@ function $ParseProvider() {
|
|
21759
21842
|
var result = interceptorFn(value, scope, locals);
|
21760
21843
|
// we only return the interceptor's result if the
|
21761
21844
|
// initial value is defined (for bind-once)
|
21762
|
-
return isDefined(value) ? result : value;
|
21845
|
+
return isDefined(value) || interceptorFn.$stateful ? result : value;
|
21763
21846
|
};
|
21764
21847
|
|
21765
21848
|
// Propagate $$watchDelegates other then inputsWatchDelegate
|
@@ -22492,6 +22575,10 @@ function $RootScopeProvider() {
|
|
22492
22575
|
expect(parent.salutation).toEqual('Hello');
|
22493
22576
|
* ```
|
22494
22577
|
*
|
22578
|
+
* When interacting with `Scope` in tests, additional helper methods are available on the
|
22579
|
+
* instances of `Scope` type. See {@link ngMock.$rootScope.Scope ngMock Scope} for additional
|
22580
|
+
* details.
|
22581
|
+
*
|
22495
22582
|
*
|
22496
22583
|
* @param {Object.<string, function()>=} providers Map of service factory which need to be
|
22497
22584
|
* provided for the current scope. Defaults to {@link ng}.
|
@@ -22930,6 +23017,9 @@ function $RootScopeProvider() {
|
|
22930
23017
|
newValue = _value;
|
22931
23018
|
var newLength, key, bothNaN, newItem, oldItem;
|
22932
23019
|
|
23020
|
+
// If the new value is undefined, then return undefined as the watch may be a one-time watch
|
23021
|
+
if (isUndefined(newValue)) return;
|
23022
|
+
|
22933
23023
|
if (!isObject(newValue)) { // if primitive
|
22934
23024
|
if (oldValue !== newValue) {
|
22935
23025
|
oldValue = newValue;
|
@@ -27732,7 +27822,7 @@ var inputType = {
|
|
27732
27822
|
|
27733
27823
|
/**
|
27734
27824
|
* @ngdoc input
|
27735
|
-
* @name input[
|
27825
|
+
* @name input[datetime-local]
|
27736
27826
|
*
|
27737
27827
|
* @description
|
27738
27828
|
* Input with datetime validation and transformation. In browsers that do not yet support
|
@@ -29108,9 +29198,6 @@ var VALID_CLASS = 'ng-valid',
|
|
29108
29198
|
* };
|
29109
29199
|
* ```
|
29110
29200
|
*
|
29111
|
-
* @param {string} name The name of the validator.
|
29112
|
-
* @param {Function} validationFn The validation function that will be run.
|
29113
|
-
*
|
29114
29201
|
* @property {Array.<Function>} $viewChangeListeners Array of functions to execute whenever the
|
29115
29202
|
* view value has changed. It is called with no arguments, and its return value is ignored.
|
29116
29203
|
* This can be used in place of additional $watches against the model value.
|
@@ -29124,6 +29211,7 @@ var VALID_CLASS = 'ng-valid',
|
|
29124
29211
|
* @property {boolean} $dirty True if user has already interacted with the control.
|
29125
29212
|
* @property {boolean} $valid True if there is no error.
|
29126
29213
|
* @property {boolean} $invalid True if at least one error on the control.
|
29214
|
+
* @property {string} $name The name attribute of the control.
|
29127
29215
|
*
|
29128
29216
|
* @description
|
29129
29217
|
*
|
@@ -29824,7 +29912,7 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
|
|
29824
29912
|
* - {@link input[email] email}
|
29825
29913
|
* - {@link input[url] url}
|
29826
29914
|
* - {@link input[date] date}
|
29827
|
-
* - {@link input[
|
29915
|
+
* - {@link input[datetime-local] datetime-local}
|
29828
29916
|
* - {@link input[time] time}
|
29829
29917
|
* - {@link input[month] month}
|
29830
29918
|
* - {@link input[week] week}
|
@@ -30304,12 +30392,17 @@ var CONSTANT_VALUE_REGEXP = /^(true|false|\d+)$/;
|
|
30304
30392
|
* @name ngValue
|
30305
30393
|
*
|
30306
30394
|
* @description
|
30307
|
-
* Binds the given expression to the value of
|
30308
|
-
* that when the element is selected, the `ngModel` of that element is set to
|
30395
|
+
* Binds the given expression to the value of `<option>` or {@link input[radio] `input[radio]`},
|
30396
|
+
* so that when the element is selected, the {@link ngModel `ngModel`} of that element is set to
|
30309
30397
|
* the bound value.
|
30310
30398
|
*
|
30311
|
-
* `ngValue` is useful when dynamically generating lists of radio buttons using
|
30312
|
-
* shown below.
|
30399
|
+
* `ngValue` is useful when dynamically generating lists of radio buttons using
|
30400
|
+
* {@link ngRepeat `ngRepeat`}, as shown below.
|
30401
|
+
*
|
30402
|
+
* Likewise, `ngValue` can be used to generate `<option>` elements for
|
30403
|
+
* the {@link select `select`} element. In that case however, only strings are supported
|
30404
|
+
* for the `value `attribute, so the resulting `ngModel` will always be a string.
|
30405
|
+
* Support for `select` models with non-string values is available via `ngOptions`.
|
30313
30406
|
*
|
30314
30407
|
* @element input
|
30315
30408
|
* @param {string=} ngValue angular expression, whose value will be bound to the `value` attribute
|
@@ -31733,7 +31826,11 @@ forEach(
|
|
31733
31826
|
return {
|
31734
31827
|
restrict: 'A',
|
31735
31828
|
compile: function($element, attr) {
|
31736
|
-
|
31829
|
+
// We expose the powerful $event object on the scope that provides access to the Window,
|
31830
|
+
// etc. that isn't protected by the fast paths in $parse. We explicitly request better
|
31831
|
+
// checks at the cost of speed since event handler expressions are not executed as
|
31832
|
+
// frequently as regular change detection.
|
31833
|
+
var fn = $parse(attr[directiveName], /* interceptorFn */ null, /* expensiveChecks */ true);
|
31737
31834
|
return function ngEventHandler(scope, element) {
|
31738
31835
|
element.on(eventName, function(event) {
|
31739
31836
|
var callback = function() {
|
@@ -32568,7 +32665,7 @@ var ngIncludeFillContentDirective = ['$compile',
|
|
32568
32665
|
$compile(jqLiteBuildFragment(ctrl.template, document).childNodes)(scope,
|
32569
32666
|
function namespaceAdaptedClone(clone) {
|
32570
32667
|
$element.append(clone);
|
32571
|
-
},
|
32668
|
+
}, {futureParentElement: $element});
|
32572
32669
|
return;
|
32573
32670
|
}
|
32574
32671
|
|
@@ -34532,7 +34629,7 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) {
|
|
34532
34629
|
if (multiple) {
|
34533
34630
|
return isDefined(selectedSet.remove(callExpression(compareValueFn, key, value)));
|
34534
34631
|
} else {
|
34535
|
-
return viewValue
|
34632
|
+
return viewValue === callExpression(compareValueFn, key, value);
|
34536
34633
|
}
|
34537
34634
|
};
|
34538
34635
|
}
|