angular-gem 1.3.0 → 1.3.1
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 +8 -8
- data/lib/angular-gem/version.rb +1 -1
- data/vendor/assets/javascripts/1.3.1/angular-animate.js +2136 -0
- data/vendor/assets/javascripts/1.3.1/angular-aria.js +250 -0
- data/vendor/assets/javascripts/1.3.1/angular-cookies.js +206 -0
- data/vendor/assets/javascripts/1.3.1/angular-loader.js +422 -0
- data/vendor/assets/javascripts/1.3.1/angular-messages.js +400 -0
- data/vendor/assets/javascripts/1.3.1/angular-mocks.js +2289 -0
- data/vendor/assets/javascripts/1.3.1/angular-resource.js +667 -0
- data/vendor/assets/javascripts/1.3.1/angular-route.js +978 -0
- data/vendor/assets/javascripts/1.3.1/angular-sanitize.js +678 -0
- data/vendor/assets/javascripts/1.3.1/angular-scenario.js +36979 -0
- data/vendor/assets/javascripts/1.3.1/angular-touch.js +622 -0
- data/vendor/assets/javascripts/1.3.1/angular.js +25625 -0
- data/vendor/assets/javascripts/angular-animate.js +78 -54
- data/vendor/assets/javascripts/angular-aria.js +5 -5
- data/vendor/assets/javascripts/angular-cookies.js +4 -4
- data/vendor/assets/javascripts/angular-loader.js +6 -6
- data/vendor/assets/javascripts/angular-messages.js +15 -15
- data/vendor/assets/javascripts/angular-mocks.js +34 -32
- data/vendor/assets/javascripts/angular-resource.js +22 -22
- data/vendor/assets/javascripts/angular-route.js +8 -8
- data/vendor/assets/javascripts/angular-sanitize.js +94 -63
- data/vendor/assets/javascripts/angular-scenario.js +532 -497
- data/vendor/assets/javascripts/angular-touch.js +3 -3
- data/vendor/assets/javascripts/angular.js +516 -475
- metadata +14 -2
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license AngularJS v1.3.
|
2
|
+
* @license AngularJS v1.3.1
|
3
3
|
* (c) 2010-2014 Google, Inc. http://angularjs.org
|
4
4
|
* License: MIT
|
5
5
|
*/
|
@@ -39,7 +39,7 @@ var ngRouteModule = angular.module('ngRoute', ['ng']).
|
|
39
39
|
* ## Dependencies
|
40
40
|
* Requires the {@link ngRoute `ngRoute`} module to be installed.
|
41
41
|
*/
|
42
|
-
function $RouteProvider(){
|
42
|
+
function $RouteProvider() {
|
43
43
|
function inherit(parent, extra) {
|
44
44
|
return angular.extend(new (angular.extend(function() {}, {prototype:parent}))(), extra);
|
45
45
|
}
|
@@ -188,7 +188,7 @@ function $RouteProvider(){
|
|
188
188
|
|
189
189
|
path = path
|
190
190
|
.replace(/([().])/g, '\\$1')
|
191
|
-
.replace(/(\/)?:(\w+)([\?\*])?/g, function(_, slash, key, option){
|
191
|
+
.replace(/(\/)?:(\w+)([\?\*])?/g, function(_, slash, key, option) {
|
192
192
|
var optional = option === '?' ? option : null;
|
193
193
|
var star = option === '*' ? option : null;
|
194
194
|
keys.push({ name: key, optional: !!optional });
|
@@ -870,7 +870,7 @@ ngRouteModule.directive('ngView', ngViewFillContentFactory);
|
|
870
870
|
* Emitted every time the ngView content is reloaded.
|
871
871
|
*/
|
872
872
|
ngViewFactory.$inject = ['$route', '$anchorScroll', '$animate'];
|
873
|
-
function ngViewFactory(
|
873
|
+
function ngViewFactory($route, $anchorScroll, $animate) {
|
874
874
|
return {
|
875
875
|
restrict: 'ECA',
|
876
876
|
terminal: true,
|
@@ -887,16 +887,16 @@ function ngViewFactory( $route, $anchorScroll, $animate) {
|
|
887
887
|
update();
|
888
888
|
|
889
889
|
function cleanupLastView() {
|
890
|
-
if(previousLeaveAnimation) {
|
890
|
+
if (previousLeaveAnimation) {
|
891
891
|
$animate.cancel(previousLeaveAnimation);
|
892
892
|
previousLeaveAnimation = null;
|
893
893
|
}
|
894
894
|
|
895
|
-
if(currentScope) {
|
895
|
+
if (currentScope) {
|
896
896
|
currentScope.$destroy();
|
897
897
|
currentScope = null;
|
898
898
|
}
|
899
|
-
if(currentElement) {
|
899
|
+
if (currentElement) {
|
900
900
|
previousLeaveAnimation = $animate.leave(currentElement);
|
901
901
|
previousLeaveAnimation.then(function() {
|
902
902
|
previousLeaveAnimation = null;
|
@@ -920,7 +920,7 @@ function ngViewFactory( $route, $anchorScroll, $animate) {
|
|
920
920
|
// function is called before linking the content, which would apply child
|
921
921
|
// directives to non existing elements.
|
922
922
|
var clone = $transclude(newScope, function(clone) {
|
923
|
-
$animate.enter(clone, null, currentElement || $element).then(function onNgViewEnter
|
923
|
+
$animate.enter(clone, null, currentElement || $element).then(function onNgViewEnter() {
|
924
924
|
if (angular.isDefined(autoScrollExp)
|
925
925
|
&& (!autoScrollExp || scope.$eval(autoScrollExp))) {
|
926
926
|
$anchorScroll();
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license AngularJS v1.3.
|
2
|
+
* @license AngularJS v1.3.1
|
3
3
|
* (c) 2010-2014 Google, Inc. http://angularjs.org
|
4
4
|
* License: MIT
|
5
5
|
*/
|
@@ -45,16 +45,16 @@ var $sanitizeMinErr = angular.$$minErr('$sanitize');
|
|
45
45
|
* @kind function
|
46
46
|
*
|
47
47
|
* @description
|
48
|
-
* The input is sanitized by parsing the
|
48
|
+
* The input is sanitized by parsing the HTML into tokens. All safe tokens (from a whitelist) are
|
49
49
|
* then serialized back to properly escaped html string. This means that no unsafe input can make
|
50
50
|
* it into the returned string, however, since our parser is more strict than a typical browser
|
51
51
|
* parser, it's possible that some obscure input, which would be recognized as valid HTML by a
|
52
|
-
* browser, won't make it through the sanitizer.
|
52
|
+
* browser, won't make it through the sanitizer. The input may also contain SVG markup.
|
53
53
|
* The whitelist is configured using the functions `aHrefSanitizationWhitelist` and
|
54
54
|
* `imgSrcSanitizationWhitelist` of {@link ng.$compileProvider `$compileProvider`}.
|
55
55
|
*
|
56
|
-
* @param {string} html
|
57
|
-
* @returns {string} Sanitized
|
56
|
+
* @param {string} html HTML input.
|
57
|
+
* @returns {string} Sanitized HTML.
|
58
58
|
*
|
59
59
|
* @example
|
60
60
|
<example module="sanitizeExample" deps="angular-sanitize.js">
|
@@ -198,6 +198,12 @@ var inlineElements = angular.extend({}, optionalEndTagInlineElements, makeMap("a
|
|
198
198
|
"bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s," +
|
199
199
|
"samp,small,span,strike,strong,sub,sup,time,tt,u,var"));
|
200
200
|
|
201
|
+
// SVG Elements
|
202
|
+
// https://wiki.whatwg.org/wiki/Sanitization_rules#svg_Elements
|
203
|
+
var svgElements = makeMap("animate,animateColor,animateMotion,animateTransform,circle,defs," +
|
204
|
+
"desc,ellipse,font-face,font-face-name,font-face-src,g,glyph,hkern,image,linearGradient," +
|
205
|
+
"line,marker,metadata,missing-glyph,mpath,path,polygon,polyline,radialGradient,rect,set," +
|
206
|
+
"stop,svg,switch,text,title,tspan,use");
|
201
207
|
|
202
208
|
// Special Elements (can contain anything)
|
203
209
|
var specialElements = makeMap("script,style");
|
@@ -206,16 +212,41 @@ var validElements = angular.extend({},
|
|
206
212
|
voidElements,
|
207
213
|
blockElements,
|
208
214
|
inlineElements,
|
209
|
-
optionalEndTagElements
|
215
|
+
optionalEndTagElements,
|
216
|
+
svgElements);
|
210
217
|
|
211
218
|
//Attributes that have href and hence need to be sanitized
|
212
|
-
var uriAttrs = makeMap("background,cite,href,longdesc,src,usemap");
|
213
|
-
|
214
|
-
|
219
|
+
var uriAttrs = makeMap("background,cite,href,longdesc,src,usemap,xlink:href");
|
220
|
+
|
221
|
+
var htmlAttrs = makeMap('abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,'+
|
215
222
|
'color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,'+
|
216
223
|
'ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,'+
|
217
224
|
'scope,scrolling,shape,size,span,start,summary,target,title,type,'+
|
218
|
-
'valign,value,vspace,width')
|
225
|
+
'valign,value,vspace,width');
|
226
|
+
|
227
|
+
// SVG attributes (without "id" and "name" attributes)
|
228
|
+
// https://wiki.whatwg.org/wiki/Sanitization_rules#svg_Attributes
|
229
|
+
var svgAttrs = makeMap('accent-height,accumulate,additive,alphabetic,arabic-form,ascent,'+
|
230
|
+
'attributeName,attributeType,baseProfile,bbox,begin,by,calcMode,cap-height,class,color,'+
|
231
|
+
'color-rendering,content,cx,cy,d,dx,dy,descent,display,dur,end,fill,fill-rule,font-family,'+
|
232
|
+
'font-size,font-stretch,font-style,font-variant,font-weight,from,fx,fy,g1,g2,glyph-name,'+
|
233
|
+
'gradientUnits,hanging,height,horiz-adv-x,horiz-origin-x,ideographic,k,keyPoints,'+
|
234
|
+
'keySplines,keyTimes,lang,marker-end,marker-mid,marker-start,markerHeight,markerUnits,'+
|
235
|
+
'markerWidth,mathematical,max,min,offset,opacity,orient,origin,overline-position,'+
|
236
|
+
'overline-thickness,panose-1,path,pathLength,points,preserveAspectRatio,r,refX,refY,'+
|
237
|
+
'repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,rotate,rx,ry,slope,stemh,'+
|
238
|
+
'stemv,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,stroke,'+
|
239
|
+
'stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,'+
|
240
|
+
'stroke-opacity,stroke-width,systemLanguage,target,text-anchor,to,transform,type,u1,u2,'+
|
241
|
+
'underline-position,underline-thickness,unicode,unicode-range,units-per-em,values,version,'+
|
242
|
+
'viewBox,visibility,width,widths,x,x-height,x1,x2,xlink:actuate,xlink:arcrole,xlink:role,'+
|
243
|
+
'xlink:show,xlink:title,xlink:type,xml:base,xml:lang,xml:space,xmlns,xmlns:xlink,y,y1,y2,'+
|
244
|
+
'zoomAndPan');
|
245
|
+
|
246
|
+
var validAttrs = angular.extend({},
|
247
|
+
uriAttrs,
|
248
|
+
svgAttrs,
|
249
|
+
htmlAttrs);
|
219
250
|
|
220
251
|
function makeMap(str) {
|
221
252
|
var obj = {}, items = str.split(','), i;
|
@@ -236,7 +267,7 @@ function makeMap(str) {
|
|
236
267
|
* @param {string} html string
|
237
268
|
* @param {object} handler
|
238
269
|
*/
|
239
|
-
function htmlParser(
|
270
|
+
function htmlParser(html, handler) {
|
240
271
|
if (typeof html !== 'string') {
|
241
272
|
if (html === null || typeof html === 'undefined') {
|
242
273
|
html = '';
|
@@ -247,50 +278,50 @@ function htmlParser( html, handler ) {
|
|
247
278
|
var index, chars, match, stack = [], last = html, text;
|
248
279
|
stack.last = function() { return stack[ stack.length - 1 ]; };
|
249
280
|
|
250
|
-
while (
|
281
|
+
while (html) {
|
251
282
|
text = '';
|
252
283
|
chars = true;
|
253
284
|
|
254
285
|
// Make sure we're not in a script or style element
|
255
|
-
if (
|
286
|
+
if (!stack.last() || !specialElements[ stack.last() ]) {
|
256
287
|
|
257
288
|
// Comment
|
258
|
-
if (
|
289
|
+
if (html.indexOf("<!--") === 0) {
|
259
290
|
// comments containing -- are not allowed unless they terminate the comment
|
260
291
|
index = html.indexOf("--", 4);
|
261
292
|
|
262
|
-
if (
|
263
|
-
if (handler.comment) handler.comment(
|
264
|
-
html = html.substring(
|
293
|
+
if (index >= 0 && html.lastIndexOf("-->", index) === index) {
|
294
|
+
if (handler.comment) handler.comment(html.substring(4, index));
|
295
|
+
html = html.substring(index + 3);
|
265
296
|
chars = false;
|
266
297
|
}
|
267
298
|
// DOCTYPE
|
268
|
-
} else if (
|
269
|
-
match = html.match(
|
299
|
+
} else if (DOCTYPE_REGEXP.test(html)) {
|
300
|
+
match = html.match(DOCTYPE_REGEXP);
|
270
301
|
|
271
|
-
if (
|
272
|
-
html = html.replace(
|
302
|
+
if (match) {
|
303
|
+
html = html.replace(match[0], '');
|
273
304
|
chars = false;
|
274
305
|
}
|
275
306
|
// end tag
|
276
|
-
} else if (
|
277
|
-
match = html.match(
|
307
|
+
} else if (BEGING_END_TAGE_REGEXP.test(html)) {
|
308
|
+
match = html.match(END_TAG_REGEXP);
|
278
309
|
|
279
|
-
if (
|
280
|
-
html = html.substring(
|
281
|
-
match[0].replace(
|
310
|
+
if (match) {
|
311
|
+
html = html.substring(match[0].length);
|
312
|
+
match[0].replace(END_TAG_REGEXP, parseEndTag);
|
282
313
|
chars = false;
|
283
314
|
}
|
284
315
|
|
285
316
|
// start tag
|
286
|
-
} else if (
|
287
|
-
match = html.match(
|
317
|
+
} else if (BEGIN_TAG_REGEXP.test(html)) {
|
318
|
+
match = html.match(START_TAG_REGEXP);
|
288
319
|
|
289
|
-
if (
|
320
|
+
if (match) {
|
290
321
|
// We only have a valid start-tag if there is a '>'.
|
291
|
-
if (
|
292
|
-
html = html.substring(
|
293
|
-
match[0].replace(
|
322
|
+
if (match[4]) {
|
323
|
+
html = html.substring(match[0].length);
|
324
|
+
match[0].replace(START_TAG_REGEXP, parseStartTag);
|
294
325
|
}
|
295
326
|
chars = false;
|
296
327
|
} else {
|
@@ -300,29 +331,29 @@ function htmlParser( html, handler ) {
|
|
300
331
|
}
|
301
332
|
}
|
302
333
|
|
303
|
-
if (
|
334
|
+
if (chars) {
|
304
335
|
index = html.indexOf("<");
|
305
336
|
|
306
|
-
text += index < 0 ? html : html.substring(
|
307
|
-
html = index < 0 ? "" : html.substring(
|
337
|
+
text += index < 0 ? html : html.substring(0, index);
|
338
|
+
html = index < 0 ? "" : html.substring(index);
|
308
339
|
|
309
|
-
if (handler.chars) handler.chars(
|
340
|
+
if (handler.chars) handler.chars(decodeEntities(text));
|
310
341
|
}
|
311
342
|
|
312
343
|
} else {
|
313
344
|
html = html.replace(new RegExp("(.*)<\\s*\\/\\s*" + stack.last() + "[^>]*>", 'i'),
|
314
|
-
function(all, text){
|
345
|
+
function(all, text) {
|
315
346
|
text = text.replace(COMMENT_REGEXP, "$1").replace(CDATA_REGEXP, "$1");
|
316
347
|
|
317
|
-
if (handler.chars) handler.chars(
|
348
|
+
if (handler.chars) handler.chars(decodeEntities(text));
|
318
349
|
|
319
350
|
return "";
|
320
351
|
});
|
321
352
|
|
322
|
-
parseEndTag(
|
353
|
+
parseEndTag("", stack.last());
|
323
354
|
}
|
324
355
|
|
325
|
-
if (
|
356
|
+
if (html == last) {
|
326
357
|
throw $sanitizeMinErr('badparse', "The sanitizer was unable to parse the following block " +
|
327
358
|
"of html: {0}", html);
|
328
359
|
}
|
@@ -332,22 +363,22 @@ function htmlParser( html, handler ) {
|
|
332
363
|
// Clean up any remaining tags
|
333
364
|
parseEndTag();
|
334
365
|
|
335
|
-
function parseStartTag(
|
366
|
+
function parseStartTag(tag, tagName, rest, unary) {
|
336
367
|
tagName = angular.lowercase(tagName);
|
337
|
-
if (
|
338
|
-
while (
|
339
|
-
parseEndTag(
|
368
|
+
if (blockElements[ tagName ]) {
|
369
|
+
while (stack.last() && inlineElements[ stack.last() ]) {
|
370
|
+
parseEndTag("", stack.last());
|
340
371
|
}
|
341
372
|
}
|
342
373
|
|
343
|
-
if (
|
344
|
-
parseEndTag(
|
374
|
+
if (optionalEndTagElements[ tagName ] && stack.last() == tagName) {
|
375
|
+
parseEndTag("", tagName);
|
345
376
|
}
|
346
377
|
|
347
378
|
unary = voidElements[ tagName ] || !!unary;
|
348
379
|
|
349
|
-
if (
|
350
|
-
stack.push(
|
380
|
+
if (!unary)
|
381
|
+
stack.push(tagName);
|
351
382
|
|
352
383
|
var attrs = {};
|
353
384
|
|
@@ -360,22 +391,22 @@ function htmlParser( html, handler ) {
|
|
360
391
|
|
361
392
|
attrs[name] = decodeEntities(value);
|
362
393
|
});
|
363
|
-
if (handler.start) handler.start(
|
394
|
+
if (handler.start) handler.start(tagName, attrs, unary);
|
364
395
|
}
|
365
396
|
|
366
|
-
function parseEndTag(
|
397
|
+
function parseEndTag(tag, tagName) {
|
367
398
|
var pos = 0, i;
|
368
399
|
tagName = angular.lowercase(tagName);
|
369
|
-
if (
|
400
|
+
if (tagName)
|
370
401
|
// Find the closest opened tag of the same type
|
371
|
-
for (
|
372
|
-
if (
|
402
|
+
for (pos = stack.length - 1; pos >= 0; pos--)
|
403
|
+
if (stack[ pos ] == tagName)
|
373
404
|
break;
|
374
405
|
|
375
|
-
if (
|
406
|
+
if (pos >= 0) {
|
376
407
|
// Close all the open elements, up the stack
|
377
|
-
for (
|
378
|
-
if (handler.end) handler.end(
|
408
|
+
for (i = stack.length - 1; i >= pos; i--)
|
409
|
+
if (handler.end) handler.end(stack[ i ]);
|
379
410
|
|
380
411
|
// Remove the open elements from the stack
|
381
412
|
stack.length = pos;
|
@@ -421,12 +452,12 @@ function decodeEntities(value) {
|
|
421
452
|
function encodeEntities(value) {
|
422
453
|
return value.
|
423
454
|
replace(/&/g, '&').
|
424
|
-
replace(SURROGATE_PAIR_REGEXP, function
|
455
|
+
replace(SURROGATE_PAIR_REGEXP, function(value) {
|
425
456
|
var hi = value.charCodeAt(0);
|
426
457
|
var low = value.charCodeAt(1);
|
427
458
|
return '&#' + (((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000) + ';';
|
428
459
|
}).
|
429
|
-
replace(NON_ALPHANUMERIC_REGEXP, function(value){
|
460
|
+
replace(NON_ALPHANUMERIC_REGEXP, function(value) {
|
430
461
|
return '&#' + value.charCodeAt(0) + ';';
|
431
462
|
}).
|
432
463
|
replace(/</g, '<').
|
@@ -443,11 +474,11 @@ function encodeEntities(value) {
|
|
443
474
|
* comment: function(text) {}
|
444
475
|
* }
|
445
476
|
*/
|
446
|
-
function htmlSanitizeWriter(buf, uriValidator){
|
477
|
+
function htmlSanitizeWriter(buf, uriValidator) {
|
447
478
|
var ignore = false;
|
448
479
|
var out = angular.bind(buf, buf.push);
|
449
480
|
return {
|
450
|
-
start: function(tag, attrs, unary){
|
481
|
+
start: function(tag, attrs, unary) {
|
451
482
|
tag = angular.lowercase(tag);
|
452
483
|
if (!ignore && specialElements[tag]) {
|
453
484
|
ignore = tag;
|
@@ -455,7 +486,7 @@ function htmlSanitizeWriter(buf, uriValidator){
|
|
455
486
|
if (!ignore && validElements[tag] === true) {
|
456
487
|
out('<');
|
457
488
|
out(tag);
|
458
|
-
angular.forEach(attrs, function(value, key){
|
489
|
+
angular.forEach(attrs, function(value, key) {
|
459
490
|
var lkey=angular.lowercase(key);
|
460
491
|
var isImage = (tag === 'img' && lkey === 'src') || (lkey === 'background');
|
461
492
|
if (validAttrs[lkey] === true &&
|
@@ -470,7 +501,7 @@ function htmlSanitizeWriter(buf, uriValidator){
|
|
470
501
|
out(unary ? '/>' : '>');
|
471
502
|
}
|
472
503
|
},
|
473
|
-
end: function(tag){
|
504
|
+
end: function(tag) {
|
474
505
|
tag = angular.lowercase(tag);
|
475
506
|
if (!ignore && validElements[tag] === true) {
|
476
507
|
out('</');
|
@@ -481,7 +512,7 @@ function htmlSanitizeWriter(buf, uriValidator){
|
|
481
512
|
ignore = false;
|
482
513
|
}
|
483
514
|
},
|
484
|
-
chars: function(chars){
|
515
|
+
chars: function(chars) {
|
485
516
|
if (!ignore) {
|
486
517
|
out(encodeEntities(chars));
|
487
518
|
}
|
@@ -9190,7 +9190,7 @@ return jQuery;
|
|
9190
9190
|
}));
|
9191
9191
|
|
9192
9192
|
/**
|
9193
|
-
* @license AngularJS v1.3.
|
9193
|
+
* @license AngularJS v1.3.1
|
9194
9194
|
* (c) 2010-2014 Google, Inc. http://angularjs.org
|
9195
9195
|
* License: MIT
|
9196
9196
|
*/
|
@@ -9229,12 +9229,12 @@ return jQuery;
|
|
9229
9229
|
|
9230
9230
|
function minErr(module, ErrorConstructor) {
|
9231
9231
|
ErrorConstructor = ErrorConstructor || Error;
|
9232
|
-
return function
|
9232
|
+
return function() {
|
9233
9233
|
var code = arguments[0],
|
9234
9234
|
prefix = '[' + (module ? module + ':' : '') + code + '] ',
|
9235
9235
|
template = arguments[1],
|
9236
9236
|
templateArgs = arguments,
|
9237
|
-
stringify = function
|
9237
|
+
stringify = function(obj) {
|
9238
9238
|
if (typeof obj === 'function') {
|
9239
9239
|
return obj.toString().replace(/ \{[\s\S]*$/, '');
|
9240
9240
|
} else if (typeof obj === 'undefined') {
|
@@ -9246,7 +9246,7 @@ function minErr(module, ErrorConstructor) {
|
|
9246
9246
|
},
|
9247
9247
|
message, i;
|
9248
9248
|
|
9249
|
-
message = prefix + template.replace(/\{\d+\}/g, function
|
9249
|
+
message = prefix + template.replace(/\{\d+\}/g, function(match) {
|
9250
9250
|
var index = +match.slice(1, -1), arg;
|
9251
9251
|
|
9252
9252
|
if (index + 2 < templateArgs.length) {
|
@@ -9263,7 +9263,7 @@ function minErr(module, ErrorConstructor) {
|
|
9263
9263
|
return match;
|
9264
9264
|
});
|
9265
9265
|
|
9266
|
-
message = message + '\nhttp://errors.angularjs.org/1.3.
|
9266
|
+
message = message + '\nhttp://errors.angularjs.org/1.3.1/' +
|
9267
9267
|
(module ? module + '/' : '') + code;
|
9268
9268
|
for (i = 2; i < arguments.length; i++) {
|
9269
9269
|
message = message + (i == 2 ? '?' : '&') + 'p' + (i-2) + '=' +
|
@@ -9322,12 +9322,11 @@ function minErr(module, ErrorConstructor) {
|
|
9322
9322
|
isBoolean: true,
|
9323
9323
|
isPromiseLike: true,
|
9324
9324
|
trim: true,
|
9325
|
+
escapeForRegexp: true,
|
9325
9326
|
isElement: true,
|
9326
9327
|
makeMap: true,
|
9327
|
-
size: true,
|
9328
9328
|
includes: true,
|
9329
9329
|
arrayRemove: true,
|
9330
|
-
isLeafNode: true,
|
9331
9330
|
copy: true,
|
9332
9331
|
shallowCopy: true,
|
9333
9332
|
equals: true,
|
@@ -9397,7 +9396,7 @@ var VALIDITY_STATE_PROPERTY = 'validity';
|
|
9397
9396
|
* @param {string} string String to be converted to lowercase.
|
9398
9397
|
* @returns {string} Lowercased string.
|
9399
9398
|
*/
|
9400
|
-
var lowercase = function(string){return isString(string) ? string.toLowerCase() : string;};
|
9399
|
+
var lowercase = function(string) {return isString(string) ? string.toLowerCase() : string;};
|
9401
9400
|
var hasOwnProperty = Object.prototype.hasOwnProperty;
|
9402
9401
|
|
9403
9402
|
/**
|
@@ -9410,7 +9409,7 @@ var hasOwnProperty = Object.prototype.hasOwnProperty;
|
|
9410
9409
|
* @param {string} string String to be converted to uppercase.
|
9411
9410
|
* @returns {string} Uppercased string.
|
9412
9411
|
*/
|
9413
|
-
var uppercase = function(string){return isString(string) ? string.toUpperCase() : string;};
|
9412
|
+
var uppercase = function(string) {return isString(string) ? string.toUpperCase() : string;};
|
9414
9413
|
|
9415
9414
|
|
9416
9415
|
var manualLowercase = function(s) {
|
@@ -9493,6 +9492,11 @@ function isArrayLike(obj) {
|
|
9493
9492
|
*
|
9494
9493
|
* It is worth noting that `.forEach` does not iterate over inherited properties because it filters
|
9495
9494
|
* using the `hasOwnProperty` method.
|
9495
|
+
*
|
9496
|
+
* Unlike ES262's
|
9497
|
+
* [Array.prototype.forEach](http://www.ecma-international.org/ecma-262/5.1/#sec-15.4.4.18),
|
9498
|
+
* Providing 'undefined' or 'null' values for `obj` will not throw a TypeError, but rather just
|
9499
|
+
* return the value provided.
|
9496
9500
|
*
|
9497
9501
|
```js
|
9498
9502
|
var values = {name: 'misko', gender: 'male'};
|
@@ -9541,18 +9545,12 @@ function forEach(obj, iterator, context) {
|
|
9541
9545
|
}
|
9542
9546
|
|
9543
9547
|
function sortedKeys(obj) {
|
9544
|
-
|
9545
|
-
for (var key in obj) {
|
9546
|
-
if (obj.hasOwnProperty(key)) {
|
9547
|
-
keys.push(key);
|
9548
|
-
}
|
9549
|
-
}
|
9550
|
-
return keys.sort();
|
9548
|
+
return Object.keys(obj).sort();
|
9551
9549
|
}
|
9552
9550
|
|
9553
9551
|
function forEachSorted(obj, iterator, context) {
|
9554
9552
|
var keys = sortedKeys(obj);
|
9555
|
-
for (
|
9553
|
+
for (var i = 0; i < keys.length; i++) {
|
9556
9554
|
iterator.call(context, obj[keys[i]], keys[i]);
|
9557
9555
|
}
|
9558
9556
|
return keys;
|
@@ -9607,6 +9605,7 @@ function setHashKey(obj, h) {
|
|
9607
9605
|
* Extends the destination object `dst` by copying own enumerable properties from the `src` object(s)
|
9608
9606
|
* to `dst`. You can specify multiple `src` objects. If you want to preserve original objects, you can do so
|
9609
9607
|
* by passing an empty object as the target: `var object = angular.extend({}, object1, object2)`.
|
9608
|
+
* Note: Keep in mind that `angular.extend` does not support recursive merge (deep copy).
|
9610
9609
|
*
|
9611
9610
|
* @param {Object} dst Destination object.
|
9612
9611
|
* @param {...Object} src Source object(s).
|
@@ -9693,7 +9692,7 @@ function valueFn(value) {return function() {return value;};}
|
|
9693
9692
|
* @param {*} value Reference to check.
|
9694
9693
|
* @returns {boolean} True if `value` is undefined.
|
9695
9694
|
*/
|
9696
|
-
function isUndefined(value){return typeof value === 'undefined';}
|
9695
|
+
function isUndefined(value) {return typeof value === 'undefined';}
|
9697
9696
|
|
9698
9697
|
|
9699
9698
|
/**
|
@@ -9708,7 +9707,7 @@ function isUndefined(value){return typeof value === 'undefined';}
|
|
9708
9707
|
* @param {*} value Reference to check.
|
9709
9708
|
* @returns {boolean} True if `value` is defined.
|
9710
9709
|
*/
|
9711
|
-
function isDefined(value){return typeof value !== 'undefined';}
|
9710
|
+
function isDefined(value) {return typeof value !== 'undefined';}
|
9712
9711
|
|
9713
9712
|
|
9714
9713
|
/**
|
@@ -9724,7 +9723,7 @@ function isDefined(value){return typeof value !== 'undefined';}
|
|
9724
9723
|
* @param {*} value Reference to check.
|
9725
9724
|
* @returns {boolean} True if `value` is an `Object` but not `null`.
|
9726
9725
|
*/
|
9727
|
-
function isObject(value){
|
9726
|
+
function isObject(value) {
|
9728
9727
|
// http://jsperf.com/isobject4
|
9729
9728
|
return value !== null && typeof value === 'object';
|
9730
9729
|
}
|
@@ -9742,7 +9741,7 @@ function isObject(value){
|
|
9742
9741
|
* @param {*} value Reference to check.
|
9743
9742
|
* @returns {boolean} True if `value` is a `String`.
|
9744
9743
|
*/
|
9745
|
-
function isString(value){return typeof value === 'string';}
|
9744
|
+
function isString(value) {return typeof value === 'string';}
|
9746
9745
|
|
9747
9746
|
|
9748
9747
|
/**
|
@@ -9757,7 +9756,7 @@ function isString(value){return typeof value === 'string';}
|
|
9757
9756
|
* @param {*} value Reference to check.
|
9758
9757
|
* @returns {boolean} True if `value` is a `Number`.
|
9759
9758
|
*/
|
9760
|
-
function isNumber(value){return typeof value === 'number';}
|
9759
|
+
function isNumber(value) {return typeof value === 'number';}
|
9761
9760
|
|
9762
9761
|
|
9763
9762
|
/**
|
@@ -9803,7 +9802,7 @@ var isArray = Array.isArray;
|
|
9803
9802
|
* @param {*} value Reference to check.
|
9804
9803
|
* @returns {boolean} True if `value` is a `Function`.
|
9805
9804
|
*/
|
9806
|
-
function isFunction(value){return typeof value === 'function';}
|
9805
|
+
function isFunction(value) {return typeof value === 'function';}
|
9807
9806
|
|
9808
9807
|
|
9809
9808
|
/**
|
@@ -9859,6 +9858,14 @@ var trim = function(value) {
|
|
9859
9858
|
return isString(value) ? value.trim() : value;
|
9860
9859
|
};
|
9861
9860
|
|
9861
|
+
// Copied from:
|
9862
|
+
// http://docs.closure-library.googlecode.com/git/local_closure_goog_string_string.js.source.html#line1021
|
9863
|
+
// Prereq: s is a string.
|
9864
|
+
var escapeForRegexp = function(s) {
|
9865
|
+
return s.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, '\\$1').
|
9866
|
+
replace(/\x08/g, '\\x08');
|
9867
|
+
};
|
9868
|
+
|
9862
9869
|
|
9863
9870
|
/**
|
9864
9871
|
* @ngdoc function
|
@@ -9884,7 +9891,7 @@ function isElement(node) {
|
|
9884
9891
|
*/
|
9885
9892
|
function makeMap(str) {
|
9886
9893
|
var obj = {}, items = str.split(","), i;
|
9887
|
-
for (
|
9894
|
+
for (i = 0; i < items.length; i++)
|
9888
9895
|
obj[ items[i] ] = true;
|
9889
9896
|
return obj;
|
9890
9897
|
}
|
@@ -9894,34 +9901,6 @@ function nodeName_(element) {
|
|
9894
9901
|
return lowercase(element.nodeName || element[0].nodeName);
|
9895
9902
|
}
|
9896
9903
|
|
9897
|
-
|
9898
|
-
/**
|
9899
|
-
* @description
|
9900
|
-
* Determines the number of elements in an array, the number of properties an object has, or
|
9901
|
-
* the length of a string.
|
9902
|
-
*
|
9903
|
-
* Note: This function is used to augment the Object type in Angular expressions. See
|
9904
|
-
* {@link angular.Object} for more information about Angular arrays.
|
9905
|
-
*
|
9906
|
-
* @param {Object|Array|string} obj Object, array, or string to inspect.
|
9907
|
-
* @param {boolean} [ownPropsOnly=false] Count only "own" properties in an object
|
9908
|
-
* @returns {number} The size of `obj` or `0` if `obj` is neither an object nor an array.
|
9909
|
-
*/
|
9910
|
-
function size(obj, ownPropsOnly) {
|
9911
|
-
var count = 0, key;
|
9912
|
-
|
9913
|
-
if (isArray(obj) || isString(obj)) {
|
9914
|
-
return obj.length;
|
9915
|
-
} else if (isObject(obj)) {
|
9916
|
-
for (key in obj)
|
9917
|
-
if (!ownPropsOnly || obj.hasOwnProperty(key))
|
9918
|
-
count++;
|
9919
|
-
}
|
9920
|
-
|
9921
|
-
return count;
|
9922
|
-
}
|
9923
|
-
|
9924
|
-
|
9925
9904
|
function includes(array, obj) {
|
9926
9905
|
return Array.prototype.indexOf.call(array, obj) != -1;
|
9927
9906
|
}
|
@@ -9933,18 +9912,6 @@ function arrayRemove(array, value) {
|
|
9933
9912
|
return value;
|
9934
9913
|
}
|
9935
9914
|
|
9936
|
-
function isLeafNode (node) {
|
9937
|
-
if (node) {
|
9938
|
-
switch (nodeName_(node)) {
|
9939
|
-
case "option":
|
9940
|
-
case "pre":
|
9941
|
-
case "title":
|
9942
|
-
return true;
|
9943
|
-
}
|
9944
|
-
}
|
9945
|
-
return false;
|
9946
|
-
}
|
9947
|
-
|
9948
9915
|
/**
|
9949
9916
|
* @ngdoc function
|
9950
9917
|
* @name angular.copy
|
@@ -10042,7 +10009,7 @@ function copy(source, destination, stackSource, stackDest) {
|
|
10042
10009
|
var result;
|
10043
10010
|
if (isArray(source)) {
|
10044
10011
|
destination.length = 0;
|
10045
|
-
for (
|
10012
|
+
for (var i = 0; i < source.length; i++) {
|
10046
10013
|
result = copy(source[i], null, stackSource, stackDest);
|
10047
10014
|
if (isObject(source[i])) {
|
10048
10015
|
stackSource.push(source[i]);
|
@@ -10059,8 +10026,8 @@ function copy(source, destination, stackSource, stackDest) {
|
|
10059
10026
|
delete destination[key];
|
10060
10027
|
});
|
10061
10028
|
}
|
10062
|
-
for (
|
10063
|
-
if(source.hasOwnProperty(key)) {
|
10029
|
+
for (var key in source) {
|
10030
|
+
if (source.hasOwnProperty(key)) {
|
10064
10031
|
result = copy(source[key], null, stackSource, stackDest);
|
10065
10032
|
if (isObject(source[key])) {
|
10066
10033
|
stackSource.push(source[key]);
|
@@ -10141,7 +10108,7 @@ function equals(o1, o2) {
|
|
10141
10108
|
if (isArray(o1)) {
|
10142
10109
|
if (!isArray(o2)) return false;
|
10143
10110
|
if ((length = o1.length) == o2.length) {
|
10144
|
-
for(key=0; key<length; key++) {
|
10111
|
+
for (key=0; key<length; key++) {
|
10145
10112
|
if (!equals(o1[key], o2[key])) return false;
|
10146
10113
|
}
|
10147
10114
|
return true;
|
@@ -10154,12 +10121,12 @@ function equals(o1, o2) {
|
|
10154
10121
|
} else {
|
10155
10122
|
if (isScope(o1) || isScope(o2) || isWindow(o1) || isWindow(o2) || isArray(o2)) return false;
|
10156
10123
|
keySet = {};
|
10157
|
-
for(key in o1) {
|
10124
|
+
for (key in o1) {
|
10158
10125
|
if (key.charAt(0) === '$' || isFunction(o1[key])) continue;
|
10159
10126
|
if (!equals(o1[key], o2[key])) return false;
|
10160
10127
|
keySet[key] = true;
|
10161
10128
|
}
|
10162
|
-
for(key in o2) {
|
10129
|
+
for (key in o2) {
|
10163
10130
|
if (!keySet.hasOwnProperty(key) &&
|
10164
10131
|
key.charAt(0) !== '$' &&
|
10165
10132
|
o2[key] !== undefined &&
|
@@ -10307,14 +10274,14 @@ function startingTag(element) {
|
|
10307
10274
|
// turns out IE does not let you set .html() on elements which
|
10308
10275
|
// are not allowed to have children. So we just ignore it.
|
10309
10276
|
element.empty();
|
10310
|
-
} catch(e) {}
|
10277
|
+
} catch (e) {}
|
10311
10278
|
var elemHtml = jqLite('<div>').append(element).html();
|
10312
10279
|
try {
|
10313
10280
|
return element[0].nodeType === NODE_TYPE_TEXT ? lowercase(elemHtml) :
|
10314
10281
|
elemHtml.
|
10315
10282
|
match(/^(<[^>]+>)/)[1].
|
10316
10283
|
replace(/^<([\w\-]+)/, function(match, nodeName) { return '<' + lowercase(nodeName); });
|
10317
|
-
} catch(e) {
|
10284
|
+
} catch (e) {
|
10318
10285
|
return lowercase(elemHtml);
|
10319
10286
|
}
|
10320
10287
|
|
@@ -10334,7 +10301,7 @@ function startingTag(element) {
|
|
10334
10301
|
function tryDecodeURIComponent(value) {
|
10335
10302
|
try {
|
10336
10303
|
return decodeURIComponent(value);
|
10337
|
-
} catch(e) {
|
10304
|
+
} catch (e) {
|
10338
10305
|
// Ignore any invalid uri component
|
10339
10306
|
}
|
10340
10307
|
}
|
@@ -10347,14 +10314,14 @@ function tryDecodeURIComponent(value) {
|
|
10347
10314
|
function parseKeyValue(/**string*/keyValue) {
|
10348
10315
|
var obj = {}, key_value, key;
|
10349
10316
|
forEach((keyValue || "").split('&'), function(keyValue) {
|
10350
|
-
if (
|
10317
|
+
if (keyValue) {
|
10351
10318
|
key_value = keyValue.replace(/\+/g,'%20').split('=');
|
10352
10319
|
key = tryDecodeURIComponent(key_value[0]);
|
10353
|
-
if (
|
10320
|
+
if (isDefined(key)) {
|
10354
10321
|
var val = isDefined(key_value[1]) ? tryDecodeURIComponent(key_value[1]) : true;
|
10355
10322
|
if (!hasOwnProperty.call(obj, key)) {
|
10356
10323
|
obj[key] = val;
|
10357
|
-
} else if(isArray(obj[key])) {
|
10324
|
+
} else if (isArray(obj[key])) {
|
10358
10325
|
obj[key].push(val);
|
10359
10326
|
} else {
|
10360
10327
|
obj[key] = [obj[key],val];
|
@@ -11191,7 +11158,7 @@ function setupModuleLoader(window) {
|
|
11191
11158
|
config(configFn);
|
11192
11159
|
}
|
11193
11160
|
|
11194
|
-
return
|
11161
|
+
return moduleInstance;
|
11195
11162
|
|
11196
11163
|
/**
|
11197
11164
|
* @param {string} provider
|
@@ -11314,15 +11281,15 @@ function setupModuleLoader(window) {
|
|
11314
11281
|
* - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat".
|
11315
11282
|
*/
|
11316
11283
|
var version = {
|
11317
|
-
full: '1.3.
|
11284
|
+
full: '1.3.1', // all of these placeholder strings will be replaced by grunt's
|
11318
11285
|
major: 1, // package task
|
11319
11286
|
minor: 3,
|
11320
|
-
dot:
|
11321
|
-
codeName: '
|
11287
|
+
dot: 1,
|
11288
|
+
codeName: 'spectral-lobster'
|
11322
11289
|
};
|
11323
11290
|
|
11324
11291
|
|
11325
|
-
function publishExternalAPI(angular){
|
11292
|
+
function publishExternalAPI(angular) {
|
11326
11293
|
extend(angular, {
|
11327
11294
|
'bootstrap': bootstrap,
|
11328
11295
|
'copy': copy,
|
@@ -11448,7 +11415,7 @@ function publishExternalAPI(angular){
|
|
11448
11415
|
$timeout: $TimeoutProvider,
|
11449
11416
|
$window: $WindowProvider,
|
11450
11417
|
$$rAF: $$RAFProvider,
|
11451
|
-
$$asyncCallback
|
11418
|
+
$$asyncCallback: $$AsyncCallbackProvider
|
11452
11419
|
});
|
11453
11420
|
}
|
11454
11421
|
]);
|
@@ -11498,7 +11465,7 @@ function publishExternalAPI(angular){
|
|
11498
11465
|
* - [`children()`](http://api.jquery.com/children/) - Does not support selectors
|
11499
11466
|
* - [`clone()`](http://api.jquery.com/clone/)
|
11500
11467
|
* - [`contents()`](http://api.jquery.com/contents/)
|
11501
|
-
* - [`css()`](http://api.jquery.com/css/) - Only retrieves inline-styles, does not call `
|
11468
|
+
* - [`css()`](http://api.jquery.com/css/) - Only retrieves inline-styles, does not call `getComputedStyle()`
|
11502
11469
|
* - [`data()`](http://api.jquery.com/data/)
|
11503
11470
|
* - [`detach()`](http://api.jquery.com/detach/)
|
11504
11471
|
* - [`empty()`](http://api.jquery.com/empty/)
|
@@ -11576,7 +11543,7 @@ function jqNextId() { return ++jqId; }
|
|
11576
11543
|
|
11577
11544
|
var SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g;
|
11578
11545
|
var MOZ_HACK_REGEXP = /^moz([A-Z])/;
|
11579
|
-
var MOUSE_EVENT_MAP= { mouseleave
|
11546
|
+
var MOUSE_EVENT_MAP= { mouseleave: "mouseout", mouseenter: "mouseover"};
|
11580
11547
|
var jqLiteMinErr = minErr('jqLite');
|
11581
11548
|
|
11582
11549
|
/**
|
@@ -11705,7 +11672,7 @@ function jqLiteClone(element) {
|
|
11705
11672
|
return element.cloneNode(true);
|
11706
11673
|
}
|
11707
11674
|
|
11708
|
-
function jqLiteDealoc(element, onlyDescendants){
|
11675
|
+
function jqLiteDealoc(element, onlyDescendants) {
|
11709
11676
|
if (!onlyDescendants) jqLiteRemoveData(element);
|
11710
11677
|
|
11711
11678
|
if (element.querySelectorAll) {
|
@@ -11812,7 +11779,7 @@ function jqLiteData(element, key, value) {
|
|
11812
11779
|
function jqLiteHasClass(element, selector) {
|
11813
11780
|
if (!element.getAttribute) return false;
|
11814
11781
|
return ((" " + (element.getAttribute('class') || '') + " ").replace(/[\n\t]/g, " ").
|
11815
|
-
indexOf(
|
11782
|
+
indexOf(" " + selector + " ") > -1);
|
11816
11783
|
}
|
11817
11784
|
|
11818
11785
|
function jqLiteRemoveClass(element, cssClasses) {
|
@@ -11871,13 +11838,13 @@ function jqLiteAddNodes(root, elements) {
|
|
11871
11838
|
|
11872
11839
|
|
11873
11840
|
function jqLiteController(element, name) {
|
11874
|
-
return jqLiteInheritedData(element, '$' + (name || 'ngController'
|
11841
|
+
return jqLiteInheritedData(element, '$' + (name || 'ngController') + 'Controller');
|
11875
11842
|
}
|
11876
11843
|
|
11877
11844
|
function jqLiteInheritedData(element, name, value) {
|
11878
11845
|
// if element is the document object work with the html element instead
|
11879
11846
|
// this makes $(document).scope() possible
|
11880
|
-
if(element.nodeType == NODE_TYPE_DOCUMENT) {
|
11847
|
+
if (element.nodeType == NODE_TYPE_DOCUMENT) {
|
11881
11848
|
element = element.documentElement;
|
11882
11849
|
}
|
11883
11850
|
var names = isArray(name) ? name : [name];
|
@@ -11935,7 +11902,7 @@ var JQLitePrototype = JQLite.prototype = {
|
|
11935
11902
|
}
|
11936
11903
|
|
11937
11904
|
// check if document is already loaded
|
11938
|
-
if (document.readyState === 'complete'){
|
11905
|
+
if (document.readyState === 'complete') {
|
11939
11906
|
setTimeout(trigger);
|
11940
11907
|
} else {
|
11941
11908
|
this.on('DOMContentLoaded', trigger); // works for modern browsers and IE9
|
@@ -11943,12 +11910,11 @@ var JQLitePrototype = JQLite.prototype = {
|
|
11943
11910
|
// jshint -W064
|
11944
11911
|
JQLite(window).on('load', trigger); // fallback to window.onload for others
|
11945
11912
|
// jshint +W064
|
11946
|
-
this.on('DOMContentLoaded', trigger);
|
11947
11913
|
}
|
11948
11914
|
},
|
11949
11915
|
toString: function() {
|
11950
11916
|
var value = [];
|
11951
|
-
forEach(this, function(e){ value.push('' + e);});
|
11917
|
+
forEach(this, function(e) { value.push('' + e);});
|
11952
11918
|
return '[' + value.join(', ') + ']';
|
11953
11919
|
},
|
11954
11920
|
|
@@ -11976,11 +11942,11 @@ forEach('input,select,option,textarea,button,form,details'.split(','), function(
|
|
11976
11942
|
BOOLEAN_ELEMENTS[value] = true;
|
11977
11943
|
});
|
11978
11944
|
var ALIASED_ATTR = {
|
11979
|
-
'ngMinlength'
|
11980
|
-
'ngMaxlength'
|
11981
|
-
'ngMin'
|
11982
|
-
'ngMax'
|
11983
|
-
'ngPattern'
|
11945
|
+
'ngMinlength': 'minlength',
|
11946
|
+
'ngMaxlength': 'maxlength',
|
11947
|
+
'ngMin': 'min',
|
11948
|
+
'ngMax': 'max',
|
11949
|
+
'ngPattern': 'pattern'
|
11984
11950
|
};
|
11985
11951
|
|
11986
11952
|
function getBooleanAttrName(element, name) {
|
@@ -12039,7 +12005,7 @@ forEach({
|
|
12039
12005
|
}
|
12040
12006
|
},
|
12041
12007
|
|
12042
|
-
attr: function(element, name, value){
|
12008
|
+
attr: function(element, name, value) {
|
12043
12009
|
var lowercasedName = lowercase(name);
|
12044
12010
|
if (BOOLEAN_ATTR[lowercasedName]) {
|
12045
12011
|
if (isDefined(value)) {
|
@@ -12092,7 +12058,7 @@ forEach({
|
|
12092
12058
|
if (isUndefined(value)) {
|
12093
12059
|
if (element.multiple && nodeName_(element) === 'select') {
|
12094
12060
|
var result = [];
|
12095
|
-
forEach(element.options, function
|
12061
|
+
forEach(element.options, function(option) {
|
12096
12062
|
if (option.selected) {
|
12097
12063
|
result.push(option.value || option.text);
|
12098
12064
|
}
|
@@ -12113,7 +12079,7 @@ forEach({
|
|
12113
12079
|
},
|
12114
12080
|
|
12115
12081
|
empty: jqLiteEmpty
|
12116
|
-
}, function(fn, name){
|
12082
|
+
}, function(fn, name) {
|
12117
12083
|
/**
|
12118
12084
|
* Properties: writes return selection, reads return first value
|
12119
12085
|
*/
|
@@ -12165,7 +12131,7 @@ forEach({
|
|
12165
12131
|
});
|
12166
12132
|
|
12167
12133
|
function createEventHandler(element, events) {
|
12168
|
-
var eventHandler = function
|
12134
|
+
var eventHandler = function(event, type) {
|
12169
12135
|
// jQuery specific api
|
12170
12136
|
event.isDefaultPrevented = function() {
|
12171
12137
|
return event.defaultPrevented;
|
@@ -12221,7 +12187,7 @@ function createEventHandler(element, events) {
|
|
12221
12187
|
forEach({
|
12222
12188
|
removeData: jqLiteRemoveData,
|
12223
12189
|
|
12224
|
-
on: function jqLiteOn(element, type, fn, unsupported){
|
12190
|
+
on: function jqLiteOn(element, type, fn, unsupported) {
|
12225
12191
|
if (isDefined(unsupported)) throw jqLiteMinErr('onargs', 'jqLite#on() does not support the `selector` or `eventData` parameters');
|
12226
12192
|
|
12227
12193
|
// Do not add event handlers to non-elements because they will not be cleaned up.
|
@@ -12257,7 +12223,7 @@ forEach({
|
|
12257
12223
|
var target = this, related = event.relatedTarget;
|
12258
12224
|
// For mousenter/leave call the handler if related is outside the target.
|
12259
12225
|
// NB: No relatedTarget if the mouse left/entered the browser window
|
12260
|
-
if (
|
12226
|
+
if (!related || (related !== target && !target.contains(related))) {
|
12261
12227
|
handle(event, type);
|
12262
12228
|
}
|
12263
12229
|
});
|
@@ -12291,7 +12257,7 @@ forEach({
|
|
12291
12257
|
replaceWith: function(element, replaceNode) {
|
12292
12258
|
var index, parent = element.parentNode;
|
12293
12259
|
jqLiteDealoc(element);
|
12294
|
-
forEach(new JQLite(replaceNode), function(node){
|
12260
|
+
forEach(new JQLite(replaceNode), function(node) {
|
12295
12261
|
if (index) {
|
12296
12262
|
parent.insertBefore(node, index.nextSibling);
|
12297
12263
|
} else {
|
@@ -12303,7 +12269,7 @@ forEach({
|
|
12303
12269
|
|
12304
12270
|
children: function(element) {
|
12305
12271
|
var children = [];
|
12306
|
-
forEach(element.childNodes, function(element){
|
12272
|
+
forEach(element.childNodes, function(element) {
|
12307
12273
|
if (element.nodeType === NODE_TYPE_ELEMENT)
|
12308
12274
|
children.push(element);
|
12309
12275
|
});
|
@@ -12329,7 +12295,7 @@ forEach({
|
|
12329
12295
|
prepend: function(element, node) {
|
12330
12296
|
if (element.nodeType === NODE_TYPE_ELEMENT) {
|
12331
12297
|
var index = element.firstChild;
|
12332
|
-
forEach(new JQLite(node), function(child){
|
12298
|
+
forEach(new JQLite(node), function(child) {
|
12333
12299
|
element.insertBefore(child, index);
|
12334
12300
|
});
|
12335
12301
|
}
|
@@ -12366,7 +12332,7 @@ forEach({
|
|
12366
12332
|
|
12367
12333
|
toggleClass: function(element, selector, condition) {
|
12368
12334
|
if (selector) {
|
12369
|
-
forEach(selector.split(' '), function(className){
|
12335
|
+
forEach(selector.split(' '), function(className) {
|
12370
12336
|
var classCondition = condition;
|
12371
12337
|
if (isUndefined(classCondition)) {
|
12372
12338
|
classCondition = !jqLiteHasClass(element, className);
|
@@ -12431,14 +12397,14 @@ forEach({
|
|
12431
12397
|
});
|
12432
12398
|
}
|
12433
12399
|
}
|
12434
|
-
}, function(fn, name){
|
12400
|
+
}, function(fn, name) {
|
12435
12401
|
/**
|
12436
12402
|
* chaining functions
|
12437
12403
|
*/
|
12438
12404
|
JQLite.prototype[name] = function(arg1, arg2, arg3) {
|
12439
12405
|
var value;
|
12440
12406
|
|
12441
|
-
for(var i = 0, ii = this.length; i < ii; i++) {
|
12407
|
+
for (var i = 0, ii = this.length; i < ii; i++) {
|
12442
12408
|
if (isUndefined(value)) {
|
12443
12409
|
value = fn(this[i], arg1, arg2, arg3);
|
12444
12410
|
if (isDefined(value)) {
|
@@ -13235,7 +13201,7 @@ function createInjector(modulesToLoad, strictDi) {
|
|
13235
13201
|
////////////////////////////////////
|
13236
13202
|
// Module Loading
|
13237
13203
|
////////////////////////////////////
|
13238
|
-
function loadModules(modulesToLoad){
|
13204
|
+
function loadModules(modulesToLoad) {
|
13239
13205
|
var runBlocks = [], moduleFn;
|
13240
13206
|
forEach(modulesToLoad, function(module) {
|
13241
13207
|
if (loadedModules.get(module)) return;
|
@@ -13243,7 +13209,7 @@ function createInjector(modulesToLoad, strictDi) {
|
|
13243
13209
|
|
13244
13210
|
function runInvokeQueue(queue) {
|
13245
13211
|
var i, ii;
|
13246
|
-
for(i = 0, ii = queue.length; i < ii; i++) {
|
13212
|
+
for (i = 0, ii = queue.length; i < ii; i++) {
|
13247
13213
|
var invokeArgs = queue[i],
|
13248
13214
|
provider = providerInjector.get(invokeArgs[0]);
|
13249
13215
|
|
@@ -13323,7 +13289,7 @@ function createInjector(modulesToLoad, strictDi) {
|
|
13323
13289
|
length, i,
|
13324
13290
|
key;
|
13325
13291
|
|
13326
|
-
for(i = 0, length = $inject.length; i < length; i++) {
|
13292
|
+
for (i = 0, length = $inject.length; i < length; i++) {
|
13327
13293
|
key = $inject[i];
|
13328
13294
|
if (typeof key !== 'string') {
|
13329
13295
|
throw $injectorMinErr('itkn',
|
@@ -13539,7 +13505,6 @@ function $AnchorScrollProvider() {
|
|
13539
13505
|
*/
|
13540
13506
|
this.$get = ['$window', '$location', '$rootScope', function($window, $location, $rootScope) {
|
13541
13507
|
var document = $window.document;
|
13542
|
-
var scrollScheduled = false;
|
13543
13508
|
|
13544
13509
|
// Helper function to get first anchor from a NodeList
|
13545
13510
|
// (using `Array#some()` instead of `angular#forEach()` since it's more performant
|
@@ -13713,7 +13678,7 @@ var $AnimateProvider = ['$provide', function($provide) {
|
|
13713
13678
|
* @return {RegExp} The current CSS className expression value. If null then there is no expression value
|
13714
13679
|
*/
|
13715
13680
|
this.classNameFilter = function(expression) {
|
13716
|
-
if(arguments.length === 1) {
|
13681
|
+
if (arguments.length === 1) {
|
13717
13682
|
this.$$classNameFilter = (expression instanceof RegExp) ? expression : null;
|
13718
13683
|
}
|
13719
13684
|
return this.$$classNameFilter;
|
@@ -13808,7 +13773,7 @@ var $AnimateProvider = ['$provide', function($provide) {
|
|
13808
13773
|
* page}.
|
13809
13774
|
*/
|
13810
13775
|
return {
|
13811
|
-
animate
|
13776
|
+
animate: function(element, from, to) {
|
13812
13777
|
applyStyles(element, { from: from, to: to });
|
13813
13778
|
return asyncPromise();
|
13814
13779
|
},
|
@@ -13829,7 +13794,7 @@ var $AnimateProvider = ['$provide', function($provide) {
|
|
13829
13794
|
* @param {object=} options an optional collection of styles that will be applied to the element.
|
13830
13795
|
* @return {Promise} the animation callback promise
|
13831
13796
|
*/
|
13832
|
-
enter
|
13797
|
+
enter: function(element, parent, after, options) {
|
13833
13798
|
applyStyles(element, options);
|
13834
13799
|
after ? after.after(element)
|
13835
13800
|
: parent.prepend(element);
|
@@ -13847,7 +13812,7 @@ var $AnimateProvider = ['$provide', function($provide) {
|
|
13847
13812
|
* @param {object=} options an optional collection of options that will be applied to the element.
|
13848
13813
|
* @return {Promise} the animation callback promise
|
13849
13814
|
*/
|
13850
|
-
leave
|
13815
|
+
leave: function(element, options) {
|
13851
13816
|
element.remove();
|
13852
13817
|
return asyncPromise();
|
13853
13818
|
},
|
@@ -13870,7 +13835,7 @@ var $AnimateProvider = ['$provide', function($provide) {
|
|
13870
13835
|
* @param {object=} options an optional collection of options that will be applied to the element.
|
13871
13836
|
* @return {Promise} the animation callback promise
|
13872
13837
|
*/
|
13873
|
-
move
|
13838
|
+
move: function(element, parent, after, options) {
|
13874
13839
|
// Do not remove element before insert. Removing will cause data associated with the
|
13875
13840
|
// element to be dropped. Insert will implicitly do the remove.
|
13876
13841
|
return this.enter(element, parent, after, options);
|
@@ -13889,16 +13854,16 @@ var $AnimateProvider = ['$provide', function($provide) {
|
|
13889
13854
|
* @param {object=} options an optional collection of options that will be applied to the element.
|
13890
13855
|
* @return {Promise} the animation callback promise
|
13891
13856
|
*/
|
13892
|
-
addClass
|
13857
|
+
addClass: function(element, className, options) {
|
13893
13858
|
return this.setClass(element, className, [], options);
|
13894
13859
|
},
|
13895
13860
|
|
13896
|
-
$$addClassImmediately
|
13861
|
+
$$addClassImmediately: function(element, className, options) {
|
13897
13862
|
element = jqLite(element);
|
13898
13863
|
className = !isString(className)
|
13899
13864
|
? (isArray(className) ? className.join(' ') : '')
|
13900
13865
|
: className;
|
13901
|
-
forEach(element, function
|
13866
|
+
forEach(element, function(element) {
|
13902
13867
|
jqLiteAddClass(element, className);
|
13903
13868
|
});
|
13904
13869
|
applyStyles(element, options);
|
@@ -13918,16 +13883,16 @@ var $AnimateProvider = ['$provide', function($provide) {
|
|
13918
13883
|
* @param {object=} options an optional collection of options that will be applied to the element.
|
13919
13884
|
* @return {Promise} the animation callback promise
|
13920
13885
|
*/
|
13921
|
-
removeClass
|
13886
|
+
removeClass: function(element, className, options) {
|
13922
13887
|
return this.setClass(element, [], className, options);
|
13923
13888
|
},
|
13924
13889
|
|
13925
|
-
$$removeClassImmediately
|
13890
|
+
$$removeClassImmediately: function(element, className, options) {
|
13926
13891
|
element = jqLite(element);
|
13927
13892
|
className = !isString(className)
|
13928
13893
|
? (isArray(className) ? className.join(' ') : '')
|
13929
13894
|
: className;
|
13930
|
-
forEach(element, function
|
13895
|
+
forEach(element, function(element) {
|
13931
13896
|
jqLiteRemoveClass(element, className);
|
13932
13897
|
});
|
13933
13898
|
applyStyles(element, options);
|
@@ -13948,7 +13913,7 @@ var $AnimateProvider = ['$provide', function($provide) {
|
|
13948
13913
|
* @param {object=} options an optional collection of options that will be applied to the element.
|
13949
13914
|
* @return {Promise} the animation callback promise
|
13950
13915
|
*/
|
13951
|
-
setClass
|
13916
|
+
setClass: function(element, add, remove, options) {
|
13952
13917
|
var self = this;
|
13953
13918
|
var STORAGE_KEY = '$$animateClasses';
|
13954
13919
|
var createdCache = false;
|
@@ -13958,7 +13923,7 @@ var $AnimateProvider = ['$provide', function($provide) {
|
|
13958
13923
|
if (!cache) {
|
13959
13924
|
cache = {
|
13960
13925
|
classes: {},
|
13961
|
-
options
|
13926
|
+
options: options
|
13962
13927
|
};
|
13963
13928
|
createdCache = true;
|
13964
13929
|
} else if (options && cache.options) {
|
@@ -13995,20 +13960,20 @@ var $AnimateProvider = ['$provide', function($provide) {
|
|
13995
13960
|
return cache.promise;
|
13996
13961
|
},
|
13997
13962
|
|
13998
|
-
$$setClassImmediately
|
13963
|
+
$$setClassImmediately: function(element, add, remove, options) {
|
13999
13964
|
add && this.$$addClassImmediately(element, add);
|
14000
13965
|
remove && this.$$removeClassImmediately(element, remove);
|
14001
13966
|
applyStyles(element, options);
|
14002
13967
|
return asyncPromise();
|
14003
13968
|
},
|
14004
13969
|
|
14005
|
-
enabled
|
14006
|
-
cancel
|
13970
|
+
enabled: noop,
|
13971
|
+
cancel: noop
|
14007
13972
|
};
|
14008
13973
|
}];
|
14009
13974
|
}];
|
14010
13975
|
|
14011
|
-
function $$AsyncCallbackProvider(){
|
13976
|
+
function $$AsyncCallbackProvider() {
|
14012
13977
|
this.$get = ['$$rAF', '$timeout', function($$rAF, $timeout) {
|
14013
13978
|
return $$rAF.supported
|
14014
13979
|
? function(fn) { return $$rAF(fn); }
|
@@ -14070,7 +14035,7 @@ function Browser(window, document, $log, $sniffer) {
|
|
14070
14035
|
} finally {
|
14071
14036
|
outstandingRequestCount--;
|
14072
14037
|
if (outstandingRequestCount === 0) {
|
14073
|
-
while(outstandingRequestCallbacks.length) {
|
14038
|
+
while (outstandingRequestCallbacks.length) {
|
14074
14039
|
try {
|
14075
14040
|
outstandingRequestCallbacks.pop()();
|
14076
14041
|
} catch (e) {
|
@@ -14091,7 +14056,7 @@ function Browser(window, document, $log, $sniffer) {
|
|
14091
14056
|
// force browser to execute all pollFns - this is needed so that cookies and other pollers fire
|
14092
14057
|
// at some deterministic time in respect to the test runner's actions. Leaving things up to the
|
14093
14058
|
// regular poller would result in flaky tests.
|
14094
|
-
forEach(pollFns, function(pollFn){ pollFn(); });
|
14059
|
+
forEach(pollFns, function(pollFn) { pollFn(); });
|
14095
14060
|
|
14096
14061
|
if (outstandingRequestCount === 0) {
|
14097
14062
|
callback();
|
@@ -14133,7 +14098,7 @@ function Browser(window, document, $log, $sniffer) {
|
|
14133
14098
|
*/
|
14134
14099
|
function startPoller(interval, setTimeout) {
|
14135
14100
|
(function check() {
|
14136
|
-
forEach(pollFns, function(pollFn){ pollFn(); });
|
14101
|
+
forEach(pollFns, function(pollFn) { pollFn(); });
|
14137
14102
|
pollTimeout = setTimeout(check, interval);
|
14138
14103
|
})();
|
14139
14104
|
}
|
@@ -14468,9 +14433,9 @@ function Browser(window, document, $log, $sniffer) {
|
|
14468
14433
|
|
14469
14434
|
}
|
14470
14435
|
|
14471
|
-
function $BrowserProvider(){
|
14436
|
+
function $BrowserProvider() {
|
14472
14437
|
this.$get = ['$window', '$log', '$sniffer', '$document',
|
14473
|
-
function(
|
14438
|
+
function($window, $log, $sniffer, $document) {
|
14474
14439
|
return new Browser($window, $document, $log, $sniffer);
|
14475
14440
|
}];
|
14476
14441
|
}
|
@@ -14844,7 +14809,8 @@ function $CacheFactoryProvider() {
|
|
14844
14809
|
* ```
|
14845
14810
|
*
|
14846
14811
|
* **Note:** the `script` tag containing the template does not need to be included in the `head` of
|
14847
|
-
* the document, but it must be
|
14812
|
+
* the document, but it must be a descendent of the {@link ng.$rootElement $rootElement} (IE,
|
14813
|
+
* element with ng-app attribute), otherwise the template will be ignored.
|
14848
14814
|
*
|
14849
14815
|
* Adding via the $templateCache service:
|
14850
14816
|
*
|
@@ -15038,7 +15004,9 @@ function $TemplateCacheProvider() {
|
|
15038
15004
|
* value of `parentModel` on the parent scope. Any changes to `parentModel` will be reflected
|
15039
15005
|
* in `localModel` and any changes in `localModel` will reflect in `parentModel`. If the parent
|
15040
15006
|
* scope property doesn't exist, it will throw a NON_ASSIGNABLE_MODEL_EXPRESSION exception. You
|
15041
|
-
* can avoid this behavior using `=?` or `=?attr` in order to flag the property as optional.
|
15007
|
+
* can avoid this behavior using `=?` or `=?attr` in order to flag the property as optional. If
|
15008
|
+
* you want to shallow watch for changes (i.e. $watchCollection instead of $watch) you can use
|
15009
|
+
* `=*` or `=*attr` (`=*?` or `=*?attr` if the property is optional).
|
15042
15010
|
*
|
15043
15011
|
* * `&` or `&attr` - provides a way to execute an expression in the context of the parent scope.
|
15044
15012
|
* If no `attr` name is specified then the attribute name is assumed to be the same as the
|
@@ -15554,8 +15522,8 @@ $CompileProvider.$inject = ['$provide', '$$sanitizeUriProvider'];
|
|
15554
15522
|
function $CompileProvider($provide, $$sanitizeUriProvider) {
|
15555
15523
|
var hasDirectives = {},
|
15556
15524
|
Suffix = 'Directive',
|
15557
|
-
COMMENT_DIRECTIVE_REGEXP = /^\s*directive\:\s*([\
|
15558
|
-
CLASS_DIRECTIVE_REGEXP = /(([\
|
15525
|
+
COMMENT_DIRECTIVE_REGEXP = /^\s*directive\:\s*([\w\-]+)\s+(.*)$/,
|
15526
|
+
CLASS_DIRECTIVE_REGEXP = /(([\w\-]+)(?:\:([^;]+))?;?)/,
|
15559
15527
|
ALL_OR_NOTHING_ATTRS = makeMap('ngSrc,ngSrcset,src,srcset'),
|
15560
15528
|
REQUIRE_PREFIX_REGEXP = /^(?:(\^\^?)?(\?)?(\^\^?)?)?/;
|
15561
15529
|
|
@@ -15565,7 +15533,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
|
|
15565
15533
|
var EVENT_HANDLER_ATTR_REGEXP = /^(on[a-z]+|formaction)$/;
|
15566
15534
|
|
15567
15535
|
function parseIsolateBindings(scope, directiveName) {
|
15568
|
-
var LOCAL_REGEXP = /^\s*([
|
15536
|
+
var LOCAL_REGEXP = /^\s*([@&]|=(\*?))(\??)\s*(\w*)\s*$/;
|
15569
15537
|
|
15570
15538
|
var bindings = {};
|
15571
15539
|
|
@@ -15580,9 +15548,10 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
|
|
15580
15548
|
}
|
15581
15549
|
|
15582
15550
|
bindings[scopeName] = {
|
15583
|
-
|
15584
|
-
|
15585
|
-
optional: match[
|
15551
|
+
mode: match[1][0],
|
15552
|
+
collection: match[2] === '*',
|
15553
|
+
optional: match[3] === '?',
|
15554
|
+
attrName: match[4] || scopeName
|
15586
15555
|
};
|
15587
15556
|
});
|
15588
15557
|
|
@@ -15728,7 +15697,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
|
|
15728
15697
|
*/
|
15729
15698
|
var debugInfoEnabled = true;
|
15730
15699
|
this.debugInfoEnabled = function(enabled) {
|
15731
|
-
if(isDefined(enabled)) {
|
15700
|
+
if (isDefined(enabled)) {
|
15732
15701
|
debugInfoEnabled = enabled;
|
15733
15702
|
return this;
|
15734
15703
|
}
|
@@ -15772,8 +15741,8 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
|
|
15772
15741
|
*
|
15773
15742
|
* @param {string} classVal The className value that will be added to the element
|
15774
15743
|
*/
|
15775
|
-
$addClass
|
15776
|
-
if(classVal && classVal.length > 0) {
|
15744
|
+
$addClass: function(classVal) {
|
15745
|
+
if (classVal && classVal.length > 0) {
|
15777
15746
|
$animate.addClass(this.$$element, classVal);
|
15778
15747
|
}
|
15779
15748
|
},
|
@@ -15789,8 +15758,8 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
|
|
15789
15758
|
*
|
15790
15759
|
* @param {string} classVal The className value that will be removed from the element
|
15791
15760
|
*/
|
15792
|
-
$removeClass
|
15793
|
-
if(classVal && classVal.length > 0) {
|
15761
|
+
$removeClass: function(classVal) {
|
15762
|
+
if (classVal && classVal.length > 0) {
|
15794
15763
|
$animate.removeClass(this.$$element, classVal);
|
15795
15764
|
}
|
15796
15765
|
},
|
@@ -15807,7 +15776,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
|
|
15807
15776
|
* @param {string} newClasses The current CSS className value
|
15808
15777
|
* @param {string} oldClasses The former CSS className value
|
15809
15778
|
*/
|
15810
|
-
$updateClass
|
15779
|
+
$updateClass: function(newClasses, oldClasses) {
|
15811
15780
|
var toAdd = tokenDifference(newClasses, oldClasses);
|
15812
15781
|
if (toAdd && toAdd.length) {
|
15813
15782
|
$animate.addClass(this.$$element, toAdd);
|
@@ -15837,13 +15806,12 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
|
|
15837
15806
|
booleanKey = getBooleanAttrName(node, key),
|
15838
15807
|
aliasedKey = getAliasedAttrName(node, key),
|
15839
15808
|
observer = key,
|
15840
|
-
normalizedVal,
|
15841
15809
|
nodeName;
|
15842
15810
|
|
15843
15811
|
if (booleanKey) {
|
15844
15812
|
this.$$element.prop(key, value);
|
15845
15813
|
attrName = booleanKey;
|
15846
|
-
} else if(aliasedKey) {
|
15814
|
+
} else if (aliasedKey) {
|
15847
15815
|
this[aliasedKey] = value;
|
15848
15816
|
observer = aliasedKey;
|
15849
15817
|
}
|
@@ -15884,9 +15852,9 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
|
|
15884
15852
|
for (var i=0; i<nbrUrisWith2parts; i++) {
|
15885
15853
|
var innerIdx = i*2;
|
15886
15854
|
// sanitize the uri
|
15887
|
-
result += $$sanitizeUri(trim(
|
15855
|
+
result += $$sanitizeUri(trim(rawUris[innerIdx]), true);
|
15888
15856
|
// add the descriptor
|
15889
|
-
result += (
|
15857
|
+
result += (" " + trim(rawUris[innerIdx+1]));
|
15890
15858
|
}
|
15891
15859
|
|
15892
15860
|
// split the last item into uri and descriptor
|
@@ -15896,7 +15864,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
|
|
15896
15864
|
result += $$sanitizeUri(trim(lastTuple[0]), true);
|
15897
15865
|
|
15898
15866
|
// and add the last descriptor if any
|
15899
|
-
if(
|
15867
|
+
if (lastTuple.length === 2) {
|
15900
15868
|
result += (" " + trim(lastTuple[1]));
|
15901
15869
|
}
|
15902
15870
|
this[key] = value = result;
|
@@ -15947,7 +15915,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
|
|
15947
15915
|
|
15948
15916
|
listeners.push(fn);
|
15949
15917
|
$rootScope.$evalAsync(function() {
|
15950
|
-
if (!listeners.$$inter) {
|
15918
|
+
if (!listeners.$$inter && attrs.hasOwnProperty(key)) {
|
15951
15919
|
// no one registered attribute interpolation function, so lets call it manually
|
15952
15920
|
fn(attrs[key]);
|
15953
15921
|
}
|
@@ -15963,7 +15931,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
|
|
15963
15931
|
function safeAddClass($element, className) {
|
15964
15932
|
try {
|
15965
15933
|
$element.addClass(className);
|
15966
|
-
} catch(e) {
|
15934
|
+
} catch (e) {
|
15967
15935
|
// ignore, since it means that we are trying to set class on
|
15968
15936
|
// SVG element, where class name is read-only.
|
15969
15937
|
}
|
@@ -16017,7 +15985,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
|
|
16017
15985
|
}
|
16018
15986
|
// We can not compile top level text elements since text nodes can be merged and we will
|
16019
15987
|
// not be able to attach scope data to them, so we will wrap them in <span>
|
16020
|
-
forEach($compileNodes, function(node, index){
|
15988
|
+
forEach($compileNodes, function(node, index) {
|
16021
15989
|
if (node.nodeType == NODE_TYPE_TEXT && node.nodeValue.match(/\S+/) /* non-empty */ ) {
|
16022
15990
|
$compileNodes[index] = jqLite(node).wrap('<span></span>').parent()[0];
|
16023
15991
|
}
|
@@ -16027,7 +15995,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
|
|
16027
15995
|
maxPriority, ignoreDirective, previousCompileContext);
|
16028
15996
|
compile.$$addScopeClass($compileNodes);
|
16029
15997
|
var namespace = null;
|
16030
|
-
return function publicLinkFn(scope, cloneConnectFn, transcludeControllers, parentBoundTranscludeFn, futureParentElement){
|
15998
|
+
return function publicLinkFn(scope, cloneConnectFn, transcludeControllers, parentBoundTranscludeFn, futureParentElement) {
|
16031
15999
|
assertArg(scope, 'scope');
|
16032
16000
|
if (!namespace) {
|
16033
16001
|
namespace = detectNamespaceForChildElements(futureParentElement);
|
@@ -16152,7 +16120,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
|
|
16152
16120
|
stableNodeList = nodeList;
|
16153
16121
|
}
|
16154
16122
|
|
16155
|
-
for(i = 0, ii = linkFns.length; i < ii;) {
|
16123
|
+
for (i = 0, ii = linkFns.length; i < ii;) {
|
16156
16124
|
node = stableNodeList[linkFns[i++]];
|
16157
16125
|
nodeLinkFn = linkFns[i++];
|
16158
16126
|
childLinkFn = linkFns[i++];
|
@@ -16165,7 +16133,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
|
|
16165
16133
|
childScope = scope;
|
16166
16134
|
}
|
16167
16135
|
|
16168
|
-
if (
|
16136
|
+
if (nodeLinkFn.transcludeOnThisElement) {
|
16169
16137
|
childBoundTranscludeFn = createBoundTranscludeFn(
|
16170
16138
|
scope, nodeLinkFn.transclude, parentBoundTranscludeFn,
|
16171
16139
|
nodeLinkFn.elementTranscludeOnThisElement);
|
@@ -16220,7 +16188,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
|
|
16220
16188
|
match,
|
16221
16189
|
className;
|
16222
16190
|
|
16223
|
-
switch(nodeType) {
|
16191
|
+
switch (nodeType) {
|
16224
16192
|
case NODE_TYPE_ELEMENT: /* Element */
|
16225
16193
|
// use the node name: <directive>
|
16226
16194
|
addDirective(directives,
|
@@ -16312,7 +16280,6 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
|
|
16312
16280
|
var nodes = [];
|
16313
16281
|
var depth = 0;
|
16314
16282
|
if (attrStart && node.hasAttribute && node.hasAttribute(attrStart)) {
|
16315
|
-
var startNode = node;
|
16316
16283
|
do {
|
16317
16284
|
if (!node) {
|
16318
16285
|
throw $compileMinErr('uterdir',
|
@@ -16396,7 +16363,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
|
|
16396
16363
|
directiveValue;
|
16397
16364
|
|
16398
16365
|
// executes all directives on the current element
|
16399
|
-
for(var i = 0, ii = directives.length; i < ii; i++) {
|
16366
|
+
for (var i = 0, ii = directives.length; i < ii; i++) {
|
16400
16367
|
directive = directives[i];
|
16401
16368
|
var attrStart = directive.$$start;
|
16402
16369
|
var attrEnd = directive.$$end;
|
@@ -16640,7 +16607,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
|
|
16640
16607
|
"Controller '{0}', required by directive '{1}', can't be found!",
|
16641
16608
|
require, directiveName);
|
16642
16609
|
}
|
16643
|
-
return value;
|
16610
|
+
return value || null;
|
16644
16611
|
} else if (isArray(require)) {
|
16645
16612
|
value = [];
|
16646
16613
|
forEach(require, function(require) {
|
@@ -16702,8 +16669,6 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
|
|
16702
16669
|
}
|
16703
16670
|
|
16704
16671
|
if (newIsolateScopeDirective) {
|
16705
|
-
var LOCAL_REGEXP = /^\s*([@=&])(\??)\s*(\w*)\s*$/;
|
16706
|
-
|
16707
16672
|
compile.$$addScopeInfo($element, isolateScope, true, !(templateDirective && (templateDirective === newIsolateScopeDirective ||
|
16708
16673
|
templateDirective === newIsolateScopeDirective.$$originalDirective)));
|
16709
16674
|
compile.$$addScopeClass($element, true);
|
@@ -16729,7 +16694,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
|
|
16729
16694
|
isolateBindingContext[scopeName] = value;
|
16730
16695
|
});
|
16731
16696
|
attrs.$$observers[attrName].$$scope = scope;
|
16732
|
-
if(
|
16697
|
+
if (attrs[attrName]) {
|
16733
16698
|
// If the attribute has been provided then we trigger an interpolation to ensure
|
16734
16699
|
// the value is there for use in the link fn
|
16735
16700
|
isolateBindingContext[scopeName] = $interpolate(attrs[attrName])(scope);
|
@@ -16744,7 +16709,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
|
|
16744
16709
|
if (parentGet.literal) {
|
16745
16710
|
compare = equals;
|
16746
16711
|
} else {
|
16747
|
-
compare = function(a,b) { return a === b || (a !== a && b !== b); };
|
16712
|
+
compare = function(a, b) { return a === b || (a !== a && b !== b); };
|
16748
16713
|
}
|
16749
16714
|
parentSet = parentGet.assign || function() {
|
16750
16715
|
// reset the change, or we will throw this exception on every $digest
|
@@ -16768,7 +16733,12 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
|
|
16768
16733
|
return lastValue = parentValue;
|
16769
16734
|
};
|
16770
16735
|
parentValueWatch.$stateful = true;
|
16771
|
-
var unwatch
|
16736
|
+
var unwatch;
|
16737
|
+
if (definition.collection) {
|
16738
|
+
unwatch = scope.$watchCollection(attrs[attrName], parentValueWatch);
|
16739
|
+
} else {
|
16740
|
+
unwatch = scope.$watch($parse(attrs[attrName], parentValueWatch), null, parentGet.literal);
|
16741
|
+
}
|
16772
16742
|
isolateScope.$on('$destroy', unwatch);
|
16773
16743
|
break;
|
16774
16744
|
|
@@ -16789,7 +16759,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
|
|
16789
16759
|
}
|
16790
16760
|
|
16791
16761
|
// PRELINKING
|
16792
|
-
for(i = 0, ii = preLinkFns.length; i < ii; i++) {
|
16762
|
+
for (i = 0, ii = preLinkFns.length; i < ii; i++) {
|
16793
16763
|
linkFn = preLinkFns[i];
|
16794
16764
|
invokeLinkFn(linkFn,
|
16795
16765
|
linkFn.isolateScope ? isolateScope : scope,
|
@@ -16810,7 +16780,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
|
|
16810
16780
|
childLinkFn && childLinkFn(scopeToChild, linkNode.childNodes, undefined, boundTranscludeFn);
|
16811
16781
|
|
16812
16782
|
// POSTLINKING
|
16813
|
-
for(i = postLinkFns.length - 1; i >= 0; i--) {
|
16783
|
+
for (i = postLinkFns.length - 1; i >= 0; i--) {
|
16814
16784
|
linkFn = postLinkFns[i];
|
16815
16785
|
invokeLinkFn(linkFn,
|
16816
16786
|
linkFn.isolateScope ? isolateScope : scope,
|
@@ -16870,11 +16840,11 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
|
|
16870
16840
|
if (name === ignoreDirective) return null;
|
16871
16841
|
var match = null;
|
16872
16842
|
if (hasDirectives.hasOwnProperty(name)) {
|
16873
|
-
for(var directive, directives = $injector.get(name + Suffix),
|
16843
|
+
for (var directive, directives = $injector.get(name + Suffix),
|
16874
16844
|
i = 0, ii = directives.length; i<ii; i++) {
|
16875
16845
|
try {
|
16876
16846
|
directive = directives[i];
|
16877
|
-
if (
|
16847
|
+
if ((maxPriority === undefined || maxPriority > directive.priority) &&
|
16878
16848
|
directive.restrict.indexOf(location) != -1) {
|
16879
16849
|
if (startAttrName) {
|
16880
16850
|
directive = inherit(directive, {$$start: startAttrName, $$end: endAttrName});
|
@@ -16882,7 +16852,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
|
|
16882
16852
|
tDirectives.push(directive);
|
16883
16853
|
match = directive;
|
16884
16854
|
}
|
16885
|
-
} catch(e) { $exceptionHandler(e); }
|
16855
|
+
} catch (e) { $exceptionHandler(e); }
|
16886
16856
|
}
|
16887
16857
|
}
|
16888
16858
|
return match;
|
@@ -16899,7 +16869,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
|
|
16899
16869
|
*/
|
16900
16870
|
function directiveIsMultiElement(name) {
|
16901
16871
|
if (hasDirectives.hasOwnProperty(name)) {
|
16902
|
-
for(var directive, directives = $injector.get(name + Suffix),
|
16872
|
+
for (var directive, directives = $injector.get(name + Suffix),
|
16903
16873
|
i = 0, ii = directives.length; i<ii; i++) {
|
16904
16874
|
directive = directives[i];
|
16905
16875
|
if (directive.multiElement) {
|
@@ -17016,7 +16986,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
|
|
17016
16986
|
});
|
17017
16987
|
afterTemplateChildLinkFn = compileNodes($compileNode[0].childNodes, childTranscludeFn);
|
17018
16988
|
|
17019
|
-
while(linkQueue.length) {
|
16989
|
+
while (linkQueue.length) {
|
17020
16990
|
var scope = linkQueue.shift(),
|
17021
16991
|
beforeTemplateLinkNode = linkQueue.shift(),
|
17022
16992
|
linkRootElement = linkQueue.shift(),
|
@@ -17115,7 +17085,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
|
|
17115
17085
|
|
17116
17086
|
function wrapTemplate(type, template) {
|
17117
17087
|
type = lowercase(type || 'html');
|
17118
|
-
switch(type) {
|
17088
|
+
switch (type) {
|
17119
17089
|
case 'svg':
|
17120
17090
|
case 'math':
|
17121
17091
|
var wrapper = document.createElement('div');
|
@@ -17196,7 +17166,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
|
|
17196
17166
|
//skip animations when the first digest occurs (when
|
17197
17167
|
//both the new and the old values are the same) since
|
17198
17168
|
//the CSS classes are the non-interpolated values
|
17199
|
-
if(name === 'class' && newValue != oldValue) {
|
17169
|
+
if (name === 'class' && newValue != oldValue) {
|
17200
17170
|
attr.$updateClass(newValue, oldValue);
|
17201
17171
|
} else {
|
17202
17172
|
attr.$set(name, newValue);
|
@@ -17226,7 +17196,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
|
|
17226
17196
|
i, ii;
|
17227
17197
|
|
17228
17198
|
if ($rootElement) {
|
17229
|
-
for(i = 0, ii = $rootElement.length; i < ii; i++) {
|
17199
|
+
for (i = 0, ii = $rootElement.length; i < ii; i++) {
|
17230
17200
|
if ($rootElement[i] == firstElementToRemove) {
|
17231
17201
|
$rootElement[i++] = newNode;
|
17232
17202
|
for (var j = i, j2 = j + removeCount - 1,
|
@@ -17301,14 +17271,14 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
|
|
17301
17271
|
function invokeLinkFn(linkFn, scope, $element, attrs, controllers, transcludeFn) {
|
17302
17272
|
try {
|
17303
17273
|
linkFn(scope, $element, attrs, controllers, transcludeFn);
|
17304
|
-
} catch(e) {
|
17274
|
+
} catch (e) {
|
17305
17275
|
$exceptionHandler(e, startingTag($element));
|
17306
17276
|
}
|
17307
17277
|
}
|
17308
17278
|
}];
|
17309
17279
|
}
|
17310
17280
|
|
17311
|
-
var PREFIX_REGEXP = /^(x
|
17281
|
+
var PREFIX_REGEXP = /^((?:x|data)[\:\-_])/i;
|
17312
17282
|
/**
|
17313
17283
|
* Converts all accepted directives format into proper directive name.
|
17314
17284
|
* All of these will become 'myDirective':
|
@@ -17374,7 +17344,7 @@ function nodesetLinkingFn(
|
|
17374
17344
|
/* NodeList */ nodeList,
|
17375
17345
|
/* Element */ rootElement,
|
17376
17346
|
/* function(Function) */ boundTranscludeFn
|
17377
|
-
){}
|
17347
|
+
) {}
|
17378
17348
|
|
17379
17349
|
function directiveLinkingFn(
|
17380
17350
|
/* nodesetLinkingFn */ nodesetLinkingFn,
|
@@ -17382,7 +17352,7 @@ function directiveLinkingFn(
|
|
17382
17352
|
/* Node */ node,
|
17383
17353
|
/* Element */ rootElement,
|
17384
17354
|
/* function(Function) */ boundTranscludeFn
|
17385
|
-
){}
|
17355
|
+
) {}
|
17386
17356
|
|
17387
17357
|
function tokenDifference(str1, str2) {
|
17388
17358
|
var values = '',
|
@@ -17390,10 +17360,10 @@ function tokenDifference(str1, str2) {
|
|
17390
17360
|
tokens2 = str2.split(/\s+/);
|
17391
17361
|
|
17392
17362
|
outer:
|
17393
|
-
for(var i = 0; i < tokens1.length; i++) {
|
17363
|
+
for (var i = 0; i < tokens1.length; i++) {
|
17394
17364
|
var token = tokens1[i];
|
17395
|
-
for(var j = 0; j < tokens2.length; j++) {
|
17396
|
-
if(token == tokens2[j]) continue outer;
|
17365
|
+
for (var j = 0; j < tokens2.length; j++) {
|
17366
|
+
if (token == tokens2[j]) continue outer;
|
17397
17367
|
}
|
17398
17368
|
values += (values.length > 0 ? ' ' : '') + token;
|
17399
17369
|
}
|
@@ -17499,7 +17469,7 @@ function $ControllerProvider() {
|
|
17499
17469
|
identifier = ident;
|
17500
17470
|
}
|
17501
17471
|
|
17502
|
-
if(isString(expression)) {
|
17472
|
+
if (isString(expression)) {
|
17503
17473
|
match = expression.match(CNTRL_REG),
|
17504
17474
|
constructor = match[1],
|
17505
17475
|
identifier = identifier || match[3];
|
@@ -17585,8 +17555,8 @@ function $ControllerProvider() {
|
|
17585
17555
|
</file>
|
17586
17556
|
</example>
|
17587
17557
|
*/
|
17588
|
-
function $DocumentProvider(){
|
17589
|
-
this.$get = ['$window', function(window){
|
17558
|
+
function $DocumentProvider() {
|
17559
|
+
this.$get = ['$window', function(window) {
|
17590
17560
|
return jqLite(window.document);
|
17591
17561
|
}];
|
17592
17562
|
}
|
@@ -17607,8 +17577,8 @@ function $DocumentProvider(){
|
|
17607
17577
|
* ## Example:
|
17608
17578
|
*
|
17609
17579
|
* ```js
|
17610
|
-
* angular.module('exceptionOverride', []).factory('$exceptionHandler', function
|
17611
|
-
* return function
|
17580
|
+
* angular.module('exceptionOverride', []).factory('$exceptionHandler', function() {
|
17581
|
+
* return function(exception, cause) {
|
17612
17582
|
* exception.message += ' (caused by "' + cause + '")';
|
17613
17583
|
* throw exception;
|
17614
17584
|
* };
|
@@ -17639,6 +17609,25 @@ function $ExceptionHandlerProvider() {
|
|
17639
17609
|
}];
|
17640
17610
|
}
|
17641
17611
|
|
17612
|
+
var APPLICATION_JSON = 'application/json';
|
17613
|
+
var CONTENT_TYPE_APPLICATION_JSON = {'Content-Type': APPLICATION_JSON + ';charset=utf-8'};
|
17614
|
+
var JSON_START = /^\s*(\[|\{[^\{])/;
|
17615
|
+
var JSON_END = /[\}\]]\s*$/;
|
17616
|
+
var JSON_PROTECTION_PREFIX = /^\)\]\}',?\n/;
|
17617
|
+
|
17618
|
+
function defaultHttpResponseTransform(data, headers) {
|
17619
|
+
if (isString(data)) {
|
17620
|
+
// strip json vulnerability protection prefix
|
17621
|
+
data = data.replace(JSON_PROTECTION_PREFIX, '');
|
17622
|
+
var contentType = headers('Content-Type');
|
17623
|
+
if ((contentType && contentType.indexOf(APPLICATION_JSON) === 0) ||
|
17624
|
+
(JSON_START.test(data) && JSON_END.test(data))) {
|
17625
|
+
data = fromJson(data);
|
17626
|
+
}
|
17627
|
+
}
|
17628
|
+
return data;
|
17629
|
+
}
|
17630
|
+
|
17642
17631
|
/**
|
17643
17632
|
* Parse headers into key value object
|
17644
17633
|
*
|
@@ -17725,12 +17714,6 @@ function isSuccess(status) {
|
|
17725
17714
|
* Use `$httpProvider` to change the default behavior of the {@link ng.$http $http} service.
|
17726
17715
|
* */
|
17727
17716
|
function $HttpProvider() {
|
17728
|
-
var JSON_START = /^\s*(\[|\{[^\{])/,
|
17729
|
-
JSON_END = /[\}\]]\s*$/,
|
17730
|
-
PROTECTION_PREFIX = /^\)\]\}',?\n/,
|
17731
|
-
APPLICATION_JSON = 'application/json',
|
17732
|
-
CONTENT_TYPE_APPLICATION_JSON = {'Content-Type': APPLICATION_JSON + ';charset=utf-8'};
|
17733
|
-
|
17734
17717
|
/**
|
17735
17718
|
* @ngdoc property
|
17736
17719
|
* @name $httpProvider#defaults
|
@@ -17754,18 +17737,7 @@ function $HttpProvider() {
|
|
17754
17737
|
**/
|
17755
17738
|
var defaults = this.defaults = {
|
17756
17739
|
// transform incoming response data
|
17757
|
-
transformResponse: [
|
17758
|
-
if (isString(data)) {
|
17759
|
-
// strip json vulnerability protection prefix
|
17760
|
-
data = data.replace(PROTECTION_PREFIX, '');
|
17761
|
-
var contentType = headers('Content-Type');
|
17762
|
-
if ((contentType && contentType.indexOf(APPLICATION_JSON) === 0) ||
|
17763
|
-
(JSON_START.test(data) && JSON_END.test(data))) {
|
17764
|
-
data = fromJson(data);
|
17765
|
-
}
|
17766
|
-
}
|
17767
|
-
return data;
|
17768
|
-
}],
|
17740
|
+
transformResponse: [defaultHttpResponseTransform],
|
17769
17741
|
|
17770
17742
|
// transform outgoing request data
|
17771
17743
|
transformRequest: [function(d) {
|
@@ -17815,9 +17787,18 @@ function $HttpProvider() {
|
|
17815
17787
|
};
|
17816
17788
|
|
17817
17789
|
/**
|
17818
|
-
*
|
17790
|
+
* @ngdoc property
|
17791
|
+
* @name $httpProvider#interceptors
|
17792
|
+
* @description
|
17793
|
+
*
|
17794
|
+
* Array containing service factories for all synchronous or asynchronous {@link ng.$http $http}
|
17795
|
+
* pre-processing of request or postprocessing of responses.
|
17796
|
+
*
|
17797
|
+
* These service factories are ordered by request, i.e. they are applied in the same order as the
|
17819
17798
|
* array, on request, but reverse order, on response.
|
17820
|
-
|
17799
|
+
*
|
17800
|
+
* {@link ng.$http#interceptors Interceptors detailed info}
|
17801
|
+
**/
|
17821
17802
|
var interceptorFactories = this.interceptors = [];
|
17822
17803
|
|
17823
17804
|
this.$get = ['$httpBackend', '$browser', '$cacheFactory', '$rootScope', '$q', '$injector',
|
@@ -18384,7 +18365,7 @@ function $HttpProvider() {
|
|
18384
18365
|
}
|
18385
18366
|
});
|
18386
18367
|
|
18387
|
-
while(chain.length) {
|
18368
|
+
while (chain.length) {
|
18388
18369
|
var thenFn = chain.shift();
|
18389
18370
|
var rejectFn = chain.shift();
|
18390
18371
|
|
@@ -18699,7 +18680,7 @@ function $HttpProvider() {
|
|
18699
18680
|
status: status,
|
18700
18681
|
headers: headersGetter(headers),
|
18701
18682
|
config: config,
|
18702
|
-
statusText
|
18683
|
+
statusText: statusText
|
18703
18684
|
});
|
18704
18685
|
}
|
18705
18686
|
|
@@ -18720,7 +18701,7 @@ function $HttpProvider() {
|
|
18720
18701
|
|
18721
18702
|
forEach(value, function(v) {
|
18722
18703
|
if (isObject(v)) {
|
18723
|
-
if (isDate(v)){
|
18704
|
+
if (isDate(v)) {
|
18724
18705
|
v = v.toISOString();
|
18725
18706
|
} else {
|
18726
18707
|
v = toJson(v);
|
@@ -18730,7 +18711,7 @@ function $HttpProvider() {
|
|
18730
18711
|
encodeUriQuery(v));
|
18731
18712
|
});
|
18732
18713
|
});
|
18733
|
-
if(parts.length > 0) {
|
18714
|
+
if (parts.length > 0) {
|
18734
18715
|
url += ((url.indexOf('?') == -1) ? '?' : '&') + parts.join('&');
|
18735
18716
|
}
|
18736
18717
|
return url;
|
@@ -18817,7 +18798,7 @@ function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDoc
|
|
18817
18798
|
statusText);
|
18818
18799
|
};
|
18819
18800
|
|
18820
|
-
var requestError = function
|
18801
|
+
var requestError = function() {
|
18821
18802
|
// The response is always empty
|
18822
18803
|
// See https://xhr.spec.whatwg.org/#request-error-steps and https://fetch.spec.whatwg.org/#concept-network-error
|
18823
18804
|
completeRequest(callback, -1, null, null, '');
|
@@ -18959,7 +18940,7 @@ function $InterpolateProvider() {
|
|
18959
18940
|
* @param {string=} value new value to set the starting symbol to.
|
18960
18941
|
* @returns {string|self} Returns the symbol when used as getter and self if used as setter.
|
18961
18942
|
*/
|
18962
|
-
this.startSymbol = function(value){
|
18943
|
+
this.startSymbol = function(value) {
|
18963
18944
|
if (value) {
|
18964
18945
|
startSymbol = value;
|
18965
18946
|
return this;
|
@@ -18977,7 +18958,7 @@ function $InterpolateProvider() {
|
|
18977
18958
|
* @param {string=} value new value to set the ending symbol to.
|
18978
18959
|
* @returns {string|self} Returns the symbol when used as getter and self if used as setter.
|
18979
18960
|
*/
|
18980
|
-
this.endSymbol = function(value){
|
18961
|
+
this.endSymbol = function(value) {
|
18981
18962
|
if (value) {
|
18982
18963
|
endSymbol = value;
|
18983
18964
|
return this;
|
@@ -19103,9 +19084,9 @@ function $InterpolateProvider() {
|
|
19103
19084
|
concat = [],
|
19104
19085
|
expressionPositions = [];
|
19105
19086
|
|
19106
|
-
while(index < textLength) {
|
19107
|
-
if (
|
19108
|
-
((endIndex = text.indexOf(endSymbol, startIndex + startSymbolLength)) != -1)
|
19087
|
+
while (index < textLength) {
|
19088
|
+
if (((startIndex = text.indexOf(startSymbol, index)) != -1) &&
|
19089
|
+
((endIndex = text.indexOf(endSymbol, startIndex + startSymbolLength)) != -1)) {
|
19109
19090
|
if (index !== startIndex) {
|
19110
19091
|
concat.push(unescapeText(text.substring(index, startIndex)));
|
19111
19092
|
}
|
@@ -19139,20 +19120,20 @@ function $InterpolateProvider() {
|
|
19139
19120
|
|
19140
19121
|
if (!mustHaveExpression || expressions.length) {
|
19141
19122
|
var compute = function(values) {
|
19142
|
-
for(var i = 0, ii = expressions.length; i < ii; i++) {
|
19123
|
+
for (var i = 0, ii = expressions.length; i < ii; i++) {
|
19143
19124
|
if (allOrNothing && isUndefined(values[i])) return;
|
19144
19125
|
concat[expressionPositions[i]] = values[i];
|
19145
19126
|
}
|
19146
19127
|
return concat.join('');
|
19147
19128
|
};
|
19148
19129
|
|
19149
|
-
var getValue = function
|
19130
|
+
var getValue = function(value) {
|
19150
19131
|
return trustedContext ?
|
19151
19132
|
$sce.getTrusted(trustedContext, value) :
|
19152
19133
|
$sce.valueOf(value);
|
19153
19134
|
};
|
19154
19135
|
|
19155
|
-
var stringify = function
|
19136
|
+
var stringify = function(value) {
|
19156
19137
|
if (value == null) { // null || undefined
|
19157
19138
|
return '';
|
19158
19139
|
}
|
@@ -19180,7 +19161,7 @@ function $InterpolateProvider() {
|
|
19180
19161
|
}
|
19181
19162
|
|
19182
19163
|
return compute(values);
|
19183
|
-
} catch(err) {
|
19164
|
+
} catch (err) {
|
19184
19165
|
var newErr = $interpolateMinErr('interr', "Can't interpolate: {0}\n{1}", text,
|
19185
19166
|
err.toString());
|
19186
19167
|
$exceptionHandler(newErr);
|
@@ -19190,7 +19171,7 @@ function $InterpolateProvider() {
|
|
19190
19171
|
// all of these properties are undocumented for now
|
19191
19172
|
exp: text, //just for compatibility with regular watchers created via $watch
|
19192
19173
|
expressions: expressions,
|
19193
|
-
$$watchDelegate: function
|
19174
|
+
$$watchDelegate: function(scope, listener, objectEquality) {
|
19194
19175
|
var lastValue;
|
19195
19176
|
return scope.$watchGroup(parseFns, function interpolateFnWatcher(values, oldValues) {
|
19196
19177
|
var currValue = compute(values);
|
@@ -19211,7 +19192,7 @@ function $InterpolateProvider() {
|
|
19211
19192
|
function parseStringifyInterceptor(value) {
|
19212
19193
|
try {
|
19213
19194
|
return stringify(getValue(value));
|
19214
|
-
} catch(err) {
|
19195
|
+
} catch (err) {
|
19215
19196
|
var newErr = $interpolateMinErr('interr', "Can't interpolate: {0}\n{1}", text,
|
19216
19197
|
err.toString());
|
19217
19198
|
$exceptionHandler(newErr);
|
@@ -19450,7 +19431,7 @@ function $IntervalProvider() {
|
|
19450
19431
|
*
|
19451
19432
|
* * `id` – `{string}` – locale id formatted as `languageId-countryId` (e.g. `en-us`)
|
19452
19433
|
*/
|
19453
|
-
function $LocaleProvider(){
|
19434
|
+
function $LocaleProvider() {
|
19454
19435
|
this.$get = function() {
|
19455
19436
|
return {
|
19456
19437
|
id: 'en-us',
|
@@ -19493,7 +19474,7 @@ function $LocaleProvider(){
|
|
19493
19474
|
SHORTDAY: 'Sun,Mon,Tue,Wed,Thu,Fri,Sat'.split(','),
|
19494
19475
|
AMPMS: ['AM','PM'],
|
19495
19476
|
medium: 'MMM d, y h:mm:ss a',
|
19496
|
-
short: 'M/d/yy h:mm a',
|
19477
|
+
'short': 'M/d/yy h:mm a',
|
19497
19478
|
fullDate: 'EEEE, MMMM d, y',
|
19498
19479
|
longDate: 'MMMM d, y',
|
19499
19480
|
mediumDate: 'MMM d, y',
|
@@ -19608,7 +19589,7 @@ function LocationHtml5Url(appBase, basePrefix) {
|
|
19608
19589
|
|
19609
19590
|
/**
|
19610
19591
|
* Parse given html5 (regular) url string into properties
|
19611
|
-
* @param {string}
|
19592
|
+
* @param {string} url HTML5 url
|
19612
19593
|
* @private
|
19613
19594
|
*/
|
19614
19595
|
this.$$parse = function(url) {
|
@@ -19649,14 +19630,14 @@ function LocationHtml5Url(appBase, basePrefix) {
|
|
19649
19630
|
var appUrl, prevAppUrl;
|
19650
19631
|
var rewrittenUrl;
|
19651
19632
|
|
19652
|
-
if (
|
19633
|
+
if ((appUrl = beginsWith(appBase, url)) !== undefined) {
|
19653
19634
|
prevAppUrl = appUrl;
|
19654
|
-
if (
|
19635
|
+
if ((appUrl = beginsWith(basePrefix, appUrl)) !== undefined) {
|
19655
19636
|
rewrittenUrl = appBaseNoFile + (beginsWith('/', appUrl) || appUrl);
|
19656
19637
|
} else {
|
19657
19638
|
rewrittenUrl = appBase + prevAppUrl;
|
19658
19639
|
}
|
19659
|
-
} else if (
|
19640
|
+
} else if ((appUrl = beginsWith(appBaseNoFile, url)) !== undefined) {
|
19660
19641
|
rewrittenUrl = appBaseNoFile + appUrl;
|
19661
19642
|
} else if (appBaseNoFile == url + '/') {
|
19662
19643
|
rewrittenUrl = appBaseNoFile;
|
@@ -19718,7 +19699,7 @@ function LocationHashbangUrl(appBase, hashPrefix) {
|
|
19718
19699
|
* Inside of Angular, we're always using pathnames that
|
19719
19700
|
* do not include drive names for routing.
|
19720
19701
|
*/
|
19721
|
-
function removeWindowsDriveName
|
19702
|
+
function removeWindowsDriveName(path, url, base) {
|
19722
19703
|
/*
|
19723
19704
|
Matches paths for file protocol on windows,
|
19724
19705
|
such as /C:/foo/bar, and captures only /foo/bar.
|
@@ -19755,7 +19736,7 @@ function LocationHashbangUrl(appBase, hashPrefix) {
|
|
19755
19736
|
};
|
19756
19737
|
|
19757
19738
|
this.$$parseLinkUrl = function(url, relHref) {
|
19758
|
-
if(stripHash(appBase) == stripHash(url)) {
|
19739
|
+
if (stripHash(appBase) == stripHash(url)) {
|
19759
19740
|
this.$$parse(url);
|
19760
19741
|
return true;
|
19761
19742
|
}
|
@@ -19790,11 +19771,11 @@ function LocationHashbangInHtml5Url(appBase, hashPrefix) {
|
|
19790
19771
|
var rewrittenUrl;
|
19791
19772
|
var appUrl;
|
19792
19773
|
|
19793
|
-
if (
|
19774
|
+
if (appBase == stripHash(url)) {
|
19794
19775
|
rewrittenUrl = url;
|
19795
|
-
} else if (
|
19776
|
+
} else if ((appUrl = beginsWith(appBaseNoFile, url))) {
|
19796
19777
|
rewrittenUrl = appBase + hashPrefix + appUrl;
|
19797
|
-
} else if (
|
19778
|
+
} else if (appBaseNoFile === url + '/') {
|
19798
19779
|
rewrittenUrl = appBaseNoFile;
|
19799
19780
|
}
|
19800
19781
|
if (rewrittenUrl) {
|
@@ -20041,7 +20022,7 @@ var locationPrototype = {
|
|
20041
20022
|
}
|
20042
20023
|
};
|
20043
20024
|
|
20044
|
-
forEach([LocationHashbangInHtml5Url, LocationHashbangUrl, LocationHtml5Url], function
|
20025
|
+
forEach([LocationHashbangInHtml5Url, LocationHashbangUrl, LocationHtml5Url], function(Location) {
|
20045
20026
|
Location.prototype = Object.create(locationPrototype);
|
20046
20027
|
|
20047
20028
|
/**
|
@@ -20133,7 +20114,7 @@ function locationGetterSetter(property, preprocess) {
|
|
20133
20114
|
* @description
|
20134
20115
|
* Use the `$locationProvider` to configure how the application deep linking paths are stored.
|
20135
20116
|
*/
|
20136
|
-
function $LocationProvider(){
|
20117
|
+
function $LocationProvider() {
|
20137
20118
|
var hashPrefix = '',
|
20138
20119
|
html5Mode = {
|
20139
20120
|
enabled: false,
|
@@ -20240,7 +20221,7 @@ function $LocationProvider(){
|
|
20240
20221
|
*/
|
20241
20222
|
|
20242
20223
|
this.$get = ['$rootScope', '$browser', '$sniffer', '$rootElement',
|
20243
|
-
function(
|
20224
|
+
function($rootScope, $browser, $sniffer, $rootElement) {
|
20244
20225
|
var $location,
|
20245
20226
|
LocationMode,
|
20246
20227
|
baseHref = $browser.baseHref(), // if base[href] is undefined, it defaults to ''
|
@@ -20441,7 +20422,7 @@ function $LocationProvider(){
|
|
20441
20422
|
* @description
|
20442
20423
|
* Use the `$logProvider` to configure how the application logs messages
|
20443
20424
|
*/
|
20444
|
-
function $LogProvider(){
|
20425
|
+
function $LogProvider() {
|
20445
20426
|
var debug = true,
|
20446
20427
|
self = this;
|
20447
20428
|
|
@@ -20461,7 +20442,7 @@ function $LogProvider(){
|
|
20461
20442
|
}
|
20462
20443
|
};
|
20463
20444
|
|
20464
|
-
this.$get = ['$window', function($window){
|
20445
|
+
this.$get = ['$window', function($window) {
|
20465
20446
|
return {
|
20466
20447
|
/**
|
20467
20448
|
* @ngdoc method
|
@@ -20506,7 +20487,7 @@ function $LogProvider(){
|
|
20506
20487
|
* @description
|
20507
20488
|
* Write a debug message
|
20508
20489
|
*/
|
20509
|
-
debug: (function
|
20490
|
+
debug: (function() {
|
20510
20491
|
var fn = consoleLog('debug');
|
20511
20492
|
|
20512
20493
|
return function() {
|
@@ -20659,7 +20640,7 @@ CONSTANTS['this'].sharedGetter = true;
|
|
20659
20640
|
|
20660
20641
|
//Operators - will be wrapped by binaryFn/unaryFn/assignment/filter
|
20661
20642
|
var OPERATORS = extend(createMap(), {
|
20662
|
-
'+':function(self, locals, a,b){
|
20643
|
+
'+':function(self, locals, a, b) {
|
20663
20644
|
a=a(self, locals); b=b(self, locals);
|
20664
20645
|
if (isDefined(a)) {
|
20665
20646
|
if (isDefined(b)) {
|
@@ -20668,24 +20649,24 @@ var OPERATORS = extend(createMap(), {
|
|
20668
20649
|
return a;
|
20669
20650
|
}
|
20670
20651
|
return isDefined(b)?b:undefined;},
|
20671
|
-
'-':function(self, locals, a,b){
|
20652
|
+
'-':function(self, locals, a, b) {
|
20672
20653
|
a=a(self, locals); b=b(self, locals);
|
20673
20654
|
return (isDefined(a)?a:0)-(isDefined(b)?b:0);
|
20674
20655
|
},
|
20675
|
-
'*':function(self, locals, a,b){return a(self, locals)*b(self, locals);},
|
20676
|
-
'/':function(self, locals, a,b){return a(self, locals)/b(self, locals);},
|
20677
|
-
'%':function(self, locals, a,b){return a(self, locals)%b(self, locals);},
|
20678
|
-
'===':function(self, locals, a, b){return a(self, locals)===b(self, locals);},
|
20679
|
-
'!==':function(self, locals, a, b){return a(self, locals)!==b(self, locals);},
|
20680
|
-
'==':function(self, locals, a,b){return a(self, locals)==b(self, locals);},
|
20681
|
-
'!=':function(self, locals, a,b){return a(self, locals)!=b(self, locals);},
|
20682
|
-
'<':function(self, locals, a,b){return a(self, locals)<b(self, locals);},
|
20683
|
-
'>':function(self, locals, a,b){return a(self, locals)>b(self, locals);},
|
20684
|
-
'<=':function(self, locals, a,b){return a(self, locals)<=b(self, locals);},
|
20685
|
-
'>=':function(self, locals, a,b){return a(self, locals)>=b(self, locals);},
|
20686
|
-
'&&':function(self, locals, a,b){return a(self, locals)&&b(self, locals);},
|
20687
|
-
'||':function(self, locals, a,b){return a(self, locals)||b(self, locals);},
|
20688
|
-
'!':function(self, locals, a){return !a(self, locals);},
|
20656
|
+
'*':function(self, locals, a, b) {return a(self, locals)*b(self, locals);},
|
20657
|
+
'/':function(self, locals, a, b) {return a(self, locals)/b(self, locals);},
|
20658
|
+
'%':function(self, locals, a, b) {return a(self, locals)%b(self, locals);},
|
20659
|
+
'===':function(self, locals, a, b) {return a(self, locals)===b(self, locals);},
|
20660
|
+
'!==':function(self, locals, a, b) {return a(self, locals)!==b(self, locals);},
|
20661
|
+
'==':function(self, locals, a, b) {return a(self, locals)==b(self, locals);},
|
20662
|
+
'!=':function(self, locals, a, b) {return a(self, locals)!=b(self, locals);},
|
20663
|
+
'<':function(self, locals, a, b) {return a(self, locals)<b(self, locals);},
|
20664
|
+
'>':function(self, locals, a, b) {return a(self, locals)>b(self, locals);},
|
20665
|
+
'<=':function(self, locals, a, b) {return a(self, locals)<=b(self, locals);},
|
20666
|
+
'>=':function(self, locals, a, b) {return a(self, locals)>=b(self, locals);},
|
20667
|
+
'&&':function(self, locals, a, b) {return a(self, locals)&&b(self, locals);},
|
20668
|
+
'||':function(self, locals, a, b) {return a(self, locals)||b(self, locals);},
|
20669
|
+
'!':function(self, locals, a) {return !a(self, locals);},
|
20689
20670
|
|
20690
20671
|
//Tokenized as operators but parsed as assignment/filters
|
20691
20672
|
'=':true,
|
@@ -20700,14 +20681,14 @@ var ESCAPE = {"n":"\n", "f":"\f", "r":"\r", "t":"\t", "v":"\v", "'":"'", '"':'"'
|
|
20700
20681
|
/**
|
20701
20682
|
* @constructor
|
20702
20683
|
*/
|
20703
|
-
var Lexer = function
|
20684
|
+
var Lexer = function(options) {
|
20704
20685
|
this.options = options;
|
20705
20686
|
};
|
20706
20687
|
|
20707
20688
|
Lexer.prototype = {
|
20708
20689
|
constructor: Lexer,
|
20709
20690
|
|
20710
|
-
lex: function
|
20691
|
+
lex: function(text) {
|
20711
20692
|
this.text = text;
|
20712
20693
|
this.index = 0;
|
20713
20694
|
this.ch = undefined;
|
@@ -20944,13 +20925,13 @@ function isConstant(exp) {
|
|
20944
20925
|
/**
|
20945
20926
|
* @constructor
|
20946
20927
|
*/
|
20947
|
-
var Parser = function
|
20928
|
+
var Parser = function(lexer, $filter, options) {
|
20948
20929
|
this.lexer = lexer;
|
20949
20930
|
this.$filter = $filter;
|
20950
20931
|
this.options = options;
|
20951
20932
|
};
|
20952
20933
|
|
20953
|
-
Parser.ZERO = extend(function
|
20934
|
+
Parser.ZERO = extend(function() {
|
20954
20935
|
return 0;
|
20955
20936
|
}, {
|
20956
20937
|
sharedGetter: true,
|
@@ -20960,7 +20941,7 @@ Parser.ZERO = extend(function () {
|
|
20960
20941
|
Parser.prototype = {
|
20961
20942
|
constructor: Parser,
|
20962
20943
|
|
20963
|
-
parse: function
|
20944
|
+
parse: function(text) {
|
20964
20945
|
this.text = text;
|
20965
20946
|
this.tokens = this.lexer.lex(text);
|
20966
20947
|
|
@@ -20976,7 +20957,7 @@ Parser.prototype = {
|
|
20976
20957
|
return value;
|
20977
20958
|
},
|
20978
20959
|
|
20979
|
-
primary: function
|
20960
|
+
primary: function() {
|
20980
20961
|
var primary;
|
20981
20962
|
if (this.expect('(')) {
|
20982
20963
|
primary = this.filterChain();
|
@@ -21039,7 +21020,7 @@ Parser.prototype = {
|
|
21039
21020
|
return false;
|
21040
21021
|
},
|
21041
21022
|
|
21042
|
-
expect: function(e1, e2, e3, e4){
|
21023
|
+
expect: function(e1, e2, e3, e4) {
|
21043
21024
|
var token = this.peek(e1, e2, e3, e4);
|
21044
21025
|
if (token) {
|
21045
21026
|
this.tokens.shift();
|
@@ -21048,7 +21029,7 @@ Parser.prototype = {
|
|
21048
21029
|
return false;
|
21049
21030
|
},
|
21050
21031
|
|
21051
|
-
consume: function(e1){
|
21032
|
+
consume: function(e1) {
|
21052
21033
|
if (!this.expect(e1)) {
|
21053
21034
|
this.throwError('is unexpected, expecting [' + e1 + ']', this.peek());
|
21054
21035
|
}
|
@@ -21170,7 +21151,7 @@ Parser.prototype = {
|
|
21170
21151
|
if ((token = this.expect(':'))) {
|
21171
21152
|
var right = this.assignment();
|
21172
21153
|
|
21173
|
-
return extend(function $parseTernary(self, locals){
|
21154
|
+
return extend(function $parseTernary(self, locals) {
|
21174
21155
|
return left(self, locals) ? middle(self, locals) : right(self, locals);
|
21175
21156
|
}, {
|
21176
21157
|
constant: left.constant && middle.constant && right.constant
|
@@ -21330,7 +21311,7 @@ Parser.prototype = {
|
|
21330
21311
|
},
|
21331
21312
|
|
21332
21313
|
// This is used with json array declaration
|
21333
|
-
arrayDeclaration: function
|
21314
|
+
arrayDeclaration: function() {
|
21334
21315
|
var elementFns = [];
|
21335
21316
|
if (this.peekToken().text !== ']') {
|
21336
21317
|
do {
|
@@ -21357,7 +21338,7 @@ Parser.prototype = {
|
|
21357
21338
|
});
|
21358
21339
|
},
|
21359
21340
|
|
21360
|
-
object: function
|
21341
|
+
object: function() {
|
21361
21342
|
var keys = [], valueFns = [];
|
21362
21343
|
if (this.peekToken().text !== '}') {
|
21363
21344
|
do {
|
@@ -21506,6 +21487,12 @@ function getterFn(path, options, fullExp) {
|
|
21506
21487
|
return fn;
|
21507
21488
|
}
|
21508
21489
|
|
21490
|
+
var objectValueOf = Object.prototype.valueOf;
|
21491
|
+
|
21492
|
+
function getValueOf(value) {
|
21493
|
+
return isFunction(value.valueOf) ? value.valueOf() : objectValueOf.call(value);
|
21494
|
+
}
|
21495
|
+
|
21509
21496
|
///////////////////////////////////
|
21510
21497
|
|
21511
21498
|
/**
|
@@ -21652,7 +21639,7 @@ function $ParseProvider() {
|
|
21652
21639
|
// attempt to convert the value to a primitive type
|
21653
21640
|
// TODO(docs): add a note to docs that by implementing valueOf even objects and arrays can
|
21654
21641
|
// be cheaply dirty-checked
|
21655
|
-
newValue = newValue
|
21642
|
+
newValue = getValueOf(newValue);
|
21656
21643
|
|
21657
21644
|
if (typeof newValue === 'object') {
|
21658
21645
|
// objects/arrays are not supported - deep-watching them would be too expensive
|
@@ -21679,7 +21666,7 @@ function $ParseProvider() {
|
|
21679
21666
|
var newInputValue = inputExpressions(scope);
|
21680
21667
|
if (!expressionInputDirtyCheck(newInputValue, oldInputValue)) {
|
21681
21668
|
lastResult = parsedExpression(scope);
|
21682
|
-
oldInputValue = newInputValue && newInputValue
|
21669
|
+
oldInputValue = newInputValue && getValueOf(newInputValue);
|
21683
21670
|
}
|
21684
21671
|
return lastResult;
|
21685
21672
|
}, listener, objectEquality);
|
@@ -21696,7 +21683,7 @@ function $ParseProvider() {
|
|
21696
21683
|
for (var i = 0, ii = inputExpressions.length; i < ii; i++) {
|
21697
21684
|
var newInputValue = inputExpressions[i](scope);
|
21698
21685
|
if (changed || (changed = !expressionInputDirtyCheck(newInputValue, oldInputValueOfValues[i]))) {
|
21699
|
-
oldInputValueOfValues[i] = newInputValue && newInputValue
|
21686
|
+
oldInputValueOfValues[i] = newInputValue && getValueOf(newInputValue);
|
21700
21687
|
}
|
21701
21688
|
}
|
21702
21689
|
|
@@ -21718,7 +21705,7 @@ function $ParseProvider() {
|
|
21718
21705
|
listener.apply(this, arguments);
|
21719
21706
|
}
|
21720
21707
|
if (isDefined(value)) {
|
21721
|
-
scope.$$postDigest(function
|
21708
|
+
scope.$$postDigest(function() {
|
21722
21709
|
if (isDefined(lastValue)) {
|
21723
21710
|
unwatch();
|
21724
21711
|
}
|
@@ -21737,15 +21724,15 @@ function $ParseProvider() {
|
|
21737
21724
|
listener.call(this, value, old, scope);
|
21738
21725
|
}
|
21739
21726
|
if (isAllDefined(value)) {
|
21740
|
-
scope.$$postDigest(function
|
21741
|
-
if(isAllDefined(lastValue)) unwatch();
|
21727
|
+
scope.$$postDigest(function() {
|
21728
|
+
if (isAllDefined(lastValue)) unwatch();
|
21742
21729
|
});
|
21743
21730
|
}
|
21744
21731
|
}, objectEquality);
|
21745
21732
|
|
21746
21733
|
function isAllDefined(value) {
|
21747
21734
|
var allDefined = true;
|
21748
|
-
forEach(value, function
|
21735
|
+
forEach(value, function(val) {
|
21749
21736
|
if (!isDefined(val)) allDefined = false;
|
21750
21737
|
});
|
21751
21738
|
return allDefined;
|
@@ -22109,7 +22096,7 @@ function qFactory(nextTick, exceptionHandler) {
|
|
22109
22096
|
} else {
|
22110
22097
|
promise.reject(state.value);
|
22111
22098
|
}
|
22112
|
-
} catch(e) {
|
22099
|
+
} catch (e) {
|
22113
22100
|
promise.reject(e);
|
22114
22101
|
exceptionHandler(e);
|
22115
22102
|
}
|
@@ -22159,7 +22146,7 @@ function qFactory(nextTick, exceptionHandler) {
|
|
22159
22146
|
this.promise.$$state.status = 1;
|
22160
22147
|
scheduleProcessQueue(this.promise.$$state);
|
22161
22148
|
}
|
22162
|
-
} catch(e) {
|
22149
|
+
} catch (e) {
|
22163
22150
|
fns[1](e);
|
22164
22151
|
exceptionHandler(e);
|
22165
22152
|
}
|
@@ -22187,7 +22174,7 @@ function qFactory(nextTick, exceptionHandler) {
|
|
22187
22174
|
callback = callbacks[i][3];
|
22188
22175
|
try {
|
22189
22176
|
result.notify(isFunction(callback) ? callback(progress) : progress);
|
22190
|
-
} catch(e) {
|
22177
|
+
} catch (e) {
|
22191
22178
|
exceptionHandler(e);
|
22192
22179
|
}
|
22193
22180
|
}
|
@@ -22252,7 +22239,7 @@ function qFactory(nextTick, exceptionHandler) {
|
|
22252
22239
|
var callbackOutput = null;
|
22253
22240
|
try {
|
22254
22241
|
if (isFunction(callback)) callbackOutput = callback();
|
22255
|
-
} catch(e) {
|
22242
|
+
} catch (e) {
|
22256
22243
|
return makePromise(e, false);
|
22257
22244
|
}
|
22258
22245
|
if (isPromiseLike(callbackOutput)) {
|
@@ -22360,7 +22347,7 @@ function qFactory(nextTick, exceptionHandler) {
|
|
22360
22347
|
return $Q;
|
22361
22348
|
}
|
22362
22349
|
|
22363
|
-
function $$RAFProvider(){ //rAF
|
22350
|
+
function $$RAFProvider() { //rAF
|
22364
22351
|
this.$get = ['$window', '$timeout', function($window, $timeout) {
|
22365
22352
|
var requestAnimationFrame = $window.requestAnimationFrame ||
|
22366
22353
|
$window.webkitRequestAnimationFrame ||
|
@@ -22459,7 +22446,7 @@ function $$RAFProvider(){ //rAF
|
|
22459
22446
|
* They also provide an event emission/broadcast and subscription facility. See the
|
22460
22447
|
* {@link guide/scope developer guide on scopes}.
|
22461
22448
|
*/
|
22462
|
-
function $RootScopeProvider(){
|
22449
|
+
function $RootScopeProvider() {
|
22463
22450
|
var TTL = 10;
|
22464
22451
|
var $rootScopeMinErr = minErr('$rootScope');
|
22465
22452
|
var lastDirtyWatch = null;
|
@@ -22473,7 +22460,7 @@ function $RootScopeProvider(){
|
|
22473
22460
|
};
|
22474
22461
|
|
22475
22462
|
this.$get = ['$injector', '$exceptionHandler', '$parse', '$browser',
|
22476
|
-
function(
|
22463
|
+
function($injector, $exceptionHandler, $parse, $browser) {
|
22477
22464
|
|
22478
22465
|
/**
|
22479
22466
|
* @ngdoc type
|
@@ -22816,7 +22803,7 @@ function $RootScopeProvider(){
|
|
22816
22803
|
if (!watchExpressions.length) {
|
22817
22804
|
// No expressions means we call the listener ASAP
|
22818
22805
|
var shouldCall = true;
|
22819
|
-
self.$evalAsync(function
|
22806
|
+
self.$evalAsync(function() {
|
22820
22807
|
if (shouldCall) listener(newValues, newValues, self);
|
22821
22808
|
});
|
22822
22809
|
return function deregisterWatchGroup() {
|
@@ -22833,7 +22820,7 @@ function $RootScopeProvider(){
|
|
22833
22820
|
});
|
22834
22821
|
}
|
22835
22822
|
|
22836
|
-
forEach(watchExpressions, function
|
22823
|
+
forEach(watchExpressions, function(expr, i) {
|
22837
22824
|
var unwatchFn = self.$watch(expr, function watchGroupSubAction(value, oldValue) {
|
22838
22825
|
newValues[i] = value;
|
22839
22826
|
oldValues[i] = oldValue;
|
@@ -23005,7 +22992,7 @@ function $RootScopeProvider(){
|
|
23005
22992
|
if (oldLength > newLength) {
|
23006
22993
|
// we used to have more keys, need to find them and destroy them.
|
23007
22994
|
changeDetected++;
|
23008
|
-
for(key in oldValue) {
|
22995
|
+
for (key in oldValue) {
|
23009
22996
|
if (!newValue.hasOwnProperty(key)) {
|
23010
22997
|
oldLength--;
|
23011
22998
|
delete oldValue[key];
|
@@ -23125,7 +23112,7 @@ function $RootScopeProvider(){
|
|
23125
23112
|
dirty = false;
|
23126
23113
|
current = target;
|
23127
23114
|
|
23128
|
-
while(asyncQueue.length) {
|
23115
|
+
while (asyncQueue.length) {
|
23129
23116
|
try {
|
23130
23117
|
asyncTask = asyncQueue.shift();
|
23131
23118
|
asyncTask.scope.$eval(asyncTask.expression);
|
@@ -23182,7 +23169,7 @@ function $RootScopeProvider(){
|
|
23182
23169
|
// this piece should be kept in sync with the traversal in $broadcast
|
23183
23170
|
if (!(next = (current.$$childHead ||
|
23184
23171
|
(current !== target && current.$$nextSibling)))) {
|
23185
|
-
while(current !== target && !(next = current.$$nextSibling)) {
|
23172
|
+
while (current !== target && !(next = current.$$nextSibling)) {
|
23186
23173
|
current = current.$parent;
|
23187
23174
|
}
|
23188
23175
|
}
|
@@ -23190,7 +23177,7 @@ function $RootScopeProvider(){
|
|
23190
23177
|
|
23191
23178
|
// `break traverseScopesLoop;` takes us to here
|
23192
23179
|
|
23193
|
-
if((dirty || asyncQueue.length) && !(ttl--)) {
|
23180
|
+
if ((dirty || asyncQueue.length) && !(ttl--)) {
|
23194
23181
|
clearPhase();
|
23195
23182
|
throw $rootScopeMinErr('infdig',
|
23196
23183
|
'{0} $digest() iterations reached. Aborting!\n' +
|
@@ -23202,7 +23189,7 @@ function $RootScopeProvider(){
|
|
23202
23189
|
|
23203
23190
|
clearPhase();
|
23204
23191
|
|
23205
|
-
while(postDigestQueue.length) {
|
23192
|
+
while (postDigestQueue.length) {
|
23206
23193
|
try {
|
23207
23194
|
postDigestQueue.shift()();
|
23208
23195
|
} catch (e) {
|
@@ -23358,7 +23345,7 @@ function $RootScopeProvider(){
|
|
23358
23345
|
asyncQueue.push({scope: this, expression: expr});
|
23359
23346
|
},
|
23360
23347
|
|
23361
|
-
$$postDigest
|
23348
|
+
$$postDigest: function(fn) {
|
23362
23349
|
postDigestQueue.push(fn);
|
23363
23350
|
},
|
23364
23351
|
|
@@ -23495,8 +23482,11 @@ function $RootScopeProvider(){
|
|
23495
23482
|
|
23496
23483
|
var self = this;
|
23497
23484
|
return function() {
|
23498
|
-
namedListeners
|
23499
|
-
|
23485
|
+
var indexOfListener = namedListeners.indexOf(listener);
|
23486
|
+
if (indexOfListener !== -1) {
|
23487
|
+
namedListeners[indexOfListener] = null;
|
23488
|
+
decrementListenerCount(self, 1, name);
|
23489
|
+
}
|
23500
23490
|
};
|
23501
23491
|
},
|
23502
23492
|
|
@@ -23628,7 +23618,7 @@ function $RootScopeProvider(){
|
|
23628
23618
|
|
23629
23619
|
try {
|
23630
23620
|
listeners[i].apply(null, listenerArgs);
|
23631
|
-
} catch(e) {
|
23621
|
+
} catch (e) {
|
23632
23622
|
$exceptionHandler(e);
|
23633
23623
|
}
|
23634
23624
|
}
|
@@ -23639,7 +23629,7 @@ function $RootScopeProvider(){
|
|
23639
23629
|
// (though it differs due to having the extra check for $$listenerCount)
|
23640
23630
|
if (!(next = ((current.$$listenerCount[name] && current.$$childHead) ||
|
23641
23631
|
(current !== target && current.$$nextSibling)))) {
|
23642
|
-
while(current !== target && !(next = current.$$nextSibling)) {
|
23632
|
+
while (current !== target && !(next = current.$$nextSibling)) {
|
23643
23633
|
current = current.$parent;
|
23644
23634
|
}
|
23645
23635
|
}
|
@@ -23693,7 +23683,7 @@ function $RootScopeProvider(){
|
|
23693
23683
|
while (applyAsyncQueue.length) {
|
23694
23684
|
try {
|
23695
23685
|
applyAsyncQueue.shift()();
|
23696
|
-
} catch(e) {
|
23686
|
+
} catch (e) {
|
23697
23687
|
$exceptionHandler(e);
|
23698
23688
|
}
|
23699
23689
|
}
|
@@ -23794,15 +23784,6 @@ var SCE_CONTEXTS = {
|
|
23794
23784
|
|
23795
23785
|
// Helper functions follow.
|
23796
23786
|
|
23797
|
-
// Copied from:
|
23798
|
-
// http://docs.closure-library.googlecode.com/git/closure_goog_string_string.js.source.html#line962
|
23799
|
-
// Prereq: s is a string.
|
23800
|
-
function escapeForRegexp(s) {
|
23801
|
-
return s.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, '\\$1').
|
23802
|
-
replace(/\x08/g, '\\x08');
|
23803
|
-
}
|
23804
|
-
|
23805
|
-
|
23806
23787
|
function adjustMatcher(matcher) {
|
23807
23788
|
if (matcher === 'self') {
|
23808
23789
|
return matcher;
|
@@ -23938,7 +23919,7 @@ function $SceDelegateProvider() {
|
|
23938
23919
|
* @description
|
23939
23920
|
* Sets/Gets the whitelist of trusted resource URLs.
|
23940
23921
|
*/
|
23941
|
-
this.resourceUrlWhitelist = function
|
23922
|
+
this.resourceUrlWhitelist = function(value) {
|
23942
23923
|
if (arguments.length) {
|
23943
23924
|
resourceUrlWhitelist = adjustMatchers(value);
|
23944
23925
|
}
|
@@ -23972,7 +23953,7 @@ function $SceDelegateProvider() {
|
|
23972
23953
|
* Sets/Gets the blacklist of trusted resource URLs.
|
23973
23954
|
*/
|
23974
23955
|
|
23975
|
-
this.resourceUrlBlacklist = function
|
23956
|
+
this.resourceUrlBlacklist = function(value) {
|
23976
23957
|
if (arguments.length) {
|
23977
23958
|
resourceUrlBlacklist = adjustMatchers(value);
|
23978
23959
|
}
|
@@ -24453,7 +24434,7 @@ function $SceProvider() {
|
|
24453
24434
|
* @description
|
24454
24435
|
* Enables/disables SCE and returns the current value.
|
24455
24436
|
*/
|
24456
|
-
this.enabled = function
|
24437
|
+
this.enabled = function(value) {
|
24457
24438
|
if (arguments.length) {
|
24458
24439
|
enabled = !!value;
|
24459
24440
|
}
|
@@ -24507,11 +24488,11 @@ function $SceProvider() {
|
|
24507
24488
|
* sce.js and sceSpecs.js would need to be aware of this detail.
|
24508
24489
|
*/
|
24509
24490
|
|
24510
|
-
this.$get = ['$
|
24511
|
-
$
|
24491
|
+
this.$get = ['$parse', '$sceDelegate', function(
|
24492
|
+
$parse, $sceDelegate) {
|
24512
24493
|
// Prereq: Ensure that we're not running in IE<11 quirks mode. In that mode, IE < 11 allow
|
24513
24494
|
// the "expression(javascript expression)" syntax which is insecure.
|
24514
|
-
if (enabled &&
|
24495
|
+
if (enabled && msie < 8) {
|
24515
24496
|
throw $sceMinErr('iequirks',
|
24516
24497
|
'Strict Contextual Escaping does not support Internet Explorer version < 11 in quirks ' +
|
24517
24498
|
'mode. You can fix this by adding the text <!doctype html> to the top of your HTML ' +
|
@@ -24531,7 +24512,7 @@ function $SceProvider() {
|
|
24531
24512
|
* @description
|
24532
24513
|
* Returns a boolean indicating if SCE is enabled.
|
24533
24514
|
*/
|
24534
|
-
sce.isEnabled = function
|
24515
|
+
sce.isEnabled = function() {
|
24535
24516
|
return enabled;
|
24536
24517
|
};
|
24537
24518
|
sce.trustAs = $sceDelegate.trustAs;
|
@@ -24567,7 +24548,7 @@ function $SceProvider() {
|
|
24567
24548
|
if (parsed.literal && parsed.constant) {
|
24568
24549
|
return parsed;
|
24569
24550
|
} else {
|
24570
|
-
return $parse(expr, function
|
24551
|
+
return $parse(expr, function(value) {
|
24571
24552
|
return sce.getTrusted(type, value);
|
24572
24553
|
});
|
24573
24554
|
}
|
@@ -24820,15 +24801,15 @@ function $SceProvider() {
|
|
24820
24801
|
getTrusted = sce.getTrusted,
|
24821
24802
|
trustAs = sce.trustAs;
|
24822
24803
|
|
24823
|
-
forEach(SCE_CONTEXTS, function
|
24804
|
+
forEach(SCE_CONTEXTS, function(enumValue, name) {
|
24824
24805
|
var lName = lowercase(name);
|
24825
|
-
sce[camelCase("parse_as_" + lName)] = function
|
24806
|
+
sce[camelCase("parse_as_" + lName)] = function(expr) {
|
24826
24807
|
return parse(enumValue, expr);
|
24827
24808
|
};
|
24828
|
-
sce[camelCase("get_trusted_" + lName)] = function
|
24809
|
+
sce[camelCase("get_trusted_" + lName)] = function(value) {
|
24829
24810
|
return getTrusted(enumValue, value);
|
24830
24811
|
};
|
24831
|
-
sce[camelCase("trust_as_" + lName)] = function
|
24812
|
+
sce[camelCase("trust_as_" + lName)] = function(value) {
|
24832
24813
|
return trustAs(enumValue, value);
|
24833
24814
|
};
|
24834
24815
|
});
|
@@ -24859,22 +24840,22 @@ function $SnifferProvider() {
|
|
24859
24840
|
boxee = /Boxee/i.test(($window.navigator || {}).userAgent),
|
24860
24841
|
document = $document[0] || {},
|
24861
24842
|
vendorPrefix,
|
24862
|
-
vendorRegex = /^(Moz|webkit|
|
24843
|
+
vendorRegex = /^(Moz|webkit|ms)(?=[A-Z])/,
|
24863
24844
|
bodyStyle = document.body && document.body.style,
|
24864
24845
|
transitions = false,
|
24865
24846
|
animations = false,
|
24866
24847
|
match;
|
24867
24848
|
|
24868
24849
|
if (bodyStyle) {
|
24869
|
-
for(var prop in bodyStyle) {
|
24870
|
-
if(match = vendorRegex.exec(prop)) {
|
24850
|
+
for (var prop in bodyStyle) {
|
24851
|
+
if (match = vendorRegex.exec(prop)) {
|
24871
24852
|
vendorPrefix = match[0];
|
24872
24853
|
vendorPrefix = vendorPrefix.substr(0, 1).toUpperCase() + vendorPrefix.substr(1);
|
24873
24854
|
break;
|
24874
24855
|
}
|
24875
24856
|
}
|
24876
24857
|
|
24877
|
-
if(!vendorPrefix) {
|
24858
|
+
if (!vendorPrefix) {
|
24878
24859
|
vendorPrefix = ('WebkitOpacity' in bodyStyle) && 'webkit';
|
24879
24860
|
}
|
24880
24861
|
|
@@ -24915,8 +24896,8 @@ function $SnifferProvider() {
|
|
24915
24896
|
},
|
24916
24897
|
csp: csp(),
|
24917
24898
|
vendorPrefix: vendorPrefix,
|
24918
|
-
transitions
|
24919
|
-
animations
|
24899
|
+
transitions: transitions,
|
24900
|
+
animations: animations,
|
24920
24901
|
android: android
|
24921
24902
|
};
|
24922
24903
|
}];
|
@@ -24947,13 +24928,29 @@ function $TemplateRequestProvider() {
|
|
24947
24928
|
var self = handleRequestFn;
|
24948
24929
|
self.totalPendingRequests++;
|
24949
24930
|
|
24950
|
-
|
24951
|
-
|
24952
|
-
|
24953
|
-
|
24954
|
-
|
24931
|
+
var transformResponse = $http.defaults && $http.defaults.transformResponse;
|
24932
|
+
|
24933
|
+
if (isArray(transformResponse)) {
|
24934
|
+
var original = transformResponse;
|
24935
|
+
transformResponse = [];
|
24936
|
+
for (var i=0; i<original.length; ++i) {
|
24937
|
+
var transformer = original[i];
|
24938
|
+
if (transformer !== defaultHttpResponseTransform) {
|
24939
|
+
transformResponse.push(transformer);
|
24955
24940
|
}
|
24941
|
+
}
|
24942
|
+
} else if (transformResponse === defaultHttpResponseTransform) {
|
24943
|
+
transformResponse = null;
|
24944
|
+
}
|
24945
|
+
|
24946
|
+
var httpOptions = {
|
24947
|
+
cache: $templateCache,
|
24948
|
+
transformResponse: transformResponse
|
24949
|
+
};
|
24956
24950
|
|
24951
|
+
return $http.get(tpl, httpOptions)
|
24952
|
+
.then(function(response) {
|
24953
|
+
var html = response.data;
|
24957
24954
|
self.totalPendingRequests--;
|
24958
24955
|
$templateCache.put(tpl, html);
|
24959
24956
|
return html;
|
@@ -25007,7 +25004,7 @@ function $$TestabilityProvider() {
|
|
25007
25004
|
if (dataBinding) {
|
25008
25005
|
forEach(dataBinding, function(bindingName) {
|
25009
25006
|
if (opt_exactMatch) {
|
25010
|
-
var matcher = new RegExp('(^|\\s)' + expression + '(\\s|\\||$)');
|
25007
|
+
var matcher = new RegExp('(^|\\s)' + escapeForRegexp(expression) + '(\\s|\\||$)');
|
25011
25008
|
if (matcher.test(bindingName)) {
|
25012
25009
|
matches.push(binding);
|
25013
25010
|
}
|
@@ -25129,7 +25126,7 @@ function $TimeoutProvider() {
|
|
25129
25126
|
timeoutId = $browser.defer(function() {
|
25130
25127
|
try {
|
25131
25128
|
deferred.resolve(fn());
|
25132
|
-
} catch(e) {
|
25129
|
+
} catch (e) {
|
25133
25130
|
deferred.reject(e);
|
25134
25131
|
$exceptionHandler(e);
|
25135
25132
|
}
|
@@ -25295,7 +25292,7 @@ function urlIsSameOrigin(requestUrl) {
|
|
25295
25292
|
<file name="index.html">
|
25296
25293
|
<script>
|
25297
25294
|
angular.module('windowExample', [])
|
25298
|
-
.controller('ExampleController', ['$scope', '$window', function
|
25295
|
+
.controller('ExampleController', ['$scope', '$window', function($scope, $window) {
|
25299
25296
|
$scope.greeting = 'Hello, World!';
|
25300
25297
|
$scope.doGreeting = function(greeting) {
|
25301
25298
|
$window.alert(greeting);
|
@@ -25316,7 +25313,7 @@ function urlIsSameOrigin(requestUrl) {
|
|
25316
25313
|
</file>
|
25317
25314
|
</example>
|
25318
25315
|
*/
|
25319
|
-
function $WindowProvider(){
|
25316
|
+
function $WindowProvider() {
|
25320
25317
|
this.$get = valueFn(window);
|
25321
25318
|
}
|
25322
25319
|
|
@@ -25425,7 +25422,7 @@ function $FilterProvider($provide) {
|
|
25425
25422
|
* of the registered filter instances.
|
25426
25423
|
*/
|
25427
25424
|
function register(name, factory) {
|
25428
|
-
if(isObject(name)) {
|
25425
|
+
if (isObject(name)) {
|
25429
25426
|
var filters = {};
|
25430
25427
|
forEach(name, function(filter, key) {
|
25431
25428
|
filters[key] = register(key, filter);
|
@@ -25592,7 +25589,7 @@ function filterFilter() {
|
|
25592
25589
|
|
25593
25590
|
predicates.check = function(value, index) {
|
25594
25591
|
for (var j = 0; j < predicates.length; j++) {
|
25595
|
-
if(!predicates[j](value, index)) {
|
25592
|
+
if (!predicates[j](value, index)) {
|
25596
25593
|
return false;
|
25597
25594
|
}
|
25598
25595
|
}
|
@@ -25621,7 +25618,7 @@ function filterFilter() {
|
|
25621
25618
|
}
|
25622
25619
|
}
|
25623
25620
|
|
25624
|
-
var search = function(obj, text){
|
25621
|
+
var search = function(obj, text) {
|
25625
25622
|
if (typeof text === 'string' && text.charAt(0) === '!') {
|
25626
25623
|
return !search(obj, text.substr(1));
|
25627
25624
|
}
|
@@ -25635,7 +25632,7 @@ function filterFilter() {
|
|
25635
25632
|
case 'object':
|
25636
25633
|
return comparator(obj, text);
|
25637
25634
|
default:
|
25638
|
-
for (
|
25635
|
+
for (var objKey in obj) {
|
25639
25636
|
if (objKey.charAt(0) !== '$' && search(obj[objKey], text)) {
|
25640
25637
|
return true;
|
25641
25638
|
}
|
@@ -25644,7 +25641,7 @@ function filterFilter() {
|
|
25644
25641
|
}
|
25645
25642
|
return false;
|
25646
25643
|
case 'array':
|
25647
|
-
for (
|
25644
|
+
for (var i = 0; i < obj.length; i++) {
|
25648
25645
|
if (search(obj[i], text)) {
|
25649
25646
|
return true;
|
25650
25647
|
}
|
@@ -25679,7 +25676,7 @@ function filterFilter() {
|
|
25679
25676
|
return array;
|
25680
25677
|
}
|
25681
25678
|
var filtered = [];
|
25682
|
-
for (
|
25679
|
+
for (var j = 0; j < array.length; j++) {
|
25683
25680
|
var value = array[j];
|
25684
25681
|
if (predicates.check(value, j)) {
|
25685
25682
|
filtered.push(value);
|
@@ -25744,7 +25741,7 @@ function filterFilter() {
|
|
25744
25741
|
currencyFilter.$inject = ['$locale'];
|
25745
25742
|
function currencyFilter($locale) {
|
25746
25743
|
var formats = $locale.NUMBER_FORMATS;
|
25747
|
-
return function(amount, currencySymbol, fractionSize){
|
25744
|
+
return function(amount, currencySymbol, fractionSize) {
|
25748
25745
|
if (isUndefined(currencySymbol)) {
|
25749
25746
|
currencySymbol = formats.CURRENCY_SYM;
|
25750
25747
|
}
|
@@ -25891,7 +25888,7 @@ function formatNumber(number, pattern, groupSep, decimalSep, fractionSize) {
|
|
25891
25888
|
}
|
25892
25889
|
|
25893
25890
|
// format fraction part.
|
25894
|
-
while(fraction.length < fractionSize) {
|
25891
|
+
while (fraction.length < fractionSize) {
|
25895
25892
|
fraction += '0';
|
25896
25893
|
}
|
25897
25894
|
|
@@ -25916,7 +25913,7 @@ function padNumber(num, digits, trim) {
|
|
25916
25913
|
num = -num;
|
25917
25914
|
}
|
25918
25915
|
num = '' + num;
|
25919
|
-
while(num.length < digits) num = '0' + num;
|
25916
|
+
while (num.length < digits) num = '0' + num;
|
25920
25917
|
if (trim)
|
25921
25918
|
num = num.substr(num.length - digits);
|
25922
25919
|
return neg + num;
|
@@ -25929,7 +25926,7 @@ function dateGetter(name, size, offset, trim) {
|
|
25929
25926
|
var value = date['get' + name]();
|
25930
25927
|
if (offset > 0 || value > -offset)
|
25931
25928
|
value += offset;
|
25932
|
-
if (value === 0 && offset == -12
|
25929
|
+
if (value === 0 && offset == -12) value = 12;
|
25933
25930
|
return padNumber(value, size, trim);
|
25934
25931
|
};
|
25935
25932
|
}
|
@@ -26154,7 +26151,7 @@ function dateFilter($locale) {
|
|
26154
26151
|
return date;
|
26155
26152
|
}
|
26156
26153
|
|
26157
|
-
while(format) {
|
26154
|
+
while (format) {
|
26158
26155
|
match = DATE_FORMATS_SPLIT.exec(format);
|
26159
26156
|
if (match) {
|
26160
26157
|
parts = concat(parts, match, 1);
|
@@ -26169,7 +26166,7 @@ function dateFilter($locale) {
|
|
26169
26166
|
date = new Date(date.getTime());
|
26170
26167
|
date.setMinutes(date.getMinutes() + date.getTimezoneOffset());
|
26171
26168
|
}
|
26172
|
-
forEach(parts, function(value){
|
26169
|
+
forEach(parts, function(value) {
|
26173
26170
|
fn = DATE_FORMATS[value];
|
26174
26171
|
text += fn ? fn(date, $locale.DATETIME_FORMATS)
|
26175
26172
|
: value.replace(/(^'|'$)/g, '').replace(/''/g, "'");
|
@@ -26322,7 +26319,7 @@ var uppercaseFilter = valueFn(uppercase);
|
|
26322
26319
|
</file>
|
26323
26320
|
</example>
|
26324
26321
|
*/
|
26325
|
-
function limitToFilter(){
|
26322
|
+
function limitToFilter() {
|
26326
26323
|
return function(input, limit) {
|
26327
26324
|
if (isNumber(input)) input = input.toString();
|
26328
26325
|
if (!isArray(input) && !isString(input)) return input;
|
@@ -26483,42 +26480,42 @@ function limitToFilter(){
|
|
26483
26480
|
</example>
|
26484
26481
|
*/
|
26485
26482
|
orderByFilter.$inject = ['$parse'];
|
26486
|
-
function orderByFilter($parse){
|
26483
|
+
function orderByFilter($parse) {
|
26487
26484
|
return function(array, sortPredicate, reverseOrder) {
|
26488
26485
|
if (!(isArrayLike(array))) return array;
|
26489
26486
|
sortPredicate = isArray(sortPredicate) ? sortPredicate: [sortPredicate];
|
26490
26487
|
if (sortPredicate.length === 0) { sortPredicate = ['+']; }
|
26491
|
-
sortPredicate = sortPredicate.map(function(predicate){
|
26488
|
+
sortPredicate = sortPredicate.map(function(predicate) {
|
26492
26489
|
var descending = false, get = predicate || identity;
|
26493
26490
|
if (isString(predicate)) {
|
26494
26491
|
if ((predicate.charAt(0) == '+' || predicate.charAt(0) == '-')) {
|
26495
26492
|
descending = predicate.charAt(0) == '-';
|
26496
26493
|
predicate = predicate.substring(1);
|
26497
26494
|
}
|
26498
|
-
if (
|
26495
|
+
if (predicate === '') {
|
26499
26496
|
// Effectively no predicate was passed so we compare identity
|
26500
|
-
return reverseComparator(function(a,b) {
|
26497
|
+
return reverseComparator(function(a, b) {
|
26501
26498
|
return compare(a, b);
|
26502
26499
|
}, descending);
|
26503
26500
|
}
|
26504
26501
|
get = $parse(predicate);
|
26505
26502
|
if (get.constant) {
|
26506
26503
|
var key = get();
|
26507
|
-
return reverseComparator(function(a,b) {
|
26504
|
+
return reverseComparator(function(a, b) {
|
26508
26505
|
return compare(a[key], b[key]);
|
26509
26506
|
}, descending);
|
26510
26507
|
}
|
26511
26508
|
}
|
26512
|
-
return reverseComparator(function(a,b){
|
26509
|
+
return reverseComparator(function(a, b) {
|
26513
26510
|
return compare(get(a),get(b));
|
26514
26511
|
}, descending);
|
26515
26512
|
});
|
26516
26513
|
var arrayCopy = [];
|
26517
|
-
for (
|
26514
|
+
for (var i = 0; i < array.length; i++) { arrayCopy.push(array[i]); }
|
26518
26515
|
return arrayCopy.sort(reverseComparator(comparator, reverseOrder));
|
26519
26516
|
|
26520
|
-
function comparator(o1, o2){
|
26521
|
-
for (
|
26517
|
+
function comparator(o1, o2) {
|
26518
|
+
for (var i = 0; i < sortPredicate.length; i++) {
|
26522
26519
|
var comp = sortPredicate[i](o1, o2);
|
26523
26520
|
if (comp !== 0) return comp;
|
26524
26521
|
}
|
@@ -26526,10 +26523,10 @@ function orderByFilter($parse){
|
|
26526
26523
|
}
|
26527
26524
|
function reverseComparator(comp, descending) {
|
26528
26525
|
return descending
|
26529
|
-
? function(a,b){return comp(b,a);}
|
26526
|
+
? function(a, b) {return comp(b,a);}
|
26530
26527
|
: comp;
|
26531
26528
|
}
|
26532
|
-
function compare(v1, v2){
|
26529
|
+
function compare(v1, v2) {
|
26533
26530
|
var t1 = typeof v1;
|
26534
26531
|
var t2 = typeof v2;
|
26535
26532
|
if (t1 == t2) {
|
@@ -26581,7 +26578,7 @@ var htmlAnchorDirective = valueFn({
|
|
26581
26578
|
// SVGAElement does not use the href attribute, but rather the 'xlinkHref' attribute.
|
26582
26579
|
var href = toString.call(element.prop('href')) === '[object SVGAnimatedString]' ?
|
26583
26580
|
'xlink:href' : 'href';
|
26584
|
-
element.on('click', function(event){
|
26581
|
+
element.on('click', function(event) {
|
26585
26582
|
// if we have no href url, then don't navigate anywhere.
|
26586
26583
|
if (!element.attr(href)) {
|
26587
26584
|
event.preventDefault();
|
@@ -27060,6 +27057,11 @@ function nullFormRenameControl(control, name) {
|
|
27060
27057
|
* - `pattern`
|
27061
27058
|
* - `required`
|
27062
27059
|
* - `url`
|
27060
|
+
* - `date`
|
27061
|
+
* - `datetimelocal`
|
27062
|
+
* - `time`
|
27063
|
+
* - `week`
|
27064
|
+
* - `month`
|
27063
27065
|
*
|
27064
27066
|
* @description
|
27065
27067
|
* `FormController` keeps track of all its controls and nested forms as well as the state of them,
|
@@ -27248,7 +27250,7 @@ function FormController(element, attrs, $scope, $animate, $interpolate) {
|
|
27248
27250
|
* Setting a form back to a pristine state is often useful when we want to 'reuse' a form after
|
27249
27251
|
* saving or resetting it.
|
27250
27252
|
*/
|
27251
|
-
form.$setPristine = function
|
27253
|
+
form.$setPristine = function() {
|
27252
27254
|
$animate.setClass(element, PRISTINE_CLASS, DIRTY_CLASS + ' ' + SUBMITTED_CLASS);
|
27253
27255
|
form.$dirty = false;
|
27254
27256
|
form.$pristine = true;
|
@@ -27271,7 +27273,7 @@ function FormController(element, attrs, $scope, $animate, $interpolate) {
|
|
27271
27273
|
* Setting a form controls back to their untouched state is often useful when setting the form
|
27272
27274
|
* back to its pristine state.
|
27273
27275
|
*/
|
27274
|
-
form.$setUntouched = function
|
27276
|
+
form.$setUntouched = function() {
|
27275
27277
|
forEach(controls, function(control) {
|
27276
27278
|
control.$setUntouched();
|
27277
27279
|
});
|
@@ -27284,7 +27286,7 @@ function FormController(element, attrs, $scope, $animate, $interpolate) {
|
|
27284
27286
|
* @description
|
27285
27287
|
* Sets the form to its submitted state.
|
27286
27288
|
*/
|
27287
|
-
form.$setSubmitted = function
|
27289
|
+
form.$setSubmitted = function() {
|
27288
27290
|
$animate.addClass(element, SUBMITTED_CLASS);
|
27289
27291
|
form.$submitted = true;
|
27290
27292
|
parentForm.$setSubmitted();
|
@@ -27561,7 +27563,6 @@ var inputType = {
|
|
27561
27563
|
* @description
|
27562
27564
|
* Standard HTML text input with angular data binding, inherited by most of the `input` elements.
|
27563
27565
|
*
|
27564
|
-
* *NOTE* Not every feature offered is available for all input types.
|
27565
27566
|
*
|
27566
27567
|
* @param {string} ngModel Assignable angular expression to data-bind to.
|
27567
27568
|
* @param {string=} name Property name of the form under which the control is published.
|
@@ -27645,7 +27646,10 @@ var inputType = {
|
|
27645
27646
|
* the HTML5 date input, a text element will be used. In that case, text must be entered in a valid ISO-8601
|
27646
27647
|
* date format (yyyy-MM-dd), for example: `2009-01-06`. Since many
|
27647
27648
|
* modern browsers do not yet support this input type, it is important to provide cues to users on the
|
27648
|
-
* expected input format via a placeholder or label.
|
27649
|
+
* expected input format via a placeholder or label.
|
27650
|
+
*
|
27651
|
+
* The model must always be a Date object, otherwise Angular will throw an error.
|
27652
|
+
* Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string.
|
27649
27653
|
*
|
27650
27654
|
* The timezone to be used to read/write the `Date` instance in the model can be defined using
|
27651
27655
|
* {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.
|
@@ -27733,7 +27737,10 @@ var inputType = {
|
|
27733
27737
|
* @description
|
27734
27738
|
* Input with datetime validation and transformation. In browsers that do not yet support
|
27735
27739
|
* the HTML5 date input, a text element will be used. In that case, the text must be entered in a valid ISO-8601
|
27736
|
-
* local datetime format (yyyy-MM-ddTHH:mm:ss), for example: `2010-12-28T14:57:00`.
|
27740
|
+
* local datetime format (yyyy-MM-ddTHH:mm:ss), for example: `2010-12-28T14:57:00`.
|
27741
|
+
*
|
27742
|
+
* The model must always be a Date object, otherwise Angular will throw an error.
|
27743
|
+
* Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string.
|
27737
27744
|
*
|
27738
27745
|
* The timezone to be used to read/write the `Date` instance in the model can be defined using
|
27739
27746
|
* {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.
|
@@ -27824,6 +27831,9 @@ var inputType = {
|
|
27824
27831
|
* local time format (HH:mm:ss), for example: `14:57:00`. Model must be a Date object. This binding will always output a
|
27825
27832
|
* Date object to the model of January 1, 1970, or local date `new Date(1970, 0, 1, HH, mm, ss)`.
|
27826
27833
|
*
|
27834
|
+
* The model must always be a Date object, otherwise Angular will throw an error.
|
27835
|
+
* Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string.
|
27836
|
+
*
|
27827
27837
|
* The timezone to be used to read/write the `Date` instance in the model can be defined using
|
27828
27838
|
* {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.
|
27829
27839
|
*
|
@@ -27910,7 +27920,10 @@ var inputType = {
|
|
27910
27920
|
* @description
|
27911
27921
|
* Input with week-of-the-year validation and transformation to Date. In browsers that do not yet support
|
27912
27922
|
* the HTML5 week input, a text element will be used. In that case, the text must be entered in a valid ISO-8601
|
27913
|
-
* week format (yyyy-W##), for example: `2013-W02`.
|
27923
|
+
* week format (yyyy-W##), for example: `2013-W02`.
|
27924
|
+
*
|
27925
|
+
* The model must always be a Date object, otherwise Angular will throw an error.
|
27926
|
+
* Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string.
|
27914
27927
|
*
|
27915
27928
|
* The timezone to be used to read/write the `Date` instance in the model can be defined using
|
27916
27929
|
* {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.
|
@@ -27996,8 +28009,12 @@ var inputType = {
|
|
27996
28009
|
* @description
|
27997
28010
|
* Input with month validation and transformation. In browsers that do not yet support
|
27998
28011
|
* the HTML5 month input, a text element will be used. In that case, the text must be entered in a valid ISO-8601
|
27999
|
-
* month format (yyyy-MM), for example: `2009-01`.
|
28000
|
-
*
|
28012
|
+
* month format (yyyy-MM), for example: `2009-01`.
|
28013
|
+
*
|
28014
|
+
* The model must always be a Date object, otherwise Angular will throw an error.
|
28015
|
+
* Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string.
|
28016
|
+
* If the model is not set to the first of the month, the next view to model update will set it
|
28017
|
+
* to the first of the month.
|
28001
28018
|
*
|
28002
28019
|
* The timezone to be used to read/write the `Date` instance in the model can be defined using
|
28003
28020
|
* {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.
|
@@ -28086,6 +28103,8 @@ var inputType = {
|
|
28086
28103
|
* Text input with number validation and transformation. Sets the `number` validation
|
28087
28104
|
* error if not a valid number.
|
28088
28105
|
*
|
28106
|
+
* The model must always be a number, otherwise Angular will throw an error.
|
28107
|
+
*
|
28089
28108
|
* @param {string} ngModel Assignable angular expression to data-bind to.
|
28090
28109
|
* @param {string=} name Property name of the form under which the control is published.
|
28091
28110
|
* @param {string=} min Sets the `min` validation error key if the value entered is less than `min`.
|
@@ -28164,6 +28183,12 @@ var inputType = {
|
|
28164
28183
|
* Text input with URL validation. Sets the `url` validation error key if the content is not a
|
28165
28184
|
* valid URL.
|
28166
28185
|
*
|
28186
|
+
* <div class="alert alert-warning">
|
28187
|
+
* **Note:** `input[url]` uses a regex to validate urls that is derived from the regex
|
28188
|
+
* used in Chromium. If you need stricter validation, you can use `ng-pattern` or modify
|
28189
|
+
* the built-in validators (see the {@link guide/forms Forms guide})
|
28190
|
+
* </div>
|
28191
|
+
*
|
28167
28192
|
* @param {string} ngModel Assignable angular expression to data-bind to.
|
28168
28193
|
* @param {string=} name Property name of the form under which the control is published.
|
28169
28194
|
* @param {string=} required Sets `required` validation error key if the value is not entered.
|
@@ -28241,6 +28266,12 @@ var inputType = {
|
|
28241
28266
|
* Text input with email validation. Sets the `email` validation error key if not a valid email
|
28242
28267
|
* address.
|
28243
28268
|
*
|
28269
|
+
* <div class="alert alert-warning">
|
28270
|
+
* **Note:** `input[email]` uses a regex to validate email addresses that is derived from the regex
|
28271
|
+
* used in Chromium. If you need stricter validation (e.g. requiring a top-level domain), you can
|
28272
|
+
* use `ng-pattern` or modify the built-in validators (see the {@link guide/forms Forms guide})
|
28273
|
+
* </div>
|
28274
|
+
*
|
28244
28275
|
* @param {string} ngModel Assignable angular expression to data-bind to.
|
28245
28276
|
* @param {string=} name Property name of the form under which the control is published.
|
28246
28277
|
* @param {string=} required Sets `required` validation error key if the value is not entered.
|
@@ -28419,19 +28450,6 @@ var inputType = {
|
|
28419
28450
|
'file': noop
|
28420
28451
|
};
|
28421
28452
|
|
28422
|
-
function testFlags(validity, flags) {
|
28423
|
-
var i, flag;
|
28424
|
-
if (flags) {
|
28425
|
-
for (i=0; i<flags.length; ++i) {
|
28426
|
-
flag = flags[i];
|
28427
|
-
if (validity[flag]) {
|
28428
|
-
return true;
|
28429
|
-
}
|
28430
|
-
}
|
28431
|
-
}
|
28432
|
-
return false;
|
28433
|
-
}
|
28434
|
-
|
28435
28453
|
function stringBasedInputType(ctrl) {
|
28436
28454
|
ctrl.$formatters.push(function(value) {
|
28437
28455
|
return ctrl.$isEmpty(value) ? value : value.toString();
|
@@ -28444,7 +28462,6 @@ function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
|
|
28444
28462
|
}
|
28445
28463
|
|
28446
28464
|
function baseInputType(scope, element, attr, ctrl, $sniffer, $browser) {
|
28447
|
-
var validity = element.prop(VALIDITY_STATE_PROPERTY);
|
28448
28465
|
var placeholder = element[0].placeholder, noevent = {};
|
28449
28466
|
var type = lowercase(element[0].type);
|
28450
28467
|
|
@@ -28881,10 +28898,14 @@ function checkboxInputType(scope, element, attr, ctrl, $sniffer, $browser, $filt
|
|
28881
28898
|
* @restrict E
|
28882
28899
|
*
|
28883
28900
|
* @description
|
28884
|
-
* HTML input element control
|
28885
|
-
*
|
28901
|
+
* HTML input element control. When used together with {@link ngModel `ngModel`}, it provides data-binding,
|
28902
|
+
* input state control, and validation.
|
28903
|
+
* Input control follows HTML5 input types and polyfills the HTML5 validation behavior for older browsers.
|
28886
28904
|
*
|
28887
|
-
*
|
28905
|
+
* <div class="alert alert-warning">
|
28906
|
+
* **Note:** Not every feature offered is available for all input types.
|
28907
|
+
* Specifically, data binding and event handling via `ng-model` is unsupported for `input[file]`.
|
28908
|
+
* </div>
|
28888
28909
|
*
|
28889
28910
|
* @param {string} ngModel Assignable angular expression to data-bind to.
|
28890
28911
|
* @param {string=} name Property name of the form under which the control is published.
|
@@ -29020,19 +29041,20 @@ var VALID_CLASS = 'ng-valid',
|
|
29020
29041
|
* @name ngModel.NgModelController
|
29021
29042
|
*
|
29022
29043
|
* @property {string} $viewValue Actual string value in the view.
|
29023
|
-
* @property {*} $modelValue The value in the model
|
29044
|
+
* @property {*} $modelValue The value in the model that the control is bound to.
|
29024
29045
|
* @property {Array.<Function>} $parsers Array of functions to execute, as a pipeline, whenever
|
29025
|
-
the control reads value from the DOM.
|
29026
|
-
through to the next. The last return value is
|
29027
|
-
Used to sanitize / convert the value
|
29028
|
-
|
29029
|
-
|
29030
|
-
|
29046
|
+
the control reads value from the DOM. The functions are called in array order, each passing the value
|
29047
|
+
through to the next. The last return value is forwarded to the $validators collection.
|
29048
|
+
Used to sanitize / convert the value.
|
29049
|
+
Returning undefined from a parser means a parse error occurred. No $validators will
|
29050
|
+
run and the 'ngModel' will not be updated until the parse error is resolved. The parse error is stored
|
29051
|
+
in 'ngModel.$error.parse'.
|
29031
29052
|
|
29032
29053
|
*
|
29033
29054
|
* @property {Array.<Function>} $formatters Array of functions to execute, as a pipeline, whenever
|
29034
|
-
the model value changes.
|
29035
|
-
next.
|
29055
|
+
the model value changes. The functions are called in reverse array order, each passing the value through to the
|
29056
|
+
next. The last return value is used as the actual DOM value.
|
29057
|
+
Used to format / convert values for display in the control.
|
29036
29058
|
* ```js
|
29037
29059
|
* function formatter(value) {
|
29038
29060
|
* if (value) {
|
@@ -29063,8 +29085,9 @@ var VALID_CLASS = 'ng-valid',
|
|
29063
29085
|
* is expected to return a promise when it is run during the model validation process. Once the promise
|
29064
29086
|
* is delivered then the validation status will be set to true when fulfilled and false when rejected.
|
29065
29087
|
* When the asynchronous validators are triggered, each of the validators will run in parallel and the model
|
29066
|
-
* value will only be updated once all validators have been fulfilled.
|
29067
|
-
*
|
29088
|
+
* value will only be updated once all validators have been fulfilled. As long as an asynchronous validator
|
29089
|
+
* is unfulfilled, its key will be added to the controllers `$pending` property. Also, all asynchronous validators
|
29090
|
+
* will only run once all synchronous validators have passed.
|
29068
29091
|
*
|
29069
29092
|
* Please note that if $http is used then it is important that the server returns a success HTTP response code
|
29070
29093
|
* in order to fulfill the validation and a status level of `4xx` in order to reject the validation.
|
@@ -29120,7 +29143,7 @@ var VALID_CLASS = 'ng-valid',
|
|
29120
29143
|
*
|
29121
29144
|
* We are using the {@link ng.service:$sce $sce} service here and include the {@link ngSanitize $sanitize}
|
29122
29145
|
* module to automatically remove "bad" content like inline event listener (e.g. `<span onclick="...">`).
|
29123
|
-
* However, as we are using `$sce` the model can still decide to
|
29146
|
+
* However, as we are using `$sce` the model can still decide to provide unsafe content if it marks
|
29124
29147
|
* that content using the `$sce` service.
|
29125
29148
|
*
|
29126
29149
|
* <example name="NgModelController" module="customControl" deps="angular-sanitize.js">
|
@@ -29307,19 +29330,22 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
|
|
29307
29330
|
* @name ngModel.NgModelController#$setValidity
|
29308
29331
|
*
|
29309
29332
|
* @description
|
29310
|
-
* Change the validity state, and
|
29333
|
+
* Change the validity state, and notify the form.
|
29311
29334
|
*
|
29312
|
-
* This method can be called within $parsers/$formatters
|
29313
|
-
*
|
29335
|
+
* This method can be called within $parsers/$formatters or a custom validation implementation.
|
29336
|
+
* However, in most cases it should be sufficient to use the `ngModel.$validators` and
|
29337
|
+
* `ngModel.$asyncValidators` collections which will call `$setValidity` automatically.
|
29314
29338
|
*
|
29315
|
-
* @param {string} validationErrorKey Name of the validator.
|
29316
|
-
* to `$error[validationErrorKey]`
|
29317
|
-
* so that it is available for data-binding.
|
29339
|
+
* @param {string} validationErrorKey Name of the validator. The `validationErrorKey` will be assigned
|
29340
|
+
* to either `$error[validationErrorKey]` or `$pending[validationErrorKey]`
|
29341
|
+
* (for unfulfilled `$asyncValidators`), so that it is available for data-binding.
|
29318
29342
|
* The `validationErrorKey` should be in camelCase and will get converted into dash-case
|
29319
29343
|
* for class name. Example: `myError` will result in `ng-valid-my-error` and `ng-invalid-my-error`
|
29320
29344
|
* class and can be bound to as `{{someForm.someControl.$error.myError}}` .
|
29321
29345
|
* @param {boolean} isValid Whether the current state is valid (true), invalid (false), pending (undefined),
|
29322
|
-
* or skipped (null).
|
29346
|
+
* or skipped (null). Pending is used for unfulfilled `$asyncValidators`.
|
29347
|
+
* Skipped is used by Angular when validators do not run because of parse errors and
|
29348
|
+
* when `$asyncValidators` do not run because any of the `$validators` failed.
|
29323
29349
|
*/
|
29324
29350
|
addSetValidityMethod({
|
29325
29351
|
ctrl: this,
|
@@ -29345,7 +29371,7 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
|
|
29345
29371
|
* state (ng-pristine class). A model is considered to be pristine when the model has not been changed
|
29346
29372
|
* from when first compiled within then form.
|
29347
29373
|
*/
|
29348
|
-
this.$setPristine = function
|
29374
|
+
this.$setPristine = function() {
|
29349
29375
|
ctrl.$dirty = false;
|
29350
29376
|
ctrl.$pristine = true;
|
29351
29377
|
$animate.removeClass($element, DIRTY_CLASS);
|
@@ -29414,13 +29440,13 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
|
|
29414
29440
|
* angular.module('cancel-update-example', [])
|
29415
29441
|
*
|
29416
29442
|
* .controller('CancelUpdateController', ['$scope', function($scope) {
|
29417
|
-
* $scope.resetWithCancel = function
|
29443
|
+
* $scope.resetWithCancel = function(e) {
|
29418
29444
|
* if (e.keyCode == 27) {
|
29419
29445
|
* $scope.myForm.myInput1.$rollbackViewValue();
|
29420
29446
|
* $scope.myValue = '';
|
29421
29447
|
* }
|
29422
29448
|
* };
|
29423
|
-
* $scope.resetWithoutCancel = function
|
29449
|
+
* $scope.resetWithoutCancel = function(e) {
|
29424
29450
|
* if (e.keyCode == 27) {
|
29425
29451
|
* $scope.myValue = '';
|
29426
29452
|
* }
|
@@ -29599,7 +29625,7 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
|
|
29599
29625
|
var parserValid = isUndefined(modelValue) ? undefined : true;
|
29600
29626
|
|
29601
29627
|
if (parserValid) {
|
29602
|
-
for(var i = 0; i < ctrl.$parsers.length; i++) {
|
29628
|
+
for (var i = 0; i < ctrl.$parsers.length; i++) {
|
29603
29629
|
modelValue = ctrl.$parsers[i](modelValue);
|
29604
29630
|
if (isUndefined(modelValue)) {
|
29605
29631
|
parserValid = false;
|
@@ -29640,7 +29666,7 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
|
|
29640
29666
|
forEach(ctrl.$viewChangeListeners, function(listener) {
|
29641
29667
|
try {
|
29642
29668
|
listener();
|
29643
|
-
} catch(e) {
|
29669
|
+
} catch (e) {
|
29644
29670
|
$exceptionHandler(e);
|
29645
29671
|
}
|
29646
29672
|
});
|
@@ -29743,7 +29769,7 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
|
|
29743
29769
|
idx = formatters.length;
|
29744
29770
|
|
29745
29771
|
var viewValue = modelValue;
|
29746
|
-
while(idx--) {
|
29772
|
+
while (idx--) {
|
29747
29773
|
viewValue = formatters[idx](viewValue);
|
29748
29774
|
}
|
29749
29775
|
if (ctrl.$viewValue !== viewValue) {
|
@@ -29764,6 +29790,7 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
|
|
29764
29790
|
* @name ngModel
|
29765
29791
|
*
|
29766
29792
|
* @element input
|
29793
|
+
* @priority 1
|
29767
29794
|
*
|
29768
29795
|
* @description
|
29769
29796
|
* The `ngModel` directive binds an `input`,`select`, `textarea` (or custom form control) to a
|
@@ -29785,7 +29812,7 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
|
|
29785
29812
|
*
|
29786
29813
|
* For best practices on using `ngModel`, see:
|
29787
29814
|
*
|
29788
|
-
* - [https://github.com/angular/angular.js/wiki/Understanding-Scopes
|
29815
|
+
* - [Understanding Scopes](https://github.com/angular/angular.js/wiki/Understanding-Scopes)
|
29789
29816
|
*
|
29790
29817
|
* For basic examples, how to use `ngModel`, see:
|
29791
29818
|
*
|
@@ -29808,10 +29835,15 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
|
|
29808
29835
|
* The following CSS classes are added and removed on the associated input/select/textarea element
|
29809
29836
|
* depending on the validity of the model.
|
29810
29837
|
*
|
29811
|
-
* - `ng-valid
|
29812
|
-
* - `ng-invalid
|
29813
|
-
* - `ng-
|
29814
|
-
* - `ng-
|
29838
|
+
* - `ng-valid`: the model is valid
|
29839
|
+
* - `ng-invalid`: the model is invalid
|
29840
|
+
* - `ng-valid-[key]`: for each valid key added by `$setValidity`
|
29841
|
+
* - `ng-invalid-[key]`: for each invalid key added by `$setValidity`
|
29842
|
+
* - `ng-pristine`: the control hasn't been interacted with yet
|
29843
|
+
* - `ng-dirty`: the control has been interacted with
|
29844
|
+
* - `ng-touched`: the control has been blurred
|
29845
|
+
* - `ng-untouched`: the control hasn't been blurred
|
29846
|
+
* - `ng-pending`: any `$asyncValidators` are unfulfilled
|
29815
29847
|
*
|
29816
29848
|
* Keep in mind that ngAnimate can detect each of these classes when added and removed.
|
29817
29849
|
*
|
@@ -29905,7 +29937,7 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
|
|
29905
29937
|
.controller('ExampleController', ['$scope', function($scope) {
|
29906
29938
|
var _name = 'Brian';
|
29907
29939
|
$scope.user = {
|
29908
|
-
name: function
|
29940
|
+
name: function(newName) {
|
29909
29941
|
if (angular.isDefined(newName)) {
|
29910
29942
|
_name = newName;
|
29911
29943
|
}
|
@@ -30272,9 +30304,9 @@ var CONSTANT_VALUE_REGEXP = /^(true|false|\d+)$/;
|
|
30272
30304
|
* @name ngValue
|
30273
30305
|
*
|
30274
30306
|
* @description
|
30275
|
-
* Binds the given expression to the value of `
|
30276
|
-
* that when the element is selected, the `ngModel` of that element is set to
|
30277
|
-
* bound value.
|
30307
|
+
* Binds the given expression to the value of `option` or `input[radio]`, so
|
30308
|
+
* that when the element is selected, the `ngModel` of that element is set to
|
30309
|
+
* the bound value.
|
30278
30310
|
*
|
30279
30311
|
* `ngValue` is useful when dynamically generating lists of radio buttons using `ng-repeat`, as
|
30280
30312
|
* shown below.
|
@@ -30407,7 +30439,7 @@ var ngValueDirective = function() {
|
|
30407
30439
|
.controller('ExampleController', ['$scope', function($scope) {
|
30408
30440
|
$scope.user = { name: 'say', data: '' };
|
30409
30441
|
|
30410
|
-
$scope.cancel = function
|
30442
|
+
$scope.cancel = function(e) {
|
30411
30443
|
if (e.keyCode == 27) {
|
30412
30444
|
$scope.userForm.userName.$rollbackViewValue();
|
30413
30445
|
}
|
@@ -30481,7 +30513,7 @@ var ngValueDirective = function() {
|
|
30481
30513
|
.controller('ExampleController', ['$scope', function($scope) {
|
30482
30514
|
var _name = 'Brian';
|
30483
30515
|
$scope.user = {
|
30484
|
-
name: function
|
30516
|
+
name: function(newName) {
|
30485
30517
|
return angular.isDefined(newName) ? (_name = newName) : _name;
|
30486
30518
|
}
|
30487
30519
|
};
|
@@ -30704,7 +30736,7 @@ var ngBindDirective = ['$compile', function($compile) {
|
|
30704
30736
|
<file name="index.html">
|
30705
30737
|
<script>
|
30706
30738
|
angular.module('bindExample', [])
|
30707
|
-
.controller('ExampleController', ['$scope', function
|
30739
|
+
.controller('ExampleController', ['$scope', function($scope) {
|
30708
30740
|
$scope.salutation = 'Hello';
|
30709
30741
|
$scope.name = 'World';
|
30710
30742
|
}]);
|
@@ -30859,10 +30891,10 @@ function classDirective(name, selector) {
|
|
30859
30891
|
attr.$removeClass(newClasses);
|
30860
30892
|
}
|
30861
30893
|
|
30862
|
-
function digestClassCounts
|
30894
|
+
function digestClassCounts(classes, count) {
|
30863
30895
|
var classCounts = element.data('$classCounts') || {};
|
30864
30896
|
var classesToUpdate = [];
|
30865
|
-
forEach(classes, function
|
30897
|
+
forEach(classes, function(className) {
|
30866
30898
|
if (count > 0 || classCounts[className]) {
|
30867
30899
|
classCounts[className] = (classCounts[className] || 0) + count;
|
30868
30900
|
if (classCounts[className] === +(count > 0)) {
|
@@ -30874,7 +30906,7 @@ function classDirective(name, selector) {
|
|
30874
30906
|
return classesToUpdate.join(' ');
|
30875
30907
|
}
|
30876
30908
|
|
30877
|
-
function updateClasses
|
30909
|
+
function updateClasses(oldClasses, newClasses) {
|
30878
30910
|
var toAdd = arrayDifference(newClasses, oldClasses);
|
30879
30911
|
var toRemove = arrayDifference(oldClasses, newClasses);
|
30880
30912
|
toAdd = digestClassCounts(toAdd, 1);
|
@@ -30906,23 +30938,23 @@ function classDirective(name, selector) {
|
|
30906
30938
|
var values = [];
|
30907
30939
|
|
30908
30940
|
outer:
|
30909
|
-
for(var i = 0; i < tokens1.length; i++) {
|
30941
|
+
for (var i = 0; i < tokens1.length; i++) {
|
30910
30942
|
var token = tokens1[i];
|
30911
|
-
for(var j = 0; j < tokens2.length; j++) {
|
30912
|
-
if(token == tokens2[j]) continue outer;
|
30943
|
+
for (var j = 0; j < tokens2.length; j++) {
|
30944
|
+
if (token == tokens2[j]) continue outer;
|
30913
30945
|
}
|
30914
30946
|
values.push(token);
|
30915
30947
|
}
|
30916
30948
|
return values;
|
30917
30949
|
}
|
30918
30950
|
|
30919
|
-
function arrayClasses
|
30951
|
+
function arrayClasses(classVal) {
|
30920
30952
|
if (isArray(classVal)) {
|
30921
30953
|
return classVal;
|
30922
30954
|
} else if (isString(classVal)) {
|
30923
30955
|
return classVal.split(' ');
|
30924
30956
|
} else if (isObject(classVal)) {
|
30925
|
-
var classes = []
|
30957
|
+
var classes = [];
|
30926
30958
|
forEach(classVal, function(v, k) {
|
30927
30959
|
if (v) {
|
30928
30960
|
classes = classes.concat(k.split(' '));
|
@@ -31681,10 +31713,8 @@ var ngControllerDirective = [function() {
|
|
31681
31713
|
</example>
|
31682
31714
|
*/
|
31683
31715
|
/*
|
31684
|
-
* A
|
31685
|
-
* expressions and are compiled and executed within the current scope.
|
31686
|
-
*
|
31687
|
-
* Events that are handled via these handler are always configured not to propagate further.
|
31716
|
+
* A collection of directives that allows creation of custom event handlers that are defined as
|
31717
|
+
* angular expressions and are compiled and executed within the current scope.
|
31688
31718
|
*/
|
31689
31719
|
var ngEventDirectives = {};
|
31690
31720
|
|
@@ -32214,13 +32244,13 @@ var ngIfDirective = ['$animate', function($animate) {
|
|
32214
32244
|
terminal: true,
|
32215
32245
|
restrict: 'A',
|
32216
32246
|
$$tlb: true,
|
32217
|
-
link: function
|
32247
|
+
link: function($scope, $element, $attr, ctrl, $transclude) {
|
32218
32248
|
var block, childScope, previousElements;
|
32219
32249
|
$scope.$watch($attr.ngIf, function ngIfWatchAction(value) {
|
32220
32250
|
|
32221
32251
|
if (value) {
|
32222
32252
|
if (!childScope) {
|
32223
|
-
$transclude(function
|
32253
|
+
$transclude(function(clone, newScope) {
|
32224
32254
|
childScope = newScope;
|
32225
32255
|
clone[clone.length++] = document.createComment(' end ngIf: ' + $attr.ngIf + ' ');
|
32226
32256
|
// Note: We only need the first/last node of the cloned nodes.
|
@@ -32452,15 +32482,15 @@ var ngIncludeDirective = ['$templateRequest', '$anchorScroll', '$animate', '$sce
|
|
32452
32482
|
currentElement;
|
32453
32483
|
|
32454
32484
|
var cleanupLastIncludeContent = function() {
|
32455
|
-
if(previousElement) {
|
32485
|
+
if (previousElement) {
|
32456
32486
|
previousElement.remove();
|
32457
32487
|
previousElement = null;
|
32458
32488
|
}
|
32459
|
-
if(currentScope) {
|
32489
|
+
if (currentScope) {
|
32460
32490
|
currentScope.$destroy();
|
32461
32491
|
currentScope = null;
|
32462
32492
|
}
|
32463
|
-
if(currentElement) {
|
32493
|
+
if (currentElement) {
|
32464
32494
|
$animate.leave(currentElement).then(function() {
|
32465
32495
|
previousElement = null;
|
32466
32496
|
});
|
@@ -33143,10 +33173,10 @@ var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) {
|
|
33143
33173
|
if (trackByExp) {
|
33144
33174
|
trackByExpGetter = $parse(trackByExp);
|
33145
33175
|
} else {
|
33146
|
-
trackByIdArrayFn = function
|
33176
|
+
trackByIdArrayFn = function(key, value) {
|
33147
33177
|
return hashKey(value);
|
33148
33178
|
};
|
33149
|
-
trackByIdObjFn = function
|
33179
|
+
trackByIdObjFn = function(key) {
|
33150
33180
|
return key;
|
33151
33181
|
};
|
33152
33182
|
}
|
@@ -33226,7 +33256,7 @@ var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) {
|
|
33226
33256
|
nextBlockOrder[index] = block;
|
33227
33257
|
} else if (nextBlockMap[trackById]) {
|
33228
33258
|
// if collision detected. restore lastBlockMap and throw an error
|
33229
|
-
forEach(nextBlockOrder, function
|
33259
|
+
forEach(nextBlockOrder, function(block) {
|
33230
33260
|
if (block && block.scope) lastBlockMap[block.id] = block;
|
33231
33261
|
});
|
33232
33262
|
throw ngRepeatMinErr('dupes',
|
@@ -33416,7 +33446,7 @@ var NG_HIDE_IN_PROGRESS_CLASS = 'ng-hide-animate';
|
|
33416
33446
|
</div>
|
33417
33447
|
</file>
|
33418
33448
|
<file name="glyphicons.css">
|
33419
|
-
@import url(
|
33449
|
+
@import url(../../components/bootstrap-3.1.1/css/bootstrap.css);
|
33420
33450
|
</file>
|
33421
33451
|
<file name="animations.css">
|
33422
33452
|
.animate-show {
|
@@ -33466,13 +33496,13 @@ var ngShowDirective = ['$animate', function($animate) {
|
|
33466
33496
|
restrict: 'A',
|
33467
33497
|
multiElement: true,
|
33468
33498
|
link: function(scope, element, attr) {
|
33469
|
-
scope.$watch(attr.ngShow, function ngShowWatchAction(value){
|
33499
|
+
scope.$watch(attr.ngShow, function ngShowWatchAction(value) {
|
33470
33500
|
// we're adding a temporary, animation-specific class for ng-hide since this way
|
33471
33501
|
// we can control when the element is actually displayed on screen without having
|
33472
33502
|
// to have a global/greedy CSS selector that breaks when other animations are run.
|
33473
33503
|
// Read: https://github.com/angular/angular.js/issues/9103#issuecomment-58335845
|
33474
33504
|
$animate[value ? 'removeClass' : 'addClass'](element, NG_HIDE_CLASS, {
|
33475
|
-
tempClasses
|
33505
|
+
tempClasses: NG_HIDE_IN_PROGRESS_CLASS
|
33476
33506
|
});
|
33477
33507
|
});
|
33478
33508
|
}
|
@@ -33581,7 +33611,7 @@ var ngShowDirective = ['$animate', function($animate) {
|
|
33581
33611
|
</div>
|
33582
33612
|
</file>
|
33583
33613
|
<file name="glyphicons.css">
|
33584
|
-
@import url(
|
33614
|
+
@import url(../../components/bootstrap-3.1.1/css/bootstrap.css);
|
33585
33615
|
</file>
|
33586
33616
|
<file name="animations.css">
|
33587
33617
|
.animate-hide {
|
@@ -33627,11 +33657,11 @@ var ngHideDirective = ['$animate', function($animate) {
|
|
33627
33657
|
restrict: 'A',
|
33628
33658
|
multiElement: true,
|
33629
33659
|
link: function(scope, element, attr) {
|
33630
|
-
scope.$watch(attr.ngHide, function ngHideWatchAction(value){
|
33660
|
+
scope.$watch(attr.ngHide, function ngHideWatchAction(value) {
|
33631
33661
|
// The comment inside of the ngShowDirective explains why we add and
|
33632
33662
|
// remove a temporary class for the show/hide animation
|
33633
33663
|
$animate[value ? 'addClass' : 'removeClass'](element,NG_HIDE_CLASS, {
|
33634
|
-
tempClasses
|
33664
|
+
tempClasses: NG_HIDE_IN_PROGRESS_CLASS
|
33635
33665
|
});
|
33636
33666
|
});
|
33637
33667
|
}
|
@@ -34034,34 +34064,37 @@ var ngOptionsMinErr = minErr('ngOptions');
|
|
34034
34064
|
* elements for the `<select>` element using the array or object obtained by evaluating the
|
34035
34065
|
* `ngOptions` comprehension_expression.
|
34036
34066
|
*
|
34067
|
+
* In many cases, `ngRepeat` can be used on `<option>` elements instead of `ngOptions` to achieve a
|
34068
|
+
* similar result. However, the `ngOptions` provides some benefits such as reducing memory and
|
34069
|
+
* increasing speed by not creating a new scope for each repeated instance, as well as providing
|
34070
|
+
* more flexibility in how the `select`'s model is assigned via `select as`. `ngOptions should be
|
34071
|
+
* used when the `select` model needs to be bound to a non-string value. This is because an option
|
34072
|
+
* element can only be bound to string values at present.
|
34073
|
+
*
|
34037
34074
|
* When an item in the `<select>` menu is selected, the array element or object property
|
34038
34075
|
* represented by the selected option will be bound to the model identified by the `ngModel`
|
34039
34076
|
* directive.
|
34040
34077
|
*
|
34041
|
-
* <div class="alert alert-warning">
|
34042
|
-
* **Note:** `ngModel` compares by reference, not value. This is important when binding to an
|
34043
|
-
* array of objects. See an example [in this jsfiddle](http://jsfiddle.net/qWzTb/).
|
34044
|
-
* </div>
|
34045
|
-
*
|
34046
34078
|
* Optionally, a single hard-coded `<option>` element, with the value set to an empty string, can
|
34047
34079
|
* be nested into the `<select>` element. This element will then represent the `null` or "not selected"
|
34048
34080
|
* option. See example below for demonstration.
|
34049
34081
|
*
|
34050
34082
|
* <div class="alert alert-warning">
|
34051
|
-
* **Note:** `
|
34052
|
-
* of
|
34053
|
-
* `select` model to be bound to a non-string value. This is because an option element can only
|
34054
|
-
* be bound to string values at present.
|
34083
|
+
* **Note:** `ngModel` compares by reference, not value. This is important when binding to an
|
34084
|
+
* array of objects. See an example [in this jsfiddle](http://jsfiddle.net/qWzTb/).
|
34055
34085
|
* </div>
|
34056
34086
|
*
|
34057
|
-
*
|
34058
|
-
*
|
34087
|
+
* ## `select as`
|
34088
|
+
*
|
34089
|
+
* Using `select as` will bind the result of the `select as` expression to the model, but
|
34059
34090
|
* the value of the `<select>` and `<option>` html elements will be either the index (for array data sources)
|
34060
|
-
* or property name (for object data sources) of the value within the collection.
|
34061
|
-
*
|
34091
|
+
* or property name (for object data sources) of the value within the collection. If a `track by` expression
|
34092
|
+
* is used, the result of that expression will be set as the value of the `option` and `select` elements.
|
34093
|
+
*
|
34094
|
+
* ### `select as` with `trackexpr`
|
34095
|
+
*
|
34096
|
+
* Using `select as` together with `trackexpr` is not recommended. Reasoning:
|
34062
34097
|
*
|
34063
|
-
* **Note:** Using `select as` together with `trackexpr` is not recommended.
|
34064
|
-
* Reasoning:
|
34065
34098
|
* - Example: <select ng-options="item.subItem as item.label for item in values track by item.id" ng-model="selected">
|
34066
34099
|
* values: [{id: 1, label: 'aLabel', subItem: {name: 'aSubItem'}}, {id: 2, label: 'bLabel', subItem: {name: 'bSubItem'}}],
|
34067
34100
|
* $scope.selected = {name: 'aSubItem'};
|
@@ -34272,7 +34305,7 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) {
|
|
34272
34305
|
unknownOption = optionTemplate.clone();
|
34273
34306
|
|
34274
34307
|
// find "null" option
|
34275
|
-
for(var i = 0, children = element.children(), ii = children.length; i < ii; i++) {
|
34308
|
+
for (var i = 0, children = element.children(), ii = children.length; i < ii; i++) {
|
34276
34309
|
if (children[i].value === '') {
|
34277
34310
|
emptyOption = nullOption = children.eq(i);
|
34278
34311
|
break;
|
@@ -34374,6 +34407,7 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) {
|
|
34374
34407
|
valuesFn = $parse(match[7]),
|
34375
34408
|
track = match[8],
|
34376
34409
|
trackFn = track ? $parse(match[8]) : null,
|
34410
|
+
trackKeysCache = {},
|
34377
34411
|
// This is an array of array of existing option groups in DOM.
|
34378
34412
|
// We try to reuse these if possible
|
34379
34413
|
// - optionGroupsCache[0] is the options with no option group
|
@@ -34419,17 +34453,16 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) {
|
|
34419
34453
|
|
34420
34454
|
function selectionChanged() {
|
34421
34455
|
scope.$apply(function() {
|
34422
|
-
var
|
34423
|
-
collection = valuesFn(scope) || [],
|
34424
|
-
key, value, optionElement, index, groupIndex, length, groupLength, trackIndex;
|
34456
|
+
var collection = valuesFn(scope) || [];
|
34425
34457
|
var viewValue;
|
34426
34458
|
if (multiple) {
|
34427
34459
|
viewValue = [];
|
34428
34460
|
forEach(selectElement.val(), function(selectedKey) {
|
34461
|
+
selectedKey = trackFn ? trackKeysCache[selectedKey] : selectedKey;
|
34429
34462
|
viewValue.push(getViewValue(selectedKey, collection[selectedKey]));
|
34430
34463
|
});
|
34431
34464
|
} else {
|
34432
|
-
var selectedKey = selectElement.val();
|
34465
|
+
var selectedKey = trackFn ? trackKeysCache[selectElement.val()] : selectElement.val();
|
34433
34466
|
viewValue = getViewValue(selectedKey, collection[selectedKey]);
|
34434
34467
|
}
|
34435
34468
|
ctrl.$setViewValue(viewValue);
|
@@ -34551,14 +34584,17 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) {
|
|
34551
34584
|
anySelected = false,
|
34552
34585
|
lastElement,
|
34553
34586
|
element,
|
34554
|
-
label
|
34587
|
+
label,
|
34588
|
+
optionId;
|
34589
|
+
|
34590
|
+
trackKeysCache = {};
|
34555
34591
|
|
34556
34592
|
// We now build up the list of options we need (we merge later)
|
34557
34593
|
for (index = 0; length = keys.length, index < length; index++) {
|
34558
34594
|
key = index;
|
34559
34595
|
if (keyName) {
|
34560
34596
|
key = keys[index];
|
34561
|
-
if (
|
34597
|
+
if (key.charAt(0) === '$') continue;
|
34562
34598
|
}
|
34563
34599
|
value = values[key];
|
34564
34600
|
|
@@ -34575,9 +34611,14 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) {
|
|
34575
34611
|
|
34576
34612
|
// doing displayFn(scope, locals) || '' overwrites zero values
|
34577
34613
|
label = isDefined(label) ? label : '';
|
34614
|
+
optionId = trackFn ? trackFn(scope, locals) : (keyName ? keys[index] : index);
|
34615
|
+
if (trackFn) {
|
34616
|
+
trackKeysCache[optionId] = key;
|
34617
|
+
}
|
34618
|
+
|
34578
34619
|
optionGroup.push({
|
34579
34620
|
// either the index into array or key from object
|
34580
|
-
id:
|
34621
|
+
id: optionId,
|
34581
34622
|
label: label,
|
34582
34623
|
selected: selected // determine if we should be selected
|
34583
34624
|
});
|
@@ -34622,7 +34663,7 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) {
|
|
34622
34663
|
}
|
34623
34664
|
|
34624
34665
|
lastElement = null; // start at the beginning
|
34625
|
-
for(index = 0, length = optionGroup.length; index < length; index++) {
|
34666
|
+
for (index = 0, length = optionGroup.length; index < length; index++) {
|
34626
34667
|
option = optionGroup[index];
|
34627
34668
|
if ((existingOption = existingOptions[index+1])) {
|
34628
34669
|
// reuse elements
|
@@ -34680,12 +34721,12 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) {
|
|
34680
34721
|
}
|
34681
34722
|
// remove any excessive OPTIONs in a group
|
34682
34723
|
index++; // increment since the existingOptions[0] is parent element not OPTION
|
34683
|
-
while(existingOptions.length > index) {
|
34724
|
+
while (existingOptions.length > index) {
|
34684
34725
|
option = existingOptions.pop();
|
34685
34726
|
updateLabelMap(labelMap, option.label, false);
|
34686
34727
|
option.element.remove();
|
34687
34728
|
}
|
34688
|
-
forEach(labelMap, function
|
34729
|
+
forEach(labelMap, function(count, label) {
|
34689
34730
|
if (count > 0) {
|
34690
34731
|
selectCtrl.addOption(label);
|
34691
34732
|
} else if (count < 0) {
|
@@ -34694,7 +34735,7 @@ var selectDirective = ['$compile', '$parse', function($compile, $parse) {
|
|
34694
34735
|
});
|
34695
34736
|
}
|
34696
34737
|
// remove any excessive OPTGROUPs from select
|
34697
|
-
while(optionGroupsCache.length > groupIndex) {
|
34738
|
+
while (optionGroupsCache.length > groupIndex) {
|
34698
34739
|
optionGroupsCache.pop()[0].element.remove();
|
34699
34740
|
}
|
34700
34741
|
}
|
@@ -34720,7 +34761,7 @@ var optionDirective = ['$interpolate', function($interpolate) {
|
|
34720
34761
|
}
|
34721
34762
|
}
|
34722
34763
|
|
34723
|
-
return function
|
34764
|
+
return function(scope, element, attr) {
|
34724
34765
|
var selectCtrlName = '$selectController',
|
34725
34766
|
parent = element.parent(),
|
34726
34767
|
selectCtrl = parent.data(selectCtrlName) ||
|
@@ -34992,7 +35033,7 @@ function callerFile(offset) {
|
|
34992
35033
|
*
|
34993
35034
|
* To work around this we instead use our own handler that fires a real event.
|
34994
35035
|
*/
|
34995
|
-
(function(fn){
|
35036
|
+
(function(fn) {
|
34996
35037
|
// We need a handle to the original trigger function for input tests.
|
34997
35038
|
var parentTrigger = fn._originalTrigger = fn.trigger;
|
34998
35039
|
fn.trigger = function(type) {
|
@@ -35022,7 +35063,7 @@ _jQuery.fn.bindings = function(windowJquery, bindExp) {
|
|
35022
35063
|
bindSelector = '.ng-binding:visible';
|
35023
35064
|
if (angular.isString(bindExp)) {
|
35024
35065
|
bindExp = bindExp.replace(/\s/g, '');
|
35025
|
-
match = function
|
35066
|
+
match = function(actualExp) {
|
35026
35067
|
if (actualExp) {
|
35027
35068
|
actualExp = actualExp.replace(/\s/g, '');
|
35028
35069
|
if (actualExp == bindExp) return true;
|
@@ -35058,7 +35099,7 @@ _jQuery.fn.bindings = function(windowJquery, bindExp) {
|
|
35058
35099
|
var element = windowJquery(this),
|
35059
35100
|
bindings;
|
35060
35101
|
if (bindings = element.data('$binding')) {
|
35061
|
-
for(var expressions = [], binding, j=0, jj=bindings.length; j<jj; j++) {
|
35102
|
+
for (var expressions = [], binding, j=0, jj=bindings.length; j<jj; j++) {
|
35062
35103
|
binding = bindings[j];
|
35063
35104
|
|
35064
35105
|
if (binding.expressions) {
|
@@ -35068,7 +35109,7 @@ _jQuery.fn.bindings = function(windowJquery, bindExp) {
|
|
35068
35109
|
}
|
35069
35110
|
for (var scope, expression, i = 0, ii = expressions.length; i < ii; i++) {
|
35070
35111
|
expression = expressions[i];
|
35071
|
-
if(match(expression)) {
|
35112
|
+
if (match(expression)) {
|
35072
35113
|
scope = scope || element.scope();
|
35073
35114
|
push(scope.$eval(expression));
|
35074
35115
|
}
|
@@ -35080,12 +35121,6 @@ _jQuery.fn.bindings = function(windowJquery, bindExp) {
|
|
35080
35121
|
};
|
35081
35122
|
|
35082
35123
|
(function() {
|
35083
|
-
/**
|
35084
|
-
* documentMode is an IE-only property
|
35085
|
-
* http://msdn.microsoft.com/en-us/library/ie/cc196988(v=vs.85).aspx
|
35086
|
-
*/
|
35087
|
-
var msie = document.documentMode;
|
35088
|
-
|
35089
35124
|
/**
|
35090
35125
|
* Triggers a browser event. Attempts to choose the right event if one is
|
35091
35126
|
* not specified.
|
@@ -35136,8 +35171,8 @@ _jQuery.fn.bindings = function(windowJquery, bindExp) {
|
|
35136
35171
|
}
|
35137
35172
|
|
35138
35173
|
var evnt;
|
35139
|
-
if(/transitionend/.test(eventType)) {
|
35140
|
-
if(window.WebKitTransitionEvent) {
|
35174
|
+
if (/transitionend/.test(eventType)) {
|
35175
|
+
if (window.WebKitTransitionEvent) {
|
35141
35176
|
evnt = new WebKitTransitionEvent(eventType, eventData);
|
35142
35177
|
evnt.initEvent(eventType, false, true);
|
35143
35178
|
}
|
@@ -35145,14 +35180,14 @@ _jQuery.fn.bindings = function(windowJquery, bindExp) {
|
|
35145
35180
|
try {
|
35146
35181
|
evnt = new TransitionEvent(eventType, eventData);
|
35147
35182
|
}
|
35148
|
-
catch(e) {
|
35183
|
+
catch (e) {
|
35149
35184
|
evnt = document.createEvent('TransitionEvent');
|
35150
35185
|
evnt.initTransitionEvent(eventType, null, null, null, eventData.elapsedTime || 0);
|
35151
35186
|
}
|
35152
35187
|
}
|
35153
35188
|
}
|
35154
|
-
else if(/animationend/.test(eventType)) {
|
35155
|
-
if(window.WebKitAnimationEvent) {
|
35189
|
+
else if (/animationend/.test(eventType)) {
|
35190
|
+
if (window.WebKitAnimationEvent) {
|
35156
35191
|
evnt = new WebKitAnimationEvent(eventType, eventData);
|
35157
35192
|
evnt.initEvent(eventType, false, true);
|
35158
35193
|
}
|
@@ -35160,7 +35195,7 @@ _jQuery.fn.bindings = function(windowJquery, bindExp) {
|
|
35160
35195
|
try {
|
35161
35196
|
evnt = new AnimationEvent(eventType, eventData);
|
35162
35197
|
}
|
35163
|
-
catch(e) {
|
35198
|
+
catch (e) {
|
35164
35199
|
evnt = document.createEvent('AnimationEvent');
|
35165
35200
|
evnt.initAnimationEvent(eventType, null, null, null, eventData.elapsedTime || 0);
|
35166
35201
|
}
|
@@ -35179,7 +35214,7 @@ _jQuery.fn.bindings = function(windowJquery, bindExp) {
|
|
35179
35214
|
* read */
|
35180
35215
|
evnt.$manualTimeStamp = eventData.timeStamp;
|
35181
35216
|
|
35182
|
-
if(!evnt) return;
|
35217
|
+
if (!evnt) return;
|
35183
35218
|
|
35184
35219
|
var originalPreventDefault = evnt.preventDefault,
|
35185
35220
|
appWindow = element.ownerDocument.defaultView,
|
@@ -35316,7 +35351,7 @@ angular.scenario.Application.prototype.executeAction = function(action) {
|
|
35316
35351
|
return $injector;
|
35317
35352
|
};
|
35318
35353
|
|
35319
|
-
$injector.invoke(function($browser){
|
35354
|
+
$injector.invoke(function($browser) {
|
35320
35355
|
$browser.notifyWhenNoOutstandingRequests(function() {
|
35321
35356
|
action.call(self, $window, $element);
|
35322
35357
|
});
|
@@ -35506,7 +35541,7 @@ angular.scenario.Future.prototype.execute = function(doneFn) {
|
|
35506
35541
|
if (result) {
|
35507
35542
|
try {
|
35508
35543
|
result = self.parser(result);
|
35509
|
-
} catch(e) {
|
35544
|
+
} catch (e) {
|
35510
35545
|
error = e;
|
35511
35546
|
}
|
35512
35547
|
}
|
@@ -36137,7 +36172,7 @@ angular.scenario.SpecRunner.prototype.addFutureAction = function(name, behavior,
|
|
36137
36172
|
});
|
36138
36173
|
var result = $document.find(selector);
|
36139
36174
|
if (selector.match(NG)) {
|
36140
|
-
angular.forEach(['[ng-','[data-ng-','[x-ng-'], function(value, index){
|
36175
|
+
angular.forEach(['[ng-','[data-ng-','[x-ng-'], function(value, index) {
|
36141
36176
|
result = result.add(selector.replace(NG, value), $document);
|
36142
36177
|
});
|
36143
36178
|
}
|
@@ -36153,7 +36188,7 @@ angular.scenario.SpecRunner.prototype.addFutureAction = function(name, behavior,
|
|
36153
36188
|
|
36154
36189
|
try {
|
36155
36190
|
behavior.call(self, $window, $document, done);
|
36156
|
-
} catch(e) {
|
36191
|
+
} catch (e) {
|
36157
36192
|
if (e.type && e.type === 'selector') {
|
36158
36193
|
done(e.message);
|
36159
36194
|
} else {
|
@@ -36468,7 +36503,7 @@ angular.scenario.dsl('select', function() {
|
|
36468
36503
|
if (option.length) {
|
36469
36504
|
select.val(value);
|
36470
36505
|
} else {
|
36471
|
-
option = select.find('option').filter(function(){
|
36506
|
+
option = select.find('option').filter(function() {
|
36472
36507
|
return _jQuery(this).text() === value;
|
36473
36508
|
});
|
36474
36509
|
if (!option.length) {
|