angularjs-rails 1.2.1 → 1.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/angularjs-rails/version.rb +1 -1
- data/vendor/assets/javascripts/angular-animate.js +91 -34
- data/vendor/assets/javascripts/angular-cookies.js +1 -1
- data/vendor/assets/javascripts/angular-loader.js +8 -3
- data/vendor/assets/javascripts/angular-mocks.js +2 -2
- data/vendor/assets/javascripts/angular-resource.js +3 -3
- data/vendor/assets/javascripts/angular-route.js +40 -27
- data/vendor/assets/javascripts/angular-sanitize.js +1 -1
- data/vendor/assets/javascripts/angular-scenario.js +242 -158
- data/vendor/assets/javascripts/angular-touch.js +1 -1
- data/vendor/assets/javascripts/angular.js +246 -162
- metadata +3 -3
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license AngularJS v1.2.
|
2
|
+
* @license AngularJS v1.2.2
|
3
3
|
* (c) 2010-2012 Google, Inc. http://angularjs.org
|
4
4
|
* License: MIT
|
5
5
|
*/
|
@@ -68,7 +68,7 @@ function minErr(module) {
|
|
68
68
|
return match;
|
69
69
|
});
|
70
70
|
|
71
|
-
message = message + '\nhttp://errors.angularjs.org/1.2.
|
71
|
+
message = message + '\nhttp://errors.angularjs.org/1.2.2/' +
|
72
72
|
(module ? module + '/' : '') + code;
|
73
73
|
for (i = 2; i < arguments.length; i++) {
|
74
74
|
message = message + (i == 2 ? '?' : '&') + 'p' + (i-2) + '=' +
|
@@ -159,7 +159,7 @@ function minErr(module) {
|
|
159
159
|
-assertArgFn,
|
160
160
|
-assertNotHasOwnProperty,
|
161
161
|
-getter,
|
162
|
-
-getBlockElements
|
162
|
+
-getBlockElements,
|
163
163
|
|
164
164
|
*/
|
165
165
|
|
@@ -1181,26 +1181,38 @@ function encodeUriQuery(val, pctEncodeSpaces) {
|
|
1181
1181
|
*
|
1182
1182
|
* @description
|
1183
1183
|
*
|
1184
|
-
* Use this directive to auto-bootstrap an application.
|
1185
|
-
*
|
1186
|
-
*
|
1187
|
-
*
|
1188
|
-
*
|
1189
|
-
*
|
1190
|
-
* an HTML document you must manually bootstrap them using
|
1191
|
-
*
|
1192
|
-
*
|
1193
|
-
*
|
1194
|
-
*
|
1195
|
-
*
|
1196
|
-
*
|
1197
|
-
*
|
1198
|
-
*
|
1199
|
-
|
1200
|
-
|
1201
|
-
|
1202
|
-
|
1203
|
-
|
1184
|
+
* Use this directive to **auto-bootstrap** an AngularJS application. The `ngApp` directive
|
1185
|
+
* designates the **root element** of the application and is typically placed near the root element
|
1186
|
+
* of the page - e.g. on the `<body>` or `<html>` tags.
|
1187
|
+
*
|
1188
|
+
* Only one AngularJS application can be auto-bootstrapped per HTML document. The first `ngApp`
|
1189
|
+
* found in the document will be used to define the root element to auto-bootstrap as an
|
1190
|
+
* application. To run multiple applications in an HTML document you must manually bootstrap them using
|
1191
|
+
* {@link angular.bootstrap} instead. AngularJS applications cannot be nested within each other.
|
1192
|
+
*
|
1193
|
+
* You can specify an **AngularJS module** to be used as the root module for the application. This
|
1194
|
+
* module will be loaded into the {@link AUTO.$injector} when the application is bootstrapped and
|
1195
|
+
* should contain the application code needed or have dependencies on other modules that will
|
1196
|
+
* contain the code. See {@link angular.module} for more information.
|
1197
|
+
*
|
1198
|
+
* In the example below if the `ngApp` directive were not placed on the `html` element then the
|
1199
|
+
* document would not be compiled, the `AppController` would not be instantiated and the `{{ a+b }}`
|
1200
|
+
* would not be resolved to `3`.
|
1201
|
+
*
|
1202
|
+
* `ngApp` is the easiest, and most common, way to bootstrap an application.
|
1203
|
+
*
|
1204
|
+
<example module="ngAppDemo">
|
1205
|
+
<file name="index.html">
|
1206
|
+
<div ng-controller="ngAppDemoController">
|
1207
|
+
I can add: {{a}} + {{b}} = {{ a+b }}
|
1208
|
+
</file>
|
1209
|
+
<file name="script.js">
|
1210
|
+
angular.module('ngAppDemo', []).controller('ngAppDemoController', function($scope) {
|
1211
|
+
$scope.a = 1;
|
1212
|
+
$scope.b = 2;
|
1213
|
+
});
|
1214
|
+
</file>
|
1215
|
+
</example>
|
1204
1216
|
*
|
1205
1217
|
*/
|
1206
1218
|
function angularInit(element, bootstrap) {
|
@@ -1435,7 +1447,12 @@ function setupModuleLoader(window) {
|
|
1435
1447
|
return obj[name] || (obj[name] = factory());
|
1436
1448
|
}
|
1437
1449
|
|
1438
|
-
|
1450
|
+
var angular = ensure(window, 'angular', Object);
|
1451
|
+
|
1452
|
+
// We need to expose `angular.$$minErr` to modules such as `ngResource` that reference it during bootstrap
|
1453
|
+
angular.$$minErr = angular.$$minErr || minErr;
|
1454
|
+
|
1455
|
+
return ensure(angular, 'module', function() {
|
1439
1456
|
/** @type {Object.<string, angular.Module>} */
|
1440
1457
|
var modules = {};
|
1441
1458
|
|
@@ -1808,11 +1825,11 @@ function setupModuleLoader(window) {
|
|
1808
1825
|
* - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat".
|
1809
1826
|
*/
|
1810
1827
|
var version = {
|
1811
|
-
full: '1.2.
|
1828
|
+
full: '1.2.2', // all of these placeholder strings will be replaced by grunt's
|
1812
1829
|
major: 1, // package task
|
1813
1830
|
minor: 2,
|
1814
|
-
dot:
|
1815
|
-
codeName: '
|
1831
|
+
dot: 2,
|
1832
|
+
codeName: 'consciousness-inertia'
|
1816
1833
|
};
|
1817
1834
|
|
1818
1835
|
|
@@ -3359,11 +3376,11 @@ function annotate(fn) {
|
|
3359
3376
|
* @example
|
3360
3377
|
* Here are some examples of creating value services.
|
3361
3378
|
* <pre>
|
3362
|
-
* $provide.
|
3379
|
+
* $provide.value('ADMIN_USER', 'admin');
|
3363
3380
|
*
|
3364
|
-
* $provide.
|
3381
|
+
* $provide.value('RoleLookup', { admin: 0, writer: 1, reader: 2 });
|
3365
3382
|
*
|
3366
|
-
* $provide.
|
3383
|
+
* $provide.value('halfOf', function(value) {
|
3367
3384
|
* return value / 2;
|
3368
3385
|
* });
|
3369
3386
|
* </pre>
|
@@ -3849,13 +3866,14 @@ var $AnimateProvider = ['$provide', function($provide) {
|
|
3849
3866
|
* inserted into the DOM
|
3850
3867
|
*/
|
3851
3868
|
enter : function(element, parent, after, done) {
|
3852
|
-
|
3853
|
-
|
3854
|
-
|
3855
|
-
|
3856
|
-
|
3857
|
-
|
3858
|
-
|
3869
|
+
if (after) {
|
3870
|
+
after.after(element);
|
3871
|
+
} else {
|
3872
|
+
if (!parent || !parent[0]) {
|
3873
|
+
parent = after.parent();
|
3874
|
+
}
|
3875
|
+
parent.append(element);
|
3876
|
+
}
|
3859
3877
|
done && $timeout(done, 0, false);
|
3860
3878
|
},
|
3861
3879
|
|
@@ -5260,6 +5278,24 @@ function $CompileProvider($provide) {
|
|
5260
5278
|
}
|
5261
5279
|
},
|
5262
5280
|
|
5281
|
+
/**
|
5282
|
+
* @ngdoc function
|
5283
|
+
* @name ng.$compile.directive.Attributes#$updateClass
|
5284
|
+
* @methodOf ng.$compile.directive.Attributes
|
5285
|
+
* @function
|
5286
|
+
*
|
5287
|
+
* @description
|
5288
|
+
* Adds and removes the appropriate CSS class values to the element based on the difference
|
5289
|
+
* between the new and old CSS class values (specified as newClasses and oldClasses).
|
5290
|
+
*
|
5291
|
+
* @param {string} newClasses The current CSS className value
|
5292
|
+
* @param {string} oldClasses The former CSS className value
|
5293
|
+
*/
|
5294
|
+
$updateClass : function(newClasses, oldClasses) {
|
5295
|
+
this.$removeClass(tokenDifference(oldClasses, newClasses));
|
5296
|
+
this.$addClass(tokenDifference(newClasses, oldClasses));
|
5297
|
+
},
|
5298
|
+
|
5263
5299
|
/**
|
5264
5300
|
* Set a normalized attribute on the element in a way such that all directives
|
5265
5301
|
* can share the attribute. This function properly handles boolean attributes.
|
@@ -5270,59 +5306,53 @@ function $CompileProvider($provide) {
|
|
5270
5306
|
* @param {string=} attrName Optional none normalized name. Defaults to key.
|
5271
5307
|
*/
|
5272
5308
|
$set: function(key, value, writeAttr, attrName) {
|
5273
|
-
//
|
5274
|
-
//
|
5275
|
-
//
|
5276
|
-
if(key == 'class') {
|
5277
|
-
value = value || '';
|
5278
|
-
var current = this.$$element.attr('class') || '';
|
5279
|
-
this.$removeClass(tokenDifference(current, value).join(' '));
|
5280
|
-
this.$addClass(tokenDifference(value, current).join(' '));
|
5281
|
-
} else {
|
5282
|
-
var booleanKey = getBooleanAttrName(this.$$element[0], key),
|
5283
|
-
normalizedVal,
|
5284
|
-
nodeName;
|
5309
|
+
// TODO: decide whether or not to throw an error if "class"
|
5310
|
+
//is set through this function since it may cause $updateClass to
|
5311
|
+
//become unstable.
|
5285
5312
|
|
5286
|
-
|
5287
|
-
|
5288
|
-
|
5289
|
-
}
|
5313
|
+
var booleanKey = getBooleanAttrName(this.$$element[0], key),
|
5314
|
+
normalizedVal,
|
5315
|
+
nodeName;
|
5290
5316
|
|
5291
|
-
|
5317
|
+
if (booleanKey) {
|
5318
|
+
this.$$element.prop(key, value);
|
5319
|
+
attrName = booleanKey;
|
5320
|
+
}
|
5292
5321
|
|
5293
|
-
|
5294
|
-
|
5295
|
-
|
5296
|
-
|
5297
|
-
|
5298
|
-
|
5299
|
-
|
5300
|
-
|
5322
|
+
this[key] = value;
|
5323
|
+
|
5324
|
+
// translate normalized key to actual key
|
5325
|
+
if (attrName) {
|
5326
|
+
this.$attr[key] = attrName;
|
5327
|
+
} else {
|
5328
|
+
attrName = this.$attr[key];
|
5329
|
+
if (!attrName) {
|
5330
|
+
this.$attr[key] = attrName = snake_case(key, '-');
|
5301
5331
|
}
|
5332
|
+
}
|
5302
5333
|
|
5303
|
-
|
5304
|
-
|
5305
|
-
|
5306
|
-
|
5307
|
-
|
5308
|
-
|
5309
|
-
|
5310
|
-
|
5311
|
-
|
5312
|
-
|
5313
|
-
|
5314
|
-
|
5315
|
-
}
|
5334
|
+
nodeName = nodeName_(this.$$element);
|
5335
|
+
|
5336
|
+
// sanitize a[href] and img[src] values
|
5337
|
+
if ((nodeName === 'A' && key === 'href') ||
|
5338
|
+
(nodeName === 'IMG' && key === 'src')) {
|
5339
|
+
// NOTE: urlResolve() doesn't support IE < 8 so we don't sanitize for that case.
|
5340
|
+
if (!msie || msie >= 8 ) {
|
5341
|
+
normalizedVal = urlResolve(value).href;
|
5342
|
+
if (normalizedVal !== '') {
|
5343
|
+
if ((key === 'href' && !normalizedVal.match(aHrefSanitizationWhitelist)) ||
|
5344
|
+
(key === 'src' && !normalizedVal.match(imgSrcSanitizationWhitelist))) {
|
5345
|
+
this[key] = value = 'unsafe:' + normalizedVal;
|
5316
5346
|
}
|
5317
5347
|
}
|
5318
5348
|
}
|
5349
|
+
}
|
5319
5350
|
|
5320
|
-
|
5321
|
-
|
5322
|
-
|
5323
|
-
|
5324
|
-
|
5325
|
-
}
|
5351
|
+
if (writeAttr !== false) {
|
5352
|
+
if (value === null || value === undefined) {
|
5353
|
+
this.$$element.removeAttr(attrName);
|
5354
|
+
} else {
|
5355
|
+
this.$$element.attr(attrName, value);
|
5326
5356
|
}
|
5327
5357
|
}
|
5328
5358
|
|
@@ -5335,22 +5365,6 @@ function $CompileProvider($provide) {
|
|
5335
5365
|
$exceptionHandler(e);
|
5336
5366
|
}
|
5337
5367
|
});
|
5338
|
-
|
5339
|
-
function tokenDifference(str1, str2) {
|
5340
|
-
var values = [],
|
5341
|
-
tokens1 = str1.split(/\s+/),
|
5342
|
-
tokens2 = str2.split(/\s+/);
|
5343
|
-
|
5344
|
-
outer:
|
5345
|
-
for(var i=0;i<tokens1.length;i++) {
|
5346
|
-
var token = tokens1[i];
|
5347
|
-
for(var j=0;j<tokens2.length;j++) {
|
5348
|
-
if(token == tokens2[j]) continue outer;
|
5349
|
-
}
|
5350
|
-
values.push(token);
|
5351
|
-
}
|
5352
|
-
return values;
|
5353
|
-
}
|
5354
5368
|
},
|
5355
5369
|
|
5356
5370
|
|
@@ -6372,10 +6386,15 @@ function $CompileProvider($provide) {
|
|
6372
6386
|
|
6373
6387
|
|
6374
6388
|
function getTrustedContext(node, attrNormalizedName) {
|
6389
|
+
if (attrNormalizedName == "srcdoc") {
|
6390
|
+
return $sce.HTML;
|
6391
|
+
}
|
6392
|
+
var tag = nodeName_(node);
|
6375
6393
|
// maction[xlink:href] can source SVG. It's not limited to <maction>.
|
6376
6394
|
if (attrNormalizedName == "xlinkHref" ||
|
6377
|
-
(
|
6378
|
-
|
6395
|
+
(tag == "FORM" && attrNormalizedName == "action") ||
|
6396
|
+
(tag != "IMG" && (attrNormalizedName == "src" ||
|
6397
|
+
attrNormalizedName == "ngSrc"))) {
|
6379
6398
|
return $sce.RESOURCE_URL;
|
6380
6399
|
}
|
6381
6400
|
}
|
@@ -6420,9 +6439,19 @@ function $CompileProvider($provide) {
|
|
6420
6439
|
attr[name] = interpolateFn(scope);
|
6421
6440
|
($$observers[name] || ($$observers[name] = [])).$$inter = true;
|
6422
6441
|
(attr.$$observers && attr.$$observers[name].$$scope || scope).
|
6423
|
-
|
6424
|
-
|
6425
|
-
|
6442
|
+
$watch(interpolateFn, function interpolateFnWatchAction(newValue, oldValue) {
|
6443
|
+
//special case for class attribute addition + removal
|
6444
|
+
//so that class changes can tap into the animation
|
6445
|
+
//hooks provided by the $animate service. Be sure to
|
6446
|
+
//skip animations when the first digest occurs (when
|
6447
|
+
//both the new and the old values are the same) since
|
6448
|
+
//the CSS classes are the non-interpolated values
|
6449
|
+
if(name === 'class' && newValue != oldValue) {
|
6450
|
+
attr.$updateClass(newValue, oldValue);
|
6451
|
+
} else {
|
6452
|
+
attr.$set(name, newValue);
|
6453
|
+
}
|
6454
|
+
});
|
6426
6455
|
}
|
6427
6456
|
};
|
6428
6457
|
}
|
@@ -6563,6 +6592,22 @@ function directiveLinkingFn(
|
|
6563
6592
|
/* function(Function) */ boundTranscludeFn
|
6564
6593
|
){}
|
6565
6594
|
|
6595
|
+
function tokenDifference(str1, str2) {
|
6596
|
+
var values = '',
|
6597
|
+
tokens1 = str1.split(/\s+/),
|
6598
|
+
tokens2 = str2.split(/\s+/);
|
6599
|
+
|
6600
|
+
outer:
|
6601
|
+
for(var i = 0; i < tokens1.length; i++) {
|
6602
|
+
var token = tokens1[i];
|
6603
|
+
for(var j = 0; j < tokens2.length; j++) {
|
6604
|
+
if(token == tokens2[j]) continue outer;
|
6605
|
+
}
|
6606
|
+
values += (values.length > 0 ? ' ' : '') + token;
|
6607
|
+
}
|
6608
|
+
return values;
|
6609
|
+
}
|
6610
|
+
|
6566
6611
|
/**
|
6567
6612
|
* @ngdoc object
|
6568
6613
|
* @name ng.$controllerProvider
|
@@ -7779,6 +7824,8 @@ function $HttpBackendProvider() {
|
|
7779
7824
|
}
|
7780
7825
|
|
7781
7826
|
function createHttpBackend($browser, XHR, $browserDefer, callbacks, rawDocument, locationProtocol) {
|
7827
|
+
var ABORTED = -1;
|
7828
|
+
|
7782
7829
|
// TODO(vojta): fix the signature
|
7783
7830
|
return function(method, url, post, callback, headers, timeout, withCredentials, responseType) {
|
7784
7831
|
var status;
|
@@ -7814,13 +7861,19 @@ function createHttpBackend($browser, XHR, $browserDefer, callbacks, rawDocument,
|
|
7814
7861
|
// always async
|
7815
7862
|
xhr.onreadystatechange = function() {
|
7816
7863
|
if (xhr.readyState == 4) {
|
7817
|
-
var responseHeaders =
|
7864
|
+
var responseHeaders = null,
|
7865
|
+
response = null;
|
7866
|
+
|
7867
|
+
if(status !== ABORTED) {
|
7868
|
+
responseHeaders = xhr.getAllResponseHeaders();
|
7869
|
+
response = xhr.responseType ? xhr.response : xhr.responseText;
|
7870
|
+
}
|
7818
7871
|
|
7819
7872
|
// responseText is the old-school way of retrieving response (supported by IE8 & 9)
|
7820
7873
|
// response/responseType properties were introduced in XHR Level2 spec (supported by IE10)
|
7821
7874
|
completeRequest(callback,
|
7822
7875
|
status || xhr.status,
|
7823
|
-
|
7876
|
+
response,
|
7824
7877
|
responseHeaders);
|
7825
7878
|
}
|
7826
7879
|
};
|
@@ -7844,7 +7897,7 @@ function createHttpBackend($browser, XHR, $browserDefer, callbacks, rawDocument,
|
|
7844
7897
|
|
7845
7898
|
|
7846
7899
|
function timeoutRequest() {
|
7847
|
-
status =
|
7900
|
+
status = ABORTED;
|
7848
7901
|
jsonpDone && jsonpDone();
|
7849
7902
|
xhr && xhr.abort();
|
7850
7903
|
}
|
@@ -7873,6 +7926,7 @@ function createHttpBackend($browser, XHR, $browserDefer, callbacks, rawDocument,
|
|
7873
7926
|
// - adds and immediately removes script elements from the document
|
7874
7927
|
var script = rawDocument.createElement('script'),
|
7875
7928
|
doneWrapper = function() {
|
7929
|
+
script.onreadystatechange = script.onload = script.onerror = null;
|
7876
7930
|
rawDocument.body.removeChild(script);
|
7877
7931
|
if (done) done();
|
7878
7932
|
};
|
@@ -7880,12 +7934,16 @@ function createHttpBackend($browser, XHR, $browserDefer, callbacks, rawDocument,
|
|
7880
7934
|
script.type = 'text/javascript';
|
7881
7935
|
script.src = url;
|
7882
7936
|
|
7883
|
-
if (msie) {
|
7937
|
+
if (msie && msie <= 8) {
|
7884
7938
|
script.onreadystatechange = function() {
|
7885
|
-
if (/loaded|complete/.test(script.readyState))
|
7939
|
+
if (/loaded|complete/.test(script.readyState)) {
|
7940
|
+
doneWrapper();
|
7941
|
+
}
|
7886
7942
|
};
|
7887
7943
|
} else {
|
7888
|
-
script.onload = script.onerror =
|
7944
|
+
script.onload = script.onerror = function() {
|
7945
|
+
doneWrapper();
|
7946
|
+
};
|
7889
7947
|
}
|
7890
7948
|
|
7891
7949
|
rawDocument.body.appendChild(script);
|
@@ -8962,7 +9020,7 @@ function $LocationProvider(){
|
|
8962
9020
|
*
|
8963
9021
|
* The main purpose of this service is to simplify debugging and troubleshooting.
|
8964
9022
|
*
|
8965
|
-
* The default is
|
9023
|
+
* The default is to log `debug` messages. You can use
|
8966
9024
|
* {@link ng.$logProvider ng.$logProvider#debugEnabled} to change this.
|
8967
9025
|
*
|
8968
9026
|
* @example
|
@@ -10128,7 +10186,7 @@ function getterFn(path, options, fullExp) {
|
|
10128
10186
|
: '((k&&k.hasOwnProperty("' + key + '"))?k:s)') + '["' + key + '"]' + ';\n' +
|
10129
10187
|
(options.unwrapPromises
|
10130
10188
|
? 'if (s && s.then) {\n' +
|
10131
|
-
' pw("' + fullExp.replace(
|
10189
|
+
' pw("' + fullExp.replace(/(["\r\n])/g, '\\$1') + '");\n' +
|
10132
10190
|
' if (!("$$v" in s)) {\n' +
|
10133
10191
|
' p=s;\n' +
|
10134
10192
|
' p.$$v = undefined;\n' +
|
@@ -12098,8 +12156,7 @@ function $SceDelegateProvider() {
|
|
12098
12156
|
return resourceUrlBlacklist;
|
12099
12157
|
};
|
12100
12158
|
|
12101
|
-
this.$get = ['$
|
12102
|
-
$log, $document, $injector) {
|
12159
|
+
this.$get = ['$injector', function($injector) {
|
12103
12160
|
|
12104
12161
|
var htmlSanitizer = function htmlSanitizer(html) {
|
12105
12162
|
throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.');
|
@@ -12630,18 +12687,15 @@ function $SceProvider() {
|
|
12630
12687
|
* sce.js and sceSpecs.js would need to be aware of this detail.
|
12631
12688
|
*/
|
12632
12689
|
|
12633
|
-
this.$get = ['$parse', '$
|
12634
|
-
$parse, $
|
12690
|
+
this.$get = ['$parse', '$sniffer', '$sceDelegate', function(
|
12691
|
+
$parse, $sniffer, $sceDelegate) {
|
12635
12692
|
// Prereq: Ensure that we're not running in IE8 quirks mode. In that mode, IE allows
|
12636
12693
|
// the "expression(javascript expression)" syntax which is insecure.
|
12637
|
-
if (enabled && msie) {
|
12638
|
-
|
12639
|
-
|
12640
|
-
|
12641
|
-
|
12642
|
-
'mode. You can fix this by adding the text <!doctype html> to the top of your HTML ' +
|
12643
|
-
'document. See http://docs.angularjs.org/api/ng.$sce for more information.');
|
12644
|
-
}
|
12694
|
+
if (enabled && $sniffer.msie && $sniffer.msieDocumentMode < 8) {
|
12695
|
+
throw $sceMinErr('iequirks',
|
12696
|
+
'Strict Contextual Escaping does not support Internet Explorer version < 9 in quirks ' +
|
12697
|
+
'mode. You can fix this by adding the text <!doctype html> to the top of your HTML ' +
|
12698
|
+
'document. See http://docs.angularjs.org/api/ng.$sce for more information.');
|
12645
12699
|
}
|
12646
12700
|
|
12647
12701
|
var sce = copy(SCE_CONTEXTS);
|
@@ -13003,6 +13057,7 @@ function $SnifferProvider() {
|
|
13003
13057
|
int((/android (\d+)/.exec(lowercase(($window.navigator || {}).userAgent)) || [])[1]),
|
13004
13058
|
boxee = /Boxee/i.test(($window.navigator || {}).userAgent),
|
13005
13059
|
document = $document[0] || {},
|
13060
|
+
documentMode = document.documentMode,
|
13006
13061
|
vendorPrefix,
|
13007
13062
|
vendorRegex = /^(Moz|webkit|O|ms)(?=[A-Z])/,
|
13008
13063
|
bodyStyle = document.body && document.body.style,
|
@@ -13047,7 +13102,7 @@ function $SnifferProvider() {
|
|
13047
13102
|
// jshint +W018
|
13048
13103
|
hashchange: 'onhashchange' in $window &&
|
13049
13104
|
// IE8 compatible mode lies
|
13050
|
-
(!
|
13105
|
+
(!documentMode || documentMode > 7),
|
13051
13106
|
hasEvent: function(event) {
|
13052
13107
|
// IE9 implements 'input' event it's so fubared that we rather pretend that it doesn't have
|
13053
13108
|
// it. In particular the event is not fired when backspace or delete key are pressed or
|
@@ -13065,7 +13120,8 @@ function $SnifferProvider() {
|
|
13065
13120
|
vendorPrefix: vendorPrefix,
|
13066
13121
|
transitions : transitions,
|
13067
13122
|
animations : animations,
|
13068
|
-
msie : msie
|
13123
|
+
msie : msie,
|
13124
|
+
msieDocumentMode: documentMode
|
13069
13125
|
};
|
13070
13126
|
}];
|
13071
13127
|
}
|
@@ -14680,8 +14736,11 @@ var htmlAnchorDirective = valueFn({
|
|
14680
14736
|
*
|
14681
14737
|
* The HTML specification does not require browsers to preserve the values of boolean attributes
|
14682
14738
|
* such as disabled. (Their presence means true and their absence means false.)
|
14683
|
-
*
|
14739
|
+
* If we put an Angular interpolation expression into such an attribute then the
|
14740
|
+
* binding information would be lost when the browser removes the attribute.
|
14684
14741
|
* The `ngDisabled` directive solves this problem for the `disabled` attribute.
|
14742
|
+
* This complementary directive is not removed by the browser and so provides
|
14743
|
+
* a permanent reliable place to store the binding information.
|
14685
14744
|
*
|
14686
14745
|
* @example
|
14687
14746
|
<doc:example>
|
@@ -14712,8 +14771,11 @@ var htmlAnchorDirective = valueFn({
|
|
14712
14771
|
* @description
|
14713
14772
|
* The HTML specification does not require browsers to preserve the values of boolean attributes
|
14714
14773
|
* such as checked. (Their presence means true and their absence means false.)
|
14715
|
-
*
|
14774
|
+
* If we put an Angular interpolation expression into such an attribute then the
|
14775
|
+
* binding information would be lost when the browser removes the attribute.
|
14716
14776
|
* The `ngChecked` directive solves this problem for the `checked` attribute.
|
14777
|
+
* This complementary directive is not removed by the browser and so provides
|
14778
|
+
* a permanent reliable place to store the binding information.
|
14717
14779
|
* @example
|
14718
14780
|
<doc:example>
|
14719
14781
|
<doc:source>
|
@@ -14743,8 +14805,12 @@ var htmlAnchorDirective = valueFn({
|
|
14743
14805
|
* @description
|
14744
14806
|
* The HTML specification does not require browsers to preserve the values of boolean attributes
|
14745
14807
|
* such as readonly. (Their presence means true and their absence means false.)
|
14746
|
-
*
|
14808
|
+
* If we put an Angular interpolation expression into such an attribute then the
|
14809
|
+
* binding information would be lost when the browser removes the attribute.
|
14747
14810
|
* The `ngReadonly` directive solves this problem for the `readonly` attribute.
|
14811
|
+
* This complementary directive is not removed by the browser and so provides
|
14812
|
+
* a permanent reliable place to store the binding information.
|
14813
|
+
|
14748
14814
|
* @example
|
14749
14815
|
<doc:example>
|
14750
14816
|
<doc:source>
|
@@ -14774,8 +14840,11 @@ var htmlAnchorDirective = valueFn({
|
|
14774
14840
|
* @description
|
14775
14841
|
* The HTML specification does not require browsers to preserve the values of boolean attributes
|
14776
14842
|
* such as selected. (Their presence means true and their absence means false.)
|
14777
|
-
*
|
14843
|
+
* If we put an Angular interpolation expression into such an attribute then the
|
14844
|
+
* binding information would be lost when the browser removes the attribute.
|
14778
14845
|
* The `ngSelected` directive solves this problem for the `selected` atttribute.
|
14846
|
+
* This complementary directive is not removed by the browser and so provides
|
14847
|
+
* a permanent reliable place to store the binding information.
|
14779
14848
|
* @example
|
14780
14849
|
<doc:example>
|
14781
14850
|
<doc:source>
|
@@ -14807,8 +14876,12 @@ var htmlAnchorDirective = valueFn({
|
|
14807
14876
|
* @description
|
14808
14877
|
* The HTML specification does not require browsers to preserve the values of boolean attributes
|
14809
14878
|
* such as open. (Their presence means true and their absence means false.)
|
14810
|
-
*
|
14879
|
+
* If we put an Angular interpolation expression into such an attribute then the
|
14880
|
+
* binding information would be lost when the browser removes the attribute.
|
14811
14881
|
* The `ngOpen` directive solves this problem for the `open` attribute.
|
14882
|
+
* This complementary directive is not removed by the browser and so provides
|
14883
|
+
* a permanent reliable place to store the binding information.
|
14884
|
+
|
14812
14885
|
*
|
14813
14886
|
* @example
|
14814
14887
|
<doc:example>
|
@@ -15638,8 +15711,21 @@ var inputType = {
|
|
15638
15711
|
|
15639
15712
|
|
15640
15713
|
function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
|
15714
|
+
// In composition mode, users are still inputing intermediate text buffer,
|
15715
|
+
// hold the listener until composition is done.
|
15716
|
+
// More about composition events: https://developer.mozilla.org/en-US/docs/Web/API/CompositionEvent
|
15717
|
+
var composing = false;
|
15718
|
+
|
15719
|
+
element.on('compositionstart', function() {
|
15720
|
+
composing = true;
|
15721
|
+
});
|
15722
|
+
|
15723
|
+
element.on('compositionend', function() {
|
15724
|
+
composing = false;
|
15725
|
+
});
|
15641
15726
|
|
15642
15727
|
var listener = function() {
|
15728
|
+
if (composing) return;
|
15643
15729
|
var value = element.val();
|
15644
15730
|
|
15645
15731
|
// By default we will trim the value
|
@@ -16929,11 +17015,10 @@ function classDirective(name, selector) {
|
|
16929
17015
|
// jshint bitwise: false
|
16930
17016
|
var mod = $index & 1;
|
16931
17017
|
if (mod !== old$index & 1) {
|
16932
|
-
|
16933
|
-
|
16934
|
-
|
16935
|
-
removeClass(
|
16936
|
-
}
|
17018
|
+
var classes = flattenClasses(scope.$eval(attr[name]));
|
17019
|
+
mod === selector ?
|
17020
|
+
attr.$addClass(classes) :
|
17021
|
+
attr.$removeClass(classes);
|
16937
17022
|
}
|
16938
17023
|
});
|
16939
17024
|
}
|
@@ -16941,24 +17026,17 @@ function classDirective(name, selector) {
|
|
16941
17026
|
|
16942
17027
|
function ngClassWatchAction(newVal) {
|
16943
17028
|
if (selector === true || scope.$index % 2 === selector) {
|
16944
|
-
|
16945
|
-
|
17029
|
+
var newClasses = flattenClasses(newVal || '');
|
17030
|
+
if(!oldVal) {
|
17031
|
+
attr.$addClass(newClasses);
|
17032
|
+
} else if(!equals(newVal,oldVal)) {
|
17033
|
+
attr.$updateClass(newClasses, flattenClasses(oldVal));
|
16946
17034
|
}
|
16947
|
-
addClass(newVal);
|
16948
17035
|
}
|
16949
17036
|
oldVal = copy(newVal);
|
16950
17037
|
}
|
16951
17038
|
|
16952
17039
|
|
16953
|
-
function removeClass(classVal) {
|
16954
|
-
attr.$removeClass(flattenClasses(classVal));
|
16955
|
-
}
|
16956
|
-
|
16957
|
-
|
16958
|
-
function addClass(classVal) {
|
16959
|
-
attr.$addClass(flattenClasses(classVal));
|
16960
|
-
}
|
16961
|
-
|
16962
17040
|
function flattenClasses(classVal) {
|
16963
17041
|
if(isArray(classVal)) {
|
16964
17042
|
return classVal.join(' ');
|
@@ -17436,7 +17514,8 @@ var ngCloakDirective = ngDirective({
|
|
17436
17514
|
var ngControllerDirective = [function() {
|
17437
17515
|
return {
|
17438
17516
|
scope: true,
|
17439
|
-
controller: '@'
|
17517
|
+
controller: '@',
|
17518
|
+
priority: 500
|
17440
17519
|
};
|
17441
17520
|
}];
|
17442
17521
|
|
@@ -18132,18 +18211,23 @@ var ngIncludeDirective = ['$http', '$templateCache', '$anchorScroll', '$compile'
|
|
18132
18211
|
if (thisChangeId !== changeCounter) return;
|
18133
18212
|
var newScope = scope.$new();
|
18134
18213
|
|
18135
|
-
|
18136
|
-
|
18137
|
-
|
18138
|
-
|
18139
|
-
|
18140
|
-
|
18141
|
-
|
18142
|
-
|
18143
|
-
|
18144
|
-
|
18145
|
-
|
18146
|
-
|
18214
|
+
// Note: This will also link all children of ng-include that were contained in the original
|
18215
|
+
// html. If that content contains controllers, ... they could pollute/change the scope.
|
18216
|
+
// However, using ng-include on an element with additional content does not make sense...
|
18217
|
+
// Note: We can't remove them in the cloneAttchFn of $transclude as that
|
18218
|
+
// function is called before linking the content, which would apply child
|
18219
|
+
// directives to non existing elements.
|
18220
|
+
var clone = $transclude(newScope, noop);
|
18221
|
+
cleanupLastIncludeContent();
|
18222
|
+
|
18223
|
+
currentScope = newScope;
|
18224
|
+
currentElement = clone;
|
18225
|
+
|
18226
|
+
currentElement.html(response);
|
18227
|
+
$animate.enter(currentElement, null, $element, afterAnimation);
|
18228
|
+
$compile(currentElement.contents())(currentScope);
|
18229
|
+
currentScope.$emit('$includeContentLoaded');
|
18230
|
+
scope.$eval(onloadExp);
|
18147
18231
|
}).error(function() {
|
18148
18232
|
if (thisChangeId === changeCounter) cleanupLastIncludeContent();
|
18149
18233
|
});
|
@@ -18298,7 +18382,7 @@ var ngNonBindableDirective = ngDirective({ terminal: true, priority: 1000 });
|
|
18298
18382
|
* other numbers, for example 12, so that instead of showing "12 people are viewing", you can
|
18299
18383
|
* show "a dozen people are viewing".
|
18300
18384
|
*
|
18301
|
-
* You can use a set of closed braces(`{}`) as a placeholder for the number that you want substituted
|
18385
|
+
* You can use a set of closed braces (`{}`) as a placeholder for the number that you want substituted
|
18302
18386
|
* into pluralized strings. In the previous example, Angular will replace `{}` with
|
18303
18387
|
* <span ng-non-bindable>`{{personCount}}`</span>. The closed braces `{}` is a placeholder
|
18304
18388
|
* for <span ng-non-bindable>{{numberExpression}}</span>.
|
@@ -18559,7 +18643,7 @@ var ngPluralizeDirective = ['$locale', '$interpolate', function($locale, $interp
|
|
18559
18643
|
* For example: `item in items track by $id(item)`. A built in `$id()` function can be used to assign a unique
|
18560
18644
|
* `$$hashKey` property to each item in the array. This property is then used as a key to associated DOM elements
|
18561
18645
|
* with the corresponding item in the array by identity. Moving the same object in array would move the DOM
|
18562
|
-
* element in the same way
|
18646
|
+
* element in the same way in the DOM.
|
18563
18647
|
*
|
18564
18648
|
* For example: `item in items track by item.id` is a typical pattern when the items come from the database. In this
|
18565
18649
|
* case the object identity does not matter. Two objects are considered equivalent as long as their `id`
|
@@ -20128,4 +20212,4 @@ var styleDirective = valueFn({
|
|
20128
20212
|
|
20129
20213
|
})(window, document);
|
20130
20214
|
|
20131
|
-
!angular.$$csp() && angular.element(document).find('head').prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide{display:none !important;}ng\\:form{display:block;}.ng-animate-start{
|
20215
|
+
!angular.$$csp() && angular.element(document).find('head').prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide{display:none !important;}ng\\:form{display:block;}.ng-animate-start{border-spacing:1px 1px;-ms-zoom:1.0001;}.ng-animate-active{border-spacing:0px 0px;-ms-zoom:1;}</style>');
|