rails-angularjs 1.4.0.pre.rc.1 → 1.4.0.pre.rc.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/rails-angularjs/version.rb +1 -1
- data/vendor/assets/javascripts/angular-animate.js +247 -159
- data/vendor/assets/javascripts/angular-animate.min.js +45 -44
- data/vendor/assets/javascripts/angular-animate.min.js.map +3 -3
- data/vendor/assets/javascripts/angular-aria.js +1 -1
- data/vendor/assets/javascripts/angular-aria.min.js +1 -1
- data/vendor/assets/javascripts/angular-cookies.js +1 -1
- data/vendor/assets/javascripts/angular-cookies.min.js +1 -1
- data/vendor/assets/javascripts/angular-loader.js +2 -2
- data/vendor/assets/javascripts/angular-loader.min.js +2 -2
- data/vendor/assets/javascripts/angular-message-format.js +1 -1
- data/vendor/assets/javascripts/angular-message-format.min.js +1 -1
- data/vendor/assets/javascripts/angular-messages.js +1 -1
- data/vendor/assets/javascripts/angular-messages.min.js +1 -1
- data/vendor/assets/javascripts/angular-mocks.js +1 -1
- data/vendor/assets/javascripts/angular-resource.js +3 -3
- data/vendor/assets/javascripts/angular-resource.min.js +8 -8
- data/vendor/assets/javascripts/angular-resource.min.js.map +1 -1
- data/vendor/assets/javascripts/angular-route.js +1 -1
- data/vendor/assets/javascripts/angular-route.min.js +1 -1
- data/vendor/assets/javascripts/angular-sanitize.js +1 -1
- data/vendor/assets/javascripts/angular-sanitize.min.js +1 -1
- data/vendor/assets/javascripts/angular-scenario.js +316 -143
- data/vendor/assets/javascripts/angular-touch.js +12 -10
- data/vendor/assets/javascripts/angular-touch.min.js +8 -8
- data/vendor/assets/javascripts/angular-touch.min.js.map +2 -2
- data/vendor/assets/javascripts/angular.js +316 -143
- data/vendor/assets/javascripts/angular.min.js +267 -265
- data/vendor/assets/javascripts/angular.min.js.map +3 -3
- metadata +2 -3
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license AngularJS v1.4.0-rc.
|
2
|
+
* @license AngularJS v1.4.0-rc.2
|
3
3
|
* (c) 2010-2015 Google, Inc. http://angularjs.org
|
4
4
|
* License: MIT
|
5
5
|
*/
|
@@ -57,7 +57,7 @@ function minErr(module, ErrorConstructor) {
|
|
57
57
|
return match;
|
58
58
|
});
|
59
59
|
|
60
|
-
message += '\nhttp://errors.angularjs.org/1.4.0-rc.
|
60
|
+
message += '\nhttp://errors.angularjs.org/1.4.0-rc.2/' +
|
61
61
|
(module ? module + '/' : '') + code;
|
62
62
|
|
63
63
|
for (i = SKIP_INDEXES, paramPrefix = '?'; i < templateArgs.length; i++, paramPrefix = '&') {
|
@@ -105,6 +105,7 @@ function minErr(module, ErrorConstructor) {
|
|
105
105
|
isUndefined: true,
|
106
106
|
isDefined: true,
|
107
107
|
isObject: true,
|
108
|
+
isBlankObject: true,
|
108
109
|
isString: true,
|
109
110
|
isNumber: true,
|
110
111
|
isDate: true,
|
@@ -244,6 +245,7 @@ var
|
|
244
245
|
splice = [].splice,
|
245
246
|
push = [].push,
|
246
247
|
toString = Object.prototype.toString,
|
248
|
+
getPrototypeOf = Object.getPrototypeOf,
|
247
249
|
ngMinErr = minErr('ng'),
|
248
250
|
|
249
251
|
/** @name angular */
|
@@ -269,7 +271,9 @@ function isArrayLike(obj) {
|
|
269
271
|
return false;
|
270
272
|
}
|
271
273
|
|
272
|
-
|
274
|
+
// Support: iOS 8.2 (not reproducible in simulator)
|
275
|
+
// "length" in obj used to prevent JIT error (gh-11508)
|
276
|
+
var length = "length" in Object(obj) && obj.length;
|
273
277
|
|
274
278
|
if (obj.nodeType === NODE_TYPE_ELEMENT && length) {
|
275
279
|
return true;
|
@@ -334,12 +338,25 @@ function forEach(obj, iterator, context) {
|
|
334
338
|
}
|
335
339
|
} else if (obj.forEach && obj.forEach !== forEach) {
|
336
340
|
obj.forEach(iterator, context, obj);
|
337
|
-
} else {
|
341
|
+
} else if (isBlankObject(obj)) {
|
342
|
+
// createMap() fast path --- Safe to avoid hasOwnProperty check because prototype chain is empty
|
343
|
+
for (key in obj) {
|
344
|
+
iterator.call(context, obj[key], key, obj);
|
345
|
+
}
|
346
|
+
} else if (typeof obj.hasOwnProperty === 'function') {
|
347
|
+
// Slow path for objects inheriting Object.prototype, hasOwnProperty check needed
|
338
348
|
for (key in obj) {
|
339
349
|
if (obj.hasOwnProperty(key)) {
|
340
350
|
iterator.call(context, obj[key], key, obj);
|
341
351
|
}
|
342
352
|
}
|
353
|
+
} else {
|
354
|
+
// Slow path for objects which do not have a method `hasOwnProperty`
|
355
|
+
for (key in obj) {
|
356
|
+
if (hasOwnProperty.call(obj, key)) {
|
357
|
+
iterator.call(context, obj[key], key, obj);
|
358
|
+
}
|
359
|
+
}
|
343
360
|
}
|
344
361
|
}
|
345
362
|
return obj;
|
@@ -565,6 +582,16 @@ function isObject(value) {
|
|
565
582
|
}
|
566
583
|
|
567
584
|
|
585
|
+
/**
|
586
|
+
* Determine if a value is an object with a null prototype
|
587
|
+
*
|
588
|
+
* @returns {boolean} True if `value` is an `Object` with a null prototype
|
589
|
+
*/
|
590
|
+
function isBlankObject(value) {
|
591
|
+
return value !== null && typeof value === 'object' && !getPrototypeOf(value);
|
592
|
+
}
|
593
|
+
|
594
|
+
|
568
595
|
/**
|
569
596
|
* @ngdoc function
|
570
597
|
* @name angular.isString
|
@@ -848,7 +875,7 @@ function copy(source, destination, stackSource, stackDest) {
|
|
848
875
|
destination = new RegExp(source.source, source.toString().match(/[^\/]*$/)[0]);
|
849
876
|
destination.lastIndex = source.lastIndex;
|
850
877
|
} else if (isObject(source)) {
|
851
|
-
var emptyObject = Object.create(
|
878
|
+
var emptyObject = Object.create(getPrototypeOf(source));
|
852
879
|
destination = copy(source, emptyObject, stackSource, stackDest);
|
853
880
|
}
|
854
881
|
}
|
@@ -867,7 +894,7 @@ function copy(source, destination, stackSource, stackDest) {
|
|
867
894
|
stackDest.push(destination);
|
868
895
|
}
|
869
896
|
|
870
|
-
var result;
|
897
|
+
var result, key;
|
871
898
|
if (isArray(source)) {
|
872
899
|
destination.length = 0;
|
873
900
|
for (var i = 0; i < source.length; i++) {
|
@@ -887,21 +914,40 @@ function copy(source, destination, stackSource, stackDest) {
|
|
887
914
|
delete destination[key];
|
888
915
|
});
|
889
916
|
}
|
890
|
-
|
891
|
-
|
892
|
-
|
893
|
-
|
894
|
-
|
895
|
-
|
917
|
+
if (isBlankObject(source)) {
|
918
|
+
// createMap() fast path --- Safe to avoid hasOwnProperty check because prototype chain is empty
|
919
|
+
for (key in source) {
|
920
|
+
putValue(key, source[key], destination, stackSource, stackDest);
|
921
|
+
}
|
922
|
+
} else if (source && typeof source.hasOwnProperty === 'function') {
|
923
|
+
// Slow path, which must rely on hasOwnProperty
|
924
|
+
for (key in source) {
|
925
|
+
if (source.hasOwnProperty(key)) {
|
926
|
+
putValue(key, source[key], destination, stackSource, stackDest);
|
927
|
+
}
|
928
|
+
}
|
929
|
+
} else {
|
930
|
+
// Slowest path --- hasOwnProperty can't be called as a method
|
931
|
+
for (key in source) {
|
932
|
+
if (hasOwnProperty.call(source, key)) {
|
933
|
+
putValue(key, source[key], destination, stackSource, stackDest);
|
896
934
|
}
|
897
|
-
destination[key] = result;
|
898
935
|
}
|
899
936
|
}
|
900
937
|
setHashKey(destination,h);
|
901
938
|
}
|
902
|
-
|
903
939
|
}
|
904
940
|
return destination;
|
941
|
+
|
942
|
+
function putValue(key, val, destination, stackSource, stackDest) {
|
943
|
+
// No context allocation, trivial outer scope, easily inlined
|
944
|
+
var result = copy(val, null, stackSource, stackDest);
|
945
|
+
if (isObject(val)) {
|
946
|
+
stackSource.push(val);
|
947
|
+
stackDest.push(result);
|
948
|
+
}
|
949
|
+
destination[key] = result;
|
950
|
+
}
|
905
951
|
}
|
906
952
|
|
907
953
|
/**
|
@@ -982,14 +1028,14 @@ function equals(o1, o2) {
|
|
982
1028
|
} else {
|
983
1029
|
if (isScope(o1) || isScope(o2) || isWindow(o1) || isWindow(o2) ||
|
984
1030
|
isArray(o2) || isDate(o2) || isRegExp(o2)) return false;
|
985
|
-
keySet =
|
1031
|
+
keySet = createMap();
|
986
1032
|
for (key in o1) {
|
987
1033
|
if (key.charAt(0) === '$' || isFunction(o1[key])) continue;
|
988
1034
|
if (!equals(o1[key], o2[key])) return false;
|
989
1035
|
keySet[key] = true;
|
990
1036
|
}
|
991
1037
|
for (key in o2) {
|
992
|
-
if (!
|
1038
|
+
if (!(key in keySet) &&
|
993
1039
|
key.charAt(0) !== '$' &&
|
994
1040
|
o2[key] !== undefined &&
|
995
1041
|
!isFunction(o2[key])) return false;
|
@@ -1026,17 +1072,17 @@ var csp = function() {
|
|
1026
1072
|
* @name ngJq
|
1027
1073
|
*
|
1028
1074
|
* @element ANY
|
1029
|
-
* @param {string=} the name of the library available under `window`
|
1075
|
+
* @param {string=} ngJq the name of the library available under `window`
|
1030
1076
|
* to be used for angular.element
|
1031
1077
|
* @description
|
1032
1078
|
* Use this directive to force the angular.element library. This should be
|
1033
1079
|
* used to force either jqLite by leaving ng-jq blank or setting the name of
|
1034
1080
|
* the jquery variable under window (eg. jQuery).
|
1035
1081
|
*
|
1036
|
-
* Since this directive
|
1037
|
-
*
|
1038
|
-
*
|
1039
|
-
* ignored.
|
1082
|
+
* Since angular looks for this directive when it is loaded (doesn't wait for the
|
1083
|
+
* DOMContentLoaded event), it must be placed on an element that comes before the script
|
1084
|
+
* which loads angular. Also, only the first instance of `ng-jq` will be used and all
|
1085
|
+
* others ignored.
|
1040
1086
|
*
|
1041
1087
|
* @example
|
1042
1088
|
* This example shows how to force jqLite using the `ngJq` directive to the `html` tag.
|
@@ -2286,11 +2332,11 @@ function toDebugString(obj) {
|
|
2286
2332
|
* - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat".
|
2287
2333
|
*/
|
2288
2334
|
var version = {
|
2289
|
-
full: '1.4.0-rc.
|
2335
|
+
full: '1.4.0-rc.2', // all of these placeholder strings will be replaced by grunt's
|
2290
2336
|
major: 1, // package task
|
2291
2337
|
minor: 4,
|
2292
2338
|
dot: 0,
|
2293
|
-
codeName: '
|
2339
|
+
codeName: 'rocket-zambonimation'
|
2294
2340
|
};
|
2295
2341
|
|
2296
2342
|
|
@@ -2473,7 +2519,7 @@ function publishExternalAPI(angular) {
|
|
2473
2519
|
* Angular to manipulate the DOM in a cross-browser compatible way. **jqLite** implements only the most
|
2474
2520
|
* commonly needed functionality with the goal of having a very small footprint.</div>
|
2475
2521
|
*
|
2476
|
-
* To use jQuery
|
2522
|
+
* To use `jQuery`, simply ensure it is loaded before the `angular.js` file.
|
2477
2523
|
*
|
2478
2524
|
* <div class="alert">**Note:** all element references in Angular are always wrapped with jQuery or
|
2479
2525
|
* jqLite; they are never raw DOM references.</div>
|
@@ -2489,7 +2535,7 @@ function publishExternalAPI(angular) {
|
|
2489
2535
|
* - [`children()`](http://api.jquery.com/children/) - Does not support selectors
|
2490
2536
|
* - [`clone()`](http://api.jquery.com/clone/)
|
2491
2537
|
* - [`contents()`](http://api.jquery.com/contents/)
|
2492
|
-
* - [`css()`](http://api.jquery.com/css/) - Only retrieves inline-styles, does not call `getComputedStyle()
|
2538
|
+
* - [`css()`](http://api.jquery.com/css/) - Only retrieves inline-styles, does not call `getComputedStyle()`. As a setter, does not convert numbers to strings or append 'px'.
|
2493
2539
|
* - [`data()`](http://api.jquery.com/data/)
|
2494
2540
|
* - [`detach()`](http://api.jquery.com/detach/)
|
2495
2541
|
* - [`empty()`](http://api.jquery.com/empty/)
|
@@ -3733,7 +3779,7 @@ function annotate(fn, strictDi, name) {
|
|
3733
3779
|
* Return an instance of the service.
|
3734
3780
|
*
|
3735
3781
|
* @param {string} name The name of the instance to retrieve.
|
3736
|
-
* @param {string} caller An optional string to provide the origin of the function call for error messages.
|
3782
|
+
* @param {string=} caller An optional string to provide the origin of the function call for error messages.
|
3737
3783
|
* @return {*} The instance.
|
3738
3784
|
*/
|
3739
3785
|
|
@@ -3744,8 +3790,8 @@ function annotate(fn, strictDi, name) {
|
|
3744
3790
|
* @description
|
3745
3791
|
* Invoke the method and supply the method arguments from the `$injector`.
|
3746
3792
|
*
|
3747
|
-
* @param {
|
3748
|
-
* {@link guide/di $inject Annotation} rules.
|
3793
|
+
* @param {Function|Array.<string|Function>} fn The injectable function to invoke. Function parameters are
|
3794
|
+
* injected according to the {@link guide/di $inject Annotation} rules.
|
3749
3795
|
* @param {Object=} self The `this` for the invoked method.
|
3750
3796
|
* @param {Object=} locals Optional object. If preset then any argument names are read from this
|
3751
3797
|
* object first, before the `$injector` is consulted.
|
@@ -4012,8 +4058,8 @@ function annotate(fn, strictDi, name) {
|
|
4012
4058
|
* configure your service in a provider.
|
4013
4059
|
*
|
4014
4060
|
* @param {string} name The name of the instance.
|
4015
|
-
* @param {
|
4016
|
-
*
|
4061
|
+
* @param {Function|Array.<string|Function>} $getFn The injectable $getFn for the instance creation.
|
4062
|
+
* Internally this is a short hand for `$provide.provider(name, {$get: $getFn})`.
|
4017
4063
|
* @returns {Object} registered provider instance
|
4018
4064
|
*
|
4019
4065
|
* @example
|
@@ -4048,7 +4094,8 @@ function annotate(fn, strictDi, name) {
|
|
4048
4094
|
* as a type/class.
|
4049
4095
|
*
|
4050
4096
|
* @param {string} name The name of the instance.
|
4051
|
-
* @param {Function} constructor
|
4097
|
+
* @param {Function|Array.<string|Function>} constructor An injectable class (constructor function)
|
4098
|
+
* that will be instantiated.
|
4052
4099
|
* @returns {Object} registered provider instance
|
4053
4100
|
*
|
4054
4101
|
* @example
|
@@ -4147,7 +4194,7 @@ function annotate(fn, strictDi, name) {
|
|
4147
4194
|
* object which replaces or wraps and delegates to the original service.
|
4148
4195
|
*
|
4149
4196
|
* @param {string} name The name of the service to decorate.
|
4150
|
-
* @param {
|
4197
|
+
* @param {Function|Array.<string|Function>} decorator This function will be invoked when the service needs to be
|
4151
4198
|
* instantiated and should return the decorated service instance. The function is called using
|
4152
4199
|
* the {@link auto.$injector#invoke injector.invoke} method and is therefore fully injectable.
|
4153
4200
|
* Local injection arguments:
|
@@ -4676,6 +4723,7 @@ function $AnchorScrollProvider() {
|
|
4676
4723
|
|
4677
4724
|
var $animateMinErr = minErr('$animate');
|
4678
4725
|
var ELEMENT_NODE = 1;
|
4726
|
+
var NG_ANIMATE_CLASSNAME = 'ng-animate';
|
4679
4727
|
|
4680
4728
|
function mergeClasses(a,b) {
|
4681
4729
|
if (!a && !b) return '';
|
@@ -4700,7 +4748,9 @@ function splitClasses(classes) {
|
|
4700
4748
|
classes = classes.split(' ');
|
4701
4749
|
}
|
4702
4750
|
|
4703
|
-
|
4751
|
+
// Use createMap() to prevent class assumptions involving property names in
|
4752
|
+
// Object.prototype
|
4753
|
+
var obj = createMap();
|
4704
4754
|
forEach(classes, function(klass) {
|
4705
4755
|
// sometimes the split leaves empty string values
|
4706
4756
|
// incase extra spaces were applied to the options
|
@@ -4905,6 +4955,13 @@ var $AnimateProvider = ['$provide', function($provide) {
|
|
4905
4955
|
this.classNameFilter = function(expression) {
|
4906
4956
|
if (arguments.length === 1) {
|
4907
4957
|
this.$$classNameFilter = (expression instanceof RegExp) ? expression : null;
|
4958
|
+
if (this.$$classNameFilter) {
|
4959
|
+
var reservedRegex = new RegExp("(\\s+|\\/)" + NG_ANIMATE_CLASSNAME + "(\\s+|\\/)");
|
4960
|
+
if (reservedRegex.test(this.$$classNameFilter.toString())) {
|
4961
|
+
throw $animateMinErr('nongcls','$animateProvider.classNameFilter(regex) prohibits accepting a regex value which matches/contains the "{0}" CSS class.', NG_ANIMATE_CLASSNAME);
|
4962
|
+
|
4963
|
+
}
|
4964
|
+
}
|
4908
4965
|
}
|
4909
4966
|
return this.$$classNameFilter;
|
4910
4967
|
};
|
@@ -6803,6 +6860,11 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
|
|
6803
6860
|
if (!letter || letter !== lowercase(letter)) {
|
6804
6861
|
throw $compileMinErr('baddir', "Directive name '{0}' is invalid. The first character must be a lowercase letter", name);
|
6805
6862
|
}
|
6863
|
+
if (name !== name.trim()) {
|
6864
|
+
throw $compileMinErr('baddir',
|
6865
|
+
"Directive name '{0}' is invalid. The name should not contain leading or trailing whitespaces",
|
6866
|
+
name);
|
6867
|
+
}
|
6806
6868
|
}
|
6807
6869
|
|
6808
6870
|
/**
|
@@ -8987,34 +9049,14 @@ var JSON_ENDS = {
|
|
8987
9049
|
};
|
8988
9050
|
var JSON_PROTECTION_PREFIX = /^\)\]\}',?\n/;
|
8989
9051
|
|
8990
|
-
function
|
8991
|
-
|
8992
|
-
|
8993
|
-
if (isObject(v)) {
|
8994
|
-
return isDate(v) ? v.toISOString() : toJson(v);
|
8995
|
-
}
|
8996
|
-
return v;
|
9052
|
+
function serializeValue(v) {
|
9053
|
+
if (isObject(v)) {
|
9054
|
+
return isDate(v) ? v.toISOString() : toJson(v);
|
8997
9055
|
}
|
8998
|
-
|
8999
|
-
return function paramSerializer(params) {
|
9000
|
-
if (!params) return '';
|
9001
|
-
var parts = [];
|
9002
|
-
forEachSorted(params, function(value, key) {
|
9003
|
-
if (value === null || isUndefined(value)) return;
|
9004
|
-
if (isArray(value) || isObject(value) && jQueryMode) {
|
9005
|
-
forEach(value, function(v, k) {
|
9006
|
-
var keySuffix = jQueryMode ? '[' + (!isArray(value) ? k : '') + ']' : '';
|
9007
|
-
parts.push(encodeUriQuery(key + keySuffix) + '=' + encodeUriQuery(serializeValue(v)));
|
9008
|
-
});
|
9009
|
-
} else {
|
9010
|
-
parts.push(encodeUriQuery(key) + '=' + encodeUriQuery(serializeValue(value)));
|
9011
|
-
}
|
9012
|
-
});
|
9013
|
-
|
9014
|
-
return parts.length > 0 ? parts.join('&') : '';
|
9015
|
-
};
|
9056
|
+
return v;
|
9016
9057
|
}
|
9017
9058
|
|
9059
|
+
|
9018
9060
|
function $HttpParamSerializerProvider() {
|
9019
9061
|
/**
|
9020
9062
|
* @ngdoc service
|
@@ -9029,7 +9071,22 @@ function $HttpParamSerializerProvider() {
|
|
9029
9071
|
* * `{'foo': {'bar':'baz'}}` results in `foo=%7B%22bar%22%3A%22baz%22%7D"` (stringified and encoded representation of an object)
|
9030
9072
|
* */
|
9031
9073
|
this.$get = function() {
|
9032
|
-
return
|
9074
|
+
return function ngParamSerializer(params) {
|
9075
|
+
if (!params) return '';
|
9076
|
+
var parts = [];
|
9077
|
+
forEachSorted(params, function(value, key) {
|
9078
|
+
if (value === null || isUndefined(value)) return;
|
9079
|
+
if (isArray(value)) {
|
9080
|
+
forEach(value, function(v, k) {
|
9081
|
+
parts.push(encodeUriQuery(key) + '=' + encodeUriQuery(serializeValue(v)));
|
9082
|
+
});
|
9083
|
+
} else {
|
9084
|
+
parts.push(encodeUriQuery(key) + '=' + encodeUriQuery(serializeValue(value)));
|
9085
|
+
}
|
9086
|
+
});
|
9087
|
+
|
9088
|
+
return parts.join('&');
|
9089
|
+
};
|
9033
9090
|
};
|
9034
9091
|
}
|
9035
9092
|
|
@@ -9042,7 +9099,30 @@ function $HttpParamSerializerJQLikeProvider() {
|
|
9042
9099
|
* Alternative $http params serializer that follows jQuery's [`param()`](http://api.jquery.com/jquery.param/) method logic.
|
9043
9100
|
* */
|
9044
9101
|
this.$get = function() {
|
9045
|
-
return
|
9102
|
+
return function jQueryLikeParamSerializer(params) {
|
9103
|
+
if (!params) return '';
|
9104
|
+
var parts = [];
|
9105
|
+
serialize(params, '', true);
|
9106
|
+
return parts.join('&');
|
9107
|
+
|
9108
|
+
function serialize(toSerialize, prefix, topLevel) {
|
9109
|
+
if (toSerialize === null || isUndefined(toSerialize)) return;
|
9110
|
+
if (isArray(toSerialize)) {
|
9111
|
+
forEach(toSerialize, function(value) {
|
9112
|
+
serialize(value, prefix + '[]');
|
9113
|
+
});
|
9114
|
+
} else if (isObject(toSerialize) && !isDate(toSerialize)) {
|
9115
|
+
forEachSorted(toSerialize, function(value, key) {
|
9116
|
+
serialize(value, prefix +
|
9117
|
+
(topLevel ? '' : '[') +
|
9118
|
+
key +
|
9119
|
+
(topLevel ? '' : ']'));
|
9120
|
+
});
|
9121
|
+
} else {
|
9122
|
+
parts.push(encodeUriQuery(prefix) + '=' + encodeUriQuery(serializeValue(toSerialize)));
|
9123
|
+
}
|
9124
|
+
}
|
9125
|
+
};
|
9046
9126
|
};
|
9047
9127
|
}
|
9048
9128
|
|
@@ -11411,11 +11491,19 @@ var locationPrototype = {
|
|
11411
11491
|
*
|
11412
11492
|
* Return host of current url.
|
11413
11493
|
*
|
11494
|
+
* Note: compared to the non-angular version `location.host` which returns `hostname:port`, this returns the `hostname` portion only.
|
11495
|
+
*
|
11414
11496
|
*
|
11415
11497
|
* ```js
|
11416
11498
|
* // given url http://example.com/#/some/path?foo=bar&baz=xoxo
|
11417
11499
|
* var host = $location.host();
|
11418
11500
|
* // => "example.com"
|
11501
|
+
*
|
11502
|
+
* // given url http://user:password@example.com:8080/#/some/path?foo=bar&baz=xoxo
|
11503
|
+
* host = $location.host();
|
11504
|
+
* // => "example.com"
|
11505
|
+
* host = location.host;
|
11506
|
+
* // => "example.com:8080"
|
11419
11507
|
* ```
|
11420
11508
|
*
|
11421
11509
|
* @return {string} host of current url.
|
@@ -14172,9 +14260,11 @@ function $ParseProvider() {
|
|
14172
14260
|
* provide a progress indication, before the promise is resolved or rejected.
|
14173
14261
|
*
|
14174
14262
|
* This method *returns a new promise* which is resolved or rejected via the return value of the
|
14175
|
-
* `successCallback`, `errorCallback
|
14176
|
-
*
|
14177
|
-
*
|
14263
|
+
* `successCallback`, `errorCallback` (unless that value is a promise, in which case it is resolved
|
14264
|
+
* with the value which is resolved in that promise using
|
14265
|
+
* [promise chaining](http://www.html5rocks.com/en/tutorials/es6/promises/#toc-promises-queues)).
|
14266
|
+
* It also notifies via the return value of the `notifyCallback` method. The promise cannot be
|
14267
|
+
* resolved or rejected from the notifyCallback method.
|
14178
14268
|
*
|
14179
14269
|
* - `catch(errorCallback)` – shorthand for `promise.then(null, errorCallback)`
|
14180
14270
|
*
|
@@ -14610,7 +14700,7 @@ function $$RAFProvider() { //rAF
|
|
14610
14700
|
$window.webkitCancelRequestAnimationFrame;
|
14611
14701
|
|
14612
14702
|
var rafSupported = !!requestAnimationFrame;
|
14613
|
-
var
|
14703
|
+
var rafFn = rafSupported
|
14614
14704
|
? function(fn) {
|
14615
14705
|
var id = requestAnimationFrame(fn);
|
14616
14706
|
return function() {
|
@@ -14624,9 +14714,47 @@ function $$RAFProvider() { //rAF
|
|
14624
14714
|
};
|
14625
14715
|
};
|
14626
14716
|
|
14627
|
-
|
14717
|
+
queueFn.supported = rafSupported;
|
14718
|
+
|
14719
|
+
var cancelLastRAF;
|
14720
|
+
var taskCount = 0;
|
14721
|
+
var taskQueue = [];
|
14722
|
+
return queueFn;
|
14723
|
+
|
14724
|
+
function flush() {
|
14725
|
+
for (var i = 0; i < taskQueue.length; i++) {
|
14726
|
+
var task = taskQueue[i];
|
14727
|
+
if (task) {
|
14728
|
+
taskQueue[i] = null;
|
14729
|
+
task();
|
14730
|
+
}
|
14731
|
+
}
|
14732
|
+
taskCount = taskQueue.length = 0;
|
14733
|
+
}
|
14734
|
+
|
14735
|
+
function queueFn(asyncFn) {
|
14736
|
+
var index = taskQueue.length;
|
14737
|
+
|
14738
|
+
taskCount++;
|
14739
|
+
taskQueue.push(asyncFn);
|
14628
14740
|
|
14629
|
-
|
14741
|
+
if (index === 0) {
|
14742
|
+
cancelLastRAF = rafFn(flush);
|
14743
|
+
}
|
14744
|
+
|
14745
|
+
return function cancelQueueFn() {
|
14746
|
+
if (index >= 0) {
|
14747
|
+
taskQueue[index] = null;
|
14748
|
+
index = null;
|
14749
|
+
|
14750
|
+
if (--taskCount === 0 && cancelLastRAF) {
|
14751
|
+
cancelLastRAF();
|
14752
|
+
cancelLastRAF = null;
|
14753
|
+
taskQueue.length = 0;
|
14754
|
+
}
|
14755
|
+
}
|
14756
|
+
};
|
14757
|
+
}
|
14630
14758
|
}];
|
14631
14759
|
}
|
14632
14760
|
|
@@ -19932,11 +20060,11 @@ function FormController(element, attrs, $scope, $animate, $interpolate) {
|
|
19932
20060
|
<form name="myForm" ng-controller="FormController" class="my-form">
|
19933
20061
|
userType: <input name="input" ng-model="userType" required>
|
19934
20062
|
<span class="error" ng-show="myForm.input.$error.required">Required!</span><br>
|
19935
|
-
<
|
19936
|
-
<
|
19937
|
-
<
|
19938
|
-
<
|
19939
|
-
<
|
20063
|
+
<code>userType = {{userType}}</code><br>
|
20064
|
+
<code>myForm.input.$valid = {{myForm.input.$valid}}</code><br>
|
20065
|
+
<code>myForm.input.$error = {{myForm.input.$error}}</code><br>
|
20066
|
+
<code>myForm.$valid = {{myForm.$valid}}</code><br>
|
20067
|
+
<code>myForm.$error.required = {{!!myForm.$error.required}}</code><br>
|
19940
20068
|
</form>
|
19941
20069
|
</file>
|
19942
20070
|
<file name="protractor.js" type="protractor">
|
@@ -22034,7 +22162,9 @@ function classDirective(name, selector) {
|
|
22034
22162
|
}
|
22035
22163
|
|
22036
22164
|
function digestClassCounts(classes, count) {
|
22037
|
-
|
22165
|
+
// Use createMap() to prevent class assumptions involving property
|
22166
|
+
// names in Object.prototype
|
22167
|
+
var classCounts = element.data('$classCounts') || createMap();
|
22038
22168
|
var classesToUpdate = [];
|
22039
22169
|
forEach(classes, function(className) {
|
22040
22170
|
if (count > 0 || classCounts[className]) {
|
@@ -22417,17 +22547,13 @@ var ngClassEvenDirective = classDirective('Even', 1);
|
|
22417
22547
|
* document; alternatively, the css rule above must be included in the external stylesheet of the
|
22418
22548
|
* application.
|
22419
22549
|
*
|
22420
|
-
* Legacy browsers, like IE7, do not provide attribute selector support (added in CSS 2.1) so they
|
22421
|
-
* cannot match the `[ng\:cloak]` selector. To work around this limitation, you must add the css
|
22422
|
-
* class `ng-cloak` in addition to the `ngCloak` directive as shown in the example below.
|
22423
|
-
*
|
22424
22550
|
* @element ANY
|
22425
22551
|
*
|
22426
22552
|
* @example
|
22427
22553
|
<example>
|
22428
22554
|
<file name="index.html">
|
22429
22555
|
<div id="template1" ng-cloak>{{ 'hello' }}</div>
|
22430
|
-
<div id="template2"
|
22556
|
+
<div id="template2" class="ng-cloak">{{ 'world' }}</div>
|
22431
22557
|
</file>
|
22432
22558
|
<file name="protractor.js" type="protractor">
|
22433
22559
|
it('should remove the template directive and css class', function() {
|
@@ -24456,7 +24582,7 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
|
|
24456
24582
|
* If the validity changes to invalid, the model will be set to `undefined`,
|
24457
24583
|
* unless {@link ngModelOptions `ngModelOptions.allowInvalid`} is `true`.
|
24458
24584
|
* If the validity changes to valid, it will set the model to the last available valid
|
24459
|
-
* modelValue
|
24585
|
+
* `$modelValue`, i.e. either the last parsed value or the last value set from the scope.
|
24460
24586
|
*/
|
24461
24587
|
this.$validate = function() {
|
24462
24588
|
// ignore $validate before model is initialized
|
@@ -24948,10 +25074,11 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
|
|
24948
25074
|
var _name = 'Brian';
|
24949
25075
|
$scope.user = {
|
24950
25076
|
name: function(newName) {
|
24951
|
-
|
24952
|
-
|
24953
|
-
|
24954
|
-
|
25077
|
+
// Note that newName can be undefined for two reasons:
|
25078
|
+
// 1. Because it is called as a getter and thus called with no arguments
|
25079
|
+
// 2. Because the property should actually be set to undefined. This happens e.g. if the
|
25080
|
+
// input is invalid
|
25081
|
+
return arguments.length ? (_name = newName) : _name;
|
24955
25082
|
}
|
24956
25083
|
};
|
24957
25084
|
}]);
|
@@ -25165,7 +25292,11 @@ var DEFAULT_REGEXP = /(\s+|^)default(\s+|$)/;
|
|
25165
25292
|
var _name = 'Brian';
|
25166
25293
|
$scope.user = {
|
25167
25294
|
name: function(newName) {
|
25168
|
-
|
25295
|
+
// Note that newName can be undefined for two reasons:
|
25296
|
+
// 1. Because it is called as a getter and thus called with no arguments
|
25297
|
+
// 2. Because the property should actually be set to undefined. This happens e.g. if the
|
25298
|
+
// input is invalid
|
25299
|
+
return arguments.length ? (_name = newName) : _name;
|
25169
25300
|
}
|
25170
25301
|
};
|
25171
25302
|
}]);
|
@@ -25365,11 +25496,21 @@ var ngOptionsMinErr = minErr('ngOptions');
|
|
25365
25496
|
* be nested into the `<select>` element. This element will then represent the `null` or "not selected"
|
25366
25497
|
* option. See example below for demonstration.
|
25367
25498
|
*
|
25368
|
-
*
|
25369
|
-
*
|
25370
|
-
*
|
25371
|
-
*
|
25372
|
-
*
|
25499
|
+
* ## Complex Models (objects or collections)
|
25500
|
+
*
|
25501
|
+
* **Note:** By default, `ngModel` watches the model by reference, not value. This is important when
|
25502
|
+
* binding any input directive to a model that is an object or a collection.
|
25503
|
+
*
|
25504
|
+
* Since this is a common situation for `ngOptions` the directive additionally watches the model using
|
25505
|
+
* `$watchCollection` when the select has the `multiple` attribute or when there is a `track by` clause in
|
25506
|
+
* the options expression. This allows ngOptions to trigger a re-rendering of the options even if the actual
|
25507
|
+
* object/collection has not changed identity but only a property on the object or an item in the collection
|
25508
|
+
* changes.
|
25509
|
+
*
|
25510
|
+
* Note that `$watchCollection` does a shallow comparison of the properties of the object (or the items in the collection
|
25511
|
+
* if the model is an array). This means that changing a property deeper inside the object/collection that the
|
25512
|
+
* first level will not trigger a re-rendering.
|
25513
|
+
*
|
25373
25514
|
*
|
25374
25515
|
* ## `select` **`as`**
|
25375
25516
|
*
|
@@ -25585,9 +25726,13 @@ var ngOptionsDirective = ['$compile', '$parse', function($compile, $parse) {
|
|
25585
25726
|
// Get the value by which we are going to track the option
|
25586
25727
|
// if we have a trackFn then use that (passing scope and locals)
|
25587
25728
|
// otherwise just hash the given viewValue
|
25588
|
-
var
|
25589
|
-
function(
|
25590
|
-
function getHashOfValue(
|
25729
|
+
var getTrackByValueFn = trackBy ?
|
25730
|
+
function(value, locals) { return trackByFn(scope, locals); } :
|
25731
|
+
function getHashOfValue(value) { return hashKey(value); };
|
25732
|
+
var getTrackByValue = function(value, key) {
|
25733
|
+
return getTrackByValueFn(value, getLocals(value, key));
|
25734
|
+
};
|
25735
|
+
|
25591
25736
|
var displayFn = $parse(match[2] || match[1]);
|
25592
25737
|
var groupByFn = $parse(match[3] || '');
|
25593
25738
|
var disableWhenFn = $parse(match[4] || '');
|
@@ -25614,6 +25759,7 @@ var ngOptionsDirective = ['$compile', '$parse', function($compile, $parse) {
|
|
25614
25759
|
|
25615
25760
|
return {
|
25616
25761
|
trackBy: trackBy,
|
25762
|
+
getTrackByValue: getTrackByValue,
|
25617
25763
|
getWatchables: $parse(valuesFn, function(values) {
|
25618
25764
|
// Create a collection of things that we would like to watch (watchedArray)
|
25619
25765
|
// so that they can all be watched using a single $watchCollection
|
@@ -25623,11 +25769,11 @@ var ngOptionsDirective = ['$compile', '$parse', function($compile, $parse) {
|
|
25623
25769
|
|
25624
25770
|
Object.keys(values).forEach(function getWatchable(key) {
|
25625
25771
|
var locals = getLocals(values[key], key);
|
25626
|
-
var selectValue =
|
25772
|
+
var selectValue = getTrackByValueFn(values[key], locals);
|
25627
25773
|
watchedArray.push(selectValue);
|
25628
25774
|
|
25629
25775
|
// Only need to watch the displayFn if there is a specific label expression
|
25630
|
-
if (match[2]) {
|
25776
|
+
if (match[2] || match[1]) {
|
25631
25777
|
var label = displayFn(scope, locals);
|
25632
25778
|
watchedArray.push(label);
|
25633
25779
|
}
|
@@ -25649,17 +25795,29 @@ var ngOptionsDirective = ['$compile', '$parse', function($compile, $parse) {
|
|
25649
25795
|
// The option values were already computed in the `getWatchables` fn,
|
25650
25796
|
// which must have been called to trigger `getOptions`
|
25651
25797
|
var optionValues = valuesFn(scope) || [];
|
25798
|
+
var optionValuesKeys;
|
25652
25799
|
|
25653
|
-
var keys = Object.keys(optionValues);
|
25654
|
-
keys.forEach(function getOption(key) {
|
25655
25800
|
|
25656
|
-
|
25657
|
-
|
25801
|
+
if (!keyName && isArrayLike(optionValues)) {
|
25802
|
+
optionValuesKeys = optionValues;
|
25803
|
+
} else {
|
25804
|
+
// if object, extract keys, in enumeration order, unsorted
|
25805
|
+
optionValuesKeys = [];
|
25806
|
+
for (var itemKey in optionValues) {
|
25807
|
+
if (optionValues.hasOwnProperty(itemKey) && itemKey.charAt(0) !== '$') {
|
25808
|
+
optionValuesKeys.push(itemKey);
|
25809
|
+
}
|
25810
|
+
}
|
25811
|
+
}
|
25812
|
+
|
25813
|
+
var optionValuesLength = optionValuesKeys.length;
|
25658
25814
|
|
25815
|
+
for (var index = 0; index < optionValuesLength; index++) {
|
25816
|
+
var key = (optionValues === optionValuesKeys) ? index : optionValuesKeys[index];
|
25659
25817
|
var value = optionValues[key];
|
25660
25818
|
var locals = getLocals(value, key);
|
25661
25819
|
var viewValue = viewValueFn(scope, locals);
|
25662
|
-
var selectValue =
|
25820
|
+
var selectValue = getTrackByValueFn(viewValue, locals);
|
25663
25821
|
var label = displayFn(scope, locals);
|
25664
25822
|
var group = groupByFn(scope, locals);
|
25665
25823
|
var disabled = disableWhenFn(scope, locals);
|
@@ -25667,13 +25825,13 @@ var ngOptionsDirective = ['$compile', '$parse', function($compile, $parse) {
|
|
25667
25825
|
|
25668
25826
|
optionItems.push(optionItem);
|
25669
25827
|
selectValueMap[selectValue] = optionItem;
|
25670
|
-
}
|
25828
|
+
}
|
25671
25829
|
|
25672
25830
|
return {
|
25673
25831
|
items: optionItems,
|
25674
25832
|
selectValueMap: selectValueMap,
|
25675
25833
|
getOptionFromViewValue: function(value) {
|
25676
|
-
return selectValueMap[getTrackByValue(value
|
25834
|
+
return selectValueMap[getTrackByValue(value)];
|
25677
25835
|
},
|
25678
25836
|
getViewValueFromOption: function(option) {
|
25679
25837
|
// If the viewValue could be an object that may be mutated by the application,
|
@@ -25751,44 +25909,54 @@ var ngOptionsDirective = ['$compile', '$parse', function($compile, $parse) {
|
|
25751
25909
|
};
|
25752
25910
|
|
25753
25911
|
|
25754
|
-
|
25755
|
-
|
25912
|
+
// Update the controller methods for multiple selectable options
|
25913
|
+
if (!multiple) {
|
25756
25914
|
|
25757
|
-
|
25758
|
-
|
25759
|
-
removeUnknownOption();
|
25760
|
-
removeEmptyOption();
|
25915
|
+
selectCtrl.writeValue = function writeNgOptionsValue(value) {
|
25916
|
+
var option = options.getOptionFromViewValue(value);
|
25761
25917
|
|
25762
|
-
|
25763
|
-
option.
|
25764
|
-
|
25765
|
-
|
25766
|
-
|
25767
|
-
|
25768
|
-
|
25769
|
-
|
25918
|
+
if (option && !option.disabled) {
|
25919
|
+
if (selectElement[0].value !== option.selectValue) {
|
25920
|
+
removeUnknownOption();
|
25921
|
+
removeEmptyOption();
|
25922
|
+
|
25923
|
+
selectElement[0].value = option.selectValue;
|
25924
|
+
option.element.selected = true;
|
25925
|
+
option.element.setAttribute('selected', 'selected');
|
25926
|
+
}
|
25770
25927
|
} else {
|
25771
|
-
|
25772
|
-
|
25928
|
+
if (value === null || providedEmptyOption) {
|
25929
|
+
removeUnknownOption();
|
25930
|
+
renderEmptyOption();
|
25931
|
+
} else {
|
25932
|
+
removeEmptyOption();
|
25933
|
+
renderUnknownOption();
|
25934
|
+
}
|
25773
25935
|
}
|
25774
|
-
}
|
25775
|
-
};
|
25936
|
+
};
|
25776
25937
|
|
25777
|
-
|
25938
|
+
selectCtrl.readValue = function readNgOptionsValue() {
|
25778
25939
|
|
25779
|
-
|
25940
|
+
var selectedOption = options.selectValueMap[selectElement.val()];
|
25780
25941
|
|
25781
|
-
|
25782
|
-
|
25783
|
-
|
25784
|
-
|
25785
|
-
|
25786
|
-
|
25787
|
-
|
25942
|
+
if (selectedOption && !selectedOption.disabled) {
|
25943
|
+
removeEmptyOption();
|
25944
|
+
removeUnknownOption();
|
25945
|
+
return options.getViewValueFromOption(selectedOption);
|
25946
|
+
}
|
25947
|
+
return null;
|
25948
|
+
};
|
25788
25949
|
|
25950
|
+
// If we are using `track by` then we must watch the tracked value on the model
|
25951
|
+
// since ngModel only watches for object identity change
|
25952
|
+
if (ngOptions.trackBy) {
|
25953
|
+
scope.$watch(
|
25954
|
+
function() { return ngOptions.getTrackByValue(ngModelCtrl.$viewValue); },
|
25955
|
+
function() { ngModelCtrl.$render(); }
|
25956
|
+
);
|
25957
|
+
}
|
25789
25958
|
|
25790
|
-
|
25791
|
-
if (multiple) {
|
25959
|
+
} else {
|
25792
25960
|
|
25793
25961
|
ngModelCtrl.$isEmpty = function(value) {
|
25794
25962
|
return !value || value.length === 0;
|
@@ -25820,6 +25988,22 @@ var ngOptionsDirective = ['$compile', '$parse', function($compile, $parse) {
|
|
25820
25988
|
|
25821
25989
|
return selections;
|
25822
25990
|
};
|
25991
|
+
|
25992
|
+
// If we are using `track by` then we must watch these tracked values on the model
|
25993
|
+
// since ngModel only watches for object identity change
|
25994
|
+
if (ngOptions.trackBy) {
|
25995
|
+
|
25996
|
+
scope.$watchCollection(function() {
|
25997
|
+
if (isArray(ngModelCtrl.$viewValue)) {
|
25998
|
+
return ngModelCtrl.$viewValue.map(function(value) {
|
25999
|
+
return ngOptions.getTrackByValue(value);
|
26000
|
+
});
|
26001
|
+
}
|
26002
|
+
}, function() {
|
26003
|
+
ngModelCtrl.$render();
|
26004
|
+
});
|
26005
|
+
|
26006
|
+
}
|
25823
26007
|
}
|
25824
26008
|
|
25825
26009
|
|
@@ -25846,11 +26030,6 @@ var ngOptionsDirective = ['$compile', '$parse', function($compile, $parse) {
|
|
25846
26030
|
// We will re-render the option elements if the option values or labels change
|
25847
26031
|
scope.$watchCollection(ngOptions.getWatchables, updateOptions);
|
25848
26032
|
|
25849
|
-
// We also need to watch to see if the internals of the model changes, since
|
25850
|
-
// ngModel only watches for object identity change
|
25851
|
-
if (ngOptions.trackBy) {
|
25852
|
-
scope.$watch(attr.ngModel, function() { ngModelCtrl.$render(); }, true);
|
25853
|
-
}
|
25854
26033
|
// ------------------------------------------------------------------ //
|
25855
26034
|
|
25856
26035
|
|
@@ -27194,7 +27373,7 @@ var ngStyleDirective = ngDirective(function(scope, element, attr) {
|
|
27194
27373
|
*
|
27195
27374
|
* @scope
|
27196
27375
|
* @priority 1200
|
27197
|
-
* @param {*} ngSwitch|on expression to match against <
|
27376
|
+
* @param {*} ngSwitch|on expression to match against <code>ng-switch-when</code>.
|
27198
27377
|
* On child elements add:
|
27199
27378
|
*
|
27200
27379
|
* * `ngSwitchWhen`: the case statement to match against. If match then this
|
@@ -27211,7 +27390,7 @@ var ngStyleDirective = ngDirective(function(scope, element, attr) {
|
|
27211
27390
|
<div ng-controller="ExampleController">
|
27212
27391
|
<select ng-model="selection" ng-options="item for item in items">
|
27213
27392
|
</select>
|
27214
|
-
<
|
27393
|
+
<code>selection={{selection}}</code>
|
27215
27394
|
<hr/>
|
27216
27395
|
<div class="animate-switch-container"
|
27217
27396
|
ng-switch on="selection">
|
@@ -27602,12 +27781,6 @@ var SelectController =
|
|
27602
27781
|
* be nested into the `<select>` element. This element will then represent the `null` or "not selected"
|
27603
27782
|
* option. See example below for demonstration.
|
27604
27783
|
*
|
27605
|
-
* <div class="alert alert-warning">
|
27606
|
-
* **Note:** By default, `ngModel` compares by reference, not value. This is important when binding to an
|
27607
|
-
* array of objects. See an example [in this jsfiddle](http://jsfiddle.net/qWzTb/). When using `track by`
|
27608
|
-
* in an `ngOptions` expression, however, deep equality checks will be performed.
|
27609
|
-
* </div>
|
27610
|
-
*
|
27611
27784
|
*/
|
27612
27785
|
var selectDirective = function() {
|
27613
27786
|
|
@@ -27869,4 +28042,4 @@ var minlengthDirective = function() {
|
|
27869
28042
|
|
27870
28043
|
})(window, document);
|
27871
28044
|
|
27872
|
-
!window.angular.$$csp() && window.angular.element(document).find('head').prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\\:form{display:block;}.ng-animate-shim{visibility:hidden;}.ng-
|
28045
|
+
!window.angular.$$csp() && window.angular.element(document).find('head').prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\\:form{display:block;}.ng-animate-shim{visibility:hidden;}.ng-anchor{position:absolute;}</style>');
|