angularjs-rails 1.2.1 → 1.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/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>');
|