Compare commits
53 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9474ec120a | |||
| 09a9832358 | |||
| bf6a79c348 | |||
| 8ee8ffeba0 | |||
| 42d09f1772 | |||
| 8692f87a46 | |||
| 40406e2f22 | |||
| 4644c5840f | |||
| addb4bdd57 | |||
| 7496e8e5b7 | |||
| e9b9421cdb | |||
| 7a374691b9 | |||
| 3be6835e0f | |||
| a3d79775e1 | |||
| 920b595080 | |||
| 3109342679 | |||
| aa01be8b2c | |||
| bb4d3b73a1 | |||
| 6dbd606ad7 | |||
| 764fa869dd | |||
| 7812dfcee8 | |||
| 00b623e86b | |||
| 92f87b1142 | |||
| 5c1fdff691 | |||
| 891acf4c20 | |||
| 93552fed1c | |||
| b5fbd6a2f6 | |||
| 5c43b94fc4 | |||
| 7dd94b9595 | |||
| 95f8a8bab0 | |||
| dc5bba8615 | |||
| 16c8f29ef6 | |||
| d3fb8dd776 | |||
| 95e03bce7e | |||
| 5388ca5710 | |||
| 1b275fb00e | |||
| 1c68d00fbf | |||
| 158241e212 | |||
| eab271876c | |||
| 637d3b47d1 | |||
| 8ac369e829 | |||
| 5c611e898a | |||
| dc9775da96 | |||
| e8941c0fe5 | |||
| bb16759f0b | |||
| 2b41a5868a | |||
| 637c020f82 | |||
| f7fde935d5 | |||
| 5f552896ab | |||
| d5968c7853 | |||
| 4f4ff5f31b | |||
| e3764e30a3 | |||
| c9899c53ac |
+189
@@ -1,3 +1,192 @@
|
||||
<a name="1.3.4"></a>
|
||||
# 1.3.4 highfalutin-petroglyph (2014-11-24)
|
||||
|
||||
## Bug Fixes
|
||||
|
||||
- **$browser:** allow chaining url() calls in setter mode
|
||||
([764fa869](https://github.com/angular/angular.js/commit/764fa869dd8809d494924c23f30ddaa4cac84249),
|
||||
[#10157](https://github.com/angular/angular.js/issues/10157))
|
||||
- **$http:** return empty headers, ignore properties in Object prototype
|
||||
([637c020f](https://github.com/angular/angular.js/commit/637c020f828a7ceeaacf83bb1a54ed3092e6c273),
|
||||
[#7779](https://github.com/angular/angular.js/issues/7779), [#10113](https://github.com/angular/angular.js/issues/10113), [#10091](https://github.com/angular/angular.js/issues/10091))
|
||||
- **$locale:** Allow currency filter to fall back to maxFrac from locale
|
||||
([6dbd606a](https://github.com/angular/angular.js/commit/6dbd606ad7b708d5886c0e7ffee20ae8f8719711),
|
||||
[#10179](https://github.com/angular/angular.js/issues/10179))
|
||||
- **$location:** allow empty string URLs to reset path, search, and hash
|
||||
([7812dfce](https://github.com/angular/angular.js/commit/7812dfcee8ab98cbf38261f9948d9541656bf554),
|
||||
[#10063](https://github.com/angular/angular.js/issues/10063), [#10064](https://github.com/angular/angular.js/issues/10064))
|
||||
- **$route:** fix redirection with optional/eager params
|
||||
([891acf4c](https://github.com/angular/angular.js/commit/891acf4c201823fd2c925ee321c70d06737d5944),
|
||||
[#9819](https://github.com/angular/angular.js/issues/9819), [#9827](https://github.com/angular/angular.js/issues/9827))
|
||||
- **Angular:** properly get node name for svg element wrapper
|
||||
([09a98323](https://github.com/angular/angular.js/commit/09a9832358960c98392c9df1a9fd9592f59bc844),
|
||||
[#10078](https://github.com/angular/angular.js/issues/10078), [#10172](https://github.com/angular/angular.js/issues/10172))
|
||||
- **NgModelController:** typo $rawModelValue -> $$rawModelValue
|
||||
([4f4ff5f3](https://github.com/angular/angular.js/commit/4f4ff5f31b82c6f7be409ea4edbad4c2913ac1f1))
|
||||
- **input:**
|
||||
- set ngTrueValue on required checkbox
|
||||
([8692f87a](https://github.com/angular/angular.js/commit/8692f87a4689fa0dd3640f4dcab5c6b6f960489b),
|
||||
[#5164](https://github.com/angular/angular.js/issues/5164))
|
||||
- call $setTouched in blur asynchronously if necessary
|
||||
([eab27187](https://github.com/angular/angular.js/commit/eab271876cb87c1f5f6c6f29e814fb8fecad87ff),
|
||||
[#8762](https://github.com/angular/angular.js/issues/8762), [#9808](https://github.com/angular/angular.js/issues/9808), [#10014](https://github.com/angular/angular.js/issues/10014))
|
||||
- **input[date]:** do not use `$isEmpty` to check the model validity
|
||||
([40406e2f](https://github.com/angular/angular.js/commit/40406e2f22713efbd37ef3eff408339727cb62d9))
|
||||
- **linky:** encode double quotes when serializing email addresses
|
||||
([8ee8ffeb](https://github.com/angular/angular.js/commit/8ee8ffeba0a5a133fa792745c1019d294ecfcef3),
|
||||
[#8945](https://github.com/angular/angular.js/issues/8945), [#8964](https://github.com/angular/angular.js/issues/8964), [#5946](https://github.com/angular/angular.js/issues/5946), [#10090](https://github.com/angular/angular.js/issues/10090), [#9256](https://github.com/angular/angular.js/issues/9256))
|
||||
- **ngMaxlength:** ignore maxlength when not set to a non-negative integer
|
||||
([92f87b11](https://github.com/angular/angular.js/commit/92f87b114242b01876e1dc5c6fddd061352ecb2c),
|
||||
[#9874](https://github.com/angular/angular.js/issues/9874))
|
||||
- **ngModel:** don't run parsers when executing $validate
|
||||
([e3764e30](https://github.com/angular/angular.js/commit/e3764e30a301ec6136c8e6b5493d39feb3cd1ecc))
|
||||
- **ngModelOptions:** preserve context of getter/setters
|
||||
([bb4d3b73](https://github.com/angular/angular.js/commit/bb4d3b73a1ccf3dee55b0c25baf031bae5cbb676),
|
||||
[#9394](https://github.com/angular/angular.js/issues/9394), [#9865](https://github.com/angular/angular.js/issues/9865))
|
||||
|
||||
|
||||
## Features
|
||||
|
||||
- **ngMaxlength:** add support for disabling max length limit
|
||||
([5c1fdff6](https://github.com/angular/angular.js/commit/5c1fdff691b9367d73f72f6a0298cb6a6e259f35),
|
||||
[#9995](https://github.com/angular/angular.js/issues/9995))
|
||||
- **ngModelController:** add $setDirty method
|
||||
([e8941c0f](https://github.com/angular/angular.js/commit/e8941c0fe5217d2e705bad8253dc0162aff4c709),
|
||||
[#10038](https://github.com/angular/angular.js/issues/10038), [#10049](https://github.com/angular/angular.js/issues/10049))
|
||||
- **ngPluralize:** add support for `count` to be a one-time expression
|
||||
([2b41a586](https://github.com/angular/angular.js/commit/2b41a5868aee79e3872ad92db66e30959207d98e),
|
||||
[#10004](https://github.com/angular/angular.js/issues/10004))
|
||||
|
||||
|
||||
## Performance Improvements
|
||||
|
||||
- ***:** use Object.create instead of creating temporary constructors
|
||||
([bf6a79c3](https://github.com/angular/angular.js/commit/bf6a79c3484f474c300b5442ae73483030ef5782),
|
||||
[#10058](https://github.com/angular/angular.js/issues/10058))
|
||||
|
||||
|
||||
## Breaking Changes
|
||||
|
||||
- **ngModelOptions:** due to [bb4d3b73](https://github.com/angular/angular.js/commit/bb4d3b73a1ccf3dee55b0c25baf031bae5cbb676),
|
||||
previously, ngModel invoked getter/setters in the global context.
|
||||
|
||||
For example:
|
||||
|
||||
```js
|
||||
<input ng-model="model.value" ng-model-options="{ getterSetter: true }">
|
||||
```
|
||||
|
||||
would previously invoke `model.value()` in the global context.
|
||||
|
||||
Now, ngModel invokes `value` with `model` as the context.
|
||||
|
||||
It's unlikely that real apps relied on this behavior. If they did they can use `.bind` to explicilty
|
||||
bind a getter/getter to the global context, or just reference globals normally without `this`.
|
||||
|
||||
|
||||
<a name="1.2.27"></a>
|
||||
# 1.2.27 prime-factorization (2014-11-20)
|
||||
|
||||
|
||||
## Bug Fixes
|
||||
|
||||
- **$animate:** clear the GCS cache even when no animation is detected
|
||||
([f619d032](https://github.com/angular/angular.js/commit/f619d032c932752313c646b5295bad8a68ef3871),
|
||||
[#8813](https://github.com/angular/angular.js/issues/8813))
|
||||
- **$browser:**
|
||||
- Cache `location.href` only during page reload phase
|
||||
([434d7a09](https://github.com/angular/angular.js/commit/434d7a09039151c1e627ac156213905d06b7df10),
|
||||
[#9235](https://github.com/angular/angular.js/issues/9235), [#9470](https://github.com/angular/angular.js/issues/9470))
|
||||
- don’t use history api when only the hash changes
|
||||
([a6e6438d](https://github.com/angular/angular.js/commit/a6e6438dae1ed92b29608d0b8830b0a7fbb624ef),
|
||||
[#9423](https://github.com/angular/angular.js/issues/9423), [#9424](https://github.com/angular/angular.js/issues/9424))
|
||||
- handle async href on url change in <=IE9
|
||||
([fe7d9ded](https://github.com/angular/angular.js/commit/fe7d9dedaa5ec3b3f56d9eb9c513cf99e40121ce),
|
||||
[#9235](https://github.com/angular/angular.js/issues/9235))
|
||||
- **$http:** add missing shortcut methods and missing docs
|
||||
([ec4fe1bc](https://github.com/angular/angular.js/commit/ec4fe1bcab6f981103a10f860a3a00122aa78607),
|
||||
[#9180](https://github.com/angular/angular.js/issues/9180), [#9321](https://github.com/angular/angular.js/issues/9321))
|
||||
- **$location:**
|
||||
- revert erroneous logic and backport refactorings from master
|
||||
([1ee9b4ef](https://github.com/angular/angular.js/commit/1ee9b4ef5e4a795061d3aa19adefdeb7e0209eeb),
|
||||
[#8492](https://github.com/angular/angular.js/issues/8492))
|
||||
- allow 0 in path() and hash()
|
||||
([f807d7ab](https://github.com/angular/angular.js/commit/f807d7ab4ebd18899154528ea9ed50d5bc25c57a))
|
||||
- **$parse:** add quick check for Function constructor in fast path
|
||||
([756640f5](https://github.com/angular/angular.js/commit/756640f5aa8f3fd0084bff50534e23976a6fff00))
|
||||
- **$parse, events:** prevent accidental misuse of properties on $event
|
||||
([4d0614fd](https://github.com/angular/angular.js/commit/4d0614fd0da12c5783dfb4956c330edac87e62fe),
|
||||
[#9969](https://github.com/angular/angular.js/issues/9969))
|
||||
- **ngMock:** $httpBackend should match data containing Date objects correctly
|
||||
([1426b029](https://github.com/angular/angular.js/commit/1426b02980badfd322eb960d71bfb1a14d657847),
|
||||
[#5127](https://github.com/angular/angular.js/issues/5127))
|
||||
- **orderBy:** sort by identity if no predicate is given
|
||||
([45b896a1](https://github.com/angular/angular.js/commit/45b896a16abbcbfcdfb9a95c2d10c76a805b57cc),
|
||||
[#5847](https://github.com/angular/angular.js/issues/5847), [#4579](https://github.com/angular/angular.js/issues/4579), [#9403](https://github.com/angular/angular.js/issues/9403))
|
||||
- **select:** ensure the label attribute is updated in Internet Explorer
|
||||
([16833d0f](https://github.com/angular/angular.js/commit/16833d0fb6585117e9978d1accc3ade83e22e797),
|
||||
[#9621](https://github.com/angular/angular.js/issues/9621), [#10042](https://github.com/angular/angular.js/issues/10042))
|
||||
|
||||
|
||||
## Performance Improvements
|
||||
|
||||
- **orderBy:** copy array with slice instead of for loop
|
||||
([409bcb38](https://github.com/angular/angular.js/commit/409bcb3810a1622178268f7ff7f4130887a1a3dc),
|
||||
[#9942](https://github.com/angular/angular.js/issues/9942))
|
||||
|
||||
|
||||
<a name="1.3.3"></a>
|
||||
# 1.3.3 undersea-arithmetic (2014-11-17)
|
||||
|
||||
|
||||
## Bug Fixes
|
||||
|
||||
- **$http:** don't parse single space responses as JSON
|
||||
([6f19a6fd](https://github.com/angular/angular.js/commit/6f19a6fd33ab72d3908e3418fba47ee8e1598fa6),
|
||||
[#9907](https://github.com/angular/angular.js/issues/9907))
|
||||
- **minErr:** stringify non-JSON compatible objects in error messages
|
||||
([cf43ccdf](https://github.com/angular/angular.js/commit/cf43ccdf9b8665a2fd5d6aa52f80cb2d7c9bb7e2),
|
||||
[#10085](https://github.com/angular/angular.js/issues/10085))
|
||||
- **$rootScope:** handle cyclic references in scopes when creating error messages
|
||||
([e80053d9](https://github.com/angular/angular.js/commit/e80053d91fd7c722e092a23d326384de2e552eb6),
|
||||
[#10085](https://github.com/angular/angular.js/issues/10085))
|
||||
- **ngRepeat:** support cyclic object references in error messages
|
||||
([fa12c3c8](https://github.com/angular/angular.js/commit/fa12c3c86af7965d1b9d9a5dd3434755e9e04635),
|
||||
[#9838](https://github.com/angular/angular.js/issues/9838), [#10065](https://github.com/angular/angular.js/issues/10065), [#10085](https://github.com/angular/angular.js/issues/10085))
|
||||
- **ngMock:** call $interval callbacks even when invokeApply is false
|
||||
([d81ff888](https://github.com/angular/angular.js/commit/d81ff8885b77f70c6417d7be3124d86d07447375),
|
||||
[#10032](https://github.com/angular/angular.js/issues/10032))
|
||||
- **ngPattern:** match behaviour of native HTML pattern attribute
|
||||
([85eb9660](https://github.com/angular/angular.js/commit/85eb9660ef67c24d5104a6a1921bedad0bd1b57e),
|
||||
[#9881](https://github.com/angular/angular.js/issues/9881), [#9888](https://github.com/angular/angular.js/issues/9888))
|
||||
- **select:** ensure the label attribute is updated in Internet Explorer
|
||||
([6604c236](https://github.com/angular/angular.js/commit/6604c2361427fba8c43a39dc2e92197390dfbdbe),
|
||||
[#9621](https://github.com/angular/angular.js/issues/9621), [#10042](https://github.com/angular/angular.js/issues/10042))
|
||||
|
||||
|
||||
## Features
|
||||
|
||||
- **$location:** allow to location to be changed during $locationChangeStart
|
||||
([a9352c19](https://github.com/angular/angular.js/commit/a9352c19ce33f0393d6581547c7ea8dfc2a8b78f),
|
||||
[#9607](https://github.com/angular/angular.js/issues/9607), [#9678](https://github.com/angular/angular.js/issues/9678))
|
||||
- **$routeProvider:** allow setting caseInsensitiveMatch on the provider
|
||||
([0db573b7](https://github.com/angular/angular.js/commit/0db573b7493f76abd94ff65ce660017d617e865b),
|
||||
[#6477](https://github.com/angular/angular.js/issues/6477), [#9873](https://github.com/angular/angular.js/issues/9873))
|
||||
|
||||
|
||||
## Performance Improvements
|
||||
|
||||
- **orderBy:** copy array with slice instead of for loop
|
||||
([8eabc546](https://github.com/angular/angular.js/commit/8eabc5463c795d87f37e5a9eacbbb14435024061),
|
||||
[#9942](https://github.com/angular/angular.js/issues/9942))
|
||||
|
||||
## Breaking Changes
|
||||
|
||||
- **$parse:** due to [fbad2805](https://github.com/angular/angular.js/commit/fbad2805703569058a4a860747b0e2d8aee36bdf),
|
||||
you can't use characters that have special meaning in AngularJS expressions (ex.: `.` or `-`)
|
||||
as part of filter's name. Before this commit custom filters could contain special characters
|
||||
(like a dot) in their name but this wasn't intentional.
|
||||
|
||||
<a name="1.3.2"></a>
|
||||
# 1.3.2 cardiovasculatory-magnification (2014-11-07)
|
||||
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 31 KiB |
@@ -1,7 +1,10 @@
|
||||
"use strict";
|
||||
|
||||
angular.module('versions', [])
|
||||
|
||||
.controller('DocsVersionsCtrl', ['$scope', '$location', '$window', 'NG_VERSIONS', function($scope, $location, $window, NG_VERSIONS) {
|
||||
$scope.docs_version = NG_VERSIONS[0];
|
||||
$scope.docs_versions = NG_VERSIONS;
|
||||
|
||||
for(var i=0, minor = NaN; i < NG_VERSIONS.length; i++) {
|
||||
var version = NG_VERSIONS[i];
|
||||
@@ -13,9 +16,8 @@ angular.module('versions', [])
|
||||
minor = version.minor;
|
||||
}
|
||||
|
||||
$scope.docs_versions = NG_VERSIONS;
|
||||
$scope.getGroupName = function(v) {
|
||||
return v.isLatest ? 'Latest' : (v.isStable ? 'Stable' : 'Unstable');
|
||||
return v.isLatest ? 'Latest' : ('v' + v.major + '.' + v.minor + '.x');
|
||||
};
|
||||
|
||||
$scope.jumpToDocsVersion = function(version) {
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
@ngdoc error
|
||||
@name $http:badreq
|
||||
@fullName Bad Request Configuration
|
||||
@description
|
||||
|
||||
This error occurs when the request configuration parameter passed to the {@link ng.$http `$http`} service is not an object. `$http` expects a single parameter, the request configuration object, but received a parameter that was not an object. The error message should provide additional context such as the actual value of the parameter that was received. If you passed a string parameter, perhaps you meant to call one of the shorthand methods on `$http` such as `$http.get(…)`, etc.
|
||||
|
||||
To resolve this error, make sure you pass a valid request configuration object to `$http`.
|
||||
|
||||
For more information, see the {@link ng.$http `$http`} service API documentation.
|
||||
@@ -8,10 +8,10 @@ This error occurs when {@link ng.$location $location} service is configured to u
|
||||
For example if you configure `$location` service with prefix `'!'`:
|
||||
```
|
||||
myApp.config(function($locationProvider) {
|
||||
$locationProvider.prefix('!');
|
||||
$locationProvider.hashPrefix('!');
|
||||
});
|
||||
```
|
||||
|
||||
If you enter the app at url `http:/myapp.com/#/myView` this error will be throw.
|
||||
If you enter the app at url `http://myapp.com/#/myView` this error will be thrown.
|
||||
|
||||
The correct url for this configuration is `http:/myapp.com/#!/myView` (note the `'!'` after `'#'` symbol).
|
||||
The correct url for this configuration is `http://myapp.com/#!/myView` (note the `'!'` after `'#'` symbol).
|
||||
|
||||
@@ -91,6 +91,11 @@ The filter function should be a [pure function](http://en.wikipedia.org/wiki/Pur
|
||||
means that it should be stateless and idempotent. Angular relies on these properties and executes
|
||||
the filter only when the inputs to the function change.
|
||||
|
||||
<div class="alert alert-warning">
|
||||
**Note:** filter names must be valid angular expression identifiers, such as `uppercase` or `orderBy`.
|
||||
Names with special characters, such as hyphens and dots, are not allowed.
|
||||
</div>
|
||||
|
||||
The following sample filter reverses a text string. In addition, it conditionally makes the
|
||||
text upper-case.
|
||||
|
||||
|
||||
@@ -8,15 +8,15 @@ comes with almost no help from the compiler. For this reason we feel very strong
|
||||
written in JavaScript needs to come with a strong set of tests. We have built many features into
|
||||
Angular which makes testing your Angular applications easy. So there is no excuse for not testing.
|
||||
|
||||
# Separation of Concerns
|
||||
## Separation of Concerns
|
||||
|
||||
Unit testing as the name implies is about testing individual units of code. Unit tests try to
|
||||
Unit testing, as the name implies, is about testing individual units of code. Unit tests try to
|
||||
answer questions such as "Did I think about the logic correctly?" or "Does the sort function order
|
||||
the list in the right order?"
|
||||
|
||||
In order to answer such a question it is very important that we can isolate the unit of code under test.
|
||||
That is because when we are testing the sort function we don't want to be forced into creating
|
||||
related pieces such as the DOM elements, or making any XHR calls in getting the data to sort.
|
||||
related pieces such as the DOM elements, or making any XHR calls to fetch the data to sort.
|
||||
|
||||
While this may seem obvious it can be very difficult to call an individual function on a
|
||||
typical project. The reason is that the developers often mix concerns resulting in a
|
||||
@@ -24,12 +24,10 @@ piece of code which does everything. It makes an XHR request, it sorts the respo
|
||||
manipulates the DOM.
|
||||
|
||||
With Angular we try to make it easy for you to do the right thing, and so we
|
||||
provide dependency injection for your XHR (which you can mock out) and we created abstractions which
|
||||
allow you to sort your model without having to resort to manipulating the DOM. So that in the end,
|
||||
it is easy to write a sort function which sorts some data, so that your test can create a data set,
|
||||
apply the function, and assert that the resulting model is in the correct order. The test does not
|
||||
have to wait for the XHR response to arrive, create the right kind of test DOM, nor assert that your
|
||||
function has mutated the DOM in the right way.
|
||||
provide dependency injection for your XHR requests, which can be mocked, and we provide abstractions which
|
||||
allow you to test your model without having to resort to manipulating the DOM. The test can then
|
||||
assert that the data has been sorted without having to create or look at the state of the DOM or
|
||||
wait for any XHR requests to return data. The individual sort function can be tested in isolation.
|
||||
|
||||
## With great power comes great responsibility
|
||||
|
||||
@@ -38,230 +36,218 @@ We tried to make the right thing easy, but if you ignore these guidelines you ma
|
||||
untestable application.
|
||||
|
||||
## Dependency Injection
|
||||
There are several ways in which you can get a hold of a dependency. You can:
|
||||
1. Create it using the `new` operator.
|
||||
2. Look for it in a well-known place, also known as a global singleton.
|
||||
3. Ask a registry (also known as service registry) for it. (But how do you get a hold of
|
||||
the registry? Most likely by looking it up in a well known place. See #2.)
|
||||
4. Expect it to be handed to you.
|
||||
|
||||
Out of the four options in the list above, only the last one is testable. Let's look at why:
|
||||
Angular comes with {@link di dependency injection} built-in, which makes testing components much
|
||||
easier, because you can pass in a component's dependencies and stub or mock them as you wish.
|
||||
|
||||
### Using the `new` operator
|
||||
Components that have their dependencies injected allow them to be easily mocked on a test by
|
||||
test basis, without having to mess with any global variables that could inadvertently affect
|
||||
another test.
|
||||
|
||||
While there is nothing wrong with the `new` operator fundamentally, a problem arises when calling `new`
|
||||
on a constructor. This permanently binds the call site to the type. For example, let's say that we try to
|
||||
instantiate an `XHR` that will retrieve data from the server.
|
||||
## Additional tools for testing Angular applications
|
||||
|
||||
For testing Angular applications there are certain tools that you should use that will make testing much
|
||||
easier to set up and run.
|
||||
|
||||
### Karma
|
||||
|
||||
[Karma](http://karma-runner.github.io/) is a JavaScript command line tool that can be used to spawn
|
||||
a web server which loads your application's source code and executes your tests. You can configure
|
||||
Karma to run against a number of browsers, which is useful for being confident that your application
|
||||
works on all browsers you need to support. Karma is executed on the command line and will display
|
||||
the results of your tests on the command line once they have run in the browser.
|
||||
|
||||
Karma is a NodeJS application, and should be installed through npm. Full installation instructions
|
||||
are available on [the Karma website](http://karma-runner.github.io/0.12/intro/installation.html).
|
||||
|
||||
### Jasmine
|
||||
|
||||
[Jasmine](http://jasmine.github.io/1.3/introduction.html) is a test driven development framework for
|
||||
JavaScript that has become the most popular choice for testing Angular applications. Jasmine
|
||||
provides functions to help with structuring your tests and also making assertions. As your tests
|
||||
grow, keeping them well structured and documented is vital, and Jasmine helps achieve this.
|
||||
|
||||
In Jasmine we use the `describe` function to group our tests together:
|
||||
|
||||
```js
|
||||
function MyClass() {
|
||||
this.doWork = function() {
|
||||
var xhr = new XHR();
|
||||
xhr.open(method, url, true);
|
||||
xhr.onreadystatechange = function() {...}
|
||||
xhr.send();
|
||||
}
|
||||
}
|
||||
describe("sorting the list of users", function() {
|
||||
// individual tests go here
|
||||
});
|
||||
```
|
||||
|
||||
A problem surfaces in tests when we would like to instantiate a `MockXHR` that would
|
||||
allow us to return fake data and simulate network failures. By calling `new XHR()` we are
|
||||
permanently bound to the actual XHR and there is no way to replace it. Yes, we could monkey
|
||||
patch, but that is a bad idea for many reasons which are outside the scope of this document.
|
||||
|
||||
Here's an example of how the class above becomes hard to test when resorting to monkey patching:
|
||||
And then each individual test is defined within a call to the `it` function:
|
||||
|
||||
```js
|
||||
var oldXHR = XHR;
|
||||
XHR = function MockXHR() {};
|
||||
var myClass = new MyClass();
|
||||
myClass.doWork();
|
||||
// assert that MockXHR got called with the right arguments
|
||||
XHR = oldXHR; // if you forget this bad things will happen
|
||||
describe('sorting the list of users', function() {
|
||||
it('sorts in descending order by default', function() {
|
||||
// your test assertion goes here
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
Grouping related tests within `describe` blocks and describing each individual test within an
|
||||
`it` call keeps your tests self documenting.
|
||||
|
||||
### Global look-up:
|
||||
Another way to approach the problem is to look for the service in a well-known location.
|
||||
Finally, Jasmine provides matchers which let you make assertions:
|
||||
|
||||
```js
|
||||
function MyClass() {
|
||||
this.doWork = function() {
|
||||
global.xhr({
|
||||
method:'...',
|
||||
url:'...',
|
||||
complete:function(response){ ... }
|
||||
})
|
||||
}
|
||||
}
|
||||
describe('sorting the list of users', function() {
|
||||
it('sorts in descending order by default', function() {
|
||||
var users = ['jack', 'igor', 'jeff'];
|
||||
var sorted = sortUsers(users);
|
||||
expect(sorted).toEqual(['jeff', 'jack', 'igor']);
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
While no new dependency instance is created, it is fundamentally the same as `new` in
|
||||
that no way exists to intercept the call to `global.xhr` for testing purposes, other than
|
||||
through monkey patching. The basic issue for testing is that a global variable needs to be mutated in
|
||||
order to replace it with call to a mock method. For further explanation of why this is bad see: [Brittle Global
|
||||
State & Singletons](http://misko.hevery.com/code-reviewers-guide/flaw-brittle-global-state-singletons/)
|
||||
Jasmine comes with a number of matchers that help you make a variety of assertions. You should [read
|
||||
the Jasmine documentation](http://jasmine.github.io/1.3/introduction.html#section-Matchers) to see
|
||||
what they are. To use Jasmine with Karma, we use the
|
||||
[karma-jasmine](https://github.com/karma-runner/karma-jasmine) test runner.
|
||||
|
||||
The class above is hard to test since we have to change the global state:
|
||||
### angular-mocks
|
||||
|
||||
Angular also provides the {@link ngMock} module, which provides mocking for your tests. This is used
|
||||
to inject and mock Angular services within unit tests. In addition, it is able to extend other
|
||||
modules so they are synchronous. Having tests synchronous keeps them much cleaner and easier to work
|
||||
with. One of the most useful parts of ngMock is {@link ngMock.$httpBackend}, which lets us mock XHR
|
||||
requests in tests, and return sample data instead.
|
||||
|
||||
## Testing a Controller
|
||||
|
||||
Because Angular separates logic from the view layer, it keeps controllers easy to test. Let's take a
|
||||
look at how we might test the controller below, which provides `$scope.grade`, which sets a property
|
||||
on the scope based on the length of the password.
|
||||
|
||||
```js
|
||||
var oldXHR = global.xhr;
|
||||
global.xhr = function mockXHR() {};
|
||||
var myClass = new MyClass();
|
||||
myClass.doWork();
|
||||
// assert that mockXHR got called with the right arguments
|
||||
global.xhr = oldXHR; // if you forget this bad things will happen
|
||||
angular.module('app', [])
|
||||
.controller('PasswordController', function PasswordController($scope) {
|
||||
$scope.password = '';
|
||||
$scope.grade = function() {
|
||||
var size = $scope.password.length;
|
||||
if (size > 8) {
|
||||
$scope.strength = 'strong';
|
||||
} else if (size > 3) {
|
||||
$scope.strength = 'medium';
|
||||
} else {
|
||||
$scope.strength = 'weak';
|
||||
}
|
||||
};
|
||||
});
|
||||
```
|
||||
|
||||
|
||||
### Service Registry:
|
||||
|
||||
It may seem that this can be solved by having a registry of all the services and then
|
||||
having the tests replace the services as needed.
|
||||
Because controllers are not available on the global scope, we need to use {@link
|
||||
angular.mock.inject} to inject our controller first. The first step is to use the `module` function,
|
||||
which is provided by angular-mocks. This loads in the module it's given, so it is available in your
|
||||
tests. We pass this into `beforeEach`, which is a function Jasmine provides that lets us run code
|
||||
before each test. Then we can use `inject` to access `$controller`, the service that is responsible
|
||||
for instantiating controllers.
|
||||
|
||||
```js
|
||||
function MyClass() {
|
||||
var serviceRegistry = ????;
|
||||
this.doWork = function() {
|
||||
var xhr = serviceRegistry.get('xhr');
|
||||
xhr({
|
||||
method:'...',
|
||||
url:'...',
|
||||
complete:function(response){ ... }
|
||||
})
|
||||
}
|
||||
describe('PasswordController', function() {
|
||||
beforeEach(module('app'));
|
||||
|
||||
var $controller;
|
||||
|
||||
beforeEach(inject(function(_$controller_){
|
||||
// The injector unwraps the underscores (_) from around the parameter names when matching
|
||||
$controller = _$controller_;
|
||||
}));
|
||||
|
||||
describe('$scope.grade', function() {
|
||||
it('sets the strength to "strong" if the password length is >8 chars', function() {
|
||||
var $scope = {};
|
||||
var controller = $controller('PasswordController', { $scope: $scope });
|
||||
$scope.password = 'longerthaneightchars';
|
||||
$scope.grade();
|
||||
expect($scope.strength).toEqual('strong');
|
||||
});
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
However, where does the serviceRegistry come from? If it is:
|
||||
* `new`-ed up, the test has no chance to reset the services for testing.
|
||||
* a global look-up then the service returned is global as well (but resetting is easier, since
|
||||
only one global variable exists to be reset).
|
||||
|
||||
The class above is hard to test since we have to change the global state:
|
||||
Notice how by nesting the `describe` calls and being descriptive when calling them with strings, the
|
||||
test is very clear. It documents exactly what it is testing, and at a glance you can quickly see
|
||||
what is happening. Now let's add the test for when the password is less than three characters, which
|
||||
should see `$scope.strength` set to "weak":
|
||||
|
||||
```js
|
||||
var oldServiceLocator = global.serviceLocator;
|
||||
global.serviceLocator.set('xhr', function mockXHR() {});
|
||||
var myClass = new MyClass();
|
||||
myClass.doWork();
|
||||
// assert that mockXHR got called with the right arguments
|
||||
global.serviceLocator = oldServiceLocator; // if you forget this bad things will happen
|
||||
describe('PasswordController', function() {
|
||||
beforeEach(module('app'));
|
||||
|
||||
var $controller;
|
||||
|
||||
beforeEach(inject(function(_$controller_){
|
||||
// The injector unwraps the underscores (_) from around the parameter names when matching
|
||||
$controller = _$controller_;
|
||||
}));
|
||||
|
||||
describe('$scope.grade', function() {
|
||||
it('sets the strength to "strong" if the password length is >8 chars', function() {
|
||||
var $scope = {};
|
||||
var controller = $controller('PasswordController', { $scope: $scope });
|
||||
$scope.password = 'longerthaneightchars';
|
||||
$scope.grade();
|
||||
expect($scope.strength).toEqual('strong');
|
||||
});
|
||||
|
||||
it('sets the strength to "weak" if the password length <3 chars', function() {
|
||||
var $scope = {};
|
||||
var controller = $controller('PasswordController', { $scope: $scope });
|
||||
$scope.password = 'a';
|
||||
$scope.grade();
|
||||
expect($scope.strength).toEqual('weak');
|
||||
});
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
|
||||
### Passing in Dependencies:
|
||||
Last, the dependency can be passed in.
|
||||
Now we have two tests, but notice the duplication between the tests. Both have to
|
||||
create the `$scope` variable and create the controller. As we add new tests, this duplication is
|
||||
only going to get worse. Thankfully, Jasmine provides `beforeEach`, which lets us run a function
|
||||
before each individual test. Let's see how that would tidy up our tests:
|
||||
|
||||
```js
|
||||
function MyClass(xhr) {
|
||||
this.doWork = function() {
|
||||
xhr({
|
||||
method:'...',
|
||||
url:'...',
|
||||
complete:function(response){ ... }
|
||||
})
|
||||
}
|
||||
describe('PasswordController', function() {
|
||||
beforeEach(module('app'));
|
||||
|
||||
var $controller;
|
||||
|
||||
beforeEach(inject(function(_$controller_){
|
||||
// The injector unwraps the underscores (_) from around the parameter names when matching
|
||||
$controller = _$controller_;
|
||||
}));
|
||||
|
||||
describe('$scope.grade', function() {
|
||||
var $scope, controller;
|
||||
|
||||
beforeEach(function() {
|
||||
$scope = {};
|
||||
controller = $controller('PasswordController', { $scope: $scope });
|
||||
});
|
||||
|
||||
it('sets the strength to "strong" if the password length is >8 chars', function() {
|
||||
$scope.password = 'longerthaneightchars';
|
||||
$scope.grade();
|
||||
expect($scope.strength).toEqual('strong');
|
||||
});
|
||||
|
||||
it('sets the strength to "weak" if the password length <3 chars', function() {
|
||||
$scope.password = 'a';
|
||||
$scope.grade();
|
||||
expect($scope.strength).toEqual('weak');
|
||||
});
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
This is the preferred method since the code makes no assumptions about the origin of `xhr` and cares
|
||||
instead about whoever created the class responsible for passing it in. Since the creator of the
|
||||
class should be different code than the user of the class, it separates the responsibility of
|
||||
creation from the logic. This is dependency-injection in a nutshell.
|
||||
We've moved the duplication out and into the `beforeEach` block. Each individual test now
|
||||
only contains the code specific to that test, and not code that is general across all tests. As you
|
||||
expand your tests, keep an eye out for locations where you can use `beforeEach` to tidy up tests.
|
||||
`beforeEach` isn't the only function of this sort that Jasmine provides, and the [documentation
|
||||
lists the others](http://jasmine.github.io/1.3/introduction.html#section-Setup_and_Teardown).
|
||||
|
||||
The class above is testable, since in the test we can write:
|
||||
|
||||
```js
|
||||
function xhrMock(args) {...}
|
||||
var myClass = new MyClass(xhrMock);
|
||||
myClass.doWork();
|
||||
// assert that xhrMock got called with the right arguments
|
||||
```
|
||||
|
||||
Notice that no global variables were harmed in the writing of this test.
|
||||
|
||||
Angular comes with {@link di dependency injection} built-in, making the right thing
|
||||
easy to do, but you still need to do it if you wish to take advantage of the testability story.
|
||||
|
||||
## Controllers
|
||||
What makes each application unique is its logic, and the logic is what we would like to test. If the logic
|
||||
for your application contains DOM manipulation, it will be hard to test. See the example
|
||||
below:
|
||||
|
||||
```js
|
||||
function PasswordCtrl() {
|
||||
// get references to DOM elements
|
||||
var msg = $('.ex1 span');
|
||||
var input = $('.ex1 input');
|
||||
var strength;
|
||||
|
||||
this.grade = function() {
|
||||
msg.removeClass(strength);
|
||||
var pwd = input.val();
|
||||
password.text(pwd);
|
||||
if (pwd.length > 8) {
|
||||
strength = 'strong';
|
||||
} else if (pwd.length > 3) {
|
||||
strength = 'medium';
|
||||
} else {
|
||||
strength = 'weak';
|
||||
}
|
||||
msg
|
||||
.addClass(strength)
|
||||
.text(strength);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
The code above is problematic from a testability point of view since it requires your test to have the right kind
|
||||
of DOM present when the code executes. The test would look like this:
|
||||
|
||||
```js
|
||||
var input = $('<input type="text"/>');
|
||||
var span = $('<span>');
|
||||
$('body').html('<div class="ex1">')
|
||||
.find('div')
|
||||
.append(input)
|
||||
.append(span);
|
||||
var pc = new PasswordCtrl();
|
||||
input.val('abc');
|
||||
pc.grade();
|
||||
expect(span.text()).toEqual('weak');
|
||||
$('body').empty();
|
||||
```
|
||||
|
||||
In angular the controllers are strictly separated from the DOM manipulation logic and this results in
|
||||
a much easier testability story as the following example shows:
|
||||
|
||||
```js
|
||||
function PasswordCtrl($scope) {
|
||||
$scope.password = '';
|
||||
$scope.grade = function() {
|
||||
var size = $scope.password.length;
|
||||
if (size > 8) {
|
||||
$scope.strength = 'strong';
|
||||
} else if (size > 3) {
|
||||
$scope.strength = 'medium';
|
||||
} else {
|
||||
$scope.strength = 'weak';
|
||||
}
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
and the test is straight forward:
|
||||
|
||||
```js
|
||||
var $scope = {};
|
||||
var pc = $controller('PasswordCtrl', { $scope: $scope });
|
||||
$scope.password = 'abc';
|
||||
$scope.grade();
|
||||
expect($scope.strength).toEqual('weak');
|
||||
```
|
||||
|
||||
Notice that the test is not only much shorter, it is also easier to follow what is happening. We say
|
||||
that such a test tells a story, rather than asserting random bits which don't seem to be related.
|
||||
|
||||
## Filters
|
||||
## Testing Filters
|
||||
{@link ng.$filterProvider Filters} are functions which transform the data into a user readable
|
||||
format. They are important because they remove the formatting responsibility from the application
|
||||
logic, further simplifying the application logic.
|
||||
@@ -273,12 +259,20 @@ myModule.filter('length', function() {
|
||||
}
|
||||
});
|
||||
|
||||
var length = $filter('length');
|
||||
expect(length(null)).toEqual(0);
|
||||
expect(length('abc')).toEqual(3);
|
||||
describe('length filter', function() {
|
||||
it('returns 0 when given null', function() {
|
||||
var length = $filter('length');
|
||||
expect(length(null)).toEqual(0);
|
||||
});
|
||||
|
||||
it('returns the correct value when given a string of chars', function() {
|
||||
var length = $filter('length');
|
||||
expect(length('abc')).toEqual(3);
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
## Directives
|
||||
## Testing Directives
|
||||
Directives in angular are responsible for encapsulating complex functionality within custom HTML tags,
|
||||
attributes, classes or comments. Unit tests are very important for directives because the components
|
||||
you create with directives may be used throughout your application and in many different contexts.
|
||||
@@ -309,28 +303,28 @@ verify this functionality. Note that the expression `{{1 + 1}}` times will also
|
||||
|
||||
```js
|
||||
describe('Unit testing great quotes', function() {
|
||||
var $compile;
|
||||
var $rootScope;
|
||||
var $compile,
|
||||
$rootScope;
|
||||
|
||||
// Load the myApp module, which contains the directive
|
||||
beforeEach(module('myApp'));
|
||||
// Load the myApp module, which contains the directive
|
||||
beforeEach(module('myApp'));
|
||||
|
||||
// Store references to $rootScope and $compile
|
||||
// so they are available to all tests in this describe block
|
||||
beforeEach(inject(function(_$compile_, _$rootScope_){
|
||||
// The injector unwraps the underscores (_) from around the parameter names when matching
|
||||
$compile = _$compile_;
|
||||
$rootScope = _$rootScope_;
|
||||
}));
|
||||
// Store references to $rootScope and $compile
|
||||
// so they are available to all tests in this describe block
|
||||
beforeEach(inject(function(_$compile_, _$rootScope_){
|
||||
// The injector unwraps the underscores (_) from around the parameter names when matching
|
||||
$compile = _$compile_;
|
||||
$rootScope = _$rootScope_;
|
||||
}));
|
||||
|
||||
it('Replaces the element with the appropriate content', function() {
|
||||
// Compile a piece of HTML containing the directive
|
||||
var element = $compile("<a-great-eye></a-great-eye>")($rootScope);
|
||||
// fire all the watches, so the scope expression {{1 + 1}} will be evaluated
|
||||
$rootScope.$digest();
|
||||
// Check that the compiled element contains the templated content
|
||||
expect(element.html()).toContain("lidless, wreathed in flame, 2 times");
|
||||
});
|
||||
it('Replaces the element with the appropriate content', function() {
|
||||
// Compile a piece of HTML containing the directive
|
||||
var element = $compile("<a-great-eye></a-great-eye>")($rootScope);
|
||||
// fire all the watches, so the scope expression {{1 + 1}} will be evaluated
|
||||
$rootScope.$digest();
|
||||
// Check that the compiled element contains the templated content
|
||||
expect(element.html()).toContain("lidless, wreathed in flame, 2 times");
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
@@ -431,4 +425,3 @@ Otherwise you may run into issues if the test directory hierarchy differs from t
|
||||
|
||||
## Sample project
|
||||
See the [angular-seed](https://github.com/angular/angular-seed) project for an example.
|
||||
|
||||
|
||||
@@ -267,7 +267,7 @@ goog.i18n.currency.adjustPrecision = function(pattern, currencyCode) {
|
||||
* 18: two decimals precision (2), currency sign last (16), no space (0)
|
||||
* 50: two decimals precision (2), currency sign last (16), space (32)
|
||||
*
|
||||
* @type {!Object.<!Array.<?>>}
|
||||
* @const {!Object<!Array<?>>}
|
||||
*/
|
||||
goog.i18n.currency.CurrencyInfo = {
|
||||
'AED': [2, 'dh', '\u062f.\u0625.', 'DH'],
|
||||
@@ -334,7 +334,7 @@ goog.i18n.currency.CurrencyInfo = {
|
||||
|
||||
/**
|
||||
* Tier 2 currency information.
|
||||
* @type {!Object.<!Array.<?>>}
|
||||
* @const {!Object<!Array<?>>}
|
||||
*/
|
||||
goog.i18n.currency.CurrencyInfoTier2 = {
|
||||
'AFN': [48, 'Af.', 'AFN'],
|
||||
|
||||
+354
-308
File diff suppressed because it is too large
Load Diff
+1820
-1710
File diff suppressed because it is too large
Load Diff
@@ -18,7 +18,7 @@
|
||||
* This file is autogenerated by script:
|
||||
* http://go/generate_number_constants.py
|
||||
* using the --for_closure flag.
|
||||
* File generated from CLDR ver. 25
|
||||
* File generated from CLDR ver. 26
|
||||
*
|
||||
* To reduce the file size (which may cause issues in some JS
|
||||
* developing environments), this file will only contain locales
|
||||
@@ -42,7 +42,6 @@ goog.provide('goog.i18n.NumberFormatSymbols_am_ET');
|
||||
goog.provide('goog.i18n.NumberFormatSymbols_ar');
|
||||
goog.provide('goog.i18n.NumberFormatSymbols_ar_001');
|
||||
goog.provide('goog.i18n.NumberFormatSymbols_az');
|
||||
goog.provide('goog.i18n.NumberFormatSymbols_az_Cyrl_AZ');
|
||||
goog.provide('goog.i18n.NumberFormatSymbols_az_Latn_AZ');
|
||||
goog.provide('goog.i18n.NumberFormatSymbols_bg');
|
||||
goog.provide('goog.i18n.NumberFormatSymbols_bg_BG');
|
||||
@@ -364,13 +363,6 @@ goog.i18n.NumberFormatSymbols_az = {
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Number formatting symbols for locale az_Cyrl_AZ.
|
||||
* @enum {string}
|
||||
*/
|
||||
goog.i18n.NumberFormatSymbols_az_Cyrl_AZ = goog.i18n.NumberFormatSymbols_az;
|
||||
|
||||
|
||||
/**
|
||||
* Number formatting symbols for locale az_Latn_AZ.
|
||||
* @enum {string}
|
||||
@@ -455,8 +447,8 @@ goog.i18n.NumberFormatSymbols_br = {
|
||||
NAN: 'NaN',
|
||||
DECIMAL_PATTERN: '#,##0.###',
|
||||
SCIENTIFIC_PATTERN: '#E0',
|
||||
PERCENT_PATTERN: '#,##0%',
|
||||
CURRENCY_PATTERN: '\u00A4\u00A0#,##0.00',
|
||||
PERCENT_PATTERN: '#,##0\u00A0%',
|
||||
CURRENCY_PATTERN: '#,##0.00\u00A0\u00A4',
|
||||
DEF_CURRENCY_CODE: 'EUR'
|
||||
};
|
||||
|
||||
@@ -1063,7 +1055,7 @@ goog.i18n.NumberFormatSymbols_es = {
|
||||
NAN: 'NaN',
|
||||
DECIMAL_PATTERN: '#,##0.###',
|
||||
SCIENTIFIC_PATTERN: '#E0',
|
||||
PERCENT_PATTERN: '#,##0%',
|
||||
PERCENT_PATTERN: '#,##0\u00A0%',
|
||||
CURRENCY_PATTERN: '#,##0.00\u00A0\u00A4',
|
||||
DEF_CURRENCY_CODE: 'EUR'
|
||||
};
|
||||
@@ -1086,7 +1078,7 @@ goog.i18n.NumberFormatSymbols_es_419 = {
|
||||
NAN: 'NaN',
|
||||
DECIMAL_PATTERN: '#,##0.###',
|
||||
SCIENTIFIC_PATTERN: '#E0',
|
||||
PERCENT_PATTERN: '#,##0%',
|
||||
PERCENT_PATTERN: '#,##0\u00A0%',
|
||||
CURRENCY_PATTERN: '\u00A4#,##0.00',
|
||||
DEF_CURRENCY_CODE: 'MXN'
|
||||
};
|
||||
@@ -1492,7 +1484,7 @@ goog.i18n.NumberFormatSymbols_gu = {
|
||||
INFINITY: '\u221E',
|
||||
NAN: 'NaN',
|
||||
DECIMAL_PATTERN: '#,##,##0.###',
|
||||
SCIENTIFIC_PATTERN: '#E0',
|
||||
SCIENTIFIC_PATTERN: '[#E0]',
|
||||
PERCENT_PATTERN: '#,##,##0%',
|
||||
CURRENCY_PATTERN: '\u00A4#,##,##0.00',
|
||||
DEF_CURRENCY_CODE: 'INR'
|
||||
@@ -1582,7 +1574,7 @@ goog.i18n.NumberFormatSymbols_hi = {
|
||||
INFINITY: '\u221E',
|
||||
NAN: 'NaN',
|
||||
DECIMAL_PATTERN: '#,##,##0.###',
|
||||
SCIENTIFIC_PATTERN: '#E0',
|
||||
SCIENTIFIC_PATTERN: '[#E0]',
|
||||
PERCENT_PATTERN: '#,##,##0%',
|
||||
CURRENCY_PATTERN: '\u00A4#,##,##0.00',
|
||||
DEF_CURRENCY_CODE: 'INR'
|
||||
@@ -1961,7 +1953,7 @@ goog.i18n.NumberFormatSymbols_kn = {
|
||||
ZERO_DIGIT: '0',
|
||||
PLUS_SIGN: '+',
|
||||
MINUS_SIGN: '-',
|
||||
EXP_SYMBOL: '\u0C88',
|
||||
EXP_SYMBOL: 'E',
|
||||
PERMILL: '\u2030',
|
||||
INFINITY: '\u221E',
|
||||
NAN: 'NaN',
|
||||
@@ -2085,7 +2077,7 @@ goog.i18n.NumberFormatSymbols_lo = {
|
||||
PERMILL: '\u2030',
|
||||
INFINITY: '\u221E',
|
||||
NAN:
|
||||
'\u0E9A\u0ECD\u0EC8\u0EC1\u0EA1\u0EC8\u0E99\u0EC2\u0E95\u0EC0\u0EA5\u0E81',
|
||||
'\u0E9A\u0ECD\u0EC8\u200B\u0EC1\u0EA1\u0EC8\u0E99\u200B\u0EC2\u0E95\u200B\u0EC0\u0EA5\u0E81',
|
||||
DECIMAL_PATTERN: '#,##0.###',
|
||||
SCIENTIFIC_PATTERN: '#',
|
||||
PERCENT_PATTERN: '#,##0%',
|
||||
@@ -2149,7 +2141,7 @@ goog.i18n.NumberFormatSymbols_lv = {
|
||||
DECIMAL_PATTERN: '#,##0.###',
|
||||
SCIENTIFIC_PATTERN: '#E0',
|
||||
PERCENT_PATTERN: '#,##0%',
|
||||
CURRENCY_PATTERN: '\u00A4#,##0.00',
|
||||
CURRENCY_PATTERN: '\u00A4#0.00',
|
||||
DEF_CURRENCY_CODE: 'EUR'
|
||||
};
|
||||
|
||||
@@ -2208,8 +2200,8 @@ goog.i18n.NumberFormatSymbols_ml = {
|
||||
NAN: 'NaN',
|
||||
DECIMAL_PATTERN: '#,##,##0.###',
|
||||
SCIENTIFIC_PATTERN: '#E0',
|
||||
PERCENT_PATTERN: '#,##,##0%',
|
||||
CURRENCY_PATTERN: '#,##,##0.00\u00A4',
|
||||
PERCENT_PATTERN: '#,##0%',
|
||||
CURRENCY_PATTERN: '\u00A4#,##0.00',
|
||||
DEF_CURRENCY_CODE: 'INR'
|
||||
};
|
||||
|
||||
@@ -2266,7 +2258,7 @@ goog.i18n.NumberFormatSymbols_mr = {
|
||||
PERMILL: '\u2030',
|
||||
INFINITY: '\u221E',
|
||||
NAN: 'NaN',
|
||||
DECIMAL_PATTERN: '#,##0.###',
|
||||
DECIMAL_PATTERN: '#,##,##0.###',
|
||||
SCIENTIFIC_PATTERN: '[#E0]',
|
||||
PERCENT_PATTERN: '#,##0%',
|
||||
CURRENCY_PATTERN: '\u00A4#,##0.00',
|
||||
@@ -2427,7 +2419,7 @@ goog.i18n.NumberFormatSymbols_ne = {
|
||||
DECIMAL_PATTERN: '#,##0.###',
|
||||
SCIENTIFIC_PATTERN: '#E0',
|
||||
PERCENT_PATTERN: '#,##0%',
|
||||
CURRENCY_PATTERN: '\u00A4#,##0.00',
|
||||
CURRENCY_PATTERN: '\u00A4\u00A0#,##0.00',
|
||||
DEF_CURRENCY_CODE: 'NPR'
|
||||
};
|
||||
|
||||
@@ -2545,7 +2537,7 @@ goog.i18n.NumberFormatSymbols_pa = {
|
||||
INFINITY: '\u221E',
|
||||
NAN: 'NaN',
|
||||
DECIMAL_PATTERN: '#,##,##0.###',
|
||||
SCIENTIFIC_PATTERN: '#E0',
|
||||
SCIENTIFIC_PATTERN: '[#E0]',
|
||||
PERCENT_PATTERN: '#,##,##0%',
|
||||
CURRENCY_PATTERN: '\u00A4#,##,##0.00',
|
||||
DEF_CURRENCY_CODE: 'INR'
|
||||
@@ -2718,7 +2710,7 @@ goog.i18n.NumberFormatSymbols_si = {
|
||||
INFINITY: '\u221E',
|
||||
NAN: 'NaN',
|
||||
DECIMAL_PATTERN: '#,##0.###',
|
||||
SCIENTIFIC_PATTERN: '#E0',
|
||||
SCIENTIFIC_PATTERN: '#',
|
||||
PERCENT_PATTERN: '#,##0%',
|
||||
CURRENCY_PATTERN: '\u00A4#,##0.00',
|
||||
DEF_CURRENCY_CODE: 'LKR'
|
||||
@@ -2957,10 +2949,10 @@ goog.i18n.NumberFormatSymbols_te = {
|
||||
PERMILL: '\u2030',
|
||||
INFINITY: '\u221E',
|
||||
NAN: 'NaN',
|
||||
DECIMAL_PATTERN: '#,##0.###',
|
||||
DECIMAL_PATTERN: '#,##,##0.###',
|
||||
SCIENTIFIC_PATTERN: '#E0',
|
||||
PERCENT_PATTERN: '#,##0%',
|
||||
CURRENCY_PATTERN: '\u00A4#,##0.00',
|
||||
CURRENCY_PATTERN: '\u00A4#,##,##0.00',
|
||||
DEF_CURRENCY_CODE: 'INR'
|
||||
};
|
||||
|
||||
@@ -3102,8 +3094,8 @@ goog.i18n.NumberFormatSymbols_ur = {
|
||||
NAN: 'NaN',
|
||||
DECIMAL_PATTERN: '#,##0.###',
|
||||
SCIENTIFIC_PATTERN: '#E0',
|
||||
PERCENT_PATTERN: '#,##0%',
|
||||
CURRENCY_PATTERN: '\u00A4#,##0.00\u200E',
|
||||
PERCENT_PATTERN: '#,##,##0%',
|
||||
CURRENCY_PATTERN: '\u00A4\u00A0#,##,##0.00',
|
||||
DEF_CURRENCY_CODE: 'PKR'
|
||||
};
|
||||
|
||||
@@ -3321,10 +3313,6 @@ if (goog.LOCALE == 'az') {
|
||||
goog.i18n.NumberFormatSymbols = goog.i18n.NumberFormatSymbols_az;
|
||||
}
|
||||
|
||||
if (goog.LOCALE == 'az_Cyrl_AZ' || goog.LOCALE == 'az-Cyrl-AZ') {
|
||||
goog.i18n.NumberFormatSymbols = goog.i18n.NumberFormatSymbols_az;
|
||||
}
|
||||
|
||||
if (goog.LOCALE == 'az_Latn_AZ' || goog.LOCALE == 'az-Latn-AZ') {
|
||||
goog.i18n.NumberFormatSymbols = goog.i18n.NumberFormatSymbols_az;
|
||||
}
|
||||
|
||||
+531
-375
File diff suppressed because it is too large
Load Diff
+44
-27
@@ -17,7 +17,7 @@
|
||||
*
|
||||
* This file is autogenerated by script:
|
||||
* http://go/generate_pluralrules.py
|
||||
* File generated from CLDR ver. 25
|
||||
* File generated from CLDR ver. 26
|
||||
*
|
||||
* Before check in, this file could have been manually edited. This is to
|
||||
* incorporate changes before we could fix CLDR. All manual modification must be
|
||||
@@ -409,6 +409,23 @@ goog.i18n.pluralRules.srSelect_ = function(n, opt_precision) {
|
||||
return goog.i18n.pluralRules.Keyword.OTHER;
|
||||
};
|
||||
|
||||
/**
|
||||
* Plural select rules for mk locale
|
||||
*
|
||||
* @param {number} n The count of items.
|
||||
* @param {number=} opt_precision Precision for number formatting, if not default.
|
||||
* @return {goog.i18n.pluralRules.Keyword} Locale-specific plural value.
|
||||
* @private
|
||||
*/
|
||||
goog.i18n.pluralRules.mkSelect_ = function(n, opt_precision) {
|
||||
var i = n | 0;
|
||||
var vf = goog.i18n.pluralRules.get_vf_(n, opt_precision);
|
||||
if (vf.v == 0 && i % 10 == 1 || vf.f % 10 == 1) {
|
||||
return goog.i18n.pluralRules.Keyword.ONE;
|
||||
}
|
||||
return goog.i18n.pluralRules.Keyword.OTHER;
|
||||
};
|
||||
|
||||
/**
|
||||
* Plural select rules for hi locale
|
||||
*
|
||||
@@ -426,17 +443,15 @@ goog.i18n.pluralRules.hiSelect_ = function(n, opt_precision) {
|
||||
};
|
||||
|
||||
/**
|
||||
* Plural select rules for mk locale
|
||||
* Plural select rules for pt locale
|
||||
*
|
||||
* @param {number} n The count of items.
|
||||
* @param {number=} opt_precision Precision for number formatting, if not default.
|
||||
* @return {goog.i18n.pluralRules.Keyword} Locale-specific plural value.
|
||||
* @private
|
||||
*/
|
||||
goog.i18n.pluralRules.mkSelect_ = function(n, opt_precision) {
|
||||
var i = n | 0;
|
||||
var vf = goog.i18n.pluralRules.get_vf_(n, opt_precision);
|
||||
if (vf.v == 0 && i % 10 == 1 || vf.f % 10 == 1) {
|
||||
goog.i18n.pluralRules.ptSelect_ = function(n, opt_precision) {
|
||||
if (n >= 0 && n <= 2 && n != 2) {
|
||||
return goog.i18n.pluralRules.Keyword.ONE;
|
||||
}
|
||||
return goog.i18n.pluralRules.Keyword.OTHER;
|
||||
@@ -562,24 +577,6 @@ goog.i18n.pluralRules.akSelect_ = function(n, opt_precision) {
|
||||
return goog.i18n.pluralRules.Keyword.OTHER;
|
||||
};
|
||||
|
||||
/**
|
||||
* Plural select rules for pt locale
|
||||
*
|
||||
* @param {number} n The count of items.
|
||||
* @param {number=} opt_precision Precision for number formatting, if not default.
|
||||
* @return {goog.i18n.pluralRules.Keyword} Locale-specific plural value.
|
||||
* @private
|
||||
*/
|
||||
goog.i18n.pluralRules.ptSelect_ = function(n, opt_precision) {
|
||||
var i = n | 0;
|
||||
var vf = goog.i18n.pluralRules.get_vf_(n, opt_precision);
|
||||
var wt = goog.i18n.pluralRules.get_wt_(vf.v, vf.f);
|
||||
if (i == 1 && vf.v == 0 || i == 0 && wt.t == 1) {
|
||||
return goog.i18n.pluralRules.Keyword.ONE;
|
||||
}
|
||||
return goog.i18n.pluralRules.Keyword.OTHER;
|
||||
};
|
||||
|
||||
/**
|
||||
* Plural select rules for pl locale
|
||||
*
|
||||
@@ -748,6 +745,29 @@ goog.i18n.pluralRules.gdSelect_ = function(n, opt_precision) {
|
||||
return goog.i18n.pluralRules.Keyword.OTHER;
|
||||
};
|
||||
|
||||
/**
|
||||
* Plural select rules for dsb locale
|
||||
*
|
||||
* @param {number} n The count of items.
|
||||
* @param {number=} opt_precision Precision for number formatting, if not default.
|
||||
* @return {goog.i18n.pluralRules.Keyword} Locale-specific plural value.
|
||||
* @private
|
||||
*/
|
||||
goog.i18n.pluralRules.dsbSelect_ = function(n, opt_precision) {
|
||||
var i = n | 0;
|
||||
var vf = goog.i18n.pluralRules.get_vf_(n, opt_precision);
|
||||
if (vf.v == 0 && i % 100 == 1 || vf.f % 100 == 1) {
|
||||
return goog.i18n.pluralRules.Keyword.ONE;
|
||||
}
|
||||
if (vf.v == 0 && i % 100 == 2 || vf.f % 100 == 2) {
|
||||
return goog.i18n.pluralRules.Keyword.TWO;
|
||||
}
|
||||
if (vf.v == 0 && i % 100 >= 3 && i % 100 <= 4 || vf.f % 100 >= 3 && vf.f % 100 <= 4) {
|
||||
return goog.i18n.pluralRules.Keyword.FEW;
|
||||
}
|
||||
return goog.i18n.pluralRules.Keyword.OTHER;
|
||||
};
|
||||
|
||||
/**
|
||||
* Plural select rules for lv locale
|
||||
*
|
||||
@@ -852,9 +872,6 @@ if (goog.LOCALE == 'en_IE' || goog.LOCALE == 'en-IE') {
|
||||
if (goog.LOCALE == 'en_IN' || goog.LOCALE == 'en-IN') {
|
||||
goog.i18n.pluralRules.select = goog.i18n.pluralRules.enSelect_;
|
||||
}
|
||||
if (goog.LOCALE == 'en_ISO' || goog.LOCALE == 'en-ISO') {
|
||||
goog.i18n.pluralRules.select = goog.i18n.pluralRules.enSelect_;
|
||||
}
|
||||
if (goog.LOCALE == 'en_SG' || goog.LOCALE == 'en-SG') {
|
||||
goog.i18n.pluralRules.select = goog.i18n.pluralRules.enSelect_;
|
||||
}
|
||||
|
||||
@@ -91,15 +91,6 @@ var getTaggedVersion = function() {
|
||||
return null;
|
||||
};
|
||||
|
||||
/**
|
||||
* Stable versions have an even minor version and have no prerelease
|
||||
* @param {SemVer} version The version to test
|
||||
* @return {Boolean} True if the version is stable
|
||||
*/
|
||||
var isStable = function(version) {
|
||||
return semver.satisfies(version, '1.0 || 1.2') && version.prerelease.length === 0;
|
||||
};
|
||||
|
||||
/**
|
||||
* Get a collection of all the previous versions sorted by semantic version
|
||||
* @return {Array.<SemVer>} The collection of previous versions
|
||||
@@ -119,8 +110,6 @@ var getPreviousVersions = function() {
|
||||
})
|
||||
.filter()
|
||||
.map(function(version) {
|
||||
version.isStable = isStable(version);
|
||||
|
||||
version.docsUrl = 'http://code.angularjs.org/' + version.version + '/docs';
|
||||
// Versions before 1.0.2 had a different docs folder name
|
||||
if ( version.major < 1 || (version.major === 1 && version.minor === 0 && version.dot < 2 ) ) {
|
||||
|
||||
Generated
+7
-7
@@ -1395,7 +1395,7 @@
|
||||
}
|
||||
},
|
||||
"dgeni-packages": {
|
||||
"version": "0.10.5",
|
||||
"version": "0.10.7",
|
||||
"dependencies": {
|
||||
"catharsis": {
|
||||
"version": "0.7.1"
|
||||
@@ -1454,7 +1454,7 @@
|
||||
"version": "1.2.2"
|
||||
},
|
||||
"estraverse": {
|
||||
"version": "1.5.1"
|
||||
"version": "1.7.1"
|
||||
},
|
||||
"glob": {
|
||||
"version": "3.2.11",
|
||||
@@ -1465,16 +1465,16 @@
|
||||
}
|
||||
},
|
||||
"htmlparser2": {
|
||||
"version": "3.7.3",
|
||||
"version": "3.8.2",
|
||||
"dependencies": {
|
||||
"domhandler": {
|
||||
"version": "2.2.0"
|
||||
"version": "2.3.0"
|
||||
},
|
||||
"domutils": {
|
||||
"version": "1.5.0"
|
||||
},
|
||||
"domelementtype": {
|
||||
"version": "1.1.1"
|
||||
"version": "1.1.3"
|
||||
},
|
||||
"readable-stream": {
|
||||
"version": "1.1.13",
|
||||
@@ -1528,7 +1528,7 @@
|
||||
"dependencies": {
|
||||
"fsevents": {
|
||||
"version": "0.2.1",
|
||||
"from": "fsevents@git://github.com/pipobscure/fsevents#7dcdf9fa3f8956610fd6f69f72c67bace2de7138",
|
||||
"from": "git://github.com/pipobscure/fsevents#7dcdf9fa3f8956610fd6f69f72c67bace2de7138",
|
||||
"resolved": "git://github.com/pipobscure/fsevents#7dcdf9fa3f8956610fd6f69f72c67bace2de7138",
|
||||
"dependencies": {
|
||||
"nan": {
|
||||
@@ -1596,7 +1596,7 @@
|
||||
"version": "0.0.10",
|
||||
"dependencies": {
|
||||
"combined-stream": {
|
||||
"version": "0.0.5",
|
||||
"version": "0.0.7",
|
||||
"dependencies": {
|
||||
"delayed-stream": {
|
||||
"version": "0.0.5"
|
||||
|
||||
@@ -96,8 +96,14 @@ function publish {
|
||||
# don't publish every build to npm
|
||||
if [ "${NEW_VERSION/+sha}" = "$NEW_VERSION" ] ; then
|
||||
if [ "${NEW_VERSION/-}" = "$NEW_VERSION" ] ; then
|
||||
# publish releases as "latest"
|
||||
npm publish
|
||||
if [[ $NEW_VERSION =~ ^1\.2\.[0-9]+$ ]] ; then
|
||||
# publish 1.2.x releases with the appropriate tag
|
||||
# this ensures that `npm install` by default will not grab `1.2.x` releases
|
||||
npm publish --tag=old
|
||||
else
|
||||
# publish releases as "latest"
|
||||
npm publish
|
||||
fi
|
||||
else
|
||||
# publish prerelease builds with the beta tag
|
||||
npm publish --tag=beta
|
||||
|
||||
+4
-4
@@ -362,7 +362,7 @@ function int(str) {
|
||||
|
||||
|
||||
function inherit(parent, extra) {
|
||||
return extend(new (extend(function() {}, {prototype:parent}))(), extra);
|
||||
return extend(Object.create(parent), extra);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -625,7 +625,7 @@ function makeMap(str) {
|
||||
|
||||
|
||||
function nodeName_(element) {
|
||||
return lowercase(element.nodeName || element[0].nodeName);
|
||||
return lowercase(element.nodeName || (element[0] && element[0].nodeName));
|
||||
}
|
||||
|
||||
function includes(array, obj) {
|
||||
@@ -1331,8 +1331,8 @@ function angularInit(element, bootstrap) {
|
||||
* @param {Object=} config an object for defining configuration options for the application. The
|
||||
* following keys are supported:
|
||||
*
|
||||
* - `strictDi`: disable automatic function annotation for the application. This is meant to
|
||||
* assist in finding bugs which break minified code.
|
||||
* * `strictDi` - disable automatic function annotation for the application. This is meant to
|
||||
* assist in finding bugs which break minified code. Defaults to `false`.
|
||||
*
|
||||
* @returns {auto.$injector} Returns the newly created injector for this app.
|
||||
*/
|
||||
|
||||
+14
-10
@@ -10,9 +10,10 @@
|
||||
* Creates an injector object that can be used for retrieving services as well as for
|
||||
* dependency injection (see {@link guide/di dependency injection}).
|
||||
*
|
||||
|
||||
* @param {Array.<string|Function>} modules A list of module functions or their aliases. See
|
||||
* {@link angular.module}. The `ng` module must be explicitly added.
|
||||
* {@link angular.module}. The `ng` module must be explicitly added.
|
||||
* @param {boolean=} [strictDi=false] Whether the injector should be in strict mode, which
|
||||
* disallows argument name annotation inference.
|
||||
* @returns {injector} Injector object. See {@link auto.$injector $injector}.
|
||||
*
|
||||
* @example
|
||||
@@ -158,8 +159,10 @@ function annotate(fn, strictDi, name) {
|
||||
* ## Inference
|
||||
*
|
||||
* In JavaScript calling `toString()` on a function returns the function definition. The definition
|
||||
* can then be parsed and the function arguments can be extracted. *NOTE:* This does not work with
|
||||
* minification, and obfuscation tools since these tools change the argument names.
|
||||
* can then be parsed and the function arguments can be extracted. This method of discovering
|
||||
* annotations is disallowed when the injector is in strict mode.
|
||||
* *NOTE:* This does not work with minification, and obfuscation tools since these tools change the
|
||||
* argument names.
|
||||
*
|
||||
* ## `$inject` Annotation
|
||||
* By adding an `$inject` property onto a function the injection parameters can be specified.
|
||||
@@ -244,6 +247,8 @@ function annotate(fn, strictDi, name) {
|
||||
* expect(injector.annotate(MyController)).toEqual(['$scope', '$route']);
|
||||
* ```
|
||||
*
|
||||
* You can disallow this method by using strict injection mode.
|
||||
*
|
||||
* This method does not work with code minification / obfuscation. For this reason the following
|
||||
* annotation strategies are supported.
|
||||
*
|
||||
@@ -296,6 +301,8 @@ function annotate(fn, strictDi, name) {
|
||||
* @param {Function|Array.<string|Function>} fn Function for which dependent service names need to
|
||||
* be retrieved as described above.
|
||||
*
|
||||
* @param {boolean=} [strictDi=false] Disallow argument name annotation inference.
|
||||
*
|
||||
* @returns {Array.<string>} The names of the services which the function requires.
|
||||
*/
|
||||
|
||||
@@ -815,14 +822,11 @@ function createInjector(modulesToLoad, strictDi) {
|
||||
}
|
||||
|
||||
function instantiate(Type, locals, serviceName) {
|
||||
var Constructor = function() {},
|
||||
instance, returnedValue;
|
||||
|
||||
// Check if Type is annotated and use just the given function at n-1 as parameter
|
||||
// e.g. someModule.factory('greeter', ['$window', function(renamed$window) {}]);
|
||||
Constructor.prototype = (isArray(Type) ? Type[Type.length - 1] : Type).prototype;
|
||||
instance = new Constructor();
|
||||
returnedValue = invoke(Type, instance, locals, serviceName);
|
||||
// Object creation: http://jsperf.com/create-constructor/2
|
||||
var instance = Object.create((isArray(Type) ? Type[Type.length - 1] : Type).prototype);
|
||||
var returnedValue = invoke(Type, instance, locals, serviceName);
|
||||
|
||||
return isObject(returnedValue) || isFunction(returnedValue) ? returnedValue : instance;
|
||||
}
|
||||
|
||||
+3
-1
@@ -87,10 +87,12 @@
|
||||
* `'ngModel'`).
|
||||
* - `injector()` - retrieves the injector of the current element or its parent.
|
||||
* - `scope()` - retrieves the {@link ng.$rootScope.Scope scope} of the current
|
||||
* element or its parent.
|
||||
* element or its parent. Requires {@link guide/production#disabling-debug-data Debug Data} to
|
||||
* be enabled.
|
||||
* - `isolateScope()` - retrieves an isolate {@link ng.$rootScope.Scope scope} if one is attached directly to the
|
||||
* current element. This getter should be used only on elements that contain a directive which starts a new isolate
|
||||
* scope. Calling `scope()` on this element always returns the original non-isolate scope.
|
||||
* Requires {@link guide/production#disabling-debug-data Debug Data} to be enabled.
|
||||
* - `inheritedData()` - same as `data()`, but walks up the DOM until a value is found or the top
|
||||
* parent element is reached.
|
||||
*
|
||||
|
||||
+1
-1
@@ -170,7 +170,7 @@ function Browser(window, document, $log, $sniffer) {
|
||||
// IE<10 from getting into redirect loop when in LocationHashbangInHtml5Url mode.
|
||||
// See https://github.com/angular/angular.js/commit/ffb2701
|
||||
if (lastBrowserUrl === url && (!$sniffer.history || sameState)) {
|
||||
return;
|
||||
return self;
|
||||
}
|
||||
var sameBase = lastBrowserUrl && stripHash(lastBrowserUrl) === stripHash(url);
|
||||
lastBrowserUrl = url;
|
||||
|
||||
+4
-4
@@ -2227,10 +2227,10 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
|
||||
var childBoundTranscludeFn = boundTranscludeFn;
|
||||
if (scope.$$destroyed) return;
|
||||
if (linkQueue) {
|
||||
linkQueue.push(scope);
|
||||
linkQueue.push(node);
|
||||
linkQueue.push(rootElement);
|
||||
linkQueue.push(childBoundTranscludeFn);
|
||||
linkQueue.push(scope,
|
||||
node,
|
||||
rootElement,
|
||||
childBoundTranscludeFn);
|
||||
} else {
|
||||
if (afterTemplateNodeLinkFn.transcludeOnThisElement) {
|
||||
childBoundTranscludeFn = createBoundTranscludeFn(scope, afterTemplateNodeLinkFn.transclude, boundTranscludeFn);
|
||||
|
||||
@@ -108,10 +108,10 @@ function $ControllerProvider() {
|
||||
//
|
||||
// This feature is not intended for use by applications, and is thus not documented
|
||||
// publicly.
|
||||
var Constructor = function() {};
|
||||
Constructor.prototype = (isArray(expression) ?
|
||||
// Object creation: http://jsperf.com/create-constructor/2
|
||||
var controllerPrototype = (isArray(expression) ?
|
||||
expression[expression.length - 1] : expression).prototype;
|
||||
instance = new Constructor();
|
||||
instance = Object.create(controllerPrototype);
|
||||
|
||||
if (identifier) {
|
||||
addIdentifier(locals, identifier, instance, constructor || expression.name);
|
||||
|
||||
@@ -471,9 +471,7 @@ var formDirectiveFactory = function(isNgForm) {
|
||||
controller.$setSubmitted();
|
||||
});
|
||||
|
||||
event.preventDefault
|
||||
? event.preventDefault()
|
||||
: event.returnValue = false; // IE
|
||||
event.preventDefault();
|
||||
};
|
||||
|
||||
addEventListenerFn(formElement[0], 'submit', handleFormSubmission);
|
||||
|
||||
+155
-82
@@ -41,7 +41,8 @@ var inputType = {
|
||||
* @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than
|
||||
* minlength.
|
||||
* @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than
|
||||
* maxlength.
|
||||
* maxlength. Setting the attribute to a negative or non-numeric value, allows view values of
|
||||
* any length.
|
||||
* @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string
|
||||
* that contains the regular expression body that will be converted to a regular expression
|
||||
* as in the ngPattern directive.
|
||||
@@ -589,7 +590,8 @@ var inputType = {
|
||||
* @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than
|
||||
* minlength.
|
||||
* @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than
|
||||
* maxlength.
|
||||
* maxlength. Setting the attribute to a negative or non-numeric value, allows view values of
|
||||
* any length.
|
||||
* @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string
|
||||
* that contains the regular expression body that will be converted to a regular expression
|
||||
* as in the ngPattern directive.
|
||||
@@ -676,7 +678,8 @@ var inputType = {
|
||||
* @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than
|
||||
* minlength.
|
||||
* @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than
|
||||
* maxlength.
|
||||
* maxlength. Setting the attribute to a negative or non-numeric value, allows view values of
|
||||
* any length.
|
||||
* @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string
|
||||
* that contains the regular expression body that will be converted to a regular expression
|
||||
* as in the ngPattern directive.
|
||||
@@ -764,7 +767,8 @@ var inputType = {
|
||||
* @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than
|
||||
* minlength.
|
||||
* @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than
|
||||
* maxlength.
|
||||
* maxlength. Setting the attribute to a negative or non-numeric value, allows view values of
|
||||
* any length.
|
||||
* @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string
|
||||
* that contains the regular expression body that will be converted to a regular expression
|
||||
* as in the ngPattern directive.
|
||||
@@ -1035,7 +1039,7 @@ function baseInputType(scope, element, attr, ctrl, $sniffer, $browser) {
|
||||
element.on('change', listener);
|
||||
|
||||
ctrl.$render = function() {
|
||||
element.val(ctrl.$isEmpty(ctrl.$modelValue) ? '' : ctrl.$viewValue);
|
||||
element.val(ctrl.$isEmpty(ctrl.$viewValue) ? '' : ctrl.$viewValue);
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1145,10 +1149,10 @@ function createDateInputType(type, regexp, parseDate, format) {
|
||||
});
|
||||
|
||||
ctrl.$formatters.push(function(value) {
|
||||
if (!ctrl.$isEmpty(value)) {
|
||||
if (!isDate(value)) {
|
||||
throw $ngModelMinErr('datefmt', 'Expected `{0}` to be a date', value);
|
||||
}
|
||||
if (value && !isDate(value)) {
|
||||
throw $ngModelMinErr('datefmt', 'Expected `{0}` to be a date', value);
|
||||
}
|
||||
if (isValidDate(value)) {
|
||||
previousDate = value;
|
||||
if (previousDate && timezone === 'UTC') {
|
||||
var timezoneOffset = 60000 * previousDate.getTimezoneOffset();
|
||||
@@ -1157,14 +1161,14 @@ function createDateInputType(type, regexp, parseDate, format) {
|
||||
return $filter('date')(value, format, timezone);
|
||||
} else {
|
||||
previousDate = null;
|
||||
return '';
|
||||
}
|
||||
return '';
|
||||
});
|
||||
|
||||
if (isDefined(attr.min) || attr.ngMin) {
|
||||
var minVal;
|
||||
ctrl.$validators.min = function(value) {
|
||||
return ctrl.$isEmpty(value) || isUndefined(minVal) || parseDate(value) >= minVal;
|
||||
return !isValidDate(value) || isUndefined(minVal) || parseDate(value) >= minVal;
|
||||
};
|
||||
attr.$observe('min', function(val) {
|
||||
minVal = parseObservedDateValue(val);
|
||||
@@ -1175,18 +1179,18 @@ function createDateInputType(type, regexp, parseDate, format) {
|
||||
if (isDefined(attr.max) || attr.ngMax) {
|
||||
var maxVal;
|
||||
ctrl.$validators.max = function(value) {
|
||||
return ctrl.$isEmpty(value) || isUndefined(maxVal) || parseDate(value) <= maxVal;
|
||||
return !isValidDate(value) || isUndefined(maxVal) || parseDate(value) <= maxVal;
|
||||
};
|
||||
attr.$observe('max', function(val) {
|
||||
maxVal = parseObservedDateValue(val);
|
||||
ctrl.$validate();
|
||||
});
|
||||
}
|
||||
// Override the standard $isEmpty to detect invalid dates as well
|
||||
ctrl.$isEmpty = function(value) {
|
||||
|
||||
function isValidDate(value) {
|
||||
// Invalid Date: getTime() returns NaN
|
||||
return !value || (value.getTime && value.getTime() !== value.getTime());
|
||||
};
|
||||
return value && !(value.getTime && value.getTime() !== value.getTime());
|
||||
}
|
||||
|
||||
function parseObservedDateValue(val) {
|
||||
return isDefined(val) ? (isDate(val) ? val : parseDate(val)) : undefined;
|
||||
@@ -1270,7 +1274,8 @@ function urlInputType(scope, element, attr, ctrl, $sniffer, $browser) {
|
||||
stringBasedInputType(ctrl);
|
||||
|
||||
ctrl.$$parserName = 'url';
|
||||
ctrl.$validators.url = function(value) {
|
||||
ctrl.$validators.url = function(modelValue, viewValue) {
|
||||
var value = modelValue || viewValue;
|
||||
return ctrl.$isEmpty(value) || URL_REGEXP.test(value);
|
||||
};
|
||||
}
|
||||
@@ -1282,7 +1287,8 @@ function emailInputType(scope, element, attr, ctrl, $sniffer, $browser) {
|
||||
stringBasedInputType(ctrl);
|
||||
|
||||
ctrl.$$parserName = 'email';
|
||||
ctrl.$validators.email = function(value) {
|
||||
ctrl.$validators.email = function(modelValue, viewValue) {
|
||||
var value = modelValue || viewValue;
|
||||
return ctrl.$isEmpty(value) || EMAIL_REGEXP.test(value);
|
||||
};
|
||||
}
|
||||
@@ -1336,9 +1342,11 @@ function checkboxInputType(scope, element, attr, ctrl, $sniffer, $browser, $filt
|
||||
element[0].checked = ctrl.$viewValue;
|
||||
};
|
||||
|
||||
// Override the standard `$isEmpty` because an empty checkbox is never equal to the trueValue
|
||||
// Override the standard `$isEmpty` because the $viewValue of an empty checkbox is always set to `false`
|
||||
// This is because of the parser below, which compares the `$modelValue` with `trueValue` to convert
|
||||
// it to a boolean.
|
||||
ctrl.$isEmpty = function(value) {
|
||||
return value !== trueValue;
|
||||
return value === false;
|
||||
};
|
||||
|
||||
ctrl.$formatters.push(function(value) {
|
||||
@@ -1370,7 +1378,8 @@ function checkboxInputType(scope, element, attr, ctrl, $sniffer, $browser, $filt
|
||||
* @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than
|
||||
* minlength.
|
||||
* @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than
|
||||
* maxlength.
|
||||
* maxlength. Setting the attribute to a negative or non-numeric value, allows view values of any
|
||||
* length.
|
||||
* @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the
|
||||
* RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for
|
||||
* patterns defined as scope expressions.
|
||||
@@ -1402,7 +1411,8 @@ function checkboxInputType(scope, element, attr, ctrl, $sniffer, $browser, $filt
|
||||
* @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than
|
||||
* minlength.
|
||||
* @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than
|
||||
* maxlength.
|
||||
* maxlength. Setting the attribute to a negative or non-numeric value, allows view values of any
|
||||
* length.
|
||||
* @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the
|
||||
* RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for
|
||||
* patterns defined as scope expressions.
|
||||
@@ -1618,13 +1628,18 @@ is set to `true`. The parse error is stored in `ngModel.$error.parse`.
|
||||
*
|
||||
* @description
|
||||
*
|
||||
* `NgModelController` provides API for the `ng-model` directive. The controller contains
|
||||
* services for data-binding, validation, CSS updates, and value formatting and parsing. It
|
||||
* purposefully does not contain any logic which deals with DOM rendering or listening to
|
||||
* DOM events. Such DOM related logic should be provided by other directives which make use of
|
||||
* `NgModelController` for data-binding.
|
||||
* `NgModelController` provides API for the {@link ngModel `ngModel`} directive.
|
||||
* The controller contains services for data-binding, validation, CSS updates, and value formatting
|
||||
* and parsing. It purposefully does not contain any logic which deals with DOM rendering or
|
||||
* listening to DOM events.
|
||||
* Such DOM related logic should be provided by other directives which make use of
|
||||
* `NgModelController` for data-binding to control elements.
|
||||
* Angular provides this DOM logic for most {@link input `input`} elements.
|
||||
* At the end of this page you can find a {@link ngModel.NgModelController#custom-control-example
|
||||
* custom control example} that uses `ngModelController` to bind to `contenteditable` elements.
|
||||
*
|
||||
* ## Custom Control Example
|
||||
* @example
|
||||
* ### Custom Control Example
|
||||
* This example shows how to use `NgModelController` with a custom control to achieve
|
||||
* data-binding. Notice how different directives (`contenteditable`, `ng-model`, and `required`)
|
||||
* collaborate together to achieve the desired result.
|
||||
@@ -1721,6 +1736,7 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
|
||||
function($scope, $exceptionHandler, $attr, $element, $parse, $animate, $timeout, $rootScope, $q, $interpolate) {
|
||||
this.$viewValue = Number.NaN;
|
||||
this.$modelValue = Number.NaN;
|
||||
this.$$rawModelValue = undefined; // stores the parsed modelValue / model set from scope regardless of validity.
|
||||
this.$validators = {};
|
||||
this.$asyncValidators = {};
|
||||
this.$parsers = [];
|
||||
@@ -1739,32 +1755,33 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
|
||||
|
||||
|
||||
var parsedNgModel = $parse($attr.ngModel),
|
||||
parsedNgModelAssign = parsedNgModel.assign,
|
||||
ngModelGet = parsedNgModel,
|
||||
ngModelSet = parsedNgModelAssign,
|
||||
pendingDebounce = null,
|
||||
ctrl = this;
|
||||
|
||||
var ngModelGet = function ngModelGet() {
|
||||
var modelValue = parsedNgModel($scope);
|
||||
if (ctrl.$options && ctrl.$options.getterSetter && isFunction(modelValue)) {
|
||||
modelValue = modelValue();
|
||||
}
|
||||
return modelValue;
|
||||
};
|
||||
|
||||
var ngModelSet = function ngModelSet(newValue) {
|
||||
var getterSetter;
|
||||
if (ctrl.$options && ctrl.$options.getterSetter &&
|
||||
isFunction(getterSetter = parsedNgModel($scope))) {
|
||||
|
||||
getterSetter(ctrl.$modelValue);
|
||||
} else {
|
||||
parsedNgModel.assign($scope, ctrl.$modelValue);
|
||||
}
|
||||
};
|
||||
|
||||
this.$$setOptions = function(options) {
|
||||
ctrl.$options = options;
|
||||
if (options && options.getterSetter) {
|
||||
var invokeModelGetter = $parse($attr.ngModel + '()'),
|
||||
invokeModelSetter = $parse($attr.ngModel + '($$$p)');
|
||||
|
||||
if (!parsedNgModel.assign && (!options || !options.getterSetter)) {
|
||||
ngModelGet = function($scope) {
|
||||
var modelValue = parsedNgModel($scope);
|
||||
if (isFunction(modelValue)) {
|
||||
modelValue = invokeModelGetter($scope);
|
||||
}
|
||||
return modelValue;
|
||||
};
|
||||
ngModelSet = function($scope, newValue) {
|
||||
if (isFunction(parsedNgModel($scope))) {
|
||||
invokeModelSetter($scope, {$$$p: ctrl.$modelValue});
|
||||
} else {
|
||||
parsedNgModelAssign($scope, ctrl.$modelValue);
|
||||
}
|
||||
};
|
||||
} else if (!parsedNgModel.assign) {
|
||||
throw $ngModelMinErr('nonassign', "Expression '{0}' is non-assignable. Element: {1}",
|
||||
$attr.ngModel, startingTag($element));
|
||||
}
|
||||
@@ -1797,17 +1814,18 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
|
||||
* @name ngModel.NgModelController#$isEmpty
|
||||
*
|
||||
* @description
|
||||
* This is called when we need to determine if the value of the input is empty.
|
||||
* This is called when we need to determine if the value of an input is empty.
|
||||
*
|
||||
* For instance, the required directive does this to work out if the input has data or not.
|
||||
*
|
||||
* The default `$isEmpty` function checks whether the value is `undefined`, `''`, `null` or `NaN`.
|
||||
*
|
||||
* You can override this for input directives whose concept of being empty is different to the
|
||||
* default. The `checkboxInputType` directive does this because in its case a value of `false`
|
||||
* implies empty.
|
||||
*
|
||||
* @param {*} value Model value to check.
|
||||
* @returns {boolean} True if `value` is empty.
|
||||
* @param {*} value The value of the input to check for emptiness.
|
||||
* @returns {boolean} True if `value` is "empty".
|
||||
*/
|
||||
this.$isEmpty = function(value) {
|
||||
return isUndefined(value) || value === '' || value === null || value !== value;
|
||||
@@ -1858,9 +1876,9 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
|
||||
* @description
|
||||
* Sets the control to its pristine state.
|
||||
*
|
||||
* This method can be called to remove the 'ng-dirty' class and set the control to its pristine
|
||||
* state (ng-pristine class). A model is considered to be pristine when the model has not been changed
|
||||
* from when first compiled within then form.
|
||||
* This method can be called to remove the `ng-dirty` class and set the control to its pristine
|
||||
* state (`ng-pristine` class). A model is considered to be pristine when the control
|
||||
* has not been changed from when first compiled.
|
||||
*/
|
||||
this.$setPristine = function() {
|
||||
ctrl.$dirty = false;
|
||||
@@ -1869,6 +1887,25 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
|
||||
$animate.addClass($element, PRISTINE_CLASS);
|
||||
};
|
||||
|
||||
/**
|
||||
* @ngdoc method
|
||||
* @name ngModel.NgModelController#$setDirty
|
||||
*
|
||||
* @description
|
||||
* Sets the control to its dirty state.
|
||||
*
|
||||
* This method can be called to remove the `ng-pristine` class and set the control to its dirty
|
||||
* state (`ng-dirty` class). A model is considered to be dirty when the control has been changed
|
||||
* from when first compiled.
|
||||
*/
|
||||
this.$setDirty = function() {
|
||||
ctrl.$dirty = true;
|
||||
ctrl.$pristine = false;
|
||||
$animate.removeClass($element, PRISTINE_CLASS);
|
||||
$animate.addClass($element, DIRTY_CLASS);
|
||||
parentForm.$setDirty();
|
||||
};
|
||||
|
||||
/**
|
||||
* @ngdoc method
|
||||
* @name ngModel.NgModelController#$setUntouched
|
||||
@@ -1876,8 +1913,8 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
|
||||
* @description
|
||||
* Sets the control to its untouched state.
|
||||
*
|
||||
* This method can be called to remove the 'ng-touched' class and set the control to its
|
||||
* untouched state (ng-untouched class). Upon compilation, a model is set as untouched
|
||||
* This method can be called to remove the `ng-touched` class and set the control to its
|
||||
* untouched state (`ng-untouched` class). Upon compilation, a model is set as untouched
|
||||
* by default, however this function can be used to restore that state if the model has
|
||||
* already been touched by the user.
|
||||
*/
|
||||
@@ -1894,10 +1931,9 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
|
||||
* @description
|
||||
* Sets the control to its touched state.
|
||||
*
|
||||
* This method can be called to remove the 'ng-untouched' class and set the control to its
|
||||
* touched state (ng-touched class). A model is considered to be touched when the user has
|
||||
* first interacted (focussed) on the model input element and then shifted focus away (blurred)
|
||||
* from the input element.
|
||||
* This method can be called to remove the `ng-untouched` class and set the control to its
|
||||
* touched state (`ng-touched` class). A model is considered to be touched when the user has
|
||||
* first focused the control element and then shifted focus away from the control (blur event).
|
||||
*/
|
||||
this.$setTouched = function() {
|
||||
ctrl.$touched = true;
|
||||
@@ -1975,14 +2011,51 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
|
||||
* @name ngModel.NgModelController#$validate
|
||||
*
|
||||
* @description
|
||||
* Runs each of the registered validators (first synchronous validators and then asynchronous validators).
|
||||
* Runs each of the registered validators (first synchronous validators and then
|
||||
* asynchronous validators).
|
||||
* If the validity changes to invalid, the model will be set to `undefined`,
|
||||
* unless {@link ngModelOptions `ngModelOptions.allowInvalid`} is `true`.
|
||||
* If the validity changes to valid, it will set the model to the last available valid
|
||||
* modelValue, i.e. either the last parsed value or the last value set from the scope.
|
||||
*/
|
||||
this.$validate = function() {
|
||||
// ignore $validate before model is initialized
|
||||
if (isNumber(ctrl.$modelValue) && isNaN(ctrl.$modelValue)) {
|
||||
return;
|
||||
}
|
||||
this.$$parseAndValidate();
|
||||
|
||||
var viewValue = ctrl.$$lastCommittedViewValue;
|
||||
// Note: we use the $$rawModelValue as $modelValue might have been
|
||||
// set to undefined during a view -> model update that found validation
|
||||
// errors. We can't parse the view here, since that could change
|
||||
// the model although neither viewValue nor the model on the scope changed
|
||||
var modelValue = ctrl.$$rawModelValue;
|
||||
|
||||
// Check if the there's a parse error, so we don't unset it accidentially
|
||||
var parserName = ctrl.$$parserName || 'parse';
|
||||
var parserValid = ctrl.$error[parserName] ? false : undefined;
|
||||
|
||||
var prevValid = ctrl.$valid;
|
||||
var prevModelValue = ctrl.$modelValue;
|
||||
|
||||
var allowInvalid = ctrl.$options && ctrl.$options.allowInvalid;
|
||||
|
||||
ctrl.$$runValidators(parserValid, modelValue, viewValue, function(allValid) {
|
||||
// If there was no change in validity, don't update the model
|
||||
// This prevents changing an invalid modelValue to undefined
|
||||
if (!allowInvalid && prevValid !== allValid) {
|
||||
// Note: Don't check ctrl.$valid here, as we could have
|
||||
// external validators (e.g. calculated on the server),
|
||||
// that just call $setValidity and need the model value
|
||||
// to calculate their validity.
|
||||
ctrl.$modelValue = allValid ? modelValue : undefined;
|
||||
|
||||
if (ctrl.$modelValue !== prevModelValue) {
|
||||
ctrl.$$writeModelToScope();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
this.$$runValidators = function(parseValid, modelValue, viewValue, doneCallback) {
|
||||
@@ -2101,11 +2174,7 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
|
||||
|
||||
// change to dirty
|
||||
if (ctrl.$pristine) {
|
||||
ctrl.$dirty = true;
|
||||
ctrl.$pristine = false;
|
||||
$animate.removeClass($element, PRISTINE_CLASS);
|
||||
$animate.addClass($element, DIRTY_CLASS);
|
||||
parentForm.$setDirty();
|
||||
this.$setDirty();
|
||||
}
|
||||
this.$$parseAndValidate();
|
||||
};
|
||||
@@ -2126,10 +2195,11 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
|
||||
}
|
||||
if (isNumber(ctrl.$modelValue) && isNaN(ctrl.$modelValue)) {
|
||||
// ctrl.$modelValue has not been touched yet...
|
||||
ctrl.$modelValue = ngModelGet();
|
||||
ctrl.$modelValue = ngModelGet($scope);
|
||||
}
|
||||
var prevModelValue = ctrl.$modelValue;
|
||||
var allowInvalid = ctrl.$options && ctrl.$options.allowInvalid;
|
||||
ctrl.$$rawModelValue = modelValue;
|
||||
if (allowInvalid) {
|
||||
ctrl.$modelValue = modelValue;
|
||||
writeToModelIfNeeded();
|
||||
@@ -2153,7 +2223,7 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
|
||||
};
|
||||
|
||||
this.$$writeModelToScope = function() {
|
||||
ngModelSet(ctrl.$modelValue);
|
||||
ngModelSet($scope, ctrl.$modelValue);
|
||||
forEach(ctrl.$viewChangeListeners, function(listener) {
|
||||
try {
|
||||
listener();
|
||||
@@ -2249,12 +2319,12 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
|
||||
// ng-change executes in apply phase
|
||||
// 4. view should be changed back to 'a'
|
||||
$scope.$watch(function ngModelWatch() {
|
||||
var modelValue = ngModelGet();
|
||||
var modelValue = ngModelGet($scope);
|
||||
|
||||
// if scope model value and ngModel value are out of sync
|
||||
// TODO(perf): why not move this to the action fn?
|
||||
if (modelValue !== ctrl.$modelValue) {
|
||||
ctrl.$modelValue = modelValue;
|
||||
ctrl.$modelValue = ctrl.$$rawModelValue = modelValue;
|
||||
|
||||
var formatters = ctrl.$formatters,
|
||||
idx = formatters.length;
|
||||
@@ -2439,7 +2509,7 @@ var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$
|
||||
</file>
|
||||
* </example>
|
||||
*/
|
||||
var ngModelDirective = function() {
|
||||
var ngModelDirective = ['$rootScope', function($rootScope) {
|
||||
return {
|
||||
restrict: 'A',
|
||||
require: ['ngModel', '^?form', '^?ngModelOptions'],
|
||||
@@ -2483,15 +2553,17 @@ var ngModelDirective = function() {
|
||||
element.on('blur', function(ev) {
|
||||
if (modelCtrl.$touched) return;
|
||||
|
||||
scope.$apply(function() {
|
||||
modelCtrl.$setTouched();
|
||||
});
|
||||
if ($rootScope.$$phase) {
|
||||
scope.$evalAsync(modelCtrl.$setTouched);
|
||||
} else {
|
||||
scope.$apply(modelCtrl.$setTouched);
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
};
|
||||
};
|
||||
}];
|
||||
|
||||
|
||||
/**
|
||||
@@ -2580,8 +2652,8 @@ var requiredDirective = function() {
|
||||
if (!ctrl) return;
|
||||
attr.required = true; // force truthy in case we are on non input element
|
||||
|
||||
ctrl.$validators.required = function(value) {
|
||||
return !attr.required || !ctrl.$isEmpty(value);
|
||||
ctrl.$validators.required = function(modelValue, viewValue) {
|
||||
return !attr.required || !ctrl.$isEmpty(viewValue);
|
||||
};
|
||||
|
||||
attr.$observe('required', function() {
|
||||
@@ -2630,13 +2702,14 @@ var maxlengthDirective = function() {
|
||||
link: function(scope, elm, attr, ctrl) {
|
||||
if (!ctrl) return;
|
||||
|
||||
var maxlength = 0;
|
||||
var maxlength = -1;
|
||||
attr.$observe('maxlength', function(value) {
|
||||
maxlength = int(value) || 0;
|
||||
var intVal = int(value);
|
||||
maxlength = isNaN(intVal) ? -1 : intVal;
|
||||
ctrl.$validate();
|
||||
});
|
||||
ctrl.$validators.maxlength = function(modelValue, viewValue) {
|
||||
return ctrl.$isEmpty(modelValue) || viewValue.length <= maxlength;
|
||||
return (maxlength < 0) || ctrl.$isEmpty(modelValue) || (viewValue.length <= maxlength);
|
||||
};
|
||||
}
|
||||
};
|
||||
@@ -2655,7 +2728,7 @@ var minlengthDirective = function() {
|
||||
ctrl.$validate();
|
||||
});
|
||||
ctrl.$validators.minlength = function(modelValue, viewValue) {
|
||||
return ctrl.$isEmpty(modelValue) || viewValue.length >= minlength;
|
||||
return ctrl.$isEmpty(viewValue) || viewValue.length >= minlength;
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
@@ -141,12 +141,11 @@ var ngBindTemplateDirective = ['$interpolate', '$compile', function($interpolate
|
||||
* @name ngBindHtml
|
||||
*
|
||||
* @description
|
||||
* Creates a binding that will innerHTML the result of evaluating the `expression` into the current
|
||||
* element in a secure way. By default, the innerHTML-ed content will be sanitized using the {@link
|
||||
* ngSanitize.$sanitize $sanitize} service. To utilize this functionality, ensure that `$sanitize`
|
||||
* is available, for example, by including {@link ngSanitize} in your module's dependencies (not in
|
||||
* core Angular). In order to use {@link ngSanitize} in your module's dependencies, you need to
|
||||
* include "angular-sanitize.js" in your application.
|
||||
* Evaluates the expression and inserts the resulting HTML into the element in a secure way. By default,
|
||||
* the resulting HTML content will be sanitized using the {@link ngSanitize.$sanitize $sanitize} service.
|
||||
* To utilize this functionality, ensure that `$sanitize` is available, for example, by including {@link
|
||||
* ngSanitize} in your module's dependencies (not in core Angular). In order to use {@link ngSanitize}
|
||||
* in your module's dependencies, you need to include "angular-sanitize.js" in your application.
|
||||
*
|
||||
* You may also bypass sanitization for values you know are safe. To do so, bind to
|
||||
* an explicitly trusted value via {@link ng.$sce#trustAsHtml $sce.trustAsHtml}. See the example
|
||||
|
||||
@@ -173,7 +173,9 @@
|
||||
</example>
|
||||
*/
|
||||
var ngPluralizeDirective = ['$locale', '$interpolate', function($locale, $interpolate) {
|
||||
var BRACE = /{}/g;
|
||||
var BRACE = /{}/g,
|
||||
IS_WHEN = /^when(Minus)?(.+)$/;
|
||||
|
||||
return {
|
||||
restrict: 'EA',
|
||||
link: function(scope, element, attr) {
|
||||
@@ -184,34 +186,44 @@ var ngPluralizeDirective = ['$locale', '$interpolate', function($locale, $interp
|
||||
whensExpFns = {},
|
||||
startSymbol = $interpolate.startSymbol(),
|
||||
endSymbol = $interpolate.endSymbol(),
|
||||
isWhen = /^when(Minus)?(.+)$/;
|
||||
braceReplacement = startSymbol + numberExp + '-' + offset + endSymbol,
|
||||
watchRemover = angular.noop,
|
||||
lastCount;
|
||||
|
||||
forEach(attr, function(expression, attributeName) {
|
||||
if (isWhen.test(attributeName)) {
|
||||
whens[lowercase(attributeName.replace('when', '').replace('Minus', '-'))] =
|
||||
element.attr(attr.$attr[attributeName]);
|
||||
var tmpMatch = IS_WHEN.exec(attributeName);
|
||||
if (tmpMatch) {
|
||||
var whenKey = (tmpMatch[1] ? '-' : '') + lowercase(tmpMatch[2]);
|
||||
whens[whenKey] = element.attr(attr.$attr[attributeName]);
|
||||
}
|
||||
});
|
||||
forEach(whens, function(expression, key) {
|
||||
whensExpFns[key] =
|
||||
$interpolate(expression.replace(BRACE, startSymbol + numberExp + '-' +
|
||||
offset + endSymbol));
|
||||
whensExpFns[key] = $interpolate(expression.replace(BRACE, braceReplacement));
|
||||
|
||||
});
|
||||
|
||||
scope.$watch(function ngPluralizeWatch() {
|
||||
var value = parseFloat(scope.$eval(numberExp));
|
||||
scope.$watch(numberExp, function ngPluralizeWatchAction(newVal) {
|
||||
var count = parseFloat(newVal);
|
||||
var countIsNaN = isNaN(count);
|
||||
|
||||
if (!isNaN(value)) {
|
||||
//if explicit number rule such as 1, 2, 3... is defined, just use it. Otherwise,
|
||||
//check it against pluralization rules in $locale service
|
||||
if (!(value in whens)) value = $locale.pluralCat(value - offset);
|
||||
return whensExpFns[value](scope);
|
||||
} else {
|
||||
return '';
|
||||
if (!countIsNaN && !(count in whens)) {
|
||||
// If an explicit number rule such as 1, 2, 3... is defined, just use it.
|
||||
// Otherwise, check it against pluralization rules in $locale service.
|
||||
count = $locale.pluralCat(count - offset);
|
||||
}
|
||||
|
||||
// If both `count` and `lastCount` are NaN, we don't need to re-register a watch.
|
||||
// In JS `NaN !== NaN`, so we have to exlicitly check.
|
||||
if ((count !== lastCount) && !(countIsNaN && isNaN(lastCount))) {
|
||||
watchRemover();
|
||||
watchRemover = scope.$watch(whensExpFns[count], updateElementText);
|
||||
lastCount = count;
|
||||
}
|
||||
}, function ngPluralizeWatchAction(newVal) {
|
||||
element.text(newVal);
|
||||
});
|
||||
|
||||
function updateElementText(newText) {
|
||||
element.text(newText || '');
|
||||
}
|
||||
}
|
||||
};
|
||||
}];
|
||||
|
||||
@@ -38,17 +38,17 @@ var NG_HIDE_IN_PROGRESS_CLASS = 'ng-hide-animate';
|
||||
*
|
||||
* ### Overriding `.ng-hide`
|
||||
*
|
||||
* By default, the `.ng-hide` class will style the element with `display:none!important`. If you wish to change
|
||||
* By default, the `.ng-hide` class will style the element with `display: none!important`. If you wish to change
|
||||
* the hide behavior with ngShow/ngHide then this can be achieved by restating the styles for the `.ng-hide`
|
||||
* class in CSS:
|
||||
*
|
||||
* ```css
|
||||
* .ng-hide {
|
||||
* /* this is just another form of hiding an element */
|
||||
* display:block!important;
|
||||
* position:absolute;
|
||||
* top:-9999px;
|
||||
* left:-9999px;
|
||||
* display: block!important;
|
||||
* position: absolute;
|
||||
* top: -9999px;
|
||||
* left: -9999px;
|
||||
* }
|
||||
* ```
|
||||
*
|
||||
@@ -68,13 +68,13 @@ var NG_HIDE_IN_PROGRESS_CLASS = 'ng-hide-animate';
|
||||
* .my-element.ng-hide-add, .my-element.ng-hide-remove {
|
||||
* /* this is required as of 1.3x to properly
|
||||
* apply all styling in a show/hide animation */
|
||||
* transition:0s linear all;
|
||||
* transition: 0s linear all;
|
||||
* }
|
||||
*
|
||||
* .my-element.ng-hide-add-active,
|
||||
* .my-element.ng-hide-remove-active {
|
||||
* /* the transition is defined in the active class */
|
||||
* transition:1s linear all;
|
||||
* transition: 1s linear all;
|
||||
* }
|
||||
*
|
||||
* .my-element.ng-hide-add { ... }
|
||||
@@ -116,29 +116,29 @@ var NG_HIDE_IN_PROGRESS_CLASS = 'ng-hide-animate';
|
||||
</file>
|
||||
<file name="animations.css">
|
||||
.animate-show {
|
||||
line-height:20px;
|
||||
opacity:1;
|
||||
padding:10px;
|
||||
border:1px solid black;
|
||||
background:white;
|
||||
line-height: 20px;
|
||||
opacity: 1;
|
||||
padding: 10px;
|
||||
border: 1px solid black;
|
||||
background: white;
|
||||
}
|
||||
|
||||
.animate-show.ng-hide-add.ng-hide-add-active,
|
||||
.animate-show.ng-hide-remove.ng-hide-remove-active {
|
||||
-webkit-transition:all linear 0.5s;
|
||||
transition:all linear 0.5s;
|
||||
-webkit-transition: all linear 0.5s;
|
||||
transition: all linear 0.5s;
|
||||
}
|
||||
|
||||
.animate-show.ng-hide {
|
||||
line-height:0;
|
||||
opacity:0;
|
||||
padding:0 10px;
|
||||
line-height: 0;
|
||||
opacity: 0;
|
||||
padding: 0 10px;
|
||||
}
|
||||
|
||||
.check-element {
|
||||
padding:10px;
|
||||
border:1px solid black;
|
||||
background:white;
|
||||
padding: 10px;
|
||||
border: 1px solid black;
|
||||
background: white;
|
||||
}
|
||||
</file>
|
||||
<file name="protractor.js" type="protractor">
|
||||
@@ -212,17 +212,17 @@ var ngShowDirective = ['$animate', function($animate) {
|
||||
*
|
||||
* ### Overriding `.ng-hide`
|
||||
*
|
||||
* By default, the `.ng-hide` class will style the element with `display:none!important`. If you wish to change
|
||||
* By default, the `.ng-hide` class will style the element with `display: none!important`. If you wish to change
|
||||
* the hide behavior with ngShow/ngHide then this can be achieved by restating the styles for the `.ng-hide`
|
||||
* class in CSS:
|
||||
*
|
||||
* ```css
|
||||
* .ng-hide {
|
||||
* /* this is just another form of hiding an element */
|
||||
* display:block!important;
|
||||
* position:absolute;
|
||||
* top:-9999px;
|
||||
* left:-9999px;
|
||||
* display: block!important;
|
||||
* position: absolute;
|
||||
* top: -9999px;
|
||||
* left: -9999px;
|
||||
* }
|
||||
* ```
|
||||
*
|
||||
@@ -239,7 +239,7 @@ var ngShowDirective = ['$animate', function($animate) {
|
||||
* //a working example can be found at the bottom of this page
|
||||
* //
|
||||
* .my-element.ng-hide-add, .my-element.ng-hide-remove {
|
||||
* transition:0.5s linear all;
|
||||
* transition: 0.5s linear all;
|
||||
* }
|
||||
*
|
||||
* .my-element.ng-hide-add { ... }
|
||||
@@ -281,25 +281,25 @@ var ngShowDirective = ['$animate', function($animate) {
|
||||
</file>
|
||||
<file name="animations.css">
|
||||
.animate-hide {
|
||||
-webkit-transition:all linear 0.5s;
|
||||
transition:all linear 0.5s;
|
||||
line-height:20px;
|
||||
opacity:1;
|
||||
padding:10px;
|
||||
border:1px solid black;
|
||||
background:white;
|
||||
-webkit-transition: all linear 0.5s;
|
||||
transition: all linear 0.5s;
|
||||
line-height: 20px;
|
||||
opacity: 1;
|
||||
padding: 10px;
|
||||
border: 1px solid black;
|
||||
background: white;
|
||||
}
|
||||
|
||||
.animate-hide.ng-hide {
|
||||
line-height:0;
|
||||
opacity:0;
|
||||
padding:0 10px;
|
||||
line-height: 0;
|
||||
opacity: 0;
|
||||
padding: 0 10px;
|
||||
}
|
||||
|
||||
.check-element {
|
||||
padding:10px;
|
||||
border:1px solid black;
|
||||
background:white;
|
||||
padding: 10px;
|
||||
border: 1px solid black;
|
||||
background: white;
|
||||
}
|
||||
</file>
|
||||
<file name="protractor.js" type="protractor">
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
*
|
||||
* @param {number} amount Input to filter.
|
||||
* @param {string=} symbol Currency symbol or identifier to be displayed.
|
||||
* @param {number=} fractionSize Number of decimal places to round the amount to.
|
||||
* @param {number=} fractionSize Number of decimal places to round the amount to, defaults to default max fraction size for current locale
|
||||
* @returns {string} Formatted number.
|
||||
*
|
||||
*
|
||||
@@ -61,8 +61,7 @@ function currencyFilter($locale) {
|
||||
}
|
||||
|
||||
if (isUndefined(fractionSize)) {
|
||||
// TODO: read the default value from the locale file
|
||||
fractionSize = 2;
|
||||
fractionSize = formats.PATTERNS[1].maxFrac;
|
||||
}
|
||||
|
||||
// if null or undefined pass it through
|
||||
@@ -214,9 +213,9 @@ function formatNumber(number, pattern, groupSep, decimalSep, fractionSize) {
|
||||
}
|
||||
}
|
||||
|
||||
parts.push(isNegative ? pattern.negPre : pattern.posPre);
|
||||
parts.push(formatedText);
|
||||
parts.push(isNegative ? pattern.negSuf : pattern.posSuf);
|
||||
parts.push(isNegative ? pattern.negPre : pattern.posPre,
|
||||
formatedText,
|
||||
isNegative ? pattern.negSuf : pattern.posSuf);
|
||||
return parts.join('');
|
||||
}
|
||||
|
||||
|
||||
+31
-2
@@ -26,7 +26,7 @@ function defaultHttpResponseTransform(data, headers) {
|
||||
* @returns {Object} Parsed headers as key value object
|
||||
*/
|
||||
function parseHeaders(headers) {
|
||||
var parsed = {}, key, val, i;
|
||||
var parsed = createMap(), key, val, i;
|
||||
|
||||
if (!headers) return parsed;
|
||||
|
||||
@@ -63,7 +63,11 @@ function headersGetter(headers) {
|
||||
if (!headersObj) headersObj = parseHeaders(headers);
|
||||
|
||||
if (name) {
|
||||
return headersObj[lowercase(name)] || null;
|
||||
var value = headersObj[lowercase(name)];
|
||||
if (value === void 0) {
|
||||
value = null;
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
return headersObj;
|
||||
@@ -112,6 +116,11 @@ function $HttpProvider() {
|
||||
*
|
||||
* Object containing default values for all {@link ng.$http $http} requests.
|
||||
*
|
||||
* - **`defaults.cache`** - {Object} - an object built with {@link ng.$cacheFactory `$cacheFactory`}
|
||||
* that will provide the cache for all requests who set their `cache` property to `true`.
|
||||
* If you set the `default.cache = false` then only requests that specify their own custom
|
||||
* cache object will be cached. See {@link $http#caching $http Caching} for more information.
|
||||
*
|
||||
* - **`defaults.xsrfCookieName`** - {string} - Name of cookie containing the XSRF token.
|
||||
* Defaults value is `'XSRF-TOKEN'`.
|
||||
*
|
||||
@@ -125,6 +134,7 @@ function $HttpProvider() {
|
||||
* - **`defaults.headers.post`**
|
||||
* - **`defaults.headers.put`**
|
||||
* - **`defaults.headers.patch`**
|
||||
*
|
||||
**/
|
||||
var defaults = this.defaults = {
|
||||
// transform incoming response data
|
||||
@@ -339,6 +349,21 @@ function $HttpProvider() {
|
||||
* In addition, you can supply a `headers` property in the config object passed when
|
||||
* calling `$http(config)`, which overrides the defaults without changing them globally.
|
||||
*
|
||||
* To explicitly remove a header automatically added via $httpProvider.defaults.headers on a per request basis,
|
||||
* Use the `headers` property, setting the desired header to `undefined`. For example:
|
||||
*
|
||||
* ```js
|
||||
* var req = {
|
||||
* method: 'POST',
|
||||
* url: 'http://example.com',
|
||||
* headers: {
|
||||
* 'Content-Type': undefined
|
||||
* },
|
||||
* data: { test: 'test' },
|
||||
* }
|
||||
*
|
||||
* $http(req).success(function(){...}).error(function(){...});
|
||||
* ```
|
||||
*
|
||||
* ## Transforming Requests and Responses
|
||||
*
|
||||
@@ -718,6 +743,10 @@ function $HttpProvider() {
|
||||
};
|
||||
var headers = mergeHeaders(requestConfig);
|
||||
|
||||
if (!angular.isObject(requestConfig)) {
|
||||
throw minErr('$http')('badreq', 'Http request configuration must be an object. Received: {0}', requestConfig);
|
||||
}
|
||||
|
||||
extend(config, requestConfig);
|
||||
config.headers = headers;
|
||||
config.method = uppercase(config.method);
|
||||
|
||||
+52
-4
@@ -327,6 +327,13 @@ var locationPrototype = {
|
||||
* Return full url representation with all segments encoded according to rules specified in
|
||||
* [RFC 3986](http://www.ietf.org/rfc/rfc3986.txt).
|
||||
*
|
||||
*
|
||||
* ```js
|
||||
* // given url http://example.com/#/some/path?foo=bar&baz=xoxo
|
||||
* var absUrl = $location.absUrl();
|
||||
* // => "http://example.com/#/some/path?foo=bar&baz=xoxo"
|
||||
* ```
|
||||
*
|
||||
* @return {string} full url
|
||||
*/
|
||||
absUrl: locationGetter('$$absUrl'),
|
||||
@@ -342,6 +349,13 @@ var locationPrototype = {
|
||||
*
|
||||
* Change path, search and hash, when called with parameter and return `$location`.
|
||||
*
|
||||
*
|
||||
* ```js
|
||||
* // given url http://example.com/#/some/path?foo=bar&baz=xoxo
|
||||
* var url = $location.url();
|
||||
* // => "/some/path?foo=bar&baz=xoxo"
|
||||
* ```
|
||||
*
|
||||
* @param {string=} url New url without base prefix (e.g. `/path?a=b#hash`)
|
||||
* @return {string} url
|
||||
*/
|
||||
@@ -350,8 +364,8 @@ var locationPrototype = {
|
||||
return this.$$url;
|
||||
|
||||
var match = PATH_MATCH.exec(url);
|
||||
if (match[1]) this.path(decodeURIComponent(match[1]));
|
||||
if (match[2] || match[1]) this.search(match[3] || '');
|
||||
if (match[1] || url === '') this.path(decodeURIComponent(match[1]));
|
||||
if (match[2] || match[1] || url === '') this.search(match[3] || '');
|
||||
this.hash(match[5] || '');
|
||||
|
||||
return this;
|
||||
@@ -366,6 +380,13 @@ var locationPrototype = {
|
||||
*
|
||||
* Return protocol of current url.
|
||||
*
|
||||
*
|
||||
* ```js
|
||||
* // given url http://example.com/#/some/path?foo=bar&baz=xoxo
|
||||
* var protocol = $location.protocol();
|
||||
* // => "http"
|
||||
* ```
|
||||
*
|
||||
* @return {string} protocol of current url
|
||||
*/
|
||||
protocol: locationGetter('$$protocol'),
|
||||
@@ -379,6 +400,13 @@ var locationPrototype = {
|
||||
*
|
||||
* Return host of current url.
|
||||
*
|
||||
*
|
||||
* ```js
|
||||
* // given url http://example.com/#/some/path?foo=bar&baz=xoxo
|
||||
* var host = $location.host();
|
||||
* // => "example.com"
|
||||
* ```
|
||||
*
|
||||
* @return {string} host of current url.
|
||||
*/
|
||||
host: locationGetter('$$host'),
|
||||
@@ -392,6 +420,13 @@ var locationPrototype = {
|
||||
*
|
||||
* Return port of current url.
|
||||
*
|
||||
*
|
||||
* ```js
|
||||
* // given url http://example.com/#/some/path?foo=bar&baz=xoxo
|
||||
* var port = $location.port();
|
||||
* // => 80
|
||||
* ```
|
||||
*
|
||||
* @return {Number} port
|
||||
*/
|
||||
port: locationGetter('$$port'),
|
||||
@@ -410,6 +445,13 @@ var locationPrototype = {
|
||||
* Note: Path should always begin with forward slash (/), this method will add the forward slash
|
||||
* if it is missing.
|
||||
*
|
||||
*
|
||||
* ```js
|
||||
* // given url http://example.com/#/some/path?foo=bar&baz=xoxo
|
||||
* var path = $location.path();
|
||||
* // => "/some/path"
|
||||
* ```
|
||||
*
|
||||
* @param {(string|number)=} path New path
|
||||
* @return {string} path
|
||||
*/
|
||||
@@ -435,10 +477,9 @@ var locationPrototype = {
|
||||
* var searchObject = $location.search();
|
||||
* // => {foo: 'bar', baz: 'xoxo'}
|
||||
*
|
||||
*
|
||||
* // set foo to 'yipee'
|
||||
* $location.search('foo', 'yipee');
|
||||
* // => $location
|
||||
* // $location.search() => {foo: 'yipee', baz: 'xoxo'}
|
||||
* ```
|
||||
*
|
||||
* @param {string|Object.<string>|Object.<Array.<string>>} search New search params - string or
|
||||
@@ -508,6 +549,13 @@ var locationPrototype = {
|
||||
*
|
||||
* Change hash fragment when called with parameter and return `$location`.
|
||||
*
|
||||
*
|
||||
* ```js
|
||||
* // given url http://example.com/some/path?foo=bar&baz=xoxo#hashValue
|
||||
* var hash = $location.hash();
|
||||
* // => "hashValue"
|
||||
* ```
|
||||
*
|
||||
* @param {(string|number)=} hash New hash fragment
|
||||
* @return {string} hash
|
||||
*/
|
||||
|
||||
+13
-13
@@ -239,7 +239,7 @@
|
||||
* You then configure `$animate` to enforce this prefix:
|
||||
*
|
||||
* ```js
|
||||
* $animateProvider.classNamePrefix(/animate-/);
|
||||
* $animateProvider.classNameFilter(/animate-/);
|
||||
* ```
|
||||
* </div>
|
||||
*
|
||||
@@ -970,9 +970,9 @@ angular.module('ngAnimate', ['ng'])
|
||||
* | 3. $animate waits for the next digest to start the animation | class="my-animation ng-animate" |
|
||||
* | 4. the .ng-leave class is added to the element | class="my-animation ng-animate ng-leave" |
|
||||
* | 5. $animate scans the element styles to get the CSS transition/animation duration and delay | class="my-animation ng-animate ng-leave" |
|
||||
* | 6. $animate blocks all CSS transitions on the element to ensure the .ng-leave class styling is applied right away | class="my-animation ng-animate ng-leave” |
|
||||
* | 6. $animate blocks all CSS transitions on the element to ensure the .ng-leave class styling is applied right away | class="my-animation ng-animate ng-leave" |
|
||||
* | 7. $animate waits for a single animation frame (this performs a reflow) | class="my-animation ng-animate ng-leave" |
|
||||
* | 8. $animate removes the CSS transition block placed on the element | class="my-animation ng-animate ng-leave” |
|
||||
* | 8. $animate removes the CSS transition block placed on the element | class="my-animation ng-animate ng-leave" |
|
||||
* | 9. the .ng-leave-active class is added (this triggers the CSS transition/animation) | class="my-animation ng-animate ng-leave ng-leave-active" |
|
||||
* | 10. $animate waits for the animation to complete (via events and timeout) | class="my-animation ng-animate ng-leave ng-leave-active" |
|
||||
* | 11. The animation ends and all generated CSS classes are removed from the element | class="my-animation" |
|
||||
@@ -1016,9 +1016,9 @@ angular.module('ngAnimate', ['ng'])
|
||||
* | 4. $animate runs the JavaScript-defined animations detected on the element | class="my-animation ng-animate" |
|
||||
* | 5. the .ng-move class is added to the element | class="my-animation ng-animate ng-move" |
|
||||
* | 6. $animate scans the element styles to get the CSS transition/animation duration and delay | class="my-animation ng-animate ng-move" |
|
||||
* | 7. $animate blocks all CSS transitions on the element to ensure the .ng-move class styling is applied right away | class="my-animation ng-animate ng-move” |
|
||||
* | 7. $animate blocks all CSS transitions on the element to ensure the .ng-move class styling is applied right away | class="my-animation ng-animate ng-move" |
|
||||
* | 8. $animate waits for a single animation frame (this performs a reflow) | class="my-animation ng-animate ng-move" |
|
||||
* | 9. $animate removes the CSS transition block placed on the element | class="my-animation ng-animate ng-move” |
|
||||
* | 9. $animate removes the CSS transition block placed on the element | class="my-animation ng-animate ng-move" |
|
||||
* | 10. the .ng-move-active class is added (this triggers the CSS transition/animation) | class="my-animation ng-animate ng-move ng-move-active" |
|
||||
* | 11. $animate waits for the animation to complete (via events and timeout) | class="my-animation ng-animate ng-move ng-move-active" |
|
||||
* | 12. The animation ends and all generated CSS classes are removed from the element | class="my-animation" |
|
||||
@@ -1063,8 +1063,8 @@ angular.module('ngAnimate', ['ng'])
|
||||
* | 3. the .super-add class is added to the element | class="my-animation ng-animate super-add" |
|
||||
* | 4. $animate waits for a single animation frame (this performs a reflow) | class="my-animation ng-animate super-add" |
|
||||
* | 5. the .super and .super-add-active classes are added (this triggers the CSS transition/animation) | class="my-animation ng-animate super super-add super-add-active" |
|
||||
* | 6. $animate scans the element styles to get the CSS transition/animation duration and delay | class="my-animation ng-animate super-add" |
|
||||
* | 7. $animate waits for the animation to complete (via events and timeout) | class="my-animation super super-add super-add-active" |
|
||||
* | 6. $animate scans the element styles to get the CSS transition/animation duration and delay | class="my-animation ng-animate super super-add super-add-active" |
|
||||
* | 7. $animate waits for the animation to complete (via events and timeout) | class="my-animation ng-animate super super-add super-add-active" |
|
||||
* | 8. The animation ends and all generated CSS classes are removed from the element | class="my-animation super" |
|
||||
* | 9. The super class is kept on the element | class="my-animation super" |
|
||||
* | 10. The returned promise is resolved. | class="my-animation super" |
|
||||
@@ -1097,7 +1097,7 @@ angular.module('ngAnimate', ['ng'])
|
||||
* | 3. the .super-remove class is added to the element | class="my-animation super ng-animate super-remove" |
|
||||
* | 4. $animate waits for a single animation frame (this performs a reflow) | class="my-animation super ng-animate super-remove" |
|
||||
* | 5. the .super-remove-active classes are added and .super is removed (this triggers the CSS transition/animation) | class="my-animation ng-animate super-remove super-remove-active" |
|
||||
* | 6. $animate scans the element styles to get the CSS transition/animation duration and delay | class="my-animation super ng-animate super-remove" |
|
||||
* | 6. $animate scans the element styles to get the CSS transition/animation duration and delay | class="my-animation ng-animate super-remove super-remove-active" |
|
||||
* | 7. $animate waits for the animation to complete (via events and timeout) | class="my-animation ng-animate super-remove super-remove-active" |
|
||||
* | 8. The animation ends and all generated CSS classes are removed from the element | class="my-animation" |
|
||||
* | 9. The returned promise is resolved. | class="my-animation" |
|
||||
@@ -1122,11 +1122,11 @@ angular.module('ngAnimate', ['ng'])
|
||||
*
|
||||
* | Animation Step | What the element class attribute looks like |
|
||||
* |--------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|
|
||||
* | 1. $animate.removeClass(element, ‘on’, ‘off’) is called | class="my-animation super off” |
|
||||
* | 2. $animate runs the JavaScript-defined animations detected on the element | class="my-animation super ng-animate off” |
|
||||
* | 3. the .on-add and .off-remove classes are added to the element | class="my-animation ng-animate on-add off-remove off” |
|
||||
* | 4. $animate waits for a single animation frame (this performs a reflow) | class="my-animation ng-animate on-add off-remove off” |
|
||||
* | 5. the .on, .on-add-active and .off-remove-active classes are added and .off is removed (this triggers the CSS transition/animation) | class="my-animation ng-animate on on-add on-add-active off-remove off-remove-active” |
|
||||
* | 1. $animate.setClass(element, 'on', 'off') is called | class="my-animation off" |
|
||||
* | 2. $animate runs the JavaScript-defined animations detected on the element | class="my-animation ng-animate off" |
|
||||
* | 3. the .on-add and .off-remove classes are added to the element | class="my-animation ng-animate on-add off-remove off" |
|
||||
* | 4. $animate waits for a single animation frame (this performs a reflow) | class="my-animation ng-animate on-add off-remove off" |
|
||||
* | 5. the .on, .on-add-active and .off-remove-active classes are added and .off is removed (this triggers the CSS transition/animation) | class="my-animation ng-animate on on-add on-add-active off-remove off-remove-active" |
|
||||
* | 6. $animate scans the element styles to get the CSS transition/animation duration and delay | class="my-animation ng-animate on on-add on-add-active off-remove off-remove-active" |
|
||||
* | 7. $animate waits for the animation to complete (via events and timeout) | class="my-animation ng-animate on on-add on-add-active off-remove off-remove-active" |
|
||||
* | 8. The animation ends and all generated CSS classes are removed from the element | class="my-animation on" |
|
||||
|
||||
Vendored
+3
-3
@@ -40,9 +40,9 @@ $provide.value("$locale", {
|
||||
"Sa"
|
||||
],
|
||||
"SHORTMONTH": [
|
||||
"Jan",
|
||||
"Feb",
|
||||
"Mar",
|
||||
"Jan.",
|
||||
"Feb.",
|
||||
"Mrt.",
|
||||
"Apr",
|
||||
"Mei",
|
||||
"Jun",
|
||||
|
||||
Vendored
+4
-4
@@ -40,9 +40,9 @@ $provide.value("$locale", {
|
||||
"Sa"
|
||||
],
|
||||
"SHORTMONTH": [
|
||||
"Jan",
|
||||
"Feb",
|
||||
"Mar",
|
||||
"Jan.",
|
||||
"Feb.",
|
||||
"Mrt.",
|
||||
"Apr",
|
||||
"Mei",
|
||||
"Jun",
|
||||
@@ -53,7 +53,7 @@ $provide.value("$locale", {
|
||||
"Nov",
|
||||
"Des"
|
||||
],
|
||||
"fullDate": "EEEE dd MMMM y",
|
||||
"fullDate": "EEEE, dd MMMM y",
|
||||
"longDate": "dd MMMM y",
|
||||
"medium": "dd MMM y h:mm:ss a",
|
||||
"mediumDate": "dd MMM y",
|
||||
|
||||
Vendored
+4
-4
@@ -40,9 +40,9 @@ $provide.value("$locale", {
|
||||
"Sa"
|
||||
],
|
||||
"SHORTMONTH": [
|
||||
"Jan",
|
||||
"Feb",
|
||||
"Mar",
|
||||
"Jan.",
|
||||
"Feb.",
|
||||
"Mrt.",
|
||||
"Apr",
|
||||
"Mei",
|
||||
"Jun",
|
||||
@@ -53,7 +53,7 @@ $provide.value("$locale", {
|
||||
"Nov",
|
||||
"Des"
|
||||
],
|
||||
"fullDate": "EEEE dd MMMM y",
|
||||
"fullDate": "EEEE, dd MMMM y",
|
||||
"longDate": "dd MMMM y",
|
||||
"medium": "dd MMM y h:mm:ss a",
|
||||
"mediumDate": "dd MMM y",
|
||||
|
||||
Vendored
+2
-2
@@ -26,7 +26,7 @@ $provide.value("$locale", {
|
||||
"\u1301\u120b\u12ed",
|
||||
"\u12a6\u1308\u1235\u1275",
|
||||
"\u1234\u1355\u1274\u121d\u1260\u122d",
|
||||
"\u12a6\u12ad\u1270\u12cd\u1260\u122d",
|
||||
"\u12a6\u12ad\u1276\u1260\u122d",
|
||||
"\u1296\u126c\u121d\u1260\u122d",
|
||||
"\u12f2\u1234\u121d\u1260\u122d"
|
||||
],
|
||||
@@ -49,7 +49,7 @@ $provide.value("$locale", {
|
||||
"\u1301\u120b\u12ed",
|
||||
"\u12a6\u1308\u1235",
|
||||
"\u1234\u1355\u1274",
|
||||
"\u12a6\u12ad\u1270",
|
||||
"\u12a6\u12ad\u1276",
|
||||
"\u1296\u126c\u121d",
|
||||
"\u12f2\u1234\u121d"
|
||||
],
|
||||
|
||||
Vendored
+2
-2
@@ -26,7 +26,7 @@ $provide.value("$locale", {
|
||||
"\u1301\u120b\u12ed",
|
||||
"\u12a6\u1308\u1235\u1275",
|
||||
"\u1234\u1355\u1274\u121d\u1260\u122d",
|
||||
"\u12a6\u12ad\u1270\u12cd\u1260\u122d",
|
||||
"\u12a6\u12ad\u1276\u1260\u122d",
|
||||
"\u1296\u126c\u121d\u1260\u122d",
|
||||
"\u12f2\u1234\u121d\u1260\u122d"
|
||||
],
|
||||
@@ -49,7 +49,7 @@ $provide.value("$locale", {
|
||||
"\u1301\u120b\u12ed",
|
||||
"\u12a6\u1308\u1235",
|
||||
"\u1234\u1355\u1274",
|
||||
"\u12a6\u12ad\u1270",
|
||||
"\u12a6\u12ad\u1276",
|
||||
"\u1296\u126c\u121d",
|
||||
"\u12f2\u1234\u121d"
|
||||
],
|
||||
|
||||
+5
-5
@@ -38,15 +38,15 @@ $provide.value("$locale", {
|
||||
"de xineru",
|
||||
"de febreru",
|
||||
"de marzu",
|
||||
"d'abril",
|
||||
"d\u2019abril",
|
||||
"de mayu",
|
||||
"de xunu",
|
||||
"de xunetu",
|
||||
"d'agostu",
|
||||
"d\u2019agostu",
|
||||
"de setiembre",
|
||||
"d'ochobre",
|
||||
"d\u2019ochobre",
|
||||
"de payares",
|
||||
"d'avientu"
|
||||
"d\u2019avientu"
|
||||
],
|
||||
"SHORTDAY": [
|
||||
"dom",
|
||||
@@ -71,7 +71,7 @@ $provide.value("$locale", {
|
||||
"pay",
|
||||
"avi"
|
||||
],
|
||||
"fullDate": "EEEE, dd MMMM 'de' y",
|
||||
"fullDate": "EEEE, d MMMM 'de' y",
|
||||
"longDate": "d MMMM 'de' y",
|
||||
"medium": "d MMM y HH:mm:ss",
|
||||
"mediumDate": "d MMM y",
|
||||
|
||||
Vendored
+5
-5
@@ -38,15 +38,15 @@ $provide.value("$locale", {
|
||||
"de xineru",
|
||||
"de febreru",
|
||||
"de marzu",
|
||||
"d'abril",
|
||||
"d\u2019abril",
|
||||
"de mayu",
|
||||
"de xunu",
|
||||
"de xunetu",
|
||||
"d'agostu",
|
||||
"d\u2019agostu",
|
||||
"de setiembre",
|
||||
"d'ochobre",
|
||||
"d\u2019ochobre",
|
||||
"de payares",
|
||||
"d'avientu"
|
||||
"d\u2019avientu"
|
||||
],
|
||||
"SHORTDAY": [
|
||||
"dom",
|
||||
@@ -71,7 +71,7 @@ $provide.value("$locale", {
|
||||
"pay",
|
||||
"avi"
|
||||
],
|
||||
"fullDate": "EEEE, dd MMMM 'de' y",
|
||||
"fullDate": "EEEE, d MMMM 'de' y",
|
||||
"longDate": "d MMMM 'de' y",
|
||||
"medium": "d MMM y HH:mm:ss",
|
||||
"mediumDate": "d MMM y",
|
||||
|
||||
+19
-19
@@ -31,27 +31,27 @@ $provide.value("$locale", {
|
||||
"\u0434\u0435\u043a\u0430\u0431\u0440"
|
||||
],
|
||||
"SHORTDAY": [
|
||||
"B.",
|
||||
"B.E.",
|
||||
"\u00c7.A.",
|
||||
"\u00c7.",
|
||||
"C.A.",
|
||||
"C",
|
||||
"\u015e."
|
||||
"\u0431\u0430\u0437\u0430\u0440",
|
||||
"\u0431\u0430\u0437\u0430\u0440 \u0435\u0440\u0442\u04d9\u0441\u0438",
|
||||
"\u0447\u04d9\u0440\u0448\u04d9\u043d\u0431\u04d9 \u0430\u0445\u0448\u0430\u043c\u044b",
|
||||
"\u0447\u04d9\u0440\u0448\u04d9\u043d\u0431\u04d9",
|
||||
"\u04b9\u04af\u043c\u04d9 \u0430\u0445\u0448\u0430\u043c\u044b",
|
||||
"\u04b9\u04af\u043c\u04d9",
|
||||
"\u0448\u04d9\u043d\u0431\u04d9"
|
||||
],
|
||||
"SHORTMONTH": [
|
||||
"yan",
|
||||
"fev",
|
||||
"mar",
|
||||
"apr",
|
||||
"may",
|
||||
"iyn",
|
||||
"iyl",
|
||||
"avq",
|
||||
"sen",
|
||||
"okt",
|
||||
"noy",
|
||||
"dek"
|
||||
"\u0458\u0430\u043d\u0432\u0430\u0440",
|
||||
"\u0444\u0435\u0432\u0440\u0430\u043b",
|
||||
"\u043c\u0430\u0440\u0442",
|
||||
"\u0430\u043f\u0440\u0435\u043b",
|
||||
"\u043c\u0430\u0439",
|
||||
"\u0438\u0458\u0443\u043d",
|
||||
"\u0438\u0458\u0443\u043b",
|
||||
"\u0430\u0432\u0433\u0443\u0441\u0442",
|
||||
"\u0441\u0435\u043d\u0442\u0458\u0430\u0431\u0440",
|
||||
"\u043e\u043a\u0442\u0458\u0430\u0431\u0440",
|
||||
"\u043d\u043e\u0458\u0430\u0431\u0440",
|
||||
"\u0434\u0435\u043a\u0430\u0431\u0440"
|
||||
],
|
||||
"fullDate": "EEEE, d, MMMM, y",
|
||||
"longDate": "d MMMM, y",
|
||||
|
||||
+19
-19
@@ -31,27 +31,27 @@ $provide.value("$locale", {
|
||||
"\u0434\u0435\u043a\u0430\u0431\u0440"
|
||||
],
|
||||
"SHORTDAY": [
|
||||
"B.",
|
||||
"B.E.",
|
||||
"\u00c7.A.",
|
||||
"\u00c7.",
|
||||
"C.A.",
|
||||
"C",
|
||||
"\u015e."
|
||||
"\u0431\u0430\u0437\u0430\u0440",
|
||||
"\u0431\u0430\u0437\u0430\u0440 \u0435\u0440\u0442\u04d9\u0441\u0438",
|
||||
"\u0447\u04d9\u0440\u0448\u04d9\u043d\u0431\u04d9 \u0430\u0445\u0448\u0430\u043c\u044b",
|
||||
"\u0447\u04d9\u0440\u0448\u04d9\u043d\u0431\u04d9",
|
||||
"\u04b9\u04af\u043c\u04d9 \u0430\u0445\u0448\u0430\u043c\u044b",
|
||||
"\u04b9\u04af\u043c\u04d9",
|
||||
"\u0448\u04d9\u043d\u0431\u04d9"
|
||||
],
|
||||
"SHORTMONTH": [
|
||||
"yan",
|
||||
"fev",
|
||||
"mar",
|
||||
"apr",
|
||||
"may",
|
||||
"iyn",
|
||||
"iyl",
|
||||
"avq",
|
||||
"sen",
|
||||
"okt",
|
||||
"noy",
|
||||
"dek"
|
||||
"\u0458\u0430\u043d\u0432\u0430\u0440",
|
||||
"\u0444\u0435\u0432\u0440\u0430\u043b",
|
||||
"\u043c\u0430\u0440\u0442",
|
||||
"\u0430\u043f\u0440\u0435\u043b",
|
||||
"\u043c\u0430\u0439",
|
||||
"\u0438\u0458\u0443\u043d",
|
||||
"\u0438\u0458\u0443\u043b",
|
||||
"\u0430\u0432\u0433\u0443\u0441\u0442",
|
||||
"\u0441\u0435\u043d\u0442\u0458\u0430\u0431\u0440",
|
||||
"\u043e\u043a\u0442\u0458\u0430\u0431\u0440",
|
||||
"\u043d\u043e\u0458\u0430\u0431\u0440",
|
||||
"\u0434\u0435\u043a\u0430\u0431\u0440"
|
||||
],
|
||||
"fullDate": "EEEE, d, MMMM, y",
|
||||
"longDate": "d MMMM, y",
|
||||
|
||||
+1
-1
@@ -36,7 +36,7 @@ $provide.value("$locale", {
|
||||
"\u00c7.A.",
|
||||
"\u00c7.",
|
||||
"C.A.",
|
||||
"C",
|
||||
"C.",
|
||||
"\u015e."
|
||||
],
|
||||
"SHORTMONTH": [
|
||||
|
||||
+1
-1
@@ -36,7 +36,7 @@ $provide.value("$locale", {
|
||||
"\u00c7.A.",
|
||||
"\u00c7.",
|
||||
"C.A.",
|
||||
"C",
|
||||
"C.",
|
||||
"\u015e."
|
||||
],
|
||||
"SHORTMONTH": [
|
||||
|
||||
Vendored
+1
-1
@@ -36,7 +36,7 @@ $provide.value("$locale", {
|
||||
"\u00c7.A.",
|
||||
"\u00c7.",
|
||||
"C.A.",
|
||||
"C",
|
||||
"C.",
|
||||
"\u015e."
|
||||
],
|
||||
"SHORTMONTH": [
|
||||
|
||||
Vendored
+2
-2
@@ -58,8 +58,8 @@ $provide.value("$locale", {
|
||||
"medium": "d.MM.y '\u0433'. H:mm:ss",
|
||||
"mediumDate": "d.MM.y '\u0433'.",
|
||||
"mediumTime": "H:mm:ss",
|
||||
"short": "d.MM.yy H:mm",
|
||||
"shortDate": "d.MM.yy",
|
||||
"short": "d.MM.yy '\u0433'. H:mm",
|
||||
"shortDate": "d.MM.yy '\u0433'.",
|
||||
"shortTime": "H:mm"
|
||||
},
|
||||
"NUMBER_FORMATS": {
|
||||
|
||||
Vendored
+2
-2
@@ -58,8 +58,8 @@ $provide.value("$locale", {
|
||||
"medium": "d.MM.y '\u0433'. H:mm:ss",
|
||||
"mediumDate": "d.MM.y '\u0433'.",
|
||||
"mediumTime": "H:mm:ss",
|
||||
"short": "d.MM.yy H:mm",
|
||||
"shortDate": "d.MM.yy",
|
||||
"short": "d.MM.yy '\u0433'. H:mm",
|
||||
"shortDate": "d.MM.yy '\u0433'.",
|
||||
"shortTime": "H:mm"
|
||||
},
|
||||
"NUMBER_FORMATS": {
|
||||
|
||||
+115
@@ -0,0 +1,115 @@
|
||||
'use strict';
|
||||
angular.module("ngLocale", [], ["$provide", function($provide) {
|
||||
var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
|
||||
function getDecimals(n) {
|
||||
n = n + '';
|
||||
var i = n.indexOf('.');
|
||||
return (i == -1) ? 0 : n.length - i - 1;
|
||||
}
|
||||
|
||||
function getVF(n, opt_precision) {
|
||||
var v = opt_precision;
|
||||
|
||||
if (undefined === v) {
|
||||
v = Math.min(getDecimals(n), 3);
|
||||
}
|
||||
|
||||
var base = Math.pow(10, v);
|
||||
var f = ((n * base) | 0) % base;
|
||||
return {v: v, f: f};
|
||||
}
|
||||
|
||||
$provide.value("$locale", {
|
||||
"DATETIME_FORMATS": {
|
||||
"AMPMS": [
|
||||
"AM",
|
||||
"PM"
|
||||
],
|
||||
"DAY": [
|
||||
"kari",
|
||||
"nt\u025bn\u025b",
|
||||
"tarata",
|
||||
"araba",
|
||||
"alamisa",
|
||||
"juma",
|
||||
"sibiri"
|
||||
],
|
||||
"MONTH": [
|
||||
"zanwuye",
|
||||
"feburuye",
|
||||
"marisi",
|
||||
"awirili",
|
||||
"m\u025b",
|
||||
"zuw\u025bn",
|
||||
"zuluye",
|
||||
"uti",
|
||||
"s\u025btanburu",
|
||||
"\u0254kut\u0254buru",
|
||||
"nowanburu",
|
||||
"desanburu"
|
||||
],
|
||||
"SHORTDAY": [
|
||||
"kar",
|
||||
"nt\u025b",
|
||||
"tar",
|
||||
"ara",
|
||||
"ala",
|
||||
"jum",
|
||||
"sib"
|
||||
],
|
||||
"SHORTMONTH": [
|
||||
"zan",
|
||||
"feb",
|
||||
"mar",
|
||||
"awi",
|
||||
"m\u025b",
|
||||
"zuw",
|
||||
"zul",
|
||||
"uti",
|
||||
"s\u025bt",
|
||||
"\u0254ku",
|
||||
"now",
|
||||
"des"
|
||||
],
|
||||
"fullDate": "EEEE d MMMM y",
|
||||
"longDate": "d MMMM y",
|
||||
"medium": "d MMM, y HH:mm:ss",
|
||||
"mediumDate": "d MMM, y",
|
||||
"mediumTime": "HH:mm:ss",
|
||||
"short": "d/M/y HH:mm",
|
||||
"shortDate": "d/M/y",
|
||||
"shortTime": "HH:mm"
|
||||
},
|
||||
"NUMBER_FORMATS": {
|
||||
"CURRENCY_SYM": "CFA",
|
||||
"DECIMAL_SEP": ".",
|
||||
"GROUP_SEP": ",",
|
||||
"PATTERNS": [
|
||||
{
|
||||
"gSize": 3,
|
||||
"lgSize": 3,
|
||||
"maxFrac": 3,
|
||||
"minFrac": 0,
|
||||
"minInt": 1,
|
||||
"negPre": "-",
|
||||
"negSuf": "",
|
||||
"posPre": "",
|
||||
"posSuf": ""
|
||||
},
|
||||
{
|
||||
"gSize": 3,
|
||||
"lgSize": 3,
|
||||
"maxFrac": 2,
|
||||
"minFrac": 2,
|
||||
"minInt": 1,
|
||||
"negPre": "\u00a4-",
|
||||
"negSuf": "",
|
||||
"posPre": "\u00a4",
|
||||
"posSuf": ""
|
||||
}
|
||||
]
|
||||
},
|
||||
"id": "bm-latn-ml",
|
||||
"pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
|
||||
});
|
||||
}]);
|
||||
+115
@@ -0,0 +1,115 @@
|
||||
'use strict';
|
||||
angular.module("ngLocale", [], ["$provide", function($provide) {
|
||||
var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
|
||||
function getDecimals(n) {
|
||||
n = n + '';
|
||||
var i = n.indexOf('.');
|
||||
return (i == -1) ? 0 : n.length - i - 1;
|
||||
}
|
||||
|
||||
function getVF(n, opt_precision) {
|
||||
var v = opt_precision;
|
||||
|
||||
if (undefined === v) {
|
||||
v = Math.min(getDecimals(n), 3);
|
||||
}
|
||||
|
||||
var base = Math.pow(10, v);
|
||||
var f = ((n * base) | 0) % base;
|
||||
return {v: v, f: f};
|
||||
}
|
||||
|
||||
$provide.value("$locale", {
|
||||
"DATETIME_FORMATS": {
|
||||
"AMPMS": [
|
||||
"AM",
|
||||
"PM"
|
||||
],
|
||||
"DAY": [
|
||||
"kari",
|
||||
"nt\u025bn\u025b",
|
||||
"tarata",
|
||||
"araba",
|
||||
"alamisa",
|
||||
"juma",
|
||||
"sibiri"
|
||||
],
|
||||
"MONTH": [
|
||||
"zanwuye",
|
||||
"feburuye",
|
||||
"marisi",
|
||||
"awirili",
|
||||
"m\u025b",
|
||||
"zuw\u025bn",
|
||||
"zuluye",
|
||||
"uti",
|
||||
"s\u025btanburu",
|
||||
"\u0254kut\u0254buru",
|
||||
"nowanburu",
|
||||
"desanburu"
|
||||
],
|
||||
"SHORTDAY": [
|
||||
"kar",
|
||||
"nt\u025b",
|
||||
"tar",
|
||||
"ara",
|
||||
"ala",
|
||||
"jum",
|
||||
"sib"
|
||||
],
|
||||
"SHORTMONTH": [
|
||||
"zan",
|
||||
"feb",
|
||||
"mar",
|
||||
"awi",
|
||||
"m\u025b",
|
||||
"zuw",
|
||||
"zul",
|
||||
"uti",
|
||||
"s\u025bt",
|
||||
"\u0254ku",
|
||||
"now",
|
||||
"des"
|
||||
],
|
||||
"fullDate": "EEEE d MMMM y",
|
||||
"longDate": "d MMMM y",
|
||||
"medium": "d MMM, y HH:mm:ss",
|
||||
"mediumDate": "d MMM, y",
|
||||
"mediumTime": "HH:mm:ss",
|
||||
"short": "d/M/y HH:mm",
|
||||
"shortDate": "d/M/y",
|
||||
"shortTime": "HH:mm"
|
||||
},
|
||||
"NUMBER_FORMATS": {
|
||||
"CURRENCY_SYM": "\u20ac",
|
||||
"DECIMAL_SEP": ".",
|
||||
"GROUP_SEP": ",",
|
||||
"PATTERNS": [
|
||||
{
|
||||
"gSize": 3,
|
||||
"lgSize": 3,
|
||||
"maxFrac": 3,
|
||||
"minFrac": 0,
|
||||
"minInt": 1,
|
||||
"negPre": "-",
|
||||
"negSuf": "",
|
||||
"posPre": "",
|
||||
"posSuf": ""
|
||||
},
|
||||
{
|
||||
"gSize": 3,
|
||||
"lgSize": 3,
|
||||
"maxFrac": 2,
|
||||
"minFrac": 2,
|
||||
"minInt": 1,
|
||||
"negPre": "\u00a4-",
|
||||
"negSuf": "",
|
||||
"posPre": "\u00a4",
|
||||
"posSuf": ""
|
||||
}
|
||||
]
|
||||
},
|
||||
"id": "bm-latn",
|
||||
"pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
|
||||
});
|
||||
}]);
|
||||
Vendored
+1
-1
@@ -12,7 +12,7 @@ $provide.value("$locale", {
|
||||
"\u09b8\u09cb\u09ae\u09ac\u09be\u09b0",
|
||||
"\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09b0",
|
||||
"\u09ac\u09c1\u09a7\u09ac\u09be\u09b0",
|
||||
"\u09ac\u09c3\u09b9\u09b7\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0",
|
||||
"\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0",
|
||||
"\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0",
|
||||
"\u09b6\u09a8\u09bf\u09ac\u09be\u09b0"
|
||||
],
|
||||
|
||||
Vendored
+1
-1
@@ -12,7 +12,7 @@ $provide.value("$locale", {
|
||||
"\u09b8\u09cb\u09ae\u09ac\u09be\u09b0",
|
||||
"\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09b0",
|
||||
"\u09ac\u09c1\u09a7\u09ac\u09be\u09b0",
|
||||
"\u09ac\u09c3\u09b9\u09b7\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0",
|
||||
"\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0",
|
||||
"\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0",
|
||||
"\u09b6\u09a8\u09bf\u09ac\u09be\u09b0"
|
||||
],
|
||||
|
||||
Vendored
+1
-1
@@ -12,7 +12,7 @@ $provide.value("$locale", {
|
||||
"\u09b8\u09cb\u09ae\u09ac\u09be\u09b0",
|
||||
"\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09b0",
|
||||
"\u09ac\u09c1\u09a7\u09ac\u09be\u09b0",
|
||||
"\u09ac\u09c3\u09b9\u09b7\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0",
|
||||
"\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0",
|
||||
"\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0",
|
||||
"\u09b6\u09a8\u09bf\u09ac\u09be\u09b0"
|
||||
],
|
||||
|
||||
Vendored
+5
-5
@@ -29,9 +29,9 @@ $provide.value("$locale", {
|
||||
"\u0f42\u0f5f\u0f60\u0f0b\u0f49\u0f72\u0f0b\u0f58\u0f0b",
|
||||
"\u0f42\u0f5f\u0f60\u0f0b\u0f5f\u0fb3\u0f0b\u0f56\u0f0b",
|
||||
"\u0f42\u0f5f\u0f60\u0f0b\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b",
|
||||
"\u0f42\u0f5f\u0f60\u0f0b\u0f67\u0fb3\u0f42\u0f0b\u0f54\u0f0b",
|
||||
"\u0f42\u0f5f\u0f60\u0f0b\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b",
|
||||
"\u0f42\u0f5f\u0f60\u0f0b\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74\u0f0b",
|
||||
"\u0f42\u0f5f\u0f60\u0f0b\u0f66\u0f44\u0f66\u0f0b",
|
||||
"\u0f42\u0f5f\u0f60\u0f0b\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b",
|
||||
"\u0f42\u0f5f\u0f60\u0f0b\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b"
|
||||
],
|
||||
"MONTH": [
|
||||
@@ -52,9 +52,9 @@ $provide.value("$locale", {
|
||||
"\u0f49\u0f72\u0f0b\u0f58\u0f0b",
|
||||
"\u0f5f\u0fb3\u0f0b\u0f56\u0f0b",
|
||||
"\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b",
|
||||
"\u0f67\u0fb3\u0f42\u0f0b\u0f54\u0f0b",
|
||||
"\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b",
|
||||
"\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74\u0f0b",
|
||||
"\u0f66\u0f44\u0f66\u0f0b",
|
||||
"\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b",
|
||||
"\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b"
|
||||
],
|
||||
"SHORTMONTH": [
|
||||
@@ -72,7 +72,7 @@ $provide.value("$locale", {
|
||||
"\u0f5f\u0fb3\u0f0b\u0f21\u0f22"
|
||||
],
|
||||
"fullDate": "y MMMM d, EEEE",
|
||||
"longDate": "\u0f66\u0fa6\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0by MMMM\u0f60\u0f72\u0f0b\u0f59\u0f7a\u0f66\u0f0bd\u0f51",
|
||||
"longDate": "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0by MMMM\u0f60\u0f72\u0f0b\u0f59\u0f7a\u0f66\u0f0bd\u0f51",
|
||||
"medium": "y \u0f63\u0f7c\u0f0b\u0f60\u0f72\u0f0bMMM\u0f59\u0f7a\u0f66\u0f0bd HH:mm:ss",
|
||||
"mediumDate": "y \u0f63\u0f7c\u0f0b\u0f60\u0f72\u0f0bMMM\u0f59\u0f7a\u0f66\u0f0bd",
|
||||
"mediumTime": "HH:mm:ss",
|
||||
|
||||
Vendored
+5
-5
@@ -29,9 +29,9 @@ $provide.value("$locale", {
|
||||
"\u0f42\u0f5f\u0f60\u0f0b\u0f49\u0f72\u0f0b\u0f58\u0f0b",
|
||||
"\u0f42\u0f5f\u0f60\u0f0b\u0f5f\u0fb3\u0f0b\u0f56\u0f0b",
|
||||
"\u0f42\u0f5f\u0f60\u0f0b\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b",
|
||||
"\u0f42\u0f5f\u0f60\u0f0b\u0f67\u0fb3\u0f42\u0f0b\u0f54\u0f0b",
|
||||
"\u0f42\u0f5f\u0f60\u0f0b\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b",
|
||||
"\u0f42\u0f5f\u0f60\u0f0b\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74\u0f0b",
|
||||
"\u0f42\u0f5f\u0f60\u0f0b\u0f66\u0f44\u0f66\u0f0b",
|
||||
"\u0f42\u0f5f\u0f60\u0f0b\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b",
|
||||
"\u0f42\u0f5f\u0f60\u0f0b\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b"
|
||||
],
|
||||
"MONTH": [
|
||||
@@ -52,9 +52,9 @@ $provide.value("$locale", {
|
||||
"\u0f49\u0f72\u0f0b\u0f58\u0f0b",
|
||||
"\u0f5f\u0fb3\u0f0b\u0f56\u0f0b",
|
||||
"\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b",
|
||||
"\u0f67\u0fb3\u0f42\u0f0b\u0f54\u0f0b",
|
||||
"\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b",
|
||||
"\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74\u0f0b",
|
||||
"\u0f66\u0f44\u0f66\u0f0b",
|
||||
"\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b",
|
||||
"\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b"
|
||||
],
|
||||
"SHORTMONTH": [
|
||||
@@ -72,7 +72,7 @@ $provide.value("$locale", {
|
||||
"\u0f5f\u0fb3\u0f0b\u0f21\u0f22"
|
||||
],
|
||||
"fullDate": "y MMMM d, EEEE",
|
||||
"longDate": "\u0f66\u0fa6\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0by MMMM\u0f60\u0f72\u0f0b\u0f59\u0f7a\u0f66\u0f0bd\u0f51",
|
||||
"longDate": "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0by MMMM\u0f60\u0f72\u0f0b\u0f59\u0f7a\u0f66\u0f0bd\u0f51",
|
||||
"medium": "y \u0f63\u0f7c\u0f0b\u0f60\u0f72\u0f0bMMM\u0f59\u0f7a\u0f66\u0f0bd HH:mm:ss",
|
||||
"mediumDate": "y \u0f63\u0f7c\u0f0b\u0f60\u0f72\u0f0bMMM\u0f59\u0f7a\u0f66\u0f0bd",
|
||||
"mediumTime": "HH:mm:ss",
|
||||
|
||||
Vendored
+5
-5
@@ -29,9 +29,9 @@ $provide.value("$locale", {
|
||||
"\u0f42\u0f5f\u0f60\u0f0b\u0f49\u0f72\u0f0b\u0f58\u0f0b",
|
||||
"\u0f42\u0f5f\u0f60\u0f0b\u0f5f\u0fb3\u0f0b\u0f56\u0f0b",
|
||||
"\u0f42\u0f5f\u0f60\u0f0b\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b",
|
||||
"\u0f42\u0f5f\u0f60\u0f0b\u0f67\u0fb3\u0f42\u0f0b\u0f54\u0f0b",
|
||||
"\u0f42\u0f5f\u0f60\u0f0b\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b",
|
||||
"\u0f42\u0f5f\u0f60\u0f0b\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74\u0f0b",
|
||||
"\u0f42\u0f5f\u0f60\u0f0b\u0f66\u0f44\u0f66\u0f0b",
|
||||
"\u0f42\u0f5f\u0f60\u0f0b\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b",
|
||||
"\u0f42\u0f5f\u0f60\u0f0b\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b"
|
||||
],
|
||||
"MONTH": [
|
||||
@@ -52,9 +52,9 @@ $provide.value("$locale", {
|
||||
"\u0f49\u0f72\u0f0b\u0f58\u0f0b",
|
||||
"\u0f5f\u0fb3\u0f0b\u0f56\u0f0b",
|
||||
"\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b",
|
||||
"\u0f67\u0fb3\u0f42\u0f0b\u0f54\u0f0b",
|
||||
"\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b",
|
||||
"\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74\u0f0b",
|
||||
"\u0f66\u0f44\u0f66\u0f0b",
|
||||
"\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b",
|
||||
"\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b"
|
||||
],
|
||||
"SHORTMONTH": [
|
||||
@@ -72,7 +72,7 @@ $provide.value("$locale", {
|
||||
"\u0f5f\u0fb3\u0f0b\u0f21\u0f22"
|
||||
],
|
||||
"fullDate": "y MMMM d, EEEE",
|
||||
"longDate": "\u0f66\u0fa6\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0by MMMM\u0f60\u0f72\u0f0b\u0f59\u0f7a\u0f66\u0f0bd\u0f51",
|
||||
"longDate": "\u0f66\u0fa4\u0fb1\u0f72\u0f0b\u0f63\u0f7c\u0f0by MMMM\u0f60\u0f72\u0f0b\u0f59\u0f7a\u0f66\u0f0bd\u0f51",
|
||||
"medium": "y \u0f63\u0f7c\u0f0b\u0f60\u0f72\u0f0bMMM\u0f59\u0f7a\u0f66\u0f0bd HH:mm:ss",
|
||||
"mediumDate": "y \u0f63\u0f7c\u0f0b\u0f60\u0f72\u0f0bMMM\u0f59\u0f7a\u0f66\u0f0bd",
|
||||
"mediumTime": "HH:mm:ss",
|
||||
|
||||
Vendored
+13
-13
@@ -4,8 +4,8 @@ var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "
|
||||
$provide.value("$locale", {
|
||||
"DATETIME_FORMATS": {
|
||||
"AMPMS": [
|
||||
"AM",
|
||||
"PM"
|
||||
"A.M.",
|
||||
"G.M."
|
||||
],
|
||||
"DAY": [
|
||||
"Sul",
|
||||
@@ -31,13 +31,13 @@ $provide.value("$locale", {
|
||||
"Kerzu"
|
||||
],
|
||||
"SHORTDAY": [
|
||||
"sul",
|
||||
"lun",
|
||||
"meu.",
|
||||
"mer.",
|
||||
"yaou",
|
||||
"gwe.",
|
||||
"sad."
|
||||
"Sul",
|
||||
"Lun",
|
||||
"Meu.",
|
||||
"Mer.",
|
||||
"Yaou",
|
||||
"Gwe.",
|
||||
"Sad."
|
||||
],
|
||||
"SHORTMONTH": [
|
||||
"Gen",
|
||||
@@ -84,10 +84,10 @@ $provide.value("$locale", {
|
||||
"maxFrac": 2,
|
||||
"minFrac": 2,
|
||||
"minInt": 1,
|
||||
"negPre": "\u00a4\u00a0-",
|
||||
"negSuf": "",
|
||||
"posPre": "\u00a4\u00a0",
|
||||
"posSuf": ""
|
||||
"negPre": "-",
|
||||
"negSuf": "\u00a0\u00a4",
|
||||
"posPre": "",
|
||||
"posSuf": "\u00a0\u00a4"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
Vendored
+13
-13
@@ -4,8 +4,8 @@ var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "
|
||||
$provide.value("$locale", {
|
||||
"DATETIME_FORMATS": {
|
||||
"AMPMS": [
|
||||
"AM",
|
||||
"PM"
|
||||
"A.M.",
|
||||
"G.M."
|
||||
],
|
||||
"DAY": [
|
||||
"Sul",
|
||||
@@ -31,13 +31,13 @@ $provide.value("$locale", {
|
||||
"Kerzu"
|
||||
],
|
||||
"SHORTDAY": [
|
||||
"sul",
|
||||
"lun",
|
||||
"meu.",
|
||||
"mer.",
|
||||
"yaou",
|
||||
"gwe.",
|
||||
"sad."
|
||||
"Sul",
|
||||
"Lun",
|
||||
"Meu.",
|
||||
"Mer.",
|
||||
"Yaou",
|
||||
"Gwe.",
|
||||
"Sad."
|
||||
],
|
||||
"SHORTMONTH": [
|
||||
"Gen",
|
||||
@@ -84,10 +84,10 @@ $provide.value("$locale", {
|
||||
"maxFrac": 2,
|
||||
"minFrac": 2,
|
||||
"minInt": 1,
|
||||
"negPre": "\u00a4\u00a0-",
|
||||
"negSuf": "",
|
||||
"posPre": "\u00a4\u00a0",
|
||||
"posSuf": ""
|
||||
"negPre": "-",
|
||||
"negSuf": "\u00a0\u00a4",
|
||||
"posPre": "",
|
||||
"posSuf": "\u00a0\u00a4"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
+9
-9
@@ -22,7 +22,7 @@ function getVF(n, opt_precision) {
|
||||
$provide.value("$locale", {
|
||||
"DATETIME_FORMATS": {
|
||||
"AMPMS": [
|
||||
"pre podne",
|
||||
"prije podne",
|
||||
"popodne"
|
||||
],
|
||||
"DAY": [
|
||||
@@ -42,7 +42,7 @@ $provide.value("$locale", {
|
||||
"maj",
|
||||
"juni",
|
||||
"juli",
|
||||
"avgust",
|
||||
"august",
|
||||
"septembar",
|
||||
"oktobar",
|
||||
"novembar",
|
||||
@@ -65,7 +65,7 @@ $provide.value("$locale", {
|
||||
"maj",
|
||||
"jun",
|
||||
"jul",
|
||||
"avg",
|
||||
"aug",
|
||||
"sep",
|
||||
"okt",
|
||||
"nov",
|
||||
@@ -73,8 +73,8 @@ $provide.value("$locale", {
|
||||
],
|
||||
"fullDate": "EEEE, dd. MMMM y.",
|
||||
"longDate": "dd. MMMM y.",
|
||||
"medium": "dd.MM.y. HH:mm:ss",
|
||||
"mediumDate": "dd.MM.y.",
|
||||
"medium": "dd. MMM. y. HH:mm:ss",
|
||||
"mediumDate": "dd. MMM. y.",
|
||||
"mediumTime": "HH:mm:ss",
|
||||
"short": "dd.MM.yy. HH:mm",
|
||||
"shortDate": "dd.MM.yy.",
|
||||
@@ -102,10 +102,10 @@ $provide.value("$locale", {
|
||||
"maxFrac": 2,
|
||||
"minFrac": 2,
|
||||
"minInt": 1,
|
||||
"negPre": "\u00a4\u00a0-",
|
||||
"negSuf": "",
|
||||
"posPre": "\u00a4\u00a0",
|
||||
"posSuf": ""
|
||||
"negPre": "-",
|
||||
"negSuf": "\u00a0\u00a4",
|
||||
"posPre": "",
|
||||
"posSuf": "\u00a0\u00a4"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
+9
-9
@@ -22,7 +22,7 @@ function getVF(n, opt_precision) {
|
||||
$provide.value("$locale", {
|
||||
"DATETIME_FORMATS": {
|
||||
"AMPMS": [
|
||||
"pre podne",
|
||||
"prije podne",
|
||||
"popodne"
|
||||
],
|
||||
"DAY": [
|
||||
@@ -42,7 +42,7 @@ $provide.value("$locale", {
|
||||
"maj",
|
||||
"juni",
|
||||
"juli",
|
||||
"avgust",
|
||||
"august",
|
||||
"septembar",
|
||||
"oktobar",
|
||||
"novembar",
|
||||
@@ -65,7 +65,7 @@ $provide.value("$locale", {
|
||||
"maj",
|
||||
"jun",
|
||||
"jul",
|
||||
"avg",
|
||||
"aug",
|
||||
"sep",
|
||||
"okt",
|
||||
"nov",
|
||||
@@ -73,8 +73,8 @@ $provide.value("$locale", {
|
||||
],
|
||||
"fullDate": "EEEE, dd. MMMM y.",
|
||||
"longDate": "dd. MMMM y.",
|
||||
"medium": "dd.MM.y. HH:mm:ss",
|
||||
"mediumDate": "dd.MM.y.",
|
||||
"medium": "dd. MMM. y. HH:mm:ss",
|
||||
"mediumDate": "dd. MMM. y.",
|
||||
"mediumTime": "HH:mm:ss",
|
||||
"short": "dd.MM.yy. HH:mm",
|
||||
"shortDate": "dd.MM.yy.",
|
||||
@@ -102,10 +102,10 @@ $provide.value("$locale", {
|
||||
"maxFrac": 2,
|
||||
"minFrac": 2,
|
||||
"minInt": 1,
|
||||
"negPre": "\u00a4\u00a0-",
|
||||
"negSuf": "",
|
||||
"posPre": "\u00a4\u00a0",
|
||||
"posSuf": ""
|
||||
"negPre": "-",
|
||||
"negSuf": "\u00a0\u00a4",
|
||||
"posPre": "",
|
||||
"posSuf": "\u00a0\u00a4"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
Vendored
+9
-9
@@ -22,7 +22,7 @@ function getVF(n, opt_precision) {
|
||||
$provide.value("$locale", {
|
||||
"DATETIME_FORMATS": {
|
||||
"AMPMS": [
|
||||
"pre podne",
|
||||
"prije podne",
|
||||
"popodne"
|
||||
],
|
||||
"DAY": [
|
||||
@@ -42,7 +42,7 @@ $provide.value("$locale", {
|
||||
"maj",
|
||||
"juni",
|
||||
"juli",
|
||||
"avgust",
|
||||
"august",
|
||||
"septembar",
|
||||
"oktobar",
|
||||
"novembar",
|
||||
@@ -65,7 +65,7 @@ $provide.value("$locale", {
|
||||
"maj",
|
||||
"jun",
|
||||
"jul",
|
||||
"avg",
|
||||
"aug",
|
||||
"sep",
|
||||
"okt",
|
||||
"nov",
|
||||
@@ -73,8 +73,8 @@ $provide.value("$locale", {
|
||||
],
|
||||
"fullDate": "EEEE, dd. MMMM y.",
|
||||
"longDate": "dd. MMMM y.",
|
||||
"medium": "dd.MM.y. HH:mm:ss",
|
||||
"mediumDate": "dd.MM.y.",
|
||||
"medium": "dd. MMM. y. HH:mm:ss",
|
||||
"mediumDate": "dd. MMM. y.",
|
||||
"mediumTime": "HH:mm:ss",
|
||||
"short": "dd.MM.yy. HH:mm",
|
||||
"shortDate": "dd.MM.yy.",
|
||||
@@ -102,10 +102,10 @@ $provide.value("$locale", {
|
||||
"maxFrac": 2,
|
||||
"minFrac": 2,
|
||||
"minInt": 1,
|
||||
"negPre": "\u00a4\u00a0-",
|
||||
"negSuf": "",
|
||||
"posPre": "\u00a4\u00a0",
|
||||
"posSuf": ""
|
||||
"negPre": "-",
|
||||
"negSuf": "\u00a0\u00a4",
|
||||
"posPre": "",
|
||||
"posSuf": "\u00a0\u00a4"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
Vendored
+3
-3
@@ -59,7 +59,7 @@ $provide.value("$locale", {
|
||||
],
|
||||
"SHORTMONTH": [
|
||||
"gen.",
|
||||
"feb.",
|
||||
"febr.",
|
||||
"mar\u00e7",
|
||||
"abr.",
|
||||
"maig",
|
||||
@@ -73,8 +73,8 @@ $provide.value("$locale", {
|
||||
],
|
||||
"fullDate": "EEEE, d MMMM 'de' y",
|
||||
"longDate": "d MMMM 'de' y",
|
||||
"medium": "dd/MM/y H:mm:ss",
|
||||
"mediumDate": "dd/MM/y",
|
||||
"medium": "d MMM y H:mm:ss",
|
||||
"mediumDate": "d MMM y",
|
||||
"mediumTime": "H:mm:ss",
|
||||
"short": "d/M/yy H:mm",
|
||||
"shortDate": "d/M/yy",
|
||||
|
||||
+3
-3
@@ -59,7 +59,7 @@ $provide.value("$locale", {
|
||||
],
|
||||
"SHORTMONTH": [
|
||||
"gen.",
|
||||
"feb.",
|
||||
"febr.",
|
||||
"mar\u00e7",
|
||||
"abr.",
|
||||
"maig",
|
||||
@@ -73,8 +73,8 @@ $provide.value("$locale", {
|
||||
],
|
||||
"fullDate": "EEEE, d MMMM 'de' y",
|
||||
"longDate": "d MMMM 'de' y",
|
||||
"medium": "dd/MM/y H:mm:ss",
|
||||
"mediumDate": "dd/MM/y",
|
||||
"medium": "d MMM y H:mm:ss",
|
||||
"mediumDate": "d MMM y",
|
||||
"mediumTime": "H:mm:ss",
|
||||
"short": "d/M/yy H:mm",
|
||||
"shortDate": "d/M/yy",
|
||||
|
||||
Vendored
+3
-3
@@ -59,7 +59,7 @@ $provide.value("$locale", {
|
||||
],
|
||||
"SHORTMONTH": [
|
||||
"gen.",
|
||||
"feb.",
|
||||
"febr.",
|
||||
"mar\u00e7",
|
||||
"abr.",
|
||||
"maig",
|
||||
@@ -73,8 +73,8 @@ $provide.value("$locale", {
|
||||
],
|
||||
"fullDate": "EEEE, d MMMM 'de' y",
|
||||
"longDate": "d MMMM 'de' y",
|
||||
"medium": "dd/MM/y H:mm:ss",
|
||||
"mediumDate": "dd/MM/y",
|
||||
"medium": "d MMM y H:mm:ss",
|
||||
"mediumDate": "d MMM y",
|
||||
"mediumTime": "H:mm:ss",
|
||||
"short": "d/M/yy H:mm",
|
||||
"shortDate": "d/M/yy",
|
||||
|
||||
Vendored
+3
-3
@@ -59,7 +59,7 @@ $provide.value("$locale", {
|
||||
],
|
||||
"SHORTMONTH": [
|
||||
"gen.",
|
||||
"feb.",
|
||||
"febr.",
|
||||
"mar\u00e7",
|
||||
"abr.",
|
||||
"maig",
|
||||
@@ -73,8 +73,8 @@ $provide.value("$locale", {
|
||||
],
|
||||
"fullDate": "EEEE, d MMMM 'de' y",
|
||||
"longDate": "d MMMM 'de' y",
|
||||
"medium": "dd/MM/y H:mm:ss",
|
||||
"mediumDate": "dd/MM/y",
|
||||
"medium": "d MMM y H:mm:ss",
|
||||
"mediumDate": "d MMM y",
|
||||
"mediumTime": "H:mm:ss",
|
||||
"short": "d/M/yy H:mm",
|
||||
"shortDate": "d/M/yy",
|
||||
|
||||
Vendored
+3
-3
@@ -59,7 +59,7 @@ $provide.value("$locale", {
|
||||
],
|
||||
"SHORTMONTH": [
|
||||
"gen.",
|
||||
"feb.",
|
||||
"febr.",
|
||||
"mar\u00e7",
|
||||
"abr.",
|
||||
"maig",
|
||||
@@ -73,8 +73,8 @@ $provide.value("$locale", {
|
||||
],
|
||||
"fullDate": "EEEE, d MMMM 'de' y",
|
||||
"longDate": "d MMMM 'de' y",
|
||||
"medium": "dd/MM/y H:mm:ss",
|
||||
"mediumDate": "dd/MM/y",
|
||||
"medium": "d MMM y H:mm:ss",
|
||||
"mediumDate": "d MMM y",
|
||||
"mediumTime": "H:mm:ss",
|
||||
"short": "d/M/yy H:mm",
|
||||
"shortDate": "d/M/yy",
|
||||
|
||||
Vendored
+3
-3
@@ -59,7 +59,7 @@ $provide.value("$locale", {
|
||||
],
|
||||
"SHORTMONTH": [
|
||||
"gen.",
|
||||
"feb.",
|
||||
"febr.",
|
||||
"mar\u00e7",
|
||||
"abr.",
|
||||
"maig",
|
||||
@@ -73,8 +73,8 @@ $provide.value("$locale", {
|
||||
],
|
||||
"fullDate": "EEEE, d MMMM 'de' y",
|
||||
"longDate": "d MMMM 'de' y",
|
||||
"medium": "dd/MM/y H:mm:ss",
|
||||
"mediumDate": "dd/MM/y",
|
||||
"medium": "d MMM y H:mm:ss",
|
||||
"mediumDate": "d MMM y",
|
||||
"mediumTime": "H:mm:ss",
|
||||
"short": "d/M/yy H:mm",
|
||||
"shortDate": "d/M/yy",
|
||||
|
||||
Vendored
+2
-2
@@ -58,8 +58,8 @@ $provide.value("$locale", {
|
||||
"medium": "d MMM y HH:mm:ss",
|
||||
"mediumDate": "d MMM y",
|
||||
"mediumTime": "HH:mm:ss",
|
||||
"short": "dd/MM/y HH:mm",
|
||||
"shortDate": "dd/MM/y",
|
||||
"short": "dd/MM/yy HH:mm",
|
||||
"shortDate": "dd/MM/yy",
|
||||
"shortTime": "HH:mm"
|
||||
},
|
||||
"NUMBER_FORMATS": {
|
||||
|
||||
Vendored
+2
-2
@@ -58,8 +58,8 @@ $provide.value("$locale", {
|
||||
"medium": "d MMM y HH:mm:ss",
|
||||
"mediumDate": "d MMM y",
|
||||
"mediumTime": "HH:mm:ss",
|
||||
"short": "dd/MM/y HH:mm",
|
||||
"shortDate": "dd/MM/y",
|
||||
"short": "dd/MM/yy HH:mm",
|
||||
"shortDate": "dd/MM/yy",
|
||||
"shortTime": "HH:mm"
|
||||
},
|
||||
"NUMBER_FORMATS": {
|
||||
|
||||
Vendored
+1
-1
@@ -85,7 +85,7 @@ $provide.value("$locale", {
|
||||
"dec."
|
||||
],
|
||||
"fullDate": "EEEE 'den' d. MMMM y",
|
||||
"longDate": "d. MMM y",
|
||||
"longDate": "d. MMMM y",
|
||||
"medium": "dd/MM/y HH.mm.ss",
|
||||
"mediumDate": "dd/MM/y",
|
||||
"mediumTime": "HH.mm.ss",
|
||||
|
||||
Vendored
+1
-1
@@ -85,7 +85,7 @@ $provide.value("$locale", {
|
||||
"dec."
|
||||
],
|
||||
"fullDate": "EEEE 'den' d. MMMM y",
|
||||
"longDate": "d. MMM y",
|
||||
"longDate": "d. MMMM y",
|
||||
"medium": "dd/MM/y HH.mm.ss",
|
||||
"mediumDate": "dd/MM/y",
|
||||
"mediumTime": "HH.mm.ss",
|
||||
|
||||
Vendored
+1
-1
@@ -85,7 +85,7 @@ $provide.value("$locale", {
|
||||
"dec."
|
||||
],
|
||||
"fullDate": "EEEE 'den' d. MMMM y",
|
||||
"longDate": "d. MMM y",
|
||||
"longDate": "d. MMMM y",
|
||||
"medium": "dd/MM/y HH.mm.ss",
|
||||
"mediumDate": "dd/MM/y",
|
||||
"mediumTime": "HH.mm.ss",
|
||||
|
||||
Vendored
+2
-2
@@ -73,8 +73,8 @@ $provide.value("$locale", {
|
||||
],
|
||||
"fullDate": "EEEE, dd. MMMM y",
|
||||
"longDate": "dd. MMMM y",
|
||||
"medium": "dd.MM.y HH:mm:ss",
|
||||
"mediumDate": "dd.MM.y",
|
||||
"medium": "dd. MMM y HH:mm:ss",
|
||||
"mediumDate": "dd. MMM y",
|
||||
"mediumTime": "HH:mm:ss",
|
||||
"short": "dd.MM.yy HH:mm",
|
||||
"shortDate": "dd.MM.yy",
|
||||
|
||||
+115
@@ -0,0 +1,115 @@
|
||||
'use strict';
|
||||
angular.module("ngLocale", [], ["$provide", function($provide) {
|
||||
var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
|
||||
function getDecimals(n) {
|
||||
n = n + '';
|
||||
var i = n.indexOf('.');
|
||||
return (i == -1) ? 0 : n.length - i - 1;
|
||||
}
|
||||
|
||||
function getVF(n, opt_precision) {
|
||||
var v = opt_precision;
|
||||
|
||||
if (undefined === v) {
|
||||
v = Math.min(getDecimals(n), 3);
|
||||
}
|
||||
|
||||
var base = Math.pow(10, v);
|
||||
var f = ((n * base) | 0) % base;
|
||||
return {v: v, f: f};
|
||||
}
|
||||
|
||||
$provide.value("$locale", {
|
||||
"DATETIME_FORMATS": {
|
||||
"AMPMS": [
|
||||
"dopo\u0142dnja",
|
||||
"w\u00f3tpo\u0142dnja"
|
||||
],
|
||||
"DAY": [
|
||||
"nje\u017aela",
|
||||
"p\u00f3nje\u017aele",
|
||||
"wa\u0142tora",
|
||||
"srjoda",
|
||||
"stw\u00f3rtk",
|
||||
"p\u011btk",
|
||||
"sobota"
|
||||
],
|
||||
"MONTH": [
|
||||
"januara",
|
||||
"februara",
|
||||
"m\u011brca",
|
||||
"apryla",
|
||||
"maja",
|
||||
"junija",
|
||||
"julija",
|
||||
"awgusta",
|
||||
"septembra",
|
||||
"oktobra",
|
||||
"nowembra",
|
||||
"decembra"
|
||||
],
|
||||
"SHORTDAY": [
|
||||
"nje",
|
||||
"p\u00f3n",
|
||||
"wa\u0142",
|
||||
"srj",
|
||||
"stw",
|
||||
"p\u011bt",
|
||||
"sob"
|
||||
],
|
||||
"SHORTMONTH": [
|
||||
"jan.",
|
||||
"feb.",
|
||||
"m\u011br.",
|
||||
"apr.",
|
||||
"maj.",
|
||||
"jun.",
|
||||
"jul.",
|
||||
"awg.",
|
||||
"sep.",
|
||||
"okt.",
|
||||
"now.",
|
||||
"dec."
|
||||
],
|
||||
"fullDate": "EEEE, d. MMMM y",
|
||||
"longDate": "d. MMMM y",
|
||||
"medium": "d.M.y H:mm:ss",
|
||||
"mediumDate": "d.M.y",
|
||||
"mediumTime": "H:mm:ss",
|
||||
"short": "d.M.yy H:mm",
|
||||
"shortDate": "d.M.yy",
|
||||
"shortTime": "H:mm"
|
||||
},
|
||||
"NUMBER_FORMATS": {
|
||||
"CURRENCY_SYM": "\u20ac",
|
||||
"DECIMAL_SEP": ",",
|
||||
"GROUP_SEP": ".",
|
||||
"PATTERNS": [
|
||||
{
|
||||
"gSize": 3,
|
||||
"lgSize": 3,
|
||||
"maxFrac": 3,
|
||||
"minFrac": 0,
|
||||
"minInt": 1,
|
||||
"negPre": "-",
|
||||
"negSuf": "",
|
||||
"posPre": "",
|
||||
"posSuf": ""
|
||||
},
|
||||
{
|
||||
"gSize": 3,
|
||||
"lgSize": 3,
|
||||
"maxFrac": 2,
|
||||
"minFrac": 2,
|
||||
"minInt": 1,
|
||||
"negPre": "-",
|
||||
"negSuf": "\u00a0\u00a4",
|
||||
"posPre": "",
|
||||
"posSuf": "\u00a0\u00a4"
|
||||
}
|
||||
]
|
||||
},
|
||||
"id": "dsb-de",
|
||||
"pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
|
||||
});
|
||||
}]);
|
||||
Vendored
+115
@@ -0,0 +1,115 @@
|
||||
'use strict';
|
||||
angular.module("ngLocale", [], ["$provide", function($provide) {
|
||||
var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
|
||||
function getDecimals(n) {
|
||||
n = n + '';
|
||||
var i = n.indexOf('.');
|
||||
return (i == -1) ? 0 : n.length - i - 1;
|
||||
}
|
||||
|
||||
function getVF(n, opt_precision) {
|
||||
var v = opt_precision;
|
||||
|
||||
if (undefined === v) {
|
||||
v = Math.min(getDecimals(n), 3);
|
||||
}
|
||||
|
||||
var base = Math.pow(10, v);
|
||||
var f = ((n * base) | 0) % base;
|
||||
return {v: v, f: f};
|
||||
}
|
||||
|
||||
$provide.value("$locale", {
|
||||
"DATETIME_FORMATS": {
|
||||
"AMPMS": [
|
||||
"dopo\u0142dnja",
|
||||
"w\u00f3tpo\u0142dnja"
|
||||
],
|
||||
"DAY": [
|
||||
"nje\u017aela",
|
||||
"p\u00f3nje\u017aele",
|
||||
"wa\u0142tora",
|
||||
"srjoda",
|
||||
"stw\u00f3rtk",
|
||||
"p\u011btk",
|
||||
"sobota"
|
||||
],
|
||||
"MONTH": [
|
||||
"januara",
|
||||
"februara",
|
||||
"m\u011brca",
|
||||
"apryla",
|
||||
"maja",
|
||||
"junija",
|
||||
"julija",
|
||||
"awgusta",
|
||||
"septembra",
|
||||
"oktobra",
|
||||
"nowembra",
|
||||
"decembra"
|
||||
],
|
||||
"SHORTDAY": [
|
||||
"nje",
|
||||
"p\u00f3n",
|
||||
"wa\u0142",
|
||||
"srj",
|
||||
"stw",
|
||||
"p\u011bt",
|
||||
"sob"
|
||||
],
|
||||
"SHORTMONTH": [
|
||||
"jan.",
|
||||
"feb.",
|
||||
"m\u011br.",
|
||||
"apr.",
|
||||
"maj.",
|
||||
"jun.",
|
||||
"jul.",
|
||||
"awg.",
|
||||
"sep.",
|
||||
"okt.",
|
||||
"now.",
|
||||
"dec."
|
||||
],
|
||||
"fullDate": "EEEE, d. MMMM y",
|
||||
"longDate": "d. MMMM y",
|
||||
"medium": "d.M.y H:mm:ss",
|
||||
"mediumDate": "d.M.y",
|
||||
"mediumTime": "H:mm:ss",
|
||||
"short": "d.M.yy H:mm",
|
||||
"shortDate": "d.M.yy",
|
||||
"shortTime": "H:mm"
|
||||
},
|
||||
"NUMBER_FORMATS": {
|
||||
"CURRENCY_SYM": "\u20ac",
|
||||
"DECIMAL_SEP": ",",
|
||||
"GROUP_SEP": ".",
|
||||
"PATTERNS": [
|
||||
{
|
||||
"gSize": 3,
|
||||
"lgSize": 3,
|
||||
"maxFrac": 3,
|
||||
"minFrac": 0,
|
||||
"minInt": 1,
|
||||
"negPre": "-",
|
||||
"negSuf": "",
|
||||
"posPre": "",
|
||||
"posSuf": ""
|
||||
},
|
||||
{
|
||||
"gSize": 3,
|
||||
"lgSize": 3,
|
||||
"maxFrac": 2,
|
||||
"minFrac": 2,
|
||||
"minInt": 1,
|
||||
"negPre": "-",
|
||||
"negSuf": "\u00a0\u00a4",
|
||||
"posPre": "",
|
||||
"posSuf": "\u00a0\u00a4"
|
||||
}
|
||||
]
|
||||
},
|
||||
"id": "dsb",
|
||||
"pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
|
||||
});
|
||||
}]);
|
||||
+2
-2
@@ -22,8 +22,8 @@ function getVF(n, opt_precision) {
|
||||
$provide.value("$locale", {
|
||||
"DATETIME_FORMATS": {
|
||||
"AMPMS": [
|
||||
"AM",
|
||||
"PM"
|
||||
"am",
|
||||
"pm"
|
||||
],
|
||||
"DAY": [
|
||||
"Sunday",
|
||||
|
||||
Vendored
+2
-2
@@ -22,8 +22,8 @@ function getVF(n, opt_precision) {
|
||||
$provide.value("$locale", {
|
||||
"DATETIME_FORMATS": {
|
||||
"AMPMS": [
|
||||
"AM",
|
||||
"PM"
|
||||
"am",
|
||||
"pm"
|
||||
],
|
||||
"DAY": [
|
||||
"Sunday",
|
||||
|
||||
Vendored
+2
-2
@@ -22,8 +22,8 @@ function getVF(n, opt_precision) {
|
||||
$provide.value("$locale", {
|
||||
"DATETIME_FORMATS": {
|
||||
"AMPMS": [
|
||||
"AM",
|
||||
"PM"
|
||||
"am",
|
||||
"pm"
|
||||
],
|
||||
"DAY": [
|
||||
"Sunday",
|
||||
|
||||
Vendored
+10
-10
@@ -22,8 +22,8 @@ function getVF(n, opt_precision) {
|
||||
$provide.value("$locale", {
|
||||
"DATETIME_FORMATS": {
|
||||
"AMPMS": [
|
||||
"AM",
|
||||
"PM"
|
||||
"am",
|
||||
"pm"
|
||||
],
|
||||
"DAY": [
|
||||
"Sunday",
|
||||
@@ -71,14 +71,14 @@ $provide.value("$locale", {
|
||||
"Nov",
|
||||
"Dec"
|
||||
],
|
||||
"fullDate": "EEEE, MMMM d, y",
|
||||
"longDate": "MMMM d, y",
|
||||
"medium": "MMM d, y h:mm:ss a",
|
||||
"mediumDate": "MMM d, y",
|
||||
"mediumTime": "h:mm:ss a",
|
||||
"short": "M/d/yy h:mm a",
|
||||
"shortDate": "M/d/yy",
|
||||
"shortTime": "h:mm a"
|
||||
"fullDate": "EEEE, d MMMM y",
|
||||
"longDate": "d MMMM y",
|
||||
"medium": "d MMM y HH:mm:ss",
|
||||
"mediumDate": "d MMM y",
|
||||
"mediumTime": "HH:mm:ss",
|
||||
"short": "dd/MM/y HH:mm",
|
||||
"shortDate": "dd/MM/y",
|
||||
"shortTime": "HH:mm"
|
||||
},
|
||||
"NUMBER_FORMATS": {
|
||||
"CURRENCY_SYM": "$",
|
||||
|
||||
Vendored
+10
-10
@@ -22,8 +22,8 @@ function getVF(n, opt_precision) {
|
||||
$provide.value("$locale", {
|
||||
"DATETIME_FORMATS": {
|
||||
"AMPMS": [
|
||||
"AM",
|
||||
"PM"
|
||||
"am",
|
||||
"pm"
|
||||
],
|
||||
"DAY": [
|
||||
"Sunday",
|
||||
@@ -71,14 +71,14 @@ $provide.value("$locale", {
|
||||
"Nov",
|
||||
"Dec"
|
||||
],
|
||||
"fullDate": "EEEE, MMMM d, y",
|
||||
"longDate": "MMMM d, y",
|
||||
"medium": "MMM d, y h:mm:ss a",
|
||||
"mediumDate": "MMM d, y",
|
||||
"mediumTime": "h:mm:ss a",
|
||||
"short": "M/d/yy h:mm a",
|
||||
"shortDate": "M/d/yy",
|
||||
"shortTime": "h:mm a"
|
||||
"fullDate": "EEEE, d MMMM y",
|
||||
"longDate": "d MMMM y",
|
||||
"medium": "d MMM y HH:mm:ss",
|
||||
"mediumDate": "d MMM y",
|
||||
"mediumTime": "HH:mm:ss",
|
||||
"short": "dd/MM/y HH:mm",
|
||||
"shortDate": "dd/MM/y",
|
||||
"shortTime": "HH:mm"
|
||||
},
|
||||
"NUMBER_FORMATS": {
|
||||
"CURRENCY_SYM": "\u00a3",
|
||||
|
||||
Vendored
+10
-10
@@ -22,8 +22,8 @@ function getVF(n, opt_precision) {
|
||||
$provide.value("$locale", {
|
||||
"DATETIME_FORMATS": {
|
||||
"AMPMS": [
|
||||
"AM",
|
||||
"PM"
|
||||
"am",
|
||||
"pm"
|
||||
],
|
||||
"DAY": [
|
||||
"Sunday",
|
||||
@@ -71,14 +71,14 @@ $provide.value("$locale", {
|
||||
"Nov",
|
||||
"Dec"
|
||||
],
|
||||
"fullDate": "EEEE, MMMM d, y",
|
||||
"longDate": "MMMM d, y",
|
||||
"medium": "MMM d, y h:mm:ss a",
|
||||
"mediumDate": "MMM d, y",
|
||||
"mediumTime": "h:mm:ss a",
|
||||
"short": "M/d/yy h:mm a",
|
||||
"shortDate": "M/d/yy",
|
||||
"shortTime": "h:mm a"
|
||||
"fullDate": "EEEE, d MMMM y",
|
||||
"longDate": "d MMMM y",
|
||||
"medium": "d MMM y HH:mm:ss",
|
||||
"mediumDate": "d MMM y",
|
||||
"mediumTime": "HH:mm:ss",
|
||||
"short": "dd/MM/y HH:mm",
|
||||
"shortDate": "dd/MM/y",
|
||||
"shortTime": "HH:mm"
|
||||
},
|
||||
"NUMBER_FORMATS": {
|
||||
"CURRENCY_SYM": "\u00a3",
|
||||
|
||||
Vendored
+10
-10
@@ -22,8 +22,8 @@ function getVF(n, opt_precision) {
|
||||
$provide.value("$locale", {
|
||||
"DATETIME_FORMATS": {
|
||||
"AMPMS": [
|
||||
"AM",
|
||||
"PM"
|
||||
"am",
|
||||
"pm"
|
||||
],
|
||||
"DAY": [
|
||||
"Sunday",
|
||||
@@ -71,14 +71,14 @@ $provide.value("$locale", {
|
||||
"Nov",
|
||||
"Dec"
|
||||
],
|
||||
"fullDate": "EEEE, MMMM d, y",
|
||||
"longDate": "MMMM d, y",
|
||||
"medium": "MMM d, y h:mm:ss a",
|
||||
"mediumDate": "MMM d, y",
|
||||
"mediumTime": "h:mm:ss a",
|
||||
"short": "M/d/yy h:mm a",
|
||||
"shortDate": "M/d/yy",
|
||||
"shortTime": "h:mm a"
|
||||
"fullDate": "EEEE, d MMMM y",
|
||||
"longDate": "d MMMM y",
|
||||
"medium": "d MMM y HH:mm:ss",
|
||||
"mediumDate": "d MMM y",
|
||||
"mediumTime": "HH:mm:ss",
|
||||
"short": "dd/MM/y HH:mm",
|
||||
"shortDate": "dd/MM/y",
|
||||
"shortTime": "HH:mm"
|
||||
},
|
||||
"NUMBER_FORMATS": {
|
||||
"CURRENCY_SYM": "\u00a3",
|
||||
|
||||
Vendored
+8
-8
@@ -22,8 +22,8 @@ function getVF(n, opt_precision) {
|
||||
$provide.value("$locale", {
|
||||
"DATETIME_FORMATS": {
|
||||
"AMPMS": [
|
||||
"AM",
|
||||
"PM"
|
||||
"am",
|
||||
"pm"
|
||||
],
|
||||
"DAY": [
|
||||
"Sunday",
|
||||
@@ -71,13 +71,13 @@ $provide.value("$locale", {
|
||||
"Nov",
|
||||
"Dec"
|
||||
],
|
||||
"fullDate": "EEEE, d MMMM, y",
|
||||
"longDate": "d MMMM, y",
|
||||
"medium": "d MMM, y h:mm:ss a",
|
||||
"mediumDate": "d MMM, y",
|
||||
"fullDate": "EEEE, d MMMM y",
|
||||
"longDate": "d MMMM y",
|
||||
"medium": "d MMM y h:mm:ss a",
|
||||
"mediumDate": "d MMM y",
|
||||
"mediumTime": "h:mm:ss a",
|
||||
"short": "d/M/yy h:mm a",
|
||||
"shortDate": "d/M/yy",
|
||||
"short": "d/M/y h:mm a",
|
||||
"shortDate": "d/M/y",
|
||||
"shortTime": "h:mm a"
|
||||
},
|
||||
"NUMBER_FORMATS": {
|
||||
|
||||
Vendored
+7
-7
@@ -72,13 +72,13 @@ $provide.value("$locale", {
|
||||
"Dec"
|
||||
],
|
||||
"fullDate": "EEEE d MMMM y",
|
||||
"longDate": "MMMM d, y",
|
||||
"medium": "MMM d, y h:mm:ss a",
|
||||
"mediumDate": "MMM d, y",
|
||||
"mediumTime": "h:mm:ss a",
|
||||
"short": "M/d/yy h:mm a",
|
||||
"shortDate": "M/d/yy",
|
||||
"shortTime": "h:mm a"
|
||||
"longDate": "d MMMM y",
|
||||
"medium": "d MMM y HH:mm:ss",
|
||||
"mediumDate": "d MMM y",
|
||||
"mediumTime": "HH:mm:ss",
|
||||
"short": "dd/MM/y HH:mm",
|
||||
"shortDate": "dd/MM/y",
|
||||
"shortTime": "HH:mm"
|
||||
},
|
||||
"NUMBER_FORMATS": {
|
||||
"CURRENCY_SYM": "\u20ac",
|
||||
|
||||
Vendored
+10
-10
@@ -22,8 +22,8 @@ function getVF(n, opt_precision) {
|
||||
$provide.value("$locale", {
|
||||
"DATETIME_FORMATS": {
|
||||
"AMPMS": [
|
||||
"AM",
|
||||
"PM"
|
||||
"am",
|
||||
"pm"
|
||||
],
|
||||
"DAY": [
|
||||
"Sunday",
|
||||
@@ -71,14 +71,14 @@ $provide.value("$locale", {
|
||||
"Nov",
|
||||
"Dec"
|
||||
],
|
||||
"fullDate": "EEEE, MMMM d, y",
|
||||
"longDate": "MMMM d, y",
|
||||
"medium": "MMM d, y h:mm:ss a",
|
||||
"mediumDate": "MMM d, y",
|
||||
"mediumTime": "h:mm:ss a",
|
||||
"short": "M/d/yy h:mm a",
|
||||
"shortDate": "M/d/yy",
|
||||
"shortTime": "h:mm a"
|
||||
"fullDate": "EEEE, d MMMM y",
|
||||
"longDate": "d MMMM y",
|
||||
"medium": "d MMM y HH:mm:ss",
|
||||
"mediumDate": "d MMM y",
|
||||
"mediumTime": "HH:mm:ss",
|
||||
"short": "dd/MM/y HH:mm",
|
||||
"shortDate": "dd/MM/y",
|
||||
"shortTime": "HH:mm"
|
||||
},
|
||||
"NUMBER_FORMATS": {
|
||||
"CURRENCY_SYM": "\u00a3",
|
||||
|
||||
Vendored
+2
-2
@@ -22,8 +22,8 @@ function getVF(n, opt_precision) {
|
||||
$provide.value("$locale", {
|
||||
"DATETIME_FORMATS": {
|
||||
"AMPMS": [
|
||||
"AM",
|
||||
"PM"
|
||||
"am",
|
||||
"pm"
|
||||
],
|
||||
"DAY": [
|
||||
"Sunday",
|
||||
|
||||
Vendored
+10
-10
@@ -22,8 +22,8 @@ function getVF(n, opt_precision) {
|
||||
$provide.value("$locale", {
|
||||
"DATETIME_FORMATS": {
|
||||
"AMPMS": [
|
||||
"AM",
|
||||
"PM"
|
||||
"am",
|
||||
"pm"
|
||||
],
|
||||
"DAY": [
|
||||
"Sunday",
|
||||
@@ -71,14 +71,14 @@ $provide.value("$locale", {
|
||||
"Nov",
|
||||
"Dec"
|
||||
],
|
||||
"fullDate": "EEEE, MMMM d, y",
|
||||
"longDate": "MMMM d, y",
|
||||
"medium": "MMM d, y h:mm:ss a",
|
||||
"mediumDate": "MMM d, y",
|
||||
"mediumTime": "h:mm:ss a",
|
||||
"short": "M/d/yy h:mm a",
|
||||
"shortDate": "M/d/yy",
|
||||
"shortTime": "h:mm a"
|
||||
"fullDate": "EEEE, d MMMM y",
|
||||
"longDate": "d MMMM y",
|
||||
"medium": "d MMM y HH:mm:ss",
|
||||
"mediumDate": "d MMM y",
|
||||
"mediumTime": "HH:mm:ss",
|
||||
"short": "dd/MM/y HH:mm",
|
||||
"shortDate": "dd/MM/y",
|
||||
"shortTime": "HH:mm"
|
||||
},
|
||||
"NUMBER_FORMATS": {
|
||||
"CURRENCY_SYM": "$",
|
||||
|
||||
Vendored
+10
-10
@@ -22,8 +22,8 @@ function getVF(n, opt_precision) {
|
||||
$provide.value("$locale", {
|
||||
"DATETIME_FORMATS": {
|
||||
"AMPMS": [
|
||||
"AM",
|
||||
"PM"
|
||||
"am",
|
||||
"pm"
|
||||
],
|
||||
"DAY": [
|
||||
"Sunday",
|
||||
@@ -71,14 +71,14 @@ $provide.value("$locale", {
|
||||
"Nov",
|
||||
"Dec"
|
||||
],
|
||||
"fullDate": "EEEE, MMMM d, y",
|
||||
"longDate": "MMMM d, y",
|
||||
"medium": "MMM d, y h:mm:ss a",
|
||||
"mediumDate": "MMM d, y",
|
||||
"mediumTime": "h:mm:ss a",
|
||||
"short": "M/d/yy h:mm a",
|
||||
"shortDate": "M/d/yy",
|
||||
"shortTime": "h:mm a"
|
||||
"fullDate": "EEEE, d MMMM y",
|
||||
"longDate": "d MMMM y",
|
||||
"medium": "d MMM y HH:mm:ss",
|
||||
"mediumDate": "d MMM y",
|
||||
"mediumTime": "HH:mm:ss",
|
||||
"short": "dd/MM/y HH:mm",
|
||||
"shortDate": "dd/MM/y",
|
||||
"shortTime": "HH:mm"
|
||||
},
|
||||
"NUMBER_FORMATS": {
|
||||
"CURRENCY_SYM": "\u00a3",
|
||||
|
||||
Vendored
+10
-10
@@ -22,8 +22,8 @@ function getVF(n, opt_precision) {
|
||||
$provide.value("$locale", {
|
||||
"DATETIME_FORMATS": {
|
||||
"AMPMS": [
|
||||
"AM",
|
||||
"PM"
|
||||
"am",
|
||||
"pm"
|
||||
],
|
||||
"DAY": [
|
||||
"Sunday",
|
||||
@@ -71,14 +71,14 @@ $provide.value("$locale", {
|
||||
"Nov",
|
||||
"Dec"
|
||||
],
|
||||
"fullDate": "EEEE, MMMM d, y",
|
||||
"longDate": "MMMM d, y",
|
||||
"medium": "MMM d, y h:mm:ss a",
|
||||
"mediumDate": "MMM d, y",
|
||||
"mediumTime": "h:mm:ss a",
|
||||
"short": "M/d/yy h:mm a",
|
||||
"shortDate": "M/d/yy",
|
||||
"shortTime": "h:mm a"
|
||||
"fullDate": "EEEE, d MMMM y",
|
||||
"longDate": "d MMMM y",
|
||||
"medium": "d MMM y HH:mm:ss",
|
||||
"mediumDate": "d MMM y",
|
||||
"mediumTime": "HH:mm:ss",
|
||||
"short": "dd/MM/y HH:mm",
|
||||
"shortDate": "dd/MM/y",
|
||||
"shortTime": "HH:mm"
|
||||
},
|
||||
"NUMBER_FORMATS": {
|
||||
"CURRENCY_SYM": "MOP",
|
||||
|
||||
Vendored
+6
-6
@@ -22,8 +22,8 @@ function getVF(n, opt_precision) {
|
||||
$provide.value("$locale", {
|
||||
"DATETIME_FORMATS": {
|
||||
"AMPMS": [
|
||||
"AM",
|
||||
"PM"
|
||||
"am",
|
||||
"pm"
|
||||
],
|
||||
"DAY": [
|
||||
"Sunday",
|
||||
@@ -73,12 +73,12 @@ $provide.value("$locale", {
|
||||
],
|
||||
"fullDate": "EEEE, d MMMM y",
|
||||
"longDate": "dd MMMM y",
|
||||
"medium": "dd MMM y h:mm:ss a",
|
||||
"medium": "dd MMM y HH:mm:ss",
|
||||
"mediumDate": "dd MMM y",
|
||||
"mediumTime": "h:mm:ss a",
|
||||
"short": "dd/MM/y h:mm a",
|
||||
"mediumTime": "HH:mm:ss",
|
||||
"short": "dd/MM/y HH:mm",
|
||||
"shortDate": "dd/MM/y",
|
||||
"shortTime": "h:mm a"
|
||||
"shortTime": "HH:mm"
|
||||
},
|
||||
"NUMBER_FORMATS": {
|
||||
"CURRENCY_SYM": "\u20ac",
|
||||
|
||||
Vendored
+115
@@ -0,0 +1,115 @@
|
||||
'use strict';
|
||||
angular.module("ngLocale", [], ["$provide", function($provide) {
|
||||
var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
|
||||
function getDecimals(n) {
|
||||
n = n + '';
|
||||
var i = n.indexOf('.');
|
||||
return (i == -1) ? 0 : n.length - i - 1;
|
||||
}
|
||||
|
||||
function getVF(n, opt_precision) {
|
||||
var v = opt_precision;
|
||||
|
||||
if (undefined === v) {
|
||||
v = Math.min(getDecimals(n), 3);
|
||||
}
|
||||
|
||||
var base = Math.pow(10, v);
|
||||
var f = ((n * base) | 0) % base;
|
||||
return {v: v, f: f};
|
||||
}
|
||||
|
||||
$provide.value("$locale", {
|
||||
"DATETIME_FORMATS": {
|
||||
"AMPMS": [
|
||||
"AM",
|
||||
"PM"
|
||||
],
|
||||
"DAY": [
|
||||
"Sunday",
|
||||
"Monday",
|
||||
"Tuesday",
|
||||
"Wednesday",
|
||||
"Thursday",
|
||||
"Friday",
|
||||
"Saturday"
|
||||
],
|
||||
"MONTH": [
|
||||
"January",
|
||||
"February",
|
||||
"March",
|
||||
"April",
|
||||
"May",
|
||||
"June",
|
||||
"July",
|
||||
"August",
|
||||
"September",
|
||||
"October",
|
||||
"November",
|
||||
"December"
|
||||
],
|
||||
"SHORTDAY": [
|
||||
"Sun",
|
||||
"Mon",
|
||||
"Tue",
|
||||
"Wed",
|
||||
"Thu",
|
||||
"Fri",
|
||||
"Sat"
|
||||
],
|
||||
"SHORTMONTH": [
|
||||
"Jan",
|
||||
"Feb",
|
||||
"Mar",
|
||||
"Apr",
|
||||
"May",
|
||||
"Jun",
|
||||
"Jul",
|
||||
"Aug",
|
||||
"Sep",
|
||||
"Oct",
|
||||
"Nov",
|
||||
"Dec"
|
||||
],
|
||||
"fullDate": "EEEE, MMMM d, y",
|
||||
"longDate": "MMMM d, y",
|
||||
"medium": "MMM d, y h:mm:ss a",
|
||||
"mediumDate": "MMM d, y",
|
||||
"mediumTime": "h:mm:ss a",
|
||||
"short": "M/d/yy h:mm a",
|
||||
"shortDate": "M/d/yy",
|
||||
"shortTime": "h:mm a"
|
||||
},
|
||||
"NUMBER_FORMATS": {
|
||||
"CURRENCY_SYM": "RM",
|
||||
"DECIMAL_SEP": ".",
|
||||
"GROUP_SEP": ",",
|
||||
"PATTERNS": [
|
||||
{
|
||||
"gSize": 3,
|
||||
"lgSize": 3,
|
||||
"maxFrac": 3,
|
||||
"minFrac": 0,
|
||||
"minInt": 1,
|
||||
"negPre": "-",
|
||||
"negSuf": "",
|
||||
"posPre": "",
|
||||
"posSuf": ""
|
||||
},
|
||||
{
|
||||
"gSize": 3,
|
||||
"lgSize": 3,
|
||||
"maxFrac": 2,
|
||||
"minFrac": 2,
|
||||
"minInt": 1,
|
||||
"negPre": "\u00a4-",
|
||||
"negSuf": "",
|
||||
"posPre": "\u00a4",
|
||||
"posSuf": ""
|
||||
}
|
||||
]
|
||||
},
|
||||
"id": "en-my",
|
||||
"pluralCat": function(n, opt_precision) { var i = n | 0; var vf = getVF(n, opt_precision); if (i == 1 && vf.v == 0) { return PLURAL_CATEGORY.ONE; } return PLURAL_CATEGORY.OTHER;}
|
||||
});
|
||||
}]);
|
||||
Vendored
+2
-2
@@ -22,8 +22,8 @@ function getVF(n, opt_precision) {
|
||||
$provide.value("$locale", {
|
||||
"DATETIME_FORMATS": {
|
||||
"AMPMS": [
|
||||
"AM",
|
||||
"PM"
|
||||
"am",
|
||||
"pm"
|
||||
],
|
||||
"DAY": [
|
||||
"Sunday",
|
||||
|
||||
Vendored
+2
-2
@@ -22,8 +22,8 @@ function getVF(n, opt_precision) {
|
||||
$provide.value("$locale", {
|
||||
"DATETIME_FORMATS": {
|
||||
"AMPMS": [
|
||||
"AM",
|
||||
"PM"
|
||||
"am",
|
||||
"pm"
|
||||
],
|
||||
"DAY": [
|
||||
"Sunday",
|
||||
|
||||
Vendored
+2
-2
@@ -22,8 +22,8 @@ function getVF(n, opt_precision) {
|
||||
$provide.value("$locale", {
|
||||
"DATETIME_FORMATS": {
|
||||
"AMPMS": [
|
||||
"AM",
|
||||
"PM"
|
||||
"am",
|
||||
"pm"
|
||||
],
|
||||
"DAY": [
|
||||
"Sunday",
|
||||
|
||||
Vendored
+10
-10
@@ -22,8 +22,8 @@ function getVF(n, opt_precision) {
|
||||
$provide.value("$locale", {
|
||||
"DATETIME_FORMATS": {
|
||||
"AMPMS": [
|
||||
"AM",
|
||||
"PM"
|
||||
"am",
|
||||
"pm"
|
||||
],
|
||||
"DAY": [
|
||||
"Sunday",
|
||||
@@ -71,14 +71,14 @@ $provide.value("$locale", {
|
||||
"Nov",
|
||||
"Dec"
|
||||
],
|
||||
"fullDate": "EEEE, MMMM d, y",
|
||||
"longDate": "MMMM d, y",
|
||||
"medium": "MMM d, y h:mm:ss a",
|
||||
"mediumDate": "MMM d, y",
|
||||
"mediumTime": "h:mm:ss a",
|
||||
"short": "M/d/yy h:mm a",
|
||||
"shortDate": "M/d/yy",
|
||||
"shortTime": "h:mm a"
|
||||
"fullDate": "EEEE, d MMMM y",
|
||||
"longDate": "d MMMM y",
|
||||
"medium": "d MMM y HH:mm:ss",
|
||||
"mediumDate": "d MMM y",
|
||||
"mediumTime": "HH:mm:ss",
|
||||
"short": "dd/MM/y HH:mm",
|
||||
"shortDate": "dd/MM/y",
|
||||
"shortTime": "HH:mm"
|
||||
},
|
||||
"NUMBER_FORMATS": {
|
||||
"CURRENCY_SYM": "\u00a3",
|
||||
|
||||
Vendored
+10
-10
@@ -22,8 +22,8 @@ function getVF(n, opt_precision) {
|
||||
$provide.value("$locale", {
|
||||
"DATETIME_FORMATS": {
|
||||
"AMPMS": [
|
||||
"AM",
|
||||
"PM"
|
||||
"am",
|
||||
"pm"
|
||||
],
|
||||
"DAY": [
|
||||
"Sunday",
|
||||
@@ -71,14 +71,14 @@ $provide.value("$locale", {
|
||||
"Nov",
|
||||
"Dec"
|
||||
],
|
||||
"fullDate": "EEEE, MMMM d, y",
|
||||
"longDate": "MMMM d, y",
|
||||
"medium": "MMM d, y h:mm:ss a",
|
||||
"mediumDate": "MMM d, y",
|
||||
"mediumTime": "h:mm:ss a",
|
||||
"short": "M/d/yy h:mm a",
|
||||
"shortDate": "M/d/yy",
|
||||
"shortTime": "h:mm a"
|
||||
"fullDate": "EEEE, d MMMM y",
|
||||
"longDate": "d MMMM y",
|
||||
"medium": "d MMM y HH:mm:ss",
|
||||
"mediumDate": "d MMM y",
|
||||
"mediumTime": "HH:mm:ss",
|
||||
"short": "dd/MM/y HH:mm",
|
||||
"shortDate": "dd/MM/y",
|
||||
"shortTime": "HH:mm"
|
||||
},
|
||||
"NUMBER_FORMATS": {
|
||||
"CURRENCY_SYM": "$",
|
||||
|
||||
+9
-9
@@ -4,8 +4,8 @@ var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "
|
||||
$provide.value("$locale", {
|
||||
"DATETIME_FORMATS": {
|
||||
"AMPMS": [
|
||||
"a. m.",
|
||||
"p. m."
|
||||
"a.\u00a0m.",
|
||||
"p.\u00a0m."
|
||||
],
|
||||
"DAY": [
|
||||
"domingo",
|
||||
@@ -25,7 +25,7 @@ $provide.value("$locale", {
|
||||
"junio",
|
||||
"julio",
|
||||
"agosto",
|
||||
"septiembre",
|
||||
"setiembre",
|
||||
"octubre",
|
||||
"noviembre",
|
||||
"diciembre"
|
||||
@@ -48,19 +48,19 @@ $provide.value("$locale", {
|
||||
"jun.",
|
||||
"jul.",
|
||||
"ago.",
|
||||
"sept.",
|
||||
"set.",
|
||||
"oct.",
|
||||
"nov.",
|
||||
"dic."
|
||||
],
|
||||
"fullDate": "EEEE, d 'de' MMMM 'de' y",
|
||||
"longDate": "d 'de' MMMM 'de' y",
|
||||
"medium": "d/M/y H:mm:ss",
|
||||
"mediumDate": "d/M/y",
|
||||
"mediumTime": "H:mm:ss",
|
||||
"short": "d/M/yy H:mm",
|
||||
"medium": "d 'de' MMM 'de' y h:mm:ss a",
|
||||
"mediumDate": "d 'de' MMM 'de' y",
|
||||
"mediumTime": "h:mm:ss a",
|
||||
"short": "d/M/yy h:mm a",
|
||||
"shortDate": "d/M/yy",
|
||||
"shortTime": "H:mm"
|
||||
"shortTime": "h:mm a"
|
||||
},
|
||||
"NUMBER_FORMATS": {
|
||||
"CURRENCY_SYM": "$",
|
||||
|
||||
Vendored
+13
-13
@@ -4,8 +4,8 @@ var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "
|
||||
$provide.value("$locale", {
|
||||
"DATETIME_FORMATS": {
|
||||
"AMPMS": [
|
||||
"a. m.",
|
||||
"p. m."
|
||||
"a.\u00a0m.",
|
||||
"p.\u00a0m."
|
||||
],
|
||||
"DAY": [
|
||||
"domingo",
|
||||
@@ -25,7 +25,7 @@ $provide.value("$locale", {
|
||||
"junio",
|
||||
"julio",
|
||||
"agosto",
|
||||
"septiembre",
|
||||
"setiembre",
|
||||
"octubre",
|
||||
"noviembre",
|
||||
"diciembre"
|
||||
@@ -48,19 +48,19 @@ $provide.value("$locale", {
|
||||
"jun.",
|
||||
"jul.",
|
||||
"ago.",
|
||||
"sept.",
|
||||
"set.",
|
||||
"oct.",
|
||||
"nov.",
|
||||
"dic."
|
||||
],
|
||||
"fullDate": "EEEE, d 'de' MMMM 'de' y",
|
||||
"longDate": "d 'de' MMMM 'de' y",
|
||||
"medium": "d/M/y H:mm:ss",
|
||||
"mediumDate": "d/M/y",
|
||||
"mediumTime": "H:mm:ss",
|
||||
"short": "d/M/yy H:mm",
|
||||
"medium": "d 'de' MMM 'de' y h:mm:ss a",
|
||||
"mediumDate": "d 'de' MMM 'de' y",
|
||||
"mediumTime": "h:mm:ss a",
|
||||
"short": "d/M/yy h:mm a",
|
||||
"shortDate": "d/M/yy",
|
||||
"shortTime": "H:mm"
|
||||
"shortTime": "h:mm a"
|
||||
},
|
||||
"NUMBER_FORMATS": {
|
||||
"CURRENCY_SYM": "$",
|
||||
@@ -84,10 +84,10 @@ $provide.value("$locale", {
|
||||
"maxFrac": 2,
|
||||
"minFrac": 2,
|
||||
"minInt": 1,
|
||||
"negPre": "-",
|
||||
"negSuf": "\u00a0\u00a4",
|
||||
"posPre": "",
|
||||
"posSuf": "\u00a0\u00a4"
|
||||
"negPre": "\u00a4-",
|
||||
"negSuf": "",
|
||||
"posPre": "\u00a4",
|
||||
"posSuf": ""
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
Vendored
+13
-13
@@ -4,8 +4,8 @@ var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "
|
||||
$provide.value("$locale", {
|
||||
"DATETIME_FORMATS": {
|
||||
"AMPMS": [
|
||||
"a. m.",
|
||||
"p. m."
|
||||
"a.\u00a0m.",
|
||||
"p.\u00a0m."
|
||||
],
|
||||
"DAY": [
|
||||
"domingo",
|
||||
@@ -25,7 +25,7 @@ $provide.value("$locale", {
|
||||
"junio",
|
||||
"julio",
|
||||
"agosto",
|
||||
"septiembre",
|
||||
"setiembre",
|
||||
"octubre",
|
||||
"noviembre",
|
||||
"diciembre"
|
||||
@@ -48,19 +48,19 @@ $provide.value("$locale", {
|
||||
"jun.",
|
||||
"jul.",
|
||||
"ago.",
|
||||
"sept.",
|
||||
"set.",
|
||||
"oct.",
|
||||
"nov.",
|
||||
"dic."
|
||||
],
|
||||
"fullDate": "EEEE, d 'de' MMMM 'de' y",
|
||||
"longDate": "d 'de' MMMM 'de' y",
|
||||
"medium": "d/M/y H:mm:ss",
|
||||
"mediumDate": "d/M/y",
|
||||
"mediumTime": "H:mm:ss",
|
||||
"short": "d/M/yy H:mm",
|
||||
"medium": "d 'de' MMM 'de' y h:mm:ss a",
|
||||
"mediumDate": "d 'de' MMM 'de' y",
|
||||
"mediumTime": "h:mm:ss a",
|
||||
"short": "d/M/yy h:mm a",
|
||||
"shortDate": "d/M/yy",
|
||||
"shortTime": "H:mm"
|
||||
"shortTime": "h:mm a"
|
||||
},
|
||||
"NUMBER_FORMATS": {
|
||||
"CURRENCY_SYM": "Bs",
|
||||
@@ -84,10 +84,10 @@ $provide.value("$locale", {
|
||||
"maxFrac": 2,
|
||||
"minFrac": 2,
|
||||
"minInt": 1,
|
||||
"negPre": "-",
|
||||
"negSuf": "\u00a0\u00a4",
|
||||
"posPre": "",
|
||||
"posSuf": "\u00a0\u00a4"
|
||||
"negPre": "\u00a4-",
|
||||
"negSuf": "",
|
||||
"posPre": "\u00a4",
|
||||
"posSuf": ""
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
Vendored
+8
-8
@@ -4,8 +4,8 @@ var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "
|
||||
$provide.value("$locale", {
|
||||
"DATETIME_FORMATS": {
|
||||
"AMPMS": [
|
||||
"a. m.",
|
||||
"p. m."
|
||||
"a.\u00a0m.",
|
||||
"p.\u00a0m."
|
||||
],
|
||||
"DAY": [
|
||||
"domingo",
|
||||
@@ -25,7 +25,7 @@ $provide.value("$locale", {
|
||||
"junio",
|
||||
"julio",
|
||||
"agosto",
|
||||
"septiembre",
|
||||
"setiembre",
|
||||
"octubre",
|
||||
"noviembre",
|
||||
"diciembre"
|
||||
@@ -48,19 +48,19 @@ $provide.value("$locale", {
|
||||
"jun.",
|
||||
"jul.",
|
||||
"ago.",
|
||||
"sept.",
|
||||
"set.",
|
||||
"oct.",
|
||||
"nov.",
|
||||
"dic."
|
||||
],
|
||||
"fullDate": "EEEE, d 'de' MMMM 'de' y",
|
||||
"longDate": "d 'de' MMMM 'de' y",
|
||||
"medium": "dd-MM-y H:mm:ss",
|
||||
"medium": "dd-MM-y h:mm:ss a",
|
||||
"mediumDate": "dd-MM-y",
|
||||
"mediumTime": "H:mm:ss",
|
||||
"short": "dd-MM-yy H:mm",
|
||||
"mediumTime": "h:mm:ss a",
|
||||
"short": "dd-MM-yy h:mm a",
|
||||
"shortDate": "dd-MM-yy",
|
||||
"shortTime": "H:mm"
|
||||
"shortTime": "h:mm a"
|
||||
},
|
||||
"NUMBER_FORMATS": {
|
||||
"CURRENCY_SYM": "$",
|
||||
|
||||
Vendored
+8
-8
@@ -4,8 +4,8 @@ var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "
|
||||
$provide.value("$locale", {
|
||||
"DATETIME_FORMATS": {
|
||||
"AMPMS": [
|
||||
"a. m.",
|
||||
"p. m."
|
||||
"a.\u00a0m.",
|
||||
"p.\u00a0m."
|
||||
],
|
||||
"DAY": [
|
||||
"domingo",
|
||||
@@ -25,7 +25,7 @@ $provide.value("$locale", {
|
||||
"junio",
|
||||
"julio",
|
||||
"agosto",
|
||||
"septiembre",
|
||||
"setiembre",
|
||||
"octubre",
|
||||
"noviembre",
|
||||
"diciembre"
|
||||
@@ -48,7 +48,7 @@ $provide.value("$locale", {
|
||||
"jun.",
|
||||
"jul.",
|
||||
"ago.",
|
||||
"sept.",
|
||||
"set.",
|
||||
"oct.",
|
||||
"nov.",
|
||||
"dic."
|
||||
@@ -84,10 +84,10 @@ $provide.value("$locale", {
|
||||
"maxFrac": 2,
|
||||
"minFrac": 2,
|
||||
"minInt": 1,
|
||||
"negPre": "-",
|
||||
"negSuf": "\u00a0\u00a4",
|
||||
"posPre": "",
|
||||
"posSuf": "\u00a0\u00a4"
|
||||
"negPre": "\u00a4-",
|
||||
"negSuf": "",
|
||||
"posPre": "\u00a4",
|
||||
"posSuf": ""
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
Vendored
+13
-13
@@ -4,8 +4,8 @@ var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "
|
||||
$provide.value("$locale", {
|
||||
"DATETIME_FORMATS": {
|
||||
"AMPMS": [
|
||||
"a. m.",
|
||||
"p. m."
|
||||
"a.\u00a0m.",
|
||||
"p.\u00a0m."
|
||||
],
|
||||
"DAY": [
|
||||
"domingo",
|
||||
@@ -25,7 +25,7 @@ $provide.value("$locale", {
|
||||
"junio",
|
||||
"julio",
|
||||
"agosto",
|
||||
"septiembre",
|
||||
"setiembre",
|
||||
"octubre",
|
||||
"noviembre",
|
||||
"diciembre"
|
||||
@@ -48,19 +48,19 @@ $provide.value("$locale", {
|
||||
"jun.",
|
||||
"jul.",
|
||||
"ago.",
|
||||
"sept.",
|
||||
"set.",
|
||||
"oct.",
|
||||
"nov.",
|
||||
"dic."
|
||||
],
|
||||
"fullDate": "EEEE, d 'de' MMMM 'de' y",
|
||||
"longDate": "d 'de' MMMM 'de' y",
|
||||
"medium": "d/M/y H:mm:ss",
|
||||
"mediumDate": "d/M/y",
|
||||
"mediumTime": "H:mm:ss",
|
||||
"short": "d/M/yy H:mm",
|
||||
"medium": "d 'de' MMM 'de' y h:mm:ss a",
|
||||
"mediumDate": "d 'de' MMM 'de' y",
|
||||
"mediumTime": "h:mm:ss a",
|
||||
"short": "d/M/yy h:mm a",
|
||||
"shortDate": "d/M/yy",
|
||||
"shortTime": "H:mm"
|
||||
"shortTime": "h:mm a"
|
||||
},
|
||||
"NUMBER_FORMATS": {
|
||||
"CURRENCY_SYM": "\u20a1",
|
||||
@@ -84,10 +84,10 @@ $provide.value("$locale", {
|
||||
"maxFrac": 2,
|
||||
"minFrac": 2,
|
||||
"minInt": 1,
|
||||
"negPre": "-",
|
||||
"negSuf": "\u00a0\u00a4",
|
||||
"posPre": "",
|
||||
"posSuf": "\u00a0\u00a4"
|
||||
"negPre": "\u00a4-",
|
||||
"negSuf": "",
|
||||
"posPre": "\u00a4",
|
||||
"posSuf": ""
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
Vendored
+15
-15
@@ -4,8 +4,8 @@ var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "
|
||||
$provide.value("$locale", {
|
||||
"DATETIME_FORMATS": {
|
||||
"AMPMS": [
|
||||
"a. m.",
|
||||
"p. m."
|
||||
"a.\u00a0m.",
|
||||
"p.\u00a0m."
|
||||
],
|
||||
"DAY": [
|
||||
"domingo",
|
||||
@@ -25,7 +25,7 @@ $provide.value("$locale", {
|
||||
"junio",
|
||||
"julio",
|
||||
"agosto",
|
||||
"septiembre",
|
||||
"setiembre",
|
||||
"octubre",
|
||||
"noviembre",
|
||||
"diciembre"
|
||||
@@ -48,24 +48,24 @@ $provide.value("$locale", {
|
||||
"jun.",
|
||||
"jul.",
|
||||
"ago.",
|
||||
"sept.",
|
||||
"set.",
|
||||
"oct.",
|
||||
"nov.",
|
||||
"dic."
|
||||
],
|
||||
"fullDate": "EEEE, d 'de' MMMM 'de' y",
|
||||
"longDate": "d 'de' MMMM 'de' y",
|
||||
"medium": "d/M/y H:mm:ss",
|
||||
"mediumDate": "d/M/y",
|
||||
"mediumTime": "H:mm:ss",
|
||||
"short": "d/M/yy H:mm",
|
||||
"medium": "d 'de' MMM 'de' y h:mm:ss a",
|
||||
"mediumDate": "d 'de' MMM 'de' y",
|
||||
"mediumTime": "h:mm:ss a",
|
||||
"short": "d/M/yy h:mm a",
|
||||
"shortDate": "d/M/yy",
|
||||
"shortTime": "H:mm"
|
||||
"shortTime": "h:mm a"
|
||||
},
|
||||
"NUMBER_FORMATS": {
|
||||
"CURRENCY_SYM": "$",
|
||||
"DECIMAL_SEP": ",",
|
||||
"GROUP_SEP": ".",
|
||||
"DECIMAL_SEP": ".",
|
||||
"GROUP_SEP": ",",
|
||||
"PATTERNS": [
|
||||
{
|
||||
"gSize": 3,
|
||||
@@ -84,10 +84,10 @@ $provide.value("$locale", {
|
||||
"maxFrac": 2,
|
||||
"minFrac": 2,
|
||||
"minInt": 1,
|
||||
"negPre": "-",
|
||||
"negSuf": "\u00a0\u00a4",
|
||||
"posPre": "",
|
||||
"posSuf": "\u00a0\u00a4"
|
||||
"negPre": "\u00a4-",
|
||||
"negSuf": "",
|
||||
"posPre": "\u00a4",
|
||||
"posSuf": ""
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user