angularjs-rails 1.4.3 → 1.4.4
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/README.md +1 -6
- data/lib/angularjs-rails/version.rb +2 -2
- data/vendor/assets/javascripts/angular-animate.js +373 -309
- data/vendor/assets/javascripts/angular-aria.js +1 -1
- data/vendor/assets/javascripts/angular-cookies.js +2 -2
- data/vendor/assets/javascripts/angular-loader.js +4 -4
- data/vendor/assets/javascripts/angular-message-format.js +1 -1
- data/vendor/assets/javascripts/angular-messages.js +1 -1
- data/vendor/assets/javascripts/angular-mocks.js +13 -16
- data/vendor/assets/javascripts/angular-resource.js +1 -1
- data/vendor/assets/javascripts/angular-route.js +1 -1
- data/vendor/assets/javascripts/angular-sanitize.js +2 -2
- data/vendor/assets/javascripts/angular-scenario.js +546 -294
- data/vendor/assets/javascripts/angular-touch.js +1 -1
- data/vendor/assets/javascripts/angular.js +541 -301
- data/vendor/assets/javascripts/unstable/angular2.js +19310 -17231
- metadata +2 -2
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license AngularJS v1.4.
|
2
|
+
* @license AngularJS v1.4.4
|
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.
|
60
|
+
message += '\nhttp://errors.angularjs.org/1.4.4/' +
|
61
61
|
(module ? module + '/' : '') + code;
|
62
62
|
|
63
63
|
for (i = SKIP_INDEXES, paramPrefix = '?'; i < templateArgs.length; i++, paramPrefix = '&') {
|
@@ -423,6 +423,8 @@ function baseExtend(dst, objs, deep) {
|
|
423
423
|
if (deep && isObject(src)) {
|
424
424
|
if (isDate(src)) {
|
425
425
|
dst[key] = new Date(src.valueOf());
|
426
|
+
} else if (isRegExp(src)) {
|
427
|
+
dst[key] = new RegExp(src);
|
426
428
|
} else {
|
427
429
|
if (!isObject(dst[key])) dst[key] = isArray(src) ? [] : {};
|
428
430
|
baseExtend(dst[key], [src], true);
|
@@ -1053,22 +1055,39 @@ function equals(o1, o2) {
|
|
1053
1055
|
}
|
1054
1056
|
|
1055
1057
|
var csp = function() {
|
1056
|
-
if (isDefined(csp.
|
1058
|
+
if (!isDefined(csp.rules)) {
|
1057
1059
|
|
1058
|
-
var active = !!(document.querySelector('[ng-csp]') ||
|
1059
|
-
document.querySelector('[data-ng-csp]'));
|
1060
1060
|
|
1061
|
-
|
1061
|
+
var ngCspElement = (document.querySelector('[ng-csp]') ||
|
1062
|
+
document.querySelector('[data-ng-csp]'));
|
1063
|
+
|
1064
|
+
if (ngCspElement) {
|
1065
|
+
var ngCspAttribute = ngCspElement.getAttribute('ng-csp') ||
|
1066
|
+
ngCspElement.getAttribute('data-ng-csp');
|
1067
|
+
csp.rules = {
|
1068
|
+
noUnsafeEval: !ngCspAttribute || (ngCspAttribute.indexOf('no-unsafe-eval') !== -1),
|
1069
|
+
noInlineStyle: !ngCspAttribute || (ngCspAttribute.indexOf('no-inline-style') !== -1)
|
1070
|
+
};
|
1071
|
+
} else {
|
1072
|
+
csp.rules = {
|
1073
|
+
noUnsafeEval: noUnsafeEval(),
|
1074
|
+
noInlineStyle: false
|
1075
|
+
};
|
1076
|
+
}
|
1077
|
+
}
|
1078
|
+
|
1079
|
+
return csp.rules;
|
1080
|
+
|
1081
|
+
function noUnsafeEval() {
|
1062
1082
|
try {
|
1063
1083
|
/* jshint -W031, -W054 */
|
1064
1084
|
new Function('');
|
1065
1085
|
/* jshint +W031, +W054 */
|
1086
|
+
return false;
|
1066
1087
|
} catch (e) {
|
1067
|
-
|
1088
|
+
return true;
|
1068
1089
|
}
|
1069
1090
|
}
|
1070
|
-
|
1071
|
-
return (csp.isActive_ = active);
|
1072
1091
|
};
|
1073
1092
|
|
1074
1093
|
/**
|
@@ -1300,13 +1319,19 @@ function tryDecodeURIComponent(value) {
|
|
1300
1319
|
* @returns {Object.<string,boolean|Array>}
|
1301
1320
|
*/
|
1302
1321
|
function parseKeyValue(/**string*/keyValue) {
|
1303
|
-
var obj = {}
|
1322
|
+
var obj = {};
|
1304
1323
|
forEach((keyValue || "").split('&'), function(keyValue) {
|
1324
|
+
var splitPoint, key, val;
|
1305
1325
|
if (keyValue) {
|
1306
|
-
|
1307
|
-
|
1326
|
+
key = keyValue = keyValue.replace(/\+/g,'%20');
|
1327
|
+
splitPoint = keyValue.indexOf('=');
|
1328
|
+
if (splitPoint !== -1) {
|
1329
|
+
key = keyValue.substring(0, splitPoint);
|
1330
|
+
val = keyValue.substring(splitPoint + 1);
|
1331
|
+
}
|
1332
|
+
key = tryDecodeURIComponent(key);
|
1308
1333
|
if (isDefined(key)) {
|
1309
|
-
|
1334
|
+
val = isDefined(val) ? tryDecodeURIComponent(val) : true;
|
1310
1335
|
if (!hasOwnProperty.call(obj, key)) {
|
1311
1336
|
obj[key] = val;
|
1312
1337
|
} else if (isArray(obj[key])) {
|
@@ -1902,8 +1927,8 @@ function setupModuleLoader(window) {
|
|
1902
1927
|
* All modules (angular core or 3rd party) that should be available to an application must be
|
1903
1928
|
* registered using this mechanism.
|
1904
1929
|
*
|
1905
|
-
*
|
1906
|
-
*
|
1930
|
+
* Passing one argument retrieves an existing {@link angular.Module},
|
1931
|
+
* whereas passing more than one argument creates a new {@link angular.Module}
|
1907
1932
|
*
|
1908
1933
|
*
|
1909
1934
|
* # Module
|
@@ -2244,7 +2269,6 @@ function toDebugString(obj) {
|
|
2244
2269
|
/* global angularModule: true,
|
2245
2270
|
version: true,
|
2246
2271
|
|
2247
|
-
$LocaleProvider,
|
2248
2272
|
$CompileProvider,
|
2249
2273
|
|
2250
2274
|
htmlAnchorDirective,
|
@@ -2261,7 +2285,6 @@ function toDebugString(obj) {
|
|
2261
2285
|
ngClassDirective,
|
2262
2286
|
ngClassEvenDirective,
|
2263
2287
|
ngClassOddDirective,
|
2264
|
-
ngCspDirective,
|
2265
2288
|
ngCloakDirective,
|
2266
2289
|
ngControllerDirective,
|
2267
2290
|
ngFormDirective,
|
@@ -2298,6 +2321,7 @@ function toDebugString(obj) {
|
|
2298
2321
|
|
2299
2322
|
$AnchorScrollProvider,
|
2300
2323
|
$AnimateProvider,
|
2324
|
+
$CoreAnimateCssProvider,
|
2301
2325
|
$$CoreAnimateQueueProvider,
|
2302
2326
|
$$CoreAnimateRunnerProvider,
|
2303
2327
|
$BrowserProvider,
|
@@ -2306,6 +2330,7 @@ function toDebugString(obj) {
|
|
2306
2330
|
$DocumentProvider,
|
2307
2331
|
$ExceptionHandlerProvider,
|
2308
2332
|
$FilterProvider,
|
2333
|
+
$$ForceReflowProvider,
|
2309
2334
|
$InterpolateProvider,
|
2310
2335
|
$IntervalProvider,
|
2311
2336
|
$$HashMapProvider,
|
@@ -2349,11 +2374,11 @@ function toDebugString(obj) {
|
|
2349
2374
|
* - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat".
|
2350
2375
|
*/
|
2351
2376
|
var version = {
|
2352
|
-
full: '1.4.
|
2377
|
+
full: '1.4.4', // all of these placeholder strings will be replaced by grunt's
|
2353
2378
|
major: 1, // package task
|
2354
2379
|
minor: 4,
|
2355
|
-
dot:
|
2356
|
-
codeName: '
|
2380
|
+
dot: 4,
|
2381
|
+
codeName: 'pylon-requirement'
|
2357
2382
|
};
|
2358
2383
|
|
2359
2384
|
|
@@ -2392,11 +2417,6 @@ function publishExternalAPI(angular) {
|
|
2392
2417
|
});
|
2393
2418
|
|
2394
2419
|
angularModule = setupModuleLoader(window);
|
2395
|
-
try {
|
2396
|
-
angularModule('ngLocale');
|
2397
|
-
} catch (e) {
|
2398
|
-
angularModule('ngLocale', []).provider('$locale', $LocaleProvider);
|
2399
|
-
}
|
2400
2420
|
|
2401
2421
|
angularModule('ng', ['ngLocale'], ['$provide',
|
2402
2422
|
function ngModule($provide) {
|
@@ -2459,6 +2479,7 @@ function publishExternalAPI(angular) {
|
|
2459
2479
|
$provide.provider({
|
2460
2480
|
$anchorScroll: $AnchorScrollProvider,
|
2461
2481
|
$animate: $AnimateProvider,
|
2482
|
+
$animateCss: $CoreAnimateCssProvider,
|
2462
2483
|
$$animateQueue: $$CoreAnimateQueueProvider,
|
2463
2484
|
$$AnimateRunner: $$CoreAnimateRunnerProvider,
|
2464
2485
|
$browser: $BrowserProvider,
|
@@ -2467,6 +2488,7 @@ function publishExternalAPI(angular) {
|
|
2467
2488
|
$document: $DocumentProvider,
|
2468
2489
|
$exceptionHandler: $ExceptionHandlerProvider,
|
2469
2490
|
$filter: $FilterProvider,
|
2491
|
+
$$forceReflow: $$ForceReflowProvider,
|
2470
2492
|
$interpolate: $InterpolateProvider,
|
2471
2493
|
$interval: $IntervalProvider,
|
2472
2494
|
$http: $HttpProvider,
|
@@ -3686,7 +3708,7 @@ var $$HashMapProvider = [function() {
|
|
3686
3708
|
* Implicit module which gets automatically added to each {@link auto.$injector $injector}.
|
3687
3709
|
*/
|
3688
3710
|
|
3689
|
-
var FN_ARGS = /^
|
3711
|
+
var FN_ARGS = /^[^\(]*\(\s*([^\)]*)\)/m;
|
3690
3712
|
var FN_ARG_SPLIT = /,/;
|
3691
3713
|
var FN_ARG = /^\s*(_?)(\S+?)\1\s*$/;
|
3692
3714
|
var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg;
|
@@ -4342,6 +4364,7 @@ function createInjector(modulesToLoad, strictDi) {
|
|
4342
4364
|
// Module Loading
|
4343
4365
|
////////////////////////////////////
|
4344
4366
|
function loadModules(modulesToLoad) {
|
4367
|
+
assertArg(isUndefined(modulesToLoad) || isArray(modulesToLoad), 'modulesToLoad', 'not an array');
|
4345
4368
|
var runBlocks = [], moduleFn;
|
4346
4369
|
forEach(modulesToLoad, function(module) {
|
4347
4370
|
if (loadedModules.get(module)) return;
|
@@ -4851,31 +4874,31 @@ var $$CoreAnimateQueueProvider = function() {
|
|
4851
4874
|
};
|
4852
4875
|
|
4853
4876
|
function addRemoveClassesPostDigest(element, add, remove) {
|
4854
|
-
var data = postDigestQueue.get(element);
|
4855
|
-
var classVal;
|
4877
|
+
var classVal, data = postDigestQueue.get(element);
|
4856
4878
|
|
4857
4879
|
if (!data) {
|
4858
4880
|
postDigestQueue.put(element, data = {});
|
4859
4881
|
postDigestElements.push(element);
|
4860
4882
|
}
|
4861
4883
|
|
4862
|
-
|
4863
|
-
|
4864
|
-
|
4865
|
-
|
4866
|
-
|
4867
|
-
|
4868
|
-
|
4869
|
-
|
4870
|
-
|
4871
|
-
|
4872
|
-
|
4873
|
-
|
4874
|
-
|
4875
|
-
|
4876
|
-
}
|
4884
|
+
var updateData = function(classes, value) {
|
4885
|
+
var changed = false;
|
4886
|
+
if (classes) {
|
4887
|
+
classes = isString(classes) ? classes.split(' ') :
|
4888
|
+
isArray(classes) ? classes : [];
|
4889
|
+
forEach(classes, function(className) {
|
4890
|
+
if (className) {
|
4891
|
+
changed = true;
|
4892
|
+
data[className] = value;
|
4893
|
+
}
|
4894
|
+
});
|
4895
|
+
}
|
4896
|
+
return changed;
|
4897
|
+
};
|
4877
4898
|
|
4878
|
-
|
4899
|
+
var classesAdded = updateData(add, true);
|
4900
|
+
var classesRemoved = updateData(remove, false);
|
4901
|
+
if ((!classesAdded && !classesRemoved) || postDigestElements.length > 1) return;
|
4879
4902
|
|
4880
4903
|
$rootScope.$$postDigest(function() {
|
4881
4904
|
forEach(postDigestElements, function(element) {
|
@@ -5334,15 +5357,88 @@ var $AnimateProvider = ['$provide', function($provide) {
|
|
5334
5357
|
}];
|
5335
5358
|
}];
|
5336
5359
|
|
5337
|
-
|
5338
|
-
|
5339
|
-
|
5340
|
-
|
5341
|
-
|
5342
|
-
|
5360
|
+
/**
|
5361
|
+
* @ngdoc service
|
5362
|
+
* @name $animateCss
|
5363
|
+
* @kind object
|
5364
|
+
*
|
5365
|
+
* @description
|
5366
|
+
* This is the core version of `$animateCss`. By default, only when the `ngAnimate` is included,
|
5367
|
+
* then the `$animateCss` service will actually perform animations.
|
5368
|
+
*
|
5369
|
+
* Click here {@link ngAnimate.$animateCss to read the documentation for $animateCss}.
|
5370
|
+
*/
|
5371
|
+
var $CoreAnimateCssProvider = function() {
|
5372
|
+
this.$get = ['$$rAF', '$q', function($$rAF, $q) {
|
5373
|
+
|
5374
|
+
var RAFPromise = function() {};
|
5375
|
+
RAFPromise.prototype = {
|
5376
|
+
done: function(cancel) {
|
5377
|
+
this.defer && this.defer[cancel === true ? 'reject' : 'resolve']();
|
5378
|
+
},
|
5379
|
+
end: function() {
|
5380
|
+
this.done();
|
5381
|
+
},
|
5382
|
+
cancel: function() {
|
5383
|
+
this.done(true);
|
5384
|
+
},
|
5385
|
+
getPromise: function() {
|
5386
|
+
if (!this.defer) {
|
5387
|
+
this.defer = $q.defer();
|
5388
|
+
}
|
5389
|
+
return this.defer.promise;
|
5390
|
+
},
|
5391
|
+
then: function(f1,f2) {
|
5392
|
+
return this.getPromise().then(f1,f2);
|
5393
|
+
},
|
5394
|
+
'catch': function(f1) {
|
5395
|
+
return this.getPromise().catch(f1);
|
5396
|
+
},
|
5397
|
+
'finally': function(f1) {
|
5398
|
+
return this.getPromise().finally(f1);
|
5399
|
+
}
|
5400
|
+
};
|
5401
|
+
|
5402
|
+
return function(element, options) {
|
5403
|
+
if (options.from) {
|
5404
|
+
element.css(options.from);
|
5405
|
+
options.from = null;
|
5406
|
+
}
|
5407
|
+
|
5408
|
+
var closed, runner = new RAFPromise();
|
5409
|
+
return {
|
5410
|
+
start: run,
|
5411
|
+
end: run
|
5343
5412
|
};
|
5413
|
+
|
5414
|
+
function run() {
|
5415
|
+
$$rAF(function() {
|
5416
|
+
close();
|
5417
|
+
if (!closed) {
|
5418
|
+
runner.done();
|
5419
|
+
}
|
5420
|
+
closed = true;
|
5421
|
+
});
|
5422
|
+
return runner;
|
5423
|
+
}
|
5424
|
+
|
5425
|
+
function close() {
|
5426
|
+
if (options.addClass) {
|
5427
|
+
element.addClass(options.addClass);
|
5428
|
+
options.addClass = null;
|
5429
|
+
}
|
5430
|
+
if (options.removeClass) {
|
5431
|
+
element.removeClass(options.removeClass);
|
5432
|
+
options.removeClass = null;
|
5433
|
+
}
|
5434
|
+
if (options.to) {
|
5435
|
+
element.css(options.to);
|
5436
|
+
options.to = null;
|
5437
|
+
}
|
5438
|
+
}
|
5439
|
+
};
|
5344
5440
|
}];
|
5345
|
-
}
|
5441
|
+
};
|
5346
5442
|
|
5347
5443
|
/* global stripHash: true */
|
5348
5444
|
|
@@ -6506,7 +6602,7 @@ function $TemplateCacheProvider() {
|
|
6506
6602
|
* otherwise the {@link error:$compile:ctreq Missing Required Controller} error is thrown.
|
6507
6603
|
*
|
6508
6604
|
* Note that you can also require the directive's own controller - it will be made available like
|
6509
|
-
*
|
6605
|
+
* any other controller.
|
6510
6606
|
*
|
6511
6607
|
* * `transcludeFn` - A transclude linking function pre-bound to the correct transclusion scope.
|
6512
6608
|
* This is the same as the `$transclude`
|
@@ -6532,7 +6628,7 @@ function $TemplateCacheProvider() {
|
|
6532
6628
|
*
|
6533
6629
|
* ### Transclusion
|
6534
6630
|
*
|
6535
|
-
* Transclusion is the process of extracting a collection of DOM
|
6631
|
+
* Transclusion is the process of extracting a collection of DOM elements from one part of the DOM and
|
6536
6632
|
* copying them to another part of the DOM, while maintaining their connection to the original AngularJS
|
6537
6633
|
* scope from where they were taken.
|
6538
6634
|
*
|
@@ -7287,7 +7383,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
|
|
7287
7383
|
|
7288
7384
|
listeners.push(fn);
|
7289
7385
|
$rootScope.$evalAsync(function() {
|
7290
|
-
if (!listeners.$$inter && attrs.hasOwnProperty(key)) {
|
7386
|
+
if (!listeners.$$inter && attrs.hasOwnProperty(key) && !isUndefined(attrs[key])) {
|
7291
7387
|
// no one registered attribute interpolation function, so lets call it manually
|
7292
7388
|
fn(attrs[key]);
|
7293
7389
|
}
|
@@ -8666,24 +8762,19 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
|
|
8666
8762
|
lastValue,
|
8667
8763
|
parentGet, parentSet, compare;
|
8668
8764
|
|
8669
|
-
if (!hasOwnProperty.call(attrs, attrName)) {
|
8670
|
-
// In the case of user defined a binding with the same name as a method in Object.prototype but didn't set
|
8671
|
-
// the corresponding attribute. We need to make sure subsequent code won't access to the prototype function
|
8672
|
-
attrs[attrName] = undefined;
|
8673
|
-
}
|
8674
|
-
|
8675
8765
|
switch (mode) {
|
8676
8766
|
|
8677
8767
|
case '@':
|
8678
|
-
if (!
|
8679
|
-
destination[scopeName] =
|
8768
|
+
if (!optional && !hasOwnProperty.call(attrs, attrName)) {
|
8769
|
+
destination[scopeName] = attrs[attrName] = void 0;
|
8680
8770
|
}
|
8681
|
-
|
8682
8771
|
attrs.$observe(attrName, function(value) {
|
8683
|
-
|
8772
|
+
if (isString(value)) {
|
8773
|
+
destination[scopeName] = value;
|
8774
|
+
}
|
8684
8775
|
});
|
8685
8776
|
attrs.$$observers[attrName].$$scope = scope;
|
8686
|
-
if (attrs[attrName]) {
|
8777
|
+
if (isString(attrs[attrName])) {
|
8687
8778
|
// If the attribute has been provided then we trigger an interpolation to ensure
|
8688
8779
|
// the value is there for use in the link fn
|
8689
8780
|
destination[scopeName] = $interpolate(attrs[attrName])(scope);
|
@@ -8691,11 +8782,13 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
|
|
8691
8782
|
break;
|
8692
8783
|
|
8693
8784
|
case '=':
|
8694
|
-
if (
|
8695
|
-
|
8785
|
+
if (!hasOwnProperty.call(attrs, attrName)) {
|
8786
|
+
if (optional) break;
|
8787
|
+
attrs[attrName] = void 0;
|
8696
8788
|
}
|
8697
|
-
|
8789
|
+
if (optional && !attrs[attrName]) break;
|
8698
8790
|
|
8791
|
+
parentGet = $parse(attrs[attrName]);
|
8699
8792
|
if (parentGet.literal) {
|
8700
8793
|
compare = equals;
|
8701
8794
|
} else {
|
@@ -8734,7 +8827,8 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
|
|
8734
8827
|
break;
|
8735
8828
|
|
8736
8829
|
case '&':
|
8737
|
-
|
8830
|
+
// Don't assign Object.prototype method to scope
|
8831
|
+
parentGet = attrs.hasOwnProperty(attrName) ? $parse(attrs[attrName]) : noop;
|
8738
8832
|
|
8739
8833
|
// Don't assign noop to destination if expression is not valid
|
8740
8834
|
if (parentGet === noop && optional) break;
|
@@ -9111,6 +9205,29 @@ function $ExceptionHandlerProvider() {
|
|
9111
9205
|
}];
|
9112
9206
|
}
|
9113
9207
|
|
9208
|
+
var $$ForceReflowProvider = function() {
|
9209
|
+
this.$get = ['$document', function($document) {
|
9210
|
+
return function(domNode) {
|
9211
|
+
//the line below will force the browser to perform a repaint so
|
9212
|
+
//that all the animated elements within the animation frame will
|
9213
|
+
//be properly updated and drawn on screen. This is required to
|
9214
|
+
//ensure that the preparation animation is properly flushed so that
|
9215
|
+
//the active state picks up from there. DO NOT REMOVE THIS LINE.
|
9216
|
+
//DO NOT OPTIMIZE THIS LINE. THE MINIFIER WILL REMOVE IT OTHERWISE WHICH
|
9217
|
+
//WILL RESULT IN AN UNPREDICTABLE BUG THAT IS VERY HARD TO TRACK DOWN AND
|
9218
|
+
//WILL TAKE YEARS AWAY FROM YOUR LIFE.
|
9219
|
+
if (domNode) {
|
9220
|
+
if (!domNode.nodeType && domNode instanceof jqLite) {
|
9221
|
+
domNode = domNode[0];
|
9222
|
+
}
|
9223
|
+
} else {
|
9224
|
+
domNode = $document[0].body;
|
9225
|
+
}
|
9226
|
+
return domNode.offsetWidth + 1;
|
9227
|
+
};
|
9228
|
+
}];
|
9229
|
+
};
|
9230
|
+
|
9114
9231
|
var APPLICATION_JSON = 'application/json';
|
9115
9232
|
var CONTENT_TYPE_APPLICATION_JSON = {'Content-Type': APPLICATION_JSON + ';charset=utf-8'};
|
9116
9233
|
var JSON_START = /^\[|^\{(?!\{)/;
|
@@ -9119,6 +9236,12 @@ var JSON_ENDS = {
|
|
9119
9236
|
'{': /}$/
|
9120
9237
|
};
|
9121
9238
|
var JSON_PROTECTION_PREFIX = /^\)\]\}',?\n/;
|
9239
|
+
var $httpMinErr = minErr('$http');
|
9240
|
+
var $httpMinErrLegacyFn = function(method) {
|
9241
|
+
return function() {
|
9242
|
+
throw $httpMinErr('legacy', 'The method `{0}` on the promise returned from `$http` has been disabled.', method);
|
9243
|
+
};
|
9244
|
+
};
|
9122
9245
|
|
9123
9246
|
function serializeValue(v) {
|
9124
9247
|
if (isObject(v)) {
|
@@ -9219,8 +9342,8 @@ function $HttpParamSerializerJQLikeProvider() {
|
|
9219
9342
|
function serialize(toSerialize, prefix, topLevel) {
|
9220
9343
|
if (toSerialize === null || isUndefined(toSerialize)) return;
|
9221
9344
|
if (isArray(toSerialize)) {
|
9222
|
-
forEach(toSerialize, function(value) {
|
9223
|
-
serialize(value, prefix + '[]');
|
9345
|
+
forEach(toSerialize, function(value, index) {
|
9346
|
+
serialize(value, prefix + '[' + (isObject(value) ? index : '') + ']');
|
9224
9347
|
});
|
9225
9348
|
} else if (isObject(toSerialize) && !isDate(toSerialize)) {
|
9226
9349
|
forEachSorted(toSerialize, function(value, key) {
|
@@ -9441,6 +9564,30 @@ function $HttpProvider() {
|
|
9441
9564
|
return useApplyAsync;
|
9442
9565
|
};
|
9443
9566
|
|
9567
|
+
var useLegacyPromise = true;
|
9568
|
+
/**
|
9569
|
+
* @ngdoc method
|
9570
|
+
* @name $httpProvider#useLegacyPromiseExtensions
|
9571
|
+
* @description
|
9572
|
+
*
|
9573
|
+
* Configure `$http` service to return promises without the shorthand methods `success` and `error`.
|
9574
|
+
* This should be used to make sure that applications work without these methods.
|
9575
|
+
*
|
9576
|
+
* Defaults to false. If no value is specified, returns the current configured value.
|
9577
|
+
*
|
9578
|
+
* @param {boolean=} value If true, `$http` will return a normal promise without the `success` and `error` methods.
|
9579
|
+
*
|
9580
|
+
* @returns {boolean|Object} If a value is specified, returns the $httpProvider for chaining.
|
9581
|
+
* otherwise, returns the current configured value.
|
9582
|
+
**/
|
9583
|
+
this.useLegacyPromiseExtensions = function(value) {
|
9584
|
+
if (isDefined(value)) {
|
9585
|
+
useLegacyPromise = !!value;
|
9586
|
+
return this;
|
9587
|
+
}
|
9588
|
+
return useLegacyPromise;
|
9589
|
+
};
|
9590
|
+
|
9444
9591
|
/**
|
9445
9592
|
* @ngdoc property
|
9446
9593
|
* @name $httpProvider#interceptors
|
@@ -9507,17 +9654,15 @@ function $HttpProvider() {
|
|
9507
9654
|
*
|
9508
9655
|
* ## General usage
|
9509
9656
|
* The `$http` service is a function which takes a single argument — a configuration object —
|
9510
|
-
* that is used to generate an HTTP request and returns a {@link ng.$q promise}
|
9511
|
-
* with two $http specific methods: `success` and `error`.
|
9657
|
+
* that is used to generate an HTTP request and returns a {@link ng.$q promise}.
|
9512
9658
|
*
|
9513
9659
|
* ```js
|
9514
9660
|
* // Simple GET request example :
|
9515
9661
|
* $http.get('/someUrl').
|
9516
|
-
*
|
9662
|
+
* then(function(response) {
|
9517
9663
|
* // this callback will be called asynchronously
|
9518
9664
|
* // when the response is available
|
9519
|
-
* })
|
9520
|
-
* error(function(data, status, headers, config) {
|
9665
|
+
* }, function(response) {
|
9521
9666
|
* // called asynchronously if an error occurs
|
9522
9667
|
* // or server returns response with an error status.
|
9523
9668
|
* });
|
@@ -9526,21 +9671,23 @@ function $HttpProvider() {
|
|
9526
9671
|
* ```js
|
9527
9672
|
* // Simple POST request example (passing data) :
|
9528
9673
|
* $http.post('/someUrl', {msg:'hello word!'}).
|
9529
|
-
*
|
9674
|
+
* then(function(response) {
|
9530
9675
|
* // this callback will be called asynchronously
|
9531
9676
|
* // when the response is available
|
9532
|
-
* })
|
9533
|
-
* error(function(data, status, headers, config) {
|
9677
|
+
* }, function(response) {
|
9534
9678
|
* // called asynchronously if an error occurs
|
9535
9679
|
* // or server returns response with an error status.
|
9536
9680
|
* });
|
9537
9681
|
* ```
|
9538
9682
|
*
|
9683
|
+
* The response object has these properties:
|
9539
9684
|
*
|
9540
|
-
*
|
9541
|
-
*
|
9542
|
-
*
|
9543
|
-
*
|
9685
|
+
* - **data** – `{string|Object}` – The response body transformed with the transform
|
9686
|
+
* functions.
|
9687
|
+
* - **status** – `{number}` – HTTP status code of the response.
|
9688
|
+
* - **headers** – `{function([headerName])}` – Header getter function.
|
9689
|
+
* - **config** – `{Object}` – The configuration object that was used to generate the request.
|
9690
|
+
* - **statusText** – `{string}` – HTTP status text of the response.
|
9544
9691
|
*
|
9545
9692
|
* A response status code between 200 and 299 is considered a success status and
|
9546
9693
|
* will result in the success callback being called. Note that if the response is a redirect,
|
@@ -9564,8 +9711,8 @@ function $HttpProvider() {
|
|
9564
9711
|
* request data must be passed in for POST/PUT requests.
|
9565
9712
|
*
|
9566
9713
|
* ```js
|
9567
|
-
* $http.get('/someUrl').
|
9568
|
-
* $http.post('/someUrl', data).
|
9714
|
+
* $http.get('/someUrl').then(successCallback);
|
9715
|
+
* $http.post('/someUrl', data).then(successCallback);
|
9569
9716
|
* ```
|
9570
9717
|
*
|
9571
9718
|
* Complete list of shortcut methods:
|
@@ -9579,6 +9726,14 @@ function $HttpProvider() {
|
|
9579
9726
|
* - {@link ng.$http#patch $http.patch}
|
9580
9727
|
*
|
9581
9728
|
*
|
9729
|
+
* ## Deprecation Notice
|
9730
|
+
* <div class="alert alert-danger">
|
9731
|
+
* The `$http` legacy promise methods `success` and `error` have been deprecated.
|
9732
|
+
* Use the standard `then` method instead.
|
9733
|
+
* If {@link $httpProvider#useLegacyPromiseExtensions `$httpProvider.useLegacyPromiseExtensions`} is set to
|
9734
|
+
* `false` then these methods will throw {@link $http:legacy `$http/legacy`} error.
|
9735
|
+
* </div>
|
9736
|
+
*
|
9582
9737
|
* ## Setting HTTP Headers
|
9583
9738
|
*
|
9584
9739
|
* The $http service will automatically add certain HTTP headers to all requests. These defaults
|
@@ -9622,7 +9777,7 @@ function $HttpProvider() {
|
|
9622
9777
|
* data: { test: 'test' }
|
9623
9778
|
* }
|
9624
9779
|
*
|
9625
|
-
* $http(req).
|
9780
|
+
* $http(req).then(function(){...}, function(){...});
|
9626
9781
|
* ```
|
9627
9782
|
*
|
9628
9783
|
* ## Transforming Requests and Responses
|
@@ -9854,7 +10009,6 @@ function $HttpProvider() {
|
|
9854
10009
|
* In order to prevent collisions in environments where multiple Angular apps share the
|
9855
10010
|
* same domain or subdomain, we recommend that each application uses unique cookie name.
|
9856
10011
|
*
|
9857
|
-
*
|
9858
10012
|
* @param {object} config Object describing the request to be made and how it should be
|
9859
10013
|
* processed. The object has following properties:
|
9860
10014
|
*
|
@@ -9899,20 +10053,9 @@ function $HttpProvider() {
|
|
9899
10053
|
* - **responseType** - `{string}` - see
|
9900
10054
|
* [XMLHttpRequest.responseType](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest#xmlhttprequest-responsetype).
|
9901
10055
|
*
|
9902
|
-
* @returns {HttpPromise} Returns a {@link ng.$q
|
9903
|
-
*
|
9904
|
-
* method takes two arguments a success and an error callback which will be called with a
|
9905
|
-
* response object. The `success` and `error` methods take a single argument - a function that
|
9906
|
-
* will be called when the request succeeds or fails respectively. The arguments passed into
|
9907
|
-
* these functions are destructured representation of the response object passed into the
|
9908
|
-
* `then` method. The response object has these properties:
|
10056
|
+
* @returns {HttpPromise} Returns a {@link ng.$q `Promise}` that will be resolved to a response object
|
10057
|
+
* when the request succeeds or fails.
|
9909
10058
|
*
|
9910
|
-
* - **data** – `{string|Object}` – The response body transformed with the transform
|
9911
|
-
* functions.
|
9912
|
-
* - **status** – `{number}` – HTTP status code of the response.
|
9913
|
-
* - **headers** – `{function([headerName])}` – Header getter function.
|
9914
|
-
* - **config** – `{Object}` – The configuration object that was used to generate the request.
|
9915
|
-
* - **statusText** – `{string}` – HTTP status text of the response.
|
9916
10059
|
*
|
9917
10060
|
* @property {Array.<Object>} pendingRequests Array of config objects for currently pending
|
9918
10061
|
* requests. This is primarily meant to be used for debugging purposes.
|
@@ -9954,13 +10097,12 @@ function $HttpProvider() {
|
|
9954
10097
|
$scope.response = null;
|
9955
10098
|
|
9956
10099
|
$http({method: $scope.method, url: $scope.url, cache: $templateCache}).
|
9957
|
-
|
9958
|
-
$scope.status = status;
|
9959
|
-
$scope.data = data;
|
9960
|
-
})
|
9961
|
-
|
9962
|
-
$scope.
|
9963
|
-
$scope.status = status;
|
10100
|
+
then(function(response) {
|
10101
|
+
$scope.status = response.status;
|
10102
|
+
$scope.data = response.data;
|
10103
|
+
}, function(response) {
|
10104
|
+
$scope.data = response.data || "Request failed";
|
10105
|
+
$scope.status = response.status;
|
9964
10106
|
});
|
9965
10107
|
};
|
9966
10108
|
|
@@ -10065,23 +10207,28 @@ function $HttpProvider() {
|
|
10065
10207
|
promise = promise.then(thenFn, rejectFn);
|
10066
10208
|
}
|
10067
10209
|
|
10068
|
-
|
10069
|
-
|
10210
|
+
if (useLegacyPromise) {
|
10211
|
+
promise.success = function(fn) {
|
10212
|
+
assertArgFn(fn, 'fn');
|
10070
10213
|
|
10071
|
-
|
10072
|
-
|
10073
|
-
|
10074
|
-
|
10075
|
-
|
10214
|
+
promise.then(function(response) {
|
10215
|
+
fn(response.data, response.status, response.headers, config);
|
10216
|
+
});
|
10217
|
+
return promise;
|
10218
|
+
};
|
10076
10219
|
|
10077
|
-
|
10078
|
-
|
10220
|
+
promise.error = function(fn) {
|
10221
|
+
assertArgFn(fn, 'fn');
|
10079
10222
|
|
10080
|
-
|
10081
|
-
|
10082
|
-
|
10083
|
-
|
10084
|
-
|
10223
|
+
promise.then(null, function(response) {
|
10224
|
+
fn(response.data, response.status, response.headers, config);
|
10225
|
+
});
|
10226
|
+
return promise;
|
10227
|
+
};
|
10228
|
+
} else {
|
10229
|
+
promise.success = $httpMinErrLegacyFn('success');
|
10230
|
+
promise.error = $httpMinErrLegacyFn('error');
|
10231
|
+
}
|
10085
10232
|
|
10086
10233
|
return promise;
|
10087
10234
|
|
@@ -10460,7 +10607,7 @@ function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDoc
|
|
10460
10607
|
xhr.onload = function requestLoaded() {
|
10461
10608
|
var statusText = xhr.statusText || '';
|
10462
10609
|
|
10463
|
-
// responseText is the old-school way of retrieving response (supported by
|
10610
|
+
// responseText is the old-school way of retrieving response (supported by IE9)
|
10464
10611
|
// response/responseType properties were introduced in XHR Level2 spec (supported by IE10)
|
10465
10612
|
var response = ('response' in xhr) ? xhr.response : xhr.responseText;
|
10466
10613
|
|
@@ -11098,7 +11245,7 @@ function $IntervalProvider() {
|
|
11098
11245
|
* @description
|
11099
11246
|
* Cancels a task associated with the `promise`.
|
11100
11247
|
*
|
11101
|
-
* @param {
|
11248
|
+
* @param {Promise=} promise returned by the `$interval` function.
|
11102
11249
|
* @returns {boolean} Returns `true` if the task was successfully canceled.
|
11103
11250
|
*/
|
11104
11251
|
interval.cancel = function(promise) {
|
@@ -11125,75 +11272,6 @@ function $IntervalProvider() {
|
|
11125
11272
|
*
|
11126
11273
|
* * `id` – `{string}` – locale id formatted as `languageId-countryId` (e.g. `en-us`)
|
11127
11274
|
*/
|
11128
|
-
function $LocaleProvider() {
|
11129
|
-
this.$get = function() {
|
11130
|
-
return {
|
11131
|
-
id: 'en-us',
|
11132
|
-
|
11133
|
-
NUMBER_FORMATS: {
|
11134
|
-
DECIMAL_SEP: '.',
|
11135
|
-
GROUP_SEP: ',',
|
11136
|
-
PATTERNS: [
|
11137
|
-
{ // Decimal Pattern
|
11138
|
-
minInt: 1,
|
11139
|
-
minFrac: 0,
|
11140
|
-
maxFrac: 3,
|
11141
|
-
posPre: '',
|
11142
|
-
posSuf: '',
|
11143
|
-
negPre: '-',
|
11144
|
-
negSuf: '',
|
11145
|
-
gSize: 3,
|
11146
|
-
lgSize: 3
|
11147
|
-
},{ //Currency Pattern
|
11148
|
-
minInt: 1,
|
11149
|
-
minFrac: 2,
|
11150
|
-
maxFrac: 2,
|
11151
|
-
posPre: '\u00A4',
|
11152
|
-
posSuf: '',
|
11153
|
-
negPre: '(\u00A4',
|
11154
|
-
negSuf: ')',
|
11155
|
-
gSize: 3,
|
11156
|
-
lgSize: 3
|
11157
|
-
}
|
11158
|
-
],
|
11159
|
-
CURRENCY_SYM: '$'
|
11160
|
-
},
|
11161
|
-
|
11162
|
-
DATETIME_FORMATS: {
|
11163
|
-
MONTH:
|
11164
|
-
'January,February,March,April,May,June,July,August,September,October,November,December'
|
11165
|
-
.split(','),
|
11166
|
-
SHORTMONTH: 'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'.split(','),
|
11167
|
-
DAY: 'Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday'.split(','),
|
11168
|
-
SHORTDAY: 'Sun,Mon,Tue,Wed,Thu,Fri,Sat'.split(','),
|
11169
|
-
AMPMS: ['AM','PM'],
|
11170
|
-
medium: 'MMM d, y h:mm:ss a',
|
11171
|
-
'short': 'M/d/yy h:mm a',
|
11172
|
-
fullDate: 'EEEE, MMMM d, y',
|
11173
|
-
longDate: 'MMMM d, y',
|
11174
|
-
mediumDate: 'MMM d, y',
|
11175
|
-
shortDate: 'M/d/yy',
|
11176
|
-
mediumTime: 'h:mm:ss a',
|
11177
|
-
shortTime: 'h:mm a',
|
11178
|
-
ERANAMES: [
|
11179
|
-
"Before Christ",
|
11180
|
-
"Anno Domini"
|
11181
|
-
],
|
11182
|
-
ERAS: [
|
11183
|
-
"BC",
|
11184
|
-
"AD"
|
11185
|
-
]
|
11186
|
-
},
|
11187
|
-
|
11188
|
-
pluralCat: function(num) {
|
11189
|
-
if (num === 1) {
|
11190
|
-
return 'one';
|
11191
|
-
}
|
11192
|
-
return 'other';
|
11193
|
-
}
|
11194
|
-
};
|
11195
|
-
};
|
11196
|
-
}
|
11197
11275
|
|
11198
11276
|
var PATH_MATCH = /^([^\?#]*)(\?([^#]*))?(#(.*))?$/,
|
11199
11277
|
DEFAULT_PORTS = {'http': 80, 'https': 443, 'ftp': 21};
|
@@ -11284,12 +11362,12 @@ function serverBase(url) {
|
|
11284
11362
|
*
|
11285
11363
|
* @constructor
|
11286
11364
|
* @param {string} appBase application base URL
|
11365
|
+
* @param {string} appBaseNoFile application base URL stripped of any filename
|
11287
11366
|
* @param {string} basePrefix url path prefix
|
11288
11367
|
*/
|
11289
|
-
function LocationHtml5Url(appBase, basePrefix) {
|
11368
|
+
function LocationHtml5Url(appBase, appBaseNoFile, basePrefix) {
|
11290
11369
|
this.$$html5 = true;
|
11291
11370
|
basePrefix = basePrefix || '';
|
11292
|
-
var appBaseNoFile = stripFile(appBase);
|
11293
11371
|
parseAbsoluteUrl(appBase, this);
|
11294
11372
|
|
11295
11373
|
|
@@ -11363,10 +11441,10 @@ function LocationHtml5Url(appBase, basePrefix) {
|
|
11363
11441
|
*
|
11364
11442
|
* @constructor
|
11365
11443
|
* @param {string} appBase application base URL
|
11444
|
+
* @param {string} appBaseNoFile application base URL stripped of any filename
|
11366
11445
|
* @param {string} hashPrefix hashbang prefix
|
11367
11446
|
*/
|
11368
|
-
function LocationHashbangUrl(appBase, hashPrefix) {
|
11369
|
-
var appBaseNoFile = stripFile(appBase);
|
11447
|
+
function LocationHashbangUrl(appBase, appBaseNoFile, hashPrefix) {
|
11370
11448
|
|
11371
11449
|
parseAbsoluteUrl(appBase, this);
|
11372
11450
|
|
@@ -11475,14 +11553,13 @@ function LocationHashbangUrl(appBase, hashPrefix) {
|
|
11475
11553
|
*
|
11476
11554
|
* @constructor
|
11477
11555
|
* @param {string} appBase application base URL
|
11556
|
+
* @param {string} appBaseNoFile application base URL stripped of any filename
|
11478
11557
|
* @param {string} hashPrefix hashbang prefix
|
11479
11558
|
*/
|
11480
|
-
function LocationHashbangInHtml5Url(appBase, hashPrefix) {
|
11559
|
+
function LocationHashbangInHtml5Url(appBase, appBaseNoFile, hashPrefix) {
|
11481
11560
|
this.$$html5 = true;
|
11482
11561
|
LocationHashbangUrl.apply(this, arguments);
|
11483
11562
|
|
11484
|
-
var appBaseNoFile = stripFile(appBase);
|
11485
|
-
|
11486
11563
|
this.$$parseLinkUrl = function(url, relHref) {
|
11487
11564
|
if (relHref && relHref[0] === '#') {
|
11488
11565
|
// special case for links to hash fragments:
|
@@ -11512,7 +11589,7 @@ function LocationHashbangInHtml5Url(appBase, hashPrefix) {
|
|
11512
11589
|
hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : '';
|
11513
11590
|
|
11514
11591
|
this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash;
|
11515
|
-
// include hashPrefix in $$absUrl when $$url is empty so
|
11592
|
+
// include hashPrefix in $$absUrl when $$url is empty so IE9 does not reload page because of removal of '#'
|
11516
11593
|
this.$$absUrl = appBase + hashPrefix + this.$$url;
|
11517
11594
|
};
|
11518
11595
|
|
@@ -12021,7 +12098,9 @@ function $LocationProvider() {
|
|
12021
12098
|
appBase = stripHash(initialUrl);
|
12022
12099
|
LocationMode = LocationHashbangUrl;
|
12023
12100
|
}
|
12024
|
-
|
12101
|
+
var appBaseNoFile = stripFile(appBase);
|
12102
|
+
|
12103
|
+
$location = new LocationMode(appBase, appBaseNoFile, '#' + hashPrefix);
|
12025
12104
|
$location.$$parseLinkUrl(initialUrl, initialUrl);
|
12026
12105
|
|
12027
12106
|
$location.$$state = $browser.state();
|
@@ -12101,6 +12180,13 @@ function $LocationProvider() {
|
|
12101
12180
|
|
12102
12181
|
// update $location when $browser url changes
|
12103
12182
|
$browser.onUrlChange(function(newUrl, newState) {
|
12183
|
+
|
12184
|
+
if (isUndefined(beginsWith(appBaseNoFile, newUrl))) {
|
12185
|
+
// If we are navigating outside of the app then force a reload
|
12186
|
+
$window.location.href = newUrl;
|
12187
|
+
return;
|
12188
|
+
}
|
12189
|
+
|
12104
12190
|
$rootScope.$evalAsync(function() {
|
12105
12191
|
var oldUrl = $location.absUrl();
|
12106
12192
|
var oldState = $location.$$state;
|
@@ -13950,29 +14036,6 @@ Parser.prototype = {
|
|
13950
14036
|
}
|
13951
14037
|
};
|
13952
14038
|
|
13953
|
-
//////////////////////////////////////////////////
|
13954
|
-
// Parser helper functions
|
13955
|
-
//////////////////////////////////////////////////
|
13956
|
-
|
13957
|
-
function setter(obj, path, setValue, fullExp) {
|
13958
|
-
ensureSafeObject(obj, fullExp);
|
13959
|
-
|
13960
|
-
var element = path.split('.'), key;
|
13961
|
-
for (var i = 0; element.length > 1; i++) {
|
13962
|
-
key = ensureSafeMemberName(element.shift(), fullExp);
|
13963
|
-
var propertyObj = ensureSafeObject(obj[key], fullExp);
|
13964
|
-
if (!propertyObj) {
|
13965
|
-
propertyObj = {};
|
13966
|
-
obj[key] = propertyObj;
|
13967
|
-
}
|
13968
|
-
obj = propertyObj;
|
13969
|
-
}
|
13970
|
-
key = ensureSafeMemberName(element.shift(), fullExp);
|
13971
|
-
ensureSafeObject(obj[key], fullExp);
|
13972
|
-
obj[key] = setValue;
|
13973
|
-
return setValue;
|
13974
|
-
}
|
13975
|
-
|
13976
14039
|
var getterFnCacheDefault = createMap();
|
13977
14040
|
var getterFnCacheExpensive = createMap();
|
13978
14041
|
|
@@ -14041,13 +14104,14 @@ function $ParseProvider() {
|
|
14041
14104
|
var cacheDefault = createMap();
|
14042
14105
|
var cacheExpensive = createMap();
|
14043
14106
|
|
14044
|
-
this.$get = ['$filter',
|
14107
|
+
this.$get = ['$filter', function($filter) {
|
14108
|
+
var noUnsafeEval = csp().noUnsafeEval;
|
14045
14109
|
var $parseOptions = {
|
14046
|
-
csp:
|
14110
|
+
csp: noUnsafeEval,
|
14047
14111
|
expensiveChecks: false
|
14048
14112
|
},
|
14049
14113
|
$parseOptionsExpensive = {
|
14050
|
-
csp:
|
14114
|
+
csp: noUnsafeEval,
|
14051
14115
|
expensiveChecks: true
|
14052
14116
|
};
|
14053
14117
|
|
@@ -14522,8 +14586,11 @@ function qFactory(nextTick, exceptionHandler) {
|
|
14522
14586
|
this.$$state = { status: 0 };
|
14523
14587
|
}
|
14524
14588
|
|
14525
|
-
Promise.prototype
|
14589
|
+
extend(Promise.prototype, {
|
14526
14590
|
then: function(onFulfilled, onRejected, progressBack) {
|
14591
|
+
if (isUndefined(onFulfilled) && isUndefined(onRejected) && isUndefined(progressBack)) {
|
14592
|
+
return this;
|
14593
|
+
}
|
14527
14594
|
var result = new Deferred();
|
14528
14595
|
|
14529
14596
|
this.$$state.pending = this.$$state.pending || [];
|
@@ -14544,7 +14611,7 @@ function qFactory(nextTick, exceptionHandler) {
|
|
14544
14611
|
return handleCallback(error, false, callback);
|
14545
14612
|
}, progressBack);
|
14546
14613
|
}
|
14547
|
-
};
|
14614
|
+
});
|
14548
14615
|
|
14549
14616
|
//Faster, more basic than angular.bind http://jsperf.com/angular-bind-vs-custom-vs-native
|
14550
14617
|
function simpleBind(context, fn) {
|
@@ -14591,7 +14658,7 @@ function qFactory(nextTick, exceptionHandler) {
|
|
14591
14658
|
this.notify = simpleBind(this, this.notify);
|
14592
14659
|
}
|
14593
14660
|
|
14594
|
-
Deferred.prototype
|
14661
|
+
extend(Deferred.prototype, {
|
14595
14662
|
resolve: function(val) {
|
14596
14663
|
if (this.promise.$$state.status) return;
|
14597
14664
|
if (val === this.promise) {
|
@@ -14654,7 +14721,7 @@ function qFactory(nextTick, exceptionHandler) {
|
|
14654
14721
|
});
|
14655
14722
|
}
|
14656
14723
|
}
|
14657
|
-
};
|
14724
|
+
});
|
14658
14725
|
|
14659
14726
|
/**
|
14660
14727
|
* @ngdoc method
|
@@ -14737,6 +14804,9 @@ function qFactory(nextTick, exceptionHandler) {
|
|
14737
14804
|
* the promise comes from a source that can't be trusted.
|
14738
14805
|
*
|
14739
14806
|
* @param {*} value Value or a promise
|
14807
|
+
* @param {Function=} successCallback
|
14808
|
+
* @param {Function=} errorCallback
|
14809
|
+
* @param {Function=} progressCallback
|
14740
14810
|
* @returns {Promise} Returns a promise of the passed value or promise
|
14741
14811
|
*/
|
14742
14812
|
|
@@ -14756,6 +14826,9 @@ function qFactory(nextTick, exceptionHandler) {
|
|
14756
14826
|
* Alias of {@link ng.$q#when when} to maintain naming consistency with ES6.
|
14757
14827
|
*
|
14758
14828
|
* @param {*} value Value or a promise
|
14829
|
+
* @param {Function=} successCallback
|
14830
|
+
* @param {Function=} errorCallback
|
14831
|
+
* @param {Function=} progressCallback
|
14759
14832
|
* @returns {Promise} Returns a promise of the passed value or promise
|
14760
14833
|
*/
|
14761
14834
|
var resolve = when;
|
@@ -15011,12 +15084,9 @@ function $RootScopeProvider() {
|
|
15011
15084
|
* A root scope can be retrieved using the {@link ng.$rootScope $rootScope} key from the
|
15012
15085
|
* {@link auto.$injector $injector}. Child scopes are created using the
|
15013
15086
|
* {@link ng.$rootScope.Scope#$new $new()} method. (Most scopes are created automatically when
|
15014
|
-
* compiled HTML template is executed.)
|
15087
|
+
* compiled HTML template is executed.) See also the {@link guide/scope Scopes guide} for
|
15088
|
+
* an in-depth introduction and usage examples.
|
15015
15089
|
*
|
15016
|
-
* Here is a simple scope snippet to show how you can interact with the scope.
|
15017
|
-
* ```html
|
15018
|
-
* <file src="./test/ng/rootScopeSpec.js" tag="docs1" />
|
15019
|
-
* ```
|
15020
15090
|
*
|
15021
15091
|
* # Inheritance
|
15022
15092
|
* A scope can inherit from a parent scope, as in this example:
|
@@ -15178,9 +15248,9 @@ function $RootScopeProvider() {
|
|
15178
15248
|
*
|
15179
15249
|
*
|
15180
15250
|
* If you want to be notified whenever {@link ng.$rootScope.Scope#$digest $digest} is called,
|
15181
|
-
* you can register a `watchExpression` function with no `listener`. (
|
15182
|
-
*
|
15183
|
-
*
|
15251
|
+
* you can register a `watchExpression` function with no `listener`. (Be prepared for
|
15252
|
+
* multiple calls to your `watchExpression` because it will execute multiple times in a
|
15253
|
+
* single {@link ng.$rootScope.Scope#$digest $digest} cycle if a change is detected.)
|
15184
15254
|
*
|
15185
15255
|
* After a watcher is registered with the scope, the `listener` fn is called asynchronously
|
15186
15256
|
* (via {@link ng.$rootScope.Scope#$evalAsync $evalAsync}) to initialize the
|
@@ -15942,11 +16012,14 @@ function $RootScopeProvider() {
|
|
15942
16012
|
$apply: function(expr) {
|
15943
16013
|
try {
|
15944
16014
|
beginPhase('$apply');
|
15945
|
-
|
16015
|
+
try {
|
16016
|
+
return this.$eval(expr);
|
16017
|
+
} finally {
|
16018
|
+
clearPhase();
|
16019
|
+
}
|
15946
16020
|
} catch (e) {
|
15947
16021
|
$exceptionHandler(e);
|
15948
16022
|
} finally {
|
15949
|
-
clearPhase();
|
15950
16023
|
try {
|
15951
16024
|
$rootScope.$digest();
|
15952
16025
|
} catch (e) {
|
@@ -16862,10 +16935,10 @@ function $SceDelegateProvider() {
|
|
16862
16935
|
* - There are exactly **two wildcard sequences** - `*` and `**`. All other characters
|
16863
16936
|
* match themselves.
|
16864
16937
|
* - `*`: matches zero or more occurrences of any character other than one of the following 6
|
16865
|
-
* characters: '`:`', '`/`', '`.`', '`?`', '`&`' and '
|
16938
|
+
* characters: '`:`', '`/`', '`.`', '`?`', '`&`' and '`;`'. It's a useful wildcard for use
|
16866
16939
|
* in a whitelist.
|
16867
16940
|
* - `**`: matches zero or more occurrences of *any* character. As such, it's not
|
16868
|
-
*
|
16941
|
+
* appropriate for use in a scheme, domain, etc. as it would match too much. (e.g.
|
16869
16942
|
* http://**.example.com/ would match http://evil.com/?ignore=.example.com/ and that might
|
16870
16943
|
* not have been the intention.) Its usage at the very end of the path is ok. (e.g.
|
16871
16944
|
* http://foo.example.com/templates/**).
|
@@ -16873,11 +16946,11 @@ function $SceDelegateProvider() {
|
|
16873
16946
|
* - *Caveat*: While regular expressions are powerful and offer great flexibility, their syntax
|
16874
16947
|
* (and all the inevitable escaping) makes them *harder to maintain*. It's easy to
|
16875
16948
|
* accidentally introduce a bug when one updates a complex expression (imho, all regexes should
|
16876
|
-
* have good test coverage
|
16949
|
+
* have good test coverage). For instance, the use of `.` in the regex is correct only in a
|
16877
16950
|
* small number of cases. A `.` character in the regex used when matching the scheme or a
|
16878
16951
|
* subdomain could be matched against a `:` or literal `.` that was likely not intended. It
|
16879
16952
|
* is highly recommended to use the string patterns and only fall back to regular expressions
|
16880
|
-
*
|
16953
|
+
* as a last resort.
|
16881
16954
|
* - The regular expression must be an instance of RegExp (i.e. not a string.) It is
|
16882
16955
|
* matched against the **entire** *normalized / absolute URL* of the resource being tested
|
16883
16956
|
* (even when the RegExp did not have the `^` and `$` codes.) In addition, any flags
|
@@ -16887,7 +16960,7 @@ function $SceDelegateProvider() {
|
|
16887
16960
|
* remember to escape your regular expression (and be aware that you might need more than
|
16888
16961
|
* one level of escaping depending on your templating engine and the way you interpolated
|
16889
16962
|
* the value.) Do make use of your platform's escaping mechanism as it might be good
|
16890
|
-
* enough before coding your own.
|
16963
|
+
* enough before coding your own. E.g. Ruby has
|
16891
16964
|
* [Regexp.escape(str)](http://www.ruby-doc.org/core-2.0.0/Regexp.html#method-c-escape)
|
16892
16965
|
* and Python has [re.escape](http://docs.python.org/library/re.html#re.escape).
|
16893
16966
|
* Javascript lacks a similar built in function for escaping. Take a look at Google
|
@@ -17775,20 +17848,13 @@ var originUrl = urlResolve(window.location.href);
|
|
17775
17848
|
*
|
17776
17849
|
* Implementation Notes for IE
|
17777
17850
|
* ---------------------------
|
17778
|
-
* IE
|
17851
|
+
* IE <= 10 normalizes the URL when assigned to the anchor node similar to the other
|
17779
17852
|
* browsers. However, the parsed components will not be set if the URL assigned did not specify
|
17780
17853
|
* them. (e.g. if you assign a.href = "foo", then a.protocol, a.host, etc. will be empty.) We
|
17781
17854
|
* work around that by performing the parsing in a 2nd step by taking a previously normalized
|
17782
17855
|
* URL (e.g. by assigning to a.href) and assigning it a.href again. This correctly populates the
|
17783
17856
|
* properties such as protocol, hostname, port, etc.
|
17784
17857
|
*
|
17785
|
-
* IE7 does not normalize the URL when assigned to an anchor node. (Apparently, it does, if one
|
17786
|
-
* uses the inner HTML approach to assign the URL as part of an HTML snippet -
|
17787
|
-
* http://stackoverflow.com/a/472729) However, setting img[src] does normalize the URL.
|
17788
|
-
* Unfortunately, setting img[src] to something like "javascript:foo" on IE throws an exception.
|
17789
|
-
* Since the primary usage for normalizing URLs is to sanitize such URLs, we can't use that
|
17790
|
-
* method and IE < 8 is unsupported.
|
17791
|
-
*
|
17792
17858
|
* References:
|
17793
17859
|
* http://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement
|
17794
17860
|
* http://www.aptana.com/reference/html/api/HTMLAnchorElement.html
|
@@ -18068,6 +18134,7 @@ function $FilterProvider($provide) {
|
|
18068
18134
|
* your filters, then you can use capitalization (`myappSubsectionFilterx`) or underscores
|
18069
18135
|
* (`myapp_subsection_filterx`).
|
18070
18136
|
* </div>
|
18137
|
+
* @param {Function} factory If the first argument was a string, a factory function for the filter to be registered.
|
18071
18138
|
* @returns {Object} Registered filter instance, or if a map of filters was provided then a map
|
18072
18139
|
* of the registered filter instances.
|
18073
18140
|
*/
|
@@ -18415,9 +18482,9 @@ function getTypeForFilter(val) {
|
|
18415
18482
|
}
|
18416
18483
|
element(by.model('amount')).clear();
|
18417
18484
|
element(by.model('amount')).sendKeys('-1234');
|
18418
|
-
expect(element(by.id('currency-default')).getText()).toBe('
|
18419
|
-
expect(element(by.id('currency-custom')).getText()).toBe('
|
18420
|
-
expect(element(by.id('currency-no-fractions')).getText()).toBe('
|
18485
|
+
expect(element(by.id('currency-default')).getText()).toBe('-$1,234.00');
|
18486
|
+
expect(element(by.id('currency-custom')).getText()).toBe('-USD$1,234.00');
|
18487
|
+
expect(element(by.id('currency-no-fractions')).getText()).toBe('-USD$1,234');
|
18421
18488
|
});
|
18422
18489
|
</file>
|
18423
18490
|
</example>
|
@@ -19257,6 +19324,10 @@ function orderByFilter($parse) {
|
|
19257
19324
|
if (sortPredicate.length === 0) { sortPredicate = ['+']; }
|
19258
19325
|
|
19259
19326
|
var predicates = processPredicates(sortPredicate, reverseOrder);
|
19327
|
+
// Add a predicate at the end that evaluates to the element index. This makes the
|
19328
|
+
// sort stable as it works as a tie-breaker when all the input predicates cannot
|
19329
|
+
// distinguish between two elements.
|
19330
|
+
predicates.push({ get: function() { return {}; }, descending: reverseOrder ? -1 : 1});
|
19260
19331
|
|
19261
19332
|
// The next three lines are a version of a Swartzian Transform idiom from Perl
|
19262
19333
|
// (sometimes called the Decorate-Sort-Undecorate idiom)
|
@@ -20302,7 +20373,7 @@ function FormController(element, attrs, $scope, $animate, $interpolate) {
|
|
20302
20373
|
* related scope, under this name.
|
20303
20374
|
*/
|
20304
20375
|
var formDirectiveFactory = function(isNgForm) {
|
20305
|
-
return ['$timeout', function($timeout) {
|
20376
|
+
return ['$timeout', '$parse', function($timeout, $parse) {
|
20306
20377
|
var formDirective = {
|
20307
20378
|
name: 'form',
|
20308
20379
|
restrict: isNgForm ? 'EAC' : 'E',
|
@@ -20344,21 +20415,21 @@ var formDirectiveFactory = function(isNgForm) {
|
|
20344
20415
|
}
|
20345
20416
|
|
20346
20417
|
var parentFormCtrl = controller.$$parentForm;
|
20418
|
+
var setter = nameAttr ? getSetter(controller.$name) : noop;
|
20347
20419
|
|
20348
20420
|
if (nameAttr) {
|
20349
|
-
setter(scope, controller
|
20421
|
+
setter(scope, controller);
|
20350
20422
|
attr.$observe(nameAttr, function(newValue) {
|
20351
20423
|
if (controller.$name === newValue) return;
|
20352
|
-
setter(scope,
|
20424
|
+
setter(scope, undefined);
|
20353
20425
|
parentFormCtrl.$$renameControl(controller, newValue);
|
20354
|
-
setter
|
20426
|
+
setter = getSetter(controller.$name);
|
20427
|
+
setter(scope, controller);
|
20355
20428
|
});
|
20356
20429
|
}
|
20357
20430
|
formElement.on('$destroy', function() {
|
20358
20431
|
parentFormCtrl.$removeControl(controller);
|
20359
|
-
|
20360
|
-
setter(scope, attr[nameAttr], undefined, controller.$name);
|
20361
|
-
}
|
20432
|
+
setter(scope, undefined);
|
20362
20433
|
extend(controller, nullFormCtrl); //stop propagating child destruction handlers upwards
|
20363
20434
|
});
|
20364
20435
|
}
|
@@ -20367,6 +20438,14 @@ var formDirectiveFactory = function(isNgForm) {
|
|
20367
20438
|
};
|
20368
20439
|
|
20369
20440
|
return formDirective;
|
20441
|
+
|
20442
|
+
function getSetter(expression) {
|
20443
|
+
if (expression === '') {
|
20444
|
+
//create an assignable expression, so forms with an empty name can be renamed later
|
20445
|
+
return $parse('this[""]').assign;
|
20446
|
+
}
|
20447
|
+
return $parse(expression).assign || noop;
|
20448
|
+
}
|
20370
20449
|
}];
|
20371
20450
|
};
|
20372
20451
|
|
@@ -20379,7 +20458,7 @@ var ngFormDirective = formDirectiveFactory(true);
|
|
20379
20458
|
DIRTY_CLASS: false,
|
20380
20459
|
UNTOUCHED_CLASS: false,
|
20381
20460
|
TOUCHED_CLASS: false,
|
20382
|
-
|
20461
|
+
ngModelMinErr: false,
|
20383
20462
|
*/
|
20384
20463
|
|
20385
20464
|
// Regex code is obtained from SO: https://stackoverflow.com/questions/3143070/javascript-regex-iso-datetime#answer-3143231
|
@@ -21501,7 +21580,11 @@ function baseInputType(scope, element, attr, ctrl, $sniffer, $browser) {
|
|
21501
21580
|
element.on('change', listener);
|
21502
21581
|
|
21503
21582
|
ctrl.$render = function() {
|
21504
|
-
|
21583
|
+
// Workaround for Firefox validation #12102.
|
21584
|
+
var value = ctrl.$isEmpty(ctrl.$viewValue) ? '' : ctrl.$viewValue;
|
21585
|
+
if (element.val() !== value) {
|
21586
|
+
element.val(value);
|
21587
|
+
}
|
21505
21588
|
};
|
21506
21589
|
}
|
21507
21590
|
|
@@ -21612,7 +21695,7 @@ function createDateInputType(type, regexp, parseDate, format) {
|
|
21612
21695
|
|
21613
21696
|
ctrl.$formatters.push(function(value) {
|
21614
21697
|
if (value && !isDate(value)) {
|
21615
|
-
throw
|
21698
|
+
throw ngModelMinErr('datefmt', 'Expected `{0}` to be a date', value);
|
21616
21699
|
}
|
21617
21700
|
if (isValidDate(value)) {
|
21618
21701
|
previousDate = value;
|
@@ -21688,7 +21771,7 @@ function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {
|
|
21688
21771
|
ctrl.$formatters.push(function(value) {
|
21689
21772
|
if (!ctrl.$isEmpty(value)) {
|
21690
21773
|
if (!isNumber(value)) {
|
21691
|
-
throw
|
21774
|
+
throw ngModelMinErr('numfmt', 'Expected `{0}` to be a number', value);
|
21692
21775
|
}
|
21693
21776
|
value = value.toString();
|
21694
21777
|
}
|
@@ -21781,7 +21864,7 @@ function parseConstantExpr($parse, context, name, expression, fallback) {
|
|
21781
21864
|
if (isDefined(expression)) {
|
21782
21865
|
parseFn = $parse(expression);
|
21783
21866
|
if (!parseFn.constant) {
|
21784
|
-
throw
|
21867
|
+
throw ngModelMinErr('constexpr', 'Expected constant expression for `{0}`, but saw ' +
|
21785
21868
|
'`{1}`.', name, expression);
|
21786
21869
|
}
|
21787
21870
|
return parseFn(context);
|
@@ -23067,27 +23150,29 @@ var ngControllerDirective = [function() {
|
|
23067
23150
|
*
|
23068
23151
|
* @element html
|
23069
23152
|
* @description
|
23070
|
-
*
|
23153
|
+
*
|
23154
|
+
* Angular has some features that can break certain
|
23155
|
+
* [CSP (Content Security Policy)](https://developer.mozilla.org/en/Security/CSP) rules.
|
23156
|
+
*
|
23157
|
+
* If you intend to implement these rules then you must tell Angular not to use these features.
|
23071
23158
|
*
|
23072
23159
|
* This is necessary when developing things like Google Chrome Extensions or Universal Windows Apps.
|
23073
23160
|
*
|
23074
|
-
* CSP forbids apps to use `eval` or `Function(string)` generated functions (among other things).
|
23075
|
-
* For Angular to be CSP compatible there are only two things that we need to do differently:
|
23076
23161
|
*
|
23077
|
-
*
|
23078
|
-
* - don't inject custom stylesheet into the document
|
23162
|
+
* The following rules affect Angular:
|
23079
23163
|
*
|
23080
|
-
*
|
23081
|
-
*
|
23082
|
-
*
|
23083
|
-
* be raised.
|
23164
|
+
* * `unsafe-eval`: this rule forbids apps to use `eval` or `Function(string)` generated functions
|
23165
|
+
* (among other things). Angular makes use of this in the {@link $parse} service to provide a 30%
|
23166
|
+
* increase in the speed of evaluating Angular expressions.
|
23084
23167
|
*
|
23085
|
-
*
|
23086
|
-
*
|
23087
|
-
* To make
|
23168
|
+
* * `unsafe-inline`: this rule forbids apps from inject custom styles into the document. Angular
|
23169
|
+
* makes use of this to include some CSS rules (e.g. {@link ngCloak} and {@link ngHide}).
|
23170
|
+
* To make these directives work when a CSP rule is blocking inline styles, you must link to the
|
23171
|
+
* `angular-csp.css` in your HTML manually.
|
23088
23172
|
*
|
23089
|
-
* Angular tries to autodetect if CSP is
|
23090
|
-
*
|
23173
|
+
* If you do not provide `ngCsp` then Angular tries to autodetect if CSP is blocking unsafe-eval
|
23174
|
+
* and automatically deactivates this feature in the {@link $parse} service. This autodetection,
|
23175
|
+
* however, triggers a CSP error to be logged in the console:
|
23091
23176
|
*
|
23092
23177
|
* ```
|
23093
23178
|
* Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of
|
@@ -23096,11 +23181,39 @@ var ngControllerDirective = [function() {
|
|
23096
23181
|
* ```
|
23097
23182
|
*
|
23098
23183
|
* This error is harmless but annoying. To prevent the error from showing up, put the `ngCsp`
|
23099
|
-
* directive on
|
23100
|
-
*
|
23184
|
+
* directive on an element of the HTML document that appears before the `<script>` tag that loads
|
23185
|
+
* the `angular.js` file.
|
23101
23186
|
*
|
23102
23187
|
* *Note: This directive is only available in the `ng-csp` and `data-ng-csp` attribute form.*
|
23103
23188
|
*
|
23189
|
+
* You can specify which of the CSP related Angular features should be deactivated by providing
|
23190
|
+
* a value for the `ng-csp` attribute. The options are as follows:
|
23191
|
+
*
|
23192
|
+
* * no-inline-style: this stops Angular from injecting CSS styles into the DOM
|
23193
|
+
*
|
23194
|
+
* * no-unsafe-eval: this stops Angular from optimising $parse with unsafe eval of strings
|
23195
|
+
*
|
23196
|
+
* You can use these values in the following combinations:
|
23197
|
+
*
|
23198
|
+
*
|
23199
|
+
* * No declaration means that Angular will assume that you can do inline styles, but it will do
|
23200
|
+
* a runtime check for unsafe-eval. E.g. `<body>`. This is backwardly compatible with previous versions
|
23201
|
+
* of Angular.
|
23202
|
+
*
|
23203
|
+
* * A simple `ng-csp` (or `data-ng-csp`) attribute will tell Angular to deactivate both inline
|
23204
|
+
* styles and unsafe eval. E.g. `<body ng-csp>`. This is backwardly compatible with previous versions
|
23205
|
+
* of Angular.
|
23206
|
+
*
|
23207
|
+
* * Specifying only `no-unsafe-eval` tells Angular that we must not use eval, but that we can inject
|
23208
|
+
* inline styles. E.g. `<body ng-csp="no-unsafe-eval">`.
|
23209
|
+
*
|
23210
|
+
* * Specifying only `no-inline-style` tells Angular that we must not inject styles, but that we can
|
23211
|
+
* run eval - no automcatic check for unsafe eval will occur. E.g. `<body ng-csp="no-inline-style">`
|
23212
|
+
*
|
23213
|
+
* * Specifying both `no-unsafe-eval` and `no-inline-style` tells Angular that we must not inject
|
23214
|
+
* styles nor use eval, which is the same as an empty: ng-csp.
|
23215
|
+
* E.g.`<body ng-csp="no-inline-style;no-unsafe-eval">`
|
23216
|
+
*
|
23104
23217
|
* @example
|
23105
23218
|
* This example shows how to apply the `ngCsp` directive to the `html` tag.
|
23106
23219
|
```html
|
@@ -23232,7 +23345,7 @@ var ngControllerDirective = [function() {
|
|
23232
23345
|
|
23233
23346
|
// ngCsp is not implemented as a proper directive any more, because we need it be processed while we
|
23234
23347
|
// bootstrap the system (before $parse is instantiated), for this reason we just have
|
23235
|
-
// the csp
|
23348
|
+
// the csp() fn that looks for the `ng-csp` attribute anywhere in the current doc
|
23236
23349
|
|
23237
23350
|
/**
|
23238
23351
|
* @ngdoc directive
|
@@ -24348,8 +24461,7 @@ var VALID_CLASS = 'ng-valid',
|
|
24348
24461
|
TOUCHED_CLASS = 'ng-touched',
|
24349
24462
|
PENDING_CLASS = 'ng-pending';
|
24350
24463
|
|
24351
|
-
|
24352
|
-
var $ngModelMinErr = new minErr('ngModel');
|
24464
|
+
var ngModelMinErr = minErr('ngModel');
|
24353
24465
|
|
24354
24466
|
/**
|
24355
24467
|
* @ngdoc type
|
@@ -24600,7 +24712,7 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
|
|
24600
24712
|
}
|
24601
24713
|
};
|
24602
24714
|
} else if (!parsedNgModel.assign) {
|
24603
|
-
throw
|
24715
|
+
throw ngModelMinErr('nonassign', "Expression '{0}' is non-assignable. Element: {1}",
|
24604
24716
|
$attr.ngModel, startingTag($element));
|
24605
24717
|
}
|
24606
24718
|
};
|
@@ -24931,7 +25043,7 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
|
|
24931
25043
|
forEach(ctrl.$asyncValidators, function(validator, name) {
|
24932
25044
|
var promise = validator(modelValue, viewValue);
|
24933
25045
|
if (!isPromiseLike(promise)) {
|
24934
|
-
throw
|
25046
|
+
throw ngModelMinErr("$asyncValidators",
|
24935
25047
|
"Expected asynchronous validator to return a promise but got '{0}' instead.", promise);
|
24936
25048
|
}
|
24937
25049
|
setValidity(name, undefined);
|
@@ -25785,7 +25897,7 @@ var ngOptionsMinErr = minErr('ngOptions');
|
|
25785
25897
|
* Consider the following example:
|
25786
25898
|
*
|
25787
25899
|
* ```html
|
25788
|
-
* <select ng-options="item.subItem as item.label for item in values track by item.id" ng-model="selected">
|
25900
|
+
* <select ng-options="item.subItem as item.label for item in values track by item.id" ng-model="selected"></select>
|
25789
25901
|
* ```
|
25790
25902
|
*
|
25791
25903
|
* ```js
|
@@ -26247,7 +26359,7 @@ var ngOptionsDirective = ['$compile', '$parse', function($compile, $parse) {
|
|
26247
26359
|
|
26248
26360
|
forEach(selectedValues, function(value) {
|
26249
26361
|
var option = options.selectValueMap[value];
|
26250
|
-
if (!option.disabled) selections.push(options.getViewValueFromOption(option));
|
26362
|
+
if (option && !option.disabled) selections.push(options.getViewValueFromOption(option));
|
26251
26363
|
});
|
26252
26364
|
|
26253
26365
|
return selections;
|
@@ -28343,17 +28455,145 @@ var minlengthDirective = function() {
|
|
28343
28455
|
};
|
28344
28456
|
};
|
28345
28457
|
|
28346
|
-
|
28347
|
-
|
28348
|
-
|
28349
|
-
|
28458
|
+
if (window.angular.bootstrap) {
|
28459
|
+
//AngularJS is already loaded, so we can return here...
|
28460
|
+
console.log('WARNING: Tried to load angular more than once.');
|
28461
|
+
return;
|
28462
|
+
}
|
28463
|
+
|
28464
|
+
//try to bind to jquery now so that one can write jqLite(document).ready()
|
28465
|
+
//but we will rebind on bootstrap again.
|
28466
|
+
bindJQuery();
|
28467
|
+
|
28468
|
+
publishExternalAPI(angular);
|
28469
|
+
|
28470
|
+
angular.module("ngLocale", [], ["$provide", function($provide) {
|
28471
|
+
var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
|
28472
|
+
function getDecimals(n) {
|
28473
|
+
n = n + '';
|
28474
|
+
var i = n.indexOf('.');
|
28475
|
+
return (i == -1) ? 0 : n.length - i - 1;
|
28476
|
+
}
|
28477
|
+
|
28478
|
+
function getVF(n, opt_precision) {
|
28479
|
+
var v = opt_precision;
|
28480
|
+
|
28481
|
+
if (undefined === v) {
|
28482
|
+
v = Math.min(getDecimals(n), 3);
|
28350
28483
|
}
|
28351
28484
|
|
28352
|
-
|
28353
|
-
|
28354
|
-
|
28485
|
+
var base = Math.pow(10, v);
|
28486
|
+
var f = ((n * base) | 0) % base;
|
28487
|
+
return {v: v, f: f};
|
28488
|
+
}
|
28355
28489
|
|
28356
|
-
|
28490
|
+
$provide.value("$locale", {
|
28491
|
+
"DATETIME_FORMATS": {
|
28492
|
+
"AMPMS": [
|
28493
|
+
"AM",
|
28494
|
+
"PM"
|
28495
|
+
],
|
28496
|
+
"DAY": [
|
28497
|
+
"Sunday",
|
28498
|
+
"Monday",
|
28499
|
+
"Tuesday",
|
28500
|
+
"Wednesday",
|
28501
|
+
"Thursday",
|
28502
|
+
"Friday",
|
28503
|
+
"Saturday"
|
28504
|
+
],
|
28505
|
+
"ERANAMES": [
|
28506
|
+
"Before Christ",
|
28507
|
+
"Anno Domini"
|
28508
|
+
],
|
28509
|
+
"ERAS": [
|
28510
|
+
"BC",
|
28511
|
+
"AD"
|
28512
|
+
],
|
28513
|
+
"FIRSTDAYOFWEEK": 6,
|
28514
|
+
"MONTH": [
|
28515
|
+
"January",
|
28516
|
+
"February",
|
28517
|
+
"March",
|
28518
|
+
"April",
|
28519
|
+
"May",
|
28520
|
+
"June",
|
28521
|
+
"July",
|
28522
|
+
"August",
|
28523
|
+
"September",
|
28524
|
+
"October",
|
28525
|
+
"November",
|
28526
|
+
"December"
|
28527
|
+
],
|
28528
|
+
"SHORTDAY": [
|
28529
|
+
"Sun",
|
28530
|
+
"Mon",
|
28531
|
+
"Tue",
|
28532
|
+
"Wed",
|
28533
|
+
"Thu",
|
28534
|
+
"Fri",
|
28535
|
+
"Sat"
|
28536
|
+
],
|
28537
|
+
"SHORTMONTH": [
|
28538
|
+
"Jan",
|
28539
|
+
"Feb",
|
28540
|
+
"Mar",
|
28541
|
+
"Apr",
|
28542
|
+
"May",
|
28543
|
+
"Jun",
|
28544
|
+
"Jul",
|
28545
|
+
"Aug",
|
28546
|
+
"Sep",
|
28547
|
+
"Oct",
|
28548
|
+
"Nov",
|
28549
|
+
"Dec"
|
28550
|
+
],
|
28551
|
+
"WEEKENDRANGE": [
|
28552
|
+
5,
|
28553
|
+
6
|
28554
|
+
],
|
28555
|
+
"fullDate": "EEEE, MMMM d, y",
|
28556
|
+
"longDate": "MMMM d, y",
|
28557
|
+
"medium": "MMM d, y h:mm:ss a",
|
28558
|
+
"mediumDate": "MMM d, y",
|
28559
|
+
"mediumTime": "h:mm:ss a",
|
28560
|
+
"short": "M/d/yy h:mm a",
|
28561
|
+
"shortDate": "M/d/yy",
|
28562
|
+
"shortTime": "h:mm a"
|
28563
|
+
},
|
28564
|
+
"NUMBER_FORMATS": {
|
28565
|
+
"CURRENCY_SYM": "$",
|
28566
|
+
"DECIMAL_SEP": ".",
|
28567
|
+
"GROUP_SEP": ",",
|
28568
|
+
"PATTERNS": [
|
28569
|
+
{
|
28570
|
+
"gSize": 3,
|
28571
|
+
"lgSize": 3,
|
28572
|
+
"maxFrac": 3,
|
28573
|
+
"minFrac": 0,
|
28574
|
+
"minInt": 1,
|
28575
|
+
"negPre": "-",
|
28576
|
+
"negSuf": "",
|
28577
|
+
"posPre": "",
|
28578
|
+
"posSuf": ""
|
28579
|
+
},
|
28580
|
+
{
|
28581
|
+
"gSize": 3,
|
28582
|
+
"lgSize": 3,
|
28583
|
+
"maxFrac": 2,
|
28584
|
+
"minFrac": 2,
|
28585
|
+
"minInt": 1,
|
28586
|
+
"negPre": "-\u00a4",
|
28587
|
+
"negSuf": "",
|
28588
|
+
"posPre": "\u00a4",
|
28589
|
+
"posSuf": ""
|
28590
|
+
}
|
28591
|
+
]
|
28592
|
+
},
|
28593
|
+
"id": "en-us",
|
28594
|
+
"pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
|
28595
|
+
});
|
28596
|
+
}]);
|
28357
28597
|
|
28358
28598
|
jqLite(document).ready(function() {
|
28359
28599
|
angularInit(document, bootstrap);
|
@@ -28361,4 +28601,4 @@ var minlengthDirective = function() {
|
|
28361
28601
|
|
28362
28602
|
})(window, document);
|
28363
28603
|
|
28364
|
-
!window.angular.$$csp() && window.angular.element(document.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>');
|
28604
|
+
!window.angular.$$csp().noInlineStyle && window.angular.element(document.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>');
|