angularjs-rails 1.2.7 → 1.2.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/angularjs-rails/version.rb +1 -1
- data/vendor/assets/javascripts/angular-animate.js +136 -33
- data/vendor/assets/javascripts/angular-cookies.js +1 -1
- data/vendor/assets/javascripts/angular-loader.js +2 -2
- data/vendor/assets/javascripts/angular-mocks.js +48 -3
- data/vendor/assets/javascripts/angular-resource.js +2 -2
- data/vendor/assets/javascripts/angular-route.js +10 -1
- data/vendor/assets/javascripts/angular-sanitize.js +1 -1
- data/vendor/assets/javascripts/angular-scenario.js +126 -154
- data/vendor/assets/javascripts/angular-touch.js +1 -1
- data/vendor/assets/javascripts/angular.js +126 -154
- metadata +2 -2
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license AngularJS v1.2.
|
2
|
+
* @license AngularJS v1.2.9
|
3
3
|
* (c) 2010-2014 Google, Inc. http://angularjs.org
|
4
4
|
* License: MIT
|
5
5
|
*/
|
@@ -68,7 +68,7 @@ function minErr(module) {
|
|
68
68
|
return match;
|
69
69
|
});
|
70
70
|
|
71
|
-
message = message + '\nhttp://errors.angularjs.org/1.2.
|
71
|
+
message = message + '\nhttp://errors.angularjs.org/1.2.9/' +
|
72
72
|
(module ? module + '/' : '') + code;
|
73
73
|
for (i = 2; i < arguments.length; i++) {
|
74
74
|
message = message + (i == 2 ? '?' : '&') + 'p' + (i-2) + '=' +
|
@@ -271,7 +271,8 @@ function isArrayLike(obj) {
|
|
271
271
|
* is the value of an object property or an array element and `key` is the object property key or
|
272
272
|
* array element index. Specifying a `context` for the function is optional.
|
273
273
|
*
|
274
|
-
*
|
274
|
+
* It is worth nothing that `.forEach` does not iterate over inherited properties because it filters
|
275
|
+
* using the `hasOwnProperty` method.
|
275
276
|
*
|
276
277
|
<pre>
|
277
278
|
var values = {name: 'misko', gender: 'male'};
|
@@ -1833,11 +1834,11 @@ function setupModuleLoader(window) {
|
|
1833
1834
|
* - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat".
|
1834
1835
|
*/
|
1835
1836
|
var version = {
|
1836
|
-
full: '1.2.
|
1837
|
+
full: '1.2.9', // all of these placeholder strings will be replaced by grunt's
|
1837
1838
|
major: 1, // package task
|
1838
1839
|
minor: 2,
|
1839
|
-
dot:
|
1840
|
-
codeName: '
|
1840
|
+
dot: 9,
|
1841
|
+
codeName: 'enchanted-articulacy'
|
1841
1842
|
};
|
1842
1843
|
|
1843
1844
|
|
@@ -3399,7 +3400,7 @@ function annotate(fn) {
|
|
3399
3400
|
* constructor function that will be used to instantiate the service instance.
|
3400
3401
|
*
|
3401
3402
|
* You should use {@link AUTO.$provide#methods_service $provide.service(class)} if you define your service
|
3402
|
-
* as a type/class.
|
3403
|
+
* as a type/class.
|
3403
3404
|
*
|
3404
3405
|
* @param {string} name The name of the instance.
|
3405
3406
|
* @param {Function} constructor A class (constructor function) that will be instantiated.
|
@@ -3407,20 +3408,25 @@ function annotate(fn) {
|
|
3407
3408
|
*
|
3408
3409
|
* @example
|
3409
3410
|
* Here is an example of registering a service using
|
3410
|
-
* {@link AUTO.$provide#methods_service $provide.service(class)}
|
3411
|
+
* {@link AUTO.$provide#methods_service $provide.service(class)}.
|
3411
3412
|
* <pre>
|
3412
|
-
*
|
3413
|
-
*
|
3414
|
-
*
|
3415
|
-
*
|
3416
|
-
*
|
3417
|
-
*
|
3413
|
+
* $provide.service('ping', ['$http', function($http) {
|
3414
|
+
* var Ping = function() {
|
3415
|
+
* this.$http = $http;
|
3416
|
+
* };
|
3417
|
+
*
|
3418
|
+
* Ping.prototype.send = function() {
|
3419
|
+
* return this.$http.get('/ping');
|
3420
|
+
* };
|
3421
|
+
*
|
3422
|
+
* return Ping;
|
3423
|
+
* }]);
|
3418
3424
|
* </pre>
|
3419
3425
|
* You would then inject and use this service like this:
|
3420
3426
|
* <pre>
|
3421
|
-
* someModule.controller
|
3422
|
-
* ping.send()
|
3423
|
-
* ]
|
3427
|
+
* someModule.controller('Ctrl', ['ping', function(ping) {
|
3428
|
+
* ping.send();
|
3429
|
+
* }]);
|
3424
3430
|
* </pre>
|
3425
3431
|
*/
|
3426
3432
|
|
@@ -6648,7 +6654,7 @@ function directiveNormalize(name) {
|
|
6648
6654
|
*
|
6649
6655
|
*
|
6650
6656
|
* @param {string} name Normalized element attribute name of the property to modify. The name is
|
6651
|
-
*
|
6657
|
+
* reverse-translated using the {@link ng.$compile.directive.Attributes#$attr $attr}
|
6652
6658
|
* property to the original name.
|
6653
6659
|
* @param {string} value Value to set the attribute to. The value can be an interpolated string.
|
6654
6660
|
*/
|
@@ -6786,8 +6792,7 @@ function $ControllerProvider() {
|
|
6786
6792
|
* @requires $window
|
6787
6793
|
*
|
6788
6794
|
* @description
|
6789
|
-
* A {@link angular.element jQuery
|
6790
|
-
* element.
|
6795
|
+
* A {@link angular.element jQuery or jqLite} wrapper for the browser's `window.document` object.
|
6791
6796
|
*/
|
6792
6797
|
function $DocumentProvider(){
|
6793
6798
|
this.$get = ['$window', function(window){
|
@@ -6946,9 +6951,9 @@ function $HttpProvider() {
|
|
6946
6951
|
common: {
|
6947
6952
|
'Accept': 'application/json, text/plain, */*'
|
6948
6953
|
},
|
6949
|
-
post: CONTENT_TYPE_APPLICATION_JSON,
|
6950
|
-
put: CONTENT_TYPE_APPLICATION_JSON,
|
6951
|
-
patch: CONTENT_TYPE_APPLICATION_JSON
|
6954
|
+
post: copy(CONTENT_TYPE_APPLICATION_JSON),
|
6955
|
+
put: copy(CONTENT_TYPE_APPLICATION_JSON),
|
6956
|
+
patch: copy(CONTENT_TYPE_APPLICATION_JSON)
|
6952
6957
|
},
|
6953
6958
|
|
6954
6959
|
xsrfCookieName: 'XSRF-TOKEN',
|
@@ -7126,7 +7131,15 @@ function $HttpProvider() {
|
|
7126
7131
|
* `$httpProvider.defaults.headers.get = { 'My-Header' : 'value' }.
|
7127
7132
|
*
|
7128
7133
|
* The defaults can also be set at runtime via the `$http.defaults` object in the same
|
7129
|
-
* fashion.
|
7134
|
+
* fashion. For example:
|
7135
|
+
*
|
7136
|
+
* ```
|
7137
|
+
* module.run(function($http) {
|
7138
|
+
* $http.defaults.headers.common.Authentication = 'Basic YmVlcDpib29w'
|
7139
|
+
* });
|
7140
|
+
* ```
|
7141
|
+
*
|
7142
|
+
* In addition, you can supply a `headers` property in the config object passed when
|
7130
7143
|
* calling `$http(config)`, which overrides the defaults without changing them globally.
|
7131
7144
|
*
|
7132
7145
|
*
|
@@ -7150,7 +7163,9 @@ function $HttpProvider() {
|
|
7150
7163
|
* properties. These properties are by default an array of transform functions, which allows you
|
7151
7164
|
* to `push` or `unshift` a new transformation function into the transformation chain. You can
|
7152
7165
|
* also decide to completely override any default transformations by assigning your
|
7153
|
-
* transformation functions to these properties directly without the array wrapper.
|
7166
|
+
* transformation functions to these properties directly without the array wrapper. These defaults
|
7167
|
+
* are again available on the $http factory at run-time, which may be useful if you have run-time
|
7168
|
+
* services you wish to be involved in your transformations.
|
7154
7169
|
*
|
7155
7170
|
* Similarly, to locally override the request/response transforms, augment the
|
7156
7171
|
* `transformRequest` and/or `transformResponse` properties of the configuration object passed
|
@@ -7364,7 +7379,8 @@ function $HttpProvider() {
|
|
7364
7379
|
* for added security.
|
7365
7380
|
*
|
7366
7381
|
* The name of the headers can be specified using the xsrfHeaderName and xsrfCookieName
|
7367
|
-
* properties of either $httpProvider.defaults,
|
7382
|
+
* properties of either $httpProvider.defaults at config-time, $http.defaults at run-time,
|
7383
|
+
* or the per-request config object.
|
7368
7384
|
*
|
7369
7385
|
*
|
7370
7386
|
* @param {object} config Object describing the request to be made and how it should be
|
@@ -7927,7 +7943,7 @@ function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDoc
|
|
7927
7943
|
} else {
|
7928
7944
|
completeRequest(callback, status || -2);
|
7929
7945
|
}
|
7930
|
-
|
7946
|
+
callbacks[callbackId] = angular.noop;
|
7931
7947
|
});
|
7932
7948
|
} else {
|
7933
7949
|
|
@@ -7944,7 +7960,7 @@ function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDoc
|
|
7944
7960
|
// response is in the cache. the promise api will ensure that to the app code the api is
|
7945
7961
|
// always async
|
7946
7962
|
xhr.onreadystatechange = function() {
|
7947
|
-
// onreadystatechange might
|
7963
|
+
// onreadystatechange might get called multiple times with readyState === 4 on mobile webkit caused by
|
7948
7964
|
// xhrs that are resolved while the app is in the background (see #5426).
|
7949
7965
|
// since calling completeRequest sets the `xhr` variable to null, we just check if it's not null before
|
7950
7966
|
// continuing
|
@@ -7957,11 +7973,12 @@ function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDoc
|
|
7957
7973
|
|
7958
7974
|
if(status !== ABORTED) {
|
7959
7975
|
responseHeaders = xhr.getAllResponseHeaders();
|
7960
|
-
|
7976
|
+
|
7977
|
+
// responseText is the old-school way of retrieving response (supported by IE8 & 9)
|
7978
|
+
// response/responseType properties were introduced in XHR Level2 spec (supported by IE10)
|
7979
|
+
response = ('response' in xhr) ? xhr.response : xhr.responseText;
|
7961
7980
|
}
|
7962
7981
|
|
7963
|
-
// responseText is the old-school way of retrieving response (supported by IE8 & 9)
|
7964
|
-
// response/responseType properties were introduced in XHR Level2 spec (supported by IE10)
|
7965
7982
|
completeRequest(callback,
|
7966
7983
|
status || xhr.status,
|
7967
7984
|
response,
|
@@ -7994,14 +8011,14 @@ function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDoc
|
|
7994
8011
|
}
|
7995
8012
|
|
7996
8013
|
function completeRequest(callback, status, response, headersString) {
|
7997
|
-
var protocol = urlResolve(url).protocol;
|
7998
|
-
|
7999
8014
|
// cancel timeout and subsequent timeout promise resolution
|
8000
8015
|
timeoutId && $browserDefer.cancel(timeoutId);
|
8001
8016
|
jsonpDone = xhr = null;
|
8002
8017
|
|
8003
|
-
// fix status code
|
8004
|
-
|
8018
|
+
// fix status code when it is 0 (0 status is undocumented).
|
8019
|
+
// Occurs when accessing file resources.
|
8020
|
+
// On Android 4.1 stock browser it occurs while retrieving files from application cache.
|
8021
|
+
status = (status === 0) ? (response ? 200 : 404) : status;
|
8005
8022
|
|
8006
8023
|
// normalize IE bug (http://bugs.jquery.com/ticket/1450)
|
8007
8024
|
status = status == 1223 ? 204 : status;
|
@@ -9115,7 +9132,7 @@ function $LocationProvider(){
|
|
9115
9132
|
* Broadcasted before a URL will change. This change can be prevented by calling
|
9116
9133
|
* `preventDefault` method of the event. See {@link ng.$rootScope.Scope#$on} for more
|
9117
9134
|
* details about event object. Upon successful change
|
9118
|
-
* {@link ng.$location
|
9135
|
+
* {@link ng.$location#events_$locationChangeSuccess $locationChangeSuccess} is fired.
|
9119
9136
|
*
|
9120
9137
|
* @param {Object} angularEvent Synthetic event object.
|
9121
9138
|
* @param {string} newUrl New URL
|
@@ -10306,16 +10323,20 @@ function cspSafeGetterFn(key0, key1, key2, key3, key4, fullExp, options) {
|
|
10306
10323
|
if (pathVal == null) return pathVal;
|
10307
10324
|
pathVal = pathVal[key0];
|
10308
10325
|
|
10309
|
-
if (
|
10326
|
+
if (!key1) return pathVal;
|
10327
|
+
if (pathVal == null) return undefined;
|
10310
10328
|
pathVal = pathVal[key1];
|
10311
10329
|
|
10312
|
-
if (
|
10330
|
+
if (!key2) return pathVal;
|
10331
|
+
if (pathVal == null) return undefined;
|
10313
10332
|
pathVal = pathVal[key2];
|
10314
10333
|
|
10315
|
-
if (
|
10334
|
+
if (!key3) return pathVal;
|
10335
|
+
if (pathVal == null) return undefined;
|
10316
10336
|
pathVal = pathVal[key3];
|
10317
10337
|
|
10318
|
-
if (
|
10338
|
+
if (!key4) return pathVal;
|
10339
|
+
if (pathVal == null) return undefined;
|
10319
10340
|
pathVal = pathVal[key4];
|
10320
10341
|
|
10321
10342
|
return pathVal;
|
@@ -10336,8 +10357,9 @@ function cspSafeGetterFn(key0, key1, key2, key3, key4, fullExp, options) {
|
|
10336
10357
|
}
|
10337
10358
|
pathVal = pathVal.$$v;
|
10338
10359
|
}
|
10339
|
-
if (pathVal == null) return key1 ? undefined : pathVal;
|
10340
10360
|
|
10361
|
+
if (!key1) return pathVal;
|
10362
|
+
if (pathVal == null) return undefined;
|
10341
10363
|
pathVal = pathVal[key1];
|
10342
10364
|
if (pathVal && pathVal.then) {
|
10343
10365
|
promiseWarning(fullExp);
|
@@ -10348,8 +10370,9 @@ function cspSafeGetterFn(key0, key1, key2, key3, key4, fullExp, options) {
|
|
10348
10370
|
}
|
10349
10371
|
pathVal = pathVal.$$v;
|
10350
10372
|
}
|
10351
|
-
if (pathVal == null) return key2 ? undefined : pathVal;
|
10352
10373
|
|
10374
|
+
if (!key2) return pathVal;
|
10375
|
+
if (pathVal == null) return undefined;
|
10353
10376
|
pathVal = pathVal[key2];
|
10354
10377
|
if (pathVal && pathVal.then) {
|
10355
10378
|
promiseWarning(fullExp);
|
@@ -10360,8 +10383,9 @@ function cspSafeGetterFn(key0, key1, key2, key3, key4, fullExp, options) {
|
|
10360
10383
|
}
|
10361
10384
|
pathVal = pathVal.$$v;
|
10362
10385
|
}
|
10363
|
-
if (pathVal == null) return key3 ? undefined : pathVal;
|
10364
10386
|
|
10387
|
+
if (!key3) return pathVal;
|
10388
|
+
if (pathVal == null) return undefined;
|
10365
10389
|
pathVal = pathVal[key3];
|
10366
10390
|
if (pathVal && pathVal.then) {
|
10367
10391
|
promiseWarning(fullExp);
|
@@ -10372,8 +10396,9 @@ function cspSafeGetterFn(key0, key1, key2, key3, key4, fullExp, options) {
|
|
10372
10396
|
}
|
10373
10397
|
pathVal = pathVal.$$v;
|
10374
10398
|
}
|
10375
|
-
if (pathVal == null) return key4 ? undefined : pathVal;
|
10376
10399
|
|
10400
|
+
if (!key4) return pathVal;
|
10401
|
+
if (pathVal == null) return undefined;
|
10377
10402
|
pathVal = pathVal[key4];
|
10378
10403
|
if (pathVal && pathVal.then) {
|
10379
10404
|
promiseWarning(fullExp);
|
@@ -11371,7 +11396,7 @@ function $RootScopeProvider(){
|
|
11371
11396
|
} else {
|
11372
11397
|
ChildScope = function() {}; // should be anonymous; This is so that when the minifier munges
|
11373
11398
|
// the name it does not become random set of chars. This will then show up as class
|
11374
|
-
// name in the
|
11399
|
+
// name in the web inspector.
|
11375
11400
|
ChildScope.prototype = this;
|
11376
11401
|
child = new ChildScope();
|
11377
11402
|
child.$id = nextUid();
|
@@ -11472,7 +11497,7 @@ function $RootScopeProvider(){
|
|
11472
11497
|
// No digest has been run so the counter will be zero
|
11473
11498
|
expect(scope.foodCounter).toEqual(0);
|
11474
11499
|
|
11475
|
-
// Run the digest but since food has not changed
|
11500
|
+
// Run the digest but since food has not changed count will still be zero
|
11476
11501
|
scope.$digest();
|
11477
11502
|
expect(scope.foodCounter).toEqual(0);
|
11478
11503
|
|
@@ -11817,7 +11842,7 @@ function $RootScopeProvider(){
|
|
11817
11842
|
|
11818
11843
|
// `break traverseScopesLoop;` takes us to here
|
11819
11844
|
|
11820
|
-
if(dirty && !(ttl--)) {
|
11845
|
+
if((dirty || asyncQueue.length) && !(ttl--)) {
|
11821
11846
|
clearPhase();
|
11822
11847
|
throw $rootScopeMinErr('infdig',
|
11823
11848
|
'{0} $digest() iterations reached. Aborting!\n' +
|
@@ -12668,7 +12693,7 @@ function $SceDelegateProvider() {
|
|
12668
12693
|
*
|
12669
12694
|
* @param {*} value The result of a prior {@link ng.$sceDelegate#methods_trustAs `$sceDelegate.trustAs`}
|
12670
12695
|
* call or anything else.
|
12671
|
-
* @returns {*} The value
|
12696
|
+
* @returns {*} The `value` that was originally provided to {@link ng.$sceDelegate#methods_trustAs
|
12672
12697
|
* `$sceDelegate.trustAs`} if `value` is the result of such a call. Otherwise, returns
|
12673
12698
|
* `value` unchanged.
|
12674
12699
|
*/
|
@@ -13895,8 +13920,8 @@ function $FilterProvider($provide) {
|
|
13895
13920
|
*
|
13896
13921
|
* Can be one of:
|
13897
13922
|
*
|
13898
|
-
* - `string`:
|
13899
|
-
*
|
13923
|
+
* - `string`: The string is evaluated as an expression and the resulting value is used for substring match against
|
13924
|
+
* the contents of the `array`. All strings or objects with string properties in `array` that contain this string
|
13900
13925
|
* will be returned. The predicate can be negated by prefixing the string with `!`.
|
13901
13926
|
*
|
13902
13927
|
* - `Object`: A pattern object can be used to filter specific properties on objects contained
|
@@ -14054,23 +14079,12 @@ function filterFilter() {
|
|
14054
14079
|
case "object":
|
14055
14080
|
// jshint +W086
|
14056
14081
|
for (var key in expression) {
|
14057
|
-
|
14058
|
-
(
|
14059
|
-
|
14060
|
-
|
14061
|
-
|
14062
|
-
|
14063
|
-
});
|
14064
|
-
})();
|
14065
|
-
} else {
|
14066
|
-
(function() {
|
14067
|
-
if (typeof(expression[key]) == 'undefined') { return; }
|
14068
|
-
var path = key;
|
14069
|
-
predicates.push(function(value) {
|
14070
|
-
return search(getter(value,path), expression[path]);
|
14071
|
-
});
|
14072
|
-
})();
|
14073
|
-
}
|
14082
|
+
(function(path) {
|
14083
|
+
if (typeof expression[path] == 'undefined') return;
|
14084
|
+
predicates.push(function(value) {
|
14085
|
+
return search(path == '$' ? value : getter(value, path), expression[path]);
|
14086
|
+
});
|
14087
|
+
})(key);
|
14074
14088
|
}
|
14075
14089
|
break;
|
14076
14090
|
case 'function':
|
@@ -15191,12 +15205,10 @@ forEach(BOOLEAN_ATTR, function(propName, attrName) {
|
|
15191
15205
|
ngAttributeAliasDirectives[normalized] = function() {
|
15192
15206
|
return {
|
15193
15207
|
priority: 100,
|
15194
|
-
|
15195
|
-
|
15196
|
-
|
15197
|
-
|
15198
|
-
});
|
15199
|
-
};
|
15208
|
+
link: function(scope, element, attr) {
|
15209
|
+
scope.$watch(attr[normalized], function ngBooleanAttrWatchAction(value) {
|
15210
|
+
attr.$set(attrName, !!value);
|
15211
|
+
});
|
15200
15212
|
}
|
15201
15213
|
};
|
15202
15214
|
};
|
@@ -15476,10 +15488,10 @@ function FormController(element, attrs) {
|
|
15476
15488
|
*
|
15477
15489
|
*
|
15478
15490
|
* # CSS classes
|
15479
|
-
* - `ng-valid`
|
15480
|
-
* - `ng-invalid`
|
15481
|
-
* - `ng-pristine`
|
15482
|
-
* - `ng-dirty`
|
15491
|
+
* - `ng-valid` is set if the form is valid.
|
15492
|
+
* - `ng-invalid` is set if the form is invalid.
|
15493
|
+
* - `ng-pristine` is set if the form is pristine.
|
15494
|
+
* - `ng-dirty` is set if the form is dirty.
|
15483
15495
|
*
|
15484
15496
|
*
|
15485
15497
|
* # Submitting a form and preventing the default action
|
@@ -15996,6 +16008,12 @@ var inputType = {
|
|
15996
16008
|
'reset': noop
|
15997
16009
|
};
|
15998
16010
|
|
16011
|
+
// A helper function to call $setValidity and return the value / undefined,
|
16012
|
+
// a pattern that is repeated a lot in the input validation logic.
|
16013
|
+
function validate(ctrl, validatorName, validity, value){
|
16014
|
+
ctrl.$setValidity(validatorName, validity);
|
16015
|
+
return validity ? value : undefined;
|
16016
|
+
}
|
15999
16017
|
|
16000
16018
|
function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
|
16001
16019
|
// In composition mode, users are still inputing intermediate text buffer,
|
@@ -16080,22 +16098,15 @@ function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
|
|
16080
16098
|
patternValidator,
|
16081
16099
|
match;
|
16082
16100
|
|
16083
|
-
var validate = function(regexp, value) {
|
16084
|
-
if (ctrl.$isEmpty(value) || regexp.test(value)) {
|
16085
|
-
ctrl.$setValidity('pattern', true);
|
16086
|
-
return value;
|
16087
|
-
} else {
|
16088
|
-
ctrl.$setValidity('pattern', false);
|
16089
|
-
return undefined;
|
16090
|
-
}
|
16091
|
-
};
|
16092
|
-
|
16093
16101
|
if (pattern) {
|
16102
|
+
var validateRegex = function(regexp, value) {
|
16103
|
+
return validate(ctrl, 'pattern', ctrl.$isEmpty(value) || regexp.test(value), value);
|
16104
|
+
};
|
16094
16105
|
match = pattern.match(/^\/(.*)\/([gim]*)$/);
|
16095
16106
|
if (match) {
|
16096
16107
|
pattern = new RegExp(match[1], match[2]);
|
16097
16108
|
patternValidator = function(value) {
|
16098
|
-
return
|
16109
|
+
return validateRegex(pattern, value);
|
16099
16110
|
};
|
16100
16111
|
} else {
|
16101
16112
|
patternValidator = function(value) {
|
@@ -16106,7 +16117,7 @@ function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
|
|
16106
16117
|
'Expected {0} to be a RegExp but was {1}. Element: {2}', pattern,
|
16107
16118
|
patternObj, startingTag(element));
|
16108
16119
|
}
|
16109
|
-
return
|
16120
|
+
return validateRegex(patternObj, value);
|
16110
16121
|
};
|
16111
16122
|
}
|
16112
16123
|
|
@@ -16118,13 +16129,7 @@ function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
|
|
16118
16129
|
if (attr.ngMinlength) {
|
16119
16130
|
var minlength = int(attr.ngMinlength);
|
16120
16131
|
var minLengthValidator = function(value) {
|
16121
|
-
|
16122
|
-
ctrl.$setValidity('minlength', false);
|
16123
|
-
return undefined;
|
16124
|
-
} else {
|
16125
|
-
ctrl.$setValidity('minlength', true);
|
16126
|
-
return value;
|
16127
|
-
}
|
16132
|
+
return validate(ctrl, 'minlength', ctrl.$isEmpty(value) || value.length >= minlength, value);
|
16128
16133
|
};
|
16129
16134
|
|
16130
16135
|
ctrl.$parsers.push(minLengthValidator);
|
@@ -16135,13 +16140,7 @@ function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
|
|
16135
16140
|
if (attr.ngMaxlength) {
|
16136
16141
|
var maxlength = int(attr.ngMaxlength);
|
16137
16142
|
var maxLengthValidator = function(value) {
|
16138
|
-
|
16139
|
-
ctrl.$setValidity('maxlength', false);
|
16140
|
-
return undefined;
|
16141
|
-
} else {
|
16142
|
-
ctrl.$setValidity('maxlength', true);
|
16143
|
-
return value;
|
16144
|
-
}
|
16143
|
+
return validate(ctrl, 'maxlength', ctrl.$isEmpty(value) || value.length <= maxlength, value);
|
16145
16144
|
};
|
16146
16145
|
|
16147
16146
|
ctrl.$parsers.push(maxLengthValidator);
|
@@ -16170,13 +16169,7 @@ function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {
|
|
16170
16169
|
if (attr.min) {
|
16171
16170
|
var minValidator = function(value) {
|
16172
16171
|
var min = parseFloat(attr.min);
|
16173
|
-
|
16174
|
-
ctrl.$setValidity('min', false);
|
16175
|
-
return undefined;
|
16176
|
-
} else {
|
16177
|
-
ctrl.$setValidity('min', true);
|
16178
|
-
return value;
|
16179
|
-
}
|
16172
|
+
return validate(ctrl, 'min', ctrl.$isEmpty(value) || value >= min, value);
|
16180
16173
|
};
|
16181
16174
|
|
16182
16175
|
ctrl.$parsers.push(minValidator);
|
@@ -16186,13 +16179,7 @@ function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {
|
|
16186
16179
|
if (attr.max) {
|
16187
16180
|
var maxValidator = function(value) {
|
16188
16181
|
var max = parseFloat(attr.max);
|
16189
|
-
|
16190
|
-
ctrl.$setValidity('max', false);
|
16191
|
-
return undefined;
|
16192
|
-
} else {
|
16193
|
-
ctrl.$setValidity('max', true);
|
16194
|
-
return value;
|
16195
|
-
}
|
16182
|
+
return validate(ctrl, 'max', ctrl.$isEmpty(value) || value <= max, value);
|
16196
16183
|
};
|
16197
16184
|
|
16198
16185
|
ctrl.$parsers.push(maxValidator);
|
@@ -16200,14 +16187,7 @@ function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {
|
|
16200
16187
|
}
|
16201
16188
|
|
16202
16189
|
ctrl.$formatters.push(function(value) {
|
16203
|
-
|
16204
|
-
if (ctrl.$isEmpty(value) || isNumber(value)) {
|
16205
|
-
ctrl.$setValidity('number', true);
|
16206
|
-
return value;
|
16207
|
-
} else {
|
16208
|
-
ctrl.$setValidity('number', false);
|
16209
|
-
return undefined;
|
16210
|
-
}
|
16190
|
+
return validate(ctrl, 'number', ctrl.$isEmpty(value) || isNumber(value), value);
|
16211
16191
|
});
|
16212
16192
|
}
|
16213
16193
|
|
@@ -16215,13 +16195,7 @@ function urlInputType(scope, element, attr, ctrl, $sniffer, $browser) {
|
|
16215
16195
|
textInputType(scope, element, attr, ctrl, $sniffer, $browser);
|
16216
16196
|
|
16217
16197
|
var urlValidator = function(value) {
|
16218
|
-
|
16219
|
-
ctrl.$setValidity('url', true);
|
16220
|
-
return value;
|
16221
|
-
} else {
|
16222
|
-
ctrl.$setValidity('url', false);
|
16223
|
-
return undefined;
|
16224
|
-
}
|
16198
|
+
return validate(ctrl, 'url', ctrl.$isEmpty(value) || URL_REGEXP.test(value), value);
|
16225
16199
|
};
|
16226
16200
|
|
16227
16201
|
ctrl.$formatters.push(urlValidator);
|
@@ -16232,13 +16206,7 @@ function emailInputType(scope, element, attr, ctrl, $sniffer, $browser) {
|
|
16232
16206
|
textInputType(scope, element, attr, ctrl, $sniffer, $browser);
|
16233
16207
|
|
16234
16208
|
var emailValidator = function(value) {
|
16235
|
-
|
16236
|
-
ctrl.$setValidity('email', true);
|
16237
|
-
return value;
|
16238
|
-
} else {
|
16239
|
-
ctrl.$setValidity('email', false);
|
16240
|
-
return undefined;
|
16241
|
-
}
|
16209
|
+
return validate(ctrl, 'email', ctrl.$isEmpty(value) || EMAIL_REGEXP.test(value), value);
|
16242
16210
|
};
|
16243
16211
|
|
16244
16212
|
ctrl.$formatters.push(emailValidator);
|
@@ -17842,13 +17810,13 @@ var ngControllerDirective = [function() {
|
|
17842
17810
|
</button>
|
17843
17811
|
count: {{count}}
|
17844
17812
|
</doc:source>
|
17845
|
-
<doc:
|
17813
|
+
<doc:protractor>
|
17846
17814
|
it('should check ng-click', function() {
|
17847
|
-
expect(binding('count')).
|
17848
|
-
element('.doc-example-live
|
17849
|
-
expect(binding('count')).
|
17815
|
+
expect(element(by.binding('count')).getText()).toMatch('0');
|
17816
|
+
element(by.css('.doc-example-live button')).click();
|
17817
|
+
expect(element(by.binding('count')).getText()).toMatch('1');
|
17850
17818
|
});
|
17851
|
-
</doc:
|
17819
|
+
</doc:protractor>
|
17852
17820
|
</doc:example>
|
17853
17821
|
*/
|
17854
17822
|
/*
|
@@ -18927,6 +18895,8 @@ var ngPluralizeDirective = ['$locale', '$interpolate', function($locale, $interp
|
|
18927
18895
|
* | `$even` | {@type boolean} | true if the iterator position `$index` is even (otherwise false). |
|
18928
18896
|
* | `$odd` | {@type boolean} | true if the iterator position `$index` is odd (otherwise false). |
|
18929
18897
|
*
|
18898
|
+
* Creating aliases for these properties is possible with {@link api/ng.directive:ngInit `ngInit`}.
|
18899
|
+
* This may be useful when, for instance, nesting ngRepeats.
|
18930
18900
|
*
|
18931
18901
|
* # Special repeat start and end points
|
18932
18902
|
* To repeat a series of elements instead of just one parent element, ngRepeat (as well as other ng directives) supports extending
|
@@ -19809,11 +19779,9 @@ var ngSwitchWhenDirective = ngDirective({
|
|
19809
19779
|
transclude: 'element',
|
19810
19780
|
priority: 800,
|
19811
19781
|
require: '^ngSwitch',
|
19812
|
-
|
19813
|
-
|
19814
|
-
|
19815
|
-
ctrl.cases['!' + attrs.ngSwitchWhen].push({ transclude: $transclude, element: element });
|
19816
|
-
};
|
19782
|
+
link: function(scope, element, attrs, ctrl, $transclude) {
|
19783
|
+
ctrl.cases['!' + attrs.ngSwitchWhen] = (ctrl.cases['!' + attrs.ngSwitchWhen] || []);
|
19784
|
+
ctrl.cases['!' + attrs.ngSwitchWhen].push({ transclude: $transclude, element: element });
|
19817
19785
|
}
|
19818
19786
|
});
|
19819
19787
|
|
@@ -19908,10 +19876,14 @@ var ngTranscludeDirective = ngDirective({
|
|
19908
19876
|
* @restrict E
|
19909
19877
|
*
|
19910
19878
|
* @description
|
19911
|
-
* Load content of a script
|
19912
|
-
* template can be used by
|
19879
|
+
* Load the content of a `<script>` element into {@link api/ng.$templateCache `$templateCache`}, so that the
|
19880
|
+
* template can be used by {@link api/ng.directive:ngInclude `ngInclude`},
|
19881
|
+
* {@link api/ngRoute.directive:ngView `ngView`}, or {@link guide/directive directives}. The type of the
|
19882
|
+
* `<script>` element must be specified as `text/ng-template`, and a cache name for the template must be
|
19883
|
+
* assigned through the element's `id`, which can then be used as a directive's `templateUrl`.
|
19913
19884
|
*
|
19914
|
-
* @param {'text/ng-template'} type
|
19885
|
+
* @param {'text/ng-template'} type Must be set to `'text/ng-template'`.
|
19886
|
+
* @param {string} id Cache name of the template.
|
19915
19887
|
*
|
19916
19888
|
* @example
|
19917
19889
|
<doc:example>
|
@@ -20075,8 +20047,8 @@ var ngOptionsMinErr = minErr('ngOptions');
|
|
20075
20047
|
var ngOptionsDirective = valueFn({ terminal: true });
|
20076
20048
|
// jshint maxlen: false
|
20077
20049
|
var selectDirective = ['$compile', '$parse', function($compile, $parse) {
|
20078
|
-
//
|
20079
|
-
var NG_OPTIONS_REGEXP = /^\s*(
|
20050
|
+
//000011111111110000000000022222222220000000000000000000003333333333000000000000004444444444444440000000005555555555555550000000666666666666666000000000000000777777777700000000000000000008888888888
|
20051
|
+
var NG_OPTIONS_REGEXP = /^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/,
|
20080
20052
|
nullModelCtrl = {$setViewValue: noop};
|
20081
20053
|
// jshint maxlen: 100
|
20082
20054
|
|