angularjs-rails 1.2.7 → 1.2.9
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 +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
|
|