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
|
*/
|
@@ -95,7 +95,7 @@ function shallowClearAndCopy(src, dst) {
|
|
95
95
|
* when a param value needs to be obtained for a request (unless the param was overridden).
|
96
96
|
*
|
97
97
|
* Each key value in the parameter object is first bound to url template if present and then any
|
98
|
-
* excess keys are appended to the url
|
98
|
+
* excess keys are appended to the url search query after the `?`.
|
99
99
|
*
|
100
100
|
* Given a template `/path/:verb` and parameter `{verb:'greet', salutation:'Hello'}` results in
|
101
101
|
* URL `/path/greet?salutation=Hello`.
|
@@ -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
|
*/
|
@@ -669,6 +669,15 @@ ngRouteModule.directive('ngView', ngViewFillContentFactory);
|
|
669
669
|
*
|
670
670
|
* @scope
|
671
671
|
* @priority 400
|
672
|
+
* @param {string=} onload Expression to evaluate whenever the view updates.
|
673
|
+
*
|
674
|
+
* @param {string=} autoscroll Whether `ngView` should call {@link ng.$anchorScroll
|
675
|
+
* $anchorScroll} to scroll the viewport after the view is updated.
|
676
|
+
*
|
677
|
+
* - If the attribute is not set, disable scrolling.
|
678
|
+
* - If the attribute is set without value, enable scrolling.
|
679
|
+
* - Otherwise enable scrolling only if the `autoscroll` attribute value evaluated
|
680
|
+
* as an expression yields a truthy value.
|
672
681
|
* @example
|
673
682
|
<example module="ngViewExample" deps="angular-route.js" animations="true">
|
674
683
|
<file name="index.html">
|
@@ -9790,7 +9790,7 @@ if ( typeof module === "object" && module && typeof module.exports === "object"
|
|
9790
9790
|
})( window );
|
9791
9791
|
|
9792
9792
|
/**
|
9793
|
-
* @license AngularJS v1.2.
|
9793
|
+
* @license AngularJS v1.2.9
|
9794
9794
|
* (c) 2010-2014 Google, Inc. http://angularjs.org
|
9795
9795
|
* License: MIT
|
9796
9796
|
*/
|
@@ -9860,7 +9860,7 @@ function minErr(module) {
|
|
9860
9860
|
return match;
|
9861
9861
|
});
|
9862
9862
|
|
9863
|
-
message = message + '\nhttp://errors.angularjs.org/1.2.
|
9863
|
+
message = message + '\nhttp://errors.angularjs.org/1.2.9/' +
|
9864
9864
|
(module ? module + '/' : '') + code;
|
9865
9865
|
for (i = 2; i < arguments.length; i++) {
|
9866
9866
|
message = message + (i == 2 ? '?' : '&') + 'p' + (i-2) + '=' +
|
@@ -10063,7 +10063,8 @@ function isArrayLike(obj) {
|
|
10063
10063
|
* is the value of an object property or an array element and `key` is the object property key or
|
10064
10064
|
* array element index. Specifying a `context` for the function is optional.
|
10065
10065
|
*
|
10066
|
-
*
|
10066
|
+
* It is worth nothing that `.forEach` does not iterate over inherited properties because it filters
|
10067
|
+
* using the `hasOwnProperty` method.
|
10067
10068
|
*
|
10068
10069
|
<pre>
|
10069
10070
|
var values = {name: 'misko', gender: 'male'};
|
@@ -11625,11 +11626,11 @@ function setupModuleLoader(window) {
|
|
11625
11626
|
* - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat".
|
11626
11627
|
*/
|
11627
11628
|
var version = {
|
11628
|
-
full: '1.2.
|
11629
|
+
full: '1.2.9', // all of these placeholder strings will be replaced by grunt's
|
11629
11630
|
major: 1, // package task
|
11630
11631
|
minor: 2,
|
11631
|
-
dot:
|
11632
|
-
codeName: '
|
11632
|
+
dot: 9,
|
11633
|
+
codeName: 'enchanted-articulacy'
|
11633
11634
|
};
|
11634
11635
|
|
11635
11636
|
|
@@ -13191,7 +13192,7 @@ function annotate(fn) {
|
|
13191
13192
|
* constructor function that will be used to instantiate the service instance.
|
13192
13193
|
*
|
13193
13194
|
* You should use {@link AUTO.$provide#methods_service $provide.service(class)} if you define your service
|
13194
|
-
* as a type/class.
|
13195
|
+
* as a type/class.
|
13195
13196
|
*
|
13196
13197
|
* @param {string} name The name of the instance.
|
13197
13198
|
* @param {Function} constructor A class (constructor function) that will be instantiated.
|
@@ -13199,20 +13200,25 @@ function annotate(fn) {
|
|
13199
13200
|
*
|
13200
13201
|
* @example
|
13201
13202
|
* Here is an example of registering a service using
|
13202
|
-
* {@link AUTO.$provide#methods_service $provide.service(class)}
|
13203
|
+
* {@link AUTO.$provide#methods_service $provide.service(class)}.
|
13203
13204
|
* <pre>
|
13204
|
-
*
|
13205
|
-
*
|
13206
|
-
*
|
13207
|
-
*
|
13208
|
-
*
|
13209
|
-
*
|
13205
|
+
* $provide.service('ping', ['$http', function($http) {
|
13206
|
+
* var Ping = function() {
|
13207
|
+
* this.$http = $http;
|
13208
|
+
* };
|
13209
|
+
*
|
13210
|
+
* Ping.prototype.send = function() {
|
13211
|
+
* return this.$http.get('/ping');
|
13212
|
+
* };
|
13213
|
+
*
|
13214
|
+
* return Ping;
|
13215
|
+
* }]);
|
13210
13216
|
* </pre>
|
13211
13217
|
* You would then inject and use this service like this:
|
13212
13218
|
* <pre>
|
13213
|
-
* someModule.controller
|
13214
|
-
* ping.send()
|
13215
|
-
* ]
|
13219
|
+
* someModule.controller('Ctrl', ['ping', function(ping) {
|
13220
|
+
* ping.send();
|
13221
|
+
* }]);
|
13216
13222
|
* </pre>
|
13217
13223
|
*/
|
13218
13224
|
|
@@ -16440,7 +16446,7 @@ function directiveNormalize(name) {
|
|
16440
16446
|
*
|
16441
16447
|
*
|
16442
16448
|
* @param {string} name Normalized element attribute name of the property to modify. The name is
|
16443
|
-
*
|
16449
|
+
* reverse-translated using the {@link ng.$compile.directive.Attributes#$attr $attr}
|
16444
16450
|
* property to the original name.
|
16445
16451
|
* @param {string} value Value to set the attribute to. The value can be an interpolated string.
|
16446
16452
|
*/
|
@@ -16578,8 +16584,7 @@ function $ControllerProvider() {
|
|
16578
16584
|
* @requires $window
|
16579
16585
|
*
|
16580
16586
|
* @description
|
16581
|
-
* A {@link angular.element jQuery
|
16582
|
-
* element.
|
16587
|
+
* A {@link angular.element jQuery or jqLite} wrapper for the browser's `window.document` object.
|
16583
16588
|
*/
|
16584
16589
|
function $DocumentProvider(){
|
16585
16590
|
this.$get = ['$window', function(window){
|
@@ -16738,9 +16743,9 @@ function $HttpProvider() {
|
|
16738
16743
|
common: {
|
16739
16744
|
'Accept': 'application/json, text/plain, */*'
|
16740
16745
|
},
|
16741
|
-
post: CONTENT_TYPE_APPLICATION_JSON,
|
16742
|
-
put: CONTENT_TYPE_APPLICATION_JSON,
|
16743
|
-
patch: CONTENT_TYPE_APPLICATION_JSON
|
16746
|
+
post: copy(CONTENT_TYPE_APPLICATION_JSON),
|
16747
|
+
put: copy(CONTENT_TYPE_APPLICATION_JSON),
|
16748
|
+
patch: copy(CONTENT_TYPE_APPLICATION_JSON)
|
16744
16749
|
},
|
16745
16750
|
|
16746
16751
|
xsrfCookieName: 'XSRF-TOKEN',
|
@@ -16918,7 +16923,15 @@ function $HttpProvider() {
|
|
16918
16923
|
* `$httpProvider.defaults.headers.get = { 'My-Header' : 'value' }.
|
16919
16924
|
*
|
16920
16925
|
* The defaults can also be set at runtime via the `$http.defaults` object in the same
|
16921
|
-
* fashion.
|
16926
|
+
* fashion. For example:
|
16927
|
+
*
|
16928
|
+
* ```
|
16929
|
+
* module.run(function($http) {
|
16930
|
+
* $http.defaults.headers.common.Authentication = 'Basic YmVlcDpib29w'
|
16931
|
+
* });
|
16932
|
+
* ```
|
16933
|
+
*
|
16934
|
+
* In addition, you can supply a `headers` property in the config object passed when
|
16922
16935
|
* calling `$http(config)`, which overrides the defaults without changing them globally.
|
16923
16936
|
*
|
16924
16937
|
*
|
@@ -16942,7 +16955,9 @@ function $HttpProvider() {
|
|
16942
16955
|
* properties. These properties are by default an array of transform functions, which allows you
|
16943
16956
|
* to `push` or `unshift` a new transformation function into the transformation chain. You can
|
16944
16957
|
* also decide to completely override any default transformations by assigning your
|
16945
|
-
* transformation functions to these properties directly without the array wrapper.
|
16958
|
+
* transformation functions to these properties directly without the array wrapper. These defaults
|
16959
|
+
* are again available on the $http factory at run-time, which may be useful if you have run-time
|
16960
|
+
* services you wish to be involved in your transformations.
|
16946
16961
|
*
|
16947
16962
|
* Similarly, to locally override the request/response transforms, augment the
|
16948
16963
|
* `transformRequest` and/or `transformResponse` properties of the configuration object passed
|
@@ -17156,7 +17171,8 @@ function $HttpProvider() {
|
|
17156
17171
|
* for added security.
|
17157
17172
|
*
|
17158
17173
|
* The name of the headers can be specified using the xsrfHeaderName and xsrfCookieName
|
17159
|
-
* properties of either $httpProvider.defaults,
|
17174
|
+
* properties of either $httpProvider.defaults at config-time, $http.defaults at run-time,
|
17175
|
+
* or the per-request config object.
|
17160
17176
|
*
|
17161
17177
|
*
|
17162
17178
|
* @param {object} config Object describing the request to be made and how it should be
|
@@ -17719,7 +17735,7 @@ function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDoc
|
|
17719
17735
|
} else {
|
17720
17736
|
completeRequest(callback, status || -2);
|
17721
17737
|
}
|
17722
|
-
|
17738
|
+
callbacks[callbackId] = angular.noop;
|
17723
17739
|
});
|
17724
17740
|
} else {
|
17725
17741
|
|
@@ -17736,7 +17752,7 @@ function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDoc
|
|
17736
17752
|
// response is in the cache. the promise api will ensure that to the app code the api is
|
17737
17753
|
// always async
|
17738
17754
|
xhr.onreadystatechange = function() {
|
17739
|
-
// onreadystatechange might
|
17755
|
+
// onreadystatechange might get called multiple times with readyState === 4 on mobile webkit caused by
|
17740
17756
|
// xhrs that are resolved while the app is in the background (see #5426).
|
17741
17757
|
// since calling completeRequest sets the `xhr` variable to null, we just check if it's not null before
|
17742
17758
|
// continuing
|
@@ -17749,11 +17765,12 @@ function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDoc
|
|
17749
17765
|
|
17750
17766
|
if(status !== ABORTED) {
|
17751
17767
|
responseHeaders = xhr.getAllResponseHeaders();
|
17752
|
-
|
17768
|
+
|
17769
|
+
// responseText is the old-school way of retrieving response (supported by IE8 & 9)
|
17770
|
+
// response/responseType properties were introduced in XHR Level2 spec (supported by IE10)
|
17771
|
+
response = ('response' in xhr) ? xhr.response : xhr.responseText;
|
17753
17772
|
}
|
17754
17773
|
|
17755
|
-
// responseText is the old-school way of retrieving response (supported by IE8 & 9)
|
17756
|
-
// response/responseType properties were introduced in XHR Level2 spec (supported by IE10)
|
17757
17774
|
completeRequest(callback,
|
17758
17775
|
status || xhr.status,
|
17759
17776
|
response,
|
@@ -17786,14 +17803,14 @@ function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDoc
|
|
17786
17803
|
}
|
17787
17804
|
|
17788
17805
|
function completeRequest(callback, status, response, headersString) {
|
17789
|
-
var protocol = urlResolve(url).protocol;
|
17790
|
-
|
17791
17806
|
// cancel timeout and subsequent timeout promise resolution
|
17792
17807
|
timeoutId && $browserDefer.cancel(timeoutId);
|
17793
17808
|
jsonpDone = xhr = null;
|
17794
17809
|
|
17795
|
-
// fix status code
|
17796
|
-
|
17810
|
+
// fix status code when it is 0 (0 status is undocumented).
|
17811
|
+
// Occurs when accessing file resources.
|
17812
|
+
// On Android 4.1 stock browser it occurs while retrieving files from application cache.
|
17813
|
+
status = (status === 0) ? (response ? 200 : 404) : status;
|
17797
17814
|
|
17798
17815
|
// normalize IE bug (http://bugs.jquery.com/ticket/1450)
|
17799
17816
|
status = status == 1223 ? 204 : status;
|
@@ -18907,7 +18924,7 @@ function $LocationProvider(){
|
|
18907
18924
|
* Broadcasted before a URL will change. This change can be prevented by calling
|
18908
18925
|
* `preventDefault` method of the event. See {@link ng.$rootScope.Scope#$on} for more
|
18909
18926
|
* details about event object. Upon successful change
|
18910
|
-
* {@link ng.$location
|
18927
|
+
* {@link ng.$location#events_$locationChangeSuccess $locationChangeSuccess} is fired.
|
18911
18928
|
*
|
18912
18929
|
* @param {Object} angularEvent Synthetic event object.
|
18913
18930
|
* @param {string} newUrl New URL
|
@@ -20098,16 +20115,20 @@ function cspSafeGetterFn(key0, key1, key2, key3, key4, fullExp, options) {
|
|
20098
20115
|
if (pathVal == null) return pathVal;
|
20099
20116
|
pathVal = pathVal[key0];
|
20100
20117
|
|
20101
|
-
if (
|
20118
|
+
if (!key1) return pathVal;
|
20119
|
+
if (pathVal == null) return undefined;
|
20102
20120
|
pathVal = pathVal[key1];
|
20103
20121
|
|
20104
|
-
if (
|
20122
|
+
if (!key2) return pathVal;
|
20123
|
+
if (pathVal == null) return undefined;
|
20105
20124
|
pathVal = pathVal[key2];
|
20106
20125
|
|
20107
|
-
if (
|
20126
|
+
if (!key3) return pathVal;
|
20127
|
+
if (pathVal == null) return undefined;
|
20108
20128
|
pathVal = pathVal[key3];
|
20109
20129
|
|
20110
|
-
if (
|
20130
|
+
if (!key4) return pathVal;
|
20131
|
+
if (pathVal == null) return undefined;
|
20111
20132
|
pathVal = pathVal[key4];
|
20112
20133
|
|
20113
20134
|
return pathVal;
|
@@ -20128,8 +20149,9 @@ function cspSafeGetterFn(key0, key1, key2, key3, key4, fullExp, options) {
|
|
20128
20149
|
}
|
20129
20150
|
pathVal = pathVal.$$v;
|
20130
20151
|
}
|
20131
|
-
if (pathVal == null) return key1 ? undefined : pathVal;
|
20132
20152
|
|
20153
|
+
if (!key1) return pathVal;
|
20154
|
+
if (pathVal == null) return undefined;
|
20133
20155
|
pathVal = pathVal[key1];
|
20134
20156
|
if (pathVal && pathVal.then) {
|
20135
20157
|
promiseWarning(fullExp);
|
@@ -20140,8 +20162,9 @@ function cspSafeGetterFn(key0, key1, key2, key3, key4, fullExp, options) {
|
|
20140
20162
|
}
|
20141
20163
|
pathVal = pathVal.$$v;
|
20142
20164
|
}
|
20143
|
-
if (pathVal == null) return key2 ? undefined : pathVal;
|
20144
20165
|
|
20166
|
+
if (!key2) return pathVal;
|
20167
|
+
if (pathVal == null) return undefined;
|
20145
20168
|
pathVal = pathVal[key2];
|
20146
20169
|
if (pathVal && pathVal.then) {
|
20147
20170
|
promiseWarning(fullExp);
|
@@ -20152,8 +20175,9 @@ function cspSafeGetterFn(key0, key1, key2, key3, key4, fullExp, options) {
|
|
20152
20175
|
}
|
20153
20176
|
pathVal = pathVal.$$v;
|
20154
20177
|
}
|
20155
|
-
if (pathVal == null) return key3 ? undefined : pathVal;
|
20156
20178
|
|
20179
|
+
if (!key3) return pathVal;
|
20180
|
+
if (pathVal == null) return undefined;
|
20157
20181
|
pathVal = pathVal[key3];
|
20158
20182
|
if (pathVal && pathVal.then) {
|
20159
20183
|
promiseWarning(fullExp);
|
@@ -20164,8 +20188,9 @@ function cspSafeGetterFn(key0, key1, key2, key3, key4, fullExp, options) {
|
|
20164
20188
|
}
|
20165
20189
|
pathVal = pathVal.$$v;
|
20166
20190
|
}
|
20167
|
-
if (pathVal == null) return key4 ? undefined : pathVal;
|
20168
20191
|
|
20192
|
+
if (!key4) return pathVal;
|
20193
|
+
if (pathVal == null) return undefined;
|
20169
20194
|
pathVal = pathVal[key4];
|
20170
20195
|
if (pathVal && pathVal.then) {
|
20171
20196
|
promiseWarning(fullExp);
|
@@ -21163,7 +21188,7 @@ function $RootScopeProvider(){
|
|
21163
21188
|
} else {
|
21164
21189
|
ChildScope = function() {}; // should be anonymous; This is so that when the minifier munges
|
21165
21190
|
// the name it does not become random set of chars. This will then show up as class
|
21166
|
-
// name in the
|
21191
|
+
// name in the web inspector.
|
21167
21192
|
ChildScope.prototype = this;
|
21168
21193
|
child = new ChildScope();
|
21169
21194
|
child.$id = nextUid();
|
@@ -21264,7 +21289,7 @@ function $RootScopeProvider(){
|
|
21264
21289
|
// No digest has been run so the counter will be zero
|
21265
21290
|
expect(scope.foodCounter).toEqual(0);
|
21266
21291
|
|
21267
|
-
// Run the digest but since food has not changed
|
21292
|
+
// Run the digest but since food has not changed count will still be zero
|
21268
21293
|
scope.$digest();
|
21269
21294
|
expect(scope.foodCounter).toEqual(0);
|
21270
21295
|
|
@@ -21609,7 +21634,7 @@ function $RootScopeProvider(){
|
|
21609
21634
|
|
21610
21635
|
// `break traverseScopesLoop;` takes us to here
|
21611
21636
|
|
21612
|
-
if(dirty && !(ttl--)) {
|
21637
|
+
if((dirty || asyncQueue.length) && !(ttl--)) {
|
21613
21638
|
clearPhase();
|
21614
21639
|
throw $rootScopeMinErr('infdig',
|
21615
21640
|
'{0} $digest() iterations reached. Aborting!\n' +
|
@@ -22460,7 +22485,7 @@ function $SceDelegateProvider() {
|
|
22460
22485
|
*
|
22461
22486
|
* @param {*} value The result of a prior {@link ng.$sceDelegate#methods_trustAs `$sceDelegate.trustAs`}
|
22462
22487
|
* call or anything else.
|
22463
|
-
* @returns {*} The value
|
22488
|
+
* @returns {*} The `value` that was originally provided to {@link ng.$sceDelegate#methods_trustAs
|
22464
22489
|
* `$sceDelegate.trustAs`} if `value` is the result of such a call. Otherwise, returns
|
22465
22490
|
* `value` unchanged.
|
22466
22491
|
*/
|
@@ -23687,8 +23712,8 @@ function $FilterProvider($provide) {
|
|
23687
23712
|
*
|
23688
23713
|
* Can be one of:
|
23689
23714
|
*
|
23690
|
-
* - `string`:
|
23691
|
-
*
|
23715
|
+
* - `string`: The string is evaluated as an expression and the resulting value is used for substring match against
|
23716
|
+
* the contents of the `array`. All strings or objects with string properties in `array` that contain this string
|
23692
23717
|
* will be returned. The predicate can be negated by prefixing the string with `!`.
|
23693
23718
|
*
|
23694
23719
|
* - `Object`: A pattern object can be used to filter specific properties on objects contained
|
@@ -23846,23 +23871,12 @@ function filterFilter() {
|
|
23846
23871
|
case "object":
|
23847
23872
|
// jshint +W086
|
23848
23873
|
for (var key in expression) {
|
23849
|
-
|
23850
|
-
(
|
23851
|
-
|
23852
|
-
|
23853
|
-
|
23854
|
-
|
23855
|
-
});
|
23856
|
-
})();
|
23857
|
-
} else {
|
23858
|
-
(function() {
|
23859
|
-
if (typeof(expression[key]) == 'undefined') { return; }
|
23860
|
-
var path = key;
|
23861
|
-
predicates.push(function(value) {
|
23862
|
-
return search(getter(value,path), expression[path]);
|
23863
|
-
});
|
23864
|
-
})();
|
23865
|
-
}
|
23874
|
+
(function(path) {
|
23875
|
+
if (typeof expression[path] == 'undefined') return;
|
23876
|
+
predicates.push(function(value) {
|
23877
|
+
return search(path == '$' ? value : getter(value, path), expression[path]);
|
23878
|
+
});
|
23879
|
+
})(key);
|
23866
23880
|
}
|
23867
23881
|
break;
|
23868
23882
|
case 'function':
|
@@ -24983,12 +24997,10 @@ forEach(BOOLEAN_ATTR, function(propName, attrName) {
|
|
24983
24997
|
ngAttributeAliasDirectives[normalized] = function() {
|
24984
24998
|
return {
|
24985
24999
|
priority: 100,
|
24986
|
-
|
24987
|
-
|
24988
|
-
|
24989
|
-
|
24990
|
-
});
|
24991
|
-
};
|
25000
|
+
link: function(scope, element, attr) {
|
25001
|
+
scope.$watch(attr[normalized], function ngBooleanAttrWatchAction(value) {
|
25002
|
+
attr.$set(attrName, !!value);
|
25003
|
+
});
|
24992
25004
|
}
|
24993
25005
|
};
|
24994
25006
|
};
|
@@ -25268,10 +25280,10 @@ function FormController(element, attrs) {
|
|
25268
25280
|
*
|
25269
25281
|
*
|
25270
25282
|
* # CSS classes
|
25271
|
-
* - `ng-valid`
|
25272
|
-
* - `ng-invalid`
|
25273
|
-
* - `ng-pristine`
|
25274
|
-
* - `ng-dirty`
|
25283
|
+
* - `ng-valid` is set if the form is valid.
|
25284
|
+
* - `ng-invalid` is set if the form is invalid.
|
25285
|
+
* - `ng-pristine` is set if the form is pristine.
|
25286
|
+
* - `ng-dirty` is set if the form is dirty.
|
25275
25287
|
*
|
25276
25288
|
*
|
25277
25289
|
* # Submitting a form and preventing the default action
|
@@ -25788,6 +25800,12 @@ var inputType = {
|
|
25788
25800
|
'reset': noop
|
25789
25801
|
};
|
25790
25802
|
|
25803
|
+
// A helper function to call $setValidity and return the value / undefined,
|
25804
|
+
// a pattern that is repeated a lot in the input validation logic.
|
25805
|
+
function validate(ctrl, validatorName, validity, value){
|
25806
|
+
ctrl.$setValidity(validatorName, validity);
|
25807
|
+
return validity ? value : undefined;
|
25808
|
+
}
|
25791
25809
|
|
25792
25810
|
function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
|
25793
25811
|
// In composition mode, users are still inputing intermediate text buffer,
|
@@ -25872,22 +25890,15 @@ function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
|
|
25872
25890
|
patternValidator,
|
25873
25891
|
match;
|
25874
25892
|
|
25875
|
-
var validate = function(regexp, value) {
|
25876
|
-
if (ctrl.$isEmpty(value) || regexp.test(value)) {
|
25877
|
-
ctrl.$setValidity('pattern', true);
|
25878
|
-
return value;
|
25879
|
-
} else {
|
25880
|
-
ctrl.$setValidity('pattern', false);
|
25881
|
-
return undefined;
|
25882
|
-
}
|
25883
|
-
};
|
25884
|
-
|
25885
25893
|
if (pattern) {
|
25894
|
+
var validateRegex = function(regexp, value) {
|
25895
|
+
return validate(ctrl, 'pattern', ctrl.$isEmpty(value) || regexp.test(value), value);
|
25896
|
+
};
|
25886
25897
|
match = pattern.match(/^\/(.*)\/([gim]*)$/);
|
25887
25898
|
if (match) {
|
25888
25899
|
pattern = new RegExp(match[1], match[2]);
|
25889
25900
|
patternValidator = function(value) {
|
25890
|
-
return
|
25901
|
+
return validateRegex(pattern, value);
|
25891
25902
|
};
|
25892
25903
|
} else {
|
25893
25904
|
patternValidator = function(value) {
|
@@ -25898,7 +25909,7 @@ function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
|
|
25898
25909
|
'Expected {0} to be a RegExp but was {1}. Element: {2}', pattern,
|
25899
25910
|
patternObj, startingTag(element));
|
25900
25911
|
}
|
25901
|
-
return
|
25912
|
+
return validateRegex(patternObj, value);
|
25902
25913
|
};
|
25903
25914
|
}
|
25904
25915
|
|
@@ -25910,13 +25921,7 @@ function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
|
|
25910
25921
|
if (attr.ngMinlength) {
|
25911
25922
|
var minlength = int(attr.ngMinlength);
|
25912
25923
|
var minLengthValidator = function(value) {
|
25913
|
-
|
25914
|
-
ctrl.$setValidity('minlength', false);
|
25915
|
-
return undefined;
|
25916
|
-
} else {
|
25917
|
-
ctrl.$setValidity('minlength', true);
|
25918
|
-
return value;
|
25919
|
-
}
|
25924
|
+
return validate(ctrl, 'minlength', ctrl.$isEmpty(value) || value.length >= minlength, value);
|
25920
25925
|
};
|
25921
25926
|
|
25922
25927
|
ctrl.$parsers.push(minLengthValidator);
|
@@ -25927,13 +25932,7 @@ function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
|
|
25927
25932
|
if (attr.ngMaxlength) {
|
25928
25933
|
var maxlength = int(attr.ngMaxlength);
|
25929
25934
|
var maxLengthValidator = function(value) {
|
25930
|
-
|
25931
|
-
ctrl.$setValidity('maxlength', false);
|
25932
|
-
return undefined;
|
25933
|
-
} else {
|
25934
|
-
ctrl.$setValidity('maxlength', true);
|
25935
|
-
return value;
|
25936
|
-
}
|
25935
|
+
return validate(ctrl, 'maxlength', ctrl.$isEmpty(value) || value.length <= maxlength, value);
|
25937
25936
|
};
|
25938
25937
|
|
25939
25938
|
ctrl.$parsers.push(maxLengthValidator);
|
@@ -25962,13 +25961,7 @@ function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {
|
|
25962
25961
|
if (attr.min) {
|
25963
25962
|
var minValidator = function(value) {
|
25964
25963
|
var min = parseFloat(attr.min);
|
25965
|
-
|
25966
|
-
ctrl.$setValidity('min', false);
|
25967
|
-
return undefined;
|
25968
|
-
} else {
|
25969
|
-
ctrl.$setValidity('min', true);
|
25970
|
-
return value;
|
25971
|
-
}
|
25964
|
+
return validate(ctrl, 'min', ctrl.$isEmpty(value) || value >= min, value);
|
25972
25965
|
};
|
25973
25966
|
|
25974
25967
|
ctrl.$parsers.push(minValidator);
|
@@ -25978,13 +25971,7 @@ function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {
|
|
25978
25971
|
if (attr.max) {
|
25979
25972
|
var maxValidator = function(value) {
|
25980
25973
|
var max = parseFloat(attr.max);
|
25981
|
-
|
25982
|
-
ctrl.$setValidity('max', false);
|
25983
|
-
return undefined;
|
25984
|
-
} else {
|
25985
|
-
ctrl.$setValidity('max', true);
|
25986
|
-
return value;
|
25987
|
-
}
|
25974
|
+
return validate(ctrl, 'max', ctrl.$isEmpty(value) || value <= max, value);
|
25988
25975
|
};
|
25989
25976
|
|
25990
25977
|
ctrl.$parsers.push(maxValidator);
|
@@ -25992,14 +25979,7 @@ function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {
|
|
25992
25979
|
}
|
25993
25980
|
|
25994
25981
|
ctrl.$formatters.push(function(value) {
|
25995
|
-
|
25996
|
-
if (ctrl.$isEmpty(value) || isNumber(value)) {
|
25997
|
-
ctrl.$setValidity('number', true);
|
25998
|
-
return value;
|
25999
|
-
} else {
|
26000
|
-
ctrl.$setValidity('number', false);
|
26001
|
-
return undefined;
|
26002
|
-
}
|
25982
|
+
return validate(ctrl, 'number', ctrl.$isEmpty(value) || isNumber(value), value);
|
26003
25983
|
});
|
26004
25984
|
}
|
26005
25985
|
|
@@ -26007,13 +25987,7 @@ function urlInputType(scope, element, attr, ctrl, $sniffer, $browser) {
|
|
26007
25987
|
textInputType(scope, element, attr, ctrl, $sniffer, $browser);
|
26008
25988
|
|
26009
25989
|
var urlValidator = function(value) {
|
26010
|
-
|
26011
|
-
ctrl.$setValidity('url', true);
|
26012
|
-
return value;
|
26013
|
-
} else {
|
26014
|
-
ctrl.$setValidity('url', false);
|
26015
|
-
return undefined;
|
26016
|
-
}
|
25990
|
+
return validate(ctrl, 'url', ctrl.$isEmpty(value) || URL_REGEXP.test(value), value);
|
26017
25991
|
};
|
26018
25992
|
|
26019
25993
|
ctrl.$formatters.push(urlValidator);
|
@@ -26024,13 +25998,7 @@ function emailInputType(scope, element, attr, ctrl, $sniffer, $browser) {
|
|
26024
25998
|
textInputType(scope, element, attr, ctrl, $sniffer, $browser);
|
26025
25999
|
|
26026
26000
|
var emailValidator = function(value) {
|
26027
|
-
|
26028
|
-
ctrl.$setValidity('email', true);
|
26029
|
-
return value;
|
26030
|
-
} else {
|
26031
|
-
ctrl.$setValidity('email', false);
|
26032
|
-
return undefined;
|
26033
|
-
}
|
26001
|
+
return validate(ctrl, 'email', ctrl.$isEmpty(value) || EMAIL_REGEXP.test(value), value);
|
26034
26002
|
};
|
26035
26003
|
|
26036
26004
|
ctrl.$formatters.push(emailValidator);
|
@@ -27634,13 +27602,13 @@ var ngControllerDirective = [function() {
|
|
27634
27602
|
</button>
|
27635
27603
|
count: {{count}}
|
27636
27604
|
</doc:source>
|
27637
|
-
<doc:
|
27605
|
+
<doc:protractor>
|
27638
27606
|
it('should check ng-click', function() {
|
27639
|
-
expect(binding('count')).
|
27640
|
-
element('.doc-example-live
|
27641
|
-
expect(binding('count')).
|
27607
|
+
expect(element(by.binding('count')).getText()).toMatch('0');
|
27608
|
+
element(by.css('.doc-example-live button')).click();
|
27609
|
+
expect(element(by.binding('count')).getText()).toMatch('1');
|
27642
27610
|
});
|
27643
|
-
</doc:
|
27611
|
+
</doc:protractor>
|
27644
27612
|
</doc:example>
|
27645
27613
|
*/
|
27646
27614
|
/*
|
@@ -28719,6 +28687,8 @@ var ngPluralizeDirective = ['$locale', '$interpolate', function($locale, $interp
|
|
28719
28687
|
* | `$even` | {@type boolean} | true if the iterator position `$index` is even (otherwise false). |
|
28720
28688
|
* | `$odd` | {@type boolean} | true if the iterator position `$index` is odd (otherwise false). |
|
28721
28689
|
*
|
28690
|
+
* Creating aliases for these properties is possible with {@link api/ng.directive:ngInit `ngInit`}.
|
28691
|
+
* This may be useful when, for instance, nesting ngRepeats.
|
28722
28692
|
*
|
28723
28693
|
* # Special repeat start and end points
|
28724
28694
|
* To repeat a series of elements instead of just one parent element, ngRepeat (as well as other ng directives) supports extending
|
@@ -29601,11 +29571,9 @@ var ngSwitchWhenDirective = ngDirective({
|
|
29601
29571
|
transclude: 'element',
|
29602
29572
|
priority: 800,
|
29603
29573
|
require: '^ngSwitch',
|
29604
|
-
|
29605
|
-
|
29606
|
-
|
29607
|
-
ctrl.cases['!' + attrs.ngSwitchWhen].push({ transclude: $transclude, element: element });
|
29608
|
-
};
|
29574
|
+
link: function(scope, element, attrs, ctrl, $transclude) {
|
29575
|
+
ctrl.cases['!' + attrs.ngSwitchWhen] = (ctrl.cases['!' + attrs.ngSwitchWhen] || []);
|
29576
|
+
ctrl.cases['!' + attrs.ngSwitchWhen].push({ transclude: $transclude, element: element });
|
29609
29577
|
}
|
29610
29578
|
});
|
29611
29579
|
|
@@ -29700,10 +29668,14 @@ var ngTranscludeDirective = ngDirective({
|
|
29700
29668
|
* @restrict E
|
29701
29669
|
*
|
29702
29670
|
* @description
|
29703
|
-
* Load content of a script
|
29704
|
-
* template can be used by
|
29671
|
+
* Load the content of a `<script>` element into {@link api/ng.$templateCache `$templateCache`}, so that the
|
29672
|
+
* template can be used by {@link api/ng.directive:ngInclude `ngInclude`},
|
29673
|
+
* {@link api/ngRoute.directive:ngView `ngView`}, or {@link guide/directive directives}. The type of the
|
29674
|
+
* `<script>` element must be specified as `text/ng-template`, and a cache name for the template must be
|
29675
|
+
* assigned through the element's `id`, which can then be used as a directive's `templateUrl`.
|
29705
29676
|
*
|
29706
|
-
* @param {'text/ng-template'} type
|
29677
|
+
* @param {'text/ng-template'} type Must be set to `'text/ng-template'`.
|
29678
|
+
* @param {string} id Cache name of the template.
|
29707
29679
|
*
|
29708
29680
|
* @example
|
29709
29681
|
<doc:example>
|
@@ -29867,8 +29839,8 @@ var ngOptionsMinErr = minErr('ngOptions');
|
|
29867
29839
|
var ngOptionsDirective = valueFn({ terminal: true });
|
29868
29840
|
// jshint maxlen: false
|
29869
29841
|
var selectDirective = ['$compile', '$parse', function($compile, $parse) {
|
29870
|
-
//
|
29871
|
-
var NG_OPTIONS_REGEXP = /^\s*(
|
29842
|
+
//000011111111110000000000022222222220000000000000000000003333333333000000000000004444444444444440000000005555555555555550000000666666666666666000000000000000777777777700000000000000000008888888888
|
29843
|
+
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]+?))?$/,
|
29872
29844
|
nullModelCtrl = {$setViewValue: noop};
|
29873
29845
|
// jshint maxlen: 100
|
29874
29846
|
|