angularjs-rails 1.4.4 → 1.4.7
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 +266 -123
- data/vendor/assets/javascripts/angular-aria.js +40 -36
- data/vendor/assets/javascripts/angular-cookies.js +2 -2
- data/vendor/assets/javascripts/angular-loader.js +2 -2
- data/vendor/assets/javascripts/angular-message-format.js +1 -1
- data/vendor/assets/javascripts/angular-messages.js +9 -2
- data/vendor/assets/javascripts/angular-mocks.js +62 -25
- data/vendor/assets/javascripts/angular-resource.js +10 -4
- data/vendor/assets/javascripts/angular-route.js +1 -2
- data/vendor/assets/javascripts/angular-sanitize.js +1 -1
- data/vendor/assets/javascripts/angular-scenario.js +625 -325
- data/vendor/assets/javascripts/angular-touch.js +1 -1
- data/vendor/assets/javascripts/angular.js +624 -324
- data/vendor/assets/javascripts/unstable/angular2.js +13370 -14106
- metadata +2 -2
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license AngularJS v1.4.
|
2
|
+
* @license AngularJS v1.4.7
|
3
3
|
* (c) 2010-2015 Google, Inc. http://angularjs.org
|
4
4
|
* License: MIT
|
5
5
|
*/
|
@@ -57,6 +57,16 @@
|
|
57
57
|
var ngAriaModule = angular.module('ngAria', ['ng']).
|
58
58
|
provider('$aria', $AriaProvider);
|
59
59
|
|
60
|
+
/**
|
61
|
+
* Internal Utilities
|
62
|
+
*/
|
63
|
+
var nodeBlackList = ['BUTTON', 'A', 'INPUT', 'TEXTAREA', 'SELECT', 'DETAILS', 'SUMMARY'];
|
64
|
+
|
65
|
+
var isNodeOneOf = function(elem, nodeTypeArray) {
|
66
|
+
if (nodeTypeArray.indexOf(elem[0].nodeName) !== -1) {
|
67
|
+
return true;
|
68
|
+
}
|
69
|
+
};
|
60
70
|
/**
|
61
71
|
* @ngdoc provider
|
62
72
|
* @name $ariaProvider
|
@@ -118,10 +128,10 @@ function $AriaProvider() {
|
|
118
128
|
config = angular.extend(config, newConfig);
|
119
129
|
};
|
120
130
|
|
121
|
-
function watchExpr(attrName, ariaAttr, negate) {
|
131
|
+
function watchExpr(attrName, ariaAttr, nodeBlackList, negate) {
|
122
132
|
return function(scope, elem, attr) {
|
123
133
|
var ariaCamelName = attr.$normalize(ariaAttr);
|
124
|
-
if (config[ariaCamelName] && !attr[ariaCamelName]) {
|
134
|
+
if (config[ariaCamelName] && !isNodeOneOf(elem, nodeBlackList) && !attr[ariaCamelName]) {
|
125
135
|
scope.$watch(attr[attrName], function(boolVal) {
|
126
136
|
// ensure boolean value
|
127
137
|
boolVal = negate ? !boolVal : !!boolVal;
|
@@ -130,7 +140,6 @@ function $AriaProvider() {
|
|
130
140
|
}
|
131
141
|
};
|
132
142
|
}
|
133
|
-
|
134
143
|
/**
|
135
144
|
* @ngdoc service
|
136
145
|
* @name $aria
|
@@ -189,10 +198,10 @@ function $AriaProvider() {
|
|
189
198
|
|
190
199
|
|
191
200
|
ngAriaModule.directive('ngShow', ['$aria', function($aria) {
|
192
|
-
return $aria.$$watchExpr('ngShow', 'aria-hidden', true);
|
201
|
+
return $aria.$$watchExpr('ngShow', 'aria-hidden', [], true);
|
193
202
|
}])
|
194
203
|
.directive('ngHide', ['$aria', function($aria) {
|
195
|
-
return $aria.$$watchExpr('ngHide', 'aria-hidden', false);
|
204
|
+
return $aria.$$watchExpr('ngHide', 'aria-hidden', [], false);
|
196
205
|
}])
|
197
206
|
.directive('ngModel', ['$aria', function($aria) {
|
198
207
|
|
@@ -266,6 +275,9 @@ ngAriaModule.directive('ngShow', ['$aria', function($aria) {
|
|
266
275
|
scope.$watch(ngAriaWatchModelValue, shape === 'radio' ?
|
267
276
|
getRadioReaction() : ngAriaCheckboxReaction);
|
268
277
|
}
|
278
|
+
if (needsTabIndex) {
|
279
|
+
elem.attr('tabindex', 0);
|
280
|
+
}
|
269
281
|
break;
|
270
282
|
case 'range':
|
271
283
|
if (shouldAttachRole(shape, elem)) {
|
@@ -294,6 +306,9 @@ ngAriaModule.directive('ngShow', ['$aria', function($aria) {
|
|
294
306
|
});
|
295
307
|
}
|
296
308
|
}
|
309
|
+
if (needsTabIndex) {
|
310
|
+
elem.attr('tabindex', 0);
|
311
|
+
}
|
297
312
|
break;
|
298
313
|
case 'multiline':
|
299
314
|
if (shouldAttachAttr('aria-multiline', 'ariaMultiline', elem)) {
|
@@ -302,10 +317,6 @@ ngAriaModule.directive('ngShow', ['$aria', function($aria) {
|
|
302
317
|
break;
|
303
318
|
}
|
304
319
|
|
305
|
-
if (needsTabIndex) {
|
306
|
-
elem.attr('tabindex', 0);
|
307
|
-
}
|
308
|
-
|
309
320
|
if (ngModel.$validators.required && shouldAttachAttr('aria-required', 'ariaRequired', elem)) {
|
310
321
|
scope.$watch(function ngAriaRequiredWatch() {
|
311
322
|
return ngModel.$error.required;
|
@@ -327,7 +338,7 @@ ngAriaModule.directive('ngShow', ['$aria', function($aria) {
|
|
327
338
|
};
|
328
339
|
}])
|
329
340
|
.directive('ngDisabled', ['$aria', function($aria) {
|
330
|
-
return $aria.$$watchExpr('ngDisabled', 'aria-disabled');
|
341
|
+
return $aria.$$watchExpr('ngDisabled', 'aria-disabled', []);
|
331
342
|
}])
|
332
343
|
.directive('ngMessages', function() {
|
333
344
|
return {
|
@@ -347,35 +358,28 @@ ngAriaModule.directive('ngShow', ['$aria', function($aria) {
|
|
347
358
|
var fn = $parse(attr.ngClick, /* interceptorFn */ null, /* expensiveChecks */ true);
|
348
359
|
return function(scope, elem, attr) {
|
349
360
|
|
350
|
-
|
361
|
+
if (!isNodeOneOf(elem, nodeBlackList)) {
|
351
362
|
|
352
|
-
|
353
|
-
|
354
|
-
return true;
|
363
|
+
if ($aria.config('bindRoleForClick') && !elem.attr('role')) {
|
364
|
+
elem.attr('role', 'button');
|
355
365
|
}
|
356
|
-
}
|
357
366
|
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
elem.attr('role', 'button');
|
362
|
-
}
|
363
|
-
|
364
|
-
if ($aria.config('tabindex') && !elem.attr('tabindex')) {
|
365
|
-
elem.attr('tabindex', 0);
|
366
|
-
}
|
367
|
+
if ($aria.config('tabindex') && !elem.attr('tabindex')) {
|
368
|
+
elem.attr('tabindex', 0);
|
369
|
+
}
|
367
370
|
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
371
|
+
if ($aria.config('bindKeypress') && !attr.ngKeypress) {
|
372
|
+
elem.on('keypress', function(event) {
|
373
|
+
var keyCode = event.which || event.keyCode;
|
374
|
+
if (keyCode === 32 || keyCode === 13) {
|
375
|
+
scope.$apply(callback);
|
376
|
+
}
|
374
377
|
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
378
|
+
function callback() {
|
379
|
+
fn(scope, { $event: event });
|
380
|
+
}
|
381
|
+
});
|
382
|
+
}
|
379
383
|
}
|
380
384
|
};
|
381
385
|
}
|
@@ -383,7 +387,7 @@ ngAriaModule.directive('ngShow', ['$aria', function($aria) {
|
|
383
387
|
}])
|
384
388
|
.directive('ngDblclick', ['$aria', function($aria) {
|
385
389
|
return function(scope, elem, attr) {
|
386
|
-
if ($aria.config('tabindex') && !elem.attr('tabindex')) {
|
390
|
+
if ($aria.config('tabindex') && !elem.attr('tabindex') && !isNodeOneOf(elem, nodeBlackList)) {
|
387
391
|
elem.attr('tabindex', 0);
|
388
392
|
}
|
389
393
|
};
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license AngularJS v1.4.
|
2
|
+
* @license AngularJS v1.4.7
|
3
3
|
* (c) 2010-2015 Google, Inc. http://angularjs.org
|
4
4
|
* License: MIT
|
5
5
|
*/
|
@@ -278,7 +278,7 @@ function $$CookieWriter($document, $log, $browser) {
|
|
278
278
|
options = options || {};
|
279
279
|
expires = options.expires;
|
280
280
|
path = angular.isDefined(options.path) ? options.path : cookiePath;
|
281
|
-
if (value
|
281
|
+
if (angular.isUndefined(value)) {
|
282
282
|
expires = 'Thu, 01 Jan 1970 00:00:00 GMT';
|
283
283
|
value = '';
|
284
284
|
}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license AngularJS v1.4.
|
2
|
+
* @license AngularJS v1.4.7
|
3
3
|
* (c) 2010-2015 Google, Inc. http://angularjs.org
|
4
4
|
* License: MIT
|
5
5
|
*/
|
@@ -59,7 +59,7 @@ function minErr(module, ErrorConstructor) {
|
|
59
59
|
return match;
|
60
60
|
});
|
61
61
|
|
62
|
-
message += '\nhttp://errors.angularjs.org/1.4.
|
62
|
+
message += '\nhttp://errors.angularjs.org/1.4.7/' +
|
63
63
|
(module ? module + '/' : '') + code;
|
64
64
|
|
65
65
|
for (i = SKIP_INDEXES, paramPrefix = '?'; i < templateArgs.length; i++, paramPrefix = '&') {
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license AngularJS v1.4.
|
2
|
+
* @license AngularJS v1.4.7
|
3
3
|
* (c) 2010-2015 Google, Inc. http://angularjs.org
|
4
4
|
* License: MIT
|
5
5
|
*/
|
@@ -330,6 +330,9 @@ angular.module('ngMessages', [])
|
|
330
330
|
controller: ['$element', '$scope', '$attrs', function($element, $scope, $attrs) {
|
331
331
|
var ctrl = this;
|
332
332
|
var latestKey = 0;
|
333
|
+
var nextAttachId = 0;
|
334
|
+
|
335
|
+
this.getAttachId = function getAttachId() { return nextAttachId++; };
|
333
336
|
|
334
337
|
var messages = this.messages = {};
|
335
338
|
var renderLater, cachedCollection;
|
@@ -641,11 +644,15 @@ function ngMessageDirectiveFactory(restrict) {
|
|
641
644
|
$animate.enter(elm, null, element);
|
642
645
|
currentElement = elm;
|
643
646
|
|
647
|
+
// Each time we attach this node to a message we get a new id that we can match
|
648
|
+
// when we are destroying the node later.
|
649
|
+
var $$attachId = currentElement.$$attachId = ngMessagesCtrl.getAttachId();
|
650
|
+
|
644
651
|
// in the event that the parent element is destroyed
|
645
652
|
// by any other structural directive then it's time
|
646
653
|
// to deregister the message from the controller
|
647
654
|
currentElement.on('$destroy', function() {
|
648
|
-
if (currentElement) {
|
655
|
+
if (currentElement && currentElement.$$attachId === $$attachId) {
|
649
656
|
ngMessagesCtrl.deregister(commentNode);
|
650
657
|
messageCtrl.detach();
|
651
658
|
}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license AngularJS v1.4.
|
2
|
+
* @license AngularJS v1.4.7
|
3
3
|
* (c) 2010-2015 Google, Inc. http://angularjs.org
|
4
4
|
* License: MIT
|
5
5
|
*/
|
@@ -94,7 +94,7 @@ angular.mock.$Browser = function() {
|
|
94
94
|
if (fn.id === deferId) fnIndex = index;
|
95
95
|
});
|
96
96
|
|
97
|
-
if (fnIndex
|
97
|
+
if (angular.isDefined(fnIndex)) {
|
98
98
|
self.deferredFns.splice(fnIndex, 1);
|
99
99
|
return true;
|
100
100
|
}
|
@@ -469,7 +469,7 @@ angular.mock.$IntervalProvider = function() {
|
|
469
469
|
if (fn.id === promise.$$intervalId) fnIndex = index;
|
470
470
|
});
|
471
471
|
|
472
|
-
if (fnIndex
|
472
|
+
if (angular.isDefined(fnIndex)) {
|
473
473
|
repeatFns.splice(fnIndex, 1);
|
474
474
|
}
|
475
475
|
}
|
@@ -511,7 +511,7 @@ angular.mock.$IntervalProvider = function() {
|
|
511
511
|
if (fn.id === promise.$$intervalId) fnIndex = index;
|
512
512
|
});
|
513
513
|
|
514
|
-
if (fnIndex
|
514
|
+
if (angular.isDefined(fnIndex)) {
|
515
515
|
repeatFns[fnIndex].deferred.reject('canceled');
|
516
516
|
repeatFns.splice(fnIndex, 1);
|
517
517
|
return true;
|
@@ -770,25 +770,62 @@ angular.mock.animate = angular.module('ngAnimateMock', ['ng'])
|
|
770
770
|
return reflowFn;
|
771
771
|
});
|
772
772
|
|
773
|
-
$provide.
|
774
|
-
|
773
|
+
$provide.factory('$$animateAsyncRun', function() {
|
774
|
+
var queue = [];
|
775
|
+
var queueFn = function() {
|
776
|
+
return function(fn) {
|
777
|
+
queue.push(fn);
|
778
|
+
};
|
779
|
+
};
|
780
|
+
queueFn.flush = function() {
|
781
|
+
if (queue.length === 0) return false;
|
775
782
|
|
783
|
+
for (var i = 0; i < queue.length; i++) {
|
784
|
+
queue[i]();
|
785
|
+
}
|
786
|
+
queue = [];
|
787
|
+
|
788
|
+
return true;
|
789
|
+
};
|
790
|
+
return queueFn;
|
791
|
+
});
|
792
|
+
|
793
|
+
$provide.decorator('$animate', ['$delegate', '$timeout', '$browser', '$$rAF',
|
794
|
+
'$$forceReflow', '$$animateAsyncRun', '$rootScope',
|
795
|
+
function($delegate, $timeout, $browser, $$rAF,
|
796
|
+
$$forceReflow, $$animateAsyncRun, $rootScope) {
|
776
797
|
var animate = {
|
777
798
|
queue: [],
|
778
799
|
cancel: $delegate.cancel,
|
800
|
+
on: $delegate.on,
|
801
|
+
off: $delegate.off,
|
802
|
+
pin: $delegate.pin,
|
779
803
|
get reflows() {
|
780
804
|
return $$forceReflow.totalReflows;
|
781
805
|
},
|
782
806
|
enabled: $delegate.enabled,
|
783
|
-
|
784
|
-
|
785
|
-
|
786
|
-
|
787
|
-
|
788
|
-
|
789
|
-
|
790
|
-
|
791
|
-
|
807
|
+
flush: function() {
|
808
|
+
$rootScope.$digest();
|
809
|
+
|
810
|
+
var doNextRun, somethingFlushed = false;
|
811
|
+
do {
|
812
|
+
doNextRun = false;
|
813
|
+
|
814
|
+
if ($$rAF.queue.length) {
|
815
|
+
$$rAF.flush();
|
816
|
+
doNextRun = somethingFlushed = true;
|
817
|
+
}
|
818
|
+
|
819
|
+
if ($$animateAsyncRun.flush()) {
|
820
|
+
doNextRun = somethingFlushed = true;
|
821
|
+
}
|
822
|
+
} while (doNextRun);
|
823
|
+
|
824
|
+
if (!somethingFlushed) {
|
825
|
+
throw new Error('No pending animations ready to be closed or flushed');
|
826
|
+
}
|
827
|
+
|
828
|
+
$rootScope.$digest();
|
792
829
|
}
|
793
830
|
};
|
794
831
|
|
@@ -1005,7 +1042,7 @@ angular.mock.dump = function(object) {
|
|
1005
1042
|
$http.post('/add-msg.py', message, { headers: headers } ).success(function(response) {
|
1006
1043
|
$scope.status = '';
|
1007
1044
|
}).error(function() {
|
1008
|
-
$scope.status = '
|
1045
|
+
$scope.status = 'Failed...';
|
1009
1046
|
});
|
1010
1047
|
};
|
1011
1048
|
}
|
@@ -1740,28 +1777,28 @@ angular.mock.$TimeoutDecorator = ['$delegate', '$browser', function($delegate, $
|
|
1740
1777
|
}];
|
1741
1778
|
|
1742
1779
|
angular.mock.$RAFDecorator = ['$delegate', function($delegate) {
|
1743
|
-
var queue = [];
|
1744
1780
|
var rafFn = function(fn) {
|
1745
|
-
var index = queue.length;
|
1746
|
-
queue.push(fn);
|
1781
|
+
var index = rafFn.queue.length;
|
1782
|
+
rafFn.queue.push(fn);
|
1747
1783
|
return function() {
|
1748
|
-
queue.splice(index, 1);
|
1784
|
+
rafFn.queue.splice(index, 1);
|
1749
1785
|
};
|
1750
1786
|
};
|
1751
1787
|
|
1788
|
+
rafFn.queue = [];
|
1752
1789
|
rafFn.supported = $delegate.supported;
|
1753
1790
|
|
1754
1791
|
rafFn.flush = function() {
|
1755
|
-
if (queue.length === 0) {
|
1792
|
+
if (rafFn.queue.length === 0) {
|
1756
1793
|
throw new Error('No rAF callbacks present');
|
1757
1794
|
}
|
1758
1795
|
|
1759
|
-
var length = queue.length;
|
1796
|
+
var length = rafFn.queue.length;
|
1760
1797
|
for (var i = 0; i < length; i++) {
|
1761
|
-
queue[i]();
|
1798
|
+
rafFn.queue[i]();
|
1762
1799
|
}
|
1763
1800
|
|
1764
|
-
queue = queue.slice(i);
|
1801
|
+
rafFn.queue = rafFn.queue.slice(i);
|
1765
1802
|
};
|
1766
1803
|
|
1767
1804
|
return rafFn;
|
@@ -1809,7 +1846,7 @@ angular.mock.$RootElementProvider = function() {
|
|
1809
1846
|
*
|
1810
1847
|
* describe('myDirectiveController', function() {
|
1811
1848
|
* it('should write the bound name to the log', inject(function($controller, $log) {
|
1812
|
-
* var ctrl = $controller('
|
1849
|
+
* var ctrl = $controller('MyDirectiveController', { /* no locals */ }, { name: 'Clark Kent' });
|
1813
1850
|
* expect(ctrl.name).toEqual('Clark Kent');
|
1814
1851
|
* expect($log.info.logs).toEqual(['Clark Kent']);
|
1815
1852
|
* });
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license AngularJS v1.4.
|
2
|
+
* @license AngularJS v1.4.7
|
3
3
|
* (c) 2010-2015 Google, Inc. http://angularjs.org
|
4
4
|
* License: MIT
|
5
5
|
*/
|
@@ -22,7 +22,7 @@ function lookupDottedPath(obj, path) {
|
|
22
22
|
throw $resourceMinErr('badmember', 'Dotted member path "@{0}" is invalid.', path);
|
23
23
|
}
|
24
24
|
var keys = path.split('.');
|
25
|
-
for (var i = 0, ii = keys.length; i < ii && obj
|
25
|
+
for (var i = 0, ii = keys.length; i < ii && angular.isDefined(obj); i++) {
|
26
26
|
var key = keys[i];
|
27
27
|
obj = (obj !== null) ? obj[key] : undefined;
|
28
28
|
}
|
@@ -353,6 +353,7 @@ function shallowClearAndCopy(src, dst) {
|
|
353
353
|
*/
|
354
354
|
angular.module('ngResource', ['ng']).
|
355
355
|
provider('$resource', function() {
|
356
|
+
var PROTOCOL_AND_DOMAIN_REGEX = /^https?:\/\/[^\/]*/;
|
356
357
|
var provider = this;
|
357
358
|
|
358
359
|
this.defaults = {
|
@@ -427,7 +428,8 @@ angular.module('ngResource', ['ng']).
|
|
427
428
|
var self = this,
|
428
429
|
url = actionUrl || self.template,
|
429
430
|
val,
|
430
|
-
encodedVal
|
431
|
+
encodedVal,
|
432
|
+
protocolAndDomain = '';
|
431
433
|
|
432
434
|
var urlParams = self.urlParams = {};
|
433
435
|
forEach(url.split(/\W/), function(param) {
|
@@ -440,6 +442,10 @@ angular.module('ngResource', ['ng']).
|
|
440
442
|
}
|
441
443
|
});
|
442
444
|
url = url.replace(/\\:/g, ':');
|
445
|
+
url = url.replace(PROTOCOL_AND_DOMAIN_REGEX, function(match) {
|
446
|
+
protocolAndDomain = match;
|
447
|
+
return '';
|
448
|
+
});
|
443
449
|
|
444
450
|
params = params || {};
|
445
451
|
forEach(self.urlParams, function(_, urlParam) {
|
@@ -470,7 +476,7 @@ angular.module('ngResource', ['ng']).
|
|
470
476
|
// E.g. `http://url.com/id./format?q=x` becomes `http://url.com/id.format?q=x`
|
471
477
|
url = url.replace(/\/\.(?=\w+($|\?))/, '.');
|
472
478
|
// replace escaped `/\.` with `/.`
|
473
|
-
config.url = url.replace(/\/\\\./, '/.');
|
479
|
+
config.url = protocolAndDomain + url.replace(/\/\\\./, '/.');
|
474
480
|
|
475
481
|
|
476
482
|
// set params - delegate param encoding to $http
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license AngularJS v1.4.
|
2
|
+
* @license AngularJS v1.4.7
|
3
3
|
* (c) 2010-2015 Google, Inc. http://angularjs.org
|
4
4
|
* License: MIT
|
5
5
|
*/
|
@@ -796,7 +796,6 @@ ngRouteModule.directive('ngView', ngViewFillContentFactory);
|
|
796
796
|
}
|
797
797
|
|
798
798
|
.view-animate.ng-enter, .view-animate.ng-leave {
|
799
|
-
-webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 1.5s;
|
800
799
|
transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 1.5s;
|
801
800
|
|
802
801
|
display:block;
|