angularjs-rails 1.5.8 → 1.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +6 -1
- data/lib/angularjs-rails/engine.rb +1 -1
- data/lib/angularjs-rails/version.rb +1 -1
- data/vendor/assets/javascripts/angular-animate.js +426 -293
- data/vendor/assets/javascripts/angular-aria.js +64 -43
- data/vendor/assets/javascripts/angular-cookies.js +24 -93
- data/vendor/assets/javascripts/angular-loader.js +190 -36
- data/vendor/assets/javascripts/angular-message-format.js +72 -84
- data/vendor/assets/javascripts/angular-messages.js +158 -68
- data/vendor/assets/javascripts/angular-mocks.js +1033 -402
- data/vendor/assets/javascripts/angular-parse-ext.js +14 -10
- data/vendor/assets/javascripts/angular-resource.js +317 -269
- data/vendor/assets/javascripts/angular-route.js +329 -132
- data/vendor/assets/javascripts/angular-sanitize.js +268 -93
- data/vendor/assets/javascripts/angular-touch.js +46 -413
- data/vendor/assets/javascripts/angular.js +9213 -4485
- metadata +2 -3
- data/vendor/assets/javascripts/angular-scenario.js +0 -44134
@@ -1,6 +1,6 @@
|
|
1
1
|
/**
|
2
|
-
* @license AngularJS v1.
|
3
|
-
* (c) 2010-
|
2
|
+
* @license AngularJS v1.8.0
|
3
|
+
* (c) 2010-2020 Google, Inc. http://angularjs.org
|
4
4
|
* License: MIT
|
5
5
|
*/
|
6
6
|
(function(window, angular) {'use strict';
|
@@ -15,30 +15,28 @@
|
|
15
15
|
* attributes that convey state or semantic information about the application for users
|
16
16
|
* of assistive technologies, such as screen readers.
|
17
17
|
*
|
18
|
-
* <div doc-module-components="ngAria"></div>
|
19
|
-
*
|
20
18
|
* ## Usage
|
21
19
|
*
|
22
20
|
* For ngAria to do its magic, simply include the module `ngAria` as a dependency. The following
|
23
21
|
* directives are supported:
|
24
|
-
* `ngModel`, `ngChecked`, `ngReadonly`, `ngRequired`, `ngValue`, `ngDisabled`, `ngShow`, `ngHide`,
|
25
|
-
* `ngDblClick`, and `ngMessages`.
|
22
|
+
* `ngModel`, `ngChecked`, `ngReadonly`, `ngRequired`, `ngValue`, `ngDisabled`, `ngShow`, `ngHide`,
|
23
|
+
* `ngClick`, `ngDblClick`, and `ngMessages`.
|
26
24
|
*
|
27
25
|
* Below is a more detailed breakdown of the attributes handled by ngAria:
|
28
26
|
*
|
29
|
-
* | Directive | Supported Attributes
|
30
|
-
*
|
27
|
+
* | Directive | Supported Attributes |
|
28
|
+
* |---------------------------------------------|-----------------------------------------------------------------------------------------------------|
|
31
29
|
* | {@link ng.directive:ngModel ngModel} | aria-checked, aria-valuemin, aria-valuemax, aria-valuenow, aria-invalid, aria-required, input roles |
|
32
|
-
* | {@link ng.directive:ngDisabled ngDisabled} | aria-disabled
|
33
|
-
* | {@link ng.directive:ngRequired ngRequired} | aria-required
|
34
|
-
* | {@link ng.directive:ngChecked ngChecked} | aria-checked
|
35
|
-
* | {@link ng.directive:ngReadonly ngReadonly} | aria-readonly
|
36
|
-
* | {@link ng.directive:ngValue ngValue} | aria-checked
|
37
|
-
* | {@link ng.directive:ngShow ngShow} | aria-hidden
|
38
|
-
* | {@link ng.directive:ngHide ngHide} | aria-hidden
|
39
|
-
* | {@link ng.directive:ngDblclick ngDblclick} | tabindex
|
40
|
-
* | {@link module:ngMessages ngMessages} | aria-live
|
41
|
-
* | {@link ng.directive:ngClick ngClick} | tabindex,
|
30
|
+
* | {@link ng.directive:ngDisabled ngDisabled} | aria-disabled |
|
31
|
+
* | {@link ng.directive:ngRequired ngRequired} | aria-required |
|
32
|
+
* | {@link ng.directive:ngChecked ngChecked} | aria-checked |
|
33
|
+
* | {@link ng.directive:ngReadonly ngReadonly} | aria-readonly |
|
34
|
+
* | {@link ng.directive:ngValue ngValue} | aria-checked |
|
35
|
+
* | {@link ng.directive:ngShow ngShow} | aria-hidden |
|
36
|
+
* | {@link ng.directive:ngHide ngHide} | aria-hidden |
|
37
|
+
* | {@link ng.directive:ngDblclick ngDblclick} | tabindex |
|
38
|
+
* | {@link module:ngMessages ngMessages} | aria-live |
|
39
|
+
* | {@link ng.directive:ngClick ngClick} | tabindex, keydown event, button role |
|
42
40
|
*
|
43
41
|
* Find out more information about each directive by reading the
|
44
42
|
* {@link guide/accessibility ngAria Developer Guide}.
|
@@ -53,13 +51,19 @@
|
|
53
51
|
* <md-checkbox ng-disabled="disabled" aria-disabled="true">
|
54
52
|
* ```
|
55
53
|
*
|
56
|
-
* ## Disabling Attributes
|
57
|
-
* It
|
54
|
+
* ## Disabling Specific Attributes
|
55
|
+
* It is possible to disable individual attributes added by ngAria with the
|
58
56
|
* {@link ngAria.$ariaProvider#config config} method. For more details, see the
|
59
57
|
* {@link guide/accessibility Developer Guide}.
|
58
|
+
*
|
59
|
+
* ## Disabling `ngAria` on Specific Elements
|
60
|
+
* It is possible to make `ngAria` ignore a specific element, by adding the `ng-aria-disable`
|
61
|
+
* attribute on it. Note that only the element itself (and not its child elements) will be ignored.
|
60
62
|
*/
|
61
|
-
|
63
|
+
var ARIA_DISABLE_ATTR = 'ngAriaDisable';
|
64
|
+
|
62
65
|
var ngAriaModule = angular.module('ngAria', ['ng']).
|
66
|
+
info({ angularVersion: '1.8.0' }).
|
63
67
|
provider('$aria', $AriaProvider);
|
64
68
|
|
65
69
|
/**
|
@@ -75,6 +79,7 @@ var isNodeOneOf = function(elem, nodeTypeArray) {
|
|
75
79
|
/**
|
76
80
|
* @ngdoc provider
|
77
81
|
* @name $ariaProvider
|
82
|
+
* @this
|
78
83
|
*
|
79
84
|
* @description
|
80
85
|
*
|
@@ -103,7 +108,7 @@ function $AriaProvider() {
|
|
103
108
|
ariaInvalid: true,
|
104
109
|
ariaValue: true,
|
105
110
|
tabindex: true,
|
106
|
-
|
111
|
+
bindKeydown: true,
|
107
112
|
bindRoleForClick: true
|
108
113
|
};
|
109
114
|
|
@@ -119,12 +124,15 @@ function $AriaProvider() {
|
|
119
124
|
* - **ariaDisabled** – `{boolean}` – Enables/disables aria-disabled tags
|
120
125
|
* - **ariaRequired** – `{boolean}` – Enables/disables aria-required tags
|
121
126
|
* - **ariaInvalid** – `{boolean}` – Enables/disables aria-invalid tags
|
122
|
-
* - **ariaValue** – `{boolean}` – Enables/disables aria-valuemin, aria-valuemax and
|
127
|
+
* - **ariaValue** – `{boolean}` – Enables/disables aria-valuemin, aria-valuemax and
|
128
|
+
* aria-valuenow tags
|
123
129
|
* - **tabindex** – `{boolean}` – Enables/disables tabindex tags
|
124
|
-
* - **
|
125
|
-
* `li`
|
126
|
-
*
|
127
|
-
*
|
130
|
+
* - **bindKeydown** – `{boolean}` – Enables/disables keyboard event binding on non-interactive
|
131
|
+
* elements (such as `div` or `li`) using ng-click, making them more accessible to users of
|
132
|
+
* assistive technologies
|
133
|
+
* - **bindRoleForClick** – `{boolean}` – Adds role=button to non-interactive elements (such as
|
134
|
+
* `div` or `li`) using ng-click, making them more accessible to users of assistive
|
135
|
+
* technologies
|
128
136
|
*
|
129
137
|
* @description
|
130
138
|
* Enables/disables various ARIA attributes
|
@@ -135,6 +143,8 @@ function $AriaProvider() {
|
|
135
143
|
|
136
144
|
function watchExpr(attrName, ariaAttr, nodeBlackList, negate) {
|
137
145
|
return function(scope, elem, attr) {
|
146
|
+
if (attr.hasOwnProperty(ARIA_DISABLE_ATTR)) return;
|
147
|
+
|
138
148
|
var ariaCamelName = attr.$normalize(ariaAttr);
|
139
149
|
if (config[ariaCamelName] && !isNodeOneOf(elem, nodeBlackList) && !attr[ariaCamelName]) {
|
140
150
|
scope.$watch(attr[attrName], function(boolVal) {
|
@@ -150,7 +160,6 @@ function $AriaProvider() {
|
|
150
160
|
* @name $aria
|
151
161
|
*
|
152
162
|
* @description
|
153
|
-
* @priority 200
|
154
163
|
*
|
155
164
|
* The $aria service contains helper methods for applying common
|
156
165
|
* [ARIA](http://www.w3.org/TR/wai-aria/) attributes to HTML directives.
|
@@ -227,14 +236,17 @@ ngAriaModule.directive('ngShow', ['$aria', function($aria) {
|
|
227
236
|
.directive('ngModel', ['$aria', function($aria) {
|
228
237
|
|
229
238
|
function shouldAttachAttr(attr, normalizedAttr, elem, allowBlacklistEls) {
|
230
|
-
return $aria.config(normalizedAttr) &&
|
239
|
+
return $aria.config(normalizedAttr) &&
|
240
|
+
!elem.attr(attr) &&
|
241
|
+
(allowBlacklistEls || !isNodeOneOf(elem, nodeBlackList)) &&
|
242
|
+
(elem.attr('type') !== 'hidden' || elem[0].nodeName !== 'INPUT');
|
231
243
|
}
|
232
244
|
|
233
245
|
function shouldAttachRole(role, elem) {
|
234
246
|
// if element does not have role attribute
|
235
247
|
// AND element type is equal to role (if custom element has a type equaling shape) <-- remove?
|
236
|
-
// AND element is not
|
237
|
-
return !elem.attr('role') && (elem.attr('type') === role) && (elem
|
248
|
+
// AND element is not in nodeBlackList
|
249
|
+
return !elem.attr('role') && (elem.attr('type') === role) && !isNodeOneOf(elem, nodeBlackList);
|
238
250
|
}
|
239
251
|
|
240
252
|
function getShape(attr, elem) {
|
@@ -251,17 +263,11 @@ ngAriaModule.directive('ngShow', ['$aria', function($aria) {
|
|
251
263
|
require: 'ngModel',
|
252
264
|
priority: 200, //Make sure watches are fired after any other directives that affect the ngModel value
|
253
265
|
compile: function(elem, attr) {
|
266
|
+
if (attr.hasOwnProperty(ARIA_DISABLE_ATTR)) return;
|
267
|
+
|
254
268
|
var shape = getShape(attr, elem);
|
255
269
|
|
256
270
|
return {
|
257
|
-
pre: function(scope, elem, attr, ngModel) {
|
258
|
-
if (shape === 'checkbox') {
|
259
|
-
//Use the input[checkbox] $isEmpty implementation for elements with checkbox roles
|
260
|
-
ngModel.$isEmpty = function(value) {
|
261
|
-
return value === false;
|
262
|
-
};
|
263
|
-
}
|
264
|
-
},
|
265
271
|
post: function(scope, elem, attr, ngModel) {
|
266
272
|
var needsTabIndex = shouldAttachAttr('tabindex', 'tabindex', elem, false);
|
267
273
|
|
@@ -270,6 +276,8 @@ ngAriaModule.directive('ngShow', ['$aria', function($aria) {
|
|
270
276
|
}
|
271
277
|
|
272
278
|
function getRadioReaction(newVal) {
|
279
|
+
// Strict comparison would cause a BC
|
280
|
+
// eslint-disable-next-line eqeqeq
|
273
281
|
var boolVal = (attr.value == ngModel.$viewValue);
|
274
282
|
elem.attr('aria-checked', boolVal);
|
275
283
|
}
|
@@ -353,6 +361,8 @@ ngAriaModule.directive('ngShow', ['$aria', function($aria) {
|
|
353
361
|
restrict: 'A',
|
354
362
|
require: '?ngMessages',
|
355
363
|
link: function(scope, elem, attr, ngMessages) {
|
364
|
+
if (attr.hasOwnProperty(ARIA_DISABLE_ATTR)) return;
|
365
|
+
|
356
366
|
if (!elem.attr('aria-live')) {
|
357
367
|
elem.attr('aria-live', 'assertive');
|
358
368
|
}
|
@@ -363,7 +373,9 @@ ngAriaModule.directive('ngShow', ['$aria', function($aria) {
|
|
363
373
|
return {
|
364
374
|
restrict: 'A',
|
365
375
|
compile: function(elem, attr) {
|
366
|
-
|
376
|
+
if (attr.hasOwnProperty(ARIA_DISABLE_ATTR)) return;
|
377
|
+
|
378
|
+
var fn = $parse(attr.ngClick);
|
367
379
|
return function(scope, elem, attr) {
|
368
380
|
|
369
381
|
if (!isNodeOneOf(elem, nodeBlackList)) {
|
@@ -376,10 +388,17 @@ ngAriaModule.directive('ngShow', ['$aria', function($aria) {
|
|
376
388
|
elem.attr('tabindex', 0);
|
377
389
|
}
|
378
390
|
|
379
|
-
if ($aria.config('
|
380
|
-
elem.on('
|
391
|
+
if ($aria.config('bindKeydown') && !attr.ngKeydown && !attr.ngKeypress && !attr.ngKeyup) {
|
392
|
+
elem.on('keydown', function(event) {
|
381
393
|
var keyCode = event.which || event.keyCode;
|
382
|
-
|
394
|
+
|
395
|
+
if (keyCode === 13 || keyCode === 32) {
|
396
|
+
// If the event is triggered on a non-interactive element ...
|
397
|
+
if (nodeBlackList.indexOf(event.target.nodeName) === -1 && !event.target.isContentEditable) {
|
398
|
+
// ... prevent the default browser behavior (e.g. scrolling when pressing spacebar)
|
399
|
+
// See https://github.com/angular/angular.js/issues/16664
|
400
|
+
event.preventDefault();
|
401
|
+
}
|
383
402
|
scope.$apply(callback);
|
384
403
|
}
|
385
404
|
|
@@ -395,6 +414,8 @@ ngAriaModule.directive('ngShow', ['$aria', function($aria) {
|
|
395
414
|
}])
|
396
415
|
.directive('ngDblclick', ['$aria', function($aria) {
|
397
416
|
return function(scope, elem, attr) {
|
417
|
+
if (attr.hasOwnProperty(ARIA_DISABLE_ATTR)) return;
|
418
|
+
|
398
419
|
if ($aria.config('tabindex') && !elem.attr('tabindex') && !isNodeOneOf(elem, nodeBlackList)) {
|
399
420
|
elem.attr('tabindex', 0);
|
400
421
|
}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/**
|
2
|
-
* @license AngularJS v1.
|
3
|
-
* (c) 2010-
|
2
|
+
* @license AngularJS v1.8.0
|
3
|
+
* (c) 2010-2020 Google, Inc. http://angularjs.org
|
4
4
|
* License: MIT
|
5
5
|
*/
|
6
6
|
(function(window, angular) {'use strict';
|
@@ -10,25 +10,21 @@
|
|
10
10
|
* @name ngCookies
|
11
11
|
* @description
|
12
12
|
*
|
13
|
-
* # ngCookies
|
14
|
-
*
|
15
13
|
* The `ngCookies` module provides a convenient wrapper for reading and writing browser cookies.
|
16
14
|
*
|
17
|
-
*
|
18
|
-
* <div doc-module-components="ngCookies"></div>
|
19
|
-
*
|
20
15
|
* See {@link ngCookies.$cookies `$cookies`} for usage.
|
21
16
|
*/
|
22
17
|
|
23
18
|
|
24
19
|
angular.module('ngCookies', ['ng']).
|
20
|
+
info({ angularVersion: '1.8.0' }).
|
25
21
|
/**
|
26
22
|
* @ngdoc provider
|
27
23
|
* @name $cookiesProvider
|
28
24
|
* @description
|
29
25
|
* Use `$cookiesProvider` to change the default behavior of the {@link ngCookies.$cookies $cookies} service.
|
30
26
|
* */
|
31
|
-
provider('$cookies', [function $CookiesProvider() {
|
27
|
+
provider('$cookies', [/** @this */function $CookiesProvider() {
|
32
28
|
/**
|
33
29
|
* @ngdoc property
|
34
30
|
* @name $cookiesProvider#defaults
|
@@ -47,10 +43,24 @@ angular.module('ngCookies', ['ng']).
|
|
47
43
|
* or a Date object indicating the exact date/time this cookie will expire.
|
48
44
|
* - **secure** - `{boolean}` - If `true`, then the cookie will only be available through a
|
49
45
|
* secured connection.
|
46
|
+
* - **samesite** - `{string}` - prevents the browser from sending the cookie along with cross-site requests.
|
47
|
+
* Accepts the values `lax` and `strict`. See the [OWASP Wiki](https://www.owasp.org/index.php/SameSite)
|
48
|
+
* for more info. Note that as of May 2018, not all browsers support `SameSite`,
|
49
|
+
* so it cannot be used as a single measure against Cross-Site-Request-Forgery (CSRF) attacks.
|
50
50
|
*
|
51
51
|
* Note: By default, the address that appears in your `<base>` tag will be used as the path.
|
52
52
|
* This is important so that cookies will be visible for all routes when html5mode is enabled.
|
53
53
|
*
|
54
|
+
* @example
|
55
|
+
*
|
56
|
+
* ```js
|
57
|
+
* angular.module('cookiesProviderExample', ['ngCookies'])
|
58
|
+
* .config(['$cookiesProvider', function($cookiesProvider) {
|
59
|
+
* // Setting default options
|
60
|
+
* $cookiesProvider.defaults.domain = 'foo.com';
|
61
|
+
* $cookiesProvider.defaults.secure = true;
|
62
|
+
* }]);
|
63
|
+
* ```
|
54
64
|
**/
|
55
65
|
var defaults = this.defaults = {};
|
56
66
|
|
@@ -66,7 +76,7 @@ angular.module('ngCookies', ['ng']).
|
|
66
76
|
* Provides read/write access to browser's cookies.
|
67
77
|
*
|
68
78
|
* <div class="alert alert-info">
|
69
|
-
* Up until
|
79
|
+
* Up until AngularJS 1.3, `$cookies` exposed properties that represented the
|
70
80
|
* current browser cookie values. In version 1.4, this behavior has changed, and
|
71
81
|
* `$cookies` now provides a standard api of getters, setters etc.
|
72
82
|
* </div>
|
@@ -179,86 +189,6 @@ angular.module('ngCookies', ['ng']).
|
|
179
189
|
}];
|
180
190
|
}]);
|
181
191
|
|
182
|
-
angular.module('ngCookies').
|
183
|
-
/**
|
184
|
-
* @ngdoc service
|
185
|
-
* @name $cookieStore
|
186
|
-
* @deprecated
|
187
|
-
* @requires $cookies
|
188
|
-
*
|
189
|
-
* @description
|
190
|
-
* Provides a key-value (string-object) storage, that is backed by session cookies.
|
191
|
-
* Objects put or retrieved from this storage are automatically serialized or
|
192
|
-
* deserialized by angular's toJson/fromJson.
|
193
|
-
*
|
194
|
-
* Requires the {@link ngCookies `ngCookies`} module to be installed.
|
195
|
-
*
|
196
|
-
* <div class="alert alert-danger">
|
197
|
-
* **Note:** The $cookieStore service is **deprecated**.
|
198
|
-
* Please use the {@link ngCookies.$cookies `$cookies`} service instead.
|
199
|
-
* </div>
|
200
|
-
*
|
201
|
-
* @example
|
202
|
-
*
|
203
|
-
* ```js
|
204
|
-
* angular.module('cookieStoreExample', ['ngCookies'])
|
205
|
-
* .controller('ExampleController', ['$cookieStore', function($cookieStore) {
|
206
|
-
* // Put cookie
|
207
|
-
* $cookieStore.put('myFavorite','oatmeal');
|
208
|
-
* // Get cookie
|
209
|
-
* var favoriteCookie = $cookieStore.get('myFavorite');
|
210
|
-
* // Removing a cookie
|
211
|
-
* $cookieStore.remove('myFavorite');
|
212
|
-
* }]);
|
213
|
-
* ```
|
214
|
-
*/
|
215
|
-
factory('$cookieStore', ['$cookies', function($cookies) {
|
216
|
-
|
217
|
-
return {
|
218
|
-
/**
|
219
|
-
* @ngdoc method
|
220
|
-
* @name $cookieStore#get
|
221
|
-
*
|
222
|
-
* @description
|
223
|
-
* Returns the value of given cookie key
|
224
|
-
*
|
225
|
-
* @param {string} key Id to use for lookup.
|
226
|
-
* @returns {Object} Deserialized cookie value, undefined if the cookie does not exist.
|
227
|
-
*/
|
228
|
-
get: function(key) {
|
229
|
-
return $cookies.getObject(key);
|
230
|
-
},
|
231
|
-
|
232
|
-
/**
|
233
|
-
* @ngdoc method
|
234
|
-
* @name $cookieStore#put
|
235
|
-
*
|
236
|
-
* @description
|
237
|
-
* Sets a value for given cookie key
|
238
|
-
*
|
239
|
-
* @param {string} key Id for the `value`.
|
240
|
-
* @param {Object} value Value to be stored.
|
241
|
-
*/
|
242
|
-
put: function(key, value) {
|
243
|
-
$cookies.putObject(key, value);
|
244
|
-
},
|
245
|
-
|
246
|
-
/**
|
247
|
-
* @ngdoc method
|
248
|
-
* @name $cookieStore#remove
|
249
|
-
*
|
250
|
-
* @description
|
251
|
-
* Remove given cookie
|
252
|
-
*
|
253
|
-
* @param {string} key Id of the key-value pair to delete.
|
254
|
-
*/
|
255
|
-
remove: function(key) {
|
256
|
-
$cookies.remove(key);
|
257
|
-
}
|
258
|
-
};
|
259
|
-
|
260
|
-
}]);
|
261
|
-
|
262
192
|
/**
|
263
193
|
* @name $$cookieWriter
|
264
194
|
* @requires $document
|
@@ -292,6 +222,7 @@ function $$CookieWriter($document, $log, $browser) {
|
|
292
222
|
str += options.domain ? ';domain=' + options.domain : '';
|
293
223
|
str += expires ? ';expires=' + expires.toUTCString() : '';
|
294
224
|
str += options.secure ? ';secure' : '';
|
225
|
+
str += options.samesite ? ';samesite=' + options.samesite : '';
|
295
226
|
|
296
227
|
// per http://www.ietf.org/rfc/rfc2109.txt browser must allow at minimum:
|
297
228
|
// - 300 cookies
|
@@ -299,9 +230,9 @@ function $$CookieWriter($document, $log, $browser) {
|
|
299
230
|
// - 4096 bytes per cookie
|
300
231
|
var cookieLength = str.length + 1;
|
301
232
|
if (cookieLength > 4096) {
|
302
|
-
$log.warn(
|
303
|
-
|
304
|
-
cookieLength +
|
233
|
+
$log.warn('Cookie \'' + name +
|
234
|
+
'\' possibly not set or overflowed because it was too large (' +
|
235
|
+
cookieLength + ' > 4096 bytes)!');
|
305
236
|
}
|
306
237
|
|
307
238
|
return str;
|
@@ -314,7 +245,7 @@ function $$CookieWriter($document, $log, $browser) {
|
|
314
245
|
|
315
246
|
$$CookieWriter.$inject = ['$document', '$log', '$browser'];
|
316
247
|
|
317
|
-
angular.module('ngCookies').provider('$$cookieWriter', function $$CookieWriterProvider() {
|
248
|
+
angular.module('ngCookies').provider('$$cookieWriter', /** @this */ function $$CookieWriterProvider() {
|
318
249
|
this.$get = $$CookieWriter;
|
319
250
|
});
|
320
251
|
|
@@ -1,17 +1,51 @@
|
|
1
1
|
/**
|
2
|
-
* @license AngularJS v1.
|
3
|
-
* (c) 2010-
|
2
|
+
* @license AngularJS v1.8.0
|
3
|
+
* (c) 2010-2020 Google, Inc. http://angularjs.org
|
4
4
|
* License: MIT
|
5
5
|
*/
|
6
6
|
|
7
7
|
(function() {'use strict';
|
8
|
-
|
8
|
+
// NOTE:
|
9
|
+
// These functions are copied here from `src/Angular.js`, because they are needed inside the
|
10
|
+
// `angular-loader.js` closure and need to be available before the main `angular.js` script has
|
11
|
+
// been loaded.
|
12
|
+
function isFunction(value) {return typeof value === 'function';}
|
13
|
+
function isDefined(value) {return typeof value !== 'undefined';}
|
14
|
+
function isNumber(value) {return typeof value === 'number';}
|
15
|
+
function isObject(value) {return value !== null && typeof value === 'object';}
|
16
|
+
function isScope(obj) {return obj && obj.$evalAsync && obj.$watch;}
|
17
|
+
function isUndefined(value) {return typeof value === 'undefined';}
|
18
|
+
function isWindow(obj) {return obj && obj.window === obj;}
|
19
|
+
function sliceArgs(args, startIndex) {return Array.prototype.slice.call(args, startIndex || 0);}
|
20
|
+
function toJsonReplacer(key, value) {
|
21
|
+
var val = value;
|
22
|
+
|
23
|
+
if (typeof key === 'string' && key.charAt(0) === '$' && key.charAt(1) === '$') {
|
24
|
+
val = undefined;
|
25
|
+
} else if (isWindow(value)) {
|
26
|
+
val = '$WINDOW';
|
27
|
+
} else if (value && window.document === value) {
|
28
|
+
val = '$DOCUMENT';
|
29
|
+
} else if (isScope(value)) {
|
30
|
+
val = '$SCOPE';
|
31
|
+
}
|
32
|
+
|
33
|
+
return val;
|
34
|
+
}
|
9
35
|
|
10
|
-
/*
|
36
|
+
/* exported toDebugString */
|
11
37
|
|
12
|
-
function serializeObject(obj) {
|
38
|
+
function serializeObject(obj, maxDepth) {
|
13
39
|
var seen = [];
|
14
40
|
|
41
|
+
// There is no direct way to stringify object until reaching a specific depth
|
42
|
+
// and a very deep object can cause a performance issue, so we copy the object
|
43
|
+
// based on this specific depth and then stringify it.
|
44
|
+
if (isValidObjectMaxDepth(maxDepth)) {
|
45
|
+
// This file is also included in `angular-loader`, so `copy()` might not always be available in
|
46
|
+
// the closure. Therefore, it is lazily retrieved as `angular.copy()` when needed.
|
47
|
+
obj = angular.copy(obj, null, maxDepth);
|
48
|
+
}
|
15
49
|
return JSON.stringify(obj, function(key, val) {
|
16
50
|
val = toJsonReplacer(key, val);
|
17
51
|
if (isObject(val)) {
|
@@ -24,22 +58,83 @@ function serializeObject(obj) {
|
|
24
58
|
});
|
25
59
|
}
|
26
60
|
|
27
|
-
function toDebugString(obj) {
|
61
|
+
function toDebugString(obj, maxDepth) {
|
28
62
|
if (typeof obj === 'function') {
|
29
63
|
return obj.toString().replace(/ \{[\s\S]*$/, '');
|
30
64
|
} else if (isUndefined(obj)) {
|
31
65
|
return 'undefined';
|
32
66
|
} else if (typeof obj !== 'string') {
|
33
|
-
return serializeObject(obj);
|
67
|
+
return serializeObject(obj, maxDepth);
|
34
68
|
}
|
35
69
|
return obj;
|
36
70
|
}
|
37
71
|
|
72
|
+
/* exported
|
73
|
+
minErrConfig,
|
74
|
+
errorHandlingConfig,
|
75
|
+
isValidObjectMaxDepth
|
76
|
+
*/
|
77
|
+
|
78
|
+
var minErrConfig = {
|
79
|
+
objectMaxDepth: 5,
|
80
|
+
urlErrorParamsEnabled: true
|
81
|
+
};
|
82
|
+
|
83
|
+
/**
|
84
|
+
* @ngdoc function
|
85
|
+
* @name angular.errorHandlingConfig
|
86
|
+
* @module ng
|
87
|
+
* @kind function
|
88
|
+
*
|
89
|
+
* @description
|
90
|
+
* Configure several aspects of error handling in AngularJS if used as a setter or return the
|
91
|
+
* current configuration if used as a getter. The following options are supported:
|
92
|
+
*
|
93
|
+
* - **objectMaxDepth**: The maximum depth to which objects are traversed when stringified for error messages.
|
94
|
+
*
|
95
|
+
* Omitted or undefined options will leave the corresponding configuration values unchanged.
|
96
|
+
*
|
97
|
+
* @param {Object=} config - The configuration object. May only contain the options that need to be
|
98
|
+
* updated. Supported keys:
|
99
|
+
*
|
100
|
+
* * `objectMaxDepth` **{Number}** - The max depth for stringifying objects. Setting to a
|
101
|
+
* non-positive or non-numeric value, removes the max depth limit.
|
102
|
+
* Default: 5
|
103
|
+
*
|
104
|
+
* * `urlErrorParamsEnabled` **{Boolean}** - Specifies whether the generated error url will
|
105
|
+
* contain the parameters of the thrown error. Disabling the parameters can be useful if the
|
106
|
+
* generated error url is very long.
|
107
|
+
*
|
108
|
+
* Default: true. When used without argument, it returns the current value.
|
109
|
+
*/
|
110
|
+
function errorHandlingConfig(config) {
|
111
|
+
if (isObject(config)) {
|
112
|
+
if (isDefined(config.objectMaxDepth)) {
|
113
|
+
minErrConfig.objectMaxDepth = isValidObjectMaxDepth(config.objectMaxDepth) ? config.objectMaxDepth : NaN;
|
114
|
+
}
|
115
|
+
if (isDefined(config.urlErrorParamsEnabled) && isBoolean(config.urlErrorParamsEnabled)) {
|
116
|
+
minErrConfig.urlErrorParamsEnabled = config.urlErrorParamsEnabled;
|
117
|
+
}
|
118
|
+
} else {
|
119
|
+
return minErrConfig;
|
120
|
+
}
|
121
|
+
}
|
122
|
+
|
123
|
+
/**
|
124
|
+
* @private
|
125
|
+
* @param {Number} maxDepth
|
126
|
+
* @return {boolean}
|
127
|
+
*/
|
128
|
+
function isValidObjectMaxDepth(maxDepth) {
|
129
|
+
return isNumber(maxDepth) && maxDepth > 0;
|
130
|
+
}
|
131
|
+
|
132
|
+
|
38
133
|
/**
|
39
134
|
* @description
|
40
135
|
*
|
41
136
|
* This object provides a utility for producing rich Error messages within
|
42
|
-
*
|
137
|
+
* AngularJS. It can be called as follows:
|
43
138
|
*
|
44
139
|
* var exampleMinErr = minErr('example');
|
45
140
|
* throw exampleMinErr('one', 'This {0} is {1}', foo, bar);
|
@@ -56,7 +151,7 @@ function toDebugString(obj) {
|
|
56
151
|
* Since data will be parsed statically during a build step, some restrictions
|
57
152
|
* are applied with respect to how minErr instances are created and called.
|
58
153
|
* Instances should have names of the form namespaceMinErr for a minErr created
|
59
|
-
* using minErr('namespace')
|
154
|
+
* using minErr('namespace'). Error codes, namespaces and template strings
|
60
155
|
* should all be static strings, not variables or general expressions.
|
61
156
|
*
|
62
157
|
* @param {string} module The namespace to use for the new minErr instance.
|
@@ -67,32 +162,41 @@ function toDebugString(obj) {
|
|
67
162
|
|
68
163
|
function minErr(module, ErrorConstructor) {
|
69
164
|
ErrorConstructor = ErrorConstructor || Error;
|
70
|
-
return function() {
|
71
|
-
var SKIP_INDEXES = 2;
|
72
165
|
|
73
|
-
|
74
|
-
|
166
|
+
var url = 'https://errors.angularjs.org/1.8.0/';
|
167
|
+
var regex = url.replace('.', '\\.') + '[\\s\\S]*';
|
168
|
+
var errRegExp = new RegExp(regex, 'g');
|
169
|
+
|
170
|
+
return function() {
|
171
|
+
var code = arguments[0],
|
172
|
+
template = arguments[1],
|
75
173
|
message = '[' + (module ? module + ':' : '') + code + '] ',
|
76
|
-
|
174
|
+
templateArgs = sliceArgs(arguments, 2).map(function(arg) {
|
175
|
+
return toDebugString(arg, minErrConfig.objectMaxDepth);
|
176
|
+
}),
|
77
177
|
paramPrefix, i;
|
78
178
|
|
179
|
+
// A minErr message has two parts: the message itself and the url that contains the
|
180
|
+
// encoded message.
|
181
|
+
// The message's parameters can contain other error messages which also include error urls.
|
182
|
+
// To prevent the messages from getting too long, we strip the error urls from the parameters.
|
183
|
+
|
79
184
|
message += template.replace(/\{\d+\}/g, function(match) {
|
80
|
-
var index = +match.slice(1, -1)
|
81
|
-
shiftedIndex = index + SKIP_INDEXES;
|
185
|
+
var index = +match.slice(1, -1);
|
82
186
|
|
83
|
-
if (
|
84
|
-
return
|
187
|
+
if (index < templateArgs.length) {
|
188
|
+
return templateArgs[index].replace(errRegExp, '');
|
85
189
|
}
|
86
190
|
|
87
191
|
return match;
|
88
192
|
});
|
89
193
|
|
90
|
-
message += '\
|
91
|
-
(module ? module + '/' : '') + code;
|
194
|
+
message += '\n' + url + (module ? module + '/' : '') + code;
|
92
195
|
|
93
|
-
|
94
|
-
|
95
|
-
encodeURIComponent(
|
196
|
+
if (minErrConfig.urlErrorParamsEnabled) {
|
197
|
+
for (i = 0, paramPrefix = '?'; i < templateArgs.length; i++, paramPrefix = '&') {
|
198
|
+
message += paramPrefix + 'p' + i + '=' + encodeURIComponent(templateArgs[i]);
|
199
|
+
}
|
96
200
|
}
|
97
201
|
|
98
202
|
return new ErrorConstructor(message);
|
@@ -105,7 +209,7 @@ function minErr(module, ErrorConstructor) {
|
|
105
209
|
* @module ng
|
106
210
|
* @description
|
107
211
|
*
|
108
|
-
* Interface for configuring
|
212
|
+
* Interface for configuring AngularJS {@link angular.module modules}.
|
109
213
|
*/
|
110
214
|
|
111
215
|
function setupModuleLoader(window) {
|
@@ -132,9 +236,9 @@ function setupModuleLoader(window) {
|
|
132
236
|
* @module ng
|
133
237
|
* @description
|
134
238
|
*
|
135
|
-
* The `angular.module` is a global place for creating, registering and retrieving
|
239
|
+
* The `angular.module` is a global place for creating, registering and retrieving AngularJS
|
136
240
|
* modules.
|
137
|
-
* All modules (
|
241
|
+
* All modules (AngularJS core or 3rd party) that should be available to an application must be
|
138
242
|
* registered using this mechanism.
|
139
243
|
*
|
140
244
|
* Passing one argument retrieves an existing {@link angular.Module},
|
@@ -178,6 +282,9 @@ function setupModuleLoader(window) {
|
|
178
282
|
* @returns {angular.Module} new module with the {@link angular.Module} api.
|
179
283
|
*/
|
180
284
|
return function module(name, requires, configFn) {
|
285
|
+
|
286
|
+
var info = {};
|
287
|
+
|
181
288
|
var assertNotHasOwnProperty = function(name, context) {
|
182
289
|
if (name === 'hasOwnProperty') {
|
183
290
|
throw ngMinErr('badname', 'hasOwnProperty is not a valid {0} name', context);
|
@@ -190,9 +297,9 @@ function setupModuleLoader(window) {
|
|
190
297
|
}
|
191
298
|
return ensure(modules, name, function() {
|
192
299
|
if (!requires) {
|
193
|
-
throw $injectorMinErr('nomod',
|
194
|
-
|
195
|
-
|
300
|
+
throw $injectorMinErr('nomod', 'Module \'{0}\' is not available! You either misspelled ' +
|
301
|
+
'the module name or forgot to load it. If registering a module ensure that you ' +
|
302
|
+
'specify the dependencies as the second argument.', name);
|
196
303
|
}
|
197
304
|
|
198
305
|
/** @type {!Array.<Array.<*>>} */
|
@@ -213,6 +320,45 @@ function setupModuleLoader(window) {
|
|
213
320
|
_configBlocks: configBlocks,
|
214
321
|
_runBlocks: runBlocks,
|
215
322
|
|
323
|
+
/**
|
324
|
+
* @ngdoc method
|
325
|
+
* @name angular.Module#info
|
326
|
+
* @module ng
|
327
|
+
*
|
328
|
+
* @param {Object=} info Information about the module
|
329
|
+
* @returns {Object|Module} The current info object for this module if called as a getter,
|
330
|
+
* or `this` if called as a setter.
|
331
|
+
*
|
332
|
+
* @description
|
333
|
+
* Read and write custom information about this module.
|
334
|
+
* For example you could put the version of the module in here.
|
335
|
+
*
|
336
|
+
* ```js
|
337
|
+
* angular.module('myModule', []).info({ version: '1.0.0' });
|
338
|
+
* ```
|
339
|
+
*
|
340
|
+
* The version could then be read back out by accessing the module elsewhere:
|
341
|
+
*
|
342
|
+
* ```
|
343
|
+
* var version = angular.module('myModule').info().version;
|
344
|
+
* ```
|
345
|
+
*
|
346
|
+
* You can also retrieve this information during runtime via the
|
347
|
+
* {@link $injector#modules `$injector.modules`} property:
|
348
|
+
*
|
349
|
+
* ```js
|
350
|
+
* var version = $injector.modules['myModule'].info().version;
|
351
|
+
* ```
|
352
|
+
*/
|
353
|
+
info: function(value) {
|
354
|
+
if (isDefined(value)) {
|
355
|
+
if (!isObject(value)) throw ngMinErr('aobj', 'Argument \'{0}\' must be an object', 'value');
|
356
|
+
info = value;
|
357
|
+
return this;
|
358
|
+
}
|
359
|
+
return info;
|
360
|
+
},
|
361
|
+
|
216
362
|
/**
|
217
363
|
* @ngdoc property
|
218
364
|
* @name angular.Module#requires
|
@@ -302,7 +448,7 @@ function setupModuleLoader(window) {
|
|
302
448
|
* @description
|
303
449
|
* See {@link auto.$provide#decorator $provide.decorator()}.
|
304
450
|
*/
|
305
|
-
decorator: invokeLaterAndSetModuleName('$provide', 'decorator'),
|
451
|
+
decorator: invokeLaterAndSetModuleName('$provide', 'decorator', configBlocks),
|
306
452
|
|
307
453
|
/**
|
308
454
|
* @ngdoc method
|
@@ -342,13 +488,13 @@ function setupModuleLoader(window) {
|
|
342
488
|
* @ngdoc method
|
343
489
|
* @name angular.Module#filter
|
344
490
|
* @module ng
|
345
|
-
* @param {string} name Filter name - this must be a valid
|
491
|
+
* @param {string} name Filter name - this must be a valid AngularJS expression identifier
|
346
492
|
* @param {Function} filterFactory Factory function for creating new instance of filter.
|
347
493
|
* @description
|
348
494
|
* See {@link ng.$filterProvider#register $filterProvider.register()}.
|
349
495
|
*
|
350
496
|
* <div class="alert alert-warning">
|
351
|
-
* **Note:** Filter names must be valid
|
497
|
+
* **Note:** Filter names must be valid AngularJS {@link expression} identifiers, such as `uppercase` or `orderBy`.
|
352
498
|
* Names with special characters, such as hyphens and dots, are not allowed. If you wish to namespace
|
353
499
|
* your filters, then you can use capitalization (`myappSubsectionFilterx`) or underscores
|
354
500
|
* (`myapp_subsection_filterx`).
|
@@ -385,7 +531,8 @@ function setupModuleLoader(window) {
|
|
385
531
|
* @ngdoc method
|
386
532
|
* @name angular.Module#component
|
387
533
|
* @module ng
|
388
|
-
* @param {string} name Name of the component in
|
534
|
+
* @param {string|Object} name Name of the component in camelCase (i.e. `myComp` which will match `<my-comp>`),
|
535
|
+
* or an object map of components where the keys are the names and the values are the component definition objects.
|
389
536
|
* @param {Object} options Component definition object (a simplified
|
390
537
|
* {@link ng.$compile#directive-definition-object directive definition object})
|
391
538
|
*
|
@@ -401,7 +548,13 @@ function setupModuleLoader(window) {
|
|
401
548
|
* @param {Function} configFn Execute this function on module load. Useful for service
|
402
549
|
* configuration.
|
403
550
|
* @description
|
404
|
-
* Use this method to
|
551
|
+
* Use this method to configure services by injecting their
|
552
|
+
* {@link angular.Module#provider `providers`}, e.g. for adding routes to the
|
553
|
+
* {@link ngRoute.$routeProvider $routeProvider}.
|
554
|
+
*
|
555
|
+
* Note that you can only inject {@link angular.Module#provider `providers`} and
|
556
|
+
* {@link angular.Module#constant `constants`} into this function.
|
557
|
+
*
|
405
558
|
* For more about how to configure services, see
|
406
559
|
* {@link providers#provider-recipe Provider Recipe}.
|
407
560
|
*/
|
@@ -448,10 +601,11 @@ function setupModuleLoader(window) {
|
|
448
601
|
* @param {string} method
|
449
602
|
* @returns {angular.Module}
|
450
603
|
*/
|
451
|
-
function invokeLaterAndSetModuleName(provider, method) {
|
604
|
+
function invokeLaterAndSetModuleName(provider, method, queue) {
|
605
|
+
if (!queue) queue = invokeQueue;
|
452
606
|
return function(recipeName, factoryFunction) {
|
453
607
|
if (factoryFunction && isFunction(factoryFunction)) factoryFunction.$$moduleName = name;
|
454
|
-
|
608
|
+
queue.push([provider, method, arguments]);
|
455
609
|
return moduleInstance;
|
456
610
|
};
|
457
611
|
}
|