angularjs-rails 1.2.15 → 1.2.16
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 +2 -2
- data/vendor/assets/javascripts/angular-animate.js +11 -8
- data/vendor/assets/javascripts/angular-cookies.js +1 -1
- data/vendor/assets/javascripts/angular-loader.js +4 -4
- data/vendor/assets/javascripts/angular-mocks.js +26 -22
- data/vendor/assets/javascripts/angular-resource.js +4 -1
- data/vendor/assets/javascripts/angular-route.js +1 -1
- data/vendor/assets/javascripts/angular-sanitize.js +1 -1
- data/vendor/assets/javascripts/angular-scenario.js +400 -104
- data/vendor/assets/javascripts/angular-touch.js +1 -1
- data/vendor/assets/javascripts/angular.js +400 -104
- data/vendor/assets/javascripts/unstable/angular-animate.js +250 -230
- data/vendor/assets/javascripts/unstable/angular-cookies.js +1 -1
- data/vendor/assets/javascripts/unstable/angular-loader.js +4 -4
- data/vendor/assets/javascripts/unstable/angular-mocks.js +26 -22
- data/vendor/assets/javascripts/unstable/angular-resource.js +4 -1
- data/vendor/assets/javascripts/unstable/angular-route.js +1 -1
- data/vendor/assets/javascripts/unstable/angular-sanitize.js +1 -1
- data/vendor/assets/javascripts/unstable/angular-scenario.js +430 -120
- data/vendor/assets/javascripts/unstable/angular-touch.js +1 -1
- data/vendor/assets/javascripts/unstable/angular.js +430 -120
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 41df1107244cece1c3506bdabe6561f49e5adfd8
|
4
|
+
data.tar.gz: 46f193e4e925ea06734a74572fc8d60308b2dd1c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 31881a2f3e57114bac4aa5b62d41af25ce9ee97aef793632ebf179218f3b5ec811623c7c5e6c3ab1d51e5151da5e131887fc55724e27ae7cbce5963a57583d3e
|
7
|
+
data.tar.gz: 17e76073f357362183a4f5c42c48b21788ecd60d290c006d6338a78521da2b95867a321003d87ca68a8dd430dff20c6e13315fcff32fec9eadac9f1674679e73
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license AngularJS v1.2.
|
2
|
+
* @license AngularJS v1.2.16
|
3
3
|
* (c) 2010-2014 Google, Inc. http://angularjs.org
|
4
4
|
* License: MIT
|
5
5
|
*/
|
@@ -112,11 +112,11 @@
|
|
112
112
|
* -webkit-animation: enter_sequence 1s linear; /* Safari/Chrome */
|
113
113
|
* animation: enter_sequence 1s linear; /* IE10+ and Future Browsers */
|
114
114
|
* }
|
115
|
-
*
|
115
|
+
* @-webkit-keyframes enter_sequence {
|
116
116
|
* from { opacity:0; }
|
117
117
|
* to { opacity:1; }
|
118
118
|
* }
|
119
|
-
*
|
119
|
+
* @keyframes enter_sequence {
|
120
120
|
* from { opacity:0; }
|
121
121
|
* to { opacity:1; }
|
122
122
|
* }
|
@@ -338,9 +338,12 @@ angular.module('ngAnimate', ['ng'])
|
|
338
338
|
//operation which performs CSS transition and keyframe
|
339
339
|
//animations sniffing. This is always included for each
|
340
340
|
//element animation procedure if the browser supports
|
341
|
-
//transitions and/or keyframe animations
|
341
|
+
//transitions and/or keyframe animations. The default
|
342
|
+
//animation is added to the top of the list to prevent
|
343
|
+
//any previous animations from affecting the element styling
|
344
|
+
//prior to the element being animated.
|
342
345
|
if ($sniffer.transitions || $sniffer.animations) {
|
343
|
-
|
346
|
+
matches.push($injector.get(selectors['']));
|
344
347
|
}
|
345
348
|
|
346
349
|
for(var i=0; i < classes.length; i++) {
|
@@ -1115,7 +1118,7 @@ angular.module('ngAnimate', ['ng'])
|
|
1115
1118
|
|
1116
1119
|
//but it may not need to cancel out the existing timeout
|
1117
1120
|
//if the timestamp is less than the previous one
|
1118
|
-
var futureTimestamp = Date.now() +
|
1121
|
+
var futureTimestamp = Date.now() + totalTime;
|
1119
1122
|
if(futureTimestamp <= closingTimestamp) {
|
1120
1123
|
return;
|
1121
1124
|
}
|
@@ -1214,7 +1217,7 @@ angular.module('ngAnimate', ['ng'])
|
|
1214
1217
|
parentElement.data(NG_ANIMATE_PARENT_KEY, ++parentCounter);
|
1215
1218
|
parentID = parentCounter;
|
1216
1219
|
}
|
1217
|
-
return parentID + '-' + extractElementNode(element).
|
1220
|
+
return parentID + '-' + extractElementNode(element).getAttribute('class');
|
1218
1221
|
}
|
1219
1222
|
|
1220
1223
|
function animateSetup(animationEvent, element, className, calculationDecorator) {
|
@@ -1319,7 +1322,7 @@ angular.module('ngAnimate', ['ng'])
|
|
1319
1322
|
function animateRun(animationEvent, element, className, activeAnimationComplete) {
|
1320
1323
|
var node = extractElementNode(element);
|
1321
1324
|
var elementData = element.data(NG_ANIMATE_CSS_DATA_KEY);
|
1322
|
-
if(node.
|
1325
|
+
if(node.getAttribute('class').indexOf(className) == -1 || !elementData) {
|
1323
1326
|
activeAnimationComplete();
|
1324
1327
|
return;
|
1325
1328
|
}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license AngularJS v1.2.
|
2
|
+
* @license AngularJS v1.2.16
|
3
3
|
* (c) 2010-2014 Google, Inc. http://angularjs.org
|
4
4
|
* License: MIT
|
5
5
|
*/
|
@@ -69,7 +69,7 @@ function minErr(module) {
|
|
69
69
|
return match;
|
70
70
|
});
|
71
71
|
|
72
|
-
message = message + '\nhttp://errors.angularjs.org/1.2.
|
72
|
+
message = message + '\nhttp://errors.angularjs.org/1.2.16/' +
|
73
73
|
(module ? module + '/' : '') + code;
|
74
74
|
for (i = 2; i < arguments.length; i++) {
|
75
75
|
message = message + (i == 2 ? '?' : '&') + 'p' + (i-2) + '=' +
|
@@ -152,8 +152,8 @@ function setupModuleLoader(window) {
|
|
152
152
|
* {@link angular.bootstrap} to simplify this process for you.
|
153
153
|
*
|
154
154
|
* @param {!string} name The name of the module to create or retrieve.
|
155
|
-
|
156
|
-
|
155
|
+
<<<<<* @param {!Array.<string>=} requires If specified then new module is being created. If
|
156
|
+
>>>>>* unspecified then the module is being retrieved for further configuration.
|
157
157
|
* @param {Function} configFn Optional configuration function for the module. Same as
|
158
158
|
* {@link angular.Module#config Module#config()}.
|
159
159
|
* @returns {module} new module with the {@link angular.Module} api.
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license AngularJS v1.2.
|
2
|
+
* @license AngularJS v1.2.16
|
3
3
|
* (c) 2010-2014 Google, Inc. http://angularjs.org
|
4
4
|
* License: MIT
|
5
5
|
*/
|
@@ -1097,12 +1097,12 @@ function createHttpBackendMock($rootScope, $delegate, $browser) {
|
|
1097
1097
|
responsesPush = angular.bind(responses, responses.push),
|
1098
1098
|
copy = angular.copy;
|
1099
1099
|
|
1100
|
-
function createResponse(status, data, headers) {
|
1100
|
+
function createResponse(status, data, headers, statusText) {
|
1101
1101
|
if (angular.isFunction(status)) return status;
|
1102
1102
|
|
1103
1103
|
return function() {
|
1104
1104
|
return angular.isNumber(status)
|
1105
|
-
? [status, data, headers]
|
1105
|
+
? [status, data, headers, statusText]
|
1106
1106
|
: [200, status, data];
|
1107
1107
|
};
|
1108
1108
|
}
|
@@ -1127,7 +1127,8 @@ function createHttpBackendMock($rootScope, $delegate, $browser) {
|
|
1127
1127
|
function handleResponse() {
|
1128
1128
|
var response = wrapped.response(method, url, data, headers);
|
1129
1129
|
xhr.$$respHeaders = response[2];
|
1130
|
-
callback(copy(response[0]), copy(response[1]), xhr.getAllResponseHeaders()
|
1130
|
+
callback(copy(response[0]), copy(response[1]), xhr.getAllResponseHeaders(),
|
1131
|
+
copy(response[3] || ''));
|
1131
1132
|
}
|
1132
1133
|
|
1133
1134
|
function handleTimeout() {
|
@@ -1194,16 +1195,17 @@ function createHttpBackendMock($rootScope, $delegate, $browser) {
|
|
1194
1195
|
* request is handled.
|
1195
1196
|
*
|
1196
1197
|
* - respond –
|
1197
|
-
* `{function([status,] data[, headers
|
1198
|
-
*
|
1199
|
-
*
|
1200
|
-
* (
|
1198
|
+
* `{function([status,] data[, headers, statusText])
|
1199
|
+
* | function(function(method, url, data, headers)}`
|
1200
|
+
* – The respond method takes a set of static data to be returned or a function that can
|
1201
|
+
* return an array containing response status (number), response data (string), response
|
1202
|
+
* headers (Object), and the text for the status (string).
|
1201
1203
|
*/
|
1202
1204
|
$httpBackend.when = function(method, url, data, headers) {
|
1203
1205
|
var definition = new MockHttpExpectation(method, url, data, headers),
|
1204
1206
|
chain = {
|
1205
|
-
respond: function(status, data, headers) {
|
1206
|
-
definition.response = createResponse(status, data, headers);
|
1207
|
+
respond: function(status, data, headers, statusText) {
|
1208
|
+
definition.response = createResponse(status, data, headers, statusText);
|
1207
1209
|
}
|
1208
1210
|
};
|
1209
1211
|
|
@@ -1311,17 +1313,18 @@ function createHttpBackendMock($rootScope, $delegate, $browser) {
|
|
1311
1313
|
* request is handled.
|
1312
1314
|
*
|
1313
1315
|
* - respond –
|
1314
|
-
* `{function([status,] data[, headers
|
1315
|
-
*
|
1316
|
-
*
|
1317
|
-
* (
|
1316
|
+
* `{function([status,] data[, headers, statusText])
|
1317
|
+
* | function(function(method, url, data, headers)}`
|
1318
|
+
* – The respond method takes a set of static data to be returned or a function that can
|
1319
|
+
* return an array containing response status (number), response data (string), response
|
1320
|
+
* headers (Object), and the text for the status (string).
|
1318
1321
|
*/
|
1319
1322
|
$httpBackend.expect = function(method, url, data, headers) {
|
1320
1323
|
var expectation = new MockHttpExpectation(method, url, data, headers);
|
1321
1324
|
expectations.push(expectation);
|
1322
1325
|
return {
|
1323
|
-
respond: function(status, data, headers) {
|
1324
|
-
expectation.response = createResponse(status, data, headers);
|
1326
|
+
respond: function (status, data, headers, statusText) {
|
1327
|
+
expectation.response = createResponse(status, data, headers, statusText);
|
1325
1328
|
}
|
1326
1329
|
};
|
1327
1330
|
};
|
@@ -1823,13 +1826,14 @@ angular.module('ngMockE2E', ['ng']).config(['$provide', function($provide) {
|
|
1823
1826
|
* control how a matched request is handled.
|
1824
1827
|
*
|
1825
1828
|
* - respond –
|
1826
|
-
* `{function([status,] data[, headers
|
1829
|
+
* `{function([status,] data[, headers, statusText])
|
1830
|
+
* | function(function(method, url, data, headers)}`
|
1827
1831
|
* – The respond method takes a set of static data to be returned or a function that can return
|
1828
|
-
* an array containing response status (number), response data (string)
|
1829
|
-
* (Object).
|
1830
|
-
* - passThrough – `{function()}` – Any request matching a backend definition with
|
1831
|
-
* handler will be passed through to the real backend (an XHR request will be made
|
1832
|
-
* server.)
|
1832
|
+
* an array containing response status (number), response data (string), response headers
|
1833
|
+
* (Object), and the text for the status (string).
|
1834
|
+
* - passThrough – `{function()}` – Any request matching a backend definition with
|
1835
|
+
* `passThrough` handler will be passed through to the real backend (an XHR request will be made
|
1836
|
+
* to the server.)
|
1833
1837
|
*/
|
1834
1838
|
|
1835
1839
|
/**
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license AngularJS v1.2.
|
2
|
+
* @license AngularJS v1.2.16
|
3
3
|
* (c) 2010-2014 Google, Inc. http://angularjs.org
|
4
4
|
* License: MIT
|
5
5
|
*/
|
@@ -204,6 +204,9 @@ function shallowClearAndCopy(src, dst) {
|
|
204
204
|
* On failure, the promise is resolved with the {@link ng.$http http response} object, without
|
205
205
|
* the `resource` property.
|
206
206
|
*
|
207
|
+
* If an interceptor object was provided, the promise will instead be resolved with the value
|
208
|
+
* returned by the interceptor.
|
209
|
+
*
|
207
210
|
* - `$resolved`: `true` after first server interaction is completed (either with success or
|
208
211
|
* rejection), `false` before that. Knowing if the Resource has been resolved is useful in
|
209
212
|
* data-binding.
|
@@ -9790,7 +9790,7 @@ if ( typeof module === "object" && module && typeof module.exports === "object"
|
|
9790
9790
|
})( window );
|
9791
9791
|
|
9792
9792
|
/**
|
9793
|
-
* @license AngularJS v1.2.
|
9793
|
+
* @license AngularJS v1.2.16
|
9794
9794
|
* (c) 2010-2014 Google, Inc. http://angularjs.org
|
9795
9795
|
* License: MIT
|
9796
9796
|
*/
|
@@ -9860,7 +9860,7 @@ function minErr(module) {
|
|
9860
9860
|
return match;
|
9861
9861
|
});
|
9862
9862
|
|
9863
|
-
message = message + '\nhttp://errors.angularjs.org/1.2.
|
9863
|
+
message = message + '\nhttp://errors.angularjs.org/1.2.16/' +
|
9864
9864
|
(module ? module + '/' : '') + code;
|
9865
9865
|
for (i = 2; i < arguments.length; i++) {
|
9866
9866
|
message = message + (i == 2 ? '?' : '&') + 'p' + (i-2) + '=' +
|
@@ -11147,7 +11147,7 @@ function angularInit(element, bootstrap) {
|
|
11147
11147
|
* </file>
|
11148
11148
|
* </example>
|
11149
11149
|
*
|
11150
|
-
* @param {
|
11150
|
+
* @param {DOMElement} element DOM element which is the root of angular application.
|
11151
11151
|
* @param {Array<String|Function|Array>=} modules an array of modules to load into the application.
|
11152
11152
|
* Each item in the array should be the name of a predefined module or a (DI annotated)
|
11153
11153
|
* function that will be invoked by the injector as a run block.
|
@@ -11381,8 +11381,8 @@ function setupModuleLoader(window) {
|
|
11381
11381
|
* {@link angular.bootstrap} to simplify this process for you.
|
11382
11382
|
*
|
11383
11383
|
* @param {!string} name The name of the module to create or retrieve.
|
11384
|
-
|
11385
|
-
|
11384
|
+
<<<<<* @param {!Array.<string>=} requires If specified then new module is being created. If
|
11385
|
+
>>>>>* unspecified then the module is being retrieved for further configuration.
|
11386
11386
|
* @param {Function} configFn Optional configuration function for the module. Same as
|
11387
11387
|
* {@link angular.Module#config Module#config()}.
|
11388
11388
|
* @returns {module} new module with the {@link angular.Module} api.
|
@@ -11711,11 +11711,11 @@ function setupModuleLoader(window) {
|
|
11711
11711
|
* - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat".
|
11712
11712
|
*/
|
11713
11713
|
var version = {
|
11714
|
-
full: '1.2.
|
11714
|
+
full: '1.2.16', // all of these placeholder strings will be replaced by grunt's
|
11715
11715
|
major: 1, // package task
|
11716
11716
|
minor: 2,
|
11717
|
-
dot:
|
11718
|
-
codeName: '
|
11717
|
+
dot: 16,
|
11718
|
+
codeName: 'badger-enumeration'
|
11719
11719
|
};
|
11720
11720
|
|
11721
11721
|
|
@@ -12018,6 +12018,75 @@ function jqLitePatchJQueryRemove(name, dispatchThis, filterElems, getterIfNoArgu
|
|
12018
12018
|
}
|
12019
12019
|
}
|
12020
12020
|
|
12021
|
+
var SINGLE_TAG_REGEXP = /^<(\w+)\s*\/?>(?:<\/\1>|)$/;
|
12022
|
+
var HTML_REGEXP = /<|&#?\w+;/;
|
12023
|
+
var TAG_NAME_REGEXP = /<([\w:]+)/;
|
12024
|
+
var XHTML_TAG_REGEXP = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi;
|
12025
|
+
|
12026
|
+
var wrapMap = {
|
12027
|
+
'option': [1, '<select multiple="multiple">', '</select>'],
|
12028
|
+
|
12029
|
+
'thead': [1, '<table>', '</table>'],
|
12030
|
+
'col': [2, '<table><colgroup>', '</colgroup></table>'],
|
12031
|
+
'tr': [2, '<table><tbody>', '</tbody></table>'],
|
12032
|
+
'td': [3, '<table><tbody><tr>', '</tr></tbody></table>'],
|
12033
|
+
'_default': [0, "", ""]
|
12034
|
+
};
|
12035
|
+
|
12036
|
+
wrapMap.optgroup = wrapMap.option;
|
12037
|
+
wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
|
12038
|
+
wrapMap.th = wrapMap.td;
|
12039
|
+
|
12040
|
+
function jqLiteIsTextNode(html) {
|
12041
|
+
return !HTML_REGEXP.test(html);
|
12042
|
+
}
|
12043
|
+
|
12044
|
+
function jqLiteBuildFragment(html, context) {
|
12045
|
+
var elem, tmp, tag, wrap,
|
12046
|
+
fragment = context.createDocumentFragment(),
|
12047
|
+
nodes = [], i, j, jj;
|
12048
|
+
|
12049
|
+
if (jqLiteIsTextNode(html)) {
|
12050
|
+
// Convert non-html into a text node
|
12051
|
+
nodes.push(context.createTextNode(html));
|
12052
|
+
} else {
|
12053
|
+
tmp = fragment.appendChild(context.createElement('div'));
|
12054
|
+
// Convert html into DOM nodes
|
12055
|
+
tag = (TAG_NAME_REGEXP.exec(html) || ["", ""])[1].toLowerCase();
|
12056
|
+
wrap = wrapMap[tag] || wrapMap._default;
|
12057
|
+
tmp.innerHTML = '<div> </div>' +
|
12058
|
+
wrap[1] + html.replace(XHTML_TAG_REGEXP, "<$1></$2>") + wrap[2];
|
12059
|
+
tmp.removeChild(tmp.firstChild);
|
12060
|
+
|
12061
|
+
// Descend through wrappers to the right content
|
12062
|
+
i = wrap[0];
|
12063
|
+
while (i--) {
|
12064
|
+
tmp = tmp.lastChild;
|
12065
|
+
}
|
12066
|
+
|
12067
|
+
for (j=0, jj=tmp.childNodes.length; j<jj; ++j) nodes.push(tmp.childNodes[j]);
|
12068
|
+
|
12069
|
+
tmp = fragment.firstChild;
|
12070
|
+
tmp.textContent = "";
|
12071
|
+
}
|
12072
|
+
|
12073
|
+
// Remove wrapper from fragment
|
12074
|
+
fragment.textContent = "";
|
12075
|
+
fragment.innerHTML = ""; // Clear inner HTML
|
12076
|
+
return nodes;
|
12077
|
+
}
|
12078
|
+
|
12079
|
+
function jqLiteParseHTML(html, context) {
|
12080
|
+
context = context || document;
|
12081
|
+
var parsed;
|
12082
|
+
|
12083
|
+
if ((parsed = SINGLE_TAG_REGEXP.exec(html))) {
|
12084
|
+
return [context.createElement(parsed[1])];
|
12085
|
+
}
|
12086
|
+
|
12087
|
+
return jqLiteBuildFragment(html, context);
|
12088
|
+
}
|
12089
|
+
|
12021
12090
|
/////////////////////////////////////////////
|
12022
12091
|
function JQLite(element) {
|
12023
12092
|
if (element instanceof JQLite) {
|
@@ -12034,14 +12103,9 @@ function JQLite(element) {
|
|
12034
12103
|
}
|
12035
12104
|
|
12036
12105
|
if (isString(element)) {
|
12037
|
-
|
12038
|
-
// Read about the NoScope elements here:
|
12039
|
-
// http://msdn.microsoft.com/en-us/library/ms533897(VS.85).aspx
|
12040
|
-
div.innerHTML = '<div> </div>' + element; // IE insanity to make NoScope elements work!
|
12041
|
-
div.removeChild(div.firstChild); // remove the superfluous div
|
12042
|
-
jqLiteAddNodes(this, div.childNodes);
|
12106
|
+
jqLiteAddNodes(this, jqLiteParseHTML(element));
|
12043
12107
|
var fragment = jqLite(document.createDocumentFragment());
|
12044
|
-
fragment.append(this);
|
12108
|
+
fragment.append(this);
|
12045
12109
|
} else {
|
12046
12110
|
jqLiteAddNodes(this, element);
|
12047
12111
|
}
|
@@ -14367,7 +14431,8 @@ function $BrowserProvider(){
|
|
14367
14431
|
* @name $cacheFactory
|
14368
14432
|
*
|
14369
14433
|
* @description
|
14370
|
-
* Factory that constructs
|
14434
|
+
* Factory that constructs {@link $cacheFactory.Cache Cache} objects and gives access to
|
14435
|
+
* them.
|
14371
14436
|
*
|
14372
14437
|
* ```js
|
14373
14438
|
*
|
@@ -14399,6 +14464,46 @@ function $BrowserProvider(){
|
|
14399
14464
|
* - `{void}` `removeAll()` — Removes all cached values.
|
14400
14465
|
* - `{void}` `destroy()` — Removes references to this cache from $cacheFactory.
|
14401
14466
|
*
|
14467
|
+
* @example
|
14468
|
+
<example module="cacheExampleApp">
|
14469
|
+
<file name="index.html">
|
14470
|
+
<div ng-controller="CacheController">
|
14471
|
+
<input ng-model="newCacheKey" placeholder="Key">
|
14472
|
+
<input ng-model="newCacheValue" placeholder="Value">
|
14473
|
+
<button ng-click="put(newCacheKey, newCacheValue)">Cache</button>
|
14474
|
+
|
14475
|
+
<p ng-if="keys.length">Cached Values</p>
|
14476
|
+
<div ng-repeat="key in keys">
|
14477
|
+
<span ng-bind="key"></span>
|
14478
|
+
<span>: </span>
|
14479
|
+
<b ng-bind="cache.get(key)"></b>
|
14480
|
+
</div>
|
14481
|
+
|
14482
|
+
<p>Cache Info</p>
|
14483
|
+
<div ng-repeat="(key, value) in cache.info()">
|
14484
|
+
<span ng-bind="key"></span>
|
14485
|
+
<span>: </span>
|
14486
|
+
<b ng-bind="value"></b>
|
14487
|
+
</div>
|
14488
|
+
</div>
|
14489
|
+
</file>
|
14490
|
+
<file name="script.js">
|
14491
|
+
angular.module('cacheExampleApp', []).
|
14492
|
+
controller('CacheController', ['$scope', '$cacheFactory', function($scope, $cacheFactory) {
|
14493
|
+
$scope.keys = [];
|
14494
|
+
$scope.cache = $cacheFactory('cacheId');
|
14495
|
+
$scope.put = function(key, value) {
|
14496
|
+
$scope.cache.put(key, value);
|
14497
|
+
$scope.keys.push(key);
|
14498
|
+
};
|
14499
|
+
}]);
|
14500
|
+
</file>
|
14501
|
+
<file name="style.css">
|
14502
|
+
p {
|
14503
|
+
margin: 10px 0 3px;
|
14504
|
+
}
|
14505
|
+
</file>
|
14506
|
+
</example>
|
14402
14507
|
*/
|
14403
14508
|
function $CacheFactoryProvider() {
|
14404
14509
|
|
@@ -14418,8 +14523,65 @@ function $CacheFactoryProvider() {
|
|
14418
14523
|
freshEnd = null,
|
14419
14524
|
staleEnd = null;
|
14420
14525
|
|
14526
|
+
/**
|
14527
|
+
* @ngdoc type
|
14528
|
+
* @name $cacheFactory.Cache
|
14529
|
+
*
|
14530
|
+
* @description
|
14531
|
+
* A cache object used to store and retrieve data, primarily used by
|
14532
|
+
* {@link $http $http} and the {@link ng.directive:script script} directive to cache
|
14533
|
+
* templates and other data.
|
14534
|
+
*
|
14535
|
+
* ```js
|
14536
|
+
* angular.module('superCache')
|
14537
|
+
* .factory('superCache', ['$cacheFactory', function($cacheFactory) {
|
14538
|
+
* return $cacheFactory('super-cache');
|
14539
|
+
* }]);
|
14540
|
+
* ```
|
14541
|
+
*
|
14542
|
+
* Example test:
|
14543
|
+
*
|
14544
|
+
* ```js
|
14545
|
+
* it('should behave like a cache', inject(function(superCache) {
|
14546
|
+
* superCache.put('key', 'value');
|
14547
|
+
* superCache.put('another key', 'another value');
|
14548
|
+
*
|
14549
|
+
* expect(superCache.info()).toEqual({
|
14550
|
+
* id: 'super-cache',
|
14551
|
+
* size: 2
|
14552
|
+
* });
|
14553
|
+
*
|
14554
|
+
* superCache.remove('another key');
|
14555
|
+
* expect(superCache.get('another key')).toBeUndefined();
|
14556
|
+
*
|
14557
|
+
* superCache.removeAll();
|
14558
|
+
* expect(superCache.info()).toEqual({
|
14559
|
+
* id: 'super-cache',
|
14560
|
+
* size: 0
|
14561
|
+
* });
|
14562
|
+
* }));
|
14563
|
+
* ```
|
14564
|
+
*/
|
14421
14565
|
return caches[cacheId] = {
|
14422
14566
|
|
14567
|
+
/**
|
14568
|
+
* @ngdoc method
|
14569
|
+
* @name $cacheFactory.Cache#put
|
14570
|
+
* @function
|
14571
|
+
*
|
14572
|
+
* @description
|
14573
|
+
* Inserts a named entry into the {@link $cacheFactory.Cache Cache} object to be
|
14574
|
+
* retrieved later, and incrementing the size of the cache if the key was not already
|
14575
|
+
* present in the cache. If behaving like an LRU cache, it will also remove stale
|
14576
|
+
* entries from the set.
|
14577
|
+
*
|
14578
|
+
* It will not insert undefined values into the cache.
|
14579
|
+
*
|
14580
|
+
* @param {string} key the key under which the cached data is stored.
|
14581
|
+
* @param {*} value the value to store alongside the key. If it is undefined, the key
|
14582
|
+
* will not be stored.
|
14583
|
+
* @returns {*} the value stored.
|
14584
|
+
*/
|
14423
14585
|
put: function(key, value) {
|
14424
14586
|
if (capacity < Number.MAX_VALUE) {
|
14425
14587
|
var lruEntry = lruHash[key] || (lruHash[key] = {key: key});
|
@@ -14438,7 +14600,17 @@ function $CacheFactoryProvider() {
|
|
14438
14600
|
return value;
|
14439
14601
|
},
|
14440
14602
|
|
14441
|
-
|
14603
|
+
/**
|
14604
|
+
* @ngdoc method
|
14605
|
+
* @name $cacheFactory.Cache#get
|
14606
|
+
* @function
|
14607
|
+
*
|
14608
|
+
* @description
|
14609
|
+
* Retrieves named data stored in the {@link $cacheFactory.Cache Cache} object.
|
14610
|
+
*
|
14611
|
+
* @param {string} key the key of the data to be retrieved
|
14612
|
+
* @returns {*} the value stored.
|
14613
|
+
*/
|
14442
14614
|
get: function(key) {
|
14443
14615
|
if (capacity < Number.MAX_VALUE) {
|
14444
14616
|
var lruEntry = lruHash[key];
|
@@ -14452,6 +14624,16 @@ function $CacheFactoryProvider() {
|
|
14452
14624
|
},
|
14453
14625
|
|
14454
14626
|
|
14627
|
+
/**
|
14628
|
+
* @ngdoc method
|
14629
|
+
* @name $cacheFactory.Cache#remove
|
14630
|
+
* @function
|
14631
|
+
*
|
14632
|
+
* @description
|
14633
|
+
* Removes an entry from the {@link $cacheFactory.Cache Cache} object.
|
14634
|
+
*
|
14635
|
+
* @param {string} key the key of the entry to be removed
|
14636
|
+
*/
|
14455
14637
|
remove: function(key) {
|
14456
14638
|
if (capacity < Number.MAX_VALUE) {
|
14457
14639
|
var lruEntry = lruHash[key];
|
@@ -14470,6 +14652,14 @@ function $CacheFactoryProvider() {
|
|
14470
14652
|
},
|
14471
14653
|
|
14472
14654
|
|
14655
|
+
/**
|
14656
|
+
* @ngdoc method
|
14657
|
+
* @name $cacheFactory.Cache#removeAll
|
14658
|
+
* @function
|
14659
|
+
*
|
14660
|
+
* @description
|
14661
|
+
* Clears the cache object of any entries.
|
14662
|
+
*/
|
14473
14663
|
removeAll: function() {
|
14474
14664
|
data = {};
|
14475
14665
|
size = 0;
|
@@ -14478,6 +14668,15 @@ function $CacheFactoryProvider() {
|
|
14478
14668
|
},
|
14479
14669
|
|
14480
14670
|
|
14671
|
+
/**
|
14672
|
+
* @ngdoc method
|
14673
|
+
* @name $cacheFactory.Cache#destroy
|
14674
|
+
* @function
|
14675
|
+
*
|
14676
|
+
* @description
|
14677
|
+
* Destroys the {@link $cacheFactory.Cache Cache} object entirely,
|
14678
|
+
* removing it from the {@link $cacheFactory $cacheFactory} set.
|
14679
|
+
*/
|
14481
14680
|
destroy: function() {
|
14482
14681
|
data = null;
|
14483
14682
|
stats = null;
|
@@ -14486,6 +14685,22 @@ function $CacheFactoryProvider() {
|
|
14486
14685
|
},
|
14487
14686
|
|
14488
14687
|
|
14688
|
+
/**
|
14689
|
+
* @ngdoc method
|
14690
|
+
* @name $cacheFactory.Cache#info
|
14691
|
+
* @function
|
14692
|
+
*
|
14693
|
+
* @description
|
14694
|
+
* Retrieve information regarding a particular {@link $cacheFactory.Cache Cache}.
|
14695
|
+
*
|
14696
|
+
* @returns {object} an object with the following properties:
|
14697
|
+
* <ul>
|
14698
|
+
* <li>**id**: the id of the cache instance</li>
|
14699
|
+
* <li>**size**: the number of entries kept in the cache instance</li>
|
14700
|
+
* <li>**...**: any additional properties from the options object when creating the
|
14701
|
+
* cache.</li>
|
14702
|
+
* </ul>
|
14703
|
+
*/
|
14489
14704
|
info: function() {
|
14490
14705
|
return extend({}, stats, {size: size});
|
14491
14706
|
}
|
@@ -14672,6 +14887,7 @@ function $TemplateCacheProvider() {
|
|
14672
14887
|
* restrict: 'A',
|
14673
14888
|
* scope: false,
|
14674
14889
|
* controller: function($scope, $element, $attrs, $transclude, otherInjectables) { ... },
|
14890
|
+
* controllerAs: 'stringAlias',
|
14675
14891
|
* require: 'siblingDirectiveName', // or // ['^parentDirectiveName', '?optionalDirectiveName', '?^optionalParent'],
|
14676
14892
|
* compile: function compile(tElement, tAttrs, transclude) {
|
14677
14893
|
* return {
|
@@ -14889,6 +15105,16 @@ function $TemplateCacheProvider() {
|
|
14889
15105
|
* apply to all cloned DOM nodes within the compile function. Specifically, DOM listener registration
|
14890
15106
|
* should be done in a linking function rather than in a compile function.
|
14891
15107
|
* </div>
|
15108
|
+
|
15109
|
+
* <div class="alert alert-warning">
|
15110
|
+
* **Note:** The compile function cannot handle directives that recursively use themselves in their
|
15111
|
+
* own templates or compile functions. Compiling these directives results in an infinite loop and a
|
15112
|
+
* stack overflow errors.
|
15113
|
+
*
|
15114
|
+
* This can be avoided by manually using $compile in the postLink function to imperatively compile
|
15115
|
+
* a directive's template instead of relying on automatic template compilation via `template` or
|
15116
|
+
* `templateUrl` declaration or manual compilation inside the compile function.
|
15117
|
+
* </div>
|
14892
15118
|
*
|
14893
15119
|
* <div class="alert alert-error">
|
14894
15120
|
* **Note:** The `transclude` function that is passed to the compile function is deprecated, as it
|
@@ -15110,8 +15336,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
|
|
15110
15336
|
var hasDirectives = {},
|
15111
15337
|
Suffix = 'Directive',
|
15112
15338
|
COMMENT_DIRECTIVE_REGEXP = /^\s*directive\:\s*([\d\w\-_]+)\s+(.*)$/,
|
15113
|
-
CLASS_DIRECTIVE_REGEXP = /(([\d\w\-_]+)(?:\:([^;]+))?;?)
|
15114
|
-
TABLE_CONTENT_REGEXP = /^<\s*(tr|th|td|thead|tbody|tfoot)(\s+[^>]*)?>/i;
|
15339
|
+
CLASS_DIRECTIVE_REGEXP = /(([\d\w\-_]+)(?:\:([^;]+))?;?)/;
|
15115
15340
|
|
15116
15341
|
// Ref: http://developers.whatwg.org/webappapis.html#event-handler-idl-attributes
|
15117
15342
|
// The assumption is that future DOM event attribute names will begin with
|
@@ -15853,7 +16078,11 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
|
|
15853
16078
|
|
15854
16079
|
if (directive.replace) {
|
15855
16080
|
replaceDirective = directive;
|
15856
|
-
|
16081
|
+
if (jqLiteIsTextNode(directiveValue)) {
|
16082
|
+
$template = [];
|
16083
|
+
} else {
|
16084
|
+
$template = jqLite(directiveValue);
|
16085
|
+
}
|
15857
16086
|
compileNode = $template[0];
|
15858
16087
|
|
15859
16088
|
if ($template.length != 1 || compileNode.nodeType !== 1) {
|
@@ -16252,27 +16481,6 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
|
|
16252
16481
|
}
|
16253
16482
|
|
16254
16483
|
|
16255
|
-
function directiveTemplateContents(template) {
|
16256
|
-
var type;
|
16257
|
-
template = trim(template);
|
16258
|
-
if ((type = TABLE_CONTENT_REGEXP.exec(template))) {
|
16259
|
-
type = type[1].toLowerCase();
|
16260
|
-
var table = jqLite('<table>' + template + '</table>');
|
16261
|
-
if (/(thead|tbody|tfoot)/.test(type)) {
|
16262
|
-
return table.children(type);
|
16263
|
-
}
|
16264
|
-
table = table.children('tbody');
|
16265
|
-
if (type === 'tr') {
|
16266
|
-
return table.children('tr');
|
16267
|
-
}
|
16268
|
-
return table.children('tr').contents();
|
16269
|
-
}
|
16270
|
-
return jqLite('<div>' +
|
16271
|
-
template +
|
16272
|
-
'</div>').contents();
|
16273
|
-
}
|
16274
|
-
|
16275
|
-
|
16276
16484
|
function compileTemplateUrl(directives, $compileNode, tAttrs,
|
16277
16485
|
$rootElement, childTranscludeFn, preLinkFns, postLinkFns, previousCompileContext) {
|
16278
16486
|
var linkQueue = [],
|
@@ -16297,7 +16505,11 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
|
|
16297
16505
|
content = denormalizeTemplate(content);
|
16298
16506
|
|
16299
16507
|
if (origAsyncDirective.replace) {
|
16300
|
-
|
16508
|
+
if (jqLiteIsTextNode(content)) {
|
16509
|
+
$template = [];
|
16510
|
+
} else {
|
16511
|
+
$template = jqLite(content);
|
16512
|
+
}
|
16301
16513
|
compileNode = $template[0];
|
16302
16514
|
|
16303
16515
|
if ($template.length != 1 || compileNode.nodeType !== 1) {
|
@@ -17075,7 +17287,7 @@ function $HttpProvider() {
|
|
17075
17287
|
*
|
17076
17288
|
* ```
|
17077
17289
|
* module.run(function($http) {
|
17078
|
-
* $http.defaults.headers.common.
|
17290
|
+
* $http.defaults.headers.common.Authorization = 'Basic YmVlcDpib29w'
|
17079
17291
|
* });
|
17080
17292
|
* ```
|
17081
17293
|
*
|
@@ -17369,6 +17581,7 @@ function $HttpProvider() {
|
|
17369
17581
|
* - **status** – `{number}` – HTTP status code of the response.
|
17370
17582
|
* - **headers** – `{function([headerName])}` – Header getter function.
|
17371
17583
|
* - **config** – `{Object}` – The configuration object that was used to generate the request.
|
17584
|
+
* - **statusText** – `{string}` – HTTP status text of the response.
|
17372
17585
|
*
|
17373
17586
|
* @property {Array.<Object>} pendingRequests Array of config objects for currently pending
|
17374
17587
|
* requests. This is primarily meant to be used for debugging purposes.
|
@@ -17743,9 +17956,9 @@ function $HttpProvider() {
|
|
17743
17956
|
} else {
|
17744
17957
|
// serving from cache
|
17745
17958
|
if (isArray(cachedResp)) {
|
17746
|
-
resolvePromise(cachedResp[1], cachedResp[0], copy(cachedResp[2]));
|
17959
|
+
resolvePromise(cachedResp[1], cachedResp[0], copy(cachedResp[2]), cachedResp[3]);
|
17747
17960
|
} else {
|
17748
|
-
resolvePromise(cachedResp, 200, {});
|
17961
|
+
resolvePromise(cachedResp, 200, {}, 'OK');
|
17749
17962
|
}
|
17750
17963
|
}
|
17751
17964
|
} else {
|
@@ -17769,17 +17982,17 @@ function $HttpProvider() {
|
|
17769
17982
|
* - resolves the raw $http promise
|
17770
17983
|
* - calls $apply
|
17771
17984
|
*/
|
17772
|
-
function done(status, response, headersString) {
|
17985
|
+
function done(status, response, headersString, statusText) {
|
17773
17986
|
if (cache) {
|
17774
17987
|
if (isSuccess(status)) {
|
17775
|
-
cache.put(url, [status, response, parseHeaders(headersString)]);
|
17988
|
+
cache.put(url, [status, response, parseHeaders(headersString), statusText]);
|
17776
17989
|
} else {
|
17777
17990
|
// remove promise from the cache
|
17778
17991
|
cache.remove(url);
|
17779
17992
|
}
|
17780
17993
|
}
|
17781
17994
|
|
17782
|
-
resolvePromise(response, status, headersString);
|
17995
|
+
resolvePromise(response, status, headersString, statusText);
|
17783
17996
|
if (!$rootScope.$$phase) $rootScope.$apply();
|
17784
17997
|
}
|
17785
17998
|
|
@@ -17787,7 +18000,7 @@ function $HttpProvider() {
|
|
17787
18000
|
/**
|
17788
18001
|
* Resolves the raw $http promise.
|
17789
18002
|
*/
|
17790
|
-
function resolvePromise(response, status, headers) {
|
18003
|
+
function resolvePromise(response, status, headers, statusText) {
|
17791
18004
|
// normalize internal statuses to 0
|
17792
18005
|
status = Math.max(status, 0);
|
17793
18006
|
|
@@ -17795,7 +18008,8 @@ function $HttpProvider() {
|
|
17795
18008
|
data: response,
|
17796
18009
|
status: status,
|
17797
18010
|
headers: headersGetter(headers),
|
17798
|
-
config: config
|
18011
|
+
config: config,
|
18012
|
+
statusText : statusText
|
17799
18013
|
});
|
17800
18014
|
}
|
17801
18015
|
|
@@ -17929,7 +18143,8 @@ function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDoc
|
|
17929
18143
|
completeRequest(callback,
|
17930
18144
|
status || xhr.status,
|
17931
18145
|
response,
|
17932
|
-
responseHeaders
|
18146
|
+
responseHeaders,
|
18147
|
+
xhr.statusText || '');
|
17933
18148
|
}
|
17934
18149
|
};
|
17935
18150
|
|
@@ -17970,7 +18185,7 @@ function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDoc
|
|
17970
18185
|
xhr && xhr.abort();
|
17971
18186
|
}
|
17972
18187
|
|
17973
|
-
function completeRequest(callback, status, response, headersString) {
|
18188
|
+
function completeRequest(callback, status, response, headersString, statusText) {
|
17974
18189
|
// cancel timeout and subsequent timeout promise resolution
|
17975
18190
|
timeoutId && $browserDefer.cancel(timeoutId);
|
17976
18191
|
jsonpDone = xhr = null;
|
@@ -17983,9 +18198,10 @@ function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDoc
|
|
17983
18198
|
}
|
17984
18199
|
|
17985
18200
|
// normalize IE bug (http://bugs.jquery.com/ticket/1450)
|
17986
|
-
status = status
|
18201
|
+
status = status === 1223 ? 204 : status;
|
18202
|
+
statusText = statusText || '';
|
17987
18203
|
|
17988
|
-
callback(status, response, headersString);
|
18204
|
+
callback(status, response, headersString, statusText);
|
17989
18205
|
$browser.$$completeOutstandingRequest(noop);
|
17990
18206
|
}
|
17991
18207
|
};
|
@@ -19021,8 +19237,7 @@ function locationGetterSetter(property, preprocess) {
|
|
19021
19237
|
* - Clicks on a link.
|
19022
19238
|
* - Represents the URL object as a set of methods (protocol, host, port, path, search, hash).
|
19023
19239
|
*
|
19024
|
-
* For more information see {@link guide
|
19025
|
-
* Services: Using $location}
|
19240
|
+
* For more information see {@link guide/$location Developer Guide: Using $location}
|
19026
19241
|
*/
|
19027
19242
|
|
19028
19243
|
/**
|
@@ -19758,7 +19973,11 @@ var Parser = function (lexer, $filter, options) {
|
|
19758
19973
|
this.options = options;
|
19759
19974
|
};
|
19760
19975
|
|
19761
|
-
Parser.ZERO = function () {
|
19976
|
+
Parser.ZERO = extend(function () {
|
19977
|
+
return 0;
|
19978
|
+
}, {
|
19979
|
+
constant: true
|
19980
|
+
});
|
19762
19981
|
|
19763
19982
|
Parser.prototype = {
|
19764
19983
|
constructor: Parser,
|
@@ -21503,7 +21722,8 @@ function $RootScopeProvider(){
|
|
21503
21722
|
* - `function(newValue, oldValue, scope)`: called with current and previous values as
|
21504
21723
|
* parameters.
|
21505
21724
|
*
|
21506
|
-
* @param {boolean=} objectEquality Compare object
|
21725
|
+
* @param {boolean=} objectEquality Compare for object equality using {@link angular.equals} instead of
|
21726
|
+
* comparing for reference equality.
|
21507
21727
|
* @returns {function()} Returns a deregistration function for this listener.
|
21508
21728
|
*/
|
21509
21729
|
$watch: function(watchExp, listener, objectEquality) {
|
@@ -21924,15 +22144,32 @@ function $RootScopeProvider(){
|
|
21924
22144
|
|
21925
22145
|
forEach(this.$$listenerCount, bind(null, decrementListenerCount, this));
|
21926
22146
|
|
22147
|
+
// sever all the references to parent scopes (after this cleanup, the current scope should
|
22148
|
+
// not be retained by any of our references and should be eligible for garbage collection)
|
21927
22149
|
if (parent.$$childHead == this) parent.$$childHead = this.$$nextSibling;
|
21928
22150
|
if (parent.$$childTail == this) parent.$$childTail = this.$$prevSibling;
|
21929
22151
|
if (this.$$prevSibling) this.$$prevSibling.$$nextSibling = this.$$nextSibling;
|
21930
22152
|
if (this.$$nextSibling) this.$$nextSibling.$$prevSibling = this.$$prevSibling;
|
21931
22153
|
|
21932
|
-
|
21933
|
-
//
|
22154
|
+
|
22155
|
+
// All of the code below is bogus code that works around V8's memory leak via optimized code
|
22156
|
+
// and inline caches.
|
22157
|
+
//
|
22158
|
+
// see:
|
22159
|
+
// - https://code.google.com/p/v8/issues/detail?id=2073#c26
|
22160
|
+
// - https://github.com/angular/angular.js/issues/6794#issuecomment-38648909
|
22161
|
+
// - https://github.com/angular/angular.js/issues/1313#issuecomment-10378451
|
22162
|
+
|
21934
22163
|
this.$parent = this.$$nextSibling = this.$$prevSibling = this.$$childHead =
|
21935
|
-
this.$$childTail = null;
|
22164
|
+
this.$$childTail = this.$root = null;
|
22165
|
+
|
22166
|
+
// don't reset these to null in case some async task tries to register a listener/watch/task
|
22167
|
+
this.$$listeners = {};
|
22168
|
+
this.$$watchers = this.$$asyncQueue = this.$$postDigestQueue = [];
|
22169
|
+
|
22170
|
+
// prevent NPEs since these methods have references to properties we nulled out
|
22171
|
+
this.$destroy = this.$digest = this.$apply = noop;
|
22172
|
+
this.$on = this.$watch = function() { return noop; };
|
21936
22173
|
},
|
21937
22174
|
|
21938
22175
|
/**
|
@@ -22901,7 +23138,7 @@ function $SceDelegateProvider() {
|
|
22901
23138
|
* | `$sce.HTML` | For HTML that's safe to source into the application. The {@link ng.directive:ngBindHtml ngBindHtml} directive uses this context for bindings. |
|
22902
23139
|
* | `$sce.CSS` | For CSS that's safe to source into the application. Currently unused. Feel free to use it in your own directives. |
|
22903
23140
|
* | `$sce.URL` | For URLs that are safe to follow as links. Currently unused (`<a href=` and `<img src=` sanitize their urls and don't constitute an SCE context. |
|
22904
|
-
* | `$sce.RESOURCE_URL` | For URLs that are not only safe to follow as links, but whose
|
23141
|
+
* | `$sce.RESOURCE_URL` | For URLs that are not only safe to follow as links, but whose contents are also safe to include in your application. Examples include `ng-include`, `src` / `ngSrc` bindings for tags other than `IMG` (e.g. `IFRAME`, `OBJECT`, etc.) <br><br>Note that `$sce.RESOURCE_URL` makes a stronger statement about the URL than `$sce.URL` does and therefore contexts requiring values trusted for `$sce.RESOURCE_URL` can be used anywhere that values trusted for `$sce.URL` are required. |
|
22905
23142
|
* | `$sce.JS` | For JavaScript that is safe to execute in your application's context. Currently unused. Feel free to use it in your own directives. |
|
22906
23143
|
*
|
22907
23144
|
* ## Format of items in {@link ng.$sceDelegateProvider#resourceUrlWhitelist resourceUrlWhitelist}/{@link ng.$sceDelegateProvider#resourceUrlBlacklist Blacklist} <a name="resourceUrlPatternItem"></a>
|
@@ -24719,7 +24956,7 @@ function limitToFilter(){
|
|
24719
24956
|
* - `Array`: An array of function or string predicates. The first predicate in the array
|
24720
24957
|
* is used for sorting, but when two items are equivalent, the next predicate is used.
|
24721
24958
|
*
|
24722
|
-
* @param {boolean=} reverse Reverse the order the array.
|
24959
|
+
* @param {boolean=} reverse Reverse the order of the array.
|
24723
24960
|
* @returns {Array} Sorted copy of the source array.
|
24724
24961
|
*
|
24725
24962
|
* @example
|
@@ -25484,6 +25721,10 @@ function FormController(element, attrs, $scope, $animate) {
|
|
25484
25721
|
* does not allow nesting of form elements. It is useful to nest forms, for example if the validity of a
|
25485
25722
|
* sub-group of controls needs to be determined.
|
25486
25723
|
*
|
25724
|
+
* Note: the purpose of `ngForm` is to group controls,
|
25725
|
+
* but not to be a replacement for the `<form>` tag with all of its capabilities
|
25726
|
+
* (e.g. posting to the server, ...).
|
25727
|
+
*
|
25487
25728
|
* @param {string=} ngForm|name Name of the form. If specified, the form controller will be published into
|
25488
25729
|
* related scope, under this name.
|
25489
25730
|
*
|
@@ -26140,7 +26381,6 @@ function addNativeHtml5Validators(ctrl, validatorName, element) {
|
|
26140
26381
|
return value;
|
26141
26382
|
};
|
26142
26383
|
ctrl.$parsers.push(validator);
|
26143
|
-
ctrl.$formatters.push(validator);
|
26144
26384
|
}
|
26145
26385
|
}
|
26146
26386
|
|
@@ -27467,7 +27707,7 @@ var ngBindHtmlDirective = ['$sce', '$parse', function($sce, $parse) {
|
|
27467
27707
|
|
27468
27708
|
function classDirective(name, selector) {
|
27469
27709
|
name = 'ngClass' + name;
|
27470
|
-
return function() {
|
27710
|
+
return ['$animate', function($animate) {
|
27471
27711
|
return {
|
27472
27712
|
restrict: 'AC',
|
27473
27713
|
link: function(scope, element, attr) {
|
@@ -27485,46 +27725,100 @@ function classDirective(name, selector) {
|
|
27485
27725
|
// jshint bitwise: false
|
27486
27726
|
var mod = $index & 1;
|
27487
27727
|
if (mod !== old$index & 1) {
|
27488
|
-
var classes =
|
27728
|
+
var classes = arrayClasses(scope.$eval(attr[name]));
|
27489
27729
|
mod === selector ?
|
27490
|
-
|
27491
|
-
|
27730
|
+
addClasses(classes) :
|
27731
|
+
removeClasses(classes);
|
27732
|
+
}
|
27733
|
+
});
|
27734
|
+
}
|
27735
|
+
|
27736
|
+
function addClasses(classes) {
|
27737
|
+
var newClasses = digestClassCounts(classes, 1);
|
27738
|
+
attr.$addClass(newClasses);
|
27739
|
+
}
|
27740
|
+
|
27741
|
+
function removeClasses(classes) {
|
27742
|
+
var newClasses = digestClassCounts(classes, -1);
|
27743
|
+
attr.$removeClass(newClasses);
|
27744
|
+
}
|
27745
|
+
|
27746
|
+
function digestClassCounts (classes, count) {
|
27747
|
+
var classCounts = element.data('$classCounts') || {};
|
27748
|
+
var classesToUpdate = [];
|
27749
|
+
forEach(classes, function (className) {
|
27750
|
+
if (count > 0 || classCounts[className]) {
|
27751
|
+
classCounts[className] = (classCounts[className] || 0) + count;
|
27752
|
+
if (classCounts[className] === +(count > 0)) {
|
27753
|
+
classesToUpdate.push(className);
|
27754
|
+
}
|
27492
27755
|
}
|
27493
27756
|
});
|
27757
|
+
element.data('$classCounts', classCounts);
|
27758
|
+
return classesToUpdate.join(' ');
|
27494
27759
|
}
|
27495
27760
|
|
27761
|
+
function updateClasses (oldClasses, newClasses) {
|
27762
|
+
var toAdd = arrayDifference(newClasses, oldClasses);
|
27763
|
+
var toRemove = arrayDifference(oldClasses, newClasses);
|
27764
|
+
toRemove = digestClassCounts(toRemove, -1);
|
27765
|
+
toAdd = digestClassCounts(toAdd, 1);
|
27766
|
+
|
27767
|
+
if (toAdd.length === 0) {
|
27768
|
+
$animate.removeClass(element, toRemove);
|
27769
|
+
} else if (toRemove.length === 0) {
|
27770
|
+
$animate.addClass(element, toAdd);
|
27771
|
+
} else {
|
27772
|
+
$animate.setClass(element, toAdd, toRemove);
|
27773
|
+
}
|
27774
|
+
}
|
27496
27775
|
|
27497
27776
|
function ngClassWatchAction(newVal) {
|
27498
27777
|
if (selector === true || scope.$index % 2 === selector) {
|
27499
|
-
var newClasses =
|
27500
|
-
if(!oldVal) {
|
27501
|
-
|
27502
|
-
} else if(!equals(newVal,oldVal)) {
|
27503
|
-
|
27778
|
+
var newClasses = arrayClasses(newVal || []);
|
27779
|
+
if (!oldVal) {
|
27780
|
+
addClasses(newClasses);
|
27781
|
+
} else if (!equals(newVal,oldVal)) {
|
27782
|
+
var oldClasses = arrayClasses(oldVal);
|
27783
|
+
updateClasses(oldClasses, newClasses);
|
27504
27784
|
}
|
27505
27785
|
}
|
27506
27786
|
oldVal = copy(newVal);
|
27507
27787
|
}
|
27788
|
+
}
|
27789
|
+
};
|
27508
27790
|
|
27791
|
+
function arrayDifference(tokens1, tokens2) {
|
27792
|
+
var values = [];
|
27509
27793
|
|
27510
|
-
|
27511
|
-
|
27512
|
-
|
27513
|
-
|
27514
|
-
|
27515
|
-
forEach(classVal, function(v, k) {
|
27516
|
-
if (v) {
|
27517
|
-
classes.push(k);
|
27518
|
-
}
|
27519
|
-
});
|
27520
|
-
return classes.join(' ');
|
27521
|
-
}
|
27522
|
-
|
27523
|
-
return classVal;
|
27794
|
+
outer:
|
27795
|
+
for(var i = 0; i < tokens1.length; i++) {
|
27796
|
+
var token = tokens1[i];
|
27797
|
+
for(var j = 0; j < tokens2.length; j++) {
|
27798
|
+
if(token == tokens2[j]) continue outer;
|
27524
27799
|
}
|
27800
|
+
values.push(token);
|
27525
27801
|
}
|
27526
|
-
|
27527
|
-
|
27802
|
+
return values;
|
27803
|
+
}
|
27804
|
+
|
27805
|
+
function arrayClasses (classVal) {
|
27806
|
+
if (isArray(classVal)) {
|
27807
|
+
return classVal;
|
27808
|
+
} else if (isString(classVal)) {
|
27809
|
+
return classVal.split(' ');
|
27810
|
+
} else if (isObject(classVal)) {
|
27811
|
+
var classes = [], i = 0;
|
27812
|
+
forEach(classVal, function(v, k) {
|
27813
|
+
if (v) {
|
27814
|
+
classes.push(k);
|
27815
|
+
}
|
27816
|
+
});
|
27817
|
+
return classes;
|
27818
|
+
}
|
27819
|
+
return classVal;
|
27820
|
+
}
|
27821
|
+
}];
|
27528
27822
|
}
|
27529
27823
|
|
27530
27824
|
/**
|
@@ -28085,7 +28379,7 @@ var ngControllerDirective = [function() {
|
|
28085
28379
|
* @element ANY
|
28086
28380
|
* @priority 0
|
28087
28381
|
* @param {expression} ngClick {@link guide/expression Expression} to evaluate upon
|
28088
|
-
* click. (Event object is available as `$event`)
|
28382
|
+
* click. ({@link guide/expression#-event- Event object is available as `$event`})
|
28089
28383
|
*
|
28090
28384
|
* @example
|
28091
28385
|
<example>
|
@@ -28166,7 +28460,7 @@ forEach(
|
|
28166
28460
|
* @element ANY
|
28167
28461
|
* @priority 0
|
28168
28462
|
* @param {expression} ngMousedown {@link guide/expression Expression} to evaluate upon
|
28169
|
-
* mousedown. (Event object is available as `$event`)
|
28463
|
+
* mousedown. ({@link guide/expression#-event- Event object is available as `$event`})
|
28170
28464
|
*
|
28171
28465
|
* @example
|
28172
28466
|
<example>
|
@@ -28190,7 +28484,7 @@ forEach(
|
|
28190
28484
|
* @element ANY
|
28191
28485
|
* @priority 0
|
28192
28486
|
* @param {expression} ngMouseup {@link guide/expression Expression} to evaluate upon
|
28193
|
-
* mouseup. (Event object is available as `$event`)
|
28487
|
+
* mouseup. ({@link guide/expression#-event- Event object is available as `$event`})
|
28194
28488
|
*
|
28195
28489
|
* @example
|
28196
28490
|
<example>
|
@@ -28213,7 +28507,7 @@ forEach(
|
|
28213
28507
|
* @element ANY
|
28214
28508
|
* @priority 0
|
28215
28509
|
* @param {expression} ngMouseover {@link guide/expression Expression} to evaluate upon
|
28216
|
-
* mouseover. (Event object is available as `$event`)
|
28510
|
+
* mouseover. ({@link guide/expression#-event- Event object is available as `$event`})
|
28217
28511
|
*
|
28218
28512
|
* @example
|
28219
28513
|
<example>
|
@@ -28237,7 +28531,7 @@ forEach(
|
|
28237
28531
|
* @element ANY
|
28238
28532
|
* @priority 0
|
28239
28533
|
* @param {expression} ngMouseenter {@link guide/expression Expression} to evaluate upon
|
28240
|
-
* mouseenter. (Event object is available as `$event`)
|
28534
|
+
* mouseenter. ({@link guide/expression#-event- Event object is available as `$event`})
|
28241
28535
|
*
|
28242
28536
|
* @example
|
28243
28537
|
<example>
|
@@ -28261,7 +28555,7 @@ forEach(
|
|
28261
28555
|
* @element ANY
|
28262
28556
|
* @priority 0
|
28263
28557
|
* @param {expression} ngMouseleave {@link guide/expression Expression} to evaluate upon
|
28264
|
-
* mouseleave. (Event object is available as `$event`)
|
28558
|
+
* mouseleave. ({@link guide/expression#-event- Event object is available as `$event`})
|
28265
28559
|
*
|
28266
28560
|
* @example
|
28267
28561
|
<example>
|
@@ -28285,7 +28579,7 @@ forEach(
|
|
28285
28579
|
* @element ANY
|
28286
28580
|
* @priority 0
|
28287
28581
|
* @param {expression} ngMousemove {@link guide/expression Expression} to evaluate upon
|
28288
|
-
* mousemove. (Event object is available as `$event`)
|
28582
|
+
* mousemove. ({@link guide/expression#-event- Event object is available as `$event`})
|
28289
28583
|
*
|
28290
28584
|
* @example
|
28291
28585
|
<example>
|
@@ -28352,7 +28646,8 @@ forEach(
|
|
28352
28646
|
*
|
28353
28647
|
* @element ANY
|
28354
28648
|
* @param {expression} ngKeypress {@link guide/expression Expression} to evaluate upon
|
28355
|
-
* keypress. (Event object is available as `$event`
|
28649
|
+
* keypress. ({@link guide/expression#-event- Event object is available as `$event`}
|
28650
|
+
* and can be interrogated for keyCode, altKey, etc.)
|
28356
28651
|
*
|
28357
28652
|
* @example
|
28358
28653
|
<example>
|
@@ -28377,7 +28672,8 @@ forEach(
|
|
28377
28672
|
*
|
28378
28673
|
* @element form
|
28379
28674
|
* @priority 0
|
28380
|
-
* @param {expression} ngSubmit {@link guide/expression Expression} to eval.
|
28675
|
+
* @param {expression} ngSubmit {@link guide/expression Expression} to eval.
|
28676
|
+
* ({@link guide/expression#-event- Event object is available as `$event`})
|
28381
28677
|
*
|
28382
28678
|
* @example
|
28383
28679
|
<example>
|
@@ -28428,7 +28724,7 @@ forEach(
|
|
28428
28724
|
* @element window, input, select, textarea, a
|
28429
28725
|
* @priority 0
|
28430
28726
|
* @param {expression} ngFocus {@link guide/expression Expression} to evaluate upon
|
28431
|
-
* focus. (Event object is available as `$event`)
|
28727
|
+
* focus. ({@link guide/expression#-event- Event object is available as `$event`})
|
28432
28728
|
*
|
28433
28729
|
* @example
|
28434
28730
|
* See {@link ng.directive:ngClick ngClick}
|
@@ -28444,7 +28740,7 @@ forEach(
|
|
28444
28740
|
* @element window, input, select, textarea, a
|
28445
28741
|
* @priority 0
|
28446
28742
|
* @param {expression} ngBlur {@link guide/expression Expression} to evaluate upon
|
28447
|
-
* blur. (Event object is available as `$event`)
|
28743
|
+
* blur. ({@link guide/expression#-event- Event object is available as `$event`})
|
28448
28744
|
*
|
28449
28745
|
* @example
|
28450
28746
|
* See {@link ng.directive:ngClick ngClick}
|
@@ -28460,7 +28756,7 @@ forEach(
|
|
28460
28756
|
* @element window, input, select, textarea, a
|
28461
28757
|
* @priority 0
|
28462
28758
|
* @param {expression} ngCopy {@link guide/expression Expression} to evaluate upon
|
28463
|
-
* copy. (Event object is available as `$event`)
|
28759
|
+
* copy. ({@link guide/expression#-event- Event object is available as `$event`})
|
28464
28760
|
*
|
28465
28761
|
* @example
|
28466
28762
|
<example>
|
@@ -28481,7 +28777,7 @@ forEach(
|
|
28481
28777
|
* @element window, input, select, textarea, a
|
28482
28778
|
* @priority 0
|
28483
28779
|
* @param {expression} ngCut {@link guide/expression Expression} to evaluate upon
|
28484
|
-
* cut. (Event object is available as `$event`)
|
28780
|
+
* cut. ({@link guide/expression#-event- Event object is available as `$event`})
|
28485
28781
|
*
|
28486
28782
|
* @example
|
28487
28783
|
<example>
|
@@ -28502,7 +28798,7 @@ forEach(
|
|
28502
28798
|
* @element window, input, select, textarea, a
|
28503
28799
|
* @priority 0
|
28504
28800
|
* @param {expression} ngPaste {@link guide/expression Expression} to evaluate upon
|
28505
|
-
* paste. (Event object is available as `$event`)
|
28801
|
+
* paste. ({@link guide/expression#-event- Event object is available as `$event`})
|
28506
28802
|
*
|
28507
28803
|
* @example
|
28508
28804
|
<example>
|
@@ -29775,7 +30071,7 @@ var ngShowDirective = ['$animate', function($animate) {
|
|
29775
30071
|
* in AngularJS and sets the display style to none (using an !important flag).
|
29776
30072
|
* For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}).
|
29777
30073
|
*
|
29778
|
-
* ```
|
30074
|
+
* ```html
|
29779
30075
|
* <!-- when $scope.myValue is truthy (element is hidden) -->
|
29780
30076
|
* <div ng-hide="myValue"></div>
|
29781
30077
|
*
|