angular-gem 1.2.23 → 1.2.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +8 -8
- data/lib/angular-gem/version.rb +1 -1
- data/vendor/assets/javascripts/1.2.24/angular-animate.js +1689 -0
- data/vendor/assets/javascripts/1.2.24/angular-cookies.js +206 -0
- data/vendor/assets/javascripts/1.2.24/angular-loader.js +415 -0
- data/vendor/assets/javascripts/1.2.24/angular-mocks.js +2177 -0
- data/vendor/assets/javascripts/1.2.24/angular-resource.js +621 -0
- data/vendor/assets/javascripts/1.2.24/angular-route.js +925 -0
- data/vendor/assets/javascripts/1.2.24/angular-sanitize.js +647 -0
- data/vendor/assets/javascripts/1.2.24/angular-scenario.js +34012 -0
- data/vendor/assets/javascripts/1.2.24/angular-touch.js +584 -0
- data/vendor/assets/javascripts/1.2.24/angular.js +22012 -0
- data/vendor/assets/javascripts/angular-animate.js +1 -1
- data/vendor/assets/javascripts/angular-cookies.js +1 -1
- data/vendor/assets/javascripts/angular-loader.js +2 -2
- data/vendor/assets/javascripts/angular-mocks.js +3 -1
- data/vendor/assets/javascripts/angular-resource.js +1 -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 +109 -51
- data/vendor/assets/javascripts/angular-touch.js +1 -1
- data/vendor/assets/javascripts/angular.js +109 -51
- metadata +12 -2
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license AngularJS v1.2.
|
2
|
+
* @license AngularJS v1.2.24
|
3
3
|
* (c) 2010-2014 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.24/' +
|
72
72
|
(module ? module + '/' : '') + code;
|
73
73
|
for (i = 2; i < arguments.length; i++) {
|
74
74
|
message = message + (i == 2 ? '?' : '&') + 'p' + (i-2) + '=' +
|
@@ -1987,11 +1987,11 @@ function setupModuleLoader(window) {
|
|
1987
1987
|
* - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat".
|
1988
1988
|
*/
|
1989
1989
|
var version = {
|
1990
|
-
full: '1.2.
|
1990
|
+
full: '1.2.24', // all of these placeholder strings will be replaced by grunt's
|
1991
1991
|
major: 1, // package task
|
1992
1992
|
minor: 2,
|
1993
|
-
dot:
|
1994
|
-
codeName: '
|
1993
|
+
dot: 24,
|
1994
|
+
codeName: 'static-levitation'
|
1995
1995
|
};
|
1996
1996
|
|
1997
1997
|
|
@@ -4582,6 +4582,13 @@ function Browser(window, document, $log, $sniffer) {
|
|
4582
4582
|
return callback;
|
4583
4583
|
};
|
4584
4584
|
|
4585
|
+
/**
|
4586
|
+
* Checks whether the url has changed outside of Angular.
|
4587
|
+
* Needs to be exported to be able to check for changes that have been done in sync,
|
4588
|
+
* as hashchange/popstate events fire in async.
|
4589
|
+
*/
|
4590
|
+
self.$$checkUrlChange = fireUrlChange;
|
4591
|
+
|
4585
4592
|
//////////////////////////////////////////////////////////////
|
4586
4593
|
// Misc API
|
4587
4594
|
//////////////////////////////////////////////////////////////
|
@@ -8407,7 +8414,7 @@ function $HttpProvider() {
|
|
8407
8414
|
if (isObject(v)) {
|
8408
8415
|
if (isDate(v)){
|
8409
8416
|
v = v.toISOString();
|
8410
|
-
} else
|
8417
|
+
} else {
|
8411
8418
|
v = toJson(v);
|
8412
8419
|
}
|
8413
8420
|
}
|
@@ -8857,7 +8864,7 @@ function $InterpolateProvider() {
|
|
8857
8864
|
* @description
|
8858
8865
|
* Symbol to denote the start of expression in the interpolated string. Defaults to `{{`.
|
8859
8866
|
*
|
8860
|
-
* Use {@link ng.$interpolateProvider#startSymbol
|
8867
|
+
* Use {@link ng.$interpolateProvider#startSymbol `$interpolateProvider.startSymbol`} to change
|
8861
8868
|
* the symbol.
|
8862
8869
|
*
|
8863
8870
|
* @returns {string} start symbol.
|
@@ -8873,7 +8880,7 @@ function $InterpolateProvider() {
|
|
8873
8880
|
* @description
|
8874
8881
|
* Symbol to denote the end of expression in the interpolated string. Defaults to `}}`.
|
8875
8882
|
*
|
8876
|
-
* Use {@link ng.$interpolateProvider#endSymbol
|
8883
|
+
* Use {@link ng.$interpolateProvider#endSymbol `$interpolateProvider.endSymbol`} to change
|
8877
8884
|
* the symbol.
|
8878
8885
|
*
|
8879
8886
|
* @returns {string} end symbol.
|
@@ -9463,17 +9470,16 @@ LocationHashbangInHtml5Url.prototype =
|
|
9463
9470
|
* Change path, search and hash, when called with parameter and return `$location`.
|
9464
9471
|
*
|
9465
9472
|
* @param {string=} url New url without base prefix (e.g. `/path?a=b#hash`)
|
9466
|
-
* @param {string=} replace The path that will be changed
|
9467
9473
|
* @return {string} url
|
9468
9474
|
*/
|
9469
|
-
url: function(url
|
9475
|
+
url: function(url) {
|
9470
9476
|
if (isUndefined(url))
|
9471
9477
|
return this.$$url;
|
9472
9478
|
|
9473
9479
|
var match = PATH_MATCH.exec(url);
|
9474
9480
|
if (match[1]) this.path(decodeURIComponent(match[1]));
|
9475
9481
|
if (match[2] || match[1]) this.search(match[3] || '');
|
9476
|
-
this.hash(match[5] || ''
|
9482
|
+
this.hash(match[5] || '');
|
9477
9483
|
|
9478
9484
|
return this;
|
9479
9485
|
},
|
@@ -9531,10 +9537,11 @@ LocationHashbangInHtml5Url.prototype =
|
|
9531
9537
|
* Note: Path should always begin with forward slash (/), this method will add the forward slash
|
9532
9538
|
* if it is missing.
|
9533
9539
|
*
|
9534
|
-
* @param {string=} path New path
|
9540
|
+
* @param {(string|number)=} path New path
|
9535
9541
|
* @return {string} path
|
9536
9542
|
*/
|
9537
9543
|
path: locationGetterSetter('$$path', function(path) {
|
9544
|
+
path = path ? path.toString() : '';
|
9538
9545
|
return path.charAt(0) == '/' ? path : '/' + path;
|
9539
9546
|
}),
|
9540
9547
|
|
@@ -9570,7 +9577,7 @@ LocationHashbangInHtml5Url.prototype =
|
|
9570
9577
|
* If the argument is a hash object containing an array of values, these values will be encoded
|
9571
9578
|
* as duplicate search parameters in the url.
|
9572
9579
|
*
|
9573
|
-
* @param {(string|Array<string>|boolean)=} paramValue If `search` is a string, then `paramValue`
|
9580
|
+
* @param {(string|Number|Array<string>|boolean)=} paramValue If `search` is a string or number, then `paramValue`
|
9574
9581
|
* will override only a single search property.
|
9575
9582
|
*
|
9576
9583
|
* If `paramValue` is an array, it will override the property of the `search` component of
|
@@ -9589,7 +9596,8 @@ LocationHashbangInHtml5Url.prototype =
|
|
9589
9596
|
case 0:
|
9590
9597
|
return this.$$search;
|
9591
9598
|
case 1:
|
9592
|
-
if (isString(search)) {
|
9599
|
+
if (isString(search) || isNumber(search)) {
|
9600
|
+
search = search.toString();
|
9593
9601
|
this.$$search = parseKeyValue(search);
|
9594
9602
|
} else if (isObject(search)) {
|
9595
9603
|
// remove object undefined or null properties
|
@@ -9626,10 +9634,12 @@ LocationHashbangInHtml5Url.prototype =
|
|
9626
9634
|
*
|
9627
9635
|
* Change hash fragment when called with parameter and return `$location`.
|
9628
9636
|
*
|
9629
|
-
* @param {string=} hash New hash fragment
|
9637
|
+
* @param {(string|number)=} hash New hash fragment
|
9630
9638
|
* @return {string} hash
|
9631
9639
|
*/
|
9632
|
-
hash: locationGetterSetter('$$hash',
|
9640
|
+
hash: locationGetterSetter('$$hash', function(hash) {
|
9641
|
+
return hash ? hash.toString() : '';
|
9642
|
+
}),
|
9633
9643
|
|
9634
9644
|
/**
|
9635
9645
|
* @ngdoc method
|
@@ -10824,7 +10834,7 @@ Parser.prototype = {
|
|
10824
10834
|
var context = contextGetter ? contextGetter(scope, locals) : scope;
|
10825
10835
|
|
10826
10836
|
for (var i = 0; i < argsFn.length; i++) {
|
10827
|
-
args.push(argsFn[i](scope, locals));
|
10837
|
+
args.push(ensureSafeObject(argsFn[i](scope, locals), parser.text));
|
10828
10838
|
}
|
10829
10839
|
var fnPtr = fn(scope, locals, context) || noop;
|
10830
10840
|
|
@@ -10912,13 +10922,15 @@ Parser.prototype = {
|
|
10912
10922
|
//////////////////////////////////////////////////
|
10913
10923
|
|
10914
10924
|
function setter(obj, path, setValue, fullExp, options) {
|
10925
|
+
ensureSafeObject(obj, fullExp);
|
10926
|
+
|
10915
10927
|
//needed?
|
10916
10928
|
options = options || {};
|
10917
10929
|
|
10918
10930
|
var element = path.split('.'), key;
|
10919
10931
|
for (var i = 0; element.length > 1; i++) {
|
10920
10932
|
key = ensureSafeMemberName(element.shift(), fullExp);
|
10921
|
-
var propertyObj = obj[key];
|
10933
|
+
var propertyObj = ensureSafeObject(obj[key], fullExp);
|
10922
10934
|
if (!propertyObj) {
|
10923
10935
|
propertyObj = {};
|
10924
10936
|
obj[key] = propertyObj;
|
@@ -10938,7 +10950,6 @@ function setter(obj, path, setValue, fullExp, options) {
|
|
10938
10950
|
}
|
10939
10951
|
}
|
10940
10952
|
key = ensureSafeMemberName(element.shift(), fullExp);
|
10941
|
-
ensureSafeObject(obj, fullExp);
|
10942
10953
|
ensureSafeObject(obj[key], fullExp);
|
10943
10954
|
obj[key] = setValue;
|
10944
10955
|
return setValue;
|
@@ -12002,10 +12013,26 @@ function $RootScopeProvider(){
|
|
12002
12013
|
/**
|
12003
12014
|
* @ngdoc property
|
12004
12015
|
* @name $rootScope.Scope#$id
|
12005
|
-
*
|
12006
|
-
*
|
12016
|
+
*
|
12017
|
+
* @description
|
12018
|
+
* Unique scope ID (monotonically increasing) useful for debugging.
|
12007
12019
|
*/
|
12008
12020
|
|
12021
|
+
/**
|
12022
|
+
* @ngdoc property
|
12023
|
+
* @name $rootScope.Scope#$parent
|
12024
|
+
*
|
12025
|
+
* @description
|
12026
|
+
* Reference to the parent scope.
|
12027
|
+
*/
|
12028
|
+
|
12029
|
+
/**
|
12030
|
+
* @ngdoc property
|
12031
|
+
* @name $rootScope.Scope#$root
|
12032
|
+
*
|
12033
|
+
* @description
|
12034
|
+
* Reference to the root scope.
|
12035
|
+
*/
|
12009
12036
|
|
12010
12037
|
Scope.prototype = {
|
12011
12038
|
constructor: Scope,
|
@@ -12017,9 +12044,8 @@ function $RootScopeProvider(){
|
|
12017
12044
|
* @description
|
12018
12045
|
* Creates a new child {@link ng.$rootScope.Scope scope}.
|
12019
12046
|
*
|
12020
|
-
* The parent scope will propagate the {@link ng.$rootScope.Scope#$digest $digest()}
|
12021
|
-
* {@link ng.$rootScope.Scope#$
|
12022
|
-
* scope hierarchy using {@link ng.$rootScope.Scope#$destroy $destroy()}.
|
12047
|
+
* The parent scope will propagate the {@link ng.$rootScope.Scope#$digest $digest()} event.
|
12048
|
+
* The scope can be removed from the scope hierarchy using {@link ng.$rootScope.Scope#$destroy $destroy()}.
|
12023
12049
|
*
|
12024
12050
|
* {@link ng.$rootScope.Scope#$destroy $destroy()} must be called on a scope when it is
|
12025
12051
|
* desired for the scope and its child scopes to be permanently detached from the parent and
|
@@ -12472,6 +12498,8 @@ function $RootScopeProvider(){
|
|
12472
12498
|
logIdx, logMsg, asyncTask;
|
12473
12499
|
|
12474
12500
|
beginPhase('$digest');
|
12501
|
+
// Check for changes to browser url that happened in sync before the call to $digest
|
12502
|
+
$browser.$$checkUrlChange();
|
12475
12503
|
|
12476
12504
|
lastDirtyWatch = null;
|
12477
12505
|
|
@@ -14525,16 +14553,6 @@ function $WindowProvider(){
|
|
14525
14553
|
* For more information about how angular filters work, and how to create your own filters, see
|
14526
14554
|
* {@link guide/filter Filters} in the Angular Developer Guide.
|
14527
14555
|
*/
|
14528
|
-
/**
|
14529
|
-
* @ngdoc method
|
14530
|
-
* @name $filterProvider#register
|
14531
|
-
* @description
|
14532
|
-
* Register filter factory function.
|
14533
|
-
*
|
14534
|
-
* @param {String} name Name of the filter.
|
14535
|
-
* @param {Function} fn The filter factory function which is injectable.
|
14536
|
-
*/
|
14537
|
-
|
14538
14556
|
|
14539
14557
|
/**
|
14540
14558
|
* @ngdoc service
|
@@ -14573,7 +14591,7 @@ function $FilterProvider($provide) {
|
|
14573
14591
|
|
14574
14592
|
/**
|
14575
14593
|
* @ngdoc method
|
14576
|
-
* @name $
|
14594
|
+
* @name $filterProvider#register
|
14577
14595
|
* @param {string|Object} name Name of the filter function, or an object map of filters where
|
14578
14596
|
* the keys are the filter names and the values are the filter factories.
|
14579
14597
|
* @returns {Object} Registered filter instance, or if a map of filters was provided then a map
|
@@ -14646,7 +14664,9 @@ function $FilterProvider($provide) {
|
|
14646
14664
|
* which have property `name` containing "M" and property `phone` containing "1". A special
|
14647
14665
|
* property name `$` can be used (as in `{$:"text"}`) to accept a match against any
|
14648
14666
|
* property of the object. That's equivalent to the simple substring match with a `string`
|
14649
|
-
* as described above.
|
14667
|
+
* as described above. The predicate can be negated by prefixing the string with `!`.
|
14668
|
+
* For Example `{name: "!M"}` predicate will return an array of items which have property `name`
|
14669
|
+
* not containing "M".
|
14650
14670
|
*
|
14651
14671
|
* - `function(value)`: A predicate function can be used to write arbitrary filters. The function is
|
14652
14672
|
* called for each element of `array`. The final result is an array of those elements that
|
@@ -14995,6 +15015,10 @@ function formatNumber(number, pattern, groupSep, decimalSep, fractionSize) {
|
|
14995
15015
|
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round
|
14996
15016
|
number = +(Math.round(+(number.toString() + 'e' + fractionSize)).toString() + 'e' + -fractionSize);
|
14997
15017
|
|
15018
|
+
if (number === 0) {
|
15019
|
+
isNegative = false;
|
15020
|
+
}
|
15021
|
+
|
14998
15022
|
var fraction = ('' + number).split(DECIMAL_SEP);
|
14999
15023
|
var whole = fraction[0];
|
15000
15024
|
fraction = fraction[1] || '';
|
@@ -15164,8 +15188,8 @@ var DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+
|
|
15164
15188
|
* * `'mediumTime'`: equivalent to `'h:mm:ss a'` for en_US locale (e.g. 12:05:08 pm)
|
15165
15189
|
* * `'shortTime'`: equivalent to `'h:mm a'` for en_US locale (e.g. 12:05 pm)
|
15166
15190
|
*
|
15167
|
-
* `format` string can contain literal values. These need to be
|
15168
|
-
* `"h 'in the morning'"`). In order to output single quote,
|
15191
|
+
* `format` string can contain literal values. These need to be escaped by surrounding with single quotes (e.g.
|
15192
|
+
* `"h 'in the morning'"`). In order to output a single quote, escape it - i.e., two single quotes in a sequence
|
15169
15193
|
* (e.g. `"h 'o''clock'"`).
|
15170
15194
|
*
|
15171
15195
|
* @param {(Date|number|string)} date Date to format either as Date object, milliseconds (string or
|
@@ -15185,6 +15209,8 @@ var DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+
|
|
15185
15209
|
<span>{{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}</span><br>
|
15186
15210
|
<span ng-non-bindable>{{1288323623006 | date:'MM/dd/yyyy @ h:mma'}}</span>:
|
15187
15211
|
<span>{{'1288323623006' | date:'MM/dd/yyyy @ h:mma'}}</span><br>
|
15212
|
+
<span ng-non-bindable>{{1288323623006 | date:"MM/dd/yyyy 'at' h:mma"}}</span>:
|
15213
|
+
<span>{{'1288323623006' | date:"MM/dd/yyyy 'at' h:mma"}}</span><br>
|
15188
15214
|
</file>
|
15189
15215
|
<file name="protractor.js" type="protractor">
|
15190
15216
|
it('should format date', function() {
|
@@ -15194,6 +15220,8 @@ var DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+
|
|
15194
15220
|
toMatch(/2010\-10\-2\d \d{2}:\d{2}:\d{2} (\-|\+)?\d{4}/);
|
15195
15221
|
expect(element(by.binding("'1288323623006' | date:'MM/dd/yyyy @ h:mma'")).getText()).
|
15196
15222
|
toMatch(/10\/2\d\/2010 @ \d{1,2}:\d{2}(AM|PM)/);
|
15223
|
+
expect(element(by.binding("'1288323623006' | date:\"MM/dd/yyyy 'at' h:mma\"")).getText()).
|
15224
|
+
toMatch(/10\/2\d\/2010 at \d{1,2}:\d{2}(AM|PM)/);
|
15197
15225
|
});
|
15198
15226
|
</file>
|
15199
15227
|
</example>
|
@@ -15555,7 +15583,7 @@ function limitToFilter(){
|
|
15555
15583
|
orderByFilter.$inject = ['$parse'];
|
15556
15584
|
function orderByFilter($parse){
|
15557
15585
|
return function(array, sortPredicate, reverseOrder) {
|
15558
|
-
if (!
|
15586
|
+
if (!(isArrayLike(array))) return array;
|
15559
15587
|
if (!sortPredicate) return array;
|
15560
15588
|
sortPredicate = isArray(sortPredicate) ? sortPredicate: [sortPredicate];
|
15561
15589
|
sortPredicate = map(sortPredicate, function(predicate){
|
@@ -16142,8 +16170,9 @@ function FormController(element, attrs, $scope, $animate) {
|
|
16142
16170
|
// convenience method for easy toggling of classes
|
16143
16171
|
function toggleValidCss(isValid, validationErrorKey) {
|
16144
16172
|
validationErrorKey = validationErrorKey ? '-' + snake_case(validationErrorKey, '-') : '';
|
16145
|
-
$animate.
|
16146
|
-
|
16173
|
+
$animate.setClass(element,
|
16174
|
+
(isValid ? VALID_CLASS : INVALID_CLASS) + validationErrorKey,
|
16175
|
+
(isValid ? INVALID_CLASS : VALID_CLASS) + validationErrorKey);
|
16147
16176
|
}
|
16148
16177
|
|
16149
16178
|
/**
|
@@ -16358,8 +16387,6 @@ function FormController(element, attrs, $scope, $animate) {
|
|
16358
16387
|
* hitting enter in any of the input fields will trigger the click handler on the *first* button or
|
16359
16388
|
* input[type=submit] (`ngClick`) *and* a submit handler on the enclosing form (`ngSubmit`)
|
16360
16389
|
*
|
16361
|
-
* @param {string=} name Name of the form. If specified, the form controller will be published into
|
16362
|
-
* related scope, under this name.
|
16363
16390
|
*
|
16364
16391
|
* ## Animation Hooks
|
16365
16392
|
*
|
@@ -16437,6 +16464,8 @@ function FormController(element, attrs, $scope, $animate) {
|
|
16437
16464
|
</file>
|
16438
16465
|
</example>
|
16439
16466
|
*
|
16467
|
+
* @param {string=} name Name of the form. If specified, the form controller will be published into
|
16468
|
+
* related scope, under this name.
|
16440
16469
|
*/
|
16441
16470
|
var formDirectiveFactory = function(isNgForm) {
|
16442
16471
|
return ['$timeout', function($timeout) {
|
@@ -17020,7 +17049,7 @@ function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
|
|
17020
17049
|
// a row.
|
17021
17050
|
var revalidate = validity && ctrl.$$hasNativeValidators;
|
17022
17051
|
if (ctrl.$viewValue !== value || (value === '' && revalidate)) {
|
17023
|
-
if (scope.$$phase) {
|
17052
|
+
if (scope.$root.$$phase) {
|
17024
17053
|
ctrl.$setViewValue(value);
|
17025
17054
|
} else {
|
17026
17055
|
scope.$apply(function() {
|
@@ -19062,7 +19091,9 @@ var ngControllerDirective = [function() {
|
|
19062
19091
|
<button ng-click="count = count + 1" ng-init="count=0">
|
19063
19092
|
Increment
|
19064
19093
|
</button>
|
19065
|
-
|
19094
|
+
<span>
|
19095
|
+
count: {{count}}
|
19096
|
+
<span>
|
19066
19097
|
</file>
|
19067
19098
|
<file name="protractor.js" type="protractor">
|
19068
19099
|
it('should check ng-click', function() {
|
@@ -19080,19 +19111,33 @@ var ngControllerDirective = [function() {
|
|
19080
19111
|
* Events that are handled via these handler are always configured not to propagate further.
|
19081
19112
|
*/
|
19082
19113
|
var ngEventDirectives = {};
|
19114
|
+
|
19115
|
+
// For events that might fire synchronously during DOM manipulation
|
19116
|
+
// we need to execute their event handlers asynchronously using $evalAsync,
|
19117
|
+
// so that they are not executed in an inconsistent state.
|
19118
|
+
var forceAsyncEvents = {
|
19119
|
+
'blur': true,
|
19120
|
+
'focus': true
|
19121
|
+
};
|
19083
19122
|
forEach(
|
19084
19123
|
'click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste'.split(' '),
|
19085
19124
|
function(name) {
|
19086
19125
|
var directiveName = directiveNormalize('ng-' + name);
|
19087
|
-
ngEventDirectives[directiveName] = ['$parse', function($parse) {
|
19126
|
+
ngEventDirectives[directiveName] = ['$parse', '$rootScope', function($parse, $rootScope) {
|
19088
19127
|
return {
|
19089
19128
|
compile: function($element, attr) {
|
19090
19129
|
var fn = $parse(attr[directiveName]);
|
19091
19130
|
return function ngEventHandler(scope, element) {
|
19092
|
-
|
19093
|
-
|
19131
|
+
var eventName = lowercase(name);
|
19132
|
+
element.on(eventName, function(event) {
|
19133
|
+
var callback = function() {
|
19094
19134
|
fn(scope, {$event:event});
|
19095
|
-
}
|
19135
|
+
};
|
19136
|
+
if (forceAsyncEvents[eventName] && $rootScope.$$phase) {
|
19137
|
+
scope.$evalAsync(callback);
|
19138
|
+
} else {
|
19139
|
+
scope.$apply(callback);
|
19140
|
+
}
|
19096
19141
|
});
|
19097
19142
|
};
|
19098
19143
|
}
|
@@ -19409,6 +19454,10 @@ forEach(
|
|
19409
19454
|
* @description
|
19410
19455
|
* Specify custom behavior on focus event.
|
19411
19456
|
*
|
19457
|
+
* Note: As the `focus` event is executed synchronously when calling `input.focus()`
|
19458
|
+
* AngularJS executes the expression using `scope.$evalAsync` if the event is fired
|
19459
|
+
* during an `$apply` to ensure a consistent state.
|
19460
|
+
*
|
19412
19461
|
* @element window, input, select, textarea, a
|
19413
19462
|
* @priority 0
|
19414
19463
|
* @param {expression} ngFocus {@link guide/expression Expression} to evaluate upon
|
@@ -19425,6 +19474,14 @@ forEach(
|
|
19425
19474
|
* @description
|
19426
19475
|
* Specify custom behavior on blur event.
|
19427
19476
|
*
|
19477
|
+
* A [blur event](https://developer.mozilla.org/en-US/docs/Web/Events/blur) fires when
|
19478
|
+
* an element has lost focus.
|
19479
|
+
*
|
19480
|
+
* Note: As the `blur` event is executed synchronously also during DOM manipulations
|
19481
|
+
* (e.g. removing a focussed input),
|
19482
|
+
* AngularJS executes the expression using `scope.$evalAsync` if the event is fired
|
19483
|
+
* during an `$apply` to ensure a consistent state.
|
19484
|
+
*
|
19428
19485
|
* @element window, input, select, textarea, a
|
19429
19486
|
* @priority 0
|
19430
19487
|
* @param {expression} ngBlur {@link guide/expression Expression} to evaluate upon
|
@@ -20505,8 +20562,9 @@ var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) {
|
|
20505
20562
|
if (block && block.scope) lastBlockMap[block.id] = block;
|
20506
20563
|
});
|
20507
20564
|
// This is a duplicate and we need to throw an error
|
20508
|
-
throw ngRepeatMinErr('dupes',
|
20509
|
-
|
20565
|
+
throw ngRepeatMinErr('dupes',
|
20566
|
+
"Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}, Duplicate value: {2}",
|
20567
|
+
expression, trackById, toJson(value));
|
20510
20568
|
} else {
|
20511
20569
|
// new never before seen block
|
20512
20570
|
nextBlockOrder[index] = { id: trackById };
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: angular-gem
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.24
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Christian Vuerings
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-09-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: railties
|
@@ -908,6 +908,16 @@ files:
|
|
908
908
|
- vendor/assets/javascripts/1.2.23/angular-scenario.js
|
909
909
|
- vendor/assets/javascripts/1.2.23/angular-touch.js
|
910
910
|
- vendor/assets/javascripts/1.2.23/angular.js
|
911
|
+
- vendor/assets/javascripts/1.2.24/angular-animate.js
|
912
|
+
- vendor/assets/javascripts/1.2.24/angular-cookies.js
|
913
|
+
- vendor/assets/javascripts/1.2.24/angular-loader.js
|
914
|
+
- vendor/assets/javascripts/1.2.24/angular-mocks.js
|
915
|
+
- vendor/assets/javascripts/1.2.24/angular-resource.js
|
916
|
+
- vendor/assets/javascripts/1.2.24/angular-route.js
|
917
|
+
- vendor/assets/javascripts/1.2.24/angular-sanitize.js
|
918
|
+
- vendor/assets/javascripts/1.2.24/angular-scenario.js
|
919
|
+
- vendor/assets/javascripts/1.2.24/angular-touch.js
|
920
|
+
- vendor/assets/javascripts/1.2.24/angular.js
|
911
921
|
- vendor/assets/javascripts/1.2.3/angular-animate.js
|
912
922
|
- vendor/assets/javascripts/1.2.3/angular-cookies.js
|
913
923
|
- vendor/assets/javascripts/1.2.3/angular-loader.js
|